aboutsummaryrefslogtreecommitdiff
path: root/node_modules/@babel/helper-simple-access
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/@babel/helper-simple-access')
-rw-r--r--node_modules/@babel/helper-simple-access/README.md26
-rw-r--r--node_modules/@babel/helper-simple-access/lib/index.js81
-rw-r--r--node_modules/@babel/helper-simple-access/package.json15
3 files changed, 122 insertions, 0 deletions
diff --git a/node_modules/@babel/helper-simple-access/README.md b/node_modules/@babel/helper-simple-access/README.md
new file mode 100644
index 00000000..81660daf
--- /dev/null
+++ b/node_modules/@babel/helper-simple-access/README.md
@@ -0,0 +1,26 @@
+# @babel/helper-simple-assignment
+
+There are many cases where it is hard to perform transformations because a
+piece of code is using complex structures. Say you want to rewrite all accesses
+to a given variable, and there are cases like
+
+```
+i += 1
+--i;
+```
+
+It is difficult to work with.
+
+This helper can handle converting these to simple access patterns of standard
+assignment. This plugin does _not_ handle
+
+```
+{ a } = foo;
+```
+
+so assignment to patterns still needs to be handled when you are processing
+updates to values.
+
+## Usage
+
+TODO
diff --git a/node_modules/@babel/helper-simple-access/lib/index.js b/node_modules/@babel/helper-simple-access/lib/index.js
new file mode 100644
index 00000000..bb227456
--- /dev/null
+++ b/node_modules/@babel/helper-simple-access/lib/index.js
@@ -0,0 +1,81 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = simplifyAccess;
+
+function t() {
+ const data = _interopRequireWildcard(require("@babel/types"));
+
+ t = function t() {
+ return data;
+ };
+
+ return data;
+}
+
+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)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }
+
+function simplifyAccess(path, bindingNames) {
+ path.traverse(simpleAssignmentVisitor, {
+ scope: path.scope,
+ bindingNames,
+ seen: new WeakSet()
+ });
+}
+
+const simpleAssignmentVisitor = {
+ UpdateExpression: {
+ exit(path) {
+ const scope = this.scope,
+ bindingNames = this.bindingNames;
+ const arg = path.get("argument");
+ if (!arg.isIdentifier()) return;
+ const localName = arg.node.name;
+ if (!bindingNames.has(localName)) return;
+
+ if (scope.getBinding(localName) !== path.scope.getBinding(localName)) {
+ return;
+ }
+
+ if (path.parentPath.isExpressionStatement() && !path.isCompletionRecord()) {
+ const operator = path.node.operator == "++" ? "+=" : "-=";
+ path.replaceWith(t().assignmentExpression(operator, arg.node, t().numericLiteral(1)));
+ } else if (path.node.prefix) {
+ path.replaceWith(t().assignmentExpression("=", t().identifier(localName), t().binaryExpression(path.node.operator[0], t().unaryExpression("+", arg.node), t().numericLiteral(1))));
+ } else {
+ const old = path.scope.generateUidIdentifierBasedOnNode(arg.node, "old");
+ const varName = old.name;
+ path.scope.push({
+ id: old
+ });
+ const binary = t().binaryExpression(path.node.operator[0], t().identifier(varName), t().numericLiteral(1));
+ path.replaceWith(t().sequenceExpression([t().assignmentExpression("=", t().identifier(varName), t().unaryExpression("+", arg.node)), t().assignmentExpression("=", t().cloneNode(arg.node), binary), t().identifier(varName)]));
+ }
+ }
+
+ },
+ AssignmentExpression: {
+ exit(path) {
+ const scope = this.scope,
+ seen = this.seen,
+ bindingNames = this.bindingNames;
+ if (path.node.operator === "=") return;
+ if (seen.has(path.node)) return;
+ seen.add(path.node);
+ const left = path.get("left");
+ if (!left.isIdentifier()) return;
+ const localName = left.node.name;
+ if (!bindingNames.has(localName)) return;
+
+ if (scope.getBinding(localName) !== path.scope.getBinding(localName)) {
+ return;
+ }
+
+ path.node.right = t().binaryExpression(path.node.operator.slice(0, -1), t().cloneNode(path.node.left), path.node.right);
+ path.node.operator = "=";
+ }
+
+ }
+}; \ No newline at end of file
diff --git a/node_modules/@babel/helper-simple-access/package.json b/node_modules/@babel/helper-simple-access/package.json
new file mode 100644
index 00000000..0a01c724
--- /dev/null
+++ b/node_modules/@babel/helper-simple-access/package.json
@@ -0,0 +1,15 @@
+{
+ "name": "@babel/helper-simple-access",
+ "version": "7.0.0-beta.47",
+ "description": "Babel helper for ensuring that access to a given value is performed through simple accesses",
+ "author": "Logan Smyth <loganfsmyth@gmail.com>",
+ "homepage": "https://babeljs.io/",
+ "license": "MIT",
+ "repository": "https://github.com/babel/babel/tree/master/packages/babel-helper-simple-access",
+ "main": "lib/index.js",
+ "dependencies": {
+ "@babel/template": "7.0.0-beta.47",
+ "@babel/types": "7.0.0-beta.47",
+ "lodash": "^4.17.5"
+ }
+}