39 lines
1.9 KiB
JavaScript
39 lines
1.9 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.TypeScriptAnalyzer = void 0;
|
|
class TypeScriptAnalyzer {
|
|
extractDynamicSelectors(document) {
|
|
const dynamicSelectors = new Set();
|
|
const text = document.getText();
|
|
// Look for renderer.addClass, renderer.removeClass calls
|
|
const rendererMatches = text.match(/renderer\.(addClass|removeClass)\s*\(\s*[^,]+,\s*['"`]([^'"`]+)['"`]/g) || [];
|
|
rendererMatches.forEach(match => {
|
|
const className = match.replace(/.*['"`]([^'"`]+)['"`].*/, '$1');
|
|
dynamicSelectors.add(className);
|
|
});
|
|
// Look for element.classList operations
|
|
const classListMatches = text.match(/\.classList\.(add|remove|toggle)\s*\(\s*['"`]([^'"`]+)['"`]/g) || [];
|
|
classListMatches.forEach(match => {
|
|
const className = match.replace(/.*['"`]([^'"`]+)['"`].*/, '$1');
|
|
dynamicSelectors.add(className);
|
|
});
|
|
// Look for HostBinding decorators
|
|
const hostBindingMatches = text.match(/@HostBinding\s*\(\s*['"`]class\.([^'"`]+)['"`]/g) || [];
|
|
hostBindingMatches.forEach(match => {
|
|
const className = match.replace(/@HostBinding\s*\(\s*['"`]class\.([^'"`]+)['"`].*/, '$1');
|
|
dynamicSelectors.add(className);
|
|
});
|
|
// Look for string literals that might be class names
|
|
const stringLiteralMatches = text.match(/['"`][a-zA-Z_-][a-zA-Z0-9_-]*['"`]/g) || [];
|
|
stringLiteralMatches.forEach(match => {
|
|
const str = match.replace(/['"`]/g, '');
|
|
// Only consider strings that look like CSS class names
|
|
if (str.match(/^[a-zA-Z_-][a-zA-Z0-9_-]*$/) && str.length > 2) {
|
|
dynamicSelectors.add(str);
|
|
}
|
|
});
|
|
return dynamicSelectors;
|
|
}
|
|
}
|
|
exports.TypeScriptAnalyzer = TypeScriptAnalyzer;
|
|
//# sourceMappingURL=TypeScriptAnalyzer.js.map
|