diff --git a/client/coral-admin/src/routes/Configure/components/EmbedLink.js b/client/coral-admin/src/routes/Configure/components/EmbedLink.js index aa1cddadc..fb7571711 100644 --- a/client/coral-admin/src/routes/Configure/components/EmbedLink.js +++ b/client/coral-admin/src/routes/Configure/components/EmbedLink.js @@ -5,6 +5,7 @@ import styles from './EmbedLink.css'; import {Button} from 'coral-ui'; import {BASE_URL} from 'coral-framework/constants/url'; import ConfigureCard from 'coral-framework/components/ConfigureCard'; +import {stripIndent} from 'common-tags'; class EmbedLink extends Component { @@ -23,17 +24,16 @@ class EmbedLink extends Component { } render () { - const coralJsUrl = join(BASE_URL, '/embed.js'); - const nonce = String(Math.random()).slice(2); - const streamElementId = `coral_talk_${nonce}`; - const embedText = ` -
- - `.trim(); + const coralJsUrl = join(BASE_URL, '/static/embed.js'); + const embedText = stripIndent` +
+ + `; + return (

{t('configure.copy_and_paste')}

diff --git a/client/coral-framework/services/i18n.js b/client/coral-framework/services/i18n.js index 7afb16860..0fb4cd543 100644 --- a/client/coral-framework/services/i18n.js +++ b/client/coral-framework/services/i18n.js @@ -3,6 +3,11 @@ import has from 'lodash/has'; import get from 'lodash/get'; import merge from 'lodash/merge'; +import 'moment/locale/da'; +import 'moment/locale/es'; +import 'moment/locale/fr'; +import 'moment/locale/pt-br'; + import daTA from 'timeago.js/locales/da'; import esTA from 'timeago.js/locales/es'; import frTA from 'timeago.js/locales/fr'; diff --git a/package.json b/package.json index 7ddcac180..3e948cb32 100644 --- a/package.json +++ b/package.json @@ -70,6 +70,7 @@ "bcryptjs": "^2.4.3", "body-parser": "1.18.2", "bowser": "^1.7.2", + "brotli-webpack-plugin": "^0.5.0", "cli-table": "^0.3.1", "clipboard": "^1.7.1", "colors": "^1.1.2", @@ -91,6 +92,7 @@ "eventemitter2": "^4.1.2", "exports-loader": "^0.6.4", "express": "4.16.0", + "express-static-gzip": "^0.3.1", "file-loader": "^0.11.2", "form-data": "^2.3.1", "fs-extra": "^4.0.1", @@ -117,7 +119,6 @@ "jwt-decode": "^2.2.0", "keymaster": "^1.6.2", "kue": "0.11.6", - "license-webpack-plugin": "^1.0.0", "linkify-it": "^2.0.3", "lodash": "^4.16.6", "marked": "^0.3.6", diff --git a/routes/index.js b/routes/index.js index 848269a4d..90654adc5 100644 --- a/routes/index.js +++ b/routes/index.js @@ -9,10 +9,10 @@ const i18n = require('../services/i18n'); const enabled = require('debug').enabled; const errors = require('../errors'); const {createGraphOptions} = require('../graph'); -const accepts = require('accepts'); const apollo = require('graphql-server-express'); const {DISABLE_STATIC_SERVER} = require('../config'); const SetupService = require('../services/setup'); +const static = require('express-static-gzip'); const router = express.Router(); @@ -22,44 +22,20 @@ const router = express.Router(); if (!DISABLE_STATIC_SERVER) { - // If the application is in production mode, then add gzip rewriting for the - // content. - if (process.env.NODE_ENV === 'production') { - router.get('*.js', (req, res, next) => { - const accept = accepts(req); - if (accept.encoding(['gzip']) === 'gzip') { - - // Adjust the headers on the request by adding a content type header - // because express won't be able to detect the mime-type with the .gz - // extension and we need to declare support for the gzip encoding. - res.set('Content-Type', 'application/javascript'); - res.set('Content-Encoding', 'gzip'); - - // Rewrite the url so that the gzip version will be served instead. - req.url = `${req.url}.gz`; - } - - next(); - }); - } - /** * Serve the directories under public/dist from this router. */ - router.use('/client', express.static(path.join(__dirname, '../dist'))); router.use('/public', express.static(path.join(__dirname, '../public'))); - - /** - * Serves a file based on a relative path. - */ - const serveFile = (filename) => (req, res) => res.sendFile(path.join(__dirname, filename)); - - /** - * Serves the embed javascript files. - */ - router.get('/embed.js', serveFile('../dist/embed.js')); - router.get('/embed.js.gz', serveFile('../dist/embed.js.gz')); - router.get('/embed.js.map', serveFile('../dist/embed.js.map')); + router.use('/static', static(path.resolve(path.join(__dirname, '../dist')), { + indexFromEmptyFile: false, + enableBrotli: true, + customCompressions: [ + { + encodingName: 'deflate', + fileExtension: 'zz', + }, + ], + })); } //============================================================================== @@ -129,7 +105,7 @@ if (process.env.NODE_ENV !== 'production') { asset_url: '', asset_id: '', body: '', - basePath: '/client/embed/stream' + basePath: '/static/embed/stream' }); } }); diff --git a/views/admin.ejs b/views/admin.ejs index 70fed054e..9bbee7e32 100644 --- a/views/admin.ejs +++ b/views/admin.ejs @@ -42,6 +42,6 @@
- + diff --git a/views/admin/docs.ejs b/views/admin/docs.ejs index ae2fe2dcf..cf1dc0b3c 100644 --- a/views/admin/docs.ejs +++ b/views/admin/docs.ejs @@ -28,6 +28,6 @@
- + diff --git a/views/article.ejs b/views/article.ejs index 6c611c995..48d361d38 100644 --- a/views/article.ejs +++ b/views/article.ejs @@ -25,7 +25,7 @@

<%= body %>

Admin - All Assets

- + diff --git a/webpack.config.js b/webpack.config.js index d9c8ba4a0..58612a5aa 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,11 +1,11 @@ const path = require('path'); const fs = require('fs'); const CompressionPlugin = require('compression-webpack-plugin'); +const BrotliPlugin = require('brotli-webpack-plugin'); const autoprefixer = require('autoprefixer'); const precss = require('precss'); const _ = require('lodash'); const Copy = require('copy-webpack-plugin'); -const {LicenseWebpackPlugin} = require('license-webpack-plugin'); const webpack = require('webpack'); const debug = require('debug')('talk:webpack'); @@ -36,8 +36,9 @@ const config = { target: 'web', output: { path: path.join(__dirname, 'dist'), - publicPath: '/client/', - filename: '[name].js' + publicPath: '/static/', + filename: '[name].js', + chunkFilename: '[name].chunk.js', }, module: { rules: [ @@ -88,10 +89,6 @@ const config = { ] }, plugins: [ - new LicenseWebpackPlugin({ - pattern: /^(MIT|ISC|BSD.*)$/, - suppressErrors: true, - }), new Copy([ ...buildEmbeds.map((embed) => ({ from: path.join(__dirname, 'client', `coral-embed-${embed}`, 'style'), @@ -113,7 +110,8 @@ const config = { 'TALK_THREADING_LEVEL': '3', 'TALK_DEFAULT_STREAM_TAB': 'all', 'TALK_DEFAULT_LANG': 'en' - }) + }), + new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/), ], resolveLoader: { modules: ['node_modules', path.resolve(__dirname, 'client/coral-framework/loaders')], @@ -139,13 +137,23 @@ const config = { //============================================================================== if (process.env.NODE_ENV === 'production') { - config.plugins.push(new CompressionPlugin({ - asset: '[path].gz[query]', - algorithm: 'gzip', - test: /\.(js)$/, - threshold: 10240, - minRatio: 0.8 - })); + config.plugins.push( + new CompressionPlugin({ + algorithm: 'gzip', + asset: '[path].gz[query]', + test: /\.(js|css)$/, + }), + new CompressionPlugin({ + algorithm: 'deflate', + asset: '[path].zz[query]', + test: /\.(js|css)$/, + }), + new BrotliPlugin({ + asset: '[path].br[query]', + threshold: 10240, + test: /\.(js|css)$/, + }) + ); } //============================================================================== diff --git a/yarn.lock b/yarn.lock index b560fb87f..cbbebd4e6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -421,6 +421,12 @@ async@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/async/-/async-1.0.0.tgz#f8fc04ca3a13784ade9e1641af98578cfbd647a9" +async@~2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4" + dependencies: + lodash "^4.14.0" + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -1082,7 +1088,7 @@ balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" -base64-js@^1.0.2: +base64-js@^1.0.2, base64-js@^1.1.2: version "1.2.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.1.tgz#a91947da1f4a516ea38e5b4ec0ec3773675e0886" @@ -1214,6 +1220,22 @@ brorand@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" +brotli-webpack-plugin@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/brotli-webpack-plugin/-/brotli-webpack-plugin-0.5.0.tgz#9a06a744bb4af0e6d66d08b7f4f8b892a53ccc58" + dependencies: + async "~2.6.0" + webpack-sources "^1.0.2" + optionalDependencies: + brotli "^1.3.1" + iltorb "^2.0.1" + +brotli@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/brotli/-/brotli-1.3.2.tgz#525a9cad4fcba96475d7d388f6aecb13eed52f46" + dependencies: + base64-js "^1.1.2" + browser-resolve@^1.11.2: version "1.11.2" resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" @@ -1576,6 +1598,10 @@ chokidar@^1.6.1, chokidar@^1.7.0: optionalDependencies: fsevents "^1.0.0" +chownr@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181" + chrono-node@^1.2.3: version "1.3.5" resolved "https://registry.yarnpkg.com/chrono-node/-/chrono-node-1.3.5.tgz#a2495298a32da82bcc01ad9be7d77efa5e244122" @@ -2359,6 +2385,10 @@ detect-indent@^4.0.0: dependencies: repeating "^2.0.0" +detect-libc@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-0.2.0.tgz#47fdf567348a17ec25fcbf0b9e446348a76f9fb5" + dialog-polyfill@^0.4.9: version "0.4.9" resolved "https://registry.yarnpkg.com/dialog-polyfill/-/dialog-polyfill-0.4.9.tgz#c690b3727c3d82e0f947bd5b910b32af8a2ef57d" @@ -2522,7 +2552,7 @@ encoding@^0.1.11: dependencies: iconv-lite "~0.4.13" -end-of-stream@^1.0.0: +end-of-stream@^1.0.0, end-of-stream@^1.1.0: version "1.4.0" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.0.tgz#7a90d833efda6cfa6eac0f4949dbb0fad3a63206" dependencies: @@ -2850,6 +2880,10 @@ expand-range@^1.8.1: dependencies: fill-range "^2.1.0" +expand-template@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-1.1.0.tgz#e09efba977bf98f9ee0ed25abd0c692e02aec3fc" + expect-ct@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/expect-ct/-/expect-ct-0.1.0.tgz#52735678de18530890d8d7b95f0ac63640958094" @@ -2872,6 +2906,12 @@ exports-loader@^0.6.4: loader-utils "^1.0.2" source-map "0.5.x" +express-static-gzip@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/express-static-gzip/-/express-static-gzip-0.3.1.tgz#2ca516232346f7933eb09379e769a95e1f67f3df" + dependencies: + serve-static "^1.12.3" + express@4.16.0, express@^4.12.2: version "4.16.0" resolved "https://registry.yarnpkg.com/express/-/express-4.16.0.tgz#b519638e4eb58e7178c81b498ef22f798cb2e255" @@ -3369,6 +3409,10 @@ git-url-parse@^6.0.2: dependencies: git-up "^2.0.0" +github-from-package@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" + glob-base@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" @@ -3959,6 +4003,15 @@ ignore@^3.3.3: version "3.3.5" resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.5.tgz#c4e715455f6073a8d7e5dae72d2fc9d71663dba6" +iltorb@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/iltorb/-/iltorb-2.0.2.tgz#3aed6f76397855c70daf7eaef18bfa48f729e6f9" + dependencies: + detect-libc "^0.2.0" + nan "^2.6.2" + node-gyp "^3.6.2" + prebuild-install "^2.3.0" + immutability-helper@^2.2.0: version "2.4.0" resolved "https://registry.yarnpkg.com/immutability-helper/-/immutability-helper-2.4.0.tgz#00d421e2957c17f0f0781475f05ffd837e73458d" @@ -5060,12 +5113,6 @@ libqp@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/libqp/-/libqp-1.1.0.tgz#f5e6e06ad74b794fb5b5b66988bf728ef1dedbe8" -license-webpack-plugin@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/license-webpack-plugin/-/license-webpack-plugin-1.1.0.tgz#99117ae985fb6c2a70df301b8a1ae0268f17f433" - dependencies: - ejs "^2.5.7" - linkify-it@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-2.0.3.tgz#d94a4648f9b1c179d64fa97291268bdb6ce9434f" @@ -5644,7 +5691,7 @@ minimist@^1.1.1, minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" -mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: +mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" dependencies: @@ -5805,6 +5852,10 @@ nan@^2.3.0: version "2.7.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.7.0.tgz#d95bf721ec877e08db276ed3fc6eb78f9083ad46" +nan@^2.6.2: + version "2.8.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.8.0.tgz#ed715f3fe9de02b57a5e6252d90a96675e1f085a" + native-promise-only@^0.8.1: version "0.8.1" resolved "https://registry.yarnpkg.com/native-promise-only/-/native-promise-only-0.8.1.tgz#20a318c30cb45f71fe7adfbf7b21c99c1472ef11" @@ -5887,6 +5938,12 @@ nocache@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/nocache/-/nocache-2.0.0.tgz#202b48021a0c4cbde2df80de15a17443c8b43980" +node-abi@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.1.2.tgz#4da6caceb6685fcd31e7dd1994ef6bb7d0a9c0b2" + dependencies: + semver "^5.4.1" + node-dir@^0.1.10: version "0.1.17" resolved "https://registry.yarnpkg.com/node-dir/-/node-dir-0.1.17.tgz#5f5665d93351335caabef8f1c554516cf5f1e4e5" @@ -5906,6 +5963,24 @@ node-fetch@^1.0.1, node-fetch@^1.7.2: encoding "^0.1.11" is-stream "^1.0.1" +node-gyp@^3.6.2: + version "3.6.2" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.6.2.tgz#9bfbe54562286284838e750eac05295853fa1c60" + dependencies: + fstream "^1.0.0" + glob "^7.0.3" + graceful-fs "^4.1.2" + minimatch "^3.0.2" + mkdirp "^0.5.0" + nopt "2 || 3" + npmlog "0 || 1 || 2 || 3 || 4" + osenv "0" + request "2" + rimraf "2" + semver "~5.3.0" + tar "^2.0.0" + which "1" + node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" @@ -6047,6 +6122,16 @@ nomnom@~1.6.2: colors "0.5.x" underscore "~1.4.4" +noop-logger@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/noop-logger/-/noop-logger-0.1.1.tgz#94a2b1633c4f1317553007d8966fd0e841b6a4c2" + +"nopt@2 || 3": + version "3.0.6" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" + dependencies: + abbrev "1" + nopt@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" @@ -6108,7 +6193,7 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" -npmlog@^4.0.2: +"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.1, npmlog@^4.0.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" dependencies: @@ -6194,7 +6279,7 @@ on-headers@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" -once@^1.3.0, once@^1.3.3, once@^1.4.0: +once@^1.3.0, once@^1.3.1, once@^1.3.3, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" dependencies: @@ -6254,7 +6339,7 @@ os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" -osenv@^0.1.4: +osenv@0, osenv@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644" dependencies: @@ -6985,6 +7070,25 @@ pre-git@^3.16.0: validate-commit-msg "2.14.0" word-wrap "1.2.3" +prebuild-install@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-2.3.0.tgz#19481247df728b854ab57b187ce234211311b485" + dependencies: + expand-template "^1.0.2" + github-from-package "0.0.0" + minimist "^1.2.0" + mkdirp "^0.5.1" + node-abi "^2.1.1" + noop-logger "^0.1.1" + npmlog "^4.0.1" + os-homedir "^1.0.1" + pump "^1.0.1" + rc "^1.1.6" + simple-get "^1.4.2" + tar-fs "^1.13.0" + tunnel-agent "^0.6.0" + xtend "4.0.1" + precss@1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/precss/-/precss-1.4.0.tgz#8d7c3ae70f10a00a3955287f85a66e0f8b31cda3" @@ -7210,6 +7314,13 @@ pug@^2.0.0-beta3: pug-runtime "^2.0.3" pug-strip-comments "^1.0.2" +pump@^1.0.0, pump@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/pump/-/pump-1.0.3.tgz#5dfe8311c33bbf6fc18261f9f34702c47c08a954" + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + punycode@1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" @@ -7731,6 +7842,33 @@ repeating@^2.0.0: dependencies: is-finite "^1.0.0" +request@2, request@^2.55.0, request@^2.74.0, request@^2.79.0: + version "2.83.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356" + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.6.0" + caseless "~0.12.0" + combined-stream "~1.0.5" + extend "~3.0.1" + forever-agent "~0.6.1" + form-data "~2.3.1" + har-validator "~5.0.3" + hawk "~6.0.2" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.17" + oauth-sign "~0.8.2" + performance-now "^2.1.0" + qs "~6.5.1" + safe-buffer "^5.1.1" + stringstream "~0.0.5" + tough-cookie "~2.3.3" + tunnel-agent "^0.6.0" + uuid "^3.1.0" + request@2.79.0: version "2.79.0" resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de" @@ -7783,33 +7921,6 @@ request@2.81.0: tunnel-agent "^0.6.0" uuid "^3.0.0" -request@^2.55.0, request@^2.74.0, request@^2.79.0: - version "2.83.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356" - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.6.0" - caseless "~0.12.0" - combined-stream "~1.0.5" - extend "~3.0.1" - forever-agent "~0.6.1" - form-data "~2.3.1" - har-validator "~5.0.3" - hawk "~6.0.2" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.17" - oauth-sign "~0.8.2" - performance-now "^2.1.0" - qs "~6.5.1" - safe-buffer "^5.1.1" - stringstream "~0.0.5" - tough-cookie "~2.3.3" - tunnel-agent "^0.6.0" - uuid "^3.1.0" - require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -8030,6 +8141,10 @@ semver@~5.0.1: version "5.0.3" resolved "https://registry.yarnpkg.com/semver/-/semver-5.0.3.tgz#77466de589cd5d3c95f138aa78bc569a3cb5d27a" +semver@~5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" + send@0.16.0: version "0.16.0" resolved "https://registry.yarnpkg.com/send/-/send-0.16.0.tgz#16338dbb9a2ede4ad57b48420ec3b82d8e80a57b" @@ -8048,6 +8163,24 @@ send@0.16.0: range-parser "~1.2.0" statuses "~1.3.1" +send@0.16.1: + version "0.16.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.16.1.tgz#a70e1ca21d1382c11d0d9f6231deb281080d7ab3" + dependencies: + debug "2.6.9" + depd "~1.1.1" + destroy "~1.0.4" + encodeurl "~1.0.1" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.6.2" + mime "1.4.1" + ms "2.0.0" + on-finished "~2.3.0" + range-parser "~1.2.0" + statuses "~1.3.1" + serve-static@1.13.0: version "1.13.0" resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.0.tgz#810c91db800e94ba287eae6b4e06caab9fdc16f1" @@ -8057,6 +8190,15 @@ serve-static@1.13.0: parseurl "~1.3.2" send "0.16.0" +serve-static@^1.12.3: + version "1.13.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.1.tgz#4c57d53404a761d8f2e7c1e8a18a47dbf278a719" + dependencies: + encodeurl "~1.0.1" + escape-html "~1.0.3" + parseurl "~1.3.2" + send "0.16.1" + set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" @@ -8139,6 +8281,14 @@ simple-commit-message@3.3.2: semver "5.4.1" word-wrap "1.2.3" +simple-get@^1.4.2: + version "1.4.3" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-1.4.3.tgz#e9755eda407e96da40c5e5158c9ea37b33becbeb" + dependencies: + once "^1.3.1" + unzip-response "^1.0.0" + xtend "^4.0.0" + simplemde@^1.11.2: version "1.11.2" resolved "https://registry.yarnpkg.com/simplemde/-/simplemde-1.11.2.tgz#a23a35d978d2c40ef07dec008c92f070d8e080e3" @@ -8278,7 +8428,7 @@ source-map@0.5.x, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1, sourc version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" -source-map@^0.6.1: +source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" @@ -8561,6 +8711,15 @@ tapable@^0.2.7, tapable@~0.2.5: version "0.2.8" resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.8.tgz#99372a5c999bf2df160afc0d74bed4f47948cd22" +tar-fs@^1.13.0: + version "1.16.0" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-1.16.0.tgz#e877a25acbcc51d8c790da1c57c9cf439817b896" + dependencies: + chownr "^1.0.1" + mkdirp "^0.5.1" + pump "^1.0.0" + tar-stream "^1.1.2" + tar-pack@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.0.tgz#23be2d7f671a8339376cbdb0b8fe3fdebf317984" @@ -8583,7 +8742,16 @@ tar-stream@1.5.2: readable-stream "^2.0.0" xtend "^4.0.0" -tar@^2.2.1: +tar-stream@^1.1.2: + version "1.5.5" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.5.5.tgz#5cad84779f45c83b1f2508d96b09d88c7218af55" + dependencies: + bl "^1.0.0" + end-of-stream "^1.0.0" + readable-stream "^2.0.0" + xtend "^4.0.0" + +tar@^2.0.0, tar@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" dependencies: @@ -8894,6 +9062,10 @@ unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" +unzip-response@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-1.0.2.tgz#b984f0877fc0a89c2c773cc1ef7b5b232b5b06fe" + unzip-response@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" @@ -9076,6 +9248,13 @@ webpack-sources@^1.0.1: source-list-map "^2.0.0" source-map "~0.5.3" +webpack-sources@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.1.0.tgz#a101ebae59d6507354d71d8013950a3a8b7a5a54" + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" + webpack@2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/webpack/-/webpack-2.4.1.tgz#15a91dbe34966d8a4b99c7d656efd92a2e5a6f6a" @@ -9137,7 +9316,7 @@ which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" -which@^1.2.12, which@^1.2.9: +which@1, which@^1.2.12, which@^1.2.9: version "1.3.0" resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" dependencies: @@ -9269,7 +9448,7 @@ xregexp@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943" -xtend@^4.0.0, xtend@^4.0.1: +xtend@4.0.1, xtend@^4.0.0, xtend@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"