Add static asset invalidation.

This commit is contained in:
Jonathan Cremin 2017-05-07 00:02:20 +01:00
parent 2f3732a938
commit 2fdf364947
9 changed files with 92 additions and 285 deletions

8
app.js
View file

@ -1,3 +1,4 @@
import fs from 'fs';
import path from 'path'; import path from 'path';
import zlib from 'zlib'; import zlib from 'zlib';
import koa from 'koa'; import koa from 'koa';
@ -32,6 +33,13 @@ app.use(favicon(path.join(__dirname, '/public/images/favicon.png')));
app.use(logger()); app.use(logger());
app.use(serve('public', { maxage: 31536000000 })); app.use(serve('public', { maxage: 31536000000 }));
const manifest = JSON.parse(fs.readFileSync(path.join(__dirname, '/public/dist/manifest.json')));
app.use(function *(next) {
this.state = { manifest };
yield next;
});
app.use(views(path.resolve(__dirname, './views'), { app.use(views(path.resolve(__dirname, './views'), {
map: { map: {
html: 'ejs', html: 'ejs',

View file

@ -1,7 +1,7 @@
import fs from 'fs'; import fs from 'fs';
import { createBundleRenderer } from 'vue-server-renderer'; import { createBundleRenderer } from 'vue-server-renderer';
const app = fs.readFileSync('./public/dist/js/build-server.js', 'utf8'); const app = fs.readFileSync('./public/dist/js/main-server.js', 'utf8');
export default function(url, initialState) { export default function(url, initialState) {
const renderer = createBundleRenderer(app); const renderer = createBundleRenderer(app);

View file

@ -51,10 +51,10 @@
"bluebird": "^3.4.1", "bluebird": "^3.4.1",
"bulma": "^0.4.1", "bulma": "^0.4.1",
"co": "~4.6.0", "co": "~4.6.0",
"copy-webpack-plugin": "^4.0.1",
"css-loader": "^0.28.1", "css-loader": "^0.28.1",
"debug": "^2.6.6", "debug": "^2.6.6",
"ejs": "^2.5.2", "ejs": "^2.5.2",
"extract-text-webpack-plugin": "^2.1.0",
"file-loader": "^0.11.1", "file-loader": "^0.11.1",
"json-loader": "^0.5.4", "json-loader": "^0.5.4",
"kcors": "^1.0.1", "kcors": "^1.0.1",
@ -84,7 +84,8 @@
"vue-template-compiler": "^2.3.2", "vue-template-compiler": "^2.3.2",
"vuex": "^2.3.1", "vuex": "^2.3.1",
"vuex-router-sync": "^4.1.2", "vuex-router-sync": "^4.1.2",
"webpack": "^2.5.0" "webpack": "^2.5.0",
"webpack-stats-plugin": "^0.1.5"
}, },
"devDependencies": { "devDependencies": {
"babel-plugin-transform-runtime": "^6.15.0", "babel-plugin-transform-runtime": "^6.15.0",

View file

@ -1,3 +1,4 @@
import { style } from 'bulma/css/bulma.css';
import { sync } from 'vuex-router-sync'; import { sync } from 'vuex-router-sync';
import { app, store, router } from './app'; import { app, store, router } from './app';

View file

@ -1,177 +0,0 @@
/* app.vue */
body {
color: #445470;
background: #fff;
}
.header {
background: #FE4365;
}
h1 {
padding: 25px 0;
}
h1 a {
color: #fff;
}
h1 a:hover {
color: #ffacc5;
}
.share {
margin-bottom: 40px;
}
.share h1 {
text-align: left;
font-size: 1.5em;
line-height: 36px;
padding: 5px 0;
}
.title a:hover {
border-bottom: none;
}
h1 .lighter {
color: #ffacc5;
}
.footer {
margin-top: 50px;
padding-bottom: 40px;
}
/* index.vue */
.blurb {
margin-bottom: 50px;
}
.recently-shared {
margin-bottom: 50px;
}
.faq {
margin-bottom: 50px;
}
.faq p {
margin-bottom: 30px;
}
.home {
max-width: 600px;
margin-top: 40px;
}
p {
margin-bottom: 10px;
}
.recent .artwork {
margin-bottom: 30px;
}
.artwork {
position: relative;
width: 100%;
height: 0;
padding-bottom: 100%;
background-repeat: no-repeat;
background-size: cover;
border-radius: 5px;
}
/* search.vue */
.button.is-primary {
background-color: #FE4365;
}
.button.is-primary:hover {
background-color: #E52A4C;
}
.button.is-primary:focus {
background-color: #E52A4C;
}
.input:active {
border-color: #FE4365;
}
.input:focus {
border-color: #FE4365;
}
.search {
margin-bottom: 25vh;
}
form {
margin-top: 25vh;
margin-bottom: 20px;
}
/* share.vue */
.share-heading {
margin-bottom: 50px
}
.share-heading .title {
color: #8396b0;
}
.share-heading .title strong {
color: #445470;
font-weight: 700;
}
.artwork {
position: relative;
width: 100%;
height: 0;
padding-bottom: 100%;
background-repeat: no-repeat;
background-size: cover;
border-radius: 5px;
}
.artwork-youtube {
background-position: 50% 0%;
}
.service {
position: relative;
margin-bottom: 10px;
}
.service-link img {
margin-top: 20px;
margin-bottom: 20px;
height: 40px;
}
img {
vertical-align: middle;
}
.not-found {
opacity: 0.2;
}
.match {
position: relative;
}
.no-match {
position: absolute;
top: 10px;
right: 10px;
background: #fff;
color: #FE4365;
padding: 3px 6px;
border-radius: 3px;
opacity: 0.7;
font-weight: bold;
}
.loading-wrap {
position: absolute;
top: 0;left: 0;
background: #fff;
height: 100%;
width: 100%;
opacity: 0.8;
}
.loading {
position: absolute;
top: 35%;
left: 40%;
width: 20%;
}
/* social.vue */
.social {
text-align: center;
font-weight: 300;
float: right;
}
.social li {
display: inline;
list-style-type: none;
padding-right: 10px;
float: left;
}

View file

@ -2,8 +2,7 @@
<html> <html>
<head> <head>
<title>Match Audio &bull; <%=head.title%></title> <title>Match Audio &bull; <%=head.title%></title>
<link rel="stylesheet" href="/dist/css/bulma.css" /> <link rel="stylesheet" href="/dist/<%=manifest['style/main.css']%>" />
<link rel="stylesheet" href="/src/style/style.css" />
<meta name='description' content='Match Audio matches album and track links from Youtube, Rdio, Spotify, Deezer, Google Music, Xbox Music, Beats Music, and iTunes and give you back one link with matches we find on all of them.' /> <meta name='description' content='Match Audio matches album and track links from Youtube, Rdio, Spotify, Deezer, Google Music, Xbox Music, Beats Music, and iTunes and give you back one link with matches we find on all of them.' />
<meta name='viewport' content='width=device-width, initial-scale=1' /> <meta name='viewport' content='width=device-width, initial-scale=1' />
@ -28,6 +27,6 @@
ga('create', 'UA-66209-8', 'auto'); ga('create', 'UA-66209-8', 'auto');
ga('send', 'pageview'); ga('send', 'pageview');
</script> </script>
<script src="/dist/js/build-client.js"></script> <script src="/dist/<%=manifest['js/main.js']%>"></script>
</body> </body>
</html> </html>

View file

@ -1,13 +1,14 @@
const path = require('path'); const path = require('path');
const webpack = require('webpack'); const webpack = require('webpack');
const CopyWebpackPlugin = require('copy-webpack-plugin'); const ExtractTextPlugin = require('extract-text-webpack-plugin');
const StatsWriterPlugin = require('webpack-stats-plugin').StatsWriterPlugin;
module.exports = { module.exports = {
entry: './public/src/entry-client.js', entry: './public/src/entry-client.js',
output: { output: {
path: path.resolve(__dirname, './public/dist'), path: path.resolve(__dirname, './public/dist'),
publicPath: '/dist/', publicPath: '/dist/',
filename: 'js/build-client.js', filename: 'js/[name].[hash:10].js',
}, },
resolve: { resolve: {
modules: [ modules: [
@ -21,20 +22,37 @@ module.exports = {
{ {
test: /\.vue$/, test: /\.vue$/,
loader: 'vue-loader', loader: 'vue-loader',
options: {
extractCSS: true
},
}, },
{ {
test: /\.js$/, test: /\.js$/,
loader: 'babel-loader', loader: 'babel-loader',
exclude: /node_modules/, exclude: /node_modules/,
}, },
{
test: /\.css$/,
loader: ExtractTextPlugin.extract({ fallback: "style-loader", use: "css-loader" }),
},
], ],
}, },
devtool: '#source-map', devtool: '#source-map',
plugins: [ plugins: [
new webpack.optimize.OccurrenceOrderPlugin(), new webpack.optimize.OccurrenceOrderPlugin(),
new CopyWebpackPlugin([{ new ExtractTextPlugin("style/[name].[hash:10].css"),
from: path.resolve(__dirname, './node_modules/bulma/css'), new StatsWriterPlugin({
to: path.resolve(__dirname, './public/dist/css/'), fields: ['assets'],
}]), filename: 'manifest.json',
transform(stats) {
const manifest = {};
stats.assets.map(asset => asset.name)
.sort()
.forEach((file) => {
manifest[file.replace(/\.[a-f0-9]{10}\./, '.')] = file;
});
return JSON.stringify(manifest, null, 2) + '\n';
}
}),
], ],
}; };

View file

@ -1,6 +1,5 @@
const path = require('path'); const path = require('path');
const webpack = require('webpack'); const webpack = require('webpack');
const CopyWebpackPlugin = require('copy-webpack-plugin');
module.exports = { module.exports = {
target: 'node', target: 'node',
@ -9,7 +8,7 @@ module.exports = {
libraryTarget: 'commonjs2', libraryTarget: 'commonjs2',
path: path.resolve(__dirname, './public/dist'), path: path.resolve(__dirname, './public/dist'),
publicPath: '/dist/', publicPath: '/dist/',
filename: 'js/build-server.js', filename: 'js/main-server.js',
}, },
resolve: { resolve: {
modules: [ modules: [
@ -23,10 +22,6 @@ module.exports = {
'global.GENTLY': false, 'global.GENTLY': false,
}), }),
new webpack.optimize.OccurrenceOrderPlugin(), new webpack.optimize.OccurrenceOrderPlugin(),
new CopyWebpackPlugin([{
from: path.resolve(__dirname, './node_modules/bulma/css'),
to: path.resolve(__dirname, './public/dist/css/'),
}]),
], ],
module: { module: {
loaders: [ loaders: [

142
yarn.lock
View file

@ -82,7 +82,7 @@ ajv-keywords@^1.0.0, ajv-keywords@^1.1.1:
version "1.5.1" version "1.5.1"
resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c"
ajv@^4.7.0, ajv@^4.9.1: ajv@^4.11.2, ajv@^4.7.0, ajv@^4.9.1:
version "4.11.8" version "4.11.8"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536"
dependencies: dependencies:
@ -217,10 +217,6 @@ async@^2.1.2:
dependencies: dependencies:
lodash "^4.14.0" lodash "^4.14.0"
async@~0.2.6:
version "0.2.10"
resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1"
asynckit@^0.4.0: asynckit@^0.4.0:
version "0.4.0" version "0.4.0"
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
@ -838,7 +834,7 @@ block-stream@*:
dependencies: dependencies:
inherits "~2.0.0" inherits "~2.0.0"
bluebird@^2.10.2, bluebird@^2.3.2: bluebird@^2.3.2:
version "2.11.0" version "2.11.0"
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-2.11.0.tgz#534b9033c022c9579c56ba3b3e5a5caafbb650e1" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-2.11.0.tgz#534b9033c022c9579c56ba3b3e5a5caafbb650e1"
@ -1185,7 +1181,7 @@ combined-stream@^1.0.5, combined-stream@~1.0.5:
dependencies: dependencies:
delayed-stream "~1.0.0" delayed-stream "~1.0.0"
commander@2.9.0, commander@^2.8.1, commander@^2.9.0: commander@2.9.0, commander@^2.8.1, commander@^2.9.0, commander@~2.9.0:
version "2.9.0" version "2.9.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4"
dependencies: dependencies:
@ -1295,19 +1291,6 @@ copy-to@^2.0.1:
version "2.0.1" version "2.0.1"
resolved "https://registry.yarnpkg.com/copy-to/-/copy-to-2.0.1.tgz#2680fbb8068a48d08656b6098092bdafc906f4a5" resolved "https://registry.yarnpkg.com/copy-to/-/copy-to-2.0.1.tgz#2680fbb8068a48d08656b6098092bdafc906f4a5"
copy-webpack-plugin@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-4.0.1.tgz#9728e383b94316050d0c7463958f2b85c0aa8200"
dependencies:
bluebird "^2.10.2"
fs-extra "^0.26.4"
glob "^6.0.4"
is-glob "^3.1.0"
loader-utils "^0.2.15"
lodash "^4.3.0"
minimatch "^3.0.0"
node-dir "^0.1.10"
core-js@^1.0.0: core-js@^1.0.0:
version "1.2.7" version "1.2.7"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636"
@ -1501,18 +1484,18 @@ de-indent@^1.0.2:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d"
debug@*, debug@2.2.0, debug@^2.1.1: debug@*, debug@2, debug@^2.1.1, debug@^2.1.2, debug@^2.1.3, debug@^2.2.0, debug@^2.6.0, debug@^2.6.6:
version "2.2.0"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da"
dependencies:
ms "0.7.1"
debug@2, debug@^2.1.2, debug@^2.1.3, debug@^2.2.0, debug@^2.6.0, debug@^2.6.6:
version "2.6.6" version "2.6.6"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.6.tgz#a9fa6fbe9ca43cf1e79f73b75c0189cbb7d6db5a" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.6.tgz#a9fa6fbe9ca43cf1e79f73b75c0189cbb7d6db5a"
dependencies: dependencies:
ms "0.7.3" ms "0.7.3"
debug@2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da"
dependencies:
ms "0.7.1"
debug@2.6.0: debug@2.6.0:
version "2.6.0" version "2.6.0"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.0.tgz#bc596bcabe7617f11d9fa15361eded5608b8499b" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.0.tgz#bc596bcabe7617f11d9fa15361eded5608b8499b"
@ -1971,6 +1954,15 @@ extglob@^0.3.1:
dependencies: dependencies:
is-extglob "^1.0.0" is-extglob "^1.0.0"
extract-text-webpack-plugin@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/extract-text-webpack-plugin/-/extract-text-webpack-plugin-2.1.0.tgz#69315b885f876dbf96d3819f6a9f1cca7aebf159"
dependencies:
ajv "^4.11.2"
async "^2.1.2"
loader-utils "^1.0.2"
webpack-sources "^0.1.0"
extsprintf@1.0.2: extsprintf@1.0.2:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550"
@ -2087,16 +2079,6 @@ from@~0:
version "0.1.7" version "0.1.7"
resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe"
fs-extra@^0.26.4:
version "0.26.7"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.26.7.tgz#9ae1fdd94897798edab76d0918cf42d0c3184fa9"
dependencies:
graceful-fs "^4.1.2"
jsonfile "^2.1.0"
klaw "^1.0.0"
path-is-absolute "^1.0.0"
rimraf "^2.2.8"
fs-readdir-recursive@^1.0.0: fs-readdir-recursive@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.0.0.tgz#8cd1745c8b4f8a29c8caec392476921ba195f560" resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.0.0.tgz#8cd1745c8b4f8a29c8caec392476921ba195f560"
@ -2208,16 +2190,6 @@ glob@^5.0.15:
once "^1.3.0" once "^1.3.0"
path-is-absolute "^1.0.0" path-is-absolute "^1.0.0"
glob@^6.0.4:
version "6.0.4"
resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22"
dependencies:
inflight "^1.0.4"
inherits "2"
minimatch "2 || 3"
once "^1.3.0"
path-is-absolute "^1.0.0"
globals@^9.0.0, globals@^9.14.0: globals@^9.0.0, globals@^9.14.0:
version "9.17.0" version "9.17.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-9.17.0.tgz#0c0ca696d9b9bb694d2e5470bd37777caad50286" resolved "https://registry.yarnpkg.com/globals/-/globals-9.17.0.tgz#0c0ca696d9b9bb694d2e5470bd37777caad50286"
@ -2248,7 +2220,7 @@ got@^3.2.0:
read-all-stream "^3.0.0" read-all-stream "^3.0.0"
timed-out "^2.0.0" timed-out "^2.0.0"
graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.4, graceful-fs@^4.1.6, graceful-fs@^4.1.9: graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.4:
version "4.1.11" version "4.1.11"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
@ -2546,10 +2518,6 @@ is-extglob@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
is-extglob@^2.1.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
is-finite@^1.0.0: is-finite@^1.0.0:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa"
@ -2576,12 +2544,6 @@ is-glob@^2.0.0, is-glob@^2.0.1:
dependencies: dependencies:
is-extglob "^1.0.0" is-extglob "^1.0.0"
is-glob@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a"
dependencies:
is-extglob "^2.1.0"
is-my-json-valid@^2.10.0: is-my-json-valid@^2.10.0:
version "2.16.0" version "2.16.0"
resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz#f079dd9bfdae65ee2038aae8acbc86ab109e3693" resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz#f079dd9bfdae65ee2038aae8acbc86ab109e3693"
@ -2781,12 +2743,6 @@ json5@^0.5.0, json5@^0.5.1:
version "0.5.1" version "0.5.1"
resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
jsonfile@^2.1.0:
version "2.4.0"
resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8"
optionalDependencies:
graceful-fs "^4.1.6"
jsonify@~0.0.0: jsonify@~0.0.0:
version "0.0.0" version "0.0.0"
resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
@ -2820,12 +2776,6 @@ kind-of@^3.0.2:
dependencies: dependencies:
is-buffer "^1.1.5" is-buffer "^1.1.5"
klaw@^1.0.0:
version "1.3.1"
resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439"
optionalDependencies:
graceful-fs "^4.1.9"
koa-bodyparser@^2.2.0: koa-bodyparser@^2.2.0:
version "2.5.0" version "2.5.0"
resolved "https://registry.yarnpkg.com/koa-bodyparser/-/koa-bodyparser-2.5.0.tgz#3eb7243f47998a2e772db05f6dc4e0f4f3ccbdf0" resolved "https://registry.yarnpkg.com/koa-bodyparser/-/koa-bodyparser-2.5.0.tgz#3eb7243f47998a2e772db05f6dc4e0f4f3ccbdf0"
@ -2984,7 +2934,7 @@ loader-runner@^2.3.0:
version "2.3.0" version "2.3.0"
resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.0.tgz#f482aea82d543e07921700d5a46ef26fdac6b8a2" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.0.tgz#f482aea82d543e07921700d5a46ef26fdac6b8a2"
loader-utils@^0.2.15, loader-utils@^0.2.16: loader-utils@^0.2.16:
version "0.2.17" version "0.2.17"
resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348"
dependencies: dependencies:
@ -3313,12 +3263,6 @@ nested-error-stacks@^1.0.0:
dependencies: dependencies:
inherits "~2.0.1" inherits "~2.0.1"
node-dir@^0.1.10:
version "0.1.16"
resolved "https://registry.yarnpkg.com/node-dir/-/node-dir-0.1.16.tgz#d2ef583aa50b90d93db8cdd26fcea58353957fe4"
dependencies:
minimatch "^3.0.2"
node-libs-browser@^2.0.0: node-libs-browser@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.0.0.tgz#a3a59ec97024985b46e958379646f96c4b616646" resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.0.0.tgz#a3a59ec97024985b46e958379646f96c4b616646"
@ -4329,11 +4273,11 @@ resolve-path@^1.0.0, resolve-path@^1.3.1:
http-errors "~1.5.0" http-errors "~1.5.0"
path-is-absolute "1.0.1" path-is-absolute "1.0.1"
resolve@1.1.x, resolve@^1.1.6: resolve@1.1.x:
version "1.1.7" version "1.1.7"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
resolve@^1.2.0, resolve@^1.3.3: resolve@^1.1.6, resolve@^1.2.0, resolve@^1.3.3:
version "1.3.3" version "1.3.3"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.3.tgz#655907c3469a8680dc2de3a275a8fdd69691f0e5" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.3.tgz#655907c3469a8680dc2de3a275a8fdd69691f0e5"
dependencies: dependencies:
@ -4545,7 +4489,7 @@ sort-keys@^1.0.0:
dependencies: dependencies:
is-plain-obj "^1.0.0" is-plain-obj "^1.0.0"
source-list-map@^0.1.7: source-list-map@^0.1.7, source-list-map@~0.1.7:
version "0.1.8" version "0.1.8"
resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-0.1.8.tgz#c550b2ab5427f6b3f21f5afead88c4f5587b2106" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-0.1.8.tgz#c550b2ab5427f6b3f21f5afead88c4f5587b2106"
@ -4931,16 +4875,7 @@ typedarray@^0.0.6:
version "0.0.6" version "0.0.6"
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
uglify-js@^2.6: uglify-js@^2.6, uglify-js@^2.8.5:
version "2.7.5"
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.7.5.tgz#4612c0c7baaee2ba7c487de4904ae122079f2ca8"
dependencies:
async "~0.2.6"
source-map "~0.5.1"
uglify-to-browserify "~1.0.0"
yargs "~3.10.0"
uglify-js@^2.8.5:
version "2.8.22" version "2.8.22"
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.22.tgz#d54934778a8da14903fa29a326fb24c0ab51a1a0" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.22.tgz#d54934778a8da14903fa29a326fb24c0ab51a1a0"
dependencies: dependencies:
@ -4949,10 +4884,26 @@ uglify-js@^2.8.5:
optionalDependencies: optionalDependencies:
uglify-to-browserify "~1.0.0" uglify-to-browserify "~1.0.0"
uglify-js@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.0.0.tgz#c1089d3f37b6366cb1baf12280bf67316891568c"
dependencies:
commander "~2.9.0"
source-map "~0.5.1"
optionalDependencies:
uglify-to-browserify "~1.0.0"
uglify-to-browserify@~1.0.0: uglify-to-browserify@~1.0.0:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
uglifyjs-webpack-plugin@^0.4.3:
version "0.4.3"
resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.3.tgz#a672a7d6655f94dfa7e09670d48030f37cc93267"
dependencies:
source-map "^0.5.6"
webpack-sources "^0.2.3"
uid-number@^0.0.6: uid-number@^0.0.6:
version "0.0.6" version "0.0.6"
resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"
@ -5144,6 +5095,13 @@ watchpack@^1.3.1:
chokidar "^1.4.3" chokidar "^1.4.3"
graceful-fs "^4.1.2" graceful-fs "^4.1.2"
webpack-sources@^0.1.0:
version "0.1.5"
resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-0.1.5.tgz#aa1f3abf0f0d74db7111c40e500b84f966640750"
dependencies:
source-list-map "~0.1.7"
source-map "~0.5.3"
webpack-sources@^0.2.3: webpack-sources@^0.2.3:
version "0.2.3" version "0.2.3"
resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-0.2.3.tgz#17c62bfaf13c707f9d02c479e0dcdde8380697fb" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-0.2.3.tgz#17c62bfaf13c707f9d02c479e0dcdde8380697fb"
@ -5151,6 +5109,10 @@ webpack-sources@^0.2.3:
source-list-map "^1.1.1" source-list-map "^1.1.1"
source-map "~0.5.3" source-map "~0.5.3"
webpack-stats-plugin@^0.1.5:
version "0.1.5"
resolved "https://registry.yarnpkg.com/webpack-stats-plugin/-/webpack-stats-plugin-0.1.5.tgz#29e5f12ebfd53158d31d656a113ac1f7b86179d9"
webpack@^2.5.0: webpack@^2.5.0:
version "2.5.1" version "2.5.1"
resolved "https://registry.yarnpkg.com/webpack/-/webpack-2.5.1.tgz#61742f0cf8af555b87460a9cd8bba2f1e3ee2fce" resolved "https://registry.yarnpkg.com/webpack/-/webpack-2.5.1.tgz#61742f0cf8af555b87460a9cd8bba2f1e3ee2fce"