babel-plugin-base-path
Version:
Add first-class support for transforming relative asset paths to absolute one's.
45 lines (31 loc) • 1.57 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.prefixRelativeURLs = undefined;
var _babelTypes = require('babel-types');
var t = _interopRequireWildcard(_babelTypes);
var _utils = require('../../utils');
var _regex = require('../../regex');
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)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
const prefixRelativeURLs = exports.prefixRelativeURLs = prefix => element => {
const { type, value } = element;
const relativeURLs = value.match(_regex.RELATIVE_URL_REGEX) || [];
let transformedValue = value;
for (let i = 0; i < relativeURLs.length; ++i) {
const relativeURL = relativeURLs[i];
const absoluteURL = prefix + relativeURL;
// Note: Swap in the prefixed URL
transformedValue = transformedValue.replace(relativeURL, absoluteURL);
}
return { type, value: transformedValue };
};
exports.default = (path, state) => {
const urlPrefix = (0, _utils.getOption)(state, 'base');
const { tag: callee, quasi: { quasis, expressions } } = path.node;
const values = t.arrayExpression(quasis.map(quasi => t.stringLiteral(quasi.value.cooked)));
const prefixURLs = prefixRelativeURLs(urlPrefix);
const transformedElements = values.elements.map(prefixURLs);
values.elements = transformedElements;
path.replaceWith(t.callExpression(callee, [values, ...expressions]));
};