all files / src/Actions/actions/ RewriteRuleIdents.js

100% Statements 35/35
92.31% Branches 12/13
100% Functions 5/5
100% Lines 35/35
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69            42× 42× 42× 42×     17× 11×                   42× 42× 42× 45× 27×   18× 18×     42× 43× 43× 43× 42×       42× 42×     45× 45× 45× 45× 42×       42×   45×     17×      
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const selectorParser = require("postcss-selector-parser");
const Action_1 = require("../Action");
const { isClassName, isIdentifier } = selectorParser;
/**
 * Changes a Rule's selector's idents to make them more compressible.
 */
class RewriteRuleIdents extends Action_1.Action {
    constructor(pass, ident, reason = "rewriteIdents") {
        super(reason);
        this.pass = pass;
        this.ident = ident;
        this.oldSelector = undefined;
    }
    get sourcePosition() {
        if (this.ident.rule && this.ident.rule.source && this.ident.rule.source.start) {
            return {
                filename: this.ident.rule.source.input.file,
                line: this.ident.rule.source.start.line,
                column: this.ident.rule.source.start.column,
            };
        }
        else {
            return undefined;
        }
    }
    perform() {
        this.pass.cache.reset(this.ident.rule);
        this.oldSelector = this.ident.rule.selector;
        this.ident.idents.forEach(node => {
            if (isClassName(node)) {
                this.rewriteNode("class", node);
            }
            else Eif (isIdentifier(node)) {
                this.rewriteNode("id", node);
            }
        });
        this.newSelector = this.ident.rule.selectors.map(s => {
            s = s.trim();
            for (let newSelector of this.ident.selectors) {
                if (s === newSelector.source.trim()) {
                    return newSelector.toString();
                }
            }
            return s;
        }).join(", ");
        this.ident.rule.selector = this.newSelector;
        return this;
    }
    rewriteNode(type, node) {
        let oldValue = node.value;
        let fromAttr = { name: type, value: oldValue };
        let toAttr = this.pass.styleMapping.getRewriteOf(fromAttr);
        if (!toAttr) {
            toAttr = {
                name: type,
                value: this.pass.identGenerators.nextIdent(type),
            };
            this.pass.styleMapping.rewriteAttribute(fromAttr, toAttr);
        }
        node.value = toAttr.value;
    }
    logString() {
        return this.annotateLogMessage(`Rewrote selector's idents from "${Action_1.stripNL(this.oldSelector)}" to "${Action_1.stripNL(this.newSelector)}".`);
    }
}
exports.RewriteRuleIdents = RewriteRuleIdents;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmV3cml0ZVJ1bGVJZGVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvQWN0aW9ucy9hY3Rpb25zL1Jld3JpdGVSdWxlSWRlbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEsMERBQTBEO0FBSzFELHNDQUE0QztBQUU1QyxNQUFNLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxHQUFHLGNBQWMsQ0FBQztBQWFyRDs7R0FFRztBQUNILHVCQUErQixTQUFRLGVBQU07SUFPM0MsWUFDRSxJQUFzQixFQUN0QixLQUFpQixFQUNqQixNQUFNLEdBQUcsZUFBZTtRQUd4QixLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDZCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQztJQUMvQixDQUFDO0lBQ0QsSUFBSSxjQUFjO1FBQ2hCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7WUFDN0UsT0FBTztnQkFDTCxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJO2dCQUMzQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJO2dCQUN2QyxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNO2FBQzVDLENBQUM7U0FDSDthQUFNO1lBQ0wsT0FBTyxTQUFTLENBQUM7U0FDbEI7SUFDSCxDQUFDO0lBQ0QsT0FBTztR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