every-plugin
Version:
43 lines (42 loc) • 1.32 kB
JavaScript
//#region src/build/rspack/fix-mf-data-uri-plugin.ts
const MF_DATA_URI_MARKER = "data:text/javascript,";
var FixMfDataUriPlugin = class {
name = "FixMfDataUriPlugin";
apply(compiler) {
compiler.hooks.compilation.tap(this.name, (_compilation, { normalModuleFactory }) => {
normalModuleFactory.hooks.beforeResolve.tap(this.name, (resolveData) => {
if (!resolveData?.request) return;
if (!resolveData.request.includes(MF_DATA_URI_MARKER)) return;
this.reencodeDataUri(resolveData);
});
});
}
reencodeDataUri(resolveData) {
const { request } = resolveData;
const idx = request.indexOf(MF_DATA_URI_MARKER);
if (idx === -1) return;
const contentStart = idx + 21;
const prefix = request.substring(0, contentStart);
const rawContent = request.substring(contentStart);
if (isAlreadyEncoded(rawContent)) return;
const decoded = safeDecode(rawContent);
resolveData.request = prefix + encodeURIComponent(decoded);
}
};
function isAlreadyEncoded(content) {
try {
return decodeURIComponent(content) !== content;
} catch {
return false;
}
}
function safeDecode(content) {
try {
return decodeURIComponent(content);
} catch {
return content.replace(/%(?![0-9A-Fa-f]{2})/g, "%25");
}
}
//#endregion
export { FixMfDataUriPlugin };
//# sourceMappingURL=fix-mf-data-uri-plugin.mjs.map