diff options
Diffstat (limited to 'node_modules/@babel/helper-wrap-function')
| -rw-r--r-- | node_modules/@babel/helper-wrap-function/README.md | 27 | ||||
| -rw-r--r-- | node_modules/@babel/helper-wrap-function/lib/index.js | 132 | ||||
| -rw-r--r-- | node_modules/@babel/helper-wrap-function/package.json | 14 |
3 files changed, 173 insertions, 0 deletions
diff --git a/node_modules/@babel/helper-wrap-function/README.md b/node_modules/@babel/helper-wrap-function/README.md new file mode 100644 index 00000000..25b7eaa2 --- /dev/null +++ b/node_modules/@babel/helper-wrap-function/README.md @@ -0,0 +1,27 @@ +# @babel/helper-wrap-function + +This helper wraps a function within a call expression. It works with any function: statements, expressions and methods; both named and anonymous. + +## Example + +**In** + +```js +(function () { +}()); +``` + +**Out** + +```js +_wrapper(function () { +})(); +``` + +## Usage + +```js +import wrapFunction from "@babel/helper-wrap-function"; + +wrapFunction(nodePathOfTheFunction, nodeWhichReferencesToTheWrapper); +``` 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..953654c7 --- /dev/null +++ b/node_modules/@babel/helper-wrap-function/lib/index.js @@ -0,0 +1,132 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = wrapFunction; + +function _helperFunctionName() { + const data = _interopRequireDefault(require("@babel/helper-function-name")); + + _helperFunctionName = function _helperFunctionName() { + return data; + }; + + return data; +} + +function _template() { + const data = _interopRequireDefault(require("@babel/template")); + + _template = function _template() { + return data; + }; + + return data; +} + +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 _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +const buildExpressionWrapper = _template().default.expression(` + (function () { + var REF = FUNCTION; + return function NAME(PARAMS) { + return REF.apply(this, arguments); + }; + })() +`); + +const buildDeclarationWrapper = (0, _template().default)(` + 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 = t().functionExpression(null, [], t().blockStatement(body.body), true); + body.body = [t().returnStatement(t().callExpression(t().callExpression(callId, [container]), []))]; + node.async = false; + node.generator = false; + path.get("body.body.0.argument.callee.arguments.0").unwrapFunctionEnvironment(); +} + +function plainFunction(path, callId) { + const node = path.node; + const isDeclaration = path.isFunctionDeclaration(); + const functionId = node.id; + const wrapper = isDeclaration ? buildDeclarationWrapper : buildExpressionWrapper; + + if (path.isArrowFunctionExpression()) { + path.arrowFunctionToExpression(); + } + + node.id = null; + + if (isDeclaration) { + node.type = "FunctionExpression"; + } + + const built = t().callExpression(callId, [node]); + const container = wrapper({ + NAME: functionId || null, + REF: path.scope.generateUidIdentifier(functionId ? functionId.name : "ref"), + FUNCTION: built, + PARAMS: node.params.reduce((acc, param) => { + acc.done = acc.done || t().isAssignmentPattern(param) || t().isRestElement(param); + + if (!acc.done) { + acc.params.push(path.scope.generateUidIdentifier("x")); + } + + return acc; + }, { + params: [], + done: false + }).params + }); + + if (isDeclaration) { + path.replaceWith(container[0]); + path.insertAfter(container[1]); + } else { + const retFunction = container.callee.body.body[1].argument; + + if (!functionId) { + (0, _helperFunctionName().default)({ + node: retFunction, + parent: path.parent, + scope: path.scope + }); + } + + if (!retFunction || retFunction.id || node.params.length) { + path.replaceWith(container); + } else { + path.replaceWith(built); + } + } +} + +function wrapFunction(path, callId) { + if (path.isClassMethod() || path.isObjectMethod()) { + classOrObjectMethod(path, callId); + } else { + plainFunction(path, callId); + } +}
\ No newline at end of file diff --git a/node_modules/@babel/helper-wrap-function/package.json b/node_modules/@babel/helper-wrap-function/package.json new file mode 100644 index 00000000..0ad0f97d --- /dev/null +++ b/node_modules/@babel/helper-wrap-function/package.json @@ -0,0 +1,14 @@ +{ + "name": "@babel/helper-wrap-function", + "version": "7.0.0-beta.47", + "description": "Helper to wrap functions inside a function call.", + "repository": "https://github.com/babel/babel/tree/master/packages/babel-helper-wrap-function", + "license": "MIT", + "main": "lib/index.js", + "dependencies": { + "@babel/helper-function-name": "7.0.0-beta.47", + "@babel/template": "7.0.0-beta.47", + "@babel/traverse": "7.0.0-beta.47", + "@babel/types": "7.0.0-beta.47" + } +} |
