From 035ac7dd4223cb699906ff003a351065ba427ffe Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Fri, 7 Dec 2018 11:49:28 +0100 Subject: [PATCH 01/96] Experiments in XP --- .gitignore | 8 ++- bin/admin/tools/.gitkeep | 0 bin/admin/widgets/.gitkeep | 0 bin/app/App.jsx | 10 ---- bin/app/index.js | 7 --- bin/application.svg | 12 ----- bin/application.xml | 3 -- bin/assets/.gitkeep | 0 bin/index.html | 11 ----- bin/lib/.gitkeep | 0 bin/main.js | 37 -------------- bin/services/.gitkeep | 0 bin/site/content-types/.gitkeep | 0 bin/site/error/.gitkeep | 0 bin/site/filters/.gitkeep | 0 bin/site/i18n/.gitkeep | 0 bin/site/layouts/.gitkeep | 0 bin/site/mixins/.gitkeep | 0 bin/site/pages/.gitkeep | 0 bin/site/parts/.gitkeep | 0 bin/site/site.xml | 4 -- bin/views/.gitkeep | 0 .../resources/app/actions/homePageActions.js | 18 ------- src/main/resources/app/configureStore.js | 17 ------- src/main/resources/app/containers/homePage.js | 49 ------------------- .../resources/app/containers/notFoundPage.js | 11 ----- .../resources/app/reducers/exampleReducer.js | 20 -------- src/main/resources/app/reducers/index.js | 8 --- 28 files changed, 7 insertions(+), 208 deletions(-) delete mode 100644 bin/admin/tools/.gitkeep delete mode 100644 bin/admin/widgets/.gitkeep delete mode 100644 bin/app/App.jsx delete mode 100644 bin/app/index.js delete mode 100644 bin/application.svg delete mode 100644 bin/application.xml delete mode 100644 bin/assets/.gitkeep delete mode 100644 bin/index.html delete mode 100644 bin/lib/.gitkeep delete mode 100644 bin/main.js delete mode 100644 bin/services/.gitkeep delete mode 100644 bin/site/content-types/.gitkeep delete mode 100644 bin/site/error/.gitkeep delete mode 100644 bin/site/filters/.gitkeep delete mode 100644 bin/site/i18n/.gitkeep delete mode 100644 bin/site/layouts/.gitkeep delete mode 100644 bin/site/mixins/.gitkeep delete mode 100644 bin/site/pages/.gitkeep delete mode 100644 bin/site/parts/.gitkeep delete mode 100644 bin/site/site.xml delete mode 100644 bin/views/.gitkeep delete mode 100644 src/main/resources/app/actions/homePageActions.js delete mode 100644 src/main/resources/app/configureStore.js delete mode 100644 src/main/resources/app/containers/homePage.js delete mode 100644 src/main/resources/app/containers/notFoundPage.js delete mode 100644 src/main/resources/app/reducers/exampleReducer.js delete mode 100644 src/main/resources/app/reducers/index.js diff --git a/.gitignore b/.gitignore index aec40e8c..bf420c9b 100644 --- a/.gitignore +++ b/.gitignore @@ -90,4 +90,10 @@ crashlytics-build.properties # Node modules node_modules/ -bin/ \ No newline at end of file +bin/ + +### VS code ### +_vscode/ +.settings/ +.classpath +.project diff --git a/bin/admin/tools/.gitkeep b/bin/admin/tools/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/bin/admin/widgets/.gitkeep b/bin/admin/widgets/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/bin/app/App.jsx b/bin/app/App.jsx deleted file mode 100644 index 27c04dd2..00000000 --- a/bin/app/App.jsx +++ /dev/null @@ -1,10 +0,0 @@ -import React, {Component} from 'react'; - -export default class App extends Component { - - render () { - return
- Hello, React! -
- } -} \ No newline at end of file diff --git a/bin/app/index.js b/bin/app/index.js deleted file mode 100644 index 17125da3..00000000 --- a/bin/app/index.js +++ /dev/null @@ -1,7 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; - -// main app -import App from './App'; - -ReactDOM.render(, document.getElementById('app')) diff --git a/bin/application.svg b/bin/application.svg deleted file mode 100644 index 2e22f700..00000000 --- a/bin/application.svg +++ /dev/null @@ -1,12 +0,0 @@ - - Artboard 3 - Created with Sketch. - - - - - - - - - \ No newline at end of file diff --git a/bin/application.xml b/bin/application.xml deleted file mode 100644 index 31c00e86..00000000 --- a/bin/application.xml +++ /dev/null @@ -1,3 +0,0 @@ - - Starter for using ReactJS with Enonic XP - \ No newline at end of file diff --git a/bin/assets/.gitkeep b/bin/assets/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/bin/index.html b/bin/index.html deleted file mode 100644 index 037daef0..00000000 --- a/bin/index.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - Ideal React Seed - - - -
hello html!
- - - \ No newline at end of file diff --git a/bin/lib/.gitkeep b/bin/lib/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/bin/main.js b/bin/main.js deleted file mode 100644 index 75017872..00000000 --- a/bin/main.js +++ /dev/null @@ -1,37 +0,0 @@ -var libIo = require('/lib/xp/io'); -var portalLib = require('/lib/xp/portal'); -var router = require('/lib/router')(); -var mustache = require('/lib/xp/mustache'); - -function getAppUrl() { - return portalLib.url({path:'/app/' + app.name}) + '/'; -} - -function getPage() { - var test = libIo.getResource(resolve('./index.html')) - var stream = test.getStream() - var page = libIo.readText(stream); - return page -} - -function getBundle(){ - var appUrl = getAppUrl(); - return { - contentType: 'application/javascript', - body: mustache.render(resolve('/assets/bundle.js'), { - appUrl: appUrl, - }) - }; - -} - -router.get('/', getPage); -router.get('/bundle.js', getBundle); - -exports.get = function (req) { - - return { - body: router.dispatch(req) - } -} - diff --git a/bin/services/.gitkeep b/bin/services/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/bin/site/content-types/.gitkeep b/bin/site/content-types/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/bin/site/error/.gitkeep b/bin/site/error/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/bin/site/filters/.gitkeep b/bin/site/filters/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/bin/site/i18n/.gitkeep b/bin/site/i18n/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/bin/site/layouts/.gitkeep b/bin/site/layouts/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/bin/site/mixins/.gitkeep b/bin/site/mixins/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/bin/site/pages/.gitkeep b/bin/site/pages/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/bin/site/parts/.gitkeep b/bin/site/parts/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/bin/site/site.xml b/bin/site/site.xml deleted file mode 100644 index 6efc7e89..00000000 --- a/bin/site/site.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/bin/views/.gitkeep b/bin/views/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/src/main/resources/app/actions/homePageActions.js b/src/main/resources/app/actions/homePageActions.js deleted file mode 100644 index 53c80d00..00000000 --- a/src/main/resources/app/actions/homePageActions.js +++ /dev/null @@ -1,18 +0,0 @@ -// fetch api -export const actions = { - doSomething: 'DO_SOMETHING' -} - -function something(arg){ - return { - type: actions.doSomething, - data: arg - } -} - - -export function doSomething(dispatch, arg){ - //promise - dispatch(something(arg)) -} - \ No newline at end of file diff --git a/src/main/resources/app/configureStore.js b/src/main/resources/app/configureStore.js deleted file mode 100644 index ceb30f87..00000000 --- a/src/main/resources/app/configureStore.js +++ /dev/null @@ -1,17 +0,0 @@ -import { createStore, applyMiddleware } from 'redux'; -import { fromJS } from 'immutable'; -// import { routerMiddleware } from 'react-router-redux'; - -import createRootReducer from './reducers/index'; - - -export default function configureStore(initialState = {}, history) { - - const store = createStore( - createRootReducer(), - fromJS(initialState) - // middelware - ); - - return store; - } \ No newline at end of file diff --git a/src/main/resources/app/containers/homePage.js b/src/main/resources/app/containers/homePage.js deleted file mode 100644 index 8e3b34a1..00000000 --- a/src/main/resources/app/containers/homePage.js +++ /dev/null @@ -1,49 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; - -import { connect } from 'react-redux'; -import { NavLink } from 'react-router-dom'; - -import * as homePageActions from '../actions/homePageActions' - -class HomePage extends React.PureComponent { - - constructor(props){ - super(props) - } - - componentDidMount(){ - } - - render() { - return ( -
- HomePage - data: {this.props.data} -
- - ); - } -} - -HomePage.propTypes = { - data: PropTypes.string -}; - -HomePage.defaultProps = { -} - - -function mapStateToProps(state){ - return { - data: state.get('example').get('data') - }; -} - -function mapDispatchToProps(dispatch) { - return { - doSomething: (arg) => {homePageActions.doSomething(dispatch,arg)}, - }; -} - - -export default connect(mapStateToProps, mapDispatchToProps)(HomePage) diff --git a/src/main/resources/app/containers/notFoundPage.js b/src/main/resources/app/containers/notFoundPage.js deleted file mode 100644 index 2814e885..00000000 --- a/src/main/resources/app/containers/notFoundPage.js +++ /dev/null @@ -1,11 +0,0 @@ -import React from 'react'; - -export default class NotFound extends React.PureComponent { // eslint-disable-line react/prefer-stateless-function - render() { - return ( -

- This page does not exist... try another :) -

- ); - } -} \ No newline at end of file diff --git a/src/main/resources/app/reducers/exampleReducer.js b/src/main/resources/app/reducers/exampleReducer.js deleted file mode 100644 index f820cb04..00000000 --- a/src/main/resources/app/reducers/exampleReducer.js +++ /dev/null @@ -1,20 +0,0 @@ -import { fromJS } from 'immutable'; -import * as somethingActions from '../actions/homePageActions' - -const initialState = fromJS({ - data: "data" -}); - -function doSomethingToState(oldState, action){ - let state = oldState - return state -} - -export function exampleReducer(state = initialState, action) { - switch (action.type) { - case somethingActions.actions.doSomething: - return doSomethingToState(state, action) - default: - return state; - } -} \ No newline at end of file diff --git a/src/main/resources/app/reducers/index.js b/src/main/resources/app/reducers/index.js deleted file mode 100644 index 20dfdf2b..00000000 --- a/src/main/resources/app/reducers/index.js +++ /dev/null @@ -1,8 +0,0 @@ -import { combineReducers } from 'redux-immutable'; -import { exampleReducer } from './exampleReducer'; - -export default function createRootReducer() { - return combineReducers({ - example: exampleReducer - }); -} \ No newline at end of file From 0f11fbe389910b3ffb41d258a496d0b73fe91dfe Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Fri, 7 Dec 2018 11:51:01 +0100 Subject: [PATCH 02/96] Refactoring a little. --- src/main/resources/app/App.jsx | 27 +++++++++------------------ src/main/resources/app/index.js | 19 +++---------------- 2 files changed, 12 insertions(+), 34 deletions(-) diff --git a/src/main/resources/app/App.jsx b/src/main/resources/app/App.jsx index 1aa63fbc..eec34ab1 100644 --- a/src/main/resources/app/App.jsx +++ b/src/main/resources/app/App.jsx @@ -1,20 +1,11 @@ -import React, {Component} from 'react'; -import { Route, Switch } from 'react-router-dom' +import React from 'react'; -import HomePage from './containers/homePage'; -import NotFound from './containers/notFoundPage'; +const App = (props) => +
+

React stuff is happening.

+

Stuff is reacting.

+ {props.children} +
; -export default class App extends Component { - - render () { - return ( -
- - - - - -
- ) - } -} + +export default App; diff --git a/src/main/resources/app/index.js b/src/main/resources/app/index.js index 094b8d58..96a7c1c1 100644 --- a/src/main/resources/app/index.js +++ b/src/main/resources/app/index.js @@ -1,28 +1,15 @@ import React from 'react'; import ReactDOM from 'react-dom'; -import { Provider } from 'react-redux'; -import { BrowserRouter } from 'react-router-dom' - - -import configureStore from './configureStore'; - // main app import App from './App'; -const initialState = {}; -const store = configureStore(initialState); const MOUNT_NODE = document.getElementById('app'); ReactDOM.render( - - - - - , + +

React is indeed stuffing.

+
, MOUNT_NODE ); - - - From 73949f208ca9e258f985d6972f2252694d064f96 Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Fri, 7 Dec 2018 12:03:28 +0100 Subject: [PATCH 03/96] Package.lock --- package-lock.json | 431 ++++++++++++++++++++++++++-------------------- 1 file changed, 246 insertions(+), 185 deletions(-) diff --git a/package-lock.json b/package-lock.json index e3748154..769ad3ef 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,6 +4,21 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@babel/runtime": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.2.0.tgz", + "integrity": "sha512-oouEibCbHMVdZSDlJBO6bZmID/zA/G/Qx3H1d3rSNPTD+L8UNKvCat7aKWSJ74zYbm5zWGh0GQN0hKj8zYFTCg==", + "requires": { + "regenerator-runtime": "^0.12.0" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", + "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==" + } + } + }, "acorn": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.1.tgz", @@ -69,7 +84,7 @@ "anymatch": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=", "requires": { "micromatch": "^3.1.4", "normalize-path": "^2.1.1" @@ -78,7 +93,7 @@ "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=", "dev": true, "requires": { "sprintf-js": "~1.0.2" @@ -92,7 +107,7 @@ "arr-flatten": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=" }, "arr-union": { "version": "3.1.0", @@ -112,7 +127,7 @@ "asn1.js": { "version": "4.10.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "integrity": "sha1-ucK/WAXx5kqt7tbfOiv6+1pz9aA=", "requires": { "bn.js": "^4.0.0", "inherits": "^2.0.1", @@ -150,7 +165,7 @@ "async": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", - "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", + "integrity": "sha1-skWiPKcZMAROxT+kaqAKPofGphA=", "requires": { "lodash": "^4.17.10" } @@ -205,7 +220,7 @@ "anymatch": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", - "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "integrity": "sha1-VT3Lj5HjyImEXf26NMd3IbkLnXo=", "dev": true, "optional": true, "requires": { @@ -343,7 +358,7 @@ "babel-core": { "version": "6.26.3", "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", - "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", + "integrity": "sha1-suLwnjQtDwyI4vAuBneUEl51wgc=", "dev": true, "requires": { "babel-code-frame": "^6.26.0", @@ -370,7 +385,7 @@ "babel-generator": { "version": "6.26.1", "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", - "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", + "integrity": "sha1-GERAjTuPDTWkBOp6wYDwh6YBvZA=", "dev": true, "requires": { "babel-messages": "^6.23.0", @@ -855,7 +870,7 @@ "babel-plugin-transform-es2015-modules-commonjs": { "version": "6.26.2", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz", - "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", + "integrity": "sha1-WKeThjqefKhwvcWogRF/+sJ9tvM=", "dev": true, "requires": { "babel-plugin-transform-strict-mode": "^6.24.1", @@ -1093,7 +1108,7 @@ "core-js": { "version": "2.5.7", "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", - "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==", + "integrity": "sha1-+XJgj/DOrWi4QaFqky0LGDeRgU4=", "dev": true }, "regenerator-runtime": { @@ -1224,7 +1239,7 @@ "core-js": { "version": "2.5.7", "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", - "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==", + "integrity": "sha1-+XJgj/DOrWi4QaFqky0LGDeRgU4=", "dev": true } } @@ -1242,7 +1257,7 @@ "core-js": { "version": "2.5.7", "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", - "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==", + "integrity": "sha1-+XJgj/DOrWi4QaFqky0LGDeRgU4=", "dev": true } } @@ -1292,7 +1307,7 @@ "babylon": { "version": "6.18.0", "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "integrity": "sha1-ry87iPpvXB5MY00aD46sT1WzleM=", "dev": true }, "balanced-match": { @@ -1303,7 +1318,7 @@ "base": { "version": "0.11.2", "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=", "requires": { "cache-base": "^1.0.1", "class-utils": "^0.3.5", @@ -1325,7 +1340,7 @@ "is-accessor-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", "requires": { "kind-of": "^6.0.0" } @@ -1333,7 +1348,7 @@ "is-data-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", "requires": { "kind-of": "^6.0.0" } @@ -1341,7 +1356,7 @@ "is-descriptor": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -1351,19 +1366,19 @@ "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=" } } }, "base64-js": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", - "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==" + "integrity": "sha1-yrHmEY8FEJXli1KBrqjBzSK/wOM=" }, "big.js": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", - "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==" + "integrity": "sha1-pfwpi4G54Nyi5FiCR4S2XFK6WI4=" }, "binary-extensions": { "version": "1.11.0", @@ -1373,12 +1388,12 @@ "bn.js": { "version": "4.11.8", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" + "integrity": "sha1-LN4J617jQfSEdGuwMJsyU7GxRC8=" }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=", "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -1387,7 +1402,7 @@ "braces": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", "requires": { "arr-flatten": "^1.1.0", "array-unique": "^0.3.2", @@ -1419,7 +1434,7 @@ "browserify-aes": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "integrity": "sha1-Mmc0ZC9APavDADIJhTu3CtQo70g=", "requires": { "buffer-xor": "^1.0.3", "cipher-base": "^1.0.0", @@ -1432,7 +1447,7 @@ "browserify-cipher": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "integrity": "sha1-jWR0wbhwv9q807z8wZNKEOlPFfA=", "requires": { "browserify-aes": "^1.0.4", "browserify-des": "^1.0.0", @@ -1475,7 +1490,7 @@ "browserify-zlib": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "integrity": "sha1-KGlFnZqjviRf6P4sofRuLn9U1z8=", "requires": { "pako": "~1.0.5" } @@ -1518,7 +1533,7 @@ "cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=", "requires": { "collection-visit": "^1.0.0", "component-emitter": "^1.2.1", @@ -1585,7 +1600,7 @@ "chokidar": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", - "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", + "integrity": "sha1-NW/04rDo5D4yLRijckYLvPOszSY=", "requires": { "anymatch": "^2.0.0", "async-each": "^1.0.0", @@ -1605,7 +1620,7 @@ "cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "integrity": "sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94=", "requires": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -1614,7 +1629,7 @@ "clap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz", - "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==", + "integrity": "sha1-TzZ0WzIAhJJVf0ZBLWbVDLmbzlE=", "dev": true, "requires": { "chalk": "^1.1.3" @@ -1623,7 +1638,7 @@ "class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "integrity": "sha1-+TNprouafOAv1B+q0MqDAzGQxGM=", "requires": { "arr-union": "^3.1.0", "define-property": "^0.2.5", @@ -1791,7 +1806,7 @@ "create-ecdh": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", - "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "integrity": "sha1-yREbbzMEXEaX8UR4f5JUzcd8Rf8=", "requires": { "bn.js": "^4.1.0", "elliptic": "^6.0.0" @@ -1800,7 +1815,7 @@ "create-hash": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "integrity": "sha1-iJB4rxGmN1a8+1m9IhmWvjqe8ZY=", "requires": { "cipher-base": "^1.0.1", "inherits": "^2.0.1", @@ -1812,7 +1827,7 @@ "create-hmac": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "integrity": "sha1-aRcMeLOrlXFHsriwRXLkfq0iQ/8=", "requires": { "cipher-base": "^1.0.3", "create-hash": "^1.1.0", @@ -1822,6 +1837,15 @@ "sha.js": "^2.4.8" } }, + "create-react-context": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/create-react-context/-/create-react-context-0.2.3.tgz", + "integrity": "sha512-CQBmD0+QGgTaxDL3OX1IDXYqjkp2It4RIbcb99jS6AEg27Ga+a9G3JtK6SIu0HBwPLZlmwt9F7UwWA4Bn92Rag==", + "requires": { + "fbjs": "^0.8.0", + "gud": "^1.0.0" + } + }, "cross-spawn": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", @@ -1835,7 +1859,7 @@ "crypto-browserify": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "integrity": "sha1-OWz58xN/A+S45TLFj2mCVOAPgOw=", "requires": { "browserify-cipher": "^1.0.0", "browserify-sign": "^4.0.0", @@ -1859,7 +1883,7 @@ "css-loader": { "version": "0.28.11", "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.28.11.tgz", - "integrity": "sha512-wovHgjAx8ZIMGSL8pTys7edA1ClmzxHeY6n/d97gg5odgsxEgKjULPR0viqyC+FWMCL9sfqoC/QCUBo62tLvPg==", + "integrity": "sha1-w/mGSnAL4nEbtaJGKyOJsaOS2rc=", "dev": true, "requires": { "babel-code-frame": "^6.26.0", @@ -1974,7 +1998,7 @@ "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", "requires": { "ms": "2.0.0" } @@ -1992,7 +2016,7 @@ "define-property": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "integrity": "sha1-1Flono1lS6d+AqgX+HENcCyxbp0=", "requires": { "is-descriptor": "^1.0.2", "isobject": "^3.0.1" @@ -2001,7 +2025,7 @@ "is-accessor-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", "requires": { "kind-of": "^6.0.0" } @@ -2009,7 +2033,7 @@ "is-data-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", "requires": { "kind-of": "^6.0.0" } @@ -2017,7 +2041,7 @@ "is-descriptor": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -2027,7 +2051,7 @@ "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=" } } }, @@ -2058,7 +2082,7 @@ "diffie-hellman": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "integrity": "sha1-QOjumPVaIUlgcUaSHGPhrl89KHU=", "requires": { "bn.js": "^4.1.0", "miller-rabin": "^4.0.0", @@ -2068,7 +2092,7 @@ "domain-browser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" + "integrity": "sha1-PTH1AZGmdJ3RN1p/Ui6CPULlTto=" }, "electron-to-chromium": { "version": "1.3.51", @@ -2117,7 +2141,7 @@ "errno": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "integrity": "sha1-RoTXF3mtOa8Xfj8AeZb3xnyFJhg=", "requires": { "prr": "~1.0.1" } @@ -2125,7 +2149,7 @@ "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "integrity": "sha1-tKxAZIEH/c3PriQvQovqihTU8b8=", "requires": { "is-arrayish": "^0.2.1" } @@ -2220,7 +2244,7 @@ "esrecurse": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "integrity": "sha1-AHo7n9vCs7uH5IeeoZyS/b05Qs8=", "requires": { "estraverse": "^4.1.0" } @@ -2253,7 +2277,7 @@ "evp_bytestokey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "integrity": "sha1-f8vbGY3HGVlDLv4ThCaE4FJaywI=", "requires": { "md5.js": "^1.3.4", "safe-buffer": "^5.1.1" @@ -2318,7 +2342,7 @@ "fill-range": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", - "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", + "integrity": "sha1-6x53OrsFbc2N8r/favWbizqTZWU=", "dev": true, "optional": true, "requires": { @@ -2363,7 +2387,7 @@ "is-extendable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", "requires": { "is-plain-object": "^2.0.4" } @@ -2373,7 +2397,7 @@ "extglob": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=", "requires": { "array-unique": "^0.3.2", "define-property": "^1.0.0", @@ -2404,7 +2428,7 @@ "is-accessor-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", "requires": { "kind-of": "^6.0.0" } @@ -2412,7 +2436,7 @@ "is-data-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", "requires": { "kind-of": "^6.0.0" } @@ -2420,7 +2444,7 @@ "is-descriptor": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -2430,7 +2454,7 @@ "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=" } } }, @@ -2553,7 +2577,7 @@ "fs-readdir-recursive": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", - "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", + "integrity": "sha1-4y/AMKLM7kSmtTcTCNpUvgs5fSc=", "dev": true }, "fs.realpath": { @@ -2564,7 +2588,7 @@ "fsevents": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", - "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", + "integrity": "sha1-9B3LGvJYKvNpLaNvxVy9jhBBxCY=", "optional": true, "requires": { "nan": "^2.9.2", @@ -3026,7 +3050,7 @@ "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=", "dev": true }, "get-caller-file": { @@ -3117,7 +3141,7 @@ "globals": { "version": "9.18.0", "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "integrity": "sha1-qjiWs+abSH8X4x7SFD1pqOMMLYo=", "dev": true }, "graceful-fs": { @@ -3125,10 +3149,15 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" }, + "gud": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gud/-/gud-1.0.0.tgz", + "integrity": "sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==" + }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=", "dev": true, "requires": { "function-bind": "^1.1.1" @@ -3229,7 +3258,7 @@ "hoist-non-react-statics": { "version": "2.5.5", "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", - "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==" + "integrity": "sha1-xZA89AnA39kI84jmGdhrnBF0y0c=" }, "home-or-tmp": { "version": "2.0.0", @@ -3283,7 +3312,7 @@ "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", "dev": true, "requires": { "color-convert": "^1.9.0" @@ -3292,7 +3321,7 @@ "chalk": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "integrity": "sha1-GMSasWoDe26wFSzIPjRxM4IVtm4=", "dev": true, "requires": { "ansi-styles": "^3.2.1", @@ -3309,7 +3338,7 @@ "postcss": { "version": "6.0.23", "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=", "dev": true, "requires": { "chalk": "^2.4.1", @@ -3320,7 +3349,7 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", "dev": true }, "supports-color": { @@ -3337,7 +3366,7 @@ "ieee754": { "version": "1.1.12", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", - "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==" + "integrity": "sha1-UL8k5bnIu5ivSWTJQc2wkY2ntgs=" }, "immutable": { "version": "3.8.2", @@ -3377,7 +3406,7 @@ "invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "integrity": "sha1-YQ88ksk1nOHbYW5TgAjSP/NRWOY=", "requires": { "loose-envify": "^1.0.0" } @@ -3417,7 +3446,7 @@ "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=" }, "is-builtin-module": { "version": "1.0.0", @@ -3438,7 +3467,7 @@ "is-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", "requires": { "is-accessor-descriptor": "^0.1.6", "is-data-descriptor": "^0.1.4", @@ -3448,7 +3477,7 @@ "kind-of": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=" } } }, @@ -3521,7 +3550,7 @@ "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", "requires": { "isobject": "^3.0.1" } @@ -3557,7 +3586,7 @@ "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + "integrity": "sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0=" }, "isarray": { "version": "1.0.0", @@ -3613,12 +3642,12 @@ "json-loader": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", - "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==" + "integrity": "sha1-3KFKcCNf+C8KyaOr62DTN6NlGF0=" }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=" }, "json5": { "version": "0.5.1", @@ -3657,7 +3686,7 @@ "less-loader": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-4.1.0.tgz", - "integrity": "sha512-KNTsgCE9tMOM70+ddxp9yyt9iHqgmSs0yTZc5XH5Wo+g80RWRIYNqE58QJKm/yMud5wZEvz50ugRDuzVIkyahg==", + "integrity": "sha1-LBNSxbCaT4QQFJAnT9UWdN5BNj4=", "dev": true, "requires": { "clone": "^2.1.1", @@ -3717,12 +3746,12 @@ "lodash": { "version": "4.17.10", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", - "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==" + "integrity": "sha1-G3eTz3JZ6jj7NmHU04syYK+K5Oc=" }, "lodash-es": { "version": "4.17.10", "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.10.tgz", - "integrity": "sha512-iesFYPmxYYGTcmQK0sL8bX3TGHyM6b2qREaB4kamHfQyfPJP0xgoGxp19nsH16nsfquLdiyKyX3mQkfiSGV8Rg==" + "integrity": "sha1-Ys1xBM313YfyNag38O3g6OURfgU=" }, "lodash._reinterpolate": { "version": "3.0.0", @@ -3785,7 +3814,7 @@ "lru-cache": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", - "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", + "integrity": "sha1-oRdc80lt/IQ2wVbDNLSVWZK85pw=", "requires": { "pseudomap": "^1.0.2", "yallist": "^2.1.2" @@ -3794,7 +3823,7 @@ "make-dir": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "integrity": "sha1-ecEDO4BRW9bSTsmTPoYMp17ifww=", "dev": true, "requires": { "pify": "^3.0.0" @@ -3863,7 +3892,7 @@ "micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=", "requires": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -3883,14 +3912,14 @@ "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=" } } }, "miller-rabin": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "integrity": "sha1-8IA1HIZbDcViqEYpZtqlNUPHik0=", "requires": { "bn.js": "^4.0.0", "brorand": "^1.0.1" @@ -3899,12 +3928,12 @@ "mimic-fn": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" + "integrity": "sha1-ggyGo5M0ZA6ZUWkovQP8qIBX0CI=" }, "minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + "integrity": "sha1-LhlN4ERibUoQ5/f7wAznPoPk1cc=" }, "minimalistic-crypto-utils": { "version": "1.0.1", @@ -3914,7 +3943,7 @@ "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", "requires": { "brace-expansion": "^1.1.7" } @@ -3927,7 +3956,7 @@ "mixin-deep": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", - "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "integrity": "sha1-pJ5yaNzhoNlpjkUybFYm3zVD0P4=", "requires": { "for-in": "^1.0.2", "is-extendable": "^1.0.1" @@ -3936,7 +3965,7 @@ "is-extendable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", "requires": { "is-plain-object": "^2.0.4" } @@ -3965,7 +3994,7 @@ "nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "integrity": "sha1-uHqKpPwN6P5r6IiVs4mD/yZb0Rk=", "requires": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -3983,7 +4012,7 @@ "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=" } } }, @@ -4000,7 +4029,7 @@ "node-fetch": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "integrity": "sha1-mA9vcthSEaU0fGsrwYxbhMPrR+8=", "requires": { "encoding": "^0.1.11", "is-stream": "^1.0.1" @@ -4009,7 +4038,7 @@ "node-libs-browser": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz", - "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", + "integrity": "sha1-X5QmPUBPbkR2fXJpAf/wVHjWAN8=", "requires": { "assert": "^1.1.1", "browserify-zlib": "^0.2.0", @@ -4046,7 +4075,7 @@ "normalize-package-data": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "integrity": "sha1-EvlaMH1YNSB1oEkHuErIvpisAS8=", "requires": { "hosted-git-info": "^2.1.4", "is-builtin-module": "^1.0.0", @@ -4173,7 +4202,7 @@ "os-locale": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", - "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "integrity": "sha1-QrwpAKa1uL0XN2yOiCtlr8zyS/I=", "requires": { "execa": "^0.7.0", "lcid": "^1.0.0", @@ -4205,7 +4234,7 @@ "p-limit": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "integrity": "sha1-uGvV8MJWkJEcdZD8v8IBDVSzzLg=", "requires": { "p-try": "^1.0.0" } @@ -4226,12 +4255,12 @@ "pako": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", - "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==" + "integrity": "sha1-AQEhG6pwxLykoPY/Igbpe3368lg=" }, "parse-asn1": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", - "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", + "integrity": "sha1-9r8pOBgzK9DatU77Fgh3JHRebKg=", "requires": { "asn1.js": "^4.0.0", "browserify-aes": "^1.0.0", @@ -4335,7 +4364,7 @@ "pbkdf2": { "version": "3.0.16", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.16.tgz", - "integrity": "sha512-y4CXP3thSxqf7c0qmOF+9UeOTrifiVTIM+u7NWlq+PRsHbr7r7dpCmvzrZxa96JJUNi0Y5w9VqG5ZNeCVMoDcA==", + "integrity": "sha1-dAQgjsawG2LYW/g4U6gGT42cKlw=", "requires": { "create-hash": "^1.1.2", "create-hmac": "^1.1.4", @@ -4366,7 +4395,7 @@ "postcss": { "version": "5.2.18", "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", "dev": true, "requires": { "chalk": "^1.1.3", @@ -4473,7 +4502,7 @@ "postcss-filter-plugins": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz", - "integrity": "sha512-T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ==", + "integrity": "sha1-giRf34IzcEFkXkdxFNjlk6oYuOw=", "dev": true, "requires": { "postcss": "^5.0.4" @@ -4575,7 +4604,7 @@ "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", "dev": true, "requires": { "color-convert": "^1.9.0" @@ -4584,7 +4613,7 @@ "chalk": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "integrity": "sha1-GMSasWoDe26wFSzIPjRxM4IVtm4=", "dev": true, "requires": { "ansi-styles": "^3.2.1", @@ -4601,7 +4630,7 @@ "postcss": { "version": "6.0.23", "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=", "dev": true, "requires": { "chalk": "^2.4.1", @@ -4612,7 +4641,7 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", "dev": true }, "supports-color": { @@ -4639,7 +4668,7 @@ "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", "dev": true, "requires": { "color-convert": "^1.9.0" @@ -4648,7 +4677,7 @@ "chalk": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "integrity": "sha1-GMSasWoDe26wFSzIPjRxM4IVtm4=", "dev": true, "requires": { "ansi-styles": "^3.2.1", @@ -4665,7 +4694,7 @@ "postcss": { "version": "6.0.23", "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=", "dev": true, "requires": { "chalk": "^2.4.1", @@ -4676,7 +4705,7 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", "dev": true }, "supports-color": { @@ -4703,7 +4732,7 @@ "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", "dev": true, "requires": { "color-convert": "^1.9.0" @@ -4712,7 +4741,7 @@ "chalk": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "integrity": "sha1-GMSasWoDe26wFSzIPjRxM4IVtm4=", "dev": true, "requires": { "ansi-styles": "^3.2.1", @@ -4729,7 +4758,7 @@ "postcss": { "version": "6.0.23", "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=", "dev": true, "requires": { "chalk": "^2.4.1", @@ -4740,7 +4769,7 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", "dev": true }, "supports-color": { @@ -4767,7 +4796,7 @@ "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", "dev": true, "requires": { "color-convert": "^1.9.0" @@ -4776,7 +4805,7 @@ "chalk": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "integrity": "sha1-GMSasWoDe26wFSzIPjRxM4IVtm4=", "dev": true, "requires": { "ansi-styles": "^3.2.1", @@ -4793,7 +4822,7 @@ "postcss": { "version": "6.0.23", "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=", "dev": true, "requires": { "chalk": "^2.4.1", @@ -4804,7 +4833,7 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", "dev": true }, "supports-color": { @@ -4946,7 +4975,7 @@ "private": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "integrity": "sha1-I4Hts2ifelPWUxkAYPz4ItLzaP8=", "dev": true }, "process": { @@ -4957,12 +4986,12 @@ "process-nextick-args": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" + "integrity": "sha1-o31zL0JxtKsa0HDTVQjoKQeI/6o=" }, "promise": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "integrity": "sha1-BktyYCsY+Q8pGSuLG8QY/9Hr078=", "requires": { "asap": "~2.0.3" } @@ -4970,7 +4999,7 @@ "prop-types": { "version": "15.6.2", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz", - "integrity": "sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ==", + "integrity": "sha1-BdXKd7RFPphdYPx/+MhZCUpJcQI=", "requires": { "loose-envify": "^1.3.1", "object-assign": "^4.1.1" @@ -4989,7 +5018,7 @@ "public-encrypt": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.2.tgz", - "integrity": "sha512-4kJ5Esocg8X3h8YgJsKAuoesBgB7mqH3eowiDzMUPKiRDDE7E/BqqZD1hnTByIaAFiwAw246YEltSq7tdrOH0Q==", + "integrity": "sha1-RuuRByBr9zSJ+LhbadkTNMZhCZQ=", "requires": { "bn.js": "^4.1.0", "browserify-rsa": "^4.0.0", @@ -5001,7 +5030,7 @@ "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + "integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew=" }, "q": { "version": "1.5.1", @@ -5060,7 +5089,7 @@ "randombytes": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", - "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", + "integrity": "sha1-0wLFIpSFiISKjTAMkytEwkIx2oA=", "requires": { "safe-buffer": "^5.1.0" } @@ -5068,7 +5097,7 @@ "randomfill": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "integrity": "sha1-ySGW/IarQr6YPxvzF3giSTHWFFg=", "requires": { "randombytes": "^2.0.5", "safe-buffer": "^5.1.0" @@ -5096,10 +5125,15 @@ "prop-types": "^15.6.0" } }, + "react-is": { + "version": "16.6.3", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.6.3.tgz", + "integrity": "sha512-u7FDWtthB4rWibG/+mFbVd5FvdI20yde86qKGx4lVUTWmPlSWQ4QxbBIrrs+HnXGbxOUlUzTAP/VDmvCwaP2yA==" + }, "react-redux": { "version": "5.0.7", "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-5.0.7.tgz", - "integrity": "sha512-5VI8EV5hdgNgyjfmWzBbdrqUkrVRKlyTKk1sGH3jzM2M2Mhj/seQgPXaz6gVAj2lz/nz688AdTqMO18Lr24Zhg==", + "integrity": "sha1-DcEHbZr7RnD5k/+u9EuPjBFVpMg=", "requires": { "hoist-non-react-statics": "^2.5.0", "invariant": "^2.0.0", @@ -5110,30 +5144,47 @@ } }, "react-router": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-4.3.1.tgz", - "integrity": "sha512-yrvL8AogDh2X42Dt9iknk4wF4V8bWREPirFfS9gLU1huk6qK41sg7Z/1S81jjTrGHxa3B8R3J6xIkDAA6CVarg==", + "version": "4.4.0-beta.6", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-4.4.0-beta.6.tgz", + "integrity": "sha512-esR1UHsPpfvehX5Qn7wQrOTFsl4PxiaX3GaYvtFDSEioMsTl0zkASJBm1fXKgR9brUQX9kgiGq6XnCsiJU/82g==", "requires": { - "history": "^4.7.2", + "@babel/runtime": "^7.1.2", + "create-react-context": "^0.2.2", + "history": "^4.8.0-beta.0", "hoist-non-react-statics": "^2.5.0", - "invariant": "^2.2.4", "loose-envify": "^1.3.1", "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.1", - "warning": "^4.0.1" + "prop-types": "^15.6.2", + "react-is": "^16.5.2", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + }, + "dependencies": { + "history": { + "version": "4.8.0-beta.0", + "resolved": "https://registry.npmjs.org/history/-/history-4.8.0-beta.0.tgz", + "integrity": "sha512-LDjPtGgAFDO3lZ+bumN67k0R3GWvUBLLgRJpFU2mnJ1w+D5rEbiZC1c37yPla7tx/dUzVfznt5Rmttnz0MvGdA==", + "requires": { + "@babel/runtime": "^7.1.2", + "loose-envify": "^1.2.0", + "resolve-pathname": "^2.2.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0", + "value-equal": "^0.4.0" + } + } } }, "react-router-dom": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-4.3.1.tgz", - "integrity": "sha512-c/MlywfxDdCp7EnB7YfPMOfMD3tOtIjrQlj/CKfNMBxdmpJP8xcz5P/UAFn3JbnQCNUxsHyVVqllF9LhgVyFCA==", + "version": "4.4.0-alpha.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-4.4.0-alpha.1.tgz", + "integrity": "sha512-9I/XJs/30B1tm8TeQJXtZtKX48zF2tDjADFWvQED/kLCvcSVXIx2frHGRWZiUMBMUXzP1SSCd5U4f3goblLrpA==", "requires": { "history": "^4.7.2", "invariant": "^2.2.4", "loose-envify": "^1.3.1", "prop-types": "^15.6.1", - "react-router": "^4.3.1", - "warning": "^4.0.1" + "react-router": "^4.4.0-alpha.1" } }, "react-router-redux": { @@ -5163,7 +5214,7 @@ "readable-stream": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "integrity": "sha1-sRwn2IuP8fvgcGQ8+UsMea4bCq8=", "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -5224,7 +5275,7 @@ "redux": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.0.tgz", - "integrity": "sha512-NnnHF0h0WVE/hXyrB6OlX67LYRuaf/rJcbWvnHHEPCF/Xa/AZpwhs/20WyqzQae5x4SD2F9nPObgBh2rxAgLiA==", + "integrity": "sha1-qmmKkrcpMV0is0oFU9fmUzVVzAM=", "requires": { "loose-envify": "^1.1.0", "symbol-observable": "^1.2.0" @@ -5238,19 +5289,19 @@ "regenerate": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", - "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", + "integrity": "sha1-SoVuxLVuQHfFV1icroXnpMiGmhE=", "dev": true }, "regenerator-runtime": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "integrity": "sha1-vgWtf5v30i4Fb5cmzuUBf78Z4uk=", "dev": true }, "regenerator-transform": { "version": "0.10.1", "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", - "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", + "integrity": "sha1-HkmWg3Ix2ot/PPQRTXG1aRoGgN0=", "dev": true, "requires": { "babel-runtime": "^6.18.0", @@ -5261,7 +5312,7 @@ "regex-cache": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "integrity": "sha1-db3FiioUls7EihKDW8VMjVYjNt0=", "dev": true, "optional": true, "requires": { @@ -5271,7 +5322,7 @@ "regex-not": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "integrity": "sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw=", "requires": { "extend-shallow": "^3.0.2", "safe-regex": "^1.1.0" @@ -5358,7 +5409,7 @@ "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" + "integrity": "sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w=" }, "right-align": { "version": "0.1.3", @@ -5371,7 +5422,7 @@ "ripemd160": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "integrity": "sha1-ocGm9iR1FXe6XQeRTLyShQWFiQw=", "requires": { "hash-base": "^3.0.0", "inherits": "^2.0.1" @@ -5380,7 +5431,7 @@ "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=" }, "safe-regex": { "version": "1.1.0", @@ -5393,12 +5444,12 @@ "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=" }, "sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "integrity": "sha1-KBYjTiN4vdxOU1T6tcqold9xANk=", "dev": true }, "schema-utils": { @@ -5429,7 +5480,7 @@ "set-value": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", - "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "integrity": "sha1-ca5KiPD+77v1LR6mBPP7MV67YnQ=", "requires": { "extend-shallow": "^2.0.1", "is-extendable": "^0.1.1", @@ -5455,7 +5506,7 @@ "sha.js": { "version": "2.4.11", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "integrity": "sha1-N6XPC4HsvGlD3hCbopYNGyZYSuc=", "requires": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -5488,7 +5539,7 @@ "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "integrity": "sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0=", "requires": { "base": "^0.11.1", "debug": "^2.2.0", @@ -5521,7 +5572,7 @@ "snapdragon-node": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "integrity": "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=", "requires": { "define-property": "^1.0.0", "isobject": "^3.0.0", @@ -5539,7 +5590,7 @@ "is-accessor-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", "requires": { "kind-of": "^6.0.0" } @@ -5547,7 +5598,7 @@ "is-data-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", "requires": { "kind-of": "^6.0.0" } @@ -5555,7 +5606,7 @@ "is-descriptor": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -5565,14 +5616,14 @@ "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=" } } }, "snapdragon-util": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "integrity": "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=", "requires": { "kind-of": "^3.2.0" } @@ -5589,7 +5640,7 @@ "source-list-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz", - "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==" + "integrity": "sha1-qqR0A/eyRakvvJfqCPJQ1gh+0IU=" }, "source-map": { "version": "0.5.7", @@ -5599,7 +5650,7 @@ "source-map-resolve": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "integrity": "sha1-cuLMNAlVQ+Q7LGKyxMENSpBU8lk=", "requires": { "atob": "^2.1.1", "decode-uri-component": "^0.2.0", @@ -5611,7 +5662,7 @@ "source-map-support": { "version": "0.4.18", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", - "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "integrity": "sha1-Aoam3ovkJkEzhZTpfM6nXwosWF8=", "dev": true, "requires": { "source-map": "^0.5.6" @@ -5625,7 +5676,7 @@ "spdx-correct": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", - "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", + "integrity": "sha1-BaW01xU6GVvJLDxCW2nzsqlSTII=", "requires": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -5634,12 +5685,12 @@ "spdx-exceptions": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", - "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==" + "integrity": "sha1-LHrmEFbHFKW5ubKyr30xHvXHj+k=" }, "spdx-expression-parse": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "integrity": "sha1-meEZt6XaAOBUkcn6M4t5BII7QdA=", "requires": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -5648,12 +5699,12 @@ "spdx-license-ids": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", - "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==" + "integrity": "sha1-enzShHDMbToc/m1miG9rxDDTrIc=" }, "split-string": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "integrity": "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=", "requires": { "extend-shallow": "^3.0.0" } @@ -5695,7 +5746,7 @@ "stream-http": { "version": "2.8.3", "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "integrity": "sha1-stJCRpKIpaJ+xP6JM6z2I95lFPw=", "requires": { "builtin-status-codes": "^3.0.0", "inherits": "^2.0.1", @@ -5713,7 +5764,7 @@ "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=", "requires": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" @@ -5742,7 +5793,7 @@ "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", "requires": { "safe-buffer": "~5.1.0" } @@ -5768,7 +5819,7 @@ "style-loader": { "version": "0.21.0", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.21.0.tgz", - "integrity": "sha512-T+UNsAcl3Yg+BsPKs1vd22Fr8sVT+CJMtzqc6LEw9bbJZb43lm9GoeIfUcDEefBSWC0BhYbcdupV1GtI4DGzxg==", + "integrity": "sha1-aMUuXrKvycqStidL4nfuWa6jqFI=", "dev": true, "requires": { "loader-utils": "^1.1.0", @@ -5801,7 +5852,7 @@ "symbol-observable": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" + "integrity": "sha1-wiaIrtTqs83C3+rLtWFmBWCgCAQ=" }, "tapable": { "version": "0.2.8", @@ -5811,11 +5862,21 @@ "timers-browserify": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", - "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", + "integrity": "sha1-HSjj0qrfHVpZlsTp+VYBzQU0gK4=", "requires": { "setimmediate": "^1.0.4" } }, + "tiny-invariant": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.0.3.tgz", + "integrity": "sha512-ytQx8T4DL8PjlX53yYzcIC0WhIZbpR0p1qcYjw2pHu3w6UtgWwFJQ/02cnhOnBBhlFx/edUIfcagCaQSe3KMWg==" + }, + "tiny-warning": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.0.tgz", + "integrity": "sha512-6CrF/DMLSoYakJ7f6+1bz6nHJY6Tj6sEj8/9hjTzGi94MeuAZprPE+3jykGMUgoswnmuPA9NlKlYLNJaFVYHIw==" + }, "to-arraybuffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", @@ -5838,7 +5899,7 @@ "to-regex": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "integrity": "sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4=", "requires": { "define-property": "^2.0.2", "extend-shallow": "^3.0.2", @@ -5869,7 +5930,7 @@ "ua-parser-js": { "version": "0.7.18", "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.18.tgz", - "integrity": "sha512-LtzwHlVHwFGTptfNSgezHp7WUlwiqb0gA9AALRbKaERfxwJoiX0A73QbTToxteIAuIaFshhgIZfqK8s7clqgnA==" + "integrity": "sha1-p7/ZL1bt+xFwg7aeMdKqiILUse0=" }, "uglify-js": { "version": "2.8.29", @@ -5957,7 +6018,7 @@ "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + "integrity": "sha1-tkb2m+OULavOzJ1mOcgNwQXvqmY=" }, "unset-value": { "version": "1.0.0", @@ -5998,12 +6059,12 @@ "upath": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", - "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==" + "integrity": "sha1-NSVll+RqWB20eT0M5H+prr/J+r0=" }, "uri-js": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "integrity": "sha1-lMVA4f93KVbiKZUHwBCupsiDjrA=", "requires": { "punycode": "^2.1.0" } @@ -6053,7 +6114,7 @@ "util": { "version": "0.10.4", "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", - "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "integrity": "sha1-OqASW/5mikZy3liFfTrOJ+y3aQE=", "requires": { "inherits": "2.0.3" } @@ -6089,7 +6150,7 @@ "vendors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.2.tgz", - "integrity": "sha512-w/hry/368nO21AN9QljsaIhb9ZiZtZARoVH5f3CsFbawdLdayCgKRPup7CggujvySMxx0I91NOyxdVENohprLQ==", + "integrity": "sha1-f8te759WI7FWvOqJ7DfWNnbyGAE=", "dev": true }, "vm-browserify": { @@ -6111,7 +6172,7 @@ "watchpack": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", - "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", + "integrity": "sha1-S8EsLr6KonenHx0/FNaFx7RGzQA=", "requires": { "chokidar": "^2.0.2", "graceful-fs": "^4.1.2", @@ -6121,7 +6182,7 @@ "webpack": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.12.0.tgz", - "integrity": "sha512-Sw7MdIIOv/nkzPzee4o0EdvCuPmxT98+vVpIvwtcwcF1Q4SDSNp92vwcKc4REe7NItH9f1S4ra9FuQ7yuYZ8bQ==", + "integrity": "sha1-P540NgNwYC/PY56Xk520hvTsDXQ=", "requires": { "acorn": "^5.0.0", "acorn-dynamic-import": "^2.0.0", @@ -6166,7 +6227,7 @@ "whatwg-fetch": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", - "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==" + "integrity": "sha1-3eal3zFfnTmZGqF2IYU9cguFVm8=" }, "whet.extend": { "version": "0.9.9", @@ -6177,7 +6238,7 @@ "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "integrity": "sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=", "requires": { "isexe": "^2.0.0" } @@ -6200,7 +6261,7 @@ "workbox-build": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-2.1.3.tgz", - "integrity": "sha512-QuFHYsRFR/ZhWRxU/VMAXUSfCIgol1iRgJ22mV1bM9GGRycW/VqbyhIcY95GjX0V8rNu+8d65t48xjnrtf9hqw==", + "integrity": "sha1-qBYZRtP4W4zCWQ3TpRnVPUD/igY=", "requires": { "chalk": "^1.1.3", "fs-extra": "^3.0.1", @@ -6213,12 +6274,12 @@ "workbox-sw": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-2.1.3.tgz", - "integrity": "sha512-ZwT1Igbd9gAbn0U8gqachKTCGisS9WFM2j85FvI5K88FfNJ5OlYrDksXQmACRyvX59bwXIo/CGDU7FSsMtRVhw==" + "integrity": "sha1-QEVWDcJq2npB/jeZmpPHHEPkHWo=" }, "workbox-webpack-plugin": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-2.1.3.tgz", - "integrity": "sha512-keKOw8pw5UPuau+YBmAhnLF4/IKz8F45eXC6M0BampTJdQk32UACXMLMbTMlUZGWzx+G1iCd52Zac3Tyh4X8dg==", + "integrity": "sha1-5N6UgYzO9vZnsfX0GM5aEGHajTM=", "requires": { "workbox-build": "^2.1.3" } From 67dd3f9e840ca6fa11dc2ad136da9f6c8cb1f976 Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Fri, 14 Dec 2018 10:14:02 +0100 Subject: [PATCH 04/96] Including the vscode project --- .classpath | 7 +++++++ .gitignore | 5 ----- .project | 23 ++++++++++++++++++++++ .settings/org.eclipse.buildship.core.prefs | 2 ++ _vscode/starter-react.code-workspace | 7 +++++++ 5 files changed, 39 insertions(+), 5 deletions(-) create mode 100644 .classpath create mode 100644 .project create mode 100644 .settings/org.eclipse.buildship.core.prefs create mode 100644 _vscode/starter-react.code-workspace diff --git a/.classpath b/.classpath new file mode 100644 index 00000000..a921fa64 --- /dev/null +++ b/.classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/.gitignore b/.gitignore index bf420c9b..0afec7b4 100644 --- a/.gitignore +++ b/.gitignore @@ -92,8 +92,3 @@ crashlytics-build.properties node_modules/ bin/ -### VS code ### -_vscode/ -.settings/ -.classpath -.project diff --git a/.project b/.project new file mode 100644 index 00000000..b87ae884 --- /dev/null +++ b/.project @@ -0,0 +1,23 @@ + + + react + Project react created by Buildship. + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.buildship.core.gradleprojectbuilder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.buildship.core.gradleprojectnature + + diff --git a/.settings/org.eclipse.buildship.core.prefs b/.settings/org.eclipse.buildship.core.prefs new file mode 100644 index 00000000..e8895216 --- /dev/null +++ b/.settings/org.eclipse.buildship.core.prefs @@ -0,0 +1,2 @@ +connection.project.dir= +eclipse.preferences.version=1 diff --git a/_vscode/starter-react.code-workspace b/_vscode/starter-react.code-workspace new file mode 100644 index 00000000..2a0ed79b --- /dev/null +++ b/_vscode/starter-react.code-workspace @@ -0,0 +1,7 @@ +{ + "folders": [ + { + "path": ".." + } + ] +} \ No newline at end of file From 087f20dd711e7df66a617e1d3f46a9017345b86e Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Fri, 14 Dec 2018 10:18:00 +0100 Subject: [PATCH 05/96] npm lock --- package-lock.json | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index 769ad3ef..bc036afc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1840,7 +1840,7 @@ "create-react-context": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/create-react-context/-/create-react-context-0.2.3.tgz", - "integrity": "sha512-CQBmD0+QGgTaxDL3OX1IDXYqjkp2It4RIbcb99jS6AEg27Ga+a9G3JtK6SIu0HBwPLZlmwt9F7UwWA4Bn92Rag==", + "integrity": "sha1-nsFAppFKIu8EuLCbd3HeiVZ8tvM=", "requires": { "fbjs": "^0.8.0", "gud": "^1.0.0" @@ -3152,7 +3152,7 @@ "gud": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/gud/-/gud-1.0.0.tgz", - "integrity": "sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==" + "integrity": "sha1-pIlYGxfmpwvsqavjrlfeekmYUsA=" }, "has": { "version": "1.0.3", @@ -3226,7 +3226,7 @@ "history": { "version": "4.7.2", "resolved": "https://registry.npmjs.org/history/-/history-4.7.2.tgz", - "integrity": "sha512-1zkBRWW6XweO0NBcjiphtVJVsIQ+SXF29z9DVkceeaSLVMFXHool+fdCZD4spDCfZJCILPILc3bm7Bc+HRi0nA==", + "integrity": "sha1-IrXH8xYzxbgCHH9KipVKwTnujVs=", "requires": { "invariant": "^2.2.1", "loose-envify": "^1.2.0", @@ -5073,14 +5073,14 @@ "is-number": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "integrity": "sha1-ACbjf1RU1z41bf5lZGmYZ8an8P8=", "dev": true, "optional": true }, "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=", "dev": true, "optional": true } @@ -5178,7 +5178,7 @@ "react-router-dom": { "version": "4.4.0-alpha.1", "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-4.4.0-alpha.1.tgz", - "integrity": "sha512-9I/XJs/30B1tm8TeQJXtZtKX48zF2tDjADFWvQED/kLCvcSVXIx2frHGRWZiUMBMUXzP1SSCd5U4f3goblLrpA==", + "integrity": "sha1-EgfmmFNJ6wvXms4azhx89ni80cQ=", "requires": { "history": "^4.7.2", "invariant": "^2.2.4", @@ -5399,7 +5399,7 @@ "resolve-pathname": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-2.2.0.tgz", - "integrity": "sha512-bAFz9ld18RzJfddgrO2e/0S2O81710++chRMUxHjXOYKF6jTAMrUNZrEZ1PvV0zlhfjidm08iRPdTLPno1FuRg==" + "integrity": "sha1-fpriHtgV/WOrGJre7mTcgx7vqHk=" }, "resolve-url": { "version": "0.2.1", @@ -6145,7 +6145,7 @@ "value-equal": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-0.4.0.tgz", - "integrity": "sha512-x+cYdNnaA3CxvMaTX0INdTCN8m8aF2uY9BvEqmxuYp8bL09cs/kWVQPVGcA35fMktdOsP69IgU7wFj/61dJHEw==" + "integrity": "sha1-xb3S9U7gk8BIOdcc4uR1imiQq8c=" }, "vendors": { "version": "1.0.2", @@ -6220,7 +6220,7 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=" } } }, From dfd5d055313b9bd3b3bd6741be0b1531bd62fa5e Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Fri, 14 Dec 2018 11:00:59 +0100 Subject: [PATCH 06/96] Webpack compileses JSX --- webpack.config.js | 46 +++++++++++++++++++++------------------------- 1 file changed, 21 insertions(+), 25 deletions(-) diff --git a/webpack.config.js b/webpack.config.js index 580952d9..9ed22853 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,30 +1,26 @@ var webpack = require('webpack'); var path = require('path'); + module.exports = { - entry: [ - path.join(__dirname, './src/main/resources/app/index.js') - ], - output: { - path: path.join(__dirname, 'build/resources/main'), - filename : "bundle.js" - }, - resolve: { - extensions: ['.js', '.jsx', '.less'] - }, - module: { - loaders: [{ - test: /\.(js|jsx)$/, - exclude: /node_modules/, - loader: 'babel-loader' - }, { - test: /\.less$/, - loaders: ["style-loader", "css-loader", "less-loader"] - } - ] - }, - output: { - path: path.join(__dirname, 'build/resources/main/assets/'), - filename : "bundle.js" - } + entry: { + 'jsx/App': path.join(__dirname, './src/main/resources/app/App.jsx') + }, + output: { + path: path.join(__dirname, 'build/resources/main/assets/'), + filename: "[name].js" + }, + resolve: { + extensions: ['.js', '.jsx', '.less'] + }, + module: { + loaders: [{ + test: /\.(js|jsx)$/, + exclude: /node_modules/, + loader: 'babel-loader' + }, { + test: /\.less$/, + loaders: ["style-loader", "css-loader", "less-loader"] + }] + }, } \ No newline at end of file From 2a746fdea59a08d9a1323e023e9f28370a481022 Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Fri, 14 Dec 2018 11:11:26 +0100 Subject: [PATCH 07/96] Started setting up server-side react rendering. See: https://medium.freecodecamp.org/server-side-rendering-your-react-app-in-three-simple-steps-7a82b95db82e https://medium.freecodecamp.org/demystifying-reacts-server-side-render-de335d408fe4 https://alligator.io/react/server-side-rendering/ --- webpack.config.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/webpack.config.js b/webpack.config.js index 9ed22853..fc155126 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,13 +1,17 @@ -var webpack = require('webpack'); -var path = require('path'); +const webpack = require('webpack'); +const path = require('path'); +const SRC_RES = path.join(__dirname, 'src/main/resources'); +const BUILD_RES path.join(__dirname, 'build/resources/main'); module.exports = { entry: { - 'jsx/App': path.join(__dirname, './src/main/resources/app/App.jsx') + 'jsx/App': path.join(SRC_RES, 'app/App.jsx'), + 'ssr/bundle': path.join(SRC_RES, 'app.es6'), + 'ssr/client': path.join(SRC_RES, 'ssr.es6'), }, output: { - path: path.join(__dirname, 'build/resources/main/assets/'), + path: path.join(BUILD_RES, 'assets/'), filename: "[name].js" }, resolve: { From d4a7b674ab7f7b04e4fea9200c73225868107208 Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Tue, 25 Dec 2018 15:53:37 +0100 Subject: [PATCH 08/96] Webpack builds and compiles. --- package.json | 111 +++++++++++---------- src/main/resources/app/App.jsx | 11 -- src/main/resources/app/index.js | 15 --- src/main/resources/jsx4xp/common/index.jsx | 8 ++ src/main/resources/jsx4xp/entries/App.jsx | 11 ++ webpack.config.js | 32 ++++-- 6 files changed, 97 insertions(+), 91 deletions(-) delete mode 100644 src/main/resources/app/App.jsx delete mode 100644 src/main/resources/app/index.js create mode 100644 src/main/resources/jsx4xp/common/index.jsx create mode 100644 src/main/resources/jsx4xp/entries/App.jsx diff --git a/package.json b/package.json index 47f38591..53100c8f 100644 --- a/package.json +++ b/package.json @@ -1,56 +1,57 @@ { - "name": "starter-react", - "version": "1.0.0", - "description": "React starter for Enonic XP Platform", - "scripts": { - "build": "gradle build", - "deploy": "gradle deploy", - "watch": "gradle deploy -t" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/enonic/starter-react.git" - }, - "author": "", - "license": "ISC", - "bugs": { - "url": "https://github.com/enonic/starter-react/issues" - }, - "homepage": "https://github.com/enonic/starter-react#readme", - "dependencies": { - "immutable": "^3.8.2", - "react": "^16.4.1", - "react-dom": "^16.4.1", - "react-redux": "^5.0.7", - "react-router-dom": "4.4.0-alpha.1", - "react-router-redux": "^4.0.8", - "redux": "^4.0.0", - "redux-immutable": "^4.0.0", - "warning": "^4.0.1", - "webpack": "^3.12.0", - "workbox-webpack-plugin": "^2.1.0" - }, - "devDependencies": { - "babel-cli": "^6.26.0", - "babel-core": "^6.26.3", - "babel-loader": "^7.1.4", - "babel-plugin-transform-object-rest-spread": "^6.26.0", - "babel-preset-es2015": "^6.24.1", - "babel-preset-react": "^6.24.1", - "babel-preset-stage-0": "^6.24.1", - "babel-register": "^6.26.0", - "css-loader": "^0.28.11", - "less-loader": "^4.1.0", - "style-loader": "^0.21.0" - }, - "babel": { - "presets": [ - "es2015", - "react", - "stage-0" - ], - "plugins": [ - "transform-object-rest-spread" - ] - } -} + "name": "starter-react", + "version": "1.0.0", + "description": "React starter for Enonic XP Platform", + "scripts": { + "build": "gradle build", + "deploy": "gradle deploy", + "watch": "gradle deploy -t", + "wp": "webpack" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/enonic/starter-react.git" + }, + "author": "", + "license": "ISC", + "bugs": { + "url": "https://github.com/enonic/starter-react/issues" + }, + "homepage": "https://github.com/enonic/starter-react#readme", + "dependencies": { + "immutable": "^3.8.2", + "react": "^16.4.1", + "react-dom": "^16.4.1", + "react-redux": "^5.0.7", + "react-router-dom": "4.4.0-alpha.1", + "react-router-redux": "^4.0.8", + "redux": "^4.0.0", + "redux-immutable": "^4.0.0", + "warning": "^4.0.1", + "webpack": "^3.12.0", + "workbox-webpack-plugin": "^2.1.0" + }, + "devDependencies": { + "babel-cli": "^6.26.0", + "babel-core": "^6.26.3", + "babel-loader": "^7.1.4", + "babel-plugin-transform-object-rest-spread": "^6.26.0", + "babel-preset-es2015": "^6.24.1", + "babel-preset-react": "^6.24.1", + "babel-preset-stage-0": "^6.24.1", + "babel-register": "^6.26.0", + "css-loader": "^0.28.11", + "less-loader": "^4.1.0", + "style-loader": "^0.21.0" + }, + "babel": { + "presets": [ + "es2015", + "react", + "stage-0" + ], + "plugins": [ + "transform-object-rest-spread" + ] + } +} \ No newline at end of file diff --git a/src/main/resources/app/App.jsx b/src/main/resources/app/App.jsx deleted file mode 100644 index eec34ab1..00000000 --- a/src/main/resources/app/App.jsx +++ /dev/null @@ -1,11 +0,0 @@ -import React from 'react'; - -const App = (props) => -
-

React stuff is happening.

-

Stuff is reacting.

- {props.children} -
; - - -export default App; diff --git a/src/main/resources/app/index.js b/src/main/resources/app/index.js deleted file mode 100644 index 96a7c1c1..00000000 --- a/src/main/resources/app/index.js +++ /dev/null @@ -1,15 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; - -// main app -import App from './App'; - -const MOUNT_NODE = document.getElementById('app'); - - -ReactDOM.render( - -

React is indeed stuffing.

-
, - MOUNT_NODE -); diff --git a/src/main/resources/jsx4xp/common/index.jsx b/src/main/resources/jsx4xp/common/index.jsx new file mode 100644 index 00000000..b5660f80 --- /dev/null +++ b/src/main/resources/jsx4xp/common/index.jsx @@ -0,0 +1,8 @@ +import React from 'react'; + +const shared1 = (props) =>

This is the first shared

; +const shared2 = ({something}) =>

This is the second one. It says { something }

; + +export default { + shared1, shared2 +}; diff --git a/src/main/resources/jsx4xp/entries/App.jsx b/src/main/resources/jsx4xp/entries/App.jsx new file mode 100644 index 00000000..1c6d3431 --- /dev/null +++ b/src/main/resources/jsx4xp/entries/App.jsx @@ -0,0 +1,11 @@ +import React from 'react'; +import c from '../common'; + +const App = (props) => +
+

React stuff is happening.

+

Stuff is reacting: { c.shared1() } { c.shared2("SOMETHING") }

+ { props.children } +
; + +export default App; diff --git a/webpack.config.js b/webpack.config.js index fc155126..80e25979 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,21 +1,26 @@ -const webpack = require('webpack'); const path = require('path'); +const glob = require('glob'); const SRC_RES = path.join(__dirname, 'src/main/resources'); -const BUILD_RES path.join(__dirname, 'build/resources/main'); +const SRC_JSX4XP = path.join(SRC_RES, 'jsx4xp/entries'); +const BUILD_MAIN = path.join(__dirname, 'build/resources/main'); + + + +const entries = Object.assign({}, + getEntries(SRC_JSX4XP, 'jsx', 'jsx/'), + getEntries(SRC_JSX4XP, 'js', 'jsx/'), + getEntries(SRC_JSX4XP, 'es6', 'jsx/'), +); module.exports = { - entry: { - 'jsx/App': path.join(SRC_RES, 'app/App.jsx'), - 'ssr/bundle': path.join(SRC_RES, 'app.es6'), - 'ssr/client': path.join(SRC_RES, 'ssr.es6'), - }, + entry: entries, output: { - path: path.join(BUILD_RES, 'assets/'), + path: path.join(BUILD_MAIN, 'assets/'), filename: "[name].js" }, resolve: { - extensions: ['.js', '.jsx', '.less'] + extensions: ['.es6', '.js', '.jsx', '.less'] }, module: { loaders: [{ @@ -27,4 +32,11 @@ module.exports = { loaders: ["style-loader", "css-loader", "less-loader"] }] }, -} \ No newline at end of file +}; + +function getEntries(fullDirPath, extension, entryPrefix) { + return glob.sync(path.join(fullDirPath, '**.' + extension)).reduce(function(obj, el) { + obj[entryPrefix + path.parse(el).name] = el; + return obj + }, {}); +} From 18d6017570f292808674f5e8884398554f31f2f5 Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Tue, 25 Dec 2018 17:20:30 +0100 Subject: [PATCH 09/96] Webpack: separate entries for each component file. Code splitting, making (separate) chunks for node_modules and common code shared between components --- package-lock.json | 2239 ++++++++++++++------ package.json | 9 +- src/main/resources/jsx4xp/entries/App.jsx | 4 +- src/main/resources/jsx4xp/entries/App2.jsx | 11 + webpack.config.js | 44 +- 5 files changed, 1613 insertions(+), 694 deletions(-) create mode 100644 src/main/resources/jsx4xp/entries/App2.jsx diff --git a/package-lock.json b/package-lock.json index bc036afc..ef6437ca 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,30 +19,210 @@ } } }, + "@webassemblyjs/ast": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.11.tgz", + "integrity": "sha512-ZEzy4vjvTzScC+SH8RBssQUawpaInUdMTYwYYLh54/s8TuT0gBLuyUnppKsVyZEi876VmmStKsUs28UxPgdvrA==", + "dev": true, + "requires": { + "@webassemblyjs/helper-module-context": "1.7.11", + "@webassemblyjs/helper-wasm-bytecode": "1.7.11", + "@webassemblyjs/wast-parser": "1.7.11" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.11.tgz", + "integrity": "sha512-zY8dSNyYcgzNRNT666/zOoAyImshm3ycKdoLsyDw/Bwo6+/uktb7p4xyApuef1dwEBo/U/SYQzbGBvV+nru2Xg==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.11.tgz", + "integrity": "sha512-7r1qXLmiglC+wPNkGuXCvkmalyEstKVwcueZRP2GNC2PAvxbLYwLLPr14rcdJaE4UtHxQKfFkuDFuv91ipqvXg==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.11.tgz", + "integrity": "sha512-MynuervdylPPh3ix+mKZloTcL06P8tenNH3sx6s0qE8SLR6DdwnfgA7Hc9NSYeob2jrW5Vql6GVlsQzKQCa13w==", + "dev": true + }, + "@webassemblyjs/helper-code-frame": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.11.tgz", + "integrity": "sha512-T8ESC9KMXFTXA5urJcyor5cn6qWeZ4/zLPyWeEXZ03hj/x9weSokGNkVCdnhSabKGYWxElSdgJ+sFa9G/RdHNw==", + "dev": true, + "requires": { + "@webassemblyjs/wast-printer": "1.7.11" + } + }, + "@webassemblyjs/helper-fsm": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.11.tgz", + "integrity": "sha512-nsAQWNP1+8Z6tkzdYlXT0kxfa2Z1tRTARd8wYnc/e3Zv3VydVVnaeePgqUzFrpkGUyhUUxOl5ML7f1NuT+gC0A==", + "dev": true + }, + "@webassemblyjs/helper-module-context": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.11.tgz", + "integrity": "sha512-JxfD5DX8Ygq4PvXDucq0M+sbUFA7BJAv/GGl9ITovqE+idGX+J3QSzJYz+LwQmL7fC3Rs+utvWoJxDb6pmC0qg==", + "dev": true + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.11.tgz", + "integrity": "sha512-cMXeVS9rhoXsI9LLL4tJxBgVD/KMOKXuFqYb5oCJ/opScWpkCMEz9EJtkonaNcnLv2R3K5jIeS4TRj/drde1JQ==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.11.tgz", + "integrity": "sha512-8ZRY5iZbZdtNFE5UFunB8mmBEAbSI3guwbrsCl4fWdfRiAcvqQpeqd5KHhSWLL5wuxo53zcaGZDBU64qgn4I4Q==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-buffer": "1.7.11", + "@webassemblyjs/helper-wasm-bytecode": "1.7.11", + "@webassemblyjs/wasm-gen": "1.7.11" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.7.11.tgz", + "integrity": "sha512-Mmqx/cS68K1tSrvRLtaV/Lp3NZWzXtOHUW2IvDvl2sihAwJh4ACE0eL6A8FvMyDG9abes3saB6dMimLOs+HMoQ==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.7.11.tgz", + "integrity": "sha512-vuGmgZjjp3zjcerQg+JA+tGOncOnJLWVkt8Aze5eWQLwTQGNgVLcyOTqgSCxWTR4J42ijHbBxnuRaL1Rv7XMdw==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.1" + } + }, + "@webassemblyjs/utf8": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.7.11.tgz", + "integrity": "sha512-C6GFkc7aErQIAH+BMrIdVSmW+6HSe20wg57HEC1uqJP8E/xpMjXqQUxkQw07MhNDSDcGpxI9G5JSNOQCqJk4sA==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.11.tgz", + "integrity": "sha512-FUd97guNGsCZQgeTPKdgxJhBXkUbMTY6hFPf2Y4OedXd48H97J+sOY2Ltaq6WGVpIH8o/TGOVNiVz/SbpEMJGg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-buffer": "1.7.11", + "@webassemblyjs/helper-wasm-bytecode": "1.7.11", + "@webassemblyjs/helper-wasm-section": "1.7.11", + "@webassemblyjs/wasm-gen": "1.7.11", + "@webassemblyjs/wasm-opt": "1.7.11", + "@webassemblyjs/wasm-parser": "1.7.11", + "@webassemblyjs/wast-printer": "1.7.11" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.11.tgz", + "integrity": "sha512-U/KDYp7fgAZX5KPfq4NOupK/BmhDc5Kjy2GIqstMhvvdJRcER/kUsMThpWeRP8BMn4LXaKhSTggIJPOeYHwISA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-wasm-bytecode": "1.7.11", + "@webassemblyjs/ieee754": "1.7.11", + "@webassemblyjs/leb128": "1.7.11", + "@webassemblyjs/utf8": "1.7.11" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.11.tgz", + "integrity": "sha512-XynkOwQyiRidh0GLua7SkeHvAPXQV/RxsUeERILmAInZegApOUAIJfRuPYe2F7RcjOC9tW3Cb9juPvAC/sCqvg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-buffer": "1.7.11", + "@webassemblyjs/wasm-gen": "1.7.11", + "@webassemblyjs/wasm-parser": "1.7.11" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.11.tgz", + "integrity": "sha512-6lmXRTrrZjYD8Ng8xRyvyXQJYUQKYSXhJqXOBLw24rdiXsHAOlvw5PhesjdcaMadU/pyPQOJ5dHreMjBxwnQKg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-api-error": "1.7.11", + "@webassemblyjs/helper-wasm-bytecode": "1.7.11", + "@webassemblyjs/ieee754": "1.7.11", + "@webassemblyjs/leb128": "1.7.11", + "@webassemblyjs/utf8": "1.7.11" + } + }, + "@webassemblyjs/wast-parser": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.7.11.tgz", + "integrity": "sha512-lEyVCg2np15tS+dm7+JJTNhNWq9yTZvi3qEhAIIOaofcYlUp0UR5/tVqOwa/gXYr3gjwSZqw+/lS9dscyLelbQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/floating-point-hex-parser": "1.7.11", + "@webassemblyjs/helper-api-error": "1.7.11", + "@webassemblyjs/helper-code-frame": "1.7.11", + "@webassemblyjs/helper-fsm": "1.7.11", + "@xtuc/long": "4.2.1" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.7.11.tgz", + "integrity": "sha512-m5vkAsuJ32QpkdkDOUPGSltrg8Cuk3KBx4YrmAGQwCZPRdUHXxG4phIOuuycLemHFr74sWL9Wthqss4fzdzSwg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/wast-parser": "1.7.11", + "@xtuc/long": "4.2.1" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.1.tgz", + "integrity": "sha512-FZdkNBDqBRHKQ2MEbSC17xnPFOhZxeJ2YGSfr2BKf3sujG49Qe3bB+rGCwQfIaA7WHnGeGkSijX4FuBCdrzW/g==", + "dev": true + }, "acorn": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.1.tgz", - "integrity": "sha512-d+nbxBUGKg7Arpsvbnlq61mc12ek3EY8EQldM3GPAhWJ1UVxC6TDGbIvUMNU6obBX3i1+ptCIzV4vq0gFPEGVQ==" + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", + "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", + "dev": true }, "acorn-dynamic-import": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz", - "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz", + "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==", + "dev": true, "requires": { - "acorn": "^4.0.3" - }, - "dependencies": { - "acorn": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" - } + "acorn": "^5.0.0" } }, "ajv": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.2.tgz", "integrity": "sha512-hOs7GfvI6tUI1LfZddH82ky6mOMyTuY0mk7kE2pWpmhhUSkumzaTO5vbVwij39MdwPQWCV4Zv57Eo06NtL/GVA==", + "dev": true, "requires": { "fast-deep-equal": "^2.0.1", "fast-json-stable-stringify": "^2.0.0", @@ -50,20 +230,17 @@ "uri-js": "^4.2.1" } }, + "ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "dev": true + }, "ajv-keywords": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz", - "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=" - }, - "align-text": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", - "requires": { - "kind-of": "^3.0.2", - "longest": "^1.0.1", - "repeat-string": "^1.5.2" - } + "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=", + "dev": true }, "alphanum-sort": { "version": "1.0.2", @@ -85,11 +262,18 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=", + "dev": true, "requires": { "micromatch": "^3.1.4", "normalize-path": "^2.1.1" } }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -102,22 +286,26 @@ "arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true }, "arr-flatten": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=" + "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=", + "dev": true }, "arr-union": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true }, "array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true }, "asap": { "version": "2.0.6", @@ -128,6 +316,7 @@ "version": "4.10.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", "integrity": "sha1-ucK/WAXx5kqt7tbfOiv6+1pz9aA=", + "dev": true, "requires": { "bn.js": "^4.0.0", "inherits": "^2.0.1", @@ -138,6 +327,7 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "dev": true, "requires": { "util": "0.10.3" }, @@ -145,12 +335,14 @@ "inherits": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true }, "util": { "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "resolved": "http://registry.npmjs.org/util/-/util-0.10.3.tgz", "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, "requires": { "inherits": "2.0.1" } @@ -160,25 +352,20 @@ "assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" - }, - "async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", - "integrity": "sha1-skWiPKcZMAROxT+kaqAKPofGphA=", - "requires": { - "lodash": "^4.17.10" - } + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true }, "async-each": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=" + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "dev": true }, "atob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz", - "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true }, "autoprefixer": { "version": "6.7.7", @@ -1319,6 +1506,7 @@ "version": "0.11.2", "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=", + "dev": true, "requires": { "cache-base": "^1.0.1", "class-utils": "^0.3.5", @@ -1333,6 +1521,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, "requires": { "is-descriptor": "^1.0.0" } @@ -1341,6 +1530,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -1349,6 +1539,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -1357,6 +1548,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -1366,29 +1558,40 @@ "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=" + "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=", + "dev": true } } }, "base64-js": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", - "integrity": "sha1-yrHmEY8FEJXli1KBrqjBzSK/wOM=" + "integrity": "sha1-yrHmEY8FEJXli1KBrqjBzSK/wOM=", + "dev": true }, "big.js": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", - "integrity": "sha1-pfwpi4G54Nyi5FiCR4S2XFK6WI4=" + "integrity": "sha1-pfwpi4G54Nyi5FiCR4S2XFK6WI4=", + "dev": true }, "binary-extensions": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", - "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=" + "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", + "dev": true + }, + "bluebird": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", + "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==", + "dev": true }, "bn.js": { "version": "4.11.8", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha1-LN4J617jQfSEdGuwMJsyU7GxRC8=" + "integrity": "sha1-LN4J617jQfSEdGuwMJsyU7GxRC8=", + "dev": true }, "brace-expansion": { "version": "1.1.11", @@ -1403,6 +1606,7 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", + "dev": true, "requires": { "arr-flatten": "^1.1.0", "array-unique": "^0.3.2", @@ -1420,6 +1624,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -1429,12 +1634,14 @@ "brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true }, "browserify-aes": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha1-Mmc0ZC9APavDADIJhTu3CtQo70g=", + "resolved": "http://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, "requires": { "buffer-xor": "^1.0.3", "cipher-base": "^1.0.0", @@ -1448,6 +1655,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", "integrity": "sha1-jWR0wbhwv9q807z8wZNKEOlPFfA=", + "dev": true, "requires": { "browserify-aes": "^1.0.4", "browserify-des": "^1.0.0", @@ -1455,19 +1663,22 @@ } }, "browserify-des": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.1.tgz", - "integrity": "sha512-zy0Cobe3hhgpiOM32Tj7KQ3Vl91m0njwsjzZQK1L+JDf11dzP9qIvjreVinsvXrgfjhStXwUWAEpB9D7Gwmayw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, "requires": { "cipher-base": "^1.0.1", "des.js": "^1.0.0", - "inherits": "^2.0.1" + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "browserify-rsa": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "resolved": "http://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "dev": true, "requires": { "bn.js": "^4.1.0", "randombytes": "^2.0.1" @@ -1477,6 +1688,7 @@ "version": "4.0.4", "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "dev": true, "requires": { "bn.js": "^4.1.1", "browserify-rsa": "^4.0.0", @@ -1491,6 +1703,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", "integrity": "sha1-KGlFnZqjviRf6P4sofRuLn9U1z8=", + "dev": true, "requires": { "pako": "~1.0.5" } @@ -1507,33 +1720,82 @@ }, "buffer": { "version": "4.9.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "resolved": "http://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "dev": true, "requires": { "base64-js": "^1.0.2", "ieee754": "^1.1.4", "isarray": "^1.0.0" } }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, "buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=" + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true }, "builtin-status-codes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "cacache": { + "version": "11.3.2", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.2.tgz", + "integrity": "sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg==", + "dev": true, + "requires": { + "bluebird": "^3.5.3", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.3", + "graceful-fs": "^4.1.15", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.2", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + }, + "dependencies": { + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", + "dev": true + } + } }, "cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", "integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=", + "dev": true, "requires": { "collection-visit": "^1.0.0", "component-emitter": "^1.2.1", @@ -1547,9 +1809,10 @@ } }, "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=" + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", + "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==", + "dev": true }, "caniuse-api": { "version": "1.6.1", @@ -1569,15 +1832,6 @@ "integrity": "sha1-NaSyMlqNRVOka1FtvCM785HXVVU=", "dev": true }, - "center-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", - "requires": { - "align-text": "^0.1.3", - "lazy-cache": "^1.0.3" - } - }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", @@ -1601,6 +1855,7 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", "integrity": "sha1-NW/04rDo5D4yLRijckYLvPOszSY=", + "dev": true, "requires": { "anymatch": "^2.0.0", "async-each": "^1.0.0", @@ -1617,10 +1872,26 @@ "upath": "^1.0.5" } }, + "chownr": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", + "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", + "dev": true + }, + "chrome-trace-event": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz", + "integrity": "sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, "cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", "integrity": "sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94=", + "dev": true, "requires": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -1639,6 +1910,7 @@ "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", "integrity": "sha1-+TNprouafOAv1B+q0MqDAzGQxGM=", + "dev": true, "requires": { "arr-union": "^3.1.0", "define-property": "^0.2.5", @@ -1650,6 +1922,7 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -1657,13 +1930,31 @@ } }, "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "dev": true, "requires": { - "center-align": "^0.1.1", - "right-align": "^0.1.1", - "wordwrap": "0.0.2" + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } } }, "clone": { @@ -1684,12 +1975,14 @@ "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true }, "collection-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, "requires": { "map-visit": "^1.0.0", "object-visit": "^1.0.0" @@ -1762,17 +2055,31 @@ "component-emitter": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, + "concat-stream": { + "version": "1.6.2", + "resolved": "http://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, "console-browserify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "dev": true, "requires": { "date-now": "^0.1.4" } @@ -1780,7 +2087,8 @@ "constants-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true }, "convert-source-map": { "version": "1.5.1", @@ -1788,10 +2096,25 @@ "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", "dev": true }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + } + }, "copy-descriptor": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true }, "core-js": { "version": "1.2.7", @@ -1801,12 +2124,14 @@ "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true }, "create-ecdh": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", "integrity": "sha1-yREbbzMEXEaX8UR4f5JUzcd8Rf8=", + "dev": true, "requires": { "bn.js": "^4.1.0", "elliptic": "^6.0.0" @@ -1814,8 +2139,9 @@ }, "create-hash": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha1-iJB4rxGmN1a8+1m9IhmWvjqe8ZY=", + "resolved": "http://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, "requires": { "cipher-base": "^1.0.1", "inherits": "^2.0.1", @@ -1826,8 +2152,9 @@ }, "create-hmac": { "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha1-aRcMeLOrlXFHsriwRXLkfq0iQ/8=", + "resolved": "http://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, "requires": { "cipher-base": "^1.0.3", "create-hash": "^1.1.0", @@ -1847,11 +2174,14 @@ } }, "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, "requires": { - "lru-cache": "^4.0.1", + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", "shebang-command": "^1.2.0", "which": "^1.2.9" } @@ -1860,6 +2190,7 @@ "version": "3.12.0", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", "integrity": "sha1-OWz58xN/A+S45TLFj2mCVOAPgOw=", + "dev": true, "requires": { "browserify-cipher": "^1.0.0", "browserify-sign": "^4.0.0", @@ -1982,23 +2313,23 @@ "source-map": "^0.5.3" } }, - "d": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", - "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", - "requires": { - "es5-ext": "^0.10.9" - } + "cyclist": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", + "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", + "dev": true }, "date-now": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=" + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", + "dev": true }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, "requires": { "ms": "2.0.0" } @@ -2006,17 +2337,20 @@ "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true }, "decode-uri-component": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true }, "define-property": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", "integrity": "sha1-1Flono1lS6d+AqgX+HENcCyxbp0=", + "dev": true, "requires": { "is-descriptor": "^1.0.2", "isobject": "^3.0.1" @@ -2026,6 +2360,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -2034,6 +2369,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -2042,6 +2378,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -2051,7 +2388,8 @@ "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=" + "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=", + "dev": true } } }, @@ -2065,6 +2403,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "dev": true, "requires": { "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0" @@ -2081,8 +2420,9 @@ }, "diffie-hellman": { "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha1-QOjumPVaIUlgcUaSHGPhrl89KHU=", + "resolved": "http://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, "requires": { "bn.js": "^4.1.0", "miller-rabin": "^4.0.0", @@ -2092,7 +2432,20 @@ "domain-browser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha1-PTH1AZGmdJ3RN1p/Ui6CPULlTto=" + "integrity": "sha1-PTH1AZGmdJ3RN1p/Ui6CPULlTto=", + "dev": true + }, + "duplexify": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.1.tgz", + "integrity": "sha512-vM58DwdnKmty+FSPzT14K9JXb90H+j5emaR4KYbr2KTIz00WHGbWOe5ghQTx233ZCLZtrGDALzKwcjEtSt35mA==", + "dev": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } }, "electron-to-chromium": { "version": "1.3.51", @@ -2101,9 +2454,10 @@ "dev": true }, "elliptic": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", - "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", + "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", + "dev": true, "requires": { "bn.js": "^4.4.0", "brorand": "^1.0.1", @@ -2117,7 +2471,8 @@ "emojis-list": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true }, "encoding": { "version": "0.1.12", @@ -2127,110 +2482,46 @@ "iconv-lite": "~0.4.13" } }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, "enhanced-resolve": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", - "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", + "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", + "dev": true, "requires": { "graceful-fs": "^4.1.2", "memory-fs": "^0.4.0", - "object-assign": "^4.0.1", - "tapable": "^0.2.7" + "tapable": "^1.0.0" } }, "errno": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", "integrity": "sha1-RoTXF3mtOa8Xfj8AeZb3xnyFJhg=", + "dev": true, "requires": { "prr": "~1.0.1" } }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha1-tKxAZIEH/c3PriQvQovqihTU8b8=", - "requires": { - "is-arrayish": "^0.2.1" - } + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, - "es5-ext": { - "version": "0.10.45", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.45.tgz", - "integrity": "sha512-FkfM6Vxxfmztilbxxz5UKSD4ICMf5tSpRFtDNtkAhOxZ0EKtX6qwmXNyH/sFyIbX2P/nU5AMiA9jilWsUGJzCQ==", - "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.1", - "next-tick": "1" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-map": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", - "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", - "requires": { - "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": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", - "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", - "requires": { - "d": "1", - "es5-ext": "~0.10.14", - "es6-iterator": "~2.0.1", - "es6-symbol": "3.1.1", - "event-emitter": "~0.3.5" - } - }, - "es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "requires": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, - "es6-weak-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", - "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", - "requires": { - "d": "1", - "es5-ext": "^0.10.14", - "es6-iterator": "^2.0.1", - "es6-symbol": "^3.1.1" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "escope": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", - "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", + "eslint-scope": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz", + "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", + "dev": true, "requires": { - "es6-map": "^0.1.3", - "es6-weak-map": "^2.0.1", "esrecurse": "^4.1.0", "estraverse": "^4.1.1" } @@ -2245,6 +2536,7 @@ "version": "4.2.1", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", "integrity": "sha1-AHo7n9vCs7uH5IeeoZyS/b05Qs8=", + "dev": true, "requires": { "estraverse": "^4.1.0" } @@ -2252,7 +2544,8 @@ "estraverse": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=" + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true }, "esutils": { "version": "2.0.2", @@ -2260,35 +2553,29 @@ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", "dev": true }, - "event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", - "requires": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, "events": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" + "resolved": "http://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "dev": true }, "evp_bytestokey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", "integrity": "sha1-f8vbGY3HGVlDLv4ThCaE4FJaywI=", + "dev": true, "requires": { "md5.js": "^1.3.4", "safe-buffer": "^5.1.1" } }, "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", + "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", + "dev": true, "requires": { - "cross-spawn": "^5.0.1", + "cross-spawn": "^6.0.0", "get-stream": "^3.0.0", "is-stream": "^1.1.0", "npm-run-path": "^2.0.0", @@ -2301,6 +2588,7 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, "requires": { "debug": "^2.3.3", "define-property": "^0.2.5", @@ -2315,6 +2603,7 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -2323,6 +2612,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -2379,6 +2669,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, "requires": { "assign-symbols": "^1.0.0", "is-extendable": "^1.0.1" @@ -2388,6 +2679,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", + "dev": true, "requires": { "is-plain-object": "^2.0.4" } @@ -2397,7 +2689,8 @@ "extglob": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, "requires": { "array-unique": "^0.3.2", "define-property": "^1.0.0", @@ -2413,6 +2706,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, "requires": { "is-descriptor": "^1.0.0" } @@ -2421,6 +2715,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -2428,7 +2723,8 @@ "is-accessor-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -2436,7 +2732,8 @@ "is-data-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -2444,7 +2741,8 @@ "is-descriptor": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -2454,19 +2752,22 @@ "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=" + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true } } }, "fast-deep-equal": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true }, "fast-json-stable-stringify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true }, "fastparse": { "version": "1.1.1", @@ -2488,6 +2789,12 @@ "ua-parser-js": "^0.7.18" } }, + "figgy-pudding": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", + "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==", + "dev": true + }, "filename-regex": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", @@ -2499,6 +2806,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, "requires": { "extend-shallow": "^2.0.1", "is-number": "^3.0.0", @@ -2510,6 +2818,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -2531,6 +2840,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, "requires": { "locate-path": "^2.0.0" } @@ -2541,10 +2851,21 @@ "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=", "dev": true }, + "flush-write-stream": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", + "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.4" + } + }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true }, "for-own": { "version": "0.1.5", @@ -2560,10 +2881,21 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, "requires": { "map-cache": "^0.2.2" } }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, "fs-extra": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", @@ -2580,6 +2912,18 @@ "integrity": "sha1-4y/AMKLM7kSmtTcTCNpUvgs5fSc=", "dev": true }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -2589,6 +2933,7 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", "integrity": "sha1-9B3LGvJYKvNpLaNvxVy9jhBBxCY=", + "dev": true, "optional": true, "requires": { "nan": "^2.9.2", @@ -2598,20 +2943,24 @@ "abbrev": { "version": "1.1.1", "bundled": true, + "dev": true, "optional": true }, "ansi-regex": { "version": "2.1.1", - "bundled": true + "bundled": true, + "dev": true }, "aproba": { "version": "1.2.0", "bundled": true, + "dev": true, "optional": true }, "are-we-there-yet": { "version": "1.1.4", "bundled": true, + "dev": true, "optional": true, "requires": { "delegates": "^1.0.0", @@ -2620,11 +2969,13 @@ }, "balanced-match": { "version": "1.0.0", - "bundled": true + "bundled": true, + "dev": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, + "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -2633,28 +2984,34 @@ "chownr": { "version": "1.0.1", "bundled": true, + "dev": true, "optional": true }, "code-point-at": { "version": "1.1.0", - "bundled": true + "bundled": true, + "dev": true }, "concat-map": { "version": "0.0.1", - "bundled": true + "bundled": true, + "dev": true }, "console-control-strings": { "version": "1.1.0", - "bundled": true + "bundled": true, + "dev": true }, "core-util-is": { "version": "1.0.2", "bundled": true, + "dev": true, "optional": true }, "debug": { "version": "2.6.9", "bundled": true, + "dev": true, "optional": true, "requires": { "ms": "2.0.0" @@ -2663,21 +3020,25 @@ "deep-extend": { "version": "0.5.1", "bundled": true, + "dev": true, "optional": true }, "delegates": { "version": "1.0.0", "bundled": true, + "dev": true, "optional": true }, "detect-libc": { "version": "1.0.3", "bundled": true, + "dev": true, "optional": true }, "fs-minipass": { "version": "1.2.5", "bundled": true, + "dev": true, "optional": true, "requires": { "minipass": "^2.2.1" @@ -2686,11 +3047,13 @@ "fs.realpath": { "version": "1.0.0", "bundled": true, + "dev": true, "optional": true }, "gauge": { "version": "2.7.4", "bundled": true, + "dev": true, "optional": true, "requires": { "aproba": "^1.0.3", @@ -2706,6 +3069,7 @@ "glob": { "version": "7.1.2", "bundled": true, + "dev": true, "optional": true, "requires": { "fs.realpath": "^1.0.0", @@ -2719,11 +3083,13 @@ "has-unicode": { "version": "2.0.1", "bundled": true, + "dev": true, "optional": true }, "iconv-lite": { "version": "0.4.21", "bundled": true, + "dev": true, "optional": true, "requires": { "safer-buffer": "^2.1.0" @@ -2732,6 +3098,7 @@ "ignore-walk": { "version": "3.0.1", "bundled": true, + "dev": true, "optional": true, "requires": { "minimatch": "^3.0.4" @@ -2740,6 +3107,7 @@ "inflight": { "version": "1.0.6", "bundled": true, + "dev": true, "optional": true, "requires": { "once": "^1.3.0", @@ -2748,16 +3116,19 @@ }, "inherits": { "version": "2.0.3", - "bundled": true + "bundled": true, + "dev": true }, "ini": { "version": "1.3.5", "bundled": true, + "dev": true, "optional": true }, "is-fullwidth-code-point": { "version": "1.0.0", "bundled": true, + "dev": true, "requires": { "number-is-nan": "^1.0.0" } @@ -2765,22 +3136,26 @@ "isarray": { "version": "1.0.0", "bundled": true, + "dev": true, "optional": true }, "minimatch": { "version": "3.0.4", "bundled": true, + "dev": true, "requires": { "brace-expansion": "^1.1.7" } }, "minimist": { "version": "0.0.8", - "bundled": true + "bundled": true, + "dev": true }, "minipass": { "version": "2.2.4", "bundled": true, + "dev": true, "requires": { "safe-buffer": "^5.1.1", "yallist": "^3.0.0" @@ -2789,6 +3164,7 @@ "minizlib": { "version": "1.1.0", "bundled": true, + "dev": true, "optional": true, "requires": { "minipass": "^2.2.1" @@ -2797,6 +3173,7 @@ "mkdirp": { "version": "0.5.1", "bundled": true, + "dev": true, "requires": { "minimist": "0.0.8" } @@ -2804,11 +3181,13 @@ "ms": { "version": "2.0.0", "bundled": true, + "dev": true, "optional": true }, "needle": { "version": "2.2.0", "bundled": true, + "dev": true, "optional": true, "requires": { "debug": "^2.1.2", @@ -2819,6 +3198,7 @@ "node-pre-gyp": { "version": "0.10.0", "bundled": true, + "dev": true, "optional": true, "requires": { "detect-libc": "^1.0.2", @@ -2836,6 +3216,7 @@ "nopt": { "version": "4.0.1", "bundled": true, + "dev": true, "optional": true, "requires": { "abbrev": "1", @@ -2845,11 +3226,13 @@ "npm-bundled": { "version": "1.0.3", "bundled": true, + "dev": true, "optional": true }, "npm-packlist": { "version": "1.1.10", "bundled": true, + "dev": true, "optional": true, "requires": { "ignore-walk": "^3.0.1", @@ -2859,6 +3242,7 @@ "npmlog": { "version": "4.1.2", "bundled": true, + "dev": true, "optional": true, "requires": { "are-we-there-yet": "~1.1.2", @@ -2869,16 +3253,19 @@ }, "number-is-nan": { "version": "1.0.1", - "bundled": true + "bundled": true, + "dev": true }, "object-assign": { "version": "4.1.1", "bundled": true, + "dev": true, "optional": true }, "once": { "version": "1.4.0", "bundled": true, + "dev": true, "requires": { "wrappy": "1" } @@ -2886,16 +3273,19 @@ "os-homedir": { "version": "1.0.2", "bundled": true, + "dev": true, "optional": true }, "os-tmpdir": { "version": "1.0.2", "bundled": true, + "dev": true, "optional": true }, "osenv": { "version": "0.1.5", "bundled": true, + "dev": true, "optional": true, "requires": { "os-homedir": "^1.0.0", @@ -2905,16 +3295,19 @@ "path-is-absolute": { "version": "1.0.1", "bundled": true, + "dev": true, "optional": true }, "process-nextick-args": { "version": "2.0.0", "bundled": true, + "dev": true, "optional": true }, "rc": { "version": "1.2.7", "bundled": true, + "dev": true, "optional": true, "requires": { "deep-extend": "^0.5.1", @@ -2926,6 +3319,7 @@ "minimist": { "version": "1.2.0", "bundled": true, + "dev": true, "optional": true } } @@ -2933,6 +3327,7 @@ "readable-stream": { "version": "2.3.6", "bundled": true, + "dev": true, "optional": true, "requires": { "core-util-is": "~1.0.0", @@ -2947,6 +3342,7 @@ "rimraf": { "version": "2.6.2", "bundled": true, + "dev": true, "optional": true, "requires": { "glob": "^7.0.5" @@ -2954,36 +3350,43 @@ }, "safe-buffer": { "version": "5.1.1", - "bundled": true + "bundled": true, + "dev": true }, "safer-buffer": { "version": "2.1.2", "bundled": true, + "dev": true, "optional": true }, "sax": { "version": "1.2.4", "bundled": true, + "dev": true, "optional": true }, "semver": { "version": "5.5.0", "bundled": true, + "dev": true, "optional": true }, "set-blocking": { "version": "2.0.0", "bundled": true, + "dev": true, "optional": true }, "signal-exit": { "version": "3.0.2", "bundled": true, + "dev": true, "optional": true }, "string-width": { "version": "1.0.2", "bundled": true, + "dev": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -2993,6 +3396,7 @@ "string_decoder": { "version": "1.1.1", "bundled": true, + "dev": true, "optional": true, "requires": { "safe-buffer": "~5.1.0" @@ -3001,6 +3405,7 @@ "strip-ansi": { "version": "3.0.1", "bundled": true, + "dev": true, "requires": { "ansi-regex": "^2.0.0" } @@ -3008,11 +3413,13 @@ "strip-json-comments": { "version": "2.0.1", "bundled": true, + "dev": true, "optional": true }, "tar": { "version": "4.4.1", "bundled": true, + "dev": true, "optional": true, "requires": { "chownr": "^1.0.1", @@ -3027,11 +3434,13 @@ "util-deprecate": { "version": "1.0.2", "bundled": true, + "dev": true, "optional": true }, "wide-align": { "version": "1.1.2", "bundled": true, + "dev": true, "optional": true, "requires": { "string-width": "^1.0.2" @@ -3039,11 +3448,13 @@ }, "wrappy": { "version": "1.0.2", - "bundled": true + "bundled": true, + "dev": true }, "yallist": { "version": "3.0.2", - "bundled": true + "bundled": true, + "dev": true } } }, @@ -3054,19 +3465,22 @@ "dev": true }, "get-caller-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", - "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true }, "get-stream": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true }, "get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true }, "glob": { "version": "7.1.2", @@ -3123,6 +3537,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, "requires": { "is-glob": "^3.1.0", "path-dirname": "^1.0.0" @@ -3132,12 +3547,19 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, "requires": { "is-extglob": "^2.1.0" } } } }, + "global-modules-path": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/global-modules-path/-/global-modules-path-2.3.1.tgz", + "integrity": "sha512-y+shkf4InI7mPRHSo2b/k6ix6+NLDtyccYv86whhxrSGX9wjPX1VMITmrDbE1eh7zkzhiWtW2sHklJYoQ62Cxg==", + "dev": true + }, "globals": { "version": "9.18.0", "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", @@ -3172,14 +3594,16 @@ } }, "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true }, "has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, "requires": { "get-value": "^2.0.6", "has-values": "^1.0.0", @@ -3190,6 +3614,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, "requires": { "is-number": "^3.0.0", "kind-of": "^4.0.0" @@ -3199,6 +3624,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -3209,18 +3635,20 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "dev": true, "requires": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" } }, "hash.js": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.4.tgz", - "integrity": "sha512-A6RlQvvZEtFS5fLU43IDu0QUmBy+fDO9VMdTXvufKwIkt/rFfvICAViCax5fbDO4zdNzaC3/27ZhKUok5bAJyw==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, "requires": { "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.0" + "minimalistic-assert": "^1.0.1" } }, "history": { @@ -3249,6 +3677,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, "requires": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", @@ -3270,11 +3699,6 @@ "os-tmpdir": "^1.0.1" } }, - "hosted-git-info": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.1.tgz", - "integrity": "sha512-Ba4+0M4YvIDUUsprMjhVTU1yN9F2/LJSAl69ZpzaLT4l4j5mwTS6jqqW9Ojvj6lKz/veqPzpJBqGbXspOb533A==" - }, "html-comment-regex": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.1.tgz", @@ -3284,7 +3708,8 @@ "https-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true }, "iconv-lite": { "version": "0.4.23", @@ -3366,13 +3791,90 @@ "ieee754": { "version": "1.1.12", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", - "integrity": "sha1-UL8k5bnIu5ivSWTJQc2wkY2ntgs=" + "integrity": "sha1-UL8k5bnIu5ivSWTJQc2wkY2ntgs=", + "dev": true + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true }, "immutable": { "version": "3.8.2", "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", "integrity": "sha1-wkOZUUVbs5kT2vKBN28VMOEErfM=" }, + "import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "dev": true, + "requires": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz", + "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", + "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + } + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, "indexes-of": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", @@ -3382,7 +3884,8 @@ "indexof": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true }, "inflight": { "version": "1.0.6", @@ -3401,7 +3904,8 @@ "interpret": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", - "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=" + "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", + "dev": true }, "invariant": { "version": "2.2.4", @@ -3412,9 +3916,10 @@ } }, "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", + "dev": true }, "is-absolute-url": { "version": "2.1.0", @@ -3424,21 +3929,18 @@ }, "is-accessor-descriptor": { "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "resolved": "http://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, "requires": { "kind-of": "^3.0.2" } }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" - }, "is-binary-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, "requires": { "binary-extensions": "^1.0.0" } @@ -3446,20 +3948,14 @@ "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=" - }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "requires": { - "builtin-modules": "^1.0.0" - } + "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=", + "dev": true }, "is-data-descriptor": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "resolved": "http://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, "requires": { "kind-of": "^3.0.2" } @@ -3468,6 +3964,7 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", + "dev": true, "requires": { "is-accessor-descriptor": "^0.1.6", "is-data-descriptor": "^0.1.4", @@ -3477,7 +3974,8 @@ "kind-of": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=" + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", + "dev": true } } }, @@ -3501,12 +3999,14 @@ "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true }, "is-finite": { "version": "1.0.2", @@ -3518,17 +4018,16 @@ } }, "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "^1.0.0" - } + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true }, "is-glob": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "dev": true, "requires": { "is-extglob": "^2.1.1" } @@ -3537,6 +4036,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, "requires": { "kind-of": "^3.0.2" } @@ -3551,6 +4051,7 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", + "dev": true, "requires": { "isobject": "^3.0.1" } @@ -3586,22 +4087,26 @@ "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0=" + "integrity": "sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0=", + "dev": true }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true }, "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true }, "isomorphic-fetch": { "version": "2.2.1", @@ -3639,20 +4144,23 @@ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", "dev": true }, - "json-loader": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", - "integrity": "sha1-3KFKcCNf+C8KyaOr62DTN6NlGF0=" + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=" + "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=", + "dev": true }, "json5": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true }, "jsonfile": { "version": "3.0.1", @@ -3666,21 +4174,18 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "requires": { "is-buffer": "^1.1.5" } }, - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" - }, "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "dev": true, "requires": { - "invert-kv": "^1.0.0" + "invert-kv": "^2.0.0" } }, "less-loader": { @@ -3708,26 +4213,17 @@ } } }, - "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" - } - }, "loader-runner": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.0.tgz", - "integrity": "sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI=" + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.1.tgz", + "integrity": "sha512-By6ZFY7ETWOc9RFaAIb23IjJVcM4dvJC/N57nmdz9RSkMXvAXGI7SyVlAw3v8vjtDRlqThgVDVmTnr9fqMlxkw==", + "dev": true }, "loader-utils": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", + "dev": true, "requires": { "big.js": "^3.1.3", "emojis-list": "^2.0.0", @@ -3738,6 +4234,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, "requires": { "p-locate": "^2.0.0", "path-exists": "^3.0.0" @@ -3767,7 +4264,8 @@ "lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "dev": true }, "lodash.memoize": { "version": "4.1.2", @@ -3798,11 +4296,6 @@ "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", "dev": true }, - "longest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" - }, "loose-envify": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", @@ -3812,12 +4305,12 @@ } }, "lru-cache": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", - "integrity": "sha1-oRdc80lt/IQ2wVbDNLSVWZK85pw=", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "yallist": "^3.0.2" } }, "make-dir": { @@ -3837,15 +4330,26 @@ } } }, + "map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "dev": true, + "requires": { + "p-defer": "^1.0.0" + } + }, "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true }, "map-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, "requires": { "object-visit": "^1.0.0" } @@ -3864,26 +4368,32 @@ "optional": true }, "md5.js": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", - "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, "requires": { "hash-base": "^3.0.0", - "inherits": "^2.0.1" + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "mem": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", - "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.0.0.tgz", + "integrity": "sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA==", + "dev": true, "requires": { - "mimic-fn": "^1.0.0" + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^1.0.0", + "p-is-promise": "^1.1.0" } }, "memory-fs": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, "requires": { "errno": "^0.1.3", "readable-stream": "^2.0.1" @@ -3892,7 +4402,8 @@ "micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, "requires": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -3912,7 +4423,8 @@ "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=" + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true } } }, @@ -3920,6 +4432,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", "integrity": "sha1-8IA1HIZbDcViqEYpZtqlNUPHik0=", + "dev": true, "requires": { "bn.js": "^4.0.0", "brorand": "^1.0.1" @@ -3928,17 +4441,20 @@ "mimic-fn": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha1-ggyGo5M0ZA6ZUWkovQP8qIBX0CI=" + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true }, "minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha1-LhlN4ERibUoQ5/f7wAznPoPk1cc=" + "integrity": "sha1-LhlN4ERibUoQ5/f7wAznPoPk1cc=", + "dev": true }, "minimalistic-crypto-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true }, "minimatch": { "version": "3.0.4", @@ -3953,10 +4469,29 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" }, + "mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "dev": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, "mixin-deep": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", "integrity": "sha1-pJ5yaNzhoNlpjkUybFYm3zVD0P4=", + "dev": true, "requires": { "for-in": "^1.0.2", "is-extendable": "^1.0.1" @@ -3966,6 +4501,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", + "dev": true, "requires": { "is-plain-object": "^2.0.4" } @@ -3980,21 +4516,38 @@ "minimist": "0.0.8" } }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + } + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true }, "nan": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", + "dev": true, "optional": true }, "nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", "integrity": "sha1-uHqKpPwN6P5r6IiVs4mD/yZb0Rk=", + "dev": true, "requires": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -4012,19 +4565,22 @@ "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=" + "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=", + "dev": true } } }, "neo-async": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.5.1.tgz", - "integrity": "sha512-3KL3fvuRkZ7s4IFOMfztb7zJp3QaVWnBeGoJlgB38XnCRPj/0tLzzLG5IB8NYOHbJ8g8UGrgZv44GLDk6CxTxA==" + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.0.tgz", + "integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==", + "dev": true }, - "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true }, "node-fetch": { "version": "1.7.3", @@ -4039,6 +4595,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz", "integrity": "sha1-X5QmPUBPbkR2fXJpAf/wVHjWAN8=", + "dev": true, "requires": { "assert": "^1.1.1", "browserify-zlib": "^0.2.0", @@ -4068,25 +4625,16 @@ "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true } } }, - "normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha1-EvlaMH1YNSB1oEkHuErIvpisAS8=", - "requires": { - "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, "normalize-path": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, "requires": { "remove-trailing-separator": "^1.0.1" } @@ -4113,6 +4661,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, "requires": { "path-key": "^2.0.0" } @@ -4126,7 +4675,8 @@ "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true }, "object-assign": { "version": "4.1.1", @@ -4137,6 +4687,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, "requires": { "copy-descriptor": "^0.1.0", "define-property": "^0.2.5", @@ -4147,6 +4698,7 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -4157,6 +4709,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, "requires": { "isobject": "^3.0.0" } @@ -4176,6 +4729,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, "requires": { "isobject": "^3.0.1" } @@ -4191,7 +4745,8 @@ "os-browserify": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true }, "os-homedir": { "version": "1.0.2", @@ -4200,13 +4755,14 @@ "dev": true }, "os-locale": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", - "integrity": "sha1-QrwpAKa1uL0XN2yOiCtlr8zyS/I=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.0.1.tgz", + "integrity": "sha512-7g5e7dmXPtzcP4bgsZ8ixDVqA7oWYuEz4lOSujeWyliPai4gfVDiFIcwBg3aGCPnmSGfzOKTK3ccPn0CKv3DBw==", + "dev": true, "requires": { - "execa": "^0.7.0", - "lcid": "^1.0.0", - "mem": "^1.1.0" + "execa": "^0.10.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" } }, "os-tmpdir": { @@ -4226,15 +4782,29 @@ "object-assign": "^4.1.0" } }, + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "dev": true + }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-is-promise": { + "version": "1.1.0", + "resolved": "http://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", + "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", + "dev": true }, "p-limit": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", "integrity": "sha1-uGvV8MJWkJEcdZD8v8IBDVSzzLg=", + "dev": true, "requires": { "p-try": "^1.0.0" } @@ -4243,6 +4813,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, "requires": { "p-limit": "^1.1.0" } @@ -4250,17 +4821,31 @@ "p-try": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true }, "pako": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", - "integrity": "sha1-AQEhG6pwxLykoPY/Igbpe3368lg=" + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.7.tgz", + "integrity": "sha512-3HNK5tW4x8o5mO8RuHZp3Ydw9icZXx0RANAOMzlMzx7LVXhMJ4mo3MOBpzyd7r/+RUu8BmndP47LXT+vzjtWcQ==", + "dev": true + }, + "parallel-transform": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", + "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", + "dev": true, + "requires": { + "cyclist": "~0.2.2", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } }, "parse-asn1": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", - "integrity": "sha1-9r8pOBgzK9DatU77Fgh3JHRebKg=", + "resolved": "http://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", + "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", + "dev": true, "requires": { "asn1.js": "^4.0.0", "browserify-aes": "^1.0.0", @@ -4300,33 +4885,29 @@ } } }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "requires": { - "error-ex": "^1.2.0" - } - }, "pascalcase": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true }, "path-browserify": { "version": "0.0.0", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", - "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=" + "resolved": "http://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", + "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", + "dev": true }, "path-dirname": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true }, "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true }, "path-is-absolute": { "version": "1.0.1", @@ -4336,7 +4917,8 @@ "path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true }, "path-to-regexp": { "version": "1.7.0", @@ -4353,18 +4935,11 @@ } } }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "requires": { - "pify": "^2.0.0" - } - }, "pbkdf2": { - "version": "3.0.16", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.16.tgz", - "integrity": "sha1-dAQgjsawG2LYW/g4U6gGT42cKlw=", + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", + "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", + "dev": true, "requires": { "create-hash": "^1.1.2", "create-hmac": "^1.1.4", @@ -4373,11 +4948,6 @@ "sha.js": "^2.4.8" } }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - }, "pkg-dir": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", @@ -4390,7 +4960,8 @@ "posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true }, "postcss": { "version": "5.2.18", @@ -4981,12 +5552,14 @@ "process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true }, "process-nextick-args": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha1-o31zL0JxtKsa0HDTVQjoKQeI/6o=" + "integrity": "sha1-o31zL0JxtKsa0HDTVQjoKQeI/6o=", + "dev": true }, "promise": { "version": "7.3.1", @@ -4996,6 +5569,12 @@ "asap": "~2.0.3" } }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, "prop-types": { "version": "15.6.2", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz", @@ -5008,29 +5587,61 @@ "prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true }, "public-encrypt": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.2.tgz", - "integrity": "sha1-RuuRByBr9zSJ+LhbadkTNMZhCZQ=", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, "requires": { "bn.js": "^4.1.0", "browserify-rsa": "^4.0.0", "create-hash": "^1.1.0", "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1" + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } } }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew=" + "integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew=", + "dev": true }, "q": { "version": "1.5.1", @@ -5051,12 +5662,14 @@ "querystring": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true }, "querystring-es3": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true }, "randomatic": { "version": "3.0.0", @@ -5090,6 +5703,7 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", "integrity": "sha1-0wLFIpSFiISKjTAMkytEwkIx2oA=", + "dev": true, "requires": { "safe-buffer": "^5.1.0" } @@ -5098,6 +5712,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", "integrity": "sha1-ySGW/IarQr6YPxvzF3giSTHWFFg=", + "dev": true, "requires": { "randombytes": "^2.0.5", "safe-buffer": "^5.1.0" @@ -5192,29 +5807,11 @@ "resolved": "https://registry.npmjs.org/react-router-redux/-/react-router-redux-4.0.8.tgz", "integrity": "sha1-InQDWWtRUeGCN32rg1tdRfD4BU4=" }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "requires": { - "load-json-file": "^2.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" - } - }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" - } - }, "readable-stream": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha1-sRwn2IuP8fvgcGQ8+UsMea4bCq8=", + "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -5229,6 +5826,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "dev": true, "requires": { "graceful-fs": "^4.1.2", "minimatch": "^3.0.2", @@ -5323,6 +5921,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", "integrity": "sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw=", + "dev": true, "requires": { "extend-shallow": "^3.0.2", "safe-regex": "^1.1.0" @@ -5365,17 +5964,20 @@ "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true }, "repeat-element": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=" + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "dev": true }, "repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true }, "repeating": { "version": "2.0.1", @@ -5389,12 +5991,29 @@ "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true }, "require-main-filename": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true }, "resolve-pathname": { "version": "2.2.0", @@ -5404,39 +6023,54 @@ "resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true }, "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w=" + "integrity": "sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w=", + "dev": true }, - "right-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "dev": true, "requires": { - "align-text": "^0.1.1" + "glob": "^7.0.5" } }, "ripemd160": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", "integrity": "sha1-ocGm9iR1FXe6XQeRTLyShQWFiQw=", + "dev": true, "requires": { "hash-base": "^3.0.0", "inherits": "^2.0.1" } }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dev": true, + "requires": { + "aproba": "^1.1.1" + } + }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=" + "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=", + "dev": true }, "safe-regex": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "resolved": "http://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, "requires": { "ret": "~0.1.10" } @@ -5463,24 +6097,34 @@ } }, "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", + "dev": true + }, + "serialize-javascript": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.6.0.tgz", + "integrity": "sha512-AQxrNqu4EXWt03dJdgKXI+Au9+pvEuM5+Nk5g6+TmuxMCkEL03VhZ31HM+VKeaaZbFpDHaoSruiHq4PW9AIrOQ==", + "dev": true }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true }, "set-immediate-shim": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=" + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "dev": true }, "set-value": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", "integrity": "sha1-ca5KiPD+77v1LR6mBPP7MV67YnQ=", + "dev": true, "requires": { "extend-shallow": "^2.0.1", "is-extendable": "^0.1.1", @@ -5492,6 +6136,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -5505,8 +6150,9 @@ }, "sha.js": { "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha1-N6XPC4HsvGlD3hCbopYNGyZYSuc=", + "resolved": "http://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, "requires": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -5516,6 +6162,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, "requires": { "shebang-regex": "^1.0.0" } @@ -5523,12 +6170,14 @@ "shebang-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true }, "slash": { "version": "1.0.0", @@ -5540,6 +6189,7 @@ "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", "integrity": "sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0=", + "dev": true, "requires": { "base": "^0.11.1", "debug": "^2.2.0", @@ -5555,6 +6205,7 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -5563,6 +6214,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -5573,6 +6225,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", "integrity": "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=", + "dev": true, "requires": { "define-property": "^1.0.0", "isobject": "^3.0.0", @@ -5583,6 +6236,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, "requires": { "is-descriptor": "^1.0.0" } @@ -5591,6 +6245,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -5599,6 +6254,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -5607,6 +6263,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -5616,7 +6273,8 @@ "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=" + "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=", + "dev": true } } }, @@ -5624,6 +6282,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", "integrity": "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=", + "dev": true, "requires": { "kind-of": "^3.2.0" } @@ -5640,17 +6299,20 @@ "source-list-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz", - "integrity": "sha1-qqR0A/eyRakvvJfqCPJQ1gh+0IU=" + "integrity": "sha1-qqR0A/eyRakvvJfqCPJQ1gh+0IU=", + "dev": true }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true }, "source-map-resolve": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", "integrity": "sha1-cuLMNAlVQ+Q7LGKyxMENSpBU8lk=", + "dev": true, "requires": { "atob": "^2.1.1", "decode-uri-component": "^0.2.0", @@ -5671,40 +6333,14 @@ "source-map-url": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" - }, - "spdx-correct": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", - "integrity": "sha1-BaW01xU6GVvJLDxCW2nzsqlSTII=", - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", - "integrity": "sha1-LHrmEFbHFKW5ubKyr30xHvXHj+k=" - }, - "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha1-meEZt6XaAOBUkcn6M4t5BII7QdA=", - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", - "integrity": "sha1-enzShHDMbToc/m1miG9rxDDTrIc=" + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true }, "split-string": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", "integrity": "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=", + "dev": true, "requires": { "extend-shallow": "^3.0.0" } @@ -5715,10 +6351,20 @@ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, + "ssri": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + }, "static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, "requires": { "define-property": "^0.2.5", "object-copy": "^0.1.0" @@ -5728,6 +6374,7 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -5736,17 +6383,29 @@ }, "stream-browserify": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", + "resolved": "http://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", + "dev": true, "requires": { "inherits": "~2.0.1", "readable-stream": "^2.0.2" } }, + "stream-each": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, "stream-http": { "version": "2.8.3", "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", "integrity": "sha1-stJCRpKIpaJ+xP6JM6z2I95lFPw=", + "dev": true, "requires": { "builtin-status-codes": "^3.0.0", "inherits": "^2.0.1", @@ -5755,6 +6414,12 @@ "xtend": "^4.0.0" } }, + "stream-shift": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", + "dev": true + }, "strict-uri-encode": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", @@ -5764,7 +6429,8 @@ "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, "requires": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" @@ -5773,17 +6439,14 @@ "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, "requires": { "ansi-regex": "^3.0.0" } @@ -5794,6 +6457,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", + "dev": true, "requires": { "safe-buffer": "~5.1.0" } @@ -5806,15 +6470,11 @@ "ansi-regex": "^2.0.0" } }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" - }, "strip-eof": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" + "resolved": "http://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true }, "style-loader": { "version": "0.21.0", @@ -5827,11 +6487,12 @@ } }, "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, "requires": { - "has-flag": "^2.0.0" + "has-flag": "^3.0.0" } }, "svgo": { @@ -5855,14 +6516,159 @@ "integrity": "sha1-wiaIrtTqs83C3+rLtWFmBWCgCAQ=" }, "tapable": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz", - "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.1.tgz", + "integrity": "sha512-9I2ydhj8Z9veORCw5PRm4u9uebCn0mcCa6scWoNcbZ6dAtoo2618u9UUzxgmsCOreJpqDDuv61LvwofW7hLcBA==", + "dev": true + }, + "terser": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-3.13.1.tgz", + "integrity": "sha512-ogyZye4DFqOtMzT92Y3Nxxw8OvXmL39HOALro4fc+EUYFFF9G/kk0znkvwMz6PPYgBtdKAodh3FPR70eugdaQA==", + "dev": true, + "requires": { + "commander": "~2.17.1", + "source-map": "~0.6.1", + "source-map-support": "~0.5.6" + }, + "dependencies": { + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.9.tgz", + "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + } + } + }, + "terser-webpack-plugin": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.2.0.tgz", + "integrity": "sha512-QW7RACLS89RalHtLDb0s8+Iqcs/IAEw1rnVrV+mS7Gx1kgPG8o1g33JhAGDgc/CQ84hLsTW5WrAMdVysh692yg==", + "dev": true, + "requires": { + "cacache": "^11.0.2", + "find-cache-dir": "^2.0.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^1.4.0", + "source-map": "^0.6.1", + "terser": "^3.8.1", + "webpack-sources": "^1.1.0", + "worker-farm": "^1.5.2" + }, + "dependencies": { + "find-cache-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.0.0.tgz", + "integrity": "sha512-LDUY6V1Xs5eFskUVYtIwatojt6+9xC9Chnlk/jYOOvn3FAFfSaWddxahDGyNHh0b2dMXa6YW2m0tk8TdVaXHlA==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^1.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz", + "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", + "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } }, "timers-browserify": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", "integrity": "sha1-HSjj0qrfHVpZlsTp+VYBzQU0gK4=", + "dev": true, "requires": { "setimmediate": "^1.0.4" } @@ -5880,7 +6686,8 @@ "to-arraybuffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true }, "to-fast-properties": { "version": "1.0.3", @@ -5892,6 +6699,7 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, "requires": { "kind-of": "^3.0.2" } @@ -5900,6 +6708,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", "integrity": "sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4=", + "dev": true, "requires": { "define-property": "^2.0.2", "extend-shallow": "^3.0.2", @@ -5911,6 +6720,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, "requires": { "is-number": "^3.0.0", "repeat-string": "^1.6.1" @@ -5922,59 +6732,34 @@ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", "dev": true }, + "tslib": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", + "dev": true + }, "tty-browserify": { "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" + "resolved": "http://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true }, "ua-parser-js": { "version": "0.7.18", "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.18.tgz", "integrity": "sha1-p7/ZL1bt+xFwg7aeMdKqiILUse0=" }, - "uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", - "requires": { - "source-map": "~0.5.1", - "uglify-to-browserify": "~1.0.0", - "yargs": "~3.10.0" - }, - "dependencies": { - "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "requires": { - "camelcase": "^1.0.2", - "cliui": "^2.1.0", - "decamelize": "^1.0.0", - "window-size": "0.1.0" - } - } - } - }, - "uglify-to-browserify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", - "optional": true - }, - "uglifyjs-webpack-plugin": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz", - "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=", - "requires": { - "source-map": "^0.5.6", - "uglify-js": "^2.8.29", - "webpack-sources": "^1.0.1" - } - }, "union-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "dev": true, "requires": { "arr-union": "^3.1.0", "get-value": "^2.0.6", @@ -5986,6 +6771,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -5994,6 +6780,7 @@ "version": "0.4.3", "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", + "dev": true, "requires": { "extend-shallow": "^2.0.1", "is-extendable": "^0.1.1", @@ -6015,6 +6802,24 @@ "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", "dev": true }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.1.tgz", + "integrity": "sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", @@ -6024,6 +6829,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, "requires": { "has-value": "^0.3.1", "isobject": "^3.0.0" @@ -6033,6 +6839,7 @@ "version": "0.3.1", "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, "requires": { "get-value": "^2.0.3", "has-values": "^0.1.4", @@ -6043,6 +6850,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, "requires": { "isarray": "1.0.0" } @@ -6052,19 +6860,22 @@ "has-values": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true } } }, "upath": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", - "integrity": "sha1-NSVll+RqWB20eT0M5H+prr/J+r0=" + "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", + "dev": true }, "uri-js": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", "integrity": "sha1-lMVA4f93KVbiKZUHwBCupsiDjrA=", + "dev": true, "requires": { "punycode": "^2.1.0" } @@ -6072,12 +6883,14 @@ "urix": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true }, "url": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, "requires": { "punycode": "1.3.2", "querystring": "0.2.0" @@ -6086,24 +6899,16 @@ "punycode": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true } } }, "use": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz", - "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==", - "requires": { - "kind-of": "^6.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - } - } + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true }, "user-home": { "version": "1.1.1", @@ -6115,6 +6920,7 @@ "version": "0.10.4", "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", "integrity": "sha1-OqASW/5mikZy3liFfTrOJ+y3aQE=", + "dev": true, "requires": { "inherits": "2.0.3" } @@ -6122,7 +6928,14 @@ "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "v8-compile-cache": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.2.tgz", + "integrity": "sha512-1wFuMUIM16MDJRCrpbpuEPTUGmM5QMUg0cr3KFwra2XgOgFcPGDQHDh3CszSCD2Zewc/dh/pamNEW8CbfDebUw==", + "dev": true }, "v8flags": { "version": "2.1.1", @@ -6133,15 +6946,6 @@ "user-home": "^1.1.1" } }, - "validate-npm-package-license": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", - "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, "value-equal": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-0.4.0.tgz", @@ -6155,8 +6959,9 @@ }, "vm-browserify": { "version": "0.0.4", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", + "resolved": "http://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", + "dev": true, "requires": { "indexof": "0.0.1" } @@ -6173,6 +6978,7 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", "integrity": "sha1-S8EsLr6KonenHx0/FNaFx7RGzQA=", + "dev": true, "requires": { "chokidar": "^2.0.2", "graceful-fs": "^4.1.2", @@ -6180,38 +6986,82 @@ } }, "webpack": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.12.0.tgz", - "integrity": "sha1-P540NgNwYC/PY56Xk520hvTsDXQ=", + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.28.2.tgz", + "integrity": "sha512-PK3uVg3/NuNVOjPfYleFI6JF7khO7c2kIlksH7mivQm+QDcwiqV1x6+q89dDeOioh5FNxJHr3LKbDu3oSAhl9g==", + "dev": true, "requires": { - "acorn": "^5.0.0", - "acorn-dynamic-import": "^2.0.0", + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-module-context": "1.7.11", + "@webassemblyjs/wasm-edit": "1.7.11", + "@webassemblyjs/wasm-parser": "1.7.11", + "acorn": "^5.6.2", + "acorn-dynamic-import": "^3.0.0", "ajv": "^6.1.0", "ajv-keywords": "^3.1.0", - "async": "^2.1.2", - "enhanced-resolve": "^3.4.0", - "escope": "^3.6.0", - "interpret": "^1.0.0", - "json-loader": "^0.5.4", - "json5": "^0.5.1", + "chrome-trace-event": "^1.0.0", + "enhanced-resolve": "^4.1.0", + "eslint-scope": "^4.0.0", + "json-parse-better-errors": "^1.0.2", "loader-runner": "^2.3.0", "loader-utils": "^1.1.0", "memory-fs": "~0.4.1", + "micromatch": "^3.1.8", "mkdirp": "~0.5.0", + "neo-async": "^2.5.0", "node-libs-browser": "^2.0.0", - "source-map": "^0.5.3", - "supports-color": "^4.2.1", - "tapable": "^0.2.7", - "uglifyjs-webpack-plugin": "^0.4.6", - "watchpack": "^1.4.0", - "webpack-sources": "^1.0.1", - "yargs": "^8.0.2" + "schema-utils": "^0.4.4", + "tapable": "^1.1.0", + "terser-webpack-plugin": "^1.1.0", + "watchpack": "^1.5.0", + "webpack-sources": "^1.3.0" + } + }, + "webpack-cli": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.1.2.tgz", + "integrity": "sha512-Cnqo7CeqeSvC6PTdts+dywNi5CRlIPbLx1AoUPK2T6vC1YAugMG3IOoO9DmEscd+Dghw7uRlnzV1KwOe5IrtgQ==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "enhanced-resolve": "^4.1.0", + "global-modules-path": "^2.3.0", + "import-local": "^2.0.0", + "interpret": "^1.1.0", + "loader-utils": "^1.1.0", + "supports-color": "^5.5.0", + "v8-compile-cache": "^2.0.2", + "yargs": "^12.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } } }, "webpack-sources": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.1.0.tgz", - "integrity": "sha512-aqYp18kPphgoO5c/+NaUvEeACtZjMESmDChuD3NBciVpah3XpMEU9VAAtIaB1BsfJWWTSdv8Vv1m3T0aRk2dUw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz", + "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==", + "dev": true, "requires": { "source-list-map": "^2.0.0", "source-map": "~0.6.1" @@ -6220,7 +7070,8 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=" + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -6238,7 +7089,8 @@ "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, "requires": { "isexe": "^2.0.0" } @@ -6246,17 +7098,8 @@ "which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" - }, - "window-size": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=" - }, - "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true }, "workbox-build": { "version": "2.1.3", @@ -6284,19 +7127,39 @@ "workbox-build": "^2.1.3" } }, + "worker-farm": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz", + "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", + "dev": true, + "requires": { + "errno": "~0.1.7" + } + }, "wrap-ansi": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, "requires": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1" }, "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, "string-width": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "resolved": "http://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -6313,80 +7176,94 @@ "xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true }, "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true }, "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "dev": true }, "yargs": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", - "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", + "version": "12.0.5", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", + "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "dev": true, "requires": { - "camelcase": "^4.1.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", + "cliui": "^4.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", "get-caller-file": "^1.0.1", - "os-locale": "^2.0.0", - "read-pkg-up": "^2.0.0", + "os-locale": "^3.0.0", "require-directory": "^2.1.1", "require-main-filename": "^1.0.1", "set-blocking": "^2.0.0", "string-width": "^2.0.0", "which-module": "^2.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^7.0.0" + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^11.1.1" }, "dependencies": { - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - }, - "dependencies": { - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - } + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz", + "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" } + }, + "p-try": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", + "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", + "dev": true } } }, "yargs-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", - "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", + "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "dev": true, "requires": { - "camelcase": "^4.1.0" - }, - "dependencies": { - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" - } + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } } } diff --git a/package.json b/package.json index 53100c8f..764d9da5 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "build": "gradle build", "deploy": "gradle deploy", "watch": "gradle deploy -t", - "wp": "webpack" + "wp": "node_modules/webpack/bin/webpack.js" }, "repository": { "type": "git", @@ -28,7 +28,6 @@ "redux": "^4.0.0", "redux-immutable": "^4.0.0", "warning": "^4.0.1", - "webpack": "^3.12.0", "workbox-webpack-plugin": "^2.1.0" }, "devDependencies": { @@ -42,7 +41,9 @@ "babel-register": "^6.26.0", "css-loader": "^0.28.11", "less-loader": "^4.1.0", - "style-loader": "^0.21.0" + "style-loader": "^0.21.0", + "webpack": "^4.28.2", + "webpack-cli": "^3.1.2" }, "babel": { "presets": [ @@ -54,4 +55,4 @@ "transform-object-rest-spread" ] } -} \ No newline at end of file +} diff --git a/src/main/resources/jsx4xp/entries/App.jsx b/src/main/resources/jsx4xp/entries/App.jsx index 1c6d3431..d185a764 100644 --- a/src/main/resources/jsx4xp/entries/App.jsx +++ b/src/main/resources/jsx4xp/entries/App.jsx @@ -1,10 +1,10 @@ import React from 'react'; -import c from '../common'; +import {shared1} from '../common'; const App = (props) =>

React stuff is happening.

-

Stuff is reacting: { c.shared1() } { c.shared2("SOMETHING") }

+

Stuff is reacting: { shared1() }

{ props.children }
; diff --git a/src/main/resources/jsx4xp/entries/App2.jsx b/src/main/resources/jsx4xp/entries/App2.jsx new file mode 100644 index 00000000..49ca8e7e --- /dev/null +++ b/src/main/resources/jsx4xp/entries/App2.jsx @@ -0,0 +1,11 @@ +import React from 'react'; +import {shared2} from '../common'; + +const App = (props) => +
+

React stuff is happening again!

+

More stuff is reacting: { shared2("SOMETHING ELSE") }

+ { props.children } +
; + +export default App; diff --git a/webpack.config.js b/webpack.config.js index 80e25979..562fe0c0 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -2,29 +2,35 @@ const path = require('path'); const glob = require('glob'); const SRC_RES = path.join(__dirname, 'src/main/resources'); -const SRC_JSX4XP = path.join(SRC_RES, 'jsx4xp/entries'); + +const JSX4XP_SRC = 'jsx4xp'; +const JSX4XP_ENTRIES = path.join(JSX4XP_SRC, 'entries'); +const JSX4XP_COMMON = path.join(JSX4XP_SRC, 'common'); + +const SRC_JSX4XP_ENTRIES = path.join(SRC_RES, JSX4XP_ENTRIES); +const SRC_JSX4XP_COMMON = path.join(SRC_RES, JSX4XP_COMMON); const BUILD_MAIN = path.join(__dirname, 'build/resources/main'); const entries = Object.assign({}, - getEntries(SRC_JSX4XP, 'jsx', 'jsx/'), - getEntries(SRC_JSX4XP, 'js', 'jsx/'), - getEntries(SRC_JSX4XP, 'es6', 'jsx/'), + getEntries(SRC_JSX4XP_ENTRIES, 'jsx', JSX4XP_SRC + '/'), + getEntries(SRC_JSX4XP_ENTRIES, 'js', JSX4XP_SRC + '/'), + getEntries(SRC_JSX4XP_ENTRIES, 'es6', JSX4XP_SRC + '/') ); module.exports = { entry: entries, output: { path: path.join(BUILD_MAIN, 'assets/'), - filename: "[name].js" + filename: "[name].[contenthash:9].js" }, resolve: { extensions: ['.es6', '.js', '.jsx', '.less'] }, module: { - loaders: [{ - test: /\.(js|jsx)$/, + rules: [{ + test: /\.((jsx?)|(es6))$/, exclude: /node_modules/, loader: 'babel-loader' }, { @@ -32,6 +38,30 @@ module.exports = { loaders: ["style-loader", "css-loader", "less-loader"] }] }, + + optimization: { + splitChunks: { + + name: false, + cacheGroups: { + vendors: { + name: "vendors", + enforce: true, + test: /[\\/]node_modules[\\/]/, + chunks: 'all', + priority: 2 + }, + common: { + name: JSX4XP_COMMON, + enforce: true, + test: new RegExp(JSX4XP_COMMON), + chunks: 'all', + priority: 1 + } + + } + } + } }; function getEntries(fullDirPath, extension, entryPrefix) { From 88a3522972e6bcf462f6d9a987174d2196167b69 Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Tue, 25 Dec 2018 18:04:20 +0100 Subject: [PATCH 10/96] Webpack: WiP on collecting contenthashed assetNames into the HTML template. Assets folder name appears twince, when we consider the {{assetUrl}}. How to? --- package-lock.json | 413 +++++++++++++++++++++++++++++++++++ package.json | 1 + src/main/resources/index.ejs | 15 ++ webpack.config.js | 24 +- 4 files changed, 446 insertions(+), 7 deletions(-) create mode 100644 src/main/resources/index.ejs diff --git a/package-lock.json b/package-lock.json index ef6437ca..8e1b2584 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1593,6 +1593,12 @@ "integrity": "sha1-LN4J617jQfSEdGuwMJsyU7GxRC8=", "dev": true }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -1808,6 +1814,16 @@ "unset-value": "^1.0.0" } }, + "camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", + "dev": true, + "requires": { + "no-case": "^2.2.0", + "upper-case": "^1.1.1" + } + }, "camelcase": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", @@ -1929,6 +1945,23 @@ } } }, + "clean-css": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz", + "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==", + "dev": true, + "requires": { + "source-map": "~0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, "cliui": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", @@ -2233,6 +2266,18 @@ "source-list-map": "^2.0.0" } }, + "css-select": { + "version": "1.2.0", + "resolved": "http://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "dev": true, + "requires": { + "boolbase": "~1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "nth-check": "~1.0.1" + } + }, "css-selector-tokenizer": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz", @@ -2257,6 +2302,12 @@ } } }, + "css-what": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.2.tgz", + "integrity": "sha512-wan8dMWQ0GUeF7DGEPVjhHemVW/vy6xUYmFzRY8RYqgA0JtXC9rJmbScBjqSu6dg9q0lwPQy6ZAmJVr3PPTvqQ==", + "dev": true + }, "cssesc": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", @@ -2346,6 +2397,15 @@ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "dev": true }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, "define-property": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", @@ -2429,12 +2489,64 @@ "randombytes": "^2.0.0" } }, + "dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dev": true, + "requires": { + "utila": "~0.4" + } + }, + "dom-serializer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", + "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "dev": true, + "requires": { + "domelementtype": "~1.1.1", + "entities": "~1.1.1" + }, + "dependencies": { + "domelementtype": { + "version": "1.1.3", + "resolved": "http://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", + "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", + "dev": true + } + } + }, "domain-browser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", "integrity": "sha1-PTH1AZGmdJ3RN1p/Ui6CPULlTto=", "dev": true }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + }, + "domhandler": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.1.0.tgz", + "integrity": "sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=", + "dev": true, + "requires": { + "domelementtype": "1" + } + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, "duplexify": { "version": "3.6.1", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.1.tgz", @@ -2502,6 +2614,12 @@ "tapable": "^1.0.0" } }, + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true + }, "errno": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", @@ -2511,6 +2629,30 @@ "prr": "~1.0.1" } }, + "es-abstract": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz", + "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", + "dev": true, + "requires": { + "es-to-primitive": "^1.1.1", + "function-bind": "^1.1.1", + "has": "^1.0.1", + "is-callable": "^1.1.3", + "is-regex": "^1.0.4" + } + }, + "es-to-primitive": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", + "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -3599,6 +3741,12 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "dev": true + }, "has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", @@ -3651,6 +3799,12 @@ "minimalistic-assert": "^1.0.1" } }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, "history": { "version": "4.7.2", "resolved": "https://registry.npmjs.org/history/-/history-4.7.2.tgz", @@ -3705,6 +3859,105 @@ "integrity": "sha1-ZouTd26q5V696POtRkswekljYl4=", "dev": true }, + "html-minifier": { + "version": "3.5.21", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz", + "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", + "dev": true, + "requires": { + "camel-case": "3.0.x", + "clean-css": "4.2.x", + "commander": "2.17.x", + "he": "1.2.x", + "param-case": "2.1.x", + "relateurl": "0.2.x", + "uglify-js": "3.4.x" + }, + "dependencies": { + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "dev": true + } + } + }, + "html-webpack-plugin": { + "version": "3.2.0", + "resolved": "http://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz", + "integrity": "sha1-sBq71yOsqqeze2r0SS69oD2d03s=", + "dev": true, + "requires": { + "html-minifier": "^3.2.3", + "loader-utils": "^0.2.16", + "lodash": "^4.17.3", + "pretty-error": "^2.0.2", + "tapable": "^1.0.0", + "toposort": "^1.0.0", + "util.promisify": "1.0.0" + }, + "dependencies": { + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true, + "requires": { + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0", + "object-assign": "^4.0.1" + } + } + } + }, + "htmlparser2": { + "version": "3.3.0", + "resolved": "http://registry.npmjs.org/htmlparser2/-/htmlparser2-3.3.0.tgz", + "integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=", + "dev": true, + "requires": { + "domelementtype": "1", + "domhandler": "2.1", + "domutils": "1.1", + "readable-stream": "1.0" + }, + "dependencies": { + "domutils": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.1.6.tgz", + "integrity": "sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU=", + "dev": true, + "requires": { + "domelementtype": "1" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, "https-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", @@ -3951,6 +4204,12 @@ "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=", "dev": true }, + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "dev": true + }, "is-data-descriptor": { "version": "0.1.4", "resolved": "http://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", @@ -3960,6 +4219,12 @@ "kind-of": "^3.0.2" } }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true + }, "is-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", @@ -4070,6 +4335,15 @@ "dev": true, "optional": true }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "dev": true, + "requires": { + "has": "^1.0.1" + } + }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", @@ -4084,6 +4358,15 @@ "html-comment-regex": "^1.1.0" } }, + "is-symbol": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "dev": true, + "requires": { + "has-symbols": "^1.0.0" + } + }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -4304,6 +4587,12 @@ "js-tokens": "^3.0.0" } }, + "lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", + "dev": true + }, "lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -4582,6 +4871,15 @@ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, + "no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "dev": true, + "requires": { + "lower-case": "^1.1.1" + } + }, "node-fetch": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", @@ -4666,6 +4964,15 @@ "path-key": "^2.0.0" } }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dev": true, + "requires": { + "boolbase": "~1.0.0" + } + }, "num2fraction": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", @@ -4705,6 +5012,12 @@ } } }, + "object-keys": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", + "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==", + "dev": true + }, "object-visit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", @@ -4714,6 +5027,16 @@ "isobject": "^3.0.0" } }, + "object.getownpropertydescriptors": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", + "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.5.1" + } + }, "object.omit": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", @@ -4841,6 +5164,15 @@ "readable-stream": "^2.1.5" } }, + "param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", + "dev": true, + "requires": { + "no-case": "^2.2.0" + } + }, "parse-asn1": { "version": "5.1.1", "resolved": "http://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", @@ -5543,6 +5875,16 @@ "dev": true, "optional": true }, + "pretty-error": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz", + "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", + "dev": true, + "requires": { + "renderkid": "^2.0.1", + "utila": "~0.4" + } + }, "private": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", @@ -5961,12 +6303,31 @@ } } }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "dev": true + }, "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", "dev": true }, + "renderkid": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.2.tgz", + "integrity": "sha512-FsygIxevi1jSiPY9h7vZmBFUbAOcbYm9UwyiLNdVsLRs/5We9Ob5NMPbGYUTWiLq5L+ezlVdE0A8bbME5CWTpg==", + "dev": true, + "requires": { + "css-select": "^1.1.0", + "dom-converter": "~0.2", + "htmlparser2": "~3.3.0", + "strip-ansi": "^3.0.0", + "utila": "^0.4.0" + } + }, "repeat-element": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", @@ -6726,6 +7087,12 @@ "repeat-string": "^1.6.1" } }, + "toposort": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.7.tgz", + "integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=", + "dev": true + }, "trim-right": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", @@ -6755,6 +7122,30 @@ "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.18.tgz", "integrity": "sha1-p7/ZL1bt+xFwg7aeMdKqiILUse0=" }, + "uglify-js": { + "version": "3.4.9", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", + "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", + "dev": true, + "requires": { + "commander": "~2.17.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, "union-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", @@ -6871,6 +7262,12 @@ "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", "dev": true }, + "upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", + "dev": true + }, "uri-js": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", @@ -6931,6 +7328,22 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, + "util.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } + }, + "utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", + "dev": true + }, "v8-compile-cache": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.2.tgz", diff --git a/package.json b/package.json index 764d9da5..40670407 100644 --- a/package.json +++ b/package.json @@ -40,6 +40,7 @@ "babel-preset-stage-0": "^6.24.1", "babel-register": "^6.26.0", "css-loader": "^0.28.11", + "html-webpack-plugin": "^3.2.0", "less-loader": "^4.1.0", "style-loader": "^0.21.0", "webpack": "^4.28.2", diff --git a/src/main/resources/index.ejs b/src/main/resources/index.ejs new file mode 100644 index 00000000..8191646f --- /dev/null +++ b/src/main/resources/index.ejs @@ -0,0 +1,15 @@ + + + + + Enonic React Seedz + + + + +
+ + + + + \ No newline at end of file diff --git a/webpack.config.js b/webpack.config.js index 562fe0c0..c6a2b6c2 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,5 +1,6 @@ const path = require('path'); const glob = require('glob'); +const HtmlWebpackPlugin = require('html-webpack-plugin'); const SRC_RES = path.join(__dirname, 'src/main/resources'); @@ -14,15 +15,15 @@ const BUILD_MAIN = path.join(__dirname, 'build/resources/main'); const entries = Object.assign({}, - getEntries(SRC_JSX4XP_ENTRIES, 'jsx', JSX4XP_SRC + '/'), - getEntries(SRC_JSX4XP_ENTRIES, 'js', JSX4XP_SRC + '/'), - getEntries(SRC_JSX4XP_ENTRIES, 'es6', JSX4XP_SRC + '/') + getEntries(SRC_JSX4XP_ENTRIES, 'jsx', path.join('assets', JSX4XP_SRC) + '/'), + getEntries(SRC_JSX4XP_ENTRIES, 'js', path.join('assets', JSX4XP_SRC) + '/'), + getEntries(SRC_JSX4XP_ENTRIES, 'es6', path.join('assets', JSX4XP_SRC) + '/') ); module.exports = { entry: entries, output: { - path: path.join(BUILD_MAIN, 'assets/'), + path: path.join(BUILD_MAIN), filename: "[name].[contenthash:9].js" }, resolve: { @@ -39,20 +40,29 @@ module.exports = { }] }, + plugins: [ + new HtmlWebpackPlugin({ + inject: false, + hash: false, + template: path.join(SRC_RES, 'index.ejs'), + filename: path.join(BUILD_MAIN, 'index.html') + }) + ], + optimization: { splitChunks: { name: false, cacheGroups: { vendors: { - name: "vendors", + name: path.join('assets', 'vendors'), enforce: true, test: /[\\/]node_modules[\\/]/, chunks: 'all', priority: 2 }, common: { - name: JSX4XP_COMMON, + name: path.join('assets', JSX4XP_SRC), enforce: true, test: new RegExp(JSX4XP_COMMON), chunks: 'all', @@ -69,4 +79,4 @@ function getEntries(fullDirPath, extension, entryPrefix) { obj[entryPrefix + path.parse(el).name] = el; return obj }, {}); -} +} \ No newline at end of file From b85a97708c79304c109f215e4d0e7bce96411314 Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Wed, 26 Dec 2018 15:02:16 +0100 Subject: [PATCH 11/96] Webpack done: module.exports.output.path defines the base for relative URLs in HtmlWebpackPlugin references to hashed files, so in order to use it along with {{assetUrl}}, they must refer to the same root - lest all other refs be confused. Therefore, assets is the root path of the webpack build - and index.html must be manually placed in the right place after the webpack build (or with some path magic here, putting it in the right place). --- src/main/resources/index.ejs | 4 ++-- webpack.config.js | 17 +++++++++-------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/main/resources/index.ejs b/src/main/resources/index.ejs index 8191646f..e4d6f81a 100644 --- a/src/main/resources/index.ejs +++ b/src/main/resources/index.ejs @@ -8,8 +8,8 @@
- - + + \ No newline at end of file diff --git a/webpack.config.js b/webpack.config.js index c6a2b6c2..6f1c2c5f 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -10,20 +10,21 @@ const JSX4XP_COMMON = path.join(JSX4XP_SRC, 'common'); const SRC_JSX4XP_ENTRIES = path.join(SRC_RES, JSX4XP_ENTRIES); const SRC_JSX4XP_COMMON = path.join(SRC_RES, JSX4XP_COMMON); -const BUILD_MAIN = path.join(__dirname, 'build/resources/main'); +const BUILD_ASSETS = path.join(__dirname, 'build/resources/main/assets'); const entries = Object.assign({}, - getEntries(SRC_JSX4XP_ENTRIES, 'jsx', path.join('assets', JSX4XP_SRC) + '/'), - getEntries(SRC_JSX4XP_ENTRIES, 'js', path.join('assets', JSX4XP_SRC) + '/'), - getEntries(SRC_JSX4XP_ENTRIES, 'es6', path.join('assets', JSX4XP_SRC) + '/') + getEntries(SRC_JSX4XP_ENTRIES, 'jsx', JSX4XP_SRC + '/'), + getEntries(SRC_JSX4XP_ENTRIES, 'js', JSX4XP_SRC + '/'), + getEntries(SRC_JSX4XP_ENTRIES, 'es6', JSX4XP_SRC + '/') ); module.exports = { + mode: 'production', entry: entries, output: { - path: path.join(BUILD_MAIN), + path: path.join(BUILD_ASSETS), filename: "[name].[contenthash:9].js" }, resolve: { @@ -45,7 +46,7 @@ module.exports = { inject: false, hash: false, template: path.join(SRC_RES, 'index.ejs'), - filename: path.join(BUILD_MAIN, 'index.html') + filename: path.join(BUILD_ASSETS, 'index.html') }) ], @@ -55,14 +56,14 @@ module.exports = { name: false, cacheGroups: { vendors: { - name: path.join('assets', 'vendors'), + name: 'vendors', enforce: true, test: /[\\/]node_modules[\\/]/, chunks: 'all', priority: 2 }, common: { - name: path.join('assets', JSX4XP_SRC), + name: JSX4XP_SRC, enforce: true, test: new RegExp(JSX4XP_COMMON), chunks: 'all', From 2f60a71d6729f07d56237f3e8b9cf76f1867ee81 Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Wed, 26 Dec 2018 16:22:03 +0100 Subject: [PATCH 12/96] Micro adjustments --- .vscode/settings.json | 19 +++++++++++++ _vscode/starter-react.code-workspace | 27 ++++++++++++++++++- src/main/resources/jsx4xp/common/index.jsx | 4 +-- .../entries/{App.jsx => AComponent.jsx} | 4 +-- .../{App2.jsx => AnotherComponent.jsx} | 0 webpack.config.js | 3 +-- 6 files changed, 50 insertions(+), 7 deletions(-) create mode 100644 .vscode/settings.json rename src/main/resources/jsx4xp/entries/{App.jsx => AComponent.jsx} (62%) rename src/main/resources/jsx4xp/entries/{App2.jsx => AnotherComponent.jsx} (100%) diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..12a8a5bd --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,19 @@ +{ + "javascript.format.insertSpaceAfterCommaDelimiter": false, + "javascript.format.insertSpaceAfterFunctionKeywordForAnonymousFunctions": false, + "javascript.format.insertSpaceAfterKeywordsInControlFlowStatements": false, + "javascript.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces": false, + "javascript.format.insertSpaceBeforeAndAfterBinaryOperators": false, + "javascript.format.insertSpaceAfterSemicolonInForStatements": false, + "typescript.format.insertSpaceAfterCommaDelimiter": false, + "typescript.format.insertSpaceAfterFunctionKeywordForAnonymousFunctions": false, + "typescript.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces": false, + "typescript.format.insertSpaceBeforeAndAfterBinaryOperators": false, + "typescript.format.insertSpaceAfterSemicolonInForStatements": false, + "typescript.format.insertSpaceAfterKeywordsInControlFlowStatements": false, + "javascript.suggest.completeFunctionCalls": true, + "typescript.suggest.completeFunctionCalls": true, + "tslint.ignoreDefinitionFiles": false, + "tslint.jsEnable": true, + "typescriptHero.imports.organizeOnSave": true +} \ No newline at end of file diff --git a/_vscode/starter-react.code-workspace b/_vscode/starter-react.code-workspace index 2a0ed79b..b6d7e897 100644 --- a/_vscode/starter-react.code-workspace +++ b/_vscode/starter-react.code-workspace @@ -3,5 +3,30 @@ { "path": ".." } - ] + ], + "settings": { + "javascript.format.insertSpaceAfterCommaDelimiter": false, + "javascript.format.enable": false, + "javascript.format.insertSpaceAfterKeywordsInControlFlowStatements": false, + "javascript.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces": false, + "javascript.format.insertSpaceAfterFunctionKeywordForAnonymousFunctions": false, + "javascript.format.insertSpaceAfterSemicolonInForStatements": false, + "typescript.format.enable": false, + "typescript.format.insertSpaceAfterFunctionKeywordForAnonymousFunctions": false, + "typescript.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces": false, + "typescript.format.insertSpaceAfterSemicolonInForStatements": false, + "typescript.format.insertSpaceBeforeAndAfterBinaryOperators": false, + "javascript.format.insertSpaceBeforeAndAfterBinaryOperators": false, + "typescript.format.insertSpaceAfterCommaDelimiter": false, + "typescript.format.insertSpaceAfterKeywordsInControlFlowStatements": false, + "javascript.autoClosingTags": false, + "typescript.autoClosingTags": false, + "tslint.ignoreDefinitionFiles": false, + "tslint.jsEnable": true, + "javascript.referencesCodeLens.enabled": true, + "javascript.suggest.completeFunctionCalls": true, + "typescript.referencesCodeLens.enabled": true, + "typescript.suggest.completeFunctionCalls": true, + "typescriptHero.imports.organizeOnSave": true + } } \ No newline at end of file diff --git a/src/main/resources/jsx4xp/common/index.jsx b/src/main/resources/jsx4xp/common/index.jsx index b5660f80..07625441 100644 --- a/src/main/resources/jsx4xp/common/index.jsx +++ b/src/main/resources/jsx4xp/common/index.jsx @@ -1,7 +1,7 @@ import React from 'react'; -const shared1 = (props) =>

This is the first shared

; -const shared2 = ({something}) =>

This is the second one. It says { something }

; +const shared1 = (props) =>

This is the first shared component

; +const shared2 = ({something}) =>

This is the second one. It says: { something }

; export default { shared1, shared2 diff --git a/src/main/resources/jsx4xp/entries/App.jsx b/src/main/resources/jsx4xp/entries/AComponent.jsx similarity index 62% rename from src/main/resources/jsx4xp/entries/App.jsx rename to src/main/resources/jsx4xp/entries/AComponent.jsx index d185a764..3c474082 100644 --- a/src/main/resources/jsx4xp/entries/App.jsx +++ b/src/main/resources/jsx4xp/entries/AComponent.jsx @@ -3,8 +3,8 @@ import {shared1} from '../common'; const App = (props) =>
-

React stuff is happening.

-

Stuff is reacting: { shared1() }

+

React stuff is happening.

+

Stuff is reacting: { shared1() }

{ props.children }
; diff --git a/src/main/resources/jsx4xp/entries/App2.jsx b/src/main/resources/jsx4xp/entries/AnotherComponent.jsx similarity index 100% rename from src/main/resources/jsx4xp/entries/App2.jsx rename to src/main/resources/jsx4xp/entries/AnotherComponent.jsx diff --git a/webpack.config.js b/webpack.config.js index 6f1c2c5f..9de4b445 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -25,7 +25,7 @@ module.exports = { entry: entries, output: { path: path.join(BUILD_ASSETS), - filename: "[name].[contenthash:9].js" + filename: "[name].[contenthash:8].js" }, resolve: { extensions: ['.es6', '.js', '.jsx', '.less'] @@ -69,7 +69,6 @@ module.exports = { chunks: 'all', priority: 1 } - } } } From f7ec7d66377a18405d6d4c2f768850365f81df73 Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Thu, 27 Dec 2018 00:22:31 +0100 Subject: [PATCH 13/96] Webpack: Much better build, auto-chunks subdirectories of the home folder, with only _common and vendors as higher priority chunks. --- package.json | 2 +- src/main/jsx4xp/_common/index.jsx | 8 ++ src/main/jsx4xp/_entries/app.jsx | 16 +++ src/main/jsx4xp/components/AComponent.jsx | 12 ++ .../components/more/AnotherComponent.jsx | 13 +++ src/main/jsx4xp/index.ejs | 18 +++ src/main/resources/index.ejs | 15 --- src/main/resources/index.html | 11 -- src/main/resources/jsx4xp/common/index.jsx | 8 -- .../resources/jsx4xp/entries/AComponent.jsx | 11 -- .../jsx4xp/entries/AnotherComponent.jsx | 11 -- webpack.config.js | 82 ------------- webpack.config.jsx4xp.js | 109 ++++++++++++++++++ 13 files changed, 177 insertions(+), 139 deletions(-) create mode 100644 src/main/jsx4xp/_common/index.jsx create mode 100644 src/main/jsx4xp/_entries/app.jsx create mode 100644 src/main/jsx4xp/components/AComponent.jsx create mode 100644 src/main/jsx4xp/components/more/AnotherComponent.jsx create mode 100644 src/main/jsx4xp/index.ejs delete mode 100644 src/main/resources/index.ejs delete mode 100644 src/main/resources/index.html delete mode 100644 src/main/resources/jsx4xp/common/index.jsx delete mode 100644 src/main/resources/jsx4xp/entries/AComponent.jsx delete mode 100644 src/main/resources/jsx4xp/entries/AnotherComponent.jsx delete mode 100644 webpack.config.js create mode 100644 webpack.config.jsx4xp.js diff --git a/package.json b/package.json index 40670407..7c523795 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "build": "gradle build", "deploy": "gradle deploy", "watch": "gradle deploy -t", - "wp": "node_modules/webpack/bin/webpack.js" + "jsx4xp": "rm -rf build; node_modules/webpack/bin/webpack.js --config webpack.config.jsx4xp.js" }, "repository": { "type": "git", diff --git a/src/main/jsx4xp/_common/index.jsx b/src/main/jsx4xp/_common/index.jsx new file mode 100644 index 00000000..70ecfcee --- /dev/null +++ b/src/main/jsx4xp/_common/index.jsx @@ -0,0 +1,8 @@ +import React from 'react'; + +const Shared1 = (props) =>

This is the first shared component

; +const Shared2 = ({something}) =>

This is the second one. It says: { something }

; + +export default { + Shared1, Shared2 +}; diff --git a/src/main/jsx4xp/_entries/app.jsx b/src/main/jsx4xp/_entries/app.jsx new file mode 100644 index 00000000..a4498524 --- /dev/null +++ b/src/main/jsx4xp/_entries/app.jsx @@ -0,0 +1,16 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; + +import AComponent from '../components/AComponent'; +import AnotherComponent from '../components/more/AnotherComponent'; + + +const MOUNT_NODE = document.getElementById('mountHere'); + +ReactDOM.render( + +

Heres some child stuff.

+ +
, + MOUNT_NODE +); diff --git a/src/main/jsx4xp/components/AComponent.jsx b/src/main/jsx4xp/components/AComponent.jsx new file mode 100644 index 00000000..3278f3c0 --- /dev/null +++ b/src/main/jsx4xp/components/AComponent.jsx @@ -0,0 +1,12 @@ +import React from 'react'; + +import { Shared1 } from '../_common'; + +const AComponent = (props) => +
+

React stuff is happening.

+

Stuff is reacting:

+ { props.children } +
; + +export default AComponent; diff --git a/src/main/jsx4xp/components/more/AnotherComponent.jsx b/src/main/jsx4xp/components/more/AnotherComponent.jsx new file mode 100644 index 00000000..d0941987 --- /dev/null +++ b/src/main/jsx4xp/components/more/AnotherComponent.jsx @@ -0,0 +1,13 @@ +import React from 'react'; + +import { Shared2 } from '../../_common'; + +const AnotherComponent = (props) => +
+

React stuff is happening again!

+

More stuff is reacting:

+ + { props.children } +
; + +export default AnotherComponent; diff --git a/src/main/jsx4xp/index.ejs b/src/main/jsx4xp/index.ejs new file mode 100644 index 00000000..b79fd397 --- /dev/null +++ b/src/main/jsx4xp/index.ejs @@ -0,0 +1,18 @@ + + + + + Enonic React Seedz + + + + + + +
+ + + + + + \ No newline at end of file diff --git a/src/main/resources/index.ejs b/src/main/resources/index.ejs deleted file mode 100644 index e4d6f81a..00000000 --- a/src/main/resources/index.ejs +++ /dev/null @@ -1,15 +0,0 @@ - - - - - Enonic React Seedz - - - - -
- - - - - \ No newline at end of file diff --git a/src/main/resources/index.html b/src/main/resources/index.html deleted file mode 100644 index 732aad17..00000000 --- a/src/main/resources/index.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - Enonic React Seed - - - -
- - - \ No newline at end of file diff --git a/src/main/resources/jsx4xp/common/index.jsx b/src/main/resources/jsx4xp/common/index.jsx deleted file mode 100644 index 07625441..00000000 --- a/src/main/resources/jsx4xp/common/index.jsx +++ /dev/null @@ -1,8 +0,0 @@ -import React from 'react'; - -const shared1 = (props) =>

This is the first shared component

; -const shared2 = ({something}) =>

This is the second one. It says: { something }

; - -export default { - shared1, shared2 -}; diff --git a/src/main/resources/jsx4xp/entries/AComponent.jsx b/src/main/resources/jsx4xp/entries/AComponent.jsx deleted file mode 100644 index 3c474082..00000000 --- a/src/main/resources/jsx4xp/entries/AComponent.jsx +++ /dev/null @@ -1,11 +0,0 @@ -import React from 'react'; -import {shared1} from '../common'; - -const App = (props) => -
-

React stuff is happening.

-

Stuff is reacting: { shared1() }

- { props.children } -
; - -export default App; diff --git a/src/main/resources/jsx4xp/entries/AnotherComponent.jsx b/src/main/resources/jsx4xp/entries/AnotherComponent.jsx deleted file mode 100644 index 49ca8e7e..00000000 --- a/src/main/resources/jsx4xp/entries/AnotherComponent.jsx +++ /dev/null @@ -1,11 +0,0 @@ -import React from 'react'; -import {shared2} from '../common'; - -const App = (props) => -
-

React stuff is happening again!

-

More stuff is reacting: { shared2("SOMETHING ELSE") }

- { props.children } -
; - -export default App; diff --git a/webpack.config.js b/webpack.config.js deleted file mode 100644 index 9de4b445..00000000 --- a/webpack.config.js +++ /dev/null @@ -1,82 +0,0 @@ -const path = require('path'); -const glob = require('glob'); -const HtmlWebpackPlugin = require('html-webpack-plugin'); - -const SRC_RES = path.join(__dirname, 'src/main/resources'); - -const JSX4XP_SRC = 'jsx4xp'; -const JSX4XP_ENTRIES = path.join(JSX4XP_SRC, 'entries'); -const JSX4XP_COMMON = path.join(JSX4XP_SRC, 'common'); - -const SRC_JSX4XP_ENTRIES = path.join(SRC_RES, JSX4XP_ENTRIES); -const SRC_JSX4XP_COMMON = path.join(SRC_RES, JSX4XP_COMMON); -const BUILD_ASSETS = path.join(__dirname, 'build/resources/main/assets'); - - - -const entries = Object.assign({}, - getEntries(SRC_JSX4XP_ENTRIES, 'jsx', JSX4XP_SRC + '/'), - getEntries(SRC_JSX4XP_ENTRIES, 'js', JSX4XP_SRC + '/'), - getEntries(SRC_JSX4XP_ENTRIES, 'es6', JSX4XP_SRC + '/') -); - -module.exports = { - mode: 'production', - entry: entries, - output: { - path: path.join(BUILD_ASSETS), - filename: "[name].[contenthash:8].js" - }, - resolve: { - extensions: ['.es6', '.js', '.jsx', '.less'] - }, - module: { - rules: [{ - test: /\.((jsx?)|(es6))$/, - exclude: /node_modules/, - loader: 'babel-loader' - }, { - test: /\.less$/, - loaders: ["style-loader", "css-loader", "less-loader"] - }] - }, - - plugins: [ - new HtmlWebpackPlugin({ - inject: false, - hash: false, - template: path.join(SRC_RES, 'index.ejs'), - filename: path.join(BUILD_ASSETS, 'index.html') - }) - ], - - optimization: { - splitChunks: { - - name: false, - cacheGroups: { - vendors: { - name: 'vendors', - enforce: true, - test: /[\\/]node_modules[\\/]/, - chunks: 'all', - priority: 2 - }, - common: { - name: JSX4XP_SRC, - enforce: true, - test: new RegExp(JSX4XP_COMMON), - chunks: 'all', - priority: 1 - } - } - } - } -}; - -function getEntries(fullDirPath, extension, entryPrefix) { - return glob.sync(path.join(fullDirPath, '**.' + extension)).reduce(function(obj, el) { - obj[entryPrefix + path.parse(el).name] = el; - return obj - }, {}); -} \ No newline at end of file diff --git a/webpack.config.jsx4xp.js b/webpack.config.jsx4xp.js new file mode 100644 index 00000000..0b7ea57f --- /dev/null +++ b/webpack.config.jsx4xp.js @@ -0,0 +1,109 @@ +const path = require('path'); +const glob = require('glob'); +const HtmlWebpackPlugin = require('html-webpack-plugin'); + +const SRC_MAIN = path.join(__dirname, 'src/main'); + +const HOME = 'jsx4xp'; +const SUB_ENTRIES = '_entries'; +const SUB_COMMON = '_common'; +const ENTRIES = path.join(HOME, SUB_ENTRIES); +const COMMON = path.join(HOME, SUB_COMMON); + +const SRC_JSX4XP = path.join(SRC_MAIN, HOME); +const SRC_ENTRIES = path.join(SRC_MAIN, ENTRIES); +const SRC_COMMON = path.join(SRC_MAIN, COMMON); +const BUILD_ASSETS = path.join(__dirname, 'build/resources/main/assets'); + + +module.exports = { + mode: 'production', + + entry: Object.assign({}, + getEntries(SRC_ENTRIES, 'jsx', HOME + '/'), + getEntries(SRC_ENTRIES, 'js', HOME + '/'), + getEntries(SRC_ENTRIES, 'es6', HOME + '/') + ), + + output: { + path: path.join(BUILD_ASSETS), + filename: "[name].[contenthash:9].js" + }, + + resolve: { + extensions: ['.es6', '.js', '.jsx', '.less'] + }, + module: { + rules: [{ + test: /\.((jsx?)|(es6))$/, + exclude: /node_modules/, + loader: 'babel-loader' + }, { + test: /\.less$/, + loaders: ["style-loader", "css-loader", "less-loader"] + }] + }, + + plugins: [ + new HtmlWebpackPlugin({ + inject: false, + hash: false, + template: path.join(SRC_JSX4XP, 'index.ejs'), + filename: path.join(BUILD_ASSETS, 'index.html') + }) + ], + + optimization: { + splitChunks: { + name: false, + cacheGroups: getCacheGroups() + } + } +}; + +function getEntries(fullDirPath, extension, entryPrefix) { + return glob.sync(path.join(fullDirPath, '**.' + extension)).reduce(function(obj, el) { + obj[entryPrefix + path.parse(el).name] = el; + return obj + }, {}); +} + +function getCacheGroups() { + const chunks = { + vendors: { + name: 'vendors', + enforce: true, + test: /[\\/]node_modules[\\/]/, + chunks: 'all', + priority: 3 + }, + common: { + name: COMMON, + enforce: true, + test: new RegExp(SRC_COMMON), + chunks: 'all', + priority: 2 + } + }; + + // Makes array of names of first-level directories below SRC_JSX4XP, other than _entries and _common: + const chunkDirs = (glob.sync(path.join(SRC_JSX4XP, '**/')) || []) + .filter(dirr => !!dirr && dirr.startsWith(SRC_JSX4XP)) + .map(dirr => path.parse(dirr.substring(SRC_JSX4XP.length))) + .filter(dirr => !!dirr && dirr.dir === "/" && dirr.name !== "" && dirr.name !== SUB_ENTRIES && dirr.name !== SUB_COMMON) + .map(dirr => dirr.name) + + chunkDirs.forEach(dirr => { + chunks[dirr] = { + name: path.join(HOME, dirr), + enforce: true, + test: new RegExp(path.join(SRC_JSX4XP, dirr)), + chunks: 'all', + priority: 1 + } + }) + + console.log(JSON.stringify(chunks, null, 4)); + + return chunks; +} \ No newline at end of file From b4e7b5daa8462a796fdee3fb7b9e6df15e55f87b Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Thu, 27 Dec 2018 00:45:27 +0100 Subject: [PATCH 14/96] Gradle: moves the built index.html into the right place --- _vscode/starter-react.code-workspace | 3 ++- build.gradle | 16 +++++++++------- webpack.config.jsx4xp.js | 4 ++-- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/_vscode/starter-react.code-workspace b/_vscode/starter-react.code-workspace index b6d7e897..be4241a8 100644 --- a/_vscode/starter-react.code-workspace +++ b/_vscode/starter-react.code-workspace @@ -27,6 +27,7 @@ "javascript.suggest.completeFunctionCalls": true, "typescript.referencesCodeLens.enabled": true, "typescript.suggest.completeFunctionCalls": true, - "typescriptHero.imports.organizeOnSave": true + "typescriptHero.imports.organizeOnSave": true, + "java.configuration.updateBuildConfiguration": "interactive" } } \ No newline at end of file diff --git a/build.gradle b/build.gradle index cdc7301a..5bb7fb1f 100644 --- a/build.gradle +++ b/build.gradle @@ -36,14 +36,16 @@ repositories { xp.enonicRepo() } - - -task webpack(type: NodeTask) { +task webpackJSX4XP(type: NodeTask) { script = file('node_modules/webpack/bin/webpack.js') -} + args = ['--config', 'webpack.config.jsx4xp.js'] + doLast { + file("build/resources/main/assets/index.html").renameTo(file("build/resources/main/index.html")) + } +} // processes your package.json before running webpack -webpack.dependsOn 'npmInstall' -webpack.dependsOn 'processResources' +webpackJSX4XP.dependsOn 'npmInstall' +webpackJSX4XP.dependsOn 'processResources' -jar.dependsOn webpack \ No newline at end of file +jar.dependsOn webpackJSX4XP \ No newline at end of file diff --git a/webpack.config.jsx4xp.js b/webpack.config.jsx4xp.js index 0b7ea57f..7f2f955d 100644 --- a/webpack.config.jsx4xp.js +++ b/webpack.config.jsx4xp.js @@ -26,7 +26,7 @@ module.exports = { ), output: { - path: path.join(BUILD_ASSETS), + path: path.join(BUILD_ASSETS), // <-- Must be built to assets, since the use of {{assetUrl}} in index.html (or index.ejs) relates to that as base url filename: "[name].[contenthash:9].js" }, @@ -49,7 +49,7 @@ module.exports = { inject: false, hash: false, template: path.join(SRC_JSX4XP, 'index.ejs'), - filename: path.join(BUILD_ASSETS, 'index.html') + filename: path.join(BUILD_ASSETS, 'index.html') // <-- Must be built to assets, since the paths inside use both {{assetUrl}} and module.exports.output.path as base url. If needed somewhere else, move it after this build step. }) ], From 135781fea95c5964d0409b1ece3d40f1ccbc6408 Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Thu, 27 Dec 2018 01:04:11 +0100 Subject: [PATCH 15/96] Build: removed the _common underscore, and made getEntries take an extension array instead of having to run three times. --- src/main/jsx4xp/{_common => common}/index.jsx | 0 src/main/jsx4xp/components/AComponent.jsx | 2 +- .../components/more/AnotherComponent.jsx | 2 +- src/main/jsx4xp/index.ejs | 2 +- webpack.config.jsx4xp.js | 27 +++++++++++-------- 5 files changed, 19 insertions(+), 14 deletions(-) rename src/main/jsx4xp/{_common => common}/index.jsx (100%) diff --git a/src/main/jsx4xp/_common/index.jsx b/src/main/jsx4xp/common/index.jsx similarity index 100% rename from src/main/jsx4xp/_common/index.jsx rename to src/main/jsx4xp/common/index.jsx diff --git a/src/main/jsx4xp/components/AComponent.jsx b/src/main/jsx4xp/components/AComponent.jsx index 3278f3c0..a853a72c 100644 --- a/src/main/jsx4xp/components/AComponent.jsx +++ b/src/main/jsx4xp/components/AComponent.jsx @@ -1,6 +1,6 @@ import React from 'react'; -import { Shared1 } from '../_common'; +import { Shared1 } from '../common'; const AComponent = (props) =>
diff --git a/src/main/jsx4xp/components/more/AnotherComponent.jsx b/src/main/jsx4xp/components/more/AnotherComponent.jsx index d0941987..796b2e82 100644 --- a/src/main/jsx4xp/components/more/AnotherComponent.jsx +++ b/src/main/jsx4xp/components/more/AnotherComponent.jsx @@ -1,6 +1,6 @@ import React from 'react'; -import { Shared2 } from '../../_common'; +import { Shared2 } from '../../common'; const AnotherComponent = (props) =>
diff --git a/src/main/jsx4xp/index.ejs b/src/main/jsx4xp/index.ejs index b79fd397..b98b67d9 100644 --- a/src/main/jsx4xp/index.ejs +++ b/src/main/jsx4xp/index.ejs @@ -5,7 +5,7 @@ Enonic React Seedz - + diff --git a/webpack.config.jsx4xp.js b/webpack.config.jsx4xp.js index 7f2f955d..b1f02d42 100644 --- a/webpack.config.jsx4xp.js +++ b/webpack.config.jsx4xp.js @@ -6,24 +6,22 @@ const SRC_MAIN = path.join(__dirname, 'src/main'); const HOME = 'jsx4xp'; const SUB_ENTRIES = '_entries'; -const SUB_COMMON = '_common'; +const SUB_COMMON = 'common'; const ENTRIES = path.join(HOME, SUB_ENTRIES); const COMMON = path.join(HOME, SUB_COMMON); const SRC_JSX4XP = path.join(SRC_MAIN, HOME); const SRC_ENTRIES = path.join(SRC_MAIN, ENTRIES); const SRC_COMMON = path.join(SRC_MAIN, COMMON); + const BUILD_ASSETS = path.join(__dirname, 'build/resources/main/assets'); +const BUILD_ASSETS_TARGETSUBDIR = HOME; module.exports = { mode: 'production', - entry: Object.assign({}, - getEntries(SRC_ENTRIES, 'jsx', HOME + '/'), - getEntries(SRC_ENTRIES, 'js', HOME + '/'), - getEntries(SRC_ENTRIES, 'es6', HOME + '/') - ), + entry: getEntries(SRC_ENTRIES, ['jsx', 'js', 'es6'], BUILD_ASSETS_TARGETSUBDIR + '/'), output: { path: path.join(BUILD_ASSETS), // <-- Must be built to assets, since the use of {{assetUrl}} in index.html (or index.ejs) relates to that as base url @@ -61,11 +59,18 @@ module.exports = { } }; -function getEntries(fullDirPath, extension, entryPrefix) { - return glob.sync(path.join(fullDirPath, '**.' + extension)).reduce(function(obj, el) { - obj[entryPrefix + path.parse(el).name] = el; - return obj - }, {}); +function getEntries(fullDirPath, extensions, entryPrefix) { + const entries = {}; + extensions.forEach(extension => { + Object.assign( + entries, + glob.sync(path.join(fullDirPath, '**.' + extension)).reduce(function(obj, el) { + obj[entryPrefix + path.parse(el).name] = el; + return obj + }, {}) + ); + }); + return entries } function getCacheGroups() { From 06af22742bc8d3cce3fce883355220aac3844325 Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Thu, 27 Dec 2018 14:27:24 +0100 Subject: [PATCH 16/96] React problem fixed. Cleans output folder. --- package-lock.json | 9 +++++++++ package.json | 1 + src/main/jsx4xp/_entries/app.jsx | 12 +++++++++--- src/main/jsx4xp/common/index.jsx | 6 +++--- src/main/jsx4xp/components/AComponent.jsx | 6 +++--- src/main/jsx4xp/components/more/AnotherComponent.jsx | 2 +- webpack.config.jsx4xp.js | 5 ++++- 7 files changed, 30 insertions(+), 11 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8e1b2584..04e57845 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1962,6 +1962,15 @@ } } }, + "clean-webpack-plugin": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-1.0.0.tgz", + "integrity": "sha512-+f96f52UIET4tOFBbCqezx7KH+w7lz/p4fA1FEjf0hC6ugxqwZedBtENzekN2FnmoTF/bn1LrlkvebOsDZuXKw==", + "dev": true, + "requires": { + "rimraf": "^2.6.1" + } + }, "cliui": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", diff --git a/package.json b/package.json index 7c523795..1386ec3b 100644 --- a/package.json +++ b/package.json @@ -39,6 +39,7 @@ "babel-preset-react": "^6.24.1", "babel-preset-stage-0": "^6.24.1", "babel-register": "^6.26.0", + "clean-webpack-plugin": "^1.0.0", "css-loader": "^0.28.11", "html-webpack-plugin": "^3.2.0", "less-loader": "^4.1.0", diff --git a/src/main/jsx4xp/_entries/app.jsx b/src/main/jsx4xp/_entries/app.jsx index a4498524..c710408c 100644 --- a/src/main/jsx4xp/_entries/app.jsx +++ b/src/main/jsx4xp/_entries/app.jsx @@ -8,9 +8,15 @@ import AnotherComponent from '../components/more/AnotherComponent'; const MOUNT_NODE = document.getElementById('mountHere'); ReactDOM.render( - +
+

Heres some stuff.

+ +
, + + /*

Heres some child stuff.

- -
, + + +
,*/ MOUNT_NODE ); diff --git a/src/main/jsx4xp/common/index.jsx b/src/main/jsx4xp/common/index.jsx index 70ecfcee..e90a107b 100644 --- a/src/main/jsx4xp/common/index.jsx +++ b/src/main/jsx4xp/common/index.jsx @@ -1,8 +1,8 @@ import React from 'react'; -const Shared1 = (props) =>

This is the first shared component

; -const Shared2 = ({something}) =>

This is the second one. It says: { something }

; +const Shared = (props) =>

This is the first shared component

; +const Something = ({something}) =>

This is the second one. It says: { something }

; export default { - Shared1, Shared2 + Shared, Something }; diff --git a/src/main/jsx4xp/components/AComponent.jsx b/src/main/jsx4xp/components/AComponent.jsx index a853a72c..2a1a1988 100644 --- a/src/main/jsx4xp/components/AComponent.jsx +++ b/src/main/jsx4xp/components/AComponent.jsx @@ -1,12 +1,12 @@ import React from 'react'; -import { Shared1 } from '../common'; +import { Shared } from '../common'; const AComponent = (props) =>

React stuff is happening.

-

Stuff is reacting:

- { props.children } +

Stuff is reacting.

+ {props.children}
; export default AComponent; diff --git a/src/main/jsx4xp/components/more/AnotherComponent.jsx b/src/main/jsx4xp/components/more/AnotherComponent.jsx index 796b2e82..7c194e40 100644 --- a/src/main/jsx4xp/components/more/AnotherComponent.jsx +++ b/src/main/jsx4xp/components/more/AnotherComponent.jsx @@ -7,7 +7,7 @@ const AnotherComponent = (props) =>

React stuff is happening again!

More stuff is reacting:

- { props.children } + {props.children}
; export default AnotherComponent; diff --git a/webpack.config.jsx4xp.js b/webpack.config.jsx4xp.js index b1f02d42..d05630c9 100644 --- a/webpack.config.jsx4xp.js +++ b/webpack.config.jsx4xp.js @@ -1,6 +1,8 @@ const path = require('path'); const glob = require('glob'); + const HtmlWebpackPlugin = require('html-webpack-plugin'); +const CleanWebpackPlugin = require('clean-webpack-plugin') const SRC_MAIN = path.join(__dirname, 'src/main'); @@ -48,7 +50,8 @@ module.exports = { hash: false, template: path.join(SRC_JSX4XP, 'index.ejs'), filename: path.join(BUILD_ASSETS, 'index.html') // <-- Must be built to assets, since the paths inside use both {{assetUrl}} and module.exports.output.path as base url. If needed somewhere else, move it after this build step. - }) + }), + new CleanWebpackPlugin(path.join(BUILD_ASSETS, BUILD_ASSETS_TARGETSUBDIR)) ], optimization: { From 3fd498850509377c7590623d215477c560ed6546 Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Fri, 4 Jan 2019 15:48:31 +0100 Subject: [PATCH 17/96] Webpack builds better, keeping the folder structure below _entries. Also fixed import component problem. --- src/main/jsx4xp/_entries/app.jsx | 6 ++--- src/main/jsx4xp/_entries/level/app2.jsx | 22 ++++++++++++++++ src/main/jsx4xp/common/Shared.jsx | 5 ++++ src/main/jsx4xp/common/Something.jsx | 5 ++++ src/main/jsx4xp/common/index.jsx | 8 ------ src/main/jsx4xp/components/AComponent.jsx | 7 +++--- .../components/more/AnotherComponent.jsx | 2 +- webpack.config.jsx4xp.js | 25 +++++++++++++++---- 8 files changed, 60 insertions(+), 20 deletions(-) create mode 100644 src/main/jsx4xp/_entries/level/app2.jsx create mode 100644 src/main/jsx4xp/common/Shared.jsx create mode 100644 src/main/jsx4xp/common/Something.jsx delete mode 100644 src/main/jsx4xp/common/index.jsx diff --git a/src/main/jsx4xp/_entries/app.jsx b/src/main/jsx4xp/_entries/app.jsx index c710408c..353e0c4b 100644 --- a/src/main/jsx4xp/_entries/app.jsx +++ b/src/main/jsx4xp/_entries/app.jsx @@ -1,16 +1,16 @@ import React from 'react'; import ReactDOM from 'react-dom'; +import Something from '../common/Something'; import AComponent from '../components/AComponent'; -import AnotherComponent from '../components/more/AnotherComponent'; - const MOUNT_NODE = document.getElementById('mountHere'); ReactDOM.render(
-

Heres some stuff.

+

app.jsx: Heres some stuff.

+
, /* diff --git a/src/main/jsx4xp/_entries/level/app2.jsx b/src/main/jsx4xp/_entries/level/app2.jsx new file mode 100644 index 00000000..69dc8646 --- /dev/null +++ b/src/main/jsx4xp/_entries/level/app2.jsx @@ -0,0 +1,22 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; + +import Something from '../../common/Something'; +import AComponent from '../../components/AComponent'; + +const MOUNT_NODE = document.getElementById('mountHere'); + +ReactDOM.render( +
+

app2.jsx: Heres some stuff.

+ + +
, + + /* +

Heres some child stuff.

+ + +
,*/ + MOUNT_NODE +); diff --git a/src/main/jsx4xp/common/Shared.jsx b/src/main/jsx4xp/common/Shared.jsx new file mode 100644 index 00000000..276b923a --- /dev/null +++ b/src/main/jsx4xp/common/Shared.jsx @@ -0,0 +1,5 @@ +import React from 'react'; + +const Shared = (props) =>

Shared.jsx: This is the first shared component

; + +export default Shared; \ No newline at end of file diff --git a/src/main/jsx4xp/common/Something.jsx b/src/main/jsx4xp/common/Something.jsx new file mode 100644 index 00000000..e68263b6 --- /dev/null +++ b/src/main/jsx4xp/common/Something.jsx @@ -0,0 +1,5 @@ +import React from 'react'; + +const Something = ({something}) =>

Something.jsx: This is the second one. It says: { something }

; + +export default Something; diff --git a/src/main/jsx4xp/common/index.jsx b/src/main/jsx4xp/common/index.jsx deleted file mode 100644 index e90a107b..00000000 --- a/src/main/jsx4xp/common/index.jsx +++ /dev/null @@ -1,8 +0,0 @@ -import React from 'react'; - -const Shared = (props) =>

This is the first shared component

; -const Something = ({something}) =>

This is the second one. It says: { something }

; - -export default { - Shared, Something -}; diff --git a/src/main/jsx4xp/components/AComponent.jsx b/src/main/jsx4xp/components/AComponent.jsx index 2a1a1988..3ec00112 100644 --- a/src/main/jsx4xp/components/AComponent.jsx +++ b/src/main/jsx4xp/components/AComponent.jsx @@ -1,11 +1,12 @@ import React from 'react'; -import { Shared } from '../common'; +import Shared from '../common/Shared'; const AComponent = (props) =>
-

React stuff is happening.

-

Stuff is reacting.

+

Acomponent.jsx: React stuff is happening.

+

Acomponent.jsx: Stuff is reacting.

+ {props.children}
; diff --git a/src/main/jsx4xp/components/more/AnotherComponent.jsx b/src/main/jsx4xp/components/more/AnotherComponent.jsx index 7c194e40..6c2f43b6 100644 --- a/src/main/jsx4xp/components/more/AnotherComponent.jsx +++ b/src/main/jsx4xp/components/more/AnotherComponent.jsx @@ -1,6 +1,6 @@ import React from 'react'; -import { Shared2 } from '../../common'; +import Something from '../../common/Something'; const AnotherComponent = (props) =>
diff --git a/webpack.config.jsx4xp.js b/webpack.config.jsx4xp.js index d05630c9..e282f24f 100644 --- a/webpack.config.jsx4xp.js +++ b/webpack.config.jsx4xp.js @@ -23,7 +23,7 @@ const BUILD_ASSETS_TARGETSUBDIR = HOME; module.exports = { mode: 'production', - entry: getEntries(SRC_ENTRIES, ['jsx', 'js', 'es6'], BUILD_ASSETS_TARGETSUBDIR + '/'), + entry: getEntries(SRC_ENTRIES, ['jsx', 'js', 'es6'], BUILD_ASSETS_TARGETSUBDIR), output: { path: path.join(BUILD_ASSETS), // <-- Must be built to assets, since the use of {{assetUrl}} in index.html (or index.ejs) relates to that as base url @@ -62,17 +62,32 @@ module.exports = { } }; -function getEntries(fullDirPath, extensions, entryPrefix) { +function getEntries(fullDirPath, extensions, targetPath, entryPrefix) { const entries = {}; + targetPath += "/"; + console.log("targetPath: " + JSON.stringify(targetPath, null, 4)); extensions.forEach(extension => { Object.assign( entries, - glob.sync(path.join(fullDirPath, '**.' + extension)).reduce(function(obj, el) { - obj[entryPrefix + path.parse(el).name] = el; - return obj + glob.sync(path.join(fullDirPath, '**/*.' + extension)).reduce(function(obj, el) { + const parsedEl = path.parse(el); + console.log("fullDirPath: " + JSON.stringify(fullDirPath, null, 4)); + console.log("el: " + JSON.stringify(parsedEl, null, 4)); + if (parsedEl && parsedEl.dir.startsWith(fullDirPath)) { + let subdir = parsedEl.dir.substring(fullDirPath.length).replace(/(^\/+)|(\/+$)/g, "");; + if (subdir.length) { + subdir += "/"; + } + console.log("subdir: " + JSON.stringify(subdir, null, 4)); + + obj[targetPath + subdir + parsedEl.name] = el; + } + return obj; }, {}) ); }); + + console.log("entries: " + JSON.stringify(entries, null, 4)); return entries } From fd663d3a4f8ac45e139788517d1d76e3da8a1c0c Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Fri, 4 Jan 2019 17:53:03 +0100 Subject: [PATCH 18/96] Plan and started some XP boilerplate (generic page and part). Expand this, then implement the plan, doing the server-side-rendered HTML last. --- .../resources/site/pages/default/default.es6 | 33 +++++++++ .../resources/site/pages/default/default.html | 22 ++++++ .../resources/site/pages/default/default.xml | 7 ++ .../reactive-part/reactive-part-view.jsx | 5 ++ .../parts/reactive-part/reactive-part.es6 | 68 +++++++++++++++++++ .../parts/reactive-part/reactive-part.xml | 11 +++ webpack.config.jsx4xp.js | 9 +-- 7 files changed, 148 insertions(+), 7 deletions(-) create mode 100644 src/main/resources/site/pages/default/default.es6 create mode 100644 src/main/resources/site/pages/default/default.html create mode 100644 src/main/resources/site/pages/default/default.xml create mode 100644 src/main/resources/site/parts/reactive-part/reactive-part-view.jsx create mode 100644 src/main/resources/site/parts/reactive-part/reactive-part.es6 create mode 100644 src/main/resources/site/parts/reactive-part/reactive-part.xml diff --git a/src/main/resources/site/pages/default/default.es6 b/src/main/resources/site/pages/default/default.es6 new file mode 100644 index 00000000..71d640dc --- /dev/null +++ b/src/main/resources/site/pages/default/default.es6 @@ -0,0 +1,33 @@ +var libs = { + portal: require('/lib/xp/portal'), // Import the portal functions + thymeleaf: require('/lib/xp/thymeleaf'), // Import the Thymeleaf rendering function + util: require('/lib/enonic/util') +}; + +// Specify the view file to use +var view = resolve('default.html'); + + +// Handle the GET request +exports.get = function(req) { + libs.util.log({request:req}, null, 2); // Source: https://github.com/enonic/lib-util/blob/master/src/main/resources/site/lib/enonic/util/index.js + + // Get the content that is using the page + var content = libs.portal.getContent(); + //var site = libs.portal.getSite(); + //var config = libs.portal.getSiteConfig(); + + var mainRegion = content.page.regions.main; + + //log.info(JSON.stringify({site:site}, null, 2)); + + // Prepare the model that will be passed to the view + var model = { content, mainRegion }; + + // Render the dynamic HTML with values from the model + var body = libs.thymeleaf.render(view, model); + + // Return the response object + return { body } +}; + diff --git a/src/main/resources/site/pages/default/default.html b/src/main/resources/site/pages/default/default.html new file mode 100644 index 00000000..f7d59061 --- /dev/null +++ b/src/main/resources/site/pages/default/default.html @@ -0,0 +1,22 @@ + + + + + React 4 XP + + + + +
+

React 4 XP

+
+ +
+ +
+
+
+ +
+ + diff --git a/src/main/resources/site/pages/default/default.xml b/src/main/resources/site/pages/default/default.xml new file mode 100644 index 00000000..cdb5a85c --- /dev/null +++ b/src/main/resources/site/pages/default/default.xml @@ -0,0 +1,7 @@ + + Minimal page + + + + + diff --git a/src/main/resources/site/parts/reactive-part/reactive-part-view.jsx b/src/main/resources/site/parts/reactive-part/reactive-part-view.jsx new file mode 100644 index 00000000..6b0d4b09 --- /dev/null +++ b/src/main/resources/site/parts/reactive-part/reactive-part-view.jsx @@ -0,0 +1,5 @@ +import React from 'react'; + +const Test = (props) =>

Dette er en test

; + +export default Test; \ No newline at end of file diff --git a/src/main/resources/site/parts/reactive-part/reactive-part.es6 b/src/main/resources/site/parts/reactive-part/reactive-part.es6 new file mode 100644 index 00000000..c3f8294d --- /dev/null +++ b/src/main/resources/site/parts/reactive-part/reactive-part.es6 @@ -0,0 +1,68 @@ +var libs = { + portal: require('/lib/xp/portal'), // Import the portal functions + thymeleaf: require('/lib/xp/thymeleaf'), // Import the Thymeleaf rendering function + util: require('/lib/enonic/util') +}; + +// Specify the view file to use +var view = resolve('reactive-part.html'); + + +// Handle the GET request +exports.get = function(req) { + libs.util.log({request:req}, null, 2); // Source: https://github.com/enonic/lib-util/blob/master/src/main/resources/site/lib/enonic/util/index.js + + // Get the content that is using the page + var content = libs.portal.getContent(); + //var site = libs.portal.getSite(); + //var config = libs.portal.getSiteConfig(); + + //log.info(JSON.stringify({site:site}, null, 2)); + + // Prepare the model that will be passed to the view + var model = { }; + + // Render the dynamic HTML with values from the model + var body = libs.thymeleaf.render(view, model); + + // Return the response object + return { body } + + /** + * PLAN: + * Et lib rendrer body: + * Hvis innenfor content studio: Server-side-rendered HTML fra reactkomponenten. + * Hvis ikke: HTML å hekte react-entryen på: + * Hvis et view er sendt inn (html-fil), forventes det at det er en XP thymeleaf som inneholder en plassholder-element å hekte react på, + * akkurat denne thymeleaf-ID'en et eller annet sted:
. + * Hvis ikke noe view er sendt inn, rendres kun:
+ * + * Hvis jsx4xpId er tom, genereres en unik id: jsx4xp_[hash/uid] + * Hvis jsx4xpId ikke er tom, legges en unik hash/uid etter, som postfix. + * NB: Disse må være unike per komponent/path! Så, runtime. + * Denne verdien settes inn i HTML'en enten via thymeleaf eller direkte-rendret. + * + * + * Page contributions: + * Hvis ikke innenfor content studio: + * - + +
- - + + \ No newline at end of file diff --git a/src/main/resources/main.js b/src/main/resources/main.js index 0e9824d0..179a6b1d 100644 --- a/src/main/resources/main.js +++ b/src/main/resources/main.js @@ -2,7 +2,7 @@ var portal = require('/lib/xp/portal'); var mustache = require('/lib/xp/mustache'); -var view = resolve('./index.html'); +var view = resolve('./assets/j4x/index.html'); function handleGet(req) { diff --git a/webpack.config.j4x.js b/webpack.config.j4x.js new file mode 100644 index 00000000..46effb92 --- /dev/null +++ b/webpack.config.j4x.js @@ -0,0 +1,133 @@ +const path = require('path'); +const glob = require('glob'); + +const HtmlWebpackPlugin = require('html-webpack-plugin'); +const CleanWebpackPlugin = require('clean-webpack-plugin'); + +const SRC_MAIN = path.join(__dirname, 'src/main'); +const BUILD = path.join(__dirname, 'build/resources/main'); + +const ASSETS = 'assets'; +const J4X_HOME = 'j4x'; +const J4X_SUB_ENTRIES = '_entries'; +const J4X_TARGETSUBDIR = path.join(ASSETS, J4X_HOME); + +const J4X_ENTRIES = path.join(J4X_HOME, J4X_SUB_ENTRIES); + +const SRC_J4X = path.join(SRC_MAIN, J4X_HOME); +const SRC_J4X_ENTRIES = path.join(SRC_MAIN, J4X_ENTRIES); + +const BUILD_ASSETS = path.join(BUILD, ASSETS); +const BUILD_ASSETS_JSX = path.join(BUILD, J4X_TARGETSUBDIR); + +console.log(JSON.stringify({ + 1: BUILD, 2: BUILD_ASSETS, 4: BUILD_ASSETS_JSX +}, null, 4)); + +module.exports = { + mode: 'production', + + entry: Object.assign({}, + getEntries(SRC_J4X_ENTRIES, ['jsx', 'js', 'es6'], J4X_TARGETSUBDIR) + ), + + output: { + path: path.join(BUILD), // <-- Sets the base url for plugins and other target dirs. Note the use of {{assetUrl}} in index.html (or index.ejs). + filename: "[name].[contenthash:9].js" + }, + + resolve: { + extensions: ['.es6', '.js', '.jsx', '.less'] + }, + module: { + rules: [{ + test: /\.((jsx?)|(es6))$/, + exclude: /node_modules/, + loader: 'babel-loader' + }, { + test: /\.less$/, + loaders: ["style-loader", "css-loader", "less-loader"] + }] + }, + + plugins: [ + + new HtmlWebpackPlugin({ + inject: false, + hash: false, + template: path.join(SRC_J4X, 'index.ejs'), + filename: path.join(BUILD_ASSETS_JSX, 'index.html') // <-- TODO: Must be moved to assets after build, since the paths inside use both {{assetUrl}} and module.exports.output.path as base url. + }), + + new CleanWebpackPlugin(BUILD_ASSETS_JSX), + ], + + optimization: { + splitChunks: { + name: false, + cacheGroups: getCacheGroups({common: 2}) + } + } +}; + +function getEntries(fullDirPath, extensions, targetPath) { + const entries = {}; + targetPath += "/"; + extensions.forEach(extension => { + Object.assign( + entries, + glob.sync(path.join(fullDirPath, '**/*.' + extension)).reduce(function(obj, el) { + const parsedEl = path.parse(el); + if (parsedEl && parsedEl.dir.startsWith(fullDirPath)) { + let subdir = parsedEl.dir.substring(fullDirPath.length).replace(/(^\/+)|(\/+$)/g, ""); + if (subdir.length) { + subdir += "/"; + } + obj[targetPath + subdir + parsedEl.name] = el; + } + return obj; + }, {}) + ); + }); + + //console.log("entries: " + JSON.stringify(entries, null, 4)); + return entries +} + +function getCacheGroups(priorities) { + const chunks = { + vendors: { + name: 'assets/vendors', + enforce: true, + test: /[\\/]node_modules[\\/]/, + chunks: 'all', + priority: 100 + }, + /*common: { + name: J4X_COMMON, + enforce: true, + test: new RegExp(SRC_J4X_COMMON), + chunks: 'all', + priority: 2 + }*/ + }; + + // In order to make all directories below SRC_J4X (except _entries and _common) into a chunk of their own, make an array of names of first-level directories below SRC_J4X: + const chunkDirs = (glob.sync(path.join(SRC_J4X, '**/')) || []) + .filter(dirr => !!dirr && dirr.startsWith(SRC_J4X)) + .map(dirr => path.parse(dirr.substring(SRC_J4X.length))) + .filter(dirr => !!dirr && dirr.dir === "/" && dirr.name !== "" && dirr.name !== J4X_SUB_ENTRIES) + .map(dirr => dirr.name) + //console.log("Chunkdirs: " + JSON.stringify(chunkDirs, null, 4)); + chunkDirs.forEach(dirr => { + chunks[dirr] = { + name: path.join(ASSETS, J4X_HOME, dirr), + enforce: true, + test: new RegExp(path.join(SRC_J4X, dirr)), + chunks: 'all', + priority: (priorities || {})[dirr] || 1 + } + }) + console.log("Bundled chunks (as in, not _entries): " + JSON.stringify(chunks, null, 4)); + return chunks; +} \ No newline at end of file diff --git a/webpack.config.jsx4xp.js b/webpack.config.jsx4xp.js deleted file mode 100644 index e2f03661..00000000 --- a/webpack.config.jsx4xp.js +++ /dev/null @@ -1,127 +0,0 @@ -const path = require('path'); -const glob = require('glob'); - -const HtmlWebpackPlugin = require('html-webpack-plugin'); -const CleanWebpackPlugin = require('clean-webpack-plugin') - -const SRC_MAIN = path.join(__dirname, 'src/main'); - -const HOME = 'jsx4xp'; -const SUB_ENTRIES = '_entries'; -const SUB_COMMON = 'common'; -const ENTRIES = path.join(HOME, SUB_ENTRIES); -const COMMON = path.join(HOME, SUB_COMMON); - -const SRC_JSX4XP = path.join(SRC_MAIN, HOME); -const SRC_ENTRIES = path.join(SRC_MAIN, ENTRIES); -const SRC_COMMON = path.join(SRC_MAIN, COMMON); - -const BUILD_ASSETS = path.join(__dirname, 'build/resources/main/assets'); -const BUILD_ASSETS_TARGETSUBDIR = HOME; - - -module.exports = { - mode: 'production', - - entry: getEntries(SRC_ENTRIES, ['jsx', 'js', 'es6'], BUILD_ASSETS_TARGETSUBDIR), - - output: { - path: path.join(BUILD_ASSETS), // <-- Built to assets, since output.path sets the base url, and the use of {{assetUrl}} in index.html (or index.ejs) relates to that base url. - filename: "[name].[contenthash:9].js" - }, - - resolve: { - extensions: ['.es6', '.js', '.jsx', '.less'] - }, - module: { - rules: [{ - test: /\.((jsx?)|(es6))$/, - exclude: /node_modules/, - loader: 'babel-loader' - }, { - test: /\.less$/, - loaders: ["style-loader", "css-loader", "less-loader"] - }] - }, - - plugins: [ - new HtmlWebpackPlugin({ - inject: false, - hash: false, - template: path.join(SRC_JSX4XP, 'index.ejs'), - filename: path.join(BUILD_ASSETS, 'index.html') // <-- Built to assets, since the paths inside use both {{assetUrl}} and module.exports.output.path as base url. If needed somewhere else, move it after this build step. - }), - new CleanWebpackPlugin(path.join(BUILD_ASSETS, BUILD_ASSETS_TARGETSUBDIR)) - ], - - optimization: { - splitChunks: { - name: false, - cacheGroups: getCacheGroups() - } - } -}; - -function getEntries(fullDirPath, extensions, targetPath) { - const entries = {}; - targetPath += "/"; - extensions.forEach(extension => { - Object.assign( - entries, - glob.sync(path.join(fullDirPath, '**/*.' + extension)).reduce(function(obj, el) { - const parsedEl = path.parse(el); - if (parsedEl && parsedEl.dir.startsWith(fullDirPath)) { - let subdir = parsedEl.dir.substring(fullDirPath.length).replace(/(^\/+)|(\/+$)/g, ""); - if (subdir.length) { - subdir += "/"; - } - obj[targetPath + subdir + parsedEl.name] = el; - } - return obj; - }, {}) - ); - }); - - //console.log("entries: " + JSON.stringify(entries, null, 4)); - return entries -} - -function getCacheGroups() { - const chunks = { - vendors: { - name: 'vendors', - enforce: true, - test: /[\\/]node_modules[\\/]/, - chunks: 'all', - priority: 3 - }, - common: { - name: COMMON, - enforce: true, - test: new RegExp(SRC_COMMON), - chunks: 'all', - priority: 2 - } - }; - - // Makes array of names of first-level directories below SRC_JSX4XP, other than _entries and _common: - const chunkDirs = (glob.sync(path.join(SRC_JSX4XP, '**/')) || []) - .filter(dirr => !!dirr && dirr.startsWith(SRC_JSX4XP)) - .map(dirr => path.parse(dirr.substring(SRC_JSX4XP.length))) - .filter(dirr => !!dirr && dirr.dir === "/" && dirr.name !== "" && dirr.name !== SUB_ENTRIES && dirr.name !== SUB_COMMON) - .map(dirr => dirr.name) - - chunkDirs.forEach(dirr => { - chunks[dirr] = { - name: path.join(HOME, dirr), - enforce: true, - test: new RegExp(path.join(SRC_JSX4XP, dirr)), - chunks: 'all', - priority: 1 - } - }) - - console.log("Bundled (non-_entries) chunks: " + JSON.stringify(chunks, null, 4)); - - return chunks; -} \ No newline at end of file From fa2933a9d345cc6c3a914869674b896ae5a74a38 Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Sun, 6 Jan 2019 17:04:19 +0100 Subject: [PATCH 22/96] index.html problem: slight improvement after moving index.html down. But {{assetsUrl}}/assets must still be changed to only {{assetsUrl}} --- src/main/resources/main.js | 2 +- webpack.config.j4x.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/main.js b/src/main/resources/main.js index 179a6b1d..0e9824d0 100644 --- a/src/main/resources/main.js +++ b/src/main/resources/main.js @@ -2,7 +2,7 @@ var portal = require('/lib/xp/portal'); var mustache = require('/lib/xp/mustache'); -var view = resolve('./assets/j4x/index.html'); +var view = resolve('./index.html'); function handleGet(req) { diff --git a/webpack.config.j4x.js b/webpack.config.j4x.js index 46effb92..1c41384e 100644 --- a/webpack.config.j4x.js +++ b/webpack.config.j4x.js @@ -56,7 +56,7 @@ module.exports = { inject: false, hash: false, template: path.join(SRC_J4X, 'index.ejs'), - filename: path.join(BUILD_ASSETS_JSX, 'index.html') // <-- TODO: Must be moved to assets after build, since the paths inside use both {{assetUrl}} and module.exports.output.path as base url. + filename: path.join(BUILD, 'index.html') // <-- TODO: Must be moved to assets after build, since the paths inside use both {{assetUrl}} and module.exports.output.path as base url. }), new CleanWebpackPlugin(BUILD_ASSETS_JSX), From b00bf9c06302f155f7558761950aa381f8e230c0 Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Sun, 6 Jan 2019 18:47:24 +0100 Subject: [PATCH 23/96] Builds site jsx files. No longer hashes entries under site or j4x. Extracts hashed common-chunk names to commonChunks.xml --- src/main/j4x/commonChunks.ejs | 11 ++++++++ src/main/j4x/index.ejs | 3 +-- webpack.config.j4x.js | 49 ++++++++++++++++++++++------------- 3 files changed, 43 insertions(+), 20 deletions(-) create mode 100644 src/main/j4x/commonChunks.ejs diff --git a/src/main/j4x/commonChunks.ejs b/src/main/j4x/commonChunks.ejs new file mode 100644 index 00000000..9374a8db --- /dev/null +++ b/src/main/j4x/commonChunks.ejs @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/main/j4x/index.ejs b/src/main/j4x/index.ejs index d7c1441e..3d8fce39 100644 --- a/src/main/j4x/index.ejs +++ b/src/main/j4x/index.ejs @@ -2,7 +2,7 @@ - Enonic React Seedz + Enonic React Seed @@ -15,4 +15,3 @@ - \ No newline at end of file diff --git a/webpack.config.j4x.js b/webpack.config.j4x.js index 1c41384e..7013d8e0 100644 --- a/webpack.config.j4x.js +++ b/webpack.config.j4x.js @@ -8,10 +8,13 @@ const SRC_MAIN = path.join(__dirname, 'src/main'); const BUILD = path.join(__dirname, 'build/resources/main'); const ASSETS = 'assets'; +const SITE = 'site'; const J4X_HOME = 'j4x'; -const J4X_SUB_ENTRIES = '_entries'; -const J4X_TARGETSUBDIR = path.join(ASSETS, J4X_HOME); +const J4X_SUB_ENTRIES = '_entries'; // Special-case subdirectory under /j4x/. All files under this will be their own chunk, for dynamic, on-demand asset loading of top-level components, which in turn uses shared components chunked under all other subdirectories. TODO: WHAT ABOUT FILES IN ROOT /J4X/ ? + +const SRC_SITE = path.join(SRC_MAIN, "resources", SITE); +const J4X_TARGETSUBDIR = path.join(ASSETS, J4X_HOME); const J4X_ENTRIES = path.join(J4X_HOME, J4X_SUB_ENTRIES); const SRC_J4X = path.join(SRC_MAIN, J4X_HOME); @@ -20,20 +23,31 @@ const SRC_J4X_ENTRIES = path.join(SRC_MAIN, J4X_ENTRIES); const BUILD_ASSETS = path.join(BUILD, ASSETS); const BUILD_ASSETS_JSX = path.join(BUILD, J4X_TARGETSUBDIR); -console.log(JSON.stringify({ - 1: BUILD, 2: BUILD_ASSETS, 4: BUILD_ASSETS_JSX -}, null, 4)); - module.exports = { mode: 'production', entry: Object.assign({}, - getEntries(SRC_J4X_ENTRIES, ['jsx', 'js', 'es6'], J4X_TARGETSUBDIR) + getEntries(SRC_J4X_ENTRIES, ['jsx', 'js', 'es6'], J4X_TARGETSUBDIR), + getEntries(SRC_SITE, ['jsx'], SITE) ), output: { path: path.join(BUILD), // <-- Sets the base url for plugins and other target dirs. Note the use of {{assetUrl}} in index.html (or index.ejs). - filename: "[name].[contenthash:9].js" + filename: (chunkData) => { + console.log("fileData:", chunkData); + console.log("chunkData:", chunkData.chunk.entryModule._chunks) + if ( + ((chunkData.chunk.entryModule.context || "").startsWith(SRC_J4X_ENTRIES)) && + ((chunkData.chunk.entryModule.context || "").startsWith(SRC_SITE)) + ) { + //console.log("--> [name].[contenthash:9].js\n"); + return "[name].[contenthash:9].js"; + } + + //console.log("--> [name].js\n"); + return "[name].js" + }, + chunkFilename: "[name].[contenthash:9].js" }, resolve: { @@ -56,10 +70,15 @@ module.exports = { inject: false, hash: false, template: path.join(SRC_J4X, 'index.ejs'), - filename: path.join(BUILD, 'index.html') // <-- TODO: Must be moved to assets after build, since the paths inside use both {{assetUrl}} and module.exports.output.path as base url. + filename: path.join(BUILD, 'index.html') // <-- TODO: Must be moved to assets after webpack, and have its urls postprocessed, since the paths inside use both {{assetUrl}} and module.exports.output.path as base url. }), - new CleanWebpackPlugin(BUILD_ASSETS_JSX), + new HtmlWebpackPlugin({ + inject: false, + hash: false, + template: path.join(SRC_J4X, 'commonChunks.ejs'), + filename: path.join(BUILD, 'commonChunks.xml') // <-- TODO: Must be moved to assets after webpack, and have its urls postprocessed, since the paths inside use both {{assetUrl}} and module.exports.output.path as base url. + }) ], optimization: { @@ -103,13 +122,6 @@ function getCacheGroups(priorities) { chunks: 'all', priority: 100 }, - /*common: { - name: J4X_COMMON, - enforce: true, - test: new RegExp(SRC_J4X_COMMON), - chunks: 'all', - priority: 2 - }*/ }; // In order to make all directories below SRC_J4X (except _entries and _common) into a chunk of their own, make an array of names of first-level directories below SRC_J4X: @@ -118,6 +130,7 @@ function getCacheGroups(priorities) { .map(dirr => path.parse(dirr.substring(SRC_J4X.length))) .filter(dirr => !!dirr && dirr.dir === "/" && dirr.name !== "" && dirr.name !== J4X_SUB_ENTRIES) .map(dirr => dirr.name) + //console.log("Chunkdirs: " + JSON.stringify(chunkDirs, null, 4)); chunkDirs.forEach(dirr => { chunks[dirr] = { @@ -130,4 +143,4 @@ function getCacheGroups(priorities) { }) console.log("Bundled chunks (as in, not _entries): " + JSON.stringify(chunks, null, 4)); return chunks; -} \ No newline at end of file +} From c95f99a3d625f098424403c8de205132355b1e5a Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Sun, 6 Jan 2019 20:30:32 +0100 Subject: [PATCH 24/96] Transpiles XP source files separately from the J4X webpack step. MILESTONE: produces an XP part with a react-pluggable placeholder. --- build.gradle | 30 ++++++++++--- package.json | 4 +- .../parts/reactive-part/reactive-part.es6 | 42 +++++++++---------- webpack.config.j4x.js | 37 ++++++---------- 4 files changed, 61 insertions(+), 52 deletions(-) diff --git a/build.gradle b/build.gradle index b7ebc265..e1a7f4de 100644 --- a/build.gradle +++ b/build.gradle @@ -18,7 +18,6 @@ node { dependencies { - include "com.enonic.xp:lib-repo:${xpVersion}" include "com.enonic.xp:lib-node:${xpVersion}" compile "com.enonic.xp:core-api:${xpVersion}" @@ -27,7 +26,10 @@ dependencies { include "com.enonic.xp:lib-portal:${xpVersion}" include "com.enonic.xp:lib-io:${xpVersion}" include "com.enonic.xp:lib-mustache:${xpVersion}" + include "com.enonic.xp:lib-thymeleaf:${xpVersion}" + include "com.enonic.lib:lib-router:1.0.1" + include 'com.enonic.lib:util:1.3.0' } repositories { @@ -36,16 +38,32 @@ repositories { xp.enonicRepo() } +// Transpile .js and .es6 files under src/main/resources. +// These are "pure XP" source code files, not JS (and react) assets. Those must be transpiled separately, by the webpackJ4X task below. +// This is currently done by reserving .es6 and .js files below src/main/resources/ for this task, +// while reserving .JSX files under that, and all relevant extensions in other locations, for the webpackJ4X task. +task babelJs(type: NodeTask) { + script = file('node_modules/babel-cli/bin/babel.js') + args = ["src/main/resources", "--out-dir", "build/resources/main", "--ignore", "**/*.jsx"] + + inputs.dir 'src/main/resources' + outputs.dir "build/resources/main" +} + +babelJs.dependsOn += 'npmInstall' +babelJs.dependsOn += 'processResources' + + task webpackJ4X(type: NodeTask) { script = file('node_modules/webpack/bin/webpack.js') args = ['--config', 'webpack.config.j4x.js'] - doLast { + /*doLast { file("build/resources/main/assets/index.html").renameTo(file("build/resources/main/index.html")) - } + }*/ } + // processes your package.json before running webpack -webpackJ4X.dependsOn 'npmInstall' -webpackJ4X.dependsOn 'processResources' +webpackJ4X.dependsOn babelJs -jar.dependsOn webpackJ4X \ No newline at end of file +jar.dependsOn webpackJ4X diff --git a/package.json b/package.json index 07770812..bc50d117 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,9 @@ "build": "gradle build", "deploy": "gradle deploy", "watch": "gradle deploy -t", - "j4x": "rm -rf build; node_modules/webpack/bin/webpack.js --config webpack.config.j4x.js" + "j4x": "rm -rf build; node_modules/webpack/bin/webpack.js --config webpack.config.j4x.js", + "babelSite": "babel src/main/resources --out-dir build/resources/main --ignore \"**/*.js\"", + "babelSiteWatch": "babel src/main/resources --out-dir build/resources/main --ignore \"**/*.js\" --watch" }, "repository": { "type": "git", diff --git a/src/main/resources/site/parts/reactive-part/reactive-part.es6 b/src/main/resources/site/parts/reactive-part/reactive-part.es6 index b25cc6b2..b90a1a74 100644 --- a/src/main/resources/site/parts/reactive-part/reactive-part.es6 +++ b/src/main/resources/site/parts/reactive-part/reactive-part.es6 @@ -5,10 +5,10 @@ const libs = { }; // Specify the view file to use -// var view = resolve('reactive-part.html'); +var view = ""; // resolve('reactive-part.html'); -const makeFallbackBody = (jsx4xpId) => `
`; +const makeFallbackBody = (j4xId) => `
`; // Handle the GET request exports.get = function(req) { @@ -21,7 +21,7 @@ exports.get = function(req) { //log.info(JSON.stringify({site:site}, null, 2)); - let jsx4xpId = ""; + let j4xId = ""; // Prepare the model that will be passed to the view let model = {}; @@ -32,15 +32,15 @@ exports.get = function(req) { // Uniquely postfix the ID of the react component. // This identifies the target placeholder element as well as inserted props and values. - jsx4xpId = ((jsx4xpId || "") + "").replace(/\s+/g, ""); - if (jsx4xpId === "") { - jsx4xpId = "jsx4xp"; + j4xId = ((j4xId || "") + "").replace(/\s+/g, ""); + if (j4xId === "") { + j4xId = "j4x"; } - jsx4xpId += "_" + Math.floor(Math.random() * 99999999); // TODO: Better make this determined by component path? + j4xId += "_" + Math.floor(Math.random() * 99999999); // TODO: Better make this determined by component path? // Insert the target element ID into the model model = model || {}; - model.jsx4xpId = jsx4xpId; + model.j4xId = j4xId; // If a view is supplied, render the dynamic HTML with values from the model let body = undefined; @@ -50,17 +50,17 @@ exports.get = function(req) { const pageContributions = {}; - // Empty body? Generate fallback body with only a target placeholder element. + // If the body is empty: Generate fallback body with only a target placeholder element. if (((body || '') + "").replace(/(^\s+)|(\s+$)/g, "") === "") { - body = makeFallbackBody(jsx4xpId); + body = makeFallbackBody(j4xId); log.info("Fallback body: " + body); - // Body is missing a target placeholder element? Make one and insert it right before the closing tag. + // If the body is missing a target placeholder element: Make one and insert it right before the closing tag. } else { - const jsx4xpPattern = new RegExp("<[^>]+\\s+id\\s*=\\s*[\"']" + jsx4xpId + "[\"']", 'i'); - log.info(JSON.stringify({jsx4xpId, jsx4xpPattern}, null, 2)); + const j4xPattern = new RegExp("<[^>]+\\s+id\\s*=\\s*[\"']" + j4xId + "[\"']", 'i'); + log.info(JSON.stringify({j4xId, j4xPattern}, null, 2)); - if (!body.match(jsx4xpPattern)) { + if (!body.match(j4xPattern)) { const elemPatt = /^<\s*(\w+)[\s>]/g; const outerElement = elemPatt.exec(body); if (!outerElement[1]) { @@ -72,7 +72,7 @@ exports.get = function(req) { log.info(JSON.stringify({body, endPos}, null, 2)); - body = body.slice(0, endPos) + makeFallbackBody(jsx4xpId) + body.slice(endPos); + body = body.slice(0, endPos) + makeFallbackBody(j4xId) + body.slice(endPos); log.info(JSON.stringify({body}, null, 2)); } } @@ -86,11 +86,11 @@ exports.get = function(req) { * Hvis innenfor content studio: Server-side-rendered HTML fra reactkomponenten. * Hvis ikke: HTML å hekte react-entryen på: * -Hvis et view er sendt inn (html-fil), forventes det at det er en XP thymeleaf som inneholder en plassholder-element å hekte react på, - * akkurat denne thymeleaf-ID'en et eller annet sted:
. - * -Hvis ikke noe view er sendt inn, rendres kun:
+ * akkurat denne thymeleaf-ID'en et eller annet sted:
. + * -Hvis ikke noe view er sendt inn, rendres kun:
* - * -Hvis jsx4xpId er tom, genereres en unik id: jsx4xp_[hash/uid] - * -Hvis jsx4xpId ikke er tom, legges en unik hash/uid etter, som postfix. + * -Hvis j4xId er tom, genereres en unik id: j4x_[hash/uid] + * -Hvis j4xId ikke er tom, legges en unik hash/uid etter, som postfix. * NB: Disse må være unike per komponent/path! Så, runtime. * -Denne verdien settes inn i HTML'en enten via thymeleaf eller direkte-rendret. * @@ -99,9 +99,9 @@ exports.get = function(req) { * Hvis ikke innenfor content studio: * - + +
- - - + + diff --git a/src/main/resources/main.js b/src/main/resources/main.js index 0e9824d0..003d65e6 100644 --- a/src/main/resources/main.js +++ b/src/main/resources/main.js @@ -4,8 +4,15 @@ var mustache = require('/lib/xp/mustache'); var view = resolve('./index.html'); -function handleGet(req) { +var router = require('/lib/router')(); + +// Handle all GET requests +exports.get = function (req) { + return router.dispatch(req); +}; + +router.get('', function (req) { var params = { appVersion: app.version, assetUrl: portal.assetUrl('') @@ -20,7 +27,17 @@ function handleGet(req) { }, body: body }; -} +}); + +router.get('/react4xp', function (req) { + return {body: "Error: Missing component path/name."}; +}); -exports.get = handleGet; +// This should be a react4xp service, but that doesn't work. Why? This is a start for just a proof of concept though: +router.get('/react4xp/{component}', function (req) { + log.info("react4xp service!\nreq: " + JSON.stringify(req, null, 2)); + var component = req.pathParams.component; + log.info("component: " + JSON.stringify(component, null, 2)); + return {body: "Component: " + component}; +}); diff --git a/src/main/resources/services/react4xp/react4xp.es6 b/src/main/resources/services/react4xp/react4xp.es6 new file mode 100644 index 00000000..c3c430b8 --- /dev/null +++ b/src/main/resources/services/react4xp/react4xp.es6 @@ -0,0 +1,22 @@ +var router = require('/lib/router')(); + +// Handle all GET requests +exports.get = function (req) { + return router.dispatch(req); +}; + +router.get('', function (req) { + log.info("Nonesuch."); + var component = req.pathParams.component; + log.info("rcomponent: " + JSON.stringify(component, null, 2)); + + return {body: "Nonesuch"}; +}); + +router.get('/{component}', function (req) { + log.info("react4xp service!\nreq: " + JSON.stringify(req, null, 2)); + var component = req.pathParams.component; + log.info("component: " + JSON.stringify(component, null, 2)); + + return {body: "Component"}; +}); diff --git a/src/main/resources/services/react4xp/react4xp.xml b/src/main/resources/services/react4xp/react4xp.xml new file mode 100644 index 00000000..15c7f764 --- /dev/null +++ b/src/main/resources/services/react4xp/react4xp.xml @@ -0,0 +1,6 @@ + + + role:system.everyone + role:system.su + + diff --git a/src/main/resources/site/pages/default/default.es6 b/src/main/resources/site/pages/default/default.es6 index 71d640dc..f2cb7513 100644 --- a/src/main/resources/site/pages/default/default.es6 +++ b/src/main/resources/site/pages/default/default.es6 @@ -6,18 +6,19 @@ var libs = { // Specify the view file to use var view = resolve('default.html'); +var exemel = resolve('default.xml'); // Handle the GET request exports.get = function(req) { - libs.util.log({request:req}, null, 2); // Source: https://github.com/enonic/lib-util/blob/master/src/main/resources/site/lib/enonic/util/index.js // Get the content that is using the page - var content = libs.portal.getContent(); + var content = libs.portal.getContent(); + //var site = libs.portal.getSite(); //var config = libs.portal.getSiteConfig(); - var mainRegion = content.page.regions.main; + var mainRegion = content.page.regions.main; //log.info(JSON.stringify({site:site}, null, 2)); diff --git a/src/main/resources/site/parts/reactive-part/reactive-part.es6 b/src/main/resources/site/parts/reactive-part/reactive-part.es6 index b90a1a74..9029abe6 100644 --- a/src/main/resources/site/parts/reactive-part/reactive-part.es6 +++ b/src/main/resources/site/parts/reactive-part/reactive-part.es6 @@ -1,4 +1,5 @@ const libs = { + io: require('/lib/xp/io'), portal: require('/lib/xp/portal'), // Import the portal functions thymeleaf: require('/lib/xp/thymeleaf'), // Import the Thymeleaf rendering function util: require('/lib/enonic/util') @@ -7,40 +8,66 @@ const libs = { // Specify the view file to use var view = ""; // resolve('reactive-part.html'); +const makeFallbackBody = (react4xpId) => `
`; + + + +const BASE_PATHS = { + part: "parts/", + page: "pages/", +}; +// Get the corresponding file name +const getComponentName = (component) => { + const thisName = component.descriptor.split(":")[1]; + return BASE_PATHS[component.type] + thisName + "/" + thisName + ".js"; +}; + -const makeFallbackBody = (j4xId) => `
`; // Handle the GET request exports.get = function(req) { libs.util.log({request:req}, null, 2); // Source: https://github.com/enonic/lib-util/blob/master/src/main/resources/site/lib/enonic/util/index.js + + // Will be compiled to .js, not .jsx, so resolve that: + //log.info("\n\nreactComp: " + JSON.stringify(reactComp, null, 2)); + //log.info("view2: " + JSON.stringify(view2, null, 2)); + // Get the content that is using the page - var content = libs.portal.getContent(); + const content = libs.portal.getContent(); + const component = libs.portal.getComponent(); + const config = component.config; + + log.info("\n\ncontent: " + JSON.stringify(content, null, 2)); + log.info("\n\ncomponent: " + JSON.stringify(component, null, 2)); + //var site = libs.portal.getSite(); //var config = libs.portal.getSiteConfig(); //log.info(JSON.stringify({site:site}, null, 2)); - let j4xId = ""; + let react4xpId = ""; // Prepare the model that will be passed to the view let model = {}; - const props = {}; + const props = {}; + + let componentName = null; // ******************************************************************** Lib do this: // Uniquely postfix the ID of the react component. // This identifies the target placeholder element as well as inserted props and values. - j4xId = ((j4xId || "") + "").replace(/\s+/g, ""); - if (j4xId === "") { - j4xId = "j4x"; + react4xpId = ((react4xpId || "") + "").replace(/\s+/g, ""); + if (react4xpId === "") { + react4xpId = "r4x"; } - j4xId += "_" + Math.floor(Math.random() * 99999999); // TODO: Better make this determined by component path? + react4xpId += "_" + Math.floor(Math.random() * 99999999); // TODO: Better make this determined by component path? // Insert the target element ID into the model model = model || {}; - model.j4xId = j4xId; + model.react4xpId = react4xpId; // If a view is supplied, render the dynamic HTML with values from the model let body = undefined; @@ -50,17 +77,31 @@ exports.get = function(req) { const pageContributions = {}; + componentName = "/assets/react4xp/site/" + ( + ((componentName || "") + "").trim() || + getComponentName(component) + ); + + log.info("\nthisName: " + JSON.stringify(componentName, null, 2)); + if (!libs.io.getResource(resolve(componentName)).exists()) { + throw Error("Component resource not found: " + componentName); + } + + const serviceUrl = libs.portal.serviceUrl({service: 'react4xp'}); + log.info("serviceUrl: " + JSON.stringify(serviceUrl, null, 2)); + + // If the body is empty: Generate fallback body with only a target placeholder element. if (((body || '') + "").replace(/(^\s+)|(\s+$)/g, "") === "") { - body = makeFallbackBody(j4xId); - log.info("Fallback body: " + body); + body = makeFallbackBody(react4xpId); + //log.info("Fallback body: " + body); // If the body is missing a target placeholder element: Make one and insert it right before the closing tag. } else { - const j4xPattern = new RegExp("<[^>]+\\s+id\\s*=\\s*[\"']" + j4xId + "[\"']", 'i'); - log.info(JSON.stringify({j4xId, j4xPattern}, null, 2)); + const react4xpPattern = new RegExp("<[^>]+\\s+id\\s*=\\s*[\"']" + react4xpId + "[\"']", 'i'); + log.info(JSON.stringify({react4xpId, react4xpPattern}, null, 2)); - if (!body.match(j4xPattern)) { + if (!body.match(react4xpPattern)) { const elemPatt = /^<\s*(\w+)[\s>]/g; const outerElement = elemPatt.exec(body); if (!outerElement[1]) { @@ -72,13 +113,20 @@ exports.get = function(req) { log.info(JSON.stringify({body, endPos}, null, 2)); - body = body.slice(0, endPos) + makeFallbackBody(j4xId) + body.slice(endPos); + body = body.slice(0, endPos) + makeFallbackBody(react4xpId) + body.slice(endPos); log.info(JSON.stringify({body}, null, 2)); } } + + // Return the response object - return { body } + return { + body, + pageContributions: { + //bodyEnd: ``; + }); +}); +log.info("PAGE_CONTRIBUTIONS: " + JSON.stringify(PAGE_CONTRIBUTIONS, null, 2)); // Handle the GET request @@ -39,8 +56,8 @@ exports.get = function(req) { const component = libs.portal.getComponent(); const config = component.config; - log.info("\n\ncontent: " + JSON.stringify(content, null, 2)); - log.info("\n\ncomponent: " + JSON.stringify(component, null, 2)); + //log.info("\n\ncontent: " + JSON.stringify(content, null, 2)); + //log.info("\n\ncomponent: " + JSON.stringify(component, null, 2)); //var site = libs.portal.getSite(); //var config = libs.portal.getSiteConfig(); @@ -52,7 +69,9 @@ exports.get = function(req) { // Prepare the model that will be passed to the view let model = {}; - const props = {}; + const props = { + insertedMessage: "fra controlleren!" + }; let componentName = null; @@ -76,15 +95,33 @@ exports.get = function(req) { body = libs.thymeleaf.render(view, model); } - const pageContributions = {}; - + + const pageContributions = {...PAGE_CONTRIBUTIONS}; componentName = REACT4XP_SERVICE + "site/" + ( ((componentName || "") + "").trim() || getComponentName(component) ); - - pageContributions.bodyEnd = ``; + log.info("pageContributions: " + JSON.stringify(pageContributions, null, 2)); + + // HACKY BUT WORKS! + // Wait for the Library React4xp to exist in the global namespace (that is the library name for the transpiled reactive-part.jsx), then trigger the exported default function from reactive-part.jsx. + // TODO: Don't know whence comes '.name' or if that will be overwritten in the case of multiple top-level components. And it should trigger on an event instead. + pageContributions.bodyEnd += ``; // If the body is empty: Generate fallback body with only a target placeholder element. if (((body || '') + "").replace(/(^\s+)|(\s+$)/g, "") === "") { diff --git a/src/main/resources/site/parts/reactive-part/reactive-part.jsx b/src/main/resources/site/parts/reactive-part/reactive-part.jsx index f588f9fd..1df15a44 100644 --- a/src/main/resources/site/parts/reactive-part/reactive-part.jsx +++ b/src/main/resources/site/parts/reactive-part/reactive-part.jsx @@ -1,7 +1,9 @@ import React from 'react'; import ReactDOM from 'react-dom'; -console.log("Okay then."); -const Test = (props) =>

Dette er en test

; +const Test = (props) =>

Dette er en test {props.insertedMessage}

; -ReactDOM.render(Test(), document.getElementById('wow')); \ No newline at end of file +// TODO: Make this wrapping generalized, from the lib or from the gradle build, pre-transpiled! +export default (targetId, props) => { ReactDOM.render( + Test(props) +, document.getElementById(targetId)); } \ No newline at end of file diff --git a/webpack.config.react4xp.js b/webpack.config.react4xp.js index d1f151dd..de505a02 100644 --- a/webpack.config.react4xp.js +++ b/webpack.config.react4xp.js @@ -65,15 +65,22 @@ module.exports = { new HtmlWebpackPlugin({ inject: false, hash: false, - template: path.join(SRC_R4X, 'index.ejs'), + template: path.join(SRC_R4X, 'index.html.ejs'), filename: path.join(BUILD, 'index.html') // <-- TODO: Must be moved to assets after webpack, and have its urls postprocessed, since the paths inside use both {{assetUrl}} and module.exports.output.path as base url. }), new HtmlWebpackPlugin({ inject: false, hash: false, - template: path.join(SRC_R4X, 'commonChunks.ejs'), - filename: path.join(BUILD, 'commonChunks.xml') // <-- TODO: Must be moved to assets after webpack, and have its urls postprocessed, since the paths inside use both {{assetUrl}} and module.exports.output.path as base url. + template: path.join(SRC_R4X, 'commonChunks.xml.ejs'), + filename: path.join(BUILD, 'commonChunks.xml') + }), + + new HtmlWebpackPlugin({ + inject: false, + hash: false, + template: path.join(SRC_R4X, 'commonChunks.json.ejs'), + filename: path.join(BUILD, 'commonChunks.json') }), ], From 04547472f33cbf172f130a4728530eb736a57296 Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Sat, 12 Jan 2019 14:46:30 +0100 Subject: [PATCH 29/96] Works. Got rid of .name and /assets/, and moved commonChunks to the react4xp folder. --- src/main/react4xp/commonChunks.json.ejs | 6 ++--- src/main/react4xp/commonChunks.xml.ejs | 6 ++--- src/main/react4xp/index.html.ejs | 8 +++--- .../resources/services/react4xp/react4xp.es6 | 15 ++++++----- .../parts/reactive-part/reactive-part.es6 | 26 ++++++++++--------- webpack.config.react4xp.js | 20 +++++++------- 6 files changed, 43 insertions(+), 38 deletions(-) diff --git a/src/main/react4xp/commonChunks.json.ejs b/src/main/react4xp/commonChunks.json.ejs index 5d45b7cc..51757961 100644 --- a/src/main/react4xp/commonChunks.json.ejs +++ b/src/main/react4xp/commonChunks.json.ejs @@ -1,11 +1,11 @@ { "commonChunks": { "headEnd": [ - {"name": "assets/react4xp/vendors", "entry": "<%= htmlWebpackPlugin.files.chunks['assets/react4xp/vendors'].entry %>" }, - {"name": "assets/react4xp/common", "entry": "<%= htmlWebpackPlugin.files.chunks['assets/react4xp/common'].entry %>"} + {"name": "react4xp/vendors", "entry": "<%= htmlWebpackPlugin.files.chunks['react4xp/vendors'].entry %>" }, + {"name": "react4xp/common", "entry": "<%= htmlWebpackPlugin.files.chunks['react4xp/common'].entry %>"} ], "bodyEnd": [ - {"defer": "true", "name": "assets/react4xp/components", "entry": "<%= htmlWebpackPlugin.files.chunks['assets/react4xp/components'].entry %>"} + {"defer": "true", "name": "react4xp/components", "entry": "<%= htmlWebpackPlugin.files.chunks['react4xp/components'].entry %>"} ] } } diff --git a/src/main/react4xp/commonChunks.xml.ejs b/src/main/react4xp/commonChunks.xml.ejs index 62d7edc8..92114e21 100644 --- a/src/main/react4xp/commonChunks.xml.ejs +++ b/src/main/react4xp/commonChunks.xml.ejs @@ -1,11 +1,11 @@ - - + + - + diff --git a/src/main/react4xp/index.html.ejs b/src/main/react4xp/index.html.ejs index 23b2cac9..ef06d7e0 100644 --- a/src/main/react4xp/index.html.ejs +++ b/src/main/react4xp/index.html.ejs @@ -4,13 +4,13 @@ Enonic React Seed - - + +
- - + + diff --git a/src/main/resources/services/react4xp/react4xp.es6 b/src/main/resources/services/react4xp/react4xp.es6 index f4b9d2e9..8d2c9622 100644 --- a/src/main/resources/services/react4xp/react4xp.es6 +++ b/src/main/resources/services/react4xp/react4xp.es6 @@ -2,8 +2,11 @@ var ioLib = require('/lib/xp/io'); var utilLib = require('/lib/enonic/util'); var cacheLib = require('/lib/cache'); -const ROOTNAME = "/_/service/" + app.name + "/react4xp/"; -const REACT4XP_ASSETS = "/assets/react4xp/"; +// TODO: centralize this even more? +const R4X = 'react4xp'; + +const SERVICE_ROOT = `/_/service/${app.name}/${R4X}/`; +const REACT4XP_ROOT = `/${R4X}/`; // TODO: For content-hashed chunks, Cache-Control should be "private, max-age=31536000". For others, 3 hours? Use commonChunks to separate! @@ -30,8 +33,8 @@ const getReact4XP = (resource) => { // Handle all GET requests exports.get = function (req) { - if ((req.path || "").startsWith(ROOTNAME)) { - const target = (req.path.substring(ROOTNAME.length) || "").trim(); + if ((req.path || "").startsWith(SERVICE_ROOT)) { + const target = (req.path.substring(SERVICE_ROOT.length) || "").trim(); if (!target) { return { status: 400, @@ -40,9 +43,9 @@ exports.get = function (req) { //log.info("React4xp target: " + JSON.stringify(target, null, 2)); - const resource = ioLib.getResource(REACT4XP_ASSETS + target); + const resource = ioLib.getResource(REACT4XP_ROOT + target); if (!resource || !resource.exists()) { - log.warning(`File not found: ${REACT4XP_ASSETS + target}`); + log.warning(`File not found: ${REACT4XP_ROOT + target}`); return { status: 404, } diff --git a/src/main/resources/site/parts/reactive-part/reactive-part.es6 b/src/main/resources/site/parts/reactive-part/reactive-part.es6 index ffbc657d..f0419729 100644 --- a/src/main/resources/site/parts/reactive-part/reactive-part.es6 +++ b/src/main/resources/site/parts/reactive-part/reactive-part.es6 @@ -10,22 +10,24 @@ var view = ""; // resolve('reactive-part.html'); const makeFallbackBody = (react4xpId) => `
`; +// TODO: centralize this even more? +const R4X = 'react4xp'; -const REACT4XP_SERVICE = `/_/service/${app.name}/react4xp/`; +const SERVICES_ROOT = `/_/service/${app.name}/`; const BASE_PATHS = { part: "parts/", page: "pages/", }; // Get the corresponding file name const getComponentName = (component) => { - const thisName = component.descriptor.split(":")[1]; - return BASE_PATHS[component.type] + thisName + "/" + thisName + ".js"; + const compName = component.descriptor.split(":")[1]; + return BASE_PATHS[component.type] + compName + "/" + compName; }; const COMMON_CHUNKS = JSON.parse( libs.util.data.forceArray( libs.io.readLines( - libs.io.getResource('/commonChunks.json').getStream() + libs.io.getResource(`/${R4X}/commonChunks.json`).getStream() ) ).join("")).commonChunks; log.info("COMMON_CHUNKS: " + JSON.stringify(COMMON_CHUNKS, null, 2)); @@ -33,10 +35,10 @@ log.info("COMMON_CHUNKS: " + JSON.stringify(COMMON_CHUNKS, null, 2)); const PAGE_CONTRIBUTIONS = {}; Object.keys(COMMON_CHUNKS).forEach(section => { COMMON_CHUNKS[section].forEach(chunk => { - if ((chunk.entry || "").startsWith('assets/react4xp/')) { - chunk.entry = chunk.entry.substring('assets/react4xp/'.length); + if ((chunk.entry || "").startsWith(R4X + '/')) { + chunk.entry = chunk.entry.substring(R4X.length + 1); } - PAGE_CONTRIBUTIONS[section] = `${(PAGE_CONTRIBUTIONS[section] || '')}`; + PAGE_CONTRIBUTIONS[section] = `${(PAGE_CONTRIBUTIONS[section] || '')}\n`; }); }); log.info("PAGE_CONTRIBUTIONS: " + JSON.stringify(PAGE_CONTRIBUTIONS, null, 2)); @@ -97,22 +99,22 @@ exports.get = function(req) { const pageContributions = {...PAGE_CONTRIBUTIONS}; - componentName = REACT4XP_SERVICE + "site/" + ( + componentName = R4X + "/site/" + ( ((componentName || "") + "").trim() || getComponentName(component) ); - pageContributions.bodyEnd = `${pageContributions.bodyEnd || ""}`; + pageContributions.bodyEnd = `${pageContributions.bodyEnd || ""}\n`; log.info("pageContributions: " + JSON.stringify(pageContributions, null, 2)); // HACKY BUT WORKS! // Wait for the Library React4xp to exist in the global namespace (that is the library name for the transpiled reactive-part.jsx), then trigger the exported default function from reactive-part.jsx. - // TODO: Don't know whence comes '.name' or if that will be overwritten in the case of multiple top-level components. And it should trigger on an event instead. + // TODO: It should trigger in a better and safer way instead. Event? pageContributions.bodyEnd += `\n`; - log.info("pageContributions: " + JSON.stringify(pageContributions, null, 2)); - - // HACKY BUT WORKS! - // Wait for the Library React4xp to exist in the global namespace (that is the library name for the transpiled reactive-part.jsx), then trigger the exported default function from reactive-part.jsx. - // TODO: It should trigger in a better and safer way instead. Event? - pageContributions.bodyEnd += ``; + + // Adds tje reactive-part.jsx script, assumes it auto-triggers and reads its own required data from the data-react4xp attributes. + // If not, the exported default from that script can be reached like this: + pageContributions.bodyEnd = `${pageContributions.bodyEnd || ""}\n`; + // If the body is empty: Generate fallback body with only a target placeholder element. if (((body || '') + "").replace(/(^\s+)|(\s+$)/g, "") === "") { diff --git a/src/main/resources/site/parts/reactive-part/reactive-part.jsx b/src/main/resources/site/parts/reactive-part/reactive-part.jsx index 1df15a44..ee273f28 100644 --- a/src/main/resources/site/parts/reactive-part/reactive-part.jsx +++ b/src/main/resources/site/parts/reactive-part/reactive-part.jsx @@ -3,7 +3,12 @@ import ReactDOM from 'react-dom'; const Test = (props) =>

Dette er en test {props.insertedMessage}

; -// TODO: Make this wrapping generalized, from the lib or from the gradle build, pre-transpiled! -export default (targetId, props) => { ReactDOM.render( - Test(props) -, document.getElementById(targetId)); } \ No newline at end of file +// TODO: make this wrapper into an importable util, or auto-add the wrapping during build? From the lib or from the gradle build, pre-transpiled! +const currentScript = document.currentScript || (function() { + var scripts = document.getElementsByTagName('script'); + return scripts[scripts.length - 1]; + })(); +const targetId = currentScript.getAttribute("data-react4xp-targetId"); +const props = JSON.parse(currentScript.getAttribute("data-react4xp-props") || "null") || {}; + +ReactDOM.render(Test(props), document.getElementById(targetId)); From 48b1284932d6ddaccc45f2141bd6a3d4162d08cf Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Sun, 13 Jan 2019 16:20:55 +0100 Subject: [PATCH 31/96] Works. Separated out React4xp lib, with telescope-ably configurable class and a static render() for simplicity. --- .../resources/lib/enonic/react4xp/index.es6 | 221 ++++++++++++++++++ .../parts/reactive-part/reactive-part.es6 | 163 +------------ webpack.config.react4xp.js | 3 +- 3 files changed, 234 insertions(+), 153 deletions(-) create mode 100644 src/main/resources/lib/enonic/react4xp/index.es6 diff --git a/src/main/resources/lib/enonic/react4xp/index.es6 b/src/main/resources/lib/enonic/react4xp/index.es6 new file mode 100644 index 00000000..807e6af5 --- /dev/null +++ b/src/main/resources/lib/enonic/react4xp/index.es6 @@ -0,0 +1,221 @@ +const ioLib = require('/lib/xp/io'); +const portal = require('/lib/xp/portal'); // Import the portal functions +const thymeleaf = require('/lib/xp/thymeleaf'); // Import the Thymeleaf rendering function +const utilLib = require('/lib/enonic/util'); + + +// TODO: centralize this even more? +const R4X = 'react4xp'; + +const SERVICES_ROOT = `/_/service/${app.name}/`; +const BASE_PATHS = { + part: "parts", + page: "pages", +}; + +const COMMON_CHUNKS = JSON.parse( + utilLib.data.forceArray( + ioLib.readLines( + ioLib.getResource(`/${R4X}/commonChunks.json`).getStream() + ) + ).join("")).commonChunks; +//log.info("COMMON_CHUNKS: " + JSON.stringify(COMMON_CHUNKS, null, 2)); + +const PAGE_CONTRIBUTIONS = {}; +Object.keys(COMMON_CHUNKS).forEach(section => { + COMMON_CHUNKS[section].forEach(chunk => { + if ((chunk.entry || "").startsWith(R4X + '/')) { + chunk.entry = chunk.entry.substring(R4X.length + 1); + } + PAGE_CONTRIBUTIONS[section] = `${(PAGE_CONTRIBUTIONS[section] || '')}\n`; + }); +}); +//log.info("PAGE_CONTRIBUTIONS: " + JSON.stringify(PAGE_CONTRIBUTIONS, null, 2)); + + + +const bodyHasContainer = (body, react4xpId) => { + const react4xpPattern = new RegExp("<[^>]+\\s+id\\s*=\\s*[\"']" + react4xpId + "[\"']", 'i'); + //log.info(JSON.stringify({react4xpId: react4xpId, react4xpPattern}, null, 2)); + + return !!body.match(react4xpPattern); +}; + + + +const getContainer = (react4xpId) => `
`; + + +const mergePageContributions = (pageContributions) => (!pageContributions) ? + {...PAGE_CONTRIBUTIONS} : + { + headBegin: [ ...utilLib.data.forceArray(PAGE_CONTRIBUTIONS.headBegin), ...utilLib.data.forceArray(pageContributions.headBegin) ], + headEnd: [ ...utilLib.data.forceArray(PAGE_CONTRIBUTIONS.headEnd), ...utilLib.data.forceArray(pageContributions.headEnd) ], + bodyBegin: [ ...utilLib.data.forceArray(PAGE_CONTRIBUTIONS.bodyBegin), ...utilLib.data.forceArray(pageContributions.bodyBegin) ], + bodyEnd: [ ...utilLib.data.forceArray(PAGE_CONTRIBUTIONS.bodyEnd), ...utilLib.data.forceArray(pageContributions.bodyEnd) ], + }; + + +class React4xp { + constructor(params) { + const {jsxPath, react4xpId, props} = params || {}; + this.react4xpId = react4xpId; + this.jsxPath = jsxPath; + this.props = undefined + this.setProps(props); + } + + + + /////////////////////////////////////////////////// + + uniqueId() { + this.react4xpId = (this.react4xpId || "") + "_" + Math.floor(Math.random() * 99999999); // TODO: Better make this determined by component path?"; + return this; + } + + setReact4xpId(react4xpId) { + this.react4xpId = react4xpId; + return this; + } + + setReact4xpIdPrefix(prefix) { + this.setReact4xpId(prefix); + this.uniqueId(); + return this; + } + + + + ////////////////////////////////////////////////// + setJsxComponentPath(jsxPath) { + this.jsxPath = jsxPath; + return this; + } + + useXpComponent(component, jsxFileName, skipId, uniqueId) { + log.info("Use component: " + JSON.stringify(component, null, 2)); + + if (jsxFileName) { + if (jsxFileName.startsWith('./')) { + jsxFileName = jsxFileName.substring(2); + } + } + + const compName = component.descriptor.split(":")[1]; + this.jsxPath = `/site/${BASE_PATHS[component.type]}/${compName}/${jsxFileName || compName}`; + + if (!skipId) { + const react4xpId = `${BASE_PATHS[component.type]}:${compName}:${component.path}` + if (uniqueId) { + this.setReact4xpIdPrefix(react4xpId); + } else { + this.setReact4xpId(react4xpId) + } + } + return this; + } + + + + ////////////////////////////////////////////////// + + setProps(props) { + if (props && typeof props !== 'object') { + throw Error("Props are optional, but must be an object."); + } + this.props = props || {}; + return this; + } + + + + ////////////////////////////////////////////////// + getBody(body) { + if (!this.react4xpId) { + throw Error("ID for the target container element, react4xpId, has not been set. Add it in the constructor or with one of the setters."); + } + + // If no (or empty) body is supplied: generate a minimal body with only a target container element. + if (((body || '') + "").replace(/(^\s+)|(\s+$)/g, "") === "") { + return getContainer(this.react4xpId); + } + + // If there is a body but it's missing a target container element: + // Make a container and insert it right before the closing tag. + if (!bodyHasContainer(body, this.react4xpId)) { + const elemPatt = /^<\s*(\w+)[\s>]/g; + const outerElement = elemPatt.exec(body); + if (!outerElement[1]) { + throw Error("Huh? Deal with this later: body seems to lack a root element/outer container."); + } + const rootElem = outerElement[1]; + const lastTagPattern = new RegExp(rootElem + "(?!.*" + rootElem + ")", "gi"); + const endPos = body.search(lastTagPattern); + + log.info(JSON.stringify({body, endPos}, null, 2)); + + body = body.slice(0, endPos) + getContainer(this.react4xpId) + body.slice(endPos); + log.info(JSON.stringify({body}, null, 2)); + } + + return body; + } + + getPageContributions = (pageContributions) => { + if (!this.jsxPath) { + throw Error("Target path for JSX component, jsxPath, has not been set. Add an absolute path or a component in the React4XP constructor or with the setters."); + } + if (!this.react4xpId) { + throw Error("ID for the target container element, react4xpId, has not been set. Add it in the constructor or with one of the setters."); + } + + const adjustedPgContributions = mergePageContributions(pageContributions); + adjustedPgContributions.bodyEnd = utilLib.data.forceArray(adjustedPgContributions.bodyEnd); + + // Adds the component.jsx script. Assumes that it auto-triggers and reads its own required data from the data-react4xp attributes -targetId and -props. + // If not, the exported default from that script can be reached like this: + adjustedPgContributions.bodyEnd.push(` + `); + + return adjustedPgContributions; + }; + + + + ///////////////////////////////////////////////// + + static render = (params) => { + const {jsxPath, component, jsxFileName, props, react4xpId, body, pageContributions, uniqueId} = params || {}; + const react4xp = new React4xp({jsxPath, react4xpId, props}); + + if (react4xpId) { + react4xp.setReact4xpId(react4xpId); + if (uniqueId) { + react4xp.uniqueId(); + } + } else { + react4xp.setReact4xpIdPrefix("react4xp"); + } + + if (!jsxPath) { + react4xp.useXpComponent(component, jsxFileName, !!react4xpId, uniqueId); + + if (!react4xpId && uniqueId) { + react4xp.uniqueId(); + } + } + + return { + body: react4xp.getBody(body), + pageContributions: react4xp.getPageContributions(pageContributions) + } + } +} + +module.exports = React4xp; diff --git a/src/main/resources/site/parts/reactive-part/reactive-part.es6 b/src/main/resources/site/parts/reactive-part/reactive-part.es6 index c5c3d65f..4dcab894 100644 --- a/src/main/resources/site/parts/reactive-part/reactive-part.es6 +++ b/src/main/resources/site/parts/reactive-part/reactive-part.es6 @@ -1,152 +1,28 @@ -const libs = { - io: require('/lib/xp/io'), - portal: require('/lib/xp/portal'), // Import the portal functions - thymeleaf: require('/lib/xp/thymeleaf'), // Import the Thymeleaf rendering function - util: require('/lib/enonic/util') -}; +const portal = require('/lib/xp/portal'); +const thymeleaf = require('/lib/xp/thymeleaf'); +const React4xp = require('/lib/enonic/react4xp'); // Specify the view file to use -var view = ""; // resolve('reactive-part.html'); - -const makeFallbackBody = (react4xpId) => `
`; - -// TODO: centralize this even more? -const R4X = 'react4xp'; - -const SERVICES_ROOT = `/_/service/${app.name}/`; -const BASE_PATHS = { - part: "parts/", - page: "pages/", -}; -// Get the corresponding file name -const getComponentName = (component) => { - const compName = component.descriptor.split(":")[1]; - return BASE_PATHS[component.type] + compName + "/" + compName; -}; +// var view = ""; // resolve('reactive-part.html'); -const COMMON_CHUNKS = JSON.parse( - libs.util.data.forceArray( - libs.io.readLines( - libs.io.getResource(`/${R4X}/commonChunks.json`).getStream() - ) - ).join("")).commonChunks; -log.info("COMMON_CHUNKS: " + JSON.stringify(COMMON_CHUNKS, null, 2)); - -const PAGE_CONTRIBUTIONS = {}; -Object.keys(COMMON_CHUNKS).forEach(section => { - COMMON_CHUNKS[section].forEach(chunk => { - if ((chunk.entry || "").startsWith(R4X + '/')) { - chunk.entry = chunk.entry.substring(R4X.length + 1); - } - PAGE_CONTRIBUTIONS[section] = `${(PAGE_CONTRIBUTIONS[section] || '')}\n`; - }); -}); -log.info("PAGE_CONTRIBUTIONS: " + JSON.stringify(PAGE_CONTRIBUTIONS, null, 2)); +// Get the content that is using the page +//const content = portal.getContent(); +//const config = component.config; // Handle the GET request exports.get = function(req) { - libs.util.log({request:req}, null, 2); // Source: https://github.com/enonic/lib-util/blob/master/src/main/resources/site/lib/enonic/util/index.js - - - // Will be compiled to .js, not .jsx, so resolve that: - //log.info("\n\nreactComp: " + JSON.stringify(reactComp, null, 2)); - //log.info("view2: " + JSON.stringify(view2, null, 2)); - - // Get the content that is using the page - const content = libs.portal.getContent(); - const component = libs.portal.getComponent(); - const config = component.config; - - //log.info("\n\ncontent: " + JSON.stringify(content, null, 2)); - //log.info("\n\ncomponent: " + JSON.stringify(component, null, 2)); - - //var site = libs.portal.getSite(); - //var config = libs.portal.getSiteConfig(); - - //log.info(JSON.stringify({site:site}, null, 2)); - - let react4xpId = ""; - - // Prepare the model that will be passed to the view - let model = {}; + log.info("reactive-part request: " + JSON.stringify(req, null, 2)); + const component = portal.getComponent(); + const props = { insertedMessage: "fra controlleren!" }; - let componentName = null; + return React4xp.render({ component, props }); - // ******************************************************************** Lib do this: - // Uniquely postfix the ID of the react component. - // This identifies the target placeholder element as well as inserted props and values. - react4xpId = ((react4xpId || "") + "").replace(/\s+/g, ""); - if (react4xpId === "") { - react4xpId = "r4x"; - } - react4xpId += "_" + Math.floor(Math.random() * 99999999); // TODO: Better make this determined by component path? - - // Insert the target element ID into the model - model = model || {}; - model.react4xpId = react4xpId; - - // If a view is supplied, render the dynamic HTML with values from the model - let body = undefined; - if (view) { - body = libs.thymeleaf.render(view, model); - } - - - const pageContributions = {...PAGE_CONTRIBUTIONS}; - componentName = R4X + "/site/" + ( - ((componentName || "") + "").trim() || - getComponentName(component) - ); - - // Adds tje reactive-part.jsx script, assumes it auto-triggers and reads its own required data from the data-react4xp attributes. - // If not, the exported default from that script can be reached like this: - pageContributions.bodyEnd = `${pageContributions.bodyEnd || ""}\n`; - - - // If the body is empty: Generate fallback body with only a target placeholder element. - if (((body || '') + "").replace(/(^\s+)|(\s+$)/g, "") === "") { - body = makeFallbackBody(react4xpId); - //log.info("Fallback body: " + body); - - // If the body is missing a target placeholder element: Make one and insert it right before the closing tag. - } else { - const react4xpPattern = new RegExp("<[^>]+\\s+id\\s*=\\s*[\"']" + react4xpId + "[\"']", 'i'); - log.info(JSON.stringify({react4xpId, react4xpPattern}, null, 2)); - - if (!body.match(react4xpPattern)) { - const elemPatt = /^<\s*(\w+)[\s>]/g; - const outerElement = elemPatt.exec(body); - if (!outerElement[1]) { - throw Error("Huh? Deal with this later: body seems to lack a root element/outer container."); - } - const rootElem = outerElement[1]; - const lastTagPattern = new RegExp(rootElem + "(?!.*" + rootElem + ")", "gi"); - const endPos = body.search(lastTagPattern); - - log.info(JSON.stringify({body, endPos}, null, 2)); - - body = body.slice(0, endPos) + makeFallbackBody(react4xpId) + body.slice(endPos); - log.info(JSON.stringify({body}, null, 2)); - } - } - - - - // Return the response object - return { - body, - pageContributions - } /** * PLAN: @@ -166,23 +42,6 @@ exports.get = function(req) { * Page contributions: * Hvis ikke innenfor content studio: * ', + bodyEnd: '', + }; + + + + const firstReact = new React4xp() + .useXpComponent(component, 'first') + .uniqueId() + .setProps({ + insertedMessage: "fra \"første props\"!" + }); + body = firstReact.getBody(body); + pageContributions = firstReact.getPageContributions(pageContributions); + + const props2 = { + insertedMessage: "fra \"andre props\"!" }; + const secondReact = new React4xp({ + props: props2, + react4xpId: 'secondReact4xp' + }).useXpComponent(component, 'second', true); + body = secondReact.getBody(body); + pageContributions = secondReact.getPageContributions(pageContributions); + - return React4xp.render({ - component, - jsxFileName: 'another.js', - props - }); + const thirdReact = new React4xp({ + jsxPath: 'app', + react4xpId: 'thirdReact4xp' + }).uniqueId(); + body = thirdReact.getBody(body); + pageContributions = thirdReact.getPageContributions(pageContributions); + return { body, pageContributions }; /** diff --git a/src/main/resources/site/parts/complex-reactive/complex-reactive.html b/src/main/resources/site/parts/complex-reactive/complex-reactive.html new file mode 100644 index 00000000..c73e5b1f --- /dev/null +++ b/src/main/resources/site/parts/complex-reactive/complex-reactive.html @@ -0,0 +1,4 @@ + +
+

Dette er det eneste som er i bodyen nå

+
diff --git a/src/main/resources/site/parts/complex-reactive/complex-reactive.xml b/src/main/resources/site/parts/complex-reactive/complex-reactive.xml new file mode 100644 index 00000000..7e68f97f --- /dev/null +++ b/src/main/resources/site/parts/complex-reactive/complex-reactive.xml @@ -0,0 +1,11 @@ + + + Complex Reactive Part + + + + + Flippin' C! + + + diff --git a/src/main/resources/site/parts/complex-reactive/first.jsx b/src/main/resources/site/parts/complex-reactive/first.jsx new file mode 100644 index 00000000..ee04c1e2 --- /dev/null +++ b/src/main/resources/site/parts/complex-reactive/first.jsx @@ -0,0 +1,7 @@ +import React from 'react'; + +import React4xp from '../../../../react4xp'; + +const Test = (props) =>

Dette er FØRSTE test: {props.insertedMessage}

; + +React4xp.render(Test); diff --git a/src/main/resources/site/parts/reactive-part/another.jsx b/src/main/resources/site/parts/complex-reactive/second.jsx similarity index 100% rename from src/main/resources/site/parts/reactive-part/another.jsx rename to src/main/resources/site/parts/complex-reactive/second.jsx diff --git a/src/main/resources/site/parts/simple-reactive/simple-reactive.es6 b/src/main/resources/site/parts/simple-reactive/simple-reactive.es6 new file mode 100644 index 00000000..c452383c --- /dev/null +++ b/src/main/resources/site/parts/simple-reactive/simple-reactive.es6 @@ -0,0 +1,15 @@ +const portal = require('/lib/xp/portal'); +const React4xp = require('/lib/enonic/react4xp'); + +// Handle the GET request +exports.get = function(req) { + const component = portal.getComponent(); + + const props = { + insertedMessage: "fra \"den simple kontrolleren\"!" + }; + + return React4xp.render({ component, props }); +}; + + diff --git a/src/main/resources/site/parts/reactive-part/reactive-part.jsx b/src/main/resources/site/parts/simple-reactive/simple-reactive.jsx similarity index 100% rename from src/main/resources/site/parts/reactive-part/reactive-part.jsx rename to src/main/resources/site/parts/simple-reactive/simple-reactive.jsx diff --git a/src/main/resources/site/parts/reactive-part/reactive-part.xml b/src/main/resources/site/parts/simple-reactive/simple-reactive.xml similarity index 82% rename from src/main/resources/site/parts/reactive-part/reactive-part.xml rename to src/main/resources/site/parts/simple-reactive/simple-reactive.xml index e4edf502..9cacf0ba 100644 --- a/src/main/resources/site/parts/reactive-part/reactive-part.xml +++ b/src/main/resources/site/parts/simple-reactive/simple-reactive.xml @@ -1,6 +1,6 @@ - Reactive Part + Simple Reactive Part From 823387a5232b3bf874b23cf932c76d6523d945fe Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Wed, 16 Jan 2019 16:55:31 +0100 Subject: [PATCH 34/96] Works. Complex part uses three components from different places, built in different ways --- .../enonic/xp/htmlinserter/HtmlInserter.java | 32 ++++++++++++------- src/main/react4xp/index.es6 | 4 ++- .../resources/lib/enonic/react4xp/index.es6 | 12 +++---- 3 files changed, 27 insertions(+), 21 deletions(-) diff --git a/src/main/java/com/enonic/xp/htmlinserter/HtmlInserter.java b/src/main/java/com/enonic/xp/htmlinserter/HtmlInserter.java index c8c49e41..0700f235 100644 --- a/src/main/java/com/enonic/xp/htmlinserter/HtmlInserter.java +++ b/src/main/java/com/enonic/xp/htmlinserter/HtmlInserter.java @@ -11,31 +11,39 @@ public class HtmlInserter { - private SAXBuilder saxBuilder = new SAXBuilder(); + private static SAXBuilder saxBuilder = new SAXBuilder(); + private static XMLOutputter outputter = new XMLOutputter(); + static { + // Make the output HTML-compliant: + outputter.getFormat() + .setOmitDeclaration(true) + .setOmitEncoding(true) + .setExpandEmptyElements(true); + } public String insertAtEndOfRoot(String body, String insert) { - System.out.println("BODY:\n" + body); + //System.out.println("\n\nBODY:\n" + body); + //System.out.println("INSERT:\n" + insert); try { Document bodyDoc = saxBuilder.build(new StringReader(body)); - System.out.println("bodyDoc:\n" + bodyDoc.toString()); + //System.out.println("bodyDoc:\n" + bodyDoc.toString()); Element bodyRoot = bodyDoc.getRootElement(); - System.out.println("bodyRoot:\n" + bodyRoot.toString()); + //System.out.println("bodyRoot:\n" + bodyRoot.toString()); Document insertDoc = saxBuilder.build(new StringReader(insert)); - System.out.println("insertDoc:\n" + insertDoc.toString()); + //System.out.println("insertDoc:\n" + insertDoc.toString()); Element insertRoot = insertDoc.getRootElement(); - System.out.println("insertRoot:\n" + insertRoot.toString()); + //System.out.println("insertRoot:\n" + insertRoot.toString()); insertRoot.detach(); bodyRoot.addContent(insertRoot); - System.out.println("rootText:\n" + bodyDoc); + //System.out.println("bodyRoot:\n" + bodyRoot); - return new XMLOutputter().outputString(bodyDoc); + //System.out.println("Output:\n" + outputter.outputString(bodyDoc) + "\n\n"); + return outputter.outputString(bodyDoc); - } catch (JDOMException e) { - // handle JDOMException - } catch (IOException e) { - // handle IOException + } catch (JDOMException | IOException e) { + System.err.println("\n\nERROR: [ " + e + " ] ... while trying to insert HTML:\n\n" + insert + "\n\n...into body:\n\n" + body + "\n\n"); } return null; diff --git a/src/main/react4xp/index.es6 b/src/main/react4xp/index.es6 index d4772bc5..b46a0be2 100644 --- a/src/main/react4xp/index.es6 +++ b/src/main/react4xp/index.es6 @@ -8,14 +8,16 @@ exports.render = (Component) => { })(); let container = null; + let targetId = null; try { - const targetId = currentScript.getAttribute("data-react4xp-targetId"); + targetId = currentScript.getAttribute("data-react4xp-targetId"); if (!targetId) { console.error("React4xp can't mount into target container: 'data-react4xp-targetId' attribute is missing or empty in surrounding `); From d63b7682c05d1ca9bc2d2a012755a591065ae3f3 Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Wed, 16 Jan 2019 17:31:53 +0100 Subject: [PATCH 35/96] Works better. Pre-existing target elements can now be targeted. --- src/main/react4xp/_entries/app.jsx | 3 +-- src/main/react4xp/components/AComponent.jsx | 4 ++-- src/main/resources/lib/enonic/react4xp/index.es6 | 2 +- .../site/parts/complex-reactive/complex-reactive.es6 | 9 ++++++--- .../site/parts/complex-reactive/complex-reactive.html | 3 ++- src/main/resources/site/parts/complex-reactive/first.jsx | 2 +- .../resources/site/parts/complex-reactive/second.jsx | 2 +- 7 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/main/react4xp/_entries/app.jsx b/src/main/react4xp/_entries/app.jsx index 6957bf9a..f3156410 100644 --- a/src/main/react4xp/_entries/app.jsx +++ b/src/main/react4xp/_entries/app.jsx @@ -1,5 +1,4 @@ import React from 'react'; -import ReactDOM from 'react-dom'; import React4xp from '..'; import Something from '../common/Something'; @@ -7,7 +6,7 @@ import AComponent from '../components/AComponent'; React4xp.render(
-

app.jsx: Heres some stuff.

+

App.jsx: Heres some stuff.

diff --git a/src/main/react4xp/components/AComponent.jsx b/src/main/react4xp/components/AComponent.jsx index 3ec00112..5ef6e36f 100644 --- a/src/main/react4xp/components/AComponent.jsx +++ b/src/main/react4xp/components/AComponent.jsx @@ -4,8 +4,8 @@ import Shared from '../common/Shared'; const AComponent = (props) =>
-

Acomponent.jsx: React stuff is happening.

-

Acomponent.jsx: Stuff is reacting.

+

Acomponent.jsx: React stuff is happening.

+

Stuff is reacting.

{props.children}
; diff --git a/src/main/resources/lib/enonic/react4xp/index.es6 b/src/main/resources/lib/enonic/react4xp/index.es6 index 829a42b2..0e9e1a74 100644 --- a/src/main/resources/lib/enonic/react4xp/index.es6 +++ b/src/main/resources/lib/enonic/react4xp/index.es6 @@ -119,7 +119,7 @@ class React4xp { const compName = component.descriptor.split(":")[1]; this.jsxPath = `site/${BASE_PATHS[component.type]}/${compName}/${jsxFileName || compName}`; - if (!skipId) { + if (!skipId && !this.react4xpId) { const react4xpId = `${BASE_PATHS[component.type]}_${compName}_${component.path}`.replace(/\//g, "_") if (uniqueId) { this.setReact4xpIdPrefix(react4xpId); diff --git a/src/main/resources/site/parts/complex-reactive/complex-reactive.es6 b/src/main/resources/site/parts/complex-reactive/complex-reactive.es6 index 4e0d8054..b3522c1a 100644 --- a/src/main/resources/site/parts/complex-reactive/complex-reactive.es6 +++ b/src/main/resources/site/parts/complex-reactive/complex-reactive.es6 @@ -27,7 +27,7 @@ exports.get = function(req) { }; - + // Demonstrates construction using the telescope builder pattern, using the "first.jsx" component in the part's (XP component) own path and generating a unique target container ID, also using the component const firstReact = new React4xp() .useXpComponent(component, 'first') .uniqueId() @@ -37,21 +37,24 @@ exports.get = function(req) { body = firstReact.getBody(body); pageContributions = firstReact.getPageContributions(pageContributions); + + // Demonstrates targeting an existing target container in the HTML view. useXpComponent.skipId is important for that. Targets the "second.jsx" react component in this (the XP component's own) folder const props2 = { insertedMessage: "fra \"andre props\"!" }; const secondReact = new React4xp({ props: props2, - react4xpId: 'secondReact4xp' + react4xpId: 'existing-react4xp-target' }).useXpComponent(component, 'second', true); body = secondReact.getBody(body); pageContributions = secondReact.getPageContributions(pageContributions); + // Demonstrates setting a chosen ID without uniquifying it, but generating it as it's not found in the HTML const thirdReact = new React4xp({ jsxPath: 'app', react4xpId: 'thirdReact4xp' - }).uniqueId(); + }); body = thirdReact.getBody(body); pageContributions = thirdReact.getPageContributions(pageContributions); diff --git a/src/main/resources/site/parts/complex-reactive/complex-reactive.html b/src/main/resources/site/parts/complex-reactive/complex-reactive.html index c73e5b1f..d23485ef 100644 --- a/src/main/resources/site/parts/complex-reactive/complex-reactive.html +++ b/src/main/resources/site/parts/complex-reactive/complex-reactive.html @@ -1,4 +1,5 @@
-

Dette er det eneste som er i bodyen nå

+ +

Dette er det eneste synlige som er i bodyen nå. Det er etter den eksisterende containeren.

diff --git a/src/main/resources/site/parts/complex-reactive/first.jsx b/src/main/resources/site/parts/complex-reactive/first.jsx index ee04c1e2..f301d153 100644 --- a/src/main/resources/site/parts/complex-reactive/first.jsx +++ b/src/main/resources/site/parts/complex-reactive/first.jsx @@ -2,6 +2,6 @@ import React from 'react'; import React4xp from '../../../../react4xp'; -const Test = (props) =>

Dette er FØRSTE test: {props.insertedMessage}

; +const Test = (props) =>

First.jsx: {props.insertedMessage}

; React4xp.render(Test); diff --git a/src/main/resources/site/parts/complex-reactive/second.jsx b/src/main/resources/site/parts/complex-reactive/second.jsx index aec73726..918d22cc 100644 --- a/src/main/resources/site/parts/complex-reactive/second.jsx +++ b/src/main/resources/site/parts/complex-reactive/second.jsx @@ -2,6 +2,6 @@ import React from 'react'; import React4xp from '../../../../react4xp'; -const Test = (props) =>

Dette er noe HELT annet: {props.insertedMessage}

; +const Test = (props) =>

Second.jsx: {props.insertedMessage}

; React4xp.render(Test); From a273cd572055ef8388e561840ff3ee7baf2301c2 Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Wed, 16 Jan 2019 19:07:55 +0100 Subject: [PATCH 36/96] NOT working: first attempt at server-side rendering. Or rather, first attempt at just bundling react and react-dom-server for use in nashorn. Bundles okay, but can't be called. --- build.gradle | 9 +++++ package.json | 1 + src/main/resources/site/parts/ssr/ssr.es6 | 12 +++++++ src/main/resources/site/parts/ssr/ssr.xml | 11 ++++++ webpack.config.reactBackend.js | 42 +++++++++++++++++++++++ 5 files changed, 75 insertions(+) create mode 100644 src/main/resources/site/parts/ssr/ssr.es6 create mode 100644 src/main/resources/site/parts/ssr/ssr.xml create mode 100644 webpack.config.reactBackend.js diff --git a/build.gradle b/build.gradle index 0d832d50..6daa08a7 100644 --- a/build.gradle +++ b/build.gradle @@ -60,6 +60,14 @@ babelJs.dependsOn += 'npmInstall' babelJs.dependsOn += 'processResources' +task webpackReactBackend(type: NodeTask) { + script = file('node_modules/webpack/bin/webpack.js') + args = ['--config', 'webpack.config.reactBackend.js'] + + inputs.dir 'node_modules/react/' +} + + task webpackReact4xp(type: NodeTask) { script = file('node_modules/webpack/bin/webpack.js') args = ['--config', 'webpack.config.react4xp.js'] @@ -73,3 +81,4 @@ task webpackReact4xp(type: NodeTask) { webpackReact4xp.dependsOn babelJs jar.dependsOn webpackReact4xp +jar.dependsOn += 'webpackReactBackend' diff --git a/package.json b/package.json index dabbdee2..f98a6f21 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,7 @@ "deploy": "gradle deploy", "watch": "gradle deploy -t", "react4xp": "rm -rf build; node_modules/webpack/bin/webpack.js --config webpack.config.react4xp.js", + "reactBackend": "rm -rf build; node_modules/webpack/bin/webpack.js --config webpack.config.reactBackend.js", "babelSite": "babel src/main/resources --out-dir build/resources/main --ignore \"**/*.js\"", "babelSiteWatch": "babel src/main/resources --out-dir build/resources/main --ignore \"**/*.js\" --watch" }, diff --git a/src/main/resources/site/parts/ssr/ssr.es6 b/src/main/resources/site/parts/ssr/ssr.es6 new file mode 100644 index 00000000..4b15c580 --- /dev/null +++ b/src/main/resources/site/parts/ssr/ssr.es6 @@ -0,0 +1,12 @@ +const React = require('/lib/enonic/react4xp/react')(); +const ReactDOMServer = require('/lib/enonic/react4xp/reactDOMServer')(); + +const theComponent = (props) =>

Det funka jo

; + + +exports.get = (req) => { + log.info("React (" + typeof React + "): " + JSON.stringify(React, null, 2)); + return { + body: ReactDOMServer.renderToStaticMarkup() + }; +}; diff --git a/src/main/resources/site/parts/ssr/ssr.xml b/src/main/resources/site/parts/ssr/ssr.xml new file mode 100644 index 00000000..83ddd215 --- /dev/null +++ b/src/main/resources/site/parts/ssr/ssr.xml @@ -0,0 +1,11 @@ + + + Server Side Rendering + + + + + Flippin' A! + + + diff --git a/webpack.config.reactBackend.js b/webpack.config.reactBackend.js new file mode 100644 index 00000000..abf250d1 --- /dev/null +++ b/webpack.config.reactBackend.js @@ -0,0 +1,42 @@ +const path = require('path'); +const NODE_MODULES = path.join(__dirname, 'node_modules'); +const BUILD = path.join(__dirname, 'build', 'resources', 'main', 'lib', 'enonic', 'react4xp'); +const CleanWebpackPlugin = require('clean-webpack-plugin'); + + +module.exports = { + mode: 'development', + + entry: { + 'react': path.join(NODE_MODULES, 'react', 'index.js'), + 'reactDOMServer': path.join(NODE_MODULES, 'react-dom', 'server.js') + }, + + output: { + path: BUILD, // <-- Sets the base url for plugins and other target dirs. Note the use of {{assetUrl}} in index.html (or index.ejs). + filename: "[name].js", + libraryTarget: 'var', + library: ['[name]'] + }, + + resolve: { + extensions: ['.es6', '.js', '.jsx'] + }, + module: { + rules: [ + { + // Babel for building static assets + test: /\.((jsx?)|(es6))$/, + exclude: /[\\/]node_modules[\\/]/, + loader: 'babel-loader', + query: { + compact: false + } + } + ] + }, + + /*plugins: [ + new CleanWebpackPlugin(BUILD), + ]//*/ +}; From 5ec5c0ff5cf5ac1d9d466753e6a2621e64bb2e8f Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Wed, 16 Jan 2019 23:48:26 +0100 Subject: [PATCH 37/96] Checking out nashorn polyfill, console.log and global variable --- package-lock.json | 5 +++ package.json | 1 + .../java/com/enonic/xp/react4xp/React4xp.java | 34 +++++++++++++++++++ .../resources/lib/enonic/react4xp/index.es6 | 13 ++++--- .../complex-reactive/complex-reactive.es6 | 1 - src/main/resources/site/parts/ssr/ssr.es6 | 14 +++++--- 6 files changed, 58 insertions(+), 10 deletions(-) create mode 100644 src/main/java/com/enonic/xp/react4xp/React4xp.java diff --git a/package-lock.json b/package-lock.json index 4050b3f6..1efefdf3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4605,6 +4605,11 @@ "graceful-fs": "^4.1.6" } }, + "jvm-npm": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jvm-npm/-/jvm-npm-0.1.1.tgz", + "integrity": "sha1-V8LimKjFm8a2CAR2rnl8232shxE=" + }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", diff --git a/package.json b/package.json index f98a6f21..7a1b9b90 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "homepage": "https://github.com/enonic/starter-react#readme", "dependencies": { "immutable": "^3.8.2", + "jvm-npm": "^0.1.1", "react": "^16.4.1", "react-dom": "^16.4.1", "react-redux": "^5.0.7", diff --git a/src/main/java/com/enonic/xp/react4xp/React4xp.java b/src/main/java/com/enonic/xp/react4xp/React4xp.java new file mode 100644 index 00000000..891e5b86 --- /dev/null +++ b/src/main/java/com/enonic/xp/react4xp/React4xp.java @@ -0,0 +1,34 @@ +package com.enonic.xp.react4xp; + +import javax.script.ScriptEngine; +import javax.script.ScriptEngineManager; +import javax.script.ScriptException; + +public class React4xp { + public void test() { + System.out.println("Testing nashorn..."); + + ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn"); + + String nashornPolyfill = "" + + "var global = this;\n" + + "var window = this;\n" + + "var process = {env:{}};\n" + + "var console = {};\n" + + "console.debug = print;\n" + + "console.log = print;\n" + + "console.warn = print;\n" + + "console.error = print;"; + + + try { + engine.eval(nashornPolyfill); + engine.eval("k=14;"); + engine.eval("console.log('Howdy world!');"); + engine.eval("console.log(k);"); + + } catch (ScriptException e) { + e.printStackTrace(); + } + } +} diff --git a/src/main/resources/lib/enonic/react4xp/index.es6 b/src/main/resources/lib/enonic/react4xp/index.es6 index 0e9e1a74..39698b8a 100644 --- a/src/main/resources/lib/enonic/react4xp/index.es6 +++ b/src/main/resources/lib/enonic/react4xp/index.es6 @@ -1,8 +1,7 @@ const ioLib = require('/lib/xp/io'); -const portal = require('/lib/xp/portal'); // Import the portal functions -const thymeleaf = require('/lib/xp/thymeleaf'); // Import the Thymeleaf rendering function const utilLib = require('/lib/enonic/util'); -var htmlInserter = __.newBean('com.enonic.xp.htmlinserter.HtmlInserter'); +const htmlInserter = __.newBean('com.enonic.xp.htmlinserter.HtmlInserter'); +const SSRreact4xp = __.newBean('com.enonic.xp.react4xp.React4xp'); // TODO: centralize this even more? @@ -188,7 +187,8 @@ class React4xp { return adjustedPgContributions; }; - + + @@ -215,6 +215,11 @@ class React4xp { pageContributions: react4xp.getPageContributions(pageContributions) } } + + + static testSSR = () => { + SSRreact4xp.test(); + } } module.exports = React4xp; diff --git a/src/main/resources/site/parts/complex-reactive/complex-reactive.es6 b/src/main/resources/site/parts/complex-reactive/complex-reactive.es6 index b3522c1a..5fadd094 100644 --- a/src/main/resources/site/parts/complex-reactive/complex-reactive.es6 +++ b/src/main/resources/site/parts/complex-reactive/complex-reactive.es6 @@ -2,7 +2,6 @@ const portal = require('/lib/xp/portal'); const thymeleaf = require('/lib/xp/thymeleaf'); const React4xp = require('/lib/enonic/react4xp'); -const htmlInserter = __.newBean('com.enonic.xp.htmlinserter.HtmlInserter'); // Specify the view file to use const view = resolve('complex-reactive.html'); diff --git a/src/main/resources/site/parts/ssr/ssr.es6 b/src/main/resources/site/parts/ssr/ssr.es6 index 4b15c580..411cc486 100644 --- a/src/main/resources/site/parts/ssr/ssr.es6 +++ b/src/main/resources/site/parts/ssr/ssr.es6 @@ -1,12 +1,16 @@ -const React = require('/lib/enonic/react4xp/react')(); -const ReactDOMServer = require('/lib/enonic/react4xp/reactDOMServer')(); +//const React = require('/lib/enonic/react4xp/react')(); +//const ReactDOMServer = require('/lib/enonic/react4xp/reactDOMServer')(); -const theComponent = (props) =>

Det funka jo

; +//const theComponent = (props) =>

Det funka jo

; +const React4xp = require('/lib/enonic/react4xp'); exports.get = (req) => { - log.info("React (" + typeof React + "): " + JSON.stringify(React, null, 2)); + + React4xp.testSSR(); + + return { - body: ReactDOMServer.renderToStaticMarkup() + body: "OK" }; }; From 111497fcdcfaac4011742db170d74d49bb041253 Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Thu, 17 Jan 2019 00:17:56 +0100 Subject: [PATCH 38/96] Maybe successfully polyfilled require? --- .../java/com/enonic/xp/react4xp/React4xp.java | 291 ++++++++++++++++++ 1 file changed, 291 insertions(+) diff --git a/src/main/java/com/enonic/xp/react4xp/React4xp.java b/src/main/java/com/enonic/xp/react4xp/React4xp.java index 891e5b86..bbfafa27 100644 --- a/src/main/java/com/enonic/xp/react4xp/React4xp.java +++ b/src/main/java/com/enonic/xp/react4xp/React4xp.java @@ -20,12 +20,303 @@ public void test() { "console.warn = print;\n" + "console.error = print;"; + // https://www.npmjs.com/package/jvm-npm + String require = "/**\n" + + " * Copyright 2014-2016 Red Hat, Inc.\n" + + " *\n" + + " * Licensed under the Apache License, Version 2.0 (the \"License\")\n" + + " * you may not use this file except in compliance with the License.\n" + + " * You may obtain a copy of the License at\n" + + " *\n" + + " * http://www.apache.org/licenses/LICENSE-2.0\n" + + " *\n" + + " * Unless required by applicable law or agreed to in writing, software\n" + + " * distributed under the License is distributed on an \"AS IS\" BASIS,\n" + + " * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n" + + " * See the License for the specific language governing permissions and\n" + + " * limitations under the License.\n" + + " */\n" + + "// Since we intend to use the Function constructor.\n" + + "/* jshint evil: true */\n" + + "\n" + + "module = (typeof module === 'undefined') ? {} : module;\n" + + "\n" + + "(function () {\n" + + " var System = java.lang.System;\n" + + " var Scanner = java.util.Scanner;\n" + + " var File = java.io.File;\n" + + "\n" + + " NativeRequire = (typeof NativeRequire === 'undefined') ? {} : NativeRequire;\n" + + " if (typeof require === 'function' && !NativeRequire.require) {\n" + + " NativeRequire.require = require;\n" + + " }\n" + + "\n" + + " function Module (id, parent, core) {\n" + + " this.id = id;\n" + + " this.core = core;\n" + + " this.parent = parent;\n" + + " this.children = [];\n" + + " this.filename = id;\n" + + " this.loaded = false;\n" + + "\n" + + " Object.defineProperty(this, 'exports', {\n" + + " get: function () {\n" + + " return this._exports;\n" + + " }.bind(this),\n" + + " set: function (val) {\n" + + " Require.cache[this.filename] = val;\n" + + " this._exports = val;\n" + + " }.bind(this)\n" + + " });\n" + + " this.exports = {};\n" + + "\n" + + " if (parent && parent.children) parent.children.push(this);\n" + + "\n" + + " this.require = function (id) {\n" + + " return Require(id, this);\n" + + " }.bind(this);\n" + + " }\n" + + "\n" + + " Module._load = function _load (file, parent, core, main) {\n" + + " var module = new Module(file, parent, core);\n" + + " var body = readFile(module.filename, module.core);\n" + + " var dir = new File(module.filename).getParent();\n" + + " var args = ['exports', 'module', 'require', '__filename', '__dirname'];\n" + + " var func = new Function(args, body);\n" + + " func.apply(module,\n" + + " [module.exports, module, module.require, module.filename, dir]);\n" + + " module.loaded = true;\n" + + " module.main = main;\n" + + " return module.exports;\n" + + " };\n" + + "\n" + + " Module.runMain = function runMain (main) {\n" + + " var file = Require.resolve(main);\n" + + " Module._load(file, undefined, false, true);\n" + + " };\n" + + "\n" + + " function Require (id, parent) {\n" + + " var core;\n" + + " var native_;\n" + + " var file = Require.resolve(id, parent);\n" + + "\n" + + " if (!file) {\n" + + " if (typeof NativeRequire.require === 'function') {\n" + + " if (Require.debug) {\n" + + " System.out.println(['Cannot resolve', id, 'defaulting to native'].join(' '));\n" + + " }\n" + + " native_ = NativeRequire.require(id);\n" + + " if (native_) return native_;\n" + + " }\n" + + " System.err.println('Cannot find module ' + id);\n" + + " throw new ModuleError('Cannot find module ' + id, 'MODULE_NOT_FOUND');\n" + + " }\n" + + "\n" + + " if (file.core) {\n" + + " file = file.path;\n" + + " core = true;\n" + + " }\n" + + " try {\n" + + " if (Require.cache[file]) {\n" + + " return Require.cache[file];\n" + + " } else if (file.endsWith('.js')) {\n" + + " return Module._load(file, parent, core);\n" + + " } else if (file.endsWith('.json')) {\n" + + " return loadJSON(file);\n" + + " }\n" + + " } catch (ex) {\n" + + " if (ex instanceof java.lang.Exception) {\n" + + " throw new ModuleError('Cannot load module ' + id, 'LOAD_ERROR', ex);\n" + + " } else {\n" + + " System.out.println('Cannot load module ' + id + ' LOAD_ERROR');\n" + + " throw ex;\n" + + " }\n" + + " }\n" + + " }\n" + + "\n" + + " Require.resolve = function (id, parent) {\n" + + " var roots = findRoots(parent);\n" + + " for (var i = 0; i < roots.length; ++i) {\n" + + " var root = roots[i];\n" + + " var result = resolveCoreModule(id, root) ||\n" + + " resolveAsFile(id, root, '.js') ||\n" + + " resolveAsFile(id, root, '.json') ||\n" + + " resolveAsDirectory(id, root) ||\n" + + " resolveAsNodeModule(id, root);\n" + + " if (result) {\n" + + " return result;\n" + + " }\n" + + " }\n" + + " return false;\n" + + " };\n" + + "\n" + + " Require.root = System.getProperty('user.dir');\n" + + " Require.NODE_PATH = undefined;\n" + + "\n" + + " function findRoots (parent) {\n" + + " var r = [];\n" + + " r.push(findRoot(parent));\n" + + " return r.concat(Require.paths());\n" + + " }\n" + + "\n" + + " function parsePaths (paths) {\n" + + " if (!paths) {\n" + + " return [];\n" + + " }\n" + + " if (paths === '') {\n" + + " return [];\n" + + " }\n" + + " var osName = java.lang.System.getProperty('os.name').toLowerCase();\n" + + " var separator;\n" + + "\n" + + " if (osName.indexOf('win') >= 0) {\n" + + " separator = ';';\n" + + " } else {\n" + + " separator = ':';\n" + + " }\n" + + "\n" + + " return paths.split(separator);\n" + + " }\n" + + "\n" + + " Require.paths = function () {\n" + + " var r = [];\n" + + " r.push(java.lang.System.getProperty('user.home') + '/.node_modules');\n" + + " r.push(java.lang.System.getProperty('user.home') + '/.node_libraries');\n" + + "\n" + + " if (Require.NODE_PATH) {\n" + + " r = r.concat(parsePaths(Require.NODE_PATH));\n" + + " } else {\n" + + " var NODE_PATH = java.lang.System.getenv().NODE_PATH;\n" + + " if (NODE_PATH) {\n" + + " r = r.concat(parsePaths(NODE_PATH));\n" + + " }\n" + + " }\n" + + " // r.push( $PREFIX + \"/node/library\" )\n" + + " return r;\n" + + " };\n" + + "\n" + + " function findRoot (parent) {\n" + + " if (!parent || !parent.id) { return Require.root; }\n" + + " var pathParts = parent.id.split(/[\\/|\\\\,]+/g);\n" + + " pathParts.pop();\n" + + " return pathParts.join('/');\n" + + " }\n" + + "\n" + + " Require.debug = true;\n" + + " Require.cache = {};\n" + + " Require.extensions = {};\n" + + " require = Require;\n" + + "\n" + + " module.exports = Module;\n" + + "\n" + + " function loadJSON (file) {\n" + + " var json = JSON.parse(readFile(file));\n" + + " Require.cache[file] = json;\n" + + " return json;\n" + + " }\n" + + "\n" + + " function resolveAsNodeModule (id, root) {\n" + + " var base = [root, 'node_modules'].join('/');\n" + + " return resolveAsFile(id, base) ||\n" + + " resolveAsDirectory(id, base) ||\n" + + " (root ? resolveAsNodeModule(id, new File(root).getParent()) : false);\n" + + " }\n" + + "\n" + + " function resolveAsDirectory (id, root) {\n" + + " var base = [root, id].join('/');\n" + + " var file = new File([base, 'package.json'].join('/'));\n" + + " if (file.exists()) {\n" + + " try {\n" + + " var body = readFile(file.getCanonicalPath());\n" + + " var package_ = JSON.parse(body);\n" + + " if (package_.main) {\n" + + " return (resolveAsFile(package_.main, base) ||\n" + + " resolveAsDirectory(package_.main, base));\n" + + " }\n" + + " // if no package.main exists, look for index.js\n" + + " return resolveAsFile('index.js', base);\n" + + " } catch (ex) {\n" + + " throw new ModuleError('Cannot load JSON file', 'PARSE_ERROR', ex);\n" + + " }\n" + + " }\n" + + " return resolveAsFile('index.js', base);\n" + + " }\n" + + "\n" + + " function resolveAsFile (id, root, ext) {\n" + + " var file;\n" + + " if (id.length > 0 && id[0] === '/') {\n" + + " file = new File(normalizeName(id, ext || '.js'));\n" + + " if (!file.exists()) {\n" + + " return resolveAsDirectory(id);\n" + + " }\n" + + " } else {\n" + + " file = new File([root, normalizeName(id, ext || '.js')].join('/'));\n" + + " }\n" + + " if (file.exists()) {\n" + + " return file.getCanonicalPath();\n" + + " }\n" + + " }\n" + + "\n" + + " function resolveCoreModule (id, root) {\n" + + " var name = normalizeName(id);\n" + + " var classloader = java.lang.Thread.currentThread().getContextClassLoader();\n" + + " if (classloader.getResource(name)) {\n" + + " return { path: name, core: true };\n" + + " }\n" + + " }\n" + + "\n" + + " function normalizeName (fileName, ext) {\n" + + " var extension = ext || '.js';\n" + + " if (fileName.endsWith(extension)) {\n" + + " return fileName;\n" + + " }\n" + + " return fileName + extension;\n" + + " }\n" + + "\n" + + " function readFile (filename, core) {\n" + + " var input;\n" + + " try {\n" + + " if (core) {\n" + + " var classloader = java.lang.Thread.currentThread().getContextClassLoader();\n" + + " input = classloader.getResourceAsStream(filename);\n" + + " } else {\n" + + " input = new File(filename);\n" + + " }\n" + + " // TODO: I think this is not very efficient\n" + + " return new Scanner(input).useDelimiter('\\\\A').next();\n" + + " } catch (e) {\n" + + " throw new ModuleError('Cannot read file [' + input + ']: ', 'IO_ERROR', e);\n" + + " }\n" + + " }\n" + + "\n" + + " function ModuleError (message, code, cause) {\n" + + " this.code = code || 'UNDEFINED';\n" + + " this.message = message || 'Error loading module';\n" + + " this.cause = cause;\n" + + " }\n" + + "\n" + + " // Helper function until ECMAScript 6 is complete\n" + + " if (typeof String.prototype.endsWith !== 'function') {\n" + + " String.prototype.endsWith = function (suffix) {\n" + + " if (!suffix) return false;\n" + + " return this.indexOf(suffix, this.length - suffix.length) !== -1;\n" + + " };\n" + + " }\n" + + "\n" + + " ModuleError.prototype = new Error();\n" + + " ModuleError.prototype.constructor = ModuleError;\n" + + "}());\n"; try { engine.eval(nashornPolyfill); + engine.eval(require); + engine.eval("k=14;"); + + engine.eval("console.log('Howdy world!');"); engine.eval("console.log(k);"); + engine.eval("console.log(typeof require);"); } catch (ScriptException e) { e.printStackTrace(); From 7fef4b60ce596011f04fa5dda58067b8abe66e73 Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Sat, 19 Jan 2019 17:14:26 +0100 Subject: [PATCH 39/96] Works in frontend: updated building of fronted chunkAssetBundles from 'var' to 'commonJS' in order to ease backend require in nashorn - aiming for isomorph built components. --- src/main/resources/lib/enonic/react4xp/index.es6 | 8 +++++++- webpack.config.react4xp.js | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/resources/lib/enonic/react4xp/index.es6 b/src/main/resources/lib/enonic/react4xp/index.es6 index 39698b8a..f01abb30 100644 --- a/src/main/resources/lib/enonic/react4xp/index.es6 +++ b/src/main/resources/lib/enonic/react4xp/index.es6 @@ -30,6 +30,12 @@ Object.keys(COMMON_CHUNKS).forEach(section => { PAGE_CONTRIBUTIONS[section] = `${(PAGE_CONTRIBUTIONS[section] || '')}\n`; }); }); + +// Polyfill commonJS for rendered frontend code: +PAGE_CONTRIBUTIONS.headEnd = [ + '\n\n', + ...(utilLib.data.forceArray(PAGE_CONTRIBUTIONS.headEnd) || []) +]; //log.info("PAGE_CONTRIBUTIONS: " + JSON.stringify(PAGE_CONTRIBUTIONS, null, 2)); @@ -106,7 +112,7 @@ class React4xp { } useXpComponent(component, jsxFileName, skipId, uniqueId) { - log.info("Use component: " + JSON.stringify(component, null, 2)); + //log.info("Use component: " + JSON.stringify(component, null, 2)); if (jsxFileName) { if (jsxFileName.startsWith('./')) { diff --git a/webpack.config.react4xp.js b/webpack.config.react4xp.js index 8bd85fde..7deef0e7 100644 --- a/webpack.config.react4xp.js +++ b/webpack.config.react4xp.js @@ -35,7 +35,7 @@ module.exports = { path: path.join(BUILD), // <-- Sets the base url for plugins and other target dirs. Note the use of {{assetUrl}} in index.html (or index.ejs). filename: "[name].js", chunkFilename: "[name].[contenthash:9].js", - libraryTarget: 'var', + libraryTarget: 'commonjs', // 'var' would easier to use in pure-frontend, accessing exports like: React.[name].function() etc... But 'commonjs' makes chunks easier to use from nashorn. library: ['React4xp', '[name]'], }, From bed6564160a2e4fd32a5ac5b4c16533f21b9530f Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Sat, 19 Jan 2019 19:33:47 +0100 Subject: [PATCH 40/96] SSR Wip: Couldn't get nashorn-commonjs-modules to work (include group: 'com.coveo', name: 'nashorn-commonjs-modules', version: '1.0.9'). Instead aiming for separating out vendors on frontend (might already be done), exporting "pure" JSX components and running their (isomorphically) transpiled versions on both backend and front. --- build.gradle | 3 +- .../java/com/enonic/xp/react4xp/React4xp.java | 377 ++++-------------- .../resources/lib/enonic/react4xp/index.es6 | 2 +- .../complex-reactive/complex-reactive.es6 | 1 - 4 files changed, 77 insertions(+), 306 deletions(-) diff --git a/build.gradle b/build.gradle index 6daa08a7..f00b3f0f 100644 --- a/build.gradle +++ b/build.gradle @@ -64,8 +64,9 @@ task webpackReactBackend(type: NodeTask) { script = file('node_modules/webpack/bin/webpack.js') args = ['--config', 'webpack.config.reactBackend.js'] - inputs.dir 'node_modules/react/' + //inputs.dir 'node_modules/react/' } +webpackReactBackend.dependsOn += 'npmInstall' task webpackReact4xp(type: NodeTask) { diff --git a/src/main/java/com/enonic/xp/react4xp/React4xp.java b/src/main/java/com/enonic/xp/react4xp/React4xp.java index bbfafa27..60eae2b1 100644 --- a/src/main/java/com/enonic/xp/react4xp/React4xp.java +++ b/src/main/java/com/enonic/xp/react4xp/React4xp.java @@ -1,325 +1,96 @@ package com.enonic.xp.react4xp; -import javax.script.ScriptEngine; +import jdk.nashorn.api.scripting.NashornScriptEngine; + import javax.script.ScriptEngineManager; import javax.script.ScriptException; +import java.io.BufferedReader; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; public class React4xp { - public void test() { - System.out.println("Testing nashorn..."); + private static String NASHORN_POLYFILL = "" + + "if (typeof exports === 'undefined') { var exports = {}; }\n" + + "if (typeof global === 'undefined') { var global = this; }\n" + + "if (typeof window === 'undefined') { var window = this; }\n" + + "if (typeof process === 'undefined') { var process = {env:{}}; }\n" + + "if (typeof console === 'undefined') { var console = {}; }\n" + + "console.debug = print;\n" + + "console.log = print;\n" + + "console.warn = print;\n" + + "console.error = print;"; - ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn"); - String nashornPolyfill = "" + - "var global = this;\n" + - "var window = this;\n" + - "var process = {env:{}};\n" + - "var console = {};\n" + - "console.debug = print;\n" + - "console.log = print;\n" + - "console.warn = print;\n" + - "console.error = print;"; + /** Read as string the content of a file (resource) inside the built JAR. + * @param path is full "file" name, relative to JAR root. */ + private String readResource(String path) throws IOException { + //System.out.println("Reading resource: " + path); - // https://www.npmjs.com/package/jvm-npm - String require = "/**\n" + - " * Copyright 2014-2016 Red Hat, Inc.\n" + - " *\n" + - " * Licensed under the Apache License, Version 2.0 (the \"License\")\n" + - " * you may not use this file except in compliance with the License.\n" + - " * You may obtain a copy of the License at\n" + - " *\n" + - " * http://www.apache.org/licenses/LICENSE-2.0\n" + - " *\n" + - " * Unless required by applicable law or agreed to in writing, software\n" + - " * distributed under the License is distributed on an \"AS IS\" BASIS,\n" + - " * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n" + - " * See the License for the specific language governing permissions and\n" + - " * limitations under the License.\n" + - " */\n" + - "// Since we intend to use the Function constructor.\n" + - "/* jshint evil: true */\n" + - "\n" + - "module = (typeof module === 'undefined') ? {} : module;\n" + - "\n" + - "(function () {\n" + - " var System = java.lang.System;\n" + - " var Scanner = java.util.Scanner;\n" + - " var File = java.io.File;\n" + - "\n" + - " NativeRequire = (typeof NativeRequire === 'undefined') ? {} : NativeRequire;\n" + - " if (typeof require === 'function' && !NativeRequire.require) {\n" + - " NativeRequire.require = require;\n" + - " }\n" + - "\n" + - " function Module (id, parent, core) {\n" + - " this.id = id;\n" + - " this.core = core;\n" + - " this.parent = parent;\n" + - " this.children = [];\n" + - " this.filename = id;\n" + - " this.loaded = false;\n" + - "\n" + - " Object.defineProperty(this, 'exports', {\n" + - " get: function () {\n" + - " return this._exports;\n" + - " }.bind(this),\n" + - " set: function (val) {\n" + - " Require.cache[this.filename] = val;\n" + - " this._exports = val;\n" + - " }.bind(this)\n" + - " });\n" + - " this.exports = {};\n" + - "\n" + - " if (parent && parent.children) parent.children.push(this);\n" + - "\n" + - " this.require = function (id) {\n" + - " return Require(id, this);\n" + - " }.bind(this);\n" + - " }\n" + - "\n" + - " Module._load = function _load (file, parent, core, main) {\n" + - " var module = new Module(file, parent, core);\n" + - " var body = readFile(module.filename, module.core);\n" + - " var dir = new File(module.filename).getParent();\n" + - " var args = ['exports', 'module', 'require', '__filename', '__dirname'];\n" + - " var func = new Function(args, body);\n" + - " func.apply(module,\n" + - " [module.exports, module, module.require, module.filename, dir]);\n" + - " module.loaded = true;\n" + - " module.main = main;\n" + - " return module.exports;\n" + - " };\n" + - "\n" + - " Module.runMain = function runMain (main) {\n" + - " var file = Require.resolve(main);\n" + - " Module._load(file, undefined, false, true);\n" + - " };\n" + - "\n" + - " function Require (id, parent) {\n" + - " var core;\n" + - " var native_;\n" + - " var file = Require.resolve(id, parent);\n" + - "\n" + - " if (!file) {\n" + - " if (typeof NativeRequire.require === 'function') {\n" + - " if (Require.debug) {\n" + - " System.out.println(['Cannot resolve', id, 'defaulting to native'].join(' '));\n" + - " }\n" + - " native_ = NativeRequire.require(id);\n" + - " if (native_) return native_;\n" + - " }\n" + - " System.err.println('Cannot find module ' + id);\n" + - " throw new ModuleError('Cannot find module ' + id, 'MODULE_NOT_FOUND');\n" + - " }\n" + - "\n" + - " if (file.core) {\n" + - " file = file.path;\n" + - " core = true;\n" + - " }\n" + - " try {\n" + - " if (Require.cache[file]) {\n" + - " return Require.cache[file];\n" + - " } else if (file.endsWith('.js')) {\n" + - " return Module._load(file, parent, core);\n" + - " } else if (file.endsWith('.json')) {\n" + - " return loadJSON(file);\n" + - " }\n" + - " } catch (ex) {\n" + - " if (ex instanceof java.lang.Exception) {\n" + - " throw new ModuleError('Cannot load module ' + id, 'LOAD_ERROR', ex);\n" + - " } else {\n" + - " System.out.println('Cannot load module ' + id + ' LOAD_ERROR');\n" + - " throw ex;\n" + - " }\n" + - " }\n" + - " }\n" + - "\n" + - " Require.resolve = function (id, parent) {\n" + - " var roots = findRoots(parent);\n" + - " for (var i = 0; i < roots.length; ++i) {\n" + - " var root = roots[i];\n" + - " var result = resolveCoreModule(id, root) ||\n" + - " resolveAsFile(id, root, '.js') ||\n" + - " resolveAsFile(id, root, '.json') ||\n" + - " resolveAsDirectory(id, root) ||\n" + - " resolveAsNodeModule(id, root);\n" + - " if (result) {\n" + - " return result;\n" + - " }\n" + - " }\n" + - " return false;\n" + - " };\n" + - "\n" + - " Require.root = System.getProperty('user.dir');\n" + - " Require.NODE_PATH = undefined;\n" + - "\n" + - " function findRoots (parent) {\n" + - " var r = [];\n" + - " r.push(findRoot(parent));\n" + - " return r.concat(Require.paths());\n" + - " }\n" + - "\n" + - " function parsePaths (paths) {\n" + - " if (!paths) {\n" + - " return [];\n" + - " }\n" + - " if (paths === '') {\n" + - " return [];\n" + - " }\n" + - " var osName = java.lang.System.getProperty('os.name').toLowerCase();\n" + - " var separator;\n" + - "\n" + - " if (osName.indexOf('win') >= 0) {\n" + - " separator = ';';\n" + - " } else {\n" + - " separator = ':';\n" + - " }\n" + - "\n" + - " return paths.split(separator);\n" + - " }\n" + - "\n" + - " Require.paths = function () {\n" + - " var r = [];\n" + - " r.push(java.lang.System.getProperty('user.home') + '/.node_modules');\n" + - " r.push(java.lang.System.getProperty('user.home') + '/.node_libraries');\n" + - "\n" + - " if (Require.NODE_PATH) {\n" + - " r = r.concat(parsePaths(Require.NODE_PATH));\n" + - " } else {\n" + - " var NODE_PATH = java.lang.System.getenv().NODE_PATH;\n" + - " if (NODE_PATH) {\n" + - " r = r.concat(parsePaths(NODE_PATH));\n" + - " }\n" + - " }\n" + - " // r.push( $PREFIX + \"/node/library\" )\n" + - " return r;\n" + - " };\n" + - "\n" + - " function findRoot (parent) {\n" + - " if (!parent || !parent.id) { return Require.root; }\n" + - " var pathParts = parent.id.split(/[\\/|\\\\,]+/g);\n" + - " pathParts.pop();\n" + - " return pathParts.join('/');\n" + - " }\n" + - "\n" + - " Require.debug = true;\n" + - " Require.cache = {};\n" + - " Require.extensions = {};\n" + - " require = Require;\n" + - "\n" + - " module.exports = Module;\n" + - "\n" + - " function loadJSON (file) {\n" + - " var json = JSON.parse(readFile(file));\n" + - " Require.cache[file] = json;\n" + - " return json;\n" + - " }\n" + - "\n" + - " function resolveAsNodeModule (id, root) {\n" + - " var base = [root, 'node_modules'].join('/');\n" + - " return resolveAsFile(id, base) ||\n" + - " resolveAsDirectory(id, base) ||\n" + - " (root ? resolveAsNodeModule(id, new File(root).getParent()) : false);\n" + - " }\n" + - "\n" + - " function resolveAsDirectory (id, root) {\n" + - " var base = [root, id].join('/');\n" + - " var file = new File([base, 'package.json'].join('/'));\n" + - " if (file.exists()) {\n" + - " try {\n" + - " var body = readFile(file.getCanonicalPath());\n" + - " var package_ = JSON.parse(body);\n" + - " if (package_.main) {\n" + - " return (resolveAsFile(package_.main, base) ||\n" + - " resolveAsDirectory(package_.main, base));\n" + - " }\n" + - " // if no package.main exists, look for index.js\n" + - " return resolveAsFile('index.js', base);\n" + - " } catch (ex) {\n" + - " throw new ModuleError('Cannot load JSON file', 'PARSE_ERROR', ex);\n" + - " }\n" + - " }\n" + - " return resolveAsFile('index.js', base);\n" + - " }\n" + - "\n" + - " function resolveAsFile (id, root, ext) {\n" + - " var file;\n" + - " if (id.length > 0 && id[0] === '/') {\n" + - " file = new File(normalizeName(id, ext || '.js'));\n" + - " if (!file.exists()) {\n" + - " return resolveAsDirectory(id);\n" + - " }\n" + - " } else {\n" + - " file = new File([root, normalizeName(id, ext || '.js')].join('/'));\n" + - " }\n" + - " if (file.exists()) {\n" + - " return file.getCanonicalPath();\n" + - " }\n" + - " }\n" + - "\n" + - " function resolveCoreModule (id, root) {\n" + - " var name = normalizeName(id);\n" + - " var classloader = java.lang.Thread.currentThread().getContextClassLoader();\n" + - " if (classloader.getResource(name)) {\n" + - " return { path: name, core: true };\n" + - " }\n" + - " }\n" + - "\n" + - " function normalizeName (fileName, ext) {\n" + - " var extension = ext || '.js';\n" + - " if (fileName.endsWith(extension)) {\n" + - " return fileName;\n" + - " }\n" + - " return fileName + extension;\n" + - " }\n" + - "\n" + - " function readFile (filename, core) {\n" + - " var input;\n" + - " try {\n" + - " if (core) {\n" + - " var classloader = java.lang.Thread.currentThread().getContextClassLoader();\n" + - " input = classloader.getResourceAsStream(filename);\n" + - " } else {\n" + - " input = new File(filename);\n" + - " }\n" + - " // TODO: I think this is not very efficient\n" + - " return new Scanner(input).useDelimiter('\\\\A').next();\n" + - " } catch (e) {\n" + - " throw new ModuleError('Cannot read file [' + input + ']: ', 'IO_ERROR', e);\n" + - " }\n" + - " }\n" + - "\n" + - " function ModuleError (message, code, cause) {\n" + - " this.code = code || 'UNDEFINED';\n" + - " this.message = message || 'Error loading module';\n" + - " this.cause = cause;\n" + - " }\n" + - "\n" + - " // Helper function until ECMAScript 6 is complete\n" + - " if (typeof String.prototype.endsWith !== 'function') {\n" + - " String.prototype.endsWith = function (suffix) {\n" + - " if (!suffix) return false;\n" + - " return this.indexOf(suffix, this.length - suffix.length) !== -1;\n" + - " };\n" + - " }\n" + - "\n" + - " ModuleError.prototype = new Error();\n" + - " ModuleError.prototype.constructor = ModuleError;\n" + - "}());\n"; + InputStream in = getClass().getResourceAsStream(path); + if (in == null) { + throw new FileNotFoundException("Not found: " + path); + } + + BufferedReader reader = new BufferedReader(new InputStreamReader(in)); + StringBuilder sb = new StringBuilder(); + String line; try { - engine.eval(nashornPolyfill); - engine.eval(require); + while ((line = reader.readLine()) != null) { + sb.append(line + "\n"); + } + } catch (IOException e) { + e.printStackTrace(); + throw e; - engine.eval("k=14;"); + } finally { + try { + reader.close(); + in.close(); + } catch (IOException e) { + e.printStackTrace(); + throw e; + } + } + + //System.out.println("\tOK"); + return sb.toString(); + } + + + public void test() throws IOException { + System.out.println("Testing nashorn..."); + + String backendReact = readResource("/lib/enonic/react4xp/backendReact.js"); + String backendReactDOMServer = readResource("/lib/enonic/react4xp/backendReactDOMServer.js"); + String finsinte = readResource("/lib/enonic/react4xp/finsinte.js"); + + try { + System.out.println("\n\n\n############################################# Running...\n\n\n:"); + + NashornScriptEngine engine = (NashornScriptEngine)new ScriptEngineManager().getEngineByName("nashorn"); + + + engine.eval(NASHORN_POLYFILL); + engine.eval("k = 42;"); + //engine.eval(content); engine.eval("console.log('Howdy world!');"); engine.eval("console.log(k);"); - engine.eval("console.log(typeof require);"); + + engine.eval("console.log(Object.keys(exports));"); } catch (ScriptException e) { e.printStackTrace(); } } } + +/* +react4xp/vendors.0743d21ce.js +react4xp/common.70ca71244.js +components.a0a62a368.js +*/ diff --git a/src/main/resources/lib/enonic/react4xp/index.es6 b/src/main/resources/lib/enonic/react4xp/index.es6 index f01abb30..706fb7e2 100644 --- a/src/main/resources/lib/enonic/react4xp/index.es6 +++ b/src/main/resources/lib/enonic/react4xp/index.es6 @@ -33,7 +33,7 @@ Object.keys(COMMON_CHUNKS).forEach(section => { // Polyfill commonJS for rendered frontend code: PAGE_CONTRIBUTIONS.headEnd = [ - '\n\n', + '\n\n', ...(utilLib.data.forceArray(PAGE_CONTRIBUTIONS.headEnd) || []) ]; //log.info("PAGE_CONTRIBUTIONS: " + JSON.stringify(PAGE_CONTRIBUTIONS, null, 2)); diff --git a/src/main/resources/site/parts/complex-reactive/complex-reactive.es6 b/src/main/resources/site/parts/complex-reactive/complex-reactive.es6 index 5fadd094..5f8ddbba 100644 --- a/src/main/resources/site/parts/complex-reactive/complex-reactive.es6 +++ b/src/main/resources/site/parts/complex-reactive/complex-reactive.es6 @@ -2,7 +2,6 @@ const portal = require('/lib/xp/portal'); const thymeleaf = require('/lib/xp/thymeleaf'); const React4xp = require('/lib/enonic/react4xp'); - // Specify the view file to use const view = resolve('complex-reactive.html'); From 5f670fcd998b8a099caaa73baaf939f6cbed7d2e Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Sat, 19 Jan 2019 20:10:36 +0100 Subject: [PATCH 41/96] State of WiP. Nothing works here. This is not the commit you're looking for. Move along. --- src/main/java/com/enonic/xp/react4xp/React4xp.java | 6 +++--- src/main/react4xp/{index.es6 => _frontendCore_.es6} | 0 src/main/resources/lib/enonic/react4xp/index.es6 | 2 ++ src/main/resources/site/parts/complex-reactive/first.jsx | 2 +- src/main/resources/site/parts/complex-reactive/second.jsx | 2 +- .../site/parts/simple-reactive/simple-reactive.es6 | 5 ++--- .../site/parts/simple-reactive/simple-reactive.jsx | 6 +++--- webpack.config.react4xp.js | 3 ++- webpack.config.reactBackend.js | 7 +++---- 9 files changed, 17 insertions(+), 16 deletions(-) rename src/main/react4xp/{index.es6 => _frontendCore_.es6} (100%) diff --git a/src/main/java/com/enonic/xp/react4xp/React4xp.java b/src/main/java/com/enonic/xp/react4xp/React4xp.java index 60eae2b1..1b802613 100644 --- a/src/main/java/com/enonic/xp/react4xp/React4xp.java +++ b/src/main/java/com/enonic/xp/react4xp/React4xp.java @@ -64,19 +64,19 @@ private String readResource(String path) throws IOException { public void test() throws IOException { System.out.println("Testing nashorn..."); + // Proof of concept: String backendReact = readResource("/lib/enonic/react4xp/backendReact.js"); String backendReactDOMServer = readResource("/lib/enonic/react4xp/backendReactDOMServer.js"); - String finsinte = readResource("/lib/enonic/react4xp/finsinte.js"); try { System.out.println("\n\n\n############################################# Running...\n\n\n:"); NashornScriptEngine engine = (NashornScriptEngine)new ScriptEngineManager().getEngineByName("nashorn"); - engine.eval(NASHORN_POLYFILL); engine.eval("k = 42;"); - //engine.eval(content); + engine.eval(backendReact); + engine.eval(backendReactDOMServer); engine.eval("console.log('Howdy world!');"); engine.eval("console.log(k);"); diff --git a/src/main/react4xp/index.es6 b/src/main/react4xp/_frontendCore_.es6 similarity index 100% rename from src/main/react4xp/index.es6 rename to src/main/react4xp/_frontendCore_.es6 diff --git a/src/main/resources/lib/enonic/react4xp/index.es6 b/src/main/resources/lib/enonic/react4xp/index.es6 index 706fb7e2..c2fb32d6 100644 --- a/src/main/resources/lib/enonic/react4xp/index.es6 +++ b/src/main/resources/lib/enonic/react4xp/index.es6 @@ -31,6 +31,8 @@ Object.keys(COMMON_CHUNKS).forEach(section => { }); }); +PLAN: TRE ULIKE React4XP WEBPACKS: frontendCore, backendCore og userAssets! Auto-load de to første her: + // Polyfill commonJS for rendered frontend code: PAGE_CONTRIBUTIONS.headEnd = [ '\n\n', diff --git a/src/main/resources/site/parts/complex-reactive/first.jsx b/src/main/resources/site/parts/complex-reactive/first.jsx index f301d153..becffe97 100644 --- a/src/main/resources/site/parts/complex-reactive/first.jsx +++ b/src/main/resources/site/parts/complex-reactive/first.jsx @@ -1,6 +1,6 @@ import React from 'react'; -import React4xp from '../../../../react4xp'; +import React4xp from '../../../../react4xp/_frontendCore_'; const Test = (props) =>

First.jsx: {props.insertedMessage}

; diff --git a/src/main/resources/site/parts/complex-reactive/second.jsx b/src/main/resources/site/parts/complex-reactive/second.jsx index 918d22cc..99fe517e 100644 --- a/src/main/resources/site/parts/complex-reactive/second.jsx +++ b/src/main/resources/site/parts/complex-reactive/second.jsx @@ -1,6 +1,6 @@ import React from 'react'; -import React4xp from '../../../../react4xp'; +import React4xp from '../../../../react4xp/_frontendCore_'; const Test = (props) =>

Second.jsx: {props.insertedMessage}

; diff --git a/src/main/resources/site/parts/simple-reactive/simple-reactive.es6 b/src/main/resources/site/parts/simple-reactive/simple-reactive.es6 index c452383c..e1f9d8f6 100644 --- a/src/main/resources/site/parts/simple-reactive/simple-reactive.es6 +++ b/src/main/resources/site/parts/simple-reactive/simple-reactive.es6 @@ -1,4 +1,5 @@ -const portal = require('/lib/xp/portal'); +const portal = require('/lib/xp/portal'); +const utilLib = require('/lib/enonic/util'); const React4xp = require('/lib/enonic/react4xp'); // Handle the GET request @@ -11,5 +12,3 @@ exports.get = function(req) { return React4xp.render({ component, props }); }; - - diff --git a/src/main/resources/site/parts/simple-reactive/simple-reactive.jsx b/src/main/resources/site/parts/simple-reactive/simple-reactive.jsx index 8be1913b..85bd24ad 100644 --- a/src/main/resources/site/parts/simple-reactive/simple-reactive.jsx +++ b/src/main/resources/site/parts/simple-reactive/simple-reactive.jsx @@ -1,7 +1,7 @@ import React from 'react'; -import React4xp from '../../../../react4xp'; -const Test = (props) =>

Dette er en test {props.insertedMessage}

; +export default (props) =>

Dette er en test {props.insertedMessage}

; -React4xp.render(Test); +//React4xp.render(Test); +//exports.React4xp["react4xp/site/parts/simple-reactive/simple-reactive"] diff --git a/webpack.config.react4xp.js b/webpack.config.react4xp.js index 7deef0e7..a061bcff 100644 --- a/webpack.config.react4xp.js +++ b/webpack.config.react4xp.js @@ -27,6 +27,7 @@ module.exports = { mode: 'production', entry: Object.assign({}, + {'_core_': path.join(SRC_R4X, '_frontendCore_.es6')}, getEntries(SRC_R4X_ENTRIES, ['jsx', 'js', 'es6'], R4X_TARGETSUBDIR), getEntries(SRC_SITE, ['jsx'], path.join(R4X_TARGETSUBDIR, SITE)) // <-- Note: this is where top-level react components are included, in the enonic site structure. Only JSX files are included: in order for these to be transpiled here (and thereby become a part of the chunk structure for these static assets) and not by the transpilation of "pure XP" source code files (which should be transpiled separately, outside of the static-asset/chunk structure), take care to separate them! Here, this is done by including only .JSX files here, reserving that extension for toplevel react components, and excluding .JSX files in the babelSite task in build.gradle. Note that if the top-level components import .es6 dependencies, that separation must be done more thoroughly. ), @@ -35,7 +36,7 @@ module.exports = { path: path.join(BUILD), // <-- Sets the base url for plugins and other target dirs. Note the use of {{assetUrl}} in index.html (or index.ejs). filename: "[name].js", chunkFilename: "[name].[contenthash:9].js", - libraryTarget: 'commonjs', // 'var' would easier to use in pure-frontend, accessing exports like: React.[name].function() etc... But 'commonjs' makes chunks easier to use from nashorn. + libraryTarget: 'var', // 'var' would easier to use in pure-frontend, accessing exports like: React.[name].function() etc... But 'commonjs' makes chunks easier to use from nashorn. library: ['React4xp', '[name]'], }, diff --git a/webpack.config.reactBackend.js b/webpack.config.reactBackend.js index abf250d1..a03363d8 100644 --- a/webpack.config.reactBackend.js +++ b/webpack.config.reactBackend.js @@ -1,22 +1,21 @@ const path = require('path'); const NODE_MODULES = path.join(__dirname, 'node_modules'); const BUILD = path.join(__dirname, 'build', 'resources', 'main', 'lib', 'enonic', 'react4xp'); -const CleanWebpackPlugin = require('clean-webpack-plugin'); module.exports = { mode: 'development', entry: { - 'react': path.join(NODE_MODULES, 'react', 'index.js'), - 'reactDOMServer': path.join(NODE_MODULES, 'react-dom', 'server.js') + 'backendReact': path.join(NODE_MODULES, 'react', 'index.js'), + 'backendReactDOMServer': path.join(NODE_MODULES, 'react-dom', 'server.js') }, output: { path: BUILD, // <-- Sets the base url for plugins and other target dirs. Note the use of {{assetUrl}} in index.html (or index.ejs). filename: "[name].js", libraryTarget: 'var', - library: ['[name]'] + //library: ['[name]'] }, resolve: { From c14c806c2b3263b1327b06d11c86f591a5b72d65 Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Sat, 19 Jan 2019 22:52:33 +0100 Subject: [PATCH 42/96] Workin' on the build scripts --- build.gradle | 27 +- package-lock.json | 2908 ++++++++--------- package.json | 20 +- src/main/react4xp/_entries/app.jsx | 6 +- src/main/react4xp/_entries/level/app2.jsx | 15 +- src/main/react4xp/commonChunks.json.ejs | 6 +- src/main/react4xp/commonChunks.xml.ejs | 6 +- src/main/react4xp/core.json.ejs | 8 + src/main/react4xp/index.html.ejs | 16 - .../resources/lib/enonic/react4xp/index.es6 | 2 +- ....js => webpack.config.react4xp.backCore.js | 1 + webpack.config.react4xp.frontCore.js | 58 + webpack.config.react4xp.js | 24 +- 13 files changed, 1570 insertions(+), 1527 deletions(-) create mode 100644 src/main/react4xp/core.json.ejs delete mode 100644 src/main/react4xp/index.html.ejs rename webpack.config.reactBackend.js => webpack.config.react4xp.backCore.js (99%) create mode 100644 webpack.config.react4xp.frontCore.js diff --git a/build.gradle b/build.gradle index f00b3f0f..e5d5de28 100644 --- a/build.gradle +++ b/build.gradle @@ -48,7 +48,7 @@ repositories { // These are "pure XP" source code files, not JS (and react) assets. Those must be transpiled separately, by the webpackReact4xp task below. // This is currently done by reserving .es6 and .js files below src/main/resources/ for this task, // while reserving .JSX files under that, and all relevant extensions in other locations, for the webpackReact4xp task. -task babelJs(type: NodeTask) { +task babelXP(type: NodeTask) { script = file('node_modules/babel-cli/bin/babel.js') args = ["src/main/resources", "--out-dir", "build/resources/main", "--ignore", "**/*.jsx"] @@ -56,17 +56,26 @@ task babelJs(type: NodeTask) { outputs.dir "build/resources/main" } -babelJs.dependsOn += 'npmInstall' -babelJs.dependsOn += 'processResources' +babelXP.dependsOn += 'npmInstall' +babelXP.dependsOn += 'processResources' -task webpackReactBackend(type: NodeTask) { +task webpackReact4xpFrontCore(type: NodeTask) { script = file('node_modules/webpack/bin/webpack.js') - args = ['--config', 'webpack.config.reactBackend.js'] + args = ['--config', 'webpack.config.react4xp.frontCore.js'] //inputs.dir 'node_modules/react/' } -webpackReactBackend.dependsOn += 'npmInstall' +webpackReact4xpFrontCore.dependsOn += 'npmInstall' + + +task webpackReact4xpBackCore(type: NodeTask) { + script = file('node_modules/webpack/bin/webpack.js') + args = ['--config', 'webpack.config.react4xp.backCore.js'] + + //inputs.dir 'node_modules/react/' +} +webpackReact4xpBackCore.dependsOn += 'npmInstall' task webpackReact4xp(type: NodeTask) { @@ -77,9 +86,11 @@ task webpackReact4xp(type: NodeTask) { file("build/resources/main/assets/index.html").renameTo(file("build/resources/main/index.html")) }*/ } +webpackReact4xp.dependsOn += 'npmInstall' +webpackReact4xp.dependsOn babelXP // processes your package.json before running webpack -webpackReact4xp.dependsOn babelJs jar.dependsOn webpackReact4xp -jar.dependsOn += 'webpackReactBackend' +jar.dependsOn += 'webpackReact4xpFrontCore' +jar.dependsOn += 'webpackReact4xpBackCore' diff --git a/package-lock.json b/package-lock.json index 1efefdf3..3a22a6f5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5 +1,5 @@ { - "name": "starter-react", + "name": "react4xp", "version": "1.0.0", "lockfileVersion": 1, "requires": true, @@ -9,7 +9,7 @@ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.2.0.tgz", "integrity": "sha512-oouEibCbHMVdZSDlJBO6bZmID/zA/G/Qx3H1d3rSNPTD+L8UNKvCat7aKWSJ74zYbm5zWGh0GQN0hKj8zYFTCg==", "requires": { - "regenerator-runtime": "^0.12.0" + "regenerator-runtime": "0.12.1" }, "dependencies": { "regenerator-runtime": { @@ -93,7 +93,7 @@ "integrity": "sha512-Mmqx/cS68K1tSrvRLtaV/Lp3NZWzXtOHUW2IvDvl2sihAwJh4ACE0eL6A8FvMyDG9abes3saB6dMimLOs+HMoQ==", "dev": true, "requires": { - "@xtuc/ieee754": "^1.2.0" + "@xtuc/ieee754": "1.2.0" } }, "@webassemblyjs/leb128": { @@ -215,7 +215,7 @@ "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==", "dev": true, "requires": { - "acorn": "^5.0.0" + "acorn": "5.7.3" } }, "ajv": { @@ -224,10 +224,10 @@ "integrity": "sha512-hOs7GfvI6tUI1LfZddH82ky6mOMyTuY0mk7kE2pWpmhhUSkumzaTO5vbVwij39MdwPQWCV4Zv57Eo06NtL/GVA==", "dev": true, "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.1" + "fast-deep-equal": "2.0.1", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.4.1", + "uri-js": "4.2.2" } }, "ajv-errors": { @@ -264,8 +264,8 @@ "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=", "dev": true, "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" + "micromatch": "3.1.10", + "normalize-path": "2.1.1" } }, "aproba": { @@ -280,7 +280,7 @@ "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=", "dev": true, "requires": { - "sprintf-js": "~1.0.2" + "sprintf-js": "1.0.3" } }, "arr-diff": { @@ -307,7 +307,7 @@ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "dev": true, "requires": { - "array-uniq": "^1.0.1" + "array-uniq": "1.0.3" } }, "array-uniq": { @@ -339,9 +339,9 @@ "integrity": "sha1-ucK/WAXx5kqt7tbfOiv6+1pz9aA=", "dev": true, "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" + "bn.js": "4.11.8", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" } }, "assert": { @@ -394,12 +394,12 @@ "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", "dev": true, "requires": { - "browserslist": "^1.7.6", - "caniuse-db": "^1.0.30000634", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "postcss": "^5.2.16", - "postcss-value-parser": "^3.2.3" + "browserslist": "1.7.7", + "caniuse-db": "1.0.30000864", + "normalize-range": "0.1.2", + "num2fraction": "1.2.2", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" } }, "babel-cli": { @@ -408,21 +408,21 @@ "integrity": "sha1-UCq1SHTX24itALiHoGODzgPQAvE=", "dev": true, "requires": { - "babel-core": "^6.26.0", - "babel-polyfill": "^6.26.0", - "babel-register": "^6.26.0", - "babel-runtime": "^6.26.0", - "chokidar": "^1.6.1", - "commander": "^2.11.0", - "convert-source-map": "^1.5.0", - "fs-readdir-recursive": "^1.0.0", - "glob": "^7.1.2", - "lodash": "^4.17.4", - "output-file-sync": "^1.1.2", - "path-is-absolute": "^1.0.1", - "slash": "^1.0.0", - "source-map": "^0.5.6", - "v8flags": "^2.1.1" + "babel-core": "6.26.3", + "babel-polyfill": "6.26.0", + "babel-register": "6.26.0", + "babel-runtime": "6.26.0", + "chokidar": "1.7.0", + "commander": "2.16.0", + "convert-source-map": "1.5.1", + "fs-readdir-recursive": "1.1.0", + "glob": "7.1.2", + "lodash": "4.17.10", + "output-file-sync": "1.1.2", + "path-is-absolute": "1.0.1", + "slash": "1.0.0", + "source-map": "0.5.7", + "v8flags": "2.1.1" }, "dependencies": { "anymatch": { @@ -432,8 +432,8 @@ "dev": true, "optional": true, "requires": { - "micromatch": "^2.1.5", - "normalize-path": "^2.0.0" + "micromatch": "2.3.11", + "normalize-path": "2.1.1" } }, "arr-diff": { @@ -443,7 +443,7 @@ "dev": true, "optional": true, "requires": { - "arr-flatten": "^1.0.1" + "arr-flatten": "1.1.0" } }, "array-unique": { @@ -460,9 +460,9 @@ "dev": true, "optional": true, "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" } }, "chokidar": { @@ -472,15 +472,15 @@ "dev": true, "optional": true, "requires": { - "anymatch": "^1.3.0", - "async-each": "^1.0.0", - "fsevents": "^1.0.0", - "glob-parent": "^2.0.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^2.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0" + "anymatch": "1.3.2", + "async-each": "1.0.1", + "fsevents": "1.2.4", + "glob-parent": "2.0.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "2.0.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.1.0" } }, "expand-brackets": { @@ -490,7 +490,7 @@ "dev": true, "optional": true, "requires": { - "is-posix-bracket": "^0.1.0" + "is-posix-bracket": "0.1.1" } }, "extglob": { @@ -500,7 +500,7 @@ "dev": true, "optional": true, "requires": { - "is-extglob": "^1.0.0" + "is-extglob": "1.0.0" } }, "glob-parent": { @@ -510,7 +510,7 @@ "dev": true, "optional": true, "requires": { - "is-glob": "^2.0.0" + "is-glob": "2.0.1" } }, "is-extglob": { @@ -525,7 +525,7 @@ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "is-extglob": "^1.0.0" + "is-extglob": "1.0.0" } }, "micromatch": { @@ -535,19 +535,19 @@ "dev": true, "optional": true, "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.4" } } } @@ -558,9 +558,9 @@ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", "dev": true, "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.2" } }, "babel-core": { @@ -569,25 +569,25 @@ "integrity": "sha1-suLwnjQtDwyI4vAuBneUEl51wgc=", "dev": true, "requires": { - "babel-code-frame": "^6.26.0", - "babel-generator": "^6.26.0", - "babel-helpers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-register": "^6.26.0", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "convert-source-map": "^1.5.1", - "debug": "^2.6.9", - "json5": "^0.5.1", - "lodash": "^4.17.4", - "minimatch": "^3.0.4", - "path-is-absolute": "^1.0.1", - "private": "^0.1.8", - "slash": "^1.0.0", - "source-map": "^0.5.7" + "babel-code-frame": "6.26.0", + "babel-generator": "6.26.1", + "babel-helpers": "6.24.1", + "babel-messages": "6.23.0", + "babel-register": "6.26.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "convert-source-map": "1.5.1", + "debug": "2.6.9", + "json5": "0.5.1", + "lodash": "4.17.10", + "minimatch": "3.0.4", + "path-is-absolute": "1.0.1", + "private": "0.1.8", + "slash": "1.0.0", + "source-map": "0.5.7" } }, "babel-generator": { @@ -596,14 +596,14 @@ "integrity": "sha1-GERAjTuPDTWkBOp6wYDwh6YBvZA=", "dev": true, "requires": { - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "detect-indent": "^4.0.0", - "jsesc": "^1.3.0", - "lodash": "^4.17.4", - "source-map": "^0.5.7", - "trim-right": "^1.0.1" + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "detect-indent": "4.0.0", + "jsesc": "1.3.0", + "lodash": "4.17.10", + "source-map": "0.5.7", + "trim-right": "1.0.1" } }, "babel-helper-bindify-decorators": { @@ -612,9 +612,9 @@ "integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" } }, "babel-helper-builder-binary-assignment-operator-visitor": { @@ -623,9 +623,9 @@ "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", "dev": true, "requires": { - "babel-helper-explode-assignable-expression": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "babel-helper-explode-assignable-expression": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" } }, "babel-helper-builder-react-jsx": { @@ -634,9 +634,9 @@ "integrity": "sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA=", "dev": true, "requires": { - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "esutils": "^2.0.2" + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "esutils": "2.0.2" } }, "babel-helper-call-delegate": { @@ -645,10 +645,10 @@ "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", "dev": true, "requires": { - "babel-helper-hoist-variables": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "babel-helper-hoist-variables": "6.24.1", + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" } }, "babel-helper-define-map": { @@ -657,10 +657,10 @@ "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", "dev": true, "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.10" } }, "babel-helper-explode-assignable-expression": { @@ -669,9 +669,9 @@ "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" } }, "babel-helper-explode-class": { @@ -680,10 +680,10 @@ "integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=", "dev": true, "requires": { - "babel-helper-bindify-decorators": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "babel-helper-bindify-decorators": "6.24.1", + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" } }, "babel-helper-function-name": { @@ -692,11 +692,11 @@ "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", "dev": true, "requires": { - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "babel-helper-get-function-arity": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" } }, "babel-helper-get-function-arity": { @@ -705,8 +705,8 @@ "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" } }, "babel-helper-hoist-variables": { @@ -715,8 +715,8 @@ "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" } }, "babel-helper-optimise-call-expression": { @@ -725,8 +725,8 @@ "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" } }, "babel-helper-regex": { @@ -735,9 +735,9 @@ "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", "dev": true, "requires": { - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.10" } }, "babel-helper-remap-async-to-generator": { @@ -746,11 +746,11 @@ "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", "dev": true, "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" } }, "babel-helper-replace-supers": { @@ -759,12 +759,12 @@ "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", "dev": true, "requires": { - "babel-helper-optimise-call-expression": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "babel-helper-optimise-call-expression": "6.24.1", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" } }, "babel-helpers": { @@ -773,8 +773,8 @@ "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" } }, "babel-loader": { @@ -783,9 +783,9 @@ "integrity": "sha512-/hbyEvPzBJuGpk9o80R0ZyTej6heEOr59GoEUtn8qFKbnx4cJm9FWES6J/iv644sYgrtVw9JJQkjaLW/bqb5gw==", "dev": true, "requires": { - "find-cache-dir": "^1.0.0", - "loader-utils": "^1.0.2", - "mkdirp": "^0.5.1" + "find-cache-dir": "1.0.0", + "loader-utils": "1.1.0", + "mkdirp": "0.5.1" } }, "babel-messages": { @@ -794,7 +794,7 @@ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "babel-runtime": "6.26.0" } }, "babel-plugin-check-es2015-constants": { @@ -803,7 +803,7 @@ "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "babel-runtime": "6.26.0" } }, "babel-plugin-syntax-async-functions": { @@ -896,9 +896,9 @@ "integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=", "dev": true, "requires": { - "babel-helper-remap-async-to-generator": "^6.24.1", - "babel-plugin-syntax-async-generators": "^6.5.0", - "babel-runtime": "^6.22.0" + "babel-helper-remap-async-to-generator": "6.24.1", + "babel-plugin-syntax-async-generators": "6.13.0", + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-async-to-generator": { @@ -907,9 +907,9 @@ "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", "dev": true, "requires": { - "babel-helper-remap-async-to-generator": "^6.24.1", - "babel-plugin-syntax-async-functions": "^6.8.0", - "babel-runtime": "^6.22.0" + "babel-helper-remap-async-to-generator": "6.24.1", + "babel-plugin-syntax-async-functions": "6.13.0", + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-class-constructor-call": { @@ -918,9 +918,9 @@ "integrity": "sha1-gNwoVQWsBn3LjWxl4vbxGrd2Xvk=", "dev": true, "requires": { - "babel-plugin-syntax-class-constructor-call": "^6.18.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" + "babel-plugin-syntax-class-constructor-call": "6.18.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" } }, "babel-plugin-transform-class-properties": { @@ -929,10 +929,10 @@ "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=", "dev": true, "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-plugin-syntax-class-properties": "^6.8.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" + "babel-helper-function-name": "6.24.1", + "babel-plugin-syntax-class-properties": "6.13.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" } }, "babel-plugin-transform-decorators": { @@ -941,11 +941,11 @@ "integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=", "dev": true, "requires": { - "babel-helper-explode-class": "^6.24.1", - "babel-plugin-syntax-decorators": "^6.13.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-types": "^6.24.1" + "babel-helper-explode-class": "6.24.1", + "babel-plugin-syntax-decorators": "6.13.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-types": "6.26.0" } }, "babel-plugin-transform-do-expressions": { @@ -954,8 +954,8 @@ "integrity": "sha1-KMyvkoEtlJws0SgfaQyP3EaK6bs=", "dev": true, "requires": { - "babel-plugin-syntax-do-expressions": "^6.8.0", - "babel-runtime": "^6.22.0" + "babel-plugin-syntax-do-expressions": "6.13.0", + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-es2015-arrow-functions": { @@ -964,7 +964,7 @@ "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-es2015-block-scoped-functions": { @@ -973,7 +973,7 @@ "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-es2015-block-scoping": { @@ -982,11 +982,11 @@ "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", "dev": true, "requires": { - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.10" } }, "babel-plugin-transform-es2015-classes": { @@ -995,15 +995,15 @@ "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", "dev": true, "requires": { - "babel-helper-define-map": "^6.24.1", - "babel-helper-function-name": "^6.24.1", - "babel-helper-optimise-call-expression": "^6.24.1", - "babel-helper-replace-supers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "babel-helper-define-map": "6.26.0", + "babel-helper-function-name": "6.24.1", + "babel-helper-optimise-call-expression": "6.24.1", + "babel-helper-replace-supers": "6.24.1", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" } }, "babel-plugin-transform-es2015-computed-properties": { @@ -1012,8 +1012,8 @@ "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" } }, "babel-plugin-transform-es2015-destructuring": { @@ -1022,7 +1022,7 @@ "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-es2015-duplicate-keys": { @@ -1031,8 +1031,8 @@ "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" } }, "babel-plugin-transform-es2015-for-of": { @@ -1041,7 +1041,7 @@ "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-es2015-function-name": { @@ -1050,9 +1050,9 @@ "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", "dev": true, "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" } }, "babel-plugin-transform-es2015-literals": { @@ -1061,7 +1061,7 @@ "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-es2015-modules-amd": { @@ -1070,9 +1070,9 @@ "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", "dev": true, "requires": { - "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" + "babel-plugin-transform-es2015-modules-commonjs": "6.26.2", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" } }, "babel-plugin-transform-es2015-modules-commonjs": { @@ -1081,10 +1081,10 @@ "integrity": "sha1-WKeThjqefKhwvcWogRF/+sJ9tvM=", "dev": true, "requires": { - "babel-plugin-transform-strict-mode": "^6.24.1", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-types": "^6.26.0" + "babel-plugin-transform-strict-mode": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-types": "6.26.0" } }, "babel-plugin-transform-es2015-modules-systemjs": { @@ -1093,9 +1093,9 @@ "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", "dev": true, "requires": { - "babel-helper-hoist-variables": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" + "babel-helper-hoist-variables": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" } }, "babel-plugin-transform-es2015-modules-umd": { @@ -1104,9 +1104,9 @@ "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", "dev": true, "requires": { - "babel-plugin-transform-es2015-modules-amd": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" } }, "babel-plugin-transform-es2015-object-super": { @@ -1115,8 +1115,8 @@ "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", "dev": true, "requires": { - "babel-helper-replace-supers": "^6.24.1", - "babel-runtime": "^6.22.0" + "babel-helper-replace-supers": "6.24.1", + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-es2015-parameters": { @@ -1125,12 +1125,12 @@ "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", "dev": true, "requires": { - "babel-helper-call-delegate": "^6.24.1", - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "babel-helper-call-delegate": "6.24.1", + "babel-helper-get-function-arity": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" } }, "babel-plugin-transform-es2015-shorthand-properties": { @@ -1139,8 +1139,8 @@ "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" } }, "babel-plugin-transform-es2015-spread": { @@ -1149,7 +1149,7 @@ "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-es2015-sticky-regex": { @@ -1158,9 +1158,9 @@ "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", "dev": true, "requires": { - "babel-helper-regex": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "babel-helper-regex": "6.26.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" } }, "babel-plugin-transform-es2015-template-literals": { @@ -1169,7 +1169,7 @@ "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-es2015-typeof-symbol": { @@ -1178,7 +1178,7 @@ "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-es2015-unicode-regex": { @@ -1187,9 +1187,9 @@ "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", "dev": true, "requires": { - "babel-helper-regex": "^6.24.1", - "babel-runtime": "^6.22.0", - "regexpu-core": "^2.0.0" + "babel-helper-regex": "6.26.0", + "babel-runtime": "6.26.0", + "regexpu-core": "2.0.0" } }, "babel-plugin-transform-exponentiation-operator": { @@ -1198,9 +1198,9 @@ "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", "dev": true, "requires": { - "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1", - "babel-plugin-syntax-exponentiation-operator": "^6.8.0", - "babel-runtime": "^6.22.0" + "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1", + "babel-plugin-syntax-exponentiation-operator": "6.13.0", + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-export-extensions": { @@ -1209,8 +1209,8 @@ "integrity": "sha1-U3OLR+deghhYnuqUbLvTkQm75lM=", "dev": true, "requires": { - "babel-plugin-syntax-export-extensions": "^6.8.0", - "babel-runtime": "^6.22.0" + "babel-plugin-syntax-export-extensions": "6.13.0", + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-flow-strip-types": { @@ -1219,8 +1219,8 @@ "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=", "dev": true, "requires": { - "babel-plugin-syntax-flow": "^6.18.0", - "babel-runtime": "^6.22.0" + "babel-plugin-syntax-flow": "6.18.0", + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-function-bind": { @@ -1229,8 +1229,8 @@ "integrity": "sha1-xvuOlqwpajELjPjqQBRiQH3fapc=", "dev": true, "requires": { - "babel-plugin-syntax-function-bind": "^6.8.0", - "babel-runtime": "^6.22.0" + "babel-plugin-syntax-function-bind": "6.13.0", + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-object-rest-spread": { @@ -1239,8 +1239,8 @@ "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", "dev": true, "requires": { - "babel-plugin-syntax-object-rest-spread": "^6.8.0", - "babel-runtime": "^6.26.0" + "babel-plugin-syntax-object-rest-spread": "6.13.0", + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-react-display-name": { @@ -1249,7 +1249,7 @@ "integrity": "sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE=", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-react-jsx": { @@ -1258,9 +1258,9 @@ "integrity": "sha1-hAoCjn30YN/DotKfDA2R9jduZqM=", "dev": true, "requires": { - "babel-helper-builder-react-jsx": "^6.24.1", - "babel-plugin-syntax-jsx": "^6.8.0", - "babel-runtime": "^6.22.0" + "babel-helper-builder-react-jsx": "6.26.0", + "babel-plugin-syntax-jsx": "6.18.0", + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-react-jsx-self": { @@ -1269,8 +1269,8 @@ "integrity": "sha1-322AqdomEqEh5t3XVYvL7PBuY24=", "dev": true, "requires": { - "babel-plugin-syntax-jsx": "^6.8.0", - "babel-runtime": "^6.22.0" + "babel-plugin-syntax-jsx": "6.18.0", + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-react-jsx-source": { @@ -1279,8 +1279,8 @@ "integrity": "sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY=", "dev": true, "requires": { - "babel-plugin-syntax-jsx": "^6.8.0", - "babel-runtime": "^6.22.0" + "babel-plugin-syntax-jsx": "6.18.0", + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-regenerator": { @@ -1289,7 +1289,7 @@ "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", "dev": true, "requires": { - "regenerator-transform": "^0.10.0" + "regenerator-transform": "0.10.1" } }, "babel-plugin-transform-strict-mode": { @@ -1298,8 +1298,8 @@ "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" } }, "babel-polyfill": { @@ -1308,9 +1308,9 @@ "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", "dev": true, "requires": { - "babel-runtime": "^6.26.0", - "core-js": "^2.5.0", - "regenerator-runtime": "^0.10.5" + "babel-runtime": "6.26.0", + "core-js": "2.5.7", + "regenerator-runtime": "0.10.5" }, "dependencies": { "core-js": { @@ -1333,30 +1333,30 @@ "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=", "dev": true, "requires": { - "babel-plugin-check-es2015-constants": "^6.22.0", - "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", - "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", - "babel-plugin-transform-es2015-block-scoping": "^6.24.1", - "babel-plugin-transform-es2015-classes": "^6.24.1", - "babel-plugin-transform-es2015-computed-properties": "^6.24.1", - "babel-plugin-transform-es2015-destructuring": "^6.22.0", - "babel-plugin-transform-es2015-duplicate-keys": "^6.24.1", - "babel-plugin-transform-es2015-for-of": "^6.22.0", - "babel-plugin-transform-es2015-function-name": "^6.24.1", - "babel-plugin-transform-es2015-literals": "^6.22.0", - "babel-plugin-transform-es2015-modules-amd": "^6.24.1", - "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", - "babel-plugin-transform-es2015-modules-systemjs": "^6.24.1", - "babel-plugin-transform-es2015-modules-umd": "^6.24.1", - "babel-plugin-transform-es2015-object-super": "^6.24.1", - "babel-plugin-transform-es2015-parameters": "^6.24.1", - "babel-plugin-transform-es2015-shorthand-properties": "^6.24.1", - "babel-plugin-transform-es2015-spread": "^6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "^6.24.1", - "babel-plugin-transform-es2015-template-literals": "^6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "^6.22.0", - "babel-plugin-transform-es2015-unicode-regex": "^6.24.1", - "babel-plugin-transform-regenerator": "^6.24.1" + "babel-plugin-check-es2015-constants": "6.22.0", + "babel-plugin-transform-es2015-arrow-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoping": "6.26.0", + "babel-plugin-transform-es2015-classes": "6.24.1", + "babel-plugin-transform-es2015-computed-properties": "6.24.1", + "babel-plugin-transform-es2015-destructuring": "6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", + "babel-plugin-transform-es2015-for-of": "6.23.0", + "babel-plugin-transform-es2015-function-name": "6.24.1", + "babel-plugin-transform-es2015-literals": "6.22.0", + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-plugin-transform-es2015-modules-commonjs": "6.26.2", + "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", + "babel-plugin-transform-es2015-modules-umd": "6.24.1", + "babel-plugin-transform-es2015-object-super": "6.24.1", + "babel-plugin-transform-es2015-parameters": "6.24.1", + "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", + "babel-plugin-transform-es2015-spread": "6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "6.24.1", + "babel-plugin-transform-es2015-template-literals": "6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", + "babel-plugin-transform-es2015-unicode-regex": "6.24.1", + "babel-plugin-transform-regenerator": "6.26.0" } }, "babel-preset-flow": { @@ -1365,7 +1365,7 @@ "integrity": "sha1-5xIYiHCFrpoktb5Baa/7WZgWxJ0=", "dev": true, "requires": { - "babel-plugin-transform-flow-strip-types": "^6.22.0" + "babel-plugin-transform-flow-strip-types": "6.22.0" } }, "babel-preset-react": { @@ -1374,12 +1374,12 @@ "integrity": "sha1-umnfrqRfw+xjm2pOzqbhdwLJE4A=", "dev": true, "requires": { - "babel-plugin-syntax-jsx": "^6.3.13", - "babel-plugin-transform-react-display-name": "^6.23.0", - "babel-plugin-transform-react-jsx": "^6.24.1", - "babel-plugin-transform-react-jsx-self": "^6.22.0", - "babel-plugin-transform-react-jsx-source": "^6.22.0", - "babel-preset-flow": "^6.23.0" + "babel-plugin-syntax-jsx": "6.18.0", + "babel-plugin-transform-react-display-name": "6.25.0", + "babel-plugin-transform-react-jsx": "6.24.1", + "babel-plugin-transform-react-jsx-self": "6.22.0", + "babel-plugin-transform-react-jsx-source": "6.22.0", + "babel-preset-flow": "6.23.0" } }, "babel-preset-stage-0": { @@ -1388,9 +1388,9 @@ "integrity": "sha1-VkLRUEL5E4TX5a+LyIsduVsDnmo=", "dev": true, "requires": { - "babel-plugin-transform-do-expressions": "^6.22.0", - "babel-plugin-transform-function-bind": "^6.22.0", - "babel-preset-stage-1": "^6.24.1" + "babel-plugin-transform-do-expressions": "6.22.0", + "babel-plugin-transform-function-bind": "6.22.0", + "babel-preset-stage-1": "6.24.1" } }, "babel-preset-stage-1": { @@ -1399,9 +1399,9 @@ "integrity": "sha1-dpLNfc1oSZB+auSgqFWJz7niv7A=", "dev": true, "requires": { - "babel-plugin-transform-class-constructor-call": "^6.24.1", - "babel-plugin-transform-export-extensions": "^6.22.0", - "babel-preset-stage-2": "^6.24.1" + "babel-plugin-transform-class-constructor-call": "6.24.1", + "babel-plugin-transform-export-extensions": "6.22.0", + "babel-preset-stage-2": "6.24.1" } }, "babel-preset-stage-2": { @@ -1410,10 +1410,10 @@ "integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=", "dev": true, "requires": { - "babel-plugin-syntax-dynamic-import": "^6.18.0", - "babel-plugin-transform-class-properties": "^6.24.1", - "babel-plugin-transform-decorators": "^6.24.1", - "babel-preset-stage-3": "^6.24.1" + "babel-plugin-syntax-dynamic-import": "6.18.0", + "babel-plugin-transform-class-properties": "6.24.1", + "babel-plugin-transform-decorators": "6.24.1", + "babel-preset-stage-3": "6.24.1" } }, "babel-preset-stage-3": { @@ -1422,11 +1422,11 @@ "integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=", "dev": true, "requires": { - "babel-plugin-syntax-trailing-function-commas": "^6.22.0", - "babel-plugin-transform-async-generator-functions": "^6.24.1", - "babel-plugin-transform-async-to-generator": "^6.24.1", - "babel-plugin-transform-exponentiation-operator": "^6.24.1", - "babel-plugin-transform-object-rest-spread": "^6.22.0" + "babel-plugin-syntax-trailing-function-commas": "6.22.0", + "babel-plugin-transform-async-generator-functions": "6.24.1", + "babel-plugin-transform-async-to-generator": "6.24.1", + "babel-plugin-transform-exponentiation-operator": "6.24.1", + "babel-plugin-transform-object-rest-spread": "6.26.0" } }, "babel-register": { @@ -1435,13 +1435,13 @@ "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", "dev": true, "requires": { - "babel-core": "^6.26.0", - "babel-runtime": "^6.26.0", - "core-js": "^2.5.0", - "home-or-tmp": "^2.0.0", - "lodash": "^4.17.4", - "mkdirp": "^0.5.1", - "source-map-support": "^0.4.15" + "babel-core": "6.26.3", + "babel-runtime": "6.26.0", + "core-js": "2.5.7", + "home-or-tmp": "2.0.0", + "lodash": "4.17.10", + "mkdirp": "0.5.1", + "source-map-support": "0.4.18" }, "dependencies": { "core-js": { @@ -1458,8 +1458,8 @@ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "dev": true, "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" + "core-js": "2.5.7", + "regenerator-runtime": "0.11.1" }, "dependencies": { "core-js": { @@ -1476,11 +1476,11 @@ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", "dev": true, "requires": { - "babel-runtime": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "lodash": "^4.17.4" + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "lodash": "4.17.10" } }, "babel-traverse": { @@ -1489,15 +1489,15 @@ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", "dev": true, "requires": { - "babel-code-frame": "^6.26.0", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "debug": "^2.6.8", - "globals": "^9.18.0", - "invariant": "^2.2.2", - "lodash": "^4.17.4" + "babel-code-frame": "6.26.0", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "debug": "2.6.9", + "globals": "9.18.0", + "invariant": "2.2.4", + "lodash": "4.17.10" } }, "babel-types": { @@ -1506,10 +1506,10 @@ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", "dev": true, "requires": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" + "babel-runtime": "6.26.0", + "esutils": "2.0.2", + "lodash": "4.17.10", + "to-fast-properties": "1.0.3" } }, "babylon": { @@ -1529,13 +1529,13 @@ "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=", "dev": true, "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" + "cache-base": "1.0.1", + "class-utils": "0.3.6", + "component-emitter": "1.2.1", + "define-property": "1.0.0", + "isobject": "3.0.1", + "mixin-deep": "1.3.1", + "pascalcase": "0.1.1" }, "dependencies": { "define-property": { @@ -1544,7 +1544,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "^1.0.0" + "is-descriptor": "1.0.2" } }, "is-accessor-descriptor": { @@ -1553,7 +1553,7 @@ "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-data-descriptor": { @@ -1562,7 +1562,7 @@ "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-descriptor": { @@ -1571,9 +1571,9 @@ "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", "dev": true, "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" } }, "kind-of": { @@ -1625,7 +1625,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=", "requires": { - "balanced-match": "^1.0.0", + "balanced-match": "1.0.0", "concat-map": "0.0.1" } }, @@ -1635,16 +1635,16 @@ "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", "dev": true, "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "repeat-element": "1.1.2", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" }, "dependencies": { "extend-shallow": { @@ -1653,7 +1653,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } } } @@ -1670,12 +1670,12 @@ "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "buffer-xor": "1.0.3", + "cipher-base": "1.0.4", + "create-hash": "1.2.0", + "evp_bytestokey": "1.0.3", + "inherits": "2.0.3", + "safe-buffer": "5.1.2" } }, "browserify-cipher": { @@ -1684,9 +1684,9 @@ "integrity": "sha1-jWR0wbhwv9q807z8wZNKEOlPFfA=", "dev": true, "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" + "browserify-aes": "1.2.0", + "browserify-des": "1.0.2", + "evp_bytestokey": "1.0.3" } }, "browserify-des": { @@ -1695,10 +1695,10 @@ "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "cipher-base": "1.0.4", + "des.js": "1.0.0", + "inherits": "2.0.3", + "safe-buffer": "5.1.2" } }, "browserify-rsa": { @@ -1707,8 +1707,8 @@ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", "dev": true, "requires": { - "bn.js": "^4.1.0", - "randombytes": "^2.0.1" + "bn.js": "4.11.8", + "randombytes": "2.0.6" } }, "browserify-sign": { @@ -1717,13 +1717,13 @@ "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", "dev": true, "requires": { - "bn.js": "^4.1.1", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.2", - "elliptic": "^6.0.0", - "inherits": "^2.0.1", - "parse-asn1": "^5.0.0" + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "elliptic": "6.4.1", + "inherits": "2.0.3", + "parse-asn1": "5.1.1" } }, "browserify-zlib": { @@ -1732,7 +1732,7 @@ "integrity": "sha1-KGlFnZqjviRf6P4sofRuLn9U1z8=", "dev": true, "requires": { - "pako": "~1.0.5" + "pako": "1.0.7" } }, "browserslist": { @@ -1741,8 +1741,8 @@ "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", "dev": true, "requires": { - "caniuse-db": "^1.0.30000639", - "electron-to-chromium": "^1.2.7" + "caniuse-db": "1.0.30000864", + "electron-to-chromium": "1.3.51" } }, "buffer": { @@ -1751,9 +1751,9 @@ "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", "dev": true, "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" + "base64-js": "1.3.0", + "ieee754": "1.1.12", + "isarray": "1.0.0" } }, "buffer-from": { @@ -1780,20 +1780,20 @@ "integrity": "sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg==", "dev": true, "requires": { - "bluebird": "^3.5.3", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.3", - "graceful-fs": "^4.1.15", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.2", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" + "bluebird": "3.5.3", + "chownr": "1.1.1", + "figgy-pudding": "3.5.1", + "glob": "7.1.3", + "graceful-fs": "4.1.15", + "lru-cache": "5.1.1", + "mississippi": "3.0.0", + "mkdirp": "0.5.1", + "move-concurrently": "1.0.1", + "promise-inflight": "1.0.1", + "rimraf": "2.6.3", + "ssri": "6.0.1", + "unique-filename": "1.1.1", + "y18n": "4.0.0" }, "dependencies": { "glob": { @@ -1802,12 +1802,12 @@ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" } }, "graceful-fs": { @@ -1824,15 +1824,15 @@ "integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=", "dev": true, "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" + "collection-visit": "1.0.0", + "component-emitter": "1.2.1", + "get-value": "2.0.6", + "has-value": "1.0.0", + "isobject": "3.0.1", + "set-value": "2.0.0", + "to-object-path": "0.3.0", + "union-value": "1.0.0", + "unset-value": "1.0.0" } }, "camel-case": { @@ -1841,8 +1841,8 @@ "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", "dev": true, "requires": { - "no-case": "^2.2.0", - "upper-case": "^1.1.1" + "no-case": "2.3.2", + "upper-case": "1.1.3" } }, "camelcase": { @@ -1857,10 +1857,10 @@ "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=", "dev": true, "requires": { - "browserslist": "^1.3.6", - "caniuse-db": "^1.0.30000529", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" + "browserslist": "1.7.7", + "caniuse-db": "1.0.30000864", + "lodash.memoize": "4.1.2", + "lodash.uniq": "4.5.0" } }, "caniuse-db": { @@ -1874,11 +1874,11 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" }, "dependencies": { "supports-color": { @@ -1894,19 +1894,19 @@ "integrity": "sha1-NW/04rDo5D4yLRijckYLvPOszSY=", "dev": true, "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.0", - "braces": "^2.3.0", - "fsevents": "^1.2.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "lodash.debounce": "^4.0.8", - "normalize-path": "^2.1.1", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0", - "upath": "^1.0.5" + "anymatch": "2.0.0", + "async-each": "1.0.1", + "braces": "2.3.2", + "fsevents": "1.2.4", + "glob-parent": "3.1.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "4.0.0", + "lodash.debounce": "4.0.8", + "normalize-path": "2.1.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.1.0", + "upath": "1.1.0" } }, "chownr": { @@ -1921,7 +1921,7 @@ "integrity": "sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==", "dev": true, "requires": { - "tslib": "^1.9.0" + "tslib": "1.9.3" } }, "cipher-base": { @@ -1930,8 +1930,8 @@ "integrity": "sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94=", "dev": true, "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "2.0.3", + "safe-buffer": "5.1.2" } }, "clap": { @@ -1940,7 +1940,7 @@ "integrity": "sha1-TzZ0WzIAhJJVf0ZBLWbVDLmbzlE=", "dev": true, "requires": { - "chalk": "^1.1.3" + "chalk": "1.1.3" } }, "class-utils": { @@ -1949,10 +1949,10 @@ "integrity": "sha1-+TNprouafOAv1B+q0MqDAzGQxGM=", "dev": true, "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" + "arr-union": "3.1.0", + "define-property": "0.2.5", + "isobject": "3.0.1", + "static-extend": "0.1.2" }, "dependencies": { "define-property": { @@ -1961,7 +1961,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } } } @@ -1972,7 +1972,7 @@ "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==", "dev": true, "requires": { - "source-map": "~0.6.0" + "source-map": "0.6.1" }, "dependencies": { "source-map": { @@ -1989,7 +1989,7 @@ "integrity": "sha512-+f96f52UIET4tOFBbCqezx7KH+w7lz/p4fA1FEjf0hC6ugxqwZedBtENzekN2FnmoTF/bn1LrlkvebOsDZuXKw==", "dev": true, "requires": { - "rimraf": "^2.6.1" + "rimraf": "2.6.3" } }, "cliui": { @@ -1998,9 +1998,9 @@ "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", "dev": true, "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" + "string-width": "2.1.1", + "strip-ansi": "4.0.0", + "wrap-ansi": "2.1.0" }, "dependencies": { "ansi-regex": { @@ -2015,7 +2015,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "3.0.0" } } } @@ -2032,7 +2032,7 @@ "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=", "dev": true, "requires": { - "q": "^1.1.2" + "q": "1.5.1" } }, "code-point-at": { @@ -2047,8 +2047,8 @@ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dev": true, "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" + "map-visit": "1.0.0", + "object-visit": "1.0.1" } }, "color": { @@ -2057,9 +2057,9 @@ "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", "dev": true, "requires": { - "clone": "^1.0.2", - "color-convert": "^1.3.0", - "color-string": "^0.3.0" + "clone": "1.0.4", + "color-convert": "1.9.2", + "color-string": "0.3.0" } }, "color-convert": { @@ -2083,7 +2083,7 @@ "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=", "dev": true, "requires": { - "color-name": "^1.0.0" + "color-name": "1.1.1" } }, "colormin": { @@ -2092,9 +2092,9 @@ "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=", "dev": true, "requires": { - "color": "^0.11.0", + "color": "0.11.4", "css-color-names": "0.0.4", - "has": "^1.0.1" + "has": "1.0.3" } }, "colors": { @@ -2132,10 +2132,10 @@ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" + "buffer-from": "1.1.1", + "inherits": "2.0.3", + "readable-stream": "2.3.6", + "typedarray": "0.0.6" } }, "console-browserify": { @@ -2144,7 +2144,7 @@ "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", "dev": true, "requires": { - "date-now": "^0.1.4" + "date-now": "0.1.4" } }, "constants-browserify": { @@ -2165,12 +2165,12 @@ "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", "dev": true, "requires": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" + "aproba": "1.2.0", + "fs-write-stream-atomic": "1.0.10", + "iferr": "0.1.5", + "mkdirp": "0.5.1", + "rimraf": "2.6.3", + "run-queue": "1.0.3" } }, "copy-descriptor": { @@ -2185,14 +2185,14 @@ "integrity": "sha512-Y+SQCF+0NoWQryez2zXn5J5knmr9z/9qSQt7fbL78u83rxmigOy8X5+BFn8CFSuX+nKT8gpYwJX68ekqtQt6ZA==", "dev": true, "requires": { - "cacache": "^10.0.4", - "find-cache-dir": "^1.0.0", - "globby": "^7.1.1", - "is-glob": "^4.0.0", - "loader-utils": "^1.1.0", - "minimatch": "^3.0.4", - "p-limit": "^1.0.0", - "serialize-javascript": "^1.4.0" + "cacache": "10.0.4", + "find-cache-dir": "1.0.0", + "globby": "7.1.1", + "is-glob": "4.0.0", + "loader-utils": "1.1.0", + "minimatch": "3.0.4", + "p-limit": "1.3.0", + "serialize-javascript": "1.6.0" }, "dependencies": { "cacache": { @@ -2201,19 +2201,19 @@ "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", "dev": true, "requires": { - "bluebird": "^3.5.1", - "chownr": "^1.0.1", - "glob": "^7.1.2", - "graceful-fs": "^4.1.11", - "lru-cache": "^4.1.1", - "mississippi": "^2.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.2", - "ssri": "^5.2.4", - "unique-filename": "^1.1.0", - "y18n": "^4.0.0" + "bluebird": "3.5.3", + "chownr": "1.1.1", + "glob": "7.1.2", + "graceful-fs": "4.1.11", + "lru-cache": "4.1.5", + "mississippi": "2.0.0", + "mkdirp": "0.5.1", + "move-concurrently": "1.0.1", + "promise-inflight": "1.0.1", + "rimraf": "2.6.3", + "ssri": "5.3.0", + "unique-filename": "1.1.1", + "y18n": "4.0.0" } }, "lru-cache": { @@ -2222,8 +2222,8 @@ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "dev": true, "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "pseudomap": "1.0.2", + "yallist": "2.1.2" } }, "mississippi": { @@ -2232,16 +2232,16 @@ "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", "dev": true, "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^2.0.1", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" + "concat-stream": "1.6.2", + "duplexify": "3.6.1", + "end-of-stream": "1.4.1", + "flush-write-stream": "1.0.3", + "from2": "2.3.0", + "parallel-transform": "1.1.0", + "pump": "2.0.1", + "pumpify": "1.5.1", + "stream-each": "1.2.3", + "through2": "2.0.5" } }, "pump": { @@ -2250,8 +2250,8 @@ "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "dev": true, "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "end-of-stream": "1.4.1", + "once": "1.4.0" } }, "ssri": { @@ -2260,7 +2260,7 @@ "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", "dev": true, "requires": { - "safe-buffer": "^5.1.1" + "safe-buffer": "5.1.2" } }, "yallist": { @@ -2288,8 +2288,8 @@ "integrity": "sha1-yREbbzMEXEaX8UR4f5JUzcd8Rf8=", "dev": true, "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.0.0" + "bn.js": "4.11.8", + "elliptic": "6.4.1" } }, "create-hash": { @@ -2298,11 +2298,11 @@ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" + "cipher-base": "1.0.4", + "inherits": "2.0.3", + "md5.js": "1.3.5", + "ripemd160": "2.0.2", + "sha.js": "2.4.11" } }, "create-hmac": { @@ -2311,12 +2311,12 @@ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "cipher-base": "1.0.4", + "create-hash": "1.2.0", + "inherits": "2.0.3", + "ripemd160": "2.0.2", + "safe-buffer": "5.1.2", + "sha.js": "2.4.11" } }, "create-react-context": { @@ -2324,8 +2324,8 @@ "resolved": "https://registry.npmjs.org/create-react-context/-/create-react-context-0.2.3.tgz", "integrity": "sha1-nsFAppFKIu8EuLCbd3HeiVZ8tvM=", "requires": { - "fbjs": "^0.8.0", - "gud": "^1.0.0" + "fbjs": "0.8.17", + "gud": "1.0.0" } }, "cross-spawn": { @@ -2334,11 +2334,11 @@ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "nice-try": "1.0.5", + "path-key": "2.0.1", + "semver": "5.6.0", + "shebang-command": "1.2.0", + "which": "1.3.1" } }, "crypto-browserify": { @@ -2347,17 +2347,17 @@ "integrity": "sha1-OWz58xN/A+S45TLFj2mCVOAPgOw=", "dev": true, "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" + "browserify-cipher": "1.0.1", + "browserify-sign": "4.0.4", + "create-ecdh": "4.0.3", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "diffie-hellman": "5.0.3", + "inherits": "2.0.3", + "pbkdf2": "3.0.17", + "public-encrypt": "4.0.3", + "randombytes": "2.0.6", + "randomfill": "1.0.4" } }, "css-color-names": { @@ -2372,20 +2372,20 @@ "integrity": "sha1-w/mGSnAL4nEbtaJGKyOJsaOS2rc=", "dev": true, "requires": { - "babel-code-frame": "^6.26.0", - "css-selector-tokenizer": "^0.7.0", - "cssnano": "^3.10.0", - "icss-utils": "^2.1.0", - "loader-utils": "^1.0.2", - "lodash.camelcase": "^4.3.0", - "object-assign": "^4.1.1", - "postcss": "^5.0.6", - "postcss-modules-extract-imports": "^1.2.0", - "postcss-modules-local-by-default": "^1.2.0", - "postcss-modules-scope": "^1.1.0", - "postcss-modules-values": "^1.3.0", - "postcss-value-parser": "^3.3.0", - "source-list-map": "^2.0.0" + "babel-code-frame": "6.26.0", + "css-selector-tokenizer": "0.7.0", + "cssnano": "3.10.0", + "icss-utils": "2.1.0", + "loader-utils": "1.1.0", + "lodash.camelcase": "4.3.0", + "object-assign": "4.1.1", + "postcss": "5.2.18", + "postcss-modules-extract-imports": "1.2.0", + "postcss-modules-local-by-default": "1.2.0", + "postcss-modules-scope": "1.1.0", + "postcss-modules-values": "1.3.0", + "postcss-value-parser": "3.3.0", + "source-list-map": "2.0.0" } }, "css-select": { @@ -2394,10 +2394,10 @@ "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", "dev": true, "requires": { - "boolbase": "~1.0.0", - "css-what": "2.1", + "boolbase": "1.0.0", + "css-what": "2.1.2", "domutils": "1.5.1", - "nth-check": "~1.0.1" + "nth-check": "1.0.2" } }, "css-selector-tokenizer": { @@ -2406,9 +2406,9 @@ "integrity": "sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=", "dev": true, "requires": { - "cssesc": "^0.1.0", - "fastparse": "^1.1.1", - "regexpu-core": "^1.0.0" + "cssesc": "0.1.0", + "fastparse": "1.1.1", + "regexpu-core": "1.0.0" }, "dependencies": { "regexpu-core": { @@ -2417,9 +2417,9 @@ "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", "dev": true, "requires": { - "regenerate": "^1.2.1", - "regjsgen": "^0.2.0", - "regjsparser": "^0.1.4" + "regenerate": "1.4.0", + "regjsgen": "0.2.0", + "regjsparser": "0.1.5" } } } @@ -2442,38 +2442,38 @@ "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=", "dev": true, "requires": { - "autoprefixer": "^6.3.1", - "decamelize": "^1.1.2", - "defined": "^1.0.0", - "has": "^1.0.1", - "object-assign": "^4.0.1", - "postcss": "^5.0.14", - "postcss-calc": "^5.2.0", - "postcss-colormin": "^2.1.8", - "postcss-convert-values": "^2.3.4", - "postcss-discard-comments": "^2.0.4", - "postcss-discard-duplicates": "^2.0.1", - "postcss-discard-empty": "^2.0.1", - "postcss-discard-overridden": "^0.1.1", - "postcss-discard-unused": "^2.2.1", - "postcss-filter-plugins": "^2.0.0", - "postcss-merge-idents": "^2.1.5", - "postcss-merge-longhand": "^2.0.1", - "postcss-merge-rules": "^2.0.3", - "postcss-minify-font-values": "^1.0.2", - "postcss-minify-gradients": "^1.0.1", - "postcss-minify-params": "^1.0.4", - "postcss-minify-selectors": "^2.0.4", - "postcss-normalize-charset": "^1.1.0", - "postcss-normalize-url": "^3.0.7", - "postcss-ordered-values": "^2.1.0", - "postcss-reduce-idents": "^2.2.2", - "postcss-reduce-initial": "^1.0.0", - "postcss-reduce-transforms": "^1.0.3", - "postcss-svgo": "^2.1.1", - "postcss-unique-selectors": "^2.0.2", - "postcss-value-parser": "^3.2.3", - "postcss-zindex": "^2.0.1" + "autoprefixer": "6.7.7", + "decamelize": "1.2.0", + "defined": "1.0.0", + "has": "1.0.3", + "object-assign": "4.1.1", + "postcss": "5.2.18", + "postcss-calc": "5.3.1", + "postcss-colormin": "2.2.2", + "postcss-convert-values": "2.6.1", + "postcss-discard-comments": "2.0.4", + "postcss-discard-duplicates": "2.1.0", + "postcss-discard-empty": "2.1.0", + "postcss-discard-overridden": "0.1.1", + "postcss-discard-unused": "2.2.3", + "postcss-filter-plugins": "2.0.3", + "postcss-merge-idents": "2.1.7", + "postcss-merge-longhand": "2.0.2", + "postcss-merge-rules": "2.1.2", + "postcss-minify-font-values": "1.0.5", + "postcss-minify-gradients": "1.0.5", + "postcss-minify-params": "1.2.2", + "postcss-minify-selectors": "2.1.1", + "postcss-normalize-charset": "1.1.1", + "postcss-normalize-url": "3.0.8", + "postcss-ordered-values": "2.2.3", + "postcss-reduce-idents": "2.4.0", + "postcss-reduce-initial": "1.0.1", + "postcss-reduce-transforms": "1.0.4", + "postcss-svgo": "2.1.6", + "postcss-unique-selectors": "2.0.2", + "postcss-value-parser": "3.3.0", + "postcss-zindex": "2.2.0" } }, "csso": { @@ -2482,8 +2482,8 @@ "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=", "dev": true, "requires": { - "clap": "^1.0.9", - "source-map": "^0.5.3" + "clap": "1.2.3", + "source-map": "0.5.7" } }, "cyclist": { @@ -2525,7 +2525,7 @@ "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dev": true, "requires": { - "object-keys": "^1.0.12" + "object-keys": "1.0.12" } }, "define-property": { @@ -2534,8 +2534,8 @@ "integrity": "sha1-1Flono1lS6d+AqgX+HENcCyxbp0=", "dev": true, "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" + "is-descriptor": "1.0.2", + "isobject": "3.0.1" }, "dependencies": { "is-accessor-descriptor": { @@ -2544,7 +2544,7 @@ "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-data-descriptor": { @@ -2553,7 +2553,7 @@ "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-descriptor": { @@ -2562,9 +2562,9 @@ "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", "dev": true, "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" } }, "kind-of": { @@ -2587,8 +2587,8 @@ "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", "dev": true, "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" } }, "detect-indent": { @@ -2597,7 +2597,7 @@ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", "dev": true, "requires": { - "repeating": "^2.0.0" + "repeating": "2.0.1" } }, "diffie-hellman": { @@ -2606,9 +2606,9 @@ "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" + "bn.js": "4.11.8", + "miller-rabin": "4.0.1", + "randombytes": "2.0.6" } }, "dir-glob": { @@ -2617,8 +2617,8 @@ "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", "dev": true, "requires": { - "arrify": "^1.0.1", - "path-type": "^3.0.0" + "arrify": "1.0.1", + "path-type": "3.0.0" } }, "dom-converter": { @@ -2627,7 +2627,7 @@ "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", "dev": true, "requires": { - "utila": "~0.4" + "utila": "0.4.0" } }, "dom-serializer": { @@ -2636,8 +2636,8 @@ "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", "dev": true, "requires": { - "domelementtype": "~1.1.1", - "entities": "~1.1.1" + "domelementtype": "1.1.3", + "entities": "1.1.2" }, "dependencies": { "domelementtype": { @@ -2666,7 +2666,7 @@ "integrity": "sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=", "dev": true, "requires": { - "domelementtype": "1" + "domelementtype": "1.3.1" } }, "domutils": { @@ -2675,8 +2675,8 @@ "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", "dev": true, "requires": { - "dom-serializer": "0", - "domelementtype": "1" + "dom-serializer": "0.1.0", + "domelementtype": "1.3.1" } }, "duplexify": { @@ -2685,10 +2685,10 @@ "integrity": "sha512-vM58DwdnKmty+FSPzT14K9JXb90H+j5emaR4KYbr2KTIz00WHGbWOe5ghQTx233ZCLZtrGDALzKwcjEtSt35mA==", "dev": true, "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" + "end-of-stream": "1.4.1", + "inherits": "2.0.3", + "readable-stream": "2.3.6", + "stream-shift": "1.0.0" } }, "electron-to-chromium": { @@ -2703,13 +2703,13 @@ "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", "dev": true, "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" + "bn.js": "4.11.8", + "brorand": "1.1.0", + "hash.js": "1.1.7", + "hmac-drbg": "1.0.1", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1", + "minimalistic-crypto-utils": "1.0.1" } }, "emojis-list": { @@ -2723,7 +2723,7 @@ "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", "requires": { - "iconv-lite": "~0.4.13" + "iconv-lite": "0.4.23" } }, "end-of-stream": { @@ -2732,7 +2732,7 @@ "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", "dev": true, "requires": { - "once": "^1.4.0" + "once": "1.4.0" } }, "enhanced-resolve": { @@ -2741,9 +2741,9 @@ "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.4.0", - "tapable": "^1.0.0" + "graceful-fs": "4.1.11", + "memory-fs": "0.4.1", + "tapable": "1.1.1" } }, "entities": { @@ -2758,7 +2758,7 @@ "integrity": "sha1-RoTXF3mtOa8Xfj8AeZb3xnyFJhg=", "dev": true, "requires": { - "prr": "~1.0.1" + "prr": "1.0.1" } }, "es-abstract": { @@ -2767,11 +2767,11 @@ "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", "dev": true, "requires": { - "es-to-primitive": "^1.1.1", - "function-bind": "^1.1.1", - "has": "^1.0.1", - "is-callable": "^1.1.3", - "is-regex": "^1.0.4" + "es-to-primitive": "1.2.0", + "function-bind": "1.1.1", + "has": "1.0.3", + "is-callable": "1.1.4", + "is-regex": "1.0.4" } }, "es-to-primitive": { @@ -2780,9 +2780,9 @@ "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", "dev": true, "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "is-callable": "1.1.4", + "is-date-object": "1.0.1", + "is-symbol": "1.0.2" } }, "escape-string-regexp": { @@ -2796,8 +2796,8 @@ "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", "dev": true, "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" + "esrecurse": "4.2.1", + "estraverse": "4.2.0" } }, "esprima": { @@ -2812,7 +2812,7 @@ "integrity": "sha1-AHo7n9vCs7uH5IeeoZyS/b05Qs8=", "dev": true, "requires": { - "estraverse": "^4.1.0" + "estraverse": "4.2.0" } }, "estraverse": { @@ -2839,8 +2839,8 @@ "integrity": "sha1-f8vbGY3HGVlDLv4ThCaE4FJaywI=", "dev": true, "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" + "md5.js": "1.3.5", + "safe-buffer": "5.1.2" } }, "execa": { @@ -2849,13 +2849,13 @@ "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", "dev": true, "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" + "cross-spawn": "6.0.5", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" } }, "expand-brackets": { @@ -2864,13 +2864,13 @@ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" }, "dependencies": { "define-property": { @@ -2879,7 +2879,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } }, "extend-shallow": { @@ -2888,7 +2888,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } } } @@ -2900,7 +2900,7 @@ "dev": true, "optional": true, "requires": { - "fill-range": "^2.1.0" + "fill-range": "2.2.4" }, "dependencies": { "fill-range": { @@ -2910,11 +2910,11 @@ "dev": true, "optional": true, "requires": { - "is-number": "^2.1.0", - "isobject": "^2.0.0", - "randomatic": "^3.0.0", - "repeat-element": "^1.1.2", - "repeat-string": "^1.5.2" + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "3.0.0", + "repeat-element": "1.1.2", + "repeat-string": "1.6.1" } }, "is-number": { @@ -2924,7 +2924,7 @@ "dev": true, "optional": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" } }, "isobject": { @@ -2945,8 +2945,8 @@ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" }, "dependencies": { "is-extendable": { @@ -2955,7 +2955,7 @@ "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", "dev": true, "requires": { - "is-plain-object": "^2.0.4" + "is-plain-object": "2.0.4" } } } @@ -2966,14 +2966,14 @@ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "array-unique": "0.3.2", + "define-property": "1.0.0", + "expand-brackets": "2.1.4", + "extend-shallow": "2.0.1", + "fragment-cache": "0.2.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" }, "dependencies": { "define-property": { @@ -2982,7 +2982,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "^1.0.0" + "is-descriptor": "1.0.2" } }, "extend-shallow": { @@ -2991,7 +2991,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } }, "is-accessor-descriptor": { @@ -3000,7 +3000,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-data-descriptor": { @@ -3009,7 +3009,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-descriptor": { @@ -3018,9 +3018,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" } }, "kind-of": { @@ -3054,13 +3054,13 @@ "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", "requires": { - "core-js": "^1.0.0", - "isomorphic-fetch": "^2.1.1", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.18" + "core-js": "1.2.7", + "isomorphic-fetch": "2.2.1", + "loose-envify": "1.3.1", + "object-assign": "4.1.1", + "promise": "7.3.1", + "setimmediate": "1.0.5", + "ua-parser-js": "0.7.18" } }, "figgy-pudding": { @@ -3082,10 +3082,10 @@ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" }, "dependencies": { "extend-shallow": { @@ -3094,7 +3094,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } } } @@ -3105,9 +3105,9 @@ "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", "dev": true, "requires": { - "commondir": "^1.0.1", - "make-dir": "^1.0.0", - "pkg-dir": "^2.0.0" + "commondir": "1.0.1", + "make-dir": "1.3.0", + "pkg-dir": "2.0.0" } }, "find-up": { @@ -3116,7 +3116,7 @@ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "locate-path": "^2.0.0" + "locate-path": "2.0.0" } }, "flatten": { @@ -3131,8 +3131,8 @@ "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", "dev": true, "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.4" + "inherits": "2.0.3", + "readable-stream": "2.3.6" } }, "for-in": { @@ -3148,7 +3148,7 @@ "dev": true, "optional": true, "requires": { - "for-in": "^1.0.1" + "for-in": "1.0.2" } }, "fragment-cache": { @@ -3157,7 +3157,7 @@ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dev": true, "requires": { - "map-cache": "^0.2.2" + "map-cache": "0.2.2" } }, "from2": { @@ -3166,8 +3166,8 @@ "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", "dev": true, "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" + "inherits": "2.0.3", + "readable-stream": "2.3.6" } }, "fs-extra": { @@ -3175,9 +3175,9 @@ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^3.0.0", - "universalify": "^0.1.0" + "graceful-fs": "4.1.11", + "jsonfile": "3.0.1", + "universalify": "0.1.2" } }, "fs-readdir-recursive": { @@ -3192,10 +3192,10 @@ "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" + "graceful-fs": "4.1.11", + "iferr": "0.1.5", + "imurmurhash": "0.1.4", + "readable-stream": "2.3.6" } }, "fs.realpath": { @@ -3210,8 +3210,8 @@ "dev": true, "optional": true, "requires": { - "nan": "^2.9.2", - "node-pre-gyp": "^0.10.0" + "nan": "2.10.0", + "node-pre-gyp": "0.10.0" }, "dependencies": { "abbrev": { @@ -3237,8 +3237,8 @@ "dev": true, "optional": true, "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" + "delegates": "1.0.0", + "readable-stream": "2.3.6" } }, "balanced-match": { @@ -3251,7 +3251,7 @@ "bundled": true, "dev": true, "requires": { - "balanced-match": "^1.0.0", + "balanced-match": "1.0.0", "concat-map": "0.0.1" } }, @@ -3315,7 +3315,7 @@ "dev": true, "optional": true, "requires": { - "minipass": "^2.2.1" + "minipass": "2.2.4" } }, "fs.realpath": { @@ -3330,14 +3330,14 @@ "dev": true, "optional": true, "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" + "aproba": "1.2.0", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" } }, "glob": { @@ -3346,12 +3346,12 @@ "dev": true, "optional": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" } }, "has-unicode": { @@ -3366,7 +3366,7 @@ "dev": true, "optional": true, "requires": { - "safer-buffer": "^2.1.0" + "safer-buffer": "2.1.2" } }, "ignore-walk": { @@ -3375,7 +3375,7 @@ "dev": true, "optional": true, "requires": { - "minimatch": "^3.0.4" + "minimatch": "3.0.4" } }, "inflight": { @@ -3384,8 +3384,8 @@ "dev": true, "optional": true, "requires": { - "once": "^1.3.0", - "wrappy": "1" + "once": "1.4.0", + "wrappy": "1.0.2" } }, "inherits": { @@ -3404,7 +3404,7 @@ "bundled": true, "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "number-is-nan": "1.0.1" } }, "isarray": { @@ -3418,7 +3418,7 @@ "bundled": true, "dev": true, "requires": { - "brace-expansion": "^1.1.7" + "brace-expansion": "1.1.11" } }, "minimist": { @@ -3431,8 +3431,8 @@ "bundled": true, "dev": true, "requires": { - "safe-buffer": "^5.1.1", - "yallist": "^3.0.0" + "safe-buffer": "5.1.1", + "yallist": "3.0.2" } }, "minizlib": { @@ -3441,7 +3441,7 @@ "dev": true, "optional": true, "requires": { - "minipass": "^2.2.1" + "minipass": "2.2.4" } }, "mkdirp": { @@ -3464,9 +3464,9 @@ "dev": true, "optional": true, "requires": { - "debug": "^2.1.2", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" + "debug": "2.6.9", + "iconv-lite": "0.4.21", + "sax": "1.2.4" } }, "node-pre-gyp": { @@ -3475,16 +3475,16 @@ "dev": true, "optional": true, "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.0", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.1.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" + "detect-libc": "1.0.3", + "mkdirp": "0.5.1", + "needle": "2.2.0", + "nopt": "4.0.1", + "npm-packlist": "1.1.10", + "npmlog": "4.1.2", + "rc": "1.2.7", + "rimraf": "2.6.2", + "semver": "5.5.0", + "tar": "4.4.1" } }, "nopt": { @@ -3493,8 +3493,8 @@ "dev": true, "optional": true, "requires": { - "abbrev": "1", - "osenv": "^0.1.4" + "abbrev": "1.1.1", + "osenv": "0.1.5" } }, "npm-bundled": { @@ -3509,8 +3509,8 @@ "dev": true, "optional": true, "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" + "ignore-walk": "3.0.1", + "npm-bundled": "1.0.3" } }, "npmlog": { @@ -3519,10 +3519,10 @@ "dev": true, "optional": true, "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" } }, "number-is-nan": { @@ -3541,7 +3541,7 @@ "bundled": true, "dev": true, "requires": { - "wrappy": "1" + "wrappy": "1.0.2" } }, "os-homedir": { @@ -3562,8 +3562,8 @@ "dev": true, "optional": true, "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" } }, "path-is-absolute": { @@ -3584,10 +3584,10 @@ "dev": true, "optional": true, "requires": { - "deep-extend": "^0.5.1", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" + "deep-extend": "0.5.1", + "ini": "1.3.5", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" }, "dependencies": { "minimist": { @@ -3604,13 +3604,13 @@ "dev": true, "optional": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.1", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } }, "rimraf": { @@ -3619,7 +3619,7 @@ "dev": true, "optional": true, "requires": { - "glob": "^7.0.5" + "glob": "7.1.2" } }, "safe-buffer": { @@ -3662,9 +3662,9 @@ "bundled": true, "dev": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" } }, "string_decoder": { @@ -3673,7 +3673,7 @@ "dev": true, "optional": true, "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "5.1.1" } }, "strip-ansi": { @@ -3681,7 +3681,7 @@ "bundled": true, "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "2.1.1" } }, "strip-json-comments": { @@ -3696,13 +3696,13 @@ "dev": true, "optional": true, "requires": { - "chownr": "^1.0.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.2.4", - "minizlib": "^1.1.0", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.1", - "yallist": "^3.0.2" + "chownr": "1.0.1", + "fs-minipass": "1.2.5", + "minipass": "2.2.4", + "minizlib": "1.1.0", + "mkdirp": "0.5.1", + "safe-buffer": "5.1.1", + "yallist": "3.0.2" } }, "util-deprecate": { @@ -3717,7 +3717,7 @@ "dev": true, "optional": true, "requires": { - "string-width": "^1.0.2" + "string-width": "1.0.2" } }, "wrappy": { @@ -3761,12 +3761,12 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" } }, "glob-base": { @@ -3776,8 +3776,8 @@ "dev": true, "optional": true, "requires": { - "glob-parent": "^2.0.0", - "is-glob": "^2.0.0" + "glob-parent": "2.0.0", + "is-glob": "2.0.1" }, "dependencies": { "glob-parent": { @@ -3787,7 +3787,7 @@ "dev": true, "optional": true, "requires": { - "is-glob": "^2.0.0" + "is-glob": "2.0.1" } }, "is-extglob": { @@ -3802,7 +3802,7 @@ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "is-extglob": "^1.0.0" + "is-extglob": "1.0.0" } } } @@ -3813,8 +3813,8 @@ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dev": true, "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" + "is-glob": "3.1.0", + "path-dirname": "1.0.2" }, "dependencies": { "is-glob": { @@ -3823,7 +3823,7 @@ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "requires": { - "is-extglob": "^2.1.0" + "is-extglob": "2.1.1" } } } @@ -3846,12 +3846,12 @@ "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", "dev": true, "requires": { - "array-union": "^1.0.1", - "dir-glob": "^2.0.0", - "glob": "^7.1.2", - "ignore": "^3.3.5", - "pify": "^3.0.0", - "slash": "^1.0.0" + "array-union": "1.0.2", + "dir-glob": "2.0.0", + "glob": "7.1.2", + "ignore": "3.3.10", + "pify": "3.0.0", + "slash": "1.0.0" } }, "graceful-fs": { @@ -3870,7 +3870,7 @@ "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=", "dev": true, "requires": { - "function-bind": "^1.1.1" + "function-bind": "1.1.1" } }, "has-ansi": { @@ -3878,7 +3878,7 @@ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "2.1.1" } }, "has-flag": { @@ -3899,9 +3899,9 @@ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dev": true, "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" + "get-value": "2.0.6", + "has-values": "1.0.0", + "isobject": "3.0.1" } }, "has-values": { @@ -3910,8 +3910,8 @@ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dev": true, "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" + "is-number": "3.0.0", + "kind-of": "4.0.0" }, "dependencies": { "kind-of": { @@ -3920,7 +3920,7 @@ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -3931,8 +3931,8 @@ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", "dev": true, "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "2.0.3", + "safe-buffer": "5.1.2" } }, "hash.js": { @@ -3941,8 +3941,8 @@ "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dev": true, "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" } }, "he": { @@ -3956,11 +3956,11 @@ "resolved": "https://registry.npmjs.org/history/-/history-4.7.2.tgz", "integrity": "sha1-IrXH8xYzxbgCHH9KipVKwTnujVs=", "requires": { - "invariant": "^2.2.1", - "loose-envify": "^1.2.0", - "resolve-pathname": "^2.2.0", - "value-equal": "^0.4.0", - "warning": "^3.0.0" + "invariant": "2.2.4", + "loose-envify": "1.3.1", + "resolve-pathname": "2.2.0", + "value-equal": "0.4.0", + "warning": "3.0.0" }, "dependencies": { "warning": { @@ -3968,7 +3968,7 @@ "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", "requires": { - "loose-envify": "^1.0.0" + "loose-envify": "1.3.1" } } } @@ -3979,9 +3979,9 @@ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "dev": true, "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" + "hash.js": "1.1.7", + "minimalistic-assert": "1.0.1", + "minimalistic-crypto-utils": "1.0.1" } }, "hoist-non-react-statics": { @@ -3995,8 +3995,8 @@ "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", "dev": true, "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.1" + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" } }, "html-comment-regex": { @@ -4011,13 +4011,13 @@ "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", "dev": true, "requires": { - "camel-case": "3.0.x", - "clean-css": "4.2.x", - "commander": "2.17.x", - "he": "1.2.x", - "param-case": "2.1.x", - "relateurl": "0.2.x", - "uglify-js": "3.4.x" + "camel-case": "3.0.0", + "clean-css": "4.2.1", + "commander": "2.17.1", + "he": "1.2.0", + "param-case": "2.1.1", + "relateurl": "0.2.7", + "uglify-js": "3.4.9" }, "dependencies": { "commander": { @@ -4034,12 +4034,12 @@ "integrity": "sha1-sBq71yOsqqeze2r0SS69oD2d03s=", "dev": true, "requires": { - "html-minifier": "^3.2.3", - "loader-utils": "^0.2.16", - "lodash": "^4.17.3", - "pretty-error": "^2.0.2", - "tapable": "^1.0.0", - "toposort": "^1.0.0", + "html-minifier": "3.5.21", + "loader-utils": "0.2.17", + "lodash": "4.17.10", + "pretty-error": "2.1.1", + "tapable": "1.1.1", + "toposort": "1.0.7", "util.promisify": "1.0.0" }, "dependencies": { @@ -4049,10 +4049,10 @@ "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", "dev": true, "requires": { - "big.js": "^3.1.3", - "emojis-list": "^2.0.0", - "json5": "^0.5.0", - "object-assign": "^4.0.1" + "big.js": "3.2.0", + "emojis-list": "2.1.0", + "json5": "0.5.1", + "object-assign": "4.1.1" } } } @@ -4063,10 +4063,10 @@ "integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=", "dev": true, "requires": { - "domelementtype": "1", - "domhandler": "2.1", - "domutils": "1.1", - "readable-stream": "1.0" + "domelementtype": "1.3.1", + "domhandler": "2.1.0", + "domutils": "1.1.6", + "readable-stream": "1.0.34" }, "dependencies": { "domutils": { @@ -4075,7 +4075,7 @@ "integrity": "sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU=", "dev": true, "requires": { - "domelementtype": "1" + "domelementtype": "1.3.1" } }, "isarray": { @@ -4090,10 +4090,10 @@ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", + "core-util-is": "1.0.2", + "inherits": "2.0.3", "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "string_decoder": "0.10.31" } }, "string_decoder": { @@ -4115,7 +4115,7 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": "2.1.2" } }, "icss-replace-symbols": { @@ -4130,7 +4130,7 @@ "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", "dev": true, "requires": { - "postcss": "^6.0.1" + "postcss": "6.0.23" }, "dependencies": { "ansi-styles": { @@ -4139,7 +4139,7 @@ "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", "dev": true, "requires": { - "color-convert": "^1.9.0" + "color-convert": "1.9.2" } }, "chalk": { @@ -4148,9 +4148,9 @@ "integrity": "sha1-GMSasWoDe26wFSzIPjRxM4IVtm4=", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.4.0" } }, "has-flag": { @@ -4165,9 +4165,9 @@ "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=", "dev": true, "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" + "chalk": "2.4.1", + "source-map": "0.6.1", + "supports-color": "5.4.0" } }, "source-map": { @@ -4182,7 +4182,7 @@ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "3.0.0" } } } @@ -4216,8 +4216,8 @@ "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", "dev": true, "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" + "pkg-dir": "3.0.0", + "resolve-cwd": "2.0.0" }, "dependencies": { "find-up": { @@ -4226,7 +4226,7 @@ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "locate-path": "^3.0.0" + "locate-path": "3.0.0" } }, "locate-path": { @@ -4235,8 +4235,8 @@ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "p-locate": "3.0.0", + "path-exists": "3.0.0" } }, "p-limit": { @@ -4245,7 +4245,7 @@ "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", "dev": true, "requires": { - "p-try": "^2.0.0" + "p-try": "2.0.0" } }, "p-locate": { @@ -4254,7 +4254,7 @@ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "p-limit": "^2.0.0" + "p-limit": "2.1.0" } }, "p-try": { @@ -4269,7 +4269,7 @@ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, "requires": { - "find-up": "^3.0.0" + "find-up": "3.0.0" } } } @@ -4297,8 +4297,8 @@ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "requires": { - "once": "^1.3.0", - "wrappy": "1" + "once": "1.4.0", + "wrappy": "1.0.2" } }, "inherits": { @@ -4317,7 +4317,7 @@ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", "integrity": "sha1-YQ88ksk1nOHbYW5TgAjSP/NRWOY=", "requires": { - "loose-envify": "^1.0.0" + "loose-envify": "1.3.1" } }, "invert-kv": { @@ -4338,7 +4338,7 @@ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" } }, "is-binary-path": { @@ -4347,7 +4347,7 @@ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "dev": true, "requires": { - "binary-extensions": "^1.0.0" + "binary-extensions": "1.11.0" } }, "is-buffer": { @@ -4368,7 +4368,7 @@ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" } }, "is-date-object": { @@ -4383,9 +4383,9 @@ "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", "dev": true, "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" }, "dependencies": { "kind-of": { @@ -4410,7 +4410,7 @@ "dev": true, "optional": true, "requires": { - "is-primitive": "^2.0.0" + "is-primitive": "2.0.0" } }, "is-extendable": { @@ -4431,7 +4431,7 @@ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "number-is-nan": "1.0.1" } }, "is-fullwidth-code-point": { @@ -4446,7 +4446,7 @@ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", "dev": true, "requires": { - "is-extglob": "^2.1.1" + "is-extglob": "2.1.1" } }, "is-number": { @@ -4455,7 +4455,7 @@ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" } }, "is-plain-obj": { @@ -4470,7 +4470,7 @@ "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", "dev": true, "requires": { - "isobject": "^3.0.1" + "isobject": "3.0.1" } }, "is-posix-bracket": { @@ -4493,7 +4493,7 @@ "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", "dev": true, "requires": { - "has": "^1.0.1" + "has": "1.0.3" } }, "is-stream": { @@ -4507,7 +4507,7 @@ "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=", "dev": true, "requires": { - "html-comment-regex": "^1.1.0" + "html-comment-regex": "1.1.1" } }, "is-symbol": { @@ -4516,7 +4516,7 @@ "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", "dev": true, "requires": { - "has-symbols": "^1.0.0" + "has-symbols": "1.0.0" } }, "is-windows": { @@ -4548,8 +4548,8 @@ "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", "requires": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" + "node-fetch": "1.7.3", + "whatwg-fetch": "2.0.4" } }, "js-base64": { @@ -4569,8 +4569,8 @@ "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", "dev": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^2.6.0" + "argparse": "1.0.10", + "esprima": "2.7.3" } }, "jsesc": { @@ -4602,7 +4602,7 @@ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", "requires": { - "graceful-fs": "^4.1.6" + "graceful-fs": "4.1.11" } }, "jvm-npm": { @@ -4616,7 +4616,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } }, "lcid": { @@ -4625,7 +4625,7 @@ "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", "dev": true, "requires": { - "invert-kv": "^2.0.0" + "invert-kv": "2.0.0" } }, "less-loader": { @@ -4634,9 +4634,9 @@ "integrity": "sha1-LBNSxbCaT4QQFJAnT9UWdN5BNj4=", "dev": true, "requires": { - "clone": "^2.1.1", - "loader-utils": "^1.1.0", - "pify": "^3.0.0" + "clone": "2.1.1", + "loader-utils": "1.1.0", + "pify": "3.0.0" }, "dependencies": { "clone": { @@ -4665,9 +4665,9 @@ "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", "dev": true, "requires": { - "big.js": "^3.1.3", - "emojis-list": "^2.0.0", - "json5": "^0.5.0" + "big.js": "3.2.0", + "emojis-list": "2.1.0", + "json5": "0.5.1" } }, "locate-path": { @@ -4676,8 +4676,8 @@ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" + "p-locate": "2.0.0", + "path-exists": "3.0.0" } }, "lodash": { @@ -4718,8 +4718,8 @@ "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz", "integrity": "sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=", "requires": { - "lodash._reinterpolate": "~3.0.0", - "lodash.templatesettings": "^4.0.0" + "lodash._reinterpolate": "3.0.0", + "lodash.templatesettings": "4.1.0" } }, "lodash.templatesettings": { @@ -4727,7 +4727,7 @@ "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz", "integrity": "sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=", "requires": { - "lodash._reinterpolate": "~3.0.0" + "lodash._reinterpolate": "3.0.0" } }, "lodash.uniq": { @@ -4741,7 +4741,7 @@ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", "requires": { - "js-tokens": "^3.0.0" + "js-tokens": "3.0.2" } }, "lower-case": { @@ -4756,7 +4756,7 @@ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, "requires": { - "yallist": "^3.0.2" + "yallist": "3.0.3" } }, "make-dir": { @@ -4765,7 +4765,7 @@ "integrity": "sha1-ecEDO4BRW9bSTsmTPoYMp17ifww=", "dev": true, "requires": { - "pify": "^3.0.0" + "pify": "3.0.0" }, "dependencies": { "pify": { @@ -4782,7 +4782,7 @@ "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", "dev": true, "requires": { - "p-defer": "^1.0.0" + "p-defer": "1.0.0" } }, "map-cache": { @@ -4797,7 +4797,7 @@ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dev": true, "requires": { - "object-visit": "^1.0.0" + "object-visit": "1.0.1" } }, "math-expression-evaluator": { @@ -4819,9 +4819,9 @@ "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "hash-base": "3.0.4", + "inherits": "2.0.3", + "safe-buffer": "5.1.2" } }, "mem": { @@ -4830,9 +4830,9 @@ "integrity": "sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA==", "dev": true, "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^1.0.0", - "p-is-promise": "^1.1.0" + "map-age-cleaner": "0.1.3", + "mimic-fn": "1.2.0", + "p-is-promise": "1.1.0" } }, "memory-fs": { @@ -4841,8 +4841,8 @@ "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", "dev": true, "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" + "errno": "0.1.7", + "readable-stream": "2.3.6" } }, "micromatch": { @@ -4851,19 +4851,19 @@ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.2", + "nanomatch": "1.2.13", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" }, "dependencies": { "kind-of": { @@ -4880,8 +4880,8 @@ "integrity": "sha1-8IA1HIZbDcViqEYpZtqlNUPHik0=", "dev": true, "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" + "bn.js": "4.11.8", + "brorand": "1.1.0" } }, "mimic-fn": { @@ -4907,7 +4907,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", "requires": { - "brace-expansion": "^1.1.7" + "brace-expansion": "1.1.11" } }, "minimist": { @@ -4921,16 +4921,16 @@ "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", "dev": true, "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" + "concat-stream": "1.6.2", + "duplexify": "3.6.1", + "end-of-stream": "1.4.1", + "flush-write-stream": "1.0.3", + "from2": "2.3.0", + "parallel-transform": "1.1.0", + "pump": "3.0.0", + "pumpify": "1.5.1", + "stream-each": "1.2.3", + "through2": "2.0.5" } }, "mixin-deep": { @@ -4939,8 +4939,8 @@ "integrity": "sha1-pJ5yaNzhoNlpjkUybFYm3zVD0P4=", "dev": true, "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" + "for-in": "1.0.2", + "is-extendable": "1.0.1" }, "dependencies": { "is-extendable": { @@ -4949,7 +4949,7 @@ "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", "dev": true, "requires": { - "is-plain-object": "^2.0.4" + "is-plain-object": "2.0.4" } } } @@ -4968,12 +4968,12 @@ "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", "dev": true, "requires": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" + "aproba": "1.2.0", + "copy-concurrently": "1.0.5", + "fs-write-stream-atomic": "1.0.10", + "mkdirp": "0.5.1", + "rimraf": "2.6.3", + "run-queue": "1.0.3" } }, "ms": { @@ -4995,17 +4995,17 @@ "integrity": "sha1-uHqKpPwN6P5r6IiVs4mD/yZb0Rk=", "dev": true, "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "fragment-cache": "0.2.1", + "is-windows": "1.0.2", + "kind-of": "6.0.2", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" }, "dependencies": { "kind-of": { @@ -5034,7 +5034,7 @@ "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", "dev": true, "requires": { - "lower-case": "^1.1.1" + "lower-case": "1.1.4" } }, "node-fetch": { @@ -5042,8 +5042,8 @@ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", "integrity": "sha1-mA9vcthSEaU0fGsrwYxbhMPrR+8=", "requires": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" + "encoding": "0.1.12", + "is-stream": "1.1.0" } }, "node-libs-browser": { @@ -5052,28 +5052,28 @@ "integrity": "sha1-X5QmPUBPbkR2fXJpAf/wVHjWAN8=", "dev": true, "requires": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^1.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", + "assert": "1.4.1", + "browserify-zlib": "0.2.0", + "buffer": "4.9.1", + "console-browserify": "1.1.0", + "constants-browserify": "1.0.0", + "crypto-browserify": "3.12.0", + "domain-browser": "1.2.0", + "events": "1.1.1", + "https-browserify": "1.0.0", + "os-browserify": "0.3.0", "path-browserify": "0.0.0", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", + "process": "0.11.10", + "punycode": "1.4.1", + "querystring-es3": "0.2.1", + "readable-stream": "2.3.6", + "stream-browserify": "2.0.1", + "stream-http": "2.8.3", + "string_decoder": "1.1.1", + "timers-browserify": "2.0.10", "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.10.3", + "url": "0.11.0", + "util": "0.10.4", "vm-browserify": "0.0.4" }, "dependencies": { @@ -5091,7 +5091,7 @@ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { - "remove-trailing-separator": "^1.0.1" + "remove-trailing-separator": "1.1.0" } }, "normalize-range": { @@ -5106,10 +5106,10 @@ "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", "dev": true, "requires": { - "object-assign": "^4.0.1", - "prepend-http": "^1.0.0", - "query-string": "^4.1.0", - "sort-keys": "^1.0.0" + "object-assign": "4.1.1", + "prepend-http": "1.0.4", + "query-string": "4.3.4", + "sort-keys": "1.1.2" } }, "npm-run-path": { @@ -5118,7 +5118,7 @@ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dev": true, "requires": { - "path-key": "^2.0.0" + "path-key": "2.0.1" } }, "nth-check": { @@ -5127,7 +5127,7 @@ "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", "dev": true, "requires": { - "boolbase": "~1.0.0" + "boolbase": "1.0.0" } }, "num2fraction": { @@ -5153,9 +5153,9 @@ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dev": true, "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" + "copy-descriptor": "0.1.1", + "define-property": "0.2.5", + "kind-of": "3.2.2" }, "dependencies": { "define-property": { @@ -5164,7 +5164,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } } } @@ -5181,7 +5181,7 @@ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dev": true, "requires": { - "isobject": "^3.0.0" + "isobject": "3.0.1" } }, "object.getownpropertydescriptors": { @@ -5190,8 +5190,8 @@ "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", "dev": true, "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.5.1" + "define-properties": "1.1.3", + "es-abstract": "1.12.0" } }, "object.omit": { @@ -5201,8 +5201,8 @@ "dev": true, "optional": true, "requires": { - "for-own": "^0.1.4", - "is-extendable": "^0.1.1" + "for-own": "0.1.5", + "is-extendable": "0.1.1" } }, "object.pick": { @@ -5211,7 +5211,7 @@ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dev": true, "requires": { - "isobject": "^3.0.1" + "isobject": "3.0.1" } }, "once": { @@ -5219,7 +5219,7 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "requires": { - "wrappy": "1" + "wrappy": "1.0.2" } }, "os-browserify": { @@ -5240,9 +5240,9 @@ "integrity": "sha512-7g5e7dmXPtzcP4bgsZ8ixDVqA7oWYuEz4lOSujeWyliPai4gfVDiFIcwBg3aGCPnmSGfzOKTK3ccPn0CKv3DBw==", "dev": true, "requires": { - "execa": "^0.10.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" + "execa": "0.10.0", + "lcid": "2.0.0", + "mem": "4.0.0" } }, "os-tmpdir": { @@ -5257,9 +5257,9 @@ "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=", "dev": true, "requires": { - "graceful-fs": "^4.1.4", - "mkdirp": "^0.5.1", - "object-assign": "^4.1.0" + "graceful-fs": "4.1.11", + "mkdirp": "0.5.1", + "object-assign": "4.1.1" } }, "p-defer": { @@ -5286,7 +5286,7 @@ "integrity": "sha1-uGvV8MJWkJEcdZD8v8IBDVSzzLg=", "dev": true, "requires": { - "p-try": "^1.0.0" + "p-try": "1.0.0" } }, "p-locate": { @@ -5295,7 +5295,7 @@ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "requires": { - "p-limit": "^1.1.0" + "p-limit": "1.3.0" } }, "p-try": { @@ -5316,9 +5316,9 @@ "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", "dev": true, "requires": { - "cyclist": "~0.2.2", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" + "cyclist": "0.2.2", + "inherits": "2.0.3", + "readable-stream": "2.3.6" } }, "param-case": { @@ -5327,7 +5327,7 @@ "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", "dev": true, "requires": { - "no-case": "^2.2.0" + "no-case": "2.3.2" } }, "parse-asn1": { @@ -5336,11 +5336,11 @@ "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", "dev": true, "requires": { - "asn1.js": "^4.0.0", - "browserify-aes": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3" + "asn1.js": "4.10.1", + "browserify-aes": "1.2.0", + "create-hash": "1.2.0", + "evp_bytestokey": "1.0.3", + "pbkdf2": "3.0.17" } }, "parse-glob": { @@ -5350,10 +5350,10 @@ "dev": true, "optional": true, "requires": { - "glob-base": "^0.3.0", - "is-dotfile": "^1.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.0" + "glob-base": "0.3.0", + "is-dotfile": "1.0.3", + "is-extglob": "1.0.0", + "is-glob": "2.0.1" }, "dependencies": { "is-extglob": { @@ -5369,7 +5369,7 @@ "dev": true, "optional": true, "requires": { - "is-extglob": "^1.0.0" + "is-extglob": "1.0.0" } } } @@ -5430,7 +5430,7 @@ "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "requires": { - "pify": "^3.0.0" + "pify": "3.0.0" } }, "pbkdf2": { @@ -5439,11 +5439,11 @@ "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", "dev": true, "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "ripemd160": "2.0.2", + "safe-buffer": "5.1.2", + "sha.js": "2.4.11" } }, "pify": { @@ -5458,7 +5458,7 @@ "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", "dev": true, "requires": { - "find-up": "^2.1.0" + "find-up": "2.1.0" } }, "posix-character-classes": { @@ -5473,10 +5473,10 @@ "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", "dev": true, "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" + "chalk": "1.1.3", + "js-base64": "2.4.5", + "source-map": "0.5.7", + "supports-color": "3.2.3" }, "dependencies": { "has-flag": { @@ -5491,7 +5491,7 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "^1.0.0" + "has-flag": "1.0.0" } } } @@ -5502,9 +5502,9 @@ "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=", "dev": true, "requires": { - "postcss": "^5.0.2", - "postcss-message-helpers": "^2.0.0", - "reduce-css-calc": "^1.2.6" + "postcss": "5.2.18", + "postcss-message-helpers": "2.0.0", + "reduce-css-calc": "1.3.0" } }, "postcss-colormin": { @@ -5513,9 +5513,9 @@ "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=", "dev": true, "requires": { - "colormin": "^1.0.5", - "postcss": "^5.0.13", - "postcss-value-parser": "^3.2.3" + "colormin": "1.1.2", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" } }, "postcss-convert-values": { @@ -5524,8 +5524,8 @@ "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=", "dev": true, "requires": { - "postcss": "^5.0.11", - "postcss-value-parser": "^3.1.2" + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" } }, "postcss-discard-comments": { @@ -5534,7 +5534,7 @@ "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=", "dev": true, "requires": { - "postcss": "^5.0.14" + "postcss": "5.2.18" } }, "postcss-discard-duplicates": { @@ -5543,7 +5543,7 @@ "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=", "dev": true, "requires": { - "postcss": "^5.0.4" + "postcss": "5.2.18" } }, "postcss-discard-empty": { @@ -5552,7 +5552,7 @@ "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=", "dev": true, "requires": { - "postcss": "^5.0.14" + "postcss": "5.2.18" } }, "postcss-discard-overridden": { @@ -5561,7 +5561,7 @@ "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=", "dev": true, "requires": { - "postcss": "^5.0.16" + "postcss": "5.2.18" } }, "postcss-discard-unused": { @@ -5570,8 +5570,8 @@ "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=", "dev": true, "requires": { - "postcss": "^5.0.14", - "uniqs": "^2.0.0" + "postcss": "5.2.18", + "uniqs": "2.0.0" } }, "postcss-filter-plugins": { @@ -5580,7 +5580,7 @@ "integrity": "sha1-giRf34IzcEFkXkdxFNjlk6oYuOw=", "dev": true, "requires": { - "postcss": "^5.0.4" + "postcss": "5.2.18" } }, "postcss-merge-idents": { @@ -5589,9 +5589,9 @@ "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=", "dev": true, "requires": { - "has": "^1.0.1", - "postcss": "^5.0.10", - "postcss-value-parser": "^3.1.1" + "has": "1.0.3", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" } }, "postcss-merge-longhand": { @@ -5600,7 +5600,7 @@ "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=", "dev": true, "requires": { - "postcss": "^5.0.4" + "postcss": "5.2.18" } }, "postcss-merge-rules": { @@ -5609,11 +5609,11 @@ "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=", "dev": true, "requires": { - "browserslist": "^1.5.2", - "caniuse-api": "^1.5.2", - "postcss": "^5.0.4", - "postcss-selector-parser": "^2.2.2", - "vendors": "^1.0.0" + "browserslist": "1.7.7", + "caniuse-api": "1.6.1", + "postcss": "5.2.18", + "postcss-selector-parser": "2.2.3", + "vendors": "1.0.2" } }, "postcss-message-helpers": { @@ -5628,9 +5628,9 @@ "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=", "dev": true, "requires": { - "object-assign": "^4.0.1", - "postcss": "^5.0.4", - "postcss-value-parser": "^3.0.2" + "object-assign": "4.1.1", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" } }, "postcss-minify-gradients": { @@ -5639,8 +5639,8 @@ "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=", "dev": true, "requires": { - "postcss": "^5.0.12", - "postcss-value-parser": "^3.3.0" + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" } }, "postcss-minify-params": { @@ -5649,10 +5649,10 @@ "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=", "dev": true, "requires": { - "alphanum-sort": "^1.0.1", - "postcss": "^5.0.2", - "postcss-value-parser": "^3.0.2", - "uniqs": "^2.0.0" + "alphanum-sort": "1.0.2", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0", + "uniqs": "2.0.0" } }, "postcss-minify-selectors": { @@ -5661,10 +5661,10 @@ "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=", "dev": true, "requires": { - "alphanum-sort": "^1.0.2", - "has": "^1.0.1", - "postcss": "^5.0.14", - "postcss-selector-parser": "^2.0.0" + "alphanum-sort": "1.0.2", + "has": "1.0.3", + "postcss": "5.2.18", + "postcss-selector-parser": "2.2.3" } }, "postcss-modules-extract-imports": { @@ -5673,7 +5673,7 @@ "integrity": "sha1-ZhQOzs447wa/DT41XWm/WdFB6oU=", "dev": true, "requires": { - "postcss": "^6.0.1" + "postcss": "6.0.23" }, "dependencies": { "ansi-styles": { @@ -5682,7 +5682,7 @@ "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", "dev": true, "requires": { - "color-convert": "^1.9.0" + "color-convert": "1.9.2" } }, "chalk": { @@ -5691,9 +5691,9 @@ "integrity": "sha1-GMSasWoDe26wFSzIPjRxM4IVtm4=", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.4.0" } }, "has-flag": { @@ -5708,9 +5708,9 @@ "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=", "dev": true, "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" + "chalk": "2.4.1", + "source-map": "0.6.1", + "supports-color": "5.4.0" } }, "source-map": { @@ -5725,7 +5725,7 @@ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "3.0.0" } } } @@ -5736,8 +5736,8 @@ "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", "dev": true, "requires": { - "css-selector-tokenizer": "^0.7.0", - "postcss": "^6.0.1" + "css-selector-tokenizer": "0.7.0", + "postcss": "6.0.23" }, "dependencies": { "ansi-styles": { @@ -5746,7 +5746,7 @@ "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", "dev": true, "requires": { - "color-convert": "^1.9.0" + "color-convert": "1.9.2" } }, "chalk": { @@ -5755,9 +5755,9 @@ "integrity": "sha1-GMSasWoDe26wFSzIPjRxM4IVtm4=", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.4.0" } }, "has-flag": { @@ -5772,9 +5772,9 @@ "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=", "dev": true, "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" + "chalk": "2.4.1", + "source-map": "0.6.1", + "supports-color": "5.4.0" } }, "source-map": { @@ -5789,7 +5789,7 @@ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "3.0.0" } } } @@ -5800,8 +5800,8 @@ "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", "dev": true, "requires": { - "css-selector-tokenizer": "^0.7.0", - "postcss": "^6.0.1" + "css-selector-tokenizer": "0.7.0", + "postcss": "6.0.23" }, "dependencies": { "ansi-styles": { @@ -5810,7 +5810,7 @@ "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", "dev": true, "requires": { - "color-convert": "^1.9.0" + "color-convert": "1.9.2" } }, "chalk": { @@ -5819,9 +5819,9 @@ "integrity": "sha1-GMSasWoDe26wFSzIPjRxM4IVtm4=", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.4.0" } }, "has-flag": { @@ -5836,9 +5836,9 @@ "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=", "dev": true, "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" + "chalk": "2.4.1", + "source-map": "0.6.1", + "supports-color": "5.4.0" } }, "source-map": { @@ -5853,7 +5853,7 @@ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "3.0.0" } } } @@ -5864,8 +5864,8 @@ "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", "dev": true, "requires": { - "icss-replace-symbols": "^1.1.0", - "postcss": "^6.0.1" + "icss-replace-symbols": "1.1.0", + "postcss": "6.0.23" }, "dependencies": { "ansi-styles": { @@ -5874,7 +5874,7 @@ "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", "dev": true, "requires": { - "color-convert": "^1.9.0" + "color-convert": "1.9.2" } }, "chalk": { @@ -5883,9 +5883,9 @@ "integrity": "sha1-GMSasWoDe26wFSzIPjRxM4IVtm4=", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.4.0" } }, "has-flag": { @@ -5900,9 +5900,9 @@ "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=", "dev": true, "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" + "chalk": "2.4.1", + "source-map": "0.6.1", + "supports-color": "5.4.0" } }, "source-map": { @@ -5917,7 +5917,7 @@ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "3.0.0" } } } @@ -5928,7 +5928,7 @@ "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=", "dev": true, "requires": { - "postcss": "^5.0.5" + "postcss": "5.2.18" } }, "postcss-normalize-url": { @@ -5937,10 +5937,10 @@ "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=", "dev": true, "requires": { - "is-absolute-url": "^2.0.0", - "normalize-url": "^1.4.0", - "postcss": "^5.0.14", - "postcss-value-parser": "^3.2.3" + "is-absolute-url": "2.1.0", + "normalize-url": "1.9.1", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" } }, "postcss-ordered-values": { @@ -5949,8 +5949,8 @@ "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=", "dev": true, "requires": { - "postcss": "^5.0.4", - "postcss-value-parser": "^3.0.1" + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" } }, "postcss-reduce-idents": { @@ -5959,8 +5959,8 @@ "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=", "dev": true, "requires": { - "postcss": "^5.0.4", - "postcss-value-parser": "^3.0.2" + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" } }, "postcss-reduce-initial": { @@ -5969,7 +5969,7 @@ "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=", "dev": true, "requires": { - "postcss": "^5.0.4" + "postcss": "5.2.18" } }, "postcss-reduce-transforms": { @@ -5978,9 +5978,9 @@ "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=", "dev": true, "requires": { - "has": "^1.0.1", - "postcss": "^5.0.8", - "postcss-value-parser": "^3.0.1" + "has": "1.0.3", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" } }, "postcss-selector-parser": { @@ -5989,9 +5989,9 @@ "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=", "dev": true, "requires": { - "flatten": "^1.0.2", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" + "flatten": "1.0.2", + "indexes-of": "1.0.1", + "uniq": "1.0.1" } }, "postcss-svgo": { @@ -6000,10 +6000,10 @@ "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=", "dev": true, "requires": { - "is-svg": "^2.0.0", - "postcss": "^5.0.14", - "postcss-value-parser": "^3.2.3", - "svgo": "^0.7.0" + "is-svg": "2.1.0", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0", + "svgo": "0.7.2" } }, "postcss-unique-selectors": { @@ -6012,9 +6012,9 @@ "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=", "dev": true, "requires": { - "alphanum-sort": "^1.0.1", - "postcss": "^5.0.4", - "uniqs": "^2.0.0" + "alphanum-sort": "1.0.2", + "postcss": "5.2.18", + "uniqs": "2.0.0" } }, "postcss-value-parser": { @@ -6029,9 +6029,9 @@ "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=", "dev": true, "requires": { - "has": "^1.0.1", - "postcss": "^5.0.4", - "uniqs": "^2.0.0" + "has": "1.0.3", + "postcss": "5.2.18", + "uniqs": "2.0.0" } }, "prepend-http": { @@ -6053,8 +6053,8 @@ "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", "dev": true, "requires": { - "renderkid": "^2.0.1", - "utila": "~0.4" + "renderkid": "2.0.2", + "utila": "0.4.0" } }, "private": { @@ -6080,7 +6080,7 @@ "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", "integrity": "sha1-BktyYCsY+Q8pGSuLG8QY/9Hr078=", "requires": { - "asap": "~2.0.3" + "asap": "2.0.6" } }, "promise-inflight": { @@ -6094,8 +6094,8 @@ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz", "integrity": "sha1-BdXKd7RFPphdYPx/+MhZCUpJcQI=", "requires": { - "loose-envify": "^1.3.1", - "object-assign": "^4.1.1" + "loose-envify": "1.3.1", + "object-assign": "4.1.1" } }, "prr": { @@ -6116,12 +6116,12 @@ "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dev": true, "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.2.0", + "parse-asn1": "5.1.1", + "randombytes": "2.0.6", + "safe-buffer": "5.1.2" } }, "pump": { @@ -6130,8 +6130,8 @@ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "end-of-stream": "1.4.1", + "once": "1.4.0" } }, "pumpify": { @@ -6140,9 +6140,9 @@ "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", "dev": true, "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" + "duplexify": "3.6.1", + "inherits": "2.0.3", + "pump": "2.0.1" }, "dependencies": { "pump": { @@ -6151,8 +6151,8 @@ "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "dev": true, "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "end-of-stream": "1.4.1", + "once": "1.4.0" } } } @@ -6175,8 +6175,8 @@ "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", "dev": true, "requires": { - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" + "object-assign": "4.1.1", + "strict-uri-encode": "1.1.0" } }, "querystring": { @@ -6198,9 +6198,9 @@ "dev": true, "optional": true, "requires": { - "is-number": "^4.0.0", - "kind-of": "^6.0.0", - "math-random": "^1.0.1" + "is-number": "4.0.0", + "kind-of": "6.0.2", + "math-random": "1.0.1" }, "dependencies": { "is-number": { @@ -6225,7 +6225,7 @@ "integrity": "sha1-0wLFIpSFiISKjTAMkytEwkIx2oA=", "dev": true, "requires": { - "safe-buffer": "^5.1.0" + "safe-buffer": "5.1.2" } }, "randomfill": { @@ -6234,8 +6234,8 @@ "integrity": "sha1-ySGW/IarQr6YPxvzF3giSTHWFFg=", "dev": true, "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" + "randombytes": "2.0.6", + "safe-buffer": "5.1.2" } }, "react": { @@ -6243,10 +6243,10 @@ "resolved": "https://registry.npmjs.org/react/-/react-16.4.1.tgz", "integrity": "sha512-3GEs0giKp6E0Oh/Y9ZC60CmYgUPnp7voH9fbjWsvXtYFb4EWtgQub0ADSq0sJR0BbHc4FThLLtzlcFaFXIorwg==", "requires": { - "fbjs": "^0.8.16", - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.0" + "fbjs": "0.8.17", + "loose-envify": "1.3.1", + "object-assign": "4.1.1", + "prop-types": "15.6.2" } }, "react-dom": { @@ -6254,10 +6254,10 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.4.1.tgz", "integrity": "sha512-1Gin+wghF/7gl4Cqcvr1DxFX2Osz7ugxSwl6gBqCMpdrxHjIFUS7GYxrFftZ9Ln44FHw0JxCFD9YtZsrbR5/4A==", "requires": { - "fbjs": "^0.8.16", - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.0" + "fbjs": "0.8.17", + "loose-envify": "1.3.1", + "object-assign": "4.1.1", + "prop-types": "15.6.2" } }, "react-is": { @@ -6270,12 +6270,12 @@ "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-5.0.7.tgz", "integrity": "sha1-DcEHbZr7RnD5k/+u9EuPjBFVpMg=", "requires": { - "hoist-non-react-statics": "^2.5.0", - "invariant": "^2.0.0", - "lodash": "^4.17.5", - "lodash-es": "^4.17.5", - "loose-envify": "^1.1.0", - "prop-types": "^15.6.0" + "hoist-non-react-statics": "2.5.5", + "invariant": "2.2.4", + "lodash": "4.17.10", + "lodash-es": "4.17.10", + "loose-envify": "1.3.1", + "prop-types": "15.6.2" } }, "react-router": { @@ -6283,16 +6283,16 @@ "resolved": "https://registry.npmjs.org/react-router/-/react-router-4.4.0-beta.6.tgz", "integrity": "sha512-esR1UHsPpfvehX5Qn7wQrOTFsl4PxiaX3GaYvtFDSEioMsTl0zkASJBm1fXKgR9brUQX9kgiGq6XnCsiJU/82g==", "requires": { - "@babel/runtime": "^7.1.2", - "create-react-context": "^0.2.2", - "history": "^4.8.0-beta.0", - "hoist-non-react-statics": "^2.5.0", - "loose-envify": "^1.3.1", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.5.2", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" + "@babel/runtime": "7.2.0", + "create-react-context": "0.2.3", + "history": "4.8.0-beta.0", + "hoist-non-react-statics": "2.5.5", + "loose-envify": "1.3.1", + "path-to-regexp": "1.7.0", + "prop-types": "15.6.2", + "react-is": "16.6.3", + "tiny-invariant": "1.0.3", + "tiny-warning": "1.0.0" }, "dependencies": { "history": { @@ -6300,12 +6300,12 @@ "resolved": "https://registry.npmjs.org/history/-/history-4.8.0-beta.0.tgz", "integrity": "sha512-LDjPtGgAFDO3lZ+bumN67k0R3GWvUBLLgRJpFU2mnJ1w+D5rEbiZC1c37yPla7tx/dUzVfznt5Rmttnz0MvGdA==", "requires": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^2.2.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^0.4.0" + "@babel/runtime": "7.2.0", + "loose-envify": "1.3.1", + "resolve-pathname": "2.2.0", + "tiny-invariant": "1.0.3", + "tiny-warning": "1.0.0", + "value-equal": "0.4.0" } } } @@ -6315,11 +6315,11 @@ "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-4.4.0-alpha.1.tgz", "integrity": "sha1-EgfmmFNJ6wvXms4azhx89ni80cQ=", "requires": { - "history": "^4.7.2", - "invariant": "^2.2.4", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.1", - "react-router": "^4.4.0-alpha.1" + "history": "4.7.2", + "invariant": "2.2.4", + "loose-envify": "1.3.1", + "prop-types": "15.6.2", + "react-router": "4.4.0-beta.6" } }, "react-router-redux": { @@ -6333,13 +6333,13 @@ "integrity": "sha1-sRwn2IuP8fvgcGQ8+UsMea4bCq8=", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } }, "readdirp": { @@ -6348,10 +6348,10 @@ "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "minimatch": "^3.0.2", - "readable-stream": "^2.0.2", - "set-immediate-shim": "^1.0.1" + "graceful-fs": "4.1.11", + "minimatch": "3.0.4", + "readable-stream": "2.3.6", + "set-immediate-shim": "1.0.1" } }, "reduce-css-calc": { @@ -6360,9 +6360,9 @@ "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=", "dev": true, "requires": { - "balanced-match": "^0.4.2", - "math-expression-evaluator": "^1.2.14", - "reduce-function-call": "^1.0.1" + "balanced-match": "0.4.2", + "math-expression-evaluator": "1.2.17", + "reduce-function-call": "1.0.2" }, "dependencies": { "balanced-match": { @@ -6379,7 +6379,7 @@ "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=", "dev": true, "requires": { - "balanced-match": "^0.4.2" + "balanced-match": "0.4.2" }, "dependencies": { "balanced-match": { @@ -6395,8 +6395,8 @@ "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.0.tgz", "integrity": "sha1-qmmKkrcpMV0is0oFU9fmUzVVzAM=", "requires": { - "loose-envify": "^1.1.0", - "symbol-observable": "^1.2.0" + "loose-envify": "1.3.1", + "symbol-observable": "1.2.0" } }, "redux-immutable": { @@ -6422,9 +6422,9 @@ "integrity": "sha1-HkmWg3Ix2ot/PPQRTXG1aRoGgN0=", "dev": true, "requires": { - "babel-runtime": "^6.18.0", - "babel-types": "^6.19.0", - "private": "^0.1.6" + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "private": "0.1.8" } }, "regex-cache": { @@ -6434,7 +6434,7 @@ "dev": true, "optional": true, "requires": { - "is-equal-shallow": "^0.1.3" + "is-equal-shallow": "0.1.3" } }, "regex-not": { @@ -6443,8 +6443,8 @@ "integrity": "sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw=", "dev": true, "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" + "extend-shallow": "3.0.2", + "safe-regex": "1.1.0" } }, "regexpu-core": { @@ -6453,9 +6453,9 @@ "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", "dev": true, "requires": { - "regenerate": "^1.2.1", - "regjsgen": "^0.2.0", - "regjsparser": "^0.1.4" + "regenerate": "1.4.0", + "regjsgen": "0.2.0", + "regjsparser": "0.1.5" } }, "regjsgen": { @@ -6470,7 +6470,7 @@ "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", "dev": true, "requires": { - "jsesc": "~0.5.0" + "jsesc": "0.5.0" }, "dependencies": { "jsesc": { @@ -6499,11 +6499,11 @@ "integrity": "sha512-FsygIxevi1jSiPY9h7vZmBFUbAOcbYm9UwyiLNdVsLRs/5We9Ob5NMPbGYUTWiLq5L+ezlVdE0A8bbME5CWTpg==", "dev": true, "requires": { - "css-select": "^1.1.0", - "dom-converter": "~0.2", - "htmlparser2": "~3.3.0", - "strip-ansi": "^3.0.0", - "utila": "^0.4.0" + "css-select": "1.2.0", + "dom-converter": "0.2.0", + "htmlparser2": "3.3.0", + "strip-ansi": "3.0.1", + "utila": "0.4.0" } }, "repeat-element": { @@ -6524,7 +6524,7 @@ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", "dev": true, "requires": { - "is-finite": "^1.0.0" + "is-finite": "1.0.2" } }, "require-directory": { @@ -6545,7 +6545,7 @@ "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", "dev": true, "requires": { - "resolve-from": "^3.0.0" + "resolve-from": "3.0.0" } }, "resolve-from": { @@ -6577,7 +6577,7 @@ "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "dev": true, "requires": { - "glob": "^7.1.3" + "glob": "7.1.3" }, "dependencies": { "glob": { @@ -6586,12 +6586,12 @@ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" } } } @@ -6602,8 +6602,8 @@ "integrity": "sha1-ocGm9iR1FXe6XQeRTLyShQWFiQw=", "dev": true, "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" + "hash-base": "3.0.4", + "inherits": "2.0.3" } }, "run-queue": { @@ -6612,7 +6612,7 @@ "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", "dev": true, "requires": { - "aproba": "^1.1.1" + "aproba": "1.2.0" } }, "safe-buffer": { @@ -6627,7 +6627,7 @@ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dev": true, "requires": { - "ret": "~0.1.10" + "ret": "0.1.15" } }, "safer-buffer": { @@ -6647,8 +6647,8 @@ "integrity": "sha512-yYrjb9TX2k/J1Y5UNy3KYdZq10xhYcF8nMpAW6o3hy6Q8WSIEf9lJHG/ePnOBfziPM3fvQwfOwa13U/Fh8qTfA==", "dev": true, "requires": { - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0" + "ajv": "6.5.2", + "ajv-keywords": "3.2.0" } }, "semver": { @@ -6681,10 +6681,10 @@ "integrity": "sha1-ca5KiPD+77v1LR6mBPP7MV67YnQ=", "dev": true, "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "split-string": "3.1.0" }, "dependencies": { "extend-shallow": { @@ -6693,7 +6693,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } } } @@ -6709,8 +6709,8 @@ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "2.0.3", + "safe-buffer": "5.1.2" } }, "shebang-command": { @@ -6719,7 +6719,7 @@ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "requires": { - "shebang-regex": "^1.0.0" + "shebang-regex": "1.0.0" } }, "shebang-regex": { @@ -6746,14 +6746,14 @@ "integrity": "sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0=", "dev": true, "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" + "base": "0.11.2", + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "map-cache": "0.2.2", + "source-map": "0.5.7", + "source-map-resolve": "0.5.2", + "use": "3.1.1" }, "dependencies": { "define-property": { @@ -6762,7 +6762,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } }, "extend-shallow": { @@ -6771,7 +6771,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } } } @@ -6782,9 +6782,9 @@ "integrity": "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=", "dev": true, "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" + "define-property": "1.0.0", + "isobject": "3.0.1", + "snapdragon-util": "3.0.1" }, "dependencies": { "define-property": { @@ -6793,7 +6793,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "^1.0.0" + "is-descriptor": "1.0.2" } }, "is-accessor-descriptor": { @@ -6802,7 +6802,7 @@ "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-data-descriptor": { @@ -6811,7 +6811,7 @@ "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-descriptor": { @@ -6820,9 +6820,9 @@ "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", "dev": true, "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" } }, "kind-of": { @@ -6839,7 +6839,7 @@ "integrity": "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=", "dev": true, "requires": { - "kind-of": "^3.2.0" + "kind-of": "3.2.2" } }, "sort-keys": { @@ -6848,7 +6848,7 @@ "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", "dev": true, "requires": { - "is-plain-obj": "^1.0.0" + "is-plain-obj": "1.1.0" } }, "source-list-map": { @@ -6869,11 +6869,11 @@ "integrity": "sha1-cuLMNAlVQ+Q7LGKyxMENSpBU8lk=", "dev": true, "requires": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" + "atob": "2.1.2", + "decode-uri-component": "0.2.0", + "resolve-url": "0.2.1", + "source-map-url": "0.4.0", + "urix": "0.1.0" } }, "source-map-support": { @@ -6882,7 +6882,7 @@ "integrity": "sha1-Aoam3ovkJkEzhZTpfM6nXwosWF8=", "dev": true, "requires": { - "source-map": "^0.5.6" + "source-map": "0.5.7" } }, "source-map-url": { @@ -6897,7 +6897,7 @@ "integrity": "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=", "dev": true, "requires": { - "extend-shallow": "^3.0.0" + "extend-shallow": "3.0.2" } }, "sprintf-js": { @@ -6912,7 +6912,7 @@ "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", "dev": true, "requires": { - "figgy-pudding": "^3.5.1" + "figgy-pudding": "3.5.1" } }, "static-extend": { @@ -6921,8 +6921,8 @@ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "dev": true, "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" + "define-property": "0.2.5", + "object-copy": "0.1.0" }, "dependencies": { "define-property": { @@ -6931,7 +6931,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } } } @@ -6942,8 +6942,8 @@ "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", "dev": true, "requires": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" + "inherits": "2.0.3", + "readable-stream": "2.3.6" } }, "stream-each": { @@ -6952,8 +6952,8 @@ "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", "dev": true, "requires": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" + "end-of-stream": "1.4.1", + "stream-shift": "1.0.0" } }, "stream-http": { @@ -6962,11 +6962,11 @@ "integrity": "sha1-stJCRpKIpaJ+xP6JM6z2I95lFPw=", "dev": true, "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" + "builtin-status-codes": "3.0.0", + "inherits": "2.0.3", + "readable-stream": "2.3.6", + "to-arraybuffer": "1.0.1", + "xtend": "4.0.1" } }, "stream-shift": { @@ -6987,8 +6987,8 @@ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" }, "dependencies": { "ansi-regex": { @@ -7003,7 +7003,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "3.0.0" } } } @@ -7014,7 +7014,7 @@ "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "5.1.2" } }, "strip-ansi": { @@ -7022,7 +7022,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "2.1.1" } }, "strip-eof": { @@ -7037,8 +7037,8 @@ "integrity": "sha1-aMUuXrKvycqStidL4nfuWa6jqFI=", "dev": true, "requires": { - "loader-utils": "^1.1.0", - "schema-utils": "^0.4.5" + "loader-utils": "1.1.0", + "schema-utils": "0.4.5" } }, "supports-color": { @@ -7047,7 +7047,7 @@ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "3.0.0" } }, "svgo": { @@ -7056,13 +7056,13 @@ "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=", "dev": true, "requires": { - "coa": "~1.0.1", - "colors": "~1.1.2", - "csso": "~2.3.1", - "js-yaml": "~3.7.0", - "mkdirp": "~0.5.1", - "sax": "~1.2.1", - "whet.extend": "~0.9.9" + "coa": "1.0.4", + "colors": "1.1.2", + "csso": "2.3.2", + "js-yaml": "3.7.0", + "mkdirp": "0.5.1", + "sax": "1.2.4", + "whet.extend": "0.9.9" } }, "symbol-observable": { @@ -7082,9 +7082,9 @@ "integrity": "sha512-ogyZye4DFqOtMzT92Y3Nxxw8OvXmL39HOALro4fc+EUYFFF9G/kk0znkvwMz6PPYgBtdKAodh3FPR70eugdaQA==", "dev": true, "requires": { - "commander": "~2.17.1", - "source-map": "~0.6.1", - "source-map-support": "~0.5.6" + "commander": "2.17.1", + "source-map": "0.6.1", + "source-map-support": "0.5.9" }, "dependencies": { "commander": { @@ -7105,8 +7105,8 @@ "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==", "dev": true, "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "buffer-from": "1.1.1", + "source-map": "0.6.1" } } } @@ -7117,14 +7117,14 @@ "integrity": "sha512-QW7RACLS89RalHtLDb0s8+Iqcs/IAEw1rnVrV+mS7Gx1kgPG8o1g33JhAGDgc/CQ84hLsTW5WrAMdVysh692yg==", "dev": true, "requires": { - "cacache": "^11.0.2", - "find-cache-dir": "^2.0.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^1.4.0", - "source-map": "^0.6.1", - "terser": "^3.8.1", - "webpack-sources": "^1.1.0", - "worker-farm": "^1.5.2" + "cacache": "11.3.2", + "find-cache-dir": "2.0.0", + "schema-utils": "1.0.0", + "serialize-javascript": "1.6.0", + "source-map": "0.6.1", + "terser": "3.13.1", + "webpack-sources": "1.3.0", + "worker-farm": "1.6.0" }, "dependencies": { "find-cache-dir": { @@ -7133,9 +7133,9 @@ "integrity": "sha512-LDUY6V1Xs5eFskUVYtIwatojt6+9xC9Chnlk/jYOOvn3FAFfSaWddxahDGyNHh0b2dMXa6YW2m0tk8TdVaXHlA==", "dev": true, "requires": { - "commondir": "^1.0.1", - "make-dir": "^1.0.0", - "pkg-dir": "^3.0.0" + "commondir": "1.0.1", + "make-dir": "1.3.0", + "pkg-dir": "3.0.0" } }, "find-up": { @@ -7144,7 +7144,7 @@ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "locate-path": "^3.0.0" + "locate-path": "3.0.0" } }, "locate-path": { @@ -7153,8 +7153,8 @@ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "p-locate": "3.0.0", + "path-exists": "3.0.0" } }, "p-limit": { @@ -7163,7 +7163,7 @@ "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", "dev": true, "requires": { - "p-try": "^2.0.0" + "p-try": "2.0.0" } }, "p-locate": { @@ -7172,7 +7172,7 @@ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "p-limit": "^2.0.0" + "p-limit": "2.1.0" } }, "p-try": { @@ -7187,7 +7187,7 @@ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, "requires": { - "find-up": "^3.0.0" + "find-up": "3.0.0" } }, "schema-utils": { @@ -7196,9 +7196,9 @@ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dev": true, "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" + "ajv": "6.5.2", + "ajv-errors": "1.0.1", + "ajv-keywords": "3.2.0" } }, "source-map": { @@ -7215,8 +7215,8 @@ "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" + "readable-stream": "2.3.6", + "xtend": "4.0.1" } }, "timers-browserify": { @@ -7225,7 +7225,7 @@ "integrity": "sha1-HSjj0qrfHVpZlsTp+VYBzQU0gK4=", "dev": true, "requires": { - "setimmediate": "^1.0.4" + "setimmediate": "1.0.5" } }, "tiny-invariant": { @@ -7256,7 +7256,7 @@ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" } }, "to-regex": { @@ -7265,10 +7265,10 @@ "integrity": "sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4=", "dev": true, "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "regex-not": "1.0.2", + "safe-regex": "1.1.0" } }, "to-regex-range": { @@ -7277,8 +7277,8 @@ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "is-number": "3.0.0", + "repeat-string": "1.6.1" } }, "toposort": { @@ -7322,8 +7322,8 @@ "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", "dev": true, "requires": { - "commander": "~2.17.1", - "source-map": "~0.6.1" + "commander": "2.17.1", + "source-map": "0.6.1" }, "dependencies": { "commander": { @@ -7346,10 +7346,10 @@ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", "dev": true, "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^0.4.3" + "arr-union": "3.1.0", + "get-value": "2.0.6", + "is-extendable": "0.1.1", + "set-value": "0.4.3" }, "dependencies": { "extend-shallow": { @@ -7358,7 +7358,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } }, "set-value": { @@ -7367,10 +7367,10 @@ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", "dev": true, "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "to-object-path": "0.3.0" } } } @@ -7393,7 +7393,7 @@ "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", "dev": true, "requires": { - "unique-slug": "^2.0.0" + "unique-slug": "2.0.1" } }, "unique-slug": { @@ -7402,7 +7402,7 @@ "integrity": "sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==", "dev": true, "requires": { - "imurmurhash": "^0.1.4" + "imurmurhash": "0.1.4" } }, "universalify": { @@ -7416,8 +7416,8 @@ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "dev": true, "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" + "has-value": "0.3.1", + "isobject": "3.0.1" }, "dependencies": { "has-value": { @@ -7426,9 +7426,9 @@ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "dev": true, "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" + "get-value": "2.0.6", + "has-values": "0.1.4", + "isobject": "2.1.0" }, "dependencies": { "isobject": { @@ -7468,7 +7468,7 @@ "integrity": "sha1-lMVA4f93KVbiKZUHwBCupsiDjrA=", "dev": true, "requires": { - "punycode": "^2.1.0" + "punycode": "2.1.1" } }, "urix": { @@ -7528,8 +7528,8 @@ "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", "dev": true, "requires": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" + "define-properties": "1.1.3", + "object.getownpropertydescriptors": "2.0.3" } }, "utila": { @@ -7550,7 +7550,7 @@ "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", "dev": true, "requires": { - "user-home": "^1.1.1" + "user-home": "1.1.1" } }, "value-equal": { @@ -7578,7 +7578,7 @@ "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.1.tgz", "integrity": "sha512-rAVtTNZw+cQPjvGp1ox0XC5Q2IBFyqoqh+QII4J/oguyu83Bax1apbo2eqB8bHRS+fqYUBagys6lqUoVwKSmXQ==", "requires": { - "loose-envify": "^1.0.0" + "loose-envify": "1.3.1" } }, "watchpack": { @@ -7587,9 +7587,9 @@ "integrity": "sha1-S8EsLr6KonenHx0/FNaFx7RGzQA=", "dev": true, "requires": { - "chokidar": "^2.0.2", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0" + "chokidar": "2.0.4", + "graceful-fs": "4.1.11", + "neo-async": "2.6.0" } }, "webpack": { @@ -7602,26 +7602,26 @@ "@webassemblyjs/helper-module-context": "1.7.11", "@webassemblyjs/wasm-edit": "1.7.11", "@webassemblyjs/wasm-parser": "1.7.11", - "acorn": "^5.6.2", - "acorn-dynamic-import": "^3.0.0", - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0", - "chrome-trace-event": "^1.0.0", - "enhanced-resolve": "^4.1.0", - "eslint-scope": "^4.0.0", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.3.0", - "loader-utils": "^1.1.0", - "memory-fs": "~0.4.1", - "micromatch": "^3.1.8", - "mkdirp": "~0.5.0", - "neo-async": "^2.5.0", - "node-libs-browser": "^2.0.0", - "schema-utils": "^0.4.4", - "tapable": "^1.1.0", - "terser-webpack-plugin": "^1.1.0", - "watchpack": "^1.5.0", - "webpack-sources": "^1.3.0" + "acorn": "5.7.3", + "acorn-dynamic-import": "3.0.0", + "ajv": "6.5.2", + "ajv-keywords": "3.2.0", + "chrome-trace-event": "1.0.0", + "enhanced-resolve": "4.1.0", + "eslint-scope": "4.0.0", + "json-parse-better-errors": "1.0.2", + "loader-runner": "2.3.1", + "loader-utils": "1.1.0", + "memory-fs": "0.4.1", + "micromatch": "3.1.10", + "mkdirp": "0.5.1", + "neo-async": "2.6.0", + "node-libs-browser": "2.1.0", + "schema-utils": "0.4.5", + "tapable": "1.1.1", + "terser-webpack-plugin": "1.2.0", + "watchpack": "1.6.0", + "webpack-sources": "1.3.0" } }, "webpack-cli": { @@ -7630,16 +7630,16 @@ "integrity": "sha512-Cnqo7CeqeSvC6PTdts+dywNi5CRlIPbLx1AoUPK2T6vC1YAugMG3IOoO9DmEscd+Dghw7uRlnzV1KwOe5IrtgQ==", "dev": true, "requires": { - "chalk": "^2.4.1", - "cross-spawn": "^6.0.5", - "enhanced-resolve": "^4.1.0", - "global-modules-path": "^2.3.0", - "import-local": "^2.0.0", - "interpret": "^1.1.0", - "loader-utils": "^1.1.0", - "supports-color": "^5.5.0", - "v8-compile-cache": "^2.0.2", - "yargs": "^12.0.2" + "chalk": "2.4.1", + "cross-spawn": "6.0.5", + "enhanced-resolve": "4.1.0", + "global-modules-path": "2.3.1", + "import-local": "2.0.0", + "interpret": "1.1.0", + "loader-utils": "1.1.0", + "supports-color": "5.5.0", + "v8-compile-cache": "2.0.2", + "yargs": "12.0.5" }, "dependencies": { "ansi-styles": { @@ -7648,7 +7648,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "^1.9.0" + "color-convert": "1.9.2" } }, "chalk": { @@ -7657,9 +7657,9 @@ "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.5.0" } } } @@ -7670,8 +7670,8 @@ "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==", "dev": true, "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" + "source-list-map": "2.0.0", + "source-map": "0.6.1" }, "dependencies": { "source-map": { @@ -7699,7 +7699,7 @@ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { - "isexe": "^2.0.0" + "isexe": "2.0.0" } }, "which-module": { @@ -7713,12 +7713,12 @@ "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-2.1.3.tgz", "integrity": "sha1-qBYZRtP4W4zCWQ3TpRnVPUD/igY=", "requires": { - "chalk": "^1.1.3", - "fs-extra": "^3.0.1", - "glob": "^7.1.1", - "lodash.template": "^4.4.0", - "mkdirp": "^0.5.1", - "workbox-sw": "^2.1.3" + "chalk": "1.1.3", + "fs-extra": "3.0.1", + "glob": "7.1.2", + "lodash.template": "4.4.0", + "mkdirp": "0.5.1", + "workbox-sw": "2.1.3" } }, "workbox-sw": { @@ -7731,7 +7731,7 @@ "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-2.1.3.tgz", "integrity": "sha1-5N6UgYzO9vZnsfX0GM5aEGHajTM=", "requires": { - "workbox-build": "^2.1.3" + "workbox-build": "2.1.3" } }, "worker-farm": { @@ -7740,7 +7740,7 @@ "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", "dev": true, "requires": { - "errno": "~0.1.7" + "errno": "0.1.7" } }, "wrap-ansi": { @@ -7749,8 +7749,8 @@ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" + "string-width": "1.0.2", + "strip-ansi": "3.0.1" }, "dependencies": { "is-fullwidth-code-point": { @@ -7759,7 +7759,7 @@ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "number-is-nan": "1.0.1" } }, "string-width": { @@ -7768,9 +7768,9 @@ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" } } } @@ -7804,18 +7804,18 @@ "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", "dev": true, "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.2.0", - "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^11.1.1" + "cliui": "4.1.0", + "decamelize": "1.2.0", + "find-up": "3.0.0", + "get-caller-file": "1.0.3", + "os-locale": "3.0.1", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", + "y18n": "4.0.0", + "yargs-parser": "11.1.1" }, "dependencies": { "find-up": { @@ -7824,7 +7824,7 @@ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "locate-path": "^3.0.0" + "locate-path": "3.0.0" } }, "locate-path": { @@ -7833,8 +7833,8 @@ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "p-locate": "3.0.0", + "path-exists": "3.0.0" } }, "p-limit": { @@ -7843,7 +7843,7 @@ "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", "dev": true, "requires": { - "p-try": "^2.0.0" + "p-try": "2.0.0" } }, "p-locate": { @@ -7852,7 +7852,7 @@ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "p-limit": "^2.0.0" + "p-limit": "2.1.0" } }, "p-try": { @@ -7869,8 +7869,8 @@ "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", "dev": true, "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" + "camelcase": "5.0.0", + "decamelize": "1.2.0" } } } diff --git a/package.json b/package.json index 7a1b9b90..16e11c29 100644 --- a/package.json +++ b/package.json @@ -1,15 +1,19 @@ { - "name": "starter-react", + "name": "react4xp", "version": "1.0.0", "description": "React starter for Enonic XP Platform", "scripts": { - "build": "gradle build", - "deploy": "gradle deploy", - "watch": "gradle deploy -t", - "react4xp": "rm -rf build; node_modules/webpack/bin/webpack.js --config webpack.config.react4xp.js", - "reactBackend": "rm -rf build; node_modules/webpack/bin/webpack.js --config webpack.config.reactBackend.js", - "babelSite": "babel src/main/resources --out-dir build/resources/main --ignore \"**/*.js\"", - "babelSiteWatch": "babel src/main/resources --out-dir build/resources/main --ignore \"**/*.js\" --watch" + "build": "npm i; ./gradlew build", + "deploy": "./gradlew deploy", + "build:xp": "./gradlew babelXP", + "watch:xp": "./gradlew deploy -t", + "rm": "node_modules/rimraf/bin.js build", + "build:r4xp": "node_modules/webpack/bin/webpack.js --config webpack.config.react4xp.js --color --progress", + "watch:r4xp": "node_modules/webpack/bin/webpack.js --config webpack.config.react4xp.js --color --progress --watch", + "build:r4xp-back": "node_modules/webpack/bin/webpack.js --config webpack.config.react4xp.backCore.js --color --progress", + "watch:r4xp-back": "node_modules/webpack/bin/webpack.js --config webpack.config.react4xp.backCore.js --color --progress --watch", + "build:r4xp-front": "node_modules/webpack/bin/webpack.js --config webpack.config.react4xp.frontCore.js --color --progress", + "watch:r4xp-front": "node_modules/webpack/bin/webpack.js --config webpack.config.react4xp.frontCore.js --color --progress --watch" }, "repository": { "type": "git", diff --git a/src/main/react4xp/_entries/app.jsx b/src/main/react4xp/_entries/app.jsx index f3156410..a5b8d98f 100644 --- a/src/main/react4xp/_entries/app.jsx +++ b/src/main/react4xp/_entries/app.jsx @@ -1,13 +1,11 @@ import React from 'react'; -import React4xp from '..'; import Something from '../common/Something'; import AComponent from '../components/AComponent'; -React4xp.render( +export default (props) =>

App.jsx: Heres some stuff.

-
-); +
; diff --git a/src/main/react4xp/_entries/level/app2.jsx b/src/main/react4xp/_entries/level/app2.jsx index 69dc8646..aa4f655f 100644 --- a/src/main/react4xp/_entries/level/app2.jsx +++ b/src/main/react4xp/_entries/level/app2.jsx @@ -1,22 +1,11 @@ import React from 'react'; -import ReactDOM from 'react-dom'; import Something from '../../common/Something'; import AComponent from '../../components/AComponent'; -const MOUNT_NODE = document.getElementById('mountHere'); - -ReactDOM.render( +export default (props) =>

app2.jsx: Heres some stuff.

-
, - - /* -

Heres some child stuff.

- - -
,*/ - MOUNT_NODE -); +
; diff --git a/src/main/react4xp/commonChunks.json.ejs b/src/main/react4xp/commonChunks.json.ejs index 6d0877ff..a9c89485 100644 --- a/src/main/react4xp/commonChunks.json.ejs +++ b/src/main/react4xp/commonChunks.json.ejs @@ -1,9 +1,9 @@ { "commonChunks": { "headEnd": [ - {"name": "react4xp/vendors", "entry": "<%= htmlWebpackPlugin.files.chunks['react4xp/vendors'].entry %>" }, - {"name": "react4xp/common", "entry": "<%= htmlWebpackPlugin.files.chunks['react4xp/common'].entry %>"}, - {"name": "react4xp/components", "entry": "<%= htmlWebpackPlugin.files.chunks['react4xp/components'].entry %>"} + {"name": "vendors", "entry": "<%= htmlWebpackPlugin.files.chunks.vendors.entry %>" }, + {"name": "common", "entry": "<%= htmlWebpackPlugin.files.chunks.common.entry %>"}, + {"name": "components", "entry": "<%= htmlWebpackPlugin.files.chunks.components.entry %>"} ], "bodyEnd": [] } diff --git a/src/main/react4xp/commonChunks.xml.ejs b/src/main/react4xp/commonChunks.xml.ejs index 92114e21..be36749a 100644 --- a/src/main/react4xp/commonChunks.xml.ejs +++ b/src/main/react4xp/commonChunks.xml.ejs @@ -1,11 +1,11 @@ - - + + - + diff --git a/src/main/react4xp/core.json.ejs b/src/main/react4xp/core.json.ejs new file mode 100644 index 00000000..c00ae9b1 --- /dev/null +++ b/src/main/react4xp/core.json.ejs @@ -0,0 +1,8 @@ +{ + "commonChunks": { + "headEnd": [ + {"name": "Core", "entry": "<%= htmlWebpackPlugin.files.chunks.Core.entry %>" }, + ], + "bodyEnd": [] + } +} diff --git a/src/main/react4xp/index.html.ejs b/src/main/react4xp/index.html.ejs deleted file mode 100644 index ef06d7e0..00000000 --- a/src/main/react4xp/index.html.ejs +++ /dev/null @@ -1,16 +0,0 @@ - - - - - Enonic React Seed - - - - - - -
- - - - diff --git a/src/main/resources/lib/enonic/react4xp/index.es6 b/src/main/resources/lib/enonic/react4xp/index.es6 index c2fb32d6..9416bd2a 100644 --- a/src/main/resources/lib/enonic/react4xp/index.es6 +++ b/src/main/resources/lib/enonic/react4xp/index.es6 @@ -31,7 +31,7 @@ Object.keys(COMMON_CHUNKS).forEach(section => { }); }); -PLAN: TRE ULIKE React4XP WEBPACKS: frontendCore, backendCore og userAssets! Auto-load de to første her: +// TODO: PLAN: TRE ULIKE React4XP WEBPACKS: frontendCore, backendCore og userAssets! Auto-load de to første her: // Polyfill commonJS for rendered frontend code: PAGE_CONTRIBUTIONS.headEnd = [ diff --git a/webpack.config.reactBackend.js b/webpack.config.react4xp.backCore.js similarity index 99% rename from webpack.config.reactBackend.js rename to webpack.config.react4xp.backCore.js index a03363d8..2359468d 100644 --- a/webpack.config.reactBackend.js +++ b/webpack.config.react4xp.backCore.js @@ -1,4 +1,5 @@ const path = require('path'); + const NODE_MODULES = path.join(__dirname, 'node_modules'); const BUILD = path.join(__dirname, 'build', 'resources', 'main', 'lib', 'enonic', 'react4xp'); diff --git a/webpack.config.react4xp.frontCore.js b/webpack.config.react4xp.frontCore.js new file mode 100644 index 00000000..fc7e176a --- /dev/null +++ b/webpack.config.react4xp.frontCore.js @@ -0,0 +1,58 @@ +const path = require('path'); + +const HtmlWebpackPlugin = require('html-webpack-plugin'); + +const SRC_MAIN = path.join(__dirname, 'src/main'); +const BUILD = path.join(__dirname, 'build/resources/main'); + +const R4X_HOME = 'react4xp'; + +const R4X_TARGETSUBDIR = R4X_HOME; + +const SRC_R4X = path.join(SRC_MAIN, R4X_HOME); + +const BUILD_R4X = path.join(BUILD, R4X_TARGETSUBDIR); + +const MODE = 'development'; /*/'production' //*/ + +module.exports = { + mode: MODE, + + entry: { + 'Core': path.join(SRC_R4X, '_frontendCore_.es6'), + }, + + output: { + path: BUILD_R4X, // <-- Sets the base url for plugins and other target dirs. Note the use of {{assetUrl}} in index.html (or index.ejs). + filename: "[name].[contenthash:9].js", + libraryTarget: 'var', // 'var' would easier to use in pure-frontend, accessing exports like: React.[name].function() etc... But 'commonjs' makes chunks easier to use from nashorn. + library: ['React4xp', '[name]'], + }, + + resolve: { + extensions: ['.es6', '.js', '.jsx'] + }, + devtool: 'source-map', + module: { + rules: [ + { + // Babel for building static assets + test: /\.((jsx?)|(es6))$/, + exclude: /[\\/]node_modules[\\/]/, + loader: 'babel-loader', + query: { + compact: (MODE === 'production'), + }, + } + ] + }, + + plugins: [ + new HtmlWebpackPlugin({ + inject: false, + hash: false, + template: path.join(SRC_R4X, 'core.json.ejs'), + filename: path.join(BUILD_R4X, 'core.json') + }), + ] +}; diff --git a/webpack.config.react4xp.js b/webpack.config.react4xp.js index a061bcff..ebb365be 100644 --- a/webpack.config.react4xp.js +++ b/webpack.config.react4xp.js @@ -2,7 +2,6 @@ const path = require('path'); const glob = require('glob'); const HtmlWebpackPlugin = require('html-webpack-plugin'); -const CleanWebpackPlugin = require('clean-webpack-plugin'); const SRC_MAIN = path.join(__dirname, 'src/main'); const BUILD = path.join(__dirname, 'build/resources/main'); @@ -24,16 +23,15 @@ const BUILD_R4X = path.join(BUILD, R4X_TARGETSUBDIR); const MODE = 'development'; /*/'production' //*/ module.exports = { - mode: 'production', + mode: MODE, entry: Object.assign({}, - {'_core_': path.join(SRC_R4X, '_frontendCore_.es6')}, - getEntries(SRC_R4X_ENTRIES, ['jsx', 'js', 'es6'], R4X_TARGETSUBDIR), - getEntries(SRC_SITE, ['jsx'], path.join(R4X_TARGETSUBDIR, SITE)) // <-- Note: this is where top-level react components are included, in the enonic site structure. Only JSX files are included: in order for these to be transpiled here (and thereby become a part of the chunk structure for these static assets) and not by the transpilation of "pure XP" source code files (which should be transpiled separately, outside of the static-asset/chunk structure), take care to separate them! Here, this is done by including only .JSX files here, reserving that extension for toplevel react components, and excluding .JSX files in the babelSite task in build.gradle. Note that if the top-level components import .es6 dependencies, that separation must be done more thoroughly. + getEntries(SRC_R4X_ENTRIES, ['jsx', 'js', 'es6'], ""), + getEntries(SRC_SITE, ['jsx'], SITE) // <-- Note: this is where top-level react components are included, in the enonic site structure. Only JSX files are included: in order for these to be transpiled here (and thereby become a part of the chunk structure for these static assets) and not by the transpilation of "pure XP" source code files (which should be transpiled separately, outside of the static-asset/chunk structure), take care to separate them! Here, this is done by including only .JSX files here, reserving that extension for toplevel react components, and excluding .JSX files in the babelSite task in build.gradle. Note that if the top-level components import .es6 dependencies, that separation must be done more thoroughly. ), output: { - path: path.join(BUILD), // <-- Sets the base url for plugins and other target dirs. Note the use of {{assetUrl}} in index.html (or index.ejs). + path: BUILD_R4X, // <-- Sets the base url for plugins and other target dirs. Note the use of {{assetUrl}} in index.html (or index.ejs). filename: "[name].js", chunkFilename: "[name].[contenthash:9].js", libraryTarget: 'var', // 'var' would easier to use in pure-frontend, accessing exports like: React.[name].function() etc... But 'commonjs' makes chunks easier to use from nashorn. @@ -62,13 +60,7 @@ module.exports = { }, plugins: [ - new HtmlWebpackPlugin({ - inject: false, - hash: false, - template: path.join(SRC_R4X, 'index.html.ejs'), - filename: path.join(BUILD_R4X, 'index.html') // <-- TODO: Must be moved to assets after webpack, and have its urls postprocessed, since the paths inside use both {{assetUrl}} and module.exports.output.path as base url. - }), - + // TODO: Autogenerate these: new HtmlWebpackPlugin({ inject: false, hash: false, @@ -76,9 +68,7 @@ module.exports = { filename: path.join(BUILD_R4X, 'commonChunks.xml') }), - // TODO: Automatically build the content of commonChunks.json.ejs from the getCacheGroups results before running this, in order to automatically add automatically built chunks: new HtmlWebpackPlugin({ - // TODO: Automate these: inject: false, hash: false, template: path.join(SRC_R4X, 'commonChunks.json.ejs'), @@ -121,7 +111,7 @@ function getEntries(fullDirPath, extensions, targetPath) { function getCacheGroups(priorities) { const chunks = { vendors: { - name: path.join(R4X_HOME, 'vendors'), + name: 'vendors', enforce: true, test: /[\\/]node_modules[\\/]/, chunks: 'all', @@ -139,7 +129,7 @@ function getCacheGroups(priorities) { //console.log("Chunkdirs: " + JSON.stringify(chunkDirs, null, 4)); chunkDirs.forEach(dirr => { chunks[dirr] = { - name: path.join(R4X_HOME, dirr), + name: dirr, enforce: true, test: new RegExp(path.join(SRC_R4X, dirr)), chunks: 'all', From d6cddf80cdce18d4072706a8f9e1b2b8a60d4596 Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Sat, 19 Jan 2019 23:28:41 +0100 Subject: [PATCH 43/96] Pretty nicely modularized gradle --- build.gradle | 54 ++++++++++--------- src/main/react4xp/core.json.ejs | 2 +- ...bpack.config.react4xp.backCore.js_OBSOLETE | 0 3 files changed, 31 insertions(+), 25 deletions(-) rename webpack.config.react4xp.backCore.js => webpack.config.react4xp.backCore.js_OBSOLETE (100%) diff --git a/build.gradle b/build.gradle index e5d5de28..7d74e0d7 100644 --- a/build.gradle +++ b/build.gradle @@ -44,53 +44,59 @@ repositories { } } -// Transpile .js and .es6 files under src/main/resources. -// These are "pure XP" source code files, not JS (and react) assets. Those must be transpiled separately, by the webpackReact4xp task below. -// This is currently done by reserving .es6 and .js files below src/main/resources/ for this task, + + +npmInstall.inputs.file("package.json") +npmInstall.inputs.file("package-lock.json") +npmInstall.outputs.dir("node_modules") + + +// Transpile .js and .es6 files under src/main/resources. +// These are "pure XP" source code files, not JS (and react) assets. Those must be transpiled separately, by the webpackReact4xp task below. +// This is currently done by reserving .es6 and .js files below src/main/resources/ for this task, // while reserving .JSX files under that, and all relevant extensions in other locations, for the webpackReact4xp task. task babelXP(type: NodeTask) { - script = file('node_modules/babel-cli/bin/babel.js') + script = file('node_modules/babel-cli/bin/babel.js') args = ["src/main/resources", "--out-dir", "build/resources/main", "--ignore", "**/*.jsx"] inputs.dir 'src/main/resources' - outputs.dir "build/resources/main" + outputs.dir "build/resources" } - babelXP.dependsOn += 'npmInstall' babelXP.dependsOn += 'processResources' -task webpackReact4xpFrontCore(type: NodeTask) { - script = file('node_modules/webpack/bin/webpack.js') - args = ['--config', 'webpack.config.react4xp.frontCore.js'] - - //inputs.dir 'node_modules/react/' -} -webpackReact4xpFrontCore.dependsOn += 'npmInstall' - -task webpackReact4xpBackCore(type: NodeTask) { +task webpack_r4xp_frontCore(type: NodeTask) { script = file('node_modules/webpack/bin/webpack.js') - args = ['--config', 'webpack.config.react4xp.backCore.js'] + args = ['--config', 'webpack.config.react4xp.frontCore.js'] - //inputs.dir 'node_modules/react/' + inputs.dir("node_modules") + inputs.dir("src/main/react4xp") + outputs.dir("build/resources/main/react4xp") } -webpackReact4xpBackCore.dependsOn += 'npmInstall' +webpack_r4xp_frontCore.dependsOn += 'npmInstall' -task webpackReact4xp(type: NodeTask) { +task webpack_r4xp(type: NodeTask) { script = file('node_modules/webpack/bin/webpack.js') args = ['--config', 'webpack.config.react4xp.js'] + inputs.dir("node_modules") + inputs.dir("src/main/react4xp") + inputs.dir("src/main/resources/site") + outputs.dir("build/resources/main/react4xp") + /*doLast { file("build/resources/main/assets/index.html").renameTo(file("build/resources/main/index.html")) }*/ } -webpackReact4xp.dependsOn += 'npmInstall' -webpackReact4xp.dependsOn babelXP +webpack_r4xp.dependsOn += 'npmInstall' + + // processes your package.json before running webpack +jar.dependsOn babelXP +jar.dependsOn += 'webpack_r4xp' +jar.dependsOn += 'webpack_r4xp_frontCore' -jar.dependsOn webpackReact4xp -jar.dependsOn += 'webpackReact4xpFrontCore' -jar.dependsOn += 'webpackReact4xpBackCore' diff --git a/src/main/react4xp/core.json.ejs b/src/main/react4xp/core.json.ejs index c00ae9b1..a5b20085 100644 --- a/src/main/react4xp/core.json.ejs +++ b/src/main/react4xp/core.json.ejs @@ -1,7 +1,7 @@ { "commonChunks": { "headEnd": [ - {"name": "Core", "entry": "<%= htmlWebpackPlugin.files.chunks.Core.entry %>" }, + {"name": "Core", "entry": "<%= htmlWebpackPlugin.files.chunks.Core.entry %>" } ], "bodyEnd": [] } diff --git a/webpack.config.react4xp.backCore.js b/webpack.config.react4xp.backCore.js_OBSOLETE similarity index 100% rename from webpack.config.react4xp.backCore.js rename to webpack.config.react4xp.backCore.js_OBSOLETE From d301d5169f5662c22783605c633eaf2a3e90a701 Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Sun, 20 Jan 2019 00:55:14 +0100 Subject: [PATCH 44/96] Works again. Neat building. Uses library properly to separate the rendering (now React4xp.Core.render) from the actual component. Almost ready for using the component the same way in SSR. Snag: when chunking out vendors from Core (there should be common vendors dependencies between the core and the components instead of bloating the tiny Core.js), the render function is no longer exported. Look into externals! --- build.gradle | 6 +- scratchpad.js | 1 + src/main/react4xp/_frontendCore_.es6 | 1 - .../resources/lib/enonic/react4xp/index.es6 | 80 ++++++++++++------- .../resources/services/react4xp/react4xp.es6 | 4 +- webpack.config.constants.js | 28 +++++++ webpack.config.react4xp.backCore.js_OBSOLETE | 42 ---------- webpack.config.react4xp.frontCore.js | 42 +++++----- webpack.config.react4xp.js | 28 ++----- 9 files changed, 116 insertions(+), 116 deletions(-) create mode 100644 scratchpad.js create mode 100644 webpack.config.constants.js delete mode 100644 webpack.config.react4xp.backCore.js_OBSOLETE diff --git a/build.gradle b/build.gradle index 7d74e0d7..8bbbb516 100644 --- a/build.gradle +++ b/build.gradle @@ -60,7 +60,7 @@ task babelXP(type: NodeTask) { args = ["src/main/resources", "--out-dir", "build/resources/main", "--ignore", "**/*.jsx"] inputs.dir 'src/main/resources' - outputs.dir "build/resources" + outputs.dir "build/resources/main" } babelXP.dependsOn += 'npmInstall' babelXP.dependsOn += 'processResources' @@ -71,6 +71,8 @@ task webpack_r4xp_frontCore(type: NodeTask) { script = file('node_modules/webpack/bin/webpack.js') args = ['--config', 'webpack.config.react4xp.frontCore.js'] + inputs.file("webpack.config.constants.js") + inputs.file("webpack.config.react4xp.frontCore.js") inputs.dir("node_modules") inputs.dir("src/main/react4xp") outputs.dir("build/resources/main/react4xp") @@ -82,6 +84,8 @@ task webpack_r4xp(type: NodeTask) { script = file('node_modules/webpack/bin/webpack.js') args = ['--config', 'webpack.config.react4xp.js'] + inputs.file("webpack.config.constants.js") + inputs.file("webpack.config.react4xp.js") inputs.dir("node_modules") inputs.dir("src/main/react4xp") inputs.dir("src/main/resources/site") diff --git a/scratchpad.js b/scratchpad.js new file mode 100644 index 00000000..e029acbc --- /dev/null +++ b/scratchpad.js @@ -0,0 +1 @@ +var React4xp = typeof React4xp === "object" ? React4xp : {}; React4xp["site/parts/simple-reactive/simple-reactive"] =/******/ (function(modules) { // webpackBootstrap/******/ // install a JSONP callback for chunk loading/******/ function webpackJsonpCallback(data) {/******/ var chunkIds = data[0];/******/ var moreModules = data[1];/******/ var executeModules = data[2];/******//******/ // add "moreModules" to the modules object,/******/ // then flag all "chunkIds" as loaded and fire callback/******/ var moduleId, chunkId, i = 0, resolves = [];/******/ for(;i < chunkIds.length; i++) {/******/ chunkId = chunkIds[i];/******/ if(installedChunks[chunkId]) {/******/ resolves.push(installedChunks[chunkId][0]);/******/ }/******/ installedChunks[chunkId] = 0;/******/ }/******/ for(moduleId in moreModules) {/******/ if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {/******/ modules[moduleId] = moreModules[moduleId];/******/ }/******/ }/******/ if(parentJsonpFunction) parentJsonpFunction(data);/******//******/ while(resolves.length) {/******/ resolves.shift()();/******/ }/******//******/ // add entry modules from loaded chunk to deferred list/******/ deferredModules.push.apply(deferredModules, executeModules || []);/******//******/ // run deferred modules when all chunks ready/******/ return checkDeferredModules();/******/ };/******/ function checkDeferredModules() {/******/ var result;/******/ for(var i = 0; i < deferredModules.length; i++) {/******/ var deferredModule = deferredModules[i];/******/ var fulfilled = true;/******/ for(var j = 1; j < deferredModule.length; j++) {/******/ var depId = deferredModule[j];/******/ if(installedChunks[depId] !== 0) fulfilled = false;/******/ }/******/ if(fulfilled) {/******/ deferredModules.splice(i--, 1);/******/ result = __webpack_require__(__webpack_require__.s = deferredModule[0]);/******/ }/******/ }/******/ return result;/******/ }/******//******/ // The module cache/******/ var installedModules = {};/******//******/ // object to store loaded and loading chunks/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched/******/ // Promise = chunk loading, 0 = chunk loaded/******/ var installedChunks = {/******/ "site/parts/simple-reactive/simple-reactive": 0/******/ };/******//******/ var deferredModules = [];/******//******/ // The require function/******/ function __webpack_require__(moduleId) {/******//******/ // Check if module is in cache/******/ if(installedModules[moduleId]) {/******/ return installedModules[moduleId].exports;/******/ }/******/ // Create a new module (and put it into the cache)/******/ var module = installedModules[moduleId] = {/******/ i: moduleId,/******/ l: false,/******/ exports: {}/******/ };/******//******/ // Execute the module function/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);/******//******/ // Flag the module as loaded/******/ module.l = true;/******//******/ // Return the exports of the module/******/ return module.exports;/******/ }/******//******//******/ // expose the modules object (__webpack_modules__)/******/ __webpack_require__.m = modules;/******//******/ // expose the module cache/******/ __webpack_require__.c = installedModules;/******//******/ // define getter function for harmony exports/******/ __webpack_require__.d = function(exports, name, getter) {/******/ if(!__webpack_require__.o(exports, name)) {/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });/******/ }/******/ };/******//******/ // define __esModule on exports/******/ __webpack_require__.r = function(exports) {/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });/******/ }/******/ Object.defineProperty(exports, '__esModule', { value: true });/******/ };/******//******/ // create a fake namespace object/******/ // mode & 1: value is a module id, require it/******/ // mode & 2: merge all properties of value into the ns/******/ // mode & 4: return value when already ns object/******/ // mode & 8|1: behave like require/******/ __webpack_require__.t = function(value, mode) {/******/ if(mode & 1) value = __webpack_require__(value);/******/ if(mode & 8) return value;/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;/******/ var ns = Object.create(null);/******/ __webpack_require__.r(ns);/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));/******/ return ns;/******/ };/******//******/ // getDefaultExport function for compatibility with non-harmony modules/******/ __webpack_require__.n = function(module) {/******/ var getter = module && module.__esModule ?/******/ function getDefault() { return module['default']; } :/******/ function getModuleExports() { return module; };/******/ __webpack_require__.d(getter, 'a', getter);/******/ return getter;/******/ };/******//******/ // Object.prototype.hasOwnProperty.call/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };/******//******/ // __webpack_public_path__/******/ __webpack_require__.p = "";/******//******/ var jsonpArray = window["webpackJsonp"] = window["webpackJsonp"] || [];/******/ var oldJsonpFunction = jsonpArray.push.bind(jsonpArray);/******/ jsonpArray.push = webpackJsonpCallback;/******/ jsonpArray = jsonpArray.slice();/******/ for(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);/******/ var parentJsonpFunction = oldJsonpFunction;/******//******//******/ // add entry module to deferred list/******/ deferredModules.push(["./src/main/resources/site/parts/simple-reactive/simple-reactive.jsx","vendors"]);/******/ // run deferred modules when ready/******/ return checkDeferredModules();/******/ })/************************************************************************//******/ ({/***/ "./src/main/resources/site/parts/simple-reactive/simple-reactive.jsx":/*!***************************************************************************!*\ !*** ./src/main/resources/site/parts/simple-reactive/simple-reactive.jsx ***! \***************************************************************************//*! no static exports found *//***/ (function(module, exports, __webpack_require__) {"use strict";Object.defineProperty(exports, "__esModule", { value: true});var _react = __webpack_require__(/*! react */ "./node_modules/react/index.js");var _react2 = _interopRequireDefault(_react);function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }exports.default = function (props) { return _react2.default.createElement( 'h1', null, 'Dette er en test ', props.insertedMessage );};//React4xp.render(Test);//exports.React4xp["react4xp/site/parts/simple-reactive/simple-reactive"]/***/ })/******/ });//# sourceMappingURL=simple-reactive.js.map diff --git a/src/main/react4xp/_frontendCore_.es6 b/src/main/react4xp/_frontendCore_.es6 index b46a0be2..96c0b399 100644 --- a/src/main/react4xp/_frontendCore_.es6 +++ b/src/main/react4xp/_frontendCore_.es6 @@ -1,4 +1,3 @@ -// TODO: This - index.js (.es6) - is a bad place to put this code, might quickly get overwritten by user code. Move, but where? Mind that the import statement should stay easy. So, /node_modules/ maybe? import ReactDOM from 'react-dom'; exports.render = (Component) => { diff --git a/src/main/resources/lib/enonic/react4xp/index.es6 b/src/main/resources/lib/enonic/react4xp/index.es6 index 9416bd2a..a5b4a41e 100644 --- a/src/main/resources/lib/enonic/react4xp/index.es6 +++ b/src/main/resources/lib/enonic/react4xp/index.es6 @@ -4,8 +4,9 @@ const htmlInserter = __.newBean('com.enonic.xp.htmlinserter.HtmlInserter'); const SSRreact4xp = __.newBean('com.enonic.xp.react4xp.React4xp'); -// TODO: centralize this even more? +// TODO: centralize these even more? Along with other strings that must match? const R4X = 'react4xp'; +const LIBRARY_NAME = 'React4xp'; const SERVICES_ROOT = `/_/service/${app.name}/`; const BASE_PATHS = { @@ -13,32 +14,48 @@ const BASE_PATHS = { page: "pages", }; -const COMMON_CHUNKS = JSON.parse( - utilLib.data.forceArray( - ioLib.readLines( - ioLib.getResource(`/${R4X}/commonChunks.json`).getStream() - ) - ).join("")).commonChunks; -//log.info("COMMON_CHUNKS: " + JSON.stringify(COMMON_CHUNKS, null, 2)); - -const PAGE_CONTRIBUTIONS = {}; -Object.keys(COMMON_CHUNKS).forEach(section => { - COMMON_CHUNKS[section].forEach(chunk => { - if ((chunk.entry || "").startsWith(R4X + '/')) { - chunk.entry = chunk.entry.substring(R4X.length + 1); - } - PAGE_CONTRIBUTIONS[section] = `${(PAGE_CONTRIBUTIONS[section] || '')}\n`; + +const buildBasicPageContributions = (chunkHashFiles) => { + const pageContributions = { + // Polyfill commonJS for rendered frontend code? + /*headEnd: [ + '' + ],*/ + }; + + chunkHashFiles.forEach(chunkFile => { + const commonChunks = JSON.parse( + utilLib.data.forceArray( + ioLib.readLines( + ioLib.getResource(chunkFile).getStream() + ) + ).join("")).commonChunks; + //log.info("commonChunks: " + JSON.stringify(commonChunks, null, 2)); + + Object.keys(commonChunks).forEach(section => { + commonChunks[section].forEach(chunk => { + if ((chunk.entry || "").startsWith(R4X + '/')) { + chunk.entry = chunk.entry.substring(R4X.length + 1); + } + pageContributions[section] = [ + ...(pageContributions[section] || []), + `` + ]; + }); + }); }); -}); + log.info("\nBuilt basic pageContributions:\n" + JSON.stringify(pageContributions, null, 2) + "\n"); + return pageContributions; +} + -// TODO: PLAN: TRE ULIKE React4XP WEBPACKS: frontendCore, backendCore og userAssets! Auto-load de to første her: -// Polyfill commonJS for rendered frontend code: -PAGE_CONTRIBUTIONS.headEnd = [ - '\n\n', - ...(utilLib.data.forceArray(PAGE_CONTRIBUTIONS.headEnd) || []) -]; -//log.info("PAGE_CONTRIBUTIONS: " + JSON.stringify(PAGE_CONTRIBUTIONS, null, 2)); +// Use the two json files built by webpack to fetch the contenthashed filenames for common chunks. Then use those to +// build a set of basic page contributions common to all components: +const PAGE_CONTRIBUTIONS = buildBasicPageContributions([ + `/${R4X}/core.json`, + `/${R4X}/commonChunks.json` +]); @@ -183,16 +200,19 @@ class React4xp { const adjustedPgContributions = mergePageContributions(pageContributions); adjustedPgContributions.bodyEnd = utilLib.data.forceArray(adjustedPgContributions.bodyEnd); - // Adds the component.jsx script. Assumes that it auto-triggers and reads its own required data from the data-react4xp attributes -targetId and -props. + // Adds the component.jsx script and a trigger. Assumes that it reads its own required data from the data-react4xp attributes -targetId and -props. // If not, the exported default from that script can be reached like this: - adjustedPgContributions.bodyEnd.push(` + - `); - + + > + ${LIBRARY_NAME}.Core.render(${LIBRARY_NAME}['${this.jsxPath}'].default); + `); + return adjustedPgContributions; }; diff --git a/src/main/resources/services/react4xp/react4xp.es6 b/src/main/resources/services/react4xp/react4xp.es6 index 8d2c9622..3183f0eb 100644 --- a/src/main/resources/services/react4xp/react4xp.es6 +++ b/src/main/resources/services/react4xp/react4xp.es6 @@ -2,7 +2,7 @@ var ioLib = require('/lib/xp/io'); var utilLib = require('/lib/enonic/util'); var cacheLib = require('/lib/cache'); -// TODO: centralize this even more? +// TODO: centralize this even more? Along with other strings that must match? const R4X = 'react4xp'; const SERVICE_ROOT = `/_/service/${app.name}/${R4X}/`; @@ -18,7 +18,7 @@ const react4xpCache = cacheLib.newCache({ const getReact4XP = (resource) => { - const fileContent = utilLib.data.forceArray(ioLib.readLines(resource.getStream())).join(""); + const fileContent = utilLib.data.forceArray(ioLib.readLines(resource.getStream())).join("\n"); return { body: fileContent, headers: { diff --git a/webpack.config.constants.js b/webpack.config.constants.js new file mode 100644 index 00000000..14d180a6 --- /dev/null +++ b/webpack.config.constants.js @@ -0,0 +1,28 @@ +const path = require('path'); + +const SRC_MAIN = path.join(__dirname, 'src/main'); +const BUILD = path.join(__dirname, 'build/resources/main'); + +const SITE = 'site'; +const R4X_SUB_ENTRIES = '_entries'; // Special-case subdirectory under /react4xp/. All files under this will be their own chunk, for dynamic, on-demand asset loading of top-level components, which in turn uses shared components chunked under all other subdirectories. TODO: WHAT ABOUT FILES IN ROOT /R4X/ ? +const R4X_HOME = 'react4xp'; + +const R4X_TARGETSUBDIR = R4X_HOME; +const SRC_R4X = path.join(SRC_MAIN, R4X_HOME); +const BUILD_R4X = path.join(BUILD, R4X_TARGETSUBDIR); + +const SRC_SITE = path.join(SRC_MAIN, "resources", SITE); + +const R4X_ENTRIES = path.join(R4X_HOME, R4X_SUB_ENTRIES); +const SRC_R4X_ENTRIES = path.join(SRC_MAIN, R4X_ENTRIES); + +const BUILD_ENV = 'development'; /*/'production' //*/ +const LIBRARY_NAME = 'React4xp'; + +module.exports = { + SITE, + SRC_MAIN, SRC_R4X, SRC_SITE, SRC_R4X_ENTRIES, + R4X_TARGETSUBDIR, R4X_ENTRIES, R4X_SUB_ENTRIES, R4X_HOME, + BUILD, BUILD_R4X, + BUILD_ENV, LIBRARY_NAME +}; diff --git a/webpack.config.react4xp.backCore.js_OBSOLETE b/webpack.config.react4xp.backCore.js_OBSOLETE deleted file mode 100644 index 2359468d..00000000 --- a/webpack.config.react4xp.backCore.js_OBSOLETE +++ /dev/null @@ -1,42 +0,0 @@ -const path = require('path'); - -const NODE_MODULES = path.join(__dirname, 'node_modules'); -const BUILD = path.join(__dirname, 'build', 'resources', 'main', 'lib', 'enonic', 'react4xp'); - - -module.exports = { - mode: 'development', - - entry: { - 'backendReact': path.join(NODE_MODULES, 'react', 'index.js'), - 'backendReactDOMServer': path.join(NODE_MODULES, 'react-dom', 'server.js') - }, - - output: { - path: BUILD, // <-- Sets the base url for plugins and other target dirs. Note the use of {{assetUrl}} in index.html (or index.ejs). - filename: "[name].js", - libraryTarget: 'var', - //library: ['[name]'] - }, - - resolve: { - extensions: ['.es6', '.js', '.jsx'] - }, - module: { - rules: [ - { - // Babel for building static assets - test: /\.((jsx?)|(es6))$/, - exclude: /[\\/]node_modules[\\/]/, - loader: 'babel-loader', - query: { - compact: false - } - } - ] - }, - - /*plugins: [ - new CleanWebpackPlugin(BUILD), - ]//*/ -}; diff --git a/webpack.config.react4xp.frontCore.js b/webpack.config.react4xp.frontCore.js index fc7e176a..f5bb9648 100644 --- a/webpack.config.react4xp.frontCore.js +++ b/webpack.config.react4xp.frontCore.js @@ -2,22 +2,11 @@ const path = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); -const SRC_MAIN = path.join(__dirname, 'src/main'); -const BUILD = path.join(__dirname, 'build/resources/main'); - -const R4X_HOME = 'react4xp'; - -const R4X_TARGETSUBDIR = R4X_HOME; - -const SRC_R4X = path.join(SRC_MAIN, R4X_HOME); - -const BUILD_R4X = path.join(BUILD, R4X_TARGETSUBDIR); - -const MODE = 'development'; /*/'production' //*/ +const { SRC_R4X, BUILD_R4X, BUILD_ENV, LIBRARY_NAME } = require('./webpack.config.constants'); module.exports = { - mode: MODE, - + mode: BUILD_ENV, + entry: { 'Core': path.join(SRC_R4X, '_frontendCore_.es6'), }, @@ -26,13 +15,13 @@ module.exports = { path: BUILD_R4X, // <-- Sets the base url for plugins and other target dirs. Note the use of {{assetUrl}} in index.html (or index.ejs). filename: "[name].[contenthash:9].js", libraryTarget: 'var', // 'var' would easier to use in pure-frontend, accessing exports like: React.[name].function() etc... But 'commonjs' makes chunks easier to use from nashorn. - library: ['React4xp', '[name]'], + library: [LIBRARY_NAME, '[name]'], }, - + resolve: { extensions: ['.es6', '.js', '.jsx'] }, - devtool: 'source-map', + devtool: (BUILD_ENV === 'production') ? false : 'source-map', module: { rules: [ { @@ -41,7 +30,7 @@ module.exports = { exclude: /[\\/]node_modules[\\/]/, loader: 'babel-loader', query: { - compact: (MODE === 'production'), + compact: (BUILD_ENV === 'production'), }, } ] @@ -54,5 +43,20 @@ module.exports = { template: path.join(SRC_R4X, 'core.json.ejs'), filename: path.join(BUILD_R4X, 'core.json') }), - ] + ], + + /*optimization: { + splitChunks: { + name: false, + cacheGroups: { + frontendCoreVendors: { + name: 'frontendCoreVendors', + enforce: true, + test: /[\\/]node_modules[\\/]/, + chunks: 'all', + priority: 100 + }, + } + } + } //*/ }; diff --git a/webpack.config.react4xp.js b/webpack.config.react4xp.js index ebb365be..1e18b48a 100644 --- a/webpack.config.react4xp.js +++ b/webpack.config.react4xp.js @@ -3,27 +3,13 @@ const glob = require('glob'); const HtmlWebpackPlugin = require('html-webpack-plugin'); -const SRC_MAIN = path.join(__dirname, 'src/main'); -const BUILD = path.join(__dirname, 'build/resources/main'); +const { + SITE, SRC_R4X, SRC_SITE, SRC_R4X_ENTRIES, R4X_SUB_ENTRIES, BUILD_R4X, BUILD_ENV, LIBRARY_NAME +} = require('./webpack.config.constants'); -const SITE = 'site'; -const R4X_HOME = 'react4xp'; -const R4X_SUB_ENTRIES = '_entries'; // Special-case subdirectory under /react4xp/. All files under this will be their own chunk, for dynamic, on-demand asset loading of top-level components, which in turn uses shared components chunked under all other subdirectories. TODO: WHAT ABOUT FILES IN ROOT /R4X/ ? - -const SRC_SITE = path.join(SRC_MAIN, "resources", SITE); - -const R4X_TARGETSUBDIR = R4X_HOME; -const R4X_ENTRIES = path.join(R4X_HOME, R4X_SUB_ENTRIES); - -const SRC_R4X = path.join(SRC_MAIN, R4X_HOME); -const SRC_R4X_ENTRIES = path.join(SRC_MAIN, R4X_ENTRIES); - -const BUILD_R4X = path.join(BUILD, R4X_TARGETSUBDIR); - -const MODE = 'development'; /*/'production' //*/ module.exports = { - mode: MODE, + mode: BUILD_ENV, entry: Object.assign({}, getEntries(SRC_R4X_ENTRIES, ['jsx', 'js', 'es6'], ""), @@ -35,13 +21,13 @@ module.exports = { filename: "[name].js", chunkFilename: "[name].[contenthash:9].js", libraryTarget: 'var', // 'var' would easier to use in pure-frontend, accessing exports like: React.[name].function() etc... But 'commonjs' makes chunks easier to use from nashorn. - library: ['React4xp', '[name]'], + library: [LIBRARY_NAME, '[name]'], }, resolve: { extensions: ['.es6', '.js', '.jsx', '.less'] }, - devtool: 'source-map', + devtool: (BUILD_ENV === 'production') ? false : 'source-map', module: { rules: [ { @@ -50,7 +36,7 @@ module.exports = { exclude: /[\\/]node_modules[\\/]/, loader: 'babel-loader', query: { - compact: (MODE === 'production'), + compact: (BUILD_ENV === 'production'), }, }, { test: /\.less$/, From 63b705e0bf0a730e7094872be2de87914fbba28f Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Sun, 20 Jan 2019 04:14:06 +0100 Subject: [PATCH 45/96] Works, with externals. --- build.gradle | 20 ++++++++- ...config.constants.js => config.constants.js | 32 ++++++++++++-- config.constants.json | 6 +++ package-lock.json | 18 ++++++++ package.json | 13 +++--- src/main/react4xp/_externals_.es6 | 8 ++++ src/main/react4xp/commonChunks.json.ejs | 6 ++- src/main/react4xp/commonChunks.xml.ejs | 2 +- src/main/react4xp/externals.json.ejs | 8 ++++ .../resources/lib/enonic/react4xp/index.es6 | 1 + .../resources/services/react4xp/react4xp.es6 | 2 +- webpack.config.react4xp.externals.js | 43 +++++++++++++++++++ webpack.config.react4xp.frontCore.js | 20 ++------- webpack.config.react4xp.js | 6 ++- 14 files changed, 153 insertions(+), 32 deletions(-) rename webpack.config.constants.js => config.constants.js (50%) create mode 100644 config.constants.json create mode 100644 src/main/react4xp/_externals_.es6 create mode 100644 src/main/react4xp/externals.json.ejs create mode 100644 webpack.config.react4xp.externals.js diff --git a/build.gradle b/build.gradle index 8bbbb516..ef38b8ee 100644 --- a/build.gradle +++ b/build.gradle @@ -66,12 +66,26 @@ babelXP.dependsOn += 'npmInstall' babelXP.dependsOn += 'processResources' +task webpack_r4xp_externals(type: NodeTask) { + script = file('node_modules/webpack/bin/webpack.js') + args = ['--config', 'webpack.config.react4xp.externals.js'] + + inputs.file("config.constants.json") + inputs.file("config.constants.js") + inputs.file("webpack.config.react4xp.externals.js") + inputs.dir("node_modules") + inputs.dir("src/main/react4xp") + outputs.dir("build/resources/main/react4xp") +} +webpack_r4xp_externals.dependsOn += 'npmInstall' + task webpack_r4xp_frontCore(type: NodeTask) { script = file('node_modules/webpack/bin/webpack.js') args = ['--config', 'webpack.config.react4xp.frontCore.js'] - inputs.file("webpack.config.constants.js") + inputs.file("config.constants.json") + inputs.file("config.constants.js") inputs.file("webpack.config.react4xp.frontCore.js") inputs.dir("node_modules") inputs.dir("src/main/react4xp") @@ -84,7 +98,8 @@ task webpack_r4xp(type: NodeTask) { script = file('node_modules/webpack/bin/webpack.js') args = ['--config', 'webpack.config.react4xp.js'] - inputs.file("webpack.config.constants.js") + inputs.file("config.constants.json") + inputs.file("config.constants.js") inputs.file("webpack.config.react4xp.js") inputs.dir("node_modules") inputs.dir("src/main/react4xp") @@ -103,4 +118,5 @@ webpack_r4xp.dependsOn += 'npmInstall' jar.dependsOn babelXP jar.dependsOn += 'webpack_r4xp' jar.dependsOn += 'webpack_r4xp_frontCore' +jar.dependsOn += 'webpack_r4xp_externals' diff --git a/webpack.config.constants.js b/config.constants.js similarity index 50% rename from webpack.config.constants.js rename to config.constants.js index 14d180a6..766741a2 100644 --- a/webpack.config.constants.js +++ b/config.constants.js @@ -1,4 +1,5 @@ const path = require('path'); +const fs = require('fs'); const SRC_MAIN = path.join(__dirname, 'src/main'); const BUILD = path.join(__dirname, 'build/resources/main'); @@ -16,13 +17,38 @@ const SRC_SITE = path.join(SRC_MAIN, "resources", SITE); const R4X_ENTRIES = path.join(R4X_HOME, R4X_SUB_ENTRIES); const SRC_R4X_ENTRIES = path.join(SRC_MAIN, R4X_ENTRIES); -const BUILD_ENV = 'development'; /*/'production' //*/ +const BUILD_ENV = 'production'; /*/ 'development'; //*/ const LIBRARY_NAME = 'React4xp'; +// Shared constants that for different reasons must be available in a mor general format than JS: +const JSON_CONSTANTS = JSON.parse(fs.readFileSync('config.constants.json', 'utf8')); + +/* Common externals from a file, since these values must match everywhere + and is shared by a gradle step as well as all webpack steps. + If ever using anything else than output.libraryTarget: 'var' (corresponds to global variable, or "root"), + use this in the json file instead, etc: + + "react": { + "root": "React", + "commonjs2": "react", + "commonjs": "react", + "amd": "react" + }, + "react-dom": { + "root": "ReactDOM", + "commonjs2": "react-dom", + "commonjs": "react-dom", + "amd": "react-dom" + } +*/ +const EXTERNALS = JSON_CONSTANTS.EXTERNALS; +console.log(EXTERNALS); + module.exports = { SITE, SRC_MAIN, SRC_R4X, SRC_SITE, SRC_R4X_ENTRIES, R4X_TARGETSUBDIR, R4X_ENTRIES, R4X_SUB_ENTRIES, R4X_HOME, - BUILD, BUILD_R4X, - BUILD_ENV, LIBRARY_NAME + BUILD, BUILD_R4X, BUILD_ENV, + LIBRARY_NAME, + EXTERNALS }; diff --git a/config.constants.json b/config.constants.json new file mode 100644 index 00000000..e8573768 --- /dev/null +++ b/config.constants.json @@ -0,0 +1,6 @@ +{ + "EXTERNALS": { + "react": "React", + "react-dom": "ReactDOM" + } +} diff --git a/package-lock.json b/package-lock.json index 3a22a6f5..01e9de0a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2939,6 +2939,24 @@ } } }, + "exports-loader": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/exports-loader/-/exports-loader-0.7.0.tgz", + "integrity": "sha512-RKwCrO4A6IiKm0pG3c9V46JxIHcDplwwGJn6+JJ1RcVnh/WSGJa0xkmk5cRVtgOPzCAtTMGj2F7nluh9L0vpSA==", + "dev": true, + "requires": { + "loader-utils": "1.1.0", + "source-map": "0.5.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.0.tgz", + "integrity": "sha1-D+llA6yGpa213mP05BKuSHLNvoY=", + "dev": true + } + } + }, "extend-shallow": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", diff --git a/package.json b/package.json index 16e11c29..9062e0f2 100644 --- a/package.json +++ b/package.json @@ -8,12 +8,12 @@ "build:xp": "./gradlew babelXP", "watch:xp": "./gradlew deploy -t", "rm": "node_modules/rimraf/bin.js build", - "build:r4xp": "node_modules/webpack/bin/webpack.js --config webpack.config.react4xp.js --color --progress", - "watch:r4xp": "node_modules/webpack/bin/webpack.js --config webpack.config.react4xp.js --color --progress --watch", - "build:r4xp-back": "node_modules/webpack/bin/webpack.js --config webpack.config.react4xp.backCore.js --color --progress", - "watch:r4xp-back": "node_modules/webpack/bin/webpack.js --config webpack.config.react4xp.backCore.js --color --progress --watch", - "build:r4xp-front": "node_modules/webpack/bin/webpack.js --config webpack.config.react4xp.frontCore.js --color --progress", - "watch:r4xp-front": "node_modules/webpack/bin/webpack.js --config webpack.config.react4xp.frontCore.js --color --progress --watch" + "build:r4xp": "node_modules/webpack/bin/webpack.js --config webpack.config.react4xp.js --progress", + "watch:r4xp": "node_modules/webpack/bin/webpack.js --config webpack.config.react4xp.js --progress --watch", + "build:r4xp-ext": "node_modules/webpack/bin/webpack.js --config webpack.config.react4xp.externals.js --progress", + "watch:r4xp-ext": "node_modules/webpack/bin/webpack.js --config webpack.config.react4xp.externals.js --progress --watch", + "build:r4xp-front": "node_modules/webpack/bin/webpack.js --config webpack.config.react4xp.frontCore.js --progress", + "watch:r4xp-front": "node_modules/webpack/bin/webpack.js --config webpack.config.react4xp.frontCore.js --progress --watch" }, "repository": { "type": "git", @@ -50,6 +50,7 @@ "clean-webpack-plugin": "^1.0.0", "copy-webpack-plugin": "^4.6.0", "css-loader": "^0.28.11", + "exports-loader": "^0.7.0", "html-webpack-plugin": "^3.2.0", "less-loader": "^4.1.0", "rimraf": "^2.6.3", diff --git a/src/main/react4xp/_externals_.es6 b/src/main/react4xp/_externals_.es6 new file mode 100644 index 00000000..145d44f0 --- /dev/null +++ b/src/main/react4xp/_externals_.es6 @@ -0,0 +1,8 @@ +// TODO: Autogenerate from webpack.config.constants.json .EXTERNALS: +import ReactDOM from 'react-dom'; +import React from 'react'; + +(function(window){ + window.React = React; + window.ReactDOM = ReactDOM; +})(typeof window !== 'undefined' ? window : global); diff --git a/src/main/react4xp/commonChunks.json.ejs b/src/main/react4xp/commonChunks.json.ejs index a9c89485..5e7c4a67 100644 --- a/src/main/react4xp/commonChunks.json.ejs +++ b/src/main/react4xp/commonChunks.json.ejs @@ -1,10 +1,14 @@ { "commonChunks": { "headEnd": [ - {"name": "vendors", "entry": "<%= htmlWebpackPlugin.files.chunks.vendors.entry %>" }, {"name": "common", "entry": "<%= htmlWebpackPlugin.files.chunks.common.entry %>"}, {"name": "components", "entry": "<%= htmlWebpackPlugin.files.chunks.components.entry %>"} ], "bodyEnd": [] + }, + "deprecatedCommonChunks": { + "headEnd": [ + {"name": "vendors", "entry": "<#%#= htmlWebpackPlugin.files.chunks.vendors.entry #%#>" } + ] } } diff --git a/src/main/react4xp/commonChunks.xml.ejs b/src/main/react4xp/commonChunks.xml.ejs index be36749a..f8bb7aba 100644 --- a/src/main/react4xp/commonChunks.xml.ejs +++ b/src/main/react4xp/commonChunks.xml.ejs @@ -1,7 +1,7 @@ - + diff --git a/src/main/react4xp/externals.json.ejs b/src/main/react4xp/externals.json.ejs new file mode 100644 index 00000000..42f0658e --- /dev/null +++ b/src/main/react4xp/externals.json.ejs @@ -0,0 +1,8 @@ +{ + "commonChunks": { + "headEnd": [ + {"name": "externals", "entry": "<%= htmlWebpackPlugin.files.chunks.externals.entry %>"} + ], + "bodyEnd": [] + } +} diff --git a/src/main/resources/lib/enonic/react4xp/index.es6 b/src/main/resources/lib/enonic/react4xp/index.es6 index a5b4a41e..4523fdf4 100644 --- a/src/main/resources/lib/enonic/react4xp/index.es6 +++ b/src/main/resources/lib/enonic/react4xp/index.es6 @@ -53,6 +53,7 @@ const buildBasicPageContributions = (chunkHashFiles) => { // Use the two json files built by webpack to fetch the contenthashed filenames for common chunks. Then use those to // build a set of basic page contributions common to all components: const PAGE_CONTRIBUTIONS = buildBasicPageContributions([ + `/${R4X}/externals.json`, `/${R4X}/core.json`, `/${R4X}/commonChunks.json` ]); diff --git a/src/main/resources/services/react4xp/react4xp.es6 b/src/main/resources/services/react4xp/react4xp.es6 index 3183f0eb..8d398b96 100644 --- a/src/main/resources/services/react4xp/react4xp.es6 +++ b/src/main/resources/services/react4xp/react4xp.es6 @@ -13,7 +13,7 @@ const REACT4XP_ROOT = `/${R4X}/`; // TODO: How to update ETag headers for non-cached, short-lived resources? const react4xpCache = cacheLib.newCache({ size: 30, - expire: 10800, // 3 hours + expire: 10, //10800 = 3 hours }); diff --git a/webpack.config.react4xp.externals.js b/webpack.config.react4xp.externals.js new file mode 100644 index 00000000..09ffbd4b --- /dev/null +++ b/webpack.config.react4xp.externals.js @@ -0,0 +1,43 @@ +const path = require('path'); + +const HtmlWebpackPlugin = require('html-webpack-plugin'); + +const { SRC_R4X, BUILD_R4X, BUILD_ENV } = require('./config.constants'); + +module.exports = { + mode: BUILD_ENV, + + entry: { + 'externals': path.join(SRC_R4X, '_externals_.es6'), + }, + + output: { + path: BUILD_R4X, // <-- Sets the base url for plugins and other target dirs. Note the use of {{assetUrl}} in index.html (or index.ejs). + filename: "[name].[contenthash:9].js", + }, + + resolve: { + extensions: ['.es6', '.js', '.jsx'] + }, + module: { + rules: [ + { + test: /\.((jsx?)|(es6))$/, + exclude: /node_modules/, + loader: 'babel-loader', + query: { + compact: (BUILD_ENV === 'production'), + } + } + ] + }, + + plugins: [ + new HtmlWebpackPlugin({ + inject: false, + hash: false, + template: path.join(SRC_R4X, 'externals.json.ejs'), + filename: path.join(BUILD_R4X, 'externals.json') + }), + ], +}; diff --git a/webpack.config.react4xp.frontCore.js b/webpack.config.react4xp.frontCore.js index f5bb9648..eae66fb5 100644 --- a/webpack.config.react4xp.frontCore.js +++ b/webpack.config.react4xp.frontCore.js @@ -2,13 +2,13 @@ const path = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); -const { SRC_R4X, BUILD_R4X, BUILD_ENV, LIBRARY_NAME } = require('./webpack.config.constants'); +const { SRC_R4X, BUILD_R4X, BUILD_ENV, LIBRARY_NAME, EXTERNALS } = require('./config.constants'); module.exports = { mode: BUILD_ENV, entry: { - 'Core': path.join(SRC_R4X, '_frontendCore_.es6'), + 'Core': path.join(SRC_R4X, '_frontendCore_.es6') }, output: { @@ -36,6 +36,8 @@ module.exports = { ] }, + externals: EXTERNALS, + plugins: [ new HtmlWebpackPlugin({ inject: false, @@ -45,18 +47,4 @@ module.exports = { }), ], - /*optimization: { - splitChunks: { - name: false, - cacheGroups: { - frontendCoreVendors: { - name: 'frontendCoreVendors', - enforce: true, - test: /[\\/]node_modules[\\/]/, - chunks: 'all', - priority: 100 - }, - } - } - } //*/ }; diff --git a/webpack.config.react4xp.js b/webpack.config.react4xp.js index 1e18b48a..53b32036 100644 --- a/webpack.config.react4xp.js +++ b/webpack.config.react4xp.js @@ -4,8 +4,8 @@ const glob = require('glob'); const HtmlWebpackPlugin = require('html-webpack-plugin'); const { - SITE, SRC_R4X, SRC_SITE, SRC_R4X_ENTRIES, R4X_SUB_ENTRIES, BUILD_R4X, BUILD_ENV, LIBRARY_NAME -} = require('./webpack.config.constants'); + SITE, SRC_R4X, SRC_SITE, SRC_R4X_ENTRIES, R4X_SUB_ENTRIES, BUILD_R4X, BUILD_ENV, LIBRARY_NAME, EXTERNALS +} = require('./config.constants'); module.exports = { @@ -45,6 +45,8 @@ module.exports = { ] }, + externals: EXTERNALS, + plugins: [ // TODO: Autogenerate these: new HtmlWebpackPlugin({ From 9478553bb4a4f4491baa6a58f2fdd9bc2e5b6942 Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Sun, 20 Jan 2019 04:51:28 +0100 Subject: [PATCH 46/96] Works. Autogenerates the externals source file prior to transpiling it into the externals (i.e. vendors) file. --- .gitignore | 1 + build.gradle | 30 ++++++++++++++++++++++++++++ src/main/react4xp/_externals_.es6 | 8 -------- webpack.config.react4xp.externals.js | 2 +- 4 files changed, 32 insertions(+), 9 deletions(-) delete mode 100644 src/main/react4xp/_externals_.es6 diff --git a/.gitignore b/.gitignore index 0afec7b4..b14ffe18 100644 --- a/.gitignore +++ b/.gitignore @@ -92,3 +92,4 @@ crashlytics-build.properties node_modules/ bin/ +**/_AUTOGENERATED_externals_.es6 diff --git a/build.gradle b/build.gradle index ef38b8ee..981b6e9c 100644 --- a/build.gradle +++ b/build.gradle @@ -65,8 +65,38 @@ task babelXP(type: NodeTask) { babelXP.dependsOn += 'npmInstall' babelXP.dependsOn += 'processResources' +import groovy.json.JsonSlurper task webpack_r4xp_externals(type: NodeTask) { + doFirst { + /* Generate an entry file for bundling externals into one cacheable file. + For example (if the file config.constants.json contains an EXTERNALS object like this: { "react": "React", "react-dom": "ReactDOM" } ): + + import ReactDOM from 'react-dom'; + import React from 'react'; + + (function(window){ + window.React = React; + window.ReactDOM = ReactDOM; + })(typeof window !== 'undefined' ? window : global); + */ + + String externalsJson = new File('config.constants.json').text; + def jsonSlurper = new JsonSlurper() + def exts = jsonSlurper.parseText(externalsJson).EXTERNALS + + def externalsImports = ""; + def externalsExports = ""; + exts.each{ k, v -> externalsImports += "import ${v} from '${k}';\n" } + exts.each{ k, v -> externalsExports += "\twindow.${v} = ${v};\n" } + + def externalsES6 = "// AUTO-GENERATED in gradle task 'webpack_r4xp_externals'\n\n" + externalsImports + "\n(function(window) {\n" + externalsExports + "} )(typeof window !== 'undefined' ? window : global);\n" + + def externalsFile = new File('src/main/react4xp/_AUTOGENERATED_externals_.es6') + externalsFile.write externalsES6 + + } + script = file('node_modules/webpack/bin/webpack.js') args = ['--config', 'webpack.config.react4xp.externals.js'] diff --git a/src/main/react4xp/_externals_.es6 b/src/main/react4xp/_externals_.es6 deleted file mode 100644 index 145d44f0..00000000 --- a/src/main/react4xp/_externals_.es6 +++ /dev/null @@ -1,8 +0,0 @@ -// TODO: Autogenerate from webpack.config.constants.json .EXTERNALS: -import ReactDOM from 'react-dom'; -import React from 'react'; - -(function(window){ - window.React = React; - window.ReactDOM = ReactDOM; -})(typeof window !== 'undefined' ? window : global); diff --git a/webpack.config.react4xp.externals.js b/webpack.config.react4xp.externals.js index 09ffbd4b..bdd41807 100644 --- a/webpack.config.react4xp.externals.js +++ b/webpack.config.react4xp.externals.js @@ -8,7 +8,7 @@ module.exports = { mode: BUILD_ENV, entry: { - 'externals': path.join(SRC_R4X, '_externals_.es6'), + 'externals': path.join(SRC_R4X, '_AUTOGENERATED_externals_.es6'), // Built during the gradle step that triggers this webpack step: webpack_r4xp_externals }, output: { From 141e592cf27c94e0b2c5e5bdb848ad9301f8c1b0 Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Sun, 20 Jan 2019 05:02:17 +0100 Subject: [PATCH 47/96] Comments and tidying. Ready to move on: are these transpiled assets ready to run in nashorn? --- config.constants.js | 1 - src/main/resources/lib/enonic/react4xp/index.es6 | 4 ++-- src/main/resources/services/react4xp/react4xp.es6 | 9 +++++++-- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/config.constants.js b/config.constants.js index 766741a2..21339ce6 100644 --- a/config.constants.js +++ b/config.constants.js @@ -42,7 +42,6 @@ const JSON_CONSTANTS = JSON.parse(fs.readFileSync('config.constants.json', 'utf8 } */ const EXTERNALS = JSON_CONSTANTS.EXTERNALS; -console.log(EXTERNALS); module.exports = { SITE, diff --git a/src/main/resources/lib/enonic/react4xp/index.es6 b/src/main/resources/lib/enonic/react4xp/index.es6 index 4523fdf4..f8092012 100644 --- a/src/main/resources/lib/enonic/react4xp/index.es6 +++ b/src/main/resources/lib/enonic/react4xp/index.es6 @@ -50,8 +50,8 @@ const buildBasicPageContributions = (chunkHashFiles) => { -// Use the two json files built by webpack to fetch the contenthashed filenames for common chunks. Then use those to -// build a set of basic page contributions common to all components: +// Use the json files built by webpack to fetch the contenthashed filenames for commonChunks. +// Then use those to build a set of basic page contributions common to all components: const PAGE_CONTRIBUTIONS = buildBasicPageContributions([ `/${R4X}/externals.json`, `/${R4X}/core.json`, diff --git a/src/main/resources/services/react4xp/react4xp.es6 b/src/main/resources/services/react4xp/react4xp.es6 index 8d398b96..cdb82737 100644 --- a/src/main/resources/services/react4xp/react4xp.es6 +++ b/src/main/resources/services/react4xp/react4xp.es6 @@ -1,3 +1,6 @@ +// React4xp static-asset file server, with specified cache control headers +// TODO: This should probably be a controller-mapping instead of a service. Then it can be put in better places too. + var ioLib = require('/lib/xp/io'); var utilLib = require('/lib/enonic/util'); var cacheLib = require('/lib/cache'); @@ -9,11 +12,13 @@ const SERVICE_ROOT = `/_/service/${app.name}/${R4X}/`; const REACT4XP_ROOT = `/${R4X}/`; -// TODO: For content-hashed chunks, Cache-Control should be "private, max-age=31536000". For others, 3 hours? Use commonChunks to separate! +// TODO: For content-hashed chunks, Cache-Control should be "private, max-age=31536000". For others, 3 hours? +// TODO: Use the commonChunks files to figure this out. // TODO: How to update ETag headers for non-cached, short-lived resources? + const react4xpCache = cacheLib.newCache({ size: 30, - expire: 10, //10800 = 3 hours + expire: 10800 // 3 hours }); From 7970e5d552f4ede34b4cb1497bc436876198d808 Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Sun, 20 Jan 2019 05:34:28 +0100 Subject: [PATCH 48/96] Little bit of docs --- .../resources/lib/enonic/react4xp/index.es6 | 7 +------ webpack.config.react4xp.externals.js | 7 +++++++ webpack.config.react4xp.frontCore.js | 10 ++++++++++ webpack.config.react4xp.js | 20 +++++++++++++++++++ 4 files changed, 38 insertions(+), 6 deletions(-) diff --git a/src/main/resources/lib/enonic/react4xp/index.es6 b/src/main/resources/lib/enonic/react4xp/index.es6 index f8092012..916b3007 100644 --- a/src/main/resources/lib/enonic/react4xp/index.es6 +++ b/src/main/resources/lib/enonic/react4xp/index.es6 @@ -16,12 +16,7 @@ const BASE_PATHS = { const buildBasicPageContributions = (chunkHashFiles) => { - const pageContributions = { - // Polyfill commonJS for rendered frontend code? - /*headEnd: [ - '' - ],*/ - }; + const pageContributions = {}; chunkHashFiles.forEach(chunkFile => { const commonChunks = JSON.parse( diff --git a/webpack.config.react4xp.externals.js b/webpack.config.react4xp.externals.js index bdd41807..596739b1 100644 --- a/webpack.config.react4xp.externals.js +++ b/webpack.config.react4xp.externals.js @@ -1,3 +1,10 @@ +// Webpack for transpiling externals (aka vendors) chunk/asset file, for gathering up heavy and rarely-changed +// (and so, nicely cacheable) libs and dependencies - React etc. +// Basis for externals (affects other transpilations too): config.constants.json +// +// Output, externals.[contentHash].js, is content-hashed file name for cache busting, hash is stored for +// runtime reference in commonChunks.json. + const path = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); diff --git a/webpack.config.react4xp.frontCore.js b/webpack.config.react4xp.frontCore.js index eae66fb5..2cc8347b 100644 --- a/webpack.config.react4xp.frontCore.js +++ b/webpack.config.react4xp.frontCore.js @@ -1,3 +1,13 @@ +// Webpack for transpiling "frontend core": +// React4xp (not-third-party) the core functionality for running in the client, necessary +// for components to run/render. +// +// Look mainly at src/main/react4xp/_frontendCore_.es6. +// +// The output will be Core.[contentHash].js. Content-hashed file name for cache busting, hash is stored for +// runtime reference in commonChunks.json. + + const path = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); diff --git a/webpack.config.react4xp.js b/webpack.config.react4xp.js index 53b32036..20ef1409 100644 --- a/webpack.config.react4xp.js +++ b/webpack.config.react4xp.js @@ -1,3 +1,17 @@ +// Webpack for transpiling user-added JS, primarily react JSX components: top-level or shared components, component libraries. +// Look mainy for JSX files in: +// +// - src/main/react4xp: Here, each file under /_entries/ will become a separate, top-level component/asset, and +// all other dependencies to those, in all other folders below react4xp, will be bundled into chunks by the name of +// the folder. Third-pardy dependencies in /node_modules/ will be separated out into a vendors bundle, except for externals, +// (based on config.constants.json .EXTERNALS). +// +// All such second-level assets will have content-hashed file names for cache busting, hashes are stored for +// runtime reference in commonChunks.json. +// +// - ...and in the XP structure under src/main/resources/site: Here, JSX files are more tightly bound to their corresponding +// XP component (part, page, etc) but can still use the second-level dependency chunks mentioned above. + const path = require('path'); const glob = require('glob'); @@ -72,6 +86,7 @@ module.exports = { } }; +// Builds entries from files found under a directory, for selected file extensions, for bein transpiled out to a target path function getEntries(fullDirPath, extensions, targetPath) { const entries = {}; targetPath += "/"; @@ -96,6 +111,11 @@ function getEntries(fullDirPath, extensions, targetPath) { return entries } + +// Sets up chunking / code splitting: turns subfolders below src/main/react4xp (except _entries) +// into layers of dependency chunks: +// - vendors is third level / third party libs under /node_modules/ +// - subfolder names is second level, below the top-level entry components function getCacheGroups(priorities) { const chunks = { vendors: { From 64b67b9e717de834ee057c45a36c6e8d7b436443 Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Sun, 20 Jan 2019 16:48:44 +0100 Subject: [PATCH 49/96] Fixed the component name reference that broke the complex-reactive part. A few more build tweaks. --- build.gradle | 28 +- config.constants.js | 2 +- config.constants.json | 3 +- package-lock.json | 2929 ++++++++--------- package.json | 9 +- .../resources/lib/enonic/react4xp/index.es6 | 13 +- .../site/parts/complex-reactive/first.jsx | 6 +- .../site/parts/complex-reactive/second.jsx | 6 +- .../parts/simple-reactive/simple-reactive.jsx | 4 - webpack.config.react4xp.js | 16 +- 10 files changed, 1411 insertions(+), 1605 deletions(-) diff --git a/build.gradle b/build.gradle index 981b6e9c..f8a5d628 100644 --- a/build.gradle +++ b/build.gradle @@ -98,12 +98,14 @@ task webpack_r4xp_externals(type: NodeTask) { } script = file('node_modules/webpack/bin/webpack.js') - args = ['--config', 'webpack.config.react4xp.externals.js'] + args = ['--config', 'webpack.config.react4xp.externals.js', '--progress', '--color'] + + inputs.file("webpack.config.react4xp.externals.js") inputs.file("config.constants.json") inputs.file("config.constants.js") - inputs.file("webpack.config.react4xp.externals.js") - inputs.dir("node_modules") + inputs.file("package.json") + inputs.file("package-lock.json") inputs.dir("src/main/react4xp") outputs.dir("build/resources/main/react4xp") } @@ -112,12 +114,14 @@ webpack_r4xp_externals.dependsOn += 'npmInstall' task webpack_r4xp_frontCore(type: NodeTask) { script = file('node_modules/webpack/bin/webpack.js') - args = ['--config', 'webpack.config.react4xp.frontCore.js'] + args = ['--config', 'webpack.config.react4xp.frontCore.js', '--progress', '--color'] + + inputs.file("webpack.config.react4xp.frontCore.js") inputs.file("config.constants.json") inputs.file("config.constants.js") - inputs.file("webpack.config.react4xp.frontCore.js") - inputs.dir("node_modules") + inputs.file("package.json") + inputs.file("package-lock.json") inputs.dir("src/main/react4xp") outputs.dir("build/resources/main/react4xp") } @@ -126,14 +130,16 @@ webpack_r4xp_frontCore.dependsOn += 'npmInstall' task webpack_r4xp(type: NodeTask) { script = file('node_modules/webpack/bin/webpack.js') - args = ['--config', 'webpack.config.react4xp.js'] + args = ['--config', 'webpack.config.react4xp.js', '--progress', '--color'] + + inputs.file("webpack.config.react4xp.js") + inputs.dir("src/main/resources/site") inputs.file("config.constants.json") inputs.file("config.constants.js") - inputs.file("webpack.config.react4xp.js") - inputs.dir("node_modules") + inputs.file("package.json") + inputs.file("package-lock.json") inputs.dir("src/main/react4xp") - inputs.dir("src/main/resources/site") outputs.dir("build/resources/main/react4xp") /*doLast { @@ -150,3 +156,5 @@ jar.dependsOn += 'webpack_r4xp' jar.dependsOn += 'webpack_r4xp_frontCore' jar.dependsOn += 'webpack_r4xp_externals' +jar.outputs.dir('build/libs') + diff --git a/config.constants.js b/config.constants.js index 21339ce6..05dae8d6 100644 --- a/config.constants.js +++ b/config.constants.js @@ -17,7 +17,7 @@ const SRC_SITE = path.join(SRC_MAIN, "resources", SITE); const R4X_ENTRIES = path.join(R4X_HOME, R4X_SUB_ENTRIES); const SRC_R4X_ENTRIES = path.join(SRC_MAIN, R4X_ENTRIES); -const BUILD_ENV = 'production'; /*/ 'development'; //*/ +const BUILD_ENV = /*'production'; /*/ 'development'; //*/ const LIBRARY_NAME = 'React4xp'; // Shared constants that for different reasons must be available in a mor general format than JS: diff --git a/config.constants.json b/config.constants.json index e8573768..667a8010 100644 --- a/config.constants.json +++ b/config.constants.json @@ -1,6 +1,7 @@ { "EXTERNALS": { "react": "React", - "react-dom": "ReactDOM" + "react-dom": "ReactDOM", + "react-dom/server": "ReactDOMServer" } } diff --git a/package-lock.json b/package-lock.json index 01e9de0a..af2aa317 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.2.0.tgz", "integrity": "sha512-oouEibCbHMVdZSDlJBO6bZmID/zA/G/Qx3H1d3rSNPTD+L8UNKvCat7aKWSJ74zYbm5zWGh0GQN0hKj8zYFTCg==", "requires": { - "regenerator-runtime": "0.12.1" + "regenerator-runtime": "^0.12.0" }, "dependencies": { "regenerator-runtime": { @@ -93,7 +93,7 @@ "integrity": "sha512-Mmqx/cS68K1tSrvRLtaV/Lp3NZWzXtOHUW2IvDvl2sihAwJh4ACE0eL6A8FvMyDG9abes3saB6dMimLOs+HMoQ==", "dev": true, "requires": { - "@xtuc/ieee754": "1.2.0" + "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { @@ -215,7 +215,7 @@ "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==", "dev": true, "requires": { - "acorn": "5.7.3" + "acorn": "^5.0.0" } }, "ajv": { @@ -224,10 +224,10 @@ "integrity": "sha512-hOs7GfvI6tUI1LfZddH82ky6mOMyTuY0mk7kE2pWpmhhUSkumzaTO5vbVwij39MdwPQWCV4Zv57Eo06NtL/GVA==", "dev": true, "requires": { - "fast-deep-equal": "2.0.1", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.4.1", - "uri-js": "4.2.2" + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.1" } }, "ajv-errors": { @@ -264,8 +264,8 @@ "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=", "dev": true, "requires": { - "micromatch": "3.1.10", - "normalize-path": "2.1.1" + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" } }, "aproba": { @@ -280,7 +280,7 @@ "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=", "dev": true, "requires": { - "sprintf-js": "1.0.3" + "sprintf-js": "~1.0.2" } }, "arr-diff": { @@ -301,33 +301,12 @@ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", "dev": true }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "1.0.3" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, "array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - }, "asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", @@ -339,9 +318,9 @@ "integrity": "sha1-ucK/WAXx5kqt7tbfOiv6+1pz9aA=", "dev": true, "requires": { - "bn.js": "4.11.8", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, "assert": { @@ -394,12 +373,12 @@ "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", "dev": true, "requires": { - "browserslist": "1.7.7", - "caniuse-db": "1.0.30000864", - "normalize-range": "0.1.2", - "num2fraction": "1.2.2", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "browserslist": "^1.7.6", + "caniuse-db": "^1.0.30000634", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^5.2.16", + "postcss-value-parser": "^3.2.3" } }, "babel-cli": { @@ -408,21 +387,21 @@ "integrity": "sha1-UCq1SHTX24itALiHoGODzgPQAvE=", "dev": true, "requires": { - "babel-core": "6.26.3", - "babel-polyfill": "6.26.0", - "babel-register": "6.26.0", - "babel-runtime": "6.26.0", - "chokidar": "1.7.0", - "commander": "2.16.0", - "convert-source-map": "1.5.1", - "fs-readdir-recursive": "1.1.0", - "glob": "7.1.2", - "lodash": "4.17.10", - "output-file-sync": "1.1.2", - "path-is-absolute": "1.0.1", - "slash": "1.0.0", - "source-map": "0.5.7", - "v8flags": "2.1.1" + "babel-core": "^6.26.0", + "babel-polyfill": "^6.26.0", + "babel-register": "^6.26.0", + "babel-runtime": "^6.26.0", + "chokidar": "^1.6.1", + "commander": "^2.11.0", + "convert-source-map": "^1.5.0", + "fs-readdir-recursive": "^1.0.0", + "glob": "^7.1.2", + "lodash": "^4.17.4", + "output-file-sync": "^1.1.2", + "path-is-absolute": "^1.0.1", + "slash": "^1.0.0", + "source-map": "^0.5.6", + "v8flags": "^2.1.1" }, "dependencies": { "anymatch": { @@ -432,8 +411,8 @@ "dev": true, "optional": true, "requires": { - "micromatch": "2.3.11", - "normalize-path": "2.1.1" + "micromatch": "^2.1.5", + "normalize-path": "^2.0.0" } }, "arr-diff": { @@ -443,7 +422,7 @@ "dev": true, "optional": true, "requires": { - "arr-flatten": "1.1.0" + "arr-flatten": "^1.0.1" } }, "array-unique": { @@ -460,9 +439,9 @@ "dev": true, "optional": true, "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.2" + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" } }, "chokidar": { @@ -472,15 +451,15 @@ "dev": true, "optional": true, "requires": { - "anymatch": "1.3.2", - "async-each": "1.0.1", - "fsevents": "1.2.4", - "glob-parent": "2.0.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "2.0.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.1.0" + "anymatch": "^1.3.0", + "async-each": "^1.0.0", + "fsevents": "^1.0.0", + "glob-parent": "^2.0.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^2.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0" } }, "expand-brackets": { @@ -490,7 +469,7 @@ "dev": true, "optional": true, "requires": { - "is-posix-bracket": "0.1.1" + "is-posix-bracket": "^0.1.0" } }, "extglob": { @@ -500,7 +479,7 @@ "dev": true, "optional": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } }, "glob-parent": { @@ -510,7 +489,7 @@ "dev": true, "optional": true, "requires": { - "is-glob": "2.0.1" + "is-glob": "^2.0.0" } }, "is-extglob": { @@ -525,7 +504,7 @@ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } }, "micromatch": { @@ -535,19 +514,19 @@ "dev": true, "optional": true, "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.4" + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" } } } @@ -558,9 +537,9 @@ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", "dev": true, "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" } }, "babel-core": { @@ -569,25 +548,25 @@ "integrity": "sha1-suLwnjQtDwyI4vAuBneUEl51wgc=", "dev": true, "requires": { - "babel-code-frame": "6.26.0", - "babel-generator": "6.26.1", - "babel-helpers": "6.24.1", - "babel-messages": "6.23.0", - "babel-register": "6.26.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "convert-source-map": "1.5.1", - "debug": "2.6.9", - "json5": "0.5.1", - "lodash": "4.17.10", - "minimatch": "3.0.4", - "path-is-absolute": "1.0.1", - "private": "0.1.8", - "slash": "1.0.0", - "source-map": "0.5.7" + "babel-code-frame": "^6.26.0", + "babel-generator": "^6.26.0", + "babel-helpers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-register": "^6.26.0", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "convert-source-map": "^1.5.1", + "debug": "^2.6.9", + "json5": "^0.5.1", + "lodash": "^4.17.4", + "minimatch": "^3.0.4", + "path-is-absolute": "^1.0.1", + "private": "^0.1.8", + "slash": "^1.0.0", + "source-map": "^0.5.7" } }, "babel-generator": { @@ -596,14 +575,14 @@ "integrity": "sha1-GERAjTuPDTWkBOp6wYDwh6YBvZA=", "dev": true, "requires": { - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "detect-indent": "4.0.0", - "jsesc": "1.3.0", - "lodash": "4.17.10", - "source-map": "0.5.7", - "trim-right": "1.0.1" + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "detect-indent": "^4.0.0", + "jsesc": "^1.3.0", + "lodash": "^4.17.4", + "source-map": "^0.5.7", + "trim-right": "^1.0.1" } }, "babel-helper-bindify-decorators": { @@ -612,9 +591,9 @@ "integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-builder-binary-assignment-operator-visitor": { @@ -623,9 +602,9 @@ "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", "dev": true, "requires": { - "babel-helper-explode-assignable-expression": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-explode-assignable-expression": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-helper-builder-react-jsx": { @@ -634,9 +613,9 @@ "integrity": "sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "esutils": "2.0.2" + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "esutils": "^2.0.2" } }, "babel-helper-call-delegate": { @@ -645,10 +624,10 @@ "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", "dev": true, "requires": { - "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-define-map": { @@ -657,10 +636,10 @@ "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", "dev": true, "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.10" + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" } }, "babel-helper-explode-assignable-expression": { @@ -669,9 +648,9 @@ "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-explode-class": { @@ -680,10 +659,10 @@ "integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=", "dev": true, "requires": { - "babel-helper-bindify-decorators": "6.24.1", - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-bindify-decorators": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-function-name": { @@ -692,11 +671,11 @@ "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", "dev": true, "requires": { - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-get-function-arity": { @@ -705,8 +684,8 @@ "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-helper-hoist-variables": { @@ -715,8 +694,8 @@ "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-helper-optimise-call-expression": { @@ -725,8 +704,8 @@ "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-helper-regex": { @@ -735,9 +714,9 @@ "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.10" + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" } }, "babel-helper-remap-async-to-generator": { @@ -746,11 +725,11 @@ "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", "dev": true, "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-replace-supers": { @@ -759,12 +738,12 @@ "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", "dev": true, "requires": { - "babel-helper-optimise-call-expression": "6.24.1", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helpers": { @@ -773,8 +752,8 @@ "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-loader": { @@ -783,9 +762,9 @@ "integrity": "sha512-/hbyEvPzBJuGpk9o80R0ZyTej6heEOr59GoEUtn8qFKbnx4cJm9FWES6J/iv644sYgrtVw9JJQkjaLW/bqb5gw==", "dev": true, "requires": { - "find-cache-dir": "1.0.0", - "loader-utils": "1.1.0", - "mkdirp": "0.5.1" + "find-cache-dir": "^1.0.0", + "loader-utils": "^1.0.2", + "mkdirp": "^0.5.1" } }, "babel-messages": { @@ -794,7 +773,7 @@ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-check-es2015-constants": { @@ -803,7 +782,7 @@ "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-syntax-async-functions": { @@ -896,9 +875,9 @@ "integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=", "dev": true, "requires": { - "babel-helper-remap-async-to-generator": "6.24.1", - "babel-plugin-syntax-async-generators": "6.13.0", - "babel-runtime": "6.26.0" + "babel-helper-remap-async-to-generator": "^6.24.1", + "babel-plugin-syntax-async-generators": "^6.5.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-async-to-generator": { @@ -907,9 +886,9 @@ "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", "dev": true, "requires": { - "babel-helper-remap-async-to-generator": "6.24.1", - "babel-plugin-syntax-async-functions": "6.13.0", - "babel-runtime": "6.26.0" + "babel-helper-remap-async-to-generator": "^6.24.1", + "babel-plugin-syntax-async-functions": "^6.8.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-class-constructor-call": { @@ -918,9 +897,9 @@ "integrity": "sha1-gNwoVQWsBn3LjWxl4vbxGrd2Xvk=", "dev": true, "requires": { - "babel-plugin-syntax-class-constructor-call": "6.18.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-plugin-syntax-class-constructor-call": "^6.18.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-class-properties": { @@ -929,10 +908,10 @@ "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=", "dev": true, "requires": { - "babel-helper-function-name": "6.24.1", - "babel-plugin-syntax-class-properties": "6.13.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-helper-function-name": "^6.24.1", + "babel-plugin-syntax-class-properties": "^6.8.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-decorators": { @@ -941,11 +920,11 @@ "integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=", "dev": true, "requires": { - "babel-helper-explode-class": "6.24.1", - "babel-plugin-syntax-decorators": "6.13.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-explode-class": "^6.24.1", + "babel-plugin-syntax-decorators": "^6.13.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-do-expressions": { @@ -954,8 +933,8 @@ "integrity": "sha1-KMyvkoEtlJws0SgfaQyP3EaK6bs=", "dev": true, "requires": { - "babel-plugin-syntax-do-expressions": "6.13.0", - "babel-runtime": "6.26.0" + "babel-plugin-syntax-do-expressions": "^6.8.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-arrow-functions": { @@ -964,7 +943,7 @@ "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-block-scoped-functions": { @@ -973,7 +952,7 @@ "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-block-scoping": { @@ -982,11 +961,11 @@ "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.10" + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" } }, "babel-plugin-transform-es2015-classes": { @@ -995,15 +974,15 @@ "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", "dev": true, "requires": { - "babel-helper-define-map": "6.26.0", - "babel-helper-function-name": "6.24.1", - "babel-helper-optimise-call-expression": "6.24.1", - "babel-helper-replace-supers": "6.24.1", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-define-map": "^6.24.1", + "babel-helper-function-name": "^6.24.1", + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-helper-replace-supers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-computed-properties": { @@ -1012,8 +991,8 @@ "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-es2015-destructuring": { @@ -1022,7 +1001,7 @@ "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-duplicate-keys": { @@ -1031,8 +1010,8 @@ "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-for-of": { @@ -1041,7 +1020,7 @@ "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-function-name": { @@ -1050,9 +1029,9 @@ "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", "dev": true, "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-literals": { @@ -1061,7 +1040,7 @@ "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-modules-amd": { @@ -1070,9 +1049,9 @@ "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", "dev": true, "requires": { - "babel-plugin-transform-es2015-modules-commonjs": "6.26.2", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-es2015-modules-commonjs": { @@ -1081,10 +1060,10 @@ "integrity": "sha1-WKeThjqefKhwvcWogRF/+sJ9tvM=", "dev": true, "requires": { - "babel-plugin-transform-strict-mode": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-types": "6.26.0" + "babel-plugin-transform-strict-mode": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-types": "^6.26.0" } }, "babel-plugin-transform-es2015-modules-systemjs": { @@ -1093,9 +1072,9 @@ "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", "dev": true, "requires": { - "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-es2015-modules-umd": { @@ -1104,9 +1083,9 @@ "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", "dev": true, "requires": { - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-plugin-transform-es2015-modules-amd": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-es2015-object-super": { @@ -1115,8 +1094,8 @@ "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", "dev": true, "requires": { - "babel-helper-replace-supers": "6.24.1", - "babel-runtime": "6.26.0" + "babel-helper-replace-supers": "^6.24.1", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-parameters": { @@ -1125,12 +1104,12 @@ "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", "dev": true, "requires": { - "babel-helper-call-delegate": "6.24.1", - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-call-delegate": "^6.24.1", + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-shorthand-properties": { @@ -1139,8 +1118,8 @@ "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-spread": { @@ -1149,7 +1128,7 @@ "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-sticky-regex": { @@ -1158,9 +1137,9 @@ "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", "dev": true, "requires": { - "babel-helper-regex": "6.26.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-template-literals": { @@ -1169,7 +1148,7 @@ "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-typeof-symbol": { @@ -1178,7 +1157,7 @@ "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-unicode-regex": { @@ -1187,9 +1166,9 @@ "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", "dev": true, "requires": { - "babel-helper-regex": "6.26.0", - "babel-runtime": "6.26.0", - "regexpu-core": "2.0.0" + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "regexpu-core": "^2.0.0" } }, "babel-plugin-transform-exponentiation-operator": { @@ -1198,9 +1177,9 @@ "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", "dev": true, "requires": { - "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1", - "babel-plugin-syntax-exponentiation-operator": "6.13.0", - "babel-runtime": "6.26.0" + "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1", + "babel-plugin-syntax-exponentiation-operator": "^6.8.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-export-extensions": { @@ -1209,8 +1188,8 @@ "integrity": "sha1-U3OLR+deghhYnuqUbLvTkQm75lM=", "dev": true, "requires": { - "babel-plugin-syntax-export-extensions": "6.13.0", - "babel-runtime": "6.26.0" + "babel-plugin-syntax-export-extensions": "^6.8.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-flow-strip-types": { @@ -1219,8 +1198,8 @@ "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=", "dev": true, "requires": { - "babel-plugin-syntax-flow": "6.18.0", - "babel-runtime": "6.26.0" + "babel-plugin-syntax-flow": "^6.18.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-function-bind": { @@ -1229,8 +1208,8 @@ "integrity": "sha1-xvuOlqwpajELjPjqQBRiQH3fapc=", "dev": true, "requires": { - "babel-plugin-syntax-function-bind": "6.13.0", - "babel-runtime": "6.26.0" + "babel-plugin-syntax-function-bind": "^6.8.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-object-rest-spread": { @@ -1239,8 +1218,8 @@ "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", "dev": true, "requires": { - "babel-plugin-syntax-object-rest-spread": "6.13.0", - "babel-runtime": "6.26.0" + "babel-plugin-syntax-object-rest-spread": "^6.8.0", + "babel-runtime": "^6.26.0" } }, "babel-plugin-transform-react-display-name": { @@ -1249,7 +1228,7 @@ "integrity": "sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-react-jsx": { @@ -1258,9 +1237,9 @@ "integrity": "sha1-hAoCjn30YN/DotKfDA2R9jduZqM=", "dev": true, "requires": { - "babel-helper-builder-react-jsx": "6.26.0", - "babel-plugin-syntax-jsx": "6.18.0", - "babel-runtime": "6.26.0" + "babel-helper-builder-react-jsx": "^6.24.1", + "babel-plugin-syntax-jsx": "^6.8.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-react-jsx-self": { @@ -1269,8 +1248,8 @@ "integrity": "sha1-322AqdomEqEh5t3XVYvL7PBuY24=", "dev": true, "requires": { - "babel-plugin-syntax-jsx": "6.18.0", - "babel-runtime": "6.26.0" + "babel-plugin-syntax-jsx": "^6.8.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-react-jsx-source": { @@ -1279,8 +1258,8 @@ "integrity": "sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY=", "dev": true, "requires": { - "babel-plugin-syntax-jsx": "6.18.0", - "babel-runtime": "6.26.0" + "babel-plugin-syntax-jsx": "^6.8.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-regenerator": { @@ -1289,7 +1268,7 @@ "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", "dev": true, "requires": { - "regenerator-transform": "0.10.1" + "regenerator-transform": "^0.10.0" } }, "babel-plugin-transform-strict-mode": { @@ -1298,8 +1277,8 @@ "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-polyfill": { @@ -1308,9 +1287,9 @@ "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "core-js": "2.5.7", - "regenerator-runtime": "0.10.5" + "babel-runtime": "^6.26.0", + "core-js": "^2.5.0", + "regenerator-runtime": "^0.10.5" }, "dependencies": { "core-js": { @@ -1333,30 +1312,30 @@ "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=", "dev": true, "requires": { - "babel-plugin-check-es2015-constants": "6.22.0", - "babel-plugin-transform-es2015-arrow-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoping": "6.26.0", - "babel-plugin-transform-es2015-classes": "6.24.1", - "babel-plugin-transform-es2015-computed-properties": "6.24.1", - "babel-plugin-transform-es2015-destructuring": "6.23.0", - "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", - "babel-plugin-transform-es2015-for-of": "6.23.0", - "babel-plugin-transform-es2015-function-name": "6.24.1", - "babel-plugin-transform-es2015-literals": "6.22.0", - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-plugin-transform-es2015-modules-commonjs": "6.26.2", - "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", - "babel-plugin-transform-es2015-modules-umd": "6.24.1", - "babel-plugin-transform-es2015-object-super": "6.24.1", - "babel-plugin-transform-es2015-parameters": "6.24.1", - "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", - "babel-plugin-transform-es2015-spread": "6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "6.24.1", - "babel-plugin-transform-es2015-template-literals": "6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", - "babel-plugin-transform-es2015-unicode-regex": "6.24.1", - "babel-plugin-transform-regenerator": "6.26.0" + "babel-plugin-check-es2015-constants": "^6.22.0", + "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoping": "^6.24.1", + "babel-plugin-transform-es2015-classes": "^6.24.1", + "babel-plugin-transform-es2015-computed-properties": "^6.24.1", + "babel-plugin-transform-es2015-destructuring": "^6.22.0", + "babel-plugin-transform-es2015-duplicate-keys": "^6.24.1", + "babel-plugin-transform-es2015-for-of": "^6.22.0", + "babel-plugin-transform-es2015-function-name": "^6.24.1", + "babel-plugin-transform-es2015-literals": "^6.22.0", + "babel-plugin-transform-es2015-modules-amd": "^6.24.1", + "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", + "babel-plugin-transform-es2015-modules-systemjs": "^6.24.1", + "babel-plugin-transform-es2015-modules-umd": "^6.24.1", + "babel-plugin-transform-es2015-object-super": "^6.24.1", + "babel-plugin-transform-es2015-parameters": "^6.24.1", + "babel-plugin-transform-es2015-shorthand-properties": "^6.24.1", + "babel-plugin-transform-es2015-spread": "^6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "^6.24.1", + "babel-plugin-transform-es2015-template-literals": "^6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "^6.22.0", + "babel-plugin-transform-es2015-unicode-regex": "^6.24.1", + "babel-plugin-transform-regenerator": "^6.24.1" } }, "babel-preset-flow": { @@ -1365,7 +1344,7 @@ "integrity": "sha1-5xIYiHCFrpoktb5Baa/7WZgWxJ0=", "dev": true, "requires": { - "babel-plugin-transform-flow-strip-types": "6.22.0" + "babel-plugin-transform-flow-strip-types": "^6.22.0" } }, "babel-preset-react": { @@ -1374,12 +1353,12 @@ "integrity": "sha1-umnfrqRfw+xjm2pOzqbhdwLJE4A=", "dev": true, "requires": { - "babel-plugin-syntax-jsx": "6.18.0", - "babel-plugin-transform-react-display-name": "6.25.0", - "babel-plugin-transform-react-jsx": "6.24.1", - "babel-plugin-transform-react-jsx-self": "6.22.0", - "babel-plugin-transform-react-jsx-source": "6.22.0", - "babel-preset-flow": "6.23.0" + "babel-plugin-syntax-jsx": "^6.3.13", + "babel-plugin-transform-react-display-name": "^6.23.0", + "babel-plugin-transform-react-jsx": "^6.24.1", + "babel-plugin-transform-react-jsx-self": "^6.22.0", + "babel-plugin-transform-react-jsx-source": "^6.22.0", + "babel-preset-flow": "^6.23.0" } }, "babel-preset-stage-0": { @@ -1388,9 +1367,9 @@ "integrity": "sha1-VkLRUEL5E4TX5a+LyIsduVsDnmo=", "dev": true, "requires": { - "babel-plugin-transform-do-expressions": "6.22.0", - "babel-plugin-transform-function-bind": "6.22.0", - "babel-preset-stage-1": "6.24.1" + "babel-plugin-transform-do-expressions": "^6.22.0", + "babel-plugin-transform-function-bind": "^6.22.0", + "babel-preset-stage-1": "^6.24.1" } }, "babel-preset-stage-1": { @@ -1399,9 +1378,9 @@ "integrity": "sha1-dpLNfc1oSZB+auSgqFWJz7niv7A=", "dev": true, "requires": { - "babel-plugin-transform-class-constructor-call": "6.24.1", - "babel-plugin-transform-export-extensions": "6.22.0", - "babel-preset-stage-2": "6.24.1" + "babel-plugin-transform-class-constructor-call": "^6.24.1", + "babel-plugin-transform-export-extensions": "^6.22.0", + "babel-preset-stage-2": "^6.24.1" } }, "babel-preset-stage-2": { @@ -1410,10 +1389,10 @@ "integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=", "dev": true, "requires": { - "babel-plugin-syntax-dynamic-import": "6.18.0", - "babel-plugin-transform-class-properties": "6.24.1", - "babel-plugin-transform-decorators": "6.24.1", - "babel-preset-stage-3": "6.24.1" + "babel-plugin-syntax-dynamic-import": "^6.18.0", + "babel-plugin-transform-class-properties": "^6.24.1", + "babel-plugin-transform-decorators": "^6.24.1", + "babel-preset-stage-3": "^6.24.1" } }, "babel-preset-stage-3": { @@ -1422,11 +1401,11 @@ "integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=", "dev": true, "requires": { - "babel-plugin-syntax-trailing-function-commas": "6.22.0", - "babel-plugin-transform-async-generator-functions": "6.24.1", - "babel-plugin-transform-async-to-generator": "6.24.1", - "babel-plugin-transform-exponentiation-operator": "6.24.1", - "babel-plugin-transform-object-rest-spread": "6.26.0" + "babel-plugin-syntax-trailing-function-commas": "^6.22.0", + "babel-plugin-transform-async-generator-functions": "^6.24.1", + "babel-plugin-transform-async-to-generator": "^6.24.1", + "babel-plugin-transform-exponentiation-operator": "^6.24.1", + "babel-plugin-transform-object-rest-spread": "^6.22.0" } }, "babel-register": { @@ -1435,13 +1414,13 @@ "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", "dev": true, "requires": { - "babel-core": "6.26.3", - "babel-runtime": "6.26.0", - "core-js": "2.5.7", - "home-or-tmp": "2.0.0", - "lodash": "4.17.10", - "mkdirp": "0.5.1", - "source-map-support": "0.4.18" + "babel-core": "^6.26.0", + "babel-runtime": "^6.26.0", + "core-js": "^2.5.0", + "home-or-tmp": "^2.0.0", + "lodash": "^4.17.4", + "mkdirp": "^0.5.1", + "source-map-support": "^0.4.15" }, "dependencies": { "core-js": { @@ -1458,8 +1437,8 @@ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "dev": true, "requires": { - "core-js": "2.5.7", - "regenerator-runtime": "0.11.1" + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" }, "dependencies": { "core-js": { @@ -1476,11 +1455,11 @@ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "lodash": "4.17.10" + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" } }, "babel-traverse": { @@ -1489,15 +1468,15 @@ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", "dev": true, "requires": { - "babel-code-frame": "6.26.0", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "debug": "2.6.9", - "globals": "9.18.0", - "invariant": "2.2.4", - "lodash": "4.17.10" + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" } }, "babel-types": { @@ -1506,10 +1485,10 @@ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "esutils": "2.0.2", - "lodash": "4.17.10", - "to-fast-properties": "1.0.3" + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" } }, "babylon": { @@ -1529,13 +1508,13 @@ "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=", "dev": true, "requires": { - "cache-base": "1.0.1", - "class-utils": "0.3.6", - "component-emitter": "1.2.1", - "define-property": "1.0.0", - "isobject": "3.0.1", - "mixin-deep": "1.3.1", - "pascalcase": "0.1.1" + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" }, "dependencies": { "define-property": { @@ -1544,7 +1523,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "is-accessor-descriptor": { @@ -1553,7 +1532,7 @@ "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -1562,7 +1541,7 @@ "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -1571,9 +1550,9 @@ "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, "kind-of": { @@ -1625,7 +1604,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=", "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -1635,16 +1614,16 @@ "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", "dev": true, "requires": { - "arr-flatten": "1.1.0", - "array-unique": "0.3.2", - "extend-shallow": "2.0.1", - "fill-range": "4.0.0", - "isobject": "3.0.1", - "repeat-element": "1.1.2", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" }, "dependencies": { "extend-shallow": { @@ -1653,7 +1632,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -1684,9 +1663,9 @@ "integrity": "sha1-jWR0wbhwv9q807z8wZNKEOlPFfA=", "dev": true, "requires": { - "browserify-aes": "1.2.0", - "browserify-des": "1.0.2", - "evp_bytestokey": "1.0.3" + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" } }, "browserify-des": { @@ -1695,10 +1674,10 @@ "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "des.js": "1.0.0", - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "browserify-rsa": { @@ -1717,13 +1696,13 @@ "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", "dev": true, "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "elliptic": "6.4.1", - "inherits": "2.0.3", - "parse-asn1": "5.1.1" + "bn.js": "^4.1.1", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.2", + "elliptic": "^6.0.0", + "inherits": "^2.0.1", + "parse-asn1": "^5.0.0" } }, "browserify-zlib": { @@ -1732,7 +1711,7 @@ "integrity": "sha1-KGlFnZqjviRf6P4sofRuLn9U1z8=", "dev": true, "requires": { - "pako": "1.0.7" + "pako": "~1.0.5" } }, "browserslist": { @@ -1741,8 +1720,8 @@ "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", "dev": true, "requires": { - "caniuse-db": "1.0.30000864", - "electron-to-chromium": "1.3.51" + "caniuse-db": "^1.0.30000639", + "electron-to-chromium": "^1.2.7" } }, "buffer": { @@ -1780,20 +1759,20 @@ "integrity": "sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg==", "dev": true, "requires": { - "bluebird": "3.5.3", - "chownr": "1.1.1", - "figgy-pudding": "3.5.1", - "glob": "7.1.3", - "graceful-fs": "4.1.15", - "lru-cache": "5.1.1", - "mississippi": "3.0.0", - "mkdirp": "0.5.1", - "move-concurrently": "1.0.1", - "promise-inflight": "1.0.1", - "rimraf": "2.6.3", - "ssri": "6.0.1", - "unique-filename": "1.1.1", - "y18n": "4.0.0" + "bluebird": "^3.5.3", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.3", + "graceful-fs": "^4.1.15", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.2", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" }, "dependencies": { "glob": { @@ -1802,12 +1781,12 @@ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "graceful-fs": { @@ -1824,15 +1803,15 @@ "integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=", "dev": true, "requires": { - "collection-visit": "1.0.0", - "component-emitter": "1.2.1", - "get-value": "2.0.6", - "has-value": "1.0.0", - "isobject": "3.0.1", - "set-value": "2.0.0", - "to-object-path": "0.3.0", - "union-value": "1.0.0", - "unset-value": "1.0.0" + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" } }, "camel-case": { @@ -1841,8 +1820,8 @@ "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", "dev": true, "requires": { - "no-case": "2.3.2", - "upper-case": "1.1.3" + "no-case": "^2.2.0", + "upper-case": "^1.1.1" } }, "camelcase": { @@ -1857,10 +1836,10 @@ "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=", "dev": true, "requires": { - "browserslist": "1.7.7", - "caniuse-db": "1.0.30000864", - "lodash.memoize": "4.1.2", - "lodash.uniq": "4.5.0" + "browserslist": "^1.3.6", + "caniuse-db": "^1.0.30000529", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" } }, "caniuse-db": { @@ -1874,11 +1853,11 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" }, "dependencies": { "supports-color": { @@ -1894,19 +1873,19 @@ "integrity": "sha1-NW/04rDo5D4yLRijckYLvPOszSY=", "dev": true, "requires": { - "anymatch": "2.0.0", - "async-each": "1.0.1", - "braces": "2.3.2", - "fsevents": "1.2.4", - "glob-parent": "3.1.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "4.0.0", - "lodash.debounce": "4.0.8", - "normalize-path": "2.1.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.1.0", - "upath": "1.1.0" + "anymatch": "^2.0.0", + "async-each": "^1.0.0", + "braces": "^2.3.0", + "fsevents": "^1.2.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "lodash.debounce": "^4.0.8", + "normalize-path": "^2.1.1", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0", + "upath": "^1.0.5" } }, "chownr": { @@ -1921,7 +1900,7 @@ "integrity": "sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==", "dev": true, "requires": { - "tslib": "1.9.3" + "tslib": "^1.9.0" } }, "cipher-base": { @@ -1930,8 +1909,8 @@ "integrity": "sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94=", "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "clap": { @@ -1940,7 +1919,7 @@ "integrity": "sha1-TzZ0WzIAhJJVf0ZBLWbVDLmbzlE=", "dev": true, "requires": { - "chalk": "1.1.3" + "chalk": "^1.1.3" } }, "class-utils": { @@ -1949,10 +1928,10 @@ "integrity": "sha1-+TNprouafOAv1B+q0MqDAzGQxGM=", "dev": true, "requires": { - "arr-union": "3.1.0", - "define-property": "0.2.5", - "isobject": "3.0.1", - "static-extend": "0.1.2" + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" }, "dependencies": { "define-property": { @@ -1961,7 +1940,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } } } @@ -1972,7 +1951,7 @@ "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==", "dev": true, "requires": { - "source-map": "0.6.1" + "source-map": "~0.6.0" }, "dependencies": { "source-map": { @@ -1983,24 +1962,15 @@ } } }, - "clean-webpack-plugin": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-1.0.0.tgz", - "integrity": "sha512-+f96f52UIET4tOFBbCqezx7KH+w7lz/p4fA1FEjf0hC6ugxqwZedBtENzekN2FnmoTF/bn1LrlkvebOsDZuXKw==", - "dev": true, - "requires": { - "rimraf": "2.6.3" - } - }, "cliui": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", "dev": true, "requires": { - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "wrap-ansi": "2.1.0" + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" }, "dependencies": { "ansi-regex": { @@ -2015,7 +1985,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } } } @@ -2032,7 +2002,7 @@ "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=", "dev": true, "requires": { - "q": "1.5.1" + "q": "^1.1.2" } }, "code-point-at": { @@ -2047,8 +2017,8 @@ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dev": true, "requires": { - "map-visit": "1.0.0", - "object-visit": "1.0.1" + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" } }, "color": { @@ -2057,9 +2027,9 @@ "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", "dev": true, "requires": { - "clone": "1.0.4", - "color-convert": "1.9.2", - "color-string": "0.3.0" + "clone": "^1.0.2", + "color-convert": "^1.3.0", + "color-string": "^0.3.0" } }, "color-convert": { @@ -2083,7 +2053,7 @@ "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=", "dev": true, "requires": { - "color-name": "1.1.1" + "color-name": "^1.0.0" } }, "colormin": { @@ -2092,9 +2062,9 @@ "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=", "dev": true, "requires": { - "color": "0.11.4", + "color": "^0.11.0", "css-color-names": "0.0.4", - "has": "1.0.3" + "has": "^1.0.1" } }, "colors": { @@ -2132,10 +2102,10 @@ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "requires": { - "buffer-from": "1.1.1", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "typedarray": "0.0.6" + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" } }, "console-browserify": { @@ -2144,7 +2114,7 @@ "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", "dev": true, "requires": { - "date-now": "0.1.4" + "date-now": "^0.1.4" } }, "constants-browserify": { @@ -2165,12 +2135,12 @@ "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", "dev": true, "requires": { - "aproba": "1.2.0", - "fs-write-stream-atomic": "1.0.10", - "iferr": "0.1.5", - "mkdirp": "0.5.1", - "rimraf": "2.6.3", - "run-queue": "1.0.3" + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" } }, "copy-descriptor": { @@ -2179,98 +2149,6 @@ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", "dev": true }, - "copy-webpack-plugin": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.6.0.tgz", - "integrity": "sha512-Y+SQCF+0NoWQryez2zXn5J5knmr9z/9qSQt7fbL78u83rxmigOy8X5+BFn8CFSuX+nKT8gpYwJX68ekqtQt6ZA==", - "dev": true, - "requires": { - "cacache": "10.0.4", - "find-cache-dir": "1.0.0", - "globby": "7.1.1", - "is-glob": "4.0.0", - "loader-utils": "1.1.0", - "minimatch": "3.0.4", - "p-limit": "1.3.0", - "serialize-javascript": "1.6.0" - }, - "dependencies": { - "cacache": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", - "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", - "dev": true, - "requires": { - "bluebird": "3.5.3", - "chownr": "1.1.1", - "glob": "7.1.2", - "graceful-fs": "4.1.11", - "lru-cache": "4.1.5", - "mississippi": "2.0.0", - "mkdirp": "0.5.1", - "move-concurrently": "1.0.1", - "promise-inflight": "1.0.1", - "rimraf": "2.6.3", - "ssri": "5.3.0", - "unique-filename": "1.1.1", - "y18n": "4.0.0" - } - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" - } - }, - "mississippi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz", - "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", - "dev": true, - "requires": { - "concat-stream": "1.6.2", - "duplexify": "3.6.1", - "end-of-stream": "1.4.1", - "flush-write-stream": "1.0.3", - "from2": "2.3.0", - "parallel-transform": "1.1.0", - "pump": "2.0.1", - "pumpify": "1.5.1", - "stream-each": "1.2.3", - "through2": "2.0.5" - } - }, - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "requires": { - "end-of-stream": "1.4.1", - "once": "1.4.0" - } - }, - "ssri": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz", - "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", - "dev": true, - "requires": { - "safe-buffer": "5.1.2" - } - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - } - } - }, "core-js": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", @@ -2288,8 +2166,8 @@ "integrity": "sha1-yREbbzMEXEaX8UR4f5JUzcd8Rf8=", "dev": true, "requires": { - "bn.js": "4.11.8", - "elliptic": "6.4.1" + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" } }, "create-hash": { @@ -2324,8 +2202,8 @@ "resolved": "https://registry.npmjs.org/create-react-context/-/create-react-context-0.2.3.tgz", "integrity": "sha1-nsFAppFKIu8EuLCbd3HeiVZ8tvM=", "requires": { - "fbjs": "0.8.17", - "gud": "1.0.0" + "fbjs": "^0.8.0", + "gud": "^1.0.0" } }, "cross-spawn": { @@ -2334,11 +2212,11 @@ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { - "nice-try": "1.0.5", - "path-key": "2.0.1", - "semver": "5.6.0", - "shebang-command": "1.2.0", - "which": "1.3.1" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, "crypto-browserify": { @@ -2347,17 +2225,17 @@ "integrity": "sha1-OWz58xN/A+S45TLFj2mCVOAPgOw=", "dev": true, "requires": { - "browserify-cipher": "1.0.1", - "browserify-sign": "4.0.4", - "create-ecdh": "4.0.3", - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "diffie-hellman": "5.0.3", - "inherits": "2.0.3", - "pbkdf2": "3.0.17", - "public-encrypt": "4.0.3", - "randombytes": "2.0.6", - "randomfill": "1.0.4" + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" } }, "css-color-names": { @@ -2372,20 +2250,20 @@ "integrity": "sha1-w/mGSnAL4nEbtaJGKyOJsaOS2rc=", "dev": true, "requires": { - "babel-code-frame": "6.26.0", - "css-selector-tokenizer": "0.7.0", - "cssnano": "3.10.0", - "icss-utils": "2.1.0", - "loader-utils": "1.1.0", - "lodash.camelcase": "4.3.0", - "object-assign": "4.1.1", - "postcss": "5.2.18", - "postcss-modules-extract-imports": "1.2.0", - "postcss-modules-local-by-default": "1.2.0", - "postcss-modules-scope": "1.1.0", - "postcss-modules-values": "1.3.0", - "postcss-value-parser": "3.3.0", - "source-list-map": "2.0.0" + "babel-code-frame": "^6.26.0", + "css-selector-tokenizer": "^0.7.0", + "cssnano": "^3.10.0", + "icss-utils": "^2.1.0", + "loader-utils": "^1.0.2", + "lodash.camelcase": "^4.3.0", + "object-assign": "^4.1.1", + "postcss": "^5.0.6", + "postcss-modules-extract-imports": "^1.2.0", + "postcss-modules-local-by-default": "^1.2.0", + "postcss-modules-scope": "^1.1.0", + "postcss-modules-values": "^1.3.0", + "postcss-value-parser": "^3.3.0", + "source-list-map": "^2.0.0" } }, "css-select": { @@ -2394,10 +2272,10 @@ "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", "dev": true, "requires": { - "boolbase": "1.0.0", - "css-what": "2.1.2", + "boolbase": "~1.0.0", + "css-what": "2.1", "domutils": "1.5.1", - "nth-check": "1.0.2" + "nth-check": "~1.0.1" } }, "css-selector-tokenizer": { @@ -2406,9 +2284,9 @@ "integrity": "sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=", "dev": true, "requires": { - "cssesc": "0.1.0", - "fastparse": "1.1.1", - "regexpu-core": "1.0.0" + "cssesc": "^0.1.0", + "fastparse": "^1.1.1", + "regexpu-core": "^1.0.0" }, "dependencies": { "regexpu-core": { @@ -2417,9 +2295,9 @@ "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", "dev": true, "requires": { - "regenerate": "1.4.0", - "regjsgen": "0.2.0", - "regjsparser": "0.1.5" + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" } } } @@ -2442,38 +2320,38 @@ "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=", "dev": true, "requires": { - "autoprefixer": "6.7.7", - "decamelize": "1.2.0", - "defined": "1.0.0", - "has": "1.0.3", - "object-assign": "4.1.1", - "postcss": "5.2.18", - "postcss-calc": "5.3.1", - "postcss-colormin": "2.2.2", - "postcss-convert-values": "2.6.1", - "postcss-discard-comments": "2.0.4", - "postcss-discard-duplicates": "2.1.0", - "postcss-discard-empty": "2.1.0", - "postcss-discard-overridden": "0.1.1", - "postcss-discard-unused": "2.2.3", - "postcss-filter-plugins": "2.0.3", - "postcss-merge-idents": "2.1.7", - "postcss-merge-longhand": "2.0.2", - "postcss-merge-rules": "2.1.2", - "postcss-minify-font-values": "1.0.5", - "postcss-minify-gradients": "1.0.5", - "postcss-minify-params": "1.2.2", - "postcss-minify-selectors": "2.1.1", - "postcss-normalize-charset": "1.1.1", - "postcss-normalize-url": "3.0.8", - "postcss-ordered-values": "2.2.3", - "postcss-reduce-idents": "2.4.0", - "postcss-reduce-initial": "1.0.1", - "postcss-reduce-transforms": "1.0.4", - "postcss-svgo": "2.1.6", - "postcss-unique-selectors": "2.0.2", - "postcss-value-parser": "3.3.0", - "postcss-zindex": "2.2.0" + "autoprefixer": "^6.3.1", + "decamelize": "^1.1.2", + "defined": "^1.0.0", + "has": "^1.0.1", + "object-assign": "^4.0.1", + "postcss": "^5.0.14", + "postcss-calc": "^5.2.0", + "postcss-colormin": "^2.1.8", + "postcss-convert-values": "^2.3.4", + "postcss-discard-comments": "^2.0.4", + "postcss-discard-duplicates": "^2.0.1", + "postcss-discard-empty": "^2.0.1", + "postcss-discard-overridden": "^0.1.1", + "postcss-discard-unused": "^2.2.1", + "postcss-filter-plugins": "^2.0.0", + "postcss-merge-idents": "^2.1.5", + "postcss-merge-longhand": "^2.0.1", + "postcss-merge-rules": "^2.0.3", + "postcss-minify-font-values": "^1.0.2", + "postcss-minify-gradients": "^1.0.1", + "postcss-minify-params": "^1.0.4", + "postcss-minify-selectors": "^2.0.4", + "postcss-normalize-charset": "^1.1.0", + "postcss-normalize-url": "^3.0.7", + "postcss-ordered-values": "^2.1.0", + "postcss-reduce-idents": "^2.2.2", + "postcss-reduce-initial": "^1.0.0", + "postcss-reduce-transforms": "^1.0.3", + "postcss-svgo": "^2.1.1", + "postcss-unique-selectors": "^2.0.2", + "postcss-value-parser": "^3.2.3", + "postcss-zindex": "^2.0.1" } }, "csso": { @@ -2482,8 +2360,8 @@ "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=", "dev": true, "requires": { - "clap": "1.2.3", - "source-map": "0.5.7" + "clap": "^1.0.9", + "source-map": "^0.5.3" } }, "cyclist": { @@ -2525,7 +2403,7 @@ "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dev": true, "requires": { - "object-keys": "1.0.12" + "object-keys": "^1.0.12" } }, "define-property": { @@ -2534,8 +2412,8 @@ "integrity": "sha1-1Flono1lS6d+AqgX+HENcCyxbp0=", "dev": true, "requires": { - "is-descriptor": "1.0.2", - "isobject": "3.0.1" + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" }, "dependencies": { "is-accessor-descriptor": { @@ -2544,7 +2422,7 @@ "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -2553,7 +2431,7 @@ "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -2562,9 +2440,9 @@ "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, "kind-of": { @@ -2587,8 +2465,8 @@ "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", "dev": true, "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, "detect-indent": { @@ -2597,7 +2475,7 @@ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", "dev": true, "requires": { - "repeating": "2.0.1" + "repeating": "^2.0.0" } }, "diffie-hellman": { @@ -2611,23 +2489,13 @@ "randombytes": "2.0.6" } }, - "dir-glob": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", - "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", - "dev": true, - "requires": { - "arrify": "1.0.1", - "path-type": "3.0.0" - } - }, "dom-converter": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", "dev": true, "requires": { - "utila": "0.4.0" + "utila": "~0.4" } }, "dom-serializer": { @@ -2636,8 +2504,8 @@ "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", "dev": true, "requires": { - "domelementtype": "1.1.3", - "entities": "1.1.2" + "domelementtype": "~1.1.1", + "entities": "~1.1.1" }, "dependencies": { "domelementtype": { @@ -2666,7 +2534,7 @@ "integrity": "sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=", "dev": true, "requires": { - "domelementtype": "1.3.1" + "domelementtype": "1" } }, "domutils": { @@ -2675,8 +2543,8 @@ "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", "dev": true, "requires": { - "dom-serializer": "0.1.0", - "domelementtype": "1.3.1" + "dom-serializer": "0", + "domelementtype": "1" } }, "duplexify": { @@ -2685,10 +2553,10 @@ "integrity": "sha512-vM58DwdnKmty+FSPzT14K9JXb90H+j5emaR4KYbr2KTIz00WHGbWOe5ghQTx233ZCLZtrGDALzKwcjEtSt35mA==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "stream-shift": "1.0.0" + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" } }, "electron-to-chromium": { @@ -2703,13 +2571,13 @@ "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", "dev": true, "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0", - "hash.js": "1.1.7", - "hmac-drbg": "1.0.1", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" } }, "emojis-list": { @@ -2723,7 +2591,7 @@ "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", "requires": { - "iconv-lite": "0.4.23" + "iconv-lite": "~0.4.13" } }, "end-of-stream": { @@ -2732,7 +2600,7 @@ "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", "dev": true, "requires": { - "once": "1.4.0" + "once": "^1.4.0" } }, "enhanced-resolve": { @@ -2741,9 +2609,9 @@ "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "memory-fs": "0.4.1", - "tapable": "1.1.1" + "graceful-fs": "^4.1.2", + "memory-fs": "^0.4.0", + "tapable": "^1.0.0" } }, "entities": { @@ -2758,7 +2626,7 @@ "integrity": "sha1-RoTXF3mtOa8Xfj8AeZb3xnyFJhg=", "dev": true, "requires": { - "prr": "1.0.1" + "prr": "~1.0.1" } }, "es-abstract": { @@ -2767,11 +2635,11 @@ "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", "dev": true, "requires": { - "es-to-primitive": "1.2.0", - "function-bind": "1.1.1", - "has": "1.0.3", - "is-callable": "1.1.4", - "is-regex": "1.0.4" + "es-to-primitive": "^1.1.1", + "function-bind": "^1.1.1", + "has": "^1.0.1", + "is-callable": "^1.1.3", + "is-regex": "^1.0.4" } }, "es-to-primitive": { @@ -2780,9 +2648,9 @@ "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", "dev": true, "requires": { - "is-callable": "1.1.4", - "is-date-object": "1.0.1", - "is-symbol": "1.0.2" + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" } }, "escape-string-regexp": { @@ -2796,8 +2664,8 @@ "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", "dev": true, "requires": { - "esrecurse": "4.2.1", - "estraverse": "4.2.0" + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" } }, "esprima": { @@ -2812,7 +2680,7 @@ "integrity": "sha1-AHo7n9vCs7uH5IeeoZyS/b05Qs8=", "dev": true, "requires": { - "estraverse": "4.2.0" + "estraverse": "^4.1.0" } }, "estraverse": { @@ -2839,8 +2707,8 @@ "integrity": "sha1-f8vbGY3HGVlDLv4ThCaE4FJaywI=", "dev": true, "requires": { - "md5.js": "1.3.5", - "safe-buffer": "5.1.2" + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" } }, "execa": { @@ -2849,13 +2717,13 @@ "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", "dev": true, "requires": { - "cross-spawn": "6.0.5", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" + "cross-spawn": "^6.0.0", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" } }, "expand-brackets": { @@ -2864,13 +2732,13 @@ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "requires": { - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "posix-character-classes": "0.1.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -2879,7 +2747,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -2888,7 +2756,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -2900,7 +2768,7 @@ "dev": true, "optional": true, "requires": { - "fill-range": "2.2.4" + "fill-range": "^2.1.0" }, "dependencies": { "fill-range": { @@ -2910,11 +2778,11 @@ "dev": true, "optional": true, "requires": { - "is-number": "2.1.0", - "isobject": "2.1.0", - "randomatic": "3.0.0", - "repeat-element": "1.1.2", - "repeat-string": "1.6.1" + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^3.0.0", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" } }, "is-number": { @@ -2924,7 +2792,7 @@ "dev": true, "optional": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "isobject": { @@ -2939,32 +2807,14 @@ } } }, - "exports-loader": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/exports-loader/-/exports-loader-0.7.0.tgz", - "integrity": "sha512-RKwCrO4A6IiKm0pG3c9V46JxIHcDplwwGJn6+JJ1RcVnh/WSGJa0xkmk5cRVtgOPzCAtTMGj2F7nluh9L0vpSA==", - "dev": true, - "requires": { - "loader-utils": "1.1.0", - "source-map": "0.5.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.0.tgz", - "integrity": "sha1-D+llA6yGpa213mP05BKuSHLNvoY=", - "dev": true - } - } - }, "extend-shallow": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { @@ -2973,7 +2823,7 @@ "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", "dev": true, "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -2984,14 +2834,14 @@ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, "requires": { - "array-unique": "0.3.2", - "define-property": "1.0.0", - "expand-brackets": "2.1.4", - "extend-shallow": "2.0.1", - "fragment-cache": "0.2.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -3000,7 +2850,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "extend-shallow": { @@ -3009,7 +2859,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "is-accessor-descriptor": { @@ -3018,7 +2868,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -3027,7 +2877,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -3036,9 +2886,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, "kind-of": { @@ -3072,13 +2922,13 @@ "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", "requires": { - "core-js": "1.2.7", - "isomorphic-fetch": "2.2.1", - "loose-envify": "1.3.1", - "object-assign": "4.1.1", - "promise": "7.3.1", - "setimmediate": "1.0.5", - "ua-parser-js": "0.7.18" + "core-js": "^1.0.0", + "isomorphic-fetch": "^2.1.1", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.18" } }, "figgy-pudding": { @@ -3100,10 +2950,10 @@ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" }, "dependencies": { "extend-shallow": { @@ -3112,7 +2962,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -3123,9 +2973,9 @@ "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", "dev": true, "requires": { - "commondir": "1.0.1", - "make-dir": "1.3.0", - "pkg-dir": "2.0.0" + "commondir": "^1.0.1", + "make-dir": "^1.0.0", + "pkg-dir": "^2.0.0" } }, "find-up": { @@ -3134,7 +2984,7 @@ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "locate-path": "2.0.0" + "locate-path": "^2.0.0" } }, "flatten": { @@ -3149,8 +2999,8 @@ "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.6" + "inherits": "^2.0.1", + "readable-stream": "^2.0.4" } }, "for-in": { @@ -3166,7 +3016,7 @@ "dev": true, "optional": true, "requires": { - "for-in": "1.0.2" + "for-in": "^1.0.1" } }, "fragment-cache": { @@ -3175,7 +3025,7 @@ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dev": true, "requires": { - "map-cache": "0.2.2" + "map-cache": "^0.2.2" } }, "from2": { @@ -3184,8 +3034,8 @@ "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.6" + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" } }, "fs-extra": { @@ -3193,9 +3043,9 @@ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", "requires": { - "graceful-fs": "4.1.11", - "jsonfile": "3.0.1", - "universalify": "0.1.2" + "graceful-fs": "^4.1.2", + "jsonfile": "^3.0.0", + "universalify": "^0.1.0" } }, "fs-readdir-recursive": { @@ -3210,10 +3060,10 @@ "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "iferr": "0.1.5", - "imurmurhash": "0.1.4", - "readable-stream": "2.3.6" + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" } }, "fs.realpath": { @@ -3228,8 +3078,8 @@ "dev": true, "optional": true, "requires": { - "nan": "2.10.0", - "node-pre-gyp": "0.10.0" + "nan": "^2.9.2", + "node-pre-gyp": "^0.10.0" }, "dependencies": { "abbrev": { @@ -3255,8 +3105,8 @@ "dev": true, "optional": true, "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.6" + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" } }, "balanced-match": { @@ -3269,7 +3119,7 @@ "bundled": true, "dev": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -3333,7 +3183,7 @@ "dev": true, "optional": true, "requires": { - "minipass": "2.2.4" + "minipass": "^2.2.1" } }, "fs.realpath": { @@ -3348,14 +3198,14 @@ "dev": true, "optional": true, "requires": { - "aproba": "1.2.0", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" } }, "glob": { @@ -3364,12 +3214,12 @@ "dev": true, "optional": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "has-unicode": { @@ -3384,7 +3234,7 @@ "dev": true, "optional": true, "requires": { - "safer-buffer": "2.1.2" + "safer-buffer": "^2.1.0" } }, "ignore-walk": { @@ -3393,7 +3243,7 @@ "dev": true, "optional": true, "requires": { - "minimatch": "3.0.4" + "minimatch": "^3.0.4" } }, "inflight": { @@ -3402,8 +3252,8 @@ "dev": true, "optional": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -3422,7 +3272,7 @@ "bundled": true, "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "isarray": { @@ -3436,7 +3286,7 @@ "bundled": true, "dev": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -3449,8 +3299,8 @@ "bundled": true, "dev": true, "requires": { - "safe-buffer": "5.1.1", - "yallist": "3.0.2" + "safe-buffer": "^5.1.1", + "yallist": "^3.0.0" } }, "minizlib": { @@ -3459,7 +3309,7 @@ "dev": true, "optional": true, "requires": { - "minipass": "2.2.4" + "minipass": "^2.2.1" } }, "mkdirp": { @@ -3482,9 +3332,9 @@ "dev": true, "optional": true, "requires": { - "debug": "2.6.9", - "iconv-lite": "0.4.21", - "sax": "1.2.4" + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" } }, "node-pre-gyp": { @@ -3493,16 +3343,16 @@ "dev": true, "optional": true, "requires": { - "detect-libc": "1.0.3", - "mkdirp": "0.5.1", - "needle": "2.2.0", - "nopt": "4.0.1", - "npm-packlist": "1.1.10", - "npmlog": "4.1.2", - "rc": "1.2.7", - "rimraf": "2.6.2", - "semver": "5.5.0", - "tar": "4.4.1" + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.0", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.1.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" } }, "nopt": { @@ -3511,8 +3361,8 @@ "dev": true, "optional": true, "requires": { - "abbrev": "1.1.1", - "osenv": "0.1.5" + "abbrev": "1", + "osenv": "^0.1.4" } }, "npm-bundled": { @@ -3527,8 +3377,8 @@ "dev": true, "optional": true, "requires": { - "ignore-walk": "3.0.1", - "npm-bundled": "1.0.3" + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" } }, "npmlog": { @@ -3537,10 +3387,10 @@ "dev": true, "optional": true, "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" } }, "number-is-nan": { @@ -3559,7 +3409,7 @@ "bundled": true, "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "os-homedir": { @@ -3580,8 +3430,8 @@ "dev": true, "optional": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, "path-is-absolute": { @@ -3602,10 +3452,10 @@ "dev": true, "optional": true, "requires": { - "deep-extend": "0.5.1", - "ini": "1.3.5", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" + "deep-extend": "^0.5.1", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, "dependencies": { "minimist": { @@ -3622,13 +3472,13 @@ "dev": true, "optional": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "rimraf": { @@ -3637,7 +3487,7 @@ "dev": true, "optional": true, "requires": { - "glob": "7.1.2" + "glob": "^7.0.5" } }, "safe-buffer": { @@ -3680,9 +3530,9 @@ "bundled": true, "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "string_decoder": { @@ -3691,7 +3541,7 @@ "dev": true, "optional": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "~5.1.0" } }, "strip-ansi": { @@ -3699,7 +3549,7 @@ "bundled": true, "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-json-comments": { @@ -3714,13 +3564,13 @@ "dev": true, "optional": true, "requires": { - "chownr": "1.0.1", - "fs-minipass": "1.2.5", - "minipass": "2.2.4", - "minizlib": "1.1.0", - "mkdirp": "0.5.1", - "safe-buffer": "5.1.1", - "yallist": "3.0.2" + "chownr": "^1.0.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.2.4", + "minizlib": "^1.1.0", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.1", + "yallist": "^3.0.2" } }, "util-deprecate": { @@ -3735,7 +3585,7 @@ "dev": true, "optional": true, "requires": { - "string-width": "1.0.2" + "string-width": "^1.0.2" } }, "wrappy": { @@ -3779,12 +3629,12 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "glob-base": { @@ -3794,8 +3644,8 @@ "dev": true, "optional": true, "requires": { - "glob-parent": "2.0.0", - "is-glob": "2.0.1" + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" }, "dependencies": { "glob-parent": { @@ -3805,7 +3655,7 @@ "dev": true, "optional": true, "requires": { - "is-glob": "2.0.1" + "is-glob": "^2.0.0" } }, "is-extglob": { @@ -3820,7 +3670,7 @@ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } } } @@ -3831,8 +3681,8 @@ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dev": true, "requires": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" }, "dependencies": { "is-glob": { @@ -3841,7 +3691,7 @@ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.0" } } } @@ -3858,20 +3708,6 @@ "integrity": "sha1-qjiWs+abSH8X4x7SFD1pqOMMLYo=", "dev": true }, - "globby": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz", - "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", - "dev": true, - "requires": { - "array-union": "1.0.2", - "dir-glob": "2.0.0", - "glob": "7.1.2", - "ignore": "3.3.10", - "pify": "3.0.0", - "slash": "1.0.0" - } - }, "graceful-fs": { "version": "4.1.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", @@ -3888,7 +3724,7 @@ "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=", "dev": true, "requires": { - "function-bind": "1.1.1" + "function-bind": "^1.1.1" } }, "has-ansi": { @@ -3896,7 +3732,7 @@ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "has-flag": { @@ -3917,9 +3753,9 @@ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dev": true, "requires": { - "get-value": "2.0.6", - "has-values": "1.0.0", - "isobject": "3.0.1" + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" } }, "has-values": { @@ -3928,8 +3764,8 @@ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dev": true, "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" + "is-number": "^3.0.0", + "kind-of": "^4.0.0" }, "dependencies": { "kind-of": { @@ -3938,7 +3774,7 @@ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -3949,8 +3785,8 @@ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "hash.js": { @@ -3959,8 +3795,8 @@ "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dev": true, "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" } }, "he": { @@ -3974,11 +3810,11 @@ "resolved": "https://registry.npmjs.org/history/-/history-4.7.2.tgz", "integrity": "sha1-IrXH8xYzxbgCHH9KipVKwTnujVs=", "requires": { - "invariant": "2.2.4", - "loose-envify": "1.3.1", - "resolve-pathname": "2.2.0", - "value-equal": "0.4.0", - "warning": "3.0.0" + "invariant": "^2.2.1", + "loose-envify": "^1.2.0", + "resolve-pathname": "^2.2.0", + "value-equal": "^0.4.0", + "warning": "^3.0.0" }, "dependencies": { "warning": { @@ -3986,7 +3822,7 @@ "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", "requires": { - "loose-envify": "1.3.1" + "loose-envify": "^1.0.0" } } } @@ -3997,9 +3833,9 @@ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "dev": true, "requires": { - "hash.js": "1.1.7", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, "hoist-non-react-statics": { @@ -4013,8 +3849,8 @@ "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", "dev": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.1" } }, "html-comment-regex": { @@ -4029,13 +3865,13 @@ "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", "dev": true, "requires": { - "camel-case": "3.0.0", - "clean-css": "4.2.1", - "commander": "2.17.1", - "he": "1.2.0", - "param-case": "2.1.1", - "relateurl": "0.2.7", - "uglify-js": "3.4.9" + "camel-case": "3.0.x", + "clean-css": "4.2.x", + "commander": "2.17.x", + "he": "1.2.x", + "param-case": "2.1.x", + "relateurl": "0.2.x", + "uglify-js": "3.4.x" }, "dependencies": { "commander": { @@ -4052,12 +3888,12 @@ "integrity": "sha1-sBq71yOsqqeze2r0SS69oD2d03s=", "dev": true, "requires": { - "html-minifier": "3.5.21", - "loader-utils": "0.2.17", - "lodash": "4.17.10", - "pretty-error": "2.1.1", - "tapable": "1.1.1", - "toposort": "1.0.7", + "html-minifier": "^3.2.3", + "loader-utils": "^0.2.16", + "lodash": "^4.17.3", + "pretty-error": "^2.0.2", + "tapable": "^1.0.0", + "toposort": "^1.0.0", "util.promisify": "1.0.0" }, "dependencies": { @@ -4067,10 +3903,10 @@ "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", "dev": true, "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1", - "object-assign": "4.1.1" + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0", + "object-assign": "^4.0.1" } } } @@ -4081,10 +3917,10 @@ "integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=", "dev": true, "requires": { - "domelementtype": "1.3.1", - "domhandler": "2.1.0", - "domutils": "1.1.6", - "readable-stream": "1.0.34" + "domelementtype": "1", + "domhandler": "2.1", + "domutils": "1.1", + "readable-stream": "1.0" }, "dependencies": { "domutils": { @@ -4093,7 +3929,7 @@ "integrity": "sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU=", "dev": true, "requires": { - "domelementtype": "1.3.1" + "domelementtype": "1" } }, "isarray": { @@ -4108,10 +3944,10 @@ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "string_decoder": { @@ -4133,7 +3969,7 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", "requires": { - "safer-buffer": "2.1.2" + "safer-buffer": ">= 2.1.2 < 3" } }, "icss-replace-symbols": { @@ -4148,7 +3984,7 @@ "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", "dev": true, "requires": { - "postcss": "6.0.23" + "postcss": "^6.0.1" }, "dependencies": { "ansi-styles": { @@ -4157,7 +3993,7 @@ "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", "dev": true, "requires": { - "color-convert": "1.9.2" + "color-convert": "^1.9.0" } }, "chalk": { @@ -4166,9 +4002,9 @@ "integrity": "sha1-GMSasWoDe26wFSzIPjRxM4IVtm4=", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "has-flag": { @@ -4183,9 +4019,9 @@ "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=", "dev": true, "requires": { - "chalk": "2.4.1", - "source-map": "0.6.1", - "supports-color": "5.4.0" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { @@ -4200,7 +4036,7 @@ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } @@ -4217,12 +4053,6 @@ "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", "dev": true }, - "ignore": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", - "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", - "dev": true - }, "immutable": { "version": "3.8.2", "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", @@ -4234,8 +4064,8 @@ "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", "dev": true, "requires": { - "pkg-dir": "3.0.0", - "resolve-cwd": "2.0.0" + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" }, "dependencies": { "find-up": { @@ -4244,7 +4074,7 @@ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "locate-path": "3.0.0" + "locate-path": "^3.0.0" } }, "locate-path": { @@ -4253,8 +4083,8 @@ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "p-locate": "3.0.0", - "path-exists": "3.0.0" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" } }, "p-limit": { @@ -4263,7 +4093,7 @@ "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", "dev": true, "requires": { - "p-try": "2.0.0" + "p-try": "^2.0.0" } }, "p-locate": { @@ -4272,7 +4102,7 @@ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "p-limit": "2.1.0" + "p-limit": "^2.0.0" } }, "p-try": { @@ -4287,7 +4117,7 @@ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, "requires": { - "find-up": "3.0.0" + "find-up": "^3.0.0" } } } @@ -4315,8 +4145,8 @@ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -4335,7 +4165,7 @@ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", "integrity": "sha1-YQ88ksk1nOHbYW5TgAjSP/NRWOY=", "requires": { - "loose-envify": "1.3.1" + "loose-envify": "^1.0.0" } }, "invert-kv": { @@ -4365,7 +4195,7 @@ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "dev": true, "requires": { - "binary-extensions": "1.11.0" + "binary-extensions": "^1.0.0" } }, "is-buffer": { @@ -4401,9 +4231,9 @@ "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", "dev": true, "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" }, "dependencies": { "kind-of": { @@ -4428,7 +4258,7 @@ "dev": true, "optional": true, "requires": { - "is-primitive": "2.0.0" + "is-primitive": "^2.0.0" } }, "is-extendable": { @@ -4449,7 +4279,7 @@ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "is-fullwidth-code-point": { @@ -4464,7 +4294,7 @@ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", "dev": true, "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.1" } }, "is-number": { @@ -4473,7 +4303,7 @@ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "is-plain-obj": { @@ -4488,7 +4318,7 @@ "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" } }, "is-posix-bracket": { @@ -4511,7 +4341,7 @@ "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", "dev": true, "requires": { - "has": "1.0.3" + "has": "^1.0.1" } }, "is-stream": { @@ -4525,7 +4355,7 @@ "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=", "dev": true, "requires": { - "html-comment-regex": "1.1.1" + "html-comment-regex": "^1.1.0" } }, "is-symbol": { @@ -4534,7 +4364,7 @@ "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", "dev": true, "requires": { - "has-symbols": "1.0.0" + "has-symbols": "^1.0.0" } }, "is-windows": { @@ -4566,8 +4396,8 @@ "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", "requires": { - "node-fetch": "1.7.3", - "whatwg-fetch": "2.0.4" + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" } }, "js-base64": { @@ -4587,8 +4417,8 @@ "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", "dev": true, "requires": { - "argparse": "1.0.10", - "esprima": "2.7.3" + "argparse": "^1.0.7", + "esprima": "^2.6.0" } }, "jsesc": { @@ -4620,7 +4450,7 @@ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", "requires": { - "graceful-fs": "4.1.11" + "graceful-fs": "^4.1.6" } }, "jvm-npm": { @@ -4634,7 +4464,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } }, "lcid": { @@ -4643,7 +4473,7 @@ "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", "dev": true, "requires": { - "invert-kv": "2.0.0" + "invert-kv": "^2.0.0" } }, "less-loader": { @@ -4652,9 +4482,9 @@ "integrity": "sha1-LBNSxbCaT4QQFJAnT9UWdN5BNj4=", "dev": true, "requires": { - "clone": "2.1.1", - "loader-utils": "1.1.0", - "pify": "3.0.0" + "clone": "^2.1.1", + "loader-utils": "^1.1.0", + "pify": "^3.0.0" }, "dependencies": { "clone": { @@ -4683,9 +4513,9 @@ "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", "dev": true, "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1" + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0" } }, "locate-path": { @@ -4694,8 +4524,8 @@ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" } }, "lodash": { @@ -4736,8 +4566,8 @@ "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz", "integrity": "sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=", "requires": { - "lodash._reinterpolate": "3.0.0", - "lodash.templatesettings": "4.1.0" + "lodash._reinterpolate": "~3.0.0", + "lodash.templatesettings": "^4.0.0" } }, "lodash.templatesettings": { @@ -4745,7 +4575,7 @@ "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz", "integrity": "sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=", "requires": { - "lodash._reinterpolate": "3.0.0" + "lodash._reinterpolate": "~3.0.0" } }, "lodash.uniq": { @@ -4759,7 +4589,7 @@ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", "requires": { - "js-tokens": "3.0.2" + "js-tokens": "^3.0.0" } }, "lower-case": { @@ -4774,7 +4604,7 @@ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, "requires": { - "yallist": "3.0.3" + "yallist": "^3.0.2" } }, "make-dir": { @@ -4783,7 +4613,7 @@ "integrity": "sha1-ecEDO4BRW9bSTsmTPoYMp17ifww=", "dev": true, "requires": { - "pify": "3.0.0" + "pify": "^3.0.0" }, "dependencies": { "pify": { @@ -4800,7 +4630,7 @@ "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", "dev": true, "requires": { - "p-defer": "1.0.0" + "p-defer": "^1.0.0" } }, "map-cache": { @@ -4815,7 +4645,7 @@ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dev": true, "requires": { - "object-visit": "1.0.1" + "object-visit": "^1.0.0" } }, "math-expression-evaluator": { @@ -4837,9 +4667,9 @@ "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "mem": { @@ -4848,9 +4678,9 @@ "integrity": "sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA==", "dev": true, "requires": { - "map-age-cleaner": "0.1.3", - "mimic-fn": "1.2.0", - "p-is-promise": "1.1.0" + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^1.0.0", + "p-is-promise": "^1.1.0" } }, "memory-fs": { @@ -4859,8 +4689,8 @@ "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", "dev": true, "requires": { - "errno": "0.1.7", - "readable-stream": "2.3.6" + "errno": "^0.1.3", + "readable-stream": "^2.0.1" } }, "micromatch": { @@ -4869,19 +4699,19 @@ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.2", - "nanomatch": "1.2.13", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" }, "dependencies": { "kind-of": { @@ -4898,8 +4728,8 @@ "integrity": "sha1-8IA1HIZbDcViqEYpZtqlNUPHik0=", "dev": true, "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0" + "bn.js": "^4.0.0", + "brorand": "^1.0.1" } }, "mimic-fn": { @@ -4925,7 +4755,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -4939,16 +4769,16 @@ "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", "dev": true, "requires": { - "concat-stream": "1.6.2", - "duplexify": "3.6.1", - "end-of-stream": "1.4.1", - "flush-write-stream": "1.0.3", - "from2": "2.3.0", - "parallel-transform": "1.1.0", - "pump": "3.0.0", - "pumpify": "1.5.1", - "stream-each": "1.2.3", - "through2": "2.0.5" + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" } }, "mixin-deep": { @@ -4957,8 +4787,8 @@ "integrity": "sha1-pJ5yaNzhoNlpjkUybFYm3zVD0P4=", "dev": true, "requires": { - "for-in": "1.0.2", - "is-extendable": "1.0.1" + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { @@ -4967,7 +4797,7 @@ "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", "dev": true, "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -4986,12 +4816,12 @@ "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", "dev": true, "requires": { - "aproba": "1.2.0", - "copy-concurrently": "1.0.5", - "fs-write-stream-atomic": "1.0.10", - "mkdirp": "0.5.1", - "rimraf": "2.6.3", - "run-queue": "1.0.3" + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" } }, "ms": { @@ -5013,17 +4843,17 @@ "integrity": "sha1-uHqKpPwN6P5r6IiVs4mD/yZb0Rk=", "dev": true, "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "fragment-cache": "0.2.1", - "is-windows": "1.0.2", - "kind-of": "6.0.2", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "kind-of": { @@ -5052,7 +4882,7 @@ "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", "dev": true, "requires": { - "lower-case": "1.1.4" + "lower-case": "^1.1.1" } }, "node-fetch": { @@ -5060,8 +4890,8 @@ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", "integrity": "sha1-mA9vcthSEaU0fGsrwYxbhMPrR+8=", "requires": { - "encoding": "0.1.12", - "is-stream": "1.1.0" + "encoding": "^0.1.11", + "is-stream": "^1.0.1" } }, "node-libs-browser": { @@ -5070,28 +4900,28 @@ "integrity": "sha1-X5QmPUBPbkR2fXJpAf/wVHjWAN8=", "dev": true, "requires": { - "assert": "1.4.1", - "browserify-zlib": "0.2.0", - "buffer": "4.9.1", - "console-browserify": "1.1.0", - "constants-browserify": "1.0.0", - "crypto-browserify": "3.12.0", - "domain-browser": "1.2.0", - "events": "1.1.1", - "https-browserify": "1.0.0", - "os-browserify": "0.3.0", + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^1.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", "path-browserify": "0.0.0", - "process": "0.11.10", - "punycode": "1.4.1", - "querystring-es3": "0.2.1", - "readable-stream": "2.3.6", - "stream-browserify": "2.0.1", - "stream-http": "2.8.3", - "string_decoder": "1.1.1", - "timers-browserify": "2.0.10", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", "tty-browserify": "0.0.0", - "url": "0.11.0", - "util": "0.10.4", + "url": "^0.11.0", + "util": "^0.10.3", "vm-browserify": "0.0.4" }, "dependencies": { @@ -5109,7 +4939,7 @@ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { - "remove-trailing-separator": "1.1.0" + "remove-trailing-separator": "^1.0.1" } }, "normalize-range": { @@ -5124,10 +4954,10 @@ "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", "dev": true, "requires": { - "object-assign": "4.1.1", - "prepend-http": "1.0.4", - "query-string": "4.3.4", - "sort-keys": "1.1.2" + "object-assign": "^4.0.1", + "prepend-http": "^1.0.0", + "query-string": "^4.1.0", + "sort-keys": "^1.0.0" } }, "npm-run-path": { @@ -5136,7 +4966,7 @@ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dev": true, "requires": { - "path-key": "2.0.1" + "path-key": "^2.0.0" } }, "nth-check": { @@ -5145,7 +4975,7 @@ "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", "dev": true, "requires": { - "boolbase": "1.0.0" + "boolbase": "~1.0.0" } }, "num2fraction": { @@ -5171,9 +5001,9 @@ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dev": true, "requires": { - "copy-descriptor": "0.1.1", - "define-property": "0.2.5", - "kind-of": "3.2.2" + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" }, "dependencies": { "define-property": { @@ -5182,7 +5012,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } } } @@ -5199,7 +5029,7 @@ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.0" } }, "object.getownpropertydescriptors": { @@ -5208,8 +5038,8 @@ "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", "dev": true, "requires": { - "define-properties": "1.1.3", - "es-abstract": "1.12.0" + "define-properties": "^1.1.2", + "es-abstract": "^1.5.1" } }, "object.omit": { @@ -5219,8 +5049,8 @@ "dev": true, "optional": true, "requires": { - "for-own": "0.1.5", - "is-extendable": "0.1.1" + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" } }, "object.pick": { @@ -5229,7 +5059,7 @@ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" } }, "once": { @@ -5237,7 +5067,7 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "os-browserify": { @@ -5258,9 +5088,9 @@ "integrity": "sha512-7g5e7dmXPtzcP4bgsZ8ixDVqA7oWYuEz4lOSujeWyliPai4gfVDiFIcwBg3aGCPnmSGfzOKTK3ccPn0CKv3DBw==", "dev": true, "requires": { - "execa": "0.10.0", - "lcid": "2.0.0", - "mem": "4.0.0" + "execa": "^0.10.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" } }, "os-tmpdir": { @@ -5275,9 +5105,9 @@ "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "mkdirp": "0.5.1", - "object-assign": "4.1.1" + "graceful-fs": "^4.1.4", + "mkdirp": "^0.5.1", + "object-assign": "^4.1.0" } }, "p-defer": { @@ -5304,7 +5134,7 @@ "integrity": "sha1-uGvV8MJWkJEcdZD8v8IBDVSzzLg=", "dev": true, "requires": { - "p-try": "1.0.0" + "p-try": "^1.0.0" } }, "p-locate": { @@ -5313,7 +5143,7 @@ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "requires": { - "p-limit": "1.3.0" + "p-limit": "^1.1.0" } }, "p-try": { @@ -5334,9 +5164,9 @@ "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", "dev": true, "requires": { - "cyclist": "0.2.2", - "inherits": "2.0.3", - "readable-stream": "2.3.6" + "cyclist": "~0.2.2", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" } }, "param-case": { @@ -5345,7 +5175,7 @@ "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", "dev": true, "requires": { - "no-case": "2.3.2" + "no-case": "^2.2.0" } }, "parse-asn1": { @@ -5368,10 +5198,10 @@ "dev": true, "optional": true, "requires": { - "glob-base": "0.3.0", - "is-dotfile": "1.0.3", - "is-extglob": "1.0.0", - "is-glob": "2.0.1" + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" }, "dependencies": { "is-extglob": { @@ -5387,7 +5217,7 @@ "dev": true, "optional": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } } } @@ -5442,41 +5272,26 @@ } } }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "3.0.0" - } - }, "pbkdf2": { "version": "3.0.17", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", "dev": true, "requires": { - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "ripemd160": "2.0.2", - "safe-buffer": "5.1.2", - "sha.js": "2.4.11" + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, "pkg-dir": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", "dev": true, "requires": { - "find-up": "2.1.0" + "find-up": "^2.1.0" } }, "posix-character-classes": { @@ -5491,10 +5306,10 @@ "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", "dev": true, "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.5", - "source-map": "0.5.7", - "supports-color": "3.2.3" + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" }, "dependencies": { "has-flag": { @@ -5509,7 +5324,7 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" } } } @@ -5520,9 +5335,9 @@ "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=", "dev": true, "requires": { - "postcss": "5.2.18", - "postcss-message-helpers": "2.0.0", - "reduce-css-calc": "1.3.0" + "postcss": "^5.0.2", + "postcss-message-helpers": "^2.0.0", + "reduce-css-calc": "^1.2.6" } }, "postcss-colormin": { @@ -5531,9 +5346,9 @@ "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=", "dev": true, "requires": { - "colormin": "1.1.2", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "colormin": "^1.0.5", + "postcss": "^5.0.13", + "postcss-value-parser": "^3.2.3" } }, "postcss-convert-values": { @@ -5542,8 +5357,8 @@ "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=", "dev": true, "requires": { - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "postcss": "^5.0.11", + "postcss-value-parser": "^3.1.2" } }, "postcss-discard-comments": { @@ -5552,7 +5367,7 @@ "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.14" } }, "postcss-discard-duplicates": { @@ -5561,7 +5376,7 @@ "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.4" } }, "postcss-discard-empty": { @@ -5570,7 +5385,7 @@ "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.14" } }, "postcss-discard-overridden": { @@ -5579,7 +5394,7 @@ "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.16" } }, "postcss-discard-unused": { @@ -5588,8 +5403,8 @@ "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=", "dev": true, "requires": { - "postcss": "5.2.18", - "uniqs": "2.0.0" + "postcss": "^5.0.14", + "uniqs": "^2.0.0" } }, "postcss-filter-plugins": { @@ -5598,7 +5413,7 @@ "integrity": "sha1-giRf34IzcEFkXkdxFNjlk6oYuOw=", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.4" } }, "postcss-merge-idents": { @@ -5607,9 +5422,9 @@ "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=", "dev": true, "requires": { - "has": "1.0.3", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "has": "^1.0.1", + "postcss": "^5.0.10", + "postcss-value-parser": "^3.1.1" } }, "postcss-merge-longhand": { @@ -5618,7 +5433,7 @@ "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.4" } }, "postcss-merge-rules": { @@ -5627,11 +5442,11 @@ "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=", "dev": true, "requires": { - "browserslist": "1.7.7", - "caniuse-api": "1.6.1", - "postcss": "5.2.18", - "postcss-selector-parser": "2.2.3", - "vendors": "1.0.2" + "browserslist": "^1.5.2", + "caniuse-api": "^1.5.2", + "postcss": "^5.0.4", + "postcss-selector-parser": "^2.2.2", + "vendors": "^1.0.0" } }, "postcss-message-helpers": { @@ -5646,9 +5461,9 @@ "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=", "dev": true, "requires": { - "object-assign": "4.1.1", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "object-assign": "^4.0.1", + "postcss": "^5.0.4", + "postcss-value-parser": "^3.0.2" } }, "postcss-minify-gradients": { @@ -5657,8 +5472,8 @@ "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=", "dev": true, "requires": { - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "postcss": "^5.0.12", + "postcss-value-parser": "^3.3.0" } }, "postcss-minify-params": { @@ -5667,10 +5482,10 @@ "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=", "dev": true, "requires": { - "alphanum-sort": "1.0.2", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0", - "uniqs": "2.0.0" + "alphanum-sort": "^1.0.1", + "postcss": "^5.0.2", + "postcss-value-parser": "^3.0.2", + "uniqs": "^2.0.0" } }, "postcss-minify-selectors": { @@ -5679,10 +5494,10 @@ "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=", "dev": true, "requires": { - "alphanum-sort": "1.0.2", - "has": "1.0.3", - "postcss": "5.2.18", - "postcss-selector-parser": "2.2.3" + "alphanum-sort": "^1.0.2", + "has": "^1.0.1", + "postcss": "^5.0.14", + "postcss-selector-parser": "^2.0.0" } }, "postcss-modules-extract-imports": { @@ -5691,7 +5506,7 @@ "integrity": "sha1-ZhQOzs447wa/DT41XWm/WdFB6oU=", "dev": true, "requires": { - "postcss": "6.0.23" + "postcss": "^6.0.1" }, "dependencies": { "ansi-styles": { @@ -5700,7 +5515,7 @@ "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", "dev": true, "requires": { - "color-convert": "1.9.2" + "color-convert": "^1.9.0" } }, "chalk": { @@ -5709,9 +5524,9 @@ "integrity": "sha1-GMSasWoDe26wFSzIPjRxM4IVtm4=", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "has-flag": { @@ -5726,9 +5541,9 @@ "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=", "dev": true, "requires": { - "chalk": "2.4.1", - "source-map": "0.6.1", - "supports-color": "5.4.0" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { @@ -5743,7 +5558,7 @@ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } @@ -5754,8 +5569,8 @@ "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", "dev": true, "requires": { - "css-selector-tokenizer": "0.7.0", - "postcss": "6.0.23" + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" }, "dependencies": { "ansi-styles": { @@ -5764,7 +5579,7 @@ "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", "dev": true, "requires": { - "color-convert": "1.9.2" + "color-convert": "^1.9.0" } }, "chalk": { @@ -5773,9 +5588,9 @@ "integrity": "sha1-GMSasWoDe26wFSzIPjRxM4IVtm4=", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "has-flag": { @@ -5790,9 +5605,9 @@ "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=", "dev": true, "requires": { - "chalk": "2.4.1", - "source-map": "0.6.1", - "supports-color": "5.4.0" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { @@ -5807,7 +5622,7 @@ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } @@ -5818,8 +5633,8 @@ "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", "dev": true, "requires": { - "css-selector-tokenizer": "0.7.0", - "postcss": "6.0.23" + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" }, "dependencies": { "ansi-styles": { @@ -5828,7 +5643,7 @@ "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", "dev": true, "requires": { - "color-convert": "1.9.2" + "color-convert": "^1.9.0" } }, "chalk": { @@ -5837,9 +5652,9 @@ "integrity": "sha1-GMSasWoDe26wFSzIPjRxM4IVtm4=", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "has-flag": { @@ -5854,9 +5669,9 @@ "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=", "dev": true, "requires": { - "chalk": "2.4.1", - "source-map": "0.6.1", - "supports-color": "5.4.0" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { @@ -5871,7 +5686,7 @@ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } @@ -5882,8 +5697,8 @@ "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", "dev": true, "requires": { - "icss-replace-symbols": "1.1.0", - "postcss": "6.0.23" + "icss-replace-symbols": "^1.1.0", + "postcss": "^6.0.1" }, "dependencies": { "ansi-styles": { @@ -5892,7 +5707,7 @@ "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", "dev": true, "requires": { - "color-convert": "1.9.2" + "color-convert": "^1.9.0" } }, "chalk": { @@ -5901,9 +5716,9 @@ "integrity": "sha1-GMSasWoDe26wFSzIPjRxM4IVtm4=", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "has-flag": { @@ -5918,9 +5733,9 @@ "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=", "dev": true, "requires": { - "chalk": "2.4.1", - "source-map": "0.6.1", - "supports-color": "5.4.0" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { @@ -5935,7 +5750,7 @@ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } @@ -5946,7 +5761,7 @@ "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.5" } }, "postcss-normalize-url": { @@ -5955,10 +5770,10 @@ "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=", "dev": true, "requires": { - "is-absolute-url": "2.1.0", - "normalize-url": "1.9.1", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "is-absolute-url": "^2.0.0", + "normalize-url": "^1.4.0", + "postcss": "^5.0.14", + "postcss-value-parser": "^3.2.3" } }, "postcss-ordered-values": { @@ -5967,8 +5782,8 @@ "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=", "dev": true, "requires": { - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "postcss": "^5.0.4", + "postcss-value-parser": "^3.0.1" } }, "postcss-reduce-idents": { @@ -5977,8 +5792,8 @@ "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=", "dev": true, "requires": { - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "postcss": "^5.0.4", + "postcss-value-parser": "^3.0.2" } }, "postcss-reduce-initial": { @@ -5987,7 +5802,7 @@ "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.4" } }, "postcss-reduce-transforms": { @@ -5996,9 +5811,9 @@ "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=", "dev": true, "requires": { - "has": "1.0.3", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "has": "^1.0.1", + "postcss": "^5.0.8", + "postcss-value-parser": "^3.0.1" } }, "postcss-selector-parser": { @@ -6007,9 +5822,9 @@ "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=", "dev": true, "requires": { - "flatten": "1.0.2", - "indexes-of": "1.0.1", - "uniq": "1.0.1" + "flatten": "^1.0.2", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" } }, "postcss-svgo": { @@ -6018,10 +5833,10 @@ "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=", "dev": true, "requires": { - "is-svg": "2.1.0", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0", - "svgo": "0.7.2" + "is-svg": "^2.0.0", + "postcss": "^5.0.14", + "postcss-value-parser": "^3.2.3", + "svgo": "^0.7.0" } }, "postcss-unique-selectors": { @@ -6030,9 +5845,9 @@ "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=", "dev": true, "requires": { - "alphanum-sort": "1.0.2", - "postcss": "5.2.18", - "uniqs": "2.0.0" + "alphanum-sort": "^1.0.1", + "postcss": "^5.0.4", + "uniqs": "^2.0.0" } }, "postcss-value-parser": { @@ -6047,9 +5862,9 @@ "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=", "dev": true, "requires": { - "has": "1.0.3", - "postcss": "5.2.18", - "uniqs": "2.0.0" + "has": "^1.0.1", + "postcss": "^5.0.4", + "uniqs": "^2.0.0" } }, "prepend-http": { @@ -6071,8 +5886,8 @@ "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", "dev": true, "requires": { - "renderkid": "2.0.2", - "utila": "0.4.0" + "renderkid": "^2.0.1", + "utila": "~0.4" } }, "private": { @@ -6098,7 +5913,7 @@ "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", "integrity": "sha1-BktyYCsY+Q8pGSuLG8QY/9Hr078=", "requires": { - "asap": "2.0.6" + "asap": "~2.0.3" } }, "promise-inflight": { @@ -6112,8 +5927,8 @@ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz", "integrity": "sha1-BdXKd7RFPphdYPx/+MhZCUpJcQI=", "requires": { - "loose-envify": "1.3.1", - "object-assign": "4.1.1" + "loose-envify": "^1.3.1", + "object-assign": "^4.1.1" } }, "prr": { @@ -6122,24 +5937,18 @@ "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", "dev": true }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, "public-encrypt": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dev": true, "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.2.0", - "parse-asn1": "5.1.1", - "randombytes": "2.0.6", - "safe-buffer": "5.1.2" + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "pump": { @@ -6148,8 +5957,8 @@ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "once": "1.4.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, "pumpify": { @@ -6158,9 +5967,9 @@ "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", "dev": true, "requires": { - "duplexify": "3.6.1", - "inherits": "2.0.3", - "pump": "2.0.1" + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" }, "dependencies": { "pump": { @@ -6169,8 +5978,8 @@ "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "once": "1.4.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } } } @@ -6193,8 +6002,8 @@ "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", "dev": true, "requires": { - "object-assign": "4.1.1", - "strict-uri-encode": "1.1.0" + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" } }, "querystring": { @@ -6216,9 +6025,9 @@ "dev": true, "optional": true, "requires": { - "is-number": "4.0.0", - "kind-of": "6.0.2", - "math-random": "1.0.1" + "is-number": "^4.0.0", + "kind-of": "^6.0.0", + "math-random": "^1.0.1" }, "dependencies": { "is-number": { @@ -6243,7 +6052,7 @@ "integrity": "sha1-0wLFIpSFiISKjTAMkytEwkIx2oA=", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "^5.1.0" } }, "randomfill": { @@ -6252,8 +6061,8 @@ "integrity": "sha1-ySGW/IarQr6YPxvzF3giSTHWFFg=", "dev": true, "requires": { - "randombytes": "2.0.6", - "safe-buffer": "5.1.2" + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" } }, "react": { @@ -6261,10 +6070,10 @@ "resolved": "https://registry.npmjs.org/react/-/react-16.4.1.tgz", "integrity": "sha512-3GEs0giKp6E0Oh/Y9ZC60CmYgUPnp7voH9fbjWsvXtYFb4EWtgQub0ADSq0sJR0BbHc4FThLLtzlcFaFXIorwg==", "requires": { - "fbjs": "0.8.17", - "loose-envify": "1.3.1", - "object-assign": "4.1.1", - "prop-types": "15.6.2" + "fbjs": "^0.8.16", + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.0" } }, "react-dom": { @@ -6272,10 +6081,10 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.4.1.tgz", "integrity": "sha512-1Gin+wghF/7gl4Cqcvr1DxFX2Osz7ugxSwl6gBqCMpdrxHjIFUS7GYxrFftZ9Ln44FHw0JxCFD9YtZsrbR5/4A==", "requires": { - "fbjs": "0.8.17", - "loose-envify": "1.3.1", - "object-assign": "4.1.1", - "prop-types": "15.6.2" + "fbjs": "^0.8.16", + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.0" } }, "react-is": { @@ -6288,12 +6097,12 @@ "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-5.0.7.tgz", "integrity": "sha1-DcEHbZr7RnD5k/+u9EuPjBFVpMg=", "requires": { - "hoist-non-react-statics": "2.5.5", - "invariant": "2.2.4", - "lodash": "4.17.10", - "lodash-es": "4.17.10", - "loose-envify": "1.3.1", - "prop-types": "15.6.2" + "hoist-non-react-statics": "^2.5.0", + "invariant": "^2.0.0", + "lodash": "^4.17.5", + "lodash-es": "^4.17.5", + "loose-envify": "^1.1.0", + "prop-types": "^15.6.0" } }, "react-router": { @@ -6301,16 +6110,16 @@ "resolved": "https://registry.npmjs.org/react-router/-/react-router-4.4.0-beta.6.tgz", "integrity": "sha512-esR1UHsPpfvehX5Qn7wQrOTFsl4PxiaX3GaYvtFDSEioMsTl0zkASJBm1fXKgR9brUQX9kgiGq6XnCsiJU/82g==", "requires": { - "@babel/runtime": "7.2.0", - "create-react-context": "0.2.3", - "history": "4.8.0-beta.0", - "hoist-non-react-statics": "2.5.5", - "loose-envify": "1.3.1", - "path-to-regexp": "1.7.0", - "prop-types": "15.6.2", - "react-is": "16.6.3", - "tiny-invariant": "1.0.3", - "tiny-warning": "1.0.0" + "@babel/runtime": "^7.1.2", + "create-react-context": "^0.2.2", + "history": "^4.8.0-beta.0", + "hoist-non-react-statics": "^2.5.0", + "loose-envify": "^1.3.1", + "path-to-regexp": "^1.7.0", + "prop-types": "^15.6.2", + "react-is": "^16.5.2", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" }, "dependencies": { "history": { @@ -6318,12 +6127,12 @@ "resolved": "https://registry.npmjs.org/history/-/history-4.8.0-beta.0.tgz", "integrity": "sha512-LDjPtGgAFDO3lZ+bumN67k0R3GWvUBLLgRJpFU2mnJ1w+D5rEbiZC1c37yPla7tx/dUzVfznt5Rmttnz0MvGdA==", "requires": { - "@babel/runtime": "7.2.0", - "loose-envify": "1.3.1", - "resolve-pathname": "2.2.0", - "tiny-invariant": "1.0.3", - "tiny-warning": "1.0.0", - "value-equal": "0.4.0" + "@babel/runtime": "^7.1.2", + "loose-envify": "^1.2.0", + "resolve-pathname": "^2.2.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0", + "value-equal": "^0.4.0" } } } @@ -6333,11 +6142,11 @@ "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-4.4.0-alpha.1.tgz", "integrity": "sha1-EgfmmFNJ6wvXms4azhx89ni80cQ=", "requires": { - "history": "4.7.2", - "invariant": "2.2.4", - "loose-envify": "1.3.1", - "prop-types": "15.6.2", - "react-router": "4.4.0-beta.6" + "history": "^4.7.2", + "invariant": "^2.2.4", + "loose-envify": "^1.3.1", + "prop-types": "^15.6.1", + "react-router": "^4.4.0-alpha.1" } }, "react-router-redux": { @@ -6351,13 +6160,13 @@ "integrity": "sha1-sRwn2IuP8fvgcGQ8+UsMea4bCq8=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "readdirp": { @@ -6366,10 +6175,10 @@ "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "minimatch": "3.0.4", - "readable-stream": "2.3.6", - "set-immediate-shim": "1.0.1" + "graceful-fs": "^4.1.2", + "minimatch": "^3.0.2", + "readable-stream": "^2.0.2", + "set-immediate-shim": "^1.0.1" } }, "reduce-css-calc": { @@ -6378,9 +6187,9 @@ "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=", "dev": true, "requires": { - "balanced-match": "0.4.2", - "math-expression-evaluator": "1.2.17", - "reduce-function-call": "1.0.2" + "balanced-match": "^0.4.2", + "math-expression-evaluator": "^1.2.14", + "reduce-function-call": "^1.0.1" }, "dependencies": { "balanced-match": { @@ -6397,7 +6206,7 @@ "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=", "dev": true, "requires": { - "balanced-match": "0.4.2" + "balanced-match": "^0.4.2" }, "dependencies": { "balanced-match": { @@ -6413,8 +6222,8 @@ "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.0.tgz", "integrity": "sha1-qmmKkrcpMV0is0oFU9fmUzVVzAM=", "requires": { - "loose-envify": "1.3.1", - "symbol-observable": "1.2.0" + "loose-envify": "^1.1.0", + "symbol-observable": "^1.2.0" } }, "redux-immutable": { @@ -6440,9 +6249,9 @@ "integrity": "sha1-HkmWg3Ix2ot/PPQRTXG1aRoGgN0=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "private": "0.1.8" + "babel-runtime": "^6.18.0", + "babel-types": "^6.19.0", + "private": "^0.1.6" } }, "regex-cache": { @@ -6452,7 +6261,7 @@ "dev": true, "optional": true, "requires": { - "is-equal-shallow": "0.1.3" + "is-equal-shallow": "^0.1.3" } }, "regex-not": { @@ -6461,8 +6270,8 @@ "integrity": "sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw=", "dev": true, "requires": { - "extend-shallow": "3.0.2", - "safe-regex": "1.1.0" + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" } }, "regexpu-core": { @@ -6471,9 +6280,9 @@ "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", "dev": true, "requires": { - "regenerate": "1.4.0", - "regjsgen": "0.2.0", - "regjsparser": "0.1.5" + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" } }, "regjsgen": { @@ -6488,7 +6297,7 @@ "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", "dev": true, "requires": { - "jsesc": "0.5.0" + "jsesc": "~0.5.0" }, "dependencies": { "jsesc": { @@ -6517,11 +6326,11 @@ "integrity": "sha512-FsygIxevi1jSiPY9h7vZmBFUbAOcbYm9UwyiLNdVsLRs/5We9Ob5NMPbGYUTWiLq5L+ezlVdE0A8bbME5CWTpg==", "dev": true, "requires": { - "css-select": "1.2.0", - "dom-converter": "0.2.0", - "htmlparser2": "3.3.0", - "strip-ansi": "3.0.1", - "utila": "0.4.0" + "css-select": "^1.1.0", + "dom-converter": "~0.2", + "htmlparser2": "~3.3.0", + "strip-ansi": "^3.0.0", + "utila": "^0.4.0" } }, "repeat-element": { @@ -6542,7 +6351,7 @@ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", "dev": true, "requires": { - "is-finite": "1.0.2" + "is-finite": "^1.0.0" } }, "require-directory": { @@ -6563,7 +6372,7 @@ "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", "dev": true, "requires": { - "resolve-from": "3.0.0" + "resolve-from": "^3.0.0" } }, "resolve-from": { @@ -6595,7 +6404,7 @@ "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "dev": true, "requires": { - "glob": "7.1.3" + "glob": "^7.1.3" }, "dependencies": { "glob": { @@ -6604,12 +6413,12 @@ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } } } @@ -6620,8 +6429,8 @@ "integrity": "sha1-ocGm9iR1FXe6XQeRTLyShQWFiQw=", "dev": true, "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3" + "hash-base": "^3.0.0", + "inherits": "^2.0.1" } }, "run-queue": { @@ -6630,7 +6439,7 @@ "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", "dev": true, "requires": { - "aproba": "1.2.0" + "aproba": "^1.1.1" } }, "safe-buffer": { @@ -6665,8 +6474,8 @@ "integrity": "sha512-yYrjb9TX2k/J1Y5UNy3KYdZq10xhYcF8nMpAW6o3hy6Q8WSIEf9lJHG/ePnOBfziPM3fvQwfOwa13U/Fh8qTfA==", "dev": true, "requires": { - "ajv": "6.5.2", - "ajv-keywords": "3.2.0" + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0" } }, "semver": { @@ -6699,10 +6508,10 @@ "integrity": "sha1-ca5KiPD+77v1LR6mBPP7MV67YnQ=", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "split-string": "3.1.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" }, "dependencies": { "extend-shallow": { @@ -6711,7 +6520,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -6737,7 +6546,7 @@ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "requires": { - "shebang-regex": "1.0.0" + "shebang-regex": "^1.0.0" } }, "shebang-regex": { @@ -6764,14 +6573,14 @@ "integrity": "sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0=", "dev": true, "requires": { - "base": "0.11.2", - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "map-cache": "0.2.2", - "source-map": "0.5.7", - "source-map-resolve": "0.5.2", - "use": "3.1.1" + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" }, "dependencies": { "define-property": { @@ -6780,7 +6589,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -6789,7 +6598,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -6800,9 +6609,9 @@ "integrity": "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=", "dev": true, "requires": { - "define-property": "1.0.0", - "isobject": "3.0.1", - "snapdragon-util": "3.0.1" + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" }, "dependencies": { "define-property": { @@ -6811,7 +6620,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "is-accessor-descriptor": { @@ -6820,7 +6629,7 @@ "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -6829,7 +6638,7 @@ "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -6838,9 +6647,9 @@ "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, "kind-of": { @@ -6857,7 +6666,7 @@ "integrity": "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.2.0" } }, "sort-keys": { @@ -6866,7 +6675,7 @@ "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", "dev": true, "requires": { - "is-plain-obj": "1.1.0" + "is-plain-obj": "^1.0.0" } }, "source-list-map": { @@ -6887,11 +6696,11 @@ "integrity": "sha1-cuLMNAlVQ+Q7LGKyxMENSpBU8lk=", "dev": true, "requires": { - "atob": "2.1.2", - "decode-uri-component": "0.2.0", - "resolve-url": "0.2.1", - "source-map-url": "0.4.0", - "urix": "0.1.0" + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" } }, "source-map-support": { @@ -6900,7 +6709,7 @@ "integrity": "sha1-Aoam3ovkJkEzhZTpfM6nXwosWF8=", "dev": true, "requires": { - "source-map": "0.5.7" + "source-map": "^0.5.6" } }, "source-map-url": { @@ -6915,7 +6724,7 @@ "integrity": "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=", "dev": true, "requires": { - "extend-shallow": "3.0.2" + "extend-shallow": "^3.0.0" } }, "sprintf-js": { @@ -6930,7 +6739,7 @@ "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", "dev": true, "requires": { - "figgy-pudding": "3.5.1" + "figgy-pudding": "^3.5.1" } }, "static-extend": { @@ -6939,8 +6748,8 @@ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "dev": true, "requires": { - "define-property": "0.2.5", - "object-copy": "0.1.0" + "define-property": "^0.2.5", + "object-copy": "^0.1.0" }, "dependencies": { "define-property": { @@ -6949,7 +6758,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } } } @@ -6970,8 +6779,8 @@ "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "stream-shift": "1.0.0" + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" } }, "stream-http": { @@ -6980,11 +6789,11 @@ "integrity": "sha1-stJCRpKIpaJ+xP6JM6z2I95lFPw=", "dev": true, "requires": { - "builtin-status-codes": "3.0.0", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "to-arraybuffer": "1.0.1", - "xtend": "4.0.1" + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" } }, "stream-shift": { @@ -7005,8 +6814,8 @@ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" }, "dependencies": { "ansi-regex": { @@ -7021,7 +6830,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } } } @@ -7032,7 +6841,7 @@ "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "~5.1.0" } }, "strip-ansi": { @@ -7040,7 +6849,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-eof": { @@ -7055,8 +6864,8 @@ "integrity": "sha1-aMUuXrKvycqStidL4nfuWa6jqFI=", "dev": true, "requires": { - "loader-utils": "1.1.0", - "schema-utils": "0.4.5" + "loader-utils": "^1.1.0", + "schema-utils": "^0.4.5" } }, "supports-color": { @@ -7065,7 +6874,7 @@ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } }, "svgo": { @@ -7074,13 +6883,13 @@ "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=", "dev": true, "requires": { - "coa": "1.0.4", - "colors": "1.1.2", - "csso": "2.3.2", - "js-yaml": "3.7.0", - "mkdirp": "0.5.1", - "sax": "1.2.4", - "whet.extend": "0.9.9" + "coa": "~1.0.1", + "colors": "~1.1.2", + "csso": "~2.3.1", + "js-yaml": "~3.7.0", + "mkdirp": "~0.5.1", + "sax": "~1.2.1", + "whet.extend": "~0.9.9" } }, "symbol-observable": { @@ -7100,9 +6909,9 @@ "integrity": "sha512-ogyZye4DFqOtMzT92Y3Nxxw8OvXmL39HOALro4fc+EUYFFF9G/kk0znkvwMz6PPYgBtdKAodh3FPR70eugdaQA==", "dev": true, "requires": { - "commander": "2.17.1", - "source-map": "0.6.1", - "source-map-support": "0.5.9" + "commander": "~2.17.1", + "source-map": "~0.6.1", + "source-map-support": "~0.5.6" }, "dependencies": { "commander": { @@ -7123,8 +6932,8 @@ "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==", "dev": true, "requires": { - "buffer-from": "1.1.1", - "source-map": "0.6.1" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } } } @@ -7135,14 +6944,14 @@ "integrity": "sha512-QW7RACLS89RalHtLDb0s8+Iqcs/IAEw1rnVrV+mS7Gx1kgPG8o1g33JhAGDgc/CQ84hLsTW5WrAMdVysh692yg==", "dev": true, "requires": { - "cacache": "11.3.2", - "find-cache-dir": "2.0.0", - "schema-utils": "1.0.0", - "serialize-javascript": "1.6.0", - "source-map": "0.6.1", - "terser": "3.13.1", - "webpack-sources": "1.3.0", - "worker-farm": "1.6.0" + "cacache": "^11.0.2", + "find-cache-dir": "^2.0.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^1.4.0", + "source-map": "^0.6.1", + "terser": "^3.8.1", + "webpack-sources": "^1.1.0", + "worker-farm": "^1.5.2" }, "dependencies": { "find-cache-dir": { @@ -7151,9 +6960,9 @@ "integrity": "sha512-LDUY6V1Xs5eFskUVYtIwatojt6+9xC9Chnlk/jYOOvn3FAFfSaWddxahDGyNHh0b2dMXa6YW2m0tk8TdVaXHlA==", "dev": true, "requires": { - "commondir": "1.0.1", - "make-dir": "1.3.0", - "pkg-dir": "3.0.0" + "commondir": "^1.0.1", + "make-dir": "^1.0.0", + "pkg-dir": "^3.0.0" } }, "find-up": { @@ -7162,7 +6971,7 @@ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "locate-path": "3.0.0" + "locate-path": "^3.0.0" } }, "locate-path": { @@ -7171,8 +6980,8 @@ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "p-locate": "3.0.0", - "path-exists": "3.0.0" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" } }, "p-limit": { @@ -7181,7 +6990,7 @@ "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", "dev": true, "requires": { - "p-try": "2.0.0" + "p-try": "^2.0.0" } }, "p-locate": { @@ -7190,7 +6999,7 @@ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "p-limit": "2.1.0" + "p-limit": "^2.0.0" } }, "p-try": { @@ -7205,7 +7014,7 @@ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, "requires": { - "find-up": "3.0.0" + "find-up": "^3.0.0" } }, "schema-utils": { @@ -7214,9 +7023,9 @@ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dev": true, "requires": { - "ajv": "6.5.2", - "ajv-errors": "1.0.1", - "ajv-keywords": "3.2.0" + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" } }, "source-map": { @@ -7233,8 +7042,8 @@ "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "requires": { - "readable-stream": "2.3.6", - "xtend": "4.0.1" + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" } }, "timers-browserify": { @@ -7243,7 +7052,7 @@ "integrity": "sha1-HSjj0qrfHVpZlsTp+VYBzQU0gK4=", "dev": true, "requires": { - "setimmediate": "1.0.5" + "setimmediate": "^1.0.4" } }, "tiny-invariant": { @@ -7274,7 +7083,7 @@ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "to-regex": { @@ -7283,10 +7092,10 @@ "integrity": "sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4=", "dev": true, "requires": { - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "regex-not": "1.0.2", - "safe-regex": "1.1.0" + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" } }, "to-regex-range": { @@ -7295,8 +7104,8 @@ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "requires": { - "is-number": "3.0.0", - "repeat-string": "1.6.1" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" } }, "toposort": { @@ -7340,8 +7149,8 @@ "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", "dev": true, "requires": { - "commander": "2.17.1", - "source-map": "0.6.1" + "commander": "~2.17.1", + "source-map": "~0.6.1" }, "dependencies": { "commander": { @@ -7364,10 +7173,10 @@ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", "dev": true, "requires": { - "arr-union": "3.1.0", - "get-value": "2.0.6", - "is-extendable": "0.1.1", - "set-value": "0.4.3" + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" }, "dependencies": { "extend-shallow": { @@ -7376,7 +7185,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "set-value": { @@ -7385,10 +7194,10 @@ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "to-object-path": "0.3.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" } } } @@ -7411,7 +7220,7 @@ "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", "dev": true, "requires": { - "unique-slug": "2.0.1" + "unique-slug": "^2.0.0" } }, "unique-slug": { @@ -7420,7 +7229,7 @@ "integrity": "sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==", "dev": true, "requires": { - "imurmurhash": "0.1.4" + "imurmurhash": "^0.1.4" } }, "universalify": { @@ -7434,8 +7243,8 @@ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "dev": true, "requires": { - "has-value": "0.3.1", - "isobject": "3.0.1" + "has-value": "^0.3.1", + "isobject": "^3.0.0" }, "dependencies": { "has-value": { @@ -7444,9 +7253,9 @@ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "dev": true, "requires": { - "get-value": "2.0.6", - "has-values": "0.1.4", - "isobject": "2.1.0" + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" }, "dependencies": { "isobject": { @@ -7486,7 +7295,7 @@ "integrity": "sha1-lMVA4f93KVbiKZUHwBCupsiDjrA=", "dev": true, "requires": { - "punycode": "2.1.1" + "punycode": "^2.1.0" } }, "urix": { @@ -7546,8 +7355,8 @@ "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", "dev": true, "requires": { - "define-properties": "1.1.3", - "object.getownpropertydescriptors": "2.0.3" + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" } }, "utila": { @@ -7568,7 +7377,7 @@ "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", "dev": true, "requires": { - "user-home": "1.1.1" + "user-home": "^1.1.1" } }, "value-equal": { @@ -7596,7 +7405,7 @@ "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.1.tgz", "integrity": "sha512-rAVtTNZw+cQPjvGp1ox0XC5Q2IBFyqoqh+QII4J/oguyu83Bax1apbo2eqB8bHRS+fqYUBagys6lqUoVwKSmXQ==", "requires": { - "loose-envify": "1.3.1" + "loose-envify": "^1.0.0" } }, "watchpack": { @@ -7605,9 +7414,9 @@ "integrity": "sha1-S8EsLr6KonenHx0/FNaFx7RGzQA=", "dev": true, "requires": { - "chokidar": "2.0.4", - "graceful-fs": "4.1.11", - "neo-async": "2.6.0" + "chokidar": "^2.0.2", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" } }, "webpack": { @@ -7620,26 +7429,26 @@ "@webassemblyjs/helper-module-context": "1.7.11", "@webassemblyjs/wasm-edit": "1.7.11", "@webassemblyjs/wasm-parser": "1.7.11", - "acorn": "5.7.3", - "acorn-dynamic-import": "3.0.0", - "ajv": "6.5.2", - "ajv-keywords": "3.2.0", - "chrome-trace-event": "1.0.0", - "enhanced-resolve": "4.1.0", - "eslint-scope": "4.0.0", - "json-parse-better-errors": "1.0.2", - "loader-runner": "2.3.1", - "loader-utils": "1.1.0", - "memory-fs": "0.4.1", - "micromatch": "3.1.10", - "mkdirp": "0.5.1", - "neo-async": "2.6.0", - "node-libs-browser": "2.1.0", - "schema-utils": "0.4.5", - "tapable": "1.1.1", - "terser-webpack-plugin": "1.2.0", - "watchpack": "1.6.0", - "webpack-sources": "1.3.0" + "acorn": "^5.6.2", + "acorn-dynamic-import": "^3.0.0", + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0", + "chrome-trace-event": "^1.0.0", + "enhanced-resolve": "^4.1.0", + "eslint-scope": "^4.0.0", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.3.0", + "loader-utils": "^1.1.0", + "memory-fs": "~0.4.1", + "micromatch": "^3.1.8", + "mkdirp": "~0.5.0", + "neo-async": "^2.5.0", + "node-libs-browser": "^2.0.0", + "schema-utils": "^0.4.4", + "tapable": "^1.1.0", + "terser-webpack-plugin": "^1.1.0", + "watchpack": "^1.5.0", + "webpack-sources": "^1.3.0" } }, "webpack-cli": { @@ -7648,16 +7457,16 @@ "integrity": "sha512-Cnqo7CeqeSvC6PTdts+dywNi5CRlIPbLx1AoUPK2T6vC1YAugMG3IOoO9DmEscd+Dghw7uRlnzV1KwOe5IrtgQ==", "dev": true, "requires": { - "chalk": "2.4.1", - "cross-spawn": "6.0.5", - "enhanced-resolve": "4.1.0", - "global-modules-path": "2.3.1", - "import-local": "2.0.0", - "interpret": "1.1.0", - "loader-utils": "1.1.0", - "supports-color": "5.5.0", - "v8-compile-cache": "2.0.2", - "yargs": "12.0.5" + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "enhanced-resolve": "^4.1.0", + "global-modules-path": "^2.3.0", + "import-local": "^2.0.0", + "interpret": "^1.1.0", + "loader-utils": "^1.1.0", + "supports-color": "^5.5.0", + "v8-compile-cache": "^2.0.2", + "yargs": "^12.0.2" }, "dependencies": { "ansi-styles": { @@ -7666,7 +7475,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "1.9.2" + "color-convert": "^1.9.0" } }, "chalk": { @@ -7675,9 +7484,9 @@ "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } } } @@ -7688,8 +7497,8 @@ "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==", "dev": true, "requires": { - "source-list-map": "2.0.0", - "source-map": "0.6.1" + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" }, "dependencies": { "source-map": { @@ -7717,7 +7526,7 @@ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } }, "which-module": { @@ -7731,12 +7540,12 @@ "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-2.1.3.tgz", "integrity": "sha1-qBYZRtP4W4zCWQ3TpRnVPUD/igY=", "requires": { - "chalk": "1.1.3", - "fs-extra": "3.0.1", - "glob": "7.1.2", - "lodash.template": "4.4.0", - "mkdirp": "0.5.1", - "workbox-sw": "2.1.3" + "chalk": "^1.1.3", + "fs-extra": "^3.0.1", + "glob": "^7.1.1", + "lodash.template": "^4.4.0", + "mkdirp": "^0.5.1", + "workbox-sw": "^2.1.3" } }, "workbox-sw": { @@ -7749,7 +7558,7 @@ "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-2.1.3.tgz", "integrity": "sha1-5N6UgYzO9vZnsfX0GM5aEGHajTM=", "requires": { - "workbox-build": "2.1.3" + "workbox-build": "^2.1.3" } }, "worker-farm": { @@ -7758,7 +7567,7 @@ "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", "dev": true, "requires": { - "errno": "0.1.7" + "errno": "~0.1.7" } }, "wrap-ansi": { @@ -7767,8 +7576,8 @@ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" }, "dependencies": { "is-fullwidth-code-point": { @@ -7777,7 +7586,7 @@ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "string-width": { @@ -7786,9 +7595,9 @@ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } } } @@ -7822,18 +7631,18 @@ "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", "dev": true, "requires": { - "cliui": "4.1.0", - "decamelize": "1.2.0", - "find-up": "3.0.0", - "get-caller-file": "1.0.3", - "os-locale": "3.0.1", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "4.0.0", - "yargs-parser": "11.1.1" + "cliui": "^4.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^11.1.1" }, "dependencies": { "find-up": { @@ -7842,7 +7651,7 @@ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "locate-path": "3.0.0" + "locate-path": "^3.0.0" } }, "locate-path": { @@ -7851,8 +7660,8 @@ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "p-locate": "3.0.0", - "path-exists": "3.0.0" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" } }, "p-limit": { @@ -7861,7 +7670,7 @@ "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", "dev": true, "requires": { - "p-try": "2.0.0" + "p-try": "^2.0.0" } }, "p-locate": { @@ -7870,7 +7679,7 @@ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "p-limit": "2.1.0" + "p-limit": "^2.0.0" } }, "p-try": { @@ -7887,8 +7696,8 @@ "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", "dev": true, "requires": { - "camelcase": "5.0.0", - "decamelize": "1.2.0" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } } } diff --git a/package.json b/package.json index 9062e0f2..211be621 100644 --- a/package.json +++ b/package.json @@ -6,14 +6,14 @@ "build": "npm i; ./gradlew build", "deploy": "./gradlew deploy", "build:xp": "./gradlew babelXP", - "watch:xp": "./gradlew deploy -t", + "watch:xp": "./gradlew deploy -t --info", "rm": "node_modules/rimraf/bin.js build", "build:r4xp": "node_modules/webpack/bin/webpack.js --config webpack.config.react4xp.js --progress", "watch:r4xp": "node_modules/webpack/bin/webpack.js --config webpack.config.react4xp.js --progress --watch", "build:r4xp-ext": "node_modules/webpack/bin/webpack.js --config webpack.config.react4xp.externals.js --progress", "watch:r4xp-ext": "node_modules/webpack/bin/webpack.js --config webpack.config.react4xp.externals.js --progress --watch", - "build:r4xp-front": "node_modules/webpack/bin/webpack.js --config webpack.config.react4xp.frontCore.js --progress", - "watch:r4xp-front": "node_modules/webpack/bin/webpack.js --config webpack.config.react4xp.frontCore.js --progress --watch" + "build:r4xp-core": "node_modules/webpack/bin/webpack.js --config webpack.config.react4xp.frontCore.js --progress", + "watch:r4xp-core": "node_modules/webpack/bin/webpack.js --config webpack.config.react4xp.frontCore.js --progress --watch" }, "repository": { "type": "git", @@ -47,10 +47,7 @@ "babel-preset-react": "^6.24.1", "babel-preset-stage-0": "^6.24.1", "babel-register": "^6.26.0", - "clean-webpack-plugin": "^1.0.0", - "copy-webpack-plugin": "^4.6.0", "css-loader": "^0.28.11", - "exports-loader": "^0.7.0", "html-webpack-plugin": "^3.2.0", "less-loader": "^4.1.0", "rimraf": "^2.6.3", diff --git a/src/main/resources/lib/enonic/react4xp/index.es6 b/src/main/resources/lib/enonic/react4xp/index.es6 index 916b3007..3a9cf009 100644 --- a/src/main/resources/lib/enonic/react4xp/index.es6 +++ b/src/main/resources/lib/enonic/react4xp/index.es6 @@ -199,15 +199,10 @@ class React4xp { // Adds the component.jsx script and a trigger. Assumes that it reads its own required data from the data-react4xp attributes -targetId and -props. // If not, the exported default from that script can be reached like this: adjustedPgContributions.bodyEnd.push(` - - `); + +`); return adjustedPgContributions; }; diff --git a/src/main/resources/site/parts/complex-reactive/first.jsx b/src/main/resources/site/parts/complex-reactive/first.jsx index becffe97..ecf07c2a 100644 --- a/src/main/resources/site/parts/complex-reactive/first.jsx +++ b/src/main/resources/site/parts/complex-reactive/first.jsx @@ -1,7 +1,3 @@ import React from 'react'; -import React4xp from '../../../../react4xp/_frontendCore_'; - -const Test = (props) =>

First.jsx: {props.insertedMessage}

; - -React4xp.render(Test); +export default (props) =>

First.jsx: {props.insertedMessage}

; diff --git a/src/main/resources/site/parts/complex-reactive/second.jsx b/src/main/resources/site/parts/complex-reactive/second.jsx index 99fe517e..b2c28178 100644 --- a/src/main/resources/site/parts/complex-reactive/second.jsx +++ b/src/main/resources/site/parts/complex-reactive/second.jsx @@ -1,7 +1,3 @@ import React from 'react'; -import React4xp from '../../../../react4xp/_frontendCore_'; - -const Test = (props) =>

Second.jsx: {props.insertedMessage}

; - -React4xp.render(Test); +export default (props) =>

Second.jsx: {props.insertedMessage}

; diff --git a/src/main/resources/site/parts/simple-reactive/simple-reactive.jsx b/src/main/resources/site/parts/simple-reactive/simple-reactive.jsx index 85bd24ad..9fa1450f 100644 --- a/src/main/resources/site/parts/simple-reactive/simple-reactive.jsx +++ b/src/main/resources/site/parts/simple-reactive/simple-reactive.jsx @@ -1,7 +1,3 @@ import React from 'react'; - export default (props) =>

Dette er en test {props.insertedMessage}

; - -//React4xp.render(Test); -//exports.React4xp["react4xp/site/parts/simple-reactive/simple-reactive"] diff --git a/webpack.config.react4xp.js b/webpack.config.react4xp.js index 20ef1409..d75bb5ee 100644 --- a/webpack.config.react4xp.js +++ b/webpack.config.react4xp.js @@ -88,19 +88,27 @@ module.exports = { // Builds entries from files found under a directory, for selected file extensions, for bein transpiled out to a target path function getEntries(fullDirPath, extensions, targetPath) { + console.log("Components in " + fullDirPath + " (." + extensions.join(", .") + "):") const entries = {}; - targetPath += "/"; + if (targetPath && targetPath.length) { + targetPath += "/"; + } extensions.forEach(extension => { Object.assign( entries, - glob.sync(path.join(fullDirPath, '**/*.' + extension)).reduce(function(obj, el) { - const parsedEl = path.parse(el); + glob.sync(path.join(fullDirPath, '**/*.' + extension)).reduce(function(obj, entry) { + const parsedEl = path.parse(entry); if (parsedEl && parsedEl.dir.startsWith(fullDirPath)) { let subdir = parsedEl.dir.substring(fullDirPath.length).replace(/(^\/+)|(\/+$)/g, ""); if (subdir.length) { subdir += "/"; } - obj[targetPath + subdir + parsedEl.name] = el; + const name = targetPath + subdir + parsedEl.name; + console.log("\t", name); + /*console.log("\ttargetPath:", targetPath); + console.log("\tsubdir:", subdir); + console.log("\tparsedEl.name:", parsedEl.name);*/ + obj[name] = entry; } return obj; }, {}) From 78e4f2345cb740286e55ecb76b567aaa5b68066f Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Sun, 20 Jan 2019 18:20:35 +0100 Subject: [PATCH 50/96] Fetches transpiled dependency scripts (externals, core, and common components - in principle built for frontend, but lets try to use them as a basis for SSR) and tries to run them in nashorn. Works as such, but needs more polyfilling, starting with setTimeout. --- build.gradle | 1 + package.json | 8 +-- .../java/com/enonic/xp/react4xp/React4xp.java | 71 ++++++------------- .../enonic/xp/react4xp/ResourceHandler.java | 48 +++++++++++++ .../xp/react4xp/ScriptDependencyParser.java | 71 +++++++++++++++++++ .../{core.json.ejs => coreChunks.json.ejs} | 0 ...nals.json.ejs => externalsChunks.json.ejs} | 0 .../resources/lib/enonic/react4xp/index.es6 | 4 +- webpack.config.react4xp.externals.js | 4 +- webpack.config.react4xp.frontCore.js | 4 +- webpack.config.react4xp.js | 4 +- 11 files changed, 153 insertions(+), 62 deletions(-) create mode 100644 src/main/java/com/enonic/xp/react4xp/ResourceHandler.java create mode 100644 src/main/java/com/enonic/xp/react4xp/ScriptDependencyParser.java rename src/main/react4xp/{core.json.ejs => coreChunks.json.ejs} (100%) rename src/main/react4xp/{externals.json.ejs => externalsChunks.json.ejs} (100%) diff --git a/build.gradle b/build.gradle index f8a5d628..bfe18a5e 100644 --- a/build.gradle +++ b/build.gradle @@ -33,6 +33,7 @@ dependencies { include 'com.enonic.lib:lib-cache:1.1.0' include group: 'org.jdom', name: 'jdom', version: '2.0.2' + include group: 'org.json', name: 'json', version: '20180813' } repositories { diff --git a/package.json b/package.json index 211be621..09ca4d97 100644 --- a/package.json +++ b/package.json @@ -3,11 +3,11 @@ "version": "1.0.0", "description": "React starter for Enonic XP Platform", "scripts": { - "build": "npm i; ./gradlew build", - "deploy": "./gradlew deploy", - "build:xp": "./gradlew babelXP", - "watch:xp": "./gradlew deploy -t --info", "rm": "node_modules/rimraf/bin.js build", + "rebuild": "npm run rm; npm i; ./gradlew build", + "deploy": "./gradlew deploy --info", + "watch": "./gradlew deploy --info -t", + "babel:xp": "./gradlew babelXP", "build:r4xp": "node_modules/webpack/bin/webpack.js --config webpack.config.react4xp.js --progress", "watch:r4xp": "node_modules/webpack/bin/webpack.js --config webpack.config.react4xp.js --progress --watch", "build:r4xp-ext": "node_modules/webpack/bin/webpack.js --config webpack.config.react4xp.externals.js --progress", diff --git a/src/main/java/com/enonic/xp/react4xp/React4xp.java b/src/main/java/com/enonic/xp/react4xp/React4xp.java index 1b802613..a0fccc85 100644 --- a/src/main/java/com/enonic/xp/react4xp/React4xp.java +++ b/src/main/java/com/enonic/xp/react4xp/React4xp.java @@ -4,14 +4,12 @@ import javax.script.ScriptEngineManager; import javax.script.ScriptException; -import java.io.BufferedReader; -import java.io.FileNotFoundException; import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; +import java.util.Arrays; +import java.util.List; public class React4xp { - private static String NASHORN_POLYFILL = "" + + private final static String NASHORN_POLYFILL = "" + "if (typeof exports === 'undefined') { var exports = {}; }\n" + "if (typeof global === 'undefined') { var global = this; }\n" + "if (typeof window === 'undefined') { var window = this; }\n" + @@ -22,61 +20,34 @@ public class React4xp { "console.warn = print;\n" + "console.error = print;"; + private final static String CHUNKFILES_HOME = "/react4xp/"; + private final static String SCRIPTS_HOME = "/react4xp/"; - /** Read as string the content of a file (resource) inside the built JAR. - * @param path is full "file" name, relative to JAR root. */ - private String readResource(String path) throws IOException { - //System.out.println("Reading resource: " + path); - - InputStream in = getClass().getResourceAsStream(path); - if (in == null) { - throw new FileNotFoundException("Not found: " + path); - } - - BufferedReader reader = new BufferedReader(new InputStreamReader(in)); - StringBuilder sb = new StringBuilder(); - String line; - - try { - while ((line = reader.readLine()) != null) { - sb.append(line + "\n"); - } - } catch (IOException e) { - e.printStackTrace(); - throw e; - - } finally { - try { - reader.close(); - in.close(); - - } catch (IOException e) { - e.printStackTrace(); - throw e; - } - } - - //System.out.println("\tOK"); - return sb.toString(); - } + private final static List CHUNK_FILES = Arrays.asList( + CHUNKFILES_HOME + "externalsChunks.json", + CHUNKFILES_HOME + "coreChunks.json", + CHUNKFILES_HOME + "commonChunks.json" + ); public void test() throws IOException { - System.out.println("Testing nashorn..."); - - // Proof of concept: - String backendReact = readResource("/lib/enonic/react4xp/backendReact.js"); - String backendReactDOMServer = readResource("/lib/enonic/react4xp/backendReactDOMServer.js"); + System.out.println("\n\n\n############################################# Running nashorn test...\n\n\n"); try { - System.out.println("\n\n\n############################################# Running...\n\n\n:"); NashornScriptEngine engine = (NashornScriptEngine)new ScriptEngineManager().getEngineByName("nashorn"); - engine.eval(NASHORN_POLYFILL); + + List dependencyScripts = new ScriptDependencyParser().getScriptDependencies(CHUNK_FILES); + for (String scriptFile : dependencyScripts) { + System.out.println("\tReading and running script: " + SCRIPTS_HOME + scriptFile); + String script = ResourceHandler.readResource(SCRIPTS_HOME + scriptFile); + engine.eval(script); + } + engine.eval("k = 42;"); - engine.eval(backendReact); - engine.eval(backendReactDOMServer); + //engine.eval(backendReact); + //engine.eval(backendReactDOMServer); engine.eval("console.log('Howdy world!');"); engine.eval("console.log(k);"); diff --git a/src/main/java/com/enonic/xp/react4xp/ResourceHandler.java b/src/main/java/com/enonic/xp/react4xp/ResourceHandler.java new file mode 100644 index 00000000..a3158e2e --- /dev/null +++ b/src/main/java/com/enonic/xp/react4xp/ResourceHandler.java @@ -0,0 +1,48 @@ +package com.enonic.xp.react4xp; + +import java.io.BufferedReader; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; + +public class ResourceHandler { + + /** Read as string the content of a file (resource) inside the built JAR. + * @param path is full "file" name, relative to JAR root. */ + public static String readResource(String path) throws IOException { + //System.out.println("Reading resource: " + path); + + InputStream in = ResourceHandler.class.getResourceAsStream(path); + if (in == null) { + throw new FileNotFoundException("Not found: " + path); + } + + BufferedReader reader = new BufferedReader(new InputStreamReader(in)); + StringBuilder sb = new StringBuilder(); + String line; + + try { + while ((line = reader.readLine()) != null) { + sb.append(line + "\n"); + } + } catch (IOException e) { + e.printStackTrace(); + throw e; + + } finally { + try { + reader.close(); + in.close(); + + } catch (IOException e) { + e.printStackTrace(); + throw e; + } + } + + //System.out.println("\tOK"); + return sb.toString(); + } + +} diff --git a/src/main/java/com/enonic/xp/react4xp/ScriptDependencyParser.java b/src/main/java/com/enonic/xp/react4xp/ScriptDependencyParser.java new file mode 100644 index 00000000..e8c7a21d --- /dev/null +++ b/src/main/java/com/enonic/xp/react4xp/ScriptDependencyParser.java @@ -0,0 +1,71 @@ +package com.enonic.xp.react4xp; + +import org.json.JSONArray; +import org.json.JSONObject; + +import java.io.IOException; +import java.util.Arrays; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; + +public class ScriptDependencyParser { + private final static String CHUNKFILE_MAINKEY = "commonChunks"; + private final static String CHUNKFILE_ENTRYKEY = "entry"; + private final static List CHUNK_KEYS = Arrays.asList( + "headBegin", + "headEnd", + "bodyBegin", + "bodyEnd" + ); + + + private void addCommonChunksEntries(JSONObject commonChunks, LinkedList accumulator) { + for (String chunkKey : CHUNK_KEYS) { + if (commonChunks.has(chunkKey)) { + Object chObjs = commonChunks.get(chunkKey); + if (chObjs != null) { + JSONArray chunks = (JSONArray)chObjs; + Iterator chunksIter = chunks.iterator(); + while (chunksIter.hasNext()) { + Object chObj = chunksIter.next(); + if (chObj != null && chObj instanceof JSONObject) { + JSONObject chunk = (JSONObject)chObj; + if (chunk.has(CHUNKFILE_ENTRYKEY)) { + accumulator.add((String)chunk.get(CHUNKFILE_ENTRYKEY)); + } + } + } + } + } + } + } + + + private void addDependenciesFromFile(String chunkFile, LinkedList accumulator) throws IOException { + String json = ResourceHandler.readResource(chunkFile); + JSONObject fileContentData = new JSONObject(json); + + Iterator keys = fileContentData.keys(); + while(keys.hasNext()) { + String key = keys.next(); + if (CHUNKFILE_MAINKEY.equals(key)) { + Object obj = fileContentData.get(key); + if (obj != null && obj instanceof JSONObject) { + addCommonChunksEntries((JSONObject)obj, accumulator); + } + } + } + } + + public LinkedList getScriptDependencies(List chunkFiles) throws IOException { + + LinkedList dependencyScripts = new LinkedList<>(); + for (String chunkFile : chunkFiles) { + addDependenciesFromFile(chunkFile, dependencyScripts); + } + + //System.out.println("\tScripts:" + dependencyScripts); + return dependencyScripts; + } +} diff --git a/src/main/react4xp/core.json.ejs b/src/main/react4xp/coreChunks.json.ejs similarity index 100% rename from src/main/react4xp/core.json.ejs rename to src/main/react4xp/coreChunks.json.ejs diff --git a/src/main/react4xp/externals.json.ejs b/src/main/react4xp/externalsChunks.json.ejs similarity index 100% rename from src/main/react4xp/externals.json.ejs rename to src/main/react4xp/externalsChunks.json.ejs diff --git a/src/main/resources/lib/enonic/react4xp/index.es6 b/src/main/resources/lib/enonic/react4xp/index.es6 index 3a9cf009..7edabd7a 100644 --- a/src/main/resources/lib/enonic/react4xp/index.es6 +++ b/src/main/resources/lib/enonic/react4xp/index.es6 @@ -48,8 +48,8 @@ const buildBasicPageContributions = (chunkHashFiles) => { // Use the json files built by webpack to fetch the contenthashed filenames for commonChunks. // Then use those to build a set of basic page contributions common to all components: const PAGE_CONTRIBUTIONS = buildBasicPageContributions([ - `/${R4X}/externals.json`, - `/${R4X}/core.json`, + `/${R4X}/externalsChunks.json`, + `/${R4X}/coreChunks.json`, `/${R4X}/commonChunks.json` ]); diff --git a/webpack.config.react4xp.externals.js b/webpack.config.react4xp.externals.js index 596739b1..98309434 100644 --- a/webpack.config.react4xp.externals.js +++ b/webpack.config.react4xp.externals.js @@ -43,8 +43,8 @@ module.exports = { new HtmlWebpackPlugin({ inject: false, hash: false, - template: path.join(SRC_R4X, 'externals.json.ejs'), - filename: path.join(BUILD_R4X, 'externals.json') + template: path.join(SRC_R4X, 'externalsChunks.json.ejs'), + filename: path.join(BUILD_R4X, 'externalsChunks.json') }), ], }; diff --git a/webpack.config.react4xp.frontCore.js b/webpack.config.react4xp.frontCore.js index 2cc8347b..413fb9b5 100644 --- a/webpack.config.react4xp.frontCore.js +++ b/webpack.config.react4xp.frontCore.js @@ -52,8 +52,8 @@ module.exports = { new HtmlWebpackPlugin({ inject: false, hash: false, - template: path.join(SRC_R4X, 'core.json.ejs'), - filename: path.join(BUILD_R4X, 'core.json') + template: path.join(SRC_R4X, 'coreChunks.json.ejs'), + filename: path.join(BUILD_R4X, 'coreChunks.json') }), ], diff --git a/webpack.config.react4xp.js b/webpack.config.react4xp.js index d75bb5ee..a1e35251 100644 --- a/webpack.config.react4xp.js +++ b/webpack.config.react4xp.js @@ -63,12 +63,12 @@ module.exports = { plugins: [ // TODO: Autogenerate these: - new HtmlWebpackPlugin({ + /*new HtmlWebpackPlugin({ inject: false, hash: false, template: path.join(SRC_R4X, 'commonChunks.xml.ejs'), filename: path.join(BUILD_R4X, 'commonChunks.xml') - }), + }), */ new HtmlWebpackPlugin({ inject: false, From fc37ac55a376933f7cbde2bc3bc06e25d97b799a Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Sun, 20 Jan 2019 18:45:40 +0100 Subject: [PATCH 51/96] Working on nashorn polyfills. Map and setTimeout no longer throw errors (but do they work?). Set is stil missing. --- .../java/com/enonic/xp/react4xp/React4xp.java | 93 ++++++++++++++++++- 1 file changed, 92 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/enonic/xp/react4xp/React4xp.java b/src/main/java/com/enonic/xp/react4xp/React4xp.java index a0fccc85..ffae4125 100644 --- a/src/main/java/com/enonic/xp/react4xp/React4xp.java +++ b/src/main/java/com/enonic/xp/react4xp/React4xp.java @@ -18,7 +18,98 @@ public class React4xp { "console.debug = print;\n" + "console.log = print;\n" + "console.warn = print;\n" + - "console.error = print;"; + "console.error = print;\n" + + + // Polyfill Map: + "var Map = Java.type('java.util.HashMap');\n"+ + + // Polyfilling setTimeout() and friends: + // https://gist.github.com/josmardias/20493bd205e24e31c0a406472330515a + // + // TODO: Are we gonna have a problem? + // At least one timeout needs to be set, larger then your code bootstrap + // or Nashorn will run forever + // preferably, put a timeout 0 after your code bootstrap + "(function(context) {\n" + + " 'use strict';\n" + + "\n" + + " var Timer = Java.type('java.util.Timer');\n" + + " var Phaser = Java.type('java.util.concurrent.Phaser');\n" + + "\n" + + " var timer = new Timer('jsEventLoop', false);\n" + + " var phaser = new Phaser();\n" + + "\n" + + " var timeoutStack = 0;\n" + + " function pushTimeout() {\n" + + " timeoutStack++;\n" + + " }\n" + + " function popTimeout() {\n" + + " timeoutStack--;\n" + + " if (timeoutStack > 0) {\n" + + " return;\n" + + " }\n" + + " timer.cancel();\n" + + " phaser.forceTermination();\n" + + " }\n" + + "\n" + + " var onTaskFinished = function() {\n" + + " phaser.arriveAndDeregister();\n" + + " };\n" + + "\n" + + " context.setTimeout = function(fn, millis /* [, args...] */) {\n" + + " var args = [].slice.call(arguments, 2, arguments.length);\n" + + "\n" + + " var phase = phaser.register();\n" + + " var canceled = false;\n" + + " timer.schedule(function() {\n" + + " if (canceled) {\n" + + " return;\n" + + " }\n" + + "\n" + + " try {\n" + + " fn.apply(context, args);\n" + + " } catch (e) {\n" + + " print(e);\n" + + " } finally {\n" + + " onTaskFinished();\n" + + " popTimeout();\n" + + " }\n" + + " }, millis);\n" + + "\n" + + " pushTimeout();\n" + + "\n" + + " return function() {\n" + + " onTaskFinished();\n" + + " canceled = true;\n" + + " popTimeout();\n" + + " };\n" + + " };\n" + + "\n" + + " context.clearTimeout = function(cancel) {\n" + + " cancel();\n" + + " };\n" + + "\n" + + " context.setInterval = function(fn, delay /* [, args...] */) {\n" + + " var args = [].slice.call(arguments, 2, arguments.length);\n" + + "\n" + + " var cancel = null;\n" + + "\n" + + " var loop = function() {\n" + + " cancel = context.setTimeout(loop, delay);\n" + + " fn.apply(context, args);\n" + + " };\n" + + "\n" + + " cancel = context.setTimeout(loop, delay);\n" + + " return function() {\n" + + " cancel();\n" + + " };\n" + + " };\n" + + "\n" + + " context.clearInterval = function(cancel) {\n" + + " cancel();\n" + + " };\n" + + "\n" + + "})(this);"; private final static String CHUNKFILES_HOME = "/react4xp/"; private final static String SCRIPTS_HOME = "/react4xp/"; From 60e83b1d71d43914714aef4e8567eae745421c97 Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Sun, 20 Jan 2019 19:33:14 +0100 Subject: [PATCH 52/96] Improved naming and structure of chunk json files --- .../java/com/enonic/xp/react4xp/React4xp.java | 6 +++--- .../xp/react4xp/ScriptDependencyParser.java | 2 +- ...hunks.json.ejs => chunks.components.json.ejs} | 4 ++-- ...nChunks.xml.ejs => chunks.components.xml.ejs} | 4 ++-- ...{coreChunks.json.ejs => chunks.core.json.ejs} | 2 +- ...Chunks.json.ejs => chunks.externals.json.ejs} | 2 +- src/main/resources/lib/enonic/react4xp/index.es6 | 16 ++++++++-------- webpack.config.react4xp.externals.js | 4 ++-- webpack.config.react4xp.frontCore.js | 4 ++-- webpack.config.react4xp.js | 8 ++++---- 10 files changed, 26 insertions(+), 26 deletions(-) rename src/main/react4xp/{commonChunks.json.ejs => chunks.components.json.ejs} (88%) rename src/main/react4xp/{commonChunks.xml.ejs => chunks.components.xml.ejs} (93%) rename src/main/react4xp/{coreChunks.json.ejs => chunks.core.json.ejs} (87%) rename src/main/react4xp/{externalsChunks.json.ejs => chunks.externals.json.ejs} (88%) diff --git a/src/main/java/com/enonic/xp/react4xp/React4xp.java b/src/main/java/com/enonic/xp/react4xp/React4xp.java index ffae4125..d90ea351 100644 --- a/src/main/java/com/enonic/xp/react4xp/React4xp.java +++ b/src/main/java/com/enonic/xp/react4xp/React4xp.java @@ -115,9 +115,9 @@ public class React4xp { private final static String SCRIPTS_HOME = "/react4xp/"; private final static List CHUNK_FILES = Arrays.asList( - CHUNKFILES_HOME + "externalsChunks.json", - CHUNKFILES_HOME + "coreChunks.json", - CHUNKFILES_HOME + "commonChunks.json" + CHUNKFILES_HOME + "chunks.externals.json", + CHUNKFILES_HOME + "chunks.core.json", + CHUNKFILES_HOME + "chunks.components.json" ); diff --git a/src/main/java/com/enonic/xp/react4xp/ScriptDependencyParser.java b/src/main/java/com/enonic/xp/react4xp/ScriptDependencyParser.java index e8c7a21d..c383b2b7 100644 --- a/src/main/java/com/enonic/xp/react4xp/ScriptDependencyParser.java +++ b/src/main/java/com/enonic/xp/react4xp/ScriptDependencyParser.java @@ -10,7 +10,7 @@ import java.util.List; public class ScriptDependencyParser { - private final static String CHUNKFILE_MAINKEY = "commonChunks"; + private final static String CHUNKFILE_MAINKEY = "chunks"; private final static String CHUNKFILE_ENTRYKEY = "entry"; private final static List CHUNK_KEYS = Arrays.asList( "headBegin", diff --git a/src/main/react4xp/commonChunks.json.ejs b/src/main/react4xp/chunks.components.json.ejs similarity index 88% rename from src/main/react4xp/commonChunks.json.ejs rename to src/main/react4xp/chunks.components.json.ejs index 5e7c4a67..88530bdb 100644 --- a/src/main/react4xp/commonChunks.json.ejs +++ b/src/main/react4xp/chunks.components.json.ejs @@ -1,12 +1,12 @@ { - "commonChunks": { + "chunks": { "headEnd": [ {"name": "common", "entry": "<%= htmlWebpackPlugin.files.chunks.common.entry %>"}, {"name": "components", "entry": "<%= htmlWebpackPlugin.files.chunks.components.entry %>"} ], "bodyEnd": [] }, - "deprecatedCommonChunks": { + "deprecatedChunks": { "headEnd": [ {"name": "vendors", "entry": "<#%#= htmlWebpackPlugin.files.chunks.vendors.entry #%#>" } ] diff --git a/src/main/react4xp/commonChunks.xml.ejs b/src/main/react4xp/chunks.components.xml.ejs similarity index 93% rename from src/main/react4xp/commonChunks.xml.ejs rename to src/main/react4xp/chunks.components.xml.ejs index f8bb7aba..481cf36c 100644 --- a/src/main/react4xp/commonChunks.xml.ejs +++ b/src/main/react4xp/chunks.components.xml.ejs @@ -1,5 +1,5 @@ - + @@ -8,4 +8,4 @@ - + diff --git a/src/main/react4xp/coreChunks.json.ejs b/src/main/react4xp/chunks.core.json.ejs similarity index 87% rename from src/main/react4xp/coreChunks.json.ejs rename to src/main/react4xp/chunks.core.json.ejs index a5b20085..7882390e 100644 --- a/src/main/react4xp/coreChunks.json.ejs +++ b/src/main/react4xp/chunks.core.json.ejs @@ -1,5 +1,5 @@ { - "commonChunks": { + "chunks": { "headEnd": [ {"name": "Core", "entry": "<%= htmlWebpackPlugin.files.chunks.Core.entry %>" } ], diff --git a/src/main/react4xp/externalsChunks.json.ejs b/src/main/react4xp/chunks.externals.json.ejs similarity index 88% rename from src/main/react4xp/externalsChunks.json.ejs rename to src/main/react4xp/chunks.externals.json.ejs index 42f0658e..b7ab4b33 100644 --- a/src/main/react4xp/externalsChunks.json.ejs +++ b/src/main/react4xp/chunks.externals.json.ejs @@ -1,5 +1,5 @@ { - "commonChunks": { + "chunks": { "headEnd": [ {"name": "externals", "entry": "<%= htmlWebpackPlugin.files.chunks.externals.entry %>"} ], diff --git a/src/main/resources/lib/enonic/react4xp/index.es6 b/src/main/resources/lib/enonic/react4xp/index.es6 index 7edabd7a..92a0c602 100644 --- a/src/main/resources/lib/enonic/react4xp/index.es6 +++ b/src/main/resources/lib/enonic/react4xp/index.es6 @@ -19,16 +19,16 @@ const buildBasicPageContributions = (chunkHashFiles) => { const pageContributions = {}; chunkHashFiles.forEach(chunkFile => { - const commonChunks = JSON.parse( + const chunks = JSON.parse( utilLib.data.forceArray( ioLib.readLines( ioLib.getResource(chunkFile).getStream() ) - ).join("")).commonChunks; - //log.info("commonChunks: " + JSON.stringify(commonChunks, null, 2)); + ).join("")).chunks; + //log.info("chunks: " + JSON.stringify(chunks, null, 2)); - Object.keys(commonChunks).forEach(section => { - commonChunks[section].forEach(chunk => { + Object.keys(chunks).forEach(section => { + chunks[section].forEach(chunk => { if ((chunk.entry || "").startsWith(R4X + '/')) { chunk.entry = chunk.entry.substring(R4X.length + 1); } @@ -48,9 +48,9 @@ const buildBasicPageContributions = (chunkHashFiles) => { // Use the json files built by webpack to fetch the contenthashed filenames for commonChunks. // Then use those to build a set of basic page contributions common to all components: const PAGE_CONTRIBUTIONS = buildBasicPageContributions([ - `/${R4X}/externalsChunks.json`, - `/${R4X}/coreChunks.json`, - `/${R4X}/commonChunks.json` + `/${R4X}/chunks.externals.json`, + `/${R4X}/chunks.core.json`, + `/${R4X}/chunks.components.json` ]); diff --git a/webpack.config.react4xp.externals.js b/webpack.config.react4xp.externals.js index 98309434..54d17793 100644 --- a/webpack.config.react4xp.externals.js +++ b/webpack.config.react4xp.externals.js @@ -43,8 +43,8 @@ module.exports = { new HtmlWebpackPlugin({ inject: false, hash: false, - template: path.join(SRC_R4X, 'externalsChunks.json.ejs'), - filename: path.join(BUILD_R4X, 'externalsChunks.json') + template: path.join(SRC_R4X, 'chunks.externals.json.ejs'), + filename: path.join(BUILD_R4X, 'chunks.externals.json') }), ], }; diff --git a/webpack.config.react4xp.frontCore.js b/webpack.config.react4xp.frontCore.js index 413fb9b5..95c9dbd0 100644 --- a/webpack.config.react4xp.frontCore.js +++ b/webpack.config.react4xp.frontCore.js @@ -52,8 +52,8 @@ module.exports = { new HtmlWebpackPlugin({ inject: false, hash: false, - template: path.join(SRC_R4X, 'coreChunks.json.ejs'), - filename: path.join(BUILD_R4X, 'coreChunks.json') + template: path.join(SRC_R4X, 'chunks.core.json.ejs'), + filename: path.join(BUILD_R4X, 'chunks.core.json') }), ], diff --git a/webpack.config.react4xp.js b/webpack.config.react4xp.js index a1e35251..009ee3e2 100644 --- a/webpack.config.react4xp.js +++ b/webpack.config.react4xp.js @@ -66,15 +66,15 @@ module.exports = { /*new HtmlWebpackPlugin({ inject: false, hash: false, - template: path.join(SRC_R4X, 'commonChunks.xml.ejs'), - filename: path.join(BUILD_R4X, 'commonChunks.xml') + template: path.join(SRC_R4X, 'chunks.components.xml.ejs'), + filename: path.join(BUILD_R4X, 'chunks.components.xml') }), */ new HtmlWebpackPlugin({ inject: false, hash: false, - template: path.join(SRC_R4X, 'commonChunks.json.ejs'), - filename: path.join(BUILD_R4X, 'commonChunks.json') + template: path.join(SRC_R4X, 'chunks.components.json.ejs'), + filename: path.join(BUILD_R4X, 'chunks.components.json') }), ], From bbee7e03cc955ac924fe09597e65f508acbd4798 Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Sun, 20 Jan 2019 21:17:04 +0100 Subject: [PATCH 53/96] Nashorn polyfilling: transpiling nashorn polyfills to file instead of making hardcopied string scripts. Runs without complaint, but does it work? --- config.constants.js | 3 +- package-lock.json | 2744 +++++++++-------- package.json | 1 + ...Parser.java => ChunkDependencyParser.java} | 2 +- .../com/enonic/xp/react4xp/Polyfills.java | 111 + .../java/com/enonic/xp/react4xp/React4xp.java | 120 +- src/main/react4xp/_nashornPolyfills_.es6 | 101 + .../react4xp/chunks.nashornPolyfills.json.ejs | 8 + webpack.config.react4xp.externals.js | 14 +- 9 files changed, 1622 insertions(+), 1482 deletions(-) rename src/main/java/com/enonic/xp/react4xp/{ScriptDependencyParser.java => ChunkDependencyParser.java} (98%) create mode 100644 src/main/java/com/enonic/xp/react4xp/Polyfills.java create mode 100644 src/main/react4xp/_nashornPolyfills_.es6 create mode 100644 src/main/react4xp/chunks.nashornPolyfills.json.ejs diff --git a/config.constants.js b/config.constants.js index 05dae8d6..8c832294 100644 --- a/config.constants.js +++ b/config.constants.js @@ -17,7 +17,6 @@ const SRC_SITE = path.join(SRC_MAIN, "resources", SITE); const R4X_ENTRIES = path.join(R4X_HOME, R4X_SUB_ENTRIES); const SRC_R4X_ENTRIES = path.join(SRC_MAIN, R4X_ENTRIES); -const BUILD_ENV = /*'production'; /*/ 'development'; //*/ const LIBRARY_NAME = 'React4xp'; // Shared constants that for different reasons must be available in a mor general format than JS: @@ -43,6 +42,8 @@ const JSON_CONSTANTS = JSON.parse(fs.readFileSync('config.constants.json', 'utf8 */ const EXTERNALS = JSON_CONSTANTS.EXTERNALS; +const BUILD_ENV = 'production'; /*/ 'development'; //*/ + module.exports = { SITE, SRC_MAIN, SRC_R4X, SRC_SITE, SRC_R4X_ENTRIES, diff --git a/package-lock.json b/package-lock.json index af2aa317..6ace8275 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.2.0.tgz", "integrity": "sha512-oouEibCbHMVdZSDlJBO6bZmID/zA/G/Qx3H1d3rSNPTD+L8UNKvCat7aKWSJ74zYbm5zWGh0GQN0hKj8zYFTCg==", "requires": { - "regenerator-runtime": "^0.12.0" + "regenerator-runtime": "0.12.1" }, "dependencies": { "regenerator-runtime": { @@ -93,7 +93,7 @@ "integrity": "sha512-Mmqx/cS68K1tSrvRLtaV/Lp3NZWzXtOHUW2IvDvl2sihAwJh4ACE0eL6A8FvMyDG9abes3saB6dMimLOs+HMoQ==", "dev": true, "requires": { - "@xtuc/ieee754": "^1.2.0" + "@xtuc/ieee754": "1.2.0" } }, "@webassemblyjs/leb128": { @@ -215,7 +215,7 @@ "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==", "dev": true, "requires": { - "acorn": "^5.0.0" + "acorn": "5.7.3" } }, "ajv": { @@ -224,10 +224,10 @@ "integrity": "sha512-hOs7GfvI6tUI1LfZddH82ky6mOMyTuY0mk7kE2pWpmhhUSkumzaTO5vbVwij39MdwPQWCV4Zv57Eo06NtL/GVA==", "dev": true, "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.1" + "fast-deep-equal": "2.0.1", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.4.1", + "uri-js": "4.2.2" } }, "ajv-errors": { @@ -264,8 +264,8 @@ "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=", "dev": true, "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" + "micromatch": "3.1.10", + "normalize-path": "2.1.1" } }, "aproba": { @@ -280,7 +280,7 @@ "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=", "dev": true, "requires": { - "sprintf-js": "~1.0.2" + "sprintf-js": "1.0.3" } }, "arr-diff": { @@ -318,9 +318,9 @@ "integrity": "sha1-ucK/WAXx5kqt7tbfOiv6+1pz9aA=", "dev": true, "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" + "bn.js": "4.11.8", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" } }, "assert": { @@ -373,12 +373,12 @@ "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", "dev": true, "requires": { - "browserslist": "^1.7.6", - "caniuse-db": "^1.0.30000634", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "postcss": "^5.2.16", - "postcss-value-parser": "^3.2.3" + "browserslist": "1.7.7", + "caniuse-db": "1.0.30000864", + "normalize-range": "0.1.2", + "num2fraction": "1.2.2", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" } }, "babel-cli": { @@ -387,21 +387,21 @@ "integrity": "sha1-UCq1SHTX24itALiHoGODzgPQAvE=", "dev": true, "requires": { - "babel-core": "^6.26.0", - "babel-polyfill": "^6.26.0", - "babel-register": "^6.26.0", - "babel-runtime": "^6.26.0", - "chokidar": "^1.6.1", - "commander": "^2.11.0", - "convert-source-map": "^1.5.0", - "fs-readdir-recursive": "^1.0.0", - "glob": "^7.1.2", - "lodash": "^4.17.4", - "output-file-sync": "^1.1.2", - "path-is-absolute": "^1.0.1", - "slash": "^1.0.0", - "source-map": "^0.5.6", - "v8flags": "^2.1.1" + "babel-core": "6.26.3", + "babel-polyfill": "6.26.0", + "babel-register": "6.26.0", + "babel-runtime": "6.26.0", + "chokidar": "1.7.0", + "commander": "2.16.0", + "convert-source-map": "1.5.1", + "fs-readdir-recursive": "1.1.0", + "glob": "7.1.2", + "lodash": "4.17.10", + "output-file-sync": "1.1.2", + "path-is-absolute": "1.0.1", + "slash": "1.0.0", + "source-map": "0.5.7", + "v8flags": "2.1.1" }, "dependencies": { "anymatch": { @@ -411,8 +411,8 @@ "dev": true, "optional": true, "requires": { - "micromatch": "^2.1.5", - "normalize-path": "^2.0.0" + "micromatch": "2.3.11", + "normalize-path": "2.1.1" } }, "arr-diff": { @@ -422,7 +422,7 @@ "dev": true, "optional": true, "requires": { - "arr-flatten": "^1.0.1" + "arr-flatten": "1.1.0" } }, "array-unique": { @@ -439,9 +439,9 @@ "dev": true, "optional": true, "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" } }, "chokidar": { @@ -451,15 +451,15 @@ "dev": true, "optional": true, "requires": { - "anymatch": "^1.3.0", - "async-each": "^1.0.0", - "fsevents": "^1.0.0", - "glob-parent": "^2.0.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^2.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0" + "anymatch": "1.3.2", + "async-each": "1.0.1", + "fsevents": "1.2.4", + "glob-parent": "2.0.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "2.0.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.1.0" } }, "expand-brackets": { @@ -469,7 +469,7 @@ "dev": true, "optional": true, "requires": { - "is-posix-bracket": "^0.1.0" + "is-posix-bracket": "0.1.1" } }, "extglob": { @@ -479,7 +479,7 @@ "dev": true, "optional": true, "requires": { - "is-extglob": "^1.0.0" + "is-extglob": "1.0.0" } }, "glob-parent": { @@ -489,7 +489,7 @@ "dev": true, "optional": true, "requires": { - "is-glob": "^2.0.0" + "is-glob": "2.0.1" } }, "is-extglob": { @@ -504,7 +504,7 @@ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "is-extglob": "^1.0.0" + "is-extglob": "1.0.0" } }, "micromatch": { @@ -514,19 +514,19 @@ "dev": true, "optional": true, "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.4" } } } @@ -537,9 +537,9 @@ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", "dev": true, "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.2" } }, "babel-core": { @@ -548,25 +548,25 @@ "integrity": "sha1-suLwnjQtDwyI4vAuBneUEl51wgc=", "dev": true, "requires": { - "babel-code-frame": "^6.26.0", - "babel-generator": "^6.26.0", - "babel-helpers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-register": "^6.26.0", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "convert-source-map": "^1.5.1", - "debug": "^2.6.9", - "json5": "^0.5.1", - "lodash": "^4.17.4", - "minimatch": "^3.0.4", - "path-is-absolute": "^1.0.1", - "private": "^0.1.8", - "slash": "^1.0.0", - "source-map": "^0.5.7" + "babel-code-frame": "6.26.0", + "babel-generator": "6.26.1", + "babel-helpers": "6.24.1", + "babel-messages": "6.23.0", + "babel-register": "6.26.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "convert-source-map": "1.5.1", + "debug": "2.6.9", + "json5": "0.5.1", + "lodash": "4.17.10", + "minimatch": "3.0.4", + "path-is-absolute": "1.0.1", + "private": "0.1.8", + "slash": "1.0.0", + "source-map": "0.5.7" } }, "babel-generator": { @@ -575,14 +575,14 @@ "integrity": "sha1-GERAjTuPDTWkBOp6wYDwh6YBvZA=", "dev": true, "requires": { - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "detect-indent": "^4.0.0", - "jsesc": "^1.3.0", - "lodash": "^4.17.4", - "source-map": "^0.5.7", - "trim-right": "^1.0.1" + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "detect-indent": "4.0.0", + "jsesc": "1.3.0", + "lodash": "4.17.10", + "source-map": "0.5.7", + "trim-right": "1.0.1" } }, "babel-helper-bindify-decorators": { @@ -591,9 +591,9 @@ "integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" } }, "babel-helper-builder-binary-assignment-operator-visitor": { @@ -602,9 +602,9 @@ "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", "dev": true, "requires": { - "babel-helper-explode-assignable-expression": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "babel-helper-explode-assignable-expression": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" } }, "babel-helper-builder-react-jsx": { @@ -613,9 +613,9 @@ "integrity": "sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA=", "dev": true, "requires": { - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "esutils": "^2.0.2" + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "esutils": "2.0.2" } }, "babel-helper-call-delegate": { @@ -624,10 +624,10 @@ "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", "dev": true, "requires": { - "babel-helper-hoist-variables": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "babel-helper-hoist-variables": "6.24.1", + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" } }, "babel-helper-define-map": { @@ -636,10 +636,10 @@ "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", "dev": true, "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.10" } }, "babel-helper-explode-assignable-expression": { @@ -648,9 +648,9 @@ "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" } }, "babel-helper-explode-class": { @@ -659,10 +659,10 @@ "integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=", "dev": true, "requires": { - "babel-helper-bindify-decorators": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "babel-helper-bindify-decorators": "6.24.1", + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" } }, "babel-helper-function-name": { @@ -671,11 +671,11 @@ "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", "dev": true, "requires": { - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "babel-helper-get-function-arity": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" } }, "babel-helper-get-function-arity": { @@ -684,8 +684,8 @@ "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" } }, "babel-helper-hoist-variables": { @@ -694,8 +694,8 @@ "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" } }, "babel-helper-optimise-call-expression": { @@ -704,8 +704,8 @@ "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" } }, "babel-helper-regex": { @@ -714,9 +714,9 @@ "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", "dev": true, "requires": { - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.10" } }, "babel-helper-remap-async-to-generator": { @@ -725,11 +725,11 @@ "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", "dev": true, "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" } }, "babel-helper-replace-supers": { @@ -738,12 +738,12 @@ "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", "dev": true, "requires": { - "babel-helper-optimise-call-expression": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "babel-helper-optimise-call-expression": "6.24.1", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" } }, "babel-helpers": { @@ -752,8 +752,8 @@ "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" } }, "babel-loader": { @@ -762,9 +762,9 @@ "integrity": "sha512-/hbyEvPzBJuGpk9o80R0ZyTej6heEOr59GoEUtn8qFKbnx4cJm9FWES6J/iv644sYgrtVw9JJQkjaLW/bqb5gw==", "dev": true, "requires": { - "find-cache-dir": "^1.0.0", - "loader-utils": "^1.0.2", - "mkdirp": "^0.5.1" + "find-cache-dir": "1.0.0", + "loader-utils": "1.1.0", + "mkdirp": "0.5.1" } }, "babel-messages": { @@ -773,7 +773,7 @@ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "babel-runtime": "6.26.0" } }, "babel-plugin-check-es2015-constants": { @@ -782,7 +782,7 @@ "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "babel-runtime": "6.26.0" } }, "babel-plugin-syntax-async-functions": { @@ -875,9 +875,9 @@ "integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=", "dev": true, "requires": { - "babel-helper-remap-async-to-generator": "^6.24.1", - "babel-plugin-syntax-async-generators": "^6.5.0", - "babel-runtime": "^6.22.0" + "babel-helper-remap-async-to-generator": "6.24.1", + "babel-plugin-syntax-async-generators": "6.13.0", + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-async-to-generator": { @@ -886,9 +886,9 @@ "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", "dev": true, "requires": { - "babel-helper-remap-async-to-generator": "^6.24.1", - "babel-plugin-syntax-async-functions": "^6.8.0", - "babel-runtime": "^6.22.0" + "babel-helper-remap-async-to-generator": "6.24.1", + "babel-plugin-syntax-async-functions": "6.13.0", + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-class-constructor-call": { @@ -897,9 +897,9 @@ "integrity": "sha1-gNwoVQWsBn3LjWxl4vbxGrd2Xvk=", "dev": true, "requires": { - "babel-plugin-syntax-class-constructor-call": "^6.18.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" + "babel-plugin-syntax-class-constructor-call": "6.18.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" } }, "babel-plugin-transform-class-properties": { @@ -908,10 +908,10 @@ "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=", "dev": true, "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-plugin-syntax-class-properties": "^6.8.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" + "babel-helper-function-name": "6.24.1", + "babel-plugin-syntax-class-properties": "6.13.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" } }, "babel-plugin-transform-decorators": { @@ -920,11 +920,11 @@ "integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=", "dev": true, "requires": { - "babel-helper-explode-class": "^6.24.1", - "babel-plugin-syntax-decorators": "^6.13.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-types": "^6.24.1" + "babel-helper-explode-class": "6.24.1", + "babel-plugin-syntax-decorators": "6.13.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-types": "6.26.0" } }, "babel-plugin-transform-do-expressions": { @@ -933,8 +933,8 @@ "integrity": "sha1-KMyvkoEtlJws0SgfaQyP3EaK6bs=", "dev": true, "requires": { - "babel-plugin-syntax-do-expressions": "^6.8.0", - "babel-runtime": "^6.22.0" + "babel-plugin-syntax-do-expressions": "6.13.0", + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-es2015-arrow-functions": { @@ -943,7 +943,7 @@ "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-es2015-block-scoped-functions": { @@ -952,7 +952,7 @@ "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-es2015-block-scoping": { @@ -961,11 +961,11 @@ "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", "dev": true, "requires": { - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.10" } }, "babel-plugin-transform-es2015-classes": { @@ -974,15 +974,15 @@ "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", "dev": true, "requires": { - "babel-helper-define-map": "^6.24.1", - "babel-helper-function-name": "^6.24.1", - "babel-helper-optimise-call-expression": "^6.24.1", - "babel-helper-replace-supers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "babel-helper-define-map": "6.26.0", + "babel-helper-function-name": "6.24.1", + "babel-helper-optimise-call-expression": "6.24.1", + "babel-helper-replace-supers": "6.24.1", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" } }, "babel-plugin-transform-es2015-computed-properties": { @@ -991,8 +991,8 @@ "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" } }, "babel-plugin-transform-es2015-destructuring": { @@ -1001,7 +1001,7 @@ "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-es2015-duplicate-keys": { @@ -1010,8 +1010,8 @@ "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" } }, "babel-plugin-transform-es2015-for-of": { @@ -1020,7 +1020,7 @@ "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-es2015-function-name": { @@ -1029,9 +1029,9 @@ "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", "dev": true, "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" } }, "babel-plugin-transform-es2015-literals": { @@ -1040,7 +1040,7 @@ "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-es2015-modules-amd": { @@ -1049,9 +1049,9 @@ "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", "dev": true, "requires": { - "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" + "babel-plugin-transform-es2015-modules-commonjs": "6.26.2", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" } }, "babel-plugin-transform-es2015-modules-commonjs": { @@ -1060,10 +1060,10 @@ "integrity": "sha1-WKeThjqefKhwvcWogRF/+sJ9tvM=", "dev": true, "requires": { - "babel-plugin-transform-strict-mode": "^6.24.1", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-types": "^6.26.0" + "babel-plugin-transform-strict-mode": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-types": "6.26.0" } }, "babel-plugin-transform-es2015-modules-systemjs": { @@ -1072,9 +1072,9 @@ "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", "dev": true, "requires": { - "babel-helper-hoist-variables": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" + "babel-helper-hoist-variables": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" } }, "babel-plugin-transform-es2015-modules-umd": { @@ -1083,9 +1083,9 @@ "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", "dev": true, "requires": { - "babel-plugin-transform-es2015-modules-amd": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" } }, "babel-plugin-transform-es2015-object-super": { @@ -1094,8 +1094,8 @@ "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", "dev": true, "requires": { - "babel-helper-replace-supers": "^6.24.1", - "babel-runtime": "^6.22.0" + "babel-helper-replace-supers": "6.24.1", + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-es2015-parameters": { @@ -1104,12 +1104,12 @@ "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", "dev": true, "requires": { - "babel-helper-call-delegate": "^6.24.1", - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "babel-helper-call-delegate": "6.24.1", + "babel-helper-get-function-arity": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" } }, "babel-plugin-transform-es2015-shorthand-properties": { @@ -1118,8 +1118,8 @@ "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" } }, "babel-plugin-transform-es2015-spread": { @@ -1128,7 +1128,7 @@ "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-es2015-sticky-regex": { @@ -1137,9 +1137,9 @@ "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", "dev": true, "requires": { - "babel-helper-regex": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "babel-helper-regex": "6.26.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" } }, "babel-plugin-transform-es2015-template-literals": { @@ -1148,7 +1148,7 @@ "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-es2015-typeof-symbol": { @@ -1157,7 +1157,7 @@ "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-es2015-unicode-regex": { @@ -1166,9 +1166,9 @@ "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", "dev": true, "requires": { - "babel-helper-regex": "^6.24.1", - "babel-runtime": "^6.22.0", - "regexpu-core": "^2.0.0" + "babel-helper-regex": "6.26.0", + "babel-runtime": "6.26.0", + "regexpu-core": "2.0.0" } }, "babel-plugin-transform-exponentiation-operator": { @@ -1177,9 +1177,9 @@ "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", "dev": true, "requires": { - "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1", - "babel-plugin-syntax-exponentiation-operator": "^6.8.0", - "babel-runtime": "^6.22.0" + "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1", + "babel-plugin-syntax-exponentiation-operator": "6.13.0", + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-export-extensions": { @@ -1188,8 +1188,8 @@ "integrity": "sha1-U3OLR+deghhYnuqUbLvTkQm75lM=", "dev": true, "requires": { - "babel-plugin-syntax-export-extensions": "^6.8.0", - "babel-runtime": "^6.22.0" + "babel-plugin-syntax-export-extensions": "6.13.0", + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-flow-strip-types": { @@ -1198,8 +1198,8 @@ "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=", "dev": true, "requires": { - "babel-plugin-syntax-flow": "^6.18.0", - "babel-runtime": "^6.22.0" + "babel-plugin-syntax-flow": "6.18.0", + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-function-bind": { @@ -1208,8 +1208,8 @@ "integrity": "sha1-xvuOlqwpajELjPjqQBRiQH3fapc=", "dev": true, "requires": { - "babel-plugin-syntax-function-bind": "^6.8.0", - "babel-runtime": "^6.22.0" + "babel-plugin-syntax-function-bind": "6.13.0", + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-object-rest-spread": { @@ -1218,8 +1218,8 @@ "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", "dev": true, "requires": { - "babel-plugin-syntax-object-rest-spread": "^6.8.0", - "babel-runtime": "^6.26.0" + "babel-plugin-syntax-object-rest-spread": "6.13.0", + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-react-display-name": { @@ -1228,7 +1228,7 @@ "integrity": "sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE=", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-react-jsx": { @@ -1237,9 +1237,9 @@ "integrity": "sha1-hAoCjn30YN/DotKfDA2R9jduZqM=", "dev": true, "requires": { - "babel-helper-builder-react-jsx": "^6.24.1", - "babel-plugin-syntax-jsx": "^6.8.0", - "babel-runtime": "^6.22.0" + "babel-helper-builder-react-jsx": "6.26.0", + "babel-plugin-syntax-jsx": "6.18.0", + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-react-jsx-self": { @@ -1248,8 +1248,8 @@ "integrity": "sha1-322AqdomEqEh5t3XVYvL7PBuY24=", "dev": true, "requires": { - "babel-plugin-syntax-jsx": "^6.8.0", - "babel-runtime": "^6.22.0" + "babel-plugin-syntax-jsx": "6.18.0", + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-react-jsx-source": { @@ -1258,8 +1258,8 @@ "integrity": "sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY=", "dev": true, "requires": { - "babel-plugin-syntax-jsx": "^6.8.0", - "babel-runtime": "^6.22.0" + "babel-plugin-syntax-jsx": "6.18.0", + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-regenerator": { @@ -1268,7 +1268,7 @@ "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", "dev": true, "requires": { - "regenerator-transform": "^0.10.0" + "regenerator-transform": "0.10.1" } }, "babel-plugin-transform-strict-mode": { @@ -1277,8 +1277,8 @@ "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" } }, "babel-polyfill": { @@ -1287,9 +1287,9 @@ "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", "dev": true, "requires": { - "babel-runtime": "^6.26.0", - "core-js": "^2.5.0", - "regenerator-runtime": "^0.10.5" + "babel-runtime": "6.26.0", + "core-js": "2.5.7", + "regenerator-runtime": "0.10.5" }, "dependencies": { "core-js": { @@ -1312,30 +1312,30 @@ "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=", "dev": true, "requires": { - "babel-plugin-check-es2015-constants": "^6.22.0", - "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", - "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", - "babel-plugin-transform-es2015-block-scoping": "^6.24.1", - "babel-plugin-transform-es2015-classes": "^6.24.1", - "babel-plugin-transform-es2015-computed-properties": "^6.24.1", - "babel-plugin-transform-es2015-destructuring": "^6.22.0", - "babel-plugin-transform-es2015-duplicate-keys": "^6.24.1", - "babel-plugin-transform-es2015-for-of": "^6.22.0", - "babel-plugin-transform-es2015-function-name": "^6.24.1", - "babel-plugin-transform-es2015-literals": "^6.22.0", - "babel-plugin-transform-es2015-modules-amd": "^6.24.1", - "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", - "babel-plugin-transform-es2015-modules-systemjs": "^6.24.1", - "babel-plugin-transform-es2015-modules-umd": "^6.24.1", - "babel-plugin-transform-es2015-object-super": "^6.24.1", - "babel-plugin-transform-es2015-parameters": "^6.24.1", - "babel-plugin-transform-es2015-shorthand-properties": "^6.24.1", - "babel-plugin-transform-es2015-spread": "^6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "^6.24.1", - "babel-plugin-transform-es2015-template-literals": "^6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "^6.22.0", - "babel-plugin-transform-es2015-unicode-regex": "^6.24.1", - "babel-plugin-transform-regenerator": "^6.24.1" + "babel-plugin-check-es2015-constants": "6.22.0", + "babel-plugin-transform-es2015-arrow-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoping": "6.26.0", + "babel-plugin-transform-es2015-classes": "6.24.1", + "babel-plugin-transform-es2015-computed-properties": "6.24.1", + "babel-plugin-transform-es2015-destructuring": "6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", + "babel-plugin-transform-es2015-for-of": "6.23.0", + "babel-plugin-transform-es2015-function-name": "6.24.1", + "babel-plugin-transform-es2015-literals": "6.22.0", + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-plugin-transform-es2015-modules-commonjs": "6.26.2", + "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", + "babel-plugin-transform-es2015-modules-umd": "6.24.1", + "babel-plugin-transform-es2015-object-super": "6.24.1", + "babel-plugin-transform-es2015-parameters": "6.24.1", + "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", + "babel-plugin-transform-es2015-spread": "6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "6.24.1", + "babel-plugin-transform-es2015-template-literals": "6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", + "babel-plugin-transform-es2015-unicode-regex": "6.24.1", + "babel-plugin-transform-regenerator": "6.26.0" } }, "babel-preset-flow": { @@ -1344,7 +1344,7 @@ "integrity": "sha1-5xIYiHCFrpoktb5Baa/7WZgWxJ0=", "dev": true, "requires": { - "babel-plugin-transform-flow-strip-types": "^6.22.0" + "babel-plugin-transform-flow-strip-types": "6.22.0" } }, "babel-preset-react": { @@ -1353,12 +1353,12 @@ "integrity": "sha1-umnfrqRfw+xjm2pOzqbhdwLJE4A=", "dev": true, "requires": { - "babel-plugin-syntax-jsx": "^6.3.13", - "babel-plugin-transform-react-display-name": "^6.23.0", - "babel-plugin-transform-react-jsx": "^6.24.1", - "babel-plugin-transform-react-jsx-self": "^6.22.0", - "babel-plugin-transform-react-jsx-source": "^6.22.0", - "babel-preset-flow": "^6.23.0" + "babel-plugin-syntax-jsx": "6.18.0", + "babel-plugin-transform-react-display-name": "6.25.0", + "babel-plugin-transform-react-jsx": "6.24.1", + "babel-plugin-transform-react-jsx-self": "6.22.0", + "babel-plugin-transform-react-jsx-source": "6.22.0", + "babel-preset-flow": "6.23.0" } }, "babel-preset-stage-0": { @@ -1367,9 +1367,9 @@ "integrity": "sha1-VkLRUEL5E4TX5a+LyIsduVsDnmo=", "dev": true, "requires": { - "babel-plugin-transform-do-expressions": "^6.22.0", - "babel-plugin-transform-function-bind": "^6.22.0", - "babel-preset-stage-1": "^6.24.1" + "babel-plugin-transform-do-expressions": "6.22.0", + "babel-plugin-transform-function-bind": "6.22.0", + "babel-preset-stage-1": "6.24.1" } }, "babel-preset-stage-1": { @@ -1378,9 +1378,9 @@ "integrity": "sha1-dpLNfc1oSZB+auSgqFWJz7niv7A=", "dev": true, "requires": { - "babel-plugin-transform-class-constructor-call": "^6.24.1", - "babel-plugin-transform-export-extensions": "^6.22.0", - "babel-preset-stage-2": "^6.24.1" + "babel-plugin-transform-class-constructor-call": "6.24.1", + "babel-plugin-transform-export-extensions": "6.22.0", + "babel-preset-stage-2": "6.24.1" } }, "babel-preset-stage-2": { @@ -1389,10 +1389,10 @@ "integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=", "dev": true, "requires": { - "babel-plugin-syntax-dynamic-import": "^6.18.0", - "babel-plugin-transform-class-properties": "^6.24.1", - "babel-plugin-transform-decorators": "^6.24.1", - "babel-preset-stage-3": "^6.24.1" + "babel-plugin-syntax-dynamic-import": "6.18.0", + "babel-plugin-transform-class-properties": "6.24.1", + "babel-plugin-transform-decorators": "6.24.1", + "babel-preset-stage-3": "6.24.1" } }, "babel-preset-stage-3": { @@ -1401,11 +1401,11 @@ "integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=", "dev": true, "requires": { - "babel-plugin-syntax-trailing-function-commas": "^6.22.0", - "babel-plugin-transform-async-generator-functions": "^6.24.1", - "babel-plugin-transform-async-to-generator": "^6.24.1", - "babel-plugin-transform-exponentiation-operator": "^6.24.1", - "babel-plugin-transform-object-rest-spread": "^6.22.0" + "babel-plugin-syntax-trailing-function-commas": "6.22.0", + "babel-plugin-transform-async-generator-functions": "6.24.1", + "babel-plugin-transform-async-to-generator": "6.24.1", + "babel-plugin-transform-exponentiation-operator": "6.24.1", + "babel-plugin-transform-object-rest-spread": "6.26.0" } }, "babel-register": { @@ -1414,13 +1414,13 @@ "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", "dev": true, "requires": { - "babel-core": "^6.26.0", - "babel-runtime": "^6.26.0", - "core-js": "^2.5.0", - "home-or-tmp": "^2.0.0", - "lodash": "^4.17.4", - "mkdirp": "^0.5.1", - "source-map-support": "^0.4.15" + "babel-core": "6.26.3", + "babel-runtime": "6.26.0", + "core-js": "2.5.7", + "home-or-tmp": "2.0.0", + "lodash": "4.17.10", + "mkdirp": "0.5.1", + "source-map-support": "0.4.18" }, "dependencies": { "core-js": { @@ -1437,8 +1437,8 @@ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "dev": true, "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" + "core-js": "2.5.7", + "regenerator-runtime": "0.11.1" }, "dependencies": { "core-js": { @@ -1455,11 +1455,11 @@ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", "dev": true, "requires": { - "babel-runtime": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "lodash": "^4.17.4" + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "lodash": "4.17.10" } }, "babel-traverse": { @@ -1468,15 +1468,15 @@ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", "dev": true, "requires": { - "babel-code-frame": "^6.26.0", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "debug": "^2.6.8", - "globals": "^9.18.0", - "invariant": "^2.2.2", - "lodash": "^4.17.4" + "babel-code-frame": "6.26.0", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "debug": "2.6.9", + "globals": "9.18.0", + "invariant": "2.2.4", + "lodash": "4.17.10" } }, "babel-types": { @@ -1485,10 +1485,10 @@ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", "dev": true, "requires": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" + "babel-runtime": "6.26.0", + "esutils": "2.0.2", + "lodash": "4.17.10", + "to-fast-properties": "1.0.3" } }, "babylon": { @@ -1508,13 +1508,13 @@ "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=", "dev": true, "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" + "cache-base": "1.0.1", + "class-utils": "0.3.6", + "component-emitter": "1.2.1", + "define-property": "1.0.0", + "isobject": "3.0.1", + "mixin-deep": "1.3.1", + "pascalcase": "0.1.1" }, "dependencies": { "define-property": { @@ -1523,7 +1523,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "^1.0.0" + "is-descriptor": "1.0.2" } }, "is-accessor-descriptor": { @@ -1532,7 +1532,7 @@ "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-data-descriptor": { @@ -1541,7 +1541,7 @@ "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-descriptor": { @@ -1550,9 +1550,9 @@ "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", "dev": true, "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" } }, "kind-of": { @@ -1604,7 +1604,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=", "requires": { - "balanced-match": "^1.0.0", + "balanced-match": "1.0.0", "concat-map": "0.0.1" } }, @@ -1614,16 +1614,16 @@ "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", "dev": true, "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "repeat-element": "1.1.2", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" }, "dependencies": { "extend-shallow": { @@ -1632,7 +1632,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } } } @@ -1663,9 +1663,9 @@ "integrity": "sha1-jWR0wbhwv9q807z8wZNKEOlPFfA=", "dev": true, "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" + "browserify-aes": "1.2.0", + "browserify-des": "1.0.2", + "evp_bytestokey": "1.0.3" } }, "browserify-des": { @@ -1674,10 +1674,10 @@ "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "cipher-base": "1.0.4", + "des.js": "1.0.0", + "inherits": "2.0.3", + "safe-buffer": "5.1.2" } }, "browserify-rsa": { @@ -1696,13 +1696,13 @@ "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", "dev": true, "requires": { - "bn.js": "^4.1.1", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.2", - "elliptic": "^6.0.0", - "inherits": "^2.0.1", - "parse-asn1": "^5.0.0" + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "elliptic": "6.4.1", + "inherits": "2.0.3", + "parse-asn1": "5.1.1" } }, "browserify-zlib": { @@ -1711,7 +1711,7 @@ "integrity": "sha1-KGlFnZqjviRf6P4sofRuLn9U1z8=", "dev": true, "requires": { - "pako": "~1.0.5" + "pako": "1.0.7" } }, "browserslist": { @@ -1720,8 +1720,8 @@ "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", "dev": true, "requires": { - "caniuse-db": "^1.0.30000639", - "electron-to-chromium": "^1.2.7" + "caniuse-db": "1.0.30000864", + "electron-to-chromium": "1.3.51" } }, "buffer": { @@ -1759,20 +1759,20 @@ "integrity": "sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg==", "dev": true, "requires": { - "bluebird": "^3.5.3", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.3", - "graceful-fs": "^4.1.15", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.2", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" + "bluebird": "3.5.3", + "chownr": "1.1.1", + "figgy-pudding": "3.5.1", + "glob": "7.1.3", + "graceful-fs": "4.1.15", + "lru-cache": "5.1.1", + "mississippi": "3.0.0", + "mkdirp": "0.5.1", + "move-concurrently": "1.0.1", + "promise-inflight": "1.0.1", + "rimraf": "2.6.3", + "ssri": "6.0.1", + "unique-filename": "1.1.1", + "y18n": "4.0.0" }, "dependencies": { "glob": { @@ -1781,12 +1781,12 @@ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" } }, "graceful-fs": { @@ -1803,15 +1803,15 @@ "integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=", "dev": true, "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" + "collection-visit": "1.0.0", + "component-emitter": "1.2.1", + "get-value": "2.0.6", + "has-value": "1.0.0", + "isobject": "3.0.1", + "set-value": "2.0.0", + "to-object-path": "0.3.0", + "union-value": "1.0.0", + "unset-value": "1.0.0" } }, "camel-case": { @@ -1820,8 +1820,8 @@ "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", "dev": true, "requires": { - "no-case": "^2.2.0", - "upper-case": "^1.1.1" + "no-case": "2.3.2", + "upper-case": "1.1.3" } }, "camelcase": { @@ -1836,10 +1836,10 @@ "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=", "dev": true, "requires": { - "browserslist": "^1.3.6", - "caniuse-db": "^1.0.30000529", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" + "browserslist": "1.7.7", + "caniuse-db": "1.0.30000864", + "lodash.memoize": "4.1.2", + "lodash.uniq": "4.5.0" } }, "caniuse-db": { @@ -1853,11 +1853,11 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" }, "dependencies": { "supports-color": { @@ -1873,19 +1873,19 @@ "integrity": "sha1-NW/04rDo5D4yLRijckYLvPOszSY=", "dev": true, "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.0", - "braces": "^2.3.0", - "fsevents": "^1.2.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "lodash.debounce": "^4.0.8", - "normalize-path": "^2.1.1", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0", - "upath": "^1.0.5" + "anymatch": "2.0.0", + "async-each": "1.0.1", + "braces": "2.3.2", + "fsevents": "1.2.4", + "glob-parent": "3.1.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "4.0.0", + "lodash.debounce": "4.0.8", + "normalize-path": "2.1.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.1.0", + "upath": "1.1.0" } }, "chownr": { @@ -1900,7 +1900,7 @@ "integrity": "sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==", "dev": true, "requires": { - "tslib": "^1.9.0" + "tslib": "1.9.3" } }, "cipher-base": { @@ -1909,8 +1909,8 @@ "integrity": "sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94=", "dev": true, "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "2.0.3", + "safe-buffer": "5.1.2" } }, "clap": { @@ -1919,7 +1919,7 @@ "integrity": "sha1-TzZ0WzIAhJJVf0ZBLWbVDLmbzlE=", "dev": true, "requires": { - "chalk": "^1.1.3" + "chalk": "1.1.3" } }, "class-utils": { @@ -1928,10 +1928,10 @@ "integrity": "sha1-+TNprouafOAv1B+q0MqDAzGQxGM=", "dev": true, "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" + "arr-union": "3.1.0", + "define-property": "0.2.5", + "isobject": "3.0.1", + "static-extend": "0.1.2" }, "dependencies": { "define-property": { @@ -1940,7 +1940,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } } } @@ -1951,7 +1951,7 @@ "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==", "dev": true, "requires": { - "source-map": "~0.6.0" + "source-map": "0.6.1" }, "dependencies": { "source-map": { @@ -1968,9 +1968,9 @@ "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", "dev": true, "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" + "string-width": "2.1.1", + "strip-ansi": "4.0.0", + "wrap-ansi": "2.1.0" }, "dependencies": { "ansi-regex": { @@ -1985,7 +1985,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "3.0.0" } } } @@ -2002,7 +2002,7 @@ "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=", "dev": true, "requires": { - "q": "^1.1.2" + "q": "1.5.1" } }, "code-point-at": { @@ -2017,8 +2017,8 @@ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dev": true, "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" + "map-visit": "1.0.0", + "object-visit": "1.0.1" } }, "color": { @@ -2027,9 +2027,9 @@ "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", "dev": true, "requires": { - "clone": "^1.0.2", - "color-convert": "^1.3.0", - "color-string": "^0.3.0" + "clone": "1.0.4", + "color-convert": "1.9.2", + "color-string": "0.3.0" } }, "color-convert": { @@ -2053,7 +2053,7 @@ "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=", "dev": true, "requires": { - "color-name": "^1.0.0" + "color-name": "1.1.1" } }, "colormin": { @@ -2062,9 +2062,9 @@ "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=", "dev": true, "requires": { - "color": "^0.11.0", + "color": "0.11.4", "css-color-names": "0.0.4", - "has": "^1.0.1" + "has": "1.0.3" } }, "colors": { @@ -2102,10 +2102,10 @@ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" + "buffer-from": "1.1.1", + "inherits": "2.0.3", + "readable-stream": "2.3.6", + "typedarray": "0.0.6" } }, "console-browserify": { @@ -2114,7 +2114,7 @@ "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", "dev": true, "requires": { - "date-now": "^0.1.4" + "date-now": "0.1.4" } }, "constants-browserify": { @@ -2135,12 +2135,12 @@ "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", "dev": true, "requires": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" + "aproba": "1.2.0", + "fs-write-stream-atomic": "1.0.10", + "iferr": "0.1.5", + "mkdirp": "0.5.1", + "rimraf": "2.6.3", + "run-queue": "1.0.3" } }, "copy-descriptor": { @@ -2166,8 +2166,8 @@ "integrity": "sha1-yREbbzMEXEaX8UR4f5JUzcd8Rf8=", "dev": true, "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.0.0" + "bn.js": "4.11.8", + "elliptic": "6.4.1" } }, "create-hash": { @@ -2202,8 +2202,8 @@ "resolved": "https://registry.npmjs.org/create-react-context/-/create-react-context-0.2.3.tgz", "integrity": "sha1-nsFAppFKIu8EuLCbd3HeiVZ8tvM=", "requires": { - "fbjs": "^0.8.0", - "gud": "^1.0.0" + "fbjs": "0.8.17", + "gud": "1.0.0" } }, "cross-spawn": { @@ -2212,11 +2212,11 @@ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "nice-try": "1.0.5", + "path-key": "2.0.1", + "semver": "5.6.0", + "shebang-command": "1.2.0", + "which": "1.3.1" } }, "crypto-browserify": { @@ -2225,17 +2225,17 @@ "integrity": "sha1-OWz58xN/A+S45TLFj2mCVOAPgOw=", "dev": true, "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" + "browserify-cipher": "1.0.1", + "browserify-sign": "4.0.4", + "create-ecdh": "4.0.3", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "diffie-hellman": "5.0.3", + "inherits": "2.0.3", + "pbkdf2": "3.0.17", + "public-encrypt": "4.0.3", + "randombytes": "2.0.6", + "randomfill": "1.0.4" } }, "css-color-names": { @@ -2250,20 +2250,20 @@ "integrity": "sha1-w/mGSnAL4nEbtaJGKyOJsaOS2rc=", "dev": true, "requires": { - "babel-code-frame": "^6.26.0", - "css-selector-tokenizer": "^0.7.0", - "cssnano": "^3.10.0", - "icss-utils": "^2.1.0", - "loader-utils": "^1.0.2", - "lodash.camelcase": "^4.3.0", - "object-assign": "^4.1.1", - "postcss": "^5.0.6", - "postcss-modules-extract-imports": "^1.2.0", - "postcss-modules-local-by-default": "^1.2.0", - "postcss-modules-scope": "^1.1.0", - "postcss-modules-values": "^1.3.0", - "postcss-value-parser": "^3.3.0", - "source-list-map": "^2.0.0" + "babel-code-frame": "6.26.0", + "css-selector-tokenizer": "0.7.0", + "cssnano": "3.10.0", + "icss-utils": "2.1.0", + "loader-utils": "1.1.0", + "lodash.camelcase": "4.3.0", + "object-assign": "4.1.1", + "postcss": "5.2.18", + "postcss-modules-extract-imports": "1.2.0", + "postcss-modules-local-by-default": "1.2.0", + "postcss-modules-scope": "1.1.0", + "postcss-modules-values": "1.3.0", + "postcss-value-parser": "3.3.0", + "source-list-map": "2.0.0" } }, "css-select": { @@ -2272,10 +2272,10 @@ "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", "dev": true, "requires": { - "boolbase": "~1.0.0", - "css-what": "2.1", + "boolbase": "1.0.0", + "css-what": "2.1.2", "domutils": "1.5.1", - "nth-check": "~1.0.1" + "nth-check": "1.0.2" } }, "css-selector-tokenizer": { @@ -2284,9 +2284,9 @@ "integrity": "sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=", "dev": true, "requires": { - "cssesc": "^0.1.0", - "fastparse": "^1.1.1", - "regexpu-core": "^1.0.0" + "cssesc": "0.1.0", + "fastparse": "1.1.1", + "regexpu-core": "1.0.0" }, "dependencies": { "regexpu-core": { @@ -2295,9 +2295,9 @@ "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", "dev": true, "requires": { - "regenerate": "^1.2.1", - "regjsgen": "^0.2.0", - "regjsparser": "^0.1.4" + "regenerate": "1.4.0", + "regjsgen": "0.2.0", + "regjsparser": "0.1.5" } } } @@ -2320,38 +2320,38 @@ "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=", "dev": true, "requires": { - "autoprefixer": "^6.3.1", - "decamelize": "^1.1.2", - "defined": "^1.0.0", - "has": "^1.0.1", - "object-assign": "^4.0.1", - "postcss": "^5.0.14", - "postcss-calc": "^5.2.0", - "postcss-colormin": "^2.1.8", - "postcss-convert-values": "^2.3.4", - "postcss-discard-comments": "^2.0.4", - "postcss-discard-duplicates": "^2.0.1", - "postcss-discard-empty": "^2.0.1", - "postcss-discard-overridden": "^0.1.1", - "postcss-discard-unused": "^2.2.1", - "postcss-filter-plugins": "^2.0.0", - "postcss-merge-idents": "^2.1.5", - "postcss-merge-longhand": "^2.0.1", - "postcss-merge-rules": "^2.0.3", - "postcss-minify-font-values": "^1.0.2", - "postcss-minify-gradients": "^1.0.1", - "postcss-minify-params": "^1.0.4", - "postcss-minify-selectors": "^2.0.4", - "postcss-normalize-charset": "^1.1.0", - "postcss-normalize-url": "^3.0.7", - "postcss-ordered-values": "^2.1.0", - "postcss-reduce-idents": "^2.2.2", - "postcss-reduce-initial": "^1.0.0", - "postcss-reduce-transforms": "^1.0.3", - "postcss-svgo": "^2.1.1", - "postcss-unique-selectors": "^2.0.2", - "postcss-value-parser": "^3.2.3", - "postcss-zindex": "^2.0.1" + "autoprefixer": "6.7.7", + "decamelize": "1.2.0", + "defined": "1.0.0", + "has": "1.0.3", + "object-assign": "4.1.1", + "postcss": "5.2.18", + "postcss-calc": "5.3.1", + "postcss-colormin": "2.2.2", + "postcss-convert-values": "2.6.1", + "postcss-discard-comments": "2.0.4", + "postcss-discard-duplicates": "2.1.0", + "postcss-discard-empty": "2.1.0", + "postcss-discard-overridden": "0.1.1", + "postcss-discard-unused": "2.2.3", + "postcss-filter-plugins": "2.0.3", + "postcss-merge-idents": "2.1.7", + "postcss-merge-longhand": "2.0.2", + "postcss-merge-rules": "2.1.2", + "postcss-minify-font-values": "1.0.5", + "postcss-minify-gradients": "1.0.5", + "postcss-minify-params": "1.2.2", + "postcss-minify-selectors": "2.1.1", + "postcss-normalize-charset": "1.1.1", + "postcss-normalize-url": "3.0.8", + "postcss-ordered-values": "2.2.3", + "postcss-reduce-idents": "2.4.0", + "postcss-reduce-initial": "1.0.1", + "postcss-reduce-transforms": "1.0.4", + "postcss-svgo": "2.1.6", + "postcss-unique-selectors": "2.0.2", + "postcss-value-parser": "3.3.0", + "postcss-zindex": "2.2.0" } }, "csso": { @@ -2360,8 +2360,8 @@ "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=", "dev": true, "requires": { - "clap": "^1.0.9", - "source-map": "^0.5.3" + "clap": "1.2.3", + "source-map": "0.5.7" } }, "cyclist": { @@ -2403,7 +2403,7 @@ "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dev": true, "requires": { - "object-keys": "^1.0.12" + "object-keys": "1.0.12" } }, "define-property": { @@ -2412,8 +2412,8 @@ "integrity": "sha1-1Flono1lS6d+AqgX+HENcCyxbp0=", "dev": true, "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" + "is-descriptor": "1.0.2", + "isobject": "3.0.1" }, "dependencies": { "is-accessor-descriptor": { @@ -2422,7 +2422,7 @@ "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-data-descriptor": { @@ -2431,7 +2431,7 @@ "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-descriptor": { @@ -2440,9 +2440,9 @@ "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", "dev": true, "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" } }, "kind-of": { @@ -2465,8 +2465,8 @@ "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", "dev": true, "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" } }, "detect-indent": { @@ -2475,7 +2475,7 @@ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", "dev": true, "requires": { - "repeating": "^2.0.0" + "repeating": "2.0.1" } }, "diffie-hellman": { @@ -2495,7 +2495,7 @@ "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", "dev": true, "requires": { - "utila": "~0.4" + "utila": "0.4.0" } }, "dom-serializer": { @@ -2504,8 +2504,8 @@ "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", "dev": true, "requires": { - "domelementtype": "~1.1.1", - "entities": "~1.1.1" + "domelementtype": "1.1.3", + "entities": "1.1.2" }, "dependencies": { "domelementtype": { @@ -2534,7 +2534,7 @@ "integrity": "sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=", "dev": true, "requires": { - "domelementtype": "1" + "domelementtype": "1.3.1" } }, "domutils": { @@ -2543,8 +2543,8 @@ "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", "dev": true, "requires": { - "dom-serializer": "0", - "domelementtype": "1" + "dom-serializer": "0.1.0", + "domelementtype": "1.3.1" } }, "duplexify": { @@ -2553,10 +2553,10 @@ "integrity": "sha512-vM58DwdnKmty+FSPzT14K9JXb90H+j5emaR4KYbr2KTIz00WHGbWOe5ghQTx233ZCLZtrGDALzKwcjEtSt35mA==", "dev": true, "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" + "end-of-stream": "1.4.1", + "inherits": "2.0.3", + "readable-stream": "2.3.6", + "stream-shift": "1.0.0" } }, "electron-to-chromium": { @@ -2571,13 +2571,13 @@ "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", "dev": true, "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" + "bn.js": "4.11.8", + "brorand": "1.1.0", + "hash.js": "1.1.7", + "hmac-drbg": "1.0.1", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1", + "minimalistic-crypto-utils": "1.0.1" } }, "emojis-list": { @@ -2591,7 +2591,7 @@ "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", "requires": { - "iconv-lite": "~0.4.13" + "iconv-lite": "0.4.23" } }, "end-of-stream": { @@ -2600,7 +2600,7 @@ "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", "dev": true, "requires": { - "once": "^1.4.0" + "once": "1.4.0" } }, "enhanced-resolve": { @@ -2609,9 +2609,9 @@ "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.4.0", - "tapable": "^1.0.0" + "graceful-fs": "4.1.11", + "memory-fs": "0.4.1", + "tapable": "1.1.1" } }, "entities": { @@ -2626,7 +2626,7 @@ "integrity": "sha1-RoTXF3mtOa8Xfj8AeZb3xnyFJhg=", "dev": true, "requires": { - "prr": "~1.0.1" + "prr": "1.0.1" } }, "es-abstract": { @@ -2635,11 +2635,11 @@ "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", "dev": true, "requires": { - "es-to-primitive": "^1.1.1", - "function-bind": "^1.1.1", - "has": "^1.0.1", - "is-callable": "^1.1.3", - "is-regex": "^1.0.4" + "es-to-primitive": "1.2.0", + "function-bind": "1.1.1", + "has": "1.0.3", + "is-callable": "1.1.4", + "is-regex": "1.0.4" } }, "es-to-primitive": { @@ -2648,11 +2648,17 @@ "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", "dev": true, "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "is-callable": "1.1.4", + "is-date-object": "1.0.1", + "is-symbol": "1.0.2" } }, + "es6-set-and-map": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/es6-set-and-map/-/es6-set-and-map-1.0.5.tgz", + "integrity": "sha1-mFJPdttNSsjMN7/ywVaW82Z8nbQ=", + "dev": true + }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -2664,8 +2670,8 @@ "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", "dev": true, "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" + "esrecurse": "4.2.1", + "estraverse": "4.2.0" } }, "esprima": { @@ -2680,7 +2686,7 @@ "integrity": "sha1-AHo7n9vCs7uH5IeeoZyS/b05Qs8=", "dev": true, "requires": { - "estraverse": "^4.1.0" + "estraverse": "4.2.0" } }, "estraverse": { @@ -2707,8 +2713,8 @@ "integrity": "sha1-f8vbGY3HGVlDLv4ThCaE4FJaywI=", "dev": true, "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" + "md5.js": "1.3.5", + "safe-buffer": "5.1.2" } }, "execa": { @@ -2717,13 +2723,13 @@ "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", "dev": true, "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" + "cross-spawn": "6.0.5", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" } }, "expand-brackets": { @@ -2732,13 +2738,13 @@ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" }, "dependencies": { "define-property": { @@ -2747,7 +2753,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } }, "extend-shallow": { @@ -2756,7 +2762,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } } } @@ -2768,7 +2774,7 @@ "dev": true, "optional": true, "requires": { - "fill-range": "^2.1.0" + "fill-range": "2.2.4" }, "dependencies": { "fill-range": { @@ -2778,11 +2784,11 @@ "dev": true, "optional": true, "requires": { - "is-number": "^2.1.0", - "isobject": "^2.0.0", - "randomatic": "^3.0.0", - "repeat-element": "^1.1.2", - "repeat-string": "^1.5.2" + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "3.0.0", + "repeat-element": "1.1.2", + "repeat-string": "1.6.1" } }, "is-number": { @@ -2792,7 +2798,7 @@ "dev": true, "optional": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" } }, "isobject": { @@ -2813,8 +2819,8 @@ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" }, "dependencies": { "is-extendable": { @@ -2823,7 +2829,7 @@ "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", "dev": true, "requires": { - "is-plain-object": "^2.0.4" + "is-plain-object": "2.0.4" } } } @@ -2834,14 +2840,14 @@ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "array-unique": "0.3.2", + "define-property": "1.0.0", + "expand-brackets": "2.1.4", + "extend-shallow": "2.0.1", + "fragment-cache": "0.2.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" }, "dependencies": { "define-property": { @@ -2850,7 +2856,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "^1.0.0" + "is-descriptor": "1.0.2" } }, "extend-shallow": { @@ -2859,7 +2865,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } }, "is-accessor-descriptor": { @@ -2868,7 +2874,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-data-descriptor": { @@ -2877,7 +2883,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-descriptor": { @@ -2886,9 +2892,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" } }, "kind-of": { @@ -2922,13 +2928,13 @@ "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", "requires": { - "core-js": "^1.0.0", - "isomorphic-fetch": "^2.1.1", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.18" + "core-js": "1.2.7", + "isomorphic-fetch": "2.2.1", + "loose-envify": "1.3.1", + "object-assign": "4.1.1", + "promise": "7.3.1", + "setimmediate": "1.0.5", + "ua-parser-js": "0.7.18" } }, "figgy-pudding": { @@ -2950,10 +2956,10 @@ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" }, "dependencies": { "extend-shallow": { @@ -2962,7 +2968,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } } } @@ -2973,9 +2979,9 @@ "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", "dev": true, "requires": { - "commondir": "^1.0.1", - "make-dir": "^1.0.0", - "pkg-dir": "^2.0.0" + "commondir": "1.0.1", + "make-dir": "1.3.0", + "pkg-dir": "2.0.0" } }, "find-up": { @@ -2984,7 +2990,7 @@ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "locate-path": "^2.0.0" + "locate-path": "2.0.0" } }, "flatten": { @@ -2999,8 +3005,8 @@ "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", "dev": true, "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.4" + "inherits": "2.0.3", + "readable-stream": "2.3.6" } }, "for-in": { @@ -3016,7 +3022,7 @@ "dev": true, "optional": true, "requires": { - "for-in": "^1.0.1" + "for-in": "1.0.2" } }, "fragment-cache": { @@ -3025,7 +3031,7 @@ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dev": true, "requires": { - "map-cache": "^0.2.2" + "map-cache": "0.2.2" } }, "from2": { @@ -3034,8 +3040,8 @@ "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", "dev": true, "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" + "inherits": "2.0.3", + "readable-stream": "2.3.6" } }, "fs-extra": { @@ -3043,9 +3049,9 @@ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^3.0.0", - "universalify": "^0.1.0" + "graceful-fs": "4.1.11", + "jsonfile": "3.0.1", + "universalify": "0.1.2" } }, "fs-readdir-recursive": { @@ -3060,10 +3066,10 @@ "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" + "graceful-fs": "4.1.11", + "iferr": "0.1.5", + "imurmurhash": "0.1.4", + "readable-stream": "2.3.6" } }, "fs.realpath": { @@ -3078,8 +3084,8 @@ "dev": true, "optional": true, "requires": { - "nan": "^2.9.2", - "node-pre-gyp": "^0.10.0" + "nan": "2.10.0", + "node-pre-gyp": "0.10.0" }, "dependencies": { "abbrev": { @@ -3105,8 +3111,8 @@ "dev": true, "optional": true, "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" + "delegates": "1.0.0", + "readable-stream": "2.3.6" } }, "balanced-match": { @@ -3119,7 +3125,7 @@ "bundled": true, "dev": true, "requires": { - "balanced-match": "^1.0.0", + "balanced-match": "1.0.0", "concat-map": "0.0.1" } }, @@ -3183,7 +3189,7 @@ "dev": true, "optional": true, "requires": { - "minipass": "^2.2.1" + "minipass": "2.2.4" } }, "fs.realpath": { @@ -3198,14 +3204,14 @@ "dev": true, "optional": true, "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" + "aproba": "1.2.0", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" } }, "glob": { @@ -3214,12 +3220,12 @@ "dev": true, "optional": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" } }, "has-unicode": { @@ -3234,7 +3240,7 @@ "dev": true, "optional": true, "requires": { - "safer-buffer": "^2.1.0" + "safer-buffer": "2.1.2" } }, "ignore-walk": { @@ -3243,7 +3249,7 @@ "dev": true, "optional": true, "requires": { - "minimatch": "^3.0.4" + "minimatch": "3.0.4" } }, "inflight": { @@ -3252,8 +3258,8 @@ "dev": true, "optional": true, "requires": { - "once": "^1.3.0", - "wrappy": "1" + "once": "1.4.0", + "wrappy": "1.0.2" } }, "inherits": { @@ -3272,7 +3278,7 @@ "bundled": true, "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "number-is-nan": "1.0.1" } }, "isarray": { @@ -3286,7 +3292,7 @@ "bundled": true, "dev": true, "requires": { - "brace-expansion": "^1.1.7" + "brace-expansion": "1.1.11" } }, "minimist": { @@ -3299,8 +3305,8 @@ "bundled": true, "dev": true, "requires": { - "safe-buffer": "^5.1.1", - "yallist": "^3.0.0" + "safe-buffer": "5.1.1", + "yallist": "3.0.2" } }, "minizlib": { @@ -3309,7 +3315,7 @@ "dev": true, "optional": true, "requires": { - "minipass": "^2.2.1" + "minipass": "2.2.4" } }, "mkdirp": { @@ -3332,9 +3338,9 @@ "dev": true, "optional": true, "requires": { - "debug": "^2.1.2", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" + "debug": "2.6.9", + "iconv-lite": "0.4.21", + "sax": "1.2.4" } }, "node-pre-gyp": { @@ -3343,16 +3349,16 @@ "dev": true, "optional": true, "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.0", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.1.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" + "detect-libc": "1.0.3", + "mkdirp": "0.5.1", + "needle": "2.2.0", + "nopt": "4.0.1", + "npm-packlist": "1.1.10", + "npmlog": "4.1.2", + "rc": "1.2.7", + "rimraf": "2.6.2", + "semver": "5.5.0", + "tar": "4.4.1" } }, "nopt": { @@ -3361,8 +3367,8 @@ "dev": true, "optional": true, "requires": { - "abbrev": "1", - "osenv": "^0.1.4" + "abbrev": "1.1.1", + "osenv": "0.1.5" } }, "npm-bundled": { @@ -3377,8 +3383,8 @@ "dev": true, "optional": true, "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" + "ignore-walk": "3.0.1", + "npm-bundled": "1.0.3" } }, "npmlog": { @@ -3387,10 +3393,10 @@ "dev": true, "optional": true, "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" } }, "number-is-nan": { @@ -3409,7 +3415,7 @@ "bundled": true, "dev": true, "requires": { - "wrappy": "1" + "wrappy": "1.0.2" } }, "os-homedir": { @@ -3430,8 +3436,8 @@ "dev": true, "optional": true, "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" } }, "path-is-absolute": { @@ -3452,10 +3458,10 @@ "dev": true, "optional": true, "requires": { - "deep-extend": "^0.5.1", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" + "deep-extend": "0.5.1", + "ini": "1.3.5", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" }, "dependencies": { "minimist": { @@ -3472,13 +3478,13 @@ "dev": true, "optional": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.1", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } }, "rimraf": { @@ -3487,7 +3493,7 @@ "dev": true, "optional": true, "requires": { - "glob": "^7.0.5" + "glob": "7.1.2" } }, "safe-buffer": { @@ -3530,9 +3536,9 @@ "bundled": true, "dev": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" } }, "string_decoder": { @@ -3541,7 +3547,7 @@ "dev": true, "optional": true, "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "5.1.1" } }, "strip-ansi": { @@ -3549,7 +3555,7 @@ "bundled": true, "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "2.1.1" } }, "strip-json-comments": { @@ -3564,13 +3570,13 @@ "dev": true, "optional": true, "requires": { - "chownr": "^1.0.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.2.4", - "minizlib": "^1.1.0", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.1", - "yallist": "^3.0.2" + "chownr": "1.0.1", + "fs-minipass": "1.2.5", + "minipass": "2.2.4", + "minizlib": "1.1.0", + "mkdirp": "0.5.1", + "safe-buffer": "5.1.1", + "yallist": "3.0.2" } }, "util-deprecate": { @@ -3585,7 +3591,7 @@ "dev": true, "optional": true, "requires": { - "string-width": "^1.0.2" + "string-width": "1.0.2" } }, "wrappy": { @@ -3629,12 +3635,12 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" } }, "glob-base": { @@ -3644,8 +3650,8 @@ "dev": true, "optional": true, "requires": { - "glob-parent": "^2.0.0", - "is-glob": "^2.0.0" + "glob-parent": "2.0.0", + "is-glob": "2.0.1" }, "dependencies": { "glob-parent": { @@ -3655,7 +3661,7 @@ "dev": true, "optional": true, "requires": { - "is-glob": "^2.0.0" + "is-glob": "2.0.1" } }, "is-extglob": { @@ -3670,7 +3676,7 @@ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "is-extglob": "^1.0.0" + "is-extglob": "1.0.0" } } } @@ -3681,8 +3687,8 @@ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dev": true, "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" + "is-glob": "3.1.0", + "path-dirname": "1.0.2" }, "dependencies": { "is-glob": { @@ -3691,7 +3697,7 @@ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "requires": { - "is-extglob": "^2.1.0" + "is-extglob": "2.1.1" } } } @@ -3724,7 +3730,7 @@ "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=", "dev": true, "requires": { - "function-bind": "^1.1.1" + "function-bind": "1.1.1" } }, "has-ansi": { @@ -3732,7 +3738,7 @@ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "2.1.1" } }, "has-flag": { @@ -3753,9 +3759,9 @@ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dev": true, "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" + "get-value": "2.0.6", + "has-values": "1.0.0", + "isobject": "3.0.1" } }, "has-values": { @@ -3764,8 +3770,8 @@ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dev": true, "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" + "is-number": "3.0.0", + "kind-of": "4.0.0" }, "dependencies": { "kind-of": { @@ -3774,7 +3780,7 @@ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -3785,8 +3791,8 @@ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", "dev": true, "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "2.0.3", + "safe-buffer": "5.1.2" } }, "hash.js": { @@ -3795,8 +3801,8 @@ "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dev": true, "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" } }, "he": { @@ -3810,11 +3816,11 @@ "resolved": "https://registry.npmjs.org/history/-/history-4.7.2.tgz", "integrity": "sha1-IrXH8xYzxbgCHH9KipVKwTnujVs=", "requires": { - "invariant": "^2.2.1", - "loose-envify": "^1.2.0", - "resolve-pathname": "^2.2.0", - "value-equal": "^0.4.0", - "warning": "^3.0.0" + "invariant": "2.2.4", + "loose-envify": "1.3.1", + "resolve-pathname": "2.2.0", + "value-equal": "0.4.0", + "warning": "3.0.0" }, "dependencies": { "warning": { @@ -3822,7 +3828,7 @@ "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", "requires": { - "loose-envify": "^1.0.0" + "loose-envify": "1.3.1" } } } @@ -3833,9 +3839,9 @@ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "dev": true, "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" + "hash.js": "1.1.7", + "minimalistic-assert": "1.0.1", + "minimalistic-crypto-utils": "1.0.1" } }, "hoist-non-react-statics": { @@ -3849,8 +3855,8 @@ "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", "dev": true, "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.1" + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" } }, "html-comment-regex": { @@ -3865,13 +3871,13 @@ "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", "dev": true, "requires": { - "camel-case": "3.0.x", - "clean-css": "4.2.x", - "commander": "2.17.x", - "he": "1.2.x", - "param-case": "2.1.x", - "relateurl": "0.2.x", - "uglify-js": "3.4.x" + "camel-case": "3.0.0", + "clean-css": "4.2.1", + "commander": "2.17.1", + "he": "1.2.0", + "param-case": "2.1.1", + "relateurl": "0.2.7", + "uglify-js": "3.4.9" }, "dependencies": { "commander": { @@ -3888,12 +3894,12 @@ "integrity": "sha1-sBq71yOsqqeze2r0SS69oD2d03s=", "dev": true, "requires": { - "html-minifier": "^3.2.3", - "loader-utils": "^0.2.16", - "lodash": "^4.17.3", - "pretty-error": "^2.0.2", - "tapable": "^1.0.0", - "toposort": "^1.0.0", + "html-minifier": "3.5.21", + "loader-utils": "0.2.17", + "lodash": "4.17.10", + "pretty-error": "2.1.1", + "tapable": "1.1.1", + "toposort": "1.0.7", "util.promisify": "1.0.0" }, "dependencies": { @@ -3903,10 +3909,10 @@ "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", "dev": true, "requires": { - "big.js": "^3.1.3", - "emojis-list": "^2.0.0", - "json5": "^0.5.0", - "object-assign": "^4.0.1" + "big.js": "3.2.0", + "emojis-list": "2.1.0", + "json5": "0.5.1", + "object-assign": "4.1.1" } } } @@ -3917,10 +3923,10 @@ "integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=", "dev": true, "requires": { - "domelementtype": "1", - "domhandler": "2.1", - "domutils": "1.1", - "readable-stream": "1.0" + "domelementtype": "1.3.1", + "domhandler": "2.1.0", + "domutils": "1.1.6", + "readable-stream": "1.0.34" }, "dependencies": { "domutils": { @@ -3929,7 +3935,7 @@ "integrity": "sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU=", "dev": true, "requires": { - "domelementtype": "1" + "domelementtype": "1.3.1" } }, "isarray": { @@ -3944,10 +3950,10 @@ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", + "core-util-is": "1.0.2", + "inherits": "2.0.3", "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "string_decoder": "0.10.31" } }, "string_decoder": { @@ -3969,7 +3975,7 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": "2.1.2" } }, "icss-replace-symbols": { @@ -3984,7 +3990,7 @@ "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", "dev": true, "requires": { - "postcss": "^6.0.1" + "postcss": "6.0.23" }, "dependencies": { "ansi-styles": { @@ -3993,7 +3999,7 @@ "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", "dev": true, "requires": { - "color-convert": "^1.9.0" + "color-convert": "1.9.2" } }, "chalk": { @@ -4002,9 +4008,9 @@ "integrity": "sha1-GMSasWoDe26wFSzIPjRxM4IVtm4=", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.4.0" } }, "has-flag": { @@ -4019,9 +4025,9 @@ "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=", "dev": true, "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" + "chalk": "2.4.1", + "source-map": "0.6.1", + "supports-color": "5.4.0" } }, "source-map": { @@ -4036,7 +4042,7 @@ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "3.0.0" } } } @@ -4064,8 +4070,8 @@ "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", "dev": true, "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" + "pkg-dir": "3.0.0", + "resolve-cwd": "2.0.0" }, "dependencies": { "find-up": { @@ -4074,7 +4080,7 @@ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "locate-path": "^3.0.0" + "locate-path": "3.0.0" } }, "locate-path": { @@ -4083,8 +4089,8 @@ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "p-locate": "3.0.0", + "path-exists": "3.0.0" } }, "p-limit": { @@ -4093,7 +4099,7 @@ "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", "dev": true, "requires": { - "p-try": "^2.0.0" + "p-try": "2.0.0" } }, "p-locate": { @@ -4102,7 +4108,7 @@ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "p-limit": "^2.0.0" + "p-limit": "2.1.0" } }, "p-try": { @@ -4117,7 +4123,7 @@ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, "requires": { - "find-up": "^3.0.0" + "find-up": "3.0.0" } } } @@ -4145,8 +4151,8 @@ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "requires": { - "once": "^1.3.0", - "wrappy": "1" + "once": "1.4.0", + "wrappy": "1.0.2" } }, "inherits": { @@ -4165,7 +4171,7 @@ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", "integrity": "sha1-YQ88ksk1nOHbYW5TgAjSP/NRWOY=", "requires": { - "loose-envify": "^1.0.0" + "loose-envify": "1.3.1" } }, "invert-kv": { @@ -4195,7 +4201,7 @@ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "dev": true, "requires": { - "binary-extensions": "^1.0.0" + "binary-extensions": "1.11.0" } }, "is-buffer": { @@ -4231,9 +4237,9 @@ "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", "dev": true, "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" }, "dependencies": { "kind-of": { @@ -4258,7 +4264,7 @@ "dev": true, "optional": true, "requires": { - "is-primitive": "^2.0.0" + "is-primitive": "2.0.0" } }, "is-extendable": { @@ -4279,7 +4285,7 @@ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "number-is-nan": "1.0.1" } }, "is-fullwidth-code-point": { @@ -4294,7 +4300,7 @@ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", "dev": true, "requires": { - "is-extglob": "^2.1.1" + "is-extglob": "2.1.1" } }, "is-number": { @@ -4303,7 +4309,7 @@ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" } }, "is-plain-obj": { @@ -4318,7 +4324,7 @@ "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", "dev": true, "requires": { - "isobject": "^3.0.1" + "isobject": "3.0.1" } }, "is-posix-bracket": { @@ -4341,7 +4347,7 @@ "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", "dev": true, "requires": { - "has": "^1.0.1" + "has": "1.0.3" } }, "is-stream": { @@ -4355,7 +4361,7 @@ "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=", "dev": true, "requires": { - "html-comment-regex": "^1.1.0" + "html-comment-regex": "1.1.1" } }, "is-symbol": { @@ -4364,7 +4370,7 @@ "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", "dev": true, "requires": { - "has-symbols": "^1.0.0" + "has-symbols": "1.0.0" } }, "is-windows": { @@ -4396,8 +4402,8 @@ "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", "requires": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" + "node-fetch": "1.7.3", + "whatwg-fetch": "2.0.4" } }, "js-base64": { @@ -4417,8 +4423,8 @@ "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", "dev": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^2.6.0" + "argparse": "1.0.10", + "esprima": "2.7.3" } }, "jsesc": { @@ -4450,7 +4456,7 @@ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", "requires": { - "graceful-fs": "^4.1.6" + "graceful-fs": "4.1.11" } }, "jvm-npm": { @@ -4464,7 +4470,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } }, "lcid": { @@ -4473,7 +4479,7 @@ "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", "dev": true, "requires": { - "invert-kv": "^2.0.0" + "invert-kv": "2.0.0" } }, "less-loader": { @@ -4482,9 +4488,9 @@ "integrity": "sha1-LBNSxbCaT4QQFJAnT9UWdN5BNj4=", "dev": true, "requires": { - "clone": "^2.1.1", - "loader-utils": "^1.1.0", - "pify": "^3.0.0" + "clone": "2.1.1", + "loader-utils": "1.1.0", + "pify": "3.0.0" }, "dependencies": { "clone": { @@ -4513,9 +4519,9 @@ "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", "dev": true, "requires": { - "big.js": "^3.1.3", - "emojis-list": "^2.0.0", - "json5": "^0.5.0" + "big.js": "3.2.0", + "emojis-list": "2.1.0", + "json5": "0.5.1" } }, "locate-path": { @@ -4524,8 +4530,8 @@ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" + "p-locate": "2.0.0", + "path-exists": "3.0.0" } }, "lodash": { @@ -4566,8 +4572,8 @@ "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz", "integrity": "sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=", "requires": { - "lodash._reinterpolate": "~3.0.0", - "lodash.templatesettings": "^4.0.0" + "lodash._reinterpolate": "3.0.0", + "lodash.templatesettings": "4.1.0" } }, "lodash.templatesettings": { @@ -4575,7 +4581,7 @@ "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz", "integrity": "sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=", "requires": { - "lodash._reinterpolate": "~3.0.0" + "lodash._reinterpolate": "3.0.0" } }, "lodash.uniq": { @@ -4589,7 +4595,7 @@ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", "requires": { - "js-tokens": "^3.0.0" + "js-tokens": "3.0.2" } }, "lower-case": { @@ -4604,7 +4610,7 @@ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, "requires": { - "yallist": "^3.0.2" + "yallist": "3.0.3" } }, "make-dir": { @@ -4613,7 +4619,7 @@ "integrity": "sha1-ecEDO4BRW9bSTsmTPoYMp17ifww=", "dev": true, "requires": { - "pify": "^3.0.0" + "pify": "3.0.0" }, "dependencies": { "pify": { @@ -4630,7 +4636,7 @@ "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", "dev": true, "requires": { - "p-defer": "^1.0.0" + "p-defer": "1.0.0" } }, "map-cache": { @@ -4645,7 +4651,7 @@ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dev": true, "requires": { - "object-visit": "^1.0.0" + "object-visit": "1.0.1" } }, "math-expression-evaluator": { @@ -4667,9 +4673,9 @@ "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "hash-base": "3.0.4", + "inherits": "2.0.3", + "safe-buffer": "5.1.2" } }, "mem": { @@ -4678,9 +4684,9 @@ "integrity": "sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA==", "dev": true, "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^1.0.0", - "p-is-promise": "^1.1.0" + "map-age-cleaner": "0.1.3", + "mimic-fn": "1.2.0", + "p-is-promise": "1.1.0" } }, "memory-fs": { @@ -4689,8 +4695,8 @@ "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", "dev": true, "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" + "errno": "0.1.7", + "readable-stream": "2.3.6" } }, "micromatch": { @@ -4699,19 +4705,19 @@ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.2", + "nanomatch": "1.2.13", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" }, "dependencies": { "kind-of": { @@ -4728,8 +4734,8 @@ "integrity": "sha1-8IA1HIZbDcViqEYpZtqlNUPHik0=", "dev": true, "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" + "bn.js": "4.11.8", + "brorand": "1.1.0" } }, "mimic-fn": { @@ -4755,7 +4761,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", "requires": { - "brace-expansion": "^1.1.7" + "brace-expansion": "1.1.11" } }, "minimist": { @@ -4769,16 +4775,16 @@ "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", "dev": true, "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" + "concat-stream": "1.6.2", + "duplexify": "3.6.1", + "end-of-stream": "1.4.1", + "flush-write-stream": "1.0.3", + "from2": "2.3.0", + "parallel-transform": "1.1.0", + "pump": "3.0.0", + "pumpify": "1.5.1", + "stream-each": "1.2.3", + "through2": "2.0.5" } }, "mixin-deep": { @@ -4787,8 +4793,8 @@ "integrity": "sha1-pJ5yaNzhoNlpjkUybFYm3zVD0P4=", "dev": true, "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" + "for-in": "1.0.2", + "is-extendable": "1.0.1" }, "dependencies": { "is-extendable": { @@ -4797,7 +4803,7 @@ "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", "dev": true, "requires": { - "is-plain-object": "^2.0.4" + "is-plain-object": "2.0.4" } } } @@ -4816,12 +4822,12 @@ "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", "dev": true, "requires": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" + "aproba": "1.2.0", + "copy-concurrently": "1.0.5", + "fs-write-stream-atomic": "1.0.10", + "mkdirp": "0.5.1", + "rimraf": "2.6.3", + "run-queue": "1.0.3" } }, "ms": { @@ -4843,17 +4849,17 @@ "integrity": "sha1-uHqKpPwN6P5r6IiVs4mD/yZb0Rk=", "dev": true, "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "fragment-cache": "0.2.1", + "is-windows": "1.0.2", + "kind-of": "6.0.2", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" }, "dependencies": { "kind-of": { @@ -4882,7 +4888,7 @@ "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", "dev": true, "requires": { - "lower-case": "^1.1.1" + "lower-case": "1.1.4" } }, "node-fetch": { @@ -4890,8 +4896,8 @@ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", "integrity": "sha1-mA9vcthSEaU0fGsrwYxbhMPrR+8=", "requires": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" + "encoding": "0.1.12", + "is-stream": "1.1.0" } }, "node-libs-browser": { @@ -4900,28 +4906,28 @@ "integrity": "sha1-X5QmPUBPbkR2fXJpAf/wVHjWAN8=", "dev": true, "requires": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^1.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", + "assert": "1.4.1", + "browserify-zlib": "0.2.0", + "buffer": "4.9.1", + "console-browserify": "1.1.0", + "constants-browserify": "1.0.0", + "crypto-browserify": "3.12.0", + "domain-browser": "1.2.0", + "events": "1.1.1", + "https-browserify": "1.0.0", + "os-browserify": "0.3.0", "path-browserify": "0.0.0", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", + "process": "0.11.10", + "punycode": "1.4.1", + "querystring-es3": "0.2.1", + "readable-stream": "2.3.6", + "stream-browserify": "2.0.1", + "stream-http": "2.8.3", + "string_decoder": "1.1.1", + "timers-browserify": "2.0.10", "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.10.3", + "url": "0.11.0", + "util": "0.10.4", "vm-browserify": "0.0.4" }, "dependencies": { @@ -4939,7 +4945,7 @@ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { - "remove-trailing-separator": "^1.0.1" + "remove-trailing-separator": "1.1.0" } }, "normalize-range": { @@ -4954,10 +4960,10 @@ "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", "dev": true, "requires": { - "object-assign": "^4.0.1", - "prepend-http": "^1.0.0", - "query-string": "^4.1.0", - "sort-keys": "^1.0.0" + "object-assign": "4.1.1", + "prepend-http": "1.0.4", + "query-string": "4.3.4", + "sort-keys": "1.1.2" } }, "npm-run-path": { @@ -4966,7 +4972,7 @@ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dev": true, "requires": { - "path-key": "^2.0.0" + "path-key": "2.0.1" } }, "nth-check": { @@ -4975,7 +4981,7 @@ "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", "dev": true, "requires": { - "boolbase": "~1.0.0" + "boolbase": "1.0.0" } }, "num2fraction": { @@ -5001,9 +5007,9 @@ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dev": true, "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" + "copy-descriptor": "0.1.1", + "define-property": "0.2.5", + "kind-of": "3.2.2" }, "dependencies": { "define-property": { @@ -5012,7 +5018,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } } } @@ -5029,7 +5035,7 @@ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dev": true, "requires": { - "isobject": "^3.0.0" + "isobject": "3.0.1" } }, "object.getownpropertydescriptors": { @@ -5038,8 +5044,8 @@ "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", "dev": true, "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.5.1" + "define-properties": "1.1.3", + "es-abstract": "1.12.0" } }, "object.omit": { @@ -5049,8 +5055,8 @@ "dev": true, "optional": true, "requires": { - "for-own": "^0.1.4", - "is-extendable": "^0.1.1" + "for-own": "0.1.5", + "is-extendable": "0.1.1" } }, "object.pick": { @@ -5059,7 +5065,7 @@ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dev": true, "requires": { - "isobject": "^3.0.1" + "isobject": "3.0.1" } }, "once": { @@ -5067,7 +5073,7 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "requires": { - "wrappy": "1" + "wrappy": "1.0.2" } }, "os-browserify": { @@ -5088,9 +5094,9 @@ "integrity": "sha512-7g5e7dmXPtzcP4bgsZ8ixDVqA7oWYuEz4lOSujeWyliPai4gfVDiFIcwBg3aGCPnmSGfzOKTK3ccPn0CKv3DBw==", "dev": true, "requires": { - "execa": "^0.10.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" + "execa": "0.10.0", + "lcid": "2.0.0", + "mem": "4.0.0" } }, "os-tmpdir": { @@ -5105,9 +5111,9 @@ "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=", "dev": true, "requires": { - "graceful-fs": "^4.1.4", - "mkdirp": "^0.5.1", - "object-assign": "^4.1.0" + "graceful-fs": "4.1.11", + "mkdirp": "0.5.1", + "object-assign": "4.1.1" } }, "p-defer": { @@ -5134,7 +5140,7 @@ "integrity": "sha1-uGvV8MJWkJEcdZD8v8IBDVSzzLg=", "dev": true, "requires": { - "p-try": "^1.0.0" + "p-try": "1.0.0" } }, "p-locate": { @@ -5143,7 +5149,7 @@ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "requires": { - "p-limit": "^1.1.0" + "p-limit": "1.3.0" } }, "p-try": { @@ -5164,9 +5170,9 @@ "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", "dev": true, "requires": { - "cyclist": "~0.2.2", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" + "cyclist": "0.2.2", + "inherits": "2.0.3", + "readable-stream": "2.3.6" } }, "param-case": { @@ -5175,7 +5181,7 @@ "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", "dev": true, "requires": { - "no-case": "^2.2.0" + "no-case": "2.3.2" } }, "parse-asn1": { @@ -5198,10 +5204,10 @@ "dev": true, "optional": true, "requires": { - "glob-base": "^0.3.0", - "is-dotfile": "^1.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.0" + "glob-base": "0.3.0", + "is-dotfile": "1.0.3", + "is-extglob": "1.0.0", + "is-glob": "2.0.1" }, "dependencies": { "is-extglob": { @@ -5217,7 +5223,7 @@ "dev": true, "optional": true, "requires": { - "is-extglob": "^1.0.0" + "is-extglob": "1.0.0" } } } @@ -5278,11 +5284,11 @@ "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", "dev": true, "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "ripemd160": "2.0.2", + "safe-buffer": "5.1.2", + "sha.js": "2.4.11" } }, "pkg-dir": { @@ -5291,7 +5297,7 @@ "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", "dev": true, "requires": { - "find-up": "^2.1.0" + "find-up": "2.1.0" } }, "posix-character-classes": { @@ -5306,10 +5312,10 @@ "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", "dev": true, "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" + "chalk": "1.1.3", + "js-base64": "2.4.5", + "source-map": "0.5.7", + "supports-color": "3.2.3" }, "dependencies": { "has-flag": { @@ -5324,7 +5330,7 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "^1.0.0" + "has-flag": "1.0.0" } } } @@ -5335,9 +5341,9 @@ "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=", "dev": true, "requires": { - "postcss": "^5.0.2", - "postcss-message-helpers": "^2.0.0", - "reduce-css-calc": "^1.2.6" + "postcss": "5.2.18", + "postcss-message-helpers": "2.0.0", + "reduce-css-calc": "1.3.0" } }, "postcss-colormin": { @@ -5346,9 +5352,9 @@ "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=", "dev": true, "requires": { - "colormin": "^1.0.5", - "postcss": "^5.0.13", - "postcss-value-parser": "^3.2.3" + "colormin": "1.1.2", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" } }, "postcss-convert-values": { @@ -5357,8 +5363,8 @@ "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=", "dev": true, "requires": { - "postcss": "^5.0.11", - "postcss-value-parser": "^3.1.2" + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" } }, "postcss-discard-comments": { @@ -5367,7 +5373,7 @@ "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=", "dev": true, "requires": { - "postcss": "^5.0.14" + "postcss": "5.2.18" } }, "postcss-discard-duplicates": { @@ -5376,7 +5382,7 @@ "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=", "dev": true, "requires": { - "postcss": "^5.0.4" + "postcss": "5.2.18" } }, "postcss-discard-empty": { @@ -5385,7 +5391,7 @@ "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=", "dev": true, "requires": { - "postcss": "^5.0.14" + "postcss": "5.2.18" } }, "postcss-discard-overridden": { @@ -5394,7 +5400,7 @@ "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=", "dev": true, "requires": { - "postcss": "^5.0.16" + "postcss": "5.2.18" } }, "postcss-discard-unused": { @@ -5403,8 +5409,8 @@ "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=", "dev": true, "requires": { - "postcss": "^5.0.14", - "uniqs": "^2.0.0" + "postcss": "5.2.18", + "uniqs": "2.0.0" } }, "postcss-filter-plugins": { @@ -5413,7 +5419,7 @@ "integrity": "sha1-giRf34IzcEFkXkdxFNjlk6oYuOw=", "dev": true, "requires": { - "postcss": "^5.0.4" + "postcss": "5.2.18" } }, "postcss-merge-idents": { @@ -5422,9 +5428,9 @@ "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=", "dev": true, "requires": { - "has": "^1.0.1", - "postcss": "^5.0.10", - "postcss-value-parser": "^3.1.1" + "has": "1.0.3", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" } }, "postcss-merge-longhand": { @@ -5433,7 +5439,7 @@ "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=", "dev": true, "requires": { - "postcss": "^5.0.4" + "postcss": "5.2.18" } }, "postcss-merge-rules": { @@ -5442,11 +5448,11 @@ "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=", "dev": true, "requires": { - "browserslist": "^1.5.2", - "caniuse-api": "^1.5.2", - "postcss": "^5.0.4", - "postcss-selector-parser": "^2.2.2", - "vendors": "^1.0.0" + "browserslist": "1.7.7", + "caniuse-api": "1.6.1", + "postcss": "5.2.18", + "postcss-selector-parser": "2.2.3", + "vendors": "1.0.2" } }, "postcss-message-helpers": { @@ -5461,9 +5467,9 @@ "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=", "dev": true, "requires": { - "object-assign": "^4.0.1", - "postcss": "^5.0.4", - "postcss-value-parser": "^3.0.2" + "object-assign": "4.1.1", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" } }, "postcss-minify-gradients": { @@ -5472,8 +5478,8 @@ "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=", "dev": true, "requires": { - "postcss": "^5.0.12", - "postcss-value-parser": "^3.3.0" + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" } }, "postcss-minify-params": { @@ -5482,10 +5488,10 @@ "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=", "dev": true, "requires": { - "alphanum-sort": "^1.0.1", - "postcss": "^5.0.2", - "postcss-value-parser": "^3.0.2", - "uniqs": "^2.0.0" + "alphanum-sort": "1.0.2", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0", + "uniqs": "2.0.0" } }, "postcss-minify-selectors": { @@ -5494,10 +5500,10 @@ "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=", "dev": true, "requires": { - "alphanum-sort": "^1.0.2", - "has": "^1.0.1", - "postcss": "^5.0.14", - "postcss-selector-parser": "^2.0.0" + "alphanum-sort": "1.0.2", + "has": "1.0.3", + "postcss": "5.2.18", + "postcss-selector-parser": "2.2.3" } }, "postcss-modules-extract-imports": { @@ -5506,7 +5512,7 @@ "integrity": "sha1-ZhQOzs447wa/DT41XWm/WdFB6oU=", "dev": true, "requires": { - "postcss": "^6.0.1" + "postcss": "6.0.23" }, "dependencies": { "ansi-styles": { @@ -5515,7 +5521,7 @@ "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", "dev": true, "requires": { - "color-convert": "^1.9.0" + "color-convert": "1.9.2" } }, "chalk": { @@ -5524,9 +5530,9 @@ "integrity": "sha1-GMSasWoDe26wFSzIPjRxM4IVtm4=", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.4.0" } }, "has-flag": { @@ -5541,9 +5547,9 @@ "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=", "dev": true, "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" + "chalk": "2.4.1", + "source-map": "0.6.1", + "supports-color": "5.4.0" } }, "source-map": { @@ -5558,7 +5564,7 @@ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "3.0.0" } } } @@ -5569,8 +5575,8 @@ "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", "dev": true, "requires": { - "css-selector-tokenizer": "^0.7.0", - "postcss": "^6.0.1" + "css-selector-tokenizer": "0.7.0", + "postcss": "6.0.23" }, "dependencies": { "ansi-styles": { @@ -5579,7 +5585,7 @@ "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", "dev": true, "requires": { - "color-convert": "^1.9.0" + "color-convert": "1.9.2" } }, "chalk": { @@ -5588,9 +5594,9 @@ "integrity": "sha1-GMSasWoDe26wFSzIPjRxM4IVtm4=", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.4.0" } }, "has-flag": { @@ -5605,9 +5611,9 @@ "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=", "dev": true, "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" + "chalk": "2.4.1", + "source-map": "0.6.1", + "supports-color": "5.4.0" } }, "source-map": { @@ -5622,7 +5628,7 @@ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "3.0.0" } } } @@ -5633,8 +5639,8 @@ "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", "dev": true, "requires": { - "css-selector-tokenizer": "^0.7.0", - "postcss": "^6.0.1" + "css-selector-tokenizer": "0.7.0", + "postcss": "6.0.23" }, "dependencies": { "ansi-styles": { @@ -5643,7 +5649,7 @@ "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", "dev": true, "requires": { - "color-convert": "^1.9.0" + "color-convert": "1.9.2" } }, "chalk": { @@ -5652,9 +5658,9 @@ "integrity": "sha1-GMSasWoDe26wFSzIPjRxM4IVtm4=", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.4.0" } }, "has-flag": { @@ -5669,9 +5675,9 @@ "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=", "dev": true, "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" + "chalk": "2.4.1", + "source-map": "0.6.1", + "supports-color": "5.4.0" } }, "source-map": { @@ -5686,7 +5692,7 @@ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "3.0.0" } } } @@ -5697,8 +5703,8 @@ "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", "dev": true, "requires": { - "icss-replace-symbols": "^1.1.0", - "postcss": "^6.0.1" + "icss-replace-symbols": "1.1.0", + "postcss": "6.0.23" }, "dependencies": { "ansi-styles": { @@ -5707,7 +5713,7 @@ "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", "dev": true, "requires": { - "color-convert": "^1.9.0" + "color-convert": "1.9.2" } }, "chalk": { @@ -5716,9 +5722,9 @@ "integrity": "sha1-GMSasWoDe26wFSzIPjRxM4IVtm4=", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.4.0" } }, "has-flag": { @@ -5733,9 +5739,9 @@ "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=", "dev": true, "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" + "chalk": "2.4.1", + "source-map": "0.6.1", + "supports-color": "5.4.0" } }, "source-map": { @@ -5750,7 +5756,7 @@ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "3.0.0" } } } @@ -5761,7 +5767,7 @@ "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=", "dev": true, "requires": { - "postcss": "^5.0.5" + "postcss": "5.2.18" } }, "postcss-normalize-url": { @@ -5770,10 +5776,10 @@ "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=", "dev": true, "requires": { - "is-absolute-url": "^2.0.0", - "normalize-url": "^1.4.0", - "postcss": "^5.0.14", - "postcss-value-parser": "^3.2.3" + "is-absolute-url": "2.1.0", + "normalize-url": "1.9.1", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" } }, "postcss-ordered-values": { @@ -5782,8 +5788,8 @@ "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=", "dev": true, "requires": { - "postcss": "^5.0.4", - "postcss-value-parser": "^3.0.1" + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" } }, "postcss-reduce-idents": { @@ -5792,8 +5798,8 @@ "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=", "dev": true, "requires": { - "postcss": "^5.0.4", - "postcss-value-parser": "^3.0.2" + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" } }, "postcss-reduce-initial": { @@ -5802,7 +5808,7 @@ "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=", "dev": true, "requires": { - "postcss": "^5.0.4" + "postcss": "5.2.18" } }, "postcss-reduce-transforms": { @@ -5811,9 +5817,9 @@ "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=", "dev": true, "requires": { - "has": "^1.0.1", - "postcss": "^5.0.8", - "postcss-value-parser": "^3.0.1" + "has": "1.0.3", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" } }, "postcss-selector-parser": { @@ -5822,9 +5828,9 @@ "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=", "dev": true, "requires": { - "flatten": "^1.0.2", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" + "flatten": "1.0.2", + "indexes-of": "1.0.1", + "uniq": "1.0.1" } }, "postcss-svgo": { @@ -5833,10 +5839,10 @@ "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=", "dev": true, "requires": { - "is-svg": "^2.0.0", - "postcss": "^5.0.14", - "postcss-value-parser": "^3.2.3", - "svgo": "^0.7.0" + "is-svg": "2.1.0", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0", + "svgo": "0.7.2" } }, "postcss-unique-selectors": { @@ -5845,9 +5851,9 @@ "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=", "dev": true, "requires": { - "alphanum-sort": "^1.0.1", - "postcss": "^5.0.4", - "uniqs": "^2.0.0" + "alphanum-sort": "1.0.2", + "postcss": "5.2.18", + "uniqs": "2.0.0" } }, "postcss-value-parser": { @@ -5862,9 +5868,9 @@ "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=", "dev": true, "requires": { - "has": "^1.0.1", - "postcss": "^5.0.4", - "uniqs": "^2.0.0" + "has": "1.0.3", + "postcss": "5.2.18", + "uniqs": "2.0.0" } }, "prepend-http": { @@ -5886,8 +5892,8 @@ "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", "dev": true, "requires": { - "renderkid": "^2.0.1", - "utila": "~0.4" + "renderkid": "2.0.2", + "utila": "0.4.0" } }, "private": { @@ -5913,7 +5919,7 @@ "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", "integrity": "sha1-BktyYCsY+Q8pGSuLG8QY/9Hr078=", "requires": { - "asap": "~2.0.3" + "asap": "2.0.6" } }, "promise-inflight": { @@ -5927,8 +5933,8 @@ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz", "integrity": "sha1-BdXKd7RFPphdYPx/+MhZCUpJcQI=", "requires": { - "loose-envify": "^1.3.1", - "object-assign": "^4.1.1" + "loose-envify": "1.3.1", + "object-assign": "4.1.1" } }, "prr": { @@ -5943,12 +5949,12 @@ "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dev": true, "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.2.0", + "parse-asn1": "5.1.1", + "randombytes": "2.0.6", + "safe-buffer": "5.1.2" } }, "pump": { @@ -5957,8 +5963,8 @@ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "end-of-stream": "1.4.1", + "once": "1.4.0" } }, "pumpify": { @@ -5967,9 +5973,9 @@ "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", "dev": true, "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" + "duplexify": "3.6.1", + "inherits": "2.0.3", + "pump": "2.0.1" }, "dependencies": { "pump": { @@ -5978,8 +5984,8 @@ "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "dev": true, "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "end-of-stream": "1.4.1", + "once": "1.4.0" } } } @@ -6002,8 +6008,8 @@ "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", "dev": true, "requires": { - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" + "object-assign": "4.1.1", + "strict-uri-encode": "1.1.0" } }, "querystring": { @@ -6025,9 +6031,9 @@ "dev": true, "optional": true, "requires": { - "is-number": "^4.0.0", - "kind-of": "^6.0.0", - "math-random": "^1.0.1" + "is-number": "4.0.0", + "kind-of": "6.0.2", + "math-random": "1.0.1" }, "dependencies": { "is-number": { @@ -6052,7 +6058,7 @@ "integrity": "sha1-0wLFIpSFiISKjTAMkytEwkIx2oA=", "dev": true, "requires": { - "safe-buffer": "^5.1.0" + "safe-buffer": "5.1.2" } }, "randomfill": { @@ -6061,8 +6067,8 @@ "integrity": "sha1-ySGW/IarQr6YPxvzF3giSTHWFFg=", "dev": true, "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" + "randombytes": "2.0.6", + "safe-buffer": "5.1.2" } }, "react": { @@ -6070,10 +6076,10 @@ "resolved": "https://registry.npmjs.org/react/-/react-16.4.1.tgz", "integrity": "sha512-3GEs0giKp6E0Oh/Y9ZC60CmYgUPnp7voH9fbjWsvXtYFb4EWtgQub0ADSq0sJR0BbHc4FThLLtzlcFaFXIorwg==", "requires": { - "fbjs": "^0.8.16", - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.0" + "fbjs": "0.8.17", + "loose-envify": "1.3.1", + "object-assign": "4.1.1", + "prop-types": "15.6.2" } }, "react-dom": { @@ -6081,10 +6087,10 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.4.1.tgz", "integrity": "sha512-1Gin+wghF/7gl4Cqcvr1DxFX2Osz7ugxSwl6gBqCMpdrxHjIFUS7GYxrFftZ9Ln44FHw0JxCFD9YtZsrbR5/4A==", "requires": { - "fbjs": "^0.8.16", - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.0" + "fbjs": "0.8.17", + "loose-envify": "1.3.1", + "object-assign": "4.1.1", + "prop-types": "15.6.2" } }, "react-is": { @@ -6097,12 +6103,12 @@ "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-5.0.7.tgz", "integrity": "sha1-DcEHbZr7RnD5k/+u9EuPjBFVpMg=", "requires": { - "hoist-non-react-statics": "^2.5.0", - "invariant": "^2.0.0", - "lodash": "^4.17.5", - "lodash-es": "^4.17.5", - "loose-envify": "^1.1.0", - "prop-types": "^15.6.0" + "hoist-non-react-statics": "2.5.5", + "invariant": "2.2.4", + "lodash": "4.17.10", + "lodash-es": "4.17.10", + "loose-envify": "1.3.1", + "prop-types": "15.6.2" } }, "react-router": { @@ -6110,16 +6116,16 @@ "resolved": "https://registry.npmjs.org/react-router/-/react-router-4.4.0-beta.6.tgz", "integrity": "sha512-esR1UHsPpfvehX5Qn7wQrOTFsl4PxiaX3GaYvtFDSEioMsTl0zkASJBm1fXKgR9brUQX9kgiGq6XnCsiJU/82g==", "requires": { - "@babel/runtime": "^7.1.2", - "create-react-context": "^0.2.2", - "history": "^4.8.0-beta.0", - "hoist-non-react-statics": "^2.5.0", - "loose-envify": "^1.3.1", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.5.2", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" + "@babel/runtime": "7.2.0", + "create-react-context": "0.2.3", + "history": "4.8.0-beta.0", + "hoist-non-react-statics": "2.5.5", + "loose-envify": "1.3.1", + "path-to-regexp": "1.7.0", + "prop-types": "15.6.2", + "react-is": "16.6.3", + "tiny-invariant": "1.0.3", + "tiny-warning": "1.0.0" }, "dependencies": { "history": { @@ -6127,12 +6133,12 @@ "resolved": "https://registry.npmjs.org/history/-/history-4.8.0-beta.0.tgz", "integrity": "sha512-LDjPtGgAFDO3lZ+bumN67k0R3GWvUBLLgRJpFU2mnJ1w+D5rEbiZC1c37yPla7tx/dUzVfznt5Rmttnz0MvGdA==", "requires": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^2.2.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^0.4.0" + "@babel/runtime": "7.2.0", + "loose-envify": "1.3.1", + "resolve-pathname": "2.2.0", + "tiny-invariant": "1.0.3", + "tiny-warning": "1.0.0", + "value-equal": "0.4.0" } } } @@ -6142,11 +6148,11 @@ "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-4.4.0-alpha.1.tgz", "integrity": "sha1-EgfmmFNJ6wvXms4azhx89ni80cQ=", "requires": { - "history": "^4.7.2", - "invariant": "^2.2.4", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.1", - "react-router": "^4.4.0-alpha.1" + "history": "4.7.2", + "invariant": "2.2.4", + "loose-envify": "1.3.1", + "prop-types": "15.6.2", + "react-router": "4.4.0-beta.6" } }, "react-router-redux": { @@ -6160,13 +6166,13 @@ "integrity": "sha1-sRwn2IuP8fvgcGQ8+UsMea4bCq8=", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } }, "readdirp": { @@ -6175,10 +6181,10 @@ "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "minimatch": "^3.0.2", - "readable-stream": "^2.0.2", - "set-immediate-shim": "^1.0.1" + "graceful-fs": "4.1.11", + "minimatch": "3.0.4", + "readable-stream": "2.3.6", + "set-immediate-shim": "1.0.1" } }, "reduce-css-calc": { @@ -6187,9 +6193,9 @@ "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=", "dev": true, "requires": { - "balanced-match": "^0.4.2", - "math-expression-evaluator": "^1.2.14", - "reduce-function-call": "^1.0.1" + "balanced-match": "0.4.2", + "math-expression-evaluator": "1.2.17", + "reduce-function-call": "1.0.2" }, "dependencies": { "balanced-match": { @@ -6206,7 +6212,7 @@ "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=", "dev": true, "requires": { - "balanced-match": "^0.4.2" + "balanced-match": "0.4.2" }, "dependencies": { "balanced-match": { @@ -6222,8 +6228,8 @@ "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.0.tgz", "integrity": "sha1-qmmKkrcpMV0is0oFU9fmUzVVzAM=", "requires": { - "loose-envify": "^1.1.0", - "symbol-observable": "^1.2.0" + "loose-envify": "1.3.1", + "symbol-observable": "1.2.0" } }, "redux-immutable": { @@ -6249,9 +6255,9 @@ "integrity": "sha1-HkmWg3Ix2ot/PPQRTXG1aRoGgN0=", "dev": true, "requires": { - "babel-runtime": "^6.18.0", - "babel-types": "^6.19.0", - "private": "^0.1.6" + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "private": "0.1.8" } }, "regex-cache": { @@ -6261,7 +6267,7 @@ "dev": true, "optional": true, "requires": { - "is-equal-shallow": "^0.1.3" + "is-equal-shallow": "0.1.3" } }, "regex-not": { @@ -6270,8 +6276,8 @@ "integrity": "sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw=", "dev": true, "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" + "extend-shallow": "3.0.2", + "safe-regex": "1.1.0" } }, "regexpu-core": { @@ -6280,9 +6286,9 @@ "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", "dev": true, "requires": { - "regenerate": "^1.2.1", - "regjsgen": "^0.2.0", - "regjsparser": "^0.1.4" + "regenerate": "1.4.0", + "regjsgen": "0.2.0", + "regjsparser": "0.1.5" } }, "regjsgen": { @@ -6297,7 +6303,7 @@ "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", "dev": true, "requires": { - "jsesc": "~0.5.0" + "jsesc": "0.5.0" }, "dependencies": { "jsesc": { @@ -6326,11 +6332,11 @@ "integrity": "sha512-FsygIxevi1jSiPY9h7vZmBFUbAOcbYm9UwyiLNdVsLRs/5We9Ob5NMPbGYUTWiLq5L+ezlVdE0A8bbME5CWTpg==", "dev": true, "requires": { - "css-select": "^1.1.0", - "dom-converter": "~0.2", - "htmlparser2": "~3.3.0", - "strip-ansi": "^3.0.0", - "utila": "^0.4.0" + "css-select": "1.2.0", + "dom-converter": "0.2.0", + "htmlparser2": "3.3.0", + "strip-ansi": "3.0.1", + "utila": "0.4.0" } }, "repeat-element": { @@ -6351,7 +6357,7 @@ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", "dev": true, "requires": { - "is-finite": "^1.0.0" + "is-finite": "1.0.2" } }, "require-directory": { @@ -6372,7 +6378,7 @@ "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", "dev": true, "requires": { - "resolve-from": "^3.0.0" + "resolve-from": "3.0.0" } }, "resolve-from": { @@ -6404,7 +6410,7 @@ "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "dev": true, "requires": { - "glob": "^7.1.3" + "glob": "7.1.3" }, "dependencies": { "glob": { @@ -6413,12 +6419,12 @@ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" } } } @@ -6429,8 +6435,8 @@ "integrity": "sha1-ocGm9iR1FXe6XQeRTLyShQWFiQw=", "dev": true, "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" + "hash-base": "3.0.4", + "inherits": "2.0.3" } }, "run-queue": { @@ -6439,7 +6445,7 @@ "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", "dev": true, "requires": { - "aproba": "^1.1.1" + "aproba": "1.2.0" } }, "safe-buffer": { @@ -6474,8 +6480,8 @@ "integrity": "sha512-yYrjb9TX2k/J1Y5UNy3KYdZq10xhYcF8nMpAW6o3hy6Q8WSIEf9lJHG/ePnOBfziPM3fvQwfOwa13U/Fh8qTfA==", "dev": true, "requires": { - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0" + "ajv": "6.5.2", + "ajv-keywords": "3.2.0" } }, "semver": { @@ -6508,10 +6514,10 @@ "integrity": "sha1-ca5KiPD+77v1LR6mBPP7MV67YnQ=", "dev": true, "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "split-string": "3.1.0" }, "dependencies": { "extend-shallow": { @@ -6520,7 +6526,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } } } @@ -6546,7 +6552,7 @@ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "requires": { - "shebang-regex": "^1.0.0" + "shebang-regex": "1.0.0" } }, "shebang-regex": { @@ -6573,14 +6579,14 @@ "integrity": "sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0=", "dev": true, "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" + "base": "0.11.2", + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "map-cache": "0.2.2", + "source-map": "0.5.7", + "source-map-resolve": "0.5.2", + "use": "3.1.1" }, "dependencies": { "define-property": { @@ -6589,7 +6595,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } }, "extend-shallow": { @@ -6598,7 +6604,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } } } @@ -6609,9 +6615,9 @@ "integrity": "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=", "dev": true, "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" + "define-property": "1.0.0", + "isobject": "3.0.1", + "snapdragon-util": "3.0.1" }, "dependencies": { "define-property": { @@ -6620,7 +6626,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "^1.0.0" + "is-descriptor": "1.0.2" } }, "is-accessor-descriptor": { @@ -6629,7 +6635,7 @@ "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-data-descriptor": { @@ -6638,7 +6644,7 @@ "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-descriptor": { @@ -6647,9 +6653,9 @@ "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", "dev": true, "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" } }, "kind-of": { @@ -6666,7 +6672,7 @@ "integrity": "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=", "dev": true, "requires": { - "kind-of": "^3.2.0" + "kind-of": "3.2.2" } }, "sort-keys": { @@ -6675,7 +6681,7 @@ "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", "dev": true, "requires": { - "is-plain-obj": "^1.0.0" + "is-plain-obj": "1.1.0" } }, "source-list-map": { @@ -6696,11 +6702,11 @@ "integrity": "sha1-cuLMNAlVQ+Q7LGKyxMENSpBU8lk=", "dev": true, "requires": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" + "atob": "2.1.2", + "decode-uri-component": "0.2.0", + "resolve-url": "0.2.1", + "source-map-url": "0.4.0", + "urix": "0.1.0" } }, "source-map-support": { @@ -6709,7 +6715,7 @@ "integrity": "sha1-Aoam3ovkJkEzhZTpfM6nXwosWF8=", "dev": true, "requires": { - "source-map": "^0.5.6" + "source-map": "0.5.7" } }, "source-map-url": { @@ -6724,7 +6730,7 @@ "integrity": "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=", "dev": true, "requires": { - "extend-shallow": "^3.0.0" + "extend-shallow": "3.0.2" } }, "sprintf-js": { @@ -6739,7 +6745,7 @@ "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", "dev": true, "requires": { - "figgy-pudding": "^3.5.1" + "figgy-pudding": "3.5.1" } }, "static-extend": { @@ -6748,8 +6754,8 @@ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "dev": true, "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" + "define-property": "0.2.5", + "object-copy": "0.1.0" }, "dependencies": { "define-property": { @@ -6758,7 +6764,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } } } @@ -6779,8 +6785,8 @@ "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", "dev": true, "requires": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" + "end-of-stream": "1.4.1", + "stream-shift": "1.0.0" } }, "stream-http": { @@ -6789,11 +6795,11 @@ "integrity": "sha1-stJCRpKIpaJ+xP6JM6z2I95lFPw=", "dev": true, "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" + "builtin-status-codes": "3.0.0", + "inherits": "2.0.3", + "readable-stream": "2.3.6", + "to-arraybuffer": "1.0.1", + "xtend": "4.0.1" } }, "stream-shift": { @@ -6814,8 +6820,8 @@ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" }, "dependencies": { "ansi-regex": { @@ -6830,7 +6836,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "3.0.0" } } } @@ -6841,7 +6847,7 @@ "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "5.1.2" } }, "strip-ansi": { @@ -6849,7 +6855,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "2.1.1" } }, "strip-eof": { @@ -6864,8 +6870,8 @@ "integrity": "sha1-aMUuXrKvycqStidL4nfuWa6jqFI=", "dev": true, "requires": { - "loader-utils": "^1.1.0", - "schema-utils": "^0.4.5" + "loader-utils": "1.1.0", + "schema-utils": "0.4.5" } }, "supports-color": { @@ -6874,7 +6880,7 @@ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "3.0.0" } }, "svgo": { @@ -6883,13 +6889,13 @@ "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=", "dev": true, "requires": { - "coa": "~1.0.1", - "colors": "~1.1.2", - "csso": "~2.3.1", - "js-yaml": "~3.7.0", - "mkdirp": "~0.5.1", - "sax": "~1.2.1", - "whet.extend": "~0.9.9" + "coa": "1.0.4", + "colors": "1.1.2", + "csso": "2.3.2", + "js-yaml": "3.7.0", + "mkdirp": "0.5.1", + "sax": "1.2.4", + "whet.extend": "0.9.9" } }, "symbol-observable": { @@ -6909,9 +6915,9 @@ "integrity": "sha512-ogyZye4DFqOtMzT92Y3Nxxw8OvXmL39HOALro4fc+EUYFFF9G/kk0znkvwMz6PPYgBtdKAodh3FPR70eugdaQA==", "dev": true, "requires": { - "commander": "~2.17.1", - "source-map": "~0.6.1", - "source-map-support": "~0.5.6" + "commander": "2.17.1", + "source-map": "0.6.1", + "source-map-support": "0.5.9" }, "dependencies": { "commander": { @@ -6932,8 +6938,8 @@ "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==", "dev": true, "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "buffer-from": "1.1.1", + "source-map": "0.6.1" } } } @@ -6944,14 +6950,14 @@ "integrity": "sha512-QW7RACLS89RalHtLDb0s8+Iqcs/IAEw1rnVrV+mS7Gx1kgPG8o1g33JhAGDgc/CQ84hLsTW5WrAMdVysh692yg==", "dev": true, "requires": { - "cacache": "^11.0.2", - "find-cache-dir": "^2.0.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^1.4.0", - "source-map": "^0.6.1", - "terser": "^3.8.1", - "webpack-sources": "^1.1.0", - "worker-farm": "^1.5.2" + "cacache": "11.3.2", + "find-cache-dir": "2.0.0", + "schema-utils": "1.0.0", + "serialize-javascript": "1.6.0", + "source-map": "0.6.1", + "terser": "3.13.1", + "webpack-sources": "1.3.0", + "worker-farm": "1.6.0" }, "dependencies": { "find-cache-dir": { @@ -6960,9 +6966,9 @@ "integrity": "sha512-LDUY6V1Xs5eFskUVYtIwatojt6+9xC9Chnlk/jYOOvn3FAFfSaWddxahDGyNHh0b2dMXa6YW2m0tk8TdVaXHlA==", "dev": true, "requires": { - "commondir": "^1.0.1", - "make-dir": "^1.0.0", - "pkg-dir": "^3.0.0" + "commondir": "1.0.1", + "make-dir": "1.3.0", + "pkg-dir": "3.0.0" } }, "find-up": { @@ -6971,7 +6977,7 @@ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "locate-path": "^3.0.0" + "locate-path": "3.0.0" } }, "locate-path": { @@ -6980,8 +6986,8 @@ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "p-locate": "3.0.0", + "path-exists": "3.0.0" } }, "p-limit": { @@ -6990,7 +6996,7 @@ "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", "dev": true, "requires": { - "p-try": "^2.0.0" + "p-try": "2.0.0" } }, "p-locate": { @@ -6999,7 +7005,7 @@ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "p-limit": "^2.0.0" + "p-limit": "2.1.0" } }, "p-try": { @@ -7014,7 +7020,7 @@ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, "requires": { - "find-up": "^3.0.0" + "find-up": "3.0.0" } }, "schema-utils": { @@ -7023,9 +7029,9 @@ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dev": true, "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" + "ajv": "6.5.2", + "ajv-errors": "1.0.1", + "ajv-keywords": "3.2.0" } }, "source-map": { @@ -7042,8 +7048,8 @@ "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" + "readable-stream": "2.3.6", + "xtend": "4.0.1" } }, "timers-browserify": { @@ -7052,7 +7058,7 @@ "integrity": "sha1-HSjj0qrfHVpZlsTp+VYBzQU0gK4=", "dev": true, "requires": { - "setimmediate": "^1.0.4" + "setimmediate": "1.0.5" } }, "tiny-invariant": { @@ -7083,7 +7089,7 @@ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" } }, "to-regex": { @@ -7092,10 +7098,10 @@ "integrity": "sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4=", "dev": true, "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "regex-not": "1.0.2", + "safe-regex": "1.1.0" } }, "to-regex-range": { @@ -7104,8 +7110,8 @@ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "is-number": "3.0.0", + "repeat-string": "1.6.1" } }, "toposort": { @@ -7149,8 +7155,8 @@ "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", "dev": true, "requires": { - "commander": "~2.17.1", - "source-map": "~0.6.1" + "commander": "2.17.1", + "source-map": "0.6.1" }, "dependencies": { "commander": { @@ -7173,10 +7179,10 @@ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", "dev": true, "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^0.4.3" + "arr-union": "3.1.0", + "get-value": "2.0.6", + "is-extendable": "0.1.1", + "set-value": "0.4.3" }, "dependencies": { "extend-shallow": { @@ -7185,7 +7191,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } }, "set-value": { @@ -7194,10 +7200,10 @@ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", "dev": true, "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "to-object-path": "0.3.0" } } } @@ -7220,7 +7226,7 @@ "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", "dev": true, "requires": { - "unique-slug": "^2.0.0" + "unique-slug": "2.0.1" } }, "unique-slug": { @@ -7229,7 +7235,7 @@ "integrity": "sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==", "dev": true, "requires": { - "imurmurhash": "^0.1.4" + "imurmurhash": "0.1.4" } }, "universalify": { @@ -7243,8 +7249,8 @@ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "dev": true, "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" + "has-value": "0.3.1", + "isobject": "3.0.1" }, "dependencies": { "has-value": { @@ -7253,9 +7259,9 @@ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "dev": true, "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" + "get-value": "2.0.6", + "has-values": "0.1.4", + "isobject": "2.1.0" }, "dependencies": { "isobject": { @@ -7295,7 +7301,7 @@ "integrity": "sha1-lMVA4f93KVbiKZUHwBCupsiDjrA=", "dev": true, "requires": { - "punycode": "^2.1.0" + "punycode": "2.1.1" } }, "urix": { @@ -7355,8 +7361,8 @@ "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", "dev": true, "requires": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" + "define-properties": "1.1.3", + "object.getownpropertydescriptors": "2.0.3" } }, "utila": { @@ -7377,7 +7383,7 @@ "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", "dev": true, "requires": { - "user-home": "^1.1.1" + "user-home": "1.1.1" } }, "value-equal": { @@ -7405,7 +7411,7 @@ "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.1.tgz", "integrity": "sha512-rAVtTNZw+cQPjvGp1ox0XC5Q2IBFyqoqh+QII4J/oguyu83Bax1apbo2eqB8bHRS+fqYUBagys6lqUoVwKSmXQ==", "requires": { - "loose-envify": "^1.0.0" + "loose-envify": "1.3.1" } }, "watchpack": { @@ -7414,9 +7420,9 @@ "integrity": "sha1-S8EsLr6KonenHx0/FNaFx7RGzQA=", "dev": true, "requires": { - "chokidar": "^2.0.2", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0" + "chokidar": "2.0.4", + "graceful-fs": "4.1.11", + "neo-async": "2.6.0" } }, "webpack": { @@ -7429,26 +7435,26 @@ "@webassemblyjs/helper-module-context": "1.7.11", "@webassemblyjs/wasm-edit": "1.7.11", "@webassemblyjs/wasm-parser": "1.7.11", - "acorn": "^5.6.2", - "acorn-dynamic-import": "^3.0.0", - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0", - "chrome-trace-event": "^1.0.0", - "enhanced-resolve": "^4.1.0", - "eslint-scope": "^4.0.0", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.3.0", - "loader-utils": "^1.1.0", - "memory-fs": "~0.4.1", - "micromatch": "^3.1.8", - "mkdirp": "~0.5.0", - "neo-async": "^2.5.0", - "node-libs-browser": "^2.0.0", - "schema-utils": "^0.4.4", - "tapable": "^1.1.0", - "terser-webpack-plugin": "^1.1.0", - "watchpack": "^1.5.0", - "webpack-sources": "^1.3.0" + "acorn": "5.7.3", + "acorn-dynamic-import": "3.0.0", + "ajv": "6.5.2", + "ajv-keywords": "3.2.0", + "chrome-trace-event": "1.0.0", + "enhanced-resolve": "4.1.0", + "eslint-scope": "4.0.0", + "json-parse-better-errors": "1.0.2", + "loader-runner": "2.3.1", + "loader-utils": "1.1.0", + "memory-fs": "0.4.1", + "micromatch": "3.1.10", + "mkdirp": "0.5.1", + "neo-async": "2.6.0", + "node-libs-browser": "2.1.0", + "schema-utils": "0.4.5", + "tapable": "1.1.1", + "terser-webpack-plugin": "1.2.0", + "watchpack": "1.6.0", + "webpack-sources": "1.3.0" } }, "webpack-cli": { @@ -7457,16 +7463,16 @@ "integrity": "sha512-Cnqo7CeqeSvC6PTdts+dywNi5CRlIPbLx1AoUPK2T6vC1YAugMG3IOoO9DmEscd+Dghw7uRlnzV1KwOe5IrtgQ==", "dev": true, "requires": { - "chalk": "^2.4.1", - "cross-spawn": "^6.0.5", - "enhanced-resolve": "^4.1.0", - "global-modules-path": "^2.3.0", - "import-local": "^2.0.0", - "interpret": "^1.1.0", - "loader-utils": "^1.1.0", - "supports-color": "^5.5.0", - "v8-compile-cache": "^2.0.2", - "yargs": "^12.0.2" + "chalk": "2.4.1", + "cross-spawn": "6.0.5", + "enhanced-resolve": "4.1.0", + "global-modules-path": "2.3.1", + "import-local": "2.0.0", + "interpret": "1.1.0", + "loader-utils": "1.1.0", + "supports-color": "5.5.0", + "v8-compile-cache": "2.0.2", + "yargs": "12.0.5" }, "dependencies": { "ansi-styles": { @@ -7475,7 +7481,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "^1.9.0" + "color-convert": "1.9.2" } }, "chalk": { @@ -7484,9 +7490,9 @@ "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.5.0" } } } @@ -7497,8 +7503,8 @@ "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==", "dev": true, "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" + "source-list-map": "2.0.0", + "source-map": "0.6.1" }, "dependencies": { "source-map": { @@ -7526,7 +7532,7 @@ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { - "isexe": "^2.0.0" + "isexe": "2.0.0" } }, "which-module": { @@ -7540,12 +7546,12 @@ "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-2.1.3.tgz", "integrity": "sha1-qBYZRtP4W4zCWQ3TpRnVPUD/igY=", "requires": { - "chalk": "^1.1.3", - "fs-extra": "^3.0.1", - "glob": "^7.1.1", - "lodash.template": "^4.4.0", - "mkdirp": "^0.5.1", - "workbox-sw": "^2.1.3" + "chalk": "1.1.3", + "fs-extra": "3.0.1", + "glob": "7.1.2", + "lodash.template": "4.4.0", + "mkdirp": "0.5.1", + "workbox-sw": "2.1.3" } }, "workbox-sw": { @@ -7558,7 +7564,7 @@ "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-2.1.3.tgz", "integrity": "sha1-5N6UgYzO9vZnsfX0GM5aEGHajTM=", "requires": { - "workbox-build": "^2.1.3" + "workbox-build": "2.1.3" } }, "worker-farm": { @@ -7567,7 +7573,7 @@ "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", "dev": true, "requires": { - "errno": "~0.1.7" + "errno": "0.1.7" } }, "wrap-ansi": { @@ -7576,8 +7582,8 @@ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" + "string-width": "1.0.2", + "strip-ansi": "3.0.1" }, "dependencies": { "is-fullwidth-code-point": { @@ -7586,7 +7592,7 @@ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "number-is-nan": "1.0.1" } }, "string-width": { @@ -7595,9 +7601,9 @@ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" } } } @@ -7631,18 +7637,18 @@ "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", "dev": true, "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.2.0", - "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^11.1.1" + "cliui": "4.1.0", + "decamelize": "1.2.0", + "find-up": "3.0.0", + "get-caller-file": "1.0.3", + "os-locale": "3.0.1", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", + "y18n": "4.0.0", + "yargs-parser": "11.1.1" }, "dependencies": { "find-up": { @@ -7651,7 +7657,7 @@ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "locate-path": "^3.0.0" + "locate-path": "3.0.0" } }, "locate-path": { @@ -7660,8 +7666,8 @@ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "p-locate": "3.0.0", + "path-exists": "3.0.0" } }, "p-limit": { @@ -7670,7 +7676,7 @@ "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", "dev": true, "requires": { - "p-try": "^2.0.0" + "p-try": "2.0.0" } }, "p-locate": { @@ -7679,7 +7685,7 @@ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "p-limit": "^2.0.0" + "p-limit": "2.1.0" } }, "p-try": { @@ -7696,8 +7702,8 @@ "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", "dev": true, "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" + "camelcase": "5.0.0", + "decamelize": "1.2.0" } } } diff --git a/package.json b/package.json index 09ca4d97..b195a95c 100644 --- a/package.json +++ b/package.json @@ -48,6 +48,7 @@ "babel-preset-stage-0": "^6.24.1", "babel-register": "^6.26.0", "css-loader": "^0.28.11", + "es6-set-and-map": "^1.0.5", "html-webpack-plugin": "^3.2.0", "less-loader": "^4.1.0", "rimraf": "^2.6.3", diff --git a/src/main/java/com/enonic/xp/react4xp/ScriptDependencyParser.java b/src/main/java/com/enonic/xp/react4xp/ChunkDependencyParser.java similarity index 98% rename from src/main/java/com/enonic/xp/react4xp/ScriptDependencyParser.java rename to src/main/java/com/enonic/xp/react4xp/ChunkDependencyParser.java index c383b2b7..a73e31be 100644 --- a/src/main/java/com/enonic/xp/react4xp/ScriptDependencyParser.java +++ b/src/main/java/com/enonic/xp/react4xp/ChunkDependencyParser.java @@ -9,7 +9,7 @@ import java.util.LinkedList; import java.util.List; -public class ScriptDependencyParser { +public class ChunkDependencyParser { private final static String CHUNKFILE_MAINKEY = "chunks"; private final static String CHUNKFILE_ENTRYKEY = "entry"; private final static List CHUNK_KEYS = Arrays.asList( diff --git a/src/main/java/com/enonic/xp/react4xp/Polyfills.java b/src/main/java/com/enonic/xp/react4xp/Polyfills.java new file mode 100644 index 00000000..e9eb3ff0 --- /dev/null +++ b/src/main/java/com/enonic/xp/react4xp/Polyfills.java @@ -0,0 +1,111 @@ +package com.enonic.xp.react4xp; + +public class Polyfills { + + public final static String POLYFILL_BASICS = "" + + "if (typeof exports === 'undefined') { var exports = {}; }\n" + + "if (typeof global === 'undefined') { var global = this; }\n" + + "if (typeof window === 'undefined') { var window = this; }\n" + + "if (typeof process === 'undefined') { var process = {env:{}}; }\n" + + "if (typeof console === 'undefined') { var console = {}; }\n" + + "console.debug = print;\n" + + "console.log = print;\n" + + "console.warn = print;\n" + + "console.error = print;"; + +} + + /* For reference: the following is now replaced by transpiled code, read from transpiled file: _nashornPolyfills_.js + + + // Polyfilling setTimeout() and friends: + // https://gist.github.com/josmardias/20493bd205e24e31c0a406472330515a + // + // TODO: Are we gonna have a problem? + // At least one timeout needs to be set, larger then your code bootstrap + // or Nashorn will run forever + // preferably, put a timeout 0 after your code bootstrap + public final static String POLYFILL_TIMERS = "(function(context) {\n" + + " 'use strict';\n" + + "\n" + + " var Timer = Java.type('java.util.Timer');\n" + + " var Phaser = Java.type('java.util.concurrent.Phaser');\n" + + "\n" + + " var timer = new Timer('jsEventLoop', false);\n" + + " var phaser = new Phaser();\n" + + "\n" + + " var timeoutStack = 0;\n" + + " function pushTimeout() {\n" + + " timeoutStack++;\n" + + " }\n" + + " function popTimeout() {\n" + + " timeoutStack--;\n" + + " if (timeoutStack > 0) {\n" + + " return;\n" + + " }\n" + + " timer.cancel();\n" + + " phaser.forceTermination();\n" + + " }\n" + + "\n" + + " var onTaskFinished = function() {\n" + + " phaser.arriveAndDeregister();\n" + + " };\n" + + "\n" + + " context.setTimeout = function(fn, millis) {\n" + + " var args = [].slice.call(arguments, 2, arguments.length);\n" + + "\n" + + " var phase = phaser.register();\n" + + " var canceled = false;\n" + + " timer.schedule(function() {\n" + + " if (canceled) {\n" + + " return;\n" + + " }\n" + + "\n" + + " try {\n" + + " fn.apply(context, args);\n" + + " } catch (e) {\n" + + " print(e);\n" + + " } finally {\n" + + " onTaskFinished();\n" + + " popTimeout();\n" + + " }\n" + + " }, millis);\n" + + "\n" + + " pushTimeout();\n" + + "\n" + + " return function() {\n" + + " onTaskFinished();\n" + + " canceled = true;\n" + + " popTimeout();\n" + + " };\n" + + " };\n" + + "\n" + + " context.clearTimeout = function(cancel) {\n" + + " cancel();\n" + + " };\n" + + "\n" + + " context.setInterval = function(fn, delay) {\n" + + " var args = [].slice.call(arguments, 2, arguments.length);\n" + + "\n" + + " var cancel = null;\n" + + "\n" + + " var loop = function() {\n" + + " cancel = context.setTimeout(loop, delay);\n" + + " fn.apply(context, args);\n" + + " };\n" + + "\n" + + " cancel = context.setTimeout(loop, delay);\n" + + " return function() {\n" + + " cancel();\n" + + " };\n" + + " };\n" + + "\n" + + " context.clearInterval = function(cancel) {\n" + + " cancel();\n" + + " };\n" + + "\n" + + "})(this);"; + +//public static final String POLYFILL_SET_AND_MAP = "!function(t){var n={};function e(i){if(n[i])return n[i].exports;var r=n[i]={i:i,l:!1,exports:{}};return t[i].call(r.exports,r,r.exports,e),r.l=!0,r.exports}e.m=t,e.c=n,e.d=function(t,n,i){e.o(t,n)||Object.defineProperty(t,n,{enumerable:!0,get:i})},e.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},e.t=function(t,n){if(1&n&&(t=e(t)),8&n)return t;if(4&n&&\"object\"==typeof t&&t&&t.__esModule)return t;var i=Object.create(null);if(e.r(i),Object.defineProperty(i,\"default\",{enumerable:!0,value:t}),2&n&&\"string\"!=typeof t)for(var r in t)e.d(i,r,function(n){return t[n]}.bind(null,r));return i},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,\"a\",n),n},e.o=function(t,n){return Object.prototype.hasOwnProperty.call(t,n)},e.p=\"\",e(e.s=22)}({0:function(t,n){var e;e=function(){return this}();try{e=e||new Function(\"return this\")()}catch(t){\"object\"==typeof window&&(e=window)}t.exports=e},22:function(t,n,e){\"use strict\";(function(t){var n=e(6).map,i=e(6).set;!function(t){t.Map=n,t.Set=i}(\"undefined\"!=typeof window?window:t)}).call(this,e(0))},6:function(t,n,e){t.exports=function(){\"use strict\";var t,n={},e=\"undefined\"!=typeof Symbol,i=Array.prototype,r=(t={}.hasOwnProperty,function(n,e){return!!e&&t.call(n,e)}),u=Array.isArray;function s(t){return null!=t&&(\"function\"==typeof t||\"object\"==typeof t)}function o(t){return!isNaN(t)&&t+0===t}var l,c,a,h=(c=Function.prototype,function(t){return\"function\"==typeof t&&t!=c});function f(t){if(!s(t)||h(t)||null!=(n=t)&&n===n.window)return!1;var n,e=!!t&&\"length\"in t&&t.length;return u(t)||0===e||o(e)&&e>0&&e-1 in t}function p(t,n,e){var i,r,u=[],s=t.length;if(n=(n=n||0)>=0?n:Math.max(0,s+n),(e=isNaN(e)?s:Math.min(e,s))<0&&(e=s+e),(r=e-n)>0)for(u=new Array(r),i=0;i 0) {\n" + - " return;\n" + - " }\n" + - " timer.cancel();\n" + - " phaser.forceTermination();\n" + - " }\n" + - "\n" + - " var onTaskFinished = function() {\n" + - " phaser.arriveAndDeregister();\n" + - " };\n" + - "\n" + - " context.setTimeout = function(fn, millis /* [, args...] */) {\n" + - " var args = [].slice.call(arguments, 2, arguments.length);\n" + - "\n" + - " var phase = phaser.register();\n" + - " var canceled = false;\n" + - " timer.schedule(function() {\n" + - " if (canceled) {\n" + - " return;\n" + - " }\n" + - "\n" + - " try {\n" + - " fn.apply(context, args);\n" + - " } catch (e) {\n" + - " print(e);\n" + - " } finally {\n" + - " onTaskFinished();\n" + - " popTimeout();\n" + - " }\n" + - " }, millis);\n" + - "\n" + - " pushTimeout();\n" + - "\n" + - " return function() {\n" + - " onTaskFinished();\n" + - " canceled = true;\n" + - " popTimeout();\n" + - " };\n" + - " };\n" + - "\n" + - " context.clearTimeout = function(cancel) {\n" + - " cancel();\n" + - " };\n" + - "\n" + - " context.setInterval = function(fn, delay /* [, args...] */) {\n" + - " var args = [].slice.call(arguments, 2, arguments.length);\n" + - "\n" + - " var cancel = null;\n" + - "\n" + - " var loop = function() {\n" + - " cancel = context.setTimeout(loop, delay);\n" + - " fn.apply(context, args);\n" + - " };\n" + - "\n" + - " cancel = context.setTimeout(loop, delay);\n" + - " return function() {\n" + - " cancel();\n" + - " };\n" + - " };\n" + - "\n" + - " context.clearInterval = function(cancel) {\n" + - " cancel();\n" + - " };\n" + - "\n" + - "})(this);"; +import static com.enonic.xp.react4xp.Polyfills.POLYFILL_BASICS; + +public class React4xp { private final static String CHUNKFILES_HOME = "/react4xp/"; private final static String SCRIPTS_HOME = "/react4xp/"; + // Sequence matters! These scripts are run in this order, + // scripts found in polyfill.json must come first, and components last! private final static List CHUNK_FILES = Arrays.asList( + CHUNKFILES_HOME + "chunks.nashornPolyfills.json", CHUNKFILES_HOME + "chunks.externals.json", CHUNKFILES_HOME + "chunks.core.json", CHUNKFILES_HOME + "chunks.components.json" @@ -127,12 +31,14 @@ public void test() throws IOException { try { NashornScriptEngine engine = (NashornScriptEngine)new ScriptEngineManager().getEngineByName("nashorn"); - engine.eval(NASHORN_POLYFILL); + engine.eval(POLYFILL_BASICS); + //engine.eval(POLYFILL_TIMERS); - List dependencyScripts = new ScriptDependencyParser().getScriptDependencies(CHUNK_FILES); + List dependencyScripts = new ChunkDependencyParser().getScriptDependencies(CHUNK_FILES); for (String scriptFile : dependencyScripts) { System.out.println("\tReading and running script: " + SCRIPTS_HOME + scriptFile); String script = ResourceHandler.readResource(SCRIPTS_HOME + scriptFile); + engine.eval(script); } @@ -150,9 +56,3 @@ public void test() throws IOException { } } } - -/* -react4xp/vendors.0743d21ce.js -react4xp/common.70ca71244.js -components.a0a62a368.js -*/ diff --git a/src/main/react4xp/_nashornPolyfills_.es6 b/src/main/react4xp/_nashornPolyfills_.es6 new file mode 100644 index 00000000..9e83c707 --- /dev/null +++ b/src/main/react4xp/_nashornPolyfills_.es6 @@ -0,0 +1,101 @@ +// A basic level ov polyfilling has already been done in Nashorn by the time it runs the following code (transpiled) . +// So some basics are expected to already be polyfilled: exports, global, window, process, console. + +// Polyfills Set an Map: +var Map = require( 'es6-set-and-map' ).map; +var Set = require( 'es6-set-and-map' ).set; + +(function(window) { + window.Map = Map; + window.Set = Set; +} )(typeof window !== 'undefined' ? window : global); + + + +// Polyfills setTimeout() and friends: +// https://gist.github.com/josmardias/20493bd205e24e31c0a406472330515a +// +// TODO: Are we gonna have a problem? +// At least one timeout needs to be set, larger then your code bootstrap +// or Nashorn will run forever +// preferably, put a timeout 0 after your code bootstrap +(function(context) { + 'use strict'; + + var Timer = Java.type('java.util.Timer'); + var Phaser = Java.type('java.util.concurrent.Phaser'); + + var timer = new Timer('jsEventLoop', false); + var phaser = new Phaser(); + + var timeoutStack = 0; + function pushTimeout() { + timeoutStack++; + } + function popTimeout() { + timeoutStack--; + if (timeoutStack > 0) { + return; + } + timer.cancel(); + phaser.forceTermination(); + } + + var onTaskFinished = function() { + phaser.arriveAndDeregister(); + }; + + context.setTimeout = function(fn, millis /* [, args...] */) { + var args = [].slice.call(arguments, 2, arguments.length); + + var phase = phaser.register(); + var canceled = false; + timer.schedule(function() { + if (canceled) { + return; + } + + try { + fn.apply(context, args); + } catch (e) { + print(e); + } finally { + onTaskFinished(); + popTimeout(); + } + }, millis); + + pushTimeout(); + + return function() { + onTaskFinished(); + canceled = true; + popTimeout(); + }; + }; + + context.clearTimeout = function(cancel) { + cancel(); + }; + + context.setInterval = function(fn, delay /* [, args...] */) { + var args = [].slice.call(arguments, 2, arguments.length); + + var cancel = null; + + var loop = function() { + cancel = context.setTimeout(loop, delay); + fn.apply(context, args); + }; + + cancel = context.setTimeout(loop, delay); + return function() { + cancel(); + }; + }; + + context.clearInterval = function(cancel) { + cancel(); + }; + +})(typeof window !== 'undefined' ? window : global); diff --git a/src/main/react4xp/chunks.nashornPolyfills.json.ejs b/src/main/react4xp/chunks.nashornPolyfills.json.ejs new file mode 100644 index 00000000..a9a8a3c2 --- /dev/null +++ b/src/main/react4xp/chunks.nashornPolyfills.json.ejs @@ -0,0 +1,8 @@ +{ + "chunks": { + "headEnd": [ + {"name": "nashornPolyfills", "entry": "<%= htmlWebpackPlugin.files.chunks.nashornPolyfills.entry %>"} + ], + "bodyEnd": [] + } +} diff --git a/webpack.config.react4xp.externals.js b/webpack.config.react4xp.externals.js index 54d17793..d665d562 100644 --- a/webpack.config.react4xp.externals.js +++ b/webpack.config.react4xp.externals.js @@ -15,7 +15,11 @@ module.exports = { mode: BUILD_ENV, entry: { - 'externals': path.join(SRC_R4X, '_AUTOGENERATED_externals_.es6'), // Built during the gradle step that triggers this webpack step: webpack_r4xp_externals + // Built during the gradle step that triggers this webpack step: webpack_r4xp_externals + 'externals': path.join(SRC_R4X, '_AUTOGENERATED_externals_.es6'), + + // TODO: nashorn polyfills don't need content hashing. This works for now, but should dispense with the whole frontend cache-busting-hash-in-the-filename and find-the-hashed-filename-through-chunkJsonFile. Can this be dispensed with without making yet another separate webpack step? + 'nashornPolyfills': path.join(SRC_R4X, '_nashornPolyfills_.es6') }, output: { @@ -46,5 +50,13 @@ module.exports = { template: path.join(SRC_R4X, 'chunks.externals.json.ejs'), filename: path.join(BUILD_R4X, 'chunks.externals.json') }), + + // TODO: nashorn polyfills don't need content hashing. This works for now, but should dispense with the whole frontend cache-busting-hash-in-the-filename and find-the-hashed-filename-through-chunkJsonFile. Can this be dispensed with without making yet another separate webpack step? + new HtmlWebpackPlugin({ + inject: false, + hash: false, + template: path.join(SRC_R4X, 'chunks.nashornPolyfills.json.ejs'), + filename: path.join(BUILD_R4X, 'chunks.nashornPolyfills.json') + }), ], }; From 70aa88a72657ce942d996492ff4324321668eaf5 Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Sun, 20 Jan 2019 21:43:17 +0100 Subject: [PATCH 54/96] It worked! ReactDOMServer.renderToString worked! I am a demi-god! Now what? --- build.gradle | 7 ++++++- .../java/com/enonic/xp/react4xp/React4xp.java | 21 ++++++++++++------- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/build.gradle b/build.gradle index bfe18a5e..5e2a2db9 100644 --- a/build.gradle +++ b/build.gradle @@ -89,9 +89,14 @@ task webpack_r4xp_externals(type: NodeTask) { def externalsImports = ""; def externalsExports = ""; exts.each{ k, v -> externalsImports += "import ${v} from '${k}';\n" } + //exts.each{ k, v -> externalsImports += "console.log('${v}: ' + ${v});\n" } exts.each{ k, v -> externalsExports += "\twindow.${v} = ${v};\n" } - def externalsES6 = "// AUTO-GENERATED in gradle task 'webpack_r4xp_externals'\n\n" + externalsImports + "\n(function(window) {\n" + externalsExports + "} )(typeof window !== 'undefined' ? window : global);\n" + def externalsES6 = "// AUTO-GENERATED in gradle task 'webpack_r4xp_externals'\n\n" + + externalsImports + + "\n(function(window) {\n" + + externalsExports + + "} )(typeof window !== 'undefined' ? window : global);\n" def externalsFile = new File('src/main/react4xp/_AUTOGENERATED_externals_.es6') externalsFile.write externalsES6 diff --git a/src/main/java/com/enonic/xp/react4xp/React4xp.java b/src/main/java/com/enonic/xp/react4xp/React4xp.java index 57bef8c4..6528c1ce 100644 --- a/src/main/java/com/enonic/xp/react4xp/React4xp.java +++ b/src/main/java/com/enonic/xp/react4xp/React4xp.java @@ -20,11 +20,10 @@ public class React4xp { private final static List CHUNK_FILES = Arrays.asList( CHUNKFILES_HOME + "chunks.nashornPolyfills.json", CHUNKFILES_HOME + "chunks.externals.json", - CHUNKFILES_HOME + "chunks.core.json", + //CHUNKFILES_HOME + "chunks.core.json", CHUNKFILES_HOME + "chunks.components.json" ); - public void test() throws IOException { System.out.println("\n\n\n############################################# Running nashorn test...\n\n\n"); @@ -42,14 +41,20 @@ public void test() throws IOException { engine.eval(script); } - engine.eval("k = 42;"); - //engine.eval(backendReact); - //engine.eval(backendReactDOMServer); + ///////////////////////////////////////////////////////////// + + String testComponent = ResourceHandler.readResource(SCRIPTS_HOME + "site/parts/simple-reactive/simple-reactive.js"); + engine.eval(testComponent); + engine.eval("console.log(Object.keys(React4xp));"); + engine.eval("var props = {insertedMessage: \"fra den simple kontrolleren!\"};"); + + engine.eval("var Component = React4xp['site/parts/simple-reactive/simple-reactive'].default;"); + engine.eval("console.log('Component: ' + Component);"); - engine.eval("console.log('Howdy world!');"); - engine.eval("console.log(k);"); + engine.eval("console.log('ReactDOMServer: ' + JSON.stringify(Object.keys(ReactDOMServer), null, 2));"); + engine.eval("var rendered = ReactDOMServer.renderToString(Component(props));"); + engine.eval("console.log(rendered);"); - engine.eval("console.log(Object.keys(exports));"); } catch (ScriptException e) { e.printStackTrace(); From 5bac2674c573a0c2e46c2a7c77664d537adeaf0c Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Sun, 20 Jan 2019 22:23:16 +0100 Subject: [PATCH 55/96] SSR renderToStaticMarkup works. Returns rendered HTML to frontend. Wrapped for simple use from the component. --- .../java/com/enonic/xp/react4xp/React4xp.java | 33 +++++++++++-------- .../resources/lib/enonic/react4xp/index.es6 | 14 ++++---- .../complex-reactive/complex-reactive.es6 | 2 ++ src/main/resources/site/parts/ssr/ssr.es6 | 12 ++++--- 4 files changed, 35 insertions(+), 26 deletions(-) diff --git a/src/main/java/com/enonic/xp/react4xp/React4xp.java b/src/main/java/com/enonic/xp/react4xp/React4xp.java index 6528c1ce..f95564de 100644 --- a/src/main/java/com/enonic/xp/react4xp/React4xp.java +++ b/src/main/java/com/enonic/xp/react4xp/React4xp.java @@ -1,6 +1,7 @@ package com.enonic.xp.react4xp; import jdk.nashorn.api.scripting.NashornScriptEngine; +import jdk.nashorn.api.scripting.ScriptObjectMirror; import javax.script.ScriptEngineManager; import javax.script.ScriptException; @@ -20,18 +21,20 @@ public class React4xp { private final static List CHUNK_FILES = Arrays.asList( CHUNKFILES_HOME + "chunks.nashornPolyfills.json", CHUNKFILES_HOME + "chunks.externals.json", - //CHUNKFILES_HOME + "chunks.core.json", CHUNKFILES_HOME + "chunks.components.json" ); - public void test() throws IOException { + + // Examples: + // component: "site/parts/simple-reactive/simple-reactive" + // props: "{\"insertedMessage\": \"fra den simple kontrolleren!\"}" + public String renderToStaticMarkup(String component, String props) throws IOException { System.out.println("\n\n\n############################################# Running nashorn test...\n\n\n"); try { NashornScriptEngine engine = (NashornScriptEngine)new ScriptEngineManager().getEngineByName("nashorn"); engine.eval(POLYFILL_BASICS); - //engine.eval(POLYFILL_TIMERS); List dependencyScripts = new ChunkDependencyParser().getScriptDependencies(CHUNK_FILES); for (String scriptFile : dependencyScripts) { @@ -43,21 +46,23 @@ public void test() throws IOException { ///////////////////////////////////////////////////////////// - String testComponent = ResourceHandler.readResource(SCRIPTS_HOME + "site/parts/simple-reactive/simple-reactive.js"); - engine.eval(testComponent); - engine.eval("console.log(Object.keys(React4xp));"); - engine.eval("var props = {insertedMessage: \"fra den simple kontrolleren!\"};"); - - engine.eval("var Component = React4xp['site/parts/simple-reactive/simple-reactive'].default;"); - engine.eval("console.log('Component: ' + Component);"); - - engine.eval("console.log('ReactDOMServer: ' + JSON.stringify(Object.keys(ReactDOMServer), null, 2));"); - engine.eval("var rendered = ReactDOMServer.renderToString(Component(props));"); - engine.eval("console.log(rendered);"); + engine.eval(ResourceHandler.readResource(SCRIPTS_HOME + component + ".js")); + engine.eval("" + // + "console.log(Object.keys(React4xp));" + + "var props = " + props + ";" + + "var Component = React4xp['" + component + "'].default;" + // + "console.log('Component: ' + Component);" + // + "console.log('ReactDOMServer: ' + JSON.stringify(Object.keys(ReactDOMServer), null, 2));" + + "var obj = { rendered: ReactDOMServer.renderToStaticMarkup(Component(props)) };" + // + "console.log(obj.rendered);" + ); + ScriptObjectMirror obj = (ScriptObjectMirror)engine.eval("obj;"); + return (String)obj.get("rendered"); } catch (ScriptException e) { e.printStackTrace(); + return e.getMessage(); } } } diff --git a/src/main/resources/lib/enonic/react4xp/index.es6 b/src/main/resources/lib/enonic/react4xp/index.es6 index 92a0c602..ede7afd2 100644 --- a/src/main/resources/lib/enonic/react4xp/index.es6 +++ b/src/main/resources/lib/enonic/react4xp/index.es6 @@ -1,6 +1,6 @@ const ioLib = require('/lib/xp/io'); const utilLib = require('/lib/enonic/util'); -const htmlInserter = __.newBean('com.enonic.xp.htmlinserter.HtmlInserter'); +const HTMLinserter = __.newBean('com.enonic.xp.htmlinserter.HtmlInserter'); const SSRreact4xp = __.newBean('com.enonic.xp.react4xp.React4xp'); @@ -179,7 +179,7 @@ class React4xp { // If there is a body but it's missing a target container element: // Make a container and insert it right before the closing tag. if (!bodyHasContainer(body, this.react4xpId)) { - return htmlInserter.insertAtEndOfRoot(body, getContainer(this.react4xpId)); + return HTMLinserter.insertAtEndOfRoot(body, getContainer(this.react4xpId)); } return body; @@ -208,6 +208,9 @@ class React4xp { }; + renderToStaticMarkup = () => SSRreact4xp.renderToStaticMarkup(this.jsxPath, JSON.stringify(this.props)); + + @@ -233,12 +236,7 @@ class React4xp { body: react4xp.getBody(body), pageContributions: react4xp.getPageContributions(pageContributions) } - } - - - static testSSR = () => { - SSRreact4xp.test(); - } + }; } module.exports = React4xp; diff --git a/src/main/resources/site/parts/complex-reactive/complex-reactive.es6 b/src/main/resources/site/parts/complex-reactive/complex-reactive.es6 index 5f8ddbba..925423fd 100644 --- a/src/main/resources/site/parts/complex-reactive/complex-reactive.es6 +++ b/src/main/resources/site/parts/complex-reactive/complex-reactive.es6 @@ -10,6 +10,8 @@ const view = resolve('complex-reactive.html'); //const config = component.config; + + // Handle the GET request exports.get = function(req) { log.info("complex-reactive request: " + JSON.stringify(req, null, 2)); diff --git a/src/main/resources/site/parts/ssr/ssr.es6 b/src/main/resources/site/parts/ssr/ssr.es6 index 411cc486..b26a7dd8 100644 --- a/src/main/resources/site/parts/ssr/ssr.es6 +++ b/src/main/resources/site/parts/ssr/ssr.es6 @@ -6,11 +6,15 @@ const React4xp = require('/lib/enonic/react4xp'); exports.get = (req) => { - - React4xp.testSSR(); - + const comp = new React4xp({ + jsxPath: 'site/parts/simple-reactive/simple-reactive', + react4xpId: 'thirdReact4xp', + props: { + insertedMessage: "- easy peasy lemon squeezy!" + } + }); return { - body: "OK" + body: comp.renderToStaticMarkup() }; }; From 72203f7c5f7922483bde83d8811261ff65c70607 Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Sun, 20 Jan 2019 22:42:35 +0100 Subject: [PATCH 56/96] SSR Engine refactoring, single instance pattern. Todo: make component library, adding components on first use, and re-using on demand. --- .../{Polyfills.java => EngineFactory.java} | 56 +++++++++++++++++-- .../java/com/enonic/xp/react4xp/React4xp.java | 35 ++---------- 2 files changed, 54 insertions(+), 37 deletions(-) rename src/main/java/com/enonic/xp/react4xp/{Polyfills.java => EngineFactory.java} (87%) diff --git a/src/main/java/com/enonic/xp/react4xp/Polyfills.java b/src/main/java/com/enonic/xp/react4xp/EngineFactory.java similarity index 87% rename from src/main/java/com/enonic/xp/react4xp/Polyfills.java rename to src/main/java/com/enonic/xp/react4xp/EngineFactory.java index e9eb3ff0..b3b11335 100644 --- a/src/main/java/com/enonic/xp/react4xp/Polyfills.java +++ b/src/main/java/com/enonic/xp/react4xp/EngineFactory.java @@ -1,8 +1,17 @@ package com.enonic.xp.react4xp; -public class Polyfills { +import jdk.nashorn.api.scripting.NashornScriptEngine; - public final static String POLYFILL_BASICS = "" + +import javax.script.ScriptEngineManager; +import javax.script.ScriptException; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; + +import static com.enonic.xp.react4xp.React4xp.SCRIPTS_HOME; + +public class EngineFactory { + private final static String POLYFILL_BASICS = "" + "if (typeof exports === 'undefined') { var exports = {}; }\n" + "if (typeof global === 'undefined') { var global = this; }\n" + "if (typeof window === 'undefined') { var window = this; }\n" + @@ -13,18 +22,53 @@ public class Polyfills { "console.warn = print;\n" + "console.error = print;"; + private final static String CHUNKFILES_HOME = "/react4xp/"; + + + // Sequence matters! These engine initialization scripts are run in this order, + // scripts found in chunks.polyfill.json must come first, and chunks.components.json last! + private final static List CHUNK_FILES = Arrays.asList( + CHUNKFILES_HOME + "chunks.nashornPolyfills.json", + CHUNKFILES_HOME + "chunks.externals.json", + CHUNKFILES_HOME + "chunks.components.json" + ); + + private static NashornScriptEngine engineInstance = null; + + public static NashornScriptEngine getEngine() throws ScriptException, IOException { + if (engineInstance == null) { + engineInstance = (NashornScriptEngine)new ScriptEngineManager().getEngineByName("nashorn"); + engineInstance.eval(POLYFILL_BASICS); + + List dependencyScripts = new ChunkDependencyParser().getScriptDependencies(CHUNK_FILES); + for (String scriptFile : dependencyScripts) { + System.out.println("\tNashorn init script: " + SCRIPTS_HOME + scriptFile); + String script = ResourceHandler.readResource(SCRIPTS_HOME + scriptFile); + engineInstance.eval(script); + } + } + return engineInstance; + } } + + + + + + + + + + + /* For reference: the following is now replaced by transpiled code, read from transpiled file: _nashornPolyfills_.js + // Polyfilling setTimeout() and friends: // https://gist.github.com/josmardias/20493bd205e24e31c0a406472330515a // - // TODO: Are we gonna have a problem? - // At least one timeout needs to be set, larger then your code bootstrap - // or Nashorn will run forever - // preferably, put a timeout 0 after your code bootstrap public final static String POLYFILL_TIMERS = "(function(context) {\n" + " 'use strict';\n" + "\n" + diff --git a/src/main/java/com/enonic/xp/react4xp/React4xp.java b/src/main/java/com/enonic/xp/react4xp/React4xp.java index f95564de..ec761f8f 100644 --- a/src/main/java/com/enonic/xp/react4xp/React4xp.java +++ b/src/main/java/com/enonic/xp/react4xp/React4xp.java @@ -3,49 +3,22 @@ import jdk.nashorn.api.scripting.NashornScriptEngine; import jdk.nashorn.api.scripting.ScriptObjectMirror; -import javax.script.ScriptEngineManager; import javax.script.ScriptException; import java.io.IOException; -import java.util.Arrays; -import java.util.List; - -import static com.enonic.xp.react4xp.Polyfills.POLYFILL_BASICS; public class React4xp { - private final static String CHUNKFILES_HOME = "/react4xp/"; - private final static String SCRIPTS_HOME = "/react4xp/"; - - // Sequence matters! These scripts are run in this order, - // scripts found in polyfill.json must come first, and components last! - private final static List CHUNK_FILES = Arrays.asList( - CHUNKFILES_HOME + "chunks.nashornPolyfills.json", - CHUNKFILES_HOME + "chunks.externals.json", - CHUNKFILES_HOME + "chunks.components.json" - ); - + public final static String SCRIPTS_HOME = "/react4xp/"; // Examples: // component: "site/parts/simple-reactive/simple-reactive" // props: "{\"insertedMessage\": \"fra den simple kontrolleren!\"}" public String renderToStaticMarkup(String component, String props) throws IOException { - System.out.println("\n\n\n############################################# Running nashorn test...\n\n\n"); - try { + NashornScriptEngine engine = EngineFactory.getEngine(); - NashornScriptEngine engine = (NashornScriptEngine)new ScriptEngineManager().getEngineByName("nashorn"); - engine.eval(POLYFILL_BASICS); - - List dependencyScripts = new ChunkDependencyParser().getScriptDependencies(CHUNK_FILES); - for (String scriptFile : dependencyScripts) { - System.out.println("\tReading and running script: " + SCRIPTS_HOME + scriptFile); - String script = ResourceHandler.readResource(SCRIPTS_HOME + scriptFile); - - engine.eval(script); - } - - ///////////////////////////////////////////////////////////// - + // TODO: Make function library where (props)=> component functions are stored in the engine, on first use + engine.eval(ResourceHandler.readResource(SCRIPTS_HOME + component + ".js")); engine.eval("" // + "console.log(Object.keys(React4xp));" From bca49438c0252f68ddb9ba72abb87d464a4c832f Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Mon, 21 Jan 2019 00:37:49 +0100 Subject: [PATCH 57/96] Only initializing engine and components once, storing components as functions(props) by component name. Big performance gain. But will the engine and its storage last or expire? Also some error handling that might be helpful on flawed input scripts. --- .../com/enonic/xp/react4xp/EngineFactory.java | 69 ++++++++++++++++--- .../java/com/enonic/xp/react4xp/React4xp.java | 47 +++++++------ src/main/resources/site/parts/ssr/ssr.es6 | 19 ++--- 3 files changed, 94 insertions(+), 41 deletions(-) diff --git a/src/main/java/com/enonic/xp/react4xp/EngineFactory.java b/src/main/java/com/enonic/xp/react4xp/EngineFactory.java index b3b11335..76738604 100644 --- a/src/main/java/com/enonic/xp/react4xp/EngineFactory.java +++ b/src/main/java/com/enonic/xp/react4xp/EngineFactory.java @@ -6,6 +6,8 @@ import javax.script.ScriptException; import java.io.IOException; import java.util.Arrays; +import java.util.HashMap; +import java.util.LinkedList; import java.util.List; import static com.enonic.xp.react4xp.React4xp.SCRIPTS_HOME; @@ -25,8 +27,8 @@ public class EngineFactory { private final static String CHUNKFILES_HOME = "/react4xp/"; - // Sequence matters! These engine initialization scripts are run in this order, - // scripts found in chunks.polyfill.json must come first, and chunks.components.json last! + // Sequence matters! These engine initialization scripts are run in this order. + // Scripts found in chunks.polyfill.json must come first, and chunks.components.json last! private final static List CHUNK_FILES = Arrays.asList( CHUNKFILES_HOME + "chunks.nashornPolyfills.json", CHUNKFILES_HOME + "chunks.externals.json", @@ -35,18 +37,63 @@ public class EngineFactory { private static NashornScriptEngine engineInstance = null; - public static NashornScriptEngine getEngine() throws ScriptException, IOException { + public static NashornScriptEngine getEngine() throws IOException, ScriptException { if (engineInstance == null) { - engineInstance = (NashornScriptEngine)new ScriptEngineManager().getEngineByName("nashorn"); - engineInstance.eval(POLYFILL_BASICS); - - List dependencyScripts = new ChunkDependencyParser().getScriptDependencies(CHUNK_FILES); - for (String scriptFile : dependencyScripts) { - System.out.println("\tNashorn init script: " + SCRIPTS_HOME + scriptFile); - String script = ResourceHandler.readResource(SCRIPTS_HOME + scriptFile); - engineInstance.eval(script); + + // Sequence matters! Use ordered collection for iteration! Hashmaps are not ordered! + LinkedList scriptList = new LinkedList<>(); + HashMap scripts = new HashMap<>(); + + scripts.put("POLYFILL_BASICS", POLYFILL_BASICS); + scriptList.add("POLYFILL_BASICS"); + + LinkedList transpiledDependencies = new ChunkDependencyParser().getScriptDependencies(CHUNK_FILES); + for (String scriptFile : transpiledDependencies) { + String file = SCRIPTS_HOME + scriptFile; + scripts.put(file, ResourceHandler.readResource(file)); + scriptList.add(file); + } + + StringBuilder script = new StringBuilder(); + + String chunkLabel = null; + String chunkScript = null; + + try { + engineInstance = (NashornScriptEngine)new ScriptEngineManager().getEngineByName("nashorn"); + + for (String scriptFile : scriptList) { + chunkLabel = scriptFile; + chunkScript = scripts.get(chunkLabel); + System.out.println("Initializing React4xp engine: " + chunkLabel); + script.append(chunkScript); + } + + engineInstance.eval(script.toString()); + + } catch (ScriptException bloatedError) { + + // Multiple scripts were chained together, then evaluated, then one failed. + // Unravel which one failed in order to give a clear error message: + try { + NashornScriptEngine tmpEngineInstance = (NashornScriptEngine)new ScriptEngineManager().getEngineByName("nashorn"); + for (String scriptFile : scriptList) { + chunkLabel = scriptFile; + chunkScript = scripts.get(chunkLabel); + tmpEngineInstance.eval(chunkScript); + } + + } catch (ScriptException specificError) { + System.err.println(EngineFactory.class.getCanonicalName() + " INIT SCRIPT FAILED (" + chunkLabel + "):\n---------------------------------\n\n" + chunkScript + "\n\n---------------------------------------"); + throw specificError; + } + + // Fallback if unravelling failed + System.err.println(EngineFactory.class.getCanonicalName() + " INIT SCRIPTS FAILED (script interaction?):\n---------------------------------\n\n" + script.toString() + "\n\n---------------------------------------"); + throw bloatedError; } } + return engineInstance; } } diff --git a/src/main/java/com/enonic/xp/react4xp/React4xp.java b/src/main/java/com/enonic/xp/react4xp/React4xp.java index ec761f8f..8f97c3b3 100644 --- a/src/main/java/com/enonic/xp/react4xp/React4xp.java +++ b/src/main/java/com/enonic/xp/react4xp/React4xp.java @@ -5,37 +5,42 @@ import javax.script.ScriptException; import java.io.IOException; +import java.util.HashSet; +import java.util.Set; public class React4xp { public final static String SCRIPTS_HOME = "/react4xp/"; + Set componentScripts = new HashSet<>(); // Examples: - // component: "site/parts/simple-reactive/simple-reactive" - // props: "{\"insertedMessage\": \"fra den simple kontrolleren!\"}" - public String renderToStaticMarkup(String component, String props) throws IOException { + // component: name of a transpiled JSX component, i.e. path under /react4xp/, e.g: "site/parts/simple-reactive/simple-reactive" + // props: valid stringified JSON on props object, e.g. '{"insertedMessage": "this is a prop!"}' + public String renderToStaticMarkup(String component, String props) throws IOException, ScriptException { + + NashornScriptEngine engine = EngineFactory.getEngine(); + + StringBuilder script = new StringBuilder(); try { - NashornScriptEngine engine = EngineFactory.getEngine(); - - // TODO: Make function library where (props)=> component functions are stored in the engine, on first use - - engine.eval(ResourceHandler.readResource(SCRIPTS_HOME + component + ".js")); - engine.eval("" - // + "console.log(Object.keys(React4xp));" - + "var props = " + props + ";" - + "var Component = React4xp['" + component + "'].default;" - // + "console.log('Component: ' + Component);" - // + "console.log('ReactDOMServer: ' + JSON.stringify(Object.keys(ReactDOMServer), null, 2));" - + "var obj = { rendered: ReactDOMServer.renderToStaticMarkup(Component(props)) };" - // + "console.log(obj.rendered);" - ); - - ScriptObjectMirror obj = (ScriptObjectMirror)engine.eval("obj;"); + if (!componentScripts.contains(component)) { + System.out.println("Initializing React4xp component: " + component); + String componentScript = ResourceHandler.readResource(SCRIPTS_HOME + component + ".js"); + componentScripts.add(component); + script.append(componentScript); + } + script.append("var obj = { rendered: ReactDOMServer.renderToStaticMarkup(React4xp['" + component + "'].default(" + props + ")) };"); + script.append("obj;"); + + ScriptObjectMirror obj = (ScriptObjectMirror)engine.eval(script.toString()); + return (String)obj.get("rendered"); } catch (ScriptException e) { - e.printStackTrace(); - return e.getMessage(); + System.err.println(React4xp.class.getCanonicalName() + ".renderToStaticMarkup: COMPONENT SCRIPT FAILED.\n" + + "Component: " + component + "\n" + + "Props: " + props + "" + + "Script:\n---------------------------------\n\n" + script.toString() + "\n\n---------------------------------------"); + throw e; } } } diff --git a/src/main/resources/site/parts/ssr/ssr.es6 b/src/main/resources/site/parts/ssr/ssr.es6 index b26a7dd8..2cc5cf9d 100644 --- a/src/main/resources/site/parts/ssr/ssr.es6 +++ b/src/main/resources/site/parts/ssr/ssr.es6 @@ -1,20 +1,21 @@ -//const React = require('/lib/enonic/react4xp/react')(); -//const ReactDOMServer = require('/lib/enonic/react4xp/reactDOMServer')(); - -//const theComponent = (props) =>

Det funka jo

; - const React4xp = require('/lib/enonic/react4xp'); exports.get = (req) => { - const comp = new React4xp({ - jsxPath: 'site/parts/simple-reactive/simple-reactive', - react4xpId: 'thirdReact4xp', + const then = new Date().getTime(); + const app2 = new React4xp({ + jsxPath: 'level/app2', props: { insertedMessage: "- easy peasy lemon squeezy!" } }); + const rendered = app2.renderToStaticMarkup(); + const now = new Date().getTime(); + + log.info("Rendered in: " + (now - then) + " ms"); + + // TODO: Same as on client-side rendering: the rendered static markup needs to be inserted into the/a body! return { - body: comp.renderToStaticMarkup() + body: rendered }; }; From fd3d90d23dd5a3c3fae72940492b55dbe52eff28 Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Mon, 21 Jan 2019 00:42:19 +0100 Subject: [PATCH 58/96] This will not build - only intended to tell what's next in development. The PREVIOUS commit works. :) --- src/main/resources/lib/enonic/react4xp/index.es6 | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/resources/lib/enonic/react4xp/index.es6 b/src/main/resources/lib/enonic/react4xp/index.es6 index ede7afd2..bf1632f1 100644 --- a/src/main/resources/lib/enonic/react4xp/index.es6 +++ b/src/main/resources/lib/enonic/react4xp/index.es6 @@ -39,7 +39,7 @@ const buildBasicPageContributions = (chunkHashFiles) => { }); }); }); - log.info("\nBuilt basic pageContributions:\n" + JSON.stringify(pageContributions, null, 2) + "\n"); + //log.info("\nBuilt basic pageContributions:\n" + JSON.stringify(pageContributions, null, 2) + "\n"); return pageContributions; } @@ -87,6 +87,9 @@ const removeJsExtensions = (jsxFileName) => +PLAN: FIKS CONSTRUCTOREN HER SÃ…NN AT DEN TAR IMOT KUN OBLIGATORISKE PARAMETERE - OG DET BARE ER DER DE KAN SETTES. +TELESKOPMETODENE SKAL BARE KUNNE JUSTERE VALGFRIE PARAMETERE, OG DE KAN BARE SETTES SÃ…NN. + class React4xp { constructor(params) { const {jsxPath, react4xpId, props} = params || {}; From 5703fad6b8b64659c256b01392dbb29d14b5a636 Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Mon, 21 Jan 2019 22:34:14 +0100 Subject: [PATCH 59/96] Untested, but this constructor should be much better. Needs some final documentation for the params of the static methods. --- build.gradle | 20 +- package-lock.json | 2738 ++++++++--------- package.json | 6 +- .../{_entries => _components}/app.jsx | 2 +- .../{_entries => _components}/level/app2.jsx | 2 +- src/main/react4xp/chunks.components.json.ejs | 2 +- src/main/react4xp/chunks.components.xml.ejs | 2 +- .../AComponent.jsx | 0 .../more/AnotherComponent.jsx | 2 +- .../resources/lib/enonic/react4xp/index.es6 | 234 +- .../complex-reactive/complex-reactive.es6 | 12 +- .../parts/simple-reactive/simple-reactive.es6 | 2 +- ...onstants.js => webpack.config.constants.js | 4 +- ...ants.json => webpack.config.constants.json | 0 ...Core.js => webpack.config.react4xp.core.js | 6 +- webpack.config.react4xp.externals.js | 4 +- webpack.config.react4xp.js | 23 +- 17 files changed, 1573 insertions(+), 1486 deletions(-) rename src/main/react4xp/{_entries => _components}/app.jsx (82%) rename src/main/react4xp/{_entries => _components}/level/app2.jsx (81%) rename src/main/react4xp/{components => sharedcomps}/AComponent.jsx (100%) rename src/main/react4xp/{components => sharedcomps}/more/AnotherComponent.jsx (85%) rename config.constants.js => webpack.config.constants.js (79%) rename config.constants.json => webpack.config.constants.json (100%) rename webpack.config.react4xp.frontCore.js => webpack.config.react4xp.core.js (91%) diff --git a/build.gradle b/build.gradle index 5e2a2db9..fa28c493 100644 --- a/build.gradle +++ b/build.gradle @@ -71,7 +71,7 @@ import groovy.json.JsonSlurper task webpack_r4xp_externals(type: NodeTask) { doFirst { /* Generate an entry file for bundling externals into one cacheable file. - For example (if the file config.constants.json contains an EXTERNALS object like this: { "react": "React", "react-dom": "ReactDOM" } ): + For example (if the file webpack.config.constants.json contains an EXTERNALS object like this: { "react": "React", "react-dom": "ReactDOM" } ): import ReactDOM from 'react-dom'; import React from 'react'; @@ -82,7 +82,7 @@ task webpack_r4xp_externals(type: NodeTask) { })(typeof window !== 'undefined' ? window : global); */ - String externalsJson = new File('config.constants.json').text; + String externalsJson = new File('webpack.config.constants.json').text; def jsonSlurper = new JsonSlurper() def exts = jsonSlurper.parseText(externalsJson).EXTERNALS @@ -108,8 +108,8 @@ task webpack_r4xp_externals(type: NodeTask) { inputs.file("webpack.config.react4xp.externals.js") - inputs.file("config.constants.json") - inputs.file("config.constants.js") + inputs.file("webpack.config.constants.json") + inputs.file("webpack.config.constants.js") inputs.file("package.json") inputs.file("package-lock.json") inputs.dir("src/main/react4xp") @@ -120,12 +120,12 @@ webpack_r4xp_externals.dependsOn += 'npmInstall' task webpack_r4xp_frontCore(type: NodeTask) { script = file('node_modules/webpack/bin/webpack.js') - args = ['--config', 'webpack.config.react4xp.frontCore.js', '--progress', '--color'] + args = ['--config', 'webpack.config.react4xp.core.js', '--progress', '--color'] - inputs.file("webpack.config.react4xp.frontCore.js") + inputs.file("webpack.config.react4xp.core.js") - inputs.file("config.constants.json") - inputs.file("config.constants.js") + inputs.file("webpack.config.constants.json") + inputs.file("webpack.config.constants.js") inputs.file("package.json") inputs.file("package-lock.json") inputs.dir("src/main/react4xp") @@ -141,8 +141,8 @@ task webpack_r4xp(type: NodeTask) { inputs.file("webpack.config.react4xp.js") inputs.dir("src/main/resources/site") - inputs.file("config.constants.json") - inputs.file("config.constants.js") + inputs.file("webpack.config.constants.json") + inputs.file("webpack.config.constants.js") inputs.file("package.json") inputs.file("package-lock.json") inputs.dir("src/main/react4xp") diff --git a/package-lock.json b/package-lock.json index 6ace8275..924cd4e8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.2.0.tgz", "integrity": "sha512-oouEibCbHMVdZSDlJBO6bZmID/zA/G/Qx3H1d3rSNPTD+L8UNKvCat7aKWSJ74zYbm5zWGh0GQN0hKj8zYFTCg==", "requires": { - "regenerator-runtime": "0.12.1" + "regenerator-runtime": "^0.12.0" }, "dependencies": { "regenerator-runtime": { @@ -93,7 +93,7 @@ "integrity": "sha512-Mmqx/cS68K1tSrvRLtaV/Lp3NZWzXtOHUW2IvDvl2sihAwJh4ACE0eL6A8FvMyDG9abes3saB6dMimLOs+HMoQ==", "dev": true, "requires": { - "@xtuc/ieee754": "1.2.0" + "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { @@ -215,7 +215,7 @@ "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==", "dev": true, "requires": { - "acorn": "5.7.3" + "acorn": "^5.0.0" } }, "ajv": { @@ -224,10 +224,10 @@ "integrity": "sha512-hOs7GfvI6tUI1LfZddH82ky6mOMyTuY0mk7kE2pWpmhhUSkumzaTO5vbVwij39MdwPQWCV4Zv57Eo06NtL/GVA==", "dev": true, "requires": { - "fast-deep-equal": "2.0.1", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.4.1", - "uri-js": "4.2.2" + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.1" } }, "ajv-errors": { @@ -264,8 +264,8 @@ "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=", "dev": true, "requires": { - "micromatch": "3.1.10", - "normalize-path": "2.1.1" + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" } }, "aproba": { @@ -280,7 +280,7 @@ "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=", "dev": true, "requires": { - "sprintf-js": "1.0.3" + "sprintf-js": "~1.0.2" } }, "arr-diff": { @@ -318,9 +318,9 @@ "integrity": "sha1-ucK/WAXx5kqt7tbfOiv6+1pz9aA=", "dev": true, "requires": { - "bn.js": "4.11.8", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, "assert": { @@ -373,12 +373,12 @@ "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", "dev": true, "requires": { - "browserslist": "1.7.7", - "caniuse-db": "1.0.30000864", - "normalize-range": "0.1.2", - "num2fraction": "1.2.2", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "browserslist": "^1.7.6", + "caniuse-db": "^1.0.30000634", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^5.2.16", + "postcss-value-parser": "^3.2.3" } }, "babel-cli": { @@ -387,21 +387,21 @@ "integrity": "sha1-UCq1SHTX24itALiHoGODzgPQAvE=", "dev": true, "requires": { - "babel-core": "6.26.3", - "babel-polyfill": "6.26.0", - "babel-register": "6.26.0", - "babel-runtime": "6.26.0", - "chokidar": "1.7.0", - "commander": "2.16.0", - "convert-source-map": "1.5.1", - "fs-readdir-recursive": "1.1.0", - "glob": "7.1.2", - "lodash": "4.17.10", - "output-file-sync": "1.1.2", - "path-is-absolute": "1.0.1", - "slash": "1.0.0", - "source-map": "0.5.7", - "v8flags": "2.1.1" + "babel-core": "^6.26.0", + "babel-polyfill": "^6.26.0", + "babel-register": "^6.26.0", + "babel-runtime": "^6.26.0", + "chokidar": "^1.6.1", + "commander": "^2.11.0", + "convert-source-map": "^1.5.0", + "fs-readdir-recursive": "^1.0.0", + "glob": "^7.1.2", + "lodash": "^4.17.4", + "output-file-sync": "^1.1.2", + "path-is-absolute": "^1.0.1", + "slash": "^1.0.0", + "source-map": "^0.5.6", + "v8flags": "^2.1.1" }, "dependencies": { "anymatch": { @@ -411,8 +411,8 @@ "dev": true, "optional": true, "requires": { - "micromatch": "2.3.11", - "normalize-path": "2.1.1" + "micromatch": "^2.1.5", + "normalize-path": "^2.0.0" } }, "arr-diff": { @@ -422,7 +422,7 @@ "dev": true, "optional": true, "requires": { - "arr-flatten": "1.1.0" + "arr-flatten": "^1.0.1" } }, "array-unique": { @@ -439,9 +439,9 @@ "dev": true, "optional": true, "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.2" + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" } }, "chokidar": { @@ -451,15 +451,15 @@ "dev": true, "optional": true, "requires": { - "anymatch": "1.3.2", - "async-each": "1.0.1", - "fsevents": "1.2.4", - "glob-parent": "2.0.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "2.0.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.1.0" + "anymatch": "^1.3.0", + "async-each": "^1.0.0", + "fsevents": "^1.0.0", + "glob-parent": "^2.0.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^2.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0" } }, "expand-brackets": { @@ -469,7 +469,7 @@ "dev": true, "optional": true, "requires": { - "is-posix-bracket": "0.1.1" + "is-posix-bracket": "^0.1.0" } }, "extglob": { @@ -479,7 +479,7 @@ "dev": true, "optional": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } }, "glob-parent": { @@ -489,7 +489,7 @@ "dev": true, "optional": true, "requires": { - "is-glob": "2.0.1" + "is-glob": "^2.0.0" } }, "is-extglob": { @@ -504,7 +504,7 @@ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } }, "micromatch": { @@ -514,19 +514,19 @@ "dev": true, "optional": true, "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.4" + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" } } } @@ -537,9 +537,9 @@ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", "dev": true, "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" } }, "babel-core": { @@ -548,25 +548,25 @@ "integrity": "sha1-suLwnjQtDwyI4vAuBneUEl51wgc=", "dev": true, "requires": { - "babel-code-frame": "6.26.0", - "babel-generator": "6.26.1", - "babel-helpers": "6.24.1", - "babel-messages": "6.23.0", - "babel-register": "6.26.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "convert-source-map": "1.5.1", - "debug": "2.6.9", - "json5": "0.5.1", - "lodash": "4.17.10", - "minimatch": "3.0.4", - "path-is-absolute": "1.0.1", - "private": "0.1.8", - "slash": "1.0.0", - "source-map": "0.5.7" + "babel-code-frame": "^6.26.0", + "babel-generator": "^6.26.0", + "babel-helpers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-register": "^6.26.0", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "convert-source-map": "^1.5.1", + "debug": "^2.6.9", + "json5": "^0.5.1", + "lodash": "^4.17.4", + "minimatch": "^3.0.4", + "path-is-absolute": "^1.0.1", + "private": "^0.1.8", + "slash": "^1.0.0", + "source-map": "^0.5.7" } }, "babel-generator": { @@ -575,14 +575,14 @@ "integrity": "sha1-GERAjTuPDTWkBOp6wYDwh6YBvZA=", "dev": true, "requires": { - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "detect-indent": "4.0.0", - "jsesc": "1.3.0", - "lodash": "4.17.10", - "source-map": "0.5.7", - "trim-right": "1.0.1" + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "detect-indent": "^4.0.0", + "jsesc": "^1.3.0", + "lodash": "^4.17.4", + "source-map": "^0.5.7", + "trim-right": "^1.0.1" } }, "babel-helper-bindify-decorators": { @@ -591,9 +591,9 @@ "integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-builder-binary-assignment-operator-visitor": { @@ -602,9 +602,9 @@ "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", "dev": true, "requires": { - "babel-helper-explode-assignable-expression": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-explode-assignable-expression": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-helper-builder-react-jsx": { @@ -613,9 +613,9 @@ "integrity": "sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "esutils": "2.0.2" + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "esutils": "^2.0.2" } }, "babel-helper-call-delegate": { @@ -624,10 +624,10 @@ "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", "dev": true, "requires": { - "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-define-map": { @@ -636,10 +636,10 @@ "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", "dev": true, "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.10" + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" } }, "babel-helper-explode-assignable-expression": { @@ -648,9 +648,9 @@ "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-explode-class": { @@ -659,10 +659,10 @@ "integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=", "dev": true, "requires": { - "babel-helper-bindify-decorators": "6.24.1", - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-bindify-decorators": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-function-name": { @@ -671,11 +671,11 @@ "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", "dev": true, "requires": { - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-get-function-arity": { @@ -684,8 +684,8 @@ "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-helper-hoist-variables": { @@ -694,8 +694,8 @@ "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-helper-optimise-call-expression": { @@ -704,8 +704,8 @@ "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-helper-regex": { @@ -714,9 +714,9 @@ "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.10" + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" } }, "babel-helper-remap-async-to-generator": { @@ -725,11 +725,11 @@ "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", "dev": true, "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-replace-supers": { @@ -738,12 +738,12 @@ "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", "dev": true, "requires": { - "babel-helper-optimise-call-expression": "6.24.1", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helpers": { @@ -752,8 +752,8 @@ "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-loader": { @@ -762,9 +762,9 @@ "integrity": "sha512-/hbyEvPzBJuGpk9o80R0ZyTej6heEOr59GoEUtn8qFKbnx4cJm9FWES6J/iv644sYgrtVw9JJQkjaLW/bqb5gw==", "dev": true, "requires": { - "find-cache-dir": "1.0.0", - "loader-utils": "1.1.0", - "mkdirp": "0.5.1" + "find-cache-dir": "^1.0.0", + "loader-utils": "^1.0.2", + "mkdirp": "^0.5.1" } }, "babel-messages": { @@ -773,7 +773,7 @@ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-check-es2015-constants": { @@ -782,7 +782,7 @@ "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-syntax-async-functions": { @@ -875,9 +875,9 @@ "integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=", "dev": true, "requires": { - "babel-helper-remap-async-to-generator": "6.24.1", - "babel-plugin-syntax-async-generators": "6.13.0", - "babel-runtime": "6.26.0" + "babel-helper-remap-async-to-generator": "^6.24.1", + "babel-plugin-syntax-async-generators": "^6.5.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-async-to-generator": { @@ -886,9 +886,9 @@ "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", "dev": true, "requires": { - "babel-helper-remap-async-to-generator": "6.24.1", - "babel-plugin-syntax-async-functions": "6.13.0", - "babel-runtime": "6.26.0" + "babel-helper-remap-async-to-generator": "^6.24.1", + "babel-plugin-syntax-async-functions": "^6.8.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-class-constructor-call": { @@ -897,9 +897,9 @@ "integrity": "sha1-gNwoVQWsBn3LjWxl4vbxGrd2Xvk=", "dev": true, "requires": { - "babel-plugin-syntax-class-constructor-call": "6.18.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-plugin-syntax-class-constructor-call": "^6.18.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-class-properties": { @@ -908,10 +908,10 @@ "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=", "dev": true, "requires": { - "babel-helper-function-name": "6.24.1", - "babel-plugin-syntax-class-properties": "6.13.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-helper-function-name": "^6.24.1", + "babel-plugin-syntax-class-properties": "^6.8.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-decorators": { @@ -920,11 +920,11 @@ "integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=", "dev": true, "requires": { - "babel-helper-explode-class": "6.24.1", - "babel-plugin-syntax-decorators": "6.13.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-explode-class": "^6.24.1", + "babel-plugin-syntax-decorators": "^6.13.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-do-expressions": { @@ -933,8 +933,8 @@ "integrity": "sha1-KMyvkoEtlJws0SgfaQyP3EaK6bs=", "dev": true, "requires": { - "babel-plugin-syntax-do-expressions": "6.13.0", - "babel-runtime": "6.26.0" + "babel-plugin-syntax-do-expressions": "^6.8.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-arrow-functions": { @@ -943,7 +943,7 @@ "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-block-scoped-functions": { @@ -952,7 +952,7 @@ "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-block-scoping": { @@ -961,11 +961,11 @@ "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.10" + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" } }, "babel-plugin-transform-es2015-classes": { @@ -974,15 +974,15 @@ "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", "dev": true, "requires": { - "babel-helper-define-map": "6.26.0", - "babel-helper-function-name": "6.24.1", - "babel-helper-optimise-call-expression": "6.24.1", - "babel-helper-replace-supers": "6.24.1", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-define-map": "^6.24.1", + "babel-helper-function-name": "^6.24.1", + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-helper-replace-supers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-computed-properties": { @@ -991,8 +991,8 @@ "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-es2015-destructuring": { @@ -1001,7 +1001,7 @@ "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-duplicate-keys": { @@ -1010,8 +1010,8 @@ "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-for-of": { @@ -1020,7 +1020,7 @@ "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-function-name": { @@ -1029,9 +1029,9 @@ "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", "dev": true, "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-literals": { @@ -1040,7 +1040,7 @@ "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-modules-amd": { @@ -1049,9 +1049,9 @@ "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", "dev": true, "requires": { - "babel-plugin-transform-es2015-modules-commonjs": "6.26.2", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-es2015-modules-commonjs": { @@ -1060,10 +1060,10 @@ "integrity": "sha1-WKeThjqefKhwvcWogRF/+sJ9tvM=", "dev": true, "requires": { - "babel-plugin-transform-strict-mode": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-types": "6.26.0" + "babel-plugin-transform-strict-mode": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-types": "^6.26.0" } }, "babel-plugin-transform-es2015-modules-systemjs": { @@ -1072,9 +1072,9 @@ "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", "dev": true, "requires": { - "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-es2015-modules-umd": { @@ -1083,9 +1083,9 @@ "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", "dev": true, "requires": { - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-plugin-transform-es2015-modules-amd": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-es2015-object-super": { @@ -1094,8 +1094,8 @@ "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", "dev": true, "requires": { - "babel-helper-replace-supers": "6.24.1", - "babel-runtime": "6.26.0" + "babel-helper-replace-supers": "^6.24.1", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-parameters": { @@ -1104,12 +1104,12 @@ "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", "dev": true, "requires": { - "babel-helper-call-delegate": "6.24.1", - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-call-delegate": "^6.24.1", + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-shorthand-properties": { @@ -1118,8 +1118,8 @@ "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-spread": { @@ -1128,7 +1128,7 @@ "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-sticky-regex": { @@ -1137,9 +1137,9 @@ "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", "dev": true, "requires": { - "babel-helper-regex": "6.26.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-template-literals": { @@ -1148,7 +1148,7 @@ "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-typeof-symbol": { @@ -1157,7 +1157,7 @@ "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-unicode-regex": { @@ -1166,9 +1166,9 @@ "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", "dev": true, "requires": { - "babel-helper-regex": "6.26.0", - "babel-runtime": "6.26.0", - "regexpu-core": "2.0.0" + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "regexpu-core": "^2.0.0" } }, "babel-plugin-transform-exponentiation-operator": { @@ -1177,9 +1177,9 @@ "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", "dev": true, "requires": { - "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1", - "babel-plugin-syntax-exponentiation-operator": "6.13.0", - "babel-runtime": "6.26.0" + "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1", + "babel-plugin-syntax-exponentiation-operator": "^6.8.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-export-extensions": { @@ -1188,8 +1188,8 @@ "integrity": "sha1-U3OLR+deghhYnuqUbLvTkQm75lM=", "dev": true, "requires": { - "babel-plugin-syntax-export-extensions": "6.13.0", - "babel-runtime": "6.26.0" + "babel-plugin-syntax-export-extensions": "^6.8.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-flow-strip-types": { @@ -1198,8 +1198,8 @@ "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=", "dev": true, "requires": { - "babel-plugin-syntax-flow": "6.18.0", - "babel-runtime": "6.26.0" + "babel-plugin-syntax-flow": "^6.18.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-function-bind": { @@ -1208,8 +1208,8 @@ "integrity": "sha1-xvuOlqwpajELjPjqQBRiQH3fapc=", "dev": true, "requires": { - "babel-plugin-syntax-function-bind": "6.13.0", - "babel-runtime": "6.26.0" + "babel-plugin-syntax-function-bind": "^6.8.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-object-rest-spread": { @@ -1218,8 +1218,8 @@ "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", "dev": true, "requires": { - "babel-plugin-syntax-object-rest-spread": "6.13.0", - "babel-runtime": "6.26.0" + "babel-plugin-syntax-object-rest-spread": "^6.8.0", + "babel-runtime": "^6.26.0" } }, "babel-plugin-transform-react-display-name": { @@ -1228,7 +1228,7 @@ "integrity": "sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-react-jsx": { @@ -1237,9 +1237,9 @@ "integrity": "sha1-hAoCjn30YN/DotKfDA2R9jduZqM=", "dev": true, "requires": { - "babel-helper-builder-react-jsx": "6.26.0", - "babel-plugin-syntax-jsx": "6.18.0", - "babel-runtime": "6.26.0" + "babel-helper-builder-react-jsx": "^6.24.1", + "babel-plugin-syntax-jsx": "^6.8.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-react-jsx-self": { @@ -1248,8 +1248,8 @@ "integrity": "sha1-322AqdomEqEh5t3XVYvL7PBuY24=", "dev": true, "requires": { - "babel-plugin-syntax-jsx": "6.18.0", - "babel-runtime": "6.26.0" + "babel-plugin-syntax-jsx": "^6.8.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-react-jsx-source": { @@ -1258,8 +1258,8 @@ "integrity": "sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY=", "dev": true, "requires": { - "babel-plugin-syntax-jsx": "6.18.0", - "babel-runtime": "6.26.0" + "babel-plugin-syntax-jsx": "^6.8.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-regenerator": { @@ -1268,7 +1268,7 @@ "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", "dev": true, "requires": { - "regenerator-transform": "0.10.1" + "regenerator-transform": "^0.10.0" } }, "babel-plugin-transform-strict-mode": { @@ -1277,8 +1277,8 @@ "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-polyfill": { @@ -1287,9 +1287,9 @@ "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "core-js": "2.5.7", - "regenerator-runtime": "0.10.5" + "babel-runtime": "^6.26.0", + "core-js": "^2.5.0", + "regenerator-runtime": "^0.10.5" }, "dependencies": { "core-js": { @@ -1312,30 +1312,30 @@ "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=", "dev": true, "requires": { - "babel-plugin-check-es2015-constants": "6.22.0", - "babel-plugin-transform-es2015-arrow-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoping": "6.26.0", - "babel-plugin-transform-es2015-classes": "6.24.1", - "babel-plugin-transform-es2015-computed-properties": "6.24.1", - "babel-plugin-transform-es2015-destructuring": "6.23.0", - "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", - "babel-plugin-transform-es2015-for-of": "6.23.0", - "babel-plugin-transform-es2015-function-name": "6.24.1", - "babel-plugin-transform-es2015-literals": "6.22.0", - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-plugin-transform-es2015-modules-commonjs": "6.26.2", - "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", - "babel-plugin-transform-es2015-modules-umd": "6.24.1", - "babel-plugin-transform-es2015-object-super": "6.24.1", - "babel-plugin-transform-es2015-parameters": "6.24.1", - "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", - "babel-plugin-transform-es2015-spread": "6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "6.24.1", - "babel-plugin-transform-es2015-template-literals": "6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", - "babel-plugin-transform-es2015-unicode-regex": "6.24.1", - "babel-plugin-transform-regenerator": "6.26.0" + "babel-plugin-check-es2015-constants": "^6.22.0", + "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoping": "^6.24.1", + "babel-plugin-transform-es2015-classes": "^6.24.1", + "babel-plugin-transform-es2015-computed-properties": "^6.24.1", + "babel-plugin-transform-es2015-destructuring": "^6.22.0", + "babel-plugin-transform-es2015-duplicate-keys": "^6.24.1", + "babel-plugin-transform-es2015-for-of": "^6.22.0", + "babel-plugin-transform-es2015-function-name": "^6.24.1", + "babel-plugin-transform-es2015-literals": "^6.22.0", + "babel-plugin-transform-es2015-modules-amd": "^6.24.1", + "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", + "babel-plugin-transform-es2015-modules-systemjs": "^6.24.1", + "babel-plugin-transform-es2015-modules-umd": "^6.24.1", + "babel-plugin-transform-es2015-object-super": "^6.24.1", + "babel-plugin-transform-es2015-parameters": "^6.24.1", + "babel-plugin-transform-es2015-shorthand-properties": "^6.24.1", + "babel-plugin-transform-es2015-spread": "^6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "^6.24.1", + "babel-plugin-transform-es2015-template-literals": "^6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "^6.22.0", + "babel-plugin-transform-es2015-unicode-regex": "^6.24.1", + "babel-plugin-transform-regenerator": "^6.24.1" } }, "babel-preset-flow": { @@ -1344,7 +1344,7 @@ "integrity": "sha1-5xIYiHCFrpoktb5Baa/7WZgWxJ0=", "dev": true, "requires": { - "babel-plugin-transform-flow-strip-types": "6.22.0" + "babel-plugin-transform-flow-strip-types": "^6.22.0" } }, "babel-preset-react": { @@ -1353,12 +1353,12 @@ "integrity": "sha1-umnfrqRfw+xjm2pOzqbhdwLJE4A=", "dev": true, "requires": { - "babel-plugin-syntax-jsx": "6.18.0", - "babel-plugin-transform-react-display-name": "6.25.0", - "babel-plugin-transform-react-jsx": "6.24.1", - "babel-plugin-transform-react-jsx-self": "6.22.0", - "babel-plugin-transform-react-jsx-source": "6.22.0", - "babel-preset-flow": "6.23.0" + "babel-plugin-syntax-jsx": "^6.3.13", + "babel-plugin-transform-react-display-name": "^6.23.0", + "babel-plugin-transform-react-jsx": "^6.24.1", + "babel-plugin-transform-react-jsx-self": "^6.22.0", + "babel-plugin-transform-react-jsx-source": "^6.22.0", + "babel-preset-flow": "^6.23.0" } }, "babel-preset-stage-0": { @@ -1367,9 +1367,9 @@ "integrity": "sha1-VkLRUEL5E4TX5a+LyIsduVsDnmo=", "dev": true, "requires": { - "babel-plugin-transform-do-expressions": "6.22.0", - "babel-plugin-transform-function-bind": "6.22.0", - "babel-preset-stage-1": "6.24.1" + "babel-plugin-transform-do-expressions": "^6.22.0", + "babel-plugin-transform-function-bind": "^6.22.0", + "babel-preset-stage-1": "^6.24.1" } }, "babel-preset-stage-1": { @@ -1378,9 +1378,9 @@ "integrity": "sha1-dpLNfc1oSZB+auSgqFWJz7niv7A=", "dev": true, "requires": { - "babel-plugin-transform-class-constructor-call": "6.24.1", - "babel-plugin-transform-export-extensions": "6.22.0", - "babel-preset-stage-2": "6.24.1" + "babel-plugin-transform-class-constructor-call": "^6.24.1", + "babel-plugin-transform-export-extensions": "^6.22.0", + "babel-preset-stage-2": "^6.24.1" } }, "babel-preset-stage-2": { @@ -1389,10 +1389,10 @@ "integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=", "dev": true, "requires": { - "babel-plugin-syntax-dynamic-import": "6.18.0", - "babel-plugin-transform-class-properties": "6.24.1", - "babel-plugin-transform-decorators": "6.24.1", - "babel-preset-stage-3": "6.24.1" + "babel-plugin-syntax-dynamic-import": "^6.18.0", + "babel-plugin-transform-class-properties": "^6.24.1", + "babel-plugin-transform-decorators": "^6.24.1", + "babel-preset-stage-3": "^6.24.1" } }, "babel-preset-stage-3": { @@ -1401,11 +1401,11 @@ "integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=", "dev": true, "requires": { - "babel-plugin-syntax-trailing-function-commas": "6.22.0", - "babel-plugin-transform-async-generator-functions": "6.24.1", - "babel-plugin-transform-async-to-generator": "6.24.1", - "babel-plugin-transform-exponentiation-operator": "6.24.1", - "babel-plugin-transform-object-rest-spread": "6.26.0" + "babel-plugin-syntax-trailing-function-commas": "^6.22.0", + "babel-plugin-transform-async-generator-functions": "^6.24.1", + "babel-plugin-transform-async-to-generator": "^6.24.1", + "babel-plugin-transform-exponentiation-operator": "^6.24.1", + "babel-plugin-transform-object-rest-spread": "^6.22.0" } }, "babel-register": { @@ -1414,13 +1414,13 @@ "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", "dev": true, "requires": { - "babel-core": "6.26.3", - "babel-runtime": "6.26.0", - "core-js": "2.5.7", - "home-or-tmp": "2.0.0", - "lodash": "4.17.10", - "mkdirp": "0.5.1", - "source-map-support": "0.4.18" + "babel-core": "^6.26.0", + "babel-runtime": "^6.26.0", + "core-js": "^2.5.0", + "home-or-tmp": "^2.0.0", + "lodash": "^4.17.4", + "mkdirp": "^0.5.1", + "source-map-support": "^0.4.15" }, "dependencies": { "core-js": { @@ -1437,8 +1437,8 @@ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "dev": true, "requires": { - "core-js": "2.5.7", - "regenerator-runtime": "0.11.1" + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" }, "dependencies": { "core-js": { @@ -1455,11 +1455,11 @@ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "lodash": "4.17.10" + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" } }, "babel-traverse": { @@ -1468,15 +1468,15 @@ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", "dev": true, "requires": { - "babel-code-frame": "6.26.0", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "debug": "2.6.9", - "globals": "9.18.0", - "invariant": "2.2.4", - "lodash": "4.17.10" + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" } }, "babel-types": { @@ -1485,10 +1485,10 @@ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "esutils": "2.0.2", - "lodash": "4.17.10", - "to-fast-properties": "1.0.3" + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" } }, "babylon": { @@ -1508,13 +1508,13 @@ "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=", "dev": true, "requires": { - "cache-base": "1.0.1", - "class-utils": "0.3.6", - "component-emitter": "1.2.1", - "define-property": "1.0.0", - "isobject": "3.0.1", - "mixin-deep": "1.3.1", - "pascalcase": "0.1.1" + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" }, "dependencies": { "define-property": { @@ -1523,7 +1523,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "is-accessor-descriptor": { @@ -1532,7 +1532,7 @@ "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -1541,7 +1541,7 @@ "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -1550,9 +1550,9 @@ "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, "kind-of": { @@ -1604,7 +1604,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=", "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -1614,16 +1614,16 @@ "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", "dev": true, "requires": { - "arr-flatten": "1.1.0", - "array-unique": "0.3.2", - "extend-shallow": "2.0.1", - "fill-range": "4.0.0", - "isobject": "3.0.1", - "repeat-element": "1.1.2", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" }, "dependencies": { "extend-shallow": { @@ -1632,7 +1632,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -1663,9 +1663,9 @@ "integrity": "sha1-jWR0wbhwv9q807z8wZNKEOlPFfA=", "dev": true, "requires": { - "browserify-aes": "1.2.0", - "browserify-des": "1.0.2", - "evp_bytestokey": "1.0.3" + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" } }, "browserify-des": { @@ -1674,10 +1674,10 @@ "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "des.js": "1.0.0", - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "browserify-rsa": { @@ -1696,13 +1696,13 @@ "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", "dev": true, "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "elliptic": "6.4.1", - "inherits": "2.0.3", - "parse-asn1": "5.1.1" + "bn.js": "^4.1.1", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.2", + "elliptic": "^6.0.0", + "inherits": "^2.0.1", + "parse-asn1": "^5.0.0" } }, "browserify-zlib": { @@ -1711,7 +1711,7 @@ "integrity": "sha1-KGlFnZqjviRf6P4sofRuLn9U1z8=", "dev": true, "requires": { - "pako": "1.0.7" + "pako": "~1.0.5" } }, "browserslist": { @@ -1720,8 +1720,8 @@ "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", "dev": true, "requires": { - "caniuse-db": "1.0.30000864", - "electron-to-chromium": "1.3.51" + "caniuse-db": "^1.0.30000639", + "electron-to-chromium": "^1.2.7" } }, "buffer": { @@ -1759,20 +1759,20 @@ "integrity": "sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg==", "dev": true, "requires": { - "bluebird": "3.5.3", - "chownr": "1.1.1", - "figgy-pudding": "3.5.1", - "glob": "7.1.3", - "graceful-fs": "4.1.15", - "lru-cache": "5.1.1", - "mississippi": "3.0.0", - "mkdirp": "0.5.1", - "move-concurrently": "1.0.1", - "promise-inflight": "1.0.1", - "rimraf": "2.6.3", - "ssri": "6.0.1", - "unique-filename": "1.1.1", - "y18n": "4.0.0" + "bluebird": "^3.5.3", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.3", + "graceful-fs": "^4.1.15", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.2", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" }, "dependencies": { "glob": { @@ -1781,12 +1781,12 @@ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "graceful-fs": { @@ -1803,15 +1803,15 @@ "integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=", "dev": true, "requires": { - "collection-visit": "1.0.0", - "component-emitter": "1.2.1", - "get-value": "2.0.6", - "has-value": "1.0.0", - "isobject": "3.0.1", - "set-value": "2.0.0", - "to-object-path": "0.3.0", - "union-value": "1.0.0", - "unset-value": "1.0.0" + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" } }, "camel-case": { @@ -1820,8 +1820,8 @@ "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", "dev": true, "requires": { - "no-case": "2.3.2", - "upper-case": "1.1.3" + "no-case": "^2.2.0", + "upper-case": "^1.1.1" } }, "camelcase": { @@ -1836,10 +1836,10 @@ "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=", "dev": true, "requires": { - "browserslist": "1.7.7", - "caniuse-db": "1.0.30000864", - "lodash.memoize": "4.1.2", - "lodash.uniq": "4.5.0" + "browserslist": "^1.3.6", + "caniuse-db": "^1.0.30000529", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" } }, "caniuse-db": { @@ -1853,11 +1853,11 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" }, "dependencies": { "supports-color": { @@ -1873,19 +1873,19 @@ "integrity": "sha1-NW/04rDo5D4yLRijckYLvPOszSY=", "dev": true, "requires": { - "anymatch": "2.0.0", - "async-each": "1.0.1", - "braces": "2.3.2", - "fsevents": "1.2.4", - "glob-parent": "3.1.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "4.0.0", - "lodash.debounce": "4.0.8", - "normalize-path": "2.1.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.1.0", - "upath": "1.1.0" + "anymatch": "^2.0.0", + "async-each": "^1.0.0", + "braces": "^2.3.0", + "fsevents": "^1.2.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "lodash.debounce": "^4.0.8", + "normalize-path": "^2.1.1", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0", + "upath": "^1.0.5" } }, "chownr": { @@ -1900,7 +1900,7 @@ "integrity": "sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==", "dev": true, "requires": { - "tslib": "1.9.3" + "tslib": "^1.9.0" } }, "cipher-base": { @@ -1909,8 +1909,8 @@ "integrity": "sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94=", "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "clap": { @@ -1919,7 +1919,7 @@ "integrity": "sha1-TzZ0WzIAhJJVf0ZBLWbVDLmbzlE=", "dev": true, "requires": { - "chalk": "1.1.3" + "chalk": "^1.1.3" } }, "class-utils": { @@ -1928,10 +1928,10 @@ "integrity": "sha1-+TNprouafOAv1B+q0MqDAzGQxGM=", "dev": true, "requires": { - "arr-union": "3.1.0", - "define-property": "0.2.5", - "isobject": "3.0.1", - "static-extend": "0.1.2" + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" }, "dependencies": { "define-property": { @@ -1940,7 +1940,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } } } @@ -1951,7 +1951,7 @@ "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==", "dev": true, "requires": { - "source-map": "0.6.1" + "source-map": "~0.6.0" }, "dependencies": { "source-map": { @@ -1968,9 +1968,9 @@ "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", "dev": true, "requires": { - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "wrap-ansi": "2.1.0" + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" }, "dependencies": { "ansi-regex": { @@ -1985,7 +1985,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } } } @@ -2002,7 +2002,7 @@ "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=", "dev": true, "requires": { - "q": "1.5.1" + "q": "^1.1.2" } }, "code-point-at": { @@ -2017,8 +2017,8 @@ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dev": true, "requires": { - "map-visit": "1.0.0", - "object-visit": "1.0.1" + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" } }, "color": { @@ -2027,9 +2027,9 @@ "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", "dev": true, "requires": { - "clone": "1.0.4", - "color-convert": "1.9.2", - "color-string": "0.3.0" + "clone": "^1.0.2", + "color-convert": "^1.3.0", + "color-string": "^0.3.0" } }, "color-convert": { @@ -2053,7 +2053,7 @@ "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=", "dev": true, "requires": { - "color-name": "1.1.1" + "color-name": "^1.0.0" } }, "colormin": { @@ -2062,9 +2062,9 @@ "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=", "dev": true, "requires": { - "color": "0.11.4", + "color": "^0.11.0", "css-color-names": "0.0.4", - "has": "1.0.3" + "has": "^1.0.1" } }, "colors": { @@ -2102,10 +2102,10 @@ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "requires": { - "buffer-from": "1.1.1", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "typedarray": "0.0.6" + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" } }, "console-browserify": { @@ -2114,7 +2114,7 @@ "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", "dev": true, "requires": { - "date-now": "0.1.4" + "date-now": "^0.1.4" } }, "constants-browserify": { @@ -2135,12 +2135,12 @@ "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", "dev": true, "requires": { - "aproba": "1.2.0", - "fs-write-stream-atomic": "1.0.10", - "iferr": "0.1.5", - "mkdirp": "0.5.1", - "rimraf": "2.6.3", - "run-queue": "1.0.3" + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" } }, "copy-descriptor": { @@ -2166,8 +2166,8 @@ "integrity": "sha1-yREbbzMEXEaX8UR4f5JUzcd8Rf8=", "dev": true, "requires": { - "bn.js": "4.11.8", - "elliptic": "6.4.1" + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" } }, "create-hash": { @@ -2202,8 +2202,8 @@ "resolved": "https://registry.npmjs.org/create-react-context/-/create-react-context-0.2.3.tgz", "integrity": "sha1-nsFAppFKIu8EuLCbd3HeiVZ8tvM=", "requires": { - "fbjs": "0.8.17", - "gud": "1.0.0" + "fbjs": "^0.8.0", + "gud": "^1.0.0" } }, "cross-spawn": { @@ -2212,11 +2212,11 @@ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { - "nice-try": "1.0.5", - "path-key": "2.0.1", - "semver": "5.6.0", - "shebang-command": "1.2.0", - "which": "1.3.1" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, "crypto-browserify": { @@ -2225,17 +2225,17 @@ "integrity": "sha1-OWz58xN/A+S45TLFj2mCVOAPgOw=", "dev": true, "requires": { - "browserify-cipher": "1.0.1", - "browserify-sign": "4.0.4", - "create-ecdh": "4.0.3", - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "diffie-hellman": "5.0.3", - "inherits": "2.0.3", - "pbkdf2": "3.0.17", - "public-encrypt": "4.0.3", - "randombytes": "2.0.6", - "randomfill": "1.0.4" + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" } }, "css-color-names": { @@ -2250,20 +2250,20 @@ "integrity": "sha1-w/mGSnAL4nEbtaJGKyOJsaOS2rc=", "dev": true, "requires": { - "babel-code-frame": "6.26.0", - "css-selector-tokenizer": "0.7.0", - "cssnano": "3.10.0", - "icss-utils": "2.1.0", - "loader-utils": "1.1.0", - "lodash.camelcase": "4.3.0", - "object-assign": "4.1.1", - "postcss": "5.2.18", - "postcss-modules-extract-imports": "1.2.0", - "postcss-modules-local-by-default": "1.2.0", - "postcss-modules-scope": "1.1.0", - "postcss-modules-values": "1.3.0", - "postcss-value-parser": "3.3.0", - "source-list-map": "2.0.0" + "babel-code-frame": "^6.26.0", + "css-selector-tokenizer": "^0.7.0", + "cssnano": "^3.10.0", + "icss-utils": "^2.1.0", + "loader-utils": "^1.0.2", + "lodash.camelcase": "^4.3.0", + "object-assign": "^4.1.1", + "postcss": "^5.0.6", + "postcss-modules-extract-imports": "^1.2.0", + "postcss-modules-local-by-default": "^1.2.0", + "postcss-modules-scope": "^1.1.0", + "postcss-modules-values": "^1.3.0", + "postcss-value-parser": "^3.3.0", + "source-list-map": "^2.0.0" } }, "css-select": { @@ -2272,10 +2272,10 @@ "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", "dev": true, "requires": { - "boolbase": "1.0.0", - "css-what": "2.1.2", + "boolbase": "~1.0.0", + "css-what": "2.1", "domutils": "1.5.1", - "nth-check": "1.0.2" + "nth-check": "~1.0.1" } }, "css-selector-tokenizer": { @@ -2284,9 +2284,9 @@ "integrity": "sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=", "dev": true, "requires": { - "cssesc": "0.1.0", - "fastparse": "1.1.1", - "regexpu-core": "1.0.0" + "cssesc": "^0.1.0", + "fastparse": "^1.1.1", + "regexpu-core": "^1.0.0" }, "dependencies": { "regexpu-core": { @@ -2295,9 +2295,9 @@ "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", "dev": true, "requires": { - "regenerate": "1.4.0", - "regjsgen": "0.2.0", - "regjsparser": "0.1.5" + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" } } } @@ -2320,38 +2320,38 @@ "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=", "dev": true, "requires": { - "autoprefixer": "6.7.7", - "decamelize": "1.2.0", - "defined": "1.0.0", - "has": "1.0.3", - "object-assign": "4.1.1", - "postcss": "5.2.18", - "postcss-calc": "5.3.1", - "postcss-colormin": "2.2.2", - "postcss-convert-values": "2.6.1", - "postcss-discard-comments": "2.0.4", - "postcss-discard-duplicates": "2.1.0", - "postcss-discard-empty": "2.1.0", - "postcss-discard-overridden": "0.1.1", - "postcss-discard-unused": "2.2.3", - "postcss-filter-plugins": "2.0.3", - "postcss-merge-idents": "2.1.7", - "postcss-merge-longhand": "2.0.2", - "postcss-merge-rules": "2.1.2", - "postcss-minify-font-values": "1.0.5", - "postcss-minify-gradients": "1.0.5", - "postcss-minify-params": "1.2.2", - "postcss-minify-selectors": "2.1.1", - "postcss-normalize-charset": "1.1.1", - "postcss-normalize-url": "3.0.8", - "postcss-ordered-values": "2.2.3", - "postcss-reduce-idents": "2.4.0", - "postcss-reduce-initial": "1.0.1", - "postcss-reduce-transforms": "1.0.4", - "postcss-svgo": "2.1.6", - "postcss-unique-selectors": "2.0.2", - "postcss-value-parser": "3.3.0", - "postcss-zindex": "2.2.0" + "autoprefixer": "^6.3.1", + "decamelize": "^1.1.2", + "defined": "^1.0.0", + "has": "^1.0.1", + "object-assign": "^4.0.1", + "postcss": "^5.0.14", + "postcss-calc": "^5.2.0", + "postcss-colormin": "^2.1.8", + "postcss-convert-values": "^2.3.4", + "postcss-discard-comments": "^2.0.4", + "postcss-discard-duplicates": "^2.0.1", + "postcss-discard-empty": "^2.0.1", + "postcss-discard-overridden": "^0.1.1", + "postcss-discard-unused": "^2.2.1", + "postcss-filter-plugins": "^2.0.0", + "postcss-merge-idents": "^2.1.5", + "postcss-merge-longhand": "^2.0.1", + "postcss-merge-rules": "^2.0.3", + "postcss-minify-font-values": "^1.0.2", + "postcss-minify-gradients": "^1.0.1", + "postcss-minify-params": "^1.0.4", + "postcss-minify-selectors": "^2.0.4", + "postcss-normalize-charset": "^1.1.0", + "postcss-normalize-url": "^3.0.7", + "postcss-ordered-values": "^2.1.0", + "postcss-reduce-idents": "^2.2.2", + "postcss-reduce-initial": "^1.0.0", + "postcss-reduce-transforms": "^1.0.3", + "postcss-svgo": "^2.1.1", + "postcss-unique-selectors": "^2.0.2", + "postcss-value-parser": "^3.2.3", + "postcss-zindex": "^2.0.1" } }, "csso": { @@ -2360,8 +2360,8 @@ "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=", "dev": true, "requires": { - "clap": "1.2.3", - "source-map": "0.5.7" + "clap": "^1.0.9", + "source-map": "^0.5.3" } }, "cyclist": { @@ -2403,7 +2403,7 @@ "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dev": true, "requires": { - "object-keys": "1.0.12" + "object-keys": "^1.0.12" } }, "define-property": { @@ -2412,8 +2412,8 @@ "integrity": "sha1-1Flono1lS6d+AqgX+HENcCyxbp0=", "dev": true, "requires": { - "is-descriptor": "1.0.2", - "isobject": "3.0.1" + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" }, "dependencies": { "is-accessor-descriptor": { @@ -2422,7 +2422,7 @@ "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -2431,7 +2431,7 @@ "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -2440,9 +2440,9 @@ "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, "kind-of": { @@ -2465,8 +2465,8 @@ "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", "dev": true, "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, "detect-indent": { @@ -2475,7 +2475,7 @@ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", "dev": true, "requires": { - "repeating": "2.0.1" + "repeating": "^2.0.0" } }, "diffie-hellman": { @@ -2495,7 +2495,7 @@ "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", "dev": true, "requires": { - "utila": "0.4.0" + "utila": "~0.4" } }, "dom-serializer": { @@ -2504,8 +2504,8 @@ "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", "dev": true, "requires": { - "domelementtype": "1.1.3", - "entities": "1.1.2" + "domelementtype": "~1.1.1", + "entities": "~1.1.1" }, "dependencies": { "domelementtype": { @@ -2534,7 +2534,7 @@ "integrity": "sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=", "dev": true, "requires": { - "domelementtype": "1.3.1" + "domelementtype": "1" } }, "domutils": { @@ -2543,8 +2543,8 @@ "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", "dev": true, "requires": { - "dom-serializer": "0.1.0", - "domelementtype": "1.3.1" + "dom-serializer": "0", + "domelementtype": "1" } }, "duplexify": { @@ -2553,10 +2553,10 @@ "integrity": "sha512-vM58DwdnKmty+FSPzT14K9JXb90H+j5emaR4KYbr2KTIz00WHGbWOe5ghQTx233ZCLZtrGDALzKwcjEtSt35mA==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "stream-shift": "1.0.0" + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" } }, "electron-to-chromium": { @@ -2571,13 +2571,13 @@ "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", "dev": true, "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0", - "hash.js": "1.1.7", - "hmac-drbg": "1.0.1", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" } }, "emojis-list": { @@ -2591,7 +2591,7 @@ "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", "requires": { - "iconv-lite": "0.4.23" + "iconv-lite": "~0.4.13" } }, "end-of-stream": { @@ -2600,7 +2600,7 @@ "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", "dev": true, "requires": { - "once": "1.4.0" + "once": "^1.4.0" } }, "enhanced-resolve": { @@ -2609,9 +2609,9 @@ "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "memory-fs": "0.4.1", - "tapable": "1.1.1" + "graceful-fs": "^4.1.2", + "memory-fs": "^0.4.0", + "tapable": "^1.0.0" } }, "entities": { @@ -2626,7 +2626,7 @@ "integrity": "sha1-RoTXF3mtOa8Xfj8AeZb3xnyFJhg=", "dev": true, "requires": { - "prr": "1.0.1" + "prr": "~1.0.1" } }, "es-abstract": { @@ -2635,11 +2635,11 @@ "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", "dev": true, "requires": { - "es-to-primitive": "1.2.0", - "function-bind": "1.1.1", - "has": "1.0.3", - "is-callable": "1.1.4", - "is-regex": "1.0.4" + "es-to-primitive": "^1.1.1", + "function-bind": "^1.1.1", + "has": "^1.0.1", + "is-callable": "^1.1.3", + "is-regex": "^1.0.4" } }, "es-to-primitive": { @@ -2648,9 +2648,9 @@ "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", "dev": true, "requires": { - "is-callable": "1.1.4", - "is-date-object": "1.0.1", - "is-symbol": "1.0.2" + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" } }, "es6-set-and-map": { @@ -2670,8 +2670,8 @@ "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", "dev": true, "requires": { - "esrecurse": "4.2.1", - "estraverse": "4.2.0" + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" } }, "esprima": { @@ -2686,7 +2686,7 @@ "integrity": "sha1-AHo7n9vCs7uH5IeeoZyS/b05Qs8=", "dev": true, "requires": { - "estraverse": "4.2.0" + "estraverse": "^4.1.0" } }, "estraverse": { @@ -2713,8 +2713,8 @@ "integrity": "sha1-f8vbGY3HGVlDLv4ThCaE4FJaywI=", "dev": true, "requires": { - "md5.js": "1.3.5", - "safe-buffer": "5.1.2" + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" } }, "execa": { @@ -2723,13 +2723,13 @@ "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", "dev": true, "requires": { - "cross-spawn": "6.0.5", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" + "cross-spawn": "^6.0.0", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" } }, "expand-brackets": { @@ -2738,13 +2738,13 @@ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "requires": { - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "posix-character-classes": "0.1.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -2753,7 +2753,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -2762,7 +2762,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -2774,7 +2774,7 @@ "dev": true, "optional": true, "requires": { - "fill-range": "2.2.4" + "fill-range": "^2.1.0" }, "dependencies": { "fill-range": { @@ -2784,11 +2784,11 @@ "dev": true, "optional": true, "requires": { - "is-number": "2.1.0", - "isobject": "2.1.0", - "randomatic": "3.0.0", - "repeat-element": "1.1.2", - "repeat-string": "1.6.1" + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^3.0.0", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" } }, "is-number": { @@ -2798,7 +2798,7 @@ "dev": true, "optional": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "isobject": { @@ -2819,8 +2819,8 @@ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { @@ -2829,7 +2829,7 @@ "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", "dev": true, "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -2840,14 +2840,14 @@ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, "requires": { - "array-unique": "0.3.2", - "define-property": "1.0.0", - "expand-brackets": "2.1.4", - "extend-shallow": "2.0.1", - "fragment-cache": "0.2.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -2856,7 +2856,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "extend-shallow": { @@ -2865,7 +2865,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "is-accessor-descriptor": { @@ -2874,7 +2874,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -2883,7 +2883,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -2892,9 +2892,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, "kind-of": { @@ -2928,13 +2928,13 @@ "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", "requires": { - "core-js": "1.2.7", - "isomorphic-fetch": "2.2.1", - "loose-envify": "1.3.1", - "object-assign": "4.1.1", - "promise": "7.3.1", - "setimmediate": "1.0.5", - "ua-parser-js": "0.7.18" + "core-js": "^1.0.0", + "isomorphic-fetch": "^2.1.1", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.18" } }, "figgy-pudding": { @@ -2956,10 +2956,10 @@ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" }, "dependencies": { "extend-shallow": { @@ -2968,7 +2968,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -2979,9 +2979,9 @@ "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", "dev": true, "requires": { - "commondir": "1.0.1", - "make-dir": "1.3.0", - "pkg-dir": "2.0.0" + "commondir": "^1.0.1", + "make-dir": "^1.0.0", + "pkg-dir": "^2.0.0" } }, "find-up": { @@ -2990,7 +2990,7 @@ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "locate-path": "2.0.0" + "locate-path": "^2.0.0" } }, "flatten": { @@ -3005,8 +3005,8 @@ "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.6" + "inherits": "^2.0.1", + "readable-stream": "^2.0.4" } }, "for-in": { @@ -3022,7 +3022,7 @@ "dev": true, "optional": true, "requires": { - "for-in": "1.0.2" + "for-in": "^1.0.1" } }, "fragment-cache": { @@ -3031,7 +3031,7 @@ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dev": true, "requires": { - "map-cache": "0.2.2" + "map-cache": "^0.2.2" } }, "from2": { @@ -3040,8 +3040,8 @@ "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.6" + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" } }, "fs-extra": { @@ -3049,9 +3049,9 @@ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", "requires": { - "graceful-fs": "4.1.11", - "jsonfile": "3.0.1", - "universalify": "0.1.2" + "graceful-fs": "^4.1.2", + "jsonfile": "^3.0.0", + "universalify": "^0.1.0" } }, "fs-readdir-recursive": { @@ -3066,10 +3066,10 @@ "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "iferr": "0.1.5", - "imurmurhash": "0.1.4", - "readable-stream": "2.3.6" + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" } }, "fs.realpath": { @@ -3084,8 +3084,8 @@ "dev": true, "optional": true, "requires": { - "nan": "2.10.0", - "node-pre-gyp": "0.10.0" + "nan": "^2.9.2", + "node-pre-gyp": "^0.10.0" }, "dependencies": { "abbrev": { @@ -3111,8 +3111,8 @@ "dev": true, "optional": true, "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.6" + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" } }, "balanced-match": { @@ -3125,7 +3125,7 @@ "bundled": true, "dev": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -3189,7 +3189,7 @@ "dev": true, "optional": true, "requires": { - "minipass": "2.2.4" + "minipass": "^2.2.1" } }, "fs.realpath": { @@ -3204,14 +3204,14 @@ "dev": true, "optional": true, "requires": { - "aproba": "1.2.0", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" } }, "glob": { @@ -3220,12 +3220,12 @@ "dev": true, "optional": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "has-unicode": { @@ -3240,7 +3240,7 @@ "dev": true, "optional": true, "requires": { - "safer-buffer": "2.1.2" + "safer-buffer": "^2.1.0" } }, "ignore-walk": { @@ -3249,7 +3249,7 @@ "dev": true, "optional": true, "requires": { - "minimatch": "3.0.4" + "minimatch": "^3.0.4" } }, "inflight": { @@ -3258,8 +3258,8 @@ "dev": true, "optional": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -3278,7 +3278,7 @@ "bundled": true, "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "isarray": { @@ -3292,7 +3292,7 @@ "bundled": true, "dev": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -3305,8 +3305,8 @@ "bundled": true, "dev": true, "requires": { - "safe-buffer": "5.1.1", - "yallist": "3.0.2" + "safe-buffer": "^5.1.1", + "yallist": "^3.0.0" } }, "minizlib": { @@ -3315,7 +3315,7 @@ "dev": true, "optional": true, "requires": { - "minipass": "2.2.4" + "minipass": "^2.2.1" } }, "mkdirp": { @@ -3338,9 +3338,9 @@ "dev": true, "optional": true, "requires": { - "debug": "2.6.9", - "iconv-lite": "0.4.21", - "sax": "1.2.4" + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" } }, "node-pre-gyp": { @@ -3349,16 +3349,16 @@ "dev": true, "optional": true, "requires": { - "detect-libc": "1.0.3", - "mkdirp": "0.5.1", - "needle": "2.2.0", - "nopt": "4.0.1", - "npm-packlist": "1.1.10", - "npmlog": "4.1.2", - "rc": "1.2.7", - "rimraf": "2.6.2", - "semver": "5.5.0", - "tar": "4.4.1" + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.0", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.1.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" } }, "nopt": { @@ -3367,8 +3367,8 @@ "dev": true, "optional": true, "requires": { - "abbrev": "1.1.1", - "osenv": "0.1.5" + "abbrev": "1", + "osenv": "^0.1.4" } }, "npm-bundled": { @@ -3383,8 +3383,8 @@ "dev": true, "optional": true, "requires": { - "ignore-walk": "3.0.1", - "npm-bundled": "1.0.3" + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" } }, "npmlog": { @@ -3393,10 +3393,10 @@ "dev": true, "optional": true, "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" } }, "number-is-nan": { @@ -3415,7 +3415,7 @@ "bundled": true, "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "os-homedir": { @@ -3436,8 +3436,8 @@ "dev": true, "optional": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, "path-is-absolute": { @@ -3458,10 +3458,10 @@ "dev": true, "optional": true, "requires": { - "deep-extend": "0.5.1", - "ini": "1.3.5", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" + "deep-extend": "^0.5.1", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, "dependencies": { "minimist": { @@ -3478,13 +3478,13 @@ "dev": true, "optional": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "rimraf": { @@ -3493,7 +3493,7 @@ "dev": true, "optional": true, "requires": { - "glob": "7.1.2" + "glob": "^7.0.5" } }, "safe-buffer": { @@ -3536,9 +3536,9 @@ "bundled": true, "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "string_decoder": { @@ -3547,7 +3547,7 @@ "dev": true, "optional": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "~5.1.0" } }, "strip-ansi": { @@ -3555,7 +3555,7 @@ "bundled": true, "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-json-comments": { @@ -3570,13 +3570,13 @@ "dev": true, "optional": true, "requires": { - "chownr": "1.0.1", - "fs-minipass": "1.2.5", - "minipass": "2.2.4", - "minizlib": "1.1.0", - "mkdirp": "0.5.1", - "safe-buffer": "5.1.1", - "yallist": "3.0.2" + "chownr": "^1.0.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.2.4", + "minizlib": "^1.1.0", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.1", + "yallist": "^3.0.2" } }, "util-deprecate": { @@ -3591,7 +3591,7 @@ "dev": true, "optional": true, "requires": { - "string-width": "1.0.2" + "string-width": "^1.0.2" } }, "wrappy": { @@ -3635,12 +3635,12 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "glob-base": { @@ -3650,8 +3650,8 @@ "dev": true, "optional": true, "requires": { - "glob-parent": "2.0.0", - "is-glob": "2.0.1" + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" }, "dependencies": { "glob-parent": { @@ -3661,7 +3661,7 @@ "dev": true, "optional": true, "requires": { - "is-glob": "2.0.1" + "is-glob": "^2.0.0" } }, "is-extglob": { @@ -3676,7 +3676,7 @@ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } } } @@ -3687,8 +3687,8 @@ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dev": true, "requires": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" }, "dependencies": { "is-glob": { @@ -3697,7 +3697,7 @@ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.0" } } } @@ -3730,7 +3730,7 @@ "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=", "dev": true, "requires": { - "function-bind": "1.1.1" + "function-bind": "^1.1.1" } }, "has-ansi": { @@ -3738,7 +3738,7 @@ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "has-flag": { @@ -3759,9 +3759,9 @@ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dev": true, "requires": { - "get-value": "2.0.6", - "has-values": "1.0.0", - "isobject": "3.0.1" + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" } }, "has-values": { @@ -3770,8 +3770,8 @@ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dev": true, "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" + "is-number": "^3.0.0", + "kind-of": "^4.0.0" }, "dependencies": { "kind-of": { @@ -3780,7 +3780,7 @@ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -3791,8 +3791,8 @@ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "hash.js": { @@ -3801,8 +3801,8 @@ "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dev": true, "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" } }, "he": { @@ -3816,11 +3816,11 @@ "resolved": "https://registry.npmjs.org/history/-/history-4.7.2.tgz", "integrity": "sha1-IrXH8xYzxbgCHH9KipVKwTnujVs=", "requires": { - "invariant": "2.2.4", - "loose-envify": "1.3.1", - "resolve-pathname": "2.2.0", - "value-equal": "0.4.0", - "warning": "3.0.0" + "invariant": "^2.2.1", + "loose-envify": "^1.2.0", + "resolve-pathname": "^2.2.0", + "value-equal": "^0.4.0", + "warning": "^3.0.0" }, "dependencies": { "warning": { @@ -3828,7 +3828,7 @@ "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", "requires": { - "loose-envify": "1.3.1" + "loose-envify": "^1.0.0" } } } @@ -3839,9 +3839,9 @@ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "dev": true, "requires": { - "hash.js": "1.1.7", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, "hoist-non-react-statics": { @@ -3855,8 +3855,8 @@ "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", "dev": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.1" } }, "html-comment-regex": { @@ -3871,13 +3871,13 @@ "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", "dev": true, "requires": { - "camel-case": "3.0.0", - "clean-css": "4.2.1", - "commander": "2.17.1", - "he": "1.2.0", - "param-case": "2.1.1", - "relateurl": "0.2.7", - "uglify-js": "3.4.9" + "camel-case": "3.0.x", + "clean-css": "4.2.x", + "commander": "2.17.x", + "he": "1.2.x", + "param-case": "2.1.x", + "relateurl": "0.2.x", + "uglify-js": "3.4.x" }, "dependencies": { "commander": { @@ -3894,12 +3894,12 @@ "integrity": "sha1-sBq71yOsqqeze2r0SS69oD2d03s=", "dev": true, "requires": { - "html-minifier": "3.5.21", - "loader-utils": "0.2.17", - "lodash": "4.17.10", - "pretty-error": "2.1.1", - "tapable": "1.1.1", - "toposort": "1.0.7", + "html-minifier": "^3.2.3", + "loader-utils": "^0.2.16", + "lodash": "^4.17.3", + "pretty-error": "^2.0.2", + "tapable": "^1.0.0", + "toposort": "^1.0.0", "util.promisify": "1.0.0" }, "dependencies": { @@ -3909,10 +3909,10 @@ "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", "dev": true, "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1", - "object-assign": "4.1.1" + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0", + "object-assign": "^4.0.1" } } } @@ -3923,10 +3923,10 @@ "integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=", "dev": true, "requires": { - "domelementtype": "1.3.1", - "domhandler": "2.1.0", - "domutils": "1.1.6", - "readable-stream": "1.0.34" + "domelementtype": "1", + "domhandler": "2.1", + "domutils": "1.1", + "readable-stream": "1.0" }, "dependencies": { "domutils": { @@ -3935,7 +3935,7 @@ "integrity": "sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU=", "dev": true, "requires": { - "domelementtype": "1.3.1" + "domelementtype": "1" } }, "isarray": { @@ -3950,10 +3950,10 @@ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "string_decoder": { @@ -3975,7 +3975,7 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", "requires": { - "safer-buffer": "2.1.2" + "safer-buffer": ">= 2.1.2 < 3" } }, "icss-replace-symbols": { @@ -3990,7 +3990,7 @@ "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", "dev": true, "requires": { - "postcss": "6.0.23" + "postcss": "^6.0.1" }, "dependencies": { "ansi-styles": { @@ -3999,7 +3999,7 @@ "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", "dev": true, "requires": { - "color-convert": "1.9.2" + "color-convert": "^1.9.0" } }, "chalk": { @@ -4008,9 +4008,9 @@ "integrity": "sha1-GMSasWoDe26wFSzIPjRxM4IVtm4=", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "has-flag": { @@ -4025,9 +4025,9 @@ "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=", "dev": true, "requires": { - "chalk": "2.4.1", - "source-map": "0.6.1", - "supports-color": "5.4.0" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { @@ -4042,7 +4042,7 @@ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } @@ -4070,8 +4070,8 @@ "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", "dev": true, "requires": { - "pkg-dir": "3.0.0", - "resolve-cwd": "2.0.0" + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" }, "dependencies": { "find-up": { @@ -4080,7 +4080,7 @@ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "locate-path": "3.0.0" + "locate-path": "^3.0.0" } }, "locate-path": { @@ -4089,8 +4089,8 @@ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "p-locate": "3.0.0", - "path-exists": "3.0.0" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" } }, "p-limit": { @@ -4099,7 +4099,7 @@ "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", "dev": true, "requires": { - "p-try": "2.0.0" + "p-try": "^2.0.0" } }, "p-locate": { @@ -4108,7 +4108,7 @@ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "p-limit": "2.1.0" + "p-limit": "^2.0.0" } }, "p-try": { @@ -4123,7 +4123,7 @@ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, "requires": { - "find-up": "3.0.0" + "find-up": "^3.0.0" } } } @@ -4151,8 +4151,8 @@ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -4171,7 +4171,7 @@ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", "integrity": "sha1-YQ88ksk1nOHbYW5TgAjSP/NRWOY=", "requires": { - "loose-envify": "1.3.1" + "loose-envify": "^1.0.0" } }, "invert-kv": { @@ -4201,7 +4201,7 @@ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "dev": true, "requires": { - "binary-extensions": "1.11.0" + "binary-extensions": "^1.0.0" } }, "is-buffer": { @@ -4237,9 +4237,9 @@ "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", "dev": true, "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" }, "dependencies": { "kind-of": { @@ -4264,7 +4264,7 @@ "dev": true, "optional": true, "requires": { - "is-primitive": "2.0.0" + "is-primitive": "^2.0.0" } }, "is-extendable": { @@ -4285,7 +4285,7 @@ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "is-fullwidth-code-point": { @@ -4300,7 +4300,7 @@ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", "dev": true, "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.1" } }, "is-number": { @@ -4309,7 +4309,7 @@ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "is-plain-obj": { @@ -4324,7 +4324,7 @@ "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" } }, "is-posix-bracket": { @@ -4347,7 +4347,7 @@ "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", "dev": true, "requires": { - "has": "1.0.3" + "has": "^1.0.1" } }, "is-stream": { @@ -4361,7 +4361,7 @@ "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=", "dev": true, "requires": { - "html-comment-regex": "1.1.1" + "html-comment-regex": "^1.1.0" } }, "is-symbol": { @@ -4370,7 +4370,7 @@ "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", "dev": true, "requires": { - "has-symbols": "1.0.0" + "has-symbols": "^1.0.0" } }, "is-windows": { @@ -4402,8 +4402,8 @@ "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", "requires": { - "node-fetch": "1.7.3", - "whatwg-fetch": "2.0.4" + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" } }, "js-base64": { @@ -4423,8 +4423,8 @@ "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", "dev": true, "requires": { - "argparse": "1.0.10", - "esprima": "2.7.3" + "argparse": "^1.0.7", + "esprima": "^2.6.0" } }, "jsesc": { @@ -4456,7 +4456,7 @@ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", "requires": { - "graceful-fs": "4.1.11" + "graceful-fs": "^4.1.6" } }, "jvm-npm": { @@ -4470,7 +4470,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } }, "lcid": { @@ -4479,7 +4479,7 @@ "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", "dev": true, "requires": { - "invert-kv": "2.0.0" + "invert-kv": "^2.0.0" } }, "less-loader": { @@ -4488,9 +4488,9 @@ "integrity": "sha1-LBNSxbCaT4QQFJAnT9UWdN5BNj4=", "dev": true, "requires": { - "clone": "2.1.1", - "loader-utils": "1.1.0", - "pify": "3.0.0" + "clone": "^2.1.1", + "loader-utils": "^1.1.0", + "pify": "^3.0.0" }, "dependencies": { "clone": { @@ -4519,9 +4519,9 @@ "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", "dev": true, "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1" + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0" } }, "locate-path": { @@ -4530,8 +4530,8 @@ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" } }, "lodash": { @@ -4572,8 +4572,8 @@ "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz", "integrity": "sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=", "requires": { - "lodash._reinterpolate": "3.0.0", - "lodash.templatesettings": "4.1.0" + "lodash._reinterpolate": "~3.0.0", + "lodash.templatesettings": "^4.0.0" } }, "lodash.templatesettings": { @@ -4581,7 +4581,7 @@ "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz", "integrity": "sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=", "requires": { - "lodash._reinterpolate": "3.0.0" + "lodash._reinterpolate": "~3.0.0" } }, "lodash.uniq": { @@ -4595,7 +4595,7 @@ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", "requires": { - "js-tokens": "3.0.2" + "js-tokens": "^3.0.0" } }, "lower-case": { @@ -4610,7 +4610,7 @@ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, "requires": { - "yallist": "3.0.3" + "yallist": "^3.0.2" } }, "make-dir": { @@ -4619,7 +4619,7 @@ "integrity": "sha1-ecEDO4BRW9bSTsmTPoYMp17ifww=", "dev": true, "requires": { - "pify": "3.0.0" + "pify": "^3.0.0" }, "dependencies": { "pify": { @@ -4636,7 +4636,7 @@ "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", "dev": true, "requires": { - "p-defer": "1.0.0" + "p-defer": "^1.0.0" } }, "map-cache": { @@ -4651,7 +4651,7 @@ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dev": true, "requires": { - "object-visit": "1.0.1" + "object-visit": "^1.0.0" } }, "math-expression-evaluator": { @@ -4673,9 +4673,9 @@ "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "mem": { @@ -4684,9 +4684,9 @@ "integrity": "sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA==", "dev": true, "requires": { - "map-age-cleaner": "0.1.3", - "mimic-fn": "1.2.0", - "p-is-promise": "1.1.0" + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^1.0.0", + "p-is-promise": "^1.1.0" } }, "memory-fs": { @@ -4695,8 +4695,8 @@ "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", "dev": true, "requires": { - "errno": "0.1.7", - "readable-stream": "2.3.6" + "errno": "^0.1.3", + "readable-stream": "^2.0.1" } }, "micromatch": { @@ -4705,19 +4705,19 @@ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.2", - "nanomatch": "1.2.13", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" }, "dependencies": { "kind-of": { @@ -4734,8 +4734,8 @@ "integrity": "sha1-8IA1HIZbDcViqEYpZtqlNUPHik0=", "dev": true, "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0" + "bn.js": "^4.0.0", + "brorand": "^1.0.1" } }, "mimic-fn": { @@ -4761,7 +4761,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -4775,16 +4775,16 @@ "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", "dev": true, "requires": { - "concat-stream": "1.6.2", - "duplexify": "3.6.1", - "end-of-stream": "1.4.1", - "flush-write-stream": "1.0.3", - "from2": "2.3.0", - "parallel-transform": "1.1.0", - "pump": "3.0.0", - "pumpify": "1.5.1", - "stream-each": "1.2.3", - "through2": "2.0.5" + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" } }, "mixin-deep": { @@ -4793,8 +4793,8 @@ "integrity": "sha1-pJ5yaNzhoNlpjkUybFYm3zVD0P4=", "dev": true, "requires": { - "for-in": "1.0.2", - "is-extendable": "1.0.1" + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { @@ -4803,7 +4803,7 @@ "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", "dev": true, "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -4822,12 +4822,12 @@ "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", "dev": true, "requires": { - "aproba": "1.2.0", - "copy-concurrently": "1.0.5", - "fs-write-stream-atomic": "1.0.10", - "mkdirp": "0.5.1", - "rimraf": "2.6.3", - "run-queue": "1.0.3" + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" } }, "ms": { @@ -4849,17 +4849,17 @@ "integrity": "sha1-uHqKpPwN6P5r6IiVs4mD/yZb0Rk=", "dev": true, "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "fragment-cache": "0.2.1", - "is-windows": "1.0.2", - "kind-of": "6.0.2", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "kind-of": { @@ -4888,7 +4888,7 @@ "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", "dev": true, "requires": { - "lower-case": "1.1.4" + "lower-case": "^1.1.1" } }, "node-fetch": { @@ -4896,8 +4896,8 @@ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", "integrity": "sha1-mA9vcthSEaU0fGsrwYxbhMPrR+8=", "requires": { - "encoding": "0.1.12", - "is-stream": "1.1.0" + "encoding": "^0.1.11", + "is-stream": "^1.0.1" } }, "node-libs-browser": { @@ -4906,28 +4906,28 @@ "integrity": "sha1-X5QmPUBPbkR2fXJpAf/wVHjWAN8=", "dev": true, "requires": { - "assert": "1.4.1", - "browserify-zlib": "0.2.0", - "buffer": "4.9.1", - "console-browserify": "1.1.0", - "constants-browserify": "1.0.0", - "crypto-browserify": "3.12.0", - "domain-browser": "1.2.0", - "events": "1.1.1", - "https-browserify": "1.0.0", - "os-browserify": "0.3.0", + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^1.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", "path-browserify": "0.0.0", - "process": "0.11.10", - "punycode": "1.4.1", - "querystring-es3": "0.2.1", - "readable-stream": "2.3.6", - "stream-browserify": "2.0.1", - "stream-http": "2.8.3", - "string_decoder": "1.1.1", - "timers-browserify": "2.0.10", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", "tty-browserify": "0.0.0", - "url": "0.11.0", - "util": "0.10.4", + "url": "^0.11.0", + "util": "^0.10.3", "vm-browserify": "0.0.4" }, "dependencies": { @@ -4945,7 +4945,7 @@ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { - "remove-trailing-separator": "1.1.0" + "remove-trailing-separator": "^1.0.1" } }, "normalize-range": { @@ -4960,10 +4960,10 @@ "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", "dev": true, "requires": { - "object-assign": "4.1.1", - "prepend-http": "1.0.4", - "query-string": "4.3.4", - "sort-keys": "1.1.2" + "object-assign": "^4.0.1", + "prepend-http": "^1.0.0", + "query-string": "^4.1.0", + "sort-keys": "^1.0.0" } }, "npm-run-path": { @@ -4972,7 +4972,7 @@ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dev": true, "requires": { - "path-key": "2.0.1" + "path-key": "^2.0.0" } }, "nth-check": { @@ -4981,7 +4981,7 @@ "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", "dev": true, "requires": { - "boolbase": "1.0.0" + "boolbase": "~1.0.0" } }, "num2fraction": { @@ -5007,9 +5007,9 @@ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dev": true, "requires": { - "copy-descriptor": "0.1.1", - "define-property": "0.2.5", - "kind-of": "3.2.2" + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" }, "dependencies": { "define-property": { @@ -5018,7 +5018,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } } } @@ -5035,7 +5035,7 @@ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.0" } }, "object.getownpropertydescriptors": { @@ -5044,8 +5044,8 @@ "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", "dev": true, "requires": { - "define-properties": "1.1.3", - "es-abstract": "1.12.0" + "define-properties": "^1.1.2", + "es-abstract": "^1.5.1" } }, "object.omit": { @@ -5055,8 +5055,8 @@ "dev": true, "optional": true, "requires": { - "for-own": "0.1.5", - "is-extendable": "0.1.1" + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" } }, "object.pick": { @@ -5065,7 +5065,7 @@ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" } }, "once": { @@ -5073,7 +5073,7 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "os-browserify": { @@ -5094,9 +5094,9 @@ "integrity": "sha512-7g5e7dmXPtzcP4bgsZ8ixDVqA7oWYuEz4lOSujeWyliPai4gfVDiFIcwBg3aGCPnmSGfzOKTK3ccPn0CKv3DBw==", "dev": true, "requires": { - "execa": "0.10.0", - "lcid": "2.0.0", - "mem": "4.0.0" + "execa": "^0.10.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" } }, "os-tmpdir": { @@ -5111,9 +5111,9 @@ "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "mkdirp": "0.5.1", - "object-assign": "4.1.1" + "graceful-fs": "^4.1.4", + "mkdirp": "^0.5.1", + "object-assign": "^4.1.0" } }, "p-defer": { @@ -5140,7 +5140,7 @@ "integrity": "sha1-uGvV8MJWkJEcdZD8v8IBDVSzzLg=", "dev": true, "requires": { - "p-try": "1.0.0" + "p-try": "^1.0.0" } }, "p-locate": { @@ -5149,7 +5149,7 @@ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "requires": { - "p-limit": "1.3.0" + "p-limit": "^1.1.0" } }, "p-try": { @@ -5170,9 +5170,9 @@ "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", "dev": true, "requires": { - "cyclist": "0.2.2", - "inherits": "2.0.3", - "readable-stream": "2.3.6" + "cyclist": "~0.2.2", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" } }, "param-case": { @@ -5181,7 +5181,7 @@ "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", "dev": true, "requires": { - "no-case": "2.3.2" + "no-case": "^2.2.0" } }, "parse-asn1": { @@ -5204,10 +5204,10 @@ "dev": true, "optional": true, "requires": { - "glob-base": "0.3.0", - "is-dotfile": "1.0.3", - "is-extglob": "1.0.0", - "is-glob": "2.0.1" + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" }, "dependencies": { "is-extglob": { @@ -5223,7 +5223,7 @@ "dev": true, "optional": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } } } @@ -5284,11 +5284,11 @@ "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", "dev": true, "requires": { - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "ripemd160": "2.0.2", - "safe-buffer": "5.1.2", - "sha.js": "2.4.11" + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, "pkg-dir": { @@ -5297,7 +5297,7 @@ "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", "dev": true, "requires": { - "find-up": "2.1.0" + "find-up": "^2.1.0" } }, "posix-character-classes": { @@ -5312,10 +5312,10 @@ "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", "dev": true, "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.5", - "source-map": "0.5.7", - "supports-color": "3.2.3" + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" }, "dependencies": { "has-flag": { @@ -5330,7 +5330,7 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" } } } @@ -5341,9 +5341,9 @@ "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=", "dev": true, "requires": { - "postcss": "5.2.18", - "postcss-message-helpers": "2.0.0", - "reduce-css-calc": "1.3.0" + "postcss": "^5.0.2", + "postcss-message-helpers": "^2.0.0", + "reduce-css-calc": "^1.2.6" } }, "postcss-colormin": { @@ -5352,9 +5352,9 @@ "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=", "dev": true, "requires": { - "colormin": "1.1.2", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "colormin": "^1.0.5", + "postcss": "^5.0.13", + "postcss-value-parser": "^3.2.3" } }, "postcss-convert-values": { @@ -5363,8 +5363,8 @@ "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=", "dev": true, "requires": { - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "postcss": "^5.0.11", + "postcss-value-parser": "^3.1.2" } }, "postcss-discard-comments": { @@ -5373,7 +5373,7 @@ "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.14" } }, "postcss-discard-duplicates": { @@ -5382,7 +5382,7 @@ "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.4" } }, "postcss-discard-empty": { @@ -5391,7 +5391,7 @@ "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.14" } }, "postcss-discard-overridden": { @@ -5400,7 +5400,7 @@ "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.16" } }, "postcss-discard-unused": { @@ -5409,8 +5409,8 @@ "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=", "dev": true, "requires": { - "postcss": "5.2.18", - "uniqs": "2.0.0" + "postcss": "^5.0.14", + "uniqs": "^2.0.0" } }, "postcss-filter-plugins": { @@ -5419,7 +5419,7 @@ "integrity": "sha1-giRf34IzcEFkXkdxFNjlk6oYuOw=", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.4" } }, "postcss-merge-idents": { @@ -5428,9 +5428,9 @@ "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=", "dev": true, "requires": { - "has": "1.0.3", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "has": "^1.0.1", + "postcss": "^5.0.10", + "postcss-value-parser": "^3.1.1" } }, "postcss-merge-longhand": { @@ -5439,7 +5439,7 @@ "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.4" } }, "postcss-merge-rules": { @@ -5448,11 +5448,11 @@ "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=", "dev": true, "requires": { - "browserslist": "1.7.7", - "caniuse-api": "1.6.1", - "postcss": "5.2.18", - "postcss-selector-parser": "2.2.3", - "vendors": "1.0.2" + "browserslist": "^1.5.2", + "caniuse-api": "^1.5.2", + "postcss": "^5.0.4", + "postcss-selector-parser": "^2.2.2", + "vendors": "^1.0.0" } }, "postcss-message-helpers": { @@ -5467,9 +5467,9 @@ "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=", "dev": true, "requires": { - "object-assign": "4.1.1", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "object-assign": "^4.0.1", + "postcss": "^5.0.4", + "postcss-value-parser": "^3.0.2" } }, "postcss-minify-gradients": { @@ -5478,8 +5478,8 @@ "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=", "dev": true, "requires": { - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "postcss": "^5.0.12", + "postcss-value-parser": "^3.3.0" } }, "postcss-minify-params": { @@ -5488,10 +5488,10 @@ "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=", "dev": true, "requires": { - "alphanum-sort": "1.0.2", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0", - "uniqs": "2.0.0" + "alphanum-sort": "^1.0.1", + "postcss": "^5.0.2", + "postcss-value-parser": "^3.0.2", + "uniqs": "^2.0.0" } }, "postcss-minify-selectors": { @@ -5500,10 +5500,10 @@ "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=", "dev": true, "requires": { - "alphanum-sort": "1.0.2", - "has": "1.0.3", - "postcss": "5.2.18", - "postcss-selector-parser": "2.2.3" + "alphanum-sort": "^1.0.2", + "has": "^1.0.1", + "postcss": "^5.0.14", + "postcss-selector-parser": "^2.0.0" } }, "postcss-modules-extract-imports": { @@ -5512,7 +5512,7 @@ "integrity": "sha1-ZhQOzs447wa/DT41XWm/WdFB6oU=", "dev": true, "requires": { - "postcss": "6.0.23" + "postcss": "^6.0.1" }, "dependencies": { "ansi-styles": { @@ -5521,7 +5521,7 @@ "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", "dev": true, "requires": { - "color-convert": "1.9.2" + "color-convert": "^1.9.0" } }, "chalk": { @@ -5530,9 +5530,9 @@ "integrity": "sha1-GMSasWoDe26wFSzIPjRxM4IVtm4=", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "has-flag": { @@ -5547,9 +5547,9 @@ "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=", "dev": true, "requires": { - "chalk": "2.4.1", - "source-map": "0.6.1", - "supports-color": "5.4.0" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { @@ -5564,7 +5564,7 @@ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } @@ -5575,8 +5575,8 @@ "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", "dev": true, "requires": { - "css-selector-tokenizer": "0.7.0", - "postcss": "6.0.23" + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" }, "dependencies": { "ansi-styles": { @@ -5585,7 +5585,7 @@ "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", "dev": true, "requires": { - "color-convert": "1.9.2" + "color-convert": "^1.9.0" } }, "chalk": { @@ -5594,9 +5594,9 @@ "integrity": "sha1-GMSasWoDe26wFSzIPjRxM4IVtm4=", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "has-flag": { @@ -5611,9 +5611,9 @@ "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=", "dev": true, "requires": { - "chalk": "2.4.1", - "source-map": "0.6.1", - "supports-color": "5.4.0" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { @@ -5628,7 +5628,7 @@ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } @@ -5639,8 +5639,8 @@ "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", "dev": true, "requires": { - "css-selector-tokenizer": "0.7.0", - "postcss": "6.0.23" + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" }, "dependencies": { "ansi-styles": { @@ -5649,7 +5649,7 @@ "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", "dev": true, "requires": { - "color-convert": "1.9.2" + "color-convert": "^1.9.0" } }, "chalk": { @@ -5658,9 +5658,9 @@ "integrity": "sha1-GMSasWoDe26wFSzIPjRxM4IVtm4=", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "has-flag": { @@ -5675,9 +5675,9 @@ "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=", "dev": true, "requires": { - "chalk": "2.4.1", - "source-map": "0.6.1", - "supports-color": "5.4.0" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { @@ -5692,7 +5692,7 @@ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } @@ -5703,8 +5703,8 @@ "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", "dev": true, "requires": { - "icss-replace-symbols": "1.1.0", - "postcss": "6.0.23" + "icss-replace-symbols": "^1.1.0", + "postcss": "^6.0.1" }, "dependencies": { "ansi-styles": { @@ -5713,7 +5713,7 @@ "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", "dev": true, "requires": { - "color-convert": "1.9.2" + "color-convert": "^1.9.0" } }, "chalk": { @@ -5722,9 +5722,9 @@ "integrity": "sha1-GMSasWoDe26wFSzIPjRxM4IVtm4=", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "has-flag": { @@ -5739,9 +5739,9 @@ "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=", "dev": true, "requires": { - "chalk": "2.4.1", - "source-map": "0.6.1", - "supports-color": "5.4.0" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { @@ -5756,7 +5756,7 @@ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } @@ -5767,7 +5767,7 @@ "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.5" } }, "postcss-normalize-url": { @@ -5776,10 +5776,10 @@ "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=", "dev": true, "requires": { - "is-absolute-url": "2.1.0", - "normalize-url": "1.9.1", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "is-absolute-url": "^2.0.0", + "normalize-url": "^1.4.0", + "postcss": "^5.0.14", + "postcss-value-parser": "^3.2.3" } }, "postcss-ordered-values": { @@ -5788,8 +5788,8 @@ "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=", "dev": true, "requires": { - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "postcss": "^5.0.4", + "postcss-value-parser": "^3.0.1" } }, "postcss-reduce-idents": { @@ -5798,8 +5798,8 @@ "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=", "dev": true, "requires": { - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "postcss": "^5.0.4", + "postcss-value-parser": "^3.0.2" } }, "postcss-reduce-initial": { @@ -5808,7 +5808,7 @@ "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.4" } }, "postcss-reduce-transforms": { @@ -5817,9 +5817,9 @@ "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=", "dev": true, "requires": { - "has": "1.0.3", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "has": "^1.0.1", + "postcss": "^5.0.8", + "postcss-value-parser": "^3.0.1" } }, "postcss-selector-parser": { @@ -5828,9 +5828,9 @@ "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=", "dev": true, "requires": { - "flatten": "1.0.2", - "indexes-of": "1.0.1", - "uniq": "1.0.1" + "flatten": "^1.0.2", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" } }, "postcss-svgo": { @@ -5839,10 +5839,10 @@ "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=", "dev": true, "requires": { - "is-svg": "2.1.0", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0", - "svgo": "0.7.2" + "is-svg": "^2.0.0", + "postcss": "^5.0.14", + "postcss-value-parser": "^3.2.3", + "svgo": "^0.7.0" } }, "postcss-unique-selectors": { @@ -5851,9 +5851,9 @@ "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=", "dev": true, "requires": { - "alphanum-sort": "1.0.2", - "postcss": "5.2.18", - "uniqs": "2.0.0" + "alphanum-sort": "^1.0.1", + "postcss": "^5.0.4", + "uniqs": "^2.0.0" } }, "postcss-value-parser": { @@ -5868,9 +5868,9 @@ "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=", "dev": true, "requires": { - "has": "1.0.3", - "postcss": "5.2.18", - "uniqs": "2.0.0" + "has": "^1.0.1", + "postcss": "^5.0.4", + "uniqs": "^2.0.0" } }, "prepend-http": { @@ -5892,8 +5892,8 @@ "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", "dev": true, "requires": { - "renderkid": "2.0.2", - "utila": "0.4.0" + "renderkid": "^2.0.1", + "utila": "~0.4" } }, "private": { @@ -5919,7 +5919,7 @@ "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", "integrity": "sha1-BktyYCsY+Q8pGSuLG8QY/9Hr078=", "requires": { - "asap": "2.0.6" + "asap": "~2.0.3" } }, "promise-inflight": { @@ -5933,8 +5933,8 @@ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz", "integrity": "sha1-BdXKd7RFPphdYPx/+MhZCUpJcQI=", "requires": { - "loose-envify": "1.3.1", - "object-assign": "4.1.1" + "loose-envify": "^1.3.1", + "object-assign": "^4.1.1" } }, "prr": { @@ -5949,12 +5949,12 @@ "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dev": true, "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.2.0", - "parse-asn1": "5.1.1", - "randombytes": "2.0.6", - "safe-buffer": "5.1.2" + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "pump": { @@ -5963,8 +5963,8 @@ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "once": "1.4.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, "pumpify": { @@ -5973,9 +5973,9 @@ "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", "dev": true, "requires": { - "duplexify": "3.6.1", - "inherits": "2.0.3", - "pump": "2.0.1" + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" }, "dependencies": { "pump": { @@ -5984,8 +5984,8 @@ "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "once": "1.4.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } } } @@ -6008,8 +6008,8 @@ "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", "dev": true, "requires": { - "object-assign": "4.1.1", - "strict-uri-encode": "1.1.0" + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" } }, "querystring": { @@ -6031,9 +6031,9 @@ "dev": true, "optional": true, "requires": { - "is-number": "4.0.0", - "kind-of": "6.0.2", - "math-random": "1.0.1" + "is-number": "^4.0.0", + "kind-of": "^6.0.0", + "math-random": "^1.0.1" }, "dependencies": { "is-number": { @@ -6058,7 +6058,7 @@ "integrity": "sha1-0wLFIpSFiISKjTAMkytEwkIx2oA=", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "^5.1.0" } }, "randomfill": { @@ -6067,8 +6067,8 @@ "integrity": "sha1-ySGW/IarQr6YPxvzF3giSTHWFFg=", "dev": true, "requires": { - "randombytes": "2.0.6", - "safe-buffer": "5.1.2" + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" } }, "react": { @@ -6076,10 +6076,10 @@ "resolved": "https://registry.npmjs.org/react/-/react-16.4.1.tgz", "integrity": "sha512-3GEs0giKp6E0Oh/Y9ZC60CmYgUPnp7voH9fbjWsvXtYFb4EWtgQub0ADSq0sJR0BbHc4FThLLtzlcFaFXIorwg==", "requires": { - "fbjs": "0.8.17", - "loose-envify": "1.3.1", - "object-assign": "4.1.1", - "prop-types": "15.6.2" + "fbjs": "^0.8.16", + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.0" } }, "react-dom": { @@ -6087,10 +6087,10 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.4.1.tgz", "integrity": "sha512-1Gin+wghF/7gl4Cqcvr1DxFX2Osz7ugxSwl6gBqCMpdrxHjIFUS7GYxrFftZ9Ln44FHw0JxCFD9YtZsrbR5/4A==", "requires": { - "fbjs": "0.8.17", - "loose-envify": "1.3.1", - "object-assign": "4.1.1", - "prop-types": "15.6.2" + "fbjs": "^0.8.16", + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.0" } }, "react-is": { @@ -6103,12 +6103,12 @@ "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-5.0.7.tgz", "integrity": "sha1-DcEHbZr7RnD5k/+u9EuPjBFVpMg=", "requires": { - "hoist-non-react-statics": "2.5.5", - "invariant": "2.2.4", - "lodash": "4.17.10", - "lodash-es": "4.17.10", - "loose-envify": "1.3.1", - "prop-types": "15.6.2" + "hoist-non-react-statics": "^2.5.0", + "invariant": "^2.0.0", + "lodash": "^4.17.5", + "lodash-es": "^4.17.5", + "loose-envify": "^1.1.0", + "prop-types": "^15.6.0" } }, "react-router": { @@ -6116,16 +6116,16 @@ "resolved": "https://registry.npmjs.org/react-router/-/react-router-4.4.0-beta.6.tgz", "integrity": "sha512-esR1UHsPpfvehX5Qn7wQrOTFsl4PxiaX3GaYvtFDSEioMsTl0zkASJBm1fXKgR9brUQX9kgiGq6XnCsiJU/82g==", "requires": { - "@babel/runtime": "7.2.0", - "create-react-context": "0.2.3", - "history": "4.8.0-beta.0", - "hoist-non-react-statics": "2.5.5", - "loose-envify": "1.3.1", - "path-to-regexp": "1.7.0", - "prop-types": "15.6.2", - "react-is": "16.6.3", - "tiny-invariant": "1.0.3", - "tiny-warning": "1.0.0" + "@babel/runtime": "^7.1.2", + "create-react-context": "^0.2.2", + "history": "^4.8.0-beta.0", + "hoist-non-react-statics": "^2.5.0", + "loose-envify": "^1.3.1", + "path-to-regexp": "^1.7.0", + "prop-types": "^15.6.2", + "react-is": "^16.5.2", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" }, "dependencies": { "history": { @@ -6133,12 +6133,12 @@ "resolved": "https://registry.npmjs.org/history/-/history-4.8.0-beta.0.tgz", "integrity": "sha512-LDjPtGgAFDO3lZ+bumN67k0R3GWvUBLLgRJpFU2mnJ1w+D5rEbiZC1c37yPla7tx/dUzVfznt5Rmttnz0MvGdA==", "requires": { - "@babel/runtime": "7.2.0", - "loose-envify": "1.3.1", - "resolve-pathname": "2.2.0", - "tiny-invariant": "1.0.3", - "tiny-warning": "1.0.0", - "value-equal": "0.4.0" + "@babel/runtime": "^7.1.2", + "loose-envify": "^1.2.0", + "resolve-pathname": "^2.2.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0", + "value-equal": "^0.4.0" } } } @@ -6148,11 +6148,11 @@ "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-4.4.0-alpha.1.tgz", "integrity": "sha1-EgfmmFNJ6wvXms4azhx89ni80cQ=", "requires": { - "history": "4.7.2", - "invariant": "2.2.4", - "loose-envify": "1.3.1", - "prop-types": "15.6.2", - "react-router": "4.4.0-beta.6" + "history": "^4.7.2", + "invariant": "^2.2.4", + "loose-envify": "^1.3.1", + "prop-types": "^15.6.1", + "react-router": "^4.4.0-alpha.1" } }, "react-router-redux": { @@ -6166,13 +6166,13 @@ "integrity": "sha1-sRwn2IuP8fvgcGQ8+UsMea4bCq8=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "readdirp": { @@ -6181,10 +6181,10 @@ "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "minimatch": "3.0.4", - "readable-stream": "2.3.6", - "set-immediate-shim": "1.0.1" + "graceful-fs": "^4.1.2", + "minimatch": "^3.0.2", + "readable-stream": "^2.0.2", + "set-immediate-shim": "^1.0.1" } }, "reduce-css-calc": { @@ -6193,9 +6193,9 @@ "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=", "dev": true, "requires": { - "balanced-match": "0.4.2", - "math-expression-evaluator": "1.2.17", - "reduce-function-call": "1.0.2" + "balanced-match": "^0.4.2", + "math-expression-evaluator": "^1.2.14", + "reduce-function-call": "^1.0.1" }, "dependencies": { "balanced-match": { @@ -6212,7 +6212,7 @@ "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=", "dev": true, "requires": { - "balanced-match": "0.4.2" + "balanced-match": "^0.4.2" }, "dependencies": { "balanced-match": { @@ -6228,8 +6228,8 @@ "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.0.tgz", "integrity": "sha1-qmmKkrcpMV0is0oFU9fmUzVVzAM=", "requires": { - "loose-envify": "1.3.1", - "symbol-observable": "1.2.0" + "loose-envify": "^1.1.0", + "symbol-observable": "^1.2.0" } }, "redux-immutable": { @@ -6255,9 +6255,9 @@ "integrity": "sha1-HkmWg3Ix2ot/PPQRTXG1aRoGgN0=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "private": "0.1.8" + "babel-runtime": "^6.18.0", + "babel-types": "^6.19.0", + "private": "^0.1.6" } }, "regex-cache": { @@ -6267,7 +6267,7 @@ "dev": true, "optional": true, "requires": { - "is-equal-shallow": "0.1.3" + "is-equal-shallow": "^0.1.3" } }, "regex-not": { @@ -6276,8 +6276,8 @@ "integrity": "sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw=", "dev": true, "requires": { - "extend-shallow": "3.0.2", - "safe-regex": "1.1.0" + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" } }, "regexpu-core": { @@ -6286,9 +6286,9 @@ "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", "dev": true, "requires": { - "regenerate": "1.4.0", - "regjsgen": "0.2.0", - "regjsparser": "0.1.5" + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" } }, "regjsgen": { @@ -6303,7 +6303,7 @@ "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", "dev": true, "requires": { - "jsesc": "0.5.0" + "jsesc": "~0.5.0" }, "dependencies": { "jsesc": { @@ -6332,11 +6332,11 @@ "integrity": "sha512-FsygIxevi1jSiPY9h7vZmBFUbAOcbYm9UwyiLNdVsLRs/5We9Ob5NMPbGYUTWiLq5L+ezlVdE0A8bbME5CWTpg==", "dev": true, "requires": { - "css-select": "1.2.0", - "dom-converter": "0.2.0", - "htmlparser2": "3.3.0", - "strip-ansi": "3.0.1", - "utila": "0.4.0" + "css-select": "^1.1.0", + "dom-converter": "~0.2", + "htmlparser2": "~3.3.0", + "strip-ansi": "^3.0.0", + "utila": "^0.4.0" } }, "repeat-element": { @@ -6357,7 +6357,7 @@ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", "dev": true, "requires": { - "is-finite": "1.0.2" + "is-finite": "^1.0.0" } }, "require-directory": { @@ -6378,7 +6378,7 @@ "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", "dev": true, "requires": { - "resolve-from": "3.0.0" + "resolve-from": "^3.0.0" } }, "resolve-from": { @@ -6410,7 +6410,7 @@ "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "dev": true, "requires": { - "glob": "7.1.3" + "glob": "^7.1.3" }, "dependencies": { "glob": { @@ -6419,12 +6419,12 @@ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } } } @@ -6435,8 +6435,8 @@ "integrity": "sha1-ocGm9iR1FXe6XQeRTLyShQWFiQw=", "dev": true, "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3" + "hash-base": "^3.0.0", + "inherits": "^2.0.1" } }, "run-queue": { @@ -6445,7 +6445,7 @@ "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", "dev": true, "requires": { - "aproba": "1.2.0" + "aproba": "^1.1.1" } }, "safe-buffer": { @@ -6480,8 +6480,8 @@ "integrity": "sha512-yYrjb9TX2k/J1Y5UNy3KYdZq10xhYcF8nMpAW6o3hy6Q8WSIEf9lJHG/ePnOBfziPM3fvQwfOwa13U/Fh8qTfA==", "dev": true, "requires": { - "ajv": "6.5.2", - "ajv-keywords": "3.2.0" + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0" } }, "semver": { @@ -6514,10 +6514,10 @@ "integrity": "sha1-ca5KiPD+77v1LR6mBPP7MV67YnQ=", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "split-string": "3.1.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" }, "dependencies": { "extend-shallow": { @@ -6526,7 +6526,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -6552,7 +6552,7 @@ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "requires": { - "shebang-regex": "1.0.0" + "shebang-regex": "^1.0.0" } }, "shebang-regex": { @@ -6579,14 +6579,14 @@ "integrity": "sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0=", "dev": true, "requires": { - "base": "0.11.2", - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "map-cache": "0.2.2", - "source-map": "0.5.7", - "source-map-resolve": "0.5.2", - "use": "3.1.1" + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" }, "dependencies": { "define-property": { @@ -6595,7 +6595,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -6604,7 +6604,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -6615,9 +6615,9 @@ "integrity": "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=", "dev": true, "requires": { - "define-property": "1.0.0", - "isobject": "3.0.1", - "snapdragon-util": "3.0.1" + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" }, "dependencies": { "define-property": { @@ -6626,7 +6626,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "is-accessor-descriptor": { @@ -6635,7 +6635,7 @@ "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -6644,7 +6644,7 @@ "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -6653,9 +6653,9 @@ "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, "kind-of": { @@ -6672,7 +6672,7 @@ "integrity": "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.2.0" } }, "sort-keys": { @@ -6681,7 +6681,7 @@ "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", "dev": true, "requires": { - "is-plain-obj": "1.1.0" + "is-plain-obj": "^1.0.0" } }, "source-list-map": { @@ -6702,11 +6702,11 @@ "integrity": "sha1-cuLMNAlVQ+Q7LGKyxMENSpBU8lk=", "dev": true, "requires": { - "atob": "2.1.2", - "decode-uri-component": "0.2.0", - "resolve-url": "0.2.1", - "source-map-url": "0.4.0", - "urix": "0.1.0" + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" } }, "source-map-support": { @@ -6715,7 +6715,7 @@ "integrity": "sha1-Aoam3ovkJkEzhZTpfM6nXwosWF8=", "dev": true, "requires": { - "source-map": "0.5.7" + "source-map": "^0.5.6" } }, "source-map-url": { @@ -6730,7 +6730,7 @@ "integrity": "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=", "dev": true, "requires": { - "extend-shallow": "3.0.2" + "extend-shallow": "^3.0.0" } }, "sprintf-js": { @@ -6745,7 +6745,7 @@ "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", "dev": true, "requires": { - "figgy-pudding": "3.5.1" + "figgy-pudding": "^3.5.1" } }, "static-extend": { @@ -6754,8 +6754,8 @@ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "dev": true, "requires": { - "define-property": "0.2.5", - "object-copy": "0.1.0" + "define-property": "^0.2.5", + "object-copy": "^0.1.0" }, "dependencies": { "define-property": { @@ -6764,7 +6764,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } } } @@ -6785,8 +6785,8 @@ "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "stream-shift": "1.0.0" + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" } }, "stream-http": { @@ -6795,11 +6795,11 @@ "integrity": "sha1-stJCRpKIpaJ+xP6JM6z2I95lFPw=", "dev": true, "requires": { - "builtin-status-codes": "3.0.0", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "to-arraybuffer": "1.0.1", - "xtend": "4.0.1" + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" } }, "stream-shift": { @@ -6820,8 +6820,8 @@ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" }, "dependencies": { "ansi-regex": { @@ -6836,7 +6836,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } } } @@ -6847,7 +6847,7 @@ "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "~5.1.0" } }, "strip-ansi": { @@ -6855,7 +6855,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-eof": { @@ -6870,8 +6870,8 @@ "integrity": "sha1-aMUuXrKvycqStidL4nfuWa6jqFI=", "dev": true, "requires": { - "loader-utils": "1.1.0", - "schema-utils": "0.4.5" + "loader-utils": "^1.1.0", + "schema-utils": "^0.4.5" } }, "supports-color": { @@ -6880,7 +6880,7 @@ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } }, "svgo": { @@ -6889,13 +6889,13 @@ "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=", "dev": true, "requires": { - "coa": "1.0.4", - "colors": "1.1.2", - "csso": "2.3.2", - "js-yaml": "3.7.0", - "mkdirp": "0.5.1", - "sax": "1.2.4", - "whet.extend": "0.9.9" + "coa": "~1.0.1", + "colors": "~1.1.2", + "csso": "~2.3.1", + "js-yaml": "~3.7.0", + "mkdirp": "~0.5.1", + "sax": "~1.2.1", + "whet.extend": "~0.9.9" } }, "symbol-observable": { @@ -6915,9 +6915,9 @@ "integrity": "sha512-ogyZye4DFqOtMzT92Y3Nxxw8OvXmL39HOALro4fc+EUYFFF9G/kk0znkvwMz6PPYgBtdKAodh3FPR70eugdaQA==", "dev": true, "requires": { - "commander": "2.17.1", - "source-map": "0.6.1", - "source-map-support": "0.5.9" + "commander": "~2.17.1", + "source-map": "~0.6.1", + "source-map-support": "~0.5.6" }, "dependencies": { "commander": { @@ -6938,8 +6938,8 @@ "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==", "dev": true, "requires": { - "buffer-from": "1.1.1", - "source-map": "0.6.1" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } } } @@ -6950,14 +6950,14 @@ "integrity": "sha512-QW7RACLS89RalHtLDb0s8+Iqcs/IAEw1rnVrV+mS7Gx1kgPG8o1g33JhAGDgc/CQ84hLsTW5WrAMdVysh692yg==", "dev": true, "requires": { - "cacache": "11.3.2", - "find-cache-dir": "2.0.0", - "schema-utils": "1.0.0", - "serialize-javascript": "1.6.0", - "source-map": "0.6.1", - "terser": "3.13.1", - "webpack-sources": "1.3.0", - "worker-farm": "1.6.0" + "cacache": "^11.0.2", + "find-cache-dir": "^2.0.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^1.4.0", + "source-map": "^0.6.1", + "terser": "^3.8.1", + "webpack-sources": "^1.1.0", + "worker-farm": "^1.5.2" }, "dependencies": { "find-cache-dir": { @@ -6966,9 +6966,9 @@ "integrity": "sha512-LDUY6V1Xs5eFskUVYtIwatojt6+9xC9Chnlk/jYOOvn3FAFfSaWddxahDGyNHh0b2dMXa6YW2m0tk8TdVaXHlA==", "dev": true, "requires": { - "commondir": "1.0.1", - "make-dir": "1.3.0", - "pkg-dir": "3.0.0" + "commondir": "^1.0.1", + "make-dir": "^1.0.0", + "pkg-dir": "^3.0.0" } }, "find-up": { @@ -6977,7 +6977,7 @@ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "locate-path": "3.0.0" + "locate-path": "^3.0.0" } }, "locate-path": { @@ -6986,8 +6986,8 @@ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "p-locate": "3.0.0", - "path-exists": "3.0.0" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" } }, "p-limit": { @@ -6996,7 +6996,7 @@ "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", "dev": true, "requires": { - "p-try": "2.0.0" + "p-try": "^2.0.0" } }, "p-locate": { @@ -7005,7 +7005,7 @@ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "p-limit": "2.1.0" + "p-limit": "^2.0.0" } }, "p-try": { @@ -7020,7 +7020,7 @@ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, "requires": { - "find-up": "3.0.0" + "find-up": "^3.0.0" } }, "schema-utils": { @@ -7029,9 +7029,9 @@ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dev": true, "requires": { - "ajv": "6.5.2", - "ajv-errors": "1.0.1", - "ajv-keywords": "3.2.0" + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" } }, "source-map": { @@ -7048,8 +7048,8 @@ "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "requires": { - "readable-stream": "2.3.6", - "xtend": "4.0.1" + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" } }, "timers-browserify": { @@ -7058,7 +7058,7 @@ "integrity": "sha1-HSjj0qrfHVpZlsTp+VYBzQU0gK4=", "dev": true, "requires": { - "setimmediate": "1.0.5" + "setimmediate": "^1.0.4" } }, "tiny-invariant": { @@ -7089,7 +7089,7 @@ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "to-regex": { @@ -7098,10 +7098,10 @@ "integrity": "sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4=", "dev": true, "requires": { - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "regex-not": "1.0.2", - "safe-regex": "1.1.0" + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" } }, "to-regex-range": { @@ -7110,8 +7110,8 @@ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "requires": { - "is-number": "3.0.0", - "repeat-string": "1.6.1" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" } }, "toposort": { @@ -7155,8 +7155,8 @@ "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", "dev": true, "requires": { - "commander": "2.17.1", - "source-map": "0.6.1" + "commander": "~2.17.1", + "source-map": "~0.6.1" }, "dependencies": { "commander": { @@ -7179,10 +7179,10 @@ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", "dev": true, "requires": { - "arr-union": "3.1.0", - "get-value": "2.0.6", - "is-extendable": "0.1.1", - "set-value": "0.4.3" + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" }, "dependencies": { "extend-shallow": { @@ -7191,7 +7191,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "set-value": { @@ -7200,10 +7200,10 @@ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "to-object-path": "0.3.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" } } } @@ -7226,7 +7226,7 @@ "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", "dev": true, "requires": { - "unique-slug": "2.0.1" + "unique-slug": "^2.0.0" } }, "unique-slug": { @@ -7235,7 +7235,7 @@ "integrity": "sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==", "dev": true, "requires": { - "imurmurhash": "0.1.4" + "imurmurhash": "^0.1.4" } }, "universalify": { @@ -7249,8 +7249,8 @@ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "dev": true, "requires": { - "has-value": "0.3.1", - "isobject": "3.0.1" + "has-value": "^0.3.1", + "isobject": "^3.0.0" }, "dependencies": { "has-value": { @@ -7259,9 +7259,9 @@ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "dev": true, "requires": { - "get-value": "2.0.6", - "has-values": "0.1.4", - "isobject": "2.1.0" + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" }, "dependencies": { "isobject": { @@ -7301,7 +7301,7 @@ "integrity": "sha1-lMVA4f93KVbiKZUHwBCupsiDjrA=", "dev": true, "requires": { - "punycode": "2.1.1" + "punycode": "^2.1.0" } }, "urix": { @@ -7361,8 +7361,8 @@ "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", "dev": true, "requires": { - "define-properties": "1.1.3", - "object.getownpropertydescriptors": "2.0.3" + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" } }, "utila": { @@ -7383,7 +7383,7 @@ "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", "dev": true, "requires": { - "user-home": "1.1.1" + "user-home": "^1.1.1" } }, "value-equal": { @@ -7411,7 +7411,7 @@ "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.1.tgz", "integrity": "sha512-rAVtTNZw+cQPjvGp1ox0XC5Q2IBFyqoqh+QII4J/oguyu83Bax1apbo2eqB8bHRS+fqYUBagys6lqUoVwKSmXQ==", "requires": { - "loose-envify": "1.3.1" + "loose-envify": "^1.0.0" } }, "watchpack": { @@ -7420,9 +7420,9 @@ "integrity": "sha1-S8EsLr6KonenHx0/FNaFx7RGzQA=", "dev": true, "requires": { - "chokidar": "2.0.4", - "graceful-fs": "4.1.11", - "neo-async": "2.6.0" + "chokidar": "^2.0.2", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" } }, "webpack": { @@ -7435,26 +7435,26 @@ "@webassemblyjs/helper-module-context": "1.7.11", "@webassemblyjs/wasm-edit": "1.7.11", "@webassemblyjs/wasm-parser": "1.7.11", - "acorn": "5.7.3", - "acorn-dynamic-import": "3.0.0", - "ajv": "6.5.2", - "ajv-keywords": "3.2.0", - "chrome-trace-event": "1.0.0", - "enhanced-resolve": "4.1.0", - "eslint-scope": "4.0.0", - "json-parse-better-errors": "1.0.2", - "loader-runner": "2.3.1", - "loader-utils": "1.1.0", - "memory-fs": "0.4.1", - "micromatch": "3.1.10", - "mkdirp": "0.5.1", - "neo-async": "2.6.0", - "node-libs-browser": "2.1.0", - "schema-utils": "0.4.5", - "tapable": "1.1.1", - "terser-webpack-plugin": "1.2.0", - "watchpack": "1.6.0", - "webpack-sources": "1.3.0" + "acorn": "^5.6.2", + "acorn-dynamic-import": "^3.0.0", + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0", + "chrome-trace-event": "^1.0.0", + "enhanced-resolve": "^4.1.0", + "eslint-scope": "^4.0.0", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.3.0", + "loader-utils": "^1.1.0", + "memory-fs": "~0.4.1", + "micromatch": "^3.1.8", + "mkdirp": "~0.5.0", + "neo-async": "^2.5.0", + "node-libs-browser": "^2.0.0", + "schema-utils": "^0.4.4", + "tapable": "^1.1.0", + "terser-webpack-plugin": "^1.1.0", + "watchpack": "^1.5.0", + "webpack-sources": "^1.3.0" } }, "webpack-cli": { @@ -7463,16 +7463,16 @@ "integrity": "sha512-Cnqo7CeqeSvC6PTdts+dywNi5CRlIPbLx1AoUPK2T6vC1YAugMG3IOoO9DmEscd+Dghw7uRlnzV1KwOe5IrtgQ==", "dev": true, "requires": { - "chalk": "2.4.1", - "cross-spawn": "6.0.5", - "enhanced-resolve": "4.1.0", - "global-modules-path": "2.3.1", - "import-local": "2.0.0", - "interpret": "1.1.0", - "loader-utils": "1.1.0", - "supports-color": "5.5.0", - "v8-compile-cache": "2.0.2", - "yargs": "12.0.5" + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "enhanced-resolve": "^4.1.0", + "global-modules-path": "^2.3.0", + "import-local": "^2.0.0", + "interpret": "^1.1.0", + "loader-utils": "^1.1.0", + "supports-color": "^5.5.0", + "v8-compile-cache": "^2.0.2", + "yargs": "^12.0.2" }, "dependencies": { "ansi-styles": { @@ -7481,7 +7481,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "1.9.2" + "color-convert": "^1.9.0" } }, "chalk": { @@ -7490,9 +7490,9 @@ "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } } } @@ -7503,8 +7503,8 @@ "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==", "dev": true, "requires": { - "source-list-map": "2.0.0", - "source-map": "0.6.1" + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" }, "dependencies": { "source-map": { @@ -7532,7 +7532,7 @@ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } }, "which-module": { @@ -7546,12 +7546,12 @@ "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-2.1.3.tgz", "integrity": "sha1-qBYZRtP4W4zCWQ3TpRnVPUD/igY=", "requires": { - "chalk": "1.1.3", - "fs-extra": "3.0.1", - "glob": "7.1.2", - "lodash.template": "4.4.0", - "mkdirp": "0.5.1", - "workbox-sw": "2.1.3" + "chalk": "^1.1.3", + "fs-extra": "^3.0.1", + "glob": "^7.1.1", + "lodash.template": "^4.4.0", + "mkdirp": "^0.5.1", + "workbox-sw": "^2.1.3" } }, "workbox-sw": { @@ -7564,7 +7564,7 @@ "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-2.1.3.tgz", "integrity": "sha1-5N6UgYzO9vZnsfX0GM5aEGHajTM=", "requires": { - "workbox-build": "2.1.3" + "workbox-build": "^2.1.3" } }, "worker-farm": { @@ -7573,7 +7573,7 @@ "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", "dev": true, "requires": { - "errno": "0.1.7" + "errno": "~0.1.7" } }, "wrap-ansi": { @@ -7582,8 +7582,8 @@ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" }, "dependencies": { "is-fullwidth-code-point": { @@ -7592,7 +7592,7 @@ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "string-width": { @@ -7601,9 +7601,9 @@ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } } } @@ -7637,18 +7637,18 @@ "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", "dev": true, "requires": { - "cliui": "4.1.0", - "decamelize": "1.2.0", - "find-up": "3.0.0", - "get-caller-file": "1.0.3", - "os-locale": "3.0.1", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "4.0.0", - "yargs-parser": "11.1.1" + "cliui": "^4.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^11.1.1" }, "dependencies": { "find-up": { @@ -7657,7 +7657,7 @@ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "locate-path": "3.0.0" + "locate-path": "^3.0.0" } }, "locate-path": { @@ -7666,8 +7666,8 @@ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "p-locate": "3.0.0", - "path-exists": "3.0.0" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" } }, "p-limit": { @@ -7676,7 +7676,7 @@ "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", "dev": true, "requires": { - "p-try": "2.0.0" + "p-try": "^2.0.0" } }, "p-locate": { @@ -7685,7 +7685,7 @@ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "p-limit": "2.1.0" + "p-limit": "^2.0.0" } }, "p-try": { @@ -7702,8 +7702,8 @@ "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", "dev": true, "requires": { - "camelcase": "5.0.0", - "decamelize": "1.2.0" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } } } diff --git a/package.json b/package.json index b195a95c..88fd45e1 100644 --- a/package.json +++ b/package.json @@ -8,11 +8,11 @@ "deploy": "./gradlew deploy --info", "watch": "./gradlew deploy --info -t", "babel:xp": "./gradlew babelXP", - "build:r4xp": "node_modules/webpack/bin/webpack.js --config webpack.config.react4xp.js --progress", + "rebuild:r4xp": "npm run rm; node_modules/webpack/bin/webpack.js --config webpack.config.react4xp.js --progress", "watch:r4xp": "node_modules/webpack/bin/webpack.js --config webpack.config.react4xp.js --progress --watch", - "build:r4xp-ext": "node_modules/webpack/bin/webpack.js --config webpack.config.react4xp.externals.js --progress", + "rebuild:r4xp-ext": "npm run rm; node_modules/webpack/bin/webpack.js --config webpack.config.react4xp.externals.js --progress", "watch:r4xp-ext": "node_modules/webpack/bin/webpack.js --config webpack.config.react4xp.externals.js --progress --watch", - "build:r4xp-core": "node_modules/webpack/bin/webpack.js --config webpack.config.react4xp.frontCore.js --progress", + "rebuild:r4xp-core": "npm run rm; node_modules/webpack/bin/webpack.js --config webpack.config.react4xp.frontCore.js --progress", "watch:r4xp-core": "node_modules/webpack/bin/webpack.js --config webpack.config.react4xp.frontCore.js --progress --watch" }, "repository": { diff --git a/src/main/react4xp/_entries/app.jsx b/src/main/react4xp/_components/app.jsx similarity index 82% rename from src/main/react4xp/_entries/app.jsx rename to src/main/react4xp/_components/app.jsx index a5b8d98f..7e986cee 100644 --- a/src/main/react4xp/_entries/app.jsx +++ b/src/main/react4xp/_components/app.jsx @@ -1,7 +1,7 @@ import React from 'react'; import Something from '../common/Something'; -import AComponent from '../components/AComponent'; +import AComponent from '../sharedcomps/AComponent'; export default (props) =>
diff --git a/src/main/react4xp/_entries/level/app2.jsx b/src/main/react4xp/_components/level/app2.jsx similarity index 81% rename from src/main/react4xp/_entries/level/app2.jsx rename to src/main/react4xp/_components/level/app2.jsx index aa4f655f..c6921122 100644 --- a/src/main/react4xp/_entries/level/app2.jsx +++ b/src/main/react4xp/_components/level/app2.jsx @@ -1,7 +1,7 @@ import React from 'react'; import Something from '../../common/Something'; -import AComponent from '../../components/AComponent'; +import AComponent from '../../sharedcomps/AComponent'; export default (props) =>
diff --git a/src/main/react4xp/chunks.components.json.ejs b/src/main/react4xp/chunks.components.json.ejs index 88530bdb..ecb6723a 100644 --- a/src/main/react4xp/chunks.components.json.ejs +++ b/src/main/react4xp/chunks.components.json.ejs @@ -2,7 +2,7 @@ "chunks": { "headEnd": [ {"name": "common", "entry": "<%= htmlWebpackPlugin.files.chunks.common.entry %>"}, - {"name": "components", "entry": "<%= htmlWebpackPlugin.files.chunks.components.entry %>"} + {"name": "components", "entry": "<%= htmlWebpackPlugin.files.chunks.sharedcomps.entry %>"} ], "bodyEnd": [] }, diff --git a/src/main/react4xp/chunks.components.xml.ejs b/src/main/react4xp/chunks.components.xml.ejs index 481cf36c..5e454d1f 100644 --- a/src/main/react4xp/chunks.components.xml.ejs +++ b/src/main/react4xp/chunks.components.xml.ejs @@ -1,7 +1,7 @@ - + diff --git a/src/main/react4xp/components/AComponent.jsx b/src/main/react4xp/sharedcomps/AComponent.jsx similarity index 100% rename from src/main/react4xp/components/AComponent.jsx rename to src/main/react4xp/sharedcomps/AComponent.jsx diff --git a/src/main/react4xp/components/more/AnotherComponent.jsx b/src/main/react4xp/sharedcomps/more/AnotherComponent.jsx similarity index 85% rename from src/main/react4xp/components/more/AnotherComponent.jsx rename to src/main/react4xp/sharedcomps/more/AnotherComponent.jsx index 6c2f43b6..2ba7bc06 100644 --- a/src/main/react4xp/components/more/AnotherComponent.jsx +++ b/src/main/react4xp/sharedcomps/more/AnotherComponent.jsx @@ -6,7 +6,7 @@ const AnotherComponent = (props) =>

React stuff is happening again!

More stuff is reacting:

- + {props.children}
; diff --git a/src/main/resources/lib/enonic/react4xp/index.es6 b/src/main/resources/lib/enonic/react4xp/index.es6 index bf1632f1..eeb7c8f4 100644 --- a/src/main/resources/lib/enonic/react4xp/index.es6 +++ b/src/main/resources/lib/enonic/react4xp/index.es6 @@ -64,7 +64,7 @@ const bodyHasContainer = (body, react4xpId) => { -const getContainer = (react4xpId) => `
`; +const buildContainer = (react4xpId) => `
`; const mergePageContributions = (pageContributions) => (!pageContributions) ? @@ -76,90 +76,168 @@ const mergePageContributions = (pageContributions) => (!pageContributions) ? bodyEnd: [ ...utilLib.data.forceArray(PAGE_CONTRIBUTIONS.bodyEnd), ...utilLib.data.forceArray(pageContributions.bodyEnd) ], }; -const removeJsExtensions = (jsxFileName) => - (!jsxFileName) ? undefined : - (jsxFileName.endsWith('.jsx') || jsxFileName.endsWith('.es6')) ? jsxFileName.slice(0, -4) : - (jsxFileName.endsWith('.js')) ? jsxFileName.slice(0, -3) : jsxFileName; -////////////////////////////////////////////////////////////////////// +const getReact4xpWithParams = (params) => { + const {jsxPath, component, jsxFileName, props, react4xpId, uniqueId} = params || {}; + + if (jsxPath && component) { + throw Error("Can't render React4xp for client: ambiguent parameters - use jsxPath or component, not both."); + } else if (!jsxPath && !component) { + throw Error("Can't render React4xp for client: need jsxPath or component (but not both)"); + } + + const react4xp = new React4xp(component || jsxPath); + + if (props) { + react4xp.setProps(props); + } + + if (react4xpId) { + react4xp.setId(react4xpId); + } + + if (uniqueId) { + if (typeof uniqueId === "string") { + react4xp.setId(uniqueId); + } + react4xp.uniqueId(); + } + + if (jsxFileName) { + react4xp.setJsxFileName(jsxFileName); + } + return react4xp; +} -PLAN: FIKS CONSTRUCTOREN HER SÃ…NN AT DEN TAR IMOT KUN OBLIGATORISKE PARAMETERE - OG DET BARE ER DER DE KAN SETTES. -TELESKOPMETODENE SKAL BARE KUNNE JUSTERE VALGFRIE PARAMETERE, OG DE KAN BARE SETTES SÃ…NN. +////////////////////////////////////////////////////////////////////// class React4xp { - constructor(params) { - const {jsxPath, react4xpId, props} = params || {}; - this.react4xpId = react4xpId; - this.jsxPath = undefined; - this.props = undefined - this.setJsxComponentPath(jsxPath) - this.setProps(props); + + // TODO: FIKS CONSTRUCTOREN HER SÃ…NN AT DEN TAR IMOT KUN OBLIGATORISKE PARAMETERE - OG DET BARE ER DER DE KAN SETTES. + // //TELESKOPMETODENE SKAL BARE KUNNE JUSTERE VALGFRIE PARAMETERE, OG DE KAN BARE SETTES SÃ…NN. + + /** Mandatory constructor initParam, one of two options (overloaded function): + * @param Component {Object} The portal.getComponent() object of the Enonic XP component (currently page or part + * only) that the react component belongs to. XP and react components are found in the same folder (and the component + * object is used to extrapolate the resource path - jsxPath). + * + * @param JsxPath {String} A full path to a top-level component react component, + * relative to the folder where the transpiled (JS) react components are found. + * + * Corresponds to component name, available when client-rendering as a prefixed URL which + * returns a JS script that, when run, exposes the component function as React4xp[jsxPath].default to the client. + * + * That component root folder is (currently) build/resources/main/react4xp/ , or in the JAR: react4xp/ . + * JsxPath can also be extrapolated from the source (untranspiled JSX) component this way: + * - Its path under src/main/react4xp/_components/ + * - Or under src/main/resources/site (in which case jsxPath will start with "site/"). + * JsxPath includes the file name without the file extension. + */ + constructor(initParam) { + this.props = null + this.react4xpIdLocked = false; + + if (typeof initParam === "object") { + if (!initParam || !initParam.descriptor || !initParam.type) { + throw Error(`Can't initialize Reac4xp component with initParm = ${JSON.stringify(initParam, null, 2)}. Doesn't seem to be a valid XP component object - missing type or descriptor?`); + } + this.component = initParam; + const compName = this.component.descriptor.split(":")[1]; + this.jsxPath = `site/${BASE_PATHS[this.component.type]}/${compName}/${compName}`; + this.react4xpId = `${BASE_PATHS[component.type]}_${compName}_${component.path}`.replace(/\//g, "_") + + } else if (typeof initParam === "string") { + this.component = null; + this.react4xpId = null; + this.jsxPath = initParam.trim(); + if (this.jsxPath === "") { + throw Error(`Can't initialize Reac4xp component with initParm = ${JSON.stringify(initParam, null, 2)}. XP component object or jsxPath string only, please.`); + } + + } else { + throw Error(`Can't initialize Reac4xp component with initParm = ${JSON.stringify(initParam, null, 2)}. XP component object or jsxPath string only, please.`); + } } //--------------------------------------------------------------- - uniqueId() { - this.react4xpId = (this.react4xpId || "") + "_" + Math.floor(Math.random() * 99999999); // TODO: Better make this determined by component path?"; - return this; + checkIdLock() { + if (this.react4xpIdLocked) { + throw Error("This component has already been used to generate a body or pageContributions. Container ID can't be changed now."); + } } - setReact4xpId(react4xpId) { + /** Sets the react4xpId - the HTML ID of the target container this component will be rendered into. + * Deletes the ID if arguemnt is omitted. + */ + setId(react4xpId) { + this.checkIdLock(); this.react4xpId = react4xpId; return this; } - setReact4xpIdPrefix(prefix) { - this.setReact4xpId(prefix); - this.uniqueId(); + /** Appends a unique target container ID postfix after the currently set reactXpId (if any). + */ + uniqueId() { + this.checkIdLock(); + this.react4xpId = (this.react4xpId || "") + "_" + Math.floor(Math.random() * 99999999); return this; } + ensureAndLockId() { + if (!this.react4xpId) { + this.uniqueId(); + } + this.react4xpIdLocked = true; + } - //--------------------------------------------------------------- - - setJsxComponentPath(jsxPath) { - this.jsxPath = removeJsExtensions(jsxPath); - return this; - } - useXpComponent(component, jsxFileName, skipId, uniqueId) { - //log.info("Use component: " + JSON.stringify(component, null, 2)); + //--------------------------------------------------------------- - if (jsxFileName) { - if (jsxFileName.startsWith('./')) { - jsxFileName = jsxFileName.substring(2); - } - jsxFileName = removeJsExtensions(jsxFileName); + /** When you want to use a JSX component file in the XP component folder, but the JSX file has a different file name + * than the part, initialize the React4XP with the XP component (extrapolates the path) and then call this method + * with only the file name (or initialize the component with ). + */ + setJsxFileName(jsxFileName) { + if (!this.component) { + throw Error("This React4xp component has already been initialized with a jsxPath. Use that in the constructor to set a Jsx file name."); } - const compName = component.descriptor.split(":")[1]; - this.jsxPath = `site/${BASE_PATHS[component.type]}/${compName}/${jsxFileName || compName}`; + if ((jsxFileName || "").trim() === "") { + throw Error(`Empty React4xp jsx component name is not allowed: ${JSON.stringify(jsxFileName, null, 2)}`); + } - if (!skipId && !this.react4xpId) { - const react4xpId = `${BASE_PATHS[component.type]}_${compName}_${component.path}`.replace(/\//g, "_") - if (uniqueId) { - this.setReact4xpIdPrefix(react4xpId); - } else { - this.setReact4xpId(react4xpId) - } + // Strip away leading './' and trailing file extensions + if (jsxFileName.startsWith('./')) { + jsxFileName = jsxFileName.substring(2); } - return this; + jsxFileName = (jsxFileName.endsWith('.jsx') || jsxFileName.endsWith('.es6')) ? + jsxFileName.slice(0, -4) : + (jsxFileName.endsWith('.js')) ? + jsxFileName.slice(0, -3) : + jsxFileName; + + const compName = this.component.descriptor.split(":")[1]; + this.jsxPath = `site/${BASE_PATHS[this.component.type]}/${compName}/${jsxFileName}`; } + //--------------------------------------------------------------- + /** Sets the component's top-level props. Must be a string-serializeable object! + */ setProps(props) { - if (props && typeof props !== 'object') { - throw Error("Props are optional, but must be an object."); + if (!props || typeof props !== 'object') { + throw Error("Top-level props must be a string-serializeable object."); } this.props = props; return this; @@ -167,28 +245,35 @@ class React4xp { - //--------------------------------------------------------------- + //--------------------------------------------------------------- RENDERING METHODS: - getBody(body) { - if (!this.react4xpId) { - throw Error("ID for the target container element, react4xpId, has not been set. And there is no component from which to derive it either. Add one of them in the constructor or with one of the setters."); - } + /** Gets/modifies an HTML body with a target container whose ID matches this component's react4xpId. + * @param body {string} Existing HTML body, for example rendered from thymeleaf. + * If it already has a matching-ID target container, body passes through unchanged (use this option and the + * setId method to control where in the body the react component should be inserted). If it doesn't have a + * matching container, a matching
will be inserted at the end of the body, inside the root element. If + * body is missing, a pure-target-container body is generated and returned. + */ + renderClientBody(body) { + this.ensureAndLockId(); // If no (or empty) body is supplied: generate a minimal container body with only a target container element. if (((body || '') + "").replace(/(^\s+)|(\s+$)/g, "") === "") { - return getContainer(this.react4xpId); + return buildContainer(this.react4xpId); } // If there is a body but it's missing a target container element: // Make a container and insert it right before the closing tag. if (!bodyHasContainer(body, this.react4xpId)) { - return HTMLinserter.insertAtEndOfRoot(body, getContainer(this.react4xpId)); + return HTMLinserter.insertAtEndOfRoot(body, buildContainer(this.react4xpId)); } return body; } - getPageContributions = (pageContributions) => { + renderClientPageContributions = (pageContributions) => { + this.ensureAndLockId(); + if (!this.jsxPath) { throw Error("Target path for JSX component, jsxPath, has not been set. Add an absolute path or a component in the React4XP constructor or with the setters."); } @@ -210,36 +295,35 @@ class React4xp { return adjustedPgContributions; }; - - renderToStaticMarkup = () => SSRreact4xp.renderToStaticMarkup(this.jsxPath, JSON.stringify(this.props)); - - + renderToStaticMarkup = (body) => SSRreact4xp.renderToStaticMarkup(this.jsxPath, JSON.stringify(this.props)); ///////////////////////////////////////////////// - static render = (params) => { - const {jsxPath, component, jsxFileName, props, react4xpId, body, pageContributions, uniqueId} = params || {}; - const react4xp = new React4xp({jsxPath, react4xpId, props}); - if (react4xpId) { - if (uniqueId) { - react4xp.setReact4xpIdPrefix(react4xpId); - } else { - react4xp.setReact4xpId(react4xpId); - } - } - - if (!jsxPath) { - react4xp.useXpComponent(component, jsxFileName, !!react4xpId, uniqueId); - } + /** All-in-one client-renderer. Returns a body and pageContributions object that can be directly returned from an XP controller. + * @param params + */ + static renderClient = (params) => { + const react4xp = getReact4xpWithParams(params); + const {body, pageContributions} = params || {}; return { - body: react4xp.getBody(body), - pageContributions: react4xp.getPageContributions(pageContributions) + body: react4xp.renderClientBody(body), + pageContributions: react4xp.renderClientPageContributions(pageContributions) } }; + + + /** All-in-one serverside-renderer. Returns a static HTML body string. + * @param params + */ + static renderStaticMarkups = (params) => { + const react4xp = getReact4xpWithParams(params); + const {body} = params || {}; + return react4xp.renderToStaticMarkup(body) + }; } module.exports = React4xp; diff --git a/src/main/resources/site/parts/complex-reactive/complex-reactive.es6 b/src/main/resources/site/parts/complex-reactive/complex-reactive.es6 index 925423fd..12edde3d 100644 --- a/src/main/resources/site/parts/complex-reactive/complex-reactive.es6 +++ b/src/main/resources/site/parts/complex-reactive/complex-reactive.es6 @@ -34,8 +34,8 @@ exports.get = function(req) { .setProps({ insertedMessage: "fra \"første props\"!" }); - body = firstReact.getBody(body); - pageContributions = firstReact.getPageContributions(pageContributions); + body = firstReact.renderClientBody(body); + pageContributions = firstReact.renderClientPageContributions(pageContributions); // Demonstrates targeting an existing target container in the HTML view. useXpComponent.skipId is important for that. Targets the "second.jsx" react component in this (the XP component's own) folder @@ -46,8 +46,8 @@ exports.get = function(req) { props: props2, react4xpId: 'existing-react4xp-target' }).useXpComponent(component, 'second', true); - body = secondReact.getBody(body); - pageContributions = secondReact.getPageContributions(pageContributions); + body = secondReact.renderClientBody(body); + pageContributions = secondReact.renderClientPageContributions(pageContributions); // Demonstrates setting a chosen ID without uniquifying it, but generating it as it's not found in the HTML @@ -55,8 +55,8 @@ exports.get = function(req) { jsxPath: 'app', react4xpId: 'thirdReact4xp' }); - body = thirdReact.getBody(body); - pageContributions = thirdReact.getPageContributions(pageContributions); + body = thirdReact.renderClientBody(body); + pageContributions = thirdReact.renderClientPageContributions(pageContributions); return { body, pageContributions }; diff --git a/src/main/resources/site/parts/simple-reactive/simple-reactive.es6 b/src/main/resources/site/parts/simple-reactive/simple-reactive.es6 index e1f9d8f6..204b7568 100644 --- a/src/main/resources/site/parts/simple-reactive/simple-reactive.es6 +++ b/src/main/resources/site/parts/simple-reactive/simple-reactive.es6 @@ -10,5 +10,5 @@ exports.get = function(req) { insertedMessage: "fra \"den simple kontrolleren\"!" }; - return React4xp.render({ component, props }); + return React4xp.renderClient({ component, props }); }; diff --git a/config.constants.js b/webpack.config.constants.js similarity index 79% rename from config.constants.js rename to webpack.config.constants.js index 8c832294..06f6cecf 100644 --- a/config.constants.js +++ b/webpack.config.constants.js @@ -5,7 +5,7 @@ const SRC_MAIN = path.join(__dirname, 'src/main'); const BUILD = path.join(__dirname, 'build/resources/main'); const SITE = 'site'; -const R4X_SUB_ENTRIES = '_entries'; // Special-case subdirectory under /react4xp/. All files under this will be their own chunk, for dynamic, on-demand asset loading of top-level components, which in turn uses shared components chunked under all other subdirectories. TODO: WHAT ABOUT FILES IN ROOT /R4X/ ? +const R4X_SUB_ENTRIES = '_components'; // Special-case subdirectory under /react4xp/. All files under this will be their own chunk, for dynamic, on-demand asset loading of top-level components, which in turn uses shared components chunked under all other subdirectories. TODO: WHAT ABOUT FILES IN ROOT /R4X/ ? const R4X_HOME = 'react4xp'; const R4X_TARGETSUBDIR = R4X_HOME; @@ -20,7 +20,7 @@ const SRC_R4X_ENTRIES = path.join(SRC_MAIN, R4X_ENTRIES); const LIBRARY_NAME = 'React4xp'; // Shared constants that for different reasons must be available in a mor general format than JS: -const JSON_CONSTANTS = JSON.parse(fs.readFileSync('config.constants.json', 'utf8')); +const JSON_CONSTANTS = JSON.parse(fs.readFileSync('webpack.config.constants.json', 'utf8')); /* Common externals from a file, since these values must match everywhere and is shared by a gradle step as well as all webpack steps. diff --git a/config.constants.json b/webpack.config.constants.json similarity index 100% rename from config.constants.json rename to webpack.config.constants.json diff --git a/webpack.config.react4xp.frontCore.js b/webpack.config.react4xp.core.js similarity index 91% rename from webpack.config.react4xp.frontCore.js rename to webpack.config.react4xp.core.js index 95c9dbd0..c9334c55 100644 --- a/webpack.config.react4xp.frontCore.js +++ b/webpack.config.react4xp.core.js @@ -1,6 +1,6 @@ // Webpack for transpiling "frontend core": -// React4xp (not-third-party) the core functionality for running in the client, necessary -// for components to run/render. +// The React4xp (not-third-party) core functionality for running in the client, +// necessary for components to run/render. // // Look mainly at src/main/react4xp/_frontendCore_.es6. // @@ -12,7 +12,7 @@ const path = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); -const { SRC_R4X, BUILD_R4X, BUILD_ENV, LIBRARY_NAME, EXTERNALS } = require('./config.constants'); +const { SRC_R4X, BUILD_R4X, BUILD_ENV, LIBRARY_NAME, EXTERNALS } = require('./webpack.config.constants'); module.exports = { mode: BUILD_ENV, diff --git a/webpack.config.react4xp.externals.js b/webpack.config.react4xp.externals.js index d665d562..6100958f 100644 --- a/webpack.config.react4xp.externals.js +++ b/webpack.config.react4xp.externals.js @@ -1,6 +1,6 @@ // Webpack for transpiling externals (aka vendors) chunk/asset file, for gathering up heavy and rarely-changed // (and so, nicely cacheable) libs and dependencies - React etc. -// Basis for externals (affects other transpilations too): config.constants.json +// Basis for externals (affects other transpilations too): webpack.config.constants.json // // Output, externals.[contentHash].js, is content-hashed file name for cache busting, hash is stored for // runtime reference in commonChunks.json. @@ -9,7 +9,7 @@ const path = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); -const { SRC_R4X, BUILD_R4X, BUILD_ENV } = require('./config.constants'); +const { SRC_R4X, BUILD_R4X, BUILD_ENV } = require('./webpack.config.constants'); module.exports = { mode: BUILD_ENV, diff --git a/webpack.config.react4xp.js b/webpack.config.react4xp.js index 009ee3e2..83e77906 100644 --- a/webpack.config.react4xp.js +++ b/webpack.config.react4xp.js @@ -4,7 +4,7 @@ // - src/main/react4xp: Here, each file under /_entries/ will become a separate, top-level component/asset, and // all other dependencies to those, in all other folders below react4xp, will be bundled into chunks by the name of // the folder. Third-pardy dependencies in /node_modules/ will be separated out into a vendors bundle, except for externals, -// (based on config.constants.json .EXTERNALS). +// (based on webpack.config.constants.json .EXTERNALS). // // All such second-level assets will have content-hashed file names for cache busting, hashes are stored for // runtime reference in commonChunks.json. @@ -19,7 +19,7 @@ const HtmlWebpackPlugin = require('html-webpack-plugin'); const { SITE, SRC_R4X, SRC_SITE, SRC_R4X_ENTRIES, R4X_SUB_ENTRIES, BUILD_R4X, BUILD_ENV, LIBRARY_NAME, EXTERNALS -} = require('./config.constants'); +} = require('./webpack.config.constants'); module.exports = { @@ -27,7 +27,7 @@ module.exports = { entry: Object.assign({}, getEntries(SRC_R4X_ENTRIES, ['jsx', 'js', 'es6'], ""), - getEntries(SRC_SITE, ['jsx'], SITE) // <-- Note: this is where top-level react components are included, in the enonic site structure. Only JSX files are included: in order for these to be transpiled here (and thereby become a part of the chunk structure for these static assets) and not by the transpilation of "pure XP" source code files (which should be transpiled separately, outside of the static-asset/chunk structure), take care to separate them! Here, this is done by including only .JSX files here, reserving that extension for toplevel react components, and excluding .JSX files in the babelSite task in build.gradle. Note that if the top-level components import .es6 dependencies, that separation must be done more thoroughly. + getEntries(SRC_SITE, ['jsx'], path.join(SITE)) // <-- Note: this is where top-level react components are included, in the enonic site structure. Only JSX files are included: in order for these to be transpiled here (and thereby become a part of the chunk structure for these static assets) and not by the transpilation of "pure XP" source code files (which should be transpiled separately, outside of the static-asset/chunk structure), take care to separate them! Here, this is done by including only .JSX files here, reserving that extension for toplevel react components, and excluding .JSX files in the babelSite task in build.gradle. Note that if the top-level components import .es6 dependencies, that separation must be done more thoroughly. ), output: { @@ -62,7 +62,6 @@ module.exports = { externals: EXTERNALS, plugins: [ - // TODO: Autogenerate these: /*new HtmlWebpackPlugin({ inject: false, hash: false, @@ -70,6 +69,7 @@ module.exports = { filename: path.join(BUILD_R4X, 'chunks.components.xml') }), */ + // TODO: How to autogenerate chunks.components.json.ejs using the folder-chunks as well as vendor, and during that autogeneration, how to detect if any of them aren't used after all and should be omitted from the autogeneration? new HtmlWebpackPlugin({ inject: false, hash: false, @@ -89,10 +89,13 @@ module.exports = { // Builds entries from files found under a directory, for selected file extensions, for bein transpiled out to a target path function getEntries(fullDirPath, extensions, targetPath) { console.log("Components in " + fullDirPath + " (." + extensions.join(", .") + "):") - const entries = {}; - if (targetPath && targetPath.length) { - targetPath += "/"; + + targetPath = (targetPath || "").trim(); + if (targetPath.startsWith("/")) { + targetPath = targetPath.substring(1); } + + const entries = {}; extensions.forEach(extension => { Object.assign( entries, @@ -100,10 +103,10 @@ function getEntries(fullDirPath, extensions, targetPath) { const parsedEl = path.parse(entry); if (parsedEl && parsedEl.dir.startsWith(fullDirPath)) { let subdir = parsedEl.dir.substring(fullDirPath.length).replace(/(^\/+)|(\/+$)/g, ""); - if (subdir.length) { + /*if (subdir.length) { subdir += "/"; - } - const name = targetPath + subdir + parsedEl.name; + }*/ + const name = path.join(targetPath, subdir, parsedEl.name); console.log("\t", name); /*console.log("\ttargetPath:", targetPath); console.log("\tsubdir:", subdir); From 98dd31b7e51aee17a7b9866726f564f0220fd811 Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Mon, 21 Jan 2019 23:02:30 +0100 Subject: [PATCH 60/96] Works. Bugfixed the improved constructor, demonstrated in the 3 parts. --- .../resources/lib/enonic/react4xp/index.es6 | 124 +++++++++++++----- .../complex-reactive/complex-reactive.es6 | 79 ++++------- .../parts/simple-reactive/simple-reactive.es6 | 9 +- src/main/resources/site/parts/ssr/ssr.es6 | 34 ++++- webpack.config.constants.js | 2 +- 5 files changed, 150 insertions(+), 98 deletions(-) diff --git a/src/main/resources/lib/enonic/react4xp/index.es6 b/src/main/resources/lib/enonic/react4xp/index.es6 index eeb7c8f4..63f6335d 100644 --- a/src/main/resources/lib/enonic/react4xp/index.es6 +++ b/src/main/resources/lib/enonic/react4xp/index.es6 @@ -79,38 +79,18 @@ const mergePageContributions = (pageContributions) => (!pageContributions) ? -const getReact4xpWithParams = (params) => { - const {jsxPath, component, jsxFileName, props, react4xpId, uniqueId} = params || {}; - if (jsxPath && component) { - throw Error("Can't render React4xp for client: ambiguent parameters - use jsxPath or component, not both."); - } else if (!jsxPath && !component) { - throw Error("Can't render React4xp for client: need jsxPath or component (but not both)"); - } - const react4xp = new React4xp(component || jsxPath); - if (props) { - react4xp.setProps(props); - } - if (react4xpId) { - react4xp.setId(react4xpId); - } - if (uniqueId) { - if (typeof uniqueId === "string") { - react4xp.setId(uniqueId); - } - react4xp.uniqueId(); - } - if (jsxFileName) { - react4xp.setJsxFileName(jsxFileName); - } - return react4xp; -} + + + + + ////////////////////////////////////////////////////////////////////// @@ -148,7 +128,7 @@ class React4xp { this.component = initParam; const compName = this.component.descriptor.split(":")[1]; this.jsxPath = `site/${BASE_PATHS[this.component.type]}/${compName}/${compName}`; - this.react4xpId = `${BASE_PATHS[component.type]}_${compName}_${component.path}`.replace(/\//g, "_") + this.react4xpId = `${BASE_PATHS[this.component.type]}_${compName}_${this.component.path}`.replace(/\//g, "_") } else if (typeof initParam === "string") { this.component = null; @@ -173,6 +153,14 @@ class React4xp { } } + ensureAndLockId() { + if (!this.react4xpId) { + this.uniqueId(); + } + this.react4xpIdLocked = true; + } + + /** Sets the react4xpId - the HTML ID of the target container this component will be rendered into. * Deletes the ID if arguemnt is omitted. */ @@ -190,13 +178,6 @@ class React4xp { return this; } - ensureAndLockId() { - if (!this.react4xpId) { - this.uniqueId(); - } - this.react4xpIdLocked = true; - } - //--------------------------------------------------------------- @@ -226,6 +207,7 @@ class React4xp { const compName = this.component.descriptor.split(":")[1]; this.jsxPath = `site/${BASE_PATHS[this.component.type]}/${compName}/${jsxFileName}`; + return this; } @@ -245,6 +227,16 @@ class React4xp { + + + + + + + + + + //--------------------------------------------------------------- RENDERING METHODS: /** Gets/modifies an HTML body with a target container whose ID matches this component's react4xpId. @@ -299,15 +291,33 @@ class React4xp { - ///////////////////////////////////////////////// + + + + + + + + + + + + + + + + + + ///////////////////////////////////////////////// STATIC ALL-IN-ONE RENDERERS + /** All-in-one client-renderer. Returns a body and pageContributions object that can be directly returned from an XP controller. * @param params */ static renderClient = (params) => { - const react4xp = getReact4xpWithParams(params); + const react4xp = React4xp.buildFromParams(params); const {body, pageContributions} = params || {}; return { body: react4xp.renderClientBody(body), @@ -316,14 +326,56 @@ class React4xp { }; + /** All-in-one serverside-renderer. Returns a static HTML body string. * @param params */ static renderStaticMarkups = (params) => { - const react4xp = getReact4xpWithParams(params); + const react4xp = React4xp.buildFromParams(params); const {body} = params || {}; return react4xp.renderToStaticMarkup(body) }; + + + + + + /** Optional initializer: returns a React4xp component instance initialized from a single set of parameters instead of + * the class approach. + * TODO: Document the params, similar to the class methods. + */ + static buildFromParams = (params) => { + const {jsxPath, component, jsxFileName, props, react4xpId, uniqueId} = params || {}; + + if (jsxPath && component) { + throw Error("Can't render React4xp for client: ambiguent parameters - use jsxPath or component, not both."); + } else if (!jsxPath && !component) { + throw Error("Can't render React4xp for client: need jsxPath or component (but not both)"); + } + + const react4xp = new React4xp(component || jsxPath); + + if (props) { + react4xp.setProps(props); + } + + if (react4xpId) { + react4xp.setId(react4xpId); + } + + if (uniqueId) { + if (typeof uniqueId === "string") { + react4xp.setId(uniqueId); + } + react4xp.uniqueId(); + } + + if (jsxFileName) { + react4xp.setJsxFileName(jsxFileName); + } + + return react4xp; + } } module.exports = React4xp; diff --git a/src/main/resources/site/parts/complex-reactive/complex-reactive.es6 b/src/main/resources/site/parts/complex-reactive/complex-reactive.es6 index 12edde3d..15a214e8 100644 --- a/src/main/resources/site/parts/complex-reactive/complex-reactive.es6 +++ b/src/main/resources/site/parts/complex-reactive/complex-reactive.es6 @@ -5,80 +5,55 @@ const React4xp = require('/lib/enonic/react4xp'); // Specify the view file to use const view = resolve('complex-reactive.html'); -// Get the content that is using the page -//const content = portal.getContent(); -//const config = component.config; - - - // Handle the GET request exports.get = function(req) { - log.info("complex-reactive request: " + JSON.stringify(req, null, 2)); + //log.info("complex-reactive request: " + JSON.stringify(req, null, 2)); const component = portal.getComponent(); const model = {}; let body = thymeleaf.render(view, model); + const then = new Date().getTime(); + + // Just to prove that existing pageContributions aren't overwritten: let pageContributions = { headEnd: '', bodyEnd: '', }; - // Demonstrates construction using the telescope builder pattern, using the "first.jsx" component in the part's (XP component) own path and generating a unique target container ID, also using the component - const firstReact = new React4xp() - .useXpComponent(component, 'first') + // Construction using the telescope builder pattern, using the "first.jsx" component in the part's (XP component) own path and generating a unique target container ID, also using the component + const firstReact = new React4xp(component) + .setJsxFileName("first") .uniqueId() - .setProps({ - insertedMessage: "fra \"første props\"!" - }); - body = firstReact.renderClientBody(body); - pageContributions = firstReact.renderClientPageContributions(pageContributions); + .setProps({ insertedMessage: "fra \"første props\"!" }); - // Demonstrates targeting an existing target container in the HTML view. useXpComponent.skipId is important for that. Targets the "second.jsx" react component in this (the XP component's own) folder - const props2 = { - insertedMessage: "fra \"andre props\"!" - }; - const secondReact = new React4xp({ - props: props2, - react4xpId: 'existing-react4xp-target' - }).useXpComponent(component, 'second', true); - body = secondReact.renderClientBody(body); - pageContributions = secondReact.renderClientPageContributions(pageContributions); + // Demonstrates targeting an existing target container in the HTML view. Targets the "second.jsx" react component in this (the XP component's own) folder + const secondReact = new React4xp(component) + .setProps({ insertedMessage: "fra \"andre props\"!" }) + .setId('existing-react4xp-target') + .setJsxFileName('second'); + + // Demonstrates setting a chosen ID and uniquifying it, but generating the container as it's not found in the HTML + const thirdReact = new React4xp('app') + .setId('thirdReact4xp').uniqueId(); - // Demonstrates setting a chosen ID without uniquifying it, but generating it as it's not found in the HTML - const thirdReact = new React4xp({ - jsxPath: 'app', - react4xpId: 'thirdReact4xp' - }); + + // Builds the body and page contributions by appending them stepwise: + body = firstReact.renderClientBody(body); + body = secondReact.renderClientBody(body); body = thirdReact.renderClientBody(body); - pageContributions = thirdReact.renderClientPageContributions(pageContributions); - return { body, pageContributions }; + pageContributions = firstReact.renderClientPageContributions(pageContributions); + pageContributions = secondReact.renderClientPageContributions(pageContributions); + pageContributions = thirdReact.renderClientPageContributions(pageContributions); + const now = new Date().getTime(); + log.info("Complex-reactive rendered in: " + (now - then) + " ms"); - /** - * PLAN: - * Et lib rendrer body: - * Hvis innenfor content studio: Server-side-rendered HTML fra reactkomponenten. - * Hvis ikke: HTML å hekte react-entryen på: - * -Hvis et view er sendt inn (html-fil), forventes det at det er en XP thymeleaf som inneholder en plassholder-element å hekte react på, - * akkurat denne thymeleaf-ID'en et eller annet sted:
. - * -Hvis ikke noe view er sendt inn, rendres kun:
- * - * -Hvis react4xpId er tom, genereres en unik id: react4xp_[hash/uid] - * -Hvis react4xpId ikke er tom, legges en unik hash/uid etter, som postfix. - * NB: Disse må være unike per komponent/path! Så, runtime. - * -Denne verdien settes inn i HTML'en enten via thymeleaf eller direkte-rendret. - * - * - * Page contributions: - * Hvis ikke innenfor content studio: - * `); + // TODO: Only include the first of the two scripts if pageContributions don't include it already. No need to run it twice. + return adjustedPgContributions; }; From a7a6b325a4e64dc49bee85ffa06679e32a5ae678 Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Mon, 21 Jan 2019 23:16:11 +0100 Subject: [PATCH 62/96] Todo: More plans --- src/main/resources/lib/enonic/react4xp/index.es6 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/resources/lib/enonic/react4xp/index.es6 b/src/main/resources/lib/enonic/react4xp/index.es6 index 1d8c062a..530d7783 100644 --- a/src/main/resources/lib/enonic/react4xp/index.es6 +++ b/src/main/resources/lib/enonic/react4xp/index.es6 @@ -284,11 +284,12 @@ class React4xp { ${LIBRARY_NAME}.Core.render(${LIBRARY_NAME}['${this.jsxPath}'].default); `); - // TODO: Only include the first of the two scripts if pageContributions don't include it already. No need to run it twice. + // TODO: Only include the first of the two scripts if pageContributions don't include it already. No need to run it twice. Maybe split out those scripts, since they are pretty static and can be cached? return adjustedPgContributions; }; + // TODO: Like in renderClientBody, render it into the container! renderToStaticMarkup = (body) => SSRreact4xp.renderToStaticMarkup(this.jsxPath, JSON.stringify(this.props)); From 0ee0bca315a9210b61e466418b8ccf89babcd49e Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Mon, 21 Jan 2019 23:20:59 +0100 Subject: [PATCH 63/96] More comments and thoughts --- src/main/resources/lib/enonic/react4xp/index.es6 | 1 + .../site/parts/complex-reactive/complex-reactive.es6 | 9 +++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/resources/lib/enonic/react4xp/index.es6 b/src/main/resources/lib/enonic/react4xp/index.es6 index 530d7783..b1385c29 100644 --- a/src/main/resources/lib/enonic/react4xp/index.es6 +++ b/src/main/resources/lib/enonic/react4xp/index.es6 @@ -283,6 +283,7 @@ class React4xp { `); + // TODO: Do props really need the byway through data-react4xp-props? What about the targetId, can't they both be inserteed directly into the Core.render function here? // TODO: Only include the first of the two scripts if pageContributions don't include it already. No need to run it twice. Maybe split out those scripts, since they are pretty static and can be cached? diff --git a/src/main/resources/site/parts/complex-reactive/complex-reactive.es6 b/src/main/resources/site/parts/complex-reactive/complex-reactive.es6 index 15a214e8..af0404a4 100644 --- a/src/main/resources/site/parts/complex-reactive/complex-reactive.es6 +++ b/src/main/resources/site/parts/complex-reactive/complex-reactive.es6 @@ -22,6 +22,8 @@ exports.get = function(req) { headEnd: '', bodyEnd: '', }; + + // -------------------------------------------------- // Construction using the telescope builder pattern, using the "first.jsx" component in the part's (XP component) own path and generating a unique target container ID, also using the component @@ -31,18 +33,21 @@ exports.get = function(req) { .setProps({ insertedMessage: "fra \"første props\"!" }); - // Demonstrates targeting an existing target container in the HTML view. Targets the "second.jsx" react component in this (the XP component's own) folder + // Targeting an existing target container in the HTML view. Targets the "second.jsx" react component in this (the XP component's own) folder const secondReact = new React4xp(component) .setProps({ insertedMessage: "fra \"andre props\"!" }) .setId('existing-react4xp-target') .setJsxFileName('second'); - // Demonstrates setting a chosen ID and uniquifying it, but generating the container as it's not found in the HTML + // Setting a chosen ID and uniquifying it, but appending a generated container element as it's not found in the HTML const thirdReact = new React4xp('app') .setId('thirdReact4xp').uniqueId(); + // -------------------------------------------------- + + // Builds the body and page contributions by appending them stepwise: body = firstReact.renderClientBody(body); body = secondReact.renderClientBody(body); From c476d493801c890dd7be2d35eb51d3bbf1574e45 Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Wed, 23 Jan 2019 20:04:14 +0100 Subject: [PATCH 64/96] Untested: streamlined pageContributions and client rendering call, by preventing duplicate scripts as well as skipping the via-attributes step of passing targetId and props to the rendering, inserting them into the .render call instead. --- src/main/react4xp/_frontendCore_.es6 | 15 +--- .../resources/lib/enonic/react4xp/index.es6 | 80 ++++++++++++------- 2 files changed, 55 insertions(+), 40 deletions(-) diff --git a/src/main/react4xp/_frontendCore_.es6 b/src/main/react4xp/_frontendCore_.es6 index 96c0b399..53d0e29c 100644 --- a/src/main/react4xp/_frontendCore_.es6 +++ b/src/main/react4xp/_frontendCore_.es6 @@ -1,28 +1,19 @@ import ReactDOM from 'react-dom'; -exports.render = (Component) => { - const currentScript = document.currentScript || (function() { - var scripts = document.getElementsByTagName('script'); - return scripts[scripts.length - 1]; - })(); - +exports.render = (Component, targetId, props) => { let container = null; - let targetId = null; try { - targetId = currentScript.getAttribute("data-react4xp-targetId"); if (!targetId) { - console.error("React4xp can't mount into target container: 'data-react4xp-targetId' attribute is missing or empty in surrounding - adjustedPgContributions.bodyEnd.push(` - -`); - // TODO: Do props really need the byway through data-react4xp-props? What about the targetId, can't they both be inserteed directly into the Core.render function here? + // Browser-runnable script reference for the "naked" react component: + ``, - // TODO: Only include the first of the two scripts if pageContributions don't include it already. No need to run it twice. Maybe split out those scripts, since they are pretty static and can be cached? - - return adjustedPgContributions; + // That script will expose to the browser an element or function that can be handled by React4Xp.Core.render. Trigger that, along with the target container ID, and props, if any: + `` + ] + }); }; // TODO: Like in renderClientBody, render it into the container! @@ -308,13 +338,7 @@ class React4xp { - - - - - - - + ///////////////////////////////////////////////// STATIC ALL-IN-ONE RENDERERS /** All-in-one client-renderer. Returns a body and pageContributions object that can be directly returned from an XP controller. From f3a8239b0ad8ad3dfe08bb48bcf1027fd9dcfe74 Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Wed, 23 Jan 2019 21:31:43 +0100 Subject: [PATCH 65/96] Bugfix. Previous improvement works now. Added a nashornPolyfills webpack/gradle step. Renamed java packages. --- build.gradle | 17 ++++++++++ .../HtmlInserter.java | 2 +- .../{ => ssr}/ChunkDependencyParser.java | 2 +- .../xp/react4xp/{ => ssr}/EngineFactory.java | 9 ++--- .../react4xp/{ => ssr}/ResourceHandler.java | 2 +- .../ServerSideRenderer.java} | 8 ++--- .../react4xp/chunks.nashornPolyfills.json.ejs | 8 ----- .../resources/lib/enonic/react4xp/index.es6 | 17 ++++++---- webpack.config.react4xp.externals.js | 11 ------ webpack.config.react4xp.nashornPolyfills.js | 34 +++++++++++++++++++ 10 files changed, 73 insertions(+), 37 deletions(-) rename src/main/java/com/enonic/xp/{htmlinserter => react4xp}/HtmlInserter.java (98%) rename src/main/java/com/enonic/xp/react4xp/{ => ssr}/ChunkDependencyParser.java (98%) rename src/main/java/com/enonic/xp/react4xp/{ => ssr}/EngineFactory.java (97%) rename src/main/java/com/enonic/xp/react4xp/{ => ssr}/ResourceHandler.java (97%) rename src/main/java/com/enonic/xp/react4xp/{React4xp.java => ssr/ServerSideRenderer.java} (85%) delete mode 100644 src/main/react4xp/chunks.nashornPolyfills.json.ejs create mode 100644 webpack.config.react4xp.nashornPolyfills.js diff --git a/build.gradle b/build.gradle index fa28c493..165c1f94 100644 --- a/build.gradle +++ b/build.gradle @@ -118,6 +118,22 @@ task webpack_r4xp_externals(type: NodeTask) { webpack_r4xp_externals.dependsOn += 'npmInstall' +task webpack_r4xp_nashornPolyfills(type: NodeTask) { + script = file('node_modules/webpack/bin/webpack.js') + args = ['--config', 'webpack.config.react4xp.nashornPolyfills.js', '--progress', '--color'] + + inputs.file("webpack.config.react4xp.nashornPolyfills.js") + + inputs.file("webpack.config.constants.json") + inputs.file("webpack.config.constants.js") + inputs.file("package.json") + inputs.file("package-lock.json") + inputs.dir("src/main/react4xp") + outputs.dir("build/resources/main/react4xp") +} +webpack_r4xp_nashornPolyfills.dependsOn += 'npmInstall' + + task webpack_r4xp_frontCore(type: NodeTask) { script = file('node_modules/webpack/bin/webpack.js') args = ['--config', 'webpack.config.react4xp.core.js', '--progress', '--color'] @@ -161,6 +177,7 @@ jar.dependsOn babelXP jar.dependsOn += 'webpack_r4xp' jar.dependsOn += 'webpack_r4xp_frontCore' jar.dependsOn += 'webpack_r4xp_externals' +jar.dependsOn += 'webpack_r4xp_nashornPolyfills' jar.outputs.dir('build/libs') diff --git a/src/main/java/com/enonic/xp/htmlinserter/HtmlInserter.java b/src/main/java/com/enonic/xp/react4xp/HtmlInserter.java similarity index 98% rename from src/main/java/com/enonic/xp/htmlinserter/HtmlInserter.java rename to src/main/java/com/enonic/xp/react4xp/HtmlInserter.java index 0700f235..56556a26 100644 --- a/src/main/java/com/enonic/xp/htmlinserter/HtmlInserter.java +++ b/src/main/java/com/enonic/xp/react4xp/HtmlInserter.java @@ -1,4 +1,4 @@ -package com.enonic.xp.htmlinserter; +package com.enonic.xp.react4xp; import org.jdom2.Document; import org.jdom2.Element; diff --git a/src/main/java/com/enonic/xp/react4xp/ChunkDependencyParser.java b/src/main/java/com/enonic/xp/react4xp/ssr/ChunkDependencyParser.java similarity index 98% rename from src/main/java/com/enonic/xp/react4xp/ChunkDependencyParser.java rename to src/main/java/com/enonic/xp/react4xp/ssr/ChunkDependencyParser.java index a73e31be..f5cc3561 100644 --- a/src/main/java/com/enonic/xp/react4xp/ChunkDependencyParser.java +++ b/src/main/java/com/enonic/xp/react4xp/ssr/ChunkDependencyParser.java @@ -1,4 +1,4 @@ -package com.enonic.xp.react4xp; +package com.enonic.xp.react4xp.ssr; import org.json.JSONArray; import org.json.JSONObject; diff --git a/src/main/java/com/enonic/xp/react4xp/EngineFactory.java b/src/main/java/com/enonic/xp/react4xp/ssr/EngineFactory.java similarity index 97% rename from src/main/java/com/enonic/xp/react4xp/EngineFactory.java rename to src/main/java/com/enonic/xp/react4xp/ssr/EngineFactory.java index 76738604..6a9f1f32 100644 --- a/src/main/java/com/enonic/xp/react4xp/EngineFactory.java +++ b/src/main/java/com/enonic/xp/react4xp/ssr/EngineFactory.java @@ -1,4 +1,4 @@ -package com.enonic.xp.react4xp; +package com.enonic.xp.react4xp.ssr; import jdk.nashorn.api.scripting.NashornScriptEngine; @@ -10,7 +10,7 @@ import java.util.LinkedList; import java.util.List; -import static com.enonic.xp.react4xp.React4xp.SCRIPTS_HOME; +import static com.enonic.xp.react4xp.ssr.ServerSideRenderer.SCRIPTS_HOME; public class EngineFactory { private final static String POLYFILL_BASICS = "" + @@ -30,7 +30,7 @@ public class EngineFactory { // Sequence matters! These engine initialization scripts are run in this order. // Scripts found in chunks.polyfill.json must come first, and chunks.components.json last! private final static List CHUNK_FILES = Arrays.asList( - CHUNKFILES_HOME + "chunks.nashornPolyfills.json", + //CHUNKFILES_HOME + "chunks.nashornPolyfills.json", CHUNKFILES_HOME + "chunks.externals.json", CHUNKFILES_HOME + "chunks.components.json" ); @@ -48,6 +48,7 @@ public static NashornScriptEngine getEngine() throws IOException, ScriptExceptio scriptList.add("POLYFILL_BASICS"); LinkedList transpiledDependencies = new ChunkDependencyParser().getScriptDependencies(CHUNK_FILES); + transpiledDependencies.addFirst("nashornPolyfills.js"); for (String scriptFile : transpiledDependencies) { String file = SCRIPTS_HOME + scriptFile; scripts.put(file, ResourceHandler.readResource(file)); @@ -65,7 +66,7 @@ public static NashornScriptEngine getEngine() throws IOException, ScriptExceptio for (String scriptFile : scriptList) { chunkLabel = scriptFile; chunkScript = scripts.get(chunkLabel); - System.out.println("Initializing React4xp engine: " + chunkLabel); + System.out.println("Initializing ServerSideRenderer engine: " + chunkLabel); script.append(chunkScript); } diff --git a/src/main/java/com/enonic/xp/react4xp/ResourceHandler.java b/src/main/java/com/enonic/xp/react4xp/ssr/ResourceHandler.java similarity index 97% rename from src/main/java/com/enonic/xp/react4xp/ResourceHandler.java rename to src/main/java/com/enonic/xp/react4xp/ssr/ResourceHandler.java index a3158e2e..45552d51 100644 --- a/src/main/java/com/enonic/xp/react4xp/ResourceHandler.java +++ b/src/main/java/com/enonic/xp/react4xp/ssr/ResourceHandler.java @@ -1,4 +1,4 @@ -package com.enonic.xp.react4xp; +package com.enonic.xp.react4xp.ssr; import java.io.BufferedReader; import java.io.FileNotFoundException; diff --git a/src/main/java/com/enonic/xp/react4xp/React4xp.java b/src/main/java/com/enonic/xp/react4xp/ssr/ServerSideRenderer.java similarity index 85% rename from src/main/java/com/enonic/xp/react4xp/React4xp.java rename to src/main/java/com/enonic/xp/react4xp/ssr/ServerSideRenderer.java index 8f97c3b3..ef6cab33 100644 --- a/src/main/java/com/enonic/xp/react4xp/React4xp.java +++ b/src/main/java/com/enonic/xp/react4xp/ssr/ServerSideRenderer.java @@ -1,4 +1,4 @@ -package com.enonic.xp.react4xp; +package com.enonic.xp.react4xp.ssr; import jdk.nashorn.api.scripting.NashornScriptEngine; import jdk.nashorn.api.scripting.ScriptObjectMirror; @@ -9,7 +9,7 @@ import java.util.Set; -public class React4xp { +public class ServerSideRenderer { public final static String SCRIPTS_HOME = "/react4xp/"; Set componentScripts = new HashSet<>(); @@ -23,7 +23,7 @@ public String renderToStaticMarkup(String component, String props) throws IOExce StringBuilder script = new StringBuilder(); try { if (!componentScripts.contains(component)) { - System.out.println("Initializing React4xp component: " + component); + System.out.println("Initializing ServerSideRenderer component: " + component); String componentScript = ResourceHandler.readResource(SCRIPTS_HOME + component + ".js"); componentScripts.add(component); script.append(componentScript); @@ -36,7 +36,7 @@ public String renderToStaticMarkup(String component, String props) throws IOExce return (String)obj.get("rendered"); } catch (ScriptException e) { - System.err.println(React4xp.class.getCanonicalName() + ".renderToStaticMarkup: COMPONENT SCRIPT FAILED.\n" + + System.err.println(ServerSideRenderer.class.getCanonicalName() + ".renderToStaticMarkup: COMPONENT SCRIPT FAILED.\n" + "Component: " + component + "\n" + "Props: " + props + "" + "Script:\n---------------------------------\n\n" + script.toString() + "\n\n---------------------------------------"); diff --git a/src/main/react4xp/chunks.nashornPolyfills.json.ejs b/src/main/react4xp/chunks.nashornPolyfills.json.ejs deleted file mode 100644 index a9a8a3c2..00000000 --- a/src/main/react4xp/chunks.nashornPolyfills.json.ejs +++ /dev/null @@ -1,8 +0,0 @@ -{ - "chunks": { - "headEnd": [ - {"name": "nashornPolyfills", "entry": "<%= htmlWebpackPlugin.files.chunks.nashornPolyfills.entry %>"} - ], - "bodyEnd": [] - } -} diff --git a/src/main/resources/lib/enonic/react4xp/index.es6 b/src/main/resources/lib/enonic/react4xp/index.es6 index e1200e1d..c1f80a93 100644 --- a/src/main/resources/lib/enonic/react4xp/index.es6 +++ b/src/main/resources/lib/enonic/react4xp/index.es6 @@ -1,7 +1,8 @@ const ioLib = require('/lib/xp/io'); const utilLib = require('/lib/enonic/util'); -const HTMLinserter = __.newBean('com.enonic.xp.htmlinserter.HtmlInserter'); -const SSRreact4xp = __.newBean('com.enonic.xp.react4xp.React4xp'); +const HTMLinserter = __.newBean('com.enonic.xp.react4xp.HtmlInserter'); +const SSRreact4xp = __.newBean('com.enonic.xp.react4xp.ssr.ServerSideRenderer'); + // TODO: centralize these even more? Along with other strings that must match? @@ -71,10 +72,10 @@ const getUniqueEntries = (arrayOfArrays, controlSet) => { const uniqueEntries = []; arrayOfArrays.forEach(arr => { utilLib.data.forceArray(arr).forEach(item => { - if (!controlSet.has(item)) { + if (controlSet.indexOf(item) === -1) { uniqueEntries.push(item); + controlSet.push(item); } - controlSet.add(item); }) }); return uniqueEntries; @@ -90,10 +91,12 @@ const getUniqueEntries = (arrayOfArrays, controlSet) => { * Also part of the merge: PAGE_CONTRIBUTIONS, the common standard React4xp page contributions */ const mergePageContributions = (incomingPgContrib, newPgContrib) => { - if (!pageContributions) { + if (!incomingPgContrib && !newPgContrib) { return {...PAGE_CONTRIBUTIONS}; } - const controlSet = new Set(); + incomingPgContrib = incomingPgContrib || {}; + newPgContrib = newPgContrib || {}; + const controlSet = []; return { headBegin: getUniqueEntries([PAGE_CONTRIBUTIONS.headBegin, incomingPgContrib.headBegin, newPgContrib.headBegin], controlSet), headEnd: getUniqueEntries([PAGE_CONTRIBUTIONS.headEnd, incomingPgContrib.headEnd, newPgContrib.headEnd], controlSet), @@ -338,7 +341,7 @@ class React4xp { - + ///////////////////////////////////////////////// STATIC ALL-IN-ONE RENDERERS /** All-in-one client-renderer. Returns a body and pageContributions object that can be directly returned from an XP controller. diff --git a/webpack.config.react4xp.externals.js b/webpack.config.react4xp.externals.js index 6100958f..60a9e4b4 100644 --- a/webpack.config.react4xp.externals.js +++ b/webpack.config.react4xp.externals.js @@ -17,9 +17,6 @@ module.exports = { entry: { // Built during the gradle step that triggers this webpack step: webpack_r4xp_externals 'externals': path.join(SRC_R4X, '_AUTOGENERATED_externals_.es6'), - - // TODO: nashorn polyfills don't need content hashing. This works for now, but should dispense with the whole frontend cache-busting-hash-in-the-filename and find-the-hashed-filename-through-chunkJsonFile. Can this be dispensed with without making yet another separate webpack step? - 'nashornPolyfills': path.join(SRC_R4X, '_nashornPolyfills_.es6') }, output: { @@ -50,13 +47,5 @@ module.exports = { template: path.join(SRC_R4X, 'chunks.externals.json.ejs'), filename: path.join(BUILD_R4X, 'chunks.externals.json') }), - - // TODO: nashorn polyfills don't need content hashing. This works for now, but should dispense with the whole frontend cache-busting-hash-in-the-filename and find-the-hashed-filename-through-chunkJsonFile. Can this be dispensed with without making yet another separate webpack step? - new HtmlWebpackPlugin({ - inject: false, - hash: false, - template: path.join(SRC_R4X, 'chunks.nashornPolyfills.json.ejs'), - filename: path.join(BUILD_R4X, 'chunks.nashornPolyfills.json') - }), ], }; diff --git a/webpack.config.react4xp.nashornPolyfills.js b/webpack.config.react4xp.nashornPolyfills.js new file mode 100644 index 00000000..3283ae95 --- /dev/null +++ b/webpack.config.react4xp.nashornPolyfills.js @@ -0,0 +1,34 @@ +// Transpiles nashorn polyfill from among other things, npm libraries. + +const path = require('path'); + +const { SRC_R4X, BUILD_R4X, BUILD_ENV } = require('./webpack.config.constants'); + +module.exports = { + mode: BUILD_ENV, + + entry: { + 'nashornPolyfills': path.join(SRC_R4X, '_nashornPolyfills_.es6') + }, + + output: { + path: BUILD_R4X, + filename: "[name].js", + }, + + resolve: { + extensions: ['.es6', '.js', '.jsx'] + }, + module: { + rules: [ + { + test: /\.((jsx?)|(es6))$/, + exclude: /node_modules/, + loader: 'babel-loader', + query: { + compact: (BUILD_ENV === 'production'), + } + } + ] + }, +}; From 5c6fa001c7dda896f527ad2ab5d66629a92650f9 Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Wed, 23 Jan 2019 22:08:08 +0100 Subject: [PATCH 66/96] Halfway there for adding rendered content into container at SSR step --- .../com/enonic/xp/react4xp/HtmlInserter.java | 34 +++- .../resources/lib/enonic/react4xp/index.es6 | 152 ++++++++++-------- .../complex-reactive/complex-reactive.es6 | 6 +- .../parts/simple-reactive/simple-reactive.es6 | 6 +- .../parts/simple-reactive/simple-reactive.jsx | 2 +- src/main/resources/site/parts/ssr/ssr.es6 | 8 +- src/main/resources/site/parts/ssr/ssr.jsx | 3 + 7 files changed, 128 insertions(+), 83 deletions(-) create mode 100644 src/main/resources/site/parts/ssr/ssr.jsx diff --git a/src/main/java/com/enonic/xp/react4xp/HtmlInserter.java b/src/main/java/com/enonic/xp/react4xp/HtmlInserter.java index 56556a26..9c4a0bd9 100644 --- a/src/main/java/com/enonic/xp/react4xp/HtmlInserter.java +++ b/src/main/java/com/enonic/xp/react4xp/HtmlInserter.java @@ -43,7 +43,39 @@ public String insertAtEndOfRoot(String body, String insert) { return outputter.outputString(bodyDoc); } catch (JDOMException | IOException e) { - System.err.println("\n\nERROR: [ " + e + " ] ... while trying to insert HTML:\n\n" + insert + "\n\n...into body:\n\n" + body + "\n\n"); + System.err.println("\n\nERROR: [ " + e + " ] ...when trying to insert HTML...\n\n" + insert + "\n\n...into body:\n\n" + body + "\n\n"); + } + + return null; + } + + + public String insertInsideContainer(String body, String insert, String id) { + System.out.println("\n\nBODY:\n" + body); + System.out.println("INSERT:\n" + insert); + System.out.println("ID:\n" + id); + try { + Document bodyDoc = saxBuilder.build(new StringReader(body)); + //System.out.println("bodyDoc:\n" + bodyDoc.toString()); + + // TODO: This is probably where the id should be used - find a child element by ID. + Element bodyRoot = bodyDoc.getRootElement(); + //System.out.println("bodyRoot:\n" + bodyRoot.toString()); + + Document insertDoc = saxBuilder.build(new StringReader(insert)); + //System.out.println("insertDoc:\n" + insertDoc.toString()); + Element insertRoot = insertDoc.getRootElement(); + //System.out.println("insertRoot:\n" + insertRoot.toString()); + + insertRoot.detach(); + bodyRoot.addContent(insertRoot); + //System.out.println("bodyRoot:\n" + bodyRoot); + + System.out.println("Output:\n" + outputter.outputString(bodyDoc) + "\n\n"); + return outputter.outputString(bodyDoc); + + } catch (JDOMException | IOException e) { + System.err.println("\n\nERROR: [ " + e + " ] ...when trying to insert HTML...\n\n" + insert + "\n\n...into body:\n\n" + body + "\n\n"); } return null; diff --git a/src/main/resources/lib/enonic/react4xp/index.es6 b/src/main/resources/lib/enonic/react4xp/index.es6 index c1f80a93..afd1b382 100644 --- a/src/main/resources/lib/enonic/react4xp/index.es6 +++ b/src/main/resources/lib/enonic/react4xp/index.es6 @@ -65,7 +65,7 @@ const bodyHasContainer = (body, react4xpId) => { -const buildContainer = (react4xpId) => `
`; +const buildContainer = (react4xpId, content) => `
${content || ''}
`; const getUniqueEntries = (arrayOfArrays, controlSet) => { @@ -126,9 +126,6 @@ const mergePageContributions = (incomingPgContrib, newPgContrib) => { class React4xp { - // TODO: FIKS CONSTRUCTOREN HER SÃ…NN AT DEN TAR IMOT KUN OBLIGATORISKE PARAMETERE - OG DET BARE ER DER DE KAN SETTES. - // //TELESKOPMETODENE SKAL BARE KUNNE JUSTERE VALGFRIE PARAMETERE, OG DE KAN BARE SETTES SÃ…NN. - /** Mandatory constructor initParam, one of two options (overloaded function): * @param Component {Object} The portal.getComponent() object of the Enonic XP component (currently page or part * only) that the react component belongs to. XP and react components are found in the same folder (and the component @@ -174,6 +171,45 @@ class React4xp { + + /** Optional initializer: returns a React4xp component instance initialized from a single set of parameters instead of + * the class approach. + * TODO: Document the params, similar to the class methods. + */ + static buildFromParams = (params) => { + const {jsxPath, component, jsxFileName, props, react4xpId, uniqueId} = params || {}; + + if (jsxPath && component) { + throw Error("Can't render React4xp for client: ambiguent parameters - use jsxPath or component, not both."); + } else if (!jsxPath && !component) { + throw Error("Can't render React4xp for client: need jsxPath or component (but not both)"); + } + + const react4xp = new React4xp(component || jsxPath); + + if (props) { + react4xp.setProps(props); + } + + if (react4xpId) { + react4xp.setId(react4xpId); + } + + if (uniqueId) { + if (typeof uniqueId === "string") { + react4xp.setId(uniqueId); + } + react4xp.uniqueId(); + } + + if (jsxFileName) { + react4xp.setJsxFileName(jsxFileName); + } + + return react4xp; + } + + //--------------------------------------------------------------- checkIdLock() { @@ -182,6 +218,9 @@ class React4xp { } } + // For now, it seems like a good idea to ensure two things when starting the client side rendering: + // 1, there is a target ID set. + // 2, it can't be changed once the rendering has started, i.e. between render body and render pagecontributions ensureAndLockId() { if (!this.react4xpId) { this.uniqueId(); @@ -269,29 +308,6 @@ class React4xp { //--------------------------------------------------------------- RENDERING METHODS: - /** Generates or modifies an HTML body, with a target container whose ID matches this component's react4xpId. - * @param body {string} Existing HTML body, for example rendered from thymeleaf. - * If it already has a matching-ID target container, body passes through unchanged (use this option and the - * setId method to control where in the body the react component should be inserted). If it doesn't have a - * matching container, a matching
will be inserted at the end of the body, inside the root element. If - * body is missing, a pure-target-container body is generated and returned. - */ - renderClientBody(body) { - this.ensureAndLockId(); - - // If no (or empty) body is supplied: generate a minimal container body with only a target container element. - if (((body || '') + "").replace(/(^\s+)|(\s+$)/g, "") === "") { - return buildContainer(this.react4xpId); - } - - // If there is a body but it's missing a target container element: - // Make a container and insert it right before the closing tag. - if (!bodyHasContainer(body, this.react4xpId)) { - return HTMLinserter.insertAtEndOfRoot(body, buildContainer(this.react4xpId)); - } - - return body; - } /** Generates or modifies existing enonic XP pageContributions. Adds client-side dependency chunks (core React4xp frontend, @@ -323,8 +339,43 @@ class React4xp { }); }; - // TODO: Like in renderClientBody, render it into the container! - renderToStaticMarkup = (body) => SSRreact4xp.renderToStaticMarkup(this.jsxPath, JSON.stringify(this.props)); + + /** Generates or modifies an HTML body, with a target container whose ID matches this component's react4xpId. + * @param body {string} Existing HTML body, for example rendered from thymeleaf. + * If it already has a matching-ID target container, body passes through unchanged (use this option and the + * setId method to control where in the body the react component should be inserted). If it doesn't have a + * matching container, a matching
will be inserted at the end of the body, inside the root element. If + * body is missing, a pure-target-container body is generated and returned. + * @param content {string} HTML content that, if included, is inserted into the container with the matching Id. + */ + renderBodyWithContainer(body, content) { + this.ensureAndLockId(); + + // If no (or empty) body is supplied: generate a minimal container body with only a target container element. + if (((body || '') + "").replace(/(^\s+)|(\s+$)/g, "") === "") { + return buildContainer(this.react4xpId, content); + } + + // If there is a body but it's missing a target container element: + // Make a container and insert it right before the closing tag. + if (!bodyHasContainer(body, this.react4xpId)) { + return HTMLinserter.insertAtEndOfRoot(body, buildContainer(this.react4xpId, content)); + } + + if (content) { + return HTMLinserter.insertInsideContainer(body, content, this.react4xpId); + } + + return body; + } + + // TODO: Like in renderBodyWithContainer, render it into the container! + renderToStaticMarkup = (body) => { + const markup = SSRreact4xp.renderToStaticMarkup(this.jsxPath, JSON.stringify(this.props)); + body = this.renderBodyWithContainer(body, markup); + log.info("body: " + JSON.stringify(body, null, 2)); + + } @@ -351,7 +402,7 @@ class React4xp { const react4xp = React4xp.buildFromParams(params); const {body, pageContributions} = params || {}; return { - body: react4xp.renderClientBody(body), + body: react4xp.renderBodyWithContainer(body), pageContributions: react4xp.renderClientPageContributions(pageContributions) } }; @@ -361,52 +412,15 @@ class React4xp { /** All-in-one serverside-renderer. Returns a static HTML body string. * @param params */ - static renderStaticMarkups = (params) => { + static renderStaticMarkup = (params) => { const react4xp = React4xp.buildFromParams(params); - const {body} = params || {}; + let {body} = params || {}; return react4xp.renderToStaticMarkup(body) }; - - /** Optional initializer: returns a React4xp component instance initialized from a single set of parameters instead of - * the class approach. - * TODO: Document the params, similar to the class methods. - */ - static buildFromParams = (params) => { - const {jsxPath, component, jsxFileName, props, react4xpId, uniqueId} = params || {}; - - if (jsxPath && component) { - throw Error("Can't render React4xp for client: ambiguent parameters - use jsxPath or component, not both."); - } else if (!jsxPath && !component) { - throw Error("Can't render React4xp for client: need jsxPath or component (but not both)"); - } - - const react4xp = new React4xp(component || jsxPath); - - if (props) { - react4xp.setProps(props); - } - - if (react4xpId) { - react4xp.setId(react4xpId); - } - - if (uniqueId) { - if (typeof uniqueId === "string") { - react4xp.setId(uniqueId); - } - react4xp.uniqueId(); - } - - if (jsxFileName) { - react4xp.setJsxFileName(jsxFileName); - } - - return react4xp; - } } module.exports = React4xp; diff --git a/src/main/resources/site/parts/complex-reactive/complex-reactive.es6 b/src/main/resources/site/parts/complex-reactive/complex-reactive.es6 index af0404a4..f42a9cf4 100644 --- a/src/main/resources/site/parts/complex-reactive/complex-reactive.es6 +++ b/src/main/resources/site/parts/complex-reactive/complex-reactive.es6 @@ -49,9 +49,9 @@ exports.get = function(req) { // Builds the body and page contributions by appending them stepwise: - body = firstReact.renderClientBody(body); - body = secondReact.renderClientBody(body); - body = thirdReact.renderClientBody(body); + body = firstReact.renderBodyWithContainer(body); + body = secondReact.renderBodyWithContainer(body); + body = thirdReact.renderBodyWithContainer(body); pageContributions = firstReact.renderClientPageContributions(pageContributions); pageContributions = secondReact.renderClientPageContributions(pageContributions); diff --git a/src/main/resources/site/parts/simple-reactive/simple-reactive.es6 b/src/main/resources/site/parts/simple-reactive/simple-reactive.es6 index e73b2885..4a5830a7 100644 --- a/src/main/resources/site/parts/simple-reactive/simple-reactive.es6 +++ b/src/main/resources/site/parts/simple-reactive/simple-reactive.es6 @@ -1,5 +1,4 @@ const portal = require('/lib/xp/portal'); -const utilLib = require('/lib/enonic/util'); const React4xp = require('/lib/enonic/react4xp'); // Handle the GET request @@ -7,10 +6,7 @@ exports.get = function(req) { const component = portal.getComponent(); const then = new Date().getTime(); - const props = { - insertedMessage: "fra \"den simple kontrolleren\"!" - }; - const rendered = React4xp.renderClient({ component, props }); + const rendered = React4xp.renderClient({ component }); const now = new Date().getTime(); log.info("Simple-reactive rendered in: " + (now - then) + " ms"); diff --git a/src/main/resources/site/parts/simple-reactive/simple-reactive.jsx b/src/main/resources/site/parts/simple-reactive/simple-reactive.jsx index 9fa1450f..7f805a43 100644 --- a/src/main/resources/site/parts/simple-reactive/simple-reactive.jsx +++ b/src/main/resources/site/parts/simple-reactive/simple-reactive.jsx @@ -1,3 +1,3 @@ import React from 'react'; -export default (props) =>

Dette er en test {props.insertedMessage}

; +export default () =>

Minimalisme er helmaks!

; diff --git a/src/main/resources/site/parts/ssr/ssr.es6 b/src/main/resources/site/parts/ssr/ssr.es6 index a2bdf7b1..569d6473 100644 --- a/src/main/resources/site/parts/ssr/ssr.es6 +++ b/src/main/resources/site/parts/ssr/ssr.es6 @@ -1,13 +1,13 @@ +const portal = require('/lib/xp/portal'); const React4xp = require('/lib/enonic/react4xp'); exports.get = (req) => { + const component = portal.getComponent(); const then = new Date().getTime(); - const app2 = new React4xp('level/app2') - .setProps({ insertedMessage: "- easy peasy lemon squeezy!" }); - const rendered = app2.renderToStaticMarkup(); - const now = new Date().getTime(); + const rendered = React4xp.renderStaticMarkup({ component }); + const now = new Date().getTime(); log.info("SSR rendered in: " + (now - then) + " ms"); // TODO: Same as on client-side rendering: the rendered static markup needs to be inserted into the/a body! diff --git a/src/main/resources/site/parts/ssr/ssr.jsx b/src/main/resources/site/parts/ssr/ssr.jsx new file mode 100644 index 00000000..826e84ea --- /dev/null +++ b/src/main/resources/site/parts/ssr/ssr.jsx @@ -0,0 +1,3 @@ +import React from 'react'; + +export default () =>

Statisk oppmerket.

; From 69c40c3f324094814b9a5757681e345ad002e0b4 Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Wed, 23 Jan 2019 22:32:14 +0100 Subject: [PATCH 67/96] Better structure in lib.react4xp.index.es6. Lacks the java functionality for inserting rendered staticmarkup into the target container. However, something is actually rendered into the body in the complex ssr. It works and nobody knows why. --- .../resources/lib/enonic/react4xp/index.es6 | 27 ++++---- .../complex-reactive/complex-reactive.es6 | 10 +-- .../complex-reactive/complex-reactive.xml | 2 +- .../site/parts/complex-ssr/complex-ssr.es6 | 64 +++++++++++++++++++ .../site/parts/complex-ssr/complex-ssr.html | 5 ++ .../site/parts/complex-ssr/complex-ssr.xml | 11 ++++ .../site/parts/complex-ssr/first.jsx | 3 + .../site/parts/complex-ssr/second.jsx | 3 + .../parts/simple-reactive/simple-reactive.xml | 2 +- src/main/resources/site/parts/ssr/ssr.es6 | 2 +- src/main/resources/site/parts/ssr/ssr.xml | 2 +- 11 files changed, 106 insertions(+), 25 deletions(-) create mode 100644 src/main/resources/site/parts/complex-ssr/complex-ssr.es6 create mode 100644 src/main/resources/site/parts/complex-ssr/complex-ssr.html create mode 100644 src/main/resources/site/parts/complex-ssr/complex-ssr.xml create mode 100644 src/main/resources/site/parts/complex-ssr/first.jsx create mode 100644 src/main/resources/site/parts/complex-ssr/second.jsx diff --git a/src/main/resources/lib/enonic/react4xp/index.es6 b/src/main/resources/lib/enonic/react4xp/index.es6 index afd1b382..eb7207cd 100644 --- a/src/main/resources/lib/enonic/react4xp/index.es6 +++ b/src/main/resources/lib/enonic/react4xp/index.es6 @@ -348,7 +348,7 @@ class React4xp { * body is missing, a pure-target-container body is generated and returned. * @param content {string} HTML content that, if included, is inserted into the container with the matching Id. */ - renderBodyWithContainer(body, content) { + renderBody(body, content) { this.ensureAndLockId(); // If no (or empty) body is supplied: generate a minimal container body with only a target container element. @@ -369,15 +369,18 @@ class React4xp { return body; } - // TODO: Like in renderBodyWithContainer, render it into the container! - renderToStaticMarkup = (body) => { - const markup = SSRreact4xp.renderToStaticMarkup(this.jsxPath, JSON.stringify(this.props)); - body = this.renderBodyWithContainer(body, markup); - log.info("body: " + JSON.stringify(body, null, 2)); + renderIntoBody(body) { + const markup = this.renderToStaticMarkup(); + return this.renderBody(body, markup); } + // TODO: Like in renderBody, render it into the container! + renderToStaticMarkup = (overrideProps) => { + return SSRreact4xp.renderToStaticMarkup(this.jsxPath, JSON.stringify(overrideProps || this.props)); + } + @@ -402,7 +405,7 @@ class React4xp { const react4xp = React4xp.buildFromParams(params); const {body, pageContributions} = params || {}; return { - body: react4xp.renderBodyWithContainer(body), + body: react4xp.renderBody(body), pageContributions: react4xp.renderClientPageContributions(pageContributions) } }; @@ -412,15 +415,11 @@ class React4xp { /** All-in-one serverside-renderer. Returns a static HTML body string. * @param params */ - static renderStaticMarkup = (params) => { + static renderSSRStaticMarkup = (params) => { const react4xp = React4xp.buildFromParams(params); - let {body} = params || {}; - return react4xp.renderToStaticMarkup(body) + const {body} = params || {}; + return react4xp.renderIntoBody(body); }; - - - - } module.exports = React4xp; diff --git a/src/main/resources/site/parts/complex-reactive/complex-reactive.es6 b/src/main/resources/site/parts/complex-reactive/complex-reactive.es6 index f42a9cf4..e29ad34a 100644 --- a/src/main/resources/site/parts/complex-reactive/complex-reactive.es6 +++ b/src/main/resources/site/parts/complex-reactive/complex-reactive.es6 @@ -49,13 +49,9 @@ exports.get = function(req) { // Builds the body and page contributions by appending them stepwise: - body = firstReact.renderBodyWithContainer(body); - body = secondReact.renderBodyWithContainer(body); - body = thirdReact.renderBodyWithContainer(body); - - pageContributions = firstReact.renderClientPageContributions(pageContributions); - pageContributions = secondReact.renderClientPageContributions(pageContributions); - pageContributions = thirdReact.renderClientPageContributions(pageContributions); + body = firstReact.renderIntoBody(body); + body = secondReact.renderIntoBody(body); + body = thirdReact.renderIntoBody(body); const now = new Date().getTime(); log.info("Complex-reactive rendered in: " + (now - then) + " ms"); diff --git a/src/main/resources/site/parts/complex-reactive/complex-reactive.xml b/src/main/resources/site/parts/complex-reactive/complex-reactive.xml index 7e68f97f..917085c3 100644 --- a/src/main/resources/site/parts/complex-reactive/complex-reactive.xml +++ b/src/main/resources/site/parts/complex-reactive/complex-reactive.xml @@ -1,6 +1,6 @@ - Complex Reactive Part + Complex ClientSide React diff --git a/src/main/resources/site/parts/complex-ssr/complex-ssr.es6 b/src/main/resources/site/parts/complex-ssr/complex-ssr.es6 new file mode 100644 index 00000000..4fb21d40 --- /dev/null +++ b/src/main/resources/site/parts/complex-ssr/complex-ssr.es6 @@ -0,0 +1,64 @@ +const portal = require('/lib/xp/portal'); +const thymeleaf = require('/lib/xp/thymeleaf'); +const React4xp = require('/lib/enonic/react4xp'); + +// Specify the view file to use +const view = resolve('complex-ssr.html'); + + +// Handle the GET request +exports.get = function(req) { + //log.info("complex-reactive request: " + JSON.stringify(req, null, 2)); + + const component = portal.getComponent(); + + const model = {}; + let body = thymeleaf.render(view, model); + + const then = new Date().getTime(); + + // Just to prove that existing pageContributions aren't overwritten: + let pageContributions = { + headEnd: '', + bodyEnd: '', + }; + + // -------------------------------------------------- + + + // Construction using the telescope builder pattern, using the "first.jsx" component in the part's (XP component) own path and generating a unique target container ID, also using the component + const firstReact = new React4xp(component) + .setJsxFileName("first") + .uniqueId() + .setProps({ insertedMessage: "fra \"første props\"!" }); + + + // Targeting an existing target container in the HTML view. Targets the "second.jsx" react component in this (the XP component's own) folder + const secondReact = new React4xp(component) + .setProps({ insertedMessage: "fra \"andre props\"!" }) + .setId('existing-react4xp-target') + .setJsxFileName('second'); + + + // Setting a chosen ID and uniquifying it, but appending a generated container element as it's not found in the HTML + const thirdReact = new React4xp('app') + .setId('thirdReact4xp').uniqueId(); + + + // -------------------------------------------------- + + + // Builds the body and page contributions by appending them stepwise: + body = firstReact.renderBody(body); + body = secondReact.renderBody(body); + body = thirdReact.renderBody(body); + + pageContributions = firstReact.renderClientPageContributions(pageContributions); + pageContributions = secondReact.renderClientPageContributions(pageContributions); + pageContributions = thirdReact.renderClientPageContributions(pageContributions); + + const now = new Date().getTime(); + log.info("Complex-reactive rendered in: " + (now - then) + " ms"); + + return { body, pageContributions }; +}; diff --git a/src/main/resources/site/parts/complex-ssr/complex-ssr.html b/src/main/resources/site/parts/complex-ssr/complex-ssr.html new file mode 100644 index 00000000..d23485ef --- /dev/null +++ b/src/main/resources/site/parts/complex-ssr/complex-ssr.html @@ -0,0 +1,5 @@ + +
+ +

Dette er det eneste synlige som er i bodyen nå. Det er etter den eksisterende containeren.

+
diff --git a/src/main/resources/site/parts/complex-ssr/complex-ssr.xml b/src/main/resources/site/parts/complex-ssr/complex-ssr.xml new file mode 100644 index 00000000..eacd0f8f --- /dev/null +++ b/src/main/resources/site/parts/complex-ssr/complex-ssr.xml @@ -0,0 +1,11 @@ + + + Complex ServerSide React + + + + + Flippin' C! + + + diff --git a/src/main/resources/site/parts/complex-ssr/first.jsx b/src/main/resources/site/parts/complex-ssr/first.jsx new file mode 100644 index 00000000..ecf07c2a --- /dev/null +++ b/src/main/resources/site/parts/complex-ssr/first.jsx @@ -0,0 +1,3 @@ +import React from 'react'; + +export default (props) =>

First.jsx: {props.insertedMessage}

; diff --git a/src/main/resources/site/parts/complex-ssr/second.jsx b/src/main/resources/site/parts/complex-ssr/second.jsx new file mode 100644 index 00000000..b2c28178 --- /dev/null +++ b/src/main/resources/site/parts/complex-ssr/second.jsx @@ -0,0 +1,3 @@ +import React from 'react'; + +export default (props) =>

Second.jsx: {props.insertedMessage}

; diff --git a/src/main/resources/site/parts/simple-reactive/simple-reactive.xml b/src/main/resources/site/parts/simple-reactive/simple-reactive.xml index 9cacf0ba..12a35457 100644 --- a/src/main/resources/site/parts/simple-reactive/simple-reactive.xml +++ b/src/main/resources/site/parts/simple-reactive/simple-reactive.xml @@ -1,6 +1,6 @@ - Simple Reactive Part + Simple ClientSide React diff --git a/src/main/resources/site/parts/ssr/ssr.es6 b/src/main/resources/site/parts/ssr/ssr.es6 index 569d6473..8adbb9f4 100644 --- a/src/main/resources/site/parts/ssr/ssr.es6 +++ b/src/main/resources/site/parts/ssr/ssr.es6 @@ -5,7 +5,7 @@ exports.get = (req) => { const component = portal.getComponent(); const then = new Date().getTime(); - const rendered = React4xp.renderStaticMarkup({ component }); + const rendered = React4xp.renderSSRStaticMarkup({ component }); const now = new Date().getTime(); log.info("SSR rendered in: " + (now - then) + " ms"); diff --git a/src/main/resources/site/parts/ssr/ssr.xml b/src/main/resources/site/parts/ssr/ssr.xml index 83ddd215..3e3911b2 100644 --- a/src/main/resources/site/parts/ssr/ssr.xml +++ b/src/main/resources/site/parts/ssr/ssr.xml @@ -1,6 +1,6 @@ - Server Side Rendering + Simple ServerSide React From f6be344991d732d40484bcccca4c9d3a5c0dd2cc Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Thu, 24 Jan 2019 21:27:26 +0100 Subject: [PATCH 68/96] SSRendered HTML is inserted at target element inside pre-existing body. --- build.gradle | 1 + .../com/enonic/xp/react4xp/HtmlInserter.java | 81 ++++++++++++++----- .../complex-reactive/complex-reactive.es6 | 34 +++++--- .../site/parts/complex-ssr/complex-ssr.es6 | 23 +++--- 4 files changed, 94 insertions(+), 45 deletions(-) diff --git a/build.gradle b/build.gradle index 165c1f94..1d7957df 100644 --- a/build.gradle +++ b/build.gradle @@ -34,6 +34,7 @@ dependencies { include group: 'org.jdom', name: 'jdom', version: '2.0.2' include group: 'org.json', name: 'json', version: '20180813' + include group: 'jaxen', name: 'jaxen', version: '1.1.6' } repositories { diff --git a/src/main/java/com/enonic/xp/react4xp/HtmlInserter.java b/src/main/java/com/enonic/xp/react4xp/HtmlInserter.java index 9c4a0bd9..af72f441 100644 --- a/src/main/java/com/enonic/xp/react4xp/HtmlInserter.java +++ b/src/main/java/com/enonic/xp/react4xp/HtmlInserter.java @@ -3,11 +3,16 @@ import org.jdom2.Document; import org.jdom2.Element; import org.jdom2.JDOMException; +import org.jdom2.filter.Filters; import org.jdom2.input.SAXBuilder; import org.jdom2.output.XMLOutputter; +import org.jdom2.xpath.XPathExpression; +import org.jdom2.xpath.XPathFactory; +import javax.xml.xpath.XPathException; import java.io.IOException; import java.io.StringReader; +import java.util.List; public class HtmlInserter { @@ -21,16 +26,16 @@ public class HtmlInserter { .setExpandEmptyElements(true); } - public String insertAtEndOfRoot(String body, String insert) { + public String insertAtEndOfRoot(String body, String payload) { //System.out.println("\n\nBODY:\n" + body); - //System.out.println("INSERT:\n" + insert); + //System.out.println("PAYLOAD:\n" + payload); try { Document bodyDoc = saxBuilder.build(new StringReader(body)); //System.out.println("bodyDoc:\n" + bodyDoc.toString()); Element bodyRoot = bodyDoc.getRootElement(); //System.out.println("bodyRoot:\n" + bodyRoot.toString()); - Document insertDoc = saxBuilder.build(new StringReader(insert)); + Document insertDoc = saxBuilder.build(new StringReader(payload)); //System.out.println("insertDoc:\n" + insertDoc.toString()); Element insertRoot = insertDoc.getRootElement(); //System.out.println("insertRoot:\n" + insertRoot.toString()); @@ -43,41 +48,75 @@ public String insertAtEndOfRoot(String body, String insert) { return outputter.outputString(bodyDoc); } catch (JDOMException | IOException e) { - System.err.println("\n\nERROR: [ " + e + " ] ...when trying to insert HTML...\n\n" + insert + "\n\n...into body:\n\n" + body + "\n\n"); + e.printStackTrace(); + System.err.println("\n\n" + + "ERROR: [ " + e.getClass().getName() + " ] ...when trying to insert HTML" + + (payload.length() < 1000 ? + "...\n\n" + payload + "\n\n..." : + " ") + + "into end of body" + + (body.length() < 1000 ? + ":\n\n" + body + "\n\n" : + "") + + "\nReturning the submitted body unchanged."); } - - return null; + return body; } - public String insertInsideContainer(String body, String insert, String id) { - System.out.println("\n\nBODY:\n" + body); - System.out.println("INSERT:\n" + insert); - System.out.println("ID:\n" + id); + public String insertInsideContainer(String body, String payload, String id) { + //System.out.println("\n\nBODY:\n" + body); + //System.out.println("PAYLOAD:\n" + payload); + //System.out.println("ID:\n" + id); try { Document bodyDoc = saxBuilder.build(new StringReader(body)); //System.out.println("bodyDoc:\n" + bodyDoc.toString()); - // TODO: This is probably where the id should be used - find a child element by ID. - Element bodyRoot = bodyDoc.getRootElement(); + XPathFactory xFactory = XPathFactory.instance(); + String expression = "//*[@id='" + id + "']"; + System.out.println("Expression: " + expression); + XPathExpression expr = xFactory.compile(expression, Filters.element()); + + List links = expr.evaluate(bodyDoc); + if (links == null || links.size() < 1) { + throw new XPathException("ID '" + id + "' not found."); + } + + System.out.println("Hits: " + links.size()); + + /*for (Element linkElement : links) { + System.out.println(linkElement); + }//*/ //System.out.println("bodyRoot:\n" + bodyRoot.toString()); - Document insertDoc = saxBuilder.build(new StringReader(insert)); + Document payloadDoc = saxBuilder.build(new StringReader(payload)); //System.out.println("insertDoc:\n" + insertDoc.toString()); - Element insertRoot = insertDoc.getRootElement(); + Element payloadRoot = payloadDoc.getRootElement(); //System.out.println("insertRoot:\n" + insertRoot.toString()); - insertRoot.detach(); - bodyRoot.addContent(insertRoot); + + // Whether or not more than one element with that id was found, insert the first one. + payloadRoot.detach(); + links.get(0).addContent(payloadRoot); + //System.out.println("bodyRoot:\n" + bodyRoot); + //System.out.println("Output:\n" + outputter.outputString(bodyDoc) + "\n\n"); - System.out.println("Output:\n" + outputter.outputString(bodyDoc) + "\n\n"); return outputter.outputString(bodyDoc); - } catch (JDOMException | IOException e) { - System.err.println("\n\nERROR: [ " + e + " ] ...when trying to insert HTML...\n\n" + insert + "\n\n...into body:\n\n" + body + "\n\n"); + } catch (JDOMException | IOException | XPathException e) { + e.printStackTrace(); + System.err.print("\n\n" + + "ERROR: [ " + e.getClass().getName() + " ] ...when trying to insert HTML" + + (payload.length() < 1000 ? + "...\n\n" + payload + "\n\n..." : + " ") + + "at element with ID '" + id + "' into body" + + (body.length() < 1000 ? + ":\n\n" + body + "\n\n" : + "") + + "\nReturning the submitted body unchanged."); } - - return null; + return body; } } diff --git a/src/main/resources/site/parts/complex-reactive/complex-reactive.es6 b/src/main/resources/site/parts/complex-reactive/complex-reactive.es6 index e29ad34a..84e616d1 100644 --- a/src/main/resources/site/parts/complex-reactive/complex-reactive.es6 +++ b/src/main/resources/site/parts/complex-reactive/complex-reactive.es6 @@ -1,17 +1,17 @@ -const portal = require('/lib/xp/portal'); -const thymeleaf = require('/lib/xp/thymeleaf'); -const React4xp = require('/lib/enonic/react4xp'); +const portal = require('/lib/xp/portal'); +const thymeleaf = require('/lib/xp/thymeleaf'); +const React4xp = require('/lib/enonic/react4xp'); + // Specify the view file to use const view = resolve('complex-reactive.html'); - // Handle the GET request exports.get = function(req) { //log.info("complex-reactive request: " + JSON.stringify(req, null, 2)); const component = portal.getComponent(); - + const model = {}; let body = thymeleaf.render(view, model); @@ -24,8 +24,8 @@ exports.get = function(req) { }; // -------------------------------------------------- - - + + // Construction using the telescope builder pattern, using the "first.jsx" component in the part's (XP component) own path and generating a unique target container ID, also using the component const firstReact = new React4xp(component) .setJsxFileName("first") @@ -49,12 +49,26 @@ exports.get = function(req) { // Builds the body and page contributions by appending them stepwise: - body = firstReact.renderIntoBody(body); - body = secondReact.renderIntoBody(body); - body = thirdReact.renderIntoBody(body); + body = firstReact.renderBody(body); + body = secondReact.renderBody(body); + body = thirdReact.renderBody(body); + + pageContributions = firstReact.renderClientPageContributions(pageContributions); + pageContributions = secondReact.renderClientPageContributions(pageContributions); + pageContributions = thirdReact.renderClientPageContributions(pageContributions); const now = new Date().getTime(); log.info("Complex-reactive rendered in: " + (now - then) + " ms"); return { body, pageContributions }; }; + + + + + + + + + + diff --git a/src/main/resources/site/parts/complex-ssr/complex-ssr.es6 b/src/main/resources/site/parts/complex-ssr/complex-ssr.es6 index 4fb21d40..9d2b469a 100644 --- a/src/main/resources/site/parts/complex-ssr/complex-ssr.es6 +++ b/src/main/resources/site/parts/complex-ssr/complex-ssr.es6 @@ -1,17 +1,16 @@ -const portal = require('/lib/xp/portal'); -const thymeleaf = require('/lib/xp/thymeleaf'); -const React4xp = require('/lib/enonic/react4xp'); +const portal = require('/lib/xp/portal'); +const thymeleaf = require('/lib/xp/thymeleaf'); +const React4xp = require('/lib/enonic/react4xp'); // Specify the view file to use const view = resolve('complex-ssr.html'); - // Handle the GET request exports.get = function(req) { //log.info("complex-reactive request: " + JSON.stringify(req, null, 2)); const component = portal.getComponent(); - + const model = {}; let body = thymeleaf.render(view, model); @@ -24,8 +23,8 @@ exports.get = function(req) { }; // -------------------------------------------------- - - + + // Construction using the telescope builder pattern, using the "first.jsx" component in the part's (XP component) own path and generating a unique target container ID, also using the component const firstReact = new React4xp(component) .setJsxFileName("first") @@ -49,13 +48,9 @@ exports.get = function(req) { // Builds the body and page contributions by appending them stepwise: - body = firstReact.renderBody(body); - body = secondReact.renderBody(body); - body = thirdReact.renderBody(body); - - pageContributions = firstReact.renderClientPageContributions(pageContributions); - pageContributions = secondReact.renderClientPageContributions(pageContributions); - pageContributions = thirdReact.renderClientPageContributions(pageContributions); + body = firstReact.renderIntoBody(body); + body = secondReact.renderIntoBody(body); + body = thirdReact.renderIntoBody(body); const now = new Date().getTime(); log.info("Complex-reactive rendered in: " + (now - then) + " ms"); From 60df9e782a04d93532afe98f4b8ecddb3e426320 Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Thu, 24 Jan 2019 21:39:38 +0100 Subject: [PATCH 69/96] Java cleanup. --- .../com/enonic/xp/react4xp/HtmlInserter.java | 34 +++---------------- 1 file changed, 5 insertions(+), 29 deletions(-) diff --git a/src/main/java/com/enonic/xp/react4xp/HtmlInserter.java b/src/main/java/com/enonic/xp/react4xp/HtmlInserter.java index af72f441..bce6b276 100644 --- a/src/main/java/com/enonic/xp/react4xp/HtmlInserter.java +++ b/src/main/java/com/enonic/xp/react4xp/HtmlInserter.java @@ -26,25 +26,18 @@ public class HtmlInserter { .setExpandEmptyElements(true); } + public String insertAtEndOfRoot(String body, String payload) { - //System.out.println("\n\nBODY:\n" + body); - //System.out.println("PAYLOAD:\n" + payload); try { Document bodyDoc = saxBuilder.build(new StringReader(body)); - //System.out.println("bodyDoc:\n" + bodyDoc.toString()); Element bodyRoot = bodyDoc.getRootElement(); - //System.out.println("bodyRoot:\n" + bodyRoot.toString()); - Document insertDoc = saxBuilder.build(new StringReader(payload)); - //System.out.println("insertDoc:\n" + insertDoc.toString()); - Element insertRoot = insertDoc.getRootElement(); - //System.out.println("insertRoot:\n" + insertRoot.toString()); + Document payloadDoc = saxBuilder.build(new StringReader(payload)); + Element payloadRoot = payloadDoc.getRootElement(); - insertRoot.detach(); - bodyRoot.addContent(insertRoot); - //System.out.println("bodyRoot:\n" + bodyRoot); + payloadRoot.detach(); + bodyRoot.addContent(payloadRoot); - //System.out.println("Output:\n" + outputter.outputString(bodyDoc) + "\n\n"); return outputter.outputString(bodyDoc); } catch (JDOMException | IOException e) { @@ -65,12 +58,8 @@ public String insertAtEndOfRoot(String body, String payload) { public String insertInsideContainer(String body, String payload, String id) { - //System.out.println("\n\nBODY:\n" + body); - //System.out.println("PAYLOAD:\n" + payload); - //System.out.println("ID:\n" + id); try { Document bodyDoc = saxBuilder.build(new StringReader(body)); - //System.out.println("bodyDoc:\n" + bodyDoc.toString()); XPathFactory xFactory = XPathFactory.instance(); String expression = "//*[@id='" + id + "']"; @@ -82,26 +71,13 @@ public String insertInsideContainer(String body, String payload, String id) { throw new XPathException("ID '" + id + "' not found."); } - System.out.println("Hits: " + links.size()); - - /*for (Element linkElement : links) { - System.out.println(linkElement); - }//*/ - //System.out.println("bodyRoot:\n" + bodyRoot.toString()); - Document payloadDoc = saxBuilder.build(new StringReader(payload)); - //System.out.println("insertDoc:\n" + insertDoc.toString()); Element payloadRoot = payloadDoc.getRootElement(); - //System.out.println("insertRoot:\n" + insertRoot.toString()); - // Whether or not more than one element with that id was found, insert the first one. payloadRoot.detach(); links.get(0).addContent(payloadRoot); - //System.out.println("bodyRoot:\n" + bodyRoot); - //System.out.println("Output:\n" + outputter.outputString(bodyDoc) + "\n\n"); - return outputter.outputString(bodyDoc); } catch (JDOMException | IOException | XPathException e) { From a128d36fda85ce56979d5eb21ef7b77d86b71793 Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Thu, 24 Jan 2019 23:14:03 +0100 Subject: [PATCH 70/96] Works badly. A counter component. Can insert data into props from XP component config, but something happens with the rendering that makes it not render in content studio. Timing of async component mounting vs script start vs setting state of SSRendered component? So SSR does not work at all, client-rendering only outside contentstudio. Array.keys seems not polyfilled? --- .../xp/react4xp/ssr/ServerSideRenderer.java | 3 +- .../resources/lib/enonic/react4xp/index.es6 | 6 +- .../resources/site/parts/counter/counter.es6 | 60 +++++++++++++++++++ .../resources/site/parts/counter/counter.html | 12 ++++ .../resources/site/parts/counter/counter.jsx | 37 ++++++++++++ .../resources/site/parts/counter/counter.xml | 38 ++++++++++++ .../parts/simple-reactive/simple-reactive.xml | 5 -- src/main/resources/site/parts/ssr/ssr.es6 | 1 - 8 files changed, 152 insertions(+), 10 deletions(-) create mode 100644 src/main/resources/site/parts/counter/counter.es6 create mode 100644 src/main/resources/site/parts/counter/counter.html create mode 100644 src/main/resources/site/parts/counter/counter.jsx create mode 100644 src/main/resources/site/parts/counter/counter.xml diff --git a/src/main/java/com/enonic/xp/react4xp/ssr/ServerSideRenderer.java b/src/main/java/com/enonic/xp/react4xp/ssr/ServerSideRenderer.java index ef6cab33..7e4d2d78 100644 --- a/src/main/java/com/enonic/xp/react4xp/ssr/ServerSideRenderer.java +++ b/src/main/java/com/enonic/xp/react4xp/ssr/ServerSideRenderer.java @@ -38,8 +38,9 @@ public String renderToStaticMarkup(String component, String props) throws IOExce } catch (ScriptException e) { System.err.println(ServerSideRenderer.class.getCanonicalName() + ".renderToStaticMarkup: COMPONENT SCRIPT FAILED.\n" + "Component: " + component + "\n" + - "Props: " + props + "" + + "Props: " + props + "\n" + "Script:\n---------------------------------\n\n" + script.toString() + "\n\n---------------------------------------"); + componentScripts.remove(component); throw e; } } diff --git a/src/main/resources/lib/enonic/react4xp/index.es6 b/src/main/resources/lib/enonic/react4xp/index.es6 index eb7207cd..b22163c6 100644 --- a/src/main/resources/lib/enonic/react4xp/index.es6 +++ b/src/main/resources/lib/enonic/react4xp/index.es6 @@ -177,7 +177,7 @@ class React4xp { * TODO: Document the params, similar to the class methods. */ static buildFromParams = (params) => { - const {jsxPath, component, jsxFileName, props, react4xpId, uniqueId} = params || {}; + const {jsxPath, component, jsxFileName, props, id, uniqueId} = params || {}; if (jsxPath && component) { throw Error("Can't render React4xp for client: ambiguent parameters - use jsxPath or component, not both."); @@ -191,8 +191,8 @@ class React4xp { react4xp.setProps(props); } - if (react4xpId) { - react4xp.setId(react4xpId); + if (id) { + react4xp.setId(id); } if (uniqueId) { diff --git a/src/main/resources/site/parts/counter/counter.es6 b/src/main/resources/site/parts/counter/counter.es6 new file mode 100644 index 00000000..a2526891 --- /dev/null +++ b/src/main/resources/site/parts/counter/counter.es6 @@ -0,0 +1,60 @@ +const portal = require('/lib/xp/portal'); +const thymeleaf = require('/lib/xp/thymeleaf'); +const React4xp = require('/lib/enonic/react4xp'); + +const view = resolve("counter.html"); + +exports.get = (req) => { + const component = portal.getComponent(); + + const model = { + heading: component.config.heading, + endquote: component.config.endquote, + } + const body = thymeleaf.render(view, model); + + const props = { + startCount: parseInt(component.config.countdown) + } + + const id = "the-countdown"; + + const rendered = (component.config.rendering === "client") ? + React4xp.renderClient({ component, props, body, id}) : + React4xp.renderSSRStaticMarkup({ component, props, body, id }); + + const then = new Date().getTime(); + + + + const now = new Date().getTime(); + log.info("SSR rendered in: " + (now - then) + " ms"); + + log.info("component: " + JSON.stringify(component, null, 2)); + + return rendered; + + + + + /** + * PLAN: + * Et lib rendrer body: + * Hvis innenfor content studio: Server-side-rendered HTML fra reactkomponenten. + * Hvis ikke: HTML å hekte react-entryen på: + * -Hvis et view er sendt inn (html-fil), forventes det at det er en XP thymeleaf som inneholder en plassholder-element å hekte react på, + * akkurat denne thymeleaf-ID'en et eller annet sted:
. + * -Hvis ikke noe view er sendt inn, rendres kun:
+ * + * -Hvis react4xpId er tom, genereres en unik id: react4xp_[hash/uid] + * -Hvis react4xpId ikke er tom, legges en unik hash/uid etter, som postfix. + * NB: Disse må være unike per komponent/path! Så, runtime. + * -Denne verdien settes inn i HTML'en enten via thymeleaf eller direkte-rendret. + * + * + * Page contributions: + * Hvis ikke innenfor content studio: + * ', - bodyEnd: '', - }; - - // -------------------------------------------------- - - - // Construction using the telescope builder pattern, using the "first.jsx" component in the part's (XP component) own path and generating a unique target container ID, also using the component - const firstReact = new React4xp(component) - .setJsxFileName("first") - .uniqueId() - .setProps({ insertedMessage: "fra \"første props\"!" }); - - - // Targeting an existing target container in the HTML view. Targets the "second.jsx" react component in this (the XP component's own) folder - const secondReact = new React4xp(component) - .setProps({ insertedMessage: "fra \"andre props\"!" }) - .setId('existing-react4xp-target') - .setJsxFileName('second'); - - - // Setting a chosen ID and uniquifying it, but appending a generated container element as it's not found in the HTML - const thirdReact = new React4xp('app') - .setId('thirdReact4xp').uniqueId(); - - - // -------------------------------------------------- - - - // Builds the body and page contributions by appending them stepwise: - body = firstReact.renderBody(body); - body = secondReact.renderBody(body); - body = thirdReact.renderBody(body); - - pageContributions = firstReact.renderClientPageContributions(pageContributions); - pageContributions = secondReact.renderClientPageContributions(pageContributions); - pageContributions = thirdReact.renderClientPageContributions(pageContributions); - - const now = new Date().getTime(); - log.info("Complex-reactive rendered in: " + (now - then) + " ms"); - - return { body, pageContributions }; -}; - - - - - - - - - - diff --git a/src/main/resources/site/parts/complex-reactive/complex-reactive.html b/src/main/resources/site/parts/complex-reactive/complex-reactive.html deleted file mode 100644 index d23485ef..00000000 --- a/src/main/resources/site/parts/complex-reactive/complex-reactive.html +++ /dev/null @@ -1,5 +0,0 @@ - -
- -

Dette er det eneste synlige som er i bodyen nå. Det er etter den eksisterende containeren.

-
diff --git a/src/main/resources/site/parts/complex-reactive/complex-reactive.xml b/src/main/resources/site/parts/complex-reactive/complex-reactive.xml deleted file mode 100644 index 3886cd8f..00000000 --- a/src/main/resources/site/parts/complex-reactive/complex-reactive.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - Complex ClientSide React - - - diff --git a/src/main/resources/site/parts/complex-reactive/first.jsx b/src/main/resources/site/parts/complex-reactive/first.jsx deleted file mode 100644 index ecf07c2a..00000000 --- a/src/main/resources/site/parts/complex-reactive/first.jsx +++ /dev/null @@ -1,3 +0,0 @@ -import React from 'react'; - -export default (props) =>

First.jsx: {props.insertedMessage}

; diff --git a/src/main/resources/site/parts/complex-reactive/second.jsx b/src/main/resources/site/parts/complex-reactive/second.jsx deleted file mode 100644 index b2c28178..00000000 --- a/src/main/resources/site/parts/complex-reactive/second.jsx +++ /dev/null @@ -1,3 +0,0 @@ -import React from 'react'; - -export default (props) =>

Second.jsx: {props.insertedMessage}

; diff --git a/src/main/resources/site/parts/complex-ssr/complex-ssr.es6 b/src/main/resources/site/parts/complex-ssr/complex-ssr.es6 deleted file mode 100644 index 9d2b469a..00000000 --- a/src/main/resources/site/parts/complex-ssr/complex-ssr.es6 +++ /dev/null @@ -1,59 +0,0 @@ -const portal = require('/lib/xp/portal'); -const thymeleaf = require('/lib/xp/thymeleaf'); -const React4xp = require('/lib/enonic/react4xp'); - -// Specify the view file to use -const view = resolve('complex-ssr.html'); - -// Handle the GET request -exports.get = function(req) { - //log.info("complex-reactive request: " + JSON.stringify(req, null, 2)); - - const component = portal.getComponent(); - - const model = {}; - let body = thymeleaf.render(view, model); - - const then = new Date().getTime(); - - // Just to prove that existing pageContributions aren't overwritten: - let pageContributions = { - headEnd: '', - bodyEnd: '', - }; - - // -------------------------------------------------- - - - // Construction using the telescope builder pattern, using the "first.jsx" component in the part's (XP component) own path and generating a unique target container ID, also using the component - const firstReact = new React4xp(component) - .setJsxFileName("first") - .uniqueId() - .setProps({ insertedMessage: "fra \"første props\"!" }); - - - // Targeting an existing target container in the HTML view. Targets the "second.jsx" react component in this (the XP component's own) folder - const secondReact = new React4xp(component) - .setProps({ insertedMessage: "fra \"andre props\"!" }) - .setId('existing-react4xp-target') - .setJsxFileName('second'); - - - // Setting a chosen ID and uniquifying it, but appending a generated container element as it's not found in the HTML - const thirdReact = new React4xp('app') - .setId('thirdReact4xp').uniqueId(); - - - // -------------------------------------------------- - - - // Builds the body and page contributions by appending them stepwise: - body = firstReact.renderIntoBody(body); - body = secondReact.renderIntoBody(body); - body = thirdReact.renderIntoBody(body); - - const now = new Date().getTime(); - log.info("Complex-reactive rendered in: " + (now - then) + " ms"); - - return { body, pageContributions }; -}; diff --git a/src/main/resources/site/parts/complex-ssr/complex-ssr.html b/src/main/resources/site/parts/complex-ssr/complex-ssr.html deleted file mode 100644 index d23485ef..00000000 --- a/src/main/resources/site/parts/complex-ssr/complex-ssr.html +++ /dev/null @@ -1,5 +0,0 @@ - -
- -

Dette er det eneste synlige som er i bodyen nå. Det er etter den eksisterende containeren.

-
diff --git a/src/main/resources/site/parts/complex-ssr/complex-ssr.xml b/src/main/resources/site/parts/complex-ssr/complex-ssr.xml deleted file mode 100644 index 91e5e44f..00000000 --- a/src/main/resources/site/parts/complex-ssr/complex-ssr.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - Complex ServerSide React - - - diff --git a/src/main/resources/site/parts/complex-ssr/first.jsx b/src/main/resources/site/parts/complex-ssr/first.jsx deleted file mode 100644 index ecf07c2a..00000000 --- a/src/main/resources/site/parts/complex-ssr/first.jsx +++ /dev/null @@ -1,3 +0,0 @@ -import React from 'react'; - -export default (props) =>

First.jsx: {props.insertedMessage}

; diff --git a/src/main/resources/site/parts/complex-ssr/second.jsx b/src/main/resources/site/parts/complex-ssr/second.jsx deleted file mode 100644 index b2c28178..00000000 --- a/src/main/resources/site/parts/complex-ssr/second.jsx +++ /dev/null @@ -1,3 +0,0 @@ -import React from 'react'; - -export default (props) =>

Second.jsx: {props.insertedMessage}

; diff --git a/src/main/resources/site/parts/counter/counter.es6 b/src/main/resources/site/parts/counter/counter.es6 deleted file mode 100644 index b8bf22ba..00000000 --- a/src/main/resources/site/parts/counter/counter.es6 +++ /dev/null @@ -1,28 +0,0 @@ -const portal = require('/lib/xp/portal'); -const thymeleaf = require('/lib/xp/thymeleaf'); -const React4xp = require('/lib/enonic/react4xp'); - -const view = resolve("counter.html"); - -exports.get = (req) => { - const component = portal.getComponent(); - - const model = { - heading: component.config.heading, - endquote: component.config.endquote, - } - - const then = new Date().getTime(); - - const rendered = React4xp.render(req,{ - component, - props: { startCount: parseInt(component.config.countdown) }, - body: thymeleaf.render(view, model), - id: "the-countdown" - }); - - const now = new Date().getTime(); - log.info("SSR rendered in: " + (now - then) + " ms"); - - return rendered; -}; diff --git a/src/main/resources/site/parts/counter/counter.html b/src/main/resources/site/parts/counter/counter.html deleted file mode 100644 index 1fc9bfb5..00000000 --- a/src/main/resources/site/parts/counter/counter.html +++ /dev/null @@ -1,5 +0,0 @@ -
-

Gotta start somewhere

-
-
This ends tonight.
-
diff --git a/src/main/resources/site/parts/counter/counter.jsx b/src/main/resources/site/parts/counter/counter.jsx deleted file mode 100644 index 4d3364db..00000000 --- a/src/main/resources/site/parts/counter/counter.jsx +++ /dev/null @@ -1,39 +0,0 @@ -import React from 'react'; - -class Counter extends React.Component { - constructor(props) { - super(props); - this.state = { - count: props.startCount - } - this.tick.bind(this); - } - - tick(count) { - setTimeout(()=>{ - this.setState({count}); - if (count > 0) { - this.tick(count - 1); - } - }, - 75); - } - - - componentDidMount() { - this.tick(this.state.count); - } - - - render() { - const self = this; - - // Counting array: [1... count] in a polyfilled-nashorn-kinda-way - const theArray = Array.apply(null, {length: self.state.count}).map((value, index) => index); - return (
    - { theArray.map(c =>
  • {self.state.count - c}
  • ) } -
); - } -} - -export default (props) => ; diff --git a/src/main/resources/site/parts/counter/counter.xml b/src/main/resources/site/parts/counter/counter.xml deleted file mode 100644 index 23e60ecf..00000000 --- a/src/main/resources/site/parts/counter/counter.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - Counter - - - - - - It's the Penultimate Countown! - - - - - - 42 - - 1 - 99000 - - - - - - - I'm sure we'll all miss her so - - - diff --git a/src/main/resources/site/parts/example/example.es6 b/src/main/resources/site/parts/example/example.es6 new file mode 100644 index 00000000..d292f8ad --- /dev/null +++ b/src/main/resources/site/parts/example/example.es6 @@ -0,0 +1,10 @@ +const portal = require('/lib/xp/portal'); +const React4xp = require('/lib/enonic/react4xp'); + +// Handle the GET request +exports.get = function(request) { + const component = portal.getComponent(); + + const props = { greeted: "world" }; + return React4xp.render(request, { component, props }); +}; \ No newline at end of file diff --git a/src/main/resources/site/parts/example/example.jsx b/src/main/resources/site/parts/example/example.jsx new file mode 100644 index 00000000..3a6726bb --- /dev/null +++ b/src/main/resources/site/parts/example/example.jsx @@ -0,0 +1,3 @@ +import React from 'react'; + +export default (props) =>

Hello {props.greeted}!

; diff --git a/src/main/resources/site/parts/simple-reactive/simple-reactive.xml b/src/main/resources/site/parts/example/example.xml similarity index 63% rename from src/main/resources/site/parts/simple-reactive/simple-reactive.xml rename to src/main/resources/site/parts/example/example.xml index 0c74a20a..a3936113 100644 --- a/src/main/resources/site/parts/simple-reactive/simple-reactive.xml +++ b/src/main/resources/site/parts/example/example.xml @@ -1,6 +1,6 @@ - Simple ClientSide React + React example diff --git a/src/main/resources/site/parts/simple-reactive/simple-reactive.es6 b/src/main/resources/site/parts/simple-reactive/simple-reactive.es6 deleted file mode 100644 index 4a5830a7..00000000 --- a/src/main/resources/site/parts/simple-reactive/simple-reactive.es6 +++ /dev/null @@ -1,15 +0,0 @@ -const portal = require('/lib/xp/portal'); -const React4xp = require('/lib/enonic/react4xp'); - -// Handle the GET request -exports.get = function(req) { - const component = portal.getComponent(); - const then = new Date().getTime(); - - const rendered = React4xp.renderClient({ component }); - - const now = new Date().getTime(); - log.info("Simple-reactive rendered in: " + (now - then) + " ms"); - - return rendered; -}; diff --git a/src/main/resources/site/parts/simple-reactive/simple-reactive.jsx b/src/main/resources/site/parts/simple-reactive/simple-reactive.jsx deleted file mode 100644 index 7f805a43..00000000 --- a/src/main/resources/site/parts/simple-reactive/simple-reactive.jsx +++ /dev/null @@ -1,3 +0,0 @@ -import React from 'react'; - -export default () =>

Minimalisme er helmaks!

; diff --git a/src/main/resources/site/parts/ssr/ssr.es6 b/src/main/resources/site/parts/ssr/ssr.es6 deleted file mode 100644 index 97d5aa44..00000000 --- a/src/main/resources/site/parts/ssr/ssr.es6 +++ /dev/null @@ -1,38 +0,0 @@ -const portal = require('/lib/xp/portal'); -const React4xp = require('/lib/enonic/react4xp'); - -exports.get = (req) => { - const component = portal.getComponent(); - const then = new Date().getTime(); - - const rendered = React4xp.renderSSR({ component }); - - const now = new Date().getTime(); - log.info("SSR rendered in: " + (now - then) + " ms"); - - return rendered; - - - - - /** - * PLAN: - * Et lib rendrer body: - * Hvis innenfor content studio: Server-side-rendered HTML fra reactkomponenten. - * Hvis ikke: HTML å hekte react-entryen på: - * -Hvis et view er sendt inn (html-fil), forventes det at det er en XP thymeleaf som inneholder en plassholder-element å hekte react på, - * akkurat denne thymeleaf-ID'en et eller annet sted:
. - * -Hvis ikke noe view er sendt inn, rendres kun:
- * - * -Hvis react4xpId er tom, genereres en unik id: react4xp_[hash/uid] - * -Hvis react4xpId ikke er tom, legges en unik hash/uid etter, som postfix. - * NB: Disse må være unike per komponent/path! Så, runtime. - * -Denne verdien settes inn i HTML'en enten via thymeleaf eller direkte-rendret. - * - * - * Page contributions: - * Hvis ikke innenfor content studio: - * ` + log.info("chunk: " + JSON.stringify(chunk, null, 2)); + pageContributions.headEnd = [ + ...(pageContributions.headEnd || []), + `` ]; - }); + }; }); }); - //log.info("\nBuilt basic pageContributions:\n" + JSON.stringify(pageContributions, null, 2) + "\n"); + log.info("\nBuilt basic pageContributions:\n" + JSON.stringify(pageContributions, null, 2) + "\n"); return pageContributions; } diff --git a/src/main/resources/site/parts/example/example.jsx b/src/main/resources/site/parts/example/example.jsx index 3a6726bb..711593cb 100644 --- a/src/main/resources/site/parts/example/example.jsx +++ b/src/main/resources/site/parts/example/example.jsx @@ -1,3 +1,8 @@ import React from 'react'; -export default (props) =>

Hello {props.greeted}!

; +import Testing from '../../../../react4xp/testinge/testinge'; + +export default (props) =>
+

Hello {props.greeted}!

+ +
; diff --git a/webpack.config.constants.js b/webpack.config.constants.js index 04d6f342..469e6ca4 100644 --- a/webpack.config.constants.js +++ b/webpack.config.constants.js @@ -1,8 +1,9 @@ const path = require('path'); const fs = require('fs'); -const SRC_MAIN = path.join(__dirname, 'src/main'); -const BUILD = path.join(__dirname, 'build/resources/main'); +const SRC_MAIN = path.join(__dirname, 'src', 'main'); +const MAIN = path.join('build', 'resources', 'main'); +const BUILD = path.join(__dirname, MAIN); const SITE = 'site'; const R4X_SUB_ENTRIES = '_components'; // Special-case subdirectory under /react4xp/. All files under this will be their own chunk, for dynamic, on-demand asset loading of top-level components, which in turn uses shared components chunked under all other subdirectories. TODO: WHAT ABOUT FILES IN ROOT /R4X/ ? @@ -11,6 +12,7 @@ const R4X_HOME = 'react4xp'; const R4X_TARGETSUBDIR = R4X_HOME; const SRC_R4X = path.join(SRC_MAIN, R4X_HOME); const BUILD_R4X = path.join(BUILD, R4X_TARGETSUBDIR); +const RELATIVE_BUILD_R4X = path.join(MAIN, R4X_TARGETSUBDIR); const SRC_SITE = path.join(SRC_MAIN, "resources", SITE); @@ -48,7 +50,7 @@ module.exports = { SITE, SRC_MAIN, SRC_R4X, SRC_SITE, SRC_R4X_ENTRIES, R4X_TARGETSUBDIR, R4X_ENTRIES, R4X_SUB_ENTRIES, R4X_HOME, - BUILD, BUILD_R4X, BUILD_ENV, + BUILD, BUILD_R4X, BUILD_ENV, RELATIVE_BUILD_R4X, LIBRARY_NAME, EXTERNALS }; diff --git a/webpack.config.react4xp.core.js b/webpack.config.react4xp.core.js index c9334c55..5a29fca5 100644 --- a/webpack.config.react4xp.core.js +++ b/webpack.config.react4xp.core.js @@ -10,9 +10,9 @@ const path = require('path'); -const HtmlWebpackPlugin = require('html-webpack-plugin'); +const Chunks2json = require('chunks-2-json-webpack-plugin'); -const { SRC_R4X, BUILD_R4X, BUILD_ENV, LIBRARY_NAME, EXTERNALS } = require('./webpack.config.constants'); +const { SRC_R4X, BUILD_R4X, RELATIVE_BUILD_R4X, BUILD_ENV, LIBRARY_NAME, EXTERNALS } = require('./webpack.config.constants'); module.exports = { mode: BUILD_ENV, @@ -49,12 +49,7 @@ module.exports = { externals: EXTERNALS, plugins: [ - new HtmlWebpackPlugin({ - inject: false, - hash: false, - template: path.join(SRC_R4X, 'chunks.core.json.ejs'), - filename: path.join(BUILD_R4X, 'chunks.core.json') - }), + new Chunks2json({ outputDir: RELATIVE_BUILD_R4X, filename: 'chunks.core.json' }), ], }; diff --git a/webpack.config.react4xp.externals.js b/webpack.config.react4xp.externals.js index 60a9e4b4..a984488f 100644 --- a/webpack.config.react4xp.externals.js +++ b/webpack.config.react4xp.externals.js @@ -7,9 +7,9 @@ const path = require('path'); -const HtmlWebpackPlugin = require('html-webpack-plugin'); +const Chunks2json = require('chunks-2-json-webpack-plugin'); -const { SRC_R4X, BUILD_R4X, BUILD_ENV } = require('./webpack.config.constants'); +const { SRC_R4X, BUILD_R4X, RELATIVE_BUILD_R4X, BUILD_ENV } = require('./webpack.config.constants'); module.exports = { mode: BUILD_ENV, @@ -41,11 +41,6 @@ module.exports = { }, plugins: [ - new HtmlWebpackPlugin({ - inject: false, - hash: false, - template: path.join(SRC_R4X, 'chunks.externals.json.ejs'), - filename: path.join(BUILD_R4X, 'chunks.externals.json') - }), + new Chunks2json({ outputDir: RELATIVE_BUILD_R4X, filename: 'chunks.externals.json' }), ], }; diff --git a/webpack.config.react4xp.js b/webpack.config.react4xp.js index 0a43163d..59ed3bc2 100644 --- a/webpack.config.react4xp.js +++ b/webpack.config.react4xp.js @@ -14,21 +14,35 @@ const path = require('path'); const glob = require('glob'); +const fs = require('fs'); -const HtmlWebpackPlugin = require('html-webpack-plugin'); +const Chunks2json = require('chunks-2-json-webpack-plugin'); const { - SITE, SRC_R4X, SRC_SITE, SRC_R4X_ENTRIES, R4X_SUB_ENTRIES, BUILD_R4X, BUILD_ENV, LIBRARY_NAME, EXTERNALS + SITE, SRC_R4X, SRC_SITE, SRC_R4X_ENTRIES, R4X_SUB_ENTRIES, BUILD_R4X, RELATIVE_BUILD_R4X, BUILD_ENV, LIBRARY_NAME, EXTERNALS } = require('./webpack.config.constants'); +// Entries are the non-dependency output files, i.e. react components and other js files that should be directly +// available and runnable to both the browser and the nashorn engine. +const entries = Object.assign({}, + getEntries(SRC_R4X_ENTRIES, ['jsx', 'js', 'es6'], ""), + getEntries(SRC_SITE, ['jsx'], path.join(SITE)) // <-- Note: this is where top-level react components are included, in the enonic site structure. Only JSX files are included: in order for these to be transpiled here (and thereby become a part of the chunk structure for these static assets) and not by the transpilation of "pure XP" source code files (which should be transpiled separately, outside of the static-asset/chunk structure), take care to separate them! Here, this is done by including only .JSX files here, reserving that extension for toplevel react components, and excluding .JSX files in the babelSite task in build.gradle. Note that if the top-level components import .es6 dependencies, that separation must be done more thoroughly. +); + +const entryList = Object.keys(entries); +const entryFile = path.join(BUILD_R4X, 'entries.json'); +if (!fs.existsSync(BUILD_R4X)){ + fs.mkdirSync(BUILD_R4X); +} +fs.writeFileSync(entryFile, JSON.stringify(entryList)); +console.log("React4xp entries (aka component names / jsxPath) listed in: " + entryFile); + + module.exports = { mode: BUILD_ENV, - entry: Object.assign({}, - getEntries(SRC_R4X_ENTRIES, ['jsx', 'js', 'es6'], ""), - getEntries(SRC_SITE, ['jsx'], path.join(SITE)) // <-- Note: this is where top-level react components are included, in the enonic site structure. Only JSX files are included: in order for these to be transpiled here (and thereby become a part of the chunk structure for these static assets) and not by the transpilation of "pure XP" source code files (which should be transpiled separately, outside of the static-asset/chunk structure), take care to separate them! Here, this is done by including only .JSX files here, reserving that extension for toplevel react components, and excluding .JSX files in the babelSite task in build.gradle. Note that if the top-level components import .es6 dependencies, that separation must be done more thoroughly. - ), + entry: entries, output: { path: BUILD_R4X, // <-- Sets the base url for plugins and other target dirs. Note the use of {{assetUrl}} in index.html (or index.ejs). @@ -61,28 +75,20 @@ module.exports = { externals: EXTERNALS, - plugins: [ - // TODO: How to autogenerate chunks.json.ejs using the folder-chunks as well as vendor, and during that autogeneration, how to detect if any of them aren't used after all and should be omitted from the autogeneration? - new HtmlWebpackPlugin({ - inject: false, - hash: false, - template: path.join(SRC_R4X, 'chunks.json.ejs'), - filename: path.join(BUILD_R4X, 'chunks.json') - }), - ], - optimization: { splitChunks: { name: false, cacheGroups: getCacheGroups({common: 2}) } - } + }, + + plugins: [ + new Chunks2json({ outputDir: RELATIVE_BUILD_R4X, filename: 'chunks.json' }), + ] }; // Builds entries from files found under a directory, for selected file extensions, for bein transpiled out to a target path function getEntries(fullDirPath, extensions, targetPath) { - console.log("Components in " + fullDirPath + " (." + extensions.join(", .") + "):") - targetPath = (targetPath || "").trim(); if (targetPath.startsWith("/")) { targetPath = targetPath.substring(1); From ce353a6a419523b1950a13719bc03611e64f1f5a Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Sat, 26 Jan 2019 17:27:39 +0100 Subject: [PATCH 77/96] Removed obsolete test components, leaving behind example part --- src/main/react4xp/_components/testentry.jsx | 7 ------- src/main/react4xp/testinge/testinge.jsx | 6 ------ src/main/resources/lib/enonic/react4xp/index.es6 | 1 - src/main/resources/site/parts/example/example.es6 | 4 ++-- src/main/resources/site/parts/example/example.jsx | 7 +------ src/main/resources/site/parts/example/example.xml | 7 ++++++- 6 files changed, 9 insertions(+), 23 deletions(-) delete mode 100644 src/main/react4xp/_components/testentry.jsx delete mode 100644 src/main/react4xp/testinge/testinge.jsx diff --git a/src/main/react4xp/_components/testentry.jsx b/src/main/react4xp/_components/testentry.jsx deleted file mode 100644 index 0f2e5083..00000000 --- a/src/main/react4xp/_components/testentry.jsx +++ /dev/null @@ -1,7 +0,0 @@ -import React from 'react'; -import Testinge from '../testinge/testinge'; - -export default (props) =>
-

Test2

- -
; diff --git a/src/main/react4xp/testinge/testinge.jsx b/src/main/react4xp/testinge/testinge.jsx deleted file mode 100644 index ae321da9..00000000 --- a/src/main/react4xp/testinge/testinge.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import React from 'react'; -import Redux from 'redux'; - -console.log("Redux: " + JSON.stringify(Redux)); - -export default (props) =>

Test

; diff --git a/src/main/resources/lib/enonic/react4xp/index.es6 b/src/main/resources/lib/enonic/react4xp/index.es6 index db0b0aba..2ddfed0a 100644 --- a/src/main/resources/lib/enonic/react4xp/index.es6 +++ b/src/main/resources/lib/enonic/react4xp/index.es6 @@ -47,7 +47,6 @@ const buildBasicPageContributions = (chunkHashFiles) => { }; }); }); - log.info("\nBuilt basic pageContributions:\n" + JSON.stringify(pageContributions, null, 2) + "\n"); return pageContributions; } diff --git a/src/main/resources/site/parts/example/example.es6 b/src/main/resources/site/parts/example/example.es6 index d292f8ad..9ee0982e 100644 --- a/src/main/resources/site/parts/example/example.es6 +++ b/src/main/resources/site/parts/example/example.es6 @@ -5,6 +5,6 @@ const React4xp = require('/lib/enonic/react4xp'); exports.get = function(request) { const component = portal.getComponent(); - const props = { greeted: "world" }; + const props = { greeted: component.config.greeted }; return React4xp.render(request, { component, props }); -}; \ No newline at end of file +}; diff --git a/src/main/resources/site/parts/example/example.jsx b/src/main/resources/site/parts/example/example.jsx index 711593cb..3a6726bb 100644 --- a/src/main/resources/site/parts/example/example.jsx +++ b/src/main/resources/site/parts/example/example.jsx @@ -1,8 +1,3 @@ import React from 'react'; -import Testing from '../../../../react4xp/testinge/testinge'; - -export default (props) =>
-

Hello {props.greeted}!

- -
; +export default (props) =>

Hello {props.greeted}!

; diff --git a/src/main/resources/site/parts/example/example.xml b/src/main/resources/site/parts/example/example.xml index a3936113..5a43bd08 100644 --- a/src/main/resources/site/parts/example/example.xml +++ b/src/main/resources/site/parts/example/example.xml @@ -2,5 +2,10 @@ React example - + + + + world + +
From b206df785c4f59a50968a609a3216afca6874b47 Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Sat, 26 Jan 2019 17:34:30 +0100 Subject: [PATCH 78/96] Gitignore vscode project files --- .classpath | 8 ------- .gitignore | 6 +++++ .project | 23 ------------------- .vscode/settings.json | 19 ---------------- _vscode/starter-react.code-workspace | 34 ---------------------------- 5 files changed, 6 insertions(+), 84 deletions(-) delete mode 100644 .classpath delete mode 100644 .project delete mode 100644 .vscode/settings.json delete mode 100644 _vscode/starter-react.code-workspace diff --git a/.classpath b/.classpath deleted file mode 100644 index a1213b5b..00000000 --- a/.classpath +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/.gitignore b/.gitignore index b14ffe18..360dae42 100644 --- a/.gitignore +++ b/.gitignore @@ -91,5 +91,11 @@ crashlytics-build.properties # Node modules node_modules/ bin/ +.vscode/ +_vscode/ +.project +.classpath + + **/_AUTOGENERATED_externals_.es6 diff --git a/.project b/.project deleted file mode 100644 index b87ae884..00000000 --- a/.project +++ /dev/null @@ -1,23 +0,0 @@ - - - react - Project react created by Buildship. - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.eclipse.buildship.core.gradleprojectbuilder - - - - - - org.eclipse.jdt.core.javanature - org.eclipse.buildship.core.gradleprojectnature - - diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 12a8a5bd..00000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "javascript.format.insertSpaceAfterCommaDelimiter": false, - "javascript.format.insertSpaceAfterFunctionKeywordForAnonymousFunctions": false, - "javascript.format.insertSpaceAfterKeywordsInControlFlowStatements": false, - "javascript.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces": false, - "javascript.format.insertSpaceBeforeAndAfterBinaryOperators": false, - "javascript.format.insertSpaceAfterSemicolonInForStatements": false, - "typescript.format.insertSpaceAfterCommaDelimiter": false, - "typescript.format.insertSpaceAfterFunctionKeywordForAnonymousFunctions": false, - "typescript.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces": false, - "typescript.format.insertSpaceBeforeAndAfterBinaryOperators": false, - "typescript.format.insertSpaceAfterSemicolonInForStatements": false, - "typescript.format.insertSpaceAfterKeywordsInControlFlowStatements": false, - "javascript.suggest.completeFunctionCalls": true, - "typescript.suggest.completeFunctionCalls": true, - "tslint.ignoreDefinitionFiles": false, - "tslint.jsEnable": true, - "typescriptHero.imports.organizeOnSave": true -} \ No newline at end of file diff --git a/_vscode/starter-react.code-workspace b/_vscode/starter-react.code-workspace deleted file mode 100644 index 8cead170..00000000 --- a/_vscode/starter-react.code-workspace +++ /dev/null @@ -1,34 +0,0 @@ -{ - "folders": [ - { - "path": ".." - } - ], - "settings": { - "javascript.format.insertSpaceAfterCommaDelimiter": false, - "javascript.format.enable": false, - "javascript.format.insertSpaceAfterKeywordsInControlFlowStatements": false, - "javascript.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces": false, - "javascript.format.insertSpaceAfterFunctionKeywordForAnonymousFunctions": false, - "javascript.format.insertSpaceAfterSemicolonInForStatements": false, - "typescript.format.enable": false, - "typescript.format.insertSpaceAfterFunctionKeywordForAnonymousFunctions": false, - "typescript.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces": false, - "typescript.format.insertSpaceAfterSemicolonInForStatements": false, - "typescript.format.insertSpaceBeforeAndAfterBinaryOperators": false, - "javascript.format.insertSpaceBeforeAndAfterBinaryOperators": false, - "typescript.format.insertSpaceAfterCommaDelimiter": false, - "typescript.format.insertSpaceAfterKeywordsInControlFlowStatements": false, - "javascript.autoClosingTags": false, - "typescript.autoClosingTags": false, - "tslint.ignoreDefinitionFiles": false, - "tslint.jsEnable": true, - "javascript.referencesCodeLens.enabled": true, - "javascript.suggest.completeFunctionCalls": true, - "typescript.referencesCodeLens.enabled": true, - "typescript.suggest.completeFunctionCalls": true, - "typescriptHero.imports.organizeOnSave": true, - "java.configuration.updateBuildConfiguration": "disabled", - "java.dependency.packagePresentation": "hierarchical" - } -} \ No newline at end of file From a2e269d03cee86e3f894a248a62249a1aea2be7c Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Sat, 26 Jan 2019 17:38:53 +0100 Subject: [PATCH 79/96] More cleanup: gitignore, gradle and npm --- .gitignore | 3 + .settings/org.eclipse.buildship.core.prefs | 2 - build.gradle | 3 - package-lock.json | 3025 +++++++++----------- package.json | 1 - 5 files changed, 1309 insertions(+), 1725 deletions(-) delete mode 100644 .settings/org.eclipse.buildship.core.prefs diff --git a/.gitignore b/.gitignore index 360dae42..46082f97 100644 --- a/.gitignore +++ b/.gitignore @@ -90,11 +90,14 @@ crashlytics-build.properties # Node modules node_modules/ + +# Visual studio code project files bin/ .vscode/ _vscode/ .project .classpath +.settings/ diff --git a/.settings/org.eclipse.buildship.core.prefs b/.settings/org.eclipse.buildship.core.prefs deleted file mode 100644 index e8895216..00000000 --- a/.settings/org.eclipse.buildship.core.prefs +++ /dev/null @@ -1,2 +0,0 @@ -connection.project.dir= -eclipse.preferences.version=1 diff --git a/build.gradle b/build.gradle index 956e5c8d..1d7957df 100644 --- a/build.gradle +++ b/build.gradle @@ -35,9 +35,6 @@ dependencies { include group: 'org.jdom', name: 'jdom', version: '2.0.2' include group: 'org.json', name: 'json', version: '20180813' include group: 'jaxen', name: 'jaxen', version: '1.1.6' - - // Not needed as such, just for demo - include 'com.enonic.lib:landingpage:1.0.0' } repositories { diff --git a/package-lock.json b/package-lock.json index ced0a682..22fe5b20 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.2.0.tgz", "integrity": "sha512-oouEibCbHMVdZSDlJBO6bZmID/zA/G/Qx3H1d3rSNPTD+L8UNKvCat7aKWSJ74zYbm5zWGh0GQN0hKj8zYFTCg==", "requires": { - "regenerator-runtime": "0.12.1" + "regenerator-runtime": "^0.12.0" }, "dependencies": { "regenerator-runtime": { @@ -93,7 +93,7 @@ "integrity": "sha512-Mmqx/cS68K1tSrvRLtaV/Lp3NZWzXtOHUW2IvDvl2sihAwJh4ACE0eL6A8FvMyDG9abes3saB6dMimLOs+HMoQ==", "dev": true, "requires": { - "@xtuc/ieee754": "1.2.0" + "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { @@ -215,7 +215,7 @@ "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==", "dev": true, "requires": { - "acorn": "5.7.3" + "acorn": "^5.0.0" } }, "ajv": { @@ -224,10 +224,10 @@ "integrity": "sha512-hOs7GfvI6tUI1LfZddH82ky6mOMyTuY0mk7kE2pWpmhhUSkumzaTO5vbVwij39MdwPQWCV4Zv57Eo06NtL/GVA==", "dev": true, "requires": { - "fast-deep-equal": "2.0.1", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.4.1", - "uri-js": "4.2.2" + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.1" } }, "ajv-errors": { @@ -264,8 +264,8 @@ "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=", "dev": true, "requires": { - "micromatch": "3.1.10", - "normalize-path": "2.1.1" + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" } }, "aproba": { @@ -280,7 +280,7 @@ "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=", "dev": true, "requires": { - "sprintf-js": "1.0.3" + "sprintf-js": "~1.0.2" } }, "arr-diff": { @@ -318,9 +318,9 @@ "integrity": "sha1-ucK/WAXx5kqt7tbfOiv6+1pz9aA=", "dev": true, "requires": { - "bn.js": "4.11.8", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, "assert": { @@ -373,12 +373,12 @@ "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", "dev": true, "requires": { - "browserslist": "1.7.7", - "caniuse-db": "1.0.30000864", - "normalize-range": "0.1.2", - "num2fraction": "1.2.2", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "browserslist": "^1.7.6", + "caniuse-db": "^1.0.30000634", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^5.2.16", + "postcss-value-parser": "^3.2.3" } }, "babel-cli": { @@ -387,21 +387,21 @@ "integrity": "sha1-UCq1SHTX24itALiHoGODzgPQAvE=", "dev": true, "requires": { - "babel-core": "6.26.3", - "babel-polyfill": "6.26.0", - "babel-register": "6.26.0", - "babel-runtime": "6.26.0", - "chokidar": "1.7.0", - "commander": "2.16.0", - "convert-source-map": "1.5.1", - "fs-readdir-recursive": "1.1.0", - "glob": "7.1.2", - "lodash": "4.17.10", - "output-file-sync": "1.1.2", - "path-is-absolute": "1.0.1", - "slash": "1.0.0", - "source-map": "0.5.7", - "v8flags": "2.1.1" + "babel-core": "^6.26.0", + "babel-polyfill": "^6.26.0", + "babel-register": "^6.26.0", + "babel-runtime": "^6.26.0", + "chokidar": "^1.6.1", + "commander": "^2.11.0", + "convert-source-map": "^1.5.0", + "fs-readdir-recursive": "^1.0.0", + "glob": "^7.1.2", + "lodash": "^4.17.4", + "output-file-sync": "^1.1.2", + "path-is-absolute": "^1.0.1", + "slash": "^1.0.0", + "source-map": "^0.5.6", + "v8flags": "^2.1.1" }, "dependencies": { "anymatch": { @@ -411,8 +411,8 @@ "dev": true, "optional": true, "requires": { - "micromatch": "2.3.11", - "normalize-path": "2.1.1" + "micromatch": "^2.1.5", + "normalize-path": "^2.0.0" } }, "arr-diff": { @@ -422,7 +422,7 @@ "dev": true, "optional": true, "requires": { - "arr-flatten": "1.1.0" + "arr-flatten": "^1.0.1" } }, "array-unique": { @@ -439,9 +439,9 @@ "dev": true, "optional": true, "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.2" + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" } }, "chokidar": { @@ -451,15 +451,15 @@ "dev": true, "optional": true, "requires": { - "anymatch": "1.3.2", - "async-each": "1.0.1", - "fsevents": "1.2.4", - "glob-parent": "2.0.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "2.0.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.1.0" + "anymatch": "^1.3.0", + "async-each": "^1.0.0", + "fsevents": "^1.0.0", + "glob-parent": "^2.0.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^2.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0" } }, "expand-brackets": { @@ -469,7 +469,7 @@ "dev": true, "optional": true, "requires": { - "is-posix-bracket": "0.1.1" + "is-posix-bracket": "^0.1.0" } }, "extglob": { @@ -479,7 +479,7 @@ "dev": true, "optional": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } }, "glob-parent": { @@ -489,7 +489,7 @@ "dev": true, "optional": true, "requires": { - "is-glob": "2.0.1" + "is-glob": "^2.0.0" } }, "is-extglob": { @@ -504,7 +504,7 @@ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } }, "micromatch": { @@ -514,19 +514,19 @@ "dev": true, "optional": true, "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.4" + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" } } } @@ -537,9 +537,9 @@ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", "dev": true, "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" } }, "babel-core": { @@ -548,25 +548,25 @@ "integrity": "sha1-suLwnjQtDwyI4vAuBneUEl51wgc=", "dev": true, "requires": { - "babel-code-frame": "6.26.0", - "babel-generator": "6.26.1", - "babel-helpers": "6.24.1", - "babel-messages": "6.23.0", - "babel-register": "6.26.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "convert-source-map": "1.5.1", - "debug": "2.6.9", - "json5": "0.5.1", - "lodash": "4.17.10", - "minimatch": "3.0.4", - "path-is-absolute": "1.0.1", - "private": "0.1.8", - "slash": "1.0.0", - "source-map": "0.5.7" + "babel-code-frame": "^6.26.0", + "babel-generator": "^6.26.0", + "babel-helpers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-register": "^6.26.0", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "convert-source-map": "^1.5.1", + "debug": "^2.6.9", + "json5": "^0.5.1", + "lodash": "^4.17.4", + "minimatch": "^3.0.4", + "path-is-absolute": "^1.0.1", + "private": "^0.1.8", + "slash": "^1.0.0", + "source-map": "^0.5.7" } }, "babel-generator": { @@ -575,14 +575,14 @@ "integrity": "sha1-GERAjTuPDTWkBOp6wYDwh6YBvZA=", "dev": true, "requires": { - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "detect-indent": "4.0.0", - "jsesc": "1.3.0", - "lodash": "4.17.10", - "source-map": "0.5.7", - "trim-right": "1.0.1" + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "detect-indent": "^4.0.0", + "jsesc": "^1.3.0", + "lodash": "^4.17.4", + "source-map": "^0.5.7", + "trim-right": "^1.0.1" } }, "babel-helper-bindify-decorators": { @@ -591,9 +591,9 @@ "integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-builder-binary-assignment-operator-visitor": { @@ -602,9 +602,9 @@ "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", "dev": true, "requires": { - "babel-helper-explode-assignable-expression": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-explode-assignable-expression": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-helper-builder-react-jsx": { @@ -613,9 +613,9 @@ "integrity": "sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "esutils": "2.0.2" + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "esutils": "^2.0.2" } }, "babel-helper-call-delegate": { @@ -624,10 +624,10 @@ "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", "dev": true, "requires": { - "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-define-map": { @@ -636,10 +636,10 @@ "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", "dev": true, "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.10" + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" } }, "babel-helper-explode-assignable-expression": { @@ -648,9 +648,9 @@ "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-explode-class": { @@ -659,10 +659,10 @@ "integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=", "dev": true, "requires": { - "babel-helper-bindify-decorators": "6.24.1", - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-bindify-decorators": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-function-name": { @@ -671,11 +671,11 @@ "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", "dev": true, "requires": { - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-get-function-arity": { @@ -684,8 +684,8 @@ "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-helper-hoist-variables": { @@ -694,8 +694,8 @@ "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-helper-optimise-call-expression": { @@ -704,8 +704,8 @@ "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-helper-regex": { @@ -714,9 +714,9 @@ "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.10" + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" } }, "babel-helper-remap-async-to-generator": { @@ -725,11 +725,11 @@ "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", "dev": true, "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-replace-supers": { @@ -738,12 +738,12 @@ "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", "dev": true, "requires": { - "babel-helper-optimise-call-expression": "6.24.1", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helpers": { @@ -752,8 +752,8 @@ "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-loader": { @@ -762,9 +762,9 @@ "integrity": "sha512-/hbyEvPzBJuGpk9o80R0ZyTej6heEOr59GoEUtn8qFKbnx4cJm9FWES6J/iv644sYgrtVw9JJQkjaLW/bqb5gw==", "dev": true, "requires": { - "find-cache-dir": "1.0.0", - "loader-utils": "1.1.0", - "mkdirp": "0.5.1" + "find-cache-dir": "^1.0.0", + "loader-utils": "^1.0.2", + "mkdirp": "^0.5.1" } }, "babel-messages": { @@ -773,7 +773,7 @@ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-check-es2015-constants": { @@ -782,7 +782,7 @@ "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-syntax-async-functions": { @@ -875,9 +875,9 @@ "integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=", "dev": true, "requires": { - "babel-helper-remap-async-to-generator": "6.24.1", - "babel-plugin-syntax-async-generators": "6.13.0", - "babel-runtime": "6.26.0" + "babel-helper-remap-async-to-generator": "^6.24.1", + "babel-plugin-syntax-async-generators": "^6.5.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-async-to-generator": { @@ -886,9 +886,9 @@ "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", "dev": true, "requires": { - "babel-helper-remap-async-to-generator": "6.24.1", - "babel-plugin-syntax-async-functions": "6.13.0", - "babel-runtime": "6.26.0" + "babel-helper-remap-async-to-generator": "^6.24.1", + "babel-plugin-syntax-async-functions": "^6.8.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-class-constructor-call": { @@ -897,9 +897,9 @@ "integrity": "sha1-gNwoVQWsBn3LjWxl4vbxGrd2Xvk=", "dev": true, "requires": { - "babel-plugin-syntax-class-constructor-call": "6.18.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-plugin-syntax-class-constructor-call": "^6.18.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-class-properties": { @@ -908,10 +908,10 @@ "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=", "dev": true, "requires": { - "babel-helper-function-name": "6.24.1", - "babel-plugin-syntax-class-properties": "6.13.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-helper-function-name": "^6.24.1", + "babel-plugin-syntax-class-properties": "^6.8.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-decorators": { @@ -920,11 +920,11 @@ "integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=", "dev": true, "requires": { - "babel-helper-explode-class": "6.24.1", - "babel-plugin-syntax-decorators": "6.13.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-explode-class": "^6.24.1", + "babel-plugin-syntax-decorators": "^6.13.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-do-expressions": { @@ -933,8 +933,8 @@ "integrity": "sha1-KMyvkoEtlJws0SgfaQyP3EaK6bs=", "dev": true, "requires": { - "babel-plugin-syntax-do-expressions": "6.13.0", - "babel-runtime": "6.26.0" + "babel-plugin-syntax-do-expressions": "^6.8.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-arrow-functions": { @@ -943,7 +943,7 @@ "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-block-scoped-functions": { @@ -952,7 +952,7 @@ "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-block-scoping": { @@ -961,11 +961,11 @@ "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.10" + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" } }, "babel-plugin-transform-es2015-classes": { @@ -974,15 +974,15 @@ "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", "dev": true, "requires": { - "babel-helper-define-map": "6.26.0", - "babel-helper-function-name": "6.24.1", - "babel-helper-optimise-call-expression": "6.24.1", - "babel-helper-replace-supers": "6.24.1", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-define-map": "^6.24.1", + "babel-helper-function-name": "^6.24.1", + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-helper-replace-supers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-computed-properties": { @@ -991,8 +991,8 @@ "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-es2015-destructuring": { @@ -1001,7 +1001,7 @@ "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-duplicate-keys": { @@ -1010,8 +1010,8 @@ "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-for-of": { @@ -1020,7 +1020,7 @@ "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-function-name": { @@ -1029,9 +1029,9 @@ "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", "dev": true, "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-literals": { @@ -1040,7 +1040,7 @@ "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-modules-amd": { @@ -1049,9 +1049,9 @@ "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", "dev": true, "requires": { - "babel-plugin-transform-es2015-modules-commonjs": "6.26.2", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-es2015-modules-commonjs": { @@ -1060,10 +1060,10 @@ "integrity": "sha1-WKeThjqefKhwvcWogRF/+sJ9tvM=", "dev": true, "requires": { - "babel-plugin-transform-strict-mode": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-types": "6.26.0" + "babel-plugin-transform-strict-mode": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-types": "^6.26.0" } }, "babel-plugin-transform-es2015-modules-systemjs": { @@ -1072,9 +1072,9 @@ "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", "dev": true, "requires": { - "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-es2015-modules-umd": { @@ -1083,9 +1083,9 @@ "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", "dev": true, "requires": { - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-plugin-transform-es2015-modules-amd": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-es2015-object-super": { @@ -1094,8 +1094,8 @@ "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", "dev": true, "requires": { - "babel-helper-replace-supers": "6.24.1", - "babel-runtime": "6.26.0" + "babel-helper-replace-supers": "^6.24.1", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-parameters": { @@ -1104,12 +1104,12 @@ "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", "dev": true, "requires": { - "babel-helper-call-delegate": "6.24.1", - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-call-delegate": "^6.24.1", + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-shorthand-properties": { @@ -1118,8 +1118,8 @@ "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-spread": { @@ -1128,7 +1128,7 @@ "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-sticky-regex": { @@ -1137,9 +1137,9 @@ "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", "dev": true, "requires": { - "babel-helper-regex": "6.26.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-template-literals": { @@ -1148,7 +1148,7 @@ "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-typeof-symbol": { @@ -1157,7 +1157,7 @@ "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-unicode-regex": { @@ -1166,9 +1166,9 @@ "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", "dev": true, "requires": { - "babel-helper-regex": "6.26.0", - "babel-runtime": "6.26.0", - "regexpu-core": "2.0.0" + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "regexpu-core": "^2.0.0" } }, "babel-plugin-transform-exponentiation-operator": { @@ -1177,9 +1177,9 @@ "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", "dev": true, "requires": { - "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1", - "babel-plugin-syntax-exponentiation-operator": "6.13.0", - "babel-runtime": "6.26.0" + "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1", + "babel-plugin-syntax-exponentiation-operator": "^6.8.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-export-extensions": { @@ -1188,8 +1188,8 @@ "integrity": "sha1-U3OLR+deghhYnuqUbLvTkQm75lM=", "dev": true, "requires": { - "babel-plugin-syntax-export-extensions": "6.13.0", - "babel-runtime": "6.26.0" + "babel-plugin-syntax-export-extensions": "^6.8.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-flow-strip-types": { @@ -1198,8 +1198,8 @@ "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=", "dev": true, "requires": { - "babel-plugin-syntax-flow": "6.18.0", - "babel-runtime": "6.26.0" + "babel-plugin-syntax-flow": "^6.18.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-function-bind": { @@ -1208,8 +1208,8 @@ "integrity": "sha1-xvuOlqwpajELjPjqQBRiQH3fapc=", "dev": true, "requires": { - "babel-plugin-syntax-function-bind": "6.13.0", - "babel-runtime": "6.26.0" + "babel-plugin-syntax-function-bind": "^6.8.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-object-rest-spread": { @@ -1218,8 +1218,8 @@ "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", "dev": true, "requires": { - "babel-plugin-syntax-object-rest-spread": "6.13.0", - "babel-runtime": "6.26.0" + "babel-plugin-syntax-object-rest-spread": "^6.8.0", + "babel-runtime": "^6.26.0" } }, "babel-plugin-transform-react-display-name": { @@ -1228,7 +1228,7 @@ "integrity": "sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-react-jsx": { @@ -1237,9 +1237,9 @@ "integrity": "sha1-hAoCjn30YN/DotKfDA2R9jduZqM=", "dev": true, "requires": { - "babel-helper-builder-react-jsx": "6.26.0", - "babel-plugin-syntax-jsx": "6.18.0", - "babel-runtime": "6.26.0" + "babel-helper-builder-react-jsx": "^6.24.1", + "babel-plugin-syntax-jsx": "^6.8.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-react-jsx-self": { @@ -1248,8 +1248,8 @@ "integrity": "sha1-322AqdomEqEh5t3XVYvL7PBuY24=", "dev": true, "requires": { - "babel-plugin-syntax-jsx": "6.18.0", - "babel-runtime": "6.26.0" + "babel-plugin-syntax-jsx": "^6.8.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-react-jsx-source": { @@ -1258,8 +1258,8 @@ "integrity": "sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY=", "dev": true, "requires": { - "babel-plugin-syntax-jsx": "6.18.0", - "babel-runtime": "6.26.0" + "babel-plugin-syntax-jsx": "^6.8.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-regenerator": { @@ -1268,7 +1268,7 @@ "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", "dev": true, "requires": { - "regenerator-transform": "0.10.1" + "regenerator-transform": "^0.10.0" } }, "babel-plugin-transform-strict-mode": { @@ -1277,8 +1277,8 @@ "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-polyfill": { @@ -1287,9 +1287,9 @@ "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "core-js": "2.5.7", - "regenerator-runtime": "0.10.5" + "babel-runtime": "^6.26.0", + "core-js": "^2.5.0", + "regenerator-runtime": "^0.10.5" }, "dependencies": { "core-js": { @@ -1312,30 +1312,30 @@ "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=", "dev": true, "requires": { - "babel-plugin-check-es2015-constants": "6.22.0", - "babel-plugin-transform-es2015-arrow-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoping": "6.26.0", - "babel-plugin-transform-es2015-classes": "6.24.1", - "babel-plugin-transform-es2015-computed-properties": "6.24.1", - "babel-plugin-transform-es2015-destructuring": "6.23.0", - "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", - "babel-plugin-transform-es2015-for-of": "6.23.0", - "babel-plugin-transform-es2015-function-name": "6.24.1", - "babel-plugin-transform-es2015-literals": "6.22.0", - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-plugin-transform-es2015-modules-commonjs": "6.26.2", - "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", - "babel-plugin-transform-es2015-modules-umd": "6.24.1", - "babel-plugin-transform-es2015-object-super": "6.24.1", - "babel-plugin-transform-es2015-parameters": "6.24.1", - "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", - "babel-plugin-transform-es2015-spread": "6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "6.24.1", - "babel-plugin-transform-es2015-template-literals": "6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", - "babel-plugin-transform-es2015-unicode-regex": "6.24.1", - "babel-plugin-transform-regenerator": "6.26.0" + "babel-plugin-check-es2015-constants": "^6.22.0", + "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoping": "^6.24.1", + "babel-plugin-transform-es2015-classes": "^6.24.1", + "babel-plugin-transform-es2015-computed-properties": "^6.24.1", + "babel-plugin-transform-es2015-destructuring": "^6.22.0", + "babel-plugin-transform-es2015-duplicate-keys": "^6.24.1", + "babel-plugin-transform-es2015-for-of": "^6.22.0", + "babel-plugin-transform-es2015-function-name": "^6.24.1", + "babel-plugin-transform-es2015-literals": "^6.22.0", + "babel-plugin-transform-es2015-modules-amd": "^6.24.1", + "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", + "babel-plugin-transform-es2015-modules-systemjs": "^6.24.1", + "babel-plugin-transform-es2015-modules-umd": "^6.24.1", + "babel-plugin-transform-es2015-object-super": "^6.24.1", + "babel-plugin-transform-es2015-parameters": "^6.24.1", + "babel-plugin-transform-es2015-shorthand-properties": "^6.24.1", + "babel-plugin-transform-es2015-spread": "^6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "^6.24.1", + "babel-plugin-transform-es2015-template-literals": "^6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "^6.22.0", + "babel-plugin-transform-es2015-unicode-regex": "^6.24.1", + "babel-plugin-transform-regenerator": "^6.24.1" } }, "babel-preset-flow": { @@ -1344,7 +1344,7 @@ "integrity": "sha1-5xIYiHCFrpoktb5Baa/7WZgWxJ0=", "dev": true, "requires": { - "babel-plugin-transform-flow-strip-types": "6.22.0" + "babel-plugin-transform-flow-strip-types": "^6.22.0" } }, "babel-preset-react": { @@ -1353,12 +1353,12 @@ "integrity": "sha1-umnfrqRfw+xjm2pOzqbhdwLJE4A=", "dev": true, "requires": { - "babel-plugin-syntax-jsx": "6.18.0", - "babel-plugin-transform-react-display-name": "6.25.0", - "babel-plugin-transform-react-jsx": "6.24.1", - "babel-plugin-transform-react-jsx-self": "6.22.0", - "babel-plugin-transform-react-jsx-source": "6.22.0", - "babel-preset-flow": "6.23.0" + "babel-plugin-syntax-jsx": "^6.3.13", + "babel-plugin-transform-react-display-name": "^6.23.0", + "babel-plugin-transform-react-jsx": "^6.24.1", + "babel-plugin-transform-react-jsx-self": "^6.22.0", + "babel-plugin-transform-react-jsx-source": "^6.22.0", + "babel-preset-flow": "^6.23.0" } }, "babel-preset-stage-0": { @@ -1367,9 +1367,9 @@ "integrity": "sha1-VkLRUEL5E4TX5a+LyIsduVsDnmo=", "dev": true, "requires": { - "babel-plugin-transform-do-expressions": "6.22.0", - "babel-plugin-transform-function-bind": "6.22.0", - "babel-preset-stage-1": "6.24.1" + "babel-plugin-transform-do-expressions": "^6.22.0", + "babel-plugin-transform-function-bind": "^6.22.0", + "babel-preset-stage-1": "^6.24.1" } }, "babel-preset-stage-1": { @@ -1378,9 +1378,9 @@ "integrity": "sha1-dpLNfc1oSZB+auSgqFWJz7niv7A=", "dev": true, "requires": { - "babel-plugin-transform-class-constructor-call": "6.24.1", - "babel-plugin-transform-export-extensions": "6.22.0", - "babel-preset-stage-2": "6.24.1" + "babel-plugin-transform-class-constructor-call": "^6.24.1", + "babel-plugin-transform-export-extensions": "^6.22.0", + "babel-preset-stage-2": "^6.24.1" } }, "babel-preset-stage-2": { @@ -1389,10 +1389,10 @@ "integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=", "dev": true, "requires": { - "babel-plugin-syntax-dynamic-import": "6.18.0", - "babel-plugin-transform-class-properties": "6.24.1", - "babel-plugin-transform-decorators": "6.24.1", - "babel-preset-stage-3": "6.24.1" + "babel-plugin-syntax-dynamic-import": "^6.18.0", + "babel-plugin-transform-class-properties": "^6.24.1", + "babel-plugin-transform-decorators": "^6.24.1", + "babel-preset-stage-3": "^6.24.1" } }, "babel-preset-stage-3": { @@ -1401,11 +1401,11 @@ "integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=", "dev": true, "requires": { - "babel-plugin-syntax-trailing-function-commas": "6.22.0", - "babel-plugin-transform-async-generator-functions": "6.24.1", - "babel-plugin-transform-async-to-generator": "6.24.1", - "babel-plugin-transform-exponentiation-operator": "6.24.1", - "babel-plugin-transform-object-rest-spread": "6.26.0" + "babel-plugin-syntax-trailing-function-commas": "^6.22.0", + "babel-plugin-transform-async-generator-functions": "^6.24.1", + "babel-plugin-transform-async-to-generator": "^6.24.1", + "babel-plugin-transform-exponentiation-operator": "^6.24.1", + "babel-plugin-transform-object-rest-spread": "^6.22.0" } }, "babel-register": { @@ -1414,13 +1414,13 @@ "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", "dev": true, "requires": { - "babel-core": "6.26.3", - "babel-runtime": "6.26.0", - "core-js": "2.5.7", - "home-or-tmp": "2.0.0", - "lodash": "4.17.10", - "mkdirp": "0.5.1", - "source-map-support": "0.4.18" + "babel-core": "^6.26.0", + "babel-runtime": "^6.26.0", + "core-js": "^2.5.0", + "home-or-tmp": "^2.0.0", + "lodash": "^4.17.4", + "mkdirp": "^0.5.1", + "source-map-support": "^0.4.15" }, "dependencies": { "core-js": { @@ -1437,8 +1437,8 @@ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "dev": true, "requires": { - "core-js": "2.5.7", - "regenerator-runtime": "0.11.1" + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" }, "dependencies": { "core-js": { @@ -1455,11 +1455,11 @@ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "lodash": "4.17.10" + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" } }, "babel-traverse": { @@ -1468,15 +1468,15 @@ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", "dev": true, "requires": { - "babel-code-frame": "6.26.0", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "debug": "2.6.9", - "globals": "9.18.0", - "invariant": "2.2.4", - "lodash": "4.17.10" + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" } }, "babel-types": { @@ -1485,10 +1485,10 @@ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "esutils": "2.0.2", - "lodash": "4.17.10", - "to-fast-properties": "1.0.3" + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" } }, "babylon": { @@ -1508,13 +1508,13 @@ "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=", "dev": true, "requires": { - "cache-base": "1.0.1", - "class-utils": "0.3.6", - "component-emitter": "1.2.1", - "define-property": "1.0.0", - "isobject": "3.0.1", - "mixin-deep": "1.3.1", - "pascalcase": "0.1.1" + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" }, "dependencies": { "define-property": { @@ -1523,7 +1523,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "is-accessor-descriptor": { @@ -1532,7 +1532,7 @@ "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -1541,7 +1541,7 @@ "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -1550,9 +1550,9 @@ "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, "kind-of": { @@ -1593,18 +1593,12 @@ "integrity": "sha1-LN4J617jQfSEdGuwMJsyU7GxRC8=", "dev": true }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true - }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=", "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -1614,16 +1608,16 @@ "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", "dev": true, "requires": { - "arr-flatten": "1.1.0", - "array-unique": "0.3.2", - "extend-shallow": "2.0.1", - "fill-range": "4.0.0", - "isobject": "3.0.1", - "repeat-element": "1.1.2", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" }, "dependencies": { "extend-shallow": { @@ -1632,7 +1626,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -1663,9 +1657,9 @@ "integrity": "sha1-jWR0wbhwv9q807z8wZNKEOlPFfA=", "dev": true, "requires": { - "browserify-aes": "1.2.0", - "browserify-des": "1.0.2", - "evp_bytestokey": "1.0.3" + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" } }, "browserify-des": { @@ -1674,10 +1668,10 @@ "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "des.js": "1.0.0", - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "browserify-rsa": { @@ -1696,13 +1690,13 @@ "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", "dev": true, "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "elliptic": "6.4.1", - "inherits": "2.0.3", - "parse-asn1": "5.1.1" + "bn.js": "^4.1.1", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.2", + "elliptic": "^6.0.0", + "inherits": "^2.0.1", + "parse-asn1": "^5.0.0" } }, "browserify-zlib": { @@ -1711,7 +1705,7 @@ "integrity": "sha1-KGlFnZqjviRf6P4sofRuLn9U1z8=", "dev": true, "requires": { - "pako": "1.0.7" + "pako": "~1.0.5" } }, "browserslist": { @@ -1720,8 +1714,8 @@ "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", "dev": true, "requires": { - "caniuse-db": "1.0.30000864", - "electron-to-chromium": "1.3.51" + "caniuse-db": "^1.0.30000639", + "electron-to-chromium": "^1.2.7" } }, "buffer": { @@ -1759,20 +1753,20 @@ "integrity": "sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg==", "dev": true, "requires": { - "bluebird": "3.5.3", - "chownr": "1.1.1", - "figgy-pudding": "3.5.1", - "glob": "7.1.3", - "graceful-fs": "4.1.15", - "lru-cache": "5.1.1", - "mississippi": "3.0.0", - "mkdirp": "0.5.1", - "move-concurrently": "1.0.1", - "promise-inflight": "1.0.1", - "rimraf": "2.6.3", - "ssri": "6.0.1", - "unique-filename": "1.1.1", - "y18n": "4.0.0" + "bluebird": "^3.5.3", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.3", + "graceful-fs": "^4.1.15", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.2", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" }, "dependencies": { "glob": { @@ -1781,12 +1775,12 @@ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "graceful-fs": { @@ -1803,25 +1797,15 @@ "integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=", "dev": true, "requires": { - "collection-visit": "1.0.0", - "component-emitter": "1.2.1", - "get-value": "2.0.6", - "has-value": "1.0.0", - "isobject": "3.0.1", - "set-value": "2.0.0", - "to-object-path": "0.3.0", - "union-value": "1.0.0", - "unset-value": "1.0.0" - } - }, - "camel-case": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", - "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", - "dev": true, - "requires": { - "no-case": "2.3.2", - "upper-case": "1.1.3" + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" } }, "camelcase": { @@ -1836,10 +1820,10 @@ "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=", "dev": true, "requires": { - "browserslist": "1.7.7", - "caniuse-db": "1.0.30000864", - "lodash.memoize": "4.1.2", - "lodash.uniq": "4.5.0" + "browserslist": "^1.3.6", + "caniuse-db": "^1.0.30000529", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" } }, "caniuse-db": { @@ -1853,11 +1837,11 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" }, "dependencies": { "supports-color": { @@ -1873,19 +1857,19 @@ "integrity": "sha1-NW/04rDo5D4yLRijckYLvPOszSY=", "dev": true, "requires": { - "anymatch": "2.0.0", - "async-each": "1.0.1", - "braces": "2.3.2", - "fsevents": "1.2.4", - "glob-parent": "3.1.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "4.0.0", - "lodash.debounce": "4.0.8", - "normalize-path": "2.1.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.1.0", - "upath": "1.1.0" + "anymatch": "^2.0.0", + "async-each": "^1.0.0", + "braces": "^2.3.0", + "fsevents": "^1.2.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "lodash.debounce": "^4.0.8", + "normalize-path": "^2.1.1", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0", + "upath": "^1.0.5" } }, "chownr": { @@ -1900,13 +1884,13 @@ "integrity": "sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==", "dev": true, "requires": { - "tslib": "1.9.3" + "tslib": "^1.9.0" } }, "chunks-2-json-webpack-plugin": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/chunks-2-json-webpack-plugin/-/chunks-2-json-webpack-plugin-0.0.3.tgz", - "integrity": "sha512-oD5NQfdd877TZsKnjrlqg64iCyV3nkwjLT3EAzHnhf94R4HO32UmhyoTYcb4EHf+5bLsyNlbaVfz1ArHlcxL6g==", + "integrity": "sha1-LyaLBpZ2tkK0EhgEvrBmQPMaBO0=", "dev": true }, "cipher-base": { @@ -1915,8 +1899,8 @@ "integrity": "sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94=", "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "clap": { @@ -1925,7 +1909,7 @@ "integrity": "sha1-TzZ0WzIAhJJVf0ZBLWbVDLmbzlE=", "dev": true, "requires": { - "chalk": "1.1.3" + "chalk": "^1.1.3" } }, "class-utils": { @@ -1934,10 +1918,10 @@ "integrity": "sha1-+TNprouafOAv1B+q0MqDAzGQxGM=", "dev": true, "requires": { - "arr-union": "3.1.0", - "define-property": "0.2.5", - "isobject": "3.0.1", - "static-extend": "0.1.2" + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" }, "dependencies": { "define-property": { @@ -1946,37 +1930,20 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } } } }, - "clean-css": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz", - "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==", - "dev": true, - "requires": { - "source-map": "0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, "cliui": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", "dev": true, "requires": { - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "wrap-ansi": "2.1.0" + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" }, "dependencies": { "ansi-regex": { @@ -1991,7 +1958,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } } } @@ -2008,7 +1975,7 @@ "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=", "dev": true, "requires": { - "q": "1.5.1" + "q": "^1.1.2" } }, "code-point-at": { @@ -2023,8 +1990,8 @@ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dev": true, "requires": { - "map-visit": "1.0.0", - "object-visit": "1.0.1" + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" } }, "color": { @@ -2033,9 +2000,9 @@ "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", "dev": true, "requires": { - "clone": "1.0.4", - "color-convert": "1.9.2", - "color-string": "0.3.0" + "clone": "^1.0.2", + "color-convert": "^1.3.0", + "color-string": "^0.3.0" } }, "color-convert": { @@ -2059,7 +2026,7 @@ "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=", "dev": true, "requires": { - "color-name": "1.1.1" + "color-name": "^1.0.0" } }, "colormin": { @@ -2068,9 +2035,9 @@ "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=", "dev": true, "requires": { - "color": "0.11.4", + "color": "^0.11.0", "css-color-names": "0.0.4", - "has": "1.0.3" + "has": "^1.0.1" } }, "colors": { @@ -2108,10 +2075,10 @@ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "requires": { - "buffer-from": "1.1.1", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "typedarray": "0.0.6" + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" } }, "console-browserify": { @@ -2120,7 +2087,7 @@ "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", "dev": true, "requires": { - "date-now": "0.1.4" + "date-now": "^0.1.4" } }, "constants-browserify": { @@ -2141,12 +2108,12 @@ "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", "dev": true, "requires": { - "aproba": "1.2.0", - "fs-write-stream-atomic": "1.0.10", - "iferr": "0.1.5", - "mkdirp": "0.5.1", - "rimraf": "2.6.3", - "run-queue": "1.0.3" + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" } }, "copy-descriptor": { @@ -2172,8 +2139,8 @@ "integrity": "sha1-yREbbzMEXEaX8UR4f5JUzcd8Rf8=", "dev": true, "requires": { - "bn.js": "4.11.8", - "elliptic": "6.4.1" + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" } }, "create-hash": { @@ -2208,8 +2175,8 @@ "resolved": "https://registry.npmjs.org/create-react-context/-/create-react-context-0.2.3.tgz", "integrity": "sha1-nsFAppFKIu8EuLCbd3HeiVZ8tvM=", "requires": { - "fbjs": "0.8.17", - "gud": "1.0.0" + "fbjs": "^0.8.0", + "gud": "^1.0.0" } }, "cross-spawn": { @@ -2218,11 +2185,11 @@ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { - "nice-try": "1.0.5", - "path-key": "2.0.1", - "semver": "5.6.0", - "shebang-command": "1.2.0", - "which": "1.3.1" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, "crypto-browserify": { @@ -2231,17 +2198,17 @@ "integrity": "sha1-OWz58xN/A+S45TLFj2mCVOAPgOw=", "dev": true, "requires": { - "browserify-cipher": "1.0.1", - "browserify-sign": "4.0.4", - "create-ecdh": "4.0.3", - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "diffie-hellman": "5.0.3", - "inherits": "2.0.3", - "pbkdf2": "3.0.17", - "public-encrypt": "4.0.3", - "randombytes": "2.0.6", - "randomfill": "1.0.4" + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" } }, "css-color-names": { @@ -2256,32 +2223,20 @@ "integrity": "sha1-w/mGSnAL4nEbtaJGKyOJsaOS2rc=", "dev": true, "requires": { - "babel-code-frame": "6.26.0", - "css-selector-tokenizer": "0.7.0", - "cssnano": "3.10.0", - "icss-utils": "2.1.0", - "loader-utils": "1.1.0", - "lodash.camelcase": "4.3.0", - "object-assign": "4.1.1", - "postcss": "5.2.18", - "postcss-modules-extract-imports": "1.2.0", - "postcss-modules-local-by-default": "1.2.0", - "postcss-modules-scope": "1.1.0", - "postcss-modules-values": "1.3.0", - "postcss-value-parser": "3.3.0", - "source-list-map": "2.0.0" - } - }, - "css-select": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", - "dev": true, - "requires": { - "boolbase": "1.0.0", - "css-what": "2.1.2", - "domutils": "1.5.1", - "nth-check": "1.0.2" + "babel-code-frame": "^6.26.0", + "css-selector-tokenizer": "^0.7.0", + "cssnano": "^3.10.0", + "icss-utils": "^2.1.0", + "loader-utils": "^1.0.2", + "lodash.camelcase": "^4.3.0", + "object-assign": "^4.1.1", + "postcss": "^5.0.6", + "postcss-modules-extract-imports": "^1.2.0", + "postcss-modules-local-by-default": "^1.2.0", + "postcss-modules-scope": "^1.1.0", + "postcss-modules-values": "^1.3.0", + "postcss-value-parser": "^3.3.0", + "source-list-map": "^2.0.0" } }, "css-selector-tokenizer": { @@ -2290,9 +2245,9 @@ "integrity": "sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=", "dev": true, "requires": { - "cssesc": "0.1.0", - "fastparse": "1.1.1", - "regexpu-core": "1.0.0" + "cssesc": "^0.1.0", + "fastparse": "^1.1.1", + "regexpu-core": "^1.0.0" }, "dependencies": { "regexpu-core": { @@ -2301,19 +2256,13 @@ "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", "dev": true, "requires": { - "regenerate": "1.4.0", - "regjsgen": "0.2.0", - "regjsparser": "0.1.5" + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" } } } }, - "css-what": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.2.tgz", - "integrity": "sha512-wan8dMWQ0GUeF7DGEPVjhHemVW/vy6xUYmFzRY8RYqgA0JtXC9rJmbScBjqSu6dg9q0lwPQy6ZAmJVr3PPTvqQ==", - "dev": true - }, "cssesc": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", @@ -2326,38 +2275,38 @@ "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=", "dev": true, "requires": { - "autoprefixer": "6.7.7", - "decamelize": "1.2.0", - "defined": "1.0.0", - "has": "1.0.3", - "object-assign": "4.1.1", - "postcss": "5.2.18", - "postcss-calc": "5.3.1", - "postcss-colormin": "2.2.2", - "postcss-convert-values": "2.6.1", - "postcss-discard-comments": "2.0.4", - "postcss-discard-duplicates": "2.1.0", - "postcss-discard-empty": "2.1.0", - "postcss-discard-overridden": "0.1.1", - "postcss-discard-unused": "2.2.3", - "postcss-filter-plugins": "2.0.3", - "postcss-merge-idents": "2.1.7", - "postcss-merge-longhand": "2.0.2", - "postcss-merge-rules": "2.1.2", - "postcss-minify-font-values": "1.0.5", - "postcss-minify-gradients": "1.0.5", - "postcss-minify-params": "1.2.2", - "postcss-minify-selectors": "2.1.1", - "postcss-normalize-charset": "1.1.1", - "postcss-normalize-url": "3.0.8", - "postcss-ordered-values": "2.2.3", - "postcss-reduce-idents": "2.4.0", - "postcss-reduce-initial": "1.0.1", - "postcss-reduce-transforms": "1.0.4", - "postcss-svgo": "2.1.6", - "postcss-unique-selectors": "2.0.2", - "postcss-value-parser": "3.3.0", - "postcss-zindex": "2.2.0" + "autoprefixer": "^6.3.1", + "decamelize": "^1.1.2", + "defined": "^1.0.0", + "has": "^1.0.1", + "object-assign": "^4.0.1", + "postcss": "^5.0.14", + "postcss-calc": "^5.2.0", + "postcss-colormin": "^2.1.8", + "postcss-convert-values": "^2.3.4", + "postcss-discard-comments": "^2.0.4", + "postcss-discard-duplicates": "^2.0.1", + "postcss-discard-empty": "^2.0.1", + "postcss-discard-overridden": "^0.1.1", + "postcss-discard-unused": "^2.2.1", + "postcss-filter-plugins": "^2.0.0", + "postcss-merge-idents": "^2.1.5", + "postcss-merge-longhand": "^2.0.1", + "postcss-merge-rules": "^2.0.3", + "postcss-minify-font-values": "^1.0.2", + "postcss-minify-gradients": "^1.0.1", + "postcss-minify-params": "^1.0.4", + "postcss-minify-selectors": "^2.0.4", + "postcss-normalize-charset": "^1.1.0", + "postcss-normalize-url": "^3.0.7", + "postcss-ordered-values": "^2.1.0", + "postcss-reduce-idents": "^2.2.2", + "postcss-reduce-initial": "^1.0.0", + "postcss-reduce-transforms": "^1.0.3", + "postcss-svgo": "^2.1.1", + "postcss-unique-selectors": "^2.0.2", + "postcss-value-parser": "^3.2.3", + "postcss-zindex": "^2.0.1" } }, "csso": { @@ -2366,8 +2315,8 @@ "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=", "dev": true, "requires": { - "clap": "1.2.3", - "source-map": "0.5.7" + "clap": "^1.0.9", + "source-map": "^0.5.3" } }, "cyclist": { @@ -2403,23 +2352,14 @@ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "dev": true }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "1.0.12" - } - }, "define-property": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", "integrity": "sha1-1Flono1lS6d+AqgX+HENcCyxbp0=", "dev": true, "requires": { - "is-descriptor": "1.0.2", - "isobject": "3.0.1" + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" }, "dependencies": { "is-accessor-descriptor": { @@ -2428,7 +2368,7 @@ "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -2437,7 +2377,7 @@ "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -2446,9 +2386,9 @@ "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, "kind-of": { @@ -2471,8 +2411,8 @@ "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", "dev": true, "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, "detect-indent": { @@ -2481,7 +2421,7 @@ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", "dev": true, "requires": { - "repeating": "2.0.1" + "repeating": "^2.0.0" } }, "diffie-hellman": { @@ -2495,74 +2435,22 @@ "randombytes": "2.0.6" } }, - "dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "dev": true, - "requires": { - "utila": "0.4.0" - } - }, - "dom-serializer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", - "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", - "dev": true, - "requires": { - "domelementtype": "1.1.3", - "entities": "1.1.2" - }, - "dependencies": { - "domelementtype": { - "version": "1.1.3", - "resolved": "http://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", - "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", - "dev": true - } - } - }, "domain-browser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", "integrity": "sha1-PTH1AZGmdJ3RN1p/Ui6CPULlTto=", "dev": true }, - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true - }, - "domhandler": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.1.0.tgz", - "integrity": "sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=", - "dev": true, - "requires": { - "domelementtype": "1.3.1" - } - }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "dev": true, - "requires": { - "dom-serializer": "0.1.0", - "domelementtype": "1.3.1" - } - }, "duplexify": { "version": "3.6.1", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.1.tgz", "integrity": "sha512-vM58DwdnKmty+FSPzT14K9JXb90H+j5emaR4KYbr2KTIz00WHGbWOe5ghQTx233ZCLZtrGDALzKwcjEtSt35mA==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "stream-shift": "1.0.0" + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" } }, "electron-to-chromium": { @@ -2577,13 +2465,13 @@ "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", "dev": true, "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0", - "hash.js": "1.1.7", - "hmac-drbg": "1.0.1", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" } }, "emojis-list": { @@ -2597,7 +2485,7 @@ "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", "requires": { - "iconv-lite": "0.4.23" + "iconv-lite": "~0.4.13" } }, "end-of-stream": { @@ -2606,7 +2494,7 @@ "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", "dev": true, "requires": { - "once": "1.4.0" + "once": "^1.4.0" } }, "enhanced-resolve": { @@ -2615,48 +2503,18 @@ "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "memory-fs": "0.4.1", - "tapable": "1.1.1" + "graceful-fs": "^4.1.2", + "memory-fs": "^0.4.0", + "tapable": "^1.0.0" } }, - "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", - "dev": true - }, "errno": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", "integrity": "sha1-RoTXF3mtOa8Xfj8AeZb3xnyFJhg=", "dev": true, "requires": { - "prr": "1.0.1" - } - }, - "es-abstract": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz", - "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", - "dev": true, - "requires": { - "es-to-primitive": "1.2.0", - "function-bind": "1.1.1", - "has": "1.0.3", - "is-callable": "1.1.4", - "is-regex": "1.0.4" - } - }, - "es-to-primitive": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", - "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", - "dev": true, - "requires": { - "is-callable": "1.1.4", - "is-date-object": "1.0.1", - "is-symbol": "1.0.2" + "prr": "~1.0.1" } }, "es6-set-and-map": { @@ -2676,8 +2534,8 @@ "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", "dev": true, "requires": { - "esrecurse": "4.2.1", - "estraverse": "4.2.0" + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" } }, "esprima": { @@ -2692,7 +2550,7 @@ "integrity": "sha1-AHo7n9vCs7uH5IeeoZyS/b05Qs8=", "dev": true, "requires": { - "estraverse": "4.2.0" + "estraverse": "^4.1.0" } }, "estraverse": { @@ -2719,8 +2577,8 @@ "integrity": "sha1-f8vbGY3HGVlDLv4ThCaE4FJaywI=", "dev": true, "requires": { - "md5.js": "1.3.5", - "safe-buffer": "5.1.2" + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" } }, "execa": { @@ -2729,13 +2587,13 @@ "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", "dev": true, "requires": { - "cross-spawn": "6.0.5", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" + "cross-spawn": "^6.0.0", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" } }, "expand-brackets": { @@ -2744,13 +2602,13 @@ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "requires": { - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "posix-character-classes": "0.1.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -2759,7 +2617,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -2768,7 +2626,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -2780,7 +2638,7 @@ "dev": true, "optional": true, "requires": { - "fill-range": "2.2.4" + "fill-range": "^2.1.0" }, "dependencies": { "fill-range": { @@ -2790,11 +2648,11 @@ "dev": true, "optional": true, "requires": { - "is-number": "2.1.0", - "isobject": "2.1.0", - "randomatic": "3.0.0", - "repeat-element": "1.1.2", - "repeat-string": "1.6.1" + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^3.0.0", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" } }, "is-number": { @@ -2804,7 +2662,7 @@ "dev": true, "optional": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "isobject": { @@ -2825,8 +2683,8 @@ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { @@ -2835,7 +2693,7 @@ "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", "dev": true, "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -2846,14 +2704,14 @@ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, "requires": { - "array-unique": "0.3.2", - "define-property": "1.0.0", - "expand-brackets": "2.1.4", - "extend-shallow": "2.0.1", - "fragment-cache": "0.2.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -2862,7 +2720,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "extend-shallow": { @@ -2871,7 +2729,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "is-accessor-descriptor": { @@ -2880,7 +2738,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -2889,7 +2747,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -2898,9 +2756,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, "kind-of": { @@ -2934,13 +2792,13 @@ "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", "requires": { - "core-js": "1.2.7", - "isomorphic-fetch": "2.2.1", - "loose-envify": "1.3.1", - "object-assign": "4.1.1", - "promise": "7.3.1", - "setimmediate": "1.0.5", - "ua-parser-js": "0.7.18" + "core-js": "^1.0.0", + "isomorphic-fetch": "^2.1.1", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.18" } }, "figgy-pudding": { @@ -2962,10 +2820,10 @@ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" }, "dependencies": { "extend-shallow": { @@ -2974,7 +2832,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -2985,9 +2843,9 @@ "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", "dev": true, "requires": { - "commondir": "1.0.1", - "make-dir": "1.3.0", - "pkg-dir": "2.0.0" + "commondir": "^1.0.1", + "make-dir": "^1.0.0", + "pkg-dir": "^2.0.0" } }, "find-up": { @@ -2996,7 +2854,7 @@ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "locate-path": "2.0.0" + "locate-path": "^2.0.0" } }, "flatten": { @@ -3011,8 +2869,8 @@ "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.6" + "inherits": "^2.0.1", + "readable-stream": "^2.0.4" } }, "for-in": { @@ -3028,7 +2886,7 @@ "dev": true, "optional": true, "requires": { - "for-in": "1.0.2" + "for-in": "^1.0.1" } }, "fragment-cache": { @@ -3037,7 +2895,7 @@ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dev": true, "requires": { - "map-cache": "0.2.2" + "map-cache": "^0.2.2" } }, "from2": { @@ -3046,8 +2904,8 @@ "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.6" + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" } }, "fs-extra": { @@ -3055,9 +2913,9 @@ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", "requires": { - "graceful-fs": "4.1.11", - "jsonfile": "3.0.1", - "universalify": "0.1.2" + "graceful-fs": "^4.1.2", + "jsonfile": "^3.0.0", + "universalify": "^0.1.0" } }, "fs-readdir-recursive": { @@ -3072,10 +2930,10 @@ "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "iferr": "0.1.5", - "imurmurhash": "0.1.4", - "readable-stream": "2.3.6" + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" } }, "fs.realpath": { @@ -3090,8 +2948,8 @@ "dev": true, "optional": true, "requires": { - "nan": "2.10.0", - "node-pre-gyp": "0.10.0" + "nan": "^2.9.2", + "node-pre-gyp": "^0.10.0" }, "dependencies": { "abbrev": { @@ -3117,8 +2975,8 @@ "dev": true, "optional": true, "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.6" + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" } }, "balanced-match": { @@ -3131,7 +2989,7 @@ "bundled": true, "dev": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -3195,7 +3053,7 @@ "dev": true, "optional": true, "requires": { - "minipass": "2.2.4" + "minipass": "^2.2.1" } }, "fs.realpath": { @@ -3210,14 +3068,14 @@ "dev": true, "optional": true, "requires": { - "aproba": "1.2.0", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" } }, "glob": { @@ -3226,12 +3084,12 @@ "dev": true, "optional": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "has-unicode": { @@ -3246,7 +3104,7 @@ "dev": true, "optional": true, "requires": { - "safer-buffer": "2.1.2" + "safer-buffer": "^2.1.0" } }, "ignore-walk": { @@ -3255,7 +3113,7 @@ "dev": true, "optional": true, "requires": { - "minimatch": "3.0.4" + "minimatch": "^3.0.4" } }, "inflight": { @@ -3264,8 +3122,8 @@ "dev": true, "optional": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -3284,7 +3142,7 @@ "bundled": true, "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "isarray": { @@ -3298,7 +3156,7 @@ "bundled": true, "dev": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -3311,8 +3169,8 @@ "bundled": true, "dev": true, "requires": { - "safe-buffer": "5.1.1", - "yallist": "3.0.2" + "safe-buffer": "^5.1.1", + "yallist": "^3.0.0" } }, "minizlib": { @@ -3321,7 +3179,7 @@ "dev": true, "optional": true, "requires": { - "minipass": "2.2.4" + "minipass": "^2.2.1" } }, "mkdirp": { @@ -3344,9 +3202,9 @@ "dev": true, "optional": true, "requires": { - "debug": "2.6.9", - "iconv-lite": "0.4.21", - "sax": "1.2.4" + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" } }, "node-pre-gyp": { @@ -3355,16 +3213,16 @@ "dev": true, "optional": true, "requires": { - "detect-libc": "1.0.3", - "mkdirp": "0.5.1", - "needle": "2.2.0", - "nopt": "4.0.1", - "npm-packlist": "1.1.10", - "npmlog": "4.1.2", - "rc": "1.2.7", - "rimraf": "2.6.2", - "semver": "5.5.0", - "tar": "4.4.1" + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.0", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.1.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" } }, "nopt": { @@ -3373,8 +3231,8 @@ "dev": true, "optional": true, "requires": { - "abbrev": "1.1.1", - "osenv": "0.1.5" + "abbrev": "1", + "osenv": "^0.1.4" } }, "npm-bundled": { @@ -3389,8 +3247,8 @@ "dev": true, "optional": true, "requires": { - "ignore-walk": "3.0.1", - "npm-bundled": "1.0.3" + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" } }, "npmlog": { @@ -3399,10 +3257,10 @@ "dev": true, "optional": true, "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" } }, "number-is-nan": { @@ -3421,7 +3279,7 @@ "bundled": true, "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "os-homedir": { @@ -3442,8 +3300,8 @@ "dev": true, "optional": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, "path-is-absolute": { @@ -3464,10 +3322,10 @@ "dev": true, "optional": true, "requires": { - "deep-extend": "0.5.1", - "ini": "1.3.5", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" + "deep-extend": "^0.5.1", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, "dependencies": { "minimist": { @@ -3484,13 +3342,13 @@ "dev": true, "optional": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "rimraf": { @@ -3499,7 +3357,7 @@ "dev": true, "optional": true, "requires": { - "glob": "7.1.2" + "glob": "^7.0.5" } }, "safe-buffer": { @@ -3542,9 +3400,9 @@ "bundled": true, "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "string_decoder": { @@ -3553,7 +3411,7 @@ "dev": true, "optional": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "~5.1.0" } }, "strip-ansi": { @@ -3561,7 +3419,7 @@ "bundled": true, "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-json-comments": { @@ -3576,13 +3434,13 @@ "dev": true, "optional": true, "requires": { - "chownr": "1.0.1", - "fs-minipass": "1.2.5", - "minipass": "2.2.4", - "minizlib": "1.1.0", - "mkdirp": "0.5.1", - "safe-buffer": "5.1.1", - "yallist": "3.0.2" + "chownr": "^1.0.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.2.4", + "minizlib": "^1.1.0", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.1", + "yallist": "^3.0.2" } }, "util-deprecate": { @@ -3597,7 +3455,7 @@ "dev": true, "optional": true, "requires": { - "string-width": "1.0.2" + "string-width": "^1.0.2" } }, "wrappy": { @@ -3641,12 +3499,12 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "glob-base": { @@ -3656,8 +3514,8 @@ "dev": true, "optional": true, "requires": { - "glob-parent": "2.0.0", - "is-glob": "2.0.1" + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" }, "dependencies": { "glob-parent": { @@ -3667,7 +3525,7 @@ "dev": true, "optional": true, "requires": { - "is-glob": "2.0.1" + "is-glob": "^2.0.0" } }, "is-extglob": { @@ -3682,7 +3540,7 @@ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } } } @@ -3693,8 +3551,8 @@ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dev": true, "requires": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" }, "dependencies": { "is-glob": { @@ -3703,7 +3561,7 @@ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.0" } } } @@ -3736,7 +3594,7 @@ "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=", "dev": true, "requires": { - "function-bind": "1.1.1" + "function-bind": "^1.1.1" } }, "has-ansi": { @@ -3744,7 +3602,7 @@ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "has-flag": { @@ -3753,21 +3611,15 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, - "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", - "dev": true - }, "has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dev": true, "requires": { - "get-value": "2.0.6", - "has-values": "1.0.0", - "isobject": "3.0.1" + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" } }, "has-values": { @@ -3776,8 +3628,8 @@ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dev": true, "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" + "is-number": "^3.0.0", + "kind-of": "^4.0.0" }, "dependencies": { "kind-of": { @@ -3786,7 +3638,7 @@ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -3797,8 +3649,8 @@ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "hash.js": { @@ -3807,26 +3659,20 @@ "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dev": true, "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" } }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, "history": { "version": "4.7.2", "resolved": "https://registry.npmjs.org/history/-/history-4.7.2.tgz", "integrity": "sha1-IrXH8xYzxbgCHH9KipVKwTnujVs=", "requires": { - "invariant": "2.2.4", - "loose-envify": "1.3.1", - "resolve-pathname": "2.2.0", - "value-equal": "0.4.0", - "warning": "3.0.0" + "invariant": "^2.2.1", + "loose-envify": "^1.2.0", + "resolve-pathname": "^2.2.0", + "value-equal": "^0.4.0", + "warning": "^3.0.0" }, "dependencies": { "warning": { @@ -3834,7 +3680,7 @@ "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", "requires": { - "loose-envify": "1.3.1" + "loose-envify": "^1.0.0" } } } @@ -3845,9 +3691,9 @@ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "dev": true, "requires": { - "hash.js": "1.1.7", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, "hoist-non-react-statics": { @@ -3861,8 +3707,8 @@ "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", "dev": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.1" } }, "html-comment-regex": { @@ -3871,105 +3717,6 @@ "integrity": "sha1-ZouTd26q5V696POtRkswekljYl4=", "dev": true }, - "html-minifier": { - "version": "3.5.21", - "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz", - "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", - "dev": true, - "requires": { - "camel-case": "3.0.0", - "clean-css": "4.2.1", - "commander": "2.17.1", - "he": "1.2.0", - "param-case": "2.1.1", - "relateurl": "0.2.7", - "uglify-js": "3.4.9" - }, - "dependencies": { - "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", - "dev": true - } - } - }, - "html-webpack-plugin": { - "version": "3.2.0", - "resolved": "http://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz", - "integrity": "sha1-sBq71yOsqqeze2r0SS69oD2d03s=", - "dev": true, - "requires": { - "html-minifier": "3.5.21", - "loader-utils": "0.2.17", - "lodash": "4.17.10", - "pretty-error": "2.1.1", - "tapable": "1.1.1", - "toposort": "1.0.7", - "util.promisify": "1.0.0" - }, - "dependencies": { - "loader-utils": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", - "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", - "dev": true, - "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1", - "object-assign": "4.1.1" - } - } - } - }, - "htmlparser2": { - "version": "3.3.0", - "resolved": "http://registry.npmjs.org/htmlparser2/-/htmlparser2-3.3.0.tgz", - "integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=", - "dev": true, - "requires": { - "domelementtype": "1.3.1", - "domhandler": "2.1.0", - "domutils": "1.1.6", - "readable-stream": "1.0.34" - }, - "dependencies": { - "domutils": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.1.6.tgz", - "integrity": "sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU=", - "dev": true, - "requires": { - "domelementtype": "1.3.1" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } - } - }, "https-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", @@ -3981,7 +3728,7 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", "requires": { - "safer-buffer": "2.1.2" + "safer-buffer": ">= 2.1.2 < 3" } }, "icss-replace-symbols": { @@ -3996,7 +3743,7 @@ "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", "dev": true, "requires": { - "postcss": "6.0.23" + "postcss": "^6.0.1" }, "dependencies": { "ansi-styles": { @@ -4005,7 +3752,7 @@ "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", "dev": true, "requires": { - "color-convert": "1.9.2" + "color-convert": "^1.9.0" } }, "chalk": { @@ -4014,9 +3761,9 @@ "integrity": "sha1-GMSasWoDe26wFSzIPjRxM4IVtm4=", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "has-flag": { @@ -4031,9 +3778,9 @@ "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=", "dev": true, "requires": { - "chalk": "2.4.1", - "source-map": "0.6.1", - "supports-color": "5.4.0" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { @@ -4048,7 +3795,7 @@ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } @@ -4076,8 +3823,8 @@ "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", "dev": true, "requires": { - "pkg-dir": "3.0.0", - "resolve-cwd": "2.0.0" + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" }, "dependencies": { "find-up": { @@ -4086,7 +3833,7 @@ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "locate-path": "3.0.0" + "locate-path": "^3.0.0" } }, "locate-path": { @@ -4095,8 +3842,8 @@ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "p-locate": "3.0.0", - "path-exists": "3.0.0" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" } }, "p-limit": { @@ -4105,7 +3852,7 @@ "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", "dev": true, "requires": { - "p-try": "2.0.0" + "p-try": "^2.0.0" } }, "p-locate": { @@ -4114,7 +3861,7 @@ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "p-limit": "2.1.0" + "p-limit": "^2.0.0" } }, "p-try": { @@ -4129,7 +3876,7 @@ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, "requires": { - "find-up": "3.0.0" + "find-up": "^3.0.0" } } } @@ -4157,8 +3904,8 @@ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -4177,7 +3924,7 @@ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", "integrity": "sha1-YQ88ksk1nOHbYW5TgAjSP/NRWOY=", "requires": { - "loose-envify": "1.3.1" + "loose-envify": "^1.0.0" } }, "invert-kv": { @@ -4207,7 +3954,7 @@ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "dev": true, "requires": { - "binary-extensions": "1.11.0" + "binary-extensions": "^1.0.0" } }, "is-buffer": { @@ -4216,12 +3963,6 @@ "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=", "dev": true }, - "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", - "dev": true - }, "is-data-descriptor": { "version": "0.1.4", "resolved": "http://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", @@ -4231,21 +3972,15 @@ "kind-of": "3.2.2" } }, - "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", - "dev": true - }, "is-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", "dev": true, "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" }, "dependencies": { "kind-of": { @@ -4270,7 +4005,7 @@ "dev": true, "optional": true, "requires": { - "is-primitive": "2.0.0" + "is-primitive": "^2.0.0" } }, "is-extendable": { @@ -4291,7 +4026,7 @@ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "is-fullwidth-code-point": { @@ -4306,7 +4041,7 @@ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", "dev": true, "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.1" } }, "is-number": { @@ -4315,7 +4050,7 @@ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "is-plain-obj": { @@ -4330,7 +4065,7 @@ "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" } }, "is-posix-bracket": { @@ -4347,15 +4082,6 @@ "dev": true, "optional": true }, - "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "dev": true, - "requires": { - "has": "1.0.3" - } - }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", @@ -4367,16 +4093,7 @@ "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=", "dev": true, "requires": { - "html-comment-regex": "1.1.1" - } - }, - "is-symbol": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", - "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", - "dev": true, - "requires": { - "has-symbols": "1.0.0" + "html-comment-regex": "^1.1.0" } }, "is-windows": { @@ -4408,8 +4125,8 @@ "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", "requires": { - "node-fetch": "1.7.3", - "whatwg-fetch": "2.0.4" + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" } }, "js-base64": { @@ -4429,8 +4146,8 @@ "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", "dev": true, "requires": { - "argparse": "1.0.10", - "esprima": "2.7.3" + "argparse": "^1.0.7", + "esprima": "^2.6.0" } }, "jsesc": { @@ -4462,7 +4179,7 @@ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", "requires": { - "graceful-fs": "4.1.11" + "graceful-fs": "^4.1.6" } }, "jvm-npm": { @@ -4476,7 +4193,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } }, "lcid": { @@ -4485,7 +4202,7 @@ "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", "dev": true, "requires": { - "invert-kv": "2.0.0" + "invert-kv": "^2.0.0" } }, "less-loader": { @@ -4494,9 +4211,9 @@ "integrity": "sha1-LBNSxbCaT4QQFJAnT9UWdN5BNj4=", "dev": true, "requires": { - "clone": "2.1.1", - "loader-utils": "1.1.0", - "pify": "3.0.0" + "clone": "^2.1.1", + "loader-utils": "^1.1.0", + "pify": "^3.0.0" }, "dependencies": { "clone": { @@ -4525,9 +4242,9 @@ "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", "dev": true, "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1" + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0" } }, "locate-path": { @@ -4536,8 +4253,8 @@ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" } }, "lodash": { @@ -4578,8 +4295,8 @@ "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz", "integrity": "sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=", "requires": { - "lodash._reinterpolate": "3.0.0", - "lodash.templatesettings": "4.1.0" + "lodash._reinterpolate": "~3.0.0", + "lodash.templatesettings": "^4.0.0" } }, "lodash.templatesettings": { @@ -4587,7 +4304,7 @@ "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz", "integrity": "sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=", "requires": { - "lodash._reinterpolate": "3.0.0" + "lodash._reinterpolate": "~3.0.0" } }, "lodash.uniq": { @@ -4601,22 +4318,16 @@ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", "requires": { - "js-tokens": "3.0.2" + "js-tokens": "^3.0.0" } }, - "lower-case": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", - "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", - "dev": true - }, "lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, "requires": { - "yallist": "3.0.3" + "yallist": "^3.0.2" } }, "make-dir": { @@ -4625,7 +4336,7 @@ "integrity": "sha1-ecEDO4BRW9bSTsmTPoYMp17ifww=", "dev": true, "requires": { - "pify": "3.0.0" + "pify": "^3.0.0" }, "dependencies": { "pify": { @@ -4642,7 +4353,7 @@ "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", "dev": true, "requires": { - "p-defer": "1.0.0" + "p-defer": "^1.0.0" } }, "map-cache": { @@ -4657,7 +4368,7 @@ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dev": true, "requires": { - "object-visit": "1.0.1" + "object-visit": "^1.0.0" } }, "math-expression-evaluator": { @@ -4679,9 +4390,9 @@ "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "mem": { @@ -4690,9 +4401,9 @@ "integrity": "sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA==", "dev": true, "requires": { - "map-age-cleaner": "0.1.3", - "mimic-fn": "1.2.0", - "p-is-promise": "1.1.0" + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^1.0.0", + "p-is-promise": "^1.1.0" } }, "memory-fs": { @@ -4701,8 +4412,8 @@ "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", "dev": true, "requires": { - "errno": "0.1.7", - "readable-stream": "2.3.6" + "errno": "^0.1.3", + "readable-stream": "^2.0.1" } }, "micromatch": { @@ -4711,19 +4422,19 @@ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.2", - "nanomatch": "1.2.13", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" }, "dependencies": { "kind-of": { @@ -4740,8 +4451,8 @@ "integrity": "sha1-8IA1HIZbDcViqEYpZtqlNUPHik0=", "dev": true, "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0" + "bn.js": "^4.0.0", + "brorand": "^1.0.1" } }, "mimic-fn": { @@ -4767,7 +4478,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -4781,16 +4492,16 @@ "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", "dev": true, "requires": { - "concat-stream": "1.6.2", - "duplexify": "3.6.1", - "end-of-stream": "1.4.1", - "flush-write-stream": "1.0.3", - "from2": "2.3.0", - "parallel-transform": "1.1.0", - "pump": "3.0.0", - "pumpify": "1.5.1", - "stream-each": "1.2.3", - "through2": "2.0.5" + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" } }, "mixin-deep": { @@ -4799,8 +4510,8 @@ "integrity": "sha1-pJ5yaNzhoNlpjkUybFYm3zVD0P4=", "dev": true, "requires": { - "for-in": "1.0.2", - "is-extendable": "1.0.1" + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { @@ -4809,7 +4520,7 @@ "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", "dev": true, "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -4828,12 +4539,12 @@ "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", "dev": true, "requires": { - "aproba": "1.2.0", - "copy-concurrently": "1.0.5", - "fs-write-stream-atomic": "1.0.10", - "mkdirp": "0.5.1", - "rimraf": "2.6.3", - "run-queue": "1.0.3" + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" } }, "ms": { @@ -4855,17 +4566,17 @@ "integrity": "sha1-uHqKpPwN6P5r6IiVs4mD/yZb0Rk=", "dev": true, "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "fragment-cache": "0.2.1", - "is-windows": "1.0.2", - "kind-of": "6.0.2", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "kind-of": { @@ -4888,22 +4599,13 @@ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, - "no-case": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", - "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", - "dev": true, - "requires": { - "lower-case": "1.1.4" - } - }, "node-fetch": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", "integrity": "sha1-mA9vcthSEaU0fGsrwYxbhMPrR+8=", "requires": { - "encoding": "0.1.12", - "is-stream": "1.1.0" + "encoding": "^0.1.11", + "is-stream": "^1.0.1" } }, "node-libs-browser": { @@ -4912,28 +4614,28 @@ "integrity": "sha1-X5QmPUBPbkR2fXJpAf/wVHjWAN8=", "dev": true, "requires": { - "assert": "1.4.1", - "browserify-zlib": "0.2.0", - "buffer": "4.9.1", - "console-browserify": "1.1.0", - "constants-browserify": "1.0.0", - "crypto-browserify": "3.12.0", - "domain-browser": "1.2.0", - "events": "1.1.1", - "https-browserify": "1.0.0", - "os-browserify": "0.3.0", + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^1.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", "path-browserify": "0.0.0", - "process": "0.11.10", - "punycode": "1.4.1", - "querystring-es3": "0.2.1", - "readable-stream": "2.3.6", - "stream-browserify": "2.0.1", - "stream-http": "2.8.3", - "string_decoder": "1.1.1", - "timers-browserify": "2.0.10", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", "tty-browserify": "0.0.0", - "url": "0.11.0", - "util": "0.10.4", + "url": "^0.11.0", + "util": "^0.10.3", "vm-browserify": "0.0.4" }, "dependencies": { @@ -4951,7 +4653,7 @@ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { - "remove-trailing-separator": "1.1.0" + "remove-trailing-separator": "^1.0.1" } }, "normalize-range": { @@ -4966,10 +4668,10 @@ "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", "dev": true, "requires": { - "object-assign": "4.1.1", - "prepend-http": "1.0.4", - "query-string": "4.3.4", - "sort-keys": "1.1.2" + "object-assign": "^4.0.1", + "prepend-http": "^1.0.0", + "query-string": "^4.1.0", + "sort-keys": "^1.0.0" } }, "npm-run-path": { @@ -4978,16 +4680,7 @@ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dev": true, "requires": { - "path-key": "2.0.1" - } - }, - "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "dev": true, - "requires": { - "boolbase": "1.0.0" + "path-key": "^2.0.0" } }, "num2fraction": { @@ -5013,9 +4706,9 @@ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dev": true, "requires": { - "copy-descriptor": "0.1.1", - "define-property": "0.2.5", - "kind-of": "3.2.2" + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" }, "dependencies": { "define-property": { @@ -5024,34 +4717,18 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } } } }, - "object-keys": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", - "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==", - "dev": true - }, "object-visit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dev": true, "requires": { - "isobject": "3.0.1" - } - }, - "object.getownpropertydescriptors": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", - "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", - "dev": true, - "requires": { - "define-properties": "1.1.3", - "es-abstract": "1.12.0" + "isobject": "^3.0.0" } }, "object.omit": { @@ -5061,8 +4738,8 @@ "dev": true, "optional": true, "requires": { - "for-own": "0.1.5", - "is-extendable": "0.1.1" + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" } }, "object.pick": { @@ -5071,7 +4748,7 @@ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" } }, "once": { @@ -5079,7 +4756,7 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "os-browserify": { @@ -5100,9 +4777,9 @@ "integrity": "sha512-7g5e7dmXPtzcP4bgsZ8ixDVqA7oWYuEz4lOSujeWyliPai4gfVDiFIcwBg3aGCPnmSGfzOKTK3ccPn0CKv3DBw==", "dev": true, "requires": { - "execa": "0.10.0", - "lcid": "2.0.0", - "mem": "4.0.0" + "execa": "^0.10.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" } }, "os-tmpdir": { @@ -5117,9 +4794,9 @@ "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "mkdirp": "0.5.1", - "object-assign": "4.1.1" + "graceful-fs": "^4.1.4", + "mkdirp": "^0.5.1", + "object-assign": "^4.1.0" } }, "p-defer": { @@ -5146,7 +4823,7 @@ "integrity": "sha1-uGvV8MJWkJEcdZD8v8IBDVSzzLg=", "dev": true, "requires": { - "p-try": "1.0.0" + "p-try": "^1.0.0" } }, "p-locate": { @@ -5155,7 +4832,7 @@ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "requires": { - "p-limit": "1.3.0" + "p-limit": "^1.1.0" } }, "p-try": { @@ -5176,18 +4853,9 @@ "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", "dev": true, "requires": { - "cyclist": "0.2.2", - "inherits": "2.0.3", - "readable-stream": "2.3.6" - } - }, - "param-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", - "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", - "dev": true, - "requires": { - "no-case": "2.3.2" + "cyclist": "~0.2.2", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" } }, "parse-asn1": { @@ -5210,10 +4878,10 @@ "dev": true, "optional": true, "requires": { - "glob-base": "0.3.0", - "is-dotfile": "1.0.3", - "is-extglob": "1.0.0", - "is-glob": "2.0.1" + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" }, "dependencies": { "is-extglob": { @@ -5229,7 +4897,7 @@ "dev": true, "optional": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } } } @@ -5290,11 +4958,11 @@ "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", "dev": true, "requires": { - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "ripemd160": "2.0.2", - "safe-buffer": "5.1.2", - "sha.js": "2.4.11" + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, "pkg-dir": { @@ -5303,7 +4971,7 @@ "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", "dev": true, "requires": { - "find-up": "2.1.0" + "find-up": "^2.1.0" } }, "posix-character-classes": { @@ -5318,10 +4986,10 @@ "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", "dev": true, "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.5", - "source-map": "0.5.7", - "supports-color": "3.2.3" + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" }, "dependencies": { "has-flag": { @@ -5336,7 +5004,7 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" } } } @@ -5347,9 +5015,9 @@ "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=", "dev": true, "requires": { - "postcss": "5.2.18", - "postcss-message-helpers": "2.0.0", - "reduce-css-calc": "1.3.0" + "postcss": "^5.0.2", + "postcss-message-helpers": "^2.0.0", + "reduce-css-calc": "^1.2.6" } }, "postcss-colormin": { @@ -5358,9 +5026,9 @@ "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=", "dev": true, "requires": { - "colormin": "1.1.2", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "colormin": "^1.0.5", + "postcss": "^5.0.13", + "postcss-value-parser": "^3.2.3" } }, "postcss-convert-values": { @@ -5369,8 +5037,8 @@ "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=", "dev": true, "requires": { - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "postcss": "^5.0.11", + "postcss-value-parser": "^3.1.2" } }, "postcss-discard-comments": { @@ -5379,7 +5047,7 @@ "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.14" } }, "postcss-discard-duplicates": { @@ -5388,7 +5056,7 @@ "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.4" } }, "postcss-discard-empty": { @@ -5397,7 +5065,7 @@ "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.14" } }, "postcss-discard-overridden": { @@ -5406,7 +5074,7 @@ "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.16" } }, "postcss-discard-unused": { @@ -5415,8 +5083,8 @@ "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=", "dev": true, "requires": { - "postcss": "5.2.18", - "uniqs": "2.0.0" + "postcss": "^5.0.14", + "uniqs": "^2.0.0" } }, "postcss-filter-plugins": { @@ -5425,7 +5093,7 @@ "integrity": "sha1-giRf34IzcEFkXkdxFNjlk6oYuOw=", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.4" } }, "postcss-merge-idents": { @@ -5434,9 +5102,9 @@ "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=", "dev": true, "requires": { - "has": "1.0.3", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "has": "^1.0.1", + "postcss": "^5.0.10", + "postcss-value-parser": "^3.1.1" } }, "postcss-merge-longhand": { @@ -5445,7 +5113,7 @@ "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.4" } }, "postcss-merge-rules": { @@ -5454,11 +5122,11 @@ "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=", "dev": true, "requires": { - "browserslist": "1.7.7", - "caniuse-api": "1.6.1", - "postcss": "5.2.18", - "postcss-selector-parser": "2.2.3", - "vendors": "1.0.2" + "browserslist": "^1.5.2", + "caniuse-api": "^1.5.2", + "postcss": "^5.0.4", + "postcss-selector-parser": "^2.2.2", + "vendors": "^1.0.0" } }, "postcss-message-helpers": { @@ -5473,9 +5141,9 @@ "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=", "dev": true, "requires": { - "object-assign": "4.1.1", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "object-assign": "^4.0.1", + "postcss": "^5.0.4", + "postcss-value-parser": "^3.0.2" } }, "postcss-minify-gradients": { @@ -5484,8 +5152,8 @@ "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=", "dev": true, "requires": { - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "postcss": "^5.0.12", + "postcss-value-parser": "^3.3.0" } }, "postcss-minify-params": { @@ -5494,10 +5162,10 @@ "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=", "dev": true, "requires": { - "alphanum-sort": "1.0.2", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0", - "uniqs": "2.0.0" + "alphanum-sort": "^1.0.1", + "postcss": "^5.0.2", + "postcss-value-parser": "^3.0.2", + "uniqs": "^2.0.0" } }, "postcss-minify-selectors": { @@ -5506,10 +5174,10 @@ "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=", "dev": true, "requires": { - "alphanum-sort": "1.0.2", - "has": "1.0.3", - "postcss": "5.2.18", - "postcss-selector-parser": "2.2.3" + "alphanum-sort": "^1.0.2", + "has": "^1.0.1", + "postcss": "^5.0.14", + "postcss-selector-parser": "^2.0.0" } }, "postcss-modules-extract-imports": { @@ -5518,7 +5186,7 @@ "integrity": "sha1-ZhQOzs447wa/DT41XWm/WdFB6oU=", "dev": true, "requires": { - "postcss": "6.0.23" + "postcss": "^6.0.1" }, "dependencies": { "ansi-styles": { @@ -5527,7 +5195,7 @@ "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", "dev": true, "requires": { - "color-convert": "1.9.2" + "color-convert": "^1.9.0" } }, "chalk": { @@ -5536,9 +5204,9 @@ "integrity": "sha1-GMSasWoDe26wFSzIPjRxM4IVtm4=", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "has-flag": { @@ -5553,9 +5221,9 @@ "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=", "dev": true, "requires": { - "chalk": "2.4.1", - "source-map": "0.6.1", - "supports-color": "5.4.0" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { @@ -5570,7 +5238,7 @@ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } @@ -5581,8 +5249,8 @@ "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", "dev": true, "requires": { - "css-selector-tokenizer": "0.7.0", - "postcss": "6.0.23" + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" }, "dependencies": { "ansi-styles": { @@ -5591,7 +5259,7 @@ "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", "dev": true, "requires": { - "color-convert": "1.9.2" + "color-convert": "^1.9.0" } }, "chalk": { @@ -5600,9 +5268,9 @@ "integrity": "sha1-GMSasWoDe26wFSzIPjRxM4IVtm4=", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "has-flag": { @@ -5617,9 +5285,9 @@ "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=", "dev": true, "requires": { - "chalk": "2.4.1", - "source-map": "0.6.1", - "supports-color": "5.4.0" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { @@ -5634,7 +5302,7 @@ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } @@ -5645,8 +5313,8 @@ "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", "dev": true, "requires": { - "css-selector-tokenizer": "0.7.0", - "postcss": "6.0.23" + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" }, "dependencies": { "ansi-styles": { @@ -5655,7 +5323,7 @@ "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", "dev": true, "requires": { - "color-convert": "1.9.2" + "color-convert": "^1.9.0" } }, "chalk": { @@ -5664,9 +5332,9 @@ "integrity": "sha1-GMSasWoDe26wFSzIPjRxM4IVtm4=", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "has-flag": { @@ -5681,9 +5349,9 @@ "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=", "dev": true, "requires": { - "chalk": "2.4.1", - "source-map": "0.6.1", - "supports-color": "5.4.0" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { @@ -5698,7 +5366,7 @@ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } @@ -5709,8 +5377,8 @@ "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", "dev": true, "requires": { - "icss-replace-symbols": "1.1.0", - "postcss": "6.0.23" + "icss-replace-symbols": "^1.1.0", + "postcss": "^6.0.1" }, "dependencies": { "ansi-styles": { @@ -5719,7 +5387,7 @@ "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", "dev": true, "requires": { - "color-convert": "1.9.2" + "color-convert": "^1.9.0" } }, "chalk": { @@ -5728,9 +5396,9 @@ "integrity": "sha1-GMSasWoDe26wFSzIPjRxM4IVtm4=", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "has-flag": { @@ -5745,9 +5413,9 @@ "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=", "dev": true, "requires": { - "chalk": "2.4.1", - "source-map": "0.6.1", - "supports-color": "5.4.0" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { @@ -5762,7 +5430,7 @@ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } @@ -5773,7 +5441,7 @@ "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.5" } }, "postcss-normalize-url": { @@ -5782,10 +5450,10 @@ "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=", "dev": true, "requires": { - "is-absolute-url": "2.1.0", - "normalize-url": "1.9.1", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "is-absolute-url": "^2.0.0", + "normalize-url": "^1.4.0", + "postcss": "^5.0.14", + "postcss-value-parser": "^3.2.3" } }, "postcss-ordered-values": { @@ -5794,8 +5462,8 @@ "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=", "dev": true, "requires": { - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "postcss": "^5.0.4", + "postcss-value-parser": "^3.0.1" } }, "postcss-reduce-idents": { @@ -5804,8 +5472,8 @@ "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=", "dev": true, "requires": { - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "postcss": "^5.0.4", + "postcss-value-parser": "^3.0.2" } }, "postcss-reduce-initial": { @@ -5814,7 +5482,7 @@ "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.4" } }, "postcss-reduce-transforms": { @@ -5823,9 +5491,9 @@ "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=", "dev": true, "requires": { - "has": "1.0.3", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "has": "^1.0.1", + "postcss": "^5.0.8", + "postcss-value-parser": "^3.0.1" } }, "postcss-selector-parser": { @@ -5834,9 +5502,9 @@ "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=", "dev": true, "requires": { - "flatten": "1.0.2", - "indexes-of": "1.0.1", - "uniq": "1.0.1" + "flatten": "^1.0.2", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" } }, "postcss-svgo": { @@ -5845,10 +5513,10 @@ "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=", "dev": true, "requires": { - "is-svg": "2.1.0", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0", - "svgo": "0.7.2" + "is-svg": "^2.0.0", + "postcss": "^5.0.14", + "postcss-value-parser": "^3.2.3", + "svgo": "^0.7.0" } }, "postcss-unique-selectors": { @@ -5857,9 +5525,9 @@ "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=", "dev": true, "requires": { - "alphanum-sort": "1.0.2", - "postcss": "5.2.18", - "uniqs": "2.0.0" + "alphanum-sort": "^1.0.1", + "postcss": "^5.0.4", + "uniqs": "^2.0.0" } }, "postcss-value-parser": { @@ -5874,9 +5542,9 @@ "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=", "dev": true, "requires": { - "has": "1.0.3", - "postcss": "5.2.18", - "uniqs": "2.0.0" + "has": "^1.0.1", + "postcss": "^5.0.4", + "uniqs": "^2.0.0" } }, "prepend-http": { @@ -5892,16 +5560,6 @@ "dev": true, "optional": true }, - "pretty-error": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz", - "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", - "dev": true, - "requires": { - "renderkid": "2.0.2", - "utila": "0.4.0" - } - }, "private": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", @@ -5925,7 +5583,7 @@ "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", "integrity": "sha1-BktyYCsY+Q8pGSuLG8QY/9Hr078=", "requires": { - "asap": "2.0.6" + "asap": "~2.0.3" } }, "promise-inflight": { @@ -5939,8 +5597,8 @@ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz", "integrity": "sha1-BdXKd7RFPphdYPx/+MhZCUpJcQI=", "requires": { - "loose-envify": "1.3.1", - "object-assign": "4.1.1" + "loose-envify": "^1.3.1", + "object-assign": "^4.1.1" } }, "prr": { @@ -5955,12 +5613,12 @@ "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dev": true, "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.2.0", - "parse-asn1": "5.1.1", - "randombytes": "2.0.6", - "safe-buffer": "5.1.2" + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "pump": { @@ -5969,8 +5627,8 @@ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "once": "1.4.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, "pumpify": { @@ -5979,9 +5637,9 @@ "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", "dev": true, "requires": { - "duplexify": "3.6.1", - "inherits": "2.0.3", - "pump": "2.0.1" + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" }, "dependencies": { "pump": { @@ -5990,8 +5648,8 @@ "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "once": "1.4.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } } } @@ -6014,8 +5672,8 @@ "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", "dev": true, "requires": { - "object-assign": "4.1.1", - "strict-uri-encode": "1.1.0" + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" } }, "querystring": { @@ -6037,9 +5695,9 @@ "dev": true, "optional": true, "requires": { - "is-number": "4.0.0", - "kind-of": "6.0.2", - "math-random": "1.0.1" + "is-number": "^4.0.0", + "kind-of": "^6.0.0", + "math-random": "^1.0.1" }, "dependencies": { "is-number": { @@ -6064,7 +5722,7 @@ "integrity": "sha1-0wLFIpSFiISKjTAMkytEwkIx2oA=", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "^5.1.0" } }, "randomfill": { @@ -6073,8 +5731,8 @@ "integrity": "sha1-ySGW/IarQr6YPxvzF3giSTHWFFg=", "dev": true, "requires": { - "randombytes": "2.0.6", - "safe-buffer": "5.1.2" + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" } }, "react": { @@ -6082,10 +5740,10 @@ "resolved": "https://registry.npmjs.org/react/-/react-16.4.1.tgz", "integrity": "sha512-3GEs0giKp6E0Oh/Y9ZC60CmYgUPnp7voH9fbjWsvXtYFb4EWtgQub0ADSq0sJR0BbHc4FThLLtzlcFaFXIorwg==", "requires": { - "fbjs": "0.8.17", - "loose-envify": "1.3.1", - "object-assign": "4.1.1", - "prop-types": "15.6.2" + "fbjs": "^0.8.16", + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.0" } }, "react-dom": { @@ -6093,10 +5751,10 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.4.1.tgz", "integrity": "sha512-1Gin+wghF/7gl4Cqcvr1DxFX2Osz7ugxSwl6gBqCMpdrxHjIFUS7GYxrFftZ9Ln44FHw0JxCFD9YtZsrbR5/4A==", "requires": { - "fbjs": "0.8.17", - "loose-envify": "1.3.1", - "object-assign": "4.1.1", - "prop-types": "15.6.2" + "fbjs": "^0.8.16", + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.0" } }, "react-is": { @@ -6109,12 +5767,12 @@ "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-5.0.7.tgz", "integrity": "sha1-DcEHbZr7RnD5k/+u9EuPjBFVpMg=", "requires": { - "hoist-non-react-statics": "2.5.5", - "invariant": "2.2.4", - "lodash": "4.17.10", - "lodash-es": "4.17.10", - "loose-envify": "1.3.1", - "prop-types": "15.6.2" + "hoist-non-react-statics": "^2.5.0", + "invariant": "^2.0.0", + "lodash": "^4.17.5", + "lodash-es": "^4.17.5", + "loose-envify": "^1.1.0", + "prop-types": "^15.6.0" } }, "react-router": { @@ -6122,16 +5780,16 @@ "resolved": "https://registry.npmjs.org/react-router/-/react-router-4.4.0-beta.6.tgz", "integrity": "sha512-esR1UHsPpfvehX5Qn7wQrOTFsl4PxiaX3GaYvtFDSEioMsTl0zkASJBm1fXKgR9brUQX9kgiGq6XnCsiJU/82g==", "requires": { - "@babel/runtime": "7.2.0", - "create-react-context": "0.2.3", - "history": "4.8.0-beta.0", - "hoist-non-react-statics": "2.5.5", - "loose-envify": "1.3.1", - "path-to-regexp": "1.7.0", - "prop-types": "15.6.2", - "react-is": "16.6.3", - "tiny-invariant": "1.0.3", - "tiny-warning": "1.0.0" + "@babel/runtime": "^7.1.2", + "create-react-context": "^0.2.2", + "history": "^4.8.0-beta.0", + "hoist-non-react-statics": "^2.5.0", + "loose-envify": "^1.3.1", + "path-to-regexp": "^1.7.0", + "prop-types": "^15.6.2", + "react-is": "^16.5.2", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" }, "dependencies": { "history": { @@ -6139,12 +5797,12 @@ "resolved": "https://registry.npmjs.org/history/-/history-4.8.0-beta.0.tgz", "integrity": "sha512-LDjPtGgAFDO3lZ+bumN67k0R3GWvUBLLgRJpFU2mnJ1w+D5rEbiZC1c37yPla7tx/dUzVfznt5Rmttnz0MvGdA==", "requires": { - "@babel/runtime": "7.2.0", - "loose-envify": "1.3.1", - "resolve-pathname": "2.2.0", - "tiny-invariant": "1.0.3", - "tiny-warning": "1.0.0", - "value-equal": "0.4.0" + "@babel/runtime": "^7.1.2", + "loose-envify": "^1.2.0", + "resolve-pathname": "^2.2.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0", + "value-equal": "^0.4.0" } } } @@ -6154,11 +5812,11 @@ "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-4.4.0-alpha.1.tgz", "integrity": "sha1-EgfmmFNJ6wvXms4azhx89ni80cQ=", "requires": { - "history": "4.7.2", - "invariant": "2.2.4", - "loose-envify": "1.3.1", - "prop-types": "15.6.2", - "react-router": "4.4.0-beta.6" + "history": "^4.7.2", + "invariant": "^2.2.4", + "loose-envify": "^1.3.1", + "prop-types": "^15.6.1", + "react-router": "^4.4.0-alpha.1" } }, "react-router-redux": { @@ -6172,13 +5830,13 @@ "integrity": "sha1-sRwn2IuP8fvgcGQ8+UsMea4bCq8=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "readdirp": { @@ -6187,10 +5845,10 @@ "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "minimatch": "3.0.4", - "readable-stream": "2.3.6", - "set-immediate-shim": "1.0.1" + "graceful-fs": "^4.1.2", + "minimatch": "^3.0.2", + "readable-stream": "^2.0.2", + "set-immediate-shim": "^1.0.1" } }, "reduce-css-calc": { @@ -6199,9 +5857,9 @@ "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=", "dev": true, "requires": { - "balanced-match": "0.4.2", - "math-expression-evaluator": "1.2.17", - "reduce-function-call": "1.0.2" + "balanced-match": "^0.4.2", + "math-expression-evaluator": "^1.2.14", + "reduce-function-call": "^1.0.1" }, "dependencies": { "balanced-match": { @@ -6218,7 +5876,7 @@ "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=", "dev": true, "requires": { - "balanced-match": "0.4.2" + "balanced-match": "^0.4.2" }, "dependencies": { "balanced-match": { @@ -6234,8 +5892,8 @@ "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.0.tgz", "integrity": "sha1-qmmKkrcpMV0is0oFU9fmUzVVzAM=", "requires": { - "loose-envify": "1.3.1", - "symbol-observable": "1.2.0" + "loose-envify": "^1.1.0", + "symbol-observable": "^1.2.0" } }, "redux-immutable": { @@ -6261,9 +5919,9 @@ "integrity": "sha1-HkmWg3Ix2ot/PPQRTXG1aRoGgN0=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "private": "0.1.8" + "babel-runtime": "^6.18.0", + "babel-types": "^6.19.0", + "private": "^0.1.6" } }, "regex-cache": { @@ -6273,7 +5931,7 @@ "dev": true, "optional": true, "requires": { - "is-equal-shallow": "0.1.3" + "is-equal-shallow": "^0.1.3" } }, "regex-not": { @@ -6282,8 +5940,8 @@ "integrity": "sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw=", "dev": true, "requires": { - "extend-shallow": "3.0.2", - "safe-regex": "1.1.0" + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" } }, "regexpu-core": { @@ -6292,9 +5950,9 @@ "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", "dev": true, "requires": { - "regenerate": "1.4.0", - "regjsgen": "0.2.0", - "regjsparser": "0.1.5" + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" } }, "regjsgen": { @@ -6309,7 +5967,7 @@ "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", "dev": true, "requires": { - "jsesc": "0.5.0" + "jsesc": "~0.5.0" }, "dependencies": { "jsesc": { @@ -6320,31 +5978,12 @@ } } }, - "relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", - "dev": true - }, "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", "dev": true }, - "renderkid": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.2.tgz", - "integrity": "sha512-FsygIxevi1jSiPY9h7vZmBFUbAOcbYm9UwyiLNdVsLRs/5We9Ob5NMPbGYUTWiLq5L+ezlVdE0A8bbME5CWTpg==", - "dev": true, - "requires": { - "css-select": "1.2.0", - "dom-converter": "0.2.0", - "htmlparser2": "3.3.0", - "strip-ansi": "3.0.1", - "utila": "0.4.0" - } - }, "repeat-element": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", @@ -6363,7 +6002,7 @@ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", "dev": true, "requires": { - "is-finite": "1.0.2" + "is-finite": "^1.0.0" } }, "require-directory": { @@ -6384,7 +6023,7 @@ "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", "dev": true, "requires": { - "resolve-from": "3.0.0" + "resolve-from": "^3.0.0" } }, "resolve-from": { @@ -6416,7 +6055,7 @@ "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "dev": true, "requires": { - "glob": "7.1.3" + "glob": "^7.1.3" }, "dependencies": { "glob": { @@ -6425,12 +6064,12 @@ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } } } @@ -6441,8 +6080,8 @@ "integrity": "sha1-ocGm9iR1FXe6XQeRTLyShQWFiQw=", "dev": true, "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3" + "hash-base": "^3.0.0", + "inherits": "^2.0.1" } }, "run-queue": { @@ -6451,7 +6090,7 @@ "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", "dev": true, "requires": { - "aproba": "1.2.0" + "aproba": "^1.1.1" } }, "safe-buffer": { @@ -6486,8 +6125,8 @@ "integrity": "sha512-yYrjb9TX2k/J1Y5UNy3KYdZq10xhYcF8nMpAW6o3hy6Q8WSIEf9lJHG/ePnOBfziPM3fvQwfOwa13U/Fh8qTfA==", "dev": true, "requires": { - "ajv": "6.5.2", - "ajv-keywords": "3.2.0" + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0" } }, "semver": { @@ -6520,10 +6159,10 @@ "integrity": "sha1-ca5KiPD+77v1LR6mBPP7MV67YnQ=", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "split-string": "3.1.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" }, "dependencies": { "extend-shallow": { @@ -6532,7 +6171,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -6558,7 +6197,7 @@ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "requires": { - "shebang-regex": "1.0.0" + "shebang-regex": "^1.0.0" } }, "shebang-regex": { @@ -6585,14 +6224,14 @@ "integrity": "sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0=", "dev": true, "requires": { - "base": "0.11.2", - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "map-cache": "0.2.2", - "source-map": "0.5.7", - "source-map-resolve": "0.5.2", - "use": "3.1.1" + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" }, "dependencies": { "define-property": { @@ -6601,7 +6240,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -6610,7 +6249,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -6621,9 +6260,9 @@ "integrity": "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=", "dev": true, "requires": { - "define-property": "1.0.0", - "isobject": "3.0.1", - "snapdragon-util": "3.0.1" + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" }, "dependencies": { "define-property": { @@ -6632,7 +6271,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "is-accessor-descriptor": { @@ -6641,7 +6280,7 @@ "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -6650,7 +6289,7 @@ "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -6659,9 +6298,9 @@ "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, "kind-of": { @@ -6678,7 +6317,7 @@ "integrity": "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.2.0" } }, "sort-keys": { @@ -6687,7 +6326,7 @@ "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", "dev": true, "requires": { - "is-plain-obj": "1.1.0" + "is-plain-obj": "^1.0.0" } }, "source-list-map": { @@ -6708,11 +6347,11 @@ "integrity": "sha1-cuLMNAlVQ+Q7LGKyxMENSpBU8lk=", "dev": true, "requires": { - "atob": "2.1.2", - "decode-uri-component": "0.2.0", - "resolve-url": "0.2.1", - "source-map-url": "0.4.0", - "urix": "0.1.0" + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" } }, "source-map-support": { @@ -6721,7 +6360,7 @@ "integrity": "sha1-Aoam3ovkJkEzhZTpfM6nXwosWF8=", "dev": true, "requires": { - "source-map": "0.5.7" + "source-map": "^0.5.6" } }, "source-map-url": { @@ -6736,7 +6375,7 @@ "integrity": "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=", "dev": true, "requires": { - "extend-shallow": "3.0.2" + "extend-shallow": "^3.0.0" } }, "sprintf-js": { @@ -6751,7 +6390,7 @@ "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", "dev": true, "requires": { - "figgy-pudding": "3.5.1" + "figgy-pudding": "^3.5.1" } }, "static-extend": { @@ -6760,8 +6399,8 @@ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "dev": true, "requires": { - "define-property": "0.2.5", - "object-copy": "0.1.0" + "define-property": "^0.2.5", + "object-copy": "^0.1.0" }, "dependencies": { "define-property": { @@ -6770,7 +6409,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } } } @@ -6791,8 +6430,8 @@ "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "stream-shift": "1.0.0" + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" } }, "stream-http": { @@ -6801,11 +6440,11 @@ "integrity": "sha1-stJCRpKIpaJ+xP6JM6z2I95lFPw=", "dev": true, "requires": { - "builtin-status-codes": "3.0.0", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "to-arraybuffer": "1.0.1", - "xtend": "4.0.1" + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" } }, "stream-shift": { @@ -6826,8 +6465,8 @@ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" }, "dependencies": { "ansi-regex": { @@ -6842,7 +6481,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } } } @@ -6853,7 +6492,7 @@ "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "~5.1.0" } }, "strip-ansi": { @@ -6861,7 +6500,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-eof": { @@ -6876,8 +6515,8 @@ "integrity": "sha1-aMUuXrKvycqStidL4nfuWa6jqFI=", "dev": true, "requires": { - "loader-utils": "1.1.0", - "schema-utils": "0.4.5" + "loader-utils": "^1.1.0", + "schema-utils": "^0.4.5" } }, "supports-color": { @@ -6886,7 +6525,7 @@ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } }, "svgo": { @@ -6895,13 +6534,13 @@ "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=", "dev": true, "requires": { - "coa": "1.0.4", - "colors": "1.1.2", - "csso": "2.3.2", - "js-yaml": "3.7.0", - "mkdirp": "0.5.1", - "sax": "1.2.4", - "whet.extend": "0.9.9" + "coa": "~1.0.1", + "colors": "~1.1.2", + "csso": "~2.3.1", + "js-yaml": "~3.7.0", + "mkdirp": "~0.5.1", + "sax": "~1.2.1", + "whet.extend": "~0.9.9" } }, "symbol-observable": { @@ -6921,9 +6560,9 @@ "integrity": "sha512-ogyZye4DFqOtMzT92Y3Nxxw8OvXmL39HOALro4fc+EUYFFF9G/kk0znkvwMz6PPYgBtdKAodh3FPR70eugdaQA==", "dev": true, "requires": { - "commander": "2.17.1", - "source-map": "0.6.1", - "source-map-support": "0.5.9" + "commander": "~2.17.1", + "source-map": "~0.6.1", + "source-map-support": "~0.5.6" }, "dependencies": { "commander": { @@ -6944,8 +6583,8 @@ "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==", "dev": true, "requires": { - "buffer-from": "1.1.1", - "source-map": "0.6.1" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } } } @@ -6956,14 +6595,14 @@ "integrity": "sha512-QW7RACLS89RalHtLDb0s8+Iqcs/IAEw1rnVrV+mS7Gx1kgPG8o1g33JhAGDgc/CQ84hLsTW5WrAMdVysh692yg==", "dev": true, "requires": { - "cacache": "11.3.2", - "find-cache-dir": "2.0.0", - "schema-utils": "1.0.0", - "serialize-javascript": "1.6.0", - "source-map": "0.6.1", - "terser": "3.13.1", - "webpack-sources": "1.3.0", - "worker-farm": "1.6.0" + "cacache": "^11.0.2", + "find-cache-dir": "^2.0.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^1.4.0", + "source-map": "^0.6.1", + "terser": "^3.8.1", + "webpack-sources": "^1.1.0", + "worker-farm": "^1.5.2" }, "dependencies": { "find-cache-dir": { @@ -6972,9 +6611,9 @@ "integrity": "sha512-LDUY6V1Xs5eFskUVYtIwatojt6+9xC9Chnlk/jYOOvn3FAFfSaWddxahDGyNHh0b2dMXa6YW2m0tk8TdVaXHlA==", "dev": true, "requires": { - "commondir": "1.0.1", - "make-dir": "1.3.0", - "pkg-dir": "3.0.0" + "commondir": "^1.0.1", + "make-dir": "^1.0.0", + "pkg-dir": "^3.0.0" } }, "find-up": { @@ -6983,7 +6622,7 @@ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "locate-path": "3.0.0" + "locate-path": "^3.0.0" } }, "locate-path": { @@ -6992,8 +6631,8 @@ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "p-locate": "3.0.0", - "path-exists": "3.0.0" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" } }, "p-limit": { @@ -7002,7 +6641,7 @@ "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", "dev": true, "requires": { - "p-try": "2.0.0" + "p-try": "^2.0.0" } }, "p-locate": { @@ -7011,7 +6650,7 @@ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "p-limit": "2.1.0" + "p-limit": "^2.0.0" } }, "p-try": { @@ -7026,7 +6665,7 @@ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, "requires": { - "find-up": "3.0.0" + "find-up": "^3.0.0" } }, "schema-utils": { @@ -7035,9 +6674,9 @@ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dev": true, "requires": { - "ajv": "6.5.2", - "ajv-errors": "1.0.1", - "ajv-keywords": "3.2.0" + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" } }, "source-map": { @@ -7054,8 +6693,8 @@ "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "requires": { - "readable-stream": "2.3.6", - "xtend": "4.0.1" + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" } }, "timers-browserify": { @@ -7064,7 +6703,7 @@ "integrity": "sha1-HSjj0qrfHVpZlsTp+VYBzQU0gK4=", "dev": true, "requires": { - "setimmediate": "1.0.5" + "setimmediate": "^1.0.4" } }, "tiny-invariant": { @@ -7095,7 +6734,7 @@ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "to-regex": { @@ -7104,10 +6743,10 @@ "integrity": "sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4=", "dev": true, "requires": { - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "regex-not": "1.0.2", - "safe-regex": "1.1.0" + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" } }, "to-regex-range": { @@ -7116,16 +6755,10 @@ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "requires": { - "is-number": "3.0.0", - "repeat-string": "1.6.1" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" } }, - "toposort": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.7.tgz", - "integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=", - "dev": true - }, "trim-right": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", @@ -7155,40 +6788,16 @@ "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.18.tgz", "integrity": "sha1-p7/ZL1bt+xFwg7aeMdKqiILUse0=" }, - "uglify-js": { - "version": "3.4.9", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", - "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", - "dev": true, - "requires": { - "commander": "2.17.1", - "source-map": "0.6.1" - }, - "dependencies": { - "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, "union-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", "dev": true, "requires": { - "arr-union": "3.1.0", - "get-value": "2.0.6", - "is-extendable": "0.1.1", - "set-value": "0.4.3" + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" }, "dependencies": { "extend-shallow": { @@ -7197,7 +6806,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "set-value": { @@ -7206,10 +6815,10 @@ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "to-object-path": "0.3.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" } } } @@ -7232,7 +6841,7 @@ "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", "dev": true, "requires": { - "unique-slug": "2.0.1" + "unique-slug": "^2.0.0" } }, "unique-slug": { @@ -7241,7 +6850,7 @@ "integrity": "sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==", "dev": true, "requires": { - "imurmurhash": "0.1.4" + "imurmurhash": "^0.1.4" } }, "universalify": { @@ -7255,8 +6864,8 @@ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "dev": true, "requires": { - "has-value": "0.3.1", - "isobject": "3.0.1" + "has-value": "^0.3.1", + "isobject": "^3.0.0" }, "dependencies": { "has-value": { @@ -7265,9 +6874,9 @@ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "dev": true, "requires": { - "get-value": "2.0.6", - "has-values": "0.1.4", - "isobject": "2.1.0" + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" }, "dependencies": { "isobject": { @@ -7295,19 +6904,13 @@ "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", "dev": true }, - "upper-case": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", - "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", - "dev": true - }, "uri-js": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", "integrity": "sha1-lMVA4f93KVbiKZUHwBCupsiDjrA=", "dev": true, "requires": { - "punycode": "2.1.1" + "punycode": "^2.1.0" } }, "urix": { @@ -7361,22 +6964,6 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, - "util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", - "dev": true, - "requires": { - "define-properties": "1.1.3", - "object.getownpropertydescriptors": "2.0.3" - } - }, - "utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", - "dev": true - }, "v8-compile-cache": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.2.tgz", @@ -7389,7 +6976,7 @@ "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", "dev": true, "requires": { - "user-home": "1.1.1" + "user-home": "^1.1.1" } }, "value-equal": { @@ -7417,7 +7004,7 @@ "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.1.tgz", "integrity": "sha512-rAVtTNZw+cQPjvGp1ox0XC5Q2IBFyqoqh+QII4J/oguyu83Bax1apbo2eqB8bHRS+fqYUBagys6lqUoVwKSmXQ==", "requires": { - "loose-envify": "1.3.1" + "loose-envify": "^1.0.0" } }, "watchpack": { @@ -7426,9 +7013,9 @@ "integrity": "sha1-S8EsLr6KonenHx0/FNaFx7RGzQA=", "dev": true, "requires": { - "chokidar": "2.0.4", - "graceful-fs": "4.1.11", - "neo-async": "2.6.0" + "chokidar": "^2.0.2", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" } }, "webpack": { @@ -7441,26 +7028,26 @@ "@webassemblyjs/helper-module-context": "1.7.11", "@webassemblyjs/wasm-edit": "1.7.11", "@webassemblyjs/wasm-parser": "1.7.11", - "acorn": "5.7.3", - "acorn-dynamic-import": "3.0.0", - "ajv": "6.5.2", - "ajv-keywords": "3.2.0", - "chrome-trace-event": "1.0.0", - "enhanced-resolve": "4.1.0", - "eslint-scope": "4.0.0", - "json-parse-better-errors": "1.0.2", - "loader-runner": "2.3.1", - "loader-utils": "1.1.0", - "memory-fs": "0.4.1", - "micromatch": "3.1.10", - "mkdirp": "0.5.1", - "neo-async": "2.6.0", - "node-libs-browser": "2.1.0", - "schema-utils": "0.4.5", - "tapable": "1.1.1", - "terser-webpack-plugin": "1.2.0", - "watchpack": "1.6.0", - "webpack-sources": "1.3.0" + "acorn": "^5.6.2", + "acorn-dynamic-import": "^3.0.0", + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0", + "chrome-trace-event": "^1.0.0", + "enhanced-resolve": "^4.1.0", + "eslint-scope": "^4.0.0", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.3.0", + "loader-utils": "^1.1.0", + "memory-fs": "~0.4.1", + "micromatch": "^3.1.8", + "mkdirp": "~0.5.0", + "neo-async": "^2.5.0", + "node-libs-browser": "^2.0.0", + "schema-utils": "^0.4.4", + "tapable": "^1.1.0", + "terser-webpack-plugin": "^1.1.0", + "watchpack": "^1.5.0", + "webpack-sources": "^1.3.0" } }, "webpack-cli": { @@ -7469,16 +7056,16 @@ "integrity": "sha512-Cnqo7CeqeSvC6PTdts+dywNi5CRlIPbLx1AoUPK2T6vC1YAugMG3IOoO9DmEscd+Dghw7uRlnzV1KwOe5IrtgQ==", "dev": true, "requires": { - "chalk": "2.4.1", - "cross-spawn": "6.0.5", - "enhanced-resolve": "4.1.0", - "global-modules-path": "2.3.1", - "import-local": "2.0.0", - "interpret": "1.1.0", - "loader-utils": "1.1.0", - "supports-color": "5.5.0", - "v8-compile-cache": "2.0.2", - "yargs": "12.0.5" + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "enhanced-resolve": "^4.1.0", + "global-modules-path": "^2.3.0", + "import-local": "^2.0.0", + "interpret": "^1.1.0", + "loader-utils": "^1.1.0", + "supports-color": "^5.5.0", + "v8-compile-cache": "^2.0.2", + "yargs": "^12.0.2" }, "dependencies": { "ansi-styles": { @@ -7487,7 +7074,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "1.9.2" + "color-convert": "^1.9.0" } }, "chalk": { @@ -7496,9 +7083,9 @@ "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } } } @@ -7509,8 +7096,8 @@ "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==", "dev": true, "requires": { - "source-list-map": "2.0.0", - "source-map": "0.6.1" + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" }, "dependencies": { "source-map": { @@ -7538,7 +7125,7 @@ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } }, "which-module": { @@ -7552,12 +7139,12 @@ "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-2.1.3.tgz", "integrity": "sha1-qBYZRtP4W4zCWQ3TpRnVPUD/igY=", "requires": { - "chalk": "1.1.3", - "fs-extra": "3.0.1", - "glob": "7.1.2", - "lodash.template": "4.4.0", - "mkdirp": "0.5.1", - "workbox-sw": "2.1.3" + "chalk": "^1.1.3", + "fs-extra": "^3.0.1", + "glob": "^7.1.1", + "lodash.template": "^4.4.0", + "mkdirp": "^0.5.1", + "workbox-sw": "^2.1.3" } }, "workbox-sw": { @@ -7570,7 +7157,7 @@ "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-2.1.3.tgz", "integrity": "sha1-5N6UgYzO9vZnsfX0GM5aEGHajTM=", "requires": { - "workbox-build": "2.1.3" + "workbox-build": "^2.1.3" } }, "worker-farm": { @@ -7579,7 +7166,7 @@ "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", "dev": true, "requires": { - "errno": "0.1.7" + "errno": "~0.1.7" } }, "wrap-ansi": { @@ -7588,8 +7175,8 @@ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" }, "dependencies": { "is-fullwidth-code-point": { @@ -7598,7 +7185,7 @@ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "string-width": { @@ -7607,9 +7194,9 @@ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } } } @@ -7643,18 +7230,18 @@ "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", "dev": true, "requires": { - "cliui": "4.1.0", - "decamelize": "1.2.0", - "find-up": "3.0.0", - "get-caller-file": "1.0.3", - "os-locale": "3.0.1", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "4.0.0", - "yargs-parser": "11.1.1" + "cliui": "^4.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^11.1.1" }, "dependencies": { "find-up": { @@ -7663,7 +7250,7 @@ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "locate-path": "3.0.0" + "locate-path": "^3.0.0" } }, "locate-path": { @@ -7672,8 +7259,8 @@ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "p-locate": "3.0.0", - "path-exists": "3.0.0" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" } }, "p-limit": { @@ -7682,7 +7269,7 @@ "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", "dev": true, "requires": { - "p-try": "2.0.0" + "p-try": "^2.0.0" } }, "p-locate": { @@ -7691,7 +7278,7 @@ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "p-limit": "2.1.0" + "p-limit": "^2.0.0" } }, "p-try": { @@ -7708,8 +7295,8 @@ "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", "dev": true, "requires": { - "camelcase": "5.0.0", - "decamelize": "1.2.0" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } } } diff --git a/package.json b/package.json index d7f47515..892461d8 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,6 @@ "chunks-2-json-webpack-plugin": "0.0.3", "css-loader": "^0.28.11", "es6-set-and-map": "^1.0.5", - "html-webpack-plugin": "^3.2.0", "less-loader": "^4.1.0", "rimraf": "^2.6.3", "style-loader": "^0.21.0", From 3dd1b68dcd16fcaef5784bd33de1bb49d5a3451f Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Sat, 26 Jan 2019 17:40:24 +0100 Subject: [PATCH 80/96] Cleanup scratchpad --- scratchpad.js | 1 - 1 file changed, 1 deletion(-) delete mode 100644 scratchpad.js diff --git a/scratchpad.js b/scratchpad.js deleted file mode 100644 index e029acbc..00000000 --- a/scratchpad.js +++ /dev/null @@ -1 +0,0 @@ -var React4xp = typeof React4xp === "object" ? React4xp : {}; React4xp["site/parts/simple-reactive/simple-reactive"] =/******/ (function(modules) { // webpackBootstrap/******/ // install a JSONP callback for chunk loading/******/ function webpackJsonpCallback(data) {/******/ var chunkIds = data[0];/******/ var moreModules = data[1];/******/ var executeModules = data[2];/******//******/ // add "moreModules" to the modules object,/******/ // then flag all "chunkIds" as loaded and fire callback/******/ var moduleId, chunkId, i = 0, resolves = [];/******/ for(;i < chunkIds.length; i++) {/******/ chunkId = chunkIds[i];/******/ if(installedChunks[chunkId]) {/******/ resolves.push(installedChunks[chunkId][0]);/******/ }/******/ installedChunks[chunkId] = 0;/******/ }/******/ for(moduleId in moreModules) {/******/ if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {/******/ modules[moduleId] = moreModules[moduleId];/******/ }/******/ }/******/ if(parentJsonpFunction) parentJsonpFunction(data);/******//******/ while(resolves.length) {/******/ resolves.shift()();/******/ }/******//******/ // add entry modules from loaded chunk to deferred list/******/ deferredModules.push.apply(deferredModules, executeModules || []);/******//******/ // run deferred modules when all chunks ready/******/ return checkDeferredModules();/******/ };/******/ function checkDeferredModules() {/******/ var result;/******/ for(var i = 0; i < deferredModules.length; i++) {/******/ var deferredModule = deferredModules[i];/******/ var fulfilled = true;/******/ for(var j = 1; j < deferredModule.length; j++) {/******/ var depId = deferredModule[j];/******/ if(installedChunks[depId] !== 0) fulfilled = false;/******/ }/******/ if(fulfilled) {/******/ deferredModules.splice(i--, 1);/******/ result = __webpack_require__(__webpack_require__.s = deferredModule[0]);/******/ }/******/ }/******/ return result;/******/ }/******//******/ // The module cache/******/ var installedModules = {};/******//******/ // object to store loaded and loading chunks/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched/******/ // Promise = chunk loading, 0 = chunk loaded/******/ var installedChunks = {/******/ "site/parts/simple-reactive/simple-reactive": 0/******/ };/******//******/ var deferredModules = [];/******//******/ // The require function/******/ function __webpack_require__(moduleId) {/******//******/ // Check if module is in cache/******/ if(installedModules[moduleId]) {/******/ return installedModules[moduleId].exports;/******/ }/******/ // Create a new module (and put it into the cache)/******/ var module = installedModules[moduleId] = {/******/ i: moduleId,/******/ l: false,/******/ exports: {}/******/ };/******//******/ // Execute the module function/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);/******//******/ // Flag the module as loaded/******/ module.l = true;/******//******/ // Return the exports of the module/******/ return module.exports;/******/ }/******//******//******/ // expose the modules object (__webpack_modules__)/******/ __webpack_require__.m = modules;/******//******/ // expose the module cache/******/ __webpack_require__.c = installedModules;/******//******/ // define getter function for harmony exports/******/ __webpack_require__.d = function(exports, name, getter) {/******/ if(!__webpack_require__.o(exports, name)) {/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });/******/ }/******/ };/******//******/ // define __esModule on exports/******/ __webpack_require__.r = function(exports) {/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });/******/ }/******/ Object.defineProperty(exports, '__esModule', { value: true });/******/ };/******//******/ // create a fake namespace object/******/ // mode & 1: value is a module id, require it/******/ // mode & 2: merge all properties of value into the ns/******/ // mode & 4: return value when already ns object/******/ // mode & 8|1: behave like require/******/ __webpack_require__.t = function(value, mode) {/******/ if(mode & 1) value = __webpack_require__(value);/******/ if(mode & 8) return value;/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;/******/ var ns = Object.create(null);/******/ __webpack_require__.r(ns);/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));/******/ return ns;/******/ };/******//******/ // getDefaultExport function for compatibility with non-harmony modules/******/ __webpack_require__.n = function(module) {/******/ var getter = module && module.__esModule ?/******/ function getDefault() { return module['default']; } :/******/ function getModuleExports() { return module; };/******/ __webpack_require__.d(getter, 'a', getter);/******/ return getter;/******/ };/******//******/ // Object.prototype.hasOwnProperty.call/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };/******//******/ // __webpack_public_path__/******/ __webpack_require__.p = "";/******//******/ var jsonpArray = window["webpackJsonp"] = window["webpackJsonp"] || [];/******/ var oldJsonpFunction = jsonpArray.push.bind(jsonpArray);/******/ jsonpArray.push = webpackJsonpCallback;/******/ jsonpArray = jsonpArray.slice();/******/ for(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);/******/ var parentJsonpFunction = oldJsonpFunction;/******//******//******/ // add entry module to deferred list/******/ deferredModules.push(["./src/main/resources/site/parts/simple-reactive/simple-reactive.jsx","vendors"]);/******/ // run deferred modules when ready/******/ return checkDeferredModules();/******/ })/************************************************************************//******/ ({/***/ "./src/main/resources/site/parts/simple-reactive/simple-reactive.jsx":/*!***************************************************************************!*\ !*** ./src/main/resources/site/parts/simple-reactive/simple-reactive.jsx ***! \***************************************************************************//*! no static exports found *//***/ (function(module, exports, __webpack_require__) {"use strict";Object.defineProperty(exports, "__esModule", { value: true});var _react = __webpack_require__(/*! react */ "./node_modules/react/index.js");var _react2 = _interopRequireDefault(_react);function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }exports.default = function (props) { return _react2.default.createElement( 'h1', null, 'Dette er en test ', props.insertedMessage );};//React4xp.render(Test);//exports.React4xp["react4xp/site/parts/simple-reactive/simple-reactive"]/***/ })/******/ });//# sourceMappingURL=simple-reactive.js.map From 732385003837ce0c6f95492f0ce449f9ce75c9e7 Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Sat, 26 Jan 2019 17:41:28 +0100 Subject: [PATCH 81/96] Cleanup: big comment --- .../enonic/xp/react4xp/ssr/EngineFactory.java | 103 ------------------ 1 file changed, 103 deletions(-) diff --git a/src/main/java/com/enonic/xp/react4xp/ssr/EngineFactory.java b/src/main/java/com/enonic/xp/react4xp/ssr/EngineFactory.java index 0f5f55b8..d586963b 100644 --- a/src/main/java/com/enonic/xp/react4xp/ssr/EngineFactory.java +++ b/src/main/java/com/enonic/xp/react4xp/ssr/EngineFactory.java @@ -102,106 +102,3 @@ public static NashornScriptEngine getEngine() throws IOException, ScriptExceptio return engineInstance; } } - - - - - - - - - - - - - /* For reference: the following is now replaced by transpiled code, read from transpiled file: _nashornPolyfills_.js - - - - // Polyfilling setTimeout() and friends: - // https://gist.github.com/josmardias/20493bd205e24e31c0a406472330515a - // - public final static String POLYFILL_TIMERS = "(function(context) {\n" + - " 'use strict';\n" + - "\n" + - " var Timer = Java.type('java.util.Timer');\n" + - " var Phaser = Java.type('java.util.concurrent.Phaser');\n" + - "\n" + - " var timer = new Timer('jsEventLoop', false);\n" + - " var phaser = new Phaser();\n" + - "\n" + - " var timeoutStack = 0;\n" + - " function pushTimeout() {\n" + - " timeoutStack++;\n" + - " }\n" + - " function popTimeout() {\n" + - " timeoutStack--;\n" + - " if (timeoutStack > 0) {\n" + - " return;\n" + - " }\n" + - " timer.cancel();\n" + - " phaser.forceTermination();\n" + - " }\n" + - "\n" + - " var onTaskFinished = function() {\n" + - " phaser.arriveAndDeregister();\n" + - " };\n" + - "\n" + - " context.setTimeout = function(fn, millis) {\n" + - " var args = [].slice.call(arguments, 2, arguments.length);\n" + - "\n" + - " var phase = phaser.register();\n" + - " var canceled = false;\n" + - " timer.schedule(function() {\n" + - " if (canceled) {\n" + - " return;\n" + - " }\n" + - "\n" + - " try {\n" + - " fn.apply(context, args);\n" + - " } catch (e) {\n" + - " print(e);\n" + - " } finally {\n" + - " onTaskFinished();\n" + - " popTimeout();\n" + - " }\n" + - " }, millis);\n" + - "\n" + - " pushTimeout();\n" + - "\n" + - " return function() {\n" + - " onTaskFinished();\n" + - " canceled = true;\n" + - " popTimeout();\n" + - " };\n" + - " };\n" + - "\n" + - " context.clearTimeout = function(cancel) {\n" + - " cancel();\n" + - " };\n" + - "\n" + - " context.setInterval = function(fn, delay) {\n" + - " var args = [].slice.call(arguments, 2, arguments.length);\n" + - "\n" + - " var cancel = null;\n" + - "\n" + - " var loop = function() {\n" + - " cancel = context.setTimeout(loop, delay);\n" + - " fn.apply(context, args);\n" + - " };\n" + - "\n" + - " cancel = context.setTimeout(loop, delay);\n" + - " return function() {\n" + - " cancel();\n" + - " };\n" + - " };\n" + - "\n" + - " context.clearInterval = function(cancel) {\n" + - " cancel();\n" + - " };\n" + - "\n" + - "})(this);"; - -//public static final String POLYFILL_SET_AND_MAP = "!function(t){var n={};function e(i){if(n[i])return n[i].exports;var r=n[i]={i:i,l:!1,exports:{}};return t[i].call(r.exports,r,r.exports,e),r.l=!0,r.exports}e.m=t,e.c=n,e.d=function(t,n,i){e.o(t,n)||Object.defineProperty(t,n,{enumerable:!0,get:i})},e.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},e.t=function(t,n){if(1&n&&(t=e(t)),8&n)return t;if(4&n&&\"object\"==typeof t&&t&&t.__esModule)return t;var i=Object.create(null);if(e.r(i),Object.defineProperty(i,\"default\",{enumerable:!0,value:t}),2&n&&\"string\"!=typeof t)for(var r in t)e.d(i,r,function(n){return t[n]}.bind(null,r));return i},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,\"a\",n),n},e.o=function(t,n){return Object.prototype.hasOwnProperty.call(t,n)},e.p=\"\",e(e.s=22)}({0:function(t,n){var e;e=function(){return this}();try{e=e||new Function(\"return this\")()}catch(t){\"object\"==typeof window&&(e=window)}t.exports=e},22:function(t,n,e){\"use strict\";(function(t){var n=e(6).map,i=e(6).set;!function(t){t.Map=n,t.Set=i}(\"undefined\"!=typeof window?window:t)}).call(this,e(0))},6:function(t,n,e){t.exports=function(){\"use strict\";var t,n={},e=\"undefined\"!=typeof Symbol,i=Array.prototype,r=(t={}.hasOwnProperty,function(n,e){return!!e&&t.call(n,e)}),u=Array.isArray;function s(t){return null!=t&&(\"function\"==typeof t||\"object\"==typeof t)}function o(t){return!isNaN(t)&&t+0===t}var l,c,a,h=(c=Function.prototype,function(t){return\"function\"==typeof t&&t!=c});function f(t){if(!s(t)||h(t)||null!=(n=t)&&n===n.window)return!1;var n,e=!!t&&\"length\"in t&&t.length;return u(t)||0===e||o(e)&&e>0&&e-1 in t}function p(t,n,e){var i,r,u=[],s=t.length;if(n=(n=n||0)>=0?n:Math.max(0,s+n),(e=isNaN(e)?s:Math.min(e,s))<0&&(e=s+e),(r=e-n)>0)for(u=new Array(r),i=0;i Date: Sat, 26 Jan 2019 19:11:50 +0100 Subject: [PATCH 82/96] webpack.config.react4xp.js: wrapped getEntries routine in a function, to encapsulate related/interdependent functionality. --- webpack.config.constants.js | 6 +++--- webpack.config.react4xp.js | 42 ++++++++++++++++++++++++------------- 2 files changed, 31 insertions(+), 17 deletions(-) diff --git a/webpack.config.constants.js b/webpack.config.constants.js index 469e6ca4..724d0cae 100644 --- a/webpack.config.constants.js +++ b/webpack.config.constants.js @@ -3,7 +3,7 @@ const fs = require('fs'); const SRC_MAIN = path.join(__dirname, 'src', 'main'); const MAIN = path.join('build', 'resources', 'main'); -const BUILD = path.join(__dirname, MAIN); +const BUILD_MAIN = path.join(__dirname, MAIN); const SITE = 'site'; const R4X_SUB_ENTRIES = '_components'; // Special-case subdirectory under /react4xp/. All files under this will be their own chunk, for dynamic, on-demand asset loading of top-level components, which in turn uses shared components chunked under all other subdirectories. TODO: WHAT ABOUT FILES IN ROOT /R4X/ ? @@ -11,7 +11,7 @@ const R4X_HOME = 'react4xp'; const R4X_TARGETSUBDIR = R4X_HOME; const SRC_R4X = path.join(SRC_MAIN, R4X_HOME); -const BUILD_R4X = path.join(BUILD, R4X_TARGETSUBDIR); +const BUILD_R4X = path.join(BUILD_MAIN, R4X_TARGETSUBDIR); const RELATIVE_BUILD_R4X = path.join(MAIN, R4X_TARGETSUBDIR); const SRC_SITE = path.join(SRC_MAIN, "resources", SITE); @@ -50,7 +50,7 @@ module.exports = { SITE, SRC_MAIN, SRC_R4X, SRC_SITE, SRC_R4X_ENTRIES, R4X_TARGETSUBDIR, R4X_ENTRIES, R4X_SUB_ENTRIES, R4X_HOME, - BUILD, BUILD_R4X, BUILD_ENV, RELATIVE_BUILD_R4X, + BUILD_MAIN, BUILD_R4X, BUILD_ENV, RELATIVE_BUILD_R4X, LIBRARY_NAME, EXTERNALS }; diff --git a/webpack.config.react4xp.js b/webpack.config.react4xp.js index 59ed3bc2..37f3a1d6 100644 --- a/webpack.config.react4xp.js +++ b/webpack.config.react4xp.js @@ -25,24 +25,38 @@ const { // Entries are the non-dependency output files, i.e. react components and other js files that should be directly // available and runnable to both the browser and the nashorn engine. -const entries = Object.assign({}, - getEntries(SRC_R4X_ENTRIES, ['jsx', 'js', 'es6'], ""), - getEntries(SRC_SITE, ['jsx'], path.join(SITE)) // <-- Note: this is where top-level react components are included, in the enonic site structure. Only JSX files are included: in order for these to be transpiled here (and thereby become a part of the chunk structure for these static assets) and not by the transpilation of "pure XP" source code files (which should be transpiled separately, outside of the static-asset/chunk structure), take care to separate them! Here, this is done by including only .JSX files here, reserving that extension for toplevel react components, and excluding .JSX files in the babelSite task in build.gradle. Note that if the top-level components import .es6 dependencies, that separation must be done more thoroughly. -); - -const entryList = Object.keys(entries); -const entryFile = path.join(BUILD_R4X, 'entries.json'); -if (!fs.existsSync(BUILD_R4X)){ - fs.mkdirSync(BUILD_R4X); -} -fs.writeFileSync(entryFile, JSON.stringify(entryList)); -console.log("React4xp entries (aka component names / jsxPath) listed in: " + entryFile); +// This function builds the entries AND entries.json, which lists the first-level components that shouldn't be counted +// as general dependencies. +const getEntries = () => { + const entries = Object.assign({}, + getEntriesFromReact4xpSubfolder(SRC_R4X_ENTRIES, ['jsx', 'js', 'es6'], ""), + getEntriesFromReact4xpSubfolder(SRC_SITE, ['jsx'], SITE) // <-- Note: this is where top-level react components are included, in the enonic site structure. Only JSX files are included: in order for these to be transpiled here (and thereby become a part of the chunk structure for these static assets) and not by the transpilation of "pure XP" source code files (which should be transpiled separately, outside of the static-asset/chunk structure), take care to separate them! Here, this is done by including only .JSX files here, reserving that extension for toplevel react components, and excluding .JSX files in the babelSite task in build.gradle. Note that if the top-level components import .es6 dependencies, that separation must be done more thoroughly. + ); + const entryList = Object.keys(entries); + const entryFile = path.join(BUILD_R4X, 'entries.json'); + + // TODO: What about windows slash? + const slash = "/"; + const dirs = BUILD_R4X.split(slash); + let accum = ""; + + dirs.forEach(dir => { + accum += dir + slash; + if (!fs.existsSync(accum)){ + console.log("Create: " + accum); + fs.mkdirSync(accum); + } + }); + fs.writeFileSync(entryFile, JSON.stringify(entryList)); + console.log("React4xp entries (aka component names / jsxPath) listed in: " + entryFile); + return entries; +}; module.exports = { mode: BUILD_ENV, - entry: entries, + entry: getEntries(), output: { path: BUILD_R4X, // <-- Sets the base url for plugins and other target dirs. Note the use of {{assetUrl}} in index.html (or index.ejs). @@ -88,7 +102,7 @@ module.exports = { }; // Builds entries from files found under a directory, for selected file extensions, for bein transpiled out to a target path -function getEntries(fullDirPath, extensions, targetPath) { +function getEntriesFromReact4xpSubfolder(fullDirPath, extensions, targetPath) { targetPath = (targetPath || "").trim(); if (targetPath.startsWith("/")) { targetPath = targetPath.substring(1); From 68c00a8618e98415c19ee55872829a491e5952eb Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Sat, 26 Jan 2019 19:15:36 +0100 Subject: [PATCH 83/96] Making the entry list file prettier, since it can be used to look up available top-level components. --- webpack.config.react4xp.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/webpack.config.react4xp.js b/webpack.config.react4xp.js index 37f3a1d6..51999e44 100644 --- a/webpack.config.react4xp.js +++ b/webpack.config.react4xp.js @@ -47,7 +47,7 @@ const getEntries = () => { fs.mkdirSync(accum); } }); - fs.writeFileSync(entryFile, JSON.stringify(entryList)); + fs.writeFileSync(entryFile, JSON.stringify(entryList, null, 2)); console.log("React4xp entries (aka component names / jsxPath) listed in: " + entryFile); return entries; }; @@ -160,7 +160,6 @@ function getCacheGroups(priorities) { //console.log("Chunkdirs: " + JSON.stringify(chunkDirs, null, 4)); chunkDirs.forEach(dirr => { - console.log("Bundled chunk, add to chunks.json.ejs before building: " + dirr); chunks[dirr] = { name: dirr, enforce: true, From f17996c6b22616efda4884badd0471f81a389d17 Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Sat, 26 Jan 2019 20:24:30 +0100 Subject: [PATCH 84/96] Started working in the README.md --- README.md | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 1e973dbb..501f0cb7 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,41 @@ # React project starter for Enonic XP -This Starter will help you build an Enonic application with React and Redux. +Easy React in XP! + +This starter abstracts away the complexity needed for React to play nice with Enonic XP. The aim is to give developers a low threshold to get started and React components running, while also exposing some flexible functionality to allow some common use cases. + + +## Technical overview for changes and advanced use: + +Most of the heavy lifting is done at build time, most importantly by [webpack](https://webpack.js.org/). It's automated and currently set up around a particular file and directory structure: + +Webpack detects JSX component entry files under XP's own `src/main/resources/site/` structure, and transpiles them to es5 under `build/resources/main/react4xp` (and `react4xp/` in the deployed JAR). The same transpiled code is run by both the browser (client side rendering) and by nashorn (server side rendering). + +Webpack uses [code splitting](https://webpack.js.org/guides/code-splitting/) and layers the transpiled output. + - **entries**: minimal JS files that are one top-level React component (or "app") each. These are available to and runnable by the browser and importing other components. + - **chunks**: second-level bundles/libraries of shared React (or other) components, importable by the entries. + - **externals**: third-level and third-party libraries such as React itself, needed both at client and server side. At this level might also be a **vendors** chunk: the leftover, non-externals common deplendencies from node_modules. + +This is done for performance by [client-side HTTP caching](https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/http-caching): bundling frequently used common dependencies into one, or a few, files that can be loaded client-side ideally just once, and be cached there for fast responsive pages (no need for PWA caching). Everything except the entries get a content-dependent hash added to the file name, so it only changes on actual updates to the dependencies. These hashes are exported by webpack to `chunks.*.json` files, which are used by XP to resolve the dependency file names. There's also a built `entries.json` file, excluding top-level components and ensuring that only dependency files are resolved for hashed names. + +### Rendering a JSX component: +An XP controller (e.g. part or page) can include a react component entry by using the + +blablabla + +either by the entry path (see the built `entries.json` file under `build/resources/main/react4xp/`), or let the react4xp XP library (`lib/enonic/react4xp`) extrapolate it from the XP component object, for simplicity. The library does the main work on the backend. The rendered react component can then either be inserted into a container with a particular ID, if an HTML body (e.g. a view) already exists, or it will have a bare-bone view generated for it, and be inserted there. + +Client-side rendering: The lib/enonic/react4xp library has some client-oriented rendering methods, in general what they do is to add the necessary URLs for the component entry file and its dependency chunks (which are fetched through the services/react4xp service, in order to control reponse headers and client-side caching) to the pageContributions, and generates/adds a minimal inline script to trigger the component rendering in the browser, by wrapping it in a frontend-rendering script (generally referenced as "core" in the code). + +Server-side rendering: similarly, lib/enonic/react4xp has some serverside-oriented rendering methods. These pass the transpiled component to some java code that runs the component in nashorn. The nashorn is pre-polyfilled using some other pre-transpiled code. Also, each specific component is stored in the nashorn engine by name (the name is the component path) on first access, as a function that takes props as argument. This way, the components are slow on the first rendering (around 1 second in the test cases) but much faster on repeated access, even with different props (2 - 30 ms). + +Some other java code, HTMLInserter, is responsible for inserting html into other html. This is used for adding a container element to an existing body if it's missing a maching-ID target container, and to insert a rendered component into a target container in a preexisting body. + +Errors on serverside running are logged thoroughly for developers, and a minimal error message is returned as HTML for visible output. On errors, that component-function is cleared from the engine's component cache. + +Easiest use: let controllers use the general .render method in the react4xp library. It will use the request object to pick the rendering method: server-side for static views in content studio's edit mode, and active client-side rendering for preview and live mode. See the counter part. + +Other features: + +Detection of JSX source files under the src/main/react4xpfolder, for common components, and component entries that shouldn't belong to a particular XP part/page. This approach is untested and not focused on, but should allow pure-app use, a la the way things are in starter-react right now. +Automatic and developer-controllable chunking of developer-added code under src/main/react4xp: if a JSX file is found under src/main/react4xp/_components or below, it will keep that relative path and be transpiled to an entry component. All other subfolders than _component under src/main/react4xp will be collected to chunks of their own, where the chunk name will be the same as the subfolder. From 44ce968dc3f161c4fc234371abd8c77b33eb3994 Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Sun, 27 Jan 2019 16:20:00 +0100 Subject: [PATCH 85/96] Better method documentation in the react4xp lib. --- .../resources/lib/enonic/react4xp/index.es6 | 82 +++++++++++++------ 1 file changed, 55 insertions(+), 27 deletions(-) diff --git a/src/main/resources/lib/enonic/react4xp/index.es6 b/src/main/resources/lib/enonic/react4xp/index.es6 index 2ddfed0a..cdab99fb 100644 --- a/src/main/resources/lib/enonic/react4xp/index.es6 +++ b/src/main/resources/lib/enonic/react4xp/index.es6 @@ -133,17 +133,14 @@ const mergePageContributions = (incomingPgContrib, newPgContrib) => { class React4xp { /** Mandatory constructor initParam, one of two options (overloaded function): - * @param Component {Object} The portal.getComponent() object of the Enonic XP component (currently page or part - * only) that the react component belongs to. XP and react components are found in the same folder (and the component - * object is used to extrapolate the resource path - jsxPath). + * @param component {Object} If initParam is an object: the portal.getComponent() object of the Enonic + * XP component (currently page or part) that the react component belongs to. XP and react components are found + * in the same folder (and the component object is used to extrapolate the resource path - jsxPath). * - * @param JsxPath {String} A full path to a top-level component react component, - * relative to the folder where the transpiled (JS) react components are found. - * - * Corresponds to component name, available when client-rendering as a prefixed URL which - * returns a JS script that, when run, exposes the component function as React4xp[jsxPath].default to the client. - * - * That component root folder is (currently) build/resources/main/react4xp/ , or in the JAR: react4xp/ . + * @param jsxPath {String} If initParam is a string: path to react component entry, + * relative to the folder where the transpiled (JS) react components are found. Overview of available entry + * paths is built to: build/resources/main/react4xp/entries.json. + * Relative to component root folder (currently) build/resources/main/react4xp/ , or in the JAR: react4xp/ . * JsxPath can also be extrapolated from the source (untranspiled JSX) component this way: * - Its path under src/main/react4xp/_components/ * - Or under src/main/resources/site (in which case jsxPath will start with "site/"). @@ -155,7 +152,7 @@ class React4xp { if (typeof initParam === "object") { if (!initParam || !initParam.descriptor || !initParam.type) { - throw Error(`Can't initialize Reac4xp component with initParm = ${JSON.stringify(initParam, null, 2)}. Doesn't seem to be a valid XP component object - missing type or descriptor?`); + throw Error(`Can't initialize Reac4xp component with initParm = ${JSON.stringify(initParam)}. Doesn't seem to be a valid XP component object - missing type or descriptor?`); } this.component = initParam; const compName = this.component.descriptor.split(":")[1]; @@ -167,11 +164,11 @@ class React4xp { this.react4xpId = null; this.jsxPath = initParam.trim(); if (this.jsxPath === "") { - throw Error(`Can't initialize Reac4xp component with initParm = ${JSON.stringify(initParam, null, 2)}. XP component object or jsxPath string only, please.`); + throw Error(`Can't initialize Reac4xp component with initParm = ${JSON.stringify(initParam)}. XP component object or jsxPath string only, please.`); } } else { - throw Error(`Can't initialize Reac4xp component with initParm = ${JSON.stringify(initParam, null, 2)}. XP component object or jsxPath string only, please.`); + throw Error(`Can't initialize Reac4xp component with initParm = ${JSON.stringify(initParam)}. XP component object or jsxPath string only, please.`); } } @@ -179,8 +176,14 @@ class React4xp { /** Optional initializer: returns a React4xp component instance initialized from a single set of parameters instead of - * the class approach. - * TODO: Document the params, similar to the class methods. + * the class approach. + * @param params {object} must include EITHER jsxPath or component! All other parameters are optional: + * - component {object} XP component object (used to extrapolate component part, sufficient if JSX entry file is in the same folder and has the same name). + * - jsxPath {string} path to react component entry, see available paths in build/main/resources/react4xp/entries.json + * - jsxFileName {string} for using a jsx entry in a XP component folder, but with a different file name than the XP component itself. No file extension. + * - props {object} react props sent in to the component + * - id {string} sets the target container element id. If this matches an ID in an input body, the react component will be rendered there. If not, a container with this ID will be added. + * - uniqueId {boolean|string} If set, ensures that the ID is unique. If id is set (previous param), a random integer will be postfixed to it. If uniqueId is a string, this is the prefix before the random postfix. If the id param is used in addition to a uniqueId string, uniqueId takes presedence and overrides id. */ static buildFromParams = (params) => { const {jsxPath, component, jsxFileName, props, id, uniqueId} = params || {}; @@ -220,7 +223,8 @@ class React4xp { checkIdLock() { if (this.react4xpIdLocked) { - throw Error("This component has already been used to generate a body or pageContributions. Container ID can't be changed now."); + throw Error("This component has already been used to generate a body or pageContributions. " + + "Container ID can't be changed now."); } } @@ -236,7 +240,8 @@ class React4xp { /** Sets the react4xpId - the HTML ID of the target container this component will be rendered into. - * Deletes the ID if arguemnt is omitted. + * Deletes the ID if argument is omitted. + * @returns The react4xp component itself, for builder-like telescoping pattern. */ setId(react4xpId) { this.checkIdLock(); @@ -245,6 +250,7 @@ class React4xp { } /** Appends a unique target container ID postfix after the currently set reactXpId (if any). + * @returns The react4xp component itself, for builder-like telescoping pattern. */ uniqueId() { this.checkIdLock(); @@ -258,7 +264,8 @@ class React4xp { /** When you want to use a JSX component file in the XP component folder, but the JSX file has a different file name * than the part, initialize the React4XP with the XP component (extrapolates the path) and then call this method - * with only the file name (or initialize the component with ). + * with only the file name. + * @returns The react4xp component itself, for builder-like telescoping pattern. */ setJsxFileName(jsxFileName) { if (!this.component) { @@ -289,7 +296,9 @@ class React4xp { //--------------------------------------------------------------- - /** Sets the component's top-level props. Must be a string-serializeable object! + /** Sets the react4xp component's top-level props. + * @param props {object} Props to be stored in the component. Must be a string-serializeable object! + * @returns The react4xp component itself, for builder-like telescoping pattern. */ setProps(props) { if (!props || typeof props !== 'object') { @@ -314,8 +323,6 @@ class React4xp { //--------------------------------------------------------------- RENDERING METHODS: - - /** Generates or modifies existing enonic XP pageContributions. Adds client-side dependency chunks (core React4xp frontend, * shared libs and components etc, as well as the entry component scripts. * Also returns/adds small scripts that trigger the component scripts. Prevents duplicate references to dependencies. @@ -353,6 +360,7 @@ class React4xp { * matching container, a matching
will be inserted at the end of the body, inside the root element. If * body is missing, a pure-target-container body is generated and returned. * @param content {string} HTML content that, if included, is inserted into the container with the matching Id. + * @returns {string} adjusted or generated HTML body with rendered react component. */ renderBody(body, content) { this.ensureAndLockId(); @@ -376,15 +384,23 @@ class React4xp { } + /** Renders a static HTML markup (SSR) and inserts it into an ID-matching target container in an HTML body. If a + * matching-ID container (or a body) is missing, it will be generated. + * @param body {string} Existing HTML body, for example rendered from thymeleaf. + * @returns {string} adjusted or generated HTML body with rendered react component. + */ renderIntoBody(body) { const markup = this.renderToStaticMarkup(); return this.renderBody(body, markup); } - + /** Renders a pure static HTML markup of the react component, without a surrounding HTML markup. Can override + * props that have previously been added to this component. This presumably improves rendering performance, + * although that hasn't been tested thoroughly. + */ renderToStaticMarkup = (overrideProps) => { return SSRreact4xp.renderToStaticMarkup(this.jsxPath, JSON.stringify(overrideProps || this.props)); - } + }; @@ -404,8 +420,9 @@ class React4xp { ///////////////////////////////////////////////// STATIC ALL-IN-ONE RENDERERS /** All-in-one client-renderer. Returns a dynamic client-side-running response object that can be directly returned from an XP controller. - * @param params - */ + * @param params {object} See .render for parameter details. + * @returns {object} Object with body and pageContributions. Body will contain a target container element for the react component. PageContributions will contain scripts referred by URL for running the component client-side and the component's dependencies, as well as an inline trigger script for starting the react frontend rendering into the target container. Duplicates in pageContributions will be removed, to avoid running identical scripts twice. + */ static renderClient = (params) => { const react4xp = React4xp.buildFromParams(params); const {body, pageContributions} = params || {}; @@ -418,7 +435,8 @@ class React4xp { /** All-in-one serverside-renderer. Returns a static HTML response object that can be directly returned from an XP controller. - * @param params + * @param params {object} See .render for parameter details. + * @returns {object} Object with body and pageContributions. Body will contain a target container element with the rendered react component inside. PageContributions will pass through unchanged. */ static renderSSR = (params) => { const react4xp = React4xp.buildFromParams(params); @@ -431,7 +449,17 @@ class React4xp { /** All-in-one renderer. Returns a response object that can be directly returned from an XP controller. - * Renders dynamic/client-side react in XP preview and live mode, and static/server-side in edit mode (XP content studio). + * @param request {object} XP request object. + * @param params {object} must include EITHER jsxPath or component! All other parameters are optional: + * - component {object} XP component object (used to extrapolate component part, sufficient if JSX entry file is in the same folder and has the same name). + * - jsxPath {string} path to react component entry, see available paths in build/main/resources/react4xp/entries.json + * - jsxFileName {string} for using a jsx entry in a XP component folder, but with a different file name than the XP component itself. No file extension. + * - props {object} react props sent in to the component + * - id {string} sets the target container element id. If this matches an ID in an input body, the react component will be rendered there. If not, a container with this ID will be added. + * - uniqueId {boolean|string} If set, ensures that the ID is unique. If id is set (previous param), a random integer will be postfixed to it. If uniqueId is a string, this is the prefix before the random postfix. If the id param is used in addition to a uniqueId string, uniqueId takes presedence and overrides id. + * - body {string} Existing HTML body, for example rendered from thymeleaf. If it already has a matching-ID target container, body passes through unchanged (use this option and the setId method to control where in the body the react component should be inserted). If it doesn't have a matching container, a matching
will be inserted at the end of the body, inside the root element. If body is missing, a pure-target-container body is generated and returned. + * - pageContributions {object} Pre-existing pageContributions. + * Renders dynamic/client-side react in XP preview and live mode, and static/server-side in edit mode (XP content studio). See .renderClient and .renderSSR for parameter and return details. */ static render = (request, params) => { const react4xp = React4xp.buildFromParams(params); From db46f485130bf0449dcf209dff1e0e5858f2b6f8 Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Sun, 27 Jan 2019 19:47:37 +0100 Subject: [PATCH 86/96] First-draft documentation done. --- README.md | 169 +++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 148 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index 501f0cb7..1a30b26d 100644 --- a/README.md +++ b/README.md @@ -1,41 +1,168 @@ # React project starter for Enonic XP -Easy React in XP! +## React4xp: easy React in XP! -This starter abstracts away the complexity needed for React to play nice with Enonic XP. The aim is to give developers a low threshold to get started and React components running, while also exposing some flexible functionality to allow some common use cases. +This starter abstracts away some complexity and makes React play nice with Enonic XP. The goal is to have a low threshold to get started and React components running, while also exposing some flexible functionality to allow a variety of use cases. +It renders standard JSX files: they have a `.jsx` file extension, and they export as `default` a function with a `props` argument (exporting pure HTML element in JSX works too). -## Technical overview for changes and advanced use: +There's Babel support out of the box, for writing everything in glorious ES6. -Most of the heavy lifting is done at build time, most importantly by [webpack](https://webpack.js.org/). It's automated and currently set up around a particular file and directory structure: +## How to use -Webpack detects JSX component entry files under XP's own `src/main/resources/site/` structure, and transpiles them to es5 under `build/resources/main/react4xp` (and `react4xp/` in the deployed JAR). The same transpiled code is run by both the browser (client side rendering) and by nashorn (server side rendering). +### Example: Hello World + +Similar to how things are otherwise handled in Enonic XP, add a JSX react file to the same folder as an XP part or page. File names matter - use the same name as the part or page, and a `.jsx` file extension. + +```jsx harmony +// site/parts/example/example.jsx: + +import React from 'react'; + +export default () =>

Hello world!

; +``` + +Use the `React4xp` library in the part controller, give it the request and the part's component object (needs to be wrapped in a separate object), and return the rendered output directly from the controller: + +```ecmascript 6 +// site/parts/example/example.es6: + +const portal = require('/lib/xp/portal'); +const React4xp = require('/lib/enonic/react4xp'); + +exports.get = function(request) { + const component = portal.getComponent(); + return React4xp.render(request, { component }); +}; +``` + +Apart from this you only need the part definition, `site/parts/example/example.xml`. Now add the part to a page in XP content studio, and enjoy as the world is being greeted! + +A slightly expanded version of this example is in the source code, at that path. + + +### Easy and direct rendering with `React4xp.render` + +`React4xp.render(request, params)` generates an object with `body` and `pageContribution` attributes, ready for being returned as-is from an XP controller. The HTML `body` will contain a target container for the rendered component, inside an HTML body if one was was included in the `params` argument object, or generated if not. + +The `request` argument is used to determine the context of the rendering: + - If the rendering happens in the _edit_ mode of XP Content Studio, the react component is rendered server-side as static HTML. In this mode, any pageContributions from the `params` are just passed through unchanged. + - If the rendering is in _preview_ or _live_ mode: client-side rendering. The body is ensured to contain a matching-ID target container for rendering in the browser, while the pageContributions get scripts for this rendering - inline and referred by autogenerated URLs. + +The `params` argument is an object that must include EITHER `component` or `jsxPath`. All other parameters are optional: + - `component` (object) XP component object (used to extrapolate a jsxPath - sufficient if JSX entry file is in the same folder and has the same name). + - `jsxPath` (string) path to react component entry, see available paths in `build/main/resources/react4xp/entries.json` after building. Think of this as the name of the component path. + - `jsxFileName` (string) For using a JSX entry that's in a XP component folder but with a different file name than the XP component itself. No file extension. Untested: can probably also be used as a relative path to the XP component path? + - `props` (object) React props to send in to the react component + - `id` (string) Sets the target container HTML element ID. If this matches an ID in a `body` in params, the react component will be rendered there. If not, a container with this ID will be added. If `id` is missing, the `component` path is used, or a unique ID is generated if there's no component. + - `uniqueId` (boolean or string) If set, ensures that the ID is unique. If the `id` param is set, a random integer will be postfixed to it. If `uniqueId` is a string, that will be the prefix before the random postfix. If the `id` param is used in addition to a `uniqueId` string, `uniqueId` takes presedence and overrides `id`. + - `body` (string) Existing HTML body for adding the react component into. For example rendered from thymeleaf. If it already has a matching-ID target container, `body` passes through unchanged in client-side rendering, and has the react component added to the container in server-side rendering. Use this matching-ID option and set the `id` param to control where in the body the react component should be inserted. If there's no matching container, a matching
will be inserted at the end of the body, inside the root element of `body`. If `body` is missing, a pure-target-container body is generated and returned. + - `pageContributions` (object) Pre-existing pageContributions. + + +## Technical overview and advanced use + +### Build + +An important part of the the work happens at build time, mainly by [webpack](https://webpack.js.org/). It's automated and currently set up around a particular file and directory structure: + +Webpack detects JSX component entry files (see below) and **transpiles** them to es5 under `build/resources/main/react4xp` (and `react4xp/` in the deployed JAR). The same transpiled code is run by both the browser (client side rendering) or by Nashorn (server side rendering). Webpack uses [code splitting](https://webpack.js.org/guides/code-splitting/) and layers the transpiled output. - - **entries**: minimal JS files that are one top-level React component (or "app") each. These are available to and runnable by the browser and importing other components. - - **chunks**: second-level bundles/libraries of shared React (or other) components, importable by the entries. - - **externals**: third-level and third-party libraries such as React itself, needed both at client and server side. At this level might also be a **vendors** chunk: the leftover, non-externals common deplendencies from node_modules. + - **Entries**: minimal JS files that are one "app" each: a top-level React component. These are what will be fed into the React renderer, available to and runnable by the browser and importing other components. JSX files will be interpreted as React entries if the source files are found under the common XP structire (`src/main/resources/site`) or under a designated directory in React4xp itself (`src/main/react4xp/_components`). + - **Chunks**: second-level bundles/libraries of shared React (or other) components, importable by the entries. You can force shared code to be bundled into a chunk without changing the webpack.config files: simply put the shared code into `.es6` or `.jsx` files in subdirectories below `src/main/react4xp` and import it from your entries. The build does the rest. + - **Externals**: third-level and third-party libraries such as React itself, needed both at client and server side. At this level might also be a **vendors** chunk: the leftover, non-externals common deplendencies from `node_modules/`. Use the EXTERNALS object in `webpack.config.constants.json` to separate between externals and vendors chunks. + +This is done for performance by [client-side HTTP caching](https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/http-caching): the chunks/externals/vendors bundle frequently used common dependencies into one, or a few, files that can be loaded client-side ideally just once, and be cached there for fast responsive pages (no need for PWA caching). Everything except the entries get a **content-dependent hash** added to the file name, so it only changes on actual updates to the dependencies. These hashes are exported by webpack to `chunks.*.json` files, which are used by XP to resolve the dependency file names. There's also a built `entries.json` file, which both allows developers to look up available entries, and lets the library exclude the entries from the hashed-name handling. + +Because the layers are differently used and have different needs for chunking and hashing strategies, there are 4 webpack steps, each triggered by separate gradle tasks and each with their own `webpack.config.*.js`. In addition to entries, chunks and externals, there's the React4xp frontend-only Core and the backend-only Nashorn polyfills. -This is done for performance by [client-side HTTP caching](https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/http-caching): bundling frequently used common dependencies into one, or a few, files that can be loaded client-side ideally just once, and be cached there for fast responsive pages (no need for PWA caching). Everything except the entries get a content-dependent hash added to the file name, so it only changes on actual updates to the dependencies. These hashes are exported by webpack to `chunks.*.json` files, which are used by XP to resolve the dependency file names. There's also a built `entries.json` file, excluding top-level components and ensuring that only dependency files are resolved for hashed names. +### Entries and Core + +React component entries can be used by XP by referring to their entry paths (`jsxPath`, unless the XP component is used as a shortcut like in the example). This path is both part of the URL for the component file, and the reference to the component in the client-side script. The global client-side `React4xp` object has some basic `Reac4xp.Core` code that wraps the React renderer, as well as entry path attributes that expose the react components. Reac4xt.Core is built from `src/main/react4xp/_frontendCore_.es6`. + +For example, in the hello-world example above, the entry path of `example.jsx` is `"site/parts/example/example"`, so it could also have been rendered with `React4xp.render(request, "site/parts/example/example"):`. Either way, the browser downloads ...`_/service/com.enonic.starter.react/react4xp/site/parts/example/example.js` and calls `React4xp.Core.render` with `React4xp['site/parts/example/example'].default`. + + +### The library: `lib/enonic/react4xp/index.es6` + +Used in XP controllers. Relies on webpack having done its job (setting up the entry paths, the hashed chunk names and the correct placement of all the files), and handles the interplay between backend and frontend mainly using the entry paths. In addition to the `.render` method from the hello-world example are some other options: + - `React4xp.renderSSR(params)`: Same as React4xp.render, but without the `request`, and always renders static server-side markup. No need for a `request` argument. Worth noting: the first server-side rendering in Nashorn is much slower than repeated calls to the same component. The component is cached as a function, so re-calling it even with different props will be much more performant. + - `React4xp.renderClient(params)`: Same as React4xp.renderSSR, but always renders active client-side react (which doesn't always work so well in XP content studio's edit mode). + +For more fine-grained control, build a **React4xp instance**. This can be done in two ways: + - `new React4xp(initParam);`, the basic constructor where `initParam` is either the XP component object, or an entry path string, or + - `React4xp.buildFromParams(params)`, an all-in-one builder where `params` are the same as for `.renderSSR` and `.renderClient`, except for the `body` and `pageContributions` fields which aren't used here. + +This React4xp instance has the following methods: + - `.setId(id)`: Sets the ID of the target container the component will be rendered into, or deletes it if omitted. + - `.uniqueId()`: Makes sure the container ID is uinique, using a random postfix. + - `.setJsxFileName(fileName)`: Adjusts the jsxPath by changing the file name. Useful for different-named jsx files when using the component shortcut. + - `.setProps(props)`: Sets the component's top-level props. + - `.renderClientPageContributions(pageContributions)`: Renders only the needed pageContributions for running the component on the client side. Includes dependency chunks, the component script, and the trigger. If a `pageContributions` argument is added, the rendered pageContributions are added to it, removing any duplicate scripts. + - `.renderBody(body, content)`: Generates an HTML body string (or modifies it, if included as a `body` parameter) with a target container element with the ID of this component - into which the component will be rendered. If the component HTML already has been rendered (e.g. by `.renderToStaticMarkup`), add it as the `content` argument, and it will be inserted into the container. + - `.renderToStaticMarkup(overrideProps)`: Renders a pure static HTML string of the react component, without a body / other surrounding HTML. If `overrideProps` is added, any props previously added to the instance are ignored. + - `.renderIntoBody(body)`: Shorthand method, combining `renderToStaticMarkup` and `renderBody` for a full serverside HTML string rendering of the instance. + +The **examples** branch in this repo should have more on how to use this library in controllers. + + +### The service: `services/react4xp/react4xp.es6` + +Used to fetch all transpiled JS files - entries and dependency chunks - by entry path, i.e. the path of the transpiled file below `build/resources/main/react4xp` (or `/react4xp/` in the JAR). Handles headers for efficient clientside HTTP caching, also caches everything to memory on the server for performance. + + +### Nashorn server-side rendering + +The serverside-oriented rendering methods in the library pass the transpiled component by name (entry path / jsxPath) to some java code that loads and runs the component in Nashorn. The Nashorn engine is pre-polyfilled using some other pre-transpiled code (see `src/main/react4xp/_nashornPolyfills_.es6`). + +Each specific component is stored in the nashorn engine by name on first access, as a function that takes props as argument. This way, the components are slow on the first rendering (around 1 second in the test cases) but much faster on repeated access, even with different props (2 - 30 ms). + +Some other java code, HTMLInserter, is responsible for inserting HTML into other HTML. This is used for adding a container element to an existing body if it's missing a maching-ID target container, and to insert a rendered component into a target container in a preexisting body. + +Errors on serverside are logged thoroughly for developers, and a minimal error message is returned as HTML for visible frontend output. When errors happen, the component in question is cleared from the engine's component cache. + +Nashorn server-side rendering is recommended in the edit mode of XP content studio, to isolate away active scripts which may interfere with the editing while still keeping a visual representation of the component. The basic `.render` part selects this automatically. + +#### Support, versions and polyfilling + +While most react components so far seem to run fine, there may be some cases where the Nashorn engine will complain. If so, adapt your code, or add polyfilling to `src/main/react4xp/_nashornPolyfills_.es6`. + +The JS support in Nashorn varies between different JVMs. Enonic XP 6 runs the java 8 JVM, while XP 7 will run java 11, which has better support - including ES6 natively. There may still be uncovered areas and unsupported functions, though. + + +## Other & misc.: + +### Component-less entries + +If a JSX file is found under `src/main/react4xp/_components` or below, it will keep that relative path and be transpiled to an entry component. Good for component entries that shouldn't belong to a particular XP part/page. This approach is untested and not focused on, but should allow pure-app use. Files will be transpiled to the `/react4xp/` root folder, and their entry names will be the file path under `_components`, i.e. without "_components" or "site" (or file extension) in the name. -### Rendering a JSX component: -An XP controller (e.g. part or page) can include a react component entry by using the +### Controllable chunking -blablabla +Add other subfolders under `src/main/react4xp/`: All other subfolders than _component under src/main/react4xp will be collected to chunks of their own, where the chunk name will be the same as the subfolder, plus a content hash. This includes both JSX and ES6 source files. -either by the entry path (see the built `entries.json` file under `build/resources/main/react4xp/`), or let the react4xp XP library (`lib/enonic/react4xp`) extrapolate it from the XP component object, for simplicity. The library does the main work on the backend. The rendered react component can then either be inserted into a container with a particular ID, if an HTML body (e.g. a view) already exists, or it will have a bare-bone view generated for it, and be inserted there. +Note that source files that aren't imported by entries will not be transpiled to the build folder. If you add source files right on the `src/main/react4xp/` root folder, they will be bundled into the entry file instead of a chunk - increasing the entry's size! -Client-side rendering: The lib/enonic/react4xp library has some client-oriented rendering methods, in general what they do is to add the necessary URLs for the component entry file and its dependency chunks (which are fetched through the services/react4xp service, in order to control reponse headers and client-side caching) to the pageContributions, and generates/adds a minimal inline script to trigger the component rendering in the browser, by wrapping it in a frontend-rendering script (generally referenced as "core" in the code). +### Stateful class components -Server-side rendering: similarly, lib/enonic/react4xp has some serverside-oriented rendering methods. These pass the transpiled component to some java code that runs the component in nashorn. The nashorn is pre-polyfilled using some other pre-transpiled code. Also, each specific component is stored in the nashorn engine by name (the name is the component path) on first access, as a function that takes props as argument. This way, the components are slow on the first rendering (around 1 second in the test cases) but much faster on repeated access, even with different props (2 - 30 ms). +For rendering stateful class components, they must be wrapped during the export: -Some other java code, HTMLInserter, is responsible for inserting html into other html. This is used for adding a container element to an existing body if it's missing a maching-ID target container, and to insert a rendered component into a target container in a preexisting body. +```jsx harmony +import React from 'react'; -Errors on serverside running are logged thoroughly for developers, and a minimal error message is returned as HTML for visible output. On errors, that component-function is cleared from the engine's component cache. +class WorldGreeter expands React.Component { + constructor(props) { + this.state = { + greetee: props || "world", + } + } + + render() { + return (

Hello {this.state.greetee}!

); + } +} -Easiest use: let controllers use the general .render method in the react4xp library. It will use the request object to pick the rendering method: server-side for static views in content studio's edit mode, and active client-side rendering for preview and live mode. See the counter part. +export default (props) => ; +``` -Other features: -Detection of JSX source files under the src/main/react4xpfolder, for common components, and component entries that shouldn't belong to a particular XP part/page. This approach is untested and not focused on, but should allow pure-app use, a la the way things are in starter-react right now. -Automatic and developer-controllable chunking of developer-added code under src/main/react4xp: if a JSX file is found under src/main/react4xp/_components or below, it will keep that relative path and be transpiled to an entry component. All other subfolders than _component under src/main/react4xp will be collected to chunks of their own, where the chunk name will be the same as the subfolder. From 81868c55ebd109380e81150a17662552211ea000 Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Sun, 27 Jan 2019 19:49:26 +0100 Subject: [PATCH 87/96] Example format --- README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/README.md b/README.md index 1a30b26d..9ca57266 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ export default () =>

Hello world!

; Use the `React4xp` library in the part controller, give it the request and the part's component object (needs to be wrapped in a separate object), and return the rendered output directly from the controller: -```ecmascript 6 +```jsx harmony // site/parts/example/example.es6: const portal = require('/lib/xp/portal'); @@ -164,5 +164,3 @@ class WorldGreeter expands React.Component { export default (props) => ; ``` - - From c8aeb078d0a696952fe31e6cde59ce384c43d709 Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Sun, 27 Jan 2019 19:58:56 +0100 Subject: [PATCH 88/96] Update README.md. So much readme. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9ca57266..984d7561 100644 --- a/README.md +++ b/README.md @@ -122,7 +122,7 @@ Some other java code, HTMLInserter, is responsible for inserting HTML into other Errors on serverside are logged thoroughly for developers, and a minimal error message is returned as HTML for visible frontend output. When errors happen, the component in question is cleared from the engine's component cache. -Nashorn server-side rendering is recommended in the edit mode of XP content studio, to isolate away active scripts which may interfere with the editing while still keeping a visual representation of the component. The basic `.render` part selects this automatically. +Nashorn server-side rendering is recommended in the edit mode of XP content studio, to isolate away active scripts (which may interfere with the editing) while still keeping a visual representation of the component. The basic `.render` method selects this automatically. #### Support, versions and polyfilling From 85aa36e97e902627ab737d5d676a887201f034ae Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Fri, 1 Feb 2019 10:48:56 +0100 Subject: [PATCH 89/96] Added SSR+hydration rendering. Will this be enough, or is the window.__STATE__ step needed? --- README.md | 6 +- .../xp/react4xp/ssr/ServerSideRenderer.java | 6 +- src/main/react4xp/_frontendCore_.es6 | 24 +++++- .../resources/lib/enonic/react4xp/index.es6 | 74 ++++++++++++++----- 4 files changed, 83 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index 984d7561..70372ff7 100644 --- a/README.md +++ b/README.md @@ -100,9 +100,9 @@ This React4xp instance has the following methods: - `.setJsxFileName(fileName)`: Adjusts the jsxPath by changing the file name. Useful for different-named jsx files when using the component shortcut. - `.setProps(props)`: Sets the component's top-level props. - `.renderClientPageContributions(pageContributions)`: Renders only the needed pageContributions for running the component on the client side. Includes dependency chunks, the component script, and the trigger. If a `pageContributions` argument is added, the rendered pageContributions are added to it, removing any duplicate scripts. - - `.renderBody(body, content)`: Generates an HTML body string (or modifies it, if included as a `body` parameter) with a target container element with the ID of this component - into which the component will be rendered. If the component HTML already has been rendered (e.g. by `.renderToStaticMarkup`), add it as the `content` argument, and it will be inserted into the container. - - `.renderToStaticMarkup(overrideProps)`: Renders a pure static HTML string of the react component, without a body / other surrounding HTML. If `overrideProps` is added, any props previously added to the instance are ignored. - - `.renderIntoBody(body)`: Shorthand method, combining `renderToStaticMarkup` and `renderBody` for a full serverside HTML string rendering of the instance. + - `.renderBody(body, content)`: Generates an HTML body string (or modifies it, if included as a `body` parameter) with a target container element with the ID of this component - into which the component will be rendered. If the component HTML already has been rendered (e.g. by `.renderToString`), add it as the `content` argument, and it will be inserted into the container. + - `.renderToString(overrideProps)`: Renders a pure static HTML string of the react component, without a body / other surrounding HTML. If `overrideProps` is added, any props previously added to the instance are ignored. + - `.renderIntoBody(body)`: Shorthand method, combining `renderToString` and `renderBody` for a full serverside HTML string rendering of the instance. The **examples** branch in this repo should have more on how to use this library in controllers. diff --git a/src/main/java/com/enonic/xp/react4xp/ssr/ServerSideRenderer.java b/src/main/java/com/enonic/xp/react4xp/ssr/ServerSideRenderer.java index 24df7378..077bab06 100644 --- a/src/main/java/com/enonic/xp/react4xp/ssr/ServerSideRenderer.java +++ b/src/main/java/com/enonic/xp/react4xp/ssr/ServerSideRenderer.java @@ -17,7 +17,7 @@ public class ServerSideRenderer { // Examples: // component: name of a transpiled JSX component, i.e. path under /react4xp/, e.g: "site/parts/simple-reactive/simple-reactive" // props: valid stringified JSON on props object, e.g. '{"insertedMessage": "this is a prop!"}' - public String renderToStaticMarkup(String component, String props) throws IOException, ScriptException { + public String renderToString(String component, String props) throws IOException, ScriptException { NashornScriptEngine engine = EngineFactory.getEngine(); @@ -29,7 +29,7 @@ public String renderToStaticMarkup(String component, String props) throws IOExce componentScripts.add(component); script.append(componentScript); } - script.append("var obj = { rendered: ReactDOMServer.renderToStaticMarkup(React4xp['" + component + "'].default(" + props + ")) };"); + script.append("var obj = { rendered: ReactDOMServer.renderToString(React4xp['" + component + "'].default(" + props + ")) };"); script.append("obj;"); ScriptObjectMirror obj = (ScriptObjectMirror)engine.eval(script.toString()); @@ -38,7 +38,7 @@ public String renderToStaticMarkup(String component, String props) throws IOExce } catch (ScriptException e) { e.printStackTrace(); - System.err.println("ERROR: " + ServerSideRenderer.class.getName() + ".renderToStaticMarkup:\n" + + System.err.println("ERROR: " + ServerSideRenderer.class.getName() + ".renderToString:\n" + "Message: " + e.getMessage() + "\n" + "Component: " + component + "\n" + "Props: " + props + "\n" + diff --git a/src/main/react4xp/_frontendCore_.es6 b/src/main/react4xp/_frontendCore_.es6 index 53d0e29c..00f44d50 100644 --- a/src/main/react4xp/_frontendCore_.es6 +++ b/src/main/react4xp/_frontendCore_.es6 @@ -1,6 +1,6 @@ import ReactDOM from 'react-dom'; -exports.render = (Component, targetId, props) => { +const getContainer = (targetId) => { let container = null; try { if (!targetId) { @@ -14,8 +14,24 @@ exports.render = (Component, targetId, props) => { console.error("React4xp.Core.render can't mount component into target container: no DOM element with ID '" + targetId +"'"); } - const renderable = (typeof Component === 'function') ? - Component(props) : - Component; + return container; +}; + + +const getRenderable = (Component, props) => { + return (typeof Component === 'function') ? Component(props) : Component; +}; + + +exports.render = (Component, targetId, props) => { + const container = getContainer(targetId); + const renderable = getRenderable(Component, props); ReactDOM.render(renderable, container); }; + + +exports.hydrate = (Component, targetId, props) => { + const container = getContainer(targetId); + const renderable = getRenderable(Component, props); + ReactDOM.hydrate(renderable, container); +}; diff --git a/src/main/resources/lib/enonic/react4xp/index.es6 b/src/main/resources/lib/enonic/react4xp/index.es6 index cdab99fb..21315e17 100644 --- a/src/main/resources/lib/enonic/react4xp/index.es6 +++ b/src/main/resources/lib/enonic/react4xp/index.es6 @@ -239,6 +239,19 @@ class React4xp { } + ensureAndLockBeforeRendering() { + this.ensureAndLockId(); + + if (!this.jsxPath) { + throw Error("Target path for JSX component, jsxPath, has not been set. Add an absolute path (or an XP component from which to derive it) in the React4XP constructor or with the setters."); + } + if (!this.react4xpId) { + throw Error("ID for the target container element is missing."); + } + } + + + /** Sets the react4xpId - the HTML ID of the target container this component will be rendered into. * Deletes the ID if argument is omitted. * @returns The react4xp component itself, for builder-like telescoping pattern. @@ -323,6 +336,30 @@ class React4xp { //--------------------------------------------------------------- RENDERING METHODS: + + /** Generates or modifies existing enonic XP pageContributions. Adds client-side dependency chunks (core React4xp frontend, + * shared libs and components etc, as well as the entry component scripts. + * Also returns/adds small scripts that trigger the component scripts. Prevents duplicate references to dependencies. + * + * @param pageContributions PageContributions object that the new scripts will be added to. If no input, new ones + * are instantiated. + */ + renderClientPageContributions = (pageContributions) => { + this.ensureAndLockBeforeRendering(); + + return mergePageContributions(pageContributions, { + headEnd: [ + // Browser-runnable script reference for the "naked" react component: + ``, + ], + bodyEnd: [ + // That script will expose to the browser an element or function that can be handled by React4Xp.Core.render. Trigger that, along with the target container ID, and props, if any: + `` + ] + }); + }; + + /** Generates or modifies existing enonic XP pageContributions. Adds client-side dependency chunks (core React4xp frontend, * shared libs and components etc, as well as the entry component scripts. * Also returns/adds small scripts that trigger the component scripts. Prevents duplicate references to dependencies. @@ -330,24 +367,17 @@ class React4xp { * @param pageContributions PageContributions object that the new scripts will be added to. If no input, new ones * are instantiated. */ - renderClientPageContributions = (pageContributions) => { - this.ensureAndLockId(); - - if (!this.jsxPath) { - throw Error("Target path for JSX component, jsxPath, has not been set. Add an absolute path or a component in the React4XP constructor or with the setters."); - } - if (!this.react4xpId) { - throw Error("ID for the target container element, react4xpId, has not been set. And there is no component from which to derive it either. Add one of them in the constructor or with one of the setters."); - } + renderHydrationPageContributions = (pageContributions) => { + this.ensureAndLockBeforeRendering(); return mergePageContributions(pageContributions, { - bodyEnd: [ - + headEnd: [ // Browser-runnable script reference for the "naked" react component: ``, - + ], + bodyEnd: [ // That script will expose to the browser an element or function that can be handled by React4Xp.Core.render. Trigger that, along with the target container ID, and props, if any: - `` + `` ] }); }; @@ -390,7 +420,7 @@ class React4xp { * @returns {string} adjusted or generated HTML body with rendered react component. */ renderIntoBody(body) { - const markup = this.renderToStaticMarkup(); + const markup = this.renderToString(); return this.renderBody(body, markup); } @@ -398,8 +428,8 @@ class React4xp { * props that have previously been added to this component. This presumably improves rendering performance, * although that hasn't been tested thoroughly. */ - renderToStaticMarkup = (overrideProps) => { - return SSRreact4xp.renderToStaticMarkup(this.jsxPath, JSON.stringify(overrideProps || this.props)); + renderToString = (overrideProps) => { + return SSRreact4xp.renderToString(this.jsxPath, JSON.stringify(overrideProps || this.props)); }; @@ -474,7 +504,17 @@ class React4xp { pageContributions: react4xp.renderClientPageContributions(pageContributions) } }; -} + + static renderMarkupAndHydrate = (params) => { + const react4xp = React4xp.buildFromParams(params); + let {body, pageContributions} = params || {}; + return { + body: react4xp.renderIntoBody(body), + pageContributions: react4xp.renderHydrationPageContributions(pageContributions) + } + } +} + module.exports = React4xp; From cae598347aa30d9c911536cc4b3d1d04be54b7ae Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Sat, 2 Feb 2019 18:36:54 +0100 Subject: [PATCH 90/96] SSR Hydration works. Stretch tested with a react-redux example and the custom Duckfactory wrapper. --- package-lock.json | 15 ++++--- package.json | 1 + src/main/react4xp/redux/index.es6 | 20 ++++++++++ .../react4xp/redux/reducers/greetingsRed.es6 | 17 ++++++++ src/main/react4xp/redux/reducers/index.es6 | 7 ++++ .../react4xp/sharedComps/WorldGreeter.jsx | 39 +++++++++++++++++++ .../parts/clientReduxed/clientReduxed.es6 | 18 +++++++++ .../parts/clientReduxed/clientReduxed.jsx | 9 +++++ .../parts/clientReduxed/clientReduxed.xml | 11 ++++++ .../resources/site/parts/example/example.xml | 2 +- .../parts/hydrateReduxed/hydrateReduxed.es6 | 18 +++++++++ .../parts/hydrateReduxed/hydrateReduxed.jsx | 9 +++++ .../parts/hydrateReduxed/hydrateReduxed.xml | 11 ++++++ 13 files changed, 171 insertions(+), 6 deletions(-) create mode 100644 src/main/react4xp/redux/index.es6 create mode 100644 src/main/react4xp/redux/reducers/greetingsRed.es6 create mode 100644 src/main/react4xp/redux/reducers/index.es6 create mode 100644 src/main/react4xp/sharedComps/WorldGreeter.jsx create mode 100644 src/main/resources/site/parts/clientReduxed/clientReduxed.es6 create mode 100644 src/main/resources/site/parts/clientReduxed/clientReduxed.jsx create mode 100644 src/main/resources/site/parts/clientReduxed/clientReduxed.xml create mode 100644 src/main/resources/site/parts/hydrateReduxed/hydrateReduxed.es6 create mode 100644 src/main/resources/site/parts/hydrateReduxed/hydrateReduxed.jsx create mode 100644 src/main/resources/site/parts/hydrateReduxed/hydrateReduxed.xml diff --git a/package-lock.json b/package-lock.json index 22fe5b20..a2cf4626 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1435,7 +1435,6 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, "requires": { "core-js": "^2.4.0", "regenerator-runtime": "^0.11.0" @@ -1444,8 +1443,7 @@ "core-js": { "version": "2.5.7", "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", - "integrity": "sha1-+XJgj/DOrWi4QaFqky0LGDeRgU4=", - "dev": true + "integrity": "sha1-+XJgj/DOrWi4QaFqky0LGDeRgU4=" } } }, @@ -2441,6 +2439,14 @@ "integrity": "sha1-PTH1AZGmdJ3RN1p/Ui6CPULlTto=", "dev": true }, + "duckfactory": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/duckfactory/-/duckfactory-1.3.4.tgz", + "integrity": "sha1-8hdmuZiDjFJEFLu0uWQqXdNhIl8=", + "requires": { + "babel-runtime": "^6.23.0" + } + }, "duplexify": { "version": "3.6.1", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.1.tgz", @@ -5910,8 +5916,7 @@ "regenerator-runtime": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha1-vgWtf5v30i4Fb5cmzuUBf78Z4uk=", - "dev": true + "integrity": "sha1-vgWtf5v30i4Fb5cmzuUBf78Z4uk=" }, "regenerator-transform": { "version": "0.10.1", diff --git a/package.json b/package.json index 892461d8..db550760 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ }, "homepage": "https://github.com/enonic/starter-react#readme", "dependencies": { + "duckfactory": "^1.3.4", "immutable": "^3.8.2", "jvm-npm": "^0.1.1", "react": "^16.4.1", diff --git a/src/main/react4xp/redux/index.es6 b/src/main/react4xp/redux/index.es6 new file mode 100644 index 00000000..1385591c --- /dev/null +++ b/src/main/react4xp/redux/index.es6 @@ -0,0 +1,20 @@ +import { createStore } from 'redux'; + +import rootReducer from './reducers'; + + +let store = null; + +const getStore = (initialState) => { + if (store == null) { + store = createStore( + rootReducer, + initialState + ); + + store.subscribe( ()=>{ console.log("Store updated:", store.getState().greetings.greetingsCount, "greeting(s) and", store.getState().greetings.greeteeCount, "greeting receiver(s)"); }); + } + return store; +}; + +export default getStore; diff --git a/src/main/react4xp/redux/reducers/greetingsRed.es6 b/src/main/react4xp/redux/reducers/greetingsRed.es6 new file mode 100644 index 00000000..dc6563d2 --- /dev/null +++ b/src/main/react4xp/redux/reducers/greetingsRed.es6 @@ -0,0 +1,17 @@ +import DuckFactory from 'duckfactory'; + +const greetingsDuck = new DuckFactory("GREETINGS", {}, { + moreGreetees: (state) => ({ + ...state, + greeteeCount: state.greeteeCount * 2, + greetee: state.greetee + " " + state.greetee, + }), + + moreGreetings: (state) => ({ + ...state, + greetingsCount: state.greetingsCount * 2, + }) + +}, true, true); // eslint-disable-line no-undef +export default greetingsDuck.getReducer(); +export const actionCreators = greetingsDuck.getActionCreators(); diff --git a/src/main/react4xp/redux/reducers/index.es6 b/src/main/react4xp/redux/reducers/index.es6 new file mode 100644 index 00000000..ee2c7e49 --- /dev/null +++ b/src/main/react4xp/redux/reducers/index.es6 @@ -0,0 +1,7 @@ +import { combineReducers } from 'redux'; + +import greetingsReducer from './greetingsRed'; + +export default combineReducers({ + greetings: greetingsReducer, +}); diff --git a/src/main/react4xp/sharedComps/WorldGreeter.jsx b/src/main/react4xp/sharedComps/WorldGreeter.jsx new file mode 100644 index 00000000..b783b63c --- /dev/null +++ b/src/main/react4xp/sharedComps/WorldGreeter.jsx @@ -0,0 +1,39 @@ +import React from 'react'; +import { connect } from 'react-redux'; + +import { actionCreators as testAC } from '../redux/reducers/greetingsRed'; + +const WorldGreeter = ({greetingsCount, greetee, moreGreetings, moreGreetees}) => { + let greetings = ""; + for (let i = 0; i < greetingsCount; i++) { + greetings += "hello "; + } + greetings = greetings.charAt(0).toUpperCase() + greetings.substr(1); + + return
+

+ {greetings} + {greetee} + ! +

+
; +}; + +const mapStateToProps = (state) => ({ + greetingsCount: state.greetings.greetingsCount, + greetee: state.greetings.greetee, +}); + +const mapDispatchToProps = { + moreGreetings: testAC.moreGreetings, + moreGreetees: testAC.moreGreetees, +}; + + + +// ---------------------------------------------- Export + +export default connect( + mapStateToProps, + mapDispatchToProps +)(WorldGreeter); diff --git a/src/main/resources/site/parts/clientReduxed/clientReduxed.es6 b/src/main/resources/site/parts/clientReduxed/clientReduxed.es6 new file mode 100644 index 00000000..37c0907f --- /dev/null +++ b/src/main/resources/site/parts/clientReduxed/clientReduxed.es6 @@ -0,0 +1,18 @@ +const portal = require('/lib/xp/portal'); +const React4xp = require('/lib/enonic/react4xp'); + +// Handle the GET request +exports.get = function(request) { + const component = portal.getComponent(); + + const props = { + initialState: { + greetings: { + greetingsCount: 1, + greeteeCount: 1, + greetee: component.config.greeted + } + } + }; + return React4xp.render(request, { component, props }); +}; diff --git a/src/main/resources/site/parts/clientReduxed/clientReduxed.jsx b/src/main/resources/site/parts/clientReduxed/clientReduxed.jsx new file mode 100644 index 00000000..c421d3bf --- /dev/null +++ b/src/main/resources/site/parts/clientReduxed/clientReduxed.jsx @@ -0,0 +1,9 @@ +import React from 'react'; +import { Provider } from 'react-redux'; + +import getStore from '../../../../react4xp/redux'; +import WorldGreeter from '../../../../react4xp/sharedComps/WorldGreeter'; + +export default (props) => + +; diff --git a/src/main/resources/site/parts/clientReduxed/clientReduxed.xml b/src/main/resources/site/parts/clientReduxed/clientReduxed.xml new file mode 100644 index 00000000..a4da431b --- /dev/null +++ b/src/main/resources/site/parts/clientReduxed/clientReduxed.xml @@ -0,0 +1,11 @@ + + + Client ReactRedux + + + + + world + + + diff --git a/src/main/resources/site/parts/example/example.xml b/src/main/resources/site/parts/example/example.xml index 5a43bd08..06d6f6b4 100644 --- a/src/main/resources/site/parts/example/example.xml +++ b/src/main/resources/site/parts/example/example.xml @@ -4,7 +4,7 @@ - + world diff --git a/src/main/resources/site/parts/hydrateReduxed/hydrateReduxed.es6 b/src/main/resources/site/parts/hydrateReduxed/hydrateReduxed.es6 new file mode 100644 index 00000000..79a04677 --- /dev/null +++ b/src/main/resources/site/parts/hydrateReduxed/hydrateReduxed.es6 @@ -0,0 +1,18 @@ +const portal = require('/lib/xp/portal'); +const React4xp = require('/lib/enonic/react4xp'); + +// Handle the GET request +exports.get = function(request) { + const component = portal.getComponent(); + + const props = { + initialState: { + greetings: { + greetingsCount: 1, + greeteeCount: 1, + greetee: component.config.greeted + } + } + }; + return React4xp.renderMarkupAndHydrate({ component, props }); +}; diff --git a/src/main/resources/site/parts/hydrateReduxed/hydrateReduxed.jsx b/src/main/resources/site/parts/hydrateReduxed/hydrateReduxed.jsx new file mode 100644 index 00000000..c421d3bf --- /dev/null +++ b/src/main/resources/site/parts/hydrateReduxed/hydrateReduxed.jsx @@ -0,0 +1,9 @@ +import React from 'react'; +import { Provider } from 'react-redux'; + +import getStore from '../../../../react4xp/redux'; +import WorldGreeter from '../../../../react4xp/sharedComps/WorldGreeter'; + +export default (props) => + +; diff --git a/src/main/resources/site/parts/hydrateReduxed/hydrateReduxed.xml b/src/main/resources/site/parts/hydrateReduxed/hydrateReduxed.xml new file mode 100644 index 00000000..a78dec41 --- /dev/null +++ b/src/main/resources/site/parts/hydrateReduxed/hydrateReduxed.xml @@ -0,0 +1,11 @@ + + + Hydrate ReactRedux + + + + + world + + + From 13a0ef696604675e9e6a0370c96f4c5d13a36953 Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Sun, 3 Feb 2019 01:48:07 +0100 Subject: [PATCH 91/96] Hydration, works. Improved asset-service HTTP caching strategy. --- .../resources/services/react4xp/react4xp.es6 | 73 ++++++++++++++++--- webpack.config.constants.js | 2 +- 2 files changed, 62 insertions(+), 13 deletions(-) diff --git a/src/main/resources/services/react4xp/react4xp.es6 b/src/main/resources/services/react4xp/react4xp.es6 index cdb82737..eb291db7 100644 --- a/src/main/resources/services/react4xp/react4xp.es6 +++ b/src/main/resources/services/react4xp/react4xp.es6 @@ -12,23 +12,63 @@ const SERVICE_ROOT = `/_/service/${app.name}/${R4X}/`; const REACT4XP_ROOT = `/${R4X}/`; -// TODO: For content-hashed chunks, Cache-Control should be "private, max-age=31536000". For others, 3 hours? -// TODO: Use the commonChunks files to figure this out. -// TODO: How to update ETag headers for non-cached, short-lived resources? + const react4xpCache = cacheLib.newCache({ - size: 30, - expire: 10800 // 3 hours + size: 100, + expire: 108000 // 30 hours }); -const getReact4XP = (resource) => { +// For content-hashed chunks, Cache-Control should be "public, max-age=31536000". For others, ETag and no-cache? Use the commonChunks files to figure this out. +const ENTRIES = JSON.parse( + ioLib.readLines( + ioLib.getResource(REACT4XP_ROOT + "entries.json").getStream() + ).join(" ") +).map(entry => `${entry}.js`); + + + +// Adjusted from https://werxltd.com/wp/2010/05/13/javascript-implementation-of-javas-string-hashcode-method/ +const hash = (string) => { + + var hash = 0, i, chr; + if (string.length === 0) return hash; + for (i = 0; i < string.length; i++) { + chr = string.charCodeAt(i); + hash = ((hash << 5) - hash) + chr; + hash |= 0; // Convert to 32bit integer + } + return (Math.abs(hash)).toString(36); +}; + + + +const getReact4xpEntry = (resource) => { + //const then = new Date().getTime(); const fileContent = utilLib.data.forceArray(ioLib.readLines(resource.getStream())).join("\n"); + const ETag = hash(fileContent); + //const now = new Date().getTime(); + //.info(`ETag '${ETag}' in ${now - then} ms.`); return { body: fileContent, headers: { 'Content-Type': 'application/javascript;charset=utf-8', - 'Cache-Control': 'max-age=10800' + 'Cache-Control': 'no-cache', + 'ETag': ETag, + } + }; +}; + + + +const getReact4xpNonEntry = (resource) => { + const fileContent = utilLib.data.forceArray(ioLib.readLines(resource.getStream())).join("\n"); + return { + body: fileContent, + headers: { + 'Content-Type': 'application/javascript;charset=utf-8', + 'Cache-Control': 'public, max-age=31536000' } }; }; @@ -46,7 +86,7 @@ exports.get = function (req) { } } - //log.info("React4xp target: " + JSON.stringify(target, null, 2)); + log.info("React4xp target: " + JSON.stringify(target, null, 2)); const resource = ioLib.getResource(REACT4XP_ROOT + target); if (!resource || !resource.exists()) { @@ -56,10 +96,19 @@ exports.get = function (req) { } } - return react4xpCache.get(target, function() { - log.info("Caching React4XP component: " + target); - return getReact4XP(resource); - }); + if (ENTRIES.indexOf(target) === -1) { + return react4xpCache.get(target, function() { + log.info("Caching React4XP component: " + target); + return getReact4xpNonEntry(resource); + }); + + } else { + return react4xpCache.get(target, function() { + log.info("Caching React4XP entry: " + target); + return getReact4xpEntry(resource); + }); + } + } else { return { diff --git a/webpack.config.constants.js b/webpack.config.constants.js index 724d0cae..5ad472dc 100644 --- a/webpack.config.constants.js +++ b/webpack.config.constants.js @@ -44,7 +44,7 @@ const JSON_CONSTANTS = JSON.parse(fs.readFileSync('webpack.config.constants.json */ const EXTERNALS = JSON_CONSTANTS.EXTERNALS; -const BUILD_ENV = /*'production'; /*/ 'development'; //*/ +const BUILD_ENV = 'production'; /*/ 'development'; //*/ module.exports = { SITE, From 2cf279c7e6c0ef1a388bbcf451c1fc4625864922 Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Sun, 3 Feb 2019 01:59:08 +0100 Subject: [PATCH 92/96] Asset-serving strategy: body-end instead of head-end assets. That way, inlined content (e.g. SSR before hydration) can be rendered before fetching assets. --- src/main/resources/lib/enonic/react4xp/index.es6 | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/main/resources/lib/enonic/react4xp/index.es6 b/src/main/resources/lib/enonic/react4xp/index.es6 index 21315e17..7749bc40 100644 --- a/src/main/resources/lib/enonic/react4xp/index.es6 +++ b/src/main/resources/lib/enonic/react4xp/index.es6 @@ -40,8 +40,8 @@ const buildBasicPageContributions = (chunkHashFiles) => { chunk = chunk.substring(1); } log.info("chunk: " + JSON.stringify(chunk, null, 2)); - pageContributions.headEnd = [ - ...(pageContributions.headEnd || []), + pageContributions.bodyEnd = [ + ...(pageContributions.bodyEnd || []), `` ]; }; @@ -348,11 +348,10 @@ class React4xp { this.ensureAndLockBeforeRendering(); return mergePageContributions(pageContributions, { - headEnd: [ + bodyEnd: [ // Browser-runnable script reference for the "naked" react component: ``, - ], - bodyEnd: [ + // That script will expose to the browser an element or function that can be handled by React4Xp.Core.render. Trigger that, along with the target container ID, and props, if any: `` ] @@ -371,11 +370,10 @@ class React4xp { this.ensureAndLockBeforeRendering(); return mergePageContributions(pageContributions, { - headEnd: [ + bodyEnd: [ // Browser-runnable script reference for the "naked" react component: ``, - ], - bodyEnd: [ + // That script will expose to the browser an element or function that can be handled by React4Xp.Core.render. Trigger that, along with the target container ID, and props, if any: `` ] From 6ec5120c2ad2c34dc09cdd222e974563fd8a0963 Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Sun, 3 Feb 2019 14:01:08 +0100 Subject: [PATCH 93/96] A bit of comment and readme about the hydrating rendering. --- README.md | 3 +- .../resources/lib/enonic/react4xp/index.es6 | 28 +++++++++++-------- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 70372ff7..df2b3494 100644 --- a/README.md +++ b/README.md @@ -88,7 +88,8 @@ For example, in the hello-world example above, the entry path of `example.jsx` i Used in XP controllers. Relies on webpack having done its job (setting up the entry paths, the hashed chunk names and the correct placement of all the files), and handles the interplay between backend and frontend mainly using the entry paths. In addition to the `.render` method from the hello-world example are some other options: - `React4xp.renderSSR(params)`: Same as React4xp.render, but without the `request`, and always renders static server-side markup. No need for a `request` argument. Worth noting: the first server-side rendering in Nashorn is much slower than repeated calls to the same component. The component is cached as a function, so re-calling it even with different props will be much more performant. - - `React4xp.renderClient(params)`: Same as React4xp.renderSSR, but always renders active client-side react (which doesn't always work so well in XP content studio's edit mode). + - `React4xp.renderClient(params)`: Same as React4xp.renderSSR, but always renders active client-side react. Might nota always work so well in XP content studio's edit mode). + - `React4xp.renderClient(params)`: Same as React4xp.renderSSR, but also tries to activate the component (hydrate; populate the previously rendered DOM with active react functionality). As above, your mileage might vary when it comes to how it behaves in XP content studio's edit mode. For more fine-grained control, build a **React4xp instance**. This can be done in two ways: - `new React4xp(initParam);`, the basic constructor where `initParam` is either the XP component object, or an entry path string, or diff --git a/src/main/resources/lib/enonic/react4xp/index.es6 b/src/main/resources/lib/enonic/react4xp/index.es6 index 7749bc40..37c7feb0 100644 --- a/src/main/resources/lib/enonic/react4xp/index.es6 +++ b/src/main/resources/lib/enonic/react4xp/index.es6 @@ -475,8 +475,24 @@ class React4xp { }; }; + + /** All-in-one serverside renderer that afterwards activates (hydrates) the component in the client. + * Returns a response object that can be directly returned from an XP controller. + * @param params {object} See .render for parameter details. + */ + static renderMarkupAndHydrate = (params) => { + const react4xp = React4xp.buildFromParams(params); + let {body, pageContributions} = params || {}; + return { + body: react4xp.renderIntoBody(body), + pageContributions: react4xp.renderHydrationPageContributions(pageContributions) + } + } +} + - /** All-in-one renderer. Returns a response object that can be directly returned from an XP controller. + +/** All-in-one renderer. Returns a response object that can be directly returned from an XP controller. * @param request {object} XP request object. * @param params {object} must include EITHER jsxPath or component! All other parameters are optional: * - component {object} XP component object (used to extrapolate component part, sufficient if JSX entry file is in the same folder and has the same name). @@ -505,14 +521,4 @@ class React4xp { - static renderMarkupAndHydrate = (params) => { - const react4xp = React4xp.buildFromParams(params); - let {body, pageContributions} = params || {}; - return { - body: react4xp.renderIntoBody(body), - pageContributions: react4xp.renderHydrationPageContributions(pageContributions) - } - } -} - module.exports = React4xp; From 76c531da4cbb2fe1ab04e0f3fc9ea69f568e24d8 Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Sun, 3 Feb 2019 14:26:14 +0100 Subject: [PATCH 94/96] Removed examples --- src/main/react4xp/redux/index.es6 | 20 ---------- .../react4xp/redux/reducers/greetingsRed.es6 | 17 -------- src/main/react4xp/redux/reducers/index.es6 | 7 ---- .../react4xp/sharedComps/WorldGreeter.jsx | 39 ------------------- .../resources/site/pages/default/default.es6 | 25 ------------ .../resources/site/pages/default/default.html | 19 --------- .../resources/site/pages/default/default.xml | 7 ---- .../parts/clientReduxed/clientReduxed.es6 | 18 --------- .../parts/clientReduxed/clientReduxed.jsx | 9 ----- .../parts/clientReduxed/clientReduxed.xml | 11 ------ .../resources/site/parts/example/example.es6 | 10 ----- .../resources/site/parts/example/example.jsx | 3 -- .../resources/site/parts/example/example.xml | 11 ------ .../parts/hydrateReduxed/hydrateReduxed.es6 | 18 --------- .../parts/hydrateReduxed/hydrateReduxed.jsx | 9 ----- .../parts/hydrateReduxed/hydrateReduxed.xml | 11 ------ 16 files changed, 234 deletions(-) delete mode 100644 src/main/react4xp/redux/index.es6 delete mode 100644 src/main/react4xp/redux/reducers/greetingsRed.es6 delete mode 100644 src/main/react4xp/redux/reducers/index.es6 delete mode 100644 src/main/react4xp/sharedComps/WorldGreeter.jsx delete mode 100644 src/main/resources/site/pages/default/default.es6 delete mode 100644 src/main/resources/site/pages/default/default.html delete mode 100644 src/main/resources/site/pages/default/default.xml delete mode 100644 src/main/resources/site/parts/clientReduxed/clientReduxed.es6 delete mode 100644 src/main/resources/site/parts/clientReduxed/clientReduxed.jsx delete mode 100644 src/main/resources/site/parts/clientReduxed/clientReduxed.xml delete mode 100644 src/main/resources/site/parts/example/example.es6 delete mode 100644 src/main/resources/site/parts/example/example.jsx delete mode 100644 src/main/resources/site/parts/example/example.xml delete mode 100644 src/main/resources/site/parts/hydrateReduxed/hydrateReduxed.es6 delete mode 100644 src/main/resources/site/parts/hydrateReduxed/hydrateReduxed.jsx delete mode 100644 src/main/resources/site/parts/hydrateReduxed/hydrateReduxed.xml diff --git a/src/main/react4xp/redux/index.es6 b/src/main/react4xp/redux/index.es6 deleted file mode 100644 index 1385591c..00000000 --- a/src/main/react4xp/redux/index.es6 +++ /dev/null @@ -1,20 +0,0 @@ -import { createStore } from 'redux'; - -import rootReducer from './reducers'; - - -let store = null; - -const getStore = (initialState) => { - if (store == null) { - store = createStore( - rootReducer, - initialState - ); - - store.subscribe( ()=>{ console.log("Store updated:", store.getState().greetings.greetingsCount, "greeting(s) and", store.getState().greetings.greeteeCount, "greeting receiver(s)"); }); - } - return store; -}; - -export default getStore; diff --git a/src/main/react4xp/redux/reducers/greetingsRed.es6 b/src/main/react4xp/redux/reducers/greetingsRed.es6 deleted file mode 100644 index dc6563d2..00000000 --- a/src/main/react4xp/redux/reducers/greetingsRed.es6 +++ /dev/null @@ -1,17 +0,0 @@ -import DuckFactory from 'duckfactory'; - -const greetingsDuck = new DuckFactory("GREETINGS", {}, { - moreGreetees: (state) => ({ - ...state, - greeteeCount: state.greeteeCount * 2, - greetee: state.greetee + " " + state.greetee, - }), - - moreGreetings: (state) => ({ - ...state, - greetingsCount: state.greetingsCount * 2, - }) - -}, true, true); // eslint-disable-line no-undef -export default greetingsDuck.getReducer(); -export const actionCreators = greetingsDuck.getActionCreators(); diff --git a/src/main/react4xp/redux/reducers/index.es6 b/src/main/react4xp/redux/reducers/index.es6 deleted file mode 100644 index ee2c7e49..00000000 --- a/src/main/react4xp/redux/reducers/index.es6 +++ /dev/null @@ -1,7 +0,0 @@ -import { combineReducers } from 'redux'; - -import greetingsReducer from './greetingsRed'; - -export default combineReducers({ - greetings: greetingsReducer, -}); diff --git a/src/main/react4xp/sharedComps/WorldGreeter.jsx b/src/main/react4xp/sharedComps/WorldGreeter.jsx deleted file mode 100644 index b783b63c..00000000 --- a/src/main/react4xp/sharedComps/WorldGreeter.jsx +++ /dev/null @@ -1,39 +0,0 @@ -import React from 'react'; -import { connect } from 'react-redux'; - -import { actionCreators as testAC } from '../redux/reducers/greetingsRed'; - -const WorldGreeter = ({greetingsCount, greetee, moreGreetings, moreGreetees}) => { - let greetings = ""; - for (let i = 0; i < greetingsCount; i++) { - greetings += "hello "; - } - greetings = greetings.charAt(0).toUpperCase() + greetings.substr(1); - - return
-

- {greetings} - {greetee} - ! -

-
; -}; - -const mapStateToProps = (state) => ({ - greetingsCount: state.greetings.greetingsCount, - greetee: state.greetings.greetee, -}); - -const mapDispatchToProps = { - moreGreetings: testAC.moreGreetings, - moreGreetees: testAC.moreGreetees, -}; - - - -// ---------------------------------------------- Export - -export default connect( - mapStateToProps, - mapDispatchToProps -)(WorldGreeter); diff --git a/src/main/resources/site/pages/default/default.es6 b/src/main/resources/site/pages/default/default.es6 deleted file mode 100644 index f69ff11b..00000000 --- a/src/main/resources/site/pages/default/default.es6 +++ /dev/null @@ -1,25 +0,0 @@ -var libs = { - portal: require('/lib/xp/portal'), // Import the portal functions - thymeleaf: require('/lib/xp/thymeleaf'), // Import the Thymeleaf rendering function -}; - -// Specify the view file to use -var view = resolve('default.html'); - - -// Handle the GET request -exports.get = function(req) { - // Get the content that is using the page - var content = libs.portal.getContent(); - - var mainRegion = content.page.regions.main; - - // Prepare the model that will be passed to the view - var model = { content, mainRegion }; - - // Render the dynamic HTML with values from the model - var body = libs.thymeleaf.render(view, model); - - // Return the response object - return { body } -}; diff --git a/src/main/resources/site/pages/default/default.html b/src/main/resources/site/pages/default/default.html deleted file mode 100644 index e7cfb9a6..00000000 --- a/src/main/resources/site/pages/default/default.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - Enonic XP - - - -
- - - - - -
- - diff --git a/src/main/resources/site/pages/default/default.xml b/src/main/resources/site/pages/default/default.xml deleted file mode 100644 index e1266fe6..00000000 --- a/src/main/resources/site/pages/default/default.xml +++ /dev/null @@ -1,7 +0,0 @@ - - Default page - - - - - diff --git a/src/main/resources/site/parts/clientReduxed/clientReduxed.es6 b/src/main/resources/site/parts/clientReduxed/clientReduxed.es6 deleted file mode 100644 index 37c0907f..00000000 --- a/src/main/resources/site/parts/clientReduxed/clientReduxed.es6 +++ /dev/null @@ -1,18 +0,0 @@ -const portal = require('/lib/xp/portal'); -const React4xp = require('/lib/enonic/react4xp'); - -// Handle the GET request -exports.get = function(request) { - const component = portal.getComponent(); - - const props = { - initialState: { - greetings: { - greetingsCount: 1, - greeteeCount: 1, - greetee: component.config.greeted - } - } - }; - return React4xp.render(request, { component, props }); -}; diff --git a/src/main/resources/site/parts/clientReduxed/clientReduxed.jsx b/src/main/resources/site/parts/clientReduxed/clientReduxed.jsx deleted file mode 100644 index c421d3bf..00000000 --- a/src/main/resources/site/parts/clientReduxed/clientReduxed.jsx +++ /dev/null @@ -1,9 +0,0 @@ -import React from 'react'; -import { Provider } from 'react-redux'; - -import getStore from '../../../../react4xp/redux'; -import WorldGreeter from '../../../../react4xp/sharedComps/WorldGreeter'; - -export default (props) => - -; diff --git a/src/main/resources/site/parts/clientReduxed/clientReduxed.xml b/src/main/resources/site/parts/clientReduxed/clientReduxed.xml deleted file mode 100644 index a4da431b..00000000 --- a/src/main/resources/site/parts/clientReduxed/clientReduxed.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - Client ReactRedux - - - - - world - - - diff --git a/src/main/resources/site/parts/example/example.es6 b/src/main/resources/site/parts/example/example.es6 deleted file mode 100644 index 9ee0982e..00000000 --- a/src/main/resources/site/parts/example/example.es6 +++ /dev/null @@ -1,10 +0,0 @@ -const portal = require('/lib/xp/portal'); -const React4xp = require('/lib/enonic/react4xp'); - -// Handle the GET request -exports.get = function(request) { - const component = portal.getComponent(); - - const props = { greeted: component.config.greeted }; - return React4xp.render(request, { component, props }); -}; diff --git a/src/main/resources/site/parts/example/example.jsx b/src/main/resources/site/parts/example/example.jsx deleted file mode 100644 index 3a6726bb..00000000 --- a/src/main/resources/site/parts/example/example.jsx +++ /dev/null @@ -1,3 +0,0 @@ -import React from 'react'; - -export default (props) =>

Hello {props.greeted}!

; diff --git a/src/main/resources/site/parts/example/example.xml b/src/main/resources/site/parts/example/example.xml deleted file mode 100644 index 06d6f6b4..00000000 --- a/src/main/resources/site/parts/example/example.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - React example - - - - - world - - - diff --git a/src/main/resources/site/parts/hydrateReduxed/hydrateReduxed.es6 b/src/main/resources/site/parts/hydrateReduxed/hydrateReduxed.es6 deleted file mode 100644 index 79a04677..00000000 --- a/src/main/resources/site/parts/hydrateReduxed/hydrateReduxed.es6 +++ /dev/null @@ -1,18 +0,0 @@ -const portal = require('/lib/xp/portal'); -const React4xp = require('/lib/enonic/react4xp'); - -// Handle the GET request -exports.get = function(request) { - const component = portal.getComponent(); - - const props = { - initialState: { - greetings: { - greetingsCount: 1, - greeteeCount: 1, - greetee: component.config.greeted - } - } - }; - return React4xp.renderMarkupAndHydrate({ component, props }); -}; diff --git a/src/main/resources/site/parts/hydrateReduxed/hydrateReduxed.jsx b/src/main/resources/site/parts/hydrateReduxed/hydrateReduxed.jsx deleted file mode 100644 index c421d3bf..00000000 --- a/src/main/resources/site/parts/hydrateReduxed/hydrateReduxed.jsx +++ /dev/null @@ -1,9 +0,0 @@ -import React from 'react'; -import { Provider } from 'react-redux'; - -import getStore from '../../../../react4xp/redux'; -import WorldGreeter from '../../../../react4xp/sharedComps/WorldGreeter'; - -export default (props) => - -; diff --git a/src/main/resources/site/parts/hydrateReduxed/hydrateReduxed.xml b/src/main/resources/site/parts/hydrateReduxed/hydrateReduxed.xml deleted file mode 100644 index a78dec41..00000000 --- a/src/main/resources/site/parts/hydrateReduxed/hydrateReduxed.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - Hydrate ReactRedux - - - - - world - - - From a733cd3db39e57b84d29cc3ea24015ea4aeaef7c Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Sun, 3 Feb 2019 14:38:38 +0100 Subject: [PATCH 95/96] Re-inserted the simplest example and corrected mistake in readme. --- README.md | 2 +- .../resources/lib/enonic/react4xp/index.es6 | 8 +++--- .../resources/site/pages/default/default.es6 | 25 +++++++++++++++++++ .../resources/site/pages/default/default.html | 19 ++++++++++++++ .../resources/site/pages/default/default.xml | 7 ++++++ .../resources/site/parts/example/example.es6 | 10 ++++++++ .../resources/site/parts/example/example.jsx | 3 +++ .../resources/site/parts/example/example.xml | 11 ++++++++ 8 files changed, 80 insertions(+), 5 deletions(-) create mode 100644 src/main/resources/site/pages/default/default.es6 create mode 100644 src/main/resources/site/pages/default/default.html create mode 100644 src/main/resources/site/pages/default/default.xml create mode 100644 src/main/resources/site/parts/example/example.es6 create mode 100644 src/main/resources/site/parts/example/example.jsx create mode 100644 src/main/resources/site/parts/example/example.xml diff --git a/README.md b/README.md index df2b3494..4b8a9693 100644 --- a/README.md +++ b/README.md @@ -89,7 +89,7 @@ For example, in the hello-world example above, the entry path of `example.jsx` i Used in XP controllers. Relies on webpack having done its job (setting up the entry paths, the hashed chunk names and the correct placement of all the files), and handles the interplay between backend and frontend mainly using the entry paths. In addition to the `.render` method from the hello-world example are some other options: - `React4xp.renderSSR(params)`: Same as React4xp.render, but without the `request`, and always renders static server-side markup. No need for a `request` argument. Worth noting: the first server-side rendering in Nashorn is much slower than repeated calls to the same component. The component is cached as a function, so re-calling it even with different props will be much more performant. - `React4xp.renderClient(params)`: Same as React4xp.renderSSR, but always renders active client-side react. Might nota always work so well in XP content studio's edit mode). - - `React4xp.renderClient(params)`: Same as React4xp.renderSSR, but also tries to activate the component (hydrate; populate the previously rendered DOM with active react functionality). As above, your mileage might vary when it comes to how it behaves in XP content studio's edit mode. + - `React4xp.renderMarkupAndHydrate(params)`: Same as React4xp.renderSSR, but also tries to activate the component (hydrate; populate the previously rendered DOM with active react functionality). As above, your mileage might vary when it comes to how it behaves in XP content studio's edit mode. For more fine-grained control, build a **React4xp instance**. This can be done in two ways: - `new React4xp(initParam);`, the basic constructor where `initParam` is either the XP component object, or an entry path string, or diff --git a/src/main/resources/lib/enonic/react4xp/index.es6 b/src/main/resources/lib/enonic/react4xp/index.es6 index 37c7feb0..062102d2 100644 --- a/src/main/resources/lib/enonic/react4xp/index.es6 +++ b/src/main/resources/lib/enonic/react4xp/index.es6 @@ -476,7 +476,7 @@ class React4xp { }; - /** All-in-one serverside renderer that afterwards activates (hydrates) the component in the client. + /** All-in-one serverside renderer that adds scripts that afterwards activate (hydrates) the component in the client. * Returns a response object that can be directly returned from an XP controller. * @param params {object} See .render for parameter details. */ @@ -487,12 +487,11 @@ class React4xp { body: react4xp.renderIntoBody(body), pageContributions: react4xp.renderHydrationPageContributions(pageContributions) } - } -} + }; -/** All-in-one renderer. Returns a response object that can be directly returned from an XP controller. + /** All-in-one renderer. Returns a response object that can be directly returned from an XP controller. * @param request {object} XP request object. * @param params {object} must include EITHER jsxPath or component! All other parameters are optional: * - component {object} XP component object (used to extrapolate component part, sufficient if JSX entry file is in the same folder and has the same name). @@ -518,6 +517,7 @@ class React4xp { pageContributions: react4xp.renderClientPageContributions(pageContributions) } }; +} diff --git a/src/main/resources/site/pages/default/default.es6 b/src/main/resources/site/pages/default/default.es6 new file mode 100644 index 00000000..f69ff11b --- /dev/null +++ b/src/main/resources/site/pages/default/default.es6 @@ -0,0 +1,25 @@ +var libs = { + portal: require('/lib/xp/portal'), // Import the portal functions + thymeleaf: require('/lib/xp/thymeleaf'), // Import the Thymeleaf rendering function +}; + +// Specify the view file to use +var view = resolve('default.html'); + + +// Handle the GET request +exports.get = function(req) { + // Get the content that is using the page + var content = libs.portal.getContent(); + + var mainRegion = content.page.regions.main; + + // Prepare the model that will be passed to the view + var model = { content, mainRegion }; + + // Render the dynamic HTML with values from the model + var body = libs.thymeleaf.render(view, model); + + // Return the response object + return { body } +}; diff --git a/src/main/resources/site/pages/default/default.html b/src/main/resources/site/pages/default/default.html new file mode 100644 index 00000000..e7cfb9a6 --- /dev/null +++ b/src/main/resources/site/pages/default/default.html @@ -0,0 +1,19 @@ + + + + + + + Enonic XP + + + +
+ + + + + +
+ + diff --git a/src/main/resources/site/pages/default/default.xml b/src/main/resources/site/pages/default/default.xml new file mode 100644 index 00000000..e1266fe6 --- /dev/null +++ b/src/main/resources/site/pages/default/default.xml @@ -0,0 +1,7 @@ + + Default page + + + + + diff --git a/src/main/resources/site/parts/example/example.es6 b/src/main/resources/site/parts/example/example.es6 new file mode 100644 index 00000000..9ee0982e --- /dev/null +++ b/src/main/resources/site/parts/example/example.es6 @@ -0,0 +1,10 @@ +const portal = require('/lib/xp/portal'); +const React4xp = require('/lib/enonic/react4xp'); + +// Handle the GET request +exports.get = function(request) { + const component = portal.getComponent(); + + const props = { greeted: component.config.greeted }; + return React4xp.render(request, { component, props }); +}; diff --git a/src/main/resources/site/parts/example/example.jsx b/src/main/resources/site/parts/example/example.jsx new file mode 100644 index 00000000..3a6726bb --- /dev/null +++ b/src/main/resources/site/parts/example/example.jsx @@ -0,0 +1,3 @@ +import React from 'react'; + +export default (props) =>

Hello {props.greeted}!

; diff --git a/src/main/resources/site/parts/example/example.xml b/src/main/resources/site/parts/example/example.xml new file mode 100644 index 00000000..06d6f6b4 --- /dev/null +++ b/src/main/resources/site/parts/example/example.xml @@ -0,0 +1,11 @@ + + + React example + + + + + world + + + From 42199fc9388be61fa5d1c49f8d79219739846209 Mon Sep 17 00:00:00 2001 From: Espen Norderud Date: Sun, 3 Feb 2019 14:50:39 +0100 Subject: [PATCH 96/96] Update README.md --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 4b8a9693..e648328e 100644 --- a/README.md +++ b/README.md @@ -165,3 +165,7 @@ class WorldGreeter expands React.Component { export default (props) => ; ``` + +## More examples + +See the examples branches.