@prodo/babel-plugin
Version:
Babel plugin for [Prodo](https://prodo.dev). See [documentation](https://docs.prodo.dev/basics/babel-plugin) for more info.
68 lines • 2.92 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var pathLib = require("path");
var inject_universe_1 = require("./inject-universe");
var utils_1 = require("./utils");
var visitPossibleActionOrComponent = function (t, name, rootPath) {
if (utils_1.isPossibleComponentName(name)) {
inject_universe_1.default(t, "component", name, rootPath);
}
else if (utils_1.isPossibleActionName(name)) {
inject_universe_1.default(t, "action", name, rootPath);
}
};
var extractName = function (filePath) {
var basename = pathLib.basename(filePath);
var fileName = basename.slice(0, basename.length - pathLib.extname(basename).length);
return fileName === "index"
? extractName(pathLib.dirname(filePath))
: fileName.replace(/[-_](\w)/g, function (w) { return w.toUpperCase(); }).replace(/[-_]/g, "");
};
exports.default = (function (_a) {
var t = _a.types;
var visitFunctionDeclaration = function (path) {
if (path.node.id == null) {
return;
}
visitPossibleActionOrComponent(t, path.node.id.name, path);
};
var visitFunctionExpression = function (path, state) {
if (t.isVariableDeclarator(path.parent) &&
t.isVariableDeclaration(path.parentPath.parent) &&
(t.isProgram(path.parentPath.parentPath.parent) ||
t.isExportNamedDeclaration(path.parentPath.parentPath.parent))) {
// const foo = () => {};
// or
// export const foo = () => {};
if (!t.isIdentifier(path.parent.id)) {
// const {foo} = () => {};
return;
}
visitPossibleActionOrComponent(t, path.parent.id.name, path);
}
else if (t.isAssignmentExpression(path.parent) &&
t.isMemberExpression(path.parent.left) &&
t.isIdentifier(path.parent.left.object) &&
path.parent.left.object.name === "exports" &&
t.isExpressionStatement(path.parentPath.parent) &&
t.isProgram(path.parentPath.parentPath.parent)) {
// exports.foo = () => {};
visitPossibleActionOrComponent(t, path.parent.left.property.name, path);
}
else if (!t.isProgram(path.parent) &&
t.isExportDefaultDeclaration(path.parent)) {
// export default () => {};
// Need to work out whether it's a component or an action
if (!state.file || !state.file.opts || !state.file.opts.filename) {
return;
}
visitPossibleActionOrComponent(t, extractName(state.file.opts.filename), path);
}
};
return {
FunctionDeclaration: visitFunctionDeclaration,
FunctionExpression: visitFunctionExpression,
ArrowFunctionExpression: visitFunctionExpression,
};
});
//# sourceMappingURL=components-and-actions.js.map