summaryrefslogtreecommitdiff
path: root/node_modules/babel-plugin-transform-inline-consecutive-adds/lib/object-collapser.js
diff options
context:
space:
mode:
authorlittleblack111 <littleblack11111@gmail.com>2024-08-30 17:21:18 +0800
committerlittleblack111 <littleblack11111@gmail.com>2024-08-30 17:21:18 +0800
commitefbc2ffe6a1ee5ec38a4396305561d6515d0943e (patch)
tree2b4c94f18f2c792dfda813050755d5c0273fae22 /node_modules/babel-plugin-transform-inline-consecutive-adds/lib/object-collapser.js
parent43acceb75957c880a5ba5a31aae221394a36d5f6 (diff)
node fixes, updates
Diffstat (limited to 'node_modules/babel-plugin-transform-inline-consecutive-adds/lib/object-collapser.js')
-rw-r--r--node_modules/babel-plugin-transform-inline-consecutive-adds/lib/object-collapser.js60
1 files changed, 60 insertions, 0 deletions
diff --git a/node_modules/babel-plugin-transform-inline-consecutive-adds/lib/object-collapser.js b/node_modules/babel-plugin-transform-inline-consecutive-adds/lib/object-collapser.js
new file mode 100644
index 00000000..c8fe59ad
--- /dev/null
+++ b/node_modules/babel-plugin-transform-inline-consecutive-adds/lib/object-collapser.js
@@ -0,0 +1,60 @@
+"use strict";
+
+const Collapser = require("./collapser");
+
+class ObjectCollapser extends Collapser {
+ isInitTypeValid(init) {
+ return init.isObjectExpression();
+ }
+
+ isExpressionTypeValid(expr) {
+ return expr.isAssignmentExpression();
+ }
+
+ getExpressionChecker(objName, checkReference) {
+ return expr => {
+ // checks expr is of form:
+ // foo.a = rval | foo[a] = rval
+ const left = expr.get("left");
+
+ if (!left.isMemberExpression()) {
+ return false;
+ }
+
+ const obj = left.get("object"),
+ prop = left.get("property");
+
+ if (!obj.isIdentifier() || obj.node.name !== objName) {
+ return false;
+ }
+
+ if (!prop.isIdentifier() && checkReference(prop)) {
+ return false;
+ }
+
+ if (left.node.computed && !(prop.isStringLiteral() || prop.isNumericLiteral())) {
+ return false;
+ }
+
+ const right = expr.get("right");
+
+ if (checkReference(right)) {
+ return false;
+ }
+
+ return true;
+ };
+ }
+
+ extractAssignment(expr) {
+ return [expr.node.left.property, expr.node.right];
+ }
+
+ addSuccessfully(t, [left, right], init) {
+ init.properties.push(t.objectProperty(left, right));
+ return true;
+ }
+
+}
+
+module.exports = ObjectCollapser; \ No newline at end of file