summaryrefslogtreecommitdiff
path: root/node_modules/@babel/plugin-transform-destructuring/lib/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/@babel/plugin-transform-destructuring/lib/index.js')
-rw-r--r--node_modules/@babel/plugin-transform-destructuring/lib/index.js34
1 files changed, 33 insertions, 1 deletions
diff --git a/node_modules/@babel/plugin-transform-destructuring/lib/index.js b/node_modules/@babel/plugin-transform-destructuring/lib/index.js
index 6f9c2169..1f1a8460 100644
--- a/node_modules/@babel/plugin-transform-destructuring/lib/index.js
+++ b/node_modules/@babel/plugin-transform-destructuring/lib/index.js
@@ -105,7 +105,39 @@ class DestructuringTransformer {
if (this.iterableIsArray || core.types.isIdentifier(node) && this.arrayRefSet.has(node.name)) {
return node;
} else {
- return this.scope.toArray(node, count, this.arrayLikeIsIterable);
+ const {
+ scope,
+ arrayLikeIsIterable
+ } = this;
+ if (core.types.isIdentifier(node)) {
+ const binding = scope.getBinding(node.name);
+ if (binding != null && binding.constant && binding.path.isGenericType("Array")) {
+ return node;
+ }
+ }
+ if (core.types.isArrayExpression(node)) {
+ return node;
+ }
+ if (core.types.isIdentifier(node, {
+ name: "arguments"
+ })) {
+ return core.template.expression.ast`
+ Array.prototype.slice.call(${node})
+ `;
+ }
+ let helperName;
+ const args = [node];
+ if (typeof count === "number") {
+ args.push(core.types.numericLiteral(count));
+ helperName = "slicedToArray";
+ } else {
+ helperName = "toArray";
+ }
+ if (arrayLikeIsIterable) {
+ args.unshift(scope.path.hub.addHelper(helperName));
+ helperName = "maybeArrayLike";
+ }
+ return core.types.callExpression(scope.path.hub.addHelper(helperName), args);
}
}
pushAssignmentPattern({