From 5619d7f100c8b039f329f41303ea273956c9c170 Mon Sep 17 00:00:00 2001 From: Ives van Hoorne Date: Sun, 12 Aug 2018 12:46:04 +0100 Subject: [PATCH] Optimize packages by inlining variables and constant folding --- functions/packager/index.ts | 18 +- functions/packager/packages/find-requires.ts | 8 +- .../packages/utils/extract-requires.test.ts | 20 + .../packages/utils/extract-requires.ts | 71 +--- functions/packager/packages/utils/get-deps.ts | 59 +++ package.json | 6 + yarn.lock | 343 +++++++++++++++++- 7 files changed, 451 insertions(+), 74 deletions(-) create mode 100644 functions/packager/packages/utils/get-deps.ts diff --git a/functions/packager/index.ts b/functions/packager/index.ts index 1a225e4..0cc82e6 100644 --- a/functions/packager/index.ts +++ b/functions/packager/index.ts @@ -65,15 +65,15 @@ async function getContents( {}, ); - // Hardcoded deletion of some modules that are not used but added by accident - deleteHardcodedRequires( - contents, - "/node_modules/react/cjs/react.production.min.js", - ); - deleteHardcodedRequires( - contents, - "/node_modules/react-dom/cjs/react-dom.production.min.js", - ); + // // Hardcoded deletion of some modules that are not used but added by accident + // deleteHardcodedRequires( + // contents, + // "/node_modules/react/cjs/react.production.min.js", + // ); + // deleteHardcodedRequires( + // contents, + // "/node_modules/react-dom/cjs/react-dom.production.min.js", + // ); return { ...contents, ...packageJSONFiles }; } diff --git a/functions/packager/packages/find-requires.ts b/functions/packager/packages/find-requires.ts index 283f68e..6f608eb 100644 --- a/functions/packager/packages/find-requires.ts +++ b/functions/packager/packages/find-requires.ts @@ -1,5 +1,5 @@ import { fs } from "mz"; -import { dirname, join } from "path"; +import { join } from "path"; import { IPackage } from "./find-package-infos"; import resolveRequiredFiles from "./resolve-required-files"; @@ -21,9 +21,6 @@ export interface IFileData { } function rewritePath(path: string, currentPath: string, packagePath: string) { - const relativePath = nodeResolvePath(join(dirname(currentPath), path)); - const isDependency = /^(\w|@\w)/.test(path); - return browserResolve.sync(path, { filename: currentPath }); } @@ -50,6 +47,7 @@ function buildRequireObject( try { extractedRequires = extractRequires(fileData.content); } catch (e) { + console.error(e); return existingContents; } @@ -60,7 +58,7 @@ function buildRequireObject( try { newPath = rewritePath(requirePath, filePath, packagePath); } catch (e) { - console.warn(`Couldn't find ${requirePath}`); + // console.warn(`Couldn't find ${requirePath}`); return; } diff --git a/functions/packager/packages/utils/extract-requires.test.ts b/functions/packager/packages/utils/extract-requires.test.ts index 3a7c083..ecc7113 100644 --- a/functions/packager/packages/utils/extract-requires.test.ts +++ b/functions/packager/packages/utils/extract-requires.test.ts @@ -17,6 +17,18 @@ describe("extractRequires", () => { expect(extractRequires(code)).toEqual(["react"]); }); + it("can eliminate requires statements", () => { + const code = ` + if (process.env.NODE_ENV === 'development') { + module.exports = require('react'); + } else { + module.exports = require('blaat'); + } + `; + + expect(extractRequires(code)).toEqual(["react"]); + }); + it("can find dynamic require statements", () => { const code = ` const react = import('react'); @@ -51,4 +63,12 @@ describe("extractRequires", () => { expect(extractRequires(code)).toEqual(["react-dom"]); }); + + it("can find re-exports", () => { + const code = ` + export react from './react'; + `; + + expect(extractRequires(code)).toEqual(["./react"]); + }); }); diff --git a/functions/packager/packages/utils/extract-requires.ts b/functions/packager/packages/utils/extract-requires.ts index 966ae99..8ce1e54 100644 --- a/functions/packager/packages/utils/extract-requires.ts +++ b/functions/packager/packages/utils/extract-requires.ts @@ -1,12 +1,7 @@ import * as acorn from "acorn"; -import { - CallExpression, - ImportDeclaration, - Literal, - MemberExpression, -} from "estree"; -/* tslint:disable */ -const walk = require("acorn/dist/walk"); +import { CallExpression, ImportDeclaration, Literal } from "estree"; +import * as Babel from "babel-core"; +import { babylonAstDependencies } from "./get-deps"; require("acorn-dynamic-import/lib/inject").default(acorn); /* tslint:enable */ @@ -33,56 +28,24 @@ type NewCallExpression = CallExpression & { }; export default function exportRequires(code: string) { - const ast = acorn.parse(code, { - ecmaVersion: ECMA_VERSION, - locations: true, - plugins: { - dynamicImport: true, - }, - ranges: true, - sourceType: "module", + const plugins: any = [ + "transform-node-env-inline", + "minify-dead-code-elimination", + ]; + const presets = ["stage-0"]; + + process.env.NODE_ENV = "development"; + let { ast } = Babel.transform(code, { + plugins, + presets, }); + process.env.NODE_ENV = "production"; const requires: string[] = []; - walk.simple( - ast, - { - ImportDeclaration(node: ImportDeclaration) { - if (typeof node.source.value === "string") { - requires.push(node.source.value); - } - }, - CallExpression(node: NewCallExpression) { - if ( - /* require() */ (node.callee.type === "Identifier" && - node.callee.name === "require") || - node.callee.type === "Import" || - /* require.resolve */ (node.callee.type === "MemberExpression" && - node.callee.object.name && - node.callee.object.name === "require" && - node.callee.property.name && - node.callee.property.name === "resolve") - ) { - if ( - node.arguments.length === 1 && - node.arguments[0].type === "Literal" - ) { - const literalArgument = node.arguments[0] as Literal; - if (typeof literalArgument.value === "string") { - requires.push(literalArgument.value); - } - } - } - }, - }, - { - ...walk.base, - Import(node: any, st: any, c: any) { - // Do nothing - }, - }, - ); + const deps = babylonAstDependencies(ast); + + deps.forEach((dep: any) => requires.push(dep.source)); return requires; } diff --git a/functions/packager/packages/utils/get-deps.ts b/functions/packager/packages/utils/get-deps.ts new file mode 100644 index 0000000..8dec8c6 --- /dev/null +++ b/functions/packager/packages/utils/get-deps.ts @@ -0,0 +1,59 @@ +import traverse from "babel-traverse"; +import * as types from "babel-types"; + +export function babylonAstDependencies(ast: any) { + const dependencies: any[] = []; + + function addDependency(source: any) { + // Ensure that dependencies are only identified once + if (!dependencies.some(dep => dep.source === source)) { + dependencies.push({ source }); + } + } + + traverse(ast, { + // `import ... from '...'; + ImportDeclaration(node: any) { + addDependency(node.node.source.value); + }, + // `export ... from '...'; + ExportDeclaration(node: any) { + if (node.node.source) { + addDependency(node.node.source.value); + } + }, + // `require('...'); + CallExpression(node: any) { + const callNode = node.node; + if ( + callNode.callee.name === "require" || + callNode.callee.type === "Import" + ) { + const arg = callNode.arguments[0]; + if (types.isLiteral(arg)) { + const anyArg: any = arg; + addDependency(anyArg.value); + } else { + if (!arg.loc || !arg.loc.start) { + throw new Error("Require expression cannot be statically analyzed"); + } + + const err: any = new Error( + `Require expression at line ${arg.loc.start.line}, column ${ + arg.loc.start.column + } cannot be statically analyzed`, + ); + + err.loc = { + line: arg.loc.start.line, + column: arg.loc.start.column, + }; + + throw err; + } + } + }, + }); + + return dependencies; +} diff --git a/package.json b/package.json index 0568ca1..c233547 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,11 @@ "acorn": "^5.1.2", "acorn-dynamic-import": "^2.0.2", "aws-lambda": "^0.1.2", + "babel-core": "^6.26.3", + "babel-plugin-minify-dead-code-elimination": "^0.4.3", + "babel-plugin-transform-node-env-inline": "^0.4.3", + "babel-preset-stage-0": "^6.24.1", + "babylon-ast-dependencies": "^1.0.2", "browser-resolve": "^1.11.2", "json5": "^1.0.1", "lambda-git": "^0.1.1", @@ -33,6 +38,7 @@ "devDependencies": { "@types/acorn": "^4.0.2", "@types/aws-lambda": "^0.0.16", + "@types/babel-core": "^6.25.5", "@types/browser-resolve": "^0.0.5", "@types/express": "^4.0.37", "@types/jest": "^21.1.1", diff --git a/yarn.lock b/yarn.lock index 181d1ea..3326d57 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12,6 +12,45 @@ version "0.0.16" resolved "https://registry.yarnpkg.com/@types/aws-lambda/-/aws-lambda-0.0.16.tgz#12dd6936d0f1e1c0ef6fc2fbd2d0a461889d7f56" +"@types/babel-core@^6.25.5": + version "6.25.5" + resolved "https://registry.yarnpkg.com/@types/babel-core/-/babel-core-6.25.5.tgz#7598b1287c2cb5a8e9150d60e4d4a8f2dbe29982" + dependencies: + "@types/babel-generator" "*" + "@types/babel-template" "*" + "@types/babel-traverse" "*" + "@types/babel-types" "*" + "@types/babylon" "*" + +"@types/babel-generator@*": + version "6.25.2" + resolved "https://registry.yarnpkg.com/@types/babel-generator/-/babel-generator-6.25.2.tgz#fa13653ec2d34a4037be9c34dec32ae75bea04cc" + dependencies: + "@types/babel-types" "*" + +"@types/babel-template@*": + version "6.25.1" + resolved "https://registry.yarnpkg.com/@types/babel-template/-/babel-template-6.25.1.tgz#03e23a893c16bab2ec00200ab51feccf488cae78" + dependencies: + "@types/babel-types" "*" + "@types/babylon" "*" + +"@types/babel-traverse@*": + version "6.25.4" + resolved "https://registry.yarnpkg.com/@types/babel-traverse/-/babel-traverse-6.25.4.tgz#269af6a25c80419b635c8fa29ae42b0d5ce2418c" + dependencies: + "@types/babel-types" "*" + +"@types/babel-types@*": + version "7.0.4" + resolved "https://registry.yarnpkg.com/@types/babel-types/-/babel-types-7.0.4.tgz#bfd5b0d0d1ba13e351dff65b6e52783b816826c8" + +"@types/babylon@*": + version "6.16.3" + resolved "https://registry.yarnpkg.com/@types/babylon/-/babylon-6.16.3.tgz#c2937813a89fcb5e79a00062fc4a8b143e7237bb" + dependencies: + "@types/babel-types" "*" + "@types/browser-resolve@^0.0.5": version "0.0.5" resolved "https://registry.yarnpkg.com/@types/browser-resolve/-/browser-resolve-0.0.5.tgz#4d7ea4babcbfa45752a5cdc016c0a0fc4dc4de7d" @@ -416,6 +455,30 @@ babel-core@^6.0.0, babel-core@^6.24.1, babel-core@^6.26.0: slash "^1.0.0" source-map "^0.5.6" +babel-core@^6.26.3: + version "6.26.3" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" + dependencies: + babel-code-frame "^6.26.0" + babel-generator "^6.26.0" + babel-helpers "^6.24.1" + babel-messages "^6.23.0" + babel-register "^6.26.0" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + convert-source-map "^1.5.1" + debug "^2.6.9" + json5 "^0.5.1" + lodash "^4.17.4" + minimatch "^3.0.4" + path-is-absolute "^1.0.1" + private "^0.1.8" + slash "^1.0.0" + source-map "^0.5.7" + babel-generator@^6.18.0, babel-generator@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.0.tgz#ac1ae20070b79f6e3ca1d3269613053774f20dc5" @@ -429,6 +492,78 @@ babel-generator@^6.18.0, babel-generator@^6.26.0: source-map "^0.5.6" trim-right "^1.0.1" +babel-helper-bindify-decorators@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz#14c19e5f142d7b47f19a52431e52b1ccbc40a330" + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" + dependencies: + babel-helper-explode-assignable-expression "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-evaluate-path@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-helper-evaluate-path/-/babel-helper-evaluate-path-0.4.3.tgz#0a89af702c06b217027fa371908dd4989d3e633f" + +babel-helper-explode-assignable-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-explode-class@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz#7dc2a3910dee007056e1e31d640ced3d54eaa9eb" + dependencies: + babel-helper-bindify-decorators "^6.24.1" + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-function-name@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" + dependencies: + babel-helper-get-function-arity "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-get-function-arity@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-mark-eval-scopes@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-helper-mark-eval-scopes/-/babel-helper-mark-eval-scopes-0.4.3.tgz#d244a3bef9844872603ffb46e22ce8acdf551562" + +babel-helper-remap-async-to-generator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-remove-or-void@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.4.3.tgz#a4f03b40077a0ffe88e45d07010dee241ff5ae60" + babel-helpers@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" @@ -461,10 +596,113 @@ babel-plugin-jest-hoist@^21.2.0: version "21.2.0" resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-21.2.0.tgz#2cef637259bd4b628a6cace039de5fcd14dbb006" -babel-plugin-syntax-object-rest-spread@^6.13.0: +babel-plugin-minify-dead-code-elimination@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.4.3.tgz#73628265864f9008d0027506f58abeb3c1d02d98" + dependencies: + babel-helper-evaluate-path "^0.4.3" + babel-helper-mark-eval-scopes "^0.4.3" + babel-helper-remove-or-void "^0.4.3" + lodash.some "^4.6.0" + +babel-plugin-syntax-async-functions@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" + +babel-plugin-syntax-async-generators@^6.5.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz#6bc963ebb16eccbae6b92b596eb7f35c342a8b9a" + +babel-plugin-syntax-class-constructor-call@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz#9cb9d39fe43c8600bec8146456ddcbd4e1a76416" + +babel-plugin-syntax-class-properties@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de" + +babel-plugin-syntax-decorators@^6.13.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz#312563b4dbde3cc806cee3e416cceeaddd11ac0b" + +babel-plugin-syntax-do-expressions@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-do-expressions/-/babel-plugin-syntax-do-expressions-6.13.0.tgz#5747756139aa26d390d09410b03744ba07e4796d" + +babel-plugin-syntax-dynamic-import@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da" + +babel-plugin-syntax-exponentiation-operator@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" + +babel-plugin-syntax-export-extensions@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz#70a1484f0f9089a4e84ad44bac353c95b9b12721" + +babel-plugin-syntax-function-bind@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-function-bind/-/babel-plugin-syntax-function-bind-6.13.0.tgz#48c495f177bdf31a981e732f55adc0bdd2601f46" + +babel-plugin-syntax-object-rest-spread@^6.13.0, babel-plugin-syntax-object-rest-spread@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" +babel-plugin-syntax-trailing-function-commas@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" + +babel-plugin-transform-async-generator-functions@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz#f058900145fd3e9907a6ddf28da59f215258a5db" + dependencies: + babel-helper-remap-async-to-generator "^6.24.1" + babel-plugin-syntax-async-generators "^6.5.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-async-to-generator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" + dependencies: + babel-helper-remap-async-to-generator "^6.24.1" + babel-plugin-syntax-async-functions "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-class-constructor-call@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.24.1.tgz#80dc285505ac067dcb8d6c65e2f6f11ab7765ef9" + dependencies: + babel-plugin-syntax-class-constructor-call "^6.18.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-class-properties@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac" + dependencies: + babel-helper-function-name "^6.24.1" + babel-plugin-syntax-class-properties "^6.8.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-decorators@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz#788013d8f8c6b5222bdf7b344390dfd77569e24d" + dependencies: + babel-helper-explode-class "^6.24.1" + babel-plugin-syntax-decorators "^6.13.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-do-expressions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-do-expressions/-/babel-plugin-transform-do-expressions-6.22.0.tgz#28ccaf92812d949c2cd1281f690c8fdc468ae9bb" + dependencies: + babel-plugin-syntax-do-expressions "^6.8.0" + babel-runtime "^6.22.0" + babel-plugin-transform-es2015-modules-commonjs@^6.24.1: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz#0d8394029b7dc6abe1a97ef181e00758dd2e5d8a" @@ -474,6 +712,39 @@ babel-plugin-transform-es2015-modules-commonjs@^6.24.1: babel-template "^6.26.0" babel-types "^6.26.0" +babel-plugin-transform-exponentiation-operator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" + dependencies: + babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" + babel-plugin-syntax-exponentiation-operator "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-export-extensions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.22.0.tgz#53738b47e75e8218589eea946cbbd39109bbe653" + dependencies: + babel-plugin-syntax-export-extensions "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-function-bind@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-function-bind/-/babel-plugin-transform-function-bind-6.22.0.tgz#c6fb8e96ac296a310b8cf8ea401462407ddf6a97" + dependencies: + babel-plugin-syntax-function-bind "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-node-env-inline@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-node-env-inline/-/babel-plugin-transform-node-env-inline-0.4.3.tgz#8c84cd74d58f17b0fdf76144a3589f610c3c2497" + +babel-plugin-transform-object-rest-spread@^6.22.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" + dependencies: + babel-plugin-syntax-object-rest-spread "^6.8.0" + babel-runtime "^6.26.0" + babel-plugin-transform-strict-mode@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" @@ -488,6 +759,41 @@ babel-preset-jest@^21.0.0, babel-preset-jest@^21.2.0: babel-plugin-jest-hoist "^21.2.0" babel-plugin-syntax-object-rest-spread "^6.13.0" +babel-preset-stage-0@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-stage-0/-/babel-preset-stage-0-6.24.1.tgz#5642d15042f91384d7e5af8bc88b1db95b039e6a" + dependencies: + babel-plugin-transform-do-expressions "^6.22.0" + babel-plugin-transform-function-bind "^6.22.0" + babel-preset-stage-1 "^6.24.1" + +babel-preset-stage-1@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-stage-1/-/babel-preset-stage-1-6.24.1.tgz#7692cd7dcd6849907e6ae4a0a85589cfb9e2bfb0" + dependencies: + babel-plugin-transform-class-constructor-call "^6.24.1" + babel-plugin-transform-export-extensions "^6.22.0" + babel-preset-stage-2 "^6.24.1" + +babel-preset-stage-2@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz#d9e2960fb3d71187f0e64eec62bc07767219bdc1" + dependencies: + babel-plugin-syntax-dynamic-import "^6.18.0" + babel-plugin-transform-class-properties "^6.24.1" + babel-plugin-transform-decorators "^6.24.1" + babel-preset-stage-3 "^6.24.1" + +babel-preset-stage-3@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz#836ada0a9e7a7fa37cb138fb9326f87934a48395" + dependencies: + babel-plugin-syntax-trailing-function-commas "^6.22.0" + babel-plugin-transform-async-generator-functions "^6.24.1" + babel-plugin-transform-async-to-generator "^6.24.1" + babel-plugin-transform-exponentiation-operator "^6.24.1" + babel-plugin-transform-object-rest-spread "^6.22.0" + babel-register@^6.18.0, babel-register@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" @@ -517,7 +823,7 @@ babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0: babylon "^6.18.0" lodash "^4.17.4" -babel-traverse@^6.18.0, babel-traverse@^6.26.0: +babel-traverse@^6.18.0, babel-traverse@^6.24.1, babel-traverse@^6.26.0, babel-traverse@^6.5.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" dependencies: @@ -531,7 +837,7 @@ babel-traverse@^6.18.0, babel-traverse@^6.26.0: invariant "^2.2.2" lodash "^4.17.4" -babel-types@^6.18.0, babel-types@^6.24.1, babel-types@^6.26.0: +babel-types@^6.18.0, babel-types@^6.24.1, babel-types@^6.26.0, babel-types@^6.5.2: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" dependencies: @@ -540,7 +846,16 @@ babel-types@^6.18.0, babel-types@^6.24.1, babel-types@^6.26.0: lodash "^4.17.4" to-fast-properties "^1.0.3" -babylon@^6.18.0: +babylon-ast-dependencies@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/babylon-ast-dependencies/-/babylon-ast-dependencies-1.0.2.tgz#5f174776128fc44d7a0dea86dbaf560324882b69" + dependencies: + babel-traverse "^6.5.0" + babel-types "^6.5.2" + babylon "^6.5.2" + lodash "^4.5.0" + +babylon@^6.18.0, babylon@^6.5.2: version "6.18.0" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" @@ -866,6 +1181,10 @@ convert-source-map@^1.4.0, convert-source-map@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5" +convert-source-map@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" + cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" @@ -937,7 +1256,7 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" -debug@2, debug@2.6.9, debug@^2.2.0, debug@^2.4.1, debug@^2.6.3, debug@^2.6.8: +debug@2, debug@2.6.9, debug@^2.2.0, debug@^2.4.1, debug@^2.6.3, debug@^2.6.8, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" dependencies: @@ -2542,10 +2861,18 @@ lodash.once@^4.0.0: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" +lodash.some@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d" + lodash@^4.0.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.17.4, lodash@^4.3.0: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" +lodash@^4.5.0: + version "4.17.10" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7" + longest@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" @@ -3141,6 +3468,10 @@ private@^0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1" +private@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + process-nextick-args@~1.0.6: version "1.0.7" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" @@ -3643,7 +3974,7 @@ source-map@^0.4.4: dependencies: amdefine ">=0.0.4" -source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1, source-map@~0.5.6: +source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1, source-map@~0.5.6: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"