UNPKG

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
'use strict'; 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])); };