Vendor in babel-preset-react@6.24.1 draft
authorDan Mosedale <dmose@meer.net>
Wed, 09 May 2018 08:50:10 -0700
changeset 795831 067ef3c2e05fce94d703eb8c02f3087e0e18bb99
parent 795830 1bdcc20453081787ee8fc53ad3fafa45bb8e4325
child 795832 3845313b6fbd752efa6fc4cf7f848b750f48506d
push id110091
push userbmo:dmose@mozilla.org
push dateWed, 16 May 2018 16:58:05 +0000
milestone62.0a1
Vendor in babel-preset-react@6.24.1
node_modules/babel-helper-builder-react-jsx/.npmignore
node_modules/babel-helper-builder-react-jsx/README.md
node_modules/babel-helper-builder-react-jsx/lib/index.js
node_modules/babel-helper-builder-react-jsx/package-lock.json
node_modules/babel-helper-builder-react-jsx/package.json
node_modules/babel-plugin-syntax-flow/.npmignore
node_modules/babel-plugin-syntax-flow/README.md
node_modules/babel-plugin-syntax-flow/lib/index.js
node_modules/babel-plugin-syntax-flow/package.json
node_modules/babel-plugin-syntax-jsx/.npmignore
node_modules/babel-plugin-syntax-jsx/README.md
node_modules/babel-plugin-syntax-jsx/lib/index.js
node_modules/babel-plugin-syntax-jsx/package.json
node_modules/babel-plugin-transform-flow-strip-types/.npmignore
node_modules/babel-plugin-transform-flow-strip-types/README.md
node_modules/babel-plugin-transform-flow-strip-types/lib/index.js
node_modules/babel-plugin-transform-flow-strip-types/package.json
node_modules/babel-plugin-transform-react-display-name/.npmignore
node_modules/babel-plugin-transform-react-display-name/README.md
node_modules/babel-plugin-transform-react-display-name/lib/index.js
node_modules/babel-plugin-transform-react-display-name/package.json
node_modules/babel-plugin-transform-react-jsx-self/.npmignore
node_modules/babel-plugin-transform-react-jsx-self/README.md
node_modules/babel-plugin-transform-react-jsx-self/lib/index.js
node_modules/babel-plugin-transform-react-jsx-self/package.json
node_modules/babel-plugin-transform-react-jsx-source/.npmignore
node_modules/babel-plugin-transform-react-jsx-source/README.md
node_modules/babel-plugin-transform-react-jsx-source/lib/index.js
node_modules/babel-plugin-transform-react-jsx-source/package.json
node_modules/babel-plugin-transform-react-jsx/.npmignore
node_modules/babel-plugin-transform-react-jsx/README.md
node_modules/babel-plugin-transform-react-jsx/lib/index.js
node_modules/babel-plugin-transform-react-jsx/package.json
node_modules/babel-preset-flow/.npmignore
node_modules/babel-preset-flow/README.md
node_modules/babel-preset-flow/lib/index.js
node_modules/babel-preset-flow/package.json
node_modules/babel-preset-react/.npmignore
node_modules/babel-preset-react/README.md
node_modules/babel-preset-react/lib/index.js
node_modules/babel-preset-react/package.json
package-lock.json
package.json
new file mode 100644
--- /dev/null
+++ b/node_modules/babel-helper-builder-react-jsx/.npmignore
@@ -0,0 +1,3 @@
+src
+test
+node_modules
new file mode 100644
--- /dev/null
+++ b/node_modules/babel-helper-builder-react-jsx/README.md
@@ -0,0 +1,24 @@
+# babel-helper-builder-react-jsx
+
+## Usage
+
+```javascript
+type ElementState = {
+  tagExpr: Object; // tag node
+  tagName: string; // raw string tag name
+  args: Array<Object>; // array of call arguments
+  call?: Object; // optional call property that can be set to override the call expression returned
+  pre?: Function; // function called with (state: ElementState) before building attribs
+  post?: Function; // function called with (state: ElementState) after building attribs
+};
+
+require("babel-helper-builder-react-jsx")({
+  pre: function (state: ElementState) {
+    // called before building the element
+  },
+
+  post: function (state: ElementState) {
+    // called after building the element
+  }
+});
+```
new file mode 100644
--- /dev/null
+++ b/node_modules/babel-helper-builder-react-jsx/lib/index.js
@@ -0,0 +1,163 @@
+"use strict";
+
+exports.__esModule = true;
+
+exports.default = function (opts) {
+  var visitor = {};
+
+  visitor.JSXNamespacedName = function (path) {
+    throw path.buildCodeFrameError("Namespace tags are not supported. ReactJSX is not XML.");
+  };
+
+  visitor.JSXElement = {
+    exit: function exit(path, file) {
+      var callExpr = buildElementCall(path.get("openingElement"), file);
+
+      callExpr.arguments = callExpr.arguments.concat(path.node.children);
+
+      if (callExpr.arguments.length >= 3) {
+        callExpr._prettyCall = true;
+      }
+
+      path.replaceWith(t.inherits(callExpr, path.node));
+    }
+  };
+
+  return visitor;
+
+  function convertJSXIdentifier(node, parent) {
+    if (t.isJSXIdentifier(node)) {
+      if (node.name === "this" && t.isReferenced(node, parent)) {
+        return t.thisExpression();
+      } else if (_esutils2.default.keyword.isIdentifierNameES6(node.name)) {
+        node.type = "Identifier";
+      } else {
+        return t.stringLiteral(node.name);
+      }
+    } else if (t.isJSXMemberExpression(node)) {
+      return t.memberExpression(convertJSXIdentifier(node.object, node), convertJSXIdentifier(node.property, node));
+    }
+
+    return node;
+  }
+
+  function convertAttributeValue(node) {
+    if (t.isJSXExpressionContainer(node)) {
+      return node.expression;
+    } else {
+      return node;
+    }
+  }
+
+  function convertAttribute(node) {
+    var value = convertAttributeValue(node.value || t.booleanLiteral(true));
+
+    if (t.isStringLiteral(value) && !t.isJSXExpressionContainer(node.value)) {
+      value.value = value.value.replace(/\n\s+/g, " ");
+    }
+
+    if (t.isValidIdentifier(node.name.name)) {
+      node.name.type = "Identifier";
+    } else {
+      node.name = t.stringLiteral(node.name.name);
+    }
+
+    return t.inherits(t.objectProperty(node.name, value), node);
+  }
+
+  function buildElementCall(path, file) {
+    path.parent.children = t.react.buildChildren(path.parent);
+
+    var tagExpr = convertJSXIdentifier(path.node.name, path.node);
+    var args = [];
+
+    var tagName = void 0;
+    if (t.isIdentifier(tagExpr)) {
+      tagName = tagExpr.name;
+    } else if (t.isLiteral(tagExpr)) {
+      tagName = tagExpr.value;
+    }
+
+    var state = {
+      tagExpr: tagExpr,
+      tagName: tagName,
+      args: args
+    };
+
+    if (opts.pre) {
+      opts.pre(state, file);
+    }
+
+    var attribs = path.node.attributes;
+    if (attribs.length) {
+      attribs = buildOpeningElementAttributes(attribs, file);
+    } else {
+      attribs = t.nullLiteral();
+    }
+
+    args.push(attribs);
+
+    if (opts.post) {
+      opts.post(state, file);
+    }
+
+    return state.call || t.callExpression(state.callee, args);
+  }
+
+  function buildOpeningElementAttributes(attribs, file) {
+    var _props = [];
+    var objs = [];
+
+    var useBuiltIns = file.opts.useBuiltIns || false;
+    if (typeof useBuiltIns !== "boolean") {
+      throw new Error("transform-react-jsx currently only accepts a boolean option for " + "useBuiltIns (defaults to false)");
+    }
+
+    function pushProps() {
+      if (!_props.length) return;
+
+      objs.push(t.objectExpression(_props));
+      _props = [];
+    }
+
+    while (attribs.length) {
+      var prop = attribs.shift();
+      if (t.isJSXSpreadAttribute(prop)) {
+        pushProps();
+        objs.push(prop.argument);
+      } else {
+        _props.push(convertAttribute(prop));
+      }
+    }
+
+    pushProps();
+
+    if (objs.length === 1) {
+      attribs = objs[0];
+    } else {
+      if (!t.isObjectExpression(objs[0])) {
+        objs.unshift(t.objectExpression([]));
+      }
+
+      var helper = useBuiltIns ? t.memberExpression(t.identifier("Object"), t.identifier("assign")) : file.addHelper("extends");
+
+      attribs = t.callExpression(helper, objs);
+    }
+
+    return attribs;
+  }
+};
+
+var _esutils = require("esutils");
+
+var _esutils2 = _interopRequireDefault(_esutils);
+
+var _babelTypes = require("babel-types");
+
+var t = _interopRequireWildcard(_babelTypes);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+module.exports = exports["default"];
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/node_modules/babel-helper-builder-react-jsx/package-lock.json
@@ -0,0 +1,13 @@
+{
+  "name": "babel-helper-builder-react-jsx",
+  "version": "6.24.1",
+  "lockfileVersion": 1,
+  "requires": true,
+  "dependencies": {
+    "esutils": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+      "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs="
+    }
+  }
+}
new file mode 100644
--- /dev/null
+++ b/node_modules/babel-helper-builder-react-jsx/package.json
@@ -0,0 +1,41 @@
+{
+  "_from": "babel-helper-builder-react-jsx@^6.24.1",
+  "_id": "babel-helper-builder-react-jsx@6.26.0",
+  "_inBundle": false,
+  "_integrity": "sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA=",
+  "_location": "/babel-helper-builder-react-jsx",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "babel-helper-builder-react-jsx@^6.24.1",
+    "name": "babel-helper-builder-react-jsx",
+    "escapedName": "babel-helper-builder-react-jsx",
+    "rawSpec": "^6.24.1",
+    "saveSpec": null,
+    "fetchSpec": "^6.24.1"
+  },
+  "_requiredBy": [
+    "/babel-plugin-transform-react-jsx"
+  ],
+  "_resolved": "https://registry.npmjs.org/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz",
+  "_shasum": "39ff8313b75c8b65dceff1f31d383e0ff2a408a0",
+  "_spec": "babel-helper-builder-react-jsx@^6.24.1",
+  "_where": "/Users/dmose/r/gecko/node_modules/babel-plugin-transform-react-jsx",
+  "bundleDependencies": false,
+  "dependencies": {
+    "babel-runtime": "^6.26.0",
+    "babel-types": "^6.26.0",
+    "esutils": "^2.0.2"
+  },
+  "deprecated": false,
+  "description": "Helper function to build react jsx",
+  "license": "MIT",
+  "main": "lib/index.js",
+  "name": "babel-helper-builder-react-jsx",
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/babel/babel/tree/master/packages/babel-helper-builder-react-jsx"
+  },
+  "version": "6.26.0"
+}
new file mode 100644
--- /dev/null
+++ b/node_modules/babel-plugin-syntax-flow/.npmignore
@@ -0,0 +1,3 @@
+node_modules
+*.log
+src
new file mode 100644
--- /dev/null
+++ b/node_modules/babel-plugin-syntax-flow/README.md
@@ -0,0 +1,35 @@
+# babel-plugin-syntax-flow
+
+
+
+## Installation
+
+```sh
+$ npm install babel-plugin-syntax-flow
+```
+
+## Usage
+
+### Via `.babelrc` (Recommended)
+
+**.babelrc**
+
+```json
+{
+  "plugins": ["syntax-flow"]
+}
+```
+
+### Via CLI
+
+```sh
+$ babel --plugins syntax-flow script.js
+```
+
+### Via Node API
+
+```javascript
+require("babel-core").transform("code", {
+  plugins: ["syntax-flow"]
+});
+```
new file mode 100644
--- /dev/null
+++ b/node_modules/babel-plugin-syntax-flow/lib/index.js
@@ -0,0 +1,13 @@
+"use strict";
+
+exports.__esModule = true;
+
+exports.default = function () {
+  return {
+    manipulateOptions: function manipulateOptions(opts, parserOpts) {
+      parserOpts.plugins.push("flow");
+    }
+  };
+};
+
+module.exports = exports["default"];
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/node_modules/babel-plugin-syntax-flow/package.json
@@ -0,0 +1,41 @@
+{
+  "_from": "babel-plugin-syntax-flow@^6.18.0",
+  "_id": "babel-plugin-syntax-flow@6.18.0",
+  "_inBundle": false,
+  "_integrity": "sha1-TDqyCiryaqIM0lmVw5jE63AxDI0=",
+  "_location": "/babel-plugin-syntax-flow",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "babel-plugin-syntax-flow@^6.18.0",
+    "name": "babel-plugin-syntax-flow",
+    "escapedName": "babel-plugin-syntax-flow",
+    "rawSpec": "^6.18.0",
+    "saveSpec": null,
+    "fetchSpec": "^6.18.0"
+  },
+  "_requiredBy": [
+    "/babel-plugin-transform-flow-strip-types"
+  ],
+  "_resolved": "https://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz",
+  "_shasum": "4c3ab20a2af26aa20cd25995c398c4eb70310c8d",
+  "_spec": "babel-plugin-syntax-flow@^6.18.0",
+  "_where": "/Users/dmose/r/gecko/node_modules/babel-plugin-transform-flow-strip-types",
+  "bundleDependencies": false,
+  "dependencies": {},
+  "deprecated": false,
+  "description": "Allow parsing of the flow syntax",
+  "devDependencies": {},
+  "keywords": [
+    "babel-plugin"
+  ],
+  "license": "MIT",
+  "main": "lib/index.js",
+  "name": "babel-plugin-syntax-flow",
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/babel/babel/tree/master/packages/babel-plugin-syntax-flow"
+  },
+  "version": "6.18.0"
+}
new file mode 100644
--- /dev/null
+++ b/node_modules/babel-plugin-syntax-jsx/.npmignore
@@ -0,0 +1,3 @@
+node_modules
+*.log
+src
new file mode 100644
--- /dev/null
+++ b/node_modules/babel-plugin-syntax-jsx/README.md
@@ -0,0 +1,35 @@
+# babel-plugin-syntax-jsx
+
+
+
+## Installation
+
+```sh
+$ npm install babel-plugin-syntax-jsx
+```
+
+## Usage
+
+### Via `.babelrc` (Recommended)
+
+**.babelrc**
+
+```json
+{
+  "plugins": ["syntax-jsx"]
+}
+```
+
+### Via CLI
+
+```sh
+$ babel --plugins syntax-jsx script.js
+```
+
+### Via Node API
+
+```javascript
+require("babel-core").transform("code", {
+  plugins: ["syntax-jsx"]
+});
+```
new file mode 100644
--- /dev/null
+++ b/node_modules/babel-plugin-syntax-jsx/lib/index.js
@@ -0,0 +1,13 @@
+"use strict";
+
+exports.__esModule = true;
+
+exports.default = function () {
+  return {
+    manipulateOptions: function manipulateOptions(opts, parserOpts) {
+      parserOpts.plugins.push("jsx");
+    }
+  };
+};
+
+module.exports = exports["default"];
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/node_modules/babel-plugin-syntax-jsx/package.json
@@ -0,0 +1,44 @@
+{
+  "_from": "babel-plugin-syntax-jsx@^6.3.13",
+  "_id": "babel-plugin-syntax-jsx@6.18.0",
+  "_inBundle": false,
+  "_integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=",
+  "_location": "/babel-plugin-syntax-jsx",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "babel-plugin-syntax-jsx@^6.3.13",
+    "name": "babel-plugin-syntax-jsx",
+    "escapedName": "babel-plugin-syntax-jsx",
+    "rawSpec": "^6.3.13",
+    "saveSpec": null,
+    "fetchSpec": "^6.3.13"
+  },
+  "_requiredBy": [
+    "/babel-plugin-transform-react-jsx",
+    "/babel-plugin-transform-react-jsx-self",
+    "/babel-plugin-transform-react-jsx-source",
+    "/babel-preset-react"
+  ],
+  "_resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz",
+  "_shasum": "0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946",
+  "_spec": "babel-plugin-syntax-jsx@^6.3.13",
+  "_where": "/Users/dmose/r/gecko/node_modules/babel-preset-react",
+  "bundleDependencies": false,
+  "dependencies": {},
+  "deprecated": false,
+  "description": "Allow parsing of jsx",
+  "devDependencies": {},
+  "keywords": [
+    "babel-plugin"
+  ],
+  "license": "MIT",
+  "main": "lib/index.js",
+  "name": "babel-plugin-syntax-jsx",
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/babel/babel/tree/master/packages/babel-plugin-syntax-jsx"
+  },
+  "version": "6.18.0"
+}
new file mode 100644
--- /dev/null
+++ b/node_modules/babel-plugin-transform-flow-strip-types/.npmignore
@@ -0,0 +1,4 @@
+node_modules
+*.log
+src
+test
new file mode 100644
--- /dev/null
+++ b/node_modules/babel-plugin-transform-flow-strip-types/README.md
@@ -0,0 +1,52 @@
+# babel-plugin-transform-flow-strip-types
+
+> Strip all [flow](http://flowtype.org) type annotations and declarations from your output code.
+
+## Example
+
+**In**
+
+```javascript
+function foo(one: any, two: number, three?): string {}
+```
+
+**Out**
+
+```javascript
+function foo(one, two, three) {}
+```
+
+[Try in REPL](http://babeljs.io/repl/#?babili=false&evaluate=true&lineWrap=false&presets=react&code=function%20foo(one%3A%20any%2C%20two%3A%20number%2C%20three%3F)%3A%20string%20%7B%7D&experimental=false&loose=false&spec=false&playground=false&stage=0
+)
+
+## Installation
+
+```sh
+npm install --save-dev babel-plugin-transform-flow-strip-types
+```
+
+## Usage
+
+### Via `.babelrc` (Recommended)
+
+**.babelrc**
+
+```json
+{
+  "plugins": ["transform-flow-strip-types"]
+}
+```
+
+### Via CLI
+
+```sh
+babel --plugins transform-flow-strip-types script.js
+```
+
+### Via Node API
+
+```javascript
+require("babel-core").transform("code", {
+  plugins: ["transform-flow-strip-types"]
+});
+```
new file mode 100644
--- /dev/null
+++ b/node_modules/babel-plugin-transform-flow-strip-types/lib/index.js
@@ -0,0 +1,87 @@
+"use strict";
+
+exports.__esModule = true;
+
+var _getIterator2 = require("babel-runtime/core-js/get-iterator");
+
+var _getIterator3 = _interopRequireDefault(_getIterator2);
+
+exports.default = function (_ref) {
+  var t = _ref.types;
+
+  var FLOW_DIRECTIVE = "@flow";
+
+  return {
+    inherits: require("babel-plugin-syntax-flow"),
+
+    visitor: {
+      Program: function Program(path, _ref2) {
+        var comments = _ref2.file.ast.comments;
+
+        for (var _iterator = comments, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) {
+          var _ref3;
+
+          if (_isArray) {
+            if (_i >= _iterator.length) break;
+            _ref3 = _iterator[_i++];
+          } else {
+            _i = _iterator.next();
+            if (_i.done) break;
+            _ref3 = _i.value;
+          }
+
+          var comment = _ref3;
+
+          if (comment.value.indexOf(FLOW_DIRECTIVE) >= 0) {
+            comment.value = comment.value.replace(FLOW_DIRECTIVE, "");
+
+            if (!comment.value.replace(/\*/g, "").trim()) comment.ignore = true;
+          }
+        }
+      },
+      Flow: function Flow(path) {
+        path.remove();
+      },
+      ClassProperty: function ClassProperty(path) {
+        path.node.variance = null;
+        path.node.typeAnnotation = null;
+        if (!path.node.value) path.remove();
+      },
+      Class: function Class(path) {
+        path.node.implements = null;
+
+        path.get("body.body").forEach(function (child) {
+          if (child.isClassProperty()) {
+            child.node.typeAnnotation = null;
+            if (!child.node.value) child.remove();
+          }
+        });
+      },
+      AssignmentPattern: function AssignmentPattern(_ref4) {
+        var node = _ref4.node;
+
+        node.left.optional = false;
+      },
+      Function: function Function(_ref5) {
+        var node = _ref5.node;
+
+        for (var i = 0; i < node.params.length; i++) {
+          var param = node.params[i];
+          param.optional = false;
+        }
+      },
+      TypeCastExpression: function TypeCastExpression(path) {
+        var node = path.node;
+
+        do {
+          node = node.expression;
+        } while (t.isTypeCastExpression(node));
+        path.replaceWith(node);
+      }
+    }
+  };
+};
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+module.exports = exports["default"];
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/node_modules/babel-plugin-transform-flow-strip-types/package.json
@@ -0,0 +1,46 @@
+{
+  "_from": "babel-plugin-transform-flow-strip-types@^6.22.0",
+  "_id": "babel-plugin-transform-flow-strip-types@6.22.0",
+  "_inBundle": false,
+  "_integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=",
+  "_location": "/babel-plugin-transform-flow-strip-types",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "babel-plugin-transform-flow-strip-types@^6.22.0",
+    "name": "babel-plugin-transform-flow-strip-types",
+    "escapedName": "babel-plugin-transform-flow-strip-types",
+    "rawSpec": "^6.22.0",
+    "saveSpec": null,
+    "fetchSpec": "^6.22.0"
+  },
+  "_requiredBy": [
+    "/babel-preset-flow"
+  ],
+  "_resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz",
+  "_shasum": "84cb672935d43714fdc32bce84568d87441cf7cf",
+  "_spec": "babel-plugin-transform-flow-strip-types@^6.22.0",
+  "_where": "/Users/dmose/r/gecko/node_modules/babel-preset-flow",
+  "bundleDependencies": false,
+  "dependencies": {
+    "babel-plugin-syntax-flow": "^6.18.0",
+    "babel-runtime": "^6.22.0"
+  },
+  "deprecated": false,
+  "description": "Strip flow type annotations from your output code.",
+  "devDependencies": {
+    "babel-helper-plugin-test-runner": "^6.22.0"
+  },
+  "keywords": [
+    "babel-plugin"
+  ],
+  "license": "MIT",
+  "main": "lib/index.js",
+  "name": "babel-plugin-transform-flow-strip-types",
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-flow-strip-types"
+  },
+  "version": "6.22.0"
+}
new file mode 100644
--- /dev/null
+++ b/node_modules/babel-plugin-transform-react-display-name/.npmignore
@@ -0,0 +1,4 @@
+node_modules
+*.log
+src
+test
new file mode 100644
--- /dev/null
+++ b/node_modules/babel-plugin-transform-react-display-name/README.md
@@ -0,0 +1,55 @@
+# babel-plugin-transform-react-display-name
+
+> Add displayName to `createReactClass` (and `React.createClass`) calls
+
+## Example
+
+**In**
+
+```js
+var foo = React.createClass({}); // React <= 15
+var bar = createReactClass({});  // React 16+
+```
+
+**Out**
+
+```js
+var foo = React.createClass({
+  displayName: "foo"
+}); // React <= 15
+var bar = createReactClass({
+  displayName: "bar"
+}); // React 16+
+```
+
+## Installation
+
+```sh
+npm install --save-dev babel-plugin-transform-react-display-name
+```
+
+## Usage
+
+### Via `.babelrc` (Recommended)
+
+**.babelrc**
+
+```json
+{
+  "plugins": ["transform-react-display-name"]
+}
+```
+
+### Via CLI
+
+```sh
+babel --plugins transform-react-display-name script.js
+```
+
+### Via Node API
+
+```javascript
+require("babel-core").transform("code", {
+  plugins: ["transform-react-display-name"]
+});
+```
new file mode 100644
--- /dev/null
+++ b/node_modules/babel-plugin-transform-react-display-name/lib/index.js
@@ -0,0 +1,101 @@
+"use strict";
+
+exports.__esModule = true;
+
+exports.default = function (_ref) {
+  var t = _ref.types;
+
+  function addDisplayName(id, call) {
+    var props = call.arguments[0].properties;
+    var safe = true;
+
+    for (var i = 0; i < props.length; i++) {
+      var prop = props[i];
+      var key = t.toComputedKey(prop);
+      if (t.isLiteral(key, { value: "displayName" })) {
+        safe = false;
+        break;
+      }
+    }
+
+    if (safe) {
+      props.unshift(t.objectProperty(t.identifier("displayName"), t.stringLiteral(id)));
+    }
+  }
+
+  var isCreateClassCallExpression = t.buildMatchMemberExpression("React.createClass");
+  var isCreateClassAddon = function isCreateClassAddon(callee) {
+    return callee.name === "createReactClass";
+  };
+
+  function isCreateClass(node) {
+    if (!node || !t.isCallExpression(node)) return false;
+
+    if (!isCreateClassCallExpression(node.callee) && !isCreateClassAddon(node.callee)) return false;
+
+    var args = node.arguments;
+    if (args.length !== 1) return false;
+
+    var first = args[0];
+    if (!t.isObjectExpression(first)) return false;
+
+    return true;
+  }
+
+  return {
+    visitor: {
+      ExportDefaultDeclaration: function ExportDefaultDeclaration(_ref2, state) {
+        var node = _ref2.node;
+
+        if (isCreateClass(node.declaration)) {
+          var displayName = state.file.opts.basename;
+
+          if (displayName === "index") {
+            displayName = _path2.default.basename(_path2.default.dirname(state.file.opts.filename));
+          }
+
+          addDisplayName(displayName, node.declaration);
+        }
+      },
+      CallExpression: function CallExpression(path) {
+        var node = path.node;
+
+        if (!isCreateClass(node)) return;
+
+        var id = void 0;
+
+        path.find(function (path) {
+          if (path.isAssignmentExpression()) {
+            id = path.node.left;
+          } else if (path.isObjectProperty()) {
+            id = path.node.key;
+          } else if (path.isVariableDeclarator()) {
+            id = path.node.id;
+          } else if (path.isStatement()) {
+            return true;
+          }
+
+          if (id) return true;
+        });
+
+        if (!id) return;
+
+        if (t.isMemberExpression(id)) {
+          id = id.property;
+        }
+
+        if (t.isIdentifier(id)) {
+          addDisplayName(id.name, node);
+        }
+      }
+    }
+  };
+};
+
+var _path = require("path");
+
+var _path2 = _interopRequireDefault(_path);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+module.exports = exports["default"];
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/node_modules/babel-plugin-transform-react-display-name/package.json
@@ -0,0 +1,45 @@
+{
+  "_from": "babel-plugin-transform-react-display-name@^6.23.0",
+  "_id": "babel-plugin-transform-react-display-name@6.25.0",
+  "_inBundle": false,
+  "_integrity": "sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE=",
+  "_location": "/babel-plugin-transform-react-display-name",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "babel-plugin-transform-react-display-name@^6.23.0",
+    "name": "babel-plugin-transform-react-display-name",
+    "escapedName": "babel-plugin-transform-react-display-name",
+    "rawSpec": "^6.23.0",
+    "saveSpec": null,
+    "fetchSpec": "^6.23.0"
+  },
+  "_requiredBy": [
+    "/babel-preset-react"
+  ],
+  "_resolved": "https://registry.npmjs.org/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz",
+  "_shasum": "67e2bf1f1e9c93ab08db96792e05392bf2cc28d1",
+  "_spec": "babel-plugin-transform-react-display-name@^6.23.0",
+  "_where": "/Users/dmose/r/gecko/node_modules/babel-preset-react",
+  "bundleDependencies": false,
+  "dependencies": {
+    "babel-runtime": "^6.22.0"
+  },
+  "deprecated": false,
+  "description": "Add displayName to React.createClass calls",
+  "devDependencies": {
+    "babel-helper-plugin-test-runner": "^6.22.0"
+  },
+  "keywords": [
+    "babel-plugin"
+  ],
+  "license": "MIT",
+  "main": "lib/index.js",
+  "name": "babel-plugin-transform-react-display-name",
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-react-display-name"
+  },
+  "version": "6.25.0"
+}
new file mode 100644
--- /dev/null
+++ b/node_modules/babel-plugin-transform-react-jsx-self/.npmignore
@@ -0,0 +1,4 @@
+node_modules
+*.log
+src
+test
new file mode 100644
--- /dev/null
+++ b/node_modules/babel-plugin-transform-react-jsx-self/README.md
@@ -0,0 +1,49 @@
+# babel-plugin-transform-react-jsx-self
+
+> Adds `__self` prop to JSX elements, which React will use to generate some runtime warnings.  All React users should enable this transform in dev mode.
+
+## Example
+
+**In**
+
+```
+<sometag />
+```
+
+**Out**
+
+```
+<sometag __self={this} />
+```
+
+## Installation
+
+```sh
+npm install --save-dev babel-plugin-transform-react-jsx-self
+```
+
+## Usage
+
+### Via `.babelrc` (Recommended)
+
+**.babelrc**
+
+```json
+{
+  "plugins": ["transform-react-jsx-self"]
+}
+```
+
+### Via CLI
+
+```sh
+babel --plugins transform-react-jsx-self script.js
+```
+
+### Via Node API
+
+```javascript
+require("babel-core").transform("code", {
+  plugins: ["transform-react-jsx-self"]
+});
+```
new file mode 100644
--- /dev/null
+++ b/node_modules/babel-plugin-transform-react-jsx-self/lib/index.js
@@ -0,0 +1,26 @@
+"use strict";
+
+exports.__esModule = true;
+
+exports.default = function (_ref) {
+  var t = _ref.types;
+
+  var visitor = {
+    JSXOpeningElement: function JSXOpeningElement(_ref2) {
+      var node = _ref2.node;
+
+      var id = t.jSXIdentifier(TRACE_ID);
+      var trace = t.thisExpression();
+
+      node.attributes.push(t.jSXAttribute(id, t.jSXExpressionContainer(trace)));
+    }
+  };
+
+  return {
+    visitor: visitor
+  };
+};
+
+var TRACE_ID = "__self";
+
+module.exports = exports["default"];
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/node_modules/babel-plugin-transform-react-jsx-self/package.json
@@ -0,0 +1,46 @@
+{
+  "_from": "babel-plugin-transform-react-jsx-self@^6.22.0",
+  "_id": "babel-plugin-transform-react-jsx-self@6.22.0",
+  "_inBundle": false,
+  "_integrity": "sha1-322AqdomEqEh5t3XVYvL7PBuY24=",
+  "_location": "/babel-plugin-transform-react-jsx-self",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "babel-plugin-transform-react-jsx-self@^6.22.0",
+    "name": "babel-plugin-transform-react-jsx-self",
+    "escapedName": "babel-plugin-transform-react-jsx-self",
+    "rawSpec": "^6.22.0",
+    "saveSpec": null,
+    "fetchSpec": "^6.22.0"
+  },
+  "_requiredBy": [
+    "/babel-preset-react"
+  ],
+  "_resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz",
+  "_shasum": "df6d80a9da2612a121e6ddd7558bcbecf06e636e",
+  "_spec": "babel-plugin-transform-react-jsx-self@^6.22.0",
+  "_where": "/Users/dmose/r/gecko/node_modules/babel-preset-react",
+  "bundleDependencies": false,
+  "dependencies": {
+    "babel-plugin-syntax-jsx": "^6.8.0",
+    "babel-runtime": "^6.22.0"
+  },
+  "deprecated": false,
+  "description": "Add a __self prop to all JSX Elements",
+  "devDependencies": {
+    "babel-helper-plugin-test-runner": "^6.22.0"
+  },
+  "keywords": [
+    "babel-plugin"
+  ],
+  "license": "MIT",
+  "main": "lib/index.js",
+  "name": "babel-plugin-transform-react-jsx-self",
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-react-jsx-self"
+  },
+  "version": "6.22.0"
+}
new file mode 100644
--- /dev/null
+++ b/node_modules/babel-plugin-transform-react-jsx-source/.npmignore
@@ -0,0 +1,4 @@
+node_modules
+*.log
+src
+test
new file mode 100644
--- /dev/null
+++ b/node_modules/babel-plugin-transform-react-jsx-source/README.md
@@ -0,0 +1,49 @@
+# babel-plugin-transform-react-jsx-source
+
+> Adds source file and line number to JSX elements.
+
+## Example
+
+**In**
+
+```
+<sometag />
+```
+
+**Out**
+
+```
+<sometag __source={ { fileName: 'this/file.js', lineNumber: 10 } } />
+```
+
+## Installation
+
+```sh
+npm install --save-dev babel-plugin-transform-react-jsx-source
+```
+
+## Usage
+
+### Via `.babelrc` (Recommended)
+
+**.babelrc**
+
+```json
+{
+  "plugins": ["transform-react-jsx-source"]
+}
+```
+
+### Via CLI
+
+```sh
+babel --plugins transform-react-jsx-source script.js
+```
+
+### Via Node API
+
+```javascript
+require("babel-core").transform("code", {
+  plugins: ["transform-react-jsx-source"]
+});
+```
new file mode 100644
--- /dev/null
+++ b/node_modules/babel-plugin-transform-react-jsx-source/lib/index.js
@@ -0,0 +1,52 @@
+"use strict";
+
+exports.__esModule = true;
+
+exports.default = function (_ref) {
+  var t = _ref.types;
+
+  function makeTrace(fileNameIdentifier, lineNumber) {
+    var fileLineLiteral = lineNumber != null ? t.numericLiteral(lineNumber) : t.nullLiteral();
+    var fileNameProperty = t.objectProperty(t.identifier("fileName"), fileNameIdentifier);
+    var lineNumberProperty = t.objectProperty(t.identifier("lineNumber"), fileLineLiteral);
+    return t.objectExpression([fileNameProperty, lineNumberProperty]);
+  }
+
+  var visitor = {
+    JSXOpeningElement: function JSXOpeningElement(path, state) {
+      var id = t.jSXIdentifier(TRACE_ID);
+      var location = path.container.openingElement.loc;
+      if (!location) {
+        return;
+      }
+
+      var attributes = path.container.openingElement.attributes;
+      for (var i = 0; i < attributes.length; i++) {
+        var name = attributes[i].name;
+        if (name && name.name === TRACE_ID) {
+          return;
+        }
+      }
+
+      if (!state.fileNameIdentifier) {
+        var fileName = state.file.log.filename !== "unknown" ? state.file.log.filename : null;
+
+        var fileNameIdentifier = path.scope.generateUidIdentifier(FILE_NAME_VAR);
+        path.hub.file.scope.push({ id: fileNameIdentifier, init: t.stringLiteral(fileName) });
+        state.fileNameIdentifier = fileNameIdentifier;
+      }
+
+      var trace = makeTrace(state.fileNameIdentifier, location.start.line);
+      attributes.push(t.jSXAttribute(id, t.jSXExpressionContainer(trace)));
+    }
+  };
+
+  return {
+    visitor: visitor
+  };
+};
+
+var TRACE_ID = "__source";
+var FILE_NAME_VAR = "_jsxFileName";
+
+module.exports = exports["default"];
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/node_modules/babel-plugin-transform-react-jsx-source/package.json
@@ -0,0 +1,46 @@
+{
+  "_from": "babel-plugin-transform-react-jsx-source@^6.22.0",
+  "_id": "babel-plugin-transform-react-jsx-source@6.22.0",
+  "_inBundle": false,
+  "_integrity": "sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY=",
+  "_location": "/babel-plugin-transform-react-jsx-source",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "babel-plugin-transform-react-jsx-source@^6.22.0",
+    "name": "babel-plugin-transform-react-jsx-source",
+    "escapedName": "babel-plugin-transform-react-jsx-source",
+    "rawSpec": "^6.22.0",
+    "saveSpec": null,
+    "fetchSpec": "^6.22.0"
+  },
+  "_requiredBy": [
+    "/babel-preset-react"
+  ],
+  "_resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz",
+  "_shasum": "66ac12153f5cd2d17b3c19268f4bf0197f44ecd6",
+  "_spec": "babel-plugin-transform-react-jsx-source@^6.22.0",
+  "_where": "/Users/dmose/r/gecko/node_modules/babel-preset-react",
+  "bundleDependencies": false,
+  "dependencies": {
+    "babel-plugin-syntax-jsx": "^6.8.0",
+    "babel-runtime": "^6.22.0"
+  },
+  "deprecated": false,
+  "description": "Add a __source prop to all JSX Elements",
+  "devDependencies": {
+    "babel-helper-plugin-test-runner": "^6.22.0"
+  },
+  "keywords": [
+    "babel-plugin"
+  ],
+  "license": "MIT",
+  "main": "lib/index.js",
+  "name": "babel-plugin-transform-react-jsx-source",
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-react-jsx-source"
+  },
+  "version": "6.22.0"
+}
new file mode 100644
--- /dev/null
+++ b/node_modules/babel-plugin-transform-react-jsx/.npmignore
@@ -0,0 +1,4 @@
+node_modules
+*.log
+src
+test
new file mode 100644
--- /dev/null
+++ b/node_modules/babel-plugin-transform-react-jsx/README.md
@@ -0,0 +1,115 @@
+# babel-plugin-transform-react-jsx
+
+> Turn JSX into React function calls
+
+## Example
+
+### React
+
+**In**
+
+```javascript
+var profile = <div>
+  <img src="avatar.png" className="profile" />
+  <h3>{[user.firstName, user.lastName].join(' ')}</h3>
+</div>;
+```
+
+**Out**
+
+```javascript
+var profile = React.createElement("div", null,
+  React.createElement("img", { src: "avatar.png", className: "profile" }),
+  React.createElement("h3", null, [user.firstName, user.lastName].join(" "))
+);
+```
+
+### Custom
+
+**In**
+
+```javascript
+/** @jsx dom */
+
+var { dom } = require("deku");
+
+var profile = <div>
+  <img src="avatar.png" className="profile" />
+  <h3>{[user.firstName, user.lastName].join(' ')}</h3>
+</div>;
+```
+
+**Out**
+
+```javascript
+/** @jsx dom */
+
+var dom = require("deku").dom;
+
+var profile = dom( "div", null,
+  dom("img", { src: "avatar.png", className: "profile" }),
+  dom("h3", null, [user.firstName, user.lastName].join(" "))
+);
+```
+
+## Installation
+
+```sh
+npm install --save-dev babel-plugin-transform-react-jsx
+```
+
+## Usage
+
+### Via `.babelrc` (Recommended)
+
+**.babelrc**
+
+Without options:
+
+```json
+{
+  "plugins": ["transform-react-jsx"]
+}
+```
+
+With options:
+
+```json
+{
+  "plugins": [
+    ["transform-react-jsx", {
+      "pragma": "dom" // default pragma is React.createElement
+    }]
+  ]
+}
+```
+
+### Via CLI
+
+```sh
+babel --plugins transform-react-jsx script.js
+```
+
+### Via Node API
+
+```javascript
+require("babel-core").transform("code", {
+  plugins: ["transform-react-jsx"]
+});
+```
+
+## Options
+
+### `pragma`
+
+`string`, defaults to `React.createElement`.
+
+Replace the function used when compiling JSX expressions.
+
+Note that the `@jsx React.DOM` pragma has been deprecated as of React v0.12
+
+### `useBuiltIns`
+
+`boolean`, defaults to `false`.
+
+When spreading props, use `Object.assign` directly instead of Babel's extend helper.
new file mode 100644
--- /dev/null
+++ b/node_modules/babel-plugin-transform-react-jsx/lib/index.js
@@ -0,0 +1,84 @@
+"use strict";
+
+exports.__esModule = true;
+
+var _getIterator2 = require("babel-runtime/core-js/get-iterator");
+
+var _getIterator3 = _interopRequireDefault(_getIterator2);
+
+exports.default = function (_ref) {
+  var t = _ref.types;
+
+  var JSX_ANNOTATION_REGEX = /\*?\s*@jsx\s+([^\s]+)/;
+
+  var visitor = (0, _babelHelperBuilderReactJsx2.default)({
+    pre: function pre(state) {
+      var tagName = state.tagName;
+      var args = state.args;
+      if (t.react.isCompatTag(tagName)) {
+        args.push(t.stringLiteral(tagName));
+      } else {
+        args.push(state.tagExpr);
+      }
+    },
+    post: function post(state, pass) {
+      state.callee = pass.get("jsxIdentifier")();
+    }
+  });
+
+  visitor.Program = function (path, state) {
+    var file = state.file;
+
+    var id = state.opts.pragma || "React.createElement";
+
+    for (var _iterator = file.ast.comments, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) {
+      var _ref2;
+
+      if (_isArray) {
+        if (_i >= _iterator.length) break;
+        _ref2 = _iterator[_i++];
+      } else {
+        _i = _iterator.next();
+        if (_i.done) break;
+        _ref2 = _i.value;
+      }
+
+      var comment = _ref2;
+
+      var matches = JSX_ANNOTATION_REGEX.exec(comment.value);
+      if (matches) {
+        id = matches[1];
+        if (id === "React.DOM") {
+          throw file.buildCodeFrameError(comment, "The @jsx React.DOM pragma has been deprecated as of React 0.12");
+        } else {
+          break;
+        }
+      }
+    }
+
+    state.set("jsxIdentifier", function () {
+      return id.split(".").map(function (name) {
+        return t.identifier(name);
+      }).reduce(function (object, property) {
+        return t.memberExpression(object, property);
+      });
+    });
+  };
+
+  return {
+    inherits: _babelPluginSyntaxJsx2.default,
+    visitor: visitor
+  };
+};
+
+var _babelPluginSyntaxJsx = require("babel-plugin-syntax-jsx");
+
+var _babelPluginSyntaxJsx2 = _interopRequireDefault(_babelPluginSyntaxJsx);
+
+var _babelHelperBuilderReactJsx = require("babel-helper-builder-react-jsx");
+
+var _babelHelperBuilderReactJsx2 = _interopRequireDefault(_babelHelperBuilderReactJsx);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+module.exports = exports["default"];
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/node_modules/babel-plugin-transform-react-jsx/package.json
@@ -0,0 +1,47 @@
+{
+  "_from": "babel-plugin-transform-react-jsx@^6.24.1",
+  "_id": "babel-plugin-transform-react-jsx@6.24.1",
+  "_inBundle": false,
+  "_integrity": "sha1-hAoCjn30YN/DotKfDA2R9jduZqM=",
+  "_location": "/babel-plugin-transform-react-jsx",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "babel-plugin-transform-react-jsx@^6.24.1",
+    "name": "babel-plugin-transform-react-jsx",
+    "escapedName": "babel-plugin-transform-react-jsx",
+    "rawSpec": "^6.24.1",
+    "saveSpec": null,
+    "fetchSpec": "^6.24.1"
+  },
+  "_requiredBy": [
+    "/babel-preset-react"
+  ],
+  "_resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz",
+  "_shasum": "840a028e7df460dfc3a2d29f0c0d91f6376e66a3",
+  "_spec": "babel-plugin-transform-react-jsx@^6.24.1",
+  "_where": "/Users/dmose/r/gecko/node_modules/babel-preset-react",
+  "bundleDependencies": false,
+  "dependencies": {
+    "babel-helper-builder-react-jsx": "^6.24.1",
+    "babel-plugin-syntax-jsx": "^6.8.0",
+    "babel-runtime": "^6.22.0"
+  },
+  "deprecated": false,
+  "description": "Turn JSX into React function calls",
+  "devDependencies": {
+    "babel-helper-plugin-test-runner": "^6.24.1"
+  },
+  "keywords": [
+    "babel-plugin"
+  ],
+  "license": "MIT",
+  "main": "lib/index.js",
+  "name": "babel-plugin-transform-react-jsx",
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-react-jsx"
+  },
+  "version": "6.24.1"
+}
new file mode 100644
--- /dev/null
+++ b/node_modules/babel-preset-flow/.npmignore
@@ -0,0 +1,3 @@
+src
+test
+node_modules
new file mode 100644
--- /dev/null
+++ b/node_modules/babel-preset-flow/README.md
@@ -0,0 +1,53 @@
+# babel-preset-flow
+
+> Babel preset for all Flow plugins.
+
+This preset includes the following plugins:
+
+- [transform-flow-strip-types](https://babeljs.io/docs/plugins/transform-flow-strip-types/)
+
+## Example
+
+**In**
+
+```javascript
+function foo(one: any, two: number, three?): string {}
+```
+
+**Out**
+
+```javascript
+function foo(one, two, three) {}
+```
+
+## Installation
+
+```sh
+npm install --save-dev babel-preset-flow
+```
+
+## Usage
+
+### Via `.babelrc` (Recommended)
+
+**.babelrc**
+
+```json
+{
+  "presets": ["flow"]
+}
+```
+
+### Via CLI
+
+```sh
+babel --presets flow script.js
+```
+
+### Via Node API
+
+```javascript
+require("babel-core").transform("code", {
+  presets: ["flow"]
+});
+```
new file mode 100644
--- /dev/null
+++ b/node_modules/babel-preset-flow/lib/index.js
@@ -0,0 +1,14 @@
+"use strict";
+
+exports.__esModule = true;
+
+var _babelPluginTransformFlowStripTypes = require("babel-plugin-transform-flow-strip-types");
+
+var _babelPluginTransformFlowStripTypes2 = _interopRequireDefault(_babelPluginTransformFlowStripTypes);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+exports.default = {
+  plugins: [_babelPluginTransformFlowStripTypes2.default]
+};
+module.exports = exports["default"];
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/node_modules/babel-preset-flow/package.json
@@ -0,0 +1,49 @@
+{
+  "_from": "babel-preset-flow@^6.23.0",
+  "_id": "babel-preset-flow@6.23.0",
+  "_inBundle": false,
+  "_integrity": "sha1-5xIYiHCFrpoktb5Baa/7WZgWxJ0=",
+  "_location": "/babel-preset-flow",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "babel-preset-flow@^6.23.0",
+    "name": "babel-preset-flow",
+    "escapedName": "babel-preset-flow",
+    "rawSpec": "^6.23.0",
+    "saveSpec": null,
+    "fetchSpec": "^6.23.0"
+  },
+  "_requiredBy": [
+    "/babel-preset-react"
+  ],
+  "_resolved": "https://registry.npmjs.org/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz",
+  "_shasum": "e71218887085ae9a24b5be4169affb599816c49d",
+  "_spec": "babel-preset-flow@^6.23.0",
+  "_where": "/Users/dmose/r/gecko/node_modules/babel-preset-react",
+  "author": {
+    "name": "James Kyle",
+    "email": "me@thejameskyle.com"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "babel-plugin-transform-flow-strip-types": "^6.22.0"
+  },
+  "deprecated": false,
+  "description": "Babel preset for all Flow plugins.",
+  "keywords": [
+    "babel-preset",
+    "flowtype",
+    "flow",
+    "types"
+  ],
+  "license": "MIT",
+  "main": "lib/index.js",
+  "name": "babel-preset-flow",
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/babel/babel/tree/master/packages/babel-preset-flow"
+  },
+  "version": "6.23.0"
+}
new file mode 100644
--- /dev/null
+++ b/node_modules/babel-preset-react/.npmignore
@@ -0,0 +1,3 @@
+src
+test
+node_modules
new file mode 100644
--- /dev/null
+++ b/node_modules/babel-preset-react/README.md
@@ -0,0 +1,66 @@
+# babel-preset-react
+
+> Babel preset for all React plugins.
+
+This preset includes the following plugins/presets:
+
+- [preset-flow](https://babeljs.io/docs/plugins/preset-flow/)
+- [syntax-jsx](https://babeljs.io/docs/plugins/syntax-jsx/)
+- [transform-react-jsx](https://babeljs.io/docs/plugins/transform-react-jsx/)
+- [transform-react-display-name](https://babeljs.io/docs/plugins/transform-react-display-name/)
+
+## Install
+
+> You can also check out the React [Getting Started page](https://facebook.github.io/react/docs/hello-world.html)
+
+> For more info, check out the setup page on the [cli](/docs/setup/) and the [usage](/docs/usage/cli/) docs.
+
+Install the CLI and this preset
+
+```sh
+npm install --save-dev babel-cli babel-preset-react
+```
+
+Make a .babelrc config file with the preset
+
+```sh
+echo '{ "presets": ["react"] }' > .babelrc
+```
+
+Create a file to run on
+
+```sh
+echo '<h1>Hello, world!</h1>' > index.js
+```
+
+View the output
+
+```sh
+./node_modules/.bin/babel index.js
+```
+
+## Usage
+
+### Via `.babelrc` (Recommended)
+
+**.babelrc**
+
+```json
+{
+  "presets": ["react"]
+}
+```
+
+### Via CLI
+
+```sh
+babel script.js --presets react 
+```
+
+### Via Node API
+
+```javascript
+require("babel-core").transform("code", {
+  presets: ["react"]
+});
+```
new file mode 100644
--- /dev/null
+++ b/node_modules/babel-preset-react/lib/index.js
@@ -0,0 +1,32 @@
+"use strict";
+
+exports.__esModule = true;
+
+var _babelPresetFlow = require("babel-preset-flow");
+
+var _babelPresetFlow2 = _interopRequireDefault(_babelPresetFlow);
+
+var _babelPluginTransformReactJsx = require("babel-plugin-transform-react-jsx");
+
+var _babelPluginTransformReactJsx2 = _interopRequireDefault(_babelPluginTransformReactJsx);
+
+var _babelPluginSyntaxJsx = require("babel-plugin-syntax-jsx");
+
+var _babelPluginSyntaxJsx2 = _interopRequireDefault(_babelPluginSyntaxJsx);
+
+var _babelPluginTransformReactDisplayName = require("babel-plugin-transform-react-display-name");
+
+var _babelPluginTransformReactDisplayName2 = _interopRequireDefault(_babelPluginTransformReactDisplayName);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+exports.default = {
+  presets: [_babelPresetFlow2.default],
+  plugins: [_babelPluginTransformReactJsx2.default, _babelPluginSyntaxJsx2.default, _babelPluginTransformReactDisplayName2.default],
+  env: {
+    development: {
+      plugins: []
+    }
+  }
+};
+module.exports = exports["default"];
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/node_modules/babel-preset-react/package.json
@@ -0,0 +1,50 @@
+{
+  "_from": "babel-preset-react@6.24.1",
+  "_id": "babel-preset-react@6.24.1",
+  "_inBundle": false,
+  "_integrity": "sha1-umnfrqRfw+xjm2pOzqbhdwLJE4A=",
+  "_location": "/babel-preset-react",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "babel-preset-react@6.24.1",
+    "name": "babel-preset-react",
+    "escapedName": "babel-preset-react",
+    "rawSpec": "6.24.1",
+    "saveSpec": null,
+    "fetchSpec": "6.24.1"
+  },
+  "_requiredBy": [
+    "#DEV:/",
+    "#USER"
+  ],
+  "_resolved": "https://registry.npmjs.org/babel-preset-react/-/babel-preset-react-6.24.1.tgz",
+  "_shasum": "ba69dfaea45fc3ec639b6a4ecea6e17702c91380",
+  "_spec": "babel-preset-react@6.24.1",
+  "_where": "/Users/dmose/r/gecko",
+  "author": {
+    "name": "Sebastian McKenzie",
+    "email": "sebmck@gmail.com"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "babel-plugin-syntax-jsx": "^6.3.13",
+    "babel-plugin-transform-react-display-name": "^6.23.0",
+    "babel-plugin-transform-react-jsx": "^6.24.1",
+    "babel-plugin-transform-react-jsx-self": "^6.22.0",
+    "babel-plugin-transform-react-jsx-source": "^6.22.0",
+    "babel-preset-flow": "^6.23.0"
+  },
+  "deprecated": false,
+  "description": "Babel preset for all React plugins.",
+  "homepage": "https://babeljs.io/",
+  "license": "MIT",
+  "main": "lib/index.js",
+  "name": "babel-preset-react",
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/babel/babel/tree/master/packages/babel-preset-react"
+  },
+  "version": "6.24.1"
+}
--- a/package-lock.json
+++ b/package-lock.json
@@ -270,16 +270,27 @@
         "babel-types": "6.26.0",
         "detect-indent": "4.0.0",
         "jsesc": "1.3.0",
         "lodash": "4.17.10",
         "source-map": "0.5.7",
         "trim-right": "1.0.1"
       }
     },
+    "babel-helper-builder-react-jsx": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmjs.org/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz",
+      "integrity": "sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "6.26.0",
+        "babel-types": "6.26.0",
+        "esutils": "2.0.2"
+      }
+    },
     "babel-helpers": {
       "version": "6.24.1",
       "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz",
       "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=",
       "dev": true,
       "requires": {
         "babel-runtime": "6.26.0",
         "babel-template": "6.26.0"
@@ -300,16 +311,101 @@
       "version": "6.23.0",
       "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
       "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
       "dev": true,
       "requires": {
         "babel-runtime": "6.26.0"
       }
     },
+    "babel-plugin-syntax-flow": {
+      "version": "6.18.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz",
+      "integrity": "sha1-TDqyCiryaqIM0lmVw5jE63AxDI0=",
+      "dev": true
+    },
+    "babel-plugin-syntax-jsx": {
+      "version": "6.18.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz",
+      "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=",
+      "dev": true
+    },
+    "babel-plugin-transform-flow-strip-types": {
+      "version": "6.22.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz",
+      "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=",
+      "dev": true,
+      "requires": {
+        "babel-plugin-syntax-flow": "6.18.0",
+        "babel-runtime": "6.26.0"
+      }
+    },
+    "babel-plugin-transform-react-display-name": {
+      "version": "6.25.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz",
+      "integrity": "sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "6.26.0"
+      }
+    },
+    "babel-plugin-transform-react-jsx": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz",
+      "integrity": "sha1-hAoCjn30YN/DotKfDA2R9jduZqM=",
+      "dev": true,
+      "requires": {
+        "babel-helper-builder-react-jsx": "6.26.0",
+        "babel-plugin-syntax-jsx": "6.18.0",
+        "babel-runtime": "6.26.0"
+      }
+    },
+    "babel-plugin-transform-react-jsx-self": {
+      "version": "6.22.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz",
+      "integrity": "sha1-322AqdomEqEh5t3XVYvL7PBuY24=",
+      "dev": true,
+      "requires": {
+        "babel-plugin-syntax-jsx": "6.18.0",
+        "babel-runtime": "6.26.0"
+      }
+    },
+    "babel-plugin-transform-react-jsx-source": {
+      "version": "6.22.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz",
+      "integrity": "sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY=",
+      "dev": true,
+      "requires": {
+        "babel-plugin-syntax-jsx": "6.18.0",
+        "babel-runtime": "6.26.0"
+      }
+    },
+    "babel-preset-flow": {
+      "version": "6.23.0",
+      "resolved": "https://registry.npmjs.org/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz",
+      "integrity": "sha1-5xIYiHCFrpoktb5Baa/7WZgWxJ0=",
+      "dev": true,
+      "requires": {
+        "babel-plugin-transform-flow-strip-types": "6.22.0"
+      }
+    },
+    "babel-preset-react": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-preset-react/-/babel-preset-react-6.24.1.tgz",
+      "integrity": "sha1-umnfrqRfw+xjm2pOzqbhdwLJE4A=",
+      "dev": true,
+      "requires": {
+        "babel-plugin-syntax-jsx": "6.18.0",
+        "babel-plugin-transform-react-display-name": "6.25.0",
+        "babel-plugin-transform-react-jsx": "6.24.1",
+        "babel-plugin-transform-react-jsx-self": "6.22.0",
+        "babel-plugin-transform-react-jsx-source": "6.22.0",
+        "babel-preset-flow": "6.23.0"
+      }
+    },
     "babel-register": {
       "version": "6.26.0",
       "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz",
       "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=",
       "dev": true,
       "requires": {
         "babel-core": "6.26.3",
         "babel-runtime": "6.26.0",
--- a/package.json
+++ b/package.json
@@ -10,11 +10,12 @@
     "eslint-plugin-mozilla": "file:tools/lint/eslint/eslint-plugin-mozilla",
     "eslint-plugin-no-unsanitized": "3.0.0",
     "eslint-plugin-react": "7.1.0",
     "eslint-plugin-spidermonkey-js": "file:tools/lint/eslint/eslint-plugin-spidermonkey-js"
   },
   "devDependencies": {
     "babel-core": "6.26.3",
     "babel-loader": "7.1.4",
+    "babel-preset-react": "6.24.1",
     "webpack": "3.10.0"
   }
 }