You're Invited:Meet the Socket Team at RSAC and BSidesSF 2026, March 23–26.RSVP
Socket
Book a DemoSign in
Socket

@babel/plugin-transform-spread

Package Overview
Dependencies
Maintainers
4
Versions
98
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@babel/plugin-transform-spread - npm Package Compare versions

Comparing version
8.0.0-rc.2
to
8.0.0-rc.3
+1
-1
lib/index.js

@@ -6,3 +6,3 @@ import { declare } from '@babel/helper-plugin-utils';

var index = declare((api, options) => {
api.assertVersion("^7.0.0-0 || ^8.0.0 || 8.0.0-rc.2");
api.assertVersion("^7.0.0-0 || ^8.0.0 || 8.0.0-rc.3");
const iterableIsArray = api.assumption("iterableIsArray") ?? options.loose;

@@ -9,0 +9,0 @@ const arrayLikeIsIterable = options.allowArrayLike ?? api.assumption("arrayLikeIsIterable");

@@ -1,1 +0,1 @@

{"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import { declare } from \"@babel/helper-plugin-utils\";\nimport { skipTransparentExprWrappers } from \"@babel/helper-skip-transparent-expression-wrappers\";\nimport { types as t, template } from \"@babel/core\";\nimport type { File, NodePath, Scope } from \"@babel/core\";\n\ntype ListElement = t.SpreadElement | t.Expression;\n\nexport interface Options {\n allowArrayLike?: boolean;\n loose?: boolean;\n}\n\nexport default declare((api, options: Options) => {\n api.assertVersion(REQUIRED_VERSION(7));\n\n const iterableIsArray = api.assumption(\"iterableIsArray\") ?? options.loose;\n const arrayLikeIsIterable =\n options.allowArrayLike ?? api.assumption(\"arrayLikeIsIterable\");\n\n function getSpreadLiteral(\n spread: t.SpreadElement,\n scope: Scope,\n ): t.Expression {\n if (\n iterableIsArray &&\n !t.isIdentifier(spread.argument, { name: \"arguments\" })\n ) {\n return spread.argument;\n } else {\n const node = spread.argument;\n\n if (t.isIdentifier(node)) {\n const binding = scope.getBinding(node.name);\n if (binding?.constant && binding.path.isGenericType(\"Array\")) {\n return node;\n }\n }\n\n if (t.isArrayExpression(node)) {\n return node;\n }\n\n if (t.isIdentifier(node, { name: \"arguments\" })) {\n return template.expression.ast`\n Array.prototype.slice.call(${node})\n `;\n }\n\n const args = [node];\n let helperName = \"toConsumableArray\";\n\n if (arrayLikeIsIterable) {\n args.unshift(scope.path.hub.addHelper(helperName));\n helperName = \"maybeArrayLike\";\n }\n\n return t.callExpression(scope.path.hub.addHelper(helperName), args);\n }\n }\n\n function hasHole(spread: t.ArrayExpression): boolean {\n return spread.elements.includes(null);\n }\n\n function hasSpread(nodes: t.Node[]): boolean {\n for (let i = 0; i < nodes.length; i++) {\n if (t.isSpreadElement(nodes[i])) {\n return true;\n }\n }\n return false;\n }\n\n function push(_props: ListElement[], nodes: t.Expression[]) {\n if (!_props.length) return _props;\n nodes.push(t.arrayExpression(_props));\n return [];\n }\n\n function build(\n props: ListElement[],\n scope: Scope,\n file: File,\n ): t.Expression[] {\n const nodes: t.Expression[] = [];\n let _props: ListElement[] = [];\n\n for (const prop of props) {\n if (t.isSpreadElement(prop)) {\n _props = push(_props, nodes);\n let spreadLiteral = getSpreadLiteral(prop, scope);\n\n if (t.isArrayExpression(spreadLiteral) && hasHole(spreadLiteral)) {\n spreadLiteral = t.callExpression(file.addHelper(\"arrayLikeToArray\"), [\n spreadLiteral,\n ]);\n }\n\n nodes.push(spreadLiteral);\n } else {\n _props.push(prop);\n }\n }\n\n push(_props, nodes);\n\n return nodes;\n }\n\n return {\n name: \"transform-spread\",\n\n visitor: {\n ArrayExpression(path): void {\n const { node, scope } = path;\n const elements = node.elements;\n if (!hasSpread(elements)) return;\n\n const nodes = build(elements, scope, this.file);\n let first = nodes[0];\n\n // If there is only one element in the ArrayExpression and\n // the element was transformed (Array.prototype.slice.call or toConsumableArray)\n // we know that the transformed code already takes care of cloning the array.\n // So we can simply return that element.\n if (\n nodes.length === 1 &&\n first !== (elements[0] as t.SpreadElement).argument\n ) {\n path.replaceWith(first);\n return;\n }\n\n // If the first element is a ArrayExpression we can directly call\n // concat on it.\n // `[..].concat(..)`\n // If not then we have to use `[].concat(arr)` and not `arr.concat`\n // because `arr` could be extended/modified (e.g. Immutable) and we do not know exactly\n // what concat would produce.\n if (!t.isArrayExpression(first)) {\n first = t.arrayExpression([]);\n } else {\n nodes.shift();\n }\n\n path.replaceWith(\n t.callExpression(\n t.memberExpression(first, t.identifier(\"concat\")),\n nodes,\n ),\n );\n },\n CallExpression(path): void {\n const { node, scope } = path;\n\n const args = node.arguments as ListElement[];\n if (!hasSpread(args)) return;\n const calleePath = skipTransparentExprWrappers(\n path.get(\"callee\") as NodePath<t.Expression>,\n );\n if (calleePath.isSuper()) {\n // NOTE: spread and classes have almost the same compat data, so this is very unlikely to happen in practice.\n throw path.buildCodeFrameError(\n \"It's not possible to compile spread arguments in `super()` without compiling classes.\\n\" +\n \"Please add '@babel/plugin-transform-classes' to your Babel configuration.\",\n );\n }\n let contextLiteral: t.Expression | t.Super = scope.buildUndefinedNode();\n node.arguments = [];\n\n let nodes: t.Expression[];\n if (\n args.length === 1 &&\n t.isIdentifier((args[0] as t.SpreadElement).argument, {\n name: \"arguments\",\n })\n ) {\n nodes = [(args[0] as t.SpreadElement).argument];\n } else {\n nodes = build(args, scope, this.file);\n }\n\n const first = nodes.shift();\n if (nodes.length) {\n node.arguments.push(\n t.callExpression(\n t.memberExpression(first, t.identifier(\"concat\")),\n nodes,\n ),\n );\n } else {\n node.arguments.push(first);\n }\n\n const callee = calleePath.node as t.MemberExpression;\n\n if (t.isMemberExpression(callee)) {\n const temp = scope.maybeGenerateMemoised(callee.object);\n if (temp) {\n callee.object = t.assignmentExpression(\n \"=\",\n temp,\n // object must not be Super when `temp` is an identifier\n callee.object as t.Expression,\n );\n contextLiteral = temp;\n } else {\n contextLiteral = t.cloneNode(callee.object);\n }\n }\n\n // We use the original callee here, to preserve any types/parentheses\n node.callee = t.memberExpression(\n node.callee as t.Expression,\n t.identifier(\"apply\"),\n );\n if (t.isSuper(contextLiteral)) {\n contextLiteral = t.thisExpression();\n }\n\n node.arguments.unshift(t.cloneNode(contextLiteral));\n },\n\n NewExpression(path): void {\n const { node, scope } = path;\n if (!hasSpread(node.arguments)) return;\n\n const nodes = build(node.arguments as ListElement[], scope, this.file);\n\n const first = nodes.shift();\n\n let args: t.Expression;\n if (nodes.length) {\n args = t.callExpression(\n t.memberExpression(first, t.identifier(\"concat\")),\n nodes,\n );\n } else {\n args = first;\n }\n\n path.replaceWith(\n t.callExpression(path.hub.addHelper(\"construct\"), [\n node.callee as t.Expression,\n args,\n ]),\n );\n },\n },\n };\n});\n"],"names":["declare","api","options","assertVersion","iterableIsArray","assumption","loose","arrayLikeIsIterable","allowArrayLike","getSpreadLiteral","spread","scope","t","isIdentifier","argument","name","node","binding","getBinding","constant","path","isGenericType","isArrayExpression","template","expression","ast","args","helperName","unshift","hub","addHelper","callExpression","hasHole","elements","includes","hasSpread","nodes","i","length","isSpreadElement","push","_props","arrayExpression","build","props","file","prop","spreadLiteral","visitor","ArrayExpression","first","replaceWith","shift","memberExpression","identifier","CallExpression","arguments","calleePath","skipTransparentExprWrappers","get","isSuper","buildCodeFrameError","contextLiteral","buildUndefinedNode","callee","isMemberExpression","temp","maybeGenerateMemoised","object","assignmentExpression","cloneNode","thisExpression","NewExpression"],"mappings":"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"}
{"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import { declare } from \"@babel/helper-plugin-utils\";\nimport { skipTransparentExprWrappers } from \"@babel/helper-skip-transparent-expression-wrappers\";\nimport { types as t, template } from \"@babel/core\";\nimport type { File, NodePath, Scope } from \"@babel/core\";\n\ntype ListElement = t.SpreadElement | t.Expression | null;\n\nexport interface Options {\n allowArrayLike?: boolean;\n loose?: boolean;\n}\n\nexport default declare((api, options: Options) => {\n api.assertVersion(REQUIRED_VERSION(7));\n\n const iterableIsArray = api.assumption(\"iterableIsArray\") ?? options.loose;\n const arrayLikeIsIterable =\n options.allowArrayLike ?? api.assumption(\"arrayLikeIsIterable\");\n\n function getSpreadLiteral(\n spread: t.SpreadElement,\n scope: Scope,\n ): t.Expression {\n if (\n iterableIsArray &&\n !t.isIdentifier(spread.argument, { name: \"arguments\" })\n ) {\n return spread.argument;\n } else {\n const node = spread.argument;\n\n if (t.isIdentifier(node)) {\n const binding = scope.getBinding(node.name);\n if (binding?.constant && binding.path.isGenericType(\"Array\")) {\n return node;\n }\n }\n\n if (t.isArrayExpression(node)) {\n return node;\n }\n\n if (t.isIdentifier(node, { name: \"arguments\" })) {\n return template.expression.ast`\n Array.prototype.slice.call(${node})\n `;\n }\n\n const args = [node];\n let helperName = \"toConsumableArray\";\n\n if (arrayLikeIsIterable) {\n args.unshift(scope.path.hub.addHelper(helperName));\n helperName = \"maybeArrayLike\";\n }\n\n return t.callExpression(scope.path.hub.addHelper(helperName), args);\n }\n }\n\n function hasHole(spread: t.ArrayExpression): boolean {\n return spread.elements.includes(null);\n }\n\n function hasSpread(nodes: (t.Node | null)[]): boolean {\n for (let i = 0; i < nodes.length; i++) {\n if (t.isSpreadElement(nodes[i])) {\n return true;\n }\n }\n return false;\n }\n\n function push(_props: ListElement[], nodes: t.Expression[]) {\n if (!_props.length) return _props;\n nodes.push(t.arrayExpression(_props));\n return [];\n }\n\n function build(\n props: ListElement[],\n scope: Scope,\n file: File,\n ): t.Expression[] {\n const nodes: t.Expression[] = [];\n let _props: ListElement[] = [];\n\n for (const prop of props) {\n if (t.isSpreadElement(prop)) {\n _props = push(_props, nodes);\n let spreadLiteral = getSpreadLiteral(prop, scope);\n\n if (t.isArrayExpression(spreadLiteral) && hasHole(spreadLiteral)) {\n spreadLiteral = t.callExpression(file.addHelper(\"arrayLikeToArray\"), [\n spreadLiteral,\n ]);\n }\n\n nodes.push(spreadLiteral);\n } else {\n _props.push(prop);\n }\n }\n\n push(_props, nodes);\n\n return nodes;\n }\n\n return {\n name: \"transform-spread\",\n\n visitor: {\n ArrayExpression(path): void {\n const { node, scope } = path;\n const elements = node.elements;\n if (!hasSpread(elements)) return;\n\n const nodes = build(elements, scope, this.file);\n let first = nodes[0];\n\n // If there is only one element in the ArrayExpression and\n // the element was transformed (Array.prototype.slice.call or toConsumableArray)\n // we know that the transformed code already takes care of cloning the array.\n // So we can simply return that element.\n if (\n nodes.length === 1 &&\n first !== (elements[0] as t.SpreadElement).argument\n ) {\n path.replaceWith(first);\n return;\n }\n\n // If the first element is a ArrayExpression we can directly call\n // concat on it.\n // `[..].concat(..)`\n // If not then we have to use `[].concat(arr)` and not `arr.concat`\n // because `arr` could be extended/modified (e.g. Immutable) and we do not know exactly\n // what concat would produce.\n if (!t.isArrayExpression(first)) {\n first = t.arrayExpression([]);\n } else {\n nodes.shift();\n }\n\n path.replaceWith(\n t.callExpression(\n t.memberExpression(first, t.identifier(\"concat\")),\n nodes,\n ),\n );\n },\n CallExpression(path): void {\n const { node, scope } = path;\n\n const args = node.arguments as ListElement[];\n if (!hasSpread(args)) return;\n const calleePath = skipTransparentExprWrappers(\n path.get(\"callee\") as NodePath<t.Expression>,\n );\n if (calleePath.isSuper()) {\n // NOTE: spread and classes have almost the same compat data, so this is very unlikely to happen in practice.\n throw path.buildCodeFrameError(\n \"It's not possible to compile spread arguments in `super()` without compiling classes.\\n\" +\n \"Please add '@babel/plugin-transform-classes' to your Babel configuration.\",\n );\n }\n let contextLiteral: t.Expression | t.Super = scope.buildUndefinedNode();\n node.arguments = [];\n\n let nodes: t.Expression[];\n if (\n args.length === 1 &&\n t.isIdentifier((args[0] as t.SpreadElement).argument, {\n name: \"arguments\",\n })\n ) {\n nodes = [(args[0] as t.SpreadElement).argument];\n } else {\n nodes = build(args, scope, this.file);\n }\n\n const first = nodes.shift()!;\n if (nodes.length) {\n node.arguments.push(\n t.callExpression(\n t.memberExpression(first, t.identifier(\"concat\")),\n nodes,\n ),\n );\n } else {\n node.arguments.push(first);\n }\n\n const callee = calleePath.node as t.MemberExpression;\n\n if (t.isMemberExpression(callee)) {\n const temp = scope.maybeGenerateMemoised(callee.object);\n if (temp) {\n callee.object = t.assignmentExpression(\n \"=\",\n temp,\n // object must not be Super when `temp` is an identifier\n callee.object as t.Expression,\n );\n contextLiteral = temp;\n } else {\n contextLiteral = t.cloneNode(callee.object);\n }\n }\n\n // We use the original callee here, to preserve any types/parentheses\n node.callee = t.memberExpression(\n node.callee as t.Expression,\n t.identifier(\"apply\"),\n );\n if (t.isSuper(contextLiteral)) {\n contextLiteral = t.thisExpression();\n }\n\n node.arguments.unshift(t.cloneNode(contextLiteral));\n },\n\n NewExpression(path): void {\n const { node, scope } = path;\n if (!hasSpread(node.arguments)) return;\n\n const nodes = build(node.arguments as ListElement[], scope, this.file);\n\n const first = nodes.shift()!;\n\n let args: t.Expression;\n if (nodes.length) {\n args = t.callExpression(\n t.memberExpression(first, t.identifier(\"concat\")),\n nodes,\n );\n } else {\n args = first;\n }\n\n path.replaceWith(\n t.callExpression(path.hub.addHelper(\"construct\"), [\n node.callee as t.Expression,\n args,\n ]),\n );\n },\n },\n };\n});\n"],"names":["declare","api","options","assertVersion","iterableIsArray","assumption","loose","arrayLikeIsIterable","allowArrayLike","getSpreadLiteral","spread","scope","t","isIdentifier","argument","name","node","binding","getBinding","constant","path","isGenericType","isArrayExpression","template","expression","ast","args","helperName","unshift","hub","addHelper","callExpression","hasHole","elements","includes","hasSpread","nodes","i","length","isSpreadElement","push","_props","arrayExpression","build","props","file","prop","spreadLiteral","visitor","ArrayExpression","first","replaceWith","shift","memberExpression","identifier","CallExpression","arguments","calleePath","skipTransparentExprWrappers","get","isSuper","buildCodeFrameError","contextLiteral","buildUndefinedNode","callee","isMemberExpression","temp","maybeGenerateMemoised","object","assignmentExpression","cloneNode","thisExpression","NewExpression"],"mappings":"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"}
{
"name": "@babel/plugin-transform-spread",
"version": "8.0.0-rc.2",
"version": "8.0.0-rc.3",
"description": "Compile ES2015 spread to ES5",

@@ -19,11 +19,11 @@ "repository": {

"dependencies": {
"@babel/helper-plugin-utils": "^8.0.0-rc.2",
"@babel/helper-skip-transparent-expression-wrappers": "^8.0.0-rc.2"
"@babel/helper-plugin-utils": "^8.0.0-rc.3",
"@babel/helper-skip-transparent-expression-wrappers": "^8.0.0-rc.3"
},
"peerDependencies": {
"@babel/core": "^8.0.0-rc.2"
"@babel/core": "^8.0.0-rc.3"
},
"devDependencies": {
"@babel/core": "^8.0.0-rc.2",
"@babel/helper-plugin-test-runner": "^8.0.0-rc.2"
"@babel/core": "^8.0.0-rc.3",
"@babel/helper-plugin-test-runner": "^8.0.0-rc.3"
},

@@ -30,0 +30,0 @@ "homepage": "https://babel.dev/docs/en/next/babel-plugin-transform-spread",