33 lines
No EOL
1.1 KiB
TypeScript
33 lines
No EOL
1.1 KiB
TypeScript
const fs = require('fs');
|
|
|
|
const srcUrlRegex = /url\((\\?["'])?(?!data:)\S+(\\?["'])?\)/g;
|
|
|
|
export function normalizeCssPaths(params: {paths: string[], outDir: string}) {
|
|
params.paths = params.paths ? params.paths : [];
|
|
params.paths.forEach(path => normalizeCssPath(path, params.outDir));
|
|
}
|
|
|
|
function normalizeCssPath(path: string, outputDirectory: string) {
|
|
console.log(`Start processing ${path}`);
|
|
const css: string = fs.readFileSync(path, 'utf8');
|
|
let counter = 0;
|
|
|
|
const processedCss = css.replace(srcUrlRegex, (srcUrl: string) => {
|
|
if (srcUrl.search(outputDirectory) != -1) return srcUrl;
|
|
|
|
let fileName = getFileName(srcUrl);
|
|
let processedUrl = `url('${outputDirectory}/${fileName}')`;
|
|
counter++;
|
|
console.log(`Replaced ${srcUrl} -> ${processedUrl}`);
|
|
return processedUrl;
|
|
});
|
|
console.log(`Replaced ${counter} urls`);
|
|
fs.writeFileSync(path, processedCss);
|
|
}
|
|
|
|
function getFileName(srcUrl: string): string {
|
|
let url = srcUrl.substring(4, srcUrl.length - 1); // unbox 'url(...)'
|
|
url = url.replace(/(\\?["'])/g, '');
|
|
let urlPaths = url.split('/');
|
|
return urlPaths[urlPaths.length - 1].split('?')[0];
|
|
} |