UNPKG

babel-plugin-func-wrap

Version:

Wrap the whole script in a function — export as CommonJS, ES Modules, IIFE, or a global variable

1 lines 8.33 kB
{"version":3,"file":"index.mjs","sources":["src/lib/templates.js","src/index.js"],"sourcesContent":["export const templateCjsDefault = `module.exports = function (%%args%%) { %%body%% }`;\nexport const templateCjsNamed = `exports.%%name%% = function (%%args%%) { %%body%% }`;\nexport const templateEsmDefault = `export default function (%%args%%) { %%body%% }`;\nexport const templateEsmNamed = `export function %%name%% (%%args%%) { %%body%% }`;\nexport const templateGlobalDefault = `%%body%%`;\nexport const templateGlobalNamed = `%%name%% = function (%%args%%) { %%body%% }`;\nexport const templateIifeDefault = `(function (%%args%%) { %%body%% })(%%args%%)`;\nexport const templateIifeNamed = `%%name%% = function (%%args%%) { %%body%% }(%%args%%)`;\n","import template from '@babel/template';\n\nimport {\n\ttemplateCjsDefault,\n\ttemplateCjsNamed,\n\ttemplateEsmDefault,\n\ttemplateEsmNamed,\n\ttemplateGlobalDefault,\n\ttemplateGlobalNamed,\n\ttemplateIifeDefault,\n\ttemplateIifeNamed\n} from './lib/templates';\n\nexport default function babelPluginTransformGlobals (api, opts) {\n\tconst { types: t } = api;\n\tconst run = [];\n\n\t// options\n\tconst args = [].concat(opts.args || []).map(\n\t\targ => t.identifier(arg)\n\t);\n\tconst name = 'name' in opts ? String(opts.name) : 'default';\n\tconst format = ['cjs', 'esm', 'iife', 'global'].find(format => format === opts.format);\n\n\tconst buildTemplate = template(\n\t\tname === 'default'\n\t\t\t? format === 'cjs'\n\t\t\t\t? templateCjsDefault\n\t\t\t: format === 'iife'\n\t\t\t\t? templateIifeDefault\n\t\t\t: format === 'global'\n\t\t\t\t? templateGlobalDefault\n\t\t\t: templateEsmDefault\n\t\t: format === 'cjs'\n\t\t\t? templateCjsNamed\n\t\t: format === 'iife'\n\t\t\t? templateIifeNamed\n\t\t: format === 'global'\n\t\t\t? templateGlobalNamed\n\t\t: templateEsmNamed\n\t);\n\n\tif (name === 'default' && format === 'global') {\n\t\tthrow Error('The \"global\" option requires a \"name\"');\n\t}\n\n\treturn {\n\t\tname: 'func-wrap',\n\t\tvisitor: {\n\t\t\tExportDefaultDeclaration (path) {\n\t\t\t\tif (!run.includes(this)) {\n\t\t\t\t\tconst replacableExport = (\n\t\t\t\t\t\tt.isClassDeclaration(path.node.declaration) ||\n\t\t\t\t\t\tt.isFunctionDeclaration(path.node.declaration)\n\t\t\t\t\t);\n\n\t\t\t\t\t// transform `export default class {} /* more */`\n\t\t\t\t\t// into `class _default {}; /* more */ return _default`, or\n\n\t\t\t\t\t// transform `export default class Cl {} /* more */`\n\t\t\t\t\t// into `class Cl {}; /* more */ return Cl`, or\n\n\t\t\t\t\t// transform `export default function () {} /* more */`\n\t\t\t\t\t// into `function _default () {}; /* more */ return _default`, or\n\n\t\t\t\t\t// transform `export default function fn () {} /* more */`\n\t\t\t\t\t// into `function fn () {}; /* more */ return fn`\n\n\t\t\t\t\tif (replacableExport) {\n\t\t\t\t\t\tlet name = path.node.declaration.id && path.node.declaration.id.name;\n\n\t\t\t\t\t\t// transform `function () {}` into `function _default () {}`, or\n\t\t\t\t\t\t// transform `class {}` into `class _default {}`\n\t\t\t\t\t\tif (!name) {\n\t\t\t\t\t\t\tpath.node.declaration.id = path.scope.generateUidIdentifier('default');\n\n\t\t\t\t\t\t\tname = path.node.declaration.id.name;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (name) {\n\t\t\t\t\t\t\tpath.replaceWith(path.node.declaration);\n\n\t\t\t\t\t\t\tpath.parentPath.pushContainer('body',\n\t\t\t\t\t\t\t\tt.returnStatement(\n\t\t\t\t\t\t\t\t\tt.identifier(name)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telse if (path.node.declaration) {\n\t\t\t\t\t\t// transform `export default {} /* more */`\n\t\t\t\t\t\t// into `class _default {}; /* more */ return _default`\n\n\t\t\t\t\t\tconst identifier = path.scope.generateUidIdentifier('default');\n\t\t\t\t\t\tconst { name } = identifier;\n\n\t\t\t\t\t\tconst variableDeclaration = t.variableDeclaration(\n\t\t\t\t\t\t\t'const',\n\t\t\t\t\t\t\t[t.variableDeclarator(\n\t\t\t\t\t\t\t\tidentifier,\n\t\t\t\t\t\t\t\tpath.node.declaration\n\t\t\t\t\t\t\t)]\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tconst returnStatement = t.returnStatement(\n\t\t\t\t\t\t\tt.identifier(name)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tpath.replaceWith(variableDeclaration);\n\n\t\t\t\t\t\tpath.parentPath.pushContainer('body', returnStatement);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tProgram: {\n\t\t\t\texit (path) {\n\t\t\t\t\tif (!run.includes(this)) {\n\t\t\t\t\t\trun.push(this);\n\n\t\t\t\t\t\tconst { body } = path.node;\n\n\t\t\t\t\t\tconst templateOptions = name === 'default'\n\t\t\t\t\t\t\t? { body, args }\n\t\t\t\t\t\t: { name, body, args };\n\n\t\t\t\t\t\tconst ast = buildTemplate(templateOptions);\n\n\t\t\t\t\t\t// wrap the whole script in a function\n\t\t\t\t\t\tpath.replaceWith(\n\t\t\t\t\t\t\tt.program([ ast ])\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"],"names":["templateCjsDefault","templateCjsNamed","templateEsmDefault","templateEsmNamed","templateGlobalDefault","templateGlobalNamed","templateIifeDefault","templateIifeNamed","babelPluginTransformGlobals","api","opts","types","t","run","args","concat","map","arg","identifier","name","String","format","find","buildTemplate","template","Error","visitor","ExportDefaultDeclaration","path","includes","replacableExport","isClassDeclaration","node","declaration","isFunctionDeclaration","id","scope","generateUidIdentifier","replaceWith","parentPath","pushContainer","returnStatement","variableDeclaration","variableDeclarator","Program","exit","push","body","templateOptions","ast","program"],"mappings":"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"}