all files / src/optimizations/MergeDeclarations/ OptimizationContext.js

97.5% Statements 39/40
85.71% Branches 12/14
100% Functions 6/6
100% Lines 38/38
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      44× 44× 44× 44× 44× 44× 44× 44×   44×       396× 396× 258×     138× 138×   396×         34×     68× 88×       338× 338× 338× 338× 294×       44× 44×   338×     338× 338× 338× 338× 338×      
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const selectorParser = require("postcss-selector-parser");
const specificity = require("specificity");
const typescript_collections_1 = require("typescript-collections");
class OptimizationContext {
    constructor(key, scope, root, selectorContext) {
        this.key = key;
        this.scopes = [scope];
        this.root = root;
        this.selectorContext = selectorContext;
        this.declarationMap = new typescript_collections_1.Dictionary();
        this.authoredProps = new Set();
        this.declarationInfos = new Set();
        let specificitySelector = selectorContext &&
            selectorContext.toContext(selectorParser.className({ value: "foo" }));
        this.specificity = specificitySelector &&
            specificity.calculate(specificitySelector.toString())[0];
    }
    getDeclarationValues(prop) {
        let valueInfo;
        if (this.declarationMap.containsKey(prop)) {
            valueInfo = this.declarationMap.getValue(prop);
        }
        else {
            valueInfo = new typescript_collections_1.MultiDictionary();
            this.declarationMap.setValue(prop, valueInfo);
        }
        return valueInfo;
    }
}
exports.OptimizationContext = OptimizationContext;
class OptimizationContexts {
    constructor() {
        this.contexts = {};
    }
    *[Symbol.iterator]() {
        for (let key in this.contexts) {
            yield this.contexts[key];
        }
    }
    getContext(root, scope, selectorContext) {
        let selectorContextStr = (selectorContext || "").toString();
        let key = this.getKey(scope, selectorContextStr);
        let context = this.contexts[key];
        if (context) {
            if (context.scopes.indexOf(scope) < 0) {
                context.scopes.push(scope);
            }
        }
        else {
            context = new OptimizationContext(key, scope, root, selectorContext);
            this.contexts[key] = context;
        }
        return context;
    }
    getKey(scope, selectorContext) {
        let key = scope.map(atrule => `@${atrule.name} ${atrule.params}`);
        key.sort((a, b) => a.localeCompare(b));
        Eif (selectorContext)
            key.push(selectorContext);
        return key.join(" >> ");
    }
}
exports.OptimizationContexts = OptimizationContexts;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT3B0aW1pemF0aW9uQ29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9vcHRpbWl6YXRpb25zL01lcmdlRGVjbGFyYXRpb25zL09wdGltaXphdGlvbkNvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFDQSwwREFBMEQ7QUFDMUQsMkNBQTJDO0FBQzNDLG1FQUFxRTtBQU9yRTtJQStCRSxZQUFZLEdBQVcsRUFBRSxLQUFnQixFQUFFLElBQWtCLEVBQUUsZUFBMkM7UUFDeEcsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDZixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7UUFDdkMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLG1DQUFVLEVBQW9ELENBQUM7UUFDekYsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2xDLElBQUksbUJBQW1CLEdBQUcsZUFBZTtZQUN2QyxlQUFlLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLElBQUksQ0FBQyxXQUFXLEdBQUcsbUJBQW1CO1lBQ3BDLFdBQVcsQ0FBQyxTQUFTLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQsb0JBQW9CLENBQUMsSUFBWTtRQUMvQixJQUFJLFNBQW1ELENBQUM7UUFDeEQsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN6QyxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFFLENBQUM7U0FDakQ7YUFBTTtZQUNMLFNBQVMsR0FBRyxJQUFJLHdDQUFlLEVBQTJCLENBQUM7WUFDM0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1NBQy9DO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztDQUNGO0FBdkRELGtEQXVEQztBQUVEO0lBSUU7UUFDRSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7UUFDaEIsS0FBSyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQzdCLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUMxQjtJQUNILENBQUM7SUFFRCxVQUFVLENBQUMsSUFBa0IsRUFBRSxLQUFnQixFQUFFLGVBQTJDO1FBQzFGLElBQUksa0JBQWtCLEdBQUcsQ0FBQyxlQUFlLElBQUksRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDNUQsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztRQUNqRCxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLElBQUksT0FBTyxFQUFFO1lBQ1gsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ3JDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQzVCO1NBQ0Y7YUFBTTtZQUNMLE9BQU8sR0FBRyxJQUFJLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1lBQ3JFLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDO1NBQzlCO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUNELE1BQU0sQ0FBQyxLQUFnQixFQUFFLGVBQW1DO1FBQzFELElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDbEUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QyxJQUFJLGVBQWU7WUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQy9DLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxQixDQUFDO0NBQ0Y7QUFsQ0Qsb0RBa0NDIn0=