diff --git a/experimental/babel-preset-env/.eslintignore b/experimental/babel-preset-env/.eslintignore index 3321ba5dea..87bef84070 100644 --- a/experimental/babel-preset-env/.eslintignore +++ b/experimental/babel-preset-env/.eslintignore @@ -1,2 +1,3 @@ /lib fixtures +/data diff --git a/experimental/babel-preset-env/.eslintrc b/experimental/babel-preset-env/.eslintrc index ee6cdeb8e7..df0bcbfb7d 100644 --- a/experimental/babel-preset-env/.eslintrc +++ b/experimental/babel-preset-env/.eslintrc @@ -3,5 +3,14 @@ "parserOptions": { "ecmaVersion": 7, "sourceType": "module" + }, + "rules": { + "arrow-parens": "off", + "indent": "off", + "comma-dangle": ["error", "always-multiline"], + "curly": ["error", "multi-line"], + "func-call-spacing": "error", + "key-spacing": "error", + "no-multi-spaces": "error" } } diff --git a/experimental/babel-preset-env/package.json b/experimental/babel-preset-env/package.json index dcef414b00..843d082f09 100644 --- a/experimental/babel-preset-env/package.json +++ b/experimental/babel-preset-env/package.json @@ -16,9 +16,12 @@ "dev": "babel -w src -d lib", "fix": "eslint . --fix", "lint": "eslint .", + "precommit": "lint-staged", + "prettify": "prettier --trailing-comma all --write \"src/*.js\" \"scripts/*.js\" \"test/*.js\"", "test": "npm run build && npm run test-only", "test-ci": "nyc npm run test", "test-only": "mocha ./test --compilers js:babel-register -t 10000" + }, "dependencies": { "babel-plugin-check-es2015-constants": "7.0.0-alpha.1", @@ -68,9 +71,12 @@ "eslint-config-babel": "^6.0.0", "eslint-plugin-flowtype": "^2.29.1", "fs-extra": "^2.0.0", + "husky": "^0.13.2", + "lint-staged": "^3.3.1", "lodash": "^4.17.4", "mocha": "^3.2.0", "nyc": "^10.1.2", + "prettier": "^0.22.0", "rimraf": "^2.6.1" }, "babel": { @@ -98,5 +104,15 @@ "include": ["src/*.js"], "instrument": false, "sourceMap": false + }, + "lint-staged": { + "{src,scripts}/**/*.js": [ + "prettier --trailing-comma all --write", + "git add" + ], + "test/*.js": [ + "prettier --trailing-comma all --write", + "git add" + ] } } diff --git a/experimental/babel-preset-env/scripts/build-data.js b/experimental/babel-preset-env/scripts/build-data.js index fd16232fd0..0de81f2d8e 100644 --- a/experimental/babel-preset-env/scripts/build-data.js +++ b/experimental/babel-preset-env/scripts/build-data.js @@ -10,7 +10,7 @@ const pluginFeatures = require("../data/plugin-features"); const builtInFeatures = require("../data/built-in-features"); const renameTests = (tests, getName) => - tests.map((test) => Object.assign({}, test, { name: getName(test.name) })); + tests.map(test => Object.assign({}, test, { name: getName(test.name) })); const es6Data = require("compat-table/data-es6"); const es6PlusData = require("compat-table/data-es2016plus"); @@ -26,7 +26,7 @@ const environments = [ "ie", "android", "ios", - "phantom" + "phantom", ]; const envMap = { @@ -51,101 +51,106 @@ const envMap = { ios51: "ios5.1", }; -const invertedEqualsEnv = Object.keys(envs) - .filter((b) => envs[b].equals) - .reduce((a, b) => { - const checkEnv = envMap[envs[b].equals] || envs[b].equals; - environments.some((env) => { - // go through all environment names to find the the current one - // and try to get the version as integer - const version = parseFloat(checkEnv.replace(env, "")); - if (!isNaN(version)) { - Object.keys(envs).forEach((equals) => { - equals = envMap[equals] || equals; - // Go through all envs from compat-table and get int version - const equalsVersion = parseFloat(equals.replace(env, "")); - // If the current version is smaller than the version that was mentioned - // in `equals` we can add an entry, as older versions should include features - // that newer ones have - if (!isNaN(equalsVersion) && equalsVersion <= version) { - if (!a[equals]) a[equals] = []; - if (a[equals].indexOf(b) >= 0) return; - a[equals].push(b); - } - }); - return true; - } - }); - - return a; - }, {}); - -const compatibilityTests = flattenDeep([ - es6Data, - es6PlusData, -].map((data) => - data.tests.map((test) => { - return test.subtests ? - [test, renameTests(test.subtests, (name) => test.name + " / " + name)] : - test; - }) -)); - -const getLowestImplementedVersion = ({ features }, env) => { - const tests = flatten(compatibilityTests - .filter((test) => { - return features.indexOf(test.name) >= 0 || - // for features === ["DataView"] - // it covers "DataView (Int8)" and "DataView (UInt8)" - features.length === 1 && test.name.indexOf(features[0]) === 0; - }) - .map((test) => { - const isBuiltIn = test.category === "built-ins" || test.category === "built-in extensions"; - - return test.subtests ? - test.subtests.map((subtest) => ({ - name: `${test.name}/${subtest.name}`, - res: subtest.res, - isBuiltIn - })) : - { - name: test.name, - res: test.res, - isBuiltIn - }; - }) - ); - - const envTests = tests - .map(({ res: test, name, isBuiltIn }, i) => { - // Babel itself doesn't implement the feature correctly, - // don't count against it - // only doing this for built-ins atm - if (!test.babel && isBuiltIn) { - return "-1"; - } - - // `equals` in compat-table - Object.keys(test).forEach((t) => { - const invertedEnvs = invertedEqualsEnv[envMap[t] || t]; - if (invertedEnvs) { - invertedEnvs.forEach((inv) => { - test[inv] = test[t]; - }); +const invertedEqualsEnv = Object.keys(envs).filter(b => envs[b].equals).reduce(( + a, + b, +) => { + const checkEnv = envMap[envs[b].equals] || envs[b].equals; + environments.some(env => { + // go through all environment names to find the the current one + // and try to get the version as integer + const version = parseFloat(checkEnv.replace(env, "")); + if (!isNaN(version)) { + Object.keys(envs).forEach(equals => { + equals = envMap[equals] || equals; + // Go through all envs from compat-table and get int version + const equalsVersion = parseFloat(equals.replace(env, "")); + // If the current version is smaller than the version that was mentioned + // in `equals` we can add an entry, as older versions should include features + // that newer ones have + if (!isNaN(equalsVersion) && equalsVersion <= version) { + if (!a[equals]) a[equals] = []; + if (a[equals].indexOf(b) >= 0) return; + a[equals].push(b); } }); + return true; + } + }); - return Object.keys(test) - .filter((t) => t.startsWith(env)) - // Babel assumes strict mode - .filter((test) => tests[i].res[test] === true || tests[i].res[test] === "strict") - // normalize some keys - .map((test) => envMap[test] || test) - .filter((test) => !isNaN(parseFloat(test.replace(env, "")))) - .shift(); + return a; +}, {}); + +const compatibilityTests = flattenDeep( + [es6Data, es6PlusData].map(data => + data.tests.map(test => { + return test.subtests + ? [test, renameTests(test.subtests, name => test.name + " / " + name)] + : test; + })), +); + +const getLowestImplementedVersion = ({ features }, env) => { + const tests = flatten( + compatibilityTests + .filter(test => { + return features.indexOf(test.name) >= 0 || + // for features === ["DataView"] + // it covers "DataView (Int8)" and "DataView (UInt8)" + (features.length === 1 && test.name.indexOf(features[0]) === 0); + }) + .map(test => { + const isBuiltIn = test.category === "built-ins" || + test.category === "built-in extensions"; + + return test.subtests + ? test.subtests.map(subtest => ({ + name: `${test.name}/${subtest.name}`, + res: subtest.res, + isBuiltIn, + })) + : { + name: test.name, + res: test.res, + isBuiltIn, + }; + }), + ); + + const envTests = tests.map(({ res: test, name, isBuiltIn }, i) => { + // Babel itself doesn't implement the feature correctly, + // don't count against it + // only doing this for built-ins atm + if (!test.babel && isBuiltIn) { + return "-1"; + } + + // `equals` in compat-table + Object.keys(test).forEach(t => { + const invertedEnvs = invertedEqualsEnv[envMap[t] || t]; + if (invertedEnvs) { + invertedEnvs.forEach(inv => { + test[inv] = test[t]; + }); + } }); - const envFiltered = envTests.filter((t) => t); + return ( + Object.keys(test) + .filter(t => t.startsWith(env)) + // Babel assumes strict mode + .filter( + test => + tests[i].res[test] === true || tests[i].res[test] === "strict", + ) + // normalize some keys + .map(test => envMap[test] || test) + .filter(test => !isNaN(parseFloat(test.replace(env, "")))) + .shift() + ); + }); + + const envFiltered = envTests.filter(t => t); if (envTests.length > envFiltered.length || envTests.length === 0) { // envTests.forEach((test, i) => { // if (!test) { @@ -158,21 +163,21 @@ const getLowestImplementedVersion = ({ features }, env) => { return null; } - return envTests - .map((str) => Number(str.replace(env, ""))) - .reduce((a, b) => { return (a < b) ? b : a; }); + return envTests.map(str => Number(str.replace(env, ""))).reduce((a, b) => { + return a < b ? b : a; + }); }; const generateData = (environments, features) => { - return mapValues(features, (options) => { + return mapValues(features, options => { if (!options.features) { options = { - features: [options] + features: [options], }; } const plugin = {}; - environments.forEach((env) => { + environments.forEach(env => { const version = getLowestImplementedVersion(options, env); if (version !== null) { plugin[env] = version; @@ -194,10 +199,10 @@ const generateData = (environments, features) => { fs.writeFileSync( path.join(__dirname, "../data/plugins.json"), - JSON.stringify(generateData(environments, pluginFeatures), null, 2) + "\n" + JSON.stringify(generateData(environments, pluginFeatures), null, 2) + "\n", ); fs.writeFileSync( path.join(__dirname, "../data/built-ins.json"), - JSON.stringify(generateData(environments, builtInFeatures), null, 2) + "\n" + JSON.stringify(generateData(environments, builtInFeatures), null, 2) + "\n", ); diff --git a/experimental/babel-preset-env/src/default-includes.js b/experimental/babel-preset-env/src/default-includes.js index 77477580e7..80d5665fbf 100644 --- a/experimental/babel-preset-env/src/default-includes.js +++ b/experimental/babel-preset-env/src/default-includes.js @@ -1,5 +1 @@ -export default [ - "web.timers", - "web.immediate", - "web.dom.iterable" -]; +export default ["web.timers", "web.immediate", "web.dom.iterable"]; diff --git a/experimental/babel-preset-env/src/index.js b/experimental/babel-preset-env/src/index.js index ae26ecf8e3..a4f5f31fc5 100644 --- a/experimental/babel-preset-env/src/index.js +++ b/experimental/babel-preset-env/src/index.js @@ -2,9 +2,12 @@ import browserslist from "browserslist"; import builtInsList from "../data/built-ins.json"; import defaultInclude from "./default-includes"; import moduleTransformations from "./module-transformations"; -import normalizeOptions, { getElectronChromeVersion } from "./normalize-options.js"; +import normalizeOptions, { + getElectronChromeVersion, +} from "./normalize-options.js"; import pluginList from "../data/plugins.json"; -import transformPolyfillRequirePlugin from "./transform-polyfill-require-plugin"; +import transformPolyfillRequirePlugin + from "./transform-polyfill-require-plugin"; /** * Determine if a transformation is required @@ -21,28 +24,33 @@ export const isPluginRequired = (supportedEnvironments, plugin) => { const targetEnvironments = Object.keys(supportedEnvironments); - if (targetEnvironments.length === 0) { return true; } + if (targetEnvironments.length === 0) { + return true; + } - const isRequiredForEnvironments = targetEnvironments - .filter((environment) => { - // Feature is not implemented in that environment - if (!plugin[environment]) { return true; } + const isRequiredForEnvironments = targetEnvironments.filter(environment => { + // Feature is not implemented in that environment + if (!plugin[environment]) { + return true; + } - const lowestImplementedVersion = plugin[environment]; - const lowestTargetedVersion = supportedEnvironments[environment]; + const lowestImplementedVersion = plugin[environment]; + const lowestTargetedVersion = supportedEnvironments[environment]; - if (typeof lowestTargetedVersion === "string") { - throw new Error(`Target version must be a number, - '${lowestTargetedVersion}' was given for '${environment}'`); - } + if (typeof lowestTargetedVersion === "string") { + throw new Error( + `Target version must be a number, + '${lowestTargetedVersion}' was given for '${environment}'`, + ); + } - return lowestTargetedVersion < lowestImplementedVersion; - }); + return lowestTargetedVersion < lowestImplementedVersion; + }); return isRequiredForEnvironments.length > 0 ? true : false; }; -const isBrowsersQueryValid = (browsers) => { +const isBrowsersQueryValid = browsers => { return typeof browsers === "string" || Array.isArray(browsers); }; @@ -52,46 +60,55 @@ const browserNameMap = { firefox: "firefox", ie: "ie", ios_saf: "ios", - safari: "safari" + safari: "safari", }; -const getLowestVersions = (browsers) => { - return browsers.reduce((all, browser) => { - const [browserName, browserVersion] = browser.split(" "); - const normalizedBrowserName = browserNameMap[browserName]; - const parsedBrowserVersion = parseInt(browserVersion); - if (normalizedBrowserName && !isNaN(parsedBrowserVersion)) { - all[normalizedBrowserName] = Math.min(all[normalizedBrowserName] || Infinity, parsedBrowserVersion); - } - return all; - }, {}); +const getLowestVersions = browsers => { + return browsers.reduce( + (all, browser) => { + const [browserName, browserVersion] = browser.split(" "); + const normalizedBrowserName = browserNameMap[browserName]; + const parsedBrowserVersion = parseInt(browserVersion); + if (normalizedBrowserName && !isNaN(parsedBrowserVersion)) { + all[normalizedBrowserName] = Math.min( + all[normalizedBrowserName] || Infinity, + parsedBrowserVersion, + ); + } + return all; + }, + {}, + ); }; const mergeBrowsers = (fromQuery, fromTarget) => { - return Object.keys(fromTarget).reduce((queryObj, targKey) => { - if (targKey !== "browsers") { - queryObj[targKey] = fromTarget[targKey]; - } - return queryObj; - }, fromQuery); + return Object.keys(fromTarget).reduce( + (queryObj, targKey) => { + if (targKey !== "browsers") { + queryObj[targKey] = fromTarget[targKey]; + } + return queryObj; + }, + fromQuery, + ); }; export const getCurrentNodeVersion = () => { return parseFloat(process.versions.node); }; -const _extends = Object.assign || function (target) { - for (let i = 1; i < arguments.length; i++) { - const source = arguments[i]; - for (const key in source) { - if (Object.prototype.hasOwnProperty.call(source, key)) { - target[key] = source[key]; +const _extends = Object.assign || + function(target) { + for (let i = 1; i < arguments.length; i++) { + const source = arguments[i]; + for (const key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } } } - } - return target; -}; - + return target; + }; export const getTargets = (targets = {}) => { const targetOpts = _extends({}, targets); @@ -127,13 +144,15 @@ let hasBeenLogged = false; const logPlugin = (plugin, targets, list) => { const envList = list[plugin] || {}; - const filteredList = Object.keys(targets) - .reduce((a, b) => { - if (!envList[b] || targets[b] < envList[b]) { - a[b] = targets[b]; - } - return a; - }, {}); + const filteredList = Object.keys(targets).reduce( + (a, b) => { + if (!envList[b] || targets[b] < envList[b]) { + a[b] = targets[b]; + } + return a; + }, + {}, + ); const logStr = ` ${plugin} ${JSON.stringify(filteredList)}`; console.log(logStr); }; @@ -147,7 +166,7 @@ const filterItem = (targets, exclusions, list, item) => { return isRequired && notExcluded; }; -const getBuiltInTargets = (targets) => { +const getBuiltInTargets = targets => { const builtInTargets = _extends({}, targets); if (builtInTargets.uglify != null) { delete builtInTargets.uglify; @@ -155,10 +174,10 @@ const getBuiltInTargets = (targets) => { return builtInTargets; }; -export const transformIncludesAndExcludes = (opts) => ({ +export const transformIncludesAndExcludes = opts => ({ all: opts, - plugins: opts.filter((opt) => !opt.match(/^(es\d+|web)\./)), - builtIns: opts.filter((opt) => opt.match(/^(es\d+|web)\./)) + plugins: opts.filter(opt => !opt.match(/^(es\d+|web)\./)), + builtIns: opts.filter(opt => opt.match(/^(es\d+|web)\./)), }); export default function buildPreset(context, opts = {}) { @@ -169,8 +188,12 @@ export default function buildPreset(context, opts = {}) { const include = transformIncludesAndExcludes(validatedOptions.include); const exclude = transformIncludesAndExcludes(validatedOptions.exclude); - - const filterPlugins = filterItem.bind(null, targets, exclude.plugins, pluginList); + const filterPlugins = filterItem.bind( + null, + targets, + exclude.plugins, + pluginList, + ); const transformations = Object.keys(pluginList) .filter(filterPlugins) .concat(include.plugins); @@ -179,7 +202,12 @@ export default function buildPreset(context, opts = {}) { let polyfillTargets; if (useBuiltIns) { polyfillTargets = getBuiltInTargets(targets); - const filterBuiltIns = filterItem.bind(null, polyfillTargets, exclude.builtIns, builtInsList); + const filterBuiltIns = filterItem.bind( + null, + polyfillTargets, + exclude.builtIns, + builtInsList, + ); polyfills = Object.keys(builtInsList) .concat(defaultInclude) .filter(filterBuiltIns) @@ -193,32 +221,36 @@ export default function buildPreset(context, opts = {}) { console.log(JSON.stringify(targets, null, 2)); console.log(`\nModules transform: ${moduleType}`); console.log("\nUsing plugins:"); - transformations.forEach((transform) => { + transformations.forEach(transform => { logPlugin(transform, targets, pluginList); }); if (useBuiltIns && polyfills.length) { console.log("\nUsing polyfills:"); - polyfills.forEach((polyfill) => { + polyfills.forEach(polyfill => { logPlugin(polyfill, polyfillTargets, builtInsList); }); } } const regenerator = transformations.indexOf("transform-regenerator") >= 0; - const modulePlugin = moduleType !== false && moduleTransformations[moduleType]; + const modulePlugin = moduleType !== false && + moduleTransformations[moduleType]; const plugins = []; modulePlugin && plugins.push([require(`babel-plugin-${modulePlugin}`), { loose }]); - plugins.push(...transformations.map((pluginName) => - [require(`babel-plugin-${pluginName}`), { loose }] - )); + plugins.push( + ...transformations.map(pluginName => [ + require(`babel-plugin-${pluginName}`), + { loose }, + ]), + ); useBuiltIns && plugins.push([transformPolyfillRequirePlugin, { polyfills, regenerator }]); return { - plugins + plugins, }; } diff --git a/experimental/babel-preset-env/src/module-transformations.js b/experimental/babel-preset-env/src/module-transformations.js index f966f01a18..1a4b6106c9 100644 --- a/experimental/babel-preset-env/src/module-transformations.js +++ b/experimental/babel-preset-env/src/module-transformations.js @@ -1,6 +1,6 @@ export default { - "amd": "transform-es2015-modules-amd", - "commonjs": "transform-es2015-modules-commonjs", - "systemjs": "transform-es2015-modules-systemjs", - "umd": "transform-es2015-modules-umd" + amd: "transform-es2015-modules-amd", + commonjs: "transform-es2015-modules-commonjs", + systemjs: "transform-es2015-modules-systemjs", + umd: "transform-es2015-modules-umd", }; diff --git a/experimental/babel-preset-env/src/normalize-options.js b/experimental/babel-preset-env/src/normalize-options.js index 0c7ba71711..d0b982b068 100644 --- a/experimental/babel-preset-env/src/normalize-options.js +++ b/experimental/babel-preset-env/src/normalize-options.js @@ -7,19 +7,19 @@ import pluginFeatures from "../data/plugin-features"; const validIncludesAndExcludes = [ ...Object.keys(pluginFeatures), - ...Object.keys(moduleTransformations).map((m) => moduleTransformations[m]), + ...Object.keys(moduleTransformations).map(m => moduleTransformations[m]), ...Object.keys(builtInsList), - ...defaultInclude + ...defaultInclude, ]; export const validateIncludesAndExcludes = (opts = [], type) => { invariant( Array.isArray(opts), - `Invalid Option: The '${type}' option must be an Array of plugins/built-ins` + `Invalid Option: The '${type}' option must be an Array of plugins/built-ins`, ); const unknownOpts = []; - opts.forEach((opt) => { + opts.forEach(opt => { if (validIncludesAndExcludes.indexOf(opt) === -1) { unknownOpts.push(opt); } @@ -28,21 +28,19 @@ export const validateIncludesAndExcludes = (opts = [], type) => { invariant( unknownOpts.length === 0, `Invalid Option: The plugins/built-ins '${unknownOpts}' passed to the '${type}' option are not - valid. Please check data/[plugin-features|built-in-features].js in babel-preset-env` + valid. Please check data/[plugin-features|built-in-features].js in babel-preset-env`, ); return opts; }; export const checkDuplicateIncludeExcludes = (include = [], exclude = []) => { - const duplicates = include.filter( - (opt) => exclude.indexOf(opt) >= 0 - ); + const duplicates = include.filter(opt => exclude.indexOf(opt) >= 0); invariant( duplicates.length === 0, `Invalid Option: The plugins/built-ins '${duplicates}' were found in both the "include" and - "exclude" options.` + "exclude" options.`, ); }; @@ -52,7 +50,7 @@ export const checkDuplicateIncludeExcludes = (include = [], exclude = []) => { export const validateLooseOption = (looseOpt = false) => { invariant( typeof looseOpt === "boolean", - "Invalid Option: The 'loose' option must be a boolean." + "Invalid Option: The 'loose' option must be a boolean.", ); return looseOpt; @@ -60,20 +58,24 @@ export const validateLooseOption = (looseOpt = false) => { export const validateModulesOption = (modulesOpt = "commonjs") => { invariant( - modulesOpt === false || Object.keys(moduleTransformations).indexOf(modulesOpt) > -1, + modulesOpt === false || + Object.keys(moduleTransformations).indexOf(modulesOpt) > -1, `Invalid Option: The 'modules' option must be either 'false' to indicate no modules, or a - module type which can be be one of: 'commonjs' (default), 'amd', 'umd', 'systemjs'.` + module type which can be be one of: 'commonjs' (default), 'amd', 'umd', 'systemjs'.`, ); return modulesOpt; }; -export const getElectronChromeVersion = (electronVersion) => { - const electronChromeVersion = parseInt(electronToChromium(electronVersion), 10); +export const getElectronChromeVersion = electronVersion => { + const electronChromeVersion = parseInt( + electronToChromium(electronVersion), + 10, + ); invariant( !!electronChromeVersion, - `Electron version ${electronVersion} is either too old or too new` + `Electron version ${electronVersion} is either too old or too new`, ); return electronChromeVersion; @@ -89,6 +91,6 @@ export default function normalizeOptions(opts) { loose: validateLooseOption(opts.loose), moduleType: validateModulesOption(opts.modules), targets: opts.targets, - useBuiltIns: opts.useBuiltIns + useBuiltIns: opts.useBuiltIns, }; } diff --git a/experimental/babel-preset-env/src/transform-polyfill-require-plugin.js b/experimental/babel-preset-env/src/transform-polyfill-require-plugin.js index 8ddbea3e1a..6ca42eb49c 100644 --- a/experimental/babel-preset-env/src/transform-polyfill-require-plugin.js +++ b/experimental/babel-preset-env/src/transform-polyfill-require-plugin.js @@ -2,7 +2,7 @@ function isPolyfillSource(value) { return value === "babel-polyfill" || value === "core-js"; } -export default function ({ types: t }) { +export default function({ types: t }) { function createImportDeclaration(polyfill) { const declar = t.importDeclaration([], t.stringLiteral(polyfill)); declar._blockHoist = 3; @@ -11,12 +11,7 @@ export default function ({ types: t }) { function createRequireStatement(polyfill) { return t.expressionStatement( - t.callExpression( - t.identifier("require"), - [ - t.stringLiteral(polyfill) - ] - ) + t.callExpression(t.identifier("require"), [t.stringLiteral(polyfill)]), ); } @@ -44,19 +39,21 @@ export default function ({ types: t }) { function createImports(polyfills, requireType, regenerator) { const imports = polyfills - .filter((el, i, arr) => arr.indexOf(el) === i) - .map((polyfill) => createImport(polyfill, requireType, true)); + .filter((el, i, arr) => arr.indexOf(el) === i) + .map(polyfill => createImport(polyfill, requireType, true)); return [ ...imports, - regenerator && createImport("regenerator-runtime/runtime", requireType) + regenerator && createImport("regenerator-runtime/runtime", requireType), ].filter(Boolean); } const isPolyfillImport = { ImportDeclaration(path, state) { - if (path.node.specifiers.length === 0 && - isPolyfillSource(path.node.source.value)) { + if ( + path.node.specifiers.length === 0 && + isPolyfillSource(path.node.source.value) + ) { this.numPolyfillImports++; if (this.numPolyfillImports > 1) { path.remove(); @@ -64,19 +61,21 @@ export default function ({ types: t }) { } path.replaceWithMultiple( - createImports(state.opts.polyfills, "import", state.opts.regenerator) + createImports(state.opts.polyfills, "import", state.opts.regenerator), ); } }, Program(path, state) { if (!state.opts.polyfills) { - throw path.buildCodeFrameError(` + throw path.buildCodeFrameError( + ` There was an issue in "babel-preset-env" such that the "polyfills" option was not correctly passed to the "transform-polyfill-require" plugin -`); +`, + ); } - path.get("body").forEach((bodyPath) => { + path.get("body").forEach(bodyPath => { if (isRequire(bodyPath)) { this.numPolyfillImports++; if (this.numPolyfillImports > 1) { @@ -85,11 +84,15 @@ to the "transform-polyfill-require" plugin } bodyPath.replaceWithMultiple( - createImports(state.opts.polyfills, "require", state.opts.regenerator) + createImports( + state.opts.polyfills, + "require", + state.opts.regenerator, + ), ); } }); - } + }, }; return { @@ -97,6 +100,6 @@ to the "transform-polyfill-require" plugin visitor: isPolyfillImport, pre() { this.numPolyfillImports = 0; - } + }, }; } diff --git a/experimental/babel-preset-env/test/debug-fixtures.js b/experimental/babel-preset-env/test/debug-fixtures.js index 76fcbf1509..6208f8e371 100644 --- a/experimental/babel-preset-env/test/debug-fixtures.js +++ b/experimental/babel-preset-env/test/debug-fixtures.js @@ -14,8 +14,8 @@ const clear = () => { process.chdir(tmpLoc); }; -const saveInFiles = (files) => { - Object.keys(files).forEach((filename) => { +const saveInFiles = files => { + Object.keys(files).forEach(filename => { const content = files[filename]; fs.outputFileSync(filename, content); }); @@ -41,10 +41,10 @@ const assertTest = (stdout, stderr, opts) => { } }; -const buildTest = (opts) => { +const buildTest = opts => { const binLoc = path.join(process.cwd(), "node_modules/.bin/babel"); - return (callback) => { + return callback => { clear(); saveInFiles(opts.inFiles); @@ -56,8 +56,8 @@ const buildTest = (opts) => { let stdout = ""; let stderr = ""; - spawn.stdout.on("data", (chunk) => stdout += chunk); - spawn.stderr.on("data", (chunk) => stderr += chunk); + spawn.stdout.on("data", chunk => stdout += chunk); + spawn.stderr.on("data", chunk => stderr += chunk); spawn.on("close", () => { let err; @@ -74,7 +74,7 @@ const buildTest = (opts) => { }; describe("debug output", () => { - fs.readdirSync(fixtureLoc).forEach((testName) => { + fs.readdirSync(fixtureLoc).forEach(testName => { const testLoc = path.join(fixtureLoc, testName); const opts = { @@ -91,7 +91,9 @@ describe("debug output", () => { const optionsLoc = path.join(testLoc, "options.json"); if (!fs.existsSync(optionsLoc)) { - throw new Error(`Debug test '${testName}' is missing an options.json file`); + throw new Error( + `Debug test '${testName}' is missing an options.json file`, + ); } opts.inFiles = { diff --git a/experimental/babel-preset-env/test/index.spec.js b/experimental/babel-preset-env/test/index.spec.js index f3b82ddc6c..9bdef6fb6e 100644 --- a/experimental/babel-preset-env/test/index.spec.js +++ b/experimental/babel-preset-env/test/index.spec.js @@ -6,104 +6,131 @@ const { versions: electronToChromiumData } = require("electron-to-chromium"); describe("babel-preset-env", () => { describe("getTargets", () => { - it("should return the current node version with option 'current'", function() { - assert.deepEqual(babelPresetEnv.getTargets({ - node: true - }), { - node: parseFloat(process.versions.node) - }); + it("should return the current node version with option 'current'", () => { + assert.deepEqual( + babelPresetEnv.getTargets({ + node: true, + }), + { + node: parseFloat(process.versions.node), + }, + ); - assert.deepEqual(babelPresetEnv.getTargets({ - node: "current" - }), { - node: parseFloat(process.versions.node) - }); + assert.deepEqual( + babelPresetEnv.getTargets({ + node: "current", + }), + { + node: parseFloat(process.versions.node), + }, + ); }); }); describe("getTargets + electron", () => { - it("should work with a string", function() { - assert.deepEqual(babelPresetEnv.getTargets({ - electron: "1.0" - }), { - chrome: 49 - }); + it("should work with a string", () => { + assert.deepEqual( + babelPresetEnv.getTargets({ + electron: "1.0", + }), + { + chrome: 49, + }, + ); }); - it("should work with a number", function() { - assert.deepEqual(babelPresetEnv.getTargets({ - electron: 1.0 - }), { - chrome: 49 - }); + it("should work with a number", () => { + assert.deepEqual( + babelPresetEnv.getTargets({ + electron: 1.0, + }), + { + chrome: 49, + }, + ); }); - - it("should preserve lower Chrome number if Electron version is more recent", function() { - assert.deepEqual(babelPresetEnv.getTargets({ - electron: 1.4, - chrome: 50 - }), { - chrome: 50 - }); + it("should preserve lower Chrome number if Electron version is more recent", () => { + assert.deepEqual( + babelPresetEnv.getTargets({ + electron: 1.4, + chrome: 50, + }), + { + chrome: 50, + }, + ); }); - it("should overwrite Chrome number if Electron version is older", function() { - assert.deepEqual(babelPresetEnv.getTargets({ - electron: 1.0, - chrome: 50 - }), { - chrome: 49 - }); + it("should overwrite Chrome number if Electron version is older", () => { + assert.deepEqual( + babelPresetEnv.getTargets({ + electron: 1.0, + chrome: 50, + }), + { + chrome: 49, + }, + ); }); - Object.keys(electronToChromiumData).forEach((electronVersion) => { - it(`"should work for Electron: ${electronVersion}`, function() { - assert.deepEqual(babelPresetEnv.getTargets({ - electron: electronVersion - }), { - chrome: electronToChromiumData[electronVersion] - }); + Object.keys(electronToChromiumData).forEach(electronVersion => { + it(`"should work for Electron: ${electronVersion}`, () => { + assert.deepEqual( + babelPresetEnv.getTargets({ + electron: electronVersion, + }), + { + chrome: electronToChromiumData[electronVersion], + }, + ); }); }); it("should error if electron version is invalid", () => { - const fixtures = [ - "0.19", - 0.19, - 999, - "999", - ]; + const fixtures = ["0.19", 0.19, 999, "999"]; - fixtures.forEach((electronVersion) => { - assert.throws(() => { - babelPresetEnv.getTargets({ - electron: electronVersion, - }); - }, Error); + fixtures.forEach(electronVersion => { + assert.throws( + () => { + babelPresetEnv.getTargets({ + electron: electronVersion, + }); + }, + Error, + ); }); }); }); describe("getTargets + uglify", () => { it("should work with `true`", function() { - assert.deepEqual(babelPresetEnv.getTargets({ - uglify: true - }), { - uglify: true - }); + assert.deepEqual( + babelPresetEnv.getTargets({ + uglify: true, + }), + { + uglify: true, + }, + ); }); it("should ignore `false`", function() { - assert.deepEqual(babelPresetEnv.getTargets({ - uglify: false - }), {}); + assert.deepEqual( + babelPresetEnv.getTargets({ + uglify: false, + }), + {}, + ); }); it("should ignore `null`", function() { - assert.deepEqual(babelPresetEnv.getTargets({ - uglify: null - }), {}); + assert.deepEqual( + babelPresetEnv.getTargets({ + uglify: null, + }), + {}, + ); }); }); @@ -122,13 +149,13 @@ describe("babel-preset-env", () => { }; targets = { - "chrome": Number.MAX_SAFE_INTEGER, - "firefox": Number.MAX_SAFE_INTEGER + chrome: Number.MAX_SAFE_INTEGER, + firefox: Number.MAX_SAFE_INTEGER, }; assert(babelPresetEnv.isPluginRequired(targets, plugin) === false); targets = { - "edge": 12, + edge: 12, }; assert(babelPresetEnv.isPluginRequired(plugin, plugin) === true); }); @@ -138,7 +165,7 @@ describe("babel-preset-env", () => { chrome: 49, }; const targets = { - "chrome": Number.MAX_SAFE_INTEGER, + chrome: Number.MAX_SAFE_INTEGER, }; assert(babelPresetEnv.isPluginRequired(targets, plugin) === false); }); @@ -148,7 +175,7 @@ describe("babel-preset-env", () => { chrome: 49, }; const targets = { - "chrome": 49, + chrome: 49, }; assert(babelPresetEnv.isPluginRequired(targets, plugin) === false); }); @@ -158,7 +185,7 @@ describe("babel-preset-env", () => { chrome: 50, }; const targets = { - "chrome": 49, + chrome: 49, }; assert(babelPresetEnv.isPluginRequired(targets, plugin) === true); }); @@ -168,7 +195,7 @@ describe("babel-preset-env", () => { chrome: 49, }; const targets = { - "browsers": "chrome > 50" + browsers: "chrome > 50", }; assert(babelPresetEnv.isPluginRequired(targets, plugin) === false); }); @@ -178,7 +205,7 @@ describe("babel-preset-env", () => { chrome: 52, }; const targets = { - "browsers": "chrome > 50" + browsers: "chrome > 50", }; assert(babelPresetEnv.isPluginRequired(targets, plugin) === true); }); @@ -189,7 +216,7 @@ describe("babel-preset-env", () => { }; const targets = { browsers: "last 2 Chrome versions", - chrome: 44 + chrome: 44, }; assert(babelPresetEnv.isPluginRequired(targets, plugin) === true); @@ -197,11 +224,11 @@ describe("babel-preset-env", () => { it("returns true if uglify is specified as a target", () => { const plugin = { - chrome: 50 + chrome: 50, }; const targets = { chrome: 55, - uglify: true + uglify: true, }; assert(babelPresetEnv.isPluginRequired(targets, plugin) === true); @@ -209,53 +236,61 @@ describe("babel-preset-env", () => { it("doesn't throw when specifying a decimal for node", () => { const plugin = { - node: 6 + node: 6, }; const targets = { - "node": 6.5 + node: 6.5, }; - assert.doesNotThrow(() => { - babelPresetEnv.isPluginRequired(targets, plugin); - }, Error); + assert.doesNotThrow( + () => { + babelPresetEnv.isPluginRequired(targets, plugin); + }, + Error, + ); }); it("will throw if target version is not a number", () => { const plugin = { - "node": 6, + node: 6, }; const targets = { - "node": "6.5", + node: "6.5", }; - assert.throws(() => { - babelPresetEnv.isPluginRequired(targets, plugin); - }, Error); + assert.throws( + () => { + babelPresetEnv.isPluginRequired(targets, plugin); + }, + Error, + ); }); }); - describe("transformIncludesAndExcludes", function() { - it("should return in transforms array", function() { + describe("transformIncludesAndExcludes", () => { + it("should return in transforms array", () => { assert.deepEqual( - babelPresetEnv.transformIncludesAndExcludes(["transform-es2015-arrow-functions"]), + babelPresetEnv.transformIncludesAndExcludes([ + "transform-es2015-arrow-functions", + ]), { all: ["transform-es2015-arrow-functions"], plugins: ["transform-es2015-arrow-functions"], - builtIns: [] - } + builtIns: [], + }, ); }); - it("should return in built-ins array", function() { + it("should return in built-ins array", () => { assert.deepEqual( babelPresetEnv.transformIncludesAndExcludes(["es6.map"]), { all: ["es6.map"], plugins: [], - builtIns: ["es6.map"] - } + builtIns: ["es6.map"], + }, ); }); }); diff --git a/experimental/babel-preset-env/test/normalize-options.spec.js b/experimental/babel-preset-env/test/normalize-options.spec.js index 3dbf16c9f6..e75f26e3df 100644 --- a/experimental/babel-preset-env/test/normalize-options.spec.js +++ b/experimental/babel-preset-env/test/normalize-options.spec.js @@ -7,7 +7,7 @@ const { checkDuplicateIncludeExcludes, validateIncludesAndExcludes, validateLooseOption, - validateModulesOption + validateModulesOption, } = normalizeOptions; describe("normalize-options", () => { @@ -25,29 +25,35 @@ describe("normalize-options", () => { }); it("array option is invalid", () => { - assert.throws(() => { - validateLooseOption([]); - }, Error); + assert.throws( + () => { + validateLooseOption([]); + }, + Error, + ); }); }); describe("checkDuplicateIncludeExcludes", function() { it("should throw if duplicate names in both", function() { - assert.throws(() => { - checkDuplicateIncludeExcludes( - ["transform-regenerator", "map"], - ["transform-regenerator", "map"] - ); - }, Error); + assert.throws( + () => { + checkDuplicateIncludeExcludes( + ["transform-regenerator", "map"], + ["transform-regenerator", "map"], + ); + }, + Error, + ); }); it("should not throw if no duplicate names in both", function() { - assert.doesNotThrow(() => { - checkDuplicateIncludeExcludes( - ["transform-regenerator"], - ["map"] - ); - }, Error); + assert.doesNotThrow( + () => { + checkDuplicateIncludeExcludes(["transform-regenerator"], ["map"]); + }, + Error, + ); }); }); @@ -77,15 +83,21 @@ describe("normalize-options", () => { }); it("`true` option is invalid", () => { - assert.throws(() => { - validateModulesOption(true); - }, Error); + assert.throws( + () => { + validateModulesOption(true); + }, + Error, + ); }); it("array option is invalid", () => { - assert.throws(() => { - assert(validateModulesOption([])); - }, Error); + assert.throws( + () => { + assert(validateModulesOption([])); + }, + Error, + ); }); }); describe("validateIncludesAndExcludes", function() { @@ -93,9 +105,12 @@ describe("normalize-options", () => { assert.deepEqual(validateIncludesAndExcludes(), []); }); it("should throw if not in features", function() { - assert.throws(() => { - validateIncludesAndExcludes(["asdf"]); - }, Error); + assert.throws( + () => { + validateIncludesAndExcludes(["asdf"]); + }, + Error, + ); }); }); }); diff --git a/experimental/babel-preset-env/yarn.lock b/experimental/babel-preset-env/yarn.lock index 617f09fe61..fb4ed35e8d 100644 --- a/experimental/babel-preset-env/yarn.lock +++ b/experimental/babel-preset-env/yarn.lock @@ -57,7 +57,7 @@ amdefine@>=0.0.4: version "1.0.1" resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" -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" @@ -69,6 +69,12 @@ 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.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.0.0.tgz#5404e93a544c4fec7f048262977bebfe3155e0c1" + dependencies: + color-convert "^1.0.0" + ansidiff@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/ansidiff/-/ansidiff-1.0.0.tgz#d4a3ed89ab1670f20c097def759f34d944478aab" @@ -82,6 +88,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" @@ -164,6 +174,14 @@ 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.8.18: + version "0.8.18" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.8.18.tgz#c8b98574898e8914e9d8de74b947564a9fe929af" + +ast-types@0.9.4: + version "0.9.4" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.9.4.tgz#410d1f81890aeb8e0a38621558ba5869ae53c91b" + ast-types@0.9.5: version "0.9.5" resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.9.5.tgz#1a660a09945dbceb1f9c9cbb715002617424e04a" @@ -211,17 +229,17 @@ babel-cli@7.0.0-alpha.1: optionalDependencies: chokidar "^1.6.1" -babel-code-frame@7.0.0-alpha.1: - version "7.0.0-alpha.1" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-7.0.0-alpha.1.tgz#d72908f1401d27e1f75eb872d4d8553f4c5bfcd0" +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: chalk "^1.1.0" esutils "^2.0.2" js-tokens "^3.0.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" +babel-code-frame@7.0.0-alpha.1: + version "7.0.0-alpha.1" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-7.0.0-alpha.1.tgz#d72908f1401d27e1f75eb872d4d8553f4c5bfcd0" dependencies: chalk "^1.1.0" esutils "^2.0.2" @@ -1283,6 +1301,10 @@ babel-types@^6.15.0, babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.22 lodash "^4.2.0" to-fast-properties "^1.0.1" +babylon@6.15.0: + version "6.15.0" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.15.0.tgz#ba65cfa1a80e1759b0e89fb562e27dccae70348e" + babylon@7.0.0-beta.4: version "7.0.0-beta.4" resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.4.tgz#82db799d2667f61bbaf34456dbfa91c37613459d" @@ -1414,7 +1436,7 @@ chai@^3.0.0, chai@^3.5.0: 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: +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: @@ -1451,16 +1473,31 @@ chokidar@^1.6.1: optionalDependencies: fsevents "^1.0.0" +ci-info@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.0.0.tgz#dc5285f2b4e251821683681c381c3388f46ec534" + circular-json@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.1.tgz#be8b36aefccde8b3ca7aa2d6afc07a37242c0d2d" -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: restore-cursor "^1.0.1" +cli-spinners@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-0.1.2.tgz#bb764d88e185fb9e1e6a2a1f19772318f605e31c" + +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-width@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.1.0.tgz#b234ca209b29ef66fc518d9b98d5847b00edf00a" @@ -1517,13 +1554,27 @@ codecov@^1.0.1: request ">=2.42.0" urlgrey ">=0.4.0" +color-convert@^1.0.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a" + dependencies: + color-name "^1.1.1" + +color-name@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.1.tgz#4b1415304cf50028ea81643643bd82ea05803689" + +colors@>=0.6.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" + combined-stream@^1.0.5, combined-stream@~1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" dependencies: delayed-stream "~1.0.0" -commander@2.9.0, commander@2.9.x, commander@^2.5.0, commander@^2.8.1: +commander@2.9.0, commander@2.9.x, commander@^2.5.0, 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: @@ -1609,6 +1660,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" + cross-spawn@^4: version "4.0.2" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41" @@ -1616,6 +1680,14 @@ cross-spawn@^4: lru-cache "^4.0.1" which "^1.2.9" +cross-spawn@^5.0.1: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + cryptiles@2.x.x: version "2.0.5" resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" @@ -1657,6 +1729,10 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" +date-fns@^1.27.2: + version "1.28.0" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.28.0.tgz#3b12f54b66467807bb95e5930caf7bfb4170bc1a" + date-now@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" @@ -1767,7 +1843,11 @@ dom-serializer@0, dom-serializer@~0.1.0: domelementtype "~1.1.1" entities "~1.1.1" -domelementtype@1, domelementtype@~1.1.1: +domelementtype@1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" + +domelementtype@~1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" @@ -1794,6 +1874,10 @@ electron-to-chromium@^1.1.0, electron-to-chromium@^1.2.5, electron-to-chromium@^ version "1.2.6" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.2.6.tgz#f38ad51d1919b06bc07275c62629db803ddca05a" +elegant-spinner@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" + entities@1.0: version "1.0.0" resolved "https://registry.yarnpkg.com/entities/-/entities-1.0.0.tgz#b2987aa3821347fcde642b24fdfc9e4fb712bf26" @@ -2034,7 +2118,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" @@ -2051,6 +2135,18 @@ execSync@1.0.2: dependencies: temp "~0.5.1" +execa@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.6.0.tgz#934fc9f04a9febb4d4b449d976e92cfd95ef4f6e" + 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" @@ -2089,7 +2185,7 @@ fast-levenshtein@~2.0.4: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" -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: @@ -2125,6 +2221,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" @@ -2141,6 +2241,14 @@ flat-cache@^1.2.1: graceful-fs "^4.1.2" write "^0.2.1" +flow-parser@0.40.0: + version "0.40.0" + resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.40.0.tgz#b3444742189093323c4319c4fe9d35391f46bcbc" + dependencies: + ast-types "0.8.18" + colors ">=0.6.2" + minimist ">=0.2.0" + for-in@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" @@ -2244,6 +2352,14 @@ get-caller-file@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" +get-stdin@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398" + +get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + getpass@^0.1.1: version "0.1.6" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6" @@ -2284,7 +2400,7 @@ glob@7.0.5: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.0.6, glob@^7.1.1: +glob@7.1.1, glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.0.6, glob@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" dependencies: @@ -2413,6 +2529,15 @@ http-signature@~1.1.0: jsprim "^1.2.2" sshpk "^1.7.0" +husky@^0.13.2: + version "0.13.2" + resolved "https://registry.yarnpkg.com/husky/-/husky-0.13.2.tgz#9dcf212f88e61dba36f17be1a202ed61ff6c0661" + 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.5: version "0.4.15" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb" @@ -2425,6 +2550,16 @@ imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" +indent-string@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" + dependencies: + repeating "^2.0.0" + +indent-string@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.1.0.tgz#08ff4334603388399b329e6b9538dc7a3cf5de7d" + inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -2496,6 +2631,12 @@ is-callable@^1.1.1, is-callable@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" +is-ci@^1.0.9: + version "1.0.10" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.0.10.tgz#f739336b2632365061a9d48270cd56ae3369318e" + dependencies: + ci-info "^1.0.0" + is-date-object@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" @@ -2579,6 +2720,10 @@ is-primitive@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" +is-promise@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" + is-property@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" @@ -2595,6 +2740,10 @@ is-resolvable@^1.0.0: dependencies: tryit "^1.0.1" +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + is-symbol@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" @@ -2677,6 +2826,22 @@ istanbul-reports@^1.0.0: dependencies: handlebars "^4.0.3" +jest-matcher-utils@^19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-19.0.0.tgz#5ecd9b63565d2b001f61fbf7ec4c7f537964564d" + dependencies: + chalk "^1.1.3" + pretty-format "^19.0.0" + +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" + jodid25519@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967" @@ -2687,7 +2852,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.4.3, js-yaml@^3.5.1: version "3.8.2" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.2.tgz#02d3e2c0f6beab20248d412c352203827d786721" dependencies: @@ -2813,6 +2978,10 @@ lcid@^1.0.0: dependencies: invert-kv "^1.0.0" +leven@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" + levn@^0.3.0, levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" @@ -2820,6 +2989,65 @@ 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.3.1" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-3.3.1.tgz#b725d98a2be1f82cb228069fab682f503c95234d" + 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" + which "^1.2.11" + +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" @@ -2889,6 +3117,19 @@ lodash@^4.0.0, lodash@^4.1.0, lodash@^4.15.0, lodash@^4.17.4, lodash@^4.2.0, lod 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" @@ -2960,7 +3201,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.2.0: +minimist@1.2.0, minimist@>=0.2.0, minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" @@ -3035,10 +3276,34 @@ normalize-package-data@^2.3.2: 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.0.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.0.1.tgz#47886ac1662760d4261b7d979d241709d3ce3f7a" +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@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + 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.1: version "4.0.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f" @@ -3184,6 +3449,15 @@ optionator@^0.8.1, 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-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" @@ -3206,6 +3480,10 @@ output-file-sync@^1.1.0: mkdirp "^0.5.1" object-assign "^4.1.0" +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + parse-glob@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" @@ -3239,6 +3517,10 @@ path-is-inside@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" +path-key@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + path-parse@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" @@ -3287,6 +3569,27 @@ preserve@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" +prettier@^0.22.0: + version "0.22.0" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-0.22.0.tgz#7b37c4480d0858180407e5a8e13f0f47da7385d2" + dependencies: + ast-types "0.9.4" + babel-code-frame "6.22.0" + babylon "6.15.0" + chalk "1.1.3" + esutils "2.0.2" + flow-parser "0.40.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" + dependencies: + ansi-styles "^3.0.0" + private@^0.1.6, private@~0.1.5: version "0.1.7" resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1" @@ -3533,6 +3836,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" @@ -3603,6 +3910,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.2.0" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.2.0.tgz#db537de8767c05fa73721587a29e0085307d318b" + 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" @@ -3627,6 +3940,16 @@ set-immediate-shim@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + shelljs@0.3.x: version "0.3.0" resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.3.0.tgz#3596e6307a781544f591f37da618360f31db57b1" @@ -3751,6 +4074,14 @@ sshpk@^1.7.0: jsbn "~0.1.0" tweetnacl "~0.14.0" +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-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-alter@latest: version "0.7.3" resolved "https://registry.yarnpkg.com/string-alter/-/string-alter-0.7.3.tgz#a99f203d7293396348b49fc723dd7ab0a0b8d892" @@ -3840,6 +4171,10 @@ strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + strip-json-comments@1.0.x: version "1.0.4" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91" @@ -3858,6 +4193,10 @@ supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" +symbol-observable@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d" + "symbol-tree@>= 3.1.0 < 4.0.0": version "3.2.2" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" @@ -4082,7 +4421,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.9: +which@^1.2.10, which@^1.2.11, which@^1.2.4, which@^1.2.9: version "1.2.12" resolved "https://registry.yarnpkg.com/which/-/which-1.2.12.tgz#de67b5e450269f194909ef23ece4ebe416fa1192" dependencies: @@ -4098,14 +4437,10 @@ window-size@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" -wordwrap@0.0.2: +wordwrap@0.0.2, wordwrap@~0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" -wordwrap@~0.0.2: - version "0.0.3" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" - wordwrap@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"