From c6265e8da548483464ff1eaac7b910de90e57d38 Mon Sep 17 00:00:00 2001 From: William Durand Date: Wed, 1 Aug 2018 12:14:36 +0200 Subject: [PATCH] Add bundlesize --- .travis.yml | 6 +- README.md | 58 +++++----- bin/build-checks.js | 9 +- bin/build-locales | 111 ++++++++++--------- package.json | 19 +++- yarn.lock | 252 ++++++++++++++++++++++++++++++++++++++++++-- 6 files changed, 353 insertions(+), 102 deletions(-) diff --git a/.travis.yml b/.travis.yml index b1cd0bd419f..a43e648ea15 100644 --- a/.travis.yml +++ b/.travis.yml @@ -25,16 +25,16 @@ cache: # Allow to display job names on Travis-CI, see: # https://github.com/travis-ci/travis-ci/issues/5898#issuecomment-362490313 -script: yarn $COMMAND +script: FORCE_COLOR=0 yarn $COMMAND jobs: include: # Test the build process. - stage: <<: *node-prod - env: ADDONS_FRONTEND_BUILD_ALL=1 COMMAND=build + env: COMMAND=build-ci - stage: <<: *node-next - env: ADDONS_FRONTEND_BUILD_ALL=1 COMMAND=build + env: COMMAND=build-all # Run the unit/integration tests. - stage: <<: *node-prod diff --git a/README.md b/README.md index b323f78c7d4..887d82a34a3 100644 --- a/README.md +++ b/README.md @@ -33,32 +33,37 @@ The easiest way to manage multiple node versions in development is to use [nvm]( Here are some commands you can run: -| Command | Description | -| --------------------------- | ---------------------------------------------------------------------------------------------------------- | -| yarn amo | Start the dev server/proxy (for amo) using data from Docker | -| yarn amo:dev | Start the dev server/proxy (for amo) using data from the dev server (https://addons-dev.allizom.org/) | -| yarn amo:no-proxy | Start the dev server without a proxy (for amo) using data from Docker | -| yarn amo:stage | Start the dev server/proxy (for amo) using data from the staging server (https://addons.allizom.org/) | -| yarn disco | Start the dev server (for Discovery Pane) using data from the dev server (https://addons-dev.allizom.org/) | -| yarn flow | Run Flow. By default this checks for errors and exits | -| yarn flow:check | Explicitly check for Flow errors and exit | -| yarn flow:dev | Continuously check for Flow errors | -| yarn eslint | Lint the JS | -| yarn snyk | Run [snyk](#snyk) (without a command) | -| yarn snyk-ci | Run [snyk](#snyk) `test` and `monitor` | -| yarn snyk-wizard | Run [snyk](#snyk) `wizard` to fix an issue reported by snyk | -| yarn start-func-test-server | Start a Docker container for functional tests | -| yarn stylelint | Lint the SCSS | -| yarn lint | Run all the JS + SCSS linters | -| yarn prettier | Run [Prettier][] to automatically format the entire codebase | -| yarn prettier-dev | Run [Pretty-Quick][] to automatically compare and format modified source files against the master branch | -| yarn prettier-ci | Run [Prettier][] and fail if some code has been changed without being formatted | -| yarn version-check | Check you have the required dependencies | -| yarn test | Run all tests (Enters [jest][] in `--watch` mode) | -| yarn test-coverage | Run all tests and generate code coverage report (Enters [jest][] in `--watch` mode) | -| yarn test-coverage-once | Run all tests, generate code coverage report, then exit | -| yarn test-once | Run all tests, run all JS + SCSS linters, then exit | -| yarn test-ci | Run all continuous integration checks. This is only meant to run on TravisCI. | +| Command | Description | +| ----------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | +| yarn amo | Start the dev server/proxy (for amo) using data from Docker | +| yarn amo:dev | Start the dev server/proxy (for amo) using data from the dev server (https://addons-dev.allizom.org/) | +| yarn amo:no-proxy | Start the dev server without a proxy (for amo) using data from Docker | +| yarn amo:stage | Start the dev server/proxy (for amo) using data from the staging server (https://addons.allizom.org/) | +| yarn build | Build an app specified with the `NODE_APP_INSTANCE` environment variable. | +| yarn build-all | Build all the applications. | +| yarn build-ci | Run the `build-all` and `bundlesize` npm scripts. | +| yarn bundlesize | Run [bundlesize][] to check the generated AMO bundle sizes. | +| [Building AMO is required first](#building-and-running-services). | +| yarn disco | Start the dev server (for Discovery Pane) using data from the dev server (https://addons-dev.allizom.org/) | +| yarn flow | Run Flow. By default this checks for errors and exits | +| yarn flow:check | Explicitly check for Flow errors and exit | +| yarn flow:dev | Continuously check for Flow errors | +| yarn eslint | Lint the JS | +| yarn snyk | Run [snyk](#snyk) (without a command) | +| yarn snyk-ci | Run [snyk](#snyk) `test` and `monitor` | +| yarn snyk-wizard | Run [snyk](#snyk) `wizard` to fix an issue reported by snyk | +| yarn start-func-test-server | Start a Docker container for functional tests | +| yarn stylelint | Lint the SCSS | +| yarn lint | Run all the JS + SCSS linters | +| yarn prettier | Run [Prettier][] to automatically format the entire codebase | +| yarn prettier-dev | Run [Pretty-Quick][] to automatically compare and format modified source files against the master branch | +| yarn prettier-ci | Run [Prettier][] and fail if some code has been changed without being formatted | +| yarn version-check | Check you have the required dependencies | +| yarn test | Run all tests (Enters [jest][] in `--watch` mode) | +| yarn test-coverage | Run all tests and generate code coverage report (Enters [jest][] in `--watch` mode) | +| yarn test-coverage-once | Run all tests, generate code coverage report, then exit | +| yarn test-once | Run all tests, run all JS + SCSS linters, then exit | +| yarn test-ci | Run all continuous integration checks. This is only meant to run on TravisCI. | ### Running tests @@ -390,6 +395,7 @@ At a later date if we need to move things out into their own project we still ca - Universal rendering via node - Unit tests with high coverage (aiming for 100%) +[bundlesize]: https://github.com/siddharthkp/bundlesize [jest]: https://facebook.github.io/jest/docs/en/getting-started.html [prettier]: https://prettier.io/ [pretty-quick]: https://www.npmjs.com/package/pretty-quick diff --git a/bin/build-checks.js b/bin/build-checks.js index 8a26b4dcfce..08829bbc032 100755 --- a/bin/build-checks.js +++ b/bin/build-checks.js @@ -7,9 +7,10 @@ const config = require('config'); const appName = config.get('appName'); -// Bail if appName isn't set unless explicitly enabled. -if (!appName && process.env.ADDONS_FRONTEND_BUILD_ALL !== '1') { - console.log( - chalk.red('Please specify the appName with NODE_APP_INSTANCE')); +// Bail if appName isn't set. +if (!appName) { + console.log(chalk.red('Please specify the appName with NODE_APP_INSTANCE')); process.exit(1); } + +console.log(chalk.green(`\n---> BUILDING: ${appName}\n`)); diff --git a/bin/build-locales b/bin/build-locales index b7d83d5f275..c3d97a1c310 100755 --- a/bin/build-locales +++ b/bin/build-locales @@ -16,73 +16,68 @@ const chalk = require('chalk'); const toSource = require('tosource'); const oneLine = require('common-tags').oneLine; -const app = config.get('appName'); -const buildAll = process.env.ADDONS_FRONTEND_BUILD_ALL === '1'; +const appName = config.get('appName'); -if (!app && !buildAll) { - console.log( - chalk.red('Please specify the appName with NODE_APP_INSTANCE')); +if (!appName) { + console.log(chalk.red('Please specify the appName with NODE_APP_INSTANCE')); process.exit(1); } -const appsBuildList = buildAll ? config.get('validAppNames') : [app]; -for (const appName of appsBuildList) { - const localeDir = path.join(__dirname, '../locale'); - const poFiles = glob.sync(`${localeDir}/**/${appName}.po`); - const dest = path.join(__dirname, '../src/locale/'); +const localeDir = path.join(__dirname, '../locale'); +const poFiles = glob.sync(`${localeDir}/**/${appName}.po`); +const dest = path.join(__dirname, '../src/locale/'); - poFiles.forEach((pofile) => { - const dir = path.dirname(pofile); - const subdir = path.dirname(dir); - const locale = path.basename(subdir); - const stem = path.basename(pofile, '.po'); - const localeOutputFilePath = path.join(dest, locale, `${stem}.js`); - shelljs.mkdir('-p', path.join(dest, locale)); +poFiles.forEach((pofile) => { + const dir = path.dirname(pofile); + const subdir = path.dirname(dir); + const locale = path.basename(subdir); + const stem = path.basename(pofile, '.po'); + const localeOutputFilePath = path.join(dest, locale, `${stem}.js`); + shelljs.mkdir('-p', path.join(dest, locale)); - const json = po2json.parseFileSync(pofile, { - stringify: true, - pretty: true, - format: 'jed1.x', - fuzzy: config.get('po2jsonFuzzyOutput'), - }); - const localeObject = JSON.parse(json); + const json = po2json.parseFileSync(pofile, { + stringify: true, + pretty: true, + format: 'jed1.x', + fuzzy: config.get('po2jsonFuzzyOutput'), + }); + const localeObject = JSON.parse(json); - // Add the moment locale JS into our locale file, if one is available and - // we're building for AMO (which is the only app that uses moment right - // now). - if (appName === 'amo') { - var defineLocale = null; - try { - const momentLocale = locale.replace('_', '-').toLowerCase(); - const localeModulePath = `moment/locale/${momentLocale}`; - // Check for the locale first; if it doesn't exist we don't have - // a moment locale that matches. - fs.accessSync(`./node_modules/${localeModulePath}.js`); + // Add the moment locale JS into our locale file, if one is available and + // we're building for AMO (which is the only app that uses moment right + // now). + if (appName === 'amo') { + var defineLocale = null; + try { + const momentLocale = locale.replace('_', '-').toLowerCase(); + const localeModulePath = `moment/locale/${momentLocale}`; + // Check for the locale first; if it doesn't exist we don't have + // a moment locale that matches. + fs.accessSync(`./node_modules/${localeModulePath}.js`); - // We're using `new Function()` here to create a function out of the - // raw code; this function won't be executed but will be written out by - // `toSource()` so that it can be used later (at runtime, by moment). - defineLocale = new Function(` - // By requiring this module, the new locale is defined and - // registered internally for moment.js - require('${localeModulePath}');`); - } catch (e) { - // We ignore missing locale errors for en_US as its moment's default - // locale so we don't need to provide a translation. - if (locale !== 'en_US') { - console.info(oneLine`No moment i18n available for ${locale}; - consider adding one or creating a mapping.`); - } + // We're using `new Function()` here to create a function out of the + // raw code; this function won't be executed but will be written out by + // `toSource()` so that it can be used later (at runtime, by moment). + defineLocale = new Function(` + // By requiring this module, the new locale is defined and + // registered internally for moment.js + require('${localeModulePath}');`); + } catch (e) { + // We ignore missing locale errors for en_US as its moment's default + // locale so we don't need to provide a translation. + if (locale !== 'en_US') { + console.info(oneLine`No moment i18n available for ${locale}; + consider adding one or creating a mapping.`); } - - localeObject._momentDefineLocale = defineLocale; } - // This is used to force cache-busting of the JS via changing all locale JS. - // DO NOT REMOVE! See https://github.com/mozilla/addons-frontend/issues/4927 - localeObject._cacheBust = '2018.08.02'; + localeObject._momentDefineLocale = defineLocale; + } - fs.writeFileSync( - localeOutputFilePath, `module.exports = ${toSource(localeObject)}`); - }); -} + // This is used to force cache-busting of the JS via changing all locale JS. + // DO NOT REMOVE! See https://github.com/mozilla/addons-frontend/issues/4927 + localeObject._cacheBust = '2018.08.02'; + + fs.writeFileSync( + localeOutputFilePath, `module.exports = ${toSource(localeObject)}`); +}); diff --git a/package.json b/package.json index b9c16b5b574..f13b1693e5e 100644 --- a/package.json +++ b/package.json @@ -8,8 +8,12 @@ "node": ">=6 <=8" }, "scripts": { - "build": "bin/build-checks.js && better-npm-run build", + "build": "npm run clean && better-npm-run build", + "build-all": "npm run clean && NODE_APP_INSTANCE=amo better-npm-run build && NODE_APP_INSTANCE=disco better-npm-run build", + "build-check": "bin/build-checks.js", + "build-ci": "npm run build-all && npm run bundlesize", "build-locales": "bin/build-locales", + "bundlesize": "bundlesize", "extract-locales": "better-npm-run extract-locales", "clean": "rimraf './dist/*!(.gitkeep)' './webpack-assets.json' './src/locale/**(!.gitkeep)'", "amo": "better-npm-run amo", @@ -41,7 +45,7 @@ }, "betterScripts": { "build": { - "command": "npm run clean && npm run version-check && npm run build-locales && webpack --bail --verbose --display-error-details --progress --colors --config webpack.prod.config.babel.js", + "command": "npm run build-check && npm run version-check && npm run build-locales && webpack --bail --verbose --display-error-details --progress --colors --config webpack.prod.config.babel.js", "env": { "NODE_ICU_DATA": "./node_modules/full-icu", "NODE_PATH": "./:./src" @@ -237,6 +241,7 @@ "babel-preset-stage-2": "^6.24.1", "babel-register": "^6.24.1", "bundle-loader": "^0.5.5", + "bundlesize": "^0.17.0", "chalk": "^2.0.1", "cheerio": "^1.0.0-rc.2", "chokidar-cli": "^1.2.0", @@ -297,5 +302,15 @@ "webpack-hot-middleware": "^2.18.0", "webpack-subresource-integrity": "^1.0.0-rc.1" }, + "bundlesize": [ + { + "path": "./dist/@(amo|disco)-!(i18n-)*.js", + "maxSize": "400 kB" + }, + { + "path": "./dist/@(amo|disco)-i18n-*.js", + "maxSize": "25 kB" + } + ], "snyk": true } diff --git a/yarn.lock b/yarn.lock index d7375555175..ff47b57d245 100644 --- a/yarn.lock +++ b/yarn.lock @@ -263,7 +263,7 @@ ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" -ansi-styles@^3.2.0, ansi-styles@^3.2.1: +ansi-styles@^3.1.0, ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" dependencies: @@ -525,6 +525,19 @@ aws4@^1.2.1, aws4@^1.6.0: version "1.7.0" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.7.0.tgz#d4d0e9b9dbfca77bf08eeb0a8a471550fe39e289" +axios@0.15.3: + version "0.15.3" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.15.3.tgz#2c9d638b2e191a08ea1d6cc988eadd6ba5bdc053" + dependencies: + follow-redirects "1.0.0" + +axios@^0.17.0: + version "0.17.1" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.17.1.tgz#2d8e3e5d0bdbd7327f91bc814f5c57660f81824d" + dependencies: + follow-redirects "^1.2.5" + is-buffer "^1.1.5" + axobject-query@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-0.1.0.tgz#62f59dbc59c9f9242759ca349960e7a2fe3c36c0" @@ -1294,6 +1307,13 @@ binary-extensions@^1.0.0: version "1.11.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205" +bl@^1.0.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.2.tgz#a160911717103c07410cef63ef51b397c025af9c" + dependencies: + readable-stream "^2.3.5" + safe-buffer "^5.1.1" + block-stream@*: version "0.0.9" resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" @@ -1401,6 +1421,13 @@ brorand@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" +brotli-size@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/brotli-size/-/brotli-size-0.0.1.tgz#8c1aeea01cd22f359b048951185bd539ff0c829f" + dependencies: + duplexer "^0.1.1" + iltorb "^1.0.9" + browser-process-hrtime@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.2.tgz#425d68a58d3447f02a04aa894187fce8af8b7b8e" @@ -1491,6 +1518,21 @@ bser@^2.0.0: dependencies: node-int64 "^0.4.0" +buffer-alloc-unsafe@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" + +buffer-alloc@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" + dependencies: + buffer-alloc-unsafe "^1.1.0" + buffer-fill "^1.0.0" + +buffer-fill@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" + buffer-from@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.0.0.tgz#4cb8832d23612589b0406e9e2956c17f06fdf531" @@ -1521,6 +1563,21 @@ bundle-loader@^0.5.5: dependencies: loader-utils "^1.1.0" +bundlesize@^0.17.0: + version "0.17.0" + resolved "https://registry.yarnpkg.com/bundlesize/-/bundlesize-0.17.0.tgz#212ae5731ab0554d2acd509d23e1de18640b2008" + dependencies: + axios "^0.17.0" + brotli-size "0.0.1" + bytes "^3.0.0" + ci-env "^1.4.0" + commander "^2.11.0" + github-build "^1.2.0" + glob "^7.1.2" + gzip-size "^4.0.0" + prettycli "^1.4.3" + read-pkg-up "^3.0.0" + bunyan@1.8.12: version "1.8.12" resolved "https://registry.yarnpkg.com/bunyan/-/bunyan-1.8.12.tgz#f150f0f6748abdd72aeae84f04403be2ef113797" @@ -1530,7 +1587,7 @@ bunyan@1.8.12: mv "~2" safe-json-stringify "~1" -bytes@3.0.0: +bytes@3.0.0, bytes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" @@ -1673,6 +1730,14 @@ chalk@0.5.1: strip-ansi "^0.3.0" supports-color "^0.2.0" +chalk@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.1.0.tgz#ac5becf14fa21b99c6c92ca7a7d7cfd5b17e743e" + dependencies: + ansi-styles "^3.1.0" + escape-string-regexp "^1.0.5" + supports-color "^4.0.0" + chalk@^1.0.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" @@ -1809,6 +1874,10 @@ chownr@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181" +ci-env@^1.4.0: + version "1.6.1" + resolved "https://registry.yarnpkg.com/ci-env/-/ci-env-1.6.1.tgz#3e3ef4fc528a2825397f912cfa30cde17ec364cc" + ci-info@^1.0.0: version "1.1.3" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.1.3.tgz#710193264bb05c77b8c90d02f5aaf22216a667b2" @@ -2486,6 +2555,12 @@ decode-uri-component@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" +decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + dependencies: + mimic-response "^1.0.0" + deep-diff@^0.3.5: version "0.3.8" resolved "https://registry.yarnpkg.com/deep-diff/-/deep-diff-0.3.8.tgz#c01de63efb0eec9798801d40c7e0dae25b582c84" @@ -2603,7 +2678,11 @@ detect-indent@^4.0.0: dependencies: repeating "^2.0.0" -detect-libc@^1.0.2: +detect-libc@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-0.2.0.tgz#47fdf567348a17ec25fcbf0b9e446348a76f9fb5" + +detect-libc@^1.0.2, detect-libc@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" @@ -2744,6 +2823,10 @@ duplexer2@^0.1.4: dependencies: readable-stream "^2.0.2" +duplexer@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" + duplexify@^3.2.0: version "3.5.4" resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.5.4.tgz#4bb46c1796eabebeec4ca9a2e66b808cb7a3d8b4" @@ -3302,6 +3385,10 @@ expand-range@^1.8.1: dependencies: fill-range "^2.1.0" +expand-template@^1.0.2: + version "1.1.1" + resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-1.1.1.tgz#981f188c0c3a87d2e28f559bc541426ff94f21dd" + expect-ct@0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/expect-ct/-/expect-ct-0.1.1.tgz#de84476a2dbcb85000d5903737e9bc8a5ba7b897" @@ -3579,6 +3666,18 @@ flush-write-stream@^1.0.0: inherits "^2.0.1" readable-stream "^2.0.4" +follow-redirects@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.0.0.tgz#8e34298cbd2e176f254effec75a1c78cc849fd37" + dependencies: + debug "^2.2.0" + +follow-redirects@^1.2.5: + version "1.5.1" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.1.tgz#67a8f14f5a1f67f962c2c46469c79eaec0a90291" + dependencies: + debug "^3.1.0" + for-in@^0.1.3: version "0.1.8" resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.8.tgz#d8773908e31256109952b1fdb9b3fa867d2775e1" @@ -3652,6 +3751,10 @@ from2@^2.1.0: inherits "^2.0.1" readable-stream "^2.0.0" +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + fs-extra@^0.30.0: version "0.30.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" @@ -3800,6 +3903,16 @@ gettext-parser@^1.1.2: encoding "^0.1.12" safe-buffer "^5.1.1" +github-build@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/github-build/-/github-build-1.2.0.tgz#b0bdb705ae4088218577e863c1a301030211051f" + dependencies: + axios "0.15.3" + +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" @@ -3950,6 +4063,13 @@ growly@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" +gzip-size@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-4.1.0.tgz#8ae096257eabe7d69c45be2b67c448124ffb517c" + dependencies: + duplexer "^0.1.1" + pify "^3.0.0" + handlebars@^4.0.3: version "4.0.11" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.11.tgz#630a35dfe0294bc281edae6ffc5d329fc7982dcc" @@ -4328,6 +4448,15 @@ ignore@^3.3.7: version "3.3.10" resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" +iltorb@^1.0.9: + version "1.3.10" + resolved "https://registry.yarnpkg.com/iltorb/-/iltorb-1.3.10.tgz#a0d9e4e7d52bf510741442236cbe0cc4230fc9f8" + dependencies: + detect-libc "^0.2.0" + nan "^2.6.2" + node-gyp "^3.6.2" + prebuild-install "^2.3.0" + immediate@~3.0.5: version "3.0.6" resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" @@ -5962,6 +6091,10 @@ mimic-fn@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" +mimic-response@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + min-document@^2.19.0: version "2.19.0" resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" @@ -6140,7 +6273,7 @@ mv@~2: ncp "~2.0.0" rimraf "~2.4.0" -nan@^2.10.0, nan@^2.3.0, nan@^2.3.3, nan@^2.9.2: +nan@^2.10.0, nan@^2.3.0, nan@^2.3.3, nan@^2.6.2, nan@^2.9.2: version "2.10.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f" @@ -6234,6 +6367,12 @@ nocache@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/nocache/-/nocache-2.0.0.tgz#202b48021a0c4cbde2df80de15a17443c8b43980" +node-abi@^2.2.0: + version "2.4.3" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.4.3.tgz#43666b7b17e57863e572409edbb82115ac7af28b" + dependencies: + semver "^5.4.1" + node-fetch@^1.0.1: version "1.7.3" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" @@ -6259,6 +6398,23 @@ node-gyp@^3.3.1: tar "^2.0.0" which "1" +node-gyp@^3.6.2: + version "3.7.0" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.7.0.tgz#789478e8f6c45e277aa014f3e28f958f286f9203" + dependencies: + fstream "^1.0.0" + glob "^7.0.3" + graceful-fs "^4.1.2" + mkdirp "^0.5.0" + nopt "2 || 3" + npmlog "0 || 1 || 2 || 3 || 4" + osenv "0" + request ">=2.9.0 <2.82.0" + 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" @@ -6385,6 +6541,10 @@ 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" @@ -6461,7 +6621,7 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" -"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.2: +"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, 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: @@ -6629,7 +6789,7 @@ os-browserify@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" -os-homedir@^1.0.0: +os-homedir@^1.0.0, os-homedir@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" @@ -7286,6 +7446,26 @@ potools@^0.2.0: promisify-node "^0.4.0" yargs "10.1.1" +prebuild-install@^2.3.0: + version "2.5.3" + resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-2.5.3.tgz#9f65f242782d370296353710e9bc843490c19f69" + dependencies: + detect-libc "^1.0.3" + expand-template "^1.0.2" + github-from-package "0.0.0" + minimist "^1.2.0" + mkdirp "^0.5.1" + node-abi "^2.2.0" + noop-logger "^0.1.1" + npmlog "^4.0.1" + os-homedir "^1.0.1" + pump "^2.0.1" + rc "^1.1.6" + simple-get "^2.7.0" + tar-fs "^1.13.0" + tunnel-agent "^0.6.0" + which-pm-runs "^1.0.0" + prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" @@ -7319,6 +7499,12 @@ pretty-quick@1.6.0: ignore "^3.3.7" mri "^1.1.0" +prettycli@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/prettycli/-/prettycli-1.4.3.tgz#b28ec2aad9de07ae1fd75ef294fb54cbdee07ed5" + dependencies: + chalk "2.1.0" + private@^0.1.6, private@^0.1.7: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" @@ -7404,6 +7590,13 @@ public-encrypt@^4.0.0: parse-asn1 "^5.0.0" randombytes "^2.0.1" +pump@^1.0.0: + 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" + pump@^2.0.0, pump@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" @@ -7841,7 +8034,7 @@ read-pkg@^3.0.0: normalize-package-data "^2.3.2" path-type "^3.0.0" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.3, readable-stream@^2.3.5: version "2.3.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" dependencies: @@ -8127,7 +8320,7 @@ request@2, request@^2.83.0: tunnel-agent "^0.6.0" uuid "^3.1.0" -request@2.81.0: +request@2.81.0, "request@>=2.9.0 <2.82.0": version "2.81.0" resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" dependencies: @@ -8622,6 +8815,18 @@ signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" +simple-concat@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.0.tgz#7344cbb8b6e26fb27d66b2fc86f9f6d5997521c6" + +simple-get@^2.7.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-2.8.1.tgz#0e22e91d4575d87620620bc91308d57a77f44b5d" + dependencies: + decompress-response "^3.3.0" + once "^1.3.1" + simple-concat "^1.0.0" + sinon@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/sinon/-/sinon-6.0.0.tgz#f26627e4830dc34279661474da2c9e784f166215" @@ -9257,7 +9462,7 @@ supports-color@^3.1.2, supports-color@^3.2.3: dependencies: has-flag "^1.0.0" -supports-color@^4.2.1: +supports-color@^4.0.0, supports-color@^4.2.1: version "4.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" dependencies: @@ -9334,6 +9539,15 @@ tapable@^0.2.7: version "0.2.8" resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.8.tgz#99372a5c999bf2df160afc0d74bed4f47948cd22" +tar-fs@^1.13.0: + version "1.16.3" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-1.16.3.tgz#966a628841da2c4010406a82167cbd5e0c72d509" + 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.1" resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.1.tgz#e1dbc03a9b9d3ba07e896ad027317eb679a10a1f" @@ -9347,6 +9561,18 @@ tar-pack@^3.4.0: tar "^2.2.1" uid-number "^0.0.6" +tar-stream@^1.1.2: + version "1.6.1" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.1.tgz#f84ef1696269d6223ca48f6e1eeede3f7e81f395" + dependencies: + bl "^1.0.0" + buffer-alloc "^1.1.0" + end-of-stream "^1.0.0" + fs-constants "^1.0.0" + readable-stream "^2.3.0" + to-buffer "^1.1.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" @@ -9456,6 +9682,10 @@ to-arraybuffer@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" +to-buffer@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80" + to-fast-properties@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" @@ -10101,6 +10331,10 @@ which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" +which-pm-runs@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb" + which@1, which@^1.2.12, which@^1.2.9, which@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a"