diff --git a/client/webpack-hot-middleware-client.js b/client/webpack-hot-middleware-client.js
index f97c5853..ac8a7fc0 100644
--- a/client/webpack-hot-middleware-client.js
+++ b/client/webpack-hot-middleware-client.js
@@ -30,7 +30,16 @@ export default () => {
return
}
- const { err } = Router.components[route] || {}
+ const { err, Component } = Router.components[route] || {}
+
+ if (!Component) {
+ // This only happens when we create a new page without a default export.
+ // If you removed a default export from a exising viewing page, this has no effect.
+ console.log(`Hard reloading due to no default component in page: ${route}`)
+ window.location.reload()
+ return
+ }
+
if (err) {
// reload to recover from runtime errors
Router.reload(route)
diff --git a/examples/layout-component/components/layout.js b/examples/layout-component/components/layout.js
index 2194b583..d96a8434 100644
--- a/examples/layout-component/components/layout.js
+++ b/examples/layout-component/components/layout.js
@@ -19,7 +19,7 @@ export default ({ children, title = 'This is the default title' }) => (
{ children }
)
diff --git a/examples/with-scoped-stylesheets-and-postcss/.babelrc b/examples/with-ant-design/.babelrc
similarity index 57%
rename from examples/with-scoped-stylesheets-and-postcss/.babelrc
rename to examples/with-ant-design/.babelrc
index be365edb..d3c9e3f8 100644
--- a/examples/with-scoped-stylesheets-and-postcss/.babelrc
+++ b/examples/with-ant-design/.babelrc
@@ -3,8 +3,8 @@
"next/babel"
],
"plugins": [
- ["wrap-in-js", {
- "extensions": ["css$"]
+ ["import", {
+ "libraryName": "antd"
}]
]
}
diff --git a/examples/with-ant-design/README.md b/examples/with-ant-design/README.md
new file mode 100644
index 00000000..efa5cf4a
--- /dev/null
+++ b/examples/with-ant-design/README.md
@@ -0,0 +1,29 @@
+[![Deploy to now](https://deploy.now.sh/static/button.svg)](https://deploy.now.sh/?repo=https://github.com/zeit/next.js/tree/master/examples/with-ant-design)
+
+# Ant Design example
+
+## How to use
+
+Download the example [or clone the repo](https://github.com/zeit/next.js):
+
+```bash
+curl https://codeload.github.com/zeit/next.js/tar.gz/master | tar -xz --strip=2 next.js-master/examples/with-ant-design
+cd with-ant-design
+```
+
+Install it and run:
+
+```bash
+npm install
+npm run dev
+```
+
+Deploy it to the cloud with [now](https://zeit.co/now) ([download](https://zeit.co/download))
+
+```bash
+now
+```
+
+## The idea behind the example
+
+This example shows how to use Next.js along with [Ant Design of React](http://ant.design). This is intended to show the integration of this UI toolkit with the Framework.
diff --git a/examples/with-ant-design/package.json b/examples/with-ant-design/package.json
new file mode 100644
index 00000000..a97c8497
--- /dev/null
+++ b/examples/with-ant-design/package.json
@@ -0,0 +1,18 @@
+{
+ "name": "with-ant-design",
+ "version": "1.0.0",
+ "scripts": {
+ "dev": "next",
+ "build": "next build",
+ "start": "next start"
+ },
+ "dependencies": {
+ "antd": "^2.10.2",
+ "babel-plugin-import": "^1.1.1",
+ "next": "latest",
+ "react": "^15.5.4",
+ "react-dom": "^15.5.4"
+ },
+ "author": "",
+ "license": "ISC"
+}
diff --git a/examples/with-ant-design/pages/index.js b/examples/with-ant-design/pages/index.js
new file mode 100644
index 00000000..83320a26
--- /dev/null
+++ b/examples/with-ant-design/pages/index.js
@@ -0,0 +1,74 @@
+import Head from 'next/head'
+import { Form, Select, InputNumber, DatePicker, Switch, Slider, Button, LocaleProvider } from 'antd'
+import enUS from 'antd/lib/locale-provider/en_US'
+
+const FormItem = Form.Item
+const Option = Select.Option
+
+export default () => (
+
+
+
+)
diff --git a/examples/with-antd-mobile/.babelrc b/examples/with-antd-mobile/.babelrc
new file mode 100644
index 00000000..3a6db05f
--- /dev/null
+++ b/examples/with-antd-mobile/.babelrc
@@ -0,0 +1,13 @@
+{
+ "presets": [
+ "next/babel"
+ ],
+ "plugins": [
+ [
+ "import",
+ {
+ "libraryName": "antd-mobile"
+ }
+ ]
+ ]
+}
diff --git a/examples/with-antd-mobile/README.md b/examples/with-antd-mobile/README.md
new file mode 100644
index 00000000..a92fa248
--- /dev/null
+++ b/examples/with-antd-mobile/README.md
@@ -0,0 +1,28 @@
+[![Deploy to now](https://deploy.now.sh/static/button.svg)](https://deploy.now.sh/?repo=https://github.com/zeit/next.js/tree/master/examples/with-material-ui)
+# Ant Design Mobile example
+
+## How to use
+
+Download the example [or clone the repo](https://github.com/zeit/next.js):
+
+```bash
+curl https://codeload.github.com/zeit/next.js/tar.gz/master | tar -xz --strip=2 next.js-master/examples/with-antd-mobile
+cd with-antd-mobile
+```
+
+Install it and run:
+
+```bash
+npm install
+npm run dev
+```
+
+Deploy it to the cloud with [now](https://zeit.co/now) ([download](https://zeit.co/download))
+
+```bash
+now
+```
+
+## The idea behind the example
+
+This example features how you use [antd-mobile](https://github.com/ant-design/ant-design-mobile) (Ant Design Mobile FrontEnd Framwork) with Next.js.
diff --git a/examples/with-antd-mobile/components/Layout.js b/examples/with-antd-mobile/components/Layout.js
new file mode 100644
index 00000000..b1777f62
--- /dev/null
+++ b/examples/with-antd-mobile/components/Layout.js
@@ -0,0 +1,16 @@
+import React, { Component } from 'react'
+import { LocaleProvider } from 'antd-mobile'
+import enUS from 'antd-mobile/lib/locale-provider/en_US'
+
+export default class Layout extends Component {
+ render () {
+ const { language, children } = this.props
+ const locale = language.substr(0, 2) === 'en' ? enUS : undefined
+
+ return (
+
+ {children}
+
+ )
+ }
+}
diff --git a/examples/with-antd-mobile/components/MenuBar.js b/examples/with-antd-mobile/components/MenuBar.js
new file mode 100644
index 00000000..e62cbff6
--- /dev/null
+++ b/examples/with-antd-mobile/components/MenuBar.js
@@ -0,0 +1,44 @@
+import React, { Component } from 'react'
+import Router from 'next/router'
+import { TabBar, Icon } from 'antd-mobile'
+
+export default class MenuBar extends Component {
+ render () {
+ const {
+ pathname,
+ children
+ } = this.props
+
+ return (
+
+ {tabBarData.map(({ title, icon, selectedIcon, link, dot, component: Component }) => (
+ }
+ selectedIcon={}
+ selected={pathname === link}
+ onPress={() => Router.push(link)}
+ >
+ {children}
+
+ ))}
+
+ )
+ }
+}
+
+const tabBarData = [
+ {
+ title: 'Home',
+ icon: 'koubei-o',
+ selectedIcon: 'koubei',
+ link: '/home'
+ },
+ {
+ title: 'Trick',
+ icon: 'check-circle-o',
+ selectedIcon: 'check-circle',
+ link: '/trick'
+ }
+]
diff --git a/examples/with-antd-mobile/next.config.js b/examples/with-antd-mobile/next.config.js
new file mode 100644
index 00000000..1b7e78dc
--- /dev/null
+++ b/examples/with-antd-mobile/next.config.js
@@ -0,0 +1,54 @@
+const path = require('path')
+const fs = require('fs')
+const requireHacker = require('require-hacker')
+
+function setupRequireHacker () {
+ requireHacker.resolver((filename, module) => {
+ if (filename.endsWith('/style/css')) {
+ return requireHacker.resolve(`${filename}.web.js`, module)
+ }
+ })
+
+ requireHacker.hook('js', filename => {
+ if (
+ filename.endsWith('.web.js') ||
+ !filename.includes('/node_modules/') ||
+ ['antd-mobile', 'rc-swipeout', 'rmc-picker'].every(p => !filename.includes(p))
+ ) return
+
+ const webjs = filename.replace(/\.js$/, '.web.js')
+ if (!fs.existsSync(webjs)) return
+
+ return fs.readFileSync(webjs, { encoding: 'utf8' })
+ })
+
+ requireHacker.hook('css', () => '')
+
+ requireHacker.hook('svg', filename => {
+ return requireHacker.to_javascript_module_source(fs.readFileSync(filename, { encoding: 'utf8' }))
+ })
+}
+
+setupRequireHacker()
+
+function moduleDir (m) {
+ return path.dirname(require.resolve(`${m}/package.json`))
+}
+
+module.exports = {
+ webpack: (config, { dev }) => {
+ config.resolve.extensions = ['.web.js', '.js', '.json']
+
+ config.module.rules.push(
+ {
+ test: /\.(svg)$/i,
+ loader: 'svg-sprite-loader',
+ include: [
+ moduleDir('antd-mobile')
+ ]
+ }
+ )
+
+ return config
+ }
+}
diff --git a/examples/with-antd-mobile/package.json b/examples/with-antd-mobile/package.json
new file mode 100644
index 00000000..e6174c81
--- /dev/null
+++ b/examples/with-antd-mobile/package.json
@@ -0,0 +1,16 @@
+{
+ "dependencies": {
+ "antd-mobile": "^1.1.2",
+ "babel-plugin-import": "^1.1.1",
+ "next": "latest",
+ "react": "^15.5.4",
+ "react-dom": "^15.5.4",
+ "require-hacker": "^3.0.0",
+ "svg-sprite-loader": "~0.3.0"
+ },
+ "scripts": {
+ "dev": "next",
+ "build": "next build",
+ "start": "next start"
+ }
+}
diff --git a/examples/with-antd-mobile/pages/_document.js b/examples/with-antd-mobile/pages/_document.js
new file mode 100644
index 00000000..2c4e9b36
--- /dev/null
+++ b/examples/with-antd-mobile/pages/_document.js
@@ -0,0 +1,18 @@
+import Document, { Head, Main, NextScript } from 'next/document'
+
+export default class extends Document {
+ render () {
+ return (
+
+
+
+
+
+
+
+
+
+
+ )
+ }
+}
diff --git a/examples/with-antd-mobile/pages/home.js b/examples/with-antd-mobile/pages/home.js
new file mode 100644
index 00000000..2d49373a
--- /dev/null
+++ b/examples/with-antd-mobile/pages/home.js
@@ -0,0 +1,54 @@
+import React, {Component} from 'react'
+import {
+ WhiteSpace, WingBlank,
+ NavBar, Icon, Pagination, Steps
+} from 'antd-mobile'
+import Layout from '../components/Layout'
+import MenuBar from '../components/MenuBar'
+
+export default class Home extends Component {
+ static getInitialProps ({ req }) {
+ const language = req ? req.headers['accept-language'] : navigator.language
+
+ return {
+ language
+ }
+ }
+
+ render () {
+ const {
+ language,
+ url: { pathname }
+ } = this.props
+
+ return (
+
+
+ console.log('onLeftClick')}
+ rightContent={[
+ ,
+
+ ]}
+ >
+ NavBar
+
+
+
+
+
+
+
+
+
+
+
+
+
+ )
+ }
+}
diff --git a/examples/with-antd-mobile/pages/index.js b/examples/with-antd-mobile/pages/index.js
new file mode 100644
index 00000000..73e22db0
--- /dev/null
+++ b/examples/with-antd-mobile/pages/index.js
@@ -0,0 +1,9 @@
+import { Component } from 'react'
+
+export default class Index extends Component {
+ static async getInitialProps ({ res }) {
+ res.setHeader('Location', '/home')
+ res.statusCode = 302
+ res.end()
+ }
+}
diff --git a/examples/with-antd-mobile/pages/trick.js b/examples/with-antd-mobile/pages/trick.js
new file mode 100644
index 00000000..901aeb98
--- /dev/null
+++ b/examples/with-antd-mobile/pages/trick.js
@@ -0,0 +1,122 @@
+import React, { Component } from 'react'
+import {
+ WhiteSpace,
+ List, Switch, Modal, Button, Menu
+} from 'antd-mobile'
+import Layout from '../components/Layout'
+import MenuBar from '../components/MenuBar'
+
+export default class Trick extends Component {
+ static getInitialProps ({ req }) {
+ const language = req ? req.headers['accept-language'] : navigator.language
+ const userAgent = req ? req.headers['user-agent'] : navigator.userAgent
+ const android = /android/i.test(userAgent)
+ const platform = android ? 'android' : 'ios'
+
+ return {
+ language,
+ platform
+ }
+ }
+
+ constructor (props) {
+ super(props)
+
+ this.menuData = [
+ {
+ label: 'Menu 1',
+ value: '1',
+ children: [
+ {
+ label: 'Submenu 1-1',
+ value: '11'
+ },
+ {
+ label: 'Submenu 1-2',
+ value: '12'
+ }
+ ]
+ },
+ {
+ label: 'Menu 2',
+ value: '2',
+ children: [
+ {
+ label: 'Submenu 2-1',
+ value: '21'
+ },
+ {
+ label: 'Submenu 2-2',
+ value: '22'
+ },
+ {
+ label: 'Submenu 2-3',
+ value: '23'
+ }
+ ]
+ }
+ ]
+
+ this.state = {
+ switchChecked: true,
+ modalOpened: false
+ }
+ }
+
+ render () {
+ const {
+ language,
+ platform,
+ url: { pathname }
+ } = this.props
+
+ const {
+ switchChecked,
+ modalOpened
+ } = this.state
+
+ return (
+
+
+
+ 'Switch and Modal platform prop is required in SSR mode'}>
+ this.setState({ switchChecked: val })}
+ />
+ }
+ >
+ Switch {platform}
+
+
+
+ this.setState({ modalOpened: false }) }]}
+ onClose={() => this.setState({ modalOpened: false })}
+ >
+ I am a modal.
+ Must set platform prop
+
+ 'Menu height prop is required in SSR mode'}>
+
+
+
+
+ )
+ }
+}
diff --git a/examples/with-antd-mobile/static/hd.min.js b/examples/with-antd-mobile/static/hd.min.js
new file mode 100644
index 00000000..3aa34591
--- /dev/null
+++ b/examples/with-antd-mobile/static/hd.min.js
@@ -0,0 +1,2 @@
+!function(e){function t(a){if(i[a])return i[a].exports;var n=i[a]={exports:{},id:a,loaded:!1};return e[a].call(n.exports,n,n.exports,t),n.loaded=!0,n.exports}var i={};return t.m=e,t.c=i,t.p="",t(0)}([function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=window;t["default"]=i.flex=function(e,t){var a=e||100,n=t||1,r=i.document,o=navigator.userAgent,d=o.match(/Android[\S\s]+AppleWebkit\/(\d{3})/i),l=o.match(/U3\/((\d+|\.){5,})/i),c=l&&parseInt(l[1].split(".").join(""),10)>=80,p=navigator.appVersion.match(/(iphone|ipad|ipod)/gi),s=i.devicePixelRatio||1;p||d&&d[1]>534||c||(s=1);var u=1/s,m=r.querySelector('meta[name="viewport"]');m||(m=r.createElement("meta"),m.setAttribute("name","viewport"),r.head.appendChild(m)),m.setAttribute("content","width=device-width,user-scalable=no,initial-scale="+u+",maximum-scale="+u+",minimum-scale="+u),r.documentElement.style.fontSize=a/2*s*n+"px"},e.exports=t["default"]}]);
+flex(100, 1);
diff --git a/examples/with-external-scoped-css/.babelrc b/examples/with-external-scoped-css/.babelrc
index e6031195..4c964019 100644
--- a/examples/with-external-scoped-css/.babelrc
+++ b/examples/with-external-scoped-css/.babelrc
@@ -4,6 +4,7 @@
[
"css-modules-transform", {
"extensions": [".css", ".sass"],
+ "append": [ "postcss-cssnext" ],
"extractCss": "./static/css/bundle.css",
"preprocessCss": "./pre-processor.js"
}
diff --git a/examples/with-external-scoped-css/global.sass b/examples/with-external-scoped-css/global.sass
new file mode 100644
index 00000000..f756f1b3
--- /dev/null
+++ b/examples/with-external-scoped-css/global.sass
@@ -0,0 +1,3 @@
+@mixin opacity($opacity)
+ opacity: $opacity
+ filter: alpha(opacity=($opacity * 100))
\ No newline at end of file
diff --git a/examples/with-external-scoped-css/package.json b/examples/with-external-scoped-css/package.json
index 523ec418..05f080ba 100644
--- a/examples/with-external-scoped-css/package.json
+++ b/examples/with-external-scoped-css/package.json
@@ -16,6 +16,8 @@
},
"devDependencies": {
"babel-plugin-css-modules-transform": "^1.2.1",
- "node-sass": "^4.5.0"
+ "node-sass": "^4.5.0",
+ "postcss": "^5.2.16",
+ "postcss-cssnext": "^2.10.0"
}
}
diff --git a/examples/with-external-scoped-css/pages/index.sass b/examples/with-external-scoped-css/pages/index.sass
index 8dc7419c..85c331f2 100644
--- a/examples/with-external-scoped-css/pages/index.sass
+++ b/examples/with-external-scoped-css/pages/index.sass
@@ -1,4 +1,7 @@
+@import "../global"
+
.example
+ @include opacity(0.5)
font-size: 36px
width: 300px
- margin: 100px auto
\ No newline at end of file
+ display: flex
diff --git a/examples/with-glamorous/pages/index.js b/examples/with-glamorous/pages/index.js
index fb3084c8..756ee268 100644
--- a/examples/with-glamorous/pages/index.js
+++ b/examples/with-glamorous/pages/index.js
@@ -10,7 +10,7 @@ if (typeof window !== 'undefined') {
}
export default () => {
- css.global('html, body', { padding: '3rem 1rem', margin: 0, background: 'papayawhip', 'min-height': '100%', 'font-family': 'Helvetica, Arial, sans-serif', 'font-size': '24px' })
+ css.global('html, body', { padding: '3rem 1rem', margin: 0, background: 'papayawhip', minHeight: '100%', fontFamily: 'Helvetica, Arial, sans-serif', fontSize: '24px' })
const basicStyles = {
backgroundColor: 'white',
diff --git a/examples/with-i18next/components/Title.js b/examples/with-i18next/components/Title.js
index ed6a37f6..3af705a6 100644
--- a/examples/with-i18next/components/Title.js
+++ b/examples/with-i18next/components/Title.js
@@ -1,2 +1,2 @@
import { translate } from 'react-i18next'
-export default translate(['common'])((props) => ({props.t('hello')}
))
+export default translate(['common'])((props) => ({props.t('hello')}, {props.t('morning')}
))
diff --git a/examples/with-i18next/pages/index.js b/examples/with-i18next/pages/index.js
index 2d429a86..c5eb77e5 100644
--- a/examples/with-i18next/pages/index.js
+++ b/examples/with-i18next/pages/index.js
@@ -4,9 +4,12 @@ import startI18n from '../tools/startI18n'
import { getTranslation } from '../tools/translationHelpers'
import Title from '../components/Title'
+// get language from query parameter or url path
+const lang = 'id'
+
export default class Homepage extends Component {
static async getInitialProps () {
- const translations = await getTranslation('pt', 'common', 'http://localhost:3000/static/locales/')
+ const translations = await getTranslation(lang, 'common', 'http://localhost:3000/static/locales/')
return { translations }
}
@@ -14,7 +17,7 @@ export default class Homepage extends Component {
constructor (props) {
super(props)
- this.i18n = startI18n(props.translations)
+ this.i18n = startI18n(props.translations, lang)
}
render (props) {
diff --git a/examples/with-i18next/static/locales/id/common.json b/examples/with-i18next/static/locales/id/common.json
new file mode 100644
index 00000000..d90a19f9
--- /dev/null
+++ b/examples/with-i18next/static/locales/id/common.json
@@ -0,0 +1,3 @@
+{
+ "hello": "halo"
+}
\ No newline at end of file
diff --git a/examples/with-i18next/static/locales/pt/common.json b/examples/with-i18next/static/locales/pt/common.json
index c8f9b7c0..cbdf2773 100644
--- a/examples/with-i18next/static/locales/pt/common.json
+++ b/examples/with-i18next/static/locales/pt/common.json
@@ -1,3 +1,4 @@
{
- "hello": "e ae tche"
+ "hello": "e ae tche",
+ "morning": "manha"
}
\ No newline at end of file
diff --git a/examples/with-i18next/tools/startI18n.js b/examples/with-i18next/tools/startI18n.js
index 791d2c93..db65b27f 100644
--- a/examples/with-i18next/tools/startI18n.js
+++ b/examples/with-i18next/tools/startI18n.js
@@ -1,6 +1,7 @@
import i18n from 'i18next'
-const startI18n = file => i18n.init({
+const startI18n = (file, lang) => i18n.init({
+ lng: lang, // active language http://i18next.com/translate/
fallbackLng: 'pt',
resources: file,
ns: ['common'],
diff --git a/examples/with-scoped-stylesheets-and-postcss/README.md b/examples/with-scoped-stylesheets-and-postcss/README.md
index 71f30b41..a00b256d 100644
--- a/examples/with-scoped-stylesheets-and-postcss/README.md
+++ b/examples/with-scoped-stylesheets-and-postcss/README.md
@@ -29,26 +29,6 @@ now
Scoped CSS is neat and keeps your JS clean. PostCSS is amazing for extended features, such as nesting. CSS Modules keep your class names “local”.
-# Known bugs
+# Known issues
-There's a bug, possibly within `next.js`, making composition between files unuseable. Consider the following:
-
-*`styles.css`*
-```css
-.paragraph {
- composes: font-sans from '../global.css';
-}
-```
-
-*`global.css`*
-```css
-.font-sans {
- font-family: georgia; /* ;) */
-}
-```
-
-The following error is thrown:
-
-```
-Module build failed: Error: Cannot find module '-!./../node_modules/css-loader/index.js??ref--6-4!./../node_modules/postcss-loader/index.js!../global.css'
-```
+Composed CSS files are not watched by next.js, and thus, if you change one, nothing will happen. You'll need to edit a JS file or the CSS file you're composing for it to hot reload.
diff --git a/examples/with-scoped-stylesheets-and-postcss/next.config.js b/examples/with-scoped-stylesheets-and-postcss/next.config.js
index 2ff60524..b161630f 100644
--- a/examples/with-scoped-stylesheets-and-postcss/next.config.js
+++ b/examples/with-scoped-stylesheets-and-postcss/next.config.js
@@ -1,3 +1,5 @@
+const trash = require('trash')
+
module.exports = {
webpack: (config) => {
config.module.rules.push(
@@ -10,27 +12,21 @@ module.exports = {
name: 'dist/[path][name].[ext]'
}
},
- 'raw-loader',
- 'val-loader',
{
loader: 'skeleton-loader',
options: {
- procedure: (content) => (
- `${content} \n` + ['module.exports = {',
- 'stylesheet: module.exports.toString(),',
- 'classNames: exports.locals',
+ procedure: function (content) {
+ const fileName = `${this._module.userRequest}.json`
+ const classNames = JSON.stringify(require(fileName))
+
+ trash(fileName)
+
+ return ['module.exports = {',
+ `classNames: ${classNames},`,
+ `stylesheet: \`${content}\``,
'}'
].join('')
- )
- }
- },
- {
- loader: 'css-loader',
- options: {
- modules: true,
- minimize: true,
- importLoaders: 1,
- localIdentName: '[local]-[hash:base64:5]'
+ }
}
},
'postcss-loader'
diff --git a/examples/with-scoped-stylesheets-and-postcss/package.json b/examples/with-scoped-stylesheets-and-postcss/package.json
index f69799ff..50e94877 100644
--- a/examples/with-scoped-stylesheets-and-postcss/package.json
+++ b/examples/with-scoped-stylesheets-and-postcss/package.json
@@ -10,18 +10,17 @@
"author": "Thomas Lindstrøm ",
"license": "ISC",
"dependencies": {
- "babel-plugin-wrap-in-js": "^1.1.1",
- "css-loader": "^0.26.1",
+ "cssnano": "^3.10.0",
"next": "latest",
"postcss-cssnext": "^2.9.0",
"postcss-loader": "^1.3.0",
- "raw-loader": "^0.5.1",
+ "postcss-modules": "^0.6.4",
"react": "^15.4.2",
"react-dom": "^15.4.2",
- "skeleton-loader": "0.0.7",
- "val-loader": "^0.5.0"
+ "skeleton-loader": "^1.1.2",
+ "trash": "^4.0.1"
},
"devDependencies": {
- "now": "^3.1.0"
+ "now": "^4.10.3"
}
}
diff --git a/examples/with-scoped-stylesheets-and-postcss/pages/global.css b/examples/with-scoped-stylesheets-and-postcss/pages/global.css
new file mode 100644
index 00000000..3f4b6fc4
--- /dev/null
+++ b/examples/with-scoped-stylesheets-and-postcss/pages/global.css
@@ -0,0 +1,3 @@
+.font-color {
+ color: blue;
+}
diff --git a/examples/with-scoped-stylesheets-and-postcss/pages/styles.css b/examples/with-scoped-stylesheets-and-postcss/pages/styles.css
index 93949003..df16139d 100644
--- a/examples/with-scoped-stylesheets-and-postcss/pages/styles.css
+++ b/examples/with-scoped-stylesheets-and-postcss/pages/styles.css
@@ -1,4 +1,4 @@
.paragraph {
+ composes: font-color from './global.css';
font-size: 20px;
- color: red;
}
diff --git a/examples/with-scoped-stylesheets-and-postcss/postcss.config.js b/examples/with-scoped-stylesheets-and-postcss/postcss.config.js
index 07ae40df..4c211fe0 100644
--- a/examples/with-scoped-stylesheets-and-postcss/postcss.config.js
+++ b/examples/with-scoped-stylesheets-and-postcss/postcss.config.js
@@ -1,5 +1,9 @@
module.exports = {
plugins: [
- require('postcss-cssnext')()
+ require('postcss-cssnext')(),
+ require('postcss-modules')({
+ generateScopedName: '[local]-[hash:base64:5]'
+ }),
+ require('cssnano')()
]
}
diff --git a/flyfile.js b/flyfile.js
index 2eb49039..7b5c3731 100644
--- a/flyfile.js
+++ b/flyfile.js
@@ -4,7 +4,6 @@ const isWindows = /^win/.test(process.platform)
export async function compile(fly) {
await fly.parallel(['bin', 'server', 'lib', 'client'])
- await fly.start('unrestrict')
}
export async function bin(fly, opts) {
@@ -27,14 +26,6 @@ export async function client(fly, opts) {
notify('Compiled client files')
}
-export async function unrestrict(fly) {
- await fly.source('dist/lib/eval-script.js').babel({
- babelrc: false,
- plugins: ['babel-plugin-transform-remove-strict-mode']
- }).target('dist/lib')
- notify('Completed removing strict mode for eval script')
-}
-
export async function copy(fly) {
await fly.source('pages/**/*.js').target('dist/pages')
}
diff --git a/package.json b/package.json
index 5f07facb..91e8da5d 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "next",
- "version": "3.0.0-beta6",
+ "version": "3.0.0-beta7",
"description": "Minimalistic framework for server-rendered React applications",
"main": "./dist/server/next.js",
"license": "MIT",
@@ -82,12 +82,11 @@
"path-match": "1.2.4",
"pkg-up": "2.0.0",
"prop-types": "15.5.10",
- "react-hot-loader": "3.0.0-beta.6",
"recursive-copy": "^2.0.6",
- "send": "0.15.3",
+ "react-hot-loader": "3.0.0-beta.7",
"source-map-support": "0.4.15",
"strip-ansi": "3.0.1",
- "styled-jsx": "0.5.7",
+ "styled-jsx": "1.0.2",
"touch": "1.0.0",
"unfetch": "2.1.2",
"url": "0.11.0",
diff --git a/readme.md b/readme.md
index 03c96c87..4f59c429 100644
--- a/readme.md
+++ b/readme.md
@@ -583,6 +583,7 @@ Supported options:
- `dev` (`bool`) whether to launch Next.js in dev mode - default `false`
- `dir` (`string`) where the Next project is located - default `'.'`
- `quiet` (`bool`) Hide error messages containing server information - default `false`
+- `conf` (`object`) the same object you would use in `next.config.js` - default `{}`
Then, change your `start` script to `NODE_ENV=production node server.js`.
@@ -863,7 +864,7 @@ Then run `now` and enjoy!
Next.js can be deployed to other hosting solutions too. Please have a look at the ['Deployment'](https://github.com/zeit/next.js/wiki/Deployment) section of the wiki.
-Note: we recommend putting `.next`, or your custom dist folder (Please have a look at ['Custom Config'](You can set a custom folder in config https://github.com/zeit/next.js#custom-configuration.)), in `.npmignore` or `.gitignore`. Otherwise, use `files` or `now.files` to opt-into a whitelist of files you want to deploy (and obviously exclude `.next` or your custom dist folder)
+Note: we recommend putting `.next`, or your custom dist folder (you can set a custom folder in ['Custom Config'](https://github.com/zeit/next.js#custom-configuration)), in `.npmignore` or `.gitignore`. Otherwise, use `files` or `now.files` to opt-into a whitelist of files you want to deploy (and obviously exclude `.next` or your custom dist folder)
## Static HTML export
diff --git a/server/build/webpack.js b/server/build/webpack.js
index b15262ce..6c814e4c 100644
--- a/server/build/webpack.js
+++ b/server/build/webpack.js
@@ -314,7 +314,7 @@ export default async function createCompiler (dir, { dev = false, quiet = false,
}
if (config.webpack) {
- console.log('> Using "webpack" config function defined in next.config.js.')
+ console.log(`> Using "webpack" config function defined in ${config.configOrigin}.`)
webpackConfig = await config.webpack(webpackConfig, { dev })
}
return webpack(webpackConfig)
diff --git a/server/config.js b/server/config.js
index 81c3664b..02812bf5 100644
--- a/server/config.js
+++ b/server/config.js
@@ -8,17 +8,23 @@ const defaultConfig = {
webpackDevMiddleware: null,
poweredByHeader: true,
distDir: '.next',
- assetPrefix: ''
+ assetPrefix: '',
+ configOrigin: 'default',
+ useFileSystemPublicRoutes: true
}
-export default function getConfig (dir) {
+export default function getConfig (dir, customConfig) {
if (!cache.has(dir)) {
- cache.set(dir, loadConfig(dir))
+ cache.set(dir, loadConfig(dir, customConfig))
}
return cache.get(dir)
}
-function loadConfig (dir) {
+function loadConfig (dir, customConfig) {
+ if (customConfig && typeof customConfig === 'object') {
+ customConfig.configOrigin = 'server'
+ return withDefaults(customConfig)
+ }
const path = join(dir, 'next.config.js')
let userConfig = {}
@@ -27,7 +33,12 @@ function loadConfig (dir) {
if (userHasConfig) {
const userConfigModule = require(path)
userConfig = userConfigModule.default || userConfigModule
+ userConfig.configOrigin = 'next.config.js'
}
- return Object.assign({}, defaultConfig, userConfig)
+ return withDefaults(userConfig)
+}
+
+function withDefaults (config) {
+ return Object.assign({}, defaultConfig, config)
}
diff --git a/server/document.js b/server/document.js
index 26c5c18c..d327d4c0 100644
--- a/server/document.js
+++ b/server/document.js
@@ -36,8 +36,8 @@ export class Head extends Component {
getChunkPreloadLink (filename) {
const { __NEXT_DATA__ } = this.context._documentProps
- let { buildStats, assetPrefix } = __NEXT_DATA__
- const hash = buildStats ? buildStats[filename].hash : '-'
+ let { buildStats, assetPrefix, buildId } = __NEXT_DATA__
+ const hash = buildStats ? buildStats[filename].hash : buildId
return (
Using "webpackDevMiddleware" config function defined in next.config.js.')
+ console.log(`> Using "webpackDevMiddleware" config function defined in ${this.config.configOrigin}.`)
webpackDevMiddlewareConfig = this.config.webpackDevMiddleware(webpackDevMiddlewareConfig)
}
diff --git a/server/index.js b/server/index.js
index dbc5935d..08d0051b 100644
--- a/server/index.js
+++ b/server/index.js
@@ -1,4 +1,4 @@
-import { resolve, join } from 'path'
+import { resolve, join, sep } from 'path'
import { parse as parseUrl } from 'url'
import { parse as parseQs } from 'querystring'
import fs from 'fs'
@@ -24,14 +24,14 @@ const internalPrefixes = [
]
export default class Server {
- constructor ({ dir = '.', dev = false, staticMarkup = false, quiet = false } = {}) {
+ constructor ({ dir = '.', dev = false, staticMarkup = false, quiet = false, conf = null } = {}) {
this.dir = resolve(dir)
this.dev = dev
this.quiet = quiet
this.router = new Router()
- this.hotReloader = dev ? new HotReloader(this.dir, { quiet }) : null
+ this.hotReloader = dev ? new HotReloader(this.dir, { quiet, conf }) : null
this.http = null
- this.config = getConfig(this.dir)
+ this.config = getConfig(this.dir, conf)
this.dist = this.config.distDir
this.buildStats = !dev ? require(join(this.dir, this.dist, 'build-stats.json')) : null
this.buildId = !dev ? this.readBuildId() : '-'
@@ -113,24 +113,32 @@ export default class Server {
},
'/_next/:hash/manifest.js': async (req, res, params) => {
+ if (!this.dev) return this.send404(res)
+
this.handleBuildHash('manifest.js', params.hash, res)
const p = join(this.dir, `${this.dist}/manifest.js`)
await this.serveStatic(req, res, p)
},
'/_next/:hash/main.js': async (req, res, params) => {
+ if (!this.dev) return this.send404(res)
+
this.handleBuildHash('main.js', params.hash, res)
const p = join(this.dir, `${this.dist}/main.js`)
await this.serveStatic(req, res, p)
},
'/_next/:hash/commons.js': async (req, res, params) => {
+ if (!this.dev) return this.send404(res)
+
this.handleBuildHash('commons.js', params.hash, res)
const p = join(this.dir, `${this.dist}/commons.js`)
await this.serveStatic(req, res, p)
},
'/_next/:hash/app.js': async (req, res, params) => {
+ if (this.dev) return this.send404(res)
+
this.handleBuildHash('app.js', params.hash, res)
const p = join(this.dir, `${this.dist}/app.js`)
await this.serveStatic(req, res, p)
@@ -184,9 +192,11 @@ export default class Server {
'/static/:path+': async (req, res, params) => {
const p = join(this.dir, 'static', ...(params.path || []))
await this.serveStatic(req, res, p)
- },
+ }
+ }
- '/:path*': async (req, res, params, parsedUrl) => {
+ if (this.config.useFileSystemPublicRoutes) {
+ routes['/:path*'] = async (req, res, params, parsedUrl) => {
const { pathname, query } = parsedUrl
await this.render(req, res, pathname, query)
}
@@ -238,7 +248,7 @@ export default class Server {
res.setHeader('X-Powered-By', `Next.js ${pkg.version}`)
}
const html = await this.renderToHTML(req, res, pathname, query)
- return sendHTML(req, res, html, req.method)
+ return sendHTML(req, res, html, req.method, this.renderOpts)
}
async renderToHTML (req, res, pathname, query) {
@@ -266,7 +276,7 @@ export default class Server {
async renderError (err, req, res, pathname, query) {
const html = await this.renderErrorToHTML(err, req, res, pathname, query)
- return sendHTML(req, res, html, req.method)
+ return sendHTML(req, res, html, req.method, this.renderOpts)
}
async renderErrorToHTML (err, req, res, pathname, query) {
@@ -298,6 +308,10 @@ export default class Server {
}
async serveStatic (req, res, path) {
+ if (!this.isServeableUrl(path)) {
+ return this.render404(req, res)
+ }
+
try {
return await serveStatic(req, res, path)
} catch (err) {
@@ -309,6 +323,19 @@ export default class Server {
}
}
+ isServeableUrl (path) {
+ const resolved = resolve(path)
+ if (
+ resolved.indexOf(join(this.dir, this.dist) + sep) !== 0 &&
+ resolved.indexOf(join(this.dir, 'static') + sep) !== 0
+ ) {
+ // Seems like the user is trying to traverse the filesystem.
+ return false
+ }
+
+ return true
+ }
+
isInternalUrl (req) {
for (const prefix of internalPrefixes) {
if (prefix.test(req.url)) {
@@ -348,10 +375,16 @@ export default class Server {
handleBuildHash (filename, hash, res) {
if (this.dev) return
+
if (hash !== this.buildStats[filename].hash) {
throw new Error(`Invalid Build File Hash(${hash}) for chunk: ${filename}`)
}
res.setHeader('Cache-Control', 'max-age=365000000, immutable')
}
+
+ send404 (res) {
+ res.statusCode = 404
+ res.end('404 - Not Found')
+ }
}
diff --git a/server/render.js b/server/render.js
index 7ea4dc46..6e26833b 100644
--- a/server/render.js
+++ b/server/render.js
@@ -16,7 +16,7 @@ import { flushChunks } from '../lib/dynamic'
export async function render (req, res, pathname, query, opts) {
const html = await renderToHTML(req, res, pathname, opts)
- sendHTML(req, res, html, req.method)
+ sendHTML(req, res, html, req.method, opts)
}
export function renderToHTML (req, res, pathname, query, opts) {
@@ -25,7 +25,7 @@ export function renderToHTML (req, res, pathname, query, opts) {
export async function renderError (err, req, res, pathname, query, opts) {
const html = await renderErrorToHTML(err, req, res, query, opts)
- sendHTML(req, res, html, req.method)
+ sendHTML(req, res, html, req.method, opts)
}
export function renderErrorToHTML (err, req, res, pathname, query, opts = {}) {
@@ -90,15 +90,21 @@ async function doRender (req, res, pathname, query, {
}
const docProps = await loadGetInitialProps(Document, { ...ctx, renderPage })
+ // While developing, we should not cache any assets.
+ // So, we use a different buildId for each page load.
+ // With that we can ensure, we have unique URL for assets per every page load.
+ // So, it'll prevent issues like this: https://git.io/vHLtb
+ const devBuildId = Date.now()
if (res.finished) return
+ if (!Document.prototype || !Document.prototype.isReactComponent) throw new Error('_document.js is not exporting a React element')
const doc = createElement(Document, {
__NEXT_DATA__: {
props,
pathname,
query,
- buildId,
+ buildId: dev ? devBuildId : buildId,
buildStats,
assetPrefix,
nextExport,
@@ -160,7 +166,7 @@ export async function renderScriptError (req, res, page, error, customFields, op
`)
}
-export function sendHTML (req, res, html, method) {
+export function sendHTML (req, res, html, method, { dev }) {
if (res.finished) return
const etag = generateETag(html)
@@ -170,6 +176,12 @@ export function sendHTML (req, res, html, method) {
return
}
+ if (dev) {
+ // In dev, we should not cache pages for any reason.
+ // That's why we do this.
+ res.setHeader('Cache-Control', 'no-store, must-revalidate')
+ }
+
res.setHeader('ETag', etag)
res.setHeader('Content-Type', 'text/html')
res.setHeader('Content-Length', Buffer.byteLength(html))
diff --git a/test/integration/basic/test/misc.js b/test/integration/basic/test/misc.js
index 3eb1e602..29926790 100644
--- a/test/integration/basic/test/misc.js
+++ b/test/integration/basic/test/misc.js
@@ -1,5 +1,4 @@
/* global describe, test, expect */
-import fetch from 'node-fetch'
export default function (context) {
describe('Misc', () => {
@@ -13,14 +12,5 @@ export default function (context) {
const html = await context.app.renderToHTML({}, res, '/finish-response', {})
expect(html).toBeFalsy()
})
-
- test('allow etag header support', async () => {
- const url = `http://localhost:${context.appPort}/stateless`
- const etag = (await fetch(url)).headers.get('ETag')
-
- const headers = { 'If-None-Match': etag }
- const res2 = await fetch(url, { headers })
- expect(res2.status).toBe(304)
- })
})
}
diff --git a/test/integration/production/test/index.test.js b/test/integration/production/test/index.test.js
index b15c02ee..f8f798a3 100644
--- a/test/integration/production/test/index.test.js
+++ b/test/integration/production/test/index.test.js
@@ -9,6 +9,7 @@ import {
renderViaHTTP
} from 'next-test-utils'
import webdriver from 'next-webdriver'
+import fetch from 'node-fetch'
const appDir = join(__dirname, '../')
let appPort
@@ -35,6 +36,15 @@ describe('Production Usage', () => {
const html = await renderViaHTTP(appPort, '/')
expect(html).toMatch(/Hello World/)
})
+
+ it('should allow etag header support', async () => {
+ const url = `http://localhost:${appPort}/`
+ const etag = (await fetch(url)).headers.get('ETag')
+
+ const headers = { 'If-None-Match': etag }
+ const res2 = await fetch(url, { headers })
+ expect(res2.status).toBe(304)
+ })
})
describe('With navigation', () => {
diff --git a/yarn.lock b/yarn.lock
index 9a2a948c..349e9972 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -40,8 +40,8 @@ acorn@^3.0.4:
resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
acorn@^4.0.3, acorn@^4.0.4:
- version "4.0.11"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.11.tgz#edcda3bd937e7556410d42ed5860f67399c794c0"
+ version "4.0.13"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787"
acorn@^5.0.0, acorn@^5.0.1:
version "5.0.3"
@@ -255,8 +255,8 @@ async@^1.4.0:
resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
async@^2.0.0, async@^2.1.2, async@^2.1.4:
- version "2.4.0"
- resolved "https://registry.yarnpkg.com/async/-/async-2.4.0.tgz#4990200f18ea5b837c2cc4f8c031a6985c385611"
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/async/-/async-2.4.1.tgz#62a56b279c98a11d0987096a01cc3eeb8eb7bbd7"
dependencies:
lodash "^4.14.0"
@@ -459,13 +459,21 @@ babel-helpers@^6.23.0, babel-helpers@^6.24.1:
babel-runtime "^6.22.0"
babel-template "^6.24.1"
-babel-jest@20.0.1, babel-jest@^20.0.1:
- version "20.0.1"
- resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-20.0.1.tgz#9cbe9a15bbe3f1ca1b727dc8e45a4161771d3655"
+babel-jest@20.0.2:
+ version "20.0.2"
+ resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-20.0.2.tgz#0894fb1f44dca32edc0ca6a90020d8e6a5991a59"
dependencies:
babel-core "^6.0.0"
babel-plugin-istanbul "^4.0.0"
- babel-preset-jest "^20.0.1"
+ babel-preset-jest "^20.0.2"
+
+babel-jest@^20.0.3:
+ version "20.0.3"
+ resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-20.0.3.tgz#e4a03b13dc10389e140fc645d09ffc4ced301671"
+ dependencies:
+ babel-core "^6.0.0"
+ babel-plugin-istanbul "^4.0.0"
+ babel-preset-jest "^20.0.3"
babel-loader@7.0.0:
version "7.0.0"
@@ -495,9 +503,9 @@ babel-plugin-istanbul@4.1.3, babel-plugin-istanbul@^4.0.0:
istanbul-lib-instrument "^1.7.1"
test-exclude "^4.1.0"
-babel-plugin-jest-hoist@^20.0.1:
- version "20.0.1"
- resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-20.0.1.tgz#1b9cc322cff704d3812d1bca8dccd12205eedfd5"
+babel-plugin-jest-hoist@^20.0.3:
+ version "20.0.3"
+ resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-20.0.3.tgz#afedc853bd3f8dc3548ea671fbe69d03cc2c1767"
babel-plugin-module-resolver@2.6.2:
version "2.6.2"
@@ -807,9 +815,9 @@ babel-plugin-transform-strict-mode@^6.24.1:
babel-runtime "^6.22.0"
babel-types "^6.24.1"
-babel-preset-env@1.3.3:
- version "1.3.3"
- resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.3.3.tgz#5913407784e3d98de2aa814a3ef9059722b34e0b"
+babel-preset-env@1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.5.0.tgz#6e5452f7c8742afe3b9a917883ccf3f7a4f340c5"
dependencies:
babel-plugin-check-es2015-constants "^6.22.0"
babel-plugin-syntax-trailing-function-commas "^6.22.0"
@@ -838,8 +846,9 @@ babel-preset-env@1.3.3:
babel-plugin-transform-es2015-unicode-regex "^6.22.0"
babel-plugin-transform-exponentiation-operator "^6.22.0"
babel-plugin-transform-regenerator "^6.22.0"
- browserslist "^1.4.0"
+ browserslist "^2.1.2"
invariant "^2.2.2"
+ semver "^5.3.0"
babel-preset-es2015@6.24.1:
version "6.24.1"
@@ -876,11 +885,11 @@ babel-preset-flow@^6.23.0:
dependencies:
babel-plugin-transform-flow-strip-types "^6.22.0"
-babel-preset-jest@^20.0.1:
- version "20.0.1"
- resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-20.0.1.tgz#8a9e23ce8a0f0c49835de53ed73ecf75dd6daa2e"
+babel-preset-jest@^20.0.2, babel-preset-jest@^20.0.3:
+ version "20.0.3"
+ resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-20.0.3.tgz#cbacaadecb5d689ca1e1de1360ebfc66862c178a"
dependencies:
- babel-plugin-jest-hoist "^20.0.1"
+ babel-plugin-jest-hoist "^20.0.3"
babel-preset-react@6.24.1:
version "6.24.1"
@@ -950,6 +959,15 @@ babel-traverse@^6.18.0, babel-traverse@^6.23.1, babel-traverse@^6.24.1:
invariant "^2.2.0"
lodash "^4.2.0"
+babel-types@6.23.0:
+ version "6.23.0"
+ resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.23.0.tgz#bb17179d7538bad38cd0c9e115d340f77e7e9acf"
+ dependencies:
+ babel-runtime "^6.22.0"
+ esutils "^2.0.2"
+ lodash "^4.2.0"
+ to-fast-properties "^1.0.1"
+
babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.21.0, babel-types@^6.23.0, babel-types@^6.24.1:
version "6.24.1"
resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.24.1.tgz#a136879dc15b3606bda0d90c1fc74304c2ff0975"
@@ -964,8 +982,8 @@ babylon@6.14.1:
resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.14.1.tgz#956275fab72753ad9b3435d7afe58f8bf0a29815"
babylon@^6.11.0, babylon@^6.13.0, babylon@^6.15.0, babylon@^6.17.0:
- version "6.17.1"
- resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.1.tgz#17f14fddf361b695981fe679385e4f1c01ebd86f"
+ version "6.17.2"
+ resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.2.tgz#201d25ef5f892c41bae49488b08db0dd476e9f5c"
balanced-match@^0.4.1:
version "0.4.2"
@@ -1102,12 +1120,12 @@ browserify-zlib@^0.1.4:
dependencies:
pako "~0.2.0"
-browserslist@^1.4.0:
- version "1.7.7"
- resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9"
+browserslist@^2.1.2:
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.1.4.tgz#cc526af4a1312b7d2e05653e56d0c8ab70c0e053"
dependencies:
- caniuse-db "^1.0.30000639"
- electron-to-chromium "^1.2.7"
+ caniuse-lite "^1.0.30000670"
+ electron-to-chromium "^1.3.11"
bser@1.0.2:
version "1.0.2"
@@ -1179,9 +1197,9 @@ camelcase@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a"
-caniuse-db@^1.0.30000639:
- version "1.0.30000669"
- resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000669.tgz#dbe8f25700ecda631dfb05cb71027762bd4b03e5"
+caniuse-lite@^1.0.30000670:
+ version "1.0.30000676"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000676.tgz#1e962123f48073f0c51c4ea0651dd64d25786498"
case-sensitive-paths-webpack-plugin@2.0.0:
version "2.0.0"
@@ -1534,6 +1552,12 @@ css-select@~1.2.0:
domutils "1.5.1"
nth-check "~1.0.1"
+css-tree@1.0.0-alpha17:
+ version "1.0.0-alpha17"
+ resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha17.tgz#7ab95ab72c533917af8be54313fec81841c5223a"
+ dependencies:
+ source-map "^0.5.3"
+
css-what@2.1:
version "2.1.0"
resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.0.tgz#9467d032c38cfaefb9f2d79501253062f87fa1bd"
@@ -1561,8 +1585,8 @@ dashdash@^1.12.0:
assert-plus "^1.0.0"
date-fns@^1.27.2:
- version "1.28.4"
- resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.28.4.tgz#7938aec34ba31fc8bd134d2344bc2e0bbfd95165"
+ version "1.28.5"
+ resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.28.5.tgz#257cfc45d322df45ef5658665967ee841cd73faf"
date-now@^0.1.4:
version "0.1.4"
@@ -1578,17 +1602,17 @@ debug@2.6.1:
dependencies:
ms "0.7.2"
-debug@2.6.4:
- version "2.6.4"
- resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.4.tgz#7586a9b3c39741c0282ae33445c4e8ac74734fe0"
+debug@2.6.7:
+ version "2.6.7"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.7.tgz#92bad1f6d05bbb6bba22cca88bcd0ec894c2861e"
dependencies:
- ms "0.7.3"
+ ms "2.0.0"
debug@^2.1.1, debug@^2.2.0, debug@^2.6.3:
- version "2.6.6"
- resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.6.tgz#a9fa6fbe9ca43cf1e79f73b75c0189cbb7d6db5a"
+ version "2.6.8"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc"
dependencies:
- ms "0.7.3"
+ ms "2.0.0"
decamelize@^1.0.0, decamelize@^1.1.1:
version "1.2.0"
@@ -1739,9 +1763,9 @@ ee-first@1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
-electron-to-chromium@^1.2.7:
- version "1.3.10"
- resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.10.tgz#63d62b785471f0d8dda85199d64579de8a449f08"
+electron-to-chromium@^1.3.11:
+ version "1.3.13"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.13.tgz#1b3a5eace6e087bb5e257a100b0cbfe81b2891fc"
elegant-spinner@^1.0.1:
version "1.0.1"
@@ -1820,7 +1844,7 @@ error-stack-parser@^2.0.0:
dependencies:
stackframe "^1.0.3"
-es-abstract@^1.6.1, es-abstract@^1.7.0:
+es-abstract@^1.7.0:
version "1.7.0"
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.7.0.tgz#dfade774e01bfcd97f96180298c449c8623fb94c"
dependencies:
@@ -1838,8 +1862,8 @@ es-to-primitive@^1.1.1:
is-symbol "^1.0.1"
es5-ext@^0.10.14, es5-ext@^0.10.9, es5-ext@~0.10.14:
- version "0.10.16"
- resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.16.tgz#1ef1b04f3d09db6a5d630226d62202f2e425e45a"
+ version "0.10.22"
+ resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.22.tgz#1876c51f990769c112c781ea3ebe89f84fd39071"
dependencies:
es6-iterator "2"
es6-symbol "~3.1"
@@ -2181,8 +2205,8 @@ fileset@^2.0.2:
minimatch "^3.0.3"
filesize@^3.2.1:
- version "3.5.9"
- resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.5.9.tgz#9e3dd8a9b124f5b2f1fb2ee9cd13a86c707bb222"
+ version "3.5.10"
+ resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.5.10.tgz#fc8fa23ddb4ef9e5e0ab6e1e64f679a24a56761f"
fill-range@^2.1.0:
version "2.2.3"
@@ -2195,10 +2219,10 @@ fill-range@^2.1.0:
repeat-string "^1.5.2"
finalhandler@~1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.2.tgz#d0e36f9dbc557f2de14423df6261889e9d60c93a"
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.3.tgz#ef47e77950e999780e86022a560e3217e0d0cc89"
dependencies:
- debug "2.6.4"
+ debug "2.6.7"
encodeurl "~1.0.1"
escape-html "~1.0.3"
on-finished "~2.3.0"
@@ -2493,8 +2517,8 @@ growly@^1.3.0:
resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081"
handlebars@^4.0.3:
- version "4.0.8"
- resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.8.tgz#22b875cd3f0e6cbea30314f144e82bc7a72ff420"
+ version "4.0.10"
+ resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.10.tgz#3d30c718b09a3d96f23ea4cc1f403c4d3ba9ff4f"
dependencies:
async "^1.4.0"
optimist "^0.6.1"
@@ -2665,8 +2689,8 @@ ieee754@^1.1.4:
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4"
ignore@^3.0.9, ignore@^3.2.0:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.0.tgz#3812d22cbe9125f2c2b4915755a1b8abd745a001"
+ version "3.3.3"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.3.tgz#432352e57accd87ab3110e82d3fea0e47812156d"
imurmurhash@^0.1.4:
version "0.1.4"
@@ -2776,8 +2800,8 @@ is-date-object@^1.0.1:
resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16"
is-dotfile@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d"
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1"
is-equal-shallow@^0.1.3:
version "0.1.3"
@@ -2928,75 +2952,75 @@ isstream@~0.1.2:
resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
istanbul-api@^1.1.1:
- version "1.1.8"
- resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.1.8.tgz#a844e55c6f9aeee292e7f42942196f60b23dc93e"
+ version "1.1.9"
+ resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.1.9.tgz#2827920d380d4286d857d57a2968a841db8a7ec8"
dependencies:
async "^2.1.4"
fileset "^2.0.2"
- istanbul-lib-coverage "^1.1.0"
- istanbul-lib-hook "^1.0.6"
- istanbul-lib-instrument "^1.7.1"
- istanbul-lib-report "^1.1.0"
- istanbul-lib-source-maps "^1.2.0"
- istanbul-reports "^1.1.0"
+ istanbul-lib-coverage "^1.1.1"
+ istanbul-lib-hook "^1.0.7"
+ istanbul-lib-instrument "^1.7.2"
+ istanbul-lib-report "^1.1.1"
+ istanbul-lib-source-maps "^1.2.1"
+ istanbul-reports "^1.1.1"
js-yaml "^3.7.0"
mkdirp "^0.5.1"
once "^1.4.0"
-istanbul-lib-coverage@^1.0.1, istanbul-lib-coverage@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.0.tgz#caca19decaef3525b5d6331d701f3f3b7ad48528"
+istanbul-lib-coverage@^1.0.1, istanbul-lib-coverage@^1.1.0, istanbul-lib-coverage@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz#73bfb998885299415c93d38a3e9adf784a77a9da"
-istanbul-lib-hook@^1.0.6:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.0.6.tgz#c0866d1e81cf2d5319249510131fc16dee49231f"
+istanbul-lib-hook@^1.0.6, istanbul-lib-hook@^1.0.7:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.0.7.tgz#dd6607f03076578fe7d6f2a630cf143b49bacddc"
dependencies:
append-transform "^0.4.0"
-istanbul-lib-instrument@^1.4.2, istanbul-lib-instrument@^1.7.1:
- version "1.7.1"
- resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.1.tgz#169e31bc62c778851a99439dd99c3cc12184d360"
+istanbul-lib-instrument@^1.4.2, istanbul-lib-instrument@^1.7.1, istanbul-lib-instrument@^1.7.2:
+ version "1.7.2"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.2.tgz#6014b03d3470fb77638d5802508c255c06312e56"
dependencies:
babel-generator "^6.18.0"
babel-template "^6.16.0"
babel-traverse "^6.18.0"
babel-types "^6.18.0"
babylon "^6.13.0"
- istanbul-lib-coverage "^1.1.0"
+ istanbul-lib-coverage "^1.1.1"
semver "^5.3.0"
-istanbul-lib-report@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.0.tgz#444c4ecca9afa93cf584f56b10f195bf768c0770"
+istanbul-lib-report@^1.1.0, istanbul-lib-report@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz#f0e55f56655ffa34222080b7a0cd4760e1405fc9"
dependencies:
- istanbul-lib-coverage "^1.1.0"
+ istanbul-lib-coverage "^1.1.1"
mkdirp "^0.5.1"
path-parse "^1.0.5"
supports-color "^3.1.2"
-istanbul-lib-source-maps@^1.1.0, istanbul-lib-source-maps@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.0.tgz#8c7706d497e26feeb6af3e0c28fd5b0669598d0e"
+istanbul-lib-source-maps@^1.1.0, istanbul-lib-source-maps@^1.2.0, istanbul-lib-source-maps@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.1.tgz#a6fe1acba8ce08eebc638e572e294d267008aa0c"
dependencies:
debug "^2.6.3"
- istanbul-lib-coverage "^1.1.0"
+ istanbul-lib-coverage "^1.1.1"
mkdirp "^0.5.1"
rimraf "^2.6.1"
source-map "^0.5.3"
-istanbul-reports@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.1.0.tgz#1ef3b795889219cfb5fad16365f6ce108d5f8c66"
+istanbul-reports@^1.1.0, istanbul-reports@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.1.1.tgz#042be5c89e175bc3f86523caab29c014e77fee4e"
dependencies:
handlebars "^4.0.3"
-jest-changed-files@^20.0.1:
- version "20.0.1"
- resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-20.0.1.tgz#ba9bd42c3fddb1b7c4ae40065199b44a2335e152"
+jest-changed-files@^20.0.2:
+ version "20.0.3"
+ resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-20.0.3.tgz#9394d5cc65c438406149bef1bf4d52b68e03e3f8"
-jest-cli@20.0.1:
- version "20.0.1"
- resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-20.0.1.tgz#86ca0bc2e47215ad8e7dc85455c0210f86648502"
+jest-cli@20.0.2:
+ version "20.0.2"
+ resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-20.0.2.tgz#98316e8eb45b4aee817395f38c3d08b7e13ca5b2"
dependencies:
ansi-escapes "^1.4.0"
callsites "^2.0.0"
@@ -3007,18 +3031,18 @@ jest-cli@20.0.1:
istanbul-lib-coverage "^1.0.1"
istanbul-lib-instrument "^1.4.2"
istanbul-lib-source-maps "^1.1.0"
- jest-changed-files "^20.0.1"
- jest-config "^20.0.1"
- jest-docblock "^20.0.1"
- jest-environment-jsdom "^20.0.1"
- jest-haste-map "^20.0.1"
- jest-jasmine2 "^20.0.1"
- jest-message-util "^20.0.1"
- jest-regex-util "^20.0.1"
- jest-resolve-dependencies "^20.0.1"
- jest-runtime "^20.0.1"
- jest-snapshot "^20.0.1"
- jest-util "^20.0.1"
+ jest-changed-files "^20.0.2"
+ jest-config "^20.0.2"
+ jest-docblock "^20.0.2"
+ jest-environment-jsdom "^20.0.2"
+ jest-haste-map "^20.0.2"
+ jest-jasmine2 "^20.0.2"
+ jest-message-util "^20.0.2"
+ jest-regex-util "^20.0.2"
+ jest-resolve-dependencies "^20.0.2"
+ jest-runtime "^20.0.2"
+ jest-snapshot "^20.0.2"
+ jest-util "^20.0.2"
micromatch "^2.3.11"
node-notifier "^5.0.2"
pify "^2.3.0"
@@ -3029,171 +3053,171 @@ jest-cli@20.0.1:
worker-farm "^1.3.1"
yargs "^7.0.2"
-jest-config@^20.0.1:
- version "20.0.1"
- resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-20.0.1.tgz#c6934f585c3e1775c96133efb302f986c3909ad8"
+jest-config@^20.0.2, jest-config@^20.0.4:
+ version "20.0.4"
+ resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-20.0.4.tgz#e37930ab2217c913605eff13e7bd763ec48faeea"
dependencies:
chalk "^1.1.3"
glob "^7.1.1"
- jest-environment-jsdom "^20.0.1"
- jest-environment-node "^20.0.1"
- jest-jasmine2 "^20.0.1"
- jest-matcher-utils "^20.0.1"
- jest-regex-util "^20.0.1"
- jest-resolve "^20.0.1"
- jest-validate "^20.0.1"
- pretty-format "^20.0.1"
+ jest-environment-jsdom "^20.0.3"
+ jest-environment-node "^20.0.3"
+ jest-jasmine2 "^20.0.4"
+ jest-matcher-utils "^20.0.3"
+ jest-regex-util "^20.0.3"
+ jest-resolve "^20.0.4"
+ jest-validate "^20.0.3"
+ pretty-format "^20.0.3"
-jest-diff@^20.0.1:
- version "20.0.1"
- resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-20.0.1.tgz#2567c80c324243328321386f8871a28ec9d350ac"
+jest-diff@^20.0.3:
+ version "20.0.3"
+ resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-20.0.3.tgz#81f288fd9e675f0fb23c75f1c2b19445fe586617"
dependencies:
chalk "^1.1.3"
diff "^3.2.0"
- jest-matcher-utils "^20.0.1"
- pretty-format "^20.0.1"
+ jest-matcher-utils "^20.0.3"
+ pretty-format "^20.0.3"
-jest-docblock@^20.0.1:
- version "20.0.1"
- resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-20.0.1.tgz#055e0bbcb76798198479901f92d2733bf619f854"
+jest-docblock@^20.0.2, jest-docblock@^20.0.3:
+ version "20.0.3"
+ resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-20.0.3.tgz#17bea984342cc33d83c50fbe1545ea0efaa44712"
-jest-environment-jsdom@^20.0.1:
- version "20.0.1"
- resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-20.0.1.tgz#2d29f81368987d387c70ce4f500c6aa560f9b4f7"
+jest-environment-jsdom@^20.0.2, jest-environment-jsdom@^20.0.3:
+ version "20.0.3"
+ resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-20.0.3.tgz#048a8ac12ee225f7190417713834bb999787de99"
dependencies:
- jest-mock "^20.0.1"
- jest-util "^20.0.1"
+ jest-mock "^20.0.3"
+ jest-util "^20.0.3"
jsdom "^9.12.0"
-jest-environment-node@^20.0.1:
- version "20.0.1"
- resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-20.0.1.tgz#75ab5358072ee1efebc54f43474357d7b3d674c7"
+jest-environment-node@^20.0.3:
+ version "20.0.3"
+ resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-20.0.3.tgz#d488bc4612af2c246e986e8ae7671a099163d403"
dependencies:
- jest-mock "^20.0.1"
- jest-util "^20.0.1"
+ jest-mock "^20.0.3"
+ jest-util "^20.0.3"
-jest-haste-map@^20.0.1:
- version "20.0.1"
- resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-20.0.1.tgz#e6ba4db99ab512e7c081a5b0a0af731d0e193d56"
+jest-haste-map@^20.0.2, jest-haste-map@^20.0.4:
+ version "20.0.4"
+ resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-20.0.4.tgz#653eb55c889ce3c021f7b94693f20a4159badf03"
dependencies:
fb-watchman "^2.0.0"
graceful-fs "^4.1.11"
- jest-docblock "^20.0.1"
+ jest-docblock "^20.0.3"
micromatch "^2.3.11"
sane "~1.6.0"
worker-farm "^1.3.1"
-jest-jasmine2@^20.0.1:
- version "20.0.1"
- resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-20.0.1.tgz#675772b1fd32ad74e92e8ae8282f8ea71d1de168"
+jest-jasmine2@^20.0.2, jest-jasmine2@^20.0.4:
+ version "20.0.4"
+ resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-20.0.4.tgz#fcc5b1411780d911d042902ef1859e852e60d5e1"
dependencies:
chalk "^1.1.3"
graceful-fs "^4.1.11"
- jest-diff "^20.0.1"
- jest-matcher-utils "^20.0.1"
- jest-matchers "^20.0.1"
- jest-message-util "^20.0.1"
- jest-snapshot "^20.0.1"
+ jest-diff "^20.0.3"
+ jest-matcher-utils "^20.0.3"
+ jest-matchers "^20.0.3"
+ jest-message-util "^20.0.3"
+ jest-snapshot "^20.0.3"
once "^1.4.0"
p-map "^1.1.1"
-jest-matcher-utils@^20.0.1:
- version "20.0.1"
- resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-20.0.1.tgz#31aef67f59535af3c2271a3a3685db604dbd1622"
+jest-matcher-utils@^20.0.3:
+ version "20.0.3"
+ resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-20.0.3.tgz#b3a6b8e37ca577803b0832a98b164f44b7815612"
dependencies:
chalk "^1.1.3"
- pretty-format "^20.0.1"
+ pretty-format "^20.0.3"
-jest-matchers@^20.0.1:
- version "20.0.1"
- resolved "https://registry.yarnpkg.com/jest-matchers/-/jest-matchers-20.0.1.tgz#053b7654ce60129268f39992886e987a5201bb90"
+jest-matchers@^20.0.3:
+ version "20.0.3"
+ resolved "https://registry.yarnpkg.com/jest-matchers/-/jest-matchers-20.0.3.tgz#ca69db1c32db5a6f707fa5e0401abb55700dfd60"
dependencies:
- jest-diff "^20.0.1"
- jest-matcher-utils "^20.0.1"
- jest-message-util "^20.0.1"
- jest-regex-util "^20.0.1"
+ jest-diff "^20.0.3"
+ jest-matcher-utils "^20.0.3"
+ jest-message-util "^20.0.3"
+ jest-regex-util "^20.0.3"
-jest-message-util@^20.0.1:
- version "20.0.1"
- resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-20.0.1.tgz#ac21cb055a6a5786b7f127ac7e705df5ffb1c335"
+jest-message-util@^20.0.2, jest-message-util@^20.0.3:
+ version "20.0.3"
+ resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-20.0.3.tgz#6aec2844306fcb0e6e74d5796c1006d96fdd831c"
dependencies:
chalk "^1.1.3"
micromatch "^2.3.11"
slash "^1.0.0"
-jest-mock@^20.0.1:
- version "20.0.1"
- resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-20.0.1.tgz#f4cca2e87e441b66fabe4ead6a6d61773ec0773a"
+jest-mock@^20.0.3:
+ version "20.0.3"
+ resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-20.0.3.tgz#8bc070e90414aa155c11a8d64c869a0d5c71da59"
-jest-regex-util@^20.0.1:
- version "20.0.1"
- resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-20.0.1.tgz#ecbcca8fbe4e217bca7f6f42a9b831d051224dc4"
+jest-regex-util@^20.0.2, jest-regex-util@^20.0.3:
+ version "20.0.3"
+ resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-20.0.3.tgz#85bbab5d133e44625b19faf8c6aa5122d085d762"
-jest-resolve-dependencies@^20.0.1:
- version "20.0.1"
- resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-20.0.1.tgz#38fc012191775b0b277fabebb37aa8282e26846f"
+jest-resolve-dependencies@^20.0.2:
+ version "20.0.3"
+ resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-20.0.3.tgz#6e14a7b717af0f2cb3667c549de40af017b1723a"
dependencies:
- jest-regex-util "^20.0.1"
+ jest-regex-util "^20.0.3"
-jest-resolve@^20.0.1:
- version "20.0.1"
- resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-20.0.1.tgz#cace553663f25c703dc977a4ce176e29eda92772"
+jest-resolve@^20.0.4:
+ version "20.0.4"
+ resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-20.0.4.tgz#9448b3e8b6bafc15479444c6499045b7ffe597a5"
dependencies:
browser-resolve "^1.11.2"
is-builtin-module "^1.0.0"
resolve "^1.3.2"
-jest-runtime@^20.0.1:
- version "20.0.1"
- resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-20.0.1.tgz#384f9298b8e8a177870c6d9ad0023db10ddcaedc"
+jest-runtime@^20.0.2:
+ version "20.0.4"
+ resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-20.0.4.tgz#a2c802219c4203f754df1404e490186169d124d8"
dependencies:
babel-core "^6.0.0"
- babel-jest "^20.0.1"
+ babel-jest "^20.0.3"
babel-plugin-istanbul "^4.0.0"
chalk "^1.1.3"
convert-source-map "^1.4.0"
graceful-fs "^4.1.11"
- jest-config "^20.0.1"
- jest-haste-map "^20.0.1"
- jest-regex-util "^20.0.1"
- jest-resolve "^20.0.1"
- jest-util "^20.0.1"
+ jest-config "^20.0.4"
+ jest-haste-map "^20.0.4"
+ jest-regex-util "^20.0.3"
+ jest-resolve "^20.0.4"
+ jest-util "^20.0.3"
json-stable-stringify "^1.0.1"
micromatch "^2.3.11"
strip-bom "3.0.0"
yargs "^7.0.2"
-jest-snapshot@^20.0.1:
- version "20.0.1"
- resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-20.0.1.tgz#3704c599705042f20ec7c95ba76a4524c744dfac"
+jest-snapshot@^20.0.2, jest-snapshot@^20.0.3:
+ version "20.0.3"
+ resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-20.0.3.tgz#5b847e1adb1a4d90852a7f9f125086e187c76566"
dependencies:
chalk "^1.1.3"
- jest-diff "^20.0.1"
- jest-matcher-utils "^20.0.1"
- jest-util "^20.0.1"
+ jest-diff "^20.0.3"
+ jest-matcher-utils "^20.0.3"
+ jest-util "^20.0.3"
natural-compare "^1.4.0"
- pretty-format "^20.0.1"
+ pretty-format "^20.0.3"
-jest-util@^20.0.1:
- version "20.0.1"
- resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-20.0.1.tgz#a3e7afb67110b2c3ac77b82e9a51ca57f4ff72a1"
+jest-util@^20.0.2, jest-util@^20.0.3:
+ version "20.0.3"
+ resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-20.0.3.tgz#0c07f7d80d82f4e5a67c6f8b9c3fe7f65cfd32ad"
dependencies:
chalk "^1.1.3"
graceful-fs "^4.1.11"
- jest-message-util "^20.0.1"
- jest-mock "^20.0.1"
- jest-validate "^20.0.1"
+ jest-message-util "^20.0.3"
+ jest-mock "^20.0.3"
+ jest-validate "^20.0.3"
leven "^2.1.0"
mkdirp "^0.5.1"
-jest-validate@^20.0.1:
- version "20.0.1"
- resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-20.0.1.tgz#a236c29e3c29e9b92a1e5da211a732f0238da928"
+jest-validate@^20.0.3:
+ version "20.0.3"
+ resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-20.0.3.tgz#d0cfd1de4f579f298484925c280f8f1d94ec3cab"
dependencies:
chalk "^1.1.3"
- jest-matcher-utils "^20.0.1"
+ jest-matcher-utils "^20.0.3"
leven "^2.1.0"
- pretty-format "^20.0.1"
+ pretty-format "^20.0.3"
jodid25519@^1.0.0:
version "1.0.2"
@@ -3307,8 +3331,8 @@ kew@^0.7.0:
resolved "https://registry.yarnpkg.com/kew/-/kew-0.7.0.tgz#79d93d2d33363d6fdd2970b335d9141ad591d79b"
kind-of@^3.0.2:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.0.tgz#b58abe4d5c044ad33726a8c1525b48cf891bff07"
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
dependencies:
is-buffer "^1.1.5"
@@ -3344,15 +3368,17 @@ levn@^0.3.0, levn@~0.3.0:
type-check "~0.3.2"
lint-staged@^3.4.0:
- version "3.4.1"
- resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-3.4.1.tgz#96cd1cf7a1ac92d81662643c37d1cca28b91b046"
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-3.6.0.tgz#cda8f0bef16e7928cc14b735186ae12cd662599c"
dependencies:
app-root-path "^2.0.0"
cosmiconfig "^1.1.0"
execa "^0.6.0"
listr "^0.12.0"
+ lodash.chunk "^4.2.0"
minimatch "^3.0.0"
npm-which "^3.0.1"
+ p-map "^1.1.1"
staged-git-files "0.0.4"
listr-silent-renderer@^1.1.1:
@@ -3457,6 +3483,10 @@ lodash.bind@^4.1.4:
version "4.2.1"
resolved "https://registry.yarnpkg.com/lodash.bind/-/lodash.bind-4.2.1.tgz#7ae3017e939622ac31b7d7d7dcb1b34db1690d35"
+lodash.chunk@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/lodash.chunk/-/lodash.chunk-4.2.0.tgz#66e5ce1f76ed27b4303d8c6512e8d1216e8106bc"
+
lodash.defaults@^4.0.1:
version "4.2.0"
resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c"
@@ -3632,10 +3662,14 @@ mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.15, mime-types@~2.1.7:
dependencies:
mime-db "~1.27.0"
-mime@1.3.4, mime@^1.3.4:
+mime@1.3.4:
version "1.3.4"
resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53"
+mime@^1.3.4:
+ version "1.3.6"
+ resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.6.tgz#591d84d3653a6b0b4a3b9df8de5aa8108e72e5e0"
+
min-document@^2.19.0:
version "2.19.0"
resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685"
@@ -3689,13 +3723,9 @@ ms@0.7.2:
version "0.7.2"
resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765"
-ms@0.7.3:
- version "0.7.3"
- resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.3.tgz#708155a5e44e33f5fd0fc53e81d0d40a91be1fff"
-
-ms@1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/ms/-/ms-1.0.0.tgz#59adcd22edc543f7b5381862d31387b1f4bc9473"
+ms@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
mute-stream@0.0.5:
version "0.0.5"
@@ -3782,8 +3812,8 @@ node-notifier@5.1.2, node-notifier@^5.0.2:
which "^1.2.12"
node-pre-gyp@^0.6.29:
- version "0.6.34"
- resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.34.tgz#94ad1c798a11d7fc67381b50d47f8cc18d9799f7"
+ version "0.6.36"
+ resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.36.tgz#db604112cb74e0d477554e9b505b17abddfab786"
dependencies:
mkdirp "^0.5.1"
nopt "^4.0.1"
@@ -3867,8 +3897,8 @@ number-is-nan@^1.0.0:
resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
"nwmatcher@>= 1.3.9 < 2.0.0":
- version "1.3.9"
- resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.3.9.tgz#8bab486ff7fa3dfd086656bbe8b17116d3692d2a"
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.0.tgz#b4389362170e7ef9798c3c7716d80ebc0106fccf"
nyc@10.3.2:
version "10.3.2"
@@ -3914,15 +3944,6 @@ object-keys@^1.0.8:
version "1.0.11"
resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d"
-object.entries@1.0.4:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.0.4.tgz#1bf9a4dd2288f5b33f3a993d257661f05d161a5f"
- dependencies:
- define-properties "^1.1.2"
- es-abstract "^1.6.1"
- function-bind "^1.1.0"
- has "^1.0.1"
-
object.omit@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"
@@ -4179,9 +4200,9 @@ preserve@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
-pretty-format@^20.0.1:
- version "20.0.1"
- resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-20.0.1.tgz#ba95329771907c189643dd251e244061ff642350"
+pretty-format@^20.0.3:
+ version "20.0.3"
+ resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-20.0.3.tgz#020e350a560a1fe1a98dc3beb6ccffb386de8b14"
dependencies:
ansi-regex "^2.1.1"
ansi-styles "^3.0.0"
@@ -4309,15 +4330,15 @@ react-dom@15.5.3:
object-assign "^4.1.0"
prop-types "~15.5.0"
-react-hot-loader@3.0.0-beta.6:
- version "3.0.0-beta.6"
- resolved "https://registry.yarnpkg.com/react-hot-loader/-/react-hot-loader-3.0.0-beta.6.tgz#463fac0bfc8b63a8385258af20c91636abce75f4"
+react-hot-loader@3.0.0-beta.7:
+ version "3.0.0-beta.7"
+ resolved "https://registry.yarnpkg.com/react-hot-loader/-/react-hot-loader-3.0.0-beta.7.tgz#d5847b8165d731c4d5b30d86d5d4716227a0fa83"
dependencies:
babel-template "^6.7.0"
global "^4.3.0"
react-deep-force-update "^2.0.1"
react-proxy "^3.0.0-alpha.0"
- redbox-react "^1.2.5"
+ redbox-react "^1.3.6"
source-map "^0.4.4"
react-proxy@^3.0.0-alpha.0:
@@ -4400,13 +4421,14 @@ recursive-copy@^2.0.6:
promise "^7.0.1"
slash "^1.0.0"
-redbox-react@^1.2.5:
- version "1.3.6"
- resolved "https://registry.yarnpkg.com/redbox-react/-/redbox-react-1.3.6.tgz#70314c57c066257eb70b0a24dc794b5cef4f1c4e"
+redbox-react@^1.3.6:
+ version "1.3.7"
+ resolved "https://registry.yarnpkg.com/redbox-react/-/redbox-react-1.3.7.tgz#bb3a1a73c07ebe1d67b55860908ee2bc35386968"
dependencies:
error-stack-parser "^1.3.6"
object-assign "^4.0.1"
prop-types "^15.5.4"
+ sourcemapped-stacktrace "^1.1.6"
regenerate@^1.2.1:
version "1.3.2"
@@ -4654,24 +4676,6 @@ send@0.15.1:
range-parser "~1.2.0"
statuses "~1.3.1"
-send@0.15.2:
- version "0.15.2"
- resolved "https://registry.yarnpkg.com/send/-/send-0.15.2.tgz#f91fab4403bcf87e716f70ceb5db2f578bdc17d6"
- dependencies:
- debug "2.6.4"
- depd "~1.1.0"
- destroy "~1.0.4"
- encodeurl "~1.0.1"
- escape-html "~1.0.3"
- etag "~1.8.0"
- fresh "0.5.0"
- http-errors "~1.6.1"
- mime "1.3.4"
- ms "1.0.0"
- on-finished "~2.3.0"
- range-parser "~1.2.0"
- statuses "~1.3.1"
-
serve-static@1.12.1:
version "1.12.1"
resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.12.1.tgz#7443a965e3ced647aceb5639fa06bf4d1bbe0039"
@@ -4777,6 +4781,12 @@ source-map@~0.2.0:
dependencies:
amdefine ">=0.0.4"
+sourcemapped-stacktrace@^1.1.6:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/sourcemapped-stacktrace/-/sourcemapped-stacktrace-1.1.6.tgz#112d8749c942c3cd3b630dfac9514577b86a3a51"
+ dependencies:
+ source-map "0.5.6"
+
spawn-wrap@1.2.4:
version "1.2.4"
resolved "https://registry.yarnpkg.com/spawn-wrap/-/spawn-wrap-1.2.4.tgz#920eb211a769c093eebfbd5b0e7a5d2e68ab2e40"
@@ -4803,8 +4813,8 @@ spdx-license-ids@^1.0.2:
resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57"
sprintf-js@^1.0.3:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.0.tgz#cffcaf702daf65ea39bb4e0fa2b299cec1a1be46"
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.1.tgz#36be78320afe5801f6cea3ee78b6e5aab940ea0c"
sprintf-js@~1.0.2:
version "1.0.3"
@@ -4914,10 +4924,10 @@ string_decoder@^0.10.25:
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
string_decoder@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.0.tgz#f06f41157b664d86069f84bdbdc9b0d8ab281667"
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.1.tgz#62e200f039955a6810d8df0a33ffc0f013662d98"
dependencies:
- buffer-shims "~1.0.0"
+ safe-buffer "^5.0.1"
stringstream@~0.0.4:
version "0.0.5"
@@ -4947,18 +4957,24 @@ strip-json-comments@~2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
-styled-jsx@0.5.7:
- version "0.5.7"
- resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-0.5.7.tgz#2cb02263ffa719b1435a864fdd6c62802ae86669"
+styled-jsx@1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-1.0.2.tgz#84b4855e19ac49238e0b6bea3d3af3aaf296cb22"
dependencies:
babel-plugin-syntax-jsx "6.18.0"
babel-traverse "6.21.0"
+ babel-types "6.23.0"
babylon "6.14.1"
convert-source-map "1.3.0"
+ css-tree "1.0.0-alpha17"
escape-string-regexp "1.0.5"
- object.entries "1.0.4"
source-map "0.5.6"
string-hash "1.1.1"
+ stylis "3.0.10"
+
+stylis@3.0.10:
+ version "3.0.10"
+ resolved "https://registry.yarnpkg.com/stylis/-/stylis-3.0.10.tgz#9f561e8a9799c2c317c596583bcaaa52a0d27663"
supports-color@^2.0.0:
version "2.0.0"
@@ -5024,8 +5040,8 @@ tar@^2.2.1:
inherits "2"
test-exclude@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.1.0.tgz#04ca70b7390dd38c98d4a003a173806ca7991c91"
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.1.1.tgz#4d84964b0966b0087ecc334a2ce002d3d9341e26"
dependencies:
arrify "^1.0.1"
micromatch "^2.3.11"
@@ -5044,8 +5060,8 @@ thenify-all@^1.0.0:
thenify ">= 3.1.0 < 4"
"thenify@>= 3.1.0 < 4":
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.2.1.tgz#251fd1c80aff6e5cf57cb179ab1fcb724269bd11"
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.0.tgz#e69e38a1babe969b0108207978b9f62b88604839"
dependencies:
any-promise "^1.0.0"
@@ -5139,8 +5155,8 @@ ua-parser-js@^0.7.9:
resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.12.tgz#04c81a99bdd5dc52263ea29d24c6bf8d4818a4bb"
uglify-js@^2.6, uglify-js@^2.8.5:
- version "2.8.24"
- resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.24.tgz#48eb5175cf32e22ec11a47e638d7c8b4e0faf2dd"
+ version "2.8.27"
+ resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.27.tgz#47787f912b0f242e5b984343be8e35e95f694c9c"
dependencies:
source-map "~0.5.1"
yargs "~3.10.0"