diff --git a/.eslintrc b/.eslintrc index 1230b3c3..50bf9694 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,5 +5,8 @@ }, "extends": [ "eslint-config-babel" - ] + ], + "rules": { + "arrow-parens": "off" + } } diff --git a/package.json b/package.json index af561645..04695161 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,10 @@ "eslint": "^3.8.1", "eslint-config-babel": "^6.0.0", "eslint-plugin-flowtype": "^2.25.0", + "husky": "^0.13.2", + "lint-staged": "^3.3.1", "nyc": "^10.0.0", + "prettier": "^1.2.2", "react": "^15.1.0", "react-intl": "^2.1.2", "react-intl-webpack-plugin": "^0.0.3", @@ -41,9 +44,11 @@ "scripts": { "clean": "rimraf lib/", "build": "babel src/ --out-dir lib/", + "format": "prettier --write --trailing-comma all \"src/**/*.js\" \"test/*.test.js\" \"test/helpers/*.js\" && prettier --write --trailing-comma es5 \"scripts/*.js\"", "lint": "eslint src test", - "preversion": "yarn run test", + "precommit": "lint-staged", "prepublish": "yarn run clean && yarn run build", + "preversion": "yarn run test", "test": "yarn run lint && cross-env BABEL_ENV=test yarn run build && yarn run test-only", "test-only": "nyc ava" }, @@ -90,5 +95,27 @@ "src/**/*.js" ], "babel": "inherit" + }, + "lint-staged": { + "scripts/*.js": [ + "prettier --trailing-comma es5 --write", + "git add" + ], + "src/**/*.js": [ + "prettier --trailing-comma all --write", + "git add" + ], + "test/**/*.test.js": [ + "prettier --trailing-comma all --write", + "git add" + ], + "test/helpers/*.js": [ + "prettier --trailing-comma all --write ", + "git add" + ], + "package.json": [ + "node ./scripts/yarn-install.js", + "git add yarn.lock" + ] } } diff --git a/scripts/yarn-install.js b/scripts/yarn-install.js new file mode 100644 index 00000000..079cfc83 --- /dev/null +++ b/scripts/yarn-install.js @@ -0,0 +1,13 @@ +"use strict"; + +const exec = require("child_process").exec; + +const runIfYarn = fn => { + exec("yarn -V", error => { + if (error === null) fn(); + }); +}; +runIfYarn(() => { + console.log("`package.json` was changed. Running yarn...🐈"); + exec("yarn"); +}); diff --git a/src/fs-cache.js b/src/fs-cache.js index 05b77130..07c66a1a 100644 --- a/src/fs-cache.js +++ b/src/fs-cache.js @@ -15,7 +15,7 @@ const os = require("os"); const path = require("path"); const zlib = require("zlib"); -let defaultCacheDirectory = null; // Lazily instantiated when needed +let defaultCacheDirectory = null; // Lazily instantiated when needed /** * Read the contents from the compressed file. @@ -26,12 +26,12 @@ let defaultCacheDirectory = null; // Lazily instantiated when needed */ const read = function(filename, callback) { return fs.readFile(filename, function(err, data) { - if (err) { return callback(err); } + if (err) return callback(err); return zlib.gunzip(data, function(err, content) { - let result = {}; + if (err) return callback(err); - if (err) { return callback(err); } + let result = {}; try { result = JSON.parse(content); @@ -44,7 +44,6 @@ const read = function(filename, callback) { }); }; - /** * Write contents into a compressed file. * @@ -57,13 +56,12 @@ const write = function(filename, result, callback) { const content = JSON.stringify(result); return zlib.gzip(content, function(err, data) { - if (err) { return callback(err); } + if (err) return callback(err); return fs.writeFile(filename, data, callback); }); }; - /** * Build the filename for the cached file * @@ -97,12 +95,16 @@ const handleCache = function(directory, params, callback) { const options = params.options || {}; const transform = params.transform; const identifier = params.identifier; - const shouldFallback = typeof params.directory !== "string" && directory !== os.tmpdir(); + const shouldFallback = + typeof params.directory !== "string" && directory !== os.tmpdir(); // Make sure the directory exists. mkdirp(directory, function(err) { // Fallback to tmpdir if node_modules folder not writable - if (err) return shouldFallback ? handleCache(os.tmpdir(), params, callback) : callback(err); + if (err) + return shouldFallback + ? handleCache(os.tmpdir(), params, callback) + : callback(err); const file = path.join(directory, filename(source, identifier, options)); @@ -122,7 +124,10 @@ const handleCache = function(directory, params, callback) { return write(file, result, function(err) { // Fallback to tmpdir if node_modules folder not writable - if (err) return shouldFallback ? handleCache(os.tmpdir(), params, callback) : callback(err); + if (err) + return shouldFallback + ? handleCache(os.tmpdir(), params, callback) + : callback(err); callback(null, result); }); @@ -171,7 +176,8 @@ module.exports = function(params, callback) { directory = params.directory; } else { if (defaultCacheDirectory === null) { - defaultCacheDirectory = findCacheDir({ name: "babel-loader" }) || os.tmpdir(); + defaultCacheDirectory = + findCacheDir({ name: "babel-loader" }) || os.tmpdir(); } directory = defaultCacheDirectory; } diff --git a/src/index.js b/src/index.js index 6d22a342..060224eb 100644 --- a/src/index.js +++ b/src/index.js @@ -59,7 +59,12 @@ const transpile = function(source, options) { hideStack = true; } throw new BabelLoaderError( - name, message, error.codeFrame, hideStack, error); + name, + message, + error.codeFrame, + hideStack, + error, + ); } else { throw error; } @@ -97,7 +102,9 @@ function passMetadata(s, context, metadata) { module.exports = function(source, inputSourceMap) { // Handle filenames (#106) - const webpackRemainingChain = loaderUtils.getRemainingRequest(this).split("!"); + const webpackRemainingChain = loaderUtils + .getRemainingRequest(this) + .split("!"); const filename = webpackRemainingChain[webpackRemainingChain.length - 1]; // Handle options @@ -110,10 +117,13 @@ module.exports = function(source, inputSourceMap) { cacheIdentifier: JSON.stringify({ "babel-loader": pkg.version, "babel-core": babel.version, - babelrc: exists(loaderOptions.babelrc) ? - read(loaderOptions.babelrc) : - resolveRc(path.dirname(filename)), - env: loaderOptions.forceEnv || process.env.BABEL_ENV || process.env.NODE_ENV || "development", + babelrc: exists(loaderOptions.babelrc) + ? read(loaderOptions.babelrc) + : resolveRc(path.dirname(filename)), + env: loaderOptions.forceEnv || + process.env.BABEL_ENV || + process.env.NODE_ENV || + "development", }), }; @@ -124,10 +134,7 @@ module.exports = function(source, inputSourceMap) { } if (options.sourceFileName === undefined) { - options.sourceFileName = relative( - options.sourceRoot, - options.filename - ); + options.sourceFileName = relative(options.sourceRoot, options.filename); } const cacheDirectory = options.cacheDirectory; @@ -140,24 +147,27 @@ module.exports = function(source, inputSourceMap) { if (cacheDirectory) { const callback = this.async(); - return cache({ - directory: cacheDirectory, - identifier: cacheIdentifier, - source: source, - options: options, - transform: transpile, - }, (err, { code, map, metadata } = {}) => { - if (err) return callback(err); - - metadataSubscribers.forEach((s) => passMetadata(s, this, metadata)); - - return callback(null, code, map); - }); + return cache( + { + directory: cacheDirectory, + identifier: cacheIdentifier, + source: source, + options: options, + transform: transpile, + }, + (err, { code, map, metadata } = {}) => { + if (err) return callback(err); + + metadataSubscribers.forEach(s => passMetadata(s, this, metadata)); + + return callback(null, code, map); + }, + ); } const { code, map, metadata } = transpile(source, options); - metadataSubscribers.forEach((s) => passMetadata(s, this, metadata)); + metadataSubscribers.forEach(s => passMetadata(s, this, metadata)); this.callback(null, code, map); }; diff --git a/src/resolve-rc.js b/src/resolve-rc.js index 25a03c6b..24fcdc89 100644 --- a/src/resolve-rc.js +++ b/src/resolve-rc.js @@ -24,7 +24,6 @@ const find = function find(start, rel) { // Reached root return find(up, rel); } - }; module.exports = function(loc, rel) { diff --git a/src/utils/exists.js b/src/utils/exists.js index b9675f29..e1f117dc 100644 --- a/src/utils/exists.js +++ b/src/utils/exists.js @@ -11,10 +11,11 @@ module.exports = function(cache) { cache = cache || {}; return function(filename) { + if (!filename) return false; - if (!filename) { return false; } - - cache[filename] = cache[filename] || (fs.existsSync(filename) && fs.statSync(filename).isFile()); + cache[filename] = + cache[filename] || + (fs.existsSync(filename) && fs.statSync(filename).isFile()); return cache[filename]; }; diff --git a/src/utils/read.js b/src/utils/read.js index 04edd934..d35e6f46 100644 --- a/src/utils/read.js +++ b/src/utils/read.js @@ -11,7 +11,6 @@ module.exports = function(cache) { cache = cache || {}; return function(filename) { - if (!filename) { throw new Error("filename must be a string"); } diff --git a/test/cache.test.js b/test/cache.test.js index fe68bbc3..e9a6cf9a 100644 --- a/test/cache.test.js +++ b/test/cache.test.js @@ -5,7 +5,10 @@ import rimraf from "rimraf"; import webpack from "webpack"; import createTestDirectory from "./helpers/createTestDirectory"; -const defaultCacheDir = path.join(__dirname, "../node_modules/.cache/babel-loader"); +const defaultCacheDir = path.join( + __dirname, + "../node_modules/.cache/babel-loader", +); const cacheDir = path.join(__dirname, "output/cache/cachefiles"); const outputDir = path.join(__dirname, "output/cache"); const babelLoader = path.join(__dirname, "../lib"); @@ -26,25 +29,25 @@ const globalConfig = { // Create a separate directory for each test so that the tests // can run in parallel -test.cb.beforeEach((t) => { +test.cb.beforeEach(t => { createTestDirectory(outputDir, t.title, (err, directory) => { if (err) return t.end(err); t.context.directory = directory; t.end(); }); }); -test.cb.beforeEach((t) => { +test.cb.beforeEach(t => { createTestDirectory(cacheDir, t.title, (err, directory) => { if (err) return t.end(err); t.context.cacheDirectory = directory; t.end(); }); }); -test.cb.beforeEach((t) => rimraf(defaultCacheDir, t.end)); -test.cb.afterEach((t) => rimraf(t.context.directory, t.end)); -test.cb.afterEach((t) => rimraf(t.context.cacheDirectory, t.end)); +test.cb.beforeEach(t => rimraf(defaultCacheDir, t.end)); +test.cb.afterEach(t => rimraf(t.context.directory, t.end)); +test.cb.afterEach(t => rimraf(t.context.cacheDirectory, t.end)); -test.cb("should output files to cache directory", (t) => { +test.cb("should output files to cache directory", t => { const config = Object.assign({}, globalConfig, { output: { path: t.context.directory, @@ -64,7 +67,7 @@ test.cb("should output files to cache directory", (t) => { }, }); - webpack(config, (err) => { + webpack(config, err => { t.is(err, null); fs.readdir(t.context.cacheDirectory, (err, files) => { @@ -75,69 +78,75 @@ test.cb("should output files to cache directory", (t) => { }); }); -test.cb.serial("should output json.gz files to standard cache dir by default", (t) => { - const config = Object.assign({}, globalConfig, { - output: { - path: t.context.directory, - }, - module: { - loaders: [ - { - test: /\.jsx?/, - loader: babelLoader, - exclude: /node_modules/, - query: { - cacheDirectory: true, - presets: ["env"], +test.cb.serial( + "should output json.gz files to standard cache dir by default", + t => { + const config = Object.assign({}, globalConfig, { + output: { + path: t.context.directory, + }, + module: { + loaders: [ + { + test: /\.jsx?/, + loader: babelLoader, + exclude: /node_modules/, + query: { + cacheDirectory: true, + presets: ["env"], + }, }, - }, - ], - }, - }); + ], + }, + }); - webpack(config, (err) => { - t.is(err, null); + webpack(config, err => { + t.is(err, null); - fs.readdir(defaultCacheDir, (err, files) => { - files = files.filter((file) => /\b[0-9a-f]{5,40}\.json\.gz\b/.test(file)); + fs.readdir(defaultCacheDir, (err, files) => { + files = files.filter(file => /\b[0-9a-f]{5,40}\.json\.gz\b/.test(file)); - t.is(err, null); - t.true(files.length > 0); - t.end(); + t.is(err, null); + t.true(files.length > 0); + t.end(); + }); }); - }); -}); + }, +); -test.cb.serial("should output files to standard cache dir if set to true in query", (t) => { - const config = Object.assign({}, globalConfig, { - output: { - path: t.context.directory, - }, - module: { - loaders: [ - { - test: /\.jsx?/, - loader: `${babelLoader}?cacheDirectory=true&presets[]=env`, - exclude: /node_modules/, - }, - ], - }, - }); +test.cb.serial( + "should output files to standard cache dir if set to true in query", + t => { + const config = Object.assign({}, globalConfig, { + output: { + path: t.context.directory, + }, + module: { + loaders: [ + { + test: /\.jsx?/, + loader: `${babelLoader}?cacheDirectory=true&presets[]=env`, + exclude: /node_modules/, + }, + ], + }, + }); - webpack(config, (err) => { - t.is(err, null); + webpack(config, err => { + t.is(err, null); - fs.readdir(defaultCacheDir, (err, files) => { - files = files.filter((file) => /\b[0-9a-f]{5,40}\.json\.gz\b/.test(file)); + fs.readdir(defaultCacheDir, (err, files) => { + files = files.filter(file => /\b[0-9a-f]{5,40}\.json\.gz\b/.test(file)); - t.is(err, null); - t.true(files.length > 0); - t.end(); + t.is(err, null); + t.true(files.length > 0); + t.end(); + }); }); - }); -}); + }, +); -test.cb.skip("should read from cache directory if cached file exists", (t) => { +test.cb.skip("should read from cache directory if cached file exists", t => { const config = Object.assign({}, globalConfig, { output: { path: t.context.directory, @@ -159,10 +168,10 @@ test.cb.skip("should read from cache directory if cached file exists", (t) => { // @TODO Find a way to know if the file as correctly read without relying on // Istanbul for coverage. - webpack(config, (err) => { + webpack(config, err => { t.is(err, null); - webpack(config, (err) => { + webpack(config, err => { t.is(err, null); fs.readdir(t.context.cacheDirectory, (err, files) => { t.is(err, null); @@ -171,10 +180,9 @@ test.cb.skip("should read from cache directory if cached file exists", (t) => { }); }); }); - }); -test.cb("should have one file per module", (t) => { +test.cb("should have one file per module", t => { const config = Object.assign({}, globalConfig, { output: { path: t.context.directory, @@ -194,7 +202,7 @@ test.cb("should have one file per module", (t) => { }, }); - webpack(config, (err) => { + webpack(config, err => { t.is(err, null); fs.readdir(t.context.cacheDirectory, (err, files) => { @@ -205,7 +213,7 @@ test.cb("should have one file per module", (t) => { }); }); -test.cb("should generate a new file if the identifier changes", (t) => { +test.cb("should generate a new file if the identifier changes", t => { const configs = [ Object.assign({}, globalConfig, { output: { @@ -248,8 +256,8 @@ test.cb("should generate a new file if the identifier changes", (t) => { ]; let counter = configs.length; - configs.forEach((config) => { - webpack(config, (err) => { + configs.forEach(config => { + webpack(config, err => { t.is(err, null); counter -= 1; @@ -262,10 +270,9 @@ test.cb("should generate a new file if the identifier changes", (t) => { } }); }); - }); -test.cb("should allow to specify the .babelrc file", (t) => { +test.cb("should allow to specify the .babelrc file", t => { const config = [ Object.assign({}, globalConfig, { entry: path.join(__dirname, "fixtures/constant.js"), @@ -308,7 +315,7 @@ test.cb("should allow to specify the .babelrc file", (t) => { }), ]; - webpack(config, (err) => { + webpack(config, err => { t.is(err, null); fs.readdir(t.context.cacheDirectory, (err, files) => { diff --git a/test/helpers/createTestDirectory.js b/test/helpers/createTestDirectory.js index 0646f53d..0a0440ba 100644 --- a/test/helpers/createTestDirectory.js +++ b/test/helpers/createTestDirectory.js @@ -5,9 +5,9 @@ import rimraf from "rimraf"; export default function createTestDirectory(baseDirectory, testTitle, cb) { const directory = path.join(baseDirectory, escapeDirectory(testTitle)); - rimraf(directory, (err) => { + rimraf(directory, err => { if (err) return cb(err); - mkdirp(directory, (mkdirErr) => cb(mkdirErr, directory)); + mkdirp(directory, mkdirErr => cb(mkdirErr, directory)); }); } diff --git a/test/loader.test.js b/test/loader.test.js index 755a34b6..f9f0883d 100644 --- a/test/loader.test.js +++ b/test/loader.test.js @@ -25,7 +25,7 @@ const globalConfig = { // Create a separate directory for each test so that the tests // can run in parallel -test.cb.beforeEach((t) => { +test.cb.beforeEach(t => { createTestDirectory(outputDir, t.title, (err, directory) => { if (err) return t.end(err); t.context.directory = directory; @@ -33,16 +33,16 @@ test.cb.beforeEach((t) => { }); }); -test.cb.afterEach((t) => rimraf(t.context.directory, t.end)); +test.cb.afterEach(t => rimraf(t.context.directory, t.end)); -test.cb("should transpile the code snippet", (t) => { +test.cb("should transpile the code snippet", t => { const config = Object.assign({}, globalConfig, { output: { path: t.context.directory, }, }); - webpack(config, (err) => { + webpack(config, err => { t.is(err, null); fs.readdir(t.context.directory, (err, files) => { @@ -61,7 +61,7 @@ test.cb("should transpile the code snippet", (t) => { }); }); -test.cb("should not throw error on syntax error", (t) => { +test.cb("should not throw error on syntax error", t => { const config = Object.assign({}, globalConfig, { entry: path.join(__dirname, "fixtures/syntax.js"), output: { @@ -77,7 +77,7 @@ test.cb("should not throw error on syntax error", (t) => { }); }); -test.cb("should use correct env", (t) => { +test.cb("should use correct env", t => { const config = { entry: path.join(__dirname, "fixtures/basic.js"), output: { @@ -96,8 +96,8 @@ test.cb("should use correct env", (t) => { }, otherenv: { presets: ["es2015xyz"], - } - } + }, + }, }, exclude: /node_modules/, }, @@ -117,7 +117,7 @@ test.cb("should use correct env", (t) => { }); }); -test.serial.cb("should not polute BABEL_ENV after using forceEnv", (t) => { +test.serial.cb("should not polute BABEL_ENV after using forceEnv", t => { const initialBabelEnv = process.env.BABEL_ENV; const config = { @@ -136,7 +136,7 @@ test.serial.cb("should not polute BABEL_ENV after using forceEnv", (t) => { testenv: { presets: ["es2015"], }, - } + }, }, exclude: /node_modules/, }, @@ -150,40 +150,43 @@ test.serial.cb("should not polute BABEL_ENV after using forceEnv", (t) => { }); }); -test.serial.cb("should not polute BABEL_ENV after using forceEnv (on exception)", (t) => { - const initialBabelEnv = process.env.BABEL_ENV; +test.serial.cb( + "should not polute BABEL_ENV after using forceEnv (on exception)", + t => { + const initialBabelEnv = process.env.BABEL_ENV; - const config = { - entry: path.join(__dirname, "fixtures/basic.js"), - output: { - path: t.context.directory, - }, - module: { - loaders: [ - { - test: /\.jsx?/, - loader: babelLoader, - query: { - forceEnv: "testenv", - env: { - testenv: { - presets: ["es2015asd"], + const config = { + entry: path.join(__dirname, "fixtures/basic.js"), + output: { + path: t.context.directory, + }, + module: { + loaders: [ + { + test: /\.jsx?/, + loader: babelLoader, + query: { + forceEnv: "testenv", + env: { + testenv: { + presets: ["es2015asd"], + }, }, - } + }, + exclude: /node_modules/, }, - exclude: /node_modules/, - }, - ], - }, - }; + ], + }, + }; - webpack(config, () => { - t.truthy(process.env.BABEL_ENV === initialBabelEnv); - t.end(); - }); -}); + webpack(config, () => { + t.truthy(process.env.BABEL_ENV === initialBabelEnv); + t.end(); + }); + }, +); -test.serial.cb("should not change BABEL_ENV when using forceEnv", (t) => { +test.serial.cb("should not change BABEL_ENV when using forceEnv", t => { const initialBabelEnv = process.env.BABEL_ENV; process.env.BABEL_ENV = "nontestenv"; @@ -205,9 +208,9 @@ test.serial.cb("should not change BABEL_ENV when using forceEnv", (t) => { presets: ["es2015abc"], }, nontestenv: { - presets: ["es2015xzy"] - } - } + presets: ["es2015xzy"], + }, + }, }, exclude: /node_modules/, }, @@ -235,7 +238,7 @@ test.serial.cb("should not change BABEL_ENV when using forceEnv", (t) => { }); }); -test.cb("should not throw without config", (t) => { +test.cb("should not throw without config", t => { const config = { entry: path.join(__dirname, "fixtures/basic.js"), output: { diff --git a/test/metadata.test.js b/test/metadata.test.js index 80490460..e197a4f2 100644 --- a/test/metadata.test.js +++ b/test/metadata.test.js @@ -17,7 +17,7 @@ const globalConfig = { path: outputDir, filename: "[id].metadata.js", }, - plugins: [new ReactIntlPlugin(), ], + plugins: [new ReactIntlPlugin()], module: { loaders: [ { @@ -25,9 +25,7 @@ const globalConfig = { loader: babelLoader, query: { metadataSubscribers: [ReactIntlPlugin.metadataContextFunctionName], - plugins: [ - ["react-intl", { enforceDescriptions: false, }, ], - ], + plugins: [["react-intl", { enforceDescriptions: false }]], presets: [], }, exclude: /node_modules/, @@ -38,7 +36,7 @@ const globalConfig = { // Create a separate directory for each test so that the tests // can run in parallel -test.cb.beforeEach((t) => { +test.cb.beforeEach(t => { createTestDirectory(outputDir, t.title, (err, directory) => { if (err) return t.end(err); t.context.directory = directory; @@ -46,10 +44,9 @@ test.cb.beforeEach((t) => { }); }); -test.cb.afterEach((t) => rimraf(t.context.directory, t.end)); +test.cb.afterEach(t => rimraf(t.context.directory, t.end)); - -test.cb("should pass metadata code snippet", (t) => { +test.cb("should pass metadata code snippet", t => { const config = assign({}, globalConfig, { output: { path: t.context.directory, @@ -57,13 +54,14 @@ test.cb("should pass metadata code snippet", (t) => { }, }); - webpack(config, (err) => { + webpack(config, err => { t.is(err, null); fs.readdir(t.context.directory, (err, files) => { t.is(err, null); t.true(files.length > 0); - fs.readFile(path.resolve(t.context.directory, "reactIntlMessages.json"), + fs.readFile( + path.resolve(t.context.directory, "reactIntlMessages.json"), function(err, data) { t.is(err, null); const text = data.toString(); @@ -72,12 +70,13 @@ test.cb("should pass metadata code snippet", (t) => { t.true(jsonText[0].id == "greetingId"); t.true(jsonText[0].defaultMessage == "Hello World!"); t.end(); - }); + }, + ); }); }); }); -test.cb("should not throw error", (t) => { +test.cb("should not throw error", t => { const config = assign({}, globalConfig, { output: { path: t.context.directory, @@ -92,7 +91,7 @@ test.cb("should not throw error", (t) => { }); }); -test.cb("should throw error", (t) => { +test.cb("should throw error", t => { const config = assign({}, globalConfig, { output: { path: t.context.directory, @@ -108,7 +107,7 @@ test.cb("should throw error", (t) => { }); }); -test.cb("should pass metadata code snippet ( cache version )", (t) => { +test.cb("should pass metadata code snippet ( cache version )", t => { const config = assign({}, globalConfig, { output: { path: t.context.directory, @@ -121,9 +120,7 @@ test.cb("should pass metadata code snippet ( cache version )", (t) => { loader: babelLoader, query: { metadataSubscribers: [ReactIntlPlugin.metadataContextFunctionName], - plugins: [ - ["react-intl", { enforceDescriptions: false, }, ], - ], + plugins: [["react-intl", { enforceDescriptions: false }]], cacheDirectory: cacheDir, presets: [], }, @@ -133,13 +130,14 @@ test.cb("should pass metadata code snippet ( cache version )", (t) => { }, }); - webpack(config, (err) => { + webpack(config, err => { t.is(err, null); fs.readdir(t.context.directory, (err, files) => { t.is(err, null); t.true(files.length > 0); - fs.readFile(path.resolve(t.context.directory, "reactIntlMessages.json"), + fs.readFile( + path.resolve(t.context.directory, "reactIntlMessages.json"), function(err, data) { t.is(err, null); const text = data.toString(); @@ -148,7 +146,8 @@ test.cb("should pass metadata code snippet ( cache version )", (t) => { t.true(jsonText[0].id == "greetingId"); t.true(jsonText[0].defaultMessage == "Hello World!"); t.end(); - }); + }, + ); }); }); }); diff --git a/test/options.test.js b/test/options.test.js index de14aecb..9034e648 100644 --- a/test/options.test.js +++ b/test/options.test.js @@ -22,7 +22,7 @@ const globalConfig = { // Create a separate directory for each test so that the tests // can run in parallel -test.cb.beforeEach((t) => { +test.cb.beforeEach(t => { createTestDirectory(outputDir, t.title, (err, directory) => { if (err) return t.end(err); t.context.directory = directory; @@ -30,9 +30,9 @@ test.cb.beforeEach((t) => { }); }); -test.cb.afterEach((t) => rimraf(t.context.directory, t.end)); +test.cb.afterEach(t => rimraf(t.context.directory, t.end)); -test.cb("should interpret options given to the loader", (t) => { +test.cb("should interpret options given to the loader", t => { const config = Object.assign({}, globalConfig, { output: { path: t.context.directory, @@ -48,7 +48,7 @@ test.cb("should interpret options given to the loader", (t) => { }, }); - webpack(config, (err) => { + webpack(config, err => { t.is(err, null); fs.readdir(outputDir, (err, files) => { diff --git a/test/resolverc.test.js b/test/resolverc.test.js index dff9964f..576ab85c 100644 --- a/test/resolverc.test.js +++ b/test/resolverc.test.js @@ -2,7 +2,7 @@ import test from "ava"; import path from "path"; import resolveRc from "../lib/resolve-rc.js"; -test("should find the .babelrc file", (t) => { +test("should find the .babelrc file", t => { const start = path.join(__dirname, "fixtures/babelrc-test/1/2/3"); const result = resolveRc(start); diff --git a/test/sourcemaps.test.js b/test/sourcemaps.test.js index 4f58610c..f6d03e9b 100644 --- a/test/sourcemaps.test.js +++ b/test/sourcemaps.test.js @@ -22,7 +22,7 @@ const globalConfig = { // Create a separate directory for each test so that the tests // can run in parallel -test.cb.beforeEach((t) => { +test.cb.beforeEach(t => { createTestDirectory(outputDir, t.title, (err, directory) => { if (err) return t.end(err); t.context.directory = directory; @@ -30,9 +30,9 @@ test.cb.beforeEach((t) => { }); }); -test.cb.afterEach((t) => rimraf(t.context.directory, t.end)); +test.cb.afterEach(t => rimraf(t.context.directory, t.end)); -test.cb("should output webpack's sourcemap", (t) => { +test.cb("should output webpack's sourcemap", t => { const config = Object.assign({}, globalConfig, { devtool: "source-map", output: { @@ -49,13 +49,13 @@ test.cb("should output webpack's sourcemap", (t) => { }, }); - webpack(config, (err) => { + webpack(config, err => { t.is(err, null); fs.readdir(t.context.directory, (err, files) => { t.is(err, null); - const map = files.filter((file) => file.indexOf(".map") !== -1); + const map = files.filter(file => file.indexOf(".map") !== -1); t.true(map.length > 0); @@ -64,7 +64,6 @@ test.cb("should output webpack's sourcemap", (t) => { t.not(data.toString().indexOf("webpack:///"), -1); t.end(); }); - }); }); }); diff --git a/yarn.lock b/yarn.lock index 746fdf71..1e622485 100644 --- a/yarn.lock +++ b/yarn.lock @@ -94,7 +94,7 @@ ansi-align@^1.1.0: dependencies: string-width "^1.0.1" -ansi-escapes@^1.1.0: +ansi-escapes@^1.0.0, ansi-escapes@^1.1.0: version "1.4.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" @@ -123,6 +123,10 @@ anymatch@^1.3.0: arrify "^1.0.0" micromatch "^2.1.5" +app-root-path@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-2.0.1.tgz#cd62dcf8e4fd5a417efc664d2e5b10653c651b46" + append-transform@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991" @@ -220,6 +224,10 @@ assert@^1.1.1: dependencies: util "0.10.3" +ast-types@0.9.8: + version "0.9.8" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.9.8.tgz#6cb6a40beba31f49f20928e28439fc14a3dab078" + async-each@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" @@ -364,7 +372,7 @@ babel-cli@^6.18.0: optionalDependencies: chokidar "^1.6.1" -babel-code-frame@^6.16.0, babel-code-frame@^6.22.0: +babel-code-frame@6.22.0, babel-code-frame@^6.16.0, babel-code-frame@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4" dependencies: @@ -862,6 +870,10 @@ babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.23.0, babel-types@^6.24 lodash "^4.2.0" to-fast-properties "^1.0.1" +babylon@7.0.0-beta.8: + version "7.0.0-beta.8" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.8.tgz#2bdc5ae366041442c27e068cce6f0d7c06ea9949" + babylon@^6.1.0, babylon@^6.11.0, babylon@^6.13.0, babylon@^6.15.0, babylon@^6.16.1: version "6.17.0" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.0.tgz#37da948878488b9c4e3c4038893fa3314b3fc932" @@ -1098,15 +1110,7 @@ center-align@^0.1.1: align-text "^0.1.3" lazy-cache "^1.0.3" -chalk@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.4.0.tgz#5199a3ddcd0c1efe23bc08c1b027b06176e0c64f" - dependencies: - ansi-styles "~1.0.0" - has-color "~0.1.0" - strip-ansi "~0.1.0" - -chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: +chalk@1.1.3, 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" dependencies: @@ -1116,6 +1120,14 @@ chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" +chalk@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.4.0.tgz#5199a3ddcd0c1efe23bc08c1b027b06176e0c64f" + dependencies: + ansi-styles "~1.0.0" + has-color "~0.1.0" + strip-ansi "~0.1.0" + chokidar@^1.4.2, chokidar@^1.4.3, chokidar@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2" @@ -1157,7 +1169,7 @@ cli-boxes@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" -cli-cursor@^1.0.1: +cli-cursor@^1.0.1, cli-cursor@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" dependencies: @@ -1169,10 +1181,21 @@ cli-cursor@^2.1.0: dependencies: restore-cursor "^2.0.0" +cli-spinners@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-0.1.2.tgz#bb764d88e185fb9e1e6a2a1f19772318f605e31c" + cli-spinners@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-1.0.0.tgz#ef987ed3d48391ac3dab9180b406a742180d6e6a" +cli-truncate@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" + dependencies: + slice-ansi "0.0.4" + string-width "^1.0.1" + cli-truncate@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-1.0.0.tgz#21eb91f47b3f6560f004db77a769b4668d9c5518" @@ -1236,7 +1259,7 @@ combined-stream@^1.0.5, combined-stream@~1.0.5: dependencies: delayed-stream "~1.0.0" -commander@^2.8.1: +commander@^2.8.1, commander@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" dependencies: @@ -1314,6 +1337,19 @@ core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" +cosmiconfig@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-1.1.0.tgz#0dea0f9804efdfb929fbb1b188e25553ea053d37" + dependencies: + graceful-fs "^4.1.2" + js-yaml "^3.4.3" + minimist "^1.2.0" + object-assign "^4.0.1" + os-homedir "^1.0.1" + parse-json "^2.2.0" + pinkie-promise "^2.0.0" + require-from-string "^1.1.0" + create-ecdh@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.0.tgz#888c723596cdf7612f6498233eebd7a35301737d" @@ -1364,7 +1400,7 @@ cross-spawn@^4, cross-spawn@^4.0.0: lru-cache "^4.0.1" which "^1.2.9" -cross-spawn@^5.1.0: +cross-spawn@^5.0.1, cross-spawn@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" dependencies: @@ -1415,6 +1451,10 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" +date-fns@^1.27.2: + version "1.28.3" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.28.3.tgz#145d87adc3f5a82c6bda668de97eee1132c97ea1" + date-now@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" @@ -1535,6 +1575,10 @@ electron-to-chromium@^1.2.7: version "1.3.6" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.6.tgz#b90ff7e9094e6f7dd343761a001e82592d937db2" +elegant-spinner@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" + elliptic@^6.0.0: version "6.4.0" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df" @@ -1755,7 +1799,7 @@ estraverse@~4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.1.1.tgz#f6caca728933a850ef90661d0e17982ba47111a2" -esutils@^2.0.2: +esutils@2.0.2, esutils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" @@ -1799,6 +1843,18 @@ execa@^0.5.0: signal-exit "^3.0.0" strip-eof "^1.0.0" +execa@^0.6.0: + version "0.6.3" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.6.3.tgz#57b69a594f081759c69e5370f0d17b9cb11658fe" + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + exit-hook@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" @@ -1845,7 +1901,7 @@ fbjs@^0.8.9: setimmediate "^1.0.5" ua-parser-js "^0.7.9" -figures@^1.3.5: +figures@^1.3.5, figures@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" dependencies: @@ -1887,6 +1943,10 @@ find-cache-dir@^0.1.1: mkdirp "^0.5.1" pkg-dir "^1.0.0" +find-parent-dir@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/find-parent-dir/-/find-parent-dir-0.3.0.tgz#33c44b429ab2b2f0646299c5f9f718f376ff8d54" + find-up@^1.0.0, find-up@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" @@ -1909,6 +1969,10 @@ flat-cache@^1.2.1: graceful-fs "^4.1.2" write "^0.2.1" +flow-parser@0.43.0: + version "0.43.0" + resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.43.0.tgz#e2b8eb1ac83dd53f7b6b04a7c35b6a52c33479b7" + fn-name@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/fn-name/-/fn-name-2.0.1.tgz#5214d7537a4d06a4a301c0cc262feb84188002e7" @@ -2005,6 +2069,10 @@ get-port@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/get-port/-/get-port-3.1.0.tgz#ef01b18a84ca6486970ff99e54446141a73ffd3e" +get-stdin@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398" + get-stdin@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" @@ -2039,7 +2107,7 @@ glob-parent@^2.0.0: dependencies: is-glob "^2.0.0" -glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.0.6: +glob@7.1.1, glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.0.6: version "7.1.1" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" dependencies: @@ -2214,6 +2282,15 @@ hullabaloo-config-manager@^1.0.0: pkg-dir "^1.0.0" resolve-from "^2.0.0" +husky@^0.13.2: + version "0.13.3" + resolved "https://registry.yarnpkg.com/husky/-/husky-0.13.3.tgz#bc2066080badc8b8fe3516e881f5bc68a57052ff" + dependencies: + chalk "^1.1.3" + find-parent-dir "^0.3.0" + is-ci "^1.0.9" + normalize-path "^1.0.0" + iconv-lite@~0.4.13: version "0.4.15" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb" @@ -2347,7 +2424,7 @@ is-builtin-module@^1.0.0: dependencies: builtin-modules "^1.0.0" -is-ci@^1.0.7: +is-ci@^1.0.7, is-ci@^1.0.9: version "1.0.10" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.0.10.tgz#f739336b2632365061a9d48270cd56ae3369318e" dependencies: @@ -2627,6 +2704,15 @@ jest-util@^19.0.2: leven "^2.0.0" mkdirp "^0.5.1" +jest-validate@19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-19.0.0.tgz#8c6318a20ecfeaba0ba5378bfbb8277abded4173" + dependencies: + chalk "^1.1.1" + jest-matcher-utils "^19.0.0" + leven "^2.0.0" + pretty-format "^19.0.0" + jest-validate@^19.0.2: version "19.0.2" resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-19.0.2.tgz#dc534df5f1278d5b63df32b14241d4dbf7244c0c" @@ -2646,7 +2732,7 @@ js-tokens@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7" -js-yaml@^3.5.1, js-yaml@^3.8.2: +js-yaml@^3.4.3, js-yaml@^3.5.1, js-yaml@^3.8.2: version "3.8.3" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.3.tgz#33a05ec481c850c8875929166fe1beb61c728766" dependencies: @@ -2747,6 +2833,64 @@ levn@^0.3.0, levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" +lint-staged@^3.3.1: + version "3.4.0" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-3.4.0.tgz#52fa85dfc92bb1c6fe8ad0d0d98ca13924e03e4b" + dependencies: + app-root-path "^2.0.0" + cosmiconfig "^1.1.0" + execa "^0.6.0" + listr "^0.11.0" + minimatch "^3.0.0" + npm-which "^3.0.1" + staged-git-files "0.0.4" + +listr-silent-renderer@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" + +listr-update-renderer@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.2.0.tgz#ca80e1779b4e70266807e8eed1ad6abe398550f9" + dependencies: + chalk "^1.1.3" + cli-truncate "^0.2.1" + elegant-spinner "^1.0.1" + figures "^1.7.0" + indent-string "^3.0.0" + log-symbols "^1.0.2" + log-update "^1.0.2" + strip-ansi "^3.0.1" + +listr-verbose-renderer@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.4.0.tgz#44dc01bb0c34a03c572154d4d08cde9b1dc5620f" + dependencies: + chalk "^1.1.3" + cli-cursor "^1.0.2" + date-fns "^1.27.2" + figures "^1.7.0" + +listr@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/listr/-/listr-0.11.0.tgz#5e778bc23806ac3ab984ed75564458151f39b03e" + dependencies: + chalk "^1.1.3" + cli-truncate "^0.2.1" + figures "^1.7.0" + indent-string "^2.1.0" + is-promise "^2.1.0" + is-stream "^1.1.0" + listr-silent-renderer "^1.1.1" + listr-update-renderer "^0.2.0" + listr-verbose-renderer "^0.4.0" + log-symbols "^1.0.2" + log-update "^1.0.2" + ora "^0.2.3" + rxjs "^5.0.0-beta.11" + stream-to-observable "^0.1.0" + strip-ansi "^3.0.1" + load-json-file@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" @@ -2830,6 +2974,19 @@ lodash@^4.0.0, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.2.0, lodash@^4.3.0: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" +log-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" + dependencies: + chalk "^1.0.0" + +log-update@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-1.0.2.tgz#19929f64c4093d2d2e7075a1dad8af59c296b8d1" + dependencies: + ansi-escapes "^1.0.0" + cli-cursor "^1.0.2" + longest@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" @@ -2969,7 +3126,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.3, minimist@^1.2.0: +minimist@1.2.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" @@ -3069,12 +3226,22 @@ normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" +normalize-path@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-1.0.0.tgz#32d0e472f91ff345701c15a8311018d3b0a90379" + normalize-path@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" dependencies: remove-trailing-separator "^1.0.1" +npm-path@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.3.tgz#15cff4e1c89a38da77f56f6055b24f975dfb2bbe" + dependencies: + which "^1.2.10" + npm-run-path@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-1.0.0.tgz#f5c32bf595fe81ae927daec52e82f8b000ac3c8f" @@ -3087,6 +3254,14 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" +npm-which@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/npm-which/-/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa" + dependencies: + commander "^2.9.0" + npm-path "^2.0.2" + which "^1.2.10" + npmlog@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f" @@ -3194,6 +3369,15 @@ optionator@^0.8.2: type-check "~0.3.2" wordwrap "~1.0.0" +ora@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/ora/-/ora-0.2.3.tgz#37527d220adcd53c39b73571d754156d5db657a4" + dependencies: + chalk "^1.1.1" + cli-cursor "^1.0.2" + cli-spinners "^0.1.2" + object-assign "^4.0.1" + os-browserify@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.2.1.tgz#63fc4ccee5d2d7763d26bbf8601078e6c2e0044f" @@ -3423,6 +3607,21 @@ preserve@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" +prettier@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.2.2.tgz#22d17c1132faaaea1f1d4faea31f19f7a1959f3e" + dependencies: + ast-types "0.9.8" + babel-code-frame "6.22.0" + babylon "7.0.0-beta.8" + chalk "1.1.3" + esutils "2.0.2" + flow-parser "0.43.0" + get-stdin "5.0.1" + glob "7.1.1" + jest-validate "19.0.0" + minimist "1.2.0" + pretty-format@^19.0.0: version "19.0.0" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-19.0.0.tgz#56530d32acb98a3fa4851c4e2b9d37b420684c84" @@ -3731,6 +3930,10 @@ require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" +require-from-string@^1.1.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418" + require-main-filename@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" @@ -3806,6 +4009,12 @@ rx-lite@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102" +rxjs@^5.0.0-beta.11: + version "5.3.0" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.3.0.tgz#d88ccbdd46af290cbdb97d5d8055e52453fabe2d" + dependencies: + symbol-observable "^1.0.1" + safe-buffer@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7" @@ -3956,6 +4165,10 @@ stack-utils@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.0.tgz#2392cd8ddbd222492ed6c047960f7414b46c0f83" +staged-git-files@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-0.0.4.tgz#d797e1b551ca7a639dec0237dc6eb4bb9be17d35" + stream-browserify@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" @@ -3973,6 +4186,10 @@ stream-http@^2.3.1: to-arraybuffer "^1.0.0" xtend "^4.0.0" +stream-to-observable@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/stream-to-observable/-/stream-to-observable-0.1.0.tgz#45bf1d9f2d7dc09bed81f1c307c430e68b84cffe" + string-width@^1.0.1, string-width@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" @@ -4056,7 +4273,7 @@ symbol-observable@^0.2.2: version "0.2.4" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-0.2.4.tgz#95a83db26186d6af7e7a18dbd9760a2f86d08f40" -symbol-observable@^1.0.4: +symbol-observable@^1.0.1, symbol-observable@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d" @@ -4363,7 +4580,7 @@ which-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" -which@^1.2.4, which@^1.2.8, which@^1.2.9: +which@^1.2.10, which@^1.2.4, which@^1.2.8, which@^1.2.9: version "1.2.14" resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" dependencies: