my-vite-plugin-dynamic-base
Version:
Resolve all resource files dynamic publicPath, like Webpack's __webpack_public_path__
55 lines • 2.1 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.replaceImport = exports.replaceSrc = exports.replaceUrl = exports.replaceQuotes = exports.replace = void 0;
// replace
function replace(mark, placeholder, code) {
const re = new RegExp(mark, 'g');
return code.replace(re, placeholder);
}
exports.replace = replace;
// repalce quotes
function replaceQuotes(mark, placeholder, code) {
const singleMark = `'${mark}`;
const singlePlaceholder = `${placeholder}+'/`;
const doubleMark = `"${mark}`;
const doublePlaceholder = `${placeholder}+"/`;
const templateMark = `\`${mark}`;
const templatePlaceholder = `\`\$\{${placeholder}\}/`;
const srcMark = `src="${mark}`;
const srcPlaceholder = `src="'+${placeholder}+'/`;
return replace(doubleMark, doublePlaceholder, replace(srcMark, srcPlaceholder, replace(singleMark, singlePlaceholder, replace(templateMark, templatePlaceholder, code))));
}
exports.replaceQuotes = replaceQuotes;
// replace asset url
function replaceUrl(mark, placeholder, code) {
const urlMark = `url(${mark}`;
// const urlPlaceholder = `url("+${placeholder}+"/`
const codeSpinner = code.split(urlMark);
const len = codeSpinner.length;
if (len === 1) {
return code;
}
let rusultCode = '';
let quote = Array.from(codeSpinner[0].matchAll(/'/g) || []).length % 2 === 1 ? "'" : '"';
for (let i = 0; i < len; i++) {
const codeItem = codeSpinner[i];
if (i === len - 1) {
rusultCode += codeItem;
}
else {
rusultCode += codeItem + `url(${quote}+${placeholder}+${quote}/`;
}
}
return rusultCode;
}
exports.replaceUrl = replaceUrl;
// replace asset src
function replaceSrc(placeholder, code) {
return code.replace(/=([a-zA-Z]+).src/g, `=${placeholder}+$1.getAttribute('data-src')`);
}
exports.replaceSrc = replaceSrc;
function replaceImport(placeholder, code) {
return code.replace(/(System.import\()/g, `$1${placeholder}+`);
}
exports.replaceImport = replaceImport;
//# sourceMappingURL=utils.js.map