@progress/kendo-ui
Version:
This package is part of the [Kendo UI for jQuery](http://www.telerik.com/kendo-ui) suite.
65 lines (56 loc) • 1.72 kB
JavaScript
;
const {
applyIconClassRenames,
transformStringLiterals,
transformTemplateLiterals,
} = require('../_shared.cjs');
const STYLE_RE = /(<style[^>]*>)([\s\S]*?)(<\/style>)/gi;
const SCRIPT_RE = /(<script(?![^>]*\bsrc\b)[^>]*>)([\s\S]*?)(<\/script>)/gi;
const CLASS_ATTR_RE = /(\bclass\s*=\s*")([\s\S]*?)(")/gi;
function transformScriptContent(content, j) {
let root;
try {
root = j(content);
} catch {
return content;
}
const c1 = transformStringLiterals(root, j, applyIconClassRenames);
const c2 = transformTemplateLiterals(root, j, applyIconClassRenames);
if (!c1 && !c2) {
return content;
}
return root.toSource({ quote: 'single' });
}
module.exports = function transformer(fileInfo, api) {
if (!/\.(html?|aspx|cshtml|razor)$/i.test(fileInfo.path)) {
return undefined;
}
const j = api.jscodeshift;
let source = fileInfo.source;
let changed = false;
source = source.replace(CLASS_ATTR_RE, (match, pre, value, post) => {
const updated = applyIconClassRenames(value);
if (updated !== value) {
changed = true;
return pre + updated + post;
}
return match;
});
source = source.replace(STYLE_RE, (match, open, content, close) => {
const transformed = applyIconClassRenames(content);
if (transformed !== content) {
changed = true;
return open + transformed + close;
}
return match;
});
source = source.replace(SCRIPT_RE, (match, open, content, close) => {
const transformed = transformScriptContent(content, j);
if (transformed !== content) {
changed = true;
return open + transformed + close;
}
return match;
});
return changed ? source : undefined;
};