babel-plugin-logger-namespace
Version:
Babel plugin that generates the namespace for creating a logger based on the path of the module
75 lines (66 loc) • 3.06 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var tslib = require('tslib');
var path = require('path');
var template = require('@babel/template');
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var path__default = /*#__PURE__*/_interopDefaultLegacy(path);
var template__default = /*#__PURE__*/_interopDefaultLegacy(template);
function pathToNamespace (path, _a) {
var stripPrefix = _a.stripPrefix, stripSubfix = _a.stripSubfix, prefix = _a.prefix;
var result = path.replace(/[/|\\]/g, ':');
if (stripPrefix !== undefined) {
result = result.replace(new RegExp("^(".concat(stripPrefix, ")")), '');
}
if (stripSubfix !== undefined) {
result = result.replace(new RegExp("(".concat(stripSubfix, ")$")), '');
}
if (prefix !== undefined) {
result = prefix + result;
}
return result;
}
var isNodeModulesInPath = function (pathString) {
var segments = path__default["default"].normalize(pathString).split(path__default["default"].sep);
return segments.includes('node_modules');
};
var ast = template__default["default"].ast;
function index () {
return {
name: 'transform-import-meta',
visitor: {
Program: function (path, state) {
var _a;
if (state.file.opts.filename == null ||
state.file.opts.root == null ||
isNodeModulesInPath(state.file.opts.filename) ||
!state.file.opts.filename.startsWith(state.file.opts.root)) {
return;
}
// make sure it does end with one and only one slash
var rootFullPath = path__default["default"].normalize(state.file.opts.root + '/');
var moduleFullPath = state.file.opts.filename;
var moduleLocalPath = moduleFullPath.slice(rootFullPath.length);
var namespace = pathToNamespace(moduleLocalPath, (_a = state.opts) !== null && _a !== void 0 ? _a : {});
var metas = [];
path.traverse({
Identifier: function (idPath) {
var _a, _b;
if (idPath.node.name === ((_b = (_a = state.opts) === null || _a === void 0 ? void 0 : _a.placeholder) !== null && _b !== void 0 ? _b : 'NAMESPACE')) {
metas.push(idPath);
}
}
});
if (metas.length === 0) {
return;
}
for (var _i = 0, metas_1 = metas; _i < metas_1.length; _i++) {
var meta = metas_1[_i];
meta.replaceWith(ast(templateObject_1 || (templateObject_1 = tslib.__makeTemplateObject(["", ""], ["", ""])), JSON.stringify(namespace)));
}
}
}
};
}
var templateObject_1;
exports["default"] = index;