summaryrefslogtreecommitdiff
path: root/node_modules/@babel/helper-wrap-function/lib/index.js
diff options
context:
space:
mode:
authorlittleblack111 <littleblack11111@gmail.com>2023-10-14 15:31:11 +0800
committerlittleblack111 <littleblack11111@gmail.com>2023-10-14 15:31:11 +0800
commitaa773172311dcada759dfbaac485f4bc6e00bc21 (patch)
treeca6d9a5eff3ab8f689f9acb4f0df791d9486813d /node_modules/@babel/helper-wrap-function/lib/index.js
parentc5a5384e846f242e901e859fe600d695d8990a9a (diff)
added babel
Diffstat (limited to 'node_modules/@babel/helper-wrap-function/lib/index.js')
-rw-r--r--node_modules/@babel/helper-wrap-function/lib/index.js123
1 files changed, 123 insertions, 0 deletions
diff --git a/node_modules/@babel/helper-wrap-function/lib/index.js b/node_modules/@babel/helper-wrap-function/lib/index.js
new file mode 100644
index 00000000..3c7b997a
--- /dev/null
+++ b/node_modules/@babel/helper-wrap-function/lib/index.js
@@ -0,0 +1,123 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = wrapFunction;
+var _helperFunctionName = require("@babel/helper-function-name");
+var _template = require("@babel/template");
+var _t = require("@babel/types");
+const {
+ blockStatement,
+ callExpression,
+ functionExpression,
+ isAssignmentPattern,
+ isFunctionDeclaration,
+ isRestElement,
+ returnStatement,
+ isCallExpression
+} = _t;
+const buildAnonymousExpressionWrapper = _template.default.expression(`
+ (function () {
+ var REF = FUNCTION;
+ return function NAME(PARAMS) {
+ return REF.apply(this, arguments);
+ };
+ })()
+`);
+const buildNamedExpressionWrapper = _template.default.expression(`
+ (function () {
+ var REF = FUNCTION;
+ function NAME(PARAMS) {
+ return REF.apply(this, arguments);
+ }
+ return NAME;
+ })()
+`);
+const buildDeclarationWrapper = _template.default.statements(`
+ function NAME(PARAMS) { return REF.apply(this, arguments); }
+ function REF() {
+ REF = FUNCTION;
+ return REF.apply(this, arguments);
+ }
+`);
+function classOrObjectMethod(path, callId) {
+ const node = path.node;
+ const body = node.body;
+ const container = functionExpression(null, [], blockStatement(body.body), true);
+ body.body = [returnStatement(callExpression(callExpression(callId, [container]), []))];
+ node.async = false;
+ node.generator = false;
+ path.get("body.body.0.argument.callee.arguments.0").unwrapFunctionEnvironment();
+}
+function plainFunction(inPath, callId, noNewArrows, ignoreFunctionLength) {
+ let path = inPath;
+ let node;
+ let functionId = null;
+ const nodeParams = inPath.node.params;
+ if (path.isArrowFunctionExpression()) {
+ {
+ var _path$arrowFunctionTo;
+ path = (_path$arrowFunctionTo = path.arrowFunctionToExpression({
+ noNewArrows
+ })) != null ? _path$arrowFunctionTo : path;
+ }
+ node = path.node;
+ } else {
+ node = path.node;
+ }
+ const isDeclaration = isFunctionDeclaration(node);
+ let built = node;
+ if (!isCallExpression(node)) {
+ functionId = node.id;
+ node.id = null;
+ node.type = "FunctionExpression";
+ built = callExpression(callId, [node]);
+ }
+ const params = [];
+ for (const param of nodeParams) {
+ if (isAssignmentPattern(param) || isRestElement(param)) {
+ break;
+ }
+ params.push(path.scope.generateUidIdentifier("x"));
+ }
+ const wrapperArgs = {
+ NAME: functionId || null,
+ REF: path.scope.generateUidIdentifier(functionId ? functionId.name : "ref"),
+ FUNCTION: built,
+ PARAMS: params
+ };
+ if (isDeclaration) {
+ const container = buildDeclarationWrapper(wrapperArgs);
+ path.replaceWith(container[0]);
+ path.insertAfter(container[1]);
+ } else {
+ let container;
+ if (functionId) {
+ container = buildNamedExpressionWrapper(wrapperArgs);
+ } else {
+ container = buildAnonymousExpressionWrapper(wrapperArgs);
+ const returnFn = container.callee.body.body[1].argument;
+ (0, _helperFunctionName.default)({
+ node: returnFn,
+ parent: path.parent,
+ scope: path.scope
+ });
+ functionId = returnFn.id;
+ }
+ if (functionId || !ignoreFunctionLength && params.length) {
+ path.replaceWith(container);
+ } else {
+ path.replaceWith(built);
+ }
+ }
+}
+function wrapFunction(path, callId, noNewArrows = true, ignoreFunctionLength = false) {
+ if (path.isMethod()) {
+ classOrObjectMethod(path, callId);
+ } else {
+ plainFunction(path, callId, noNewArrows, ignoreFunctionLength);
+ }
+}
+
+//# sourceMappingURL=index.js.map