diff --git a/.babelrc b/.babelrc new file mode 100644 index 0000000..796fcff --- /dev/null +++ b/.babelrc @@ -0,0 +1,3 @@ +{ + "plugins": ["syntax-dynamic-import"] +} diff --git a/.eslintrc b/.eslintrc index 5d27a96..caf9299 100644 --- a/.eslintrc +++ b/.eslintrc @@ -1,4 +1,5 @@ { + "parser": "babel-eslint", "parserOptions": { "ecmaVersion": 6, "sourceType": "module" diff --git a/README.md b/README.md index 4449e09..639b6fc 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ Recommended plugins to have are: $ npm install -g yarn@0.21.3 ``` -3) Now install the build and application dependencies by running `$ yarn install` (Vagrant will do this for you) +3) Now install the build and application dependencies by running `$ yarn install` ## Project Layout An overview of important files and configurations for the applications @@ -69,7 +69,7 @@ a feather) organization. * _src_ - application code * _src/components/_ - resusable UI features, typically directives. A `BootstrapComponent` has been designated to manage starting up the application, from _index.js_ * _src/services/_ - APIs for handling backend REST APIs or browser APIs, non UI related "helpers" -* _src/views/_ - routable states ("pages"), generally exposed with `class` controllers +* _src/views/_ - routable states ("pages"), generally exposed with `class` controllers. Some are configured to [lazy load](https://github.com/kenzanmedia/angularjs-webpack-seed/wiki#lazy-loading). * _src/index.html_ - main layout of the application * _src/index.js_ - main entry way into the application and pulls in the application's `BootstrapComponent` * _src/routes.js_ - routes for the application, maps to different views @@ -134,6 +134,14 @@ $ yarn run serve **Note: it is recommended you run this command from the master branch or a tag. By Default this proxies with the webpack-dev-server proxy.** +### Analyze +Start a local webserver to show a visualization of bundle statistics: + +```bash +$ yarn run analyze +``` + +**Note**: You must run the build task before analyzing. ## Dependency Management Build packages (like Webpack) are installed through Yarn into _package.json_, using @@ -160,4 +168,4 @@ $ yarn add ## AWS Info **//TODO Document Your AWS Info here (NO CREDENTIALS!!!!)** * s3 bucket - -* cloudfront distribution - \ No newline at end of file +* cloudfront distribution - diff --git a/karma.conf.js b/karma.conf.js index d6b56f9..9295836 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -6,29 +6,35 @@ const webpackConfig = require('./webpack.config.common'); // TODO issues with karma and CommonChunksPlugin // https://github.com/webpack/karma-webpack/issues/24 -webpackConfig.plugins[2] = function() {}; +webpackConfig.plugins[webpackConfig.plugins.length - 1] = function() {}; +// dont fail on eslint errors while developing +webpackConfig.module.rules[0].use[1].options.failOnError = isProductionBuild; module.exports = function(config) { const logLevel = isProductionBuild ? config.LOG_DEBUG : config.LOG_INFO; config.set({ basePath: './', - frameworks: ['jasmine'], + frameworks: ['mocha', 'sinon-chai'], files: [ + { pattern: './node_modules/phantomjs-polyfill-find/find-polyfill.js', watched: false }, + // included here to ensure proper loading order and availablity of jquery + angular + mocks to Karma + { pattern: './node_modules/jquery/dist/jquery.js', watched: false }, { pattern: './node_modules/angular/angular.js', watched: false }, { pattern: './node_modules/angular-mocks/angular-mocks.js', watched: false }, - { pattern: 'src/**/*.spec.js', watched: false } + { pattern: './src/**/*.spec.js', watched: true } ], preprocessors: { - '**/*.spec.js': ['webpack', 'coverage'] + 'src/**/*.js': ['webpack', 'sourcemap', 'coverage'] }, webpack: webpackConfig, reporters: ['progress', 'dots', 'junit', 'coverage'], port: 9876, + browserDisconnectTolerance: 1, logLevel: logLevel, autoWatch: shouldWatch, browsers: [browser], @@ -36,14 +42,15 @@ module.exports = function(config) { concurrency: Infinity, junitReporter: { outputDir: './reports/', - outputFile: 'test-results.xml', + outputFile: 'test-results/test-results.xml', suite: 'seed-webapp', useBrowserName: false }, coverageReporter: { - type : 'cobertura', - dir : './reports', - subdir: 'coverage' + type: 'cobertura', + dir: './reports', + subdir: 'test-coverage/phantomjs', + file: 'coverage.xml' } }); diff --git a/package.json b/package.json index fe879ad..ffc9246 100644 --- a/package.json +++ b/package.json @@ -4,10 +4,11 @@ "description": "A starter kit for using AngularJS with Webpack and ES6", "main": "src/index.js", "scripts": { - "build": "rimraf ./build && webpack --config ./webpack.config.prod.js", + "build": "rimraf ./build && eslint *.js && webpack --config ./webpack.config.prod.js", "develop": "webpack-dev-server --config ./webpack.config.develop.js --open", "serve": "webpack --config ./webpack.config.prod.js -p --progress --profile --bail && http-server ./build -o", - "test:unit": "rimraf ./reports && karma start" + "test:unit": "rimraf ./reports && karma start", + "analyze": "webpack-bundle-analyzer ./build/stats.json" }, "repository": { "type": "git", @@ -33,13 +34,18 @@ "angular-aria": "^1.6.3", "angular-material": "^1.1.3", "angular-ui-router": "^0.4.2", - "http-server": "^0.9.0" + "http-server": "^0.9.0", + "jquery": "^3.2.1", + "oclazyload": "^1.1.0" }, "devDependencies": { "angular-mocks": "^1.6.4", "babel-core": "^6.24.0", + "babel-eslint": "^7.2.3", "babel-loader": "^6.4.1", + "babel-plugin-syntax-dynamic-import": "^6.18.0", "babel-preset-es2015": "^6.24.0", + "chai": "^3.5.0", "css-loader": "^0.27.3", "css-to-string-loader": "^0.1.2", "eslint": "^3.18.0", @@ -54,14 +60,22 @@ "karma-coverage": "^1.1.1", "karma-jasmine": "^1.1.0", "karma-junit-reporter": "^1.2.0", + "karma-mocha": "^1.3.0", "karma-phantomjs-launcher": "^1.0.4", + "karma-sinon-chai": "^1.3.1", + "karma-sourcemap-loader": "^0.3.7", "karma-webpack": "^2.0.3", + "mocha": "^3.3.0", "ng-annotate-webpack-plugin": "^0.2.1-pre", "node-sass": "^4.5.2", + "phantomjs-polyfill-find": "ptim/phantomjs-polyfill-find", "rimraf": "^2.6.1", "sass-loader": "^6.0.3", + "sinon": "^2.2.0", + "sinon-chai": "^2.10.0", "style-loader": "^0.16.1", - "webpack": "^2.3.2", + "webpack": "^2.5.1", + "webpack-bundle-analyzer": "^2.4.0", "webpack-dev-server": "^2.4.2", "webpack-md5-hash": "^0.0.5", "webpack-merge": "^4.1.0" diff --git a/src/components/footer/footer.component.spec.js b/src/components/footer/footer.component.spec.js index 5fefba6..cd2ffe8 100644 --- a/src/components/footer/footer.component.spec.js +++ b/src/components/footer/footer.component.spec.js @@ -22,18 +22,18 @@ describe('tgh.component.footer', () => { }); it('should test the footer component exists', () => { - expect(scope).toBeDefined(); - expect(element).toBeDefined(); - expect(element.find('footer').length).toBe(1); + expect(scope).to.not.be.undefined; + expect(element).to.not.be.undefined; + expect(element.find('footer').length).to.equal(1); }); it('should test the year is correct', () => { let year = new Date().getFullYear(); let copyright = element.find('p'); - expect(copyright.html()).toBe('© 2014 - ' + year); - expect(copyright.length).toBe(1); - expect(copyright.hasClass('copyright')).toBe(true); + expect(copyright.html()).to.equal('© 2014 - ' + year); + expect(copyright.length).to.equal(1); + expect(copyright.hasClass('copyright')).to.equal(true); }); }); \ No newline at end of file diff --git a/src/components/header/header.component.spec.js b/src/components/header/header.component.spec.js index 22bab0c..1604d8c 100644 --- a/src/components/header/header.component.spec.js +++ b/src/components/header/header.component.spec.js @@ -22,16 +22,16 @@ describe('tgh.component.header', () => { }); it('should test the header component exists', () => { - expect(scope).toBeDefined(); - expect(element).toBeDefined(); - expect(element.find('header').length).toBe(1); + expect(scope).to.not.be.undefined; + expect(element).to.not.be.undefined; + expect(element.find('header').length).to.equal(1); }); it('should test the banner text is correct is correct', () => { let banner = element.find('h2'); - expect(banner.html()).toBe('The Greenhouse.io - AngularJS / Webpack Starter Kit'); - expect(banner.length).toBe(1); + expect(banner.html()).to.equal('The Greenhouse.io - AngularJS / Webpack Starter Kit'); + expect(banner.length).to.equal(1); }); }); \ No newline at end of file diff --git a/src/components/navigation/navigation.component.spec.js b/src/components/navigation/navigation.component.spec.js index 424154d..398d4d7 100644 --- a/src/components/navigation/navigation.component.spec.js +++ b/src/components/navigation/navigation.component.spec.js @@ -22,20 +22,20 @@ describe('tgh.component.navigation', () => { }); it('should test the navigation component exists', () => { - expect(scope).toBeDefined(); - expect(element).toBeDefined(); - expect(element.find('nav').length).toBe(1); - expect(element.find('ul').length).toBe(1); + expect(scope).to.not.be.undefined; + expect(element).to.not.be.undefined; + expect(element.find('nav').length).to.equal(1); + expect(element.find('ul').length).to.equal(1); }); it('should test that links are set correctly', () => { let links = element.find('a'); - expect(element.find('li').length).toBe(2); - expect(element.find('a').length).toBe(2); + expect(element.find('li').length).to.equal(2); + expect(element.find('a').length).to.equal(2); - expect(links[0].text).toBe('Home'); - expect(links[1].text).toBe('Users'); + expect(links[0].text).to.equal('Home'); + expect(links[1].text).to.equal('Users'); }); }); \ No newline at end of file diff --git a/src/services/users/users.service.js b/src/services/users/users.service.js index a7bb502..cc2da35 100644 --- a/src/services/users/users.service.js +++ b/src/services/users/users.service.js @@ -18,9 +18,7 @@ export default class UsersService { } getPrimaryUser() { - return this.users.filter((user) => { - return user.isPrimary; - })[0]; + return this.users.find(user => user.isPrimary); } addUser(firstName, lastName) { diff --git a/src/services/users/users.service.spec.js b/src/services/users/users.service.spec.js index 1e5fb2b..7919db5 100644 --- a/src/services/users/users.service.spec.js +++ b/src/services/users/users.service.spec.js @@ -12,37 +12,37 @@ describe('tgh.services.users', () => { }); it('should test the service exists', () => { - expect(UsersService).toBeDefined(); - expect(usersService).toBeDefined(); - expect(usersService.getUsers).toBeDefined(); - expect(usersService.getPrimaryUser).toBeDefined(); - expect(usersService.addUser).toBeDefined(); - expect(usersService.deleteUser).toBeDefined(); + expect(UsersService).to.not.be.undefined; + expect(usersService).to.not.be.undefined; + expect(usersService.getUsers).to.not.be.undefined; + expect(usersService.getPrimaryUser).to.not.be.undefined; + expect(usersService.addUser).to.not.be.undefined; + expect(usersService.deleteUser).to.not.be.undefined; }); it('should test that first call to getUsers returns expected default users', () => { let users = usersService.getUsers(); - expect(users.length).toBe(2); + expect(users.length).to.equal(2); - expect(users[0].id).toBe(1); - expect(users[0].firstName).toBe('Owen'); - expect(users[0].lastName).toBe('Buckley'); - expect(users[0].isPrimary).toBe(true); + expect(users[0].id).to.equal(1); + expect(users[0].firstName).to.equal('Owen'); + expect(users[0].lastName).to.equal('Buckley'); + expect(users[0].isPrimary).to.equal(true); - expect(users[1].id).toBe(2); - expect(users[1].firstName).toBe('The'); - expect(users[1].lastName).toBe('Greenhouse'); - expect(users[1].isPrimary).toBe(false); + expect(users[1].id).to.equal(2); + expect(users[1].firstName).to.equal('The'); + expect(users[1].lastName).to.equal('Greenhouse'); + expect(users[1].isPrimary).to.equal(false); }); it('should test that getPrimaryUser call works as expected', () => { let primaryUser = new UsersService().getPrimaryUser(); - expect(primaryUser.id).toBe(1); - expect(primaryUser.firstName).toBe('Owen'); - expect(primaryUser.lastName).toBe('Buckley'); - expect(primaryUser.isPrimary).toBe(true); + expect(primaryUser.id).to.equal(1); + expect(primaryUser.firstName).to.equal('Owen'); + expect(primaryUser.lastName).to.equal('Buckley'); + expect(primaryUser.isPrimary).to.equal(true); }); it('should test that addUsers call works as expected', () => { @@ -66,16 +66,16 @@ describe('tgh.services.users', () => { } }); - expect(found).toBe(true); + expect(found).to.equal(true); }); it('should test that getPrimaryUser call works as expected', () => { let primaryUser = usersService.getPrimaryUser(); - expect(primaryUser.id).toBe(1); - expect(primaryUser.firstName).toBe('Owen'); - expect(primaryUser.lastName).toBe('Buckley'); - expect(primaryUser.isPrimary).toBe(true); + expect(primaryUser.id).to.equal(1); + expect(primaryUser.firstName).to.equal('Owen'); + expect(primaryUser.lastName).to.equal('Buckley'); + expect(primaryUser.isPrimary).to.equal(true); }); it('should test that deleteUsers call works as expected when starting with default users', () => { @@ -93,11 +93,9 @@ describe('tgh.services.users', () => { users = usersService.getUsers(); // get our user - user = users.filter((user) => { - if ((user.firstName + user.lastName) === (newUser.firstName + newUser.lastName)) { - return user; - } - })[0]; + user = users.find((user) => { + return (user.firstName + user.lastName) === (newUser.firstName + newUser.lastName); + }); // add a user usersService.deleteUser(user.id); @@ -105,17 +103,17 @@ describe('tgh.services.users', () => { // get users users = usersService.getUsers(); - expect(users.length).toBe(2); + expect(users.length).to.equal(2); - expect(users[0].id).toBe(1); - expect(users[0].firstName).toBe('Owen'); - expect(users[0].lastName).toBe('Buckley'); - expect(users[0].isPrimary).toBe(true); + expect(users[0].id).to.equal(1); + expect(users[0].firstName).to.equal('Owen'); + expect(users[0].lastName).to.equal('Buckley'); + expect(users[0].isPrimary).to.equal(true); - expect(users[1].id).toBe(2); - expect(users[1].firstName).toBe('The'); - expect(users[1].lastName).toBe('Greenhouse'); - expect(users[1].isPrimary).toBe(false); + expect(users[1].id).to.equal(2); + expect(users[1].firstName).to.equal('The'); + expect(users[1].lastName).to.equal('Greenhouse'); + expect(users[1].isPrimary).to.equal(false); }); }); \ No newline at end of file diff --git a/src/views/users/users.config.js b/src/views/users/users.config.js index 653a4a6..988b25a 100644 --- a/src/views/users/users.config.js +++ b/src/views/users/users.config.js @@ -1,16 +1,20 @@ -import UsersController from './users.controller'; -import UsersTemplate from './users.template.html'; - export default function UsersConfig($stateProvider) { 'ngInject'; $stateProvider.state({ name: 'users', url: '/users', - template: UsersTemplate, - controller: UsersController, + templateProvider: () => import(/* webpackChunkName: "users.route" */ './users.template.html'), + controller: 'UsersController', controllerAs: 'vm', resolve: { + loadController: ['$ocLazyLoad', function ($ocLazyLoad) { + return import(/* webpackChunkName: "users.route" */ './users.controller.module') + .then((module) => { + $ocLazyLoad.inject('tgh.view.users.ctrl'); + return module; + }); + }], primaryUser: ['UsersService', function (UsersService) { return UsersService.getPrimaryUser(); }] diff --git a/src/views/users/users.controller.module.js b/src/views/users/users.controller.module.js new file mode 100644 index 0000000..5ce2c92 --- /dev/null +++ b/src/views/users/users.controller.module.js @@ -0,0 +1,5 @@ +import UsersController from './users.controller'; + +export default angular + .module('tgh.view.users.ctrl', []) + .controller('UsersController', UsersController); diff --git a/src/views/users/users.module.js b/src/views/users/users.module.js index d6f6999..e5ab47f 100644 --- a/src/views/users/users.module.js +++ b/src/views/users/users.module.js @@ -1,9 +1,11 @@ import UsersConfig from './users.config'; import uirouter from 'angular-ui-router'; +import oclazyload from 'oclazyload'; export default angular .module('tgh.view.users', [ - uirouter + uirouter, + oclazyload ]) .config(UsersConfig); \ No newline at end of file diff --git a/webpack.config.common.js b/webpack.config.common.js index 1a381f5..bd9c379 100644 --- a/webpack.config.common.js +++ b/webpack.config.common.js @@ -21,7 +21,7 @@ module.exports = { presets: [ ['es2015', { modules: false }] ] - }, + } }, { loader: 'eslint-loader', options: { @@ -30,7 +30,7 @@ module.exports = { } }] }, { - test: /\.html$/, + test: /\.html$/, use: [{ loader: 'html-loader' }] diff --git a/webpack.config.develop.js b/webpack.config.develop.js index 39d4eef..07c74bc 100644 --- a/webpack.config.develop.js +++ b/webpack.config.develop.js @@ -1,14 +1,15 @@ +const path = require('path'); const webpackMerge = require('webpack-merge'); const commonConfig = require('./webpack.config.common.js'); module.exports = webpackMerge(commonConfig, { output: { - path: __dirname + './build', + path: path.join(__dirname, 'build'), filename: '[name].bundle.js', sourceMapFilename: '[name].map', chunkFilename: '[id].chunk.js', library: 'ac_[name]', - libraryTarget: 'var', + libraryTarget: 'var' }, devServer: { @@ -21,7 +22,7 @@ module.exports = webpackMerge(commonConfig, { aggregateTimeout: 300, poll: 1000 }, - proxy:{ + proxy: { '/api/*': { target: 'http://', secure: false, diff --git a/webpack.config.prod.js b/webpack.config.prod.js index c18d79b..293fc67 100644 --- a/webpack.config.prod.js +++ b/webpack.config.prod.js @@ -1,19 +1,21 @@ +const path = require('path'); const commonConfig = require('./webpack.config.common'); -const ExtractTextPlugin = require("extract-text-webpack-plugin"); +const ExtractTextPlugin = require('extract-text-webpack-plugin'); const UglifyJsPlugin = require('webpack/lib/optimize/UglifyJsPlugin'); const WebpackMd5Hash = require('webpack-md5-hash'); const webpackMerge = require('webpack-merge'); const NgAnnotatePlugin = require('ng-annotate-webpack-plugin'); +const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; module.exports = webpackMerge(commonConfig, { devtool: 'source-map', output: { - path: __dirname + '/build', + path: path.join(__dirname, 'build'), filename: '[name].[chunkhash].bundle.js', sourceMapFilename: '[name].[chunkhash].bundle.map', - chunkFilename: '[id].[chunkhash].chunk.js', + chunkFilename: '[id].[chunkhash].chunk.js' }, plugins: [ @@ -23,12 +25,16 @@ module.exports = webpackMerge(commonConfig, { new WebpackMd5Hash(), new UglifyJsPlugin({ beautify: false, - mangle: { screw_ie8 : true, keep_fnames: true }, - compress: { screw_ie8: true }, + mangle: { screw_ie8: true, keep_fnames: true }, // eslint-disable-line camelcase + compress: { screw_ie8: true }, // eslint-disable-line camelcase comments: false, sourceMap: true }), - new ExtractTextPlugin('[name].[chunkhash].style.css') + new ExtractTextPlugin('[name].[chunkhash].style.css'), + new BundleAnalyzerPlugin({ + analyzerMode: 'disabled', + generateStatsFile: true + }) ] }); \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 20cc24d..4848caa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -25,7 +25,7 @@ acorn-jsx@^3.0.0: dependencies: acorn "^3.0.4" -acorn@4.0.4: +acorn@4.0.4, acorn@^4.0.3: version "4.0.4" resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.4.tgz#17a8d6a7a6c4ef538b814ec9abac2779293bf30a" @@ -33,9 +33,13 @@ acorn@^3.0.0, acorn@^3.0.4: version "3.3.0" 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" +acorn@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.0.3.tgz#c460df08491463f028ccb82eab3730bf01087b3d" + +acorn@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.0.3.tgz#c460df08491463f028ccb82eab3730bf01087b3d" acorn@~2.6.4: version "2.6.4" @@ -214,6 +218,10 @@ assert@^1.1.1: dependencies: util "0.10.3" +assertion-error@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.0.2.tgz#13ca515d86206da0bac66e834dd397d87581094c" + ast-types@0.9.6: version "0.9.6" resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.9.6.tgz#102c9e9e9005d3e7e3829bf0c4fa24ee862ee9b9" @@ -303,6 +311,15 @@ babel-core@^6.24.0: slash "^1.0.0" source-map "^0.5.0" +babel-eslint@^7.2.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-7.2.3.tgz#b2fe2d80126470f5c19442dc757253a897710827" + dependencies: + babel-code-frame "^6.22.0" + babel-traverse "^6.23.1" + babel-types "^6.23.0" + babylon "^6.17.0" + babel-generator@^6.24.0: version "6.24.0" resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.24.0.tgz#eba270a8cc4ce6e09a61be43465d7c62c1f87c56" @@ -412,6 +429,10 @@ babel-plugin-check-es2015-constants@^6.22.0: dependencies: babel-runtime "^6.22.0" +babel-plugin-syntax-dynamic-import@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da" + babel-plugin-transform-es2015-arrow-functions@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" @@ -674,9 +695,9 @@ babel-types@^6.19.0, babel-types@^6.22.0, babel-types@^6.23.0: lodash "^4.2.0" to-fast-properties "^1.0.1" -babylon@^6.11.0, babylon@^6.15.0: - version "6.16.1" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.16.1.tgz#30c5a22f481978a9e7f8cdfdf496b11d94b404d3" +babylon@^6.11.0, babylon@^6.15.0, babylon@^6.17.0: + version "6.17.0" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.0.tgz#37da948878488b9c4e3c4038893fa3314b3fc932" backo2@1.0.2: version "1.0.2" @@ -798,6 +819,10 @@ brorand@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" +browser-stdout@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" + browserify-aes@0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-0.4.0.tgz#067149b668df31c4b58533e02d01e806d8608e2c" @@ -966,6 +991,14 @@ center-align@^0.1.1: align-text "^0.1.3" lazy-cache "^1.0.3" +chai@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/chai/-/chai-3.5.0.tgz#4d02637b067fe958bdbfdd3a40ec56fef7373247" + dependencies: + assertion-error "^1.0.1" + deep-eql "^0.1.3" + type-detect "^1.0.0" + chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" @@ -1137,7 +1170,7 @@ combined-stream@^1.0.5, combined-stream@~1.0.5: dependencies: delayed-stream "~1.0.0" -commander@2.9.x, commander@^2.9.0: +commander@2.9.0, commander@2.9.x, commander@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" dependencies: @@ -1493,6 +1526,12 @@ debug@2.3.3: dependencies: ms "0.7.2" +debug@2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.0.tgz#bc596bcabe7617f11d9fa15361eded5608b8499b" + dependencies: + ms "0.7.2" + debug@2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.1.tgz#79855090ba2c4e3115cc7d8769491d58f0491351" @@ -1509,6 +1548,12 @@ decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" +deep-eql@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-0.1.3.tgz#ef558acab8de25206cd713906d74e56930eb69f2" + dependencies: + type-detect "0.1.1" + deep-extend@~0.4.0: version "0.4.1" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253" @@ -1566,6 +1611,10 @@ di@^0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" +diff@3.2.0, diff@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" + diffie-hellman@^5.0.0: version "5.0.2" resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e" @@ -1646,6 +1695,10 @@ domutils@1.5, domutils@1.5.1: dom-serializer "0" domelementtype "1" +duplexer@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" + ecc-jsbn@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" @@ -1665,6 +1718,10 @@ ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" +ejs@^2.5.6: + version "2.5.6" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.6.tgz#479636bfa3fe3b1debd52087f0acb204b4f19c88" + electron-to-chromium@^1.2.7: version "1.3.2" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.2.tgz#b8ce5c93b308db0e92f6d0435c46ddec8f6363ab" @@ -1840,7 +1897,7 @@ escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: +escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -2025,7 +2082,7 @@ expand-range@^1.8.1: dependencies: fill-range "^2.1.0" -express@^4.13.3: +express@^4.13.3, express@^4.15.2: version "4.15.2" resolved "https://registry.yarnpkg.com/express/-/express-4.15.2.tgz#af107fc148504457f2dca9a6f2571d7129b97b35" dependencies: @@ -2170,6 +2227,10 @@ filename-regex@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.0.tgz#996e3e80479b98b9897f15a8a58b3d084e926775" +filesize@^3.5.6: + version "3.5.9" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.5.9.tgz#9e3dd8a9b124f5b2f1fb2ee9cd13a86c707bb222" + fill-range@^2.1.0: version "2.2.3" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" @@ -2252,6 +2313,12 @@ form-data@~2.1.1: combined-stream "^1.0.5" mime-types "^2.1.12" +formatio@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/formatio/-/formatio-1.2.0.tgz#f3b2167d9068c4698a8d51f4f760a39a54d818eb" + dependencies: + samsam "1.x" + forwarded@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.0.tgz#19ef9874c4ae1c297bcf078fde63a09b66a84363" @@ -2369,24 +2436,24 @@ glob-parent@^2.0.0: dependencies: is-glob "^2.0.0" -glob@^5.0.15: - version "5.0.15" - resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" +glob@7.1.1, glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@~7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" dependencies: + fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "2 || 3" + minimatch "^3.0.2" once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@~7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" +glob@^5.0.15: + version "5.0.15" + resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" dependencies: - fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "^3.0.2" + minimatch "2 || 3" once "^1.3.0" path-is-absolute "^1.0.0" @@ -2428,6 +2495,16 @@ graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9: version "1.0.1" resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" +growl@1.9.2: + version "1.9.2" + resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f" + +gzip-size@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-3.0.0.tgz#546188e9bdc337f673772f81660464b389dce520" + dependencies: + duplexer "^0.1.1" + handle-thing@^1.2.4: version "1.2.5" resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-1.2.5.tgz#fd7aad726bf1a5fd16dfc29b2f7a6601d27139c4" @@ -3042,6 +3119,10 @@ jpeg-js@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.2.0.tgz#53e448ec9d263e683266467e9442d2c5a2ef5482" +jquery@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.2.1.tgz#5c4d9de652af6cd0a770154a631bba12b015c787" + js-base64@^2.1.9: version "2.1.9" resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.1.9.tgz#f0e80ae039a4bd654b5f281fc93f04a914a7fcce" @@ -3091,7 +3172,7 @@ json3@3.3.2, json3@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" -json5@^0.5.0: +json5@^0.5.0, json5@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" @@ -3150,6 +3231,12 @@ karma-junit-reporter@^1.2.0: path-is-absolute "^1.0.0" xmlbuilder "8.2.2" +karma-mocha@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/karma-mocha/-/karma-mocha-1.3.0.tgz#eeaac7ffc0e201eb63c467440d2b69c7cf3778bf" + dependencies: + minimist "1.2.0" + karma-phantomjs-launcher@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/karma-phantomjs-launcher/-/karma-phantomjs-launcher-1.0.4.tgz#d23ca34801bda9863ad318e3bb4bd4062b13acd2" @@ -3157,6 +3244,18 @@ karma-phantomjs-launcher@^1.0.4: lodash "^4.0.1" phantomjs-prebuilt "^2.1.7" +karma-sinon-chai@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/karma-sinon-chai/-/karma-sinon-chai-1.3.1.tgz#4633419494d9e2d848787dd76053031859f5b7f5" + dependencies: + lolex "^1.6.0" + +karma-sourcemap-loader@^0.3.7: + version "0.3.7" + resolved "https://registry.yarnpkg.com/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.7.tgz#91322c77f8f13d46fed062b042e1009d4c4505d8" + dependencies: + graceful-fs "^4.1.2" + karma-webpack@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/karma-webpack/-/karma-webpack-2.0.3.tgz#39cebf5ca2580139b27f9ae69b78816b9c82fae6" @@ -3292,6 +3391,29 @@ loader-utils@^1.0.1, loader-utils@^1.0.2: emojis-list "^2.0.0" json5 "^0.5.0" +lodash._baseassign@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" + dependencies: + lodash._basecopy "^3.0.0" + lodash.keys "^3.0.0" + +lodash._basecopy@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" + +lodash._basecreate@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz#1bc661614daa7fc311b7d03bf16806a0213cf821" + +lodash._getnative@^3.0.0: + version "3.9.1" + resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" + +lodash._isiterateecall@^3.0.0: + version "3.0.9" + resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" + lodash.assign@^4.0.3, lodash.assign@^4.0.6, lodash.assign@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" @@ -3304,6 +3426,30 @@ lodash.clonedeep@^4.3.2: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" +lodash.create@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/lodash.create/-/lodash.create-3.1.1.tgz#d7f2849f0dbda7e04682bb8cd72ab022461debe7" + dependencies: + lodash._baseassign "^3.0.0" + lodash._basecreate "^3.0.0" + lodash._isiterateecall "^3.0.0" + +lodash.isarguments@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" + +lodash.isarray@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" + +lodash.keys@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" + dependencies: + lodash._getnative "^3.0.0" + lodash.isarguments "^3.0.0" + lodash.isarray "^3.0.0" + lodash.memoize@^4.1.0: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" @@ -3343,6 +3489,10 @@ log4js@^0.6.31: readable-stream "~1.0.2" semver "~4.3.3" +lolex@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/lolex/-/lolex-1.6.0.tgz#3a9a0283452a47d7439e72731b9e07d7386e49f6" + longest@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" @@ -3509,7 +3659,7 @@ minimist@0.0.8, minimist@~0.0.1: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" -minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0: +minimist@1.2.0, minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" @@ -3532,6 +3682,22 @@ mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdi dependencies: minimist "0.0.8" +mocha@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-3.3.0.tgz#d29b7428d3f52c82e2e65df1ecb7064e1aabbfb5" + dependencies: + browser-stdout "1.3.0" + commander "2.9.0" + debug "2.6.0" + diff "3.2.0" + escape-string-regexp "1.0.5" + glob "7.1.1" + growl "1.9.2" + json3 "3.3.2" + lodash.create "3.1.1" + mkdirp "0.5.1" + supports-color "3.1.2" + ms@0.7.1: version "0.7.1" resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" @@ -3548,6 +3714,10 @@ nan@^2.3.0, nan@^2.3.2: version "2.5.1" resolved "https://registry.yarnpkg.com/nan/-/nan-2.5.1.tgz#d5b01691253326a97a2bbee9e61c55d8d60351e2" +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" + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -3807,6 +3977,10 @@ obuf@^1.0.0, obuf@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.1.tgz#104124b6c602c6796881a042541d36db43a5264e" +oclazyload@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/oclazyload/-/oclazyload-1.1.0.tgz#a9807322f190820a81c022f2ef1701d036d83e87" + on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" @@ -3827,7 +4001,7 @@ onetime@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" -opener@~1.4.0: +opener@^1.4.3, opener@~1.4.0: version "1.4.3" resolved "https://registry.yarnpkg.com/opener/-/opener-1.4.3.tgz#5c6da2c5d7e5831e8ffa3964950f8d6674ac90b8" @@ -4008,6 +4182,12 @@ path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" +path-to-regexp@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.7.0.tgz#59fde0f435badacba103a84e9d3bc64e96b9937d" + dependencies: + isarray "0.0.1" + path-type@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" @@ -4034,6 +4214,10 @@ performance-now@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" +phantomjs-polyfill-find@ptim/phantomjs-polyfill-find: + version "0.0.1" + resolved "https://codeload.github.com/ptim/phantomjs-polyfill-find/tar.gz/026b69dcabe743265f5214775e42f8d1e8aabedc" + phantomjs-prebuilt@^2.1.10, phantomjs-prebuilt@^2.1.7: version "2.1.14" resolved "https://registry.yarnpkg.com/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.14.tgz#d53d311fcfb7d1d08ddb24014558f1188c516da0" @@ -4821,6 +5005,10 @@ safe-buffer@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7" +samsam@1.x, samsam@^1.1.3: + version "1.2.1" + resolved "https://registry.yarnpkg.com/samsam/-/samsam-1.2.1.tgz#edd39093a3184370cb859243b2bdf255e7d8ea67" + sass-graph@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.1.2.tgz#965104be23e8103cb7e5f710df65935b317da57b" @@ -4953,6 +5141,23 @@ simple-is@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/simple-is/-/simple-is-0.2.0.tgz#2abb75aade39deb5cc815ce10e6191164850baf0" +sinon-chai@^2.10.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/sinon-chai/-/sinon-chai-2.10.0.tgz#6ab3008bb8cae9929e744d766574b4cf35f34b5b" + +sinon@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/sinon/-/sinon-2.2.0.tgz#3b1b42ff5defcbf51a52a62aca6d61171b9fd262" + dependencies: + diff "^3.1.0" + formatio "1.2.0" + lolex "^1.6.0" + native-promise-only "^0.8.1" + path-to-regexp "^1.7.0" + samsam "^1.1.3" + text-encoding "0.6.4" + type-detect "^4.0.0" + slash@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" @@ -5232,11 +5437,17 @@ style-loader@^0.16.1: dependencies: loader-utils "^1.0.2" +supports-color@3.1.2, supports-color@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5" + dependencies: + has-flag "^1.0.0" + supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" -supports-color@^3.1.0, supports-color@^3.1.1, supports-color@^3.2.3: +supports-color@^3.1.0, supports-color@^3.2.3: version "3.2.3" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" dependencies: @@ -5302,6 +5513,10 @@ tar@^2.0.0, tar@^2.2.1: fstream "^1.0.2" inherits "2" +text-encoding@0.6.4: + version "0.6.4" + resolved "https://registry.yarnpkg.com/text-encoding/-/text-encoding-0.6.4.tgz#e399a982257a276dae428bb92845cb71bdc26d19" + text-table@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" @@ -5413,6 +5628,18 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" +type-detect@0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-0.1.1.tgz#0ba5ec2a885640e470ea4e8505971900dac58822" + +type-detect@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-1.0.0.tgz#762217cc06db258ec48908a1298e8b95121e8ea2" + +type-detect@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.3.tgz#0e3f2670b44099b0b46c284d136a7ef49c74c2ea" + type-is@~1.6.14: version "1.6.14" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.14.tgz#e219639c17ded1ca0789092dd54a03826b817cb2" @@ -5621,6 +5848,21 @@ wbuf@^1.1.0, wbuf@^1.4.0: dependencies: minimalistic-assert "^1.0.0" +webpack-bundle-analyzer@^2.4.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-2.6.0.tgz#9b8052d6aa26004f49ab76e88c45445ecd03f15a" + dependencies: + acorn "^5.0.3" + chalk "^1.1.3" + commander "^2.9.0" + ejs "^2.5.6" + express "^4.15.2" + filesize "^3.5.6" + gzip-size "^3.0.0" + lodash "^4.17.4" + mkdirp "^0.5.1" + opener "^1.4.3" + webpack-core@^0.6.5, webpack-core@~0.6.9: version "0.6.9" resolved "https://registry.yarnpkg.com/webpack-core/-/webpack-core-0.6.9.tgz#fc571588c8558da77be9efb6debdc5a3b172bdc2" @@ -5705,11 +5947,11 @@ webpack@^1.13.0: watchpack "^0.2.1" webpack-core "~0.6.9" -webpack@^2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-2.3.2.tgz#7d521e6f0777a3a58985c69425263fdfe977b458" +webpack@^2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-2.5.1.tgz#61742f0cf8af555b87460a9cd8bba2f1e3ee2fce" dependencies: - acorn "^4.0.4" + acorn "^5.0.0" acorn-dynamic-import "^2.0.0" ajv "^4.7.0" ajv-keywords "^1.1.1" @@ -5717,6 +5959,7 @@ webpack@^2.3.2: enhanced-resolve "^3.0.0" interpret "^1.0.0" json-loader "^0.5.4" + json5 "^0.5.1" loader-runner "^2.3.0" loader-utils "^0.2.16" memory-fs "~0.4.1"