blinkjs/blink

View on GitHub
js/lib/browser/Configuration.js

Summary

Maintainability
F
3 days
Test Coverage
var extend = require('node.extend');
var _overrides = require('../overrides/all');
var s = require('../helpers/string');
var ONE_INDENT = /(\d+)([st])/;
var styles = {
    nested: null,
    expanded: null,
    compact: null,
    compressed: null
};
var newlines = {
    lf: '\n',
    crlf: '\r\n'
};
var quotes = {
    'double': '"',
    'single': '\''
};
var Configuration = (function () {
    function Configuration(options) {
        this.raw = {};
        this.set(require('../../defaults.browser.json'));
        this.set(options);
    }
    Configuration.prototype.clone = function () {
        var clone = new Configuration(this.raw);
        clone.overrides = this.overrides;
        return clone;
    };
    Configuration.prototype.set = function (options) {
        extend(this.raw, options || {});
        return this;
    };
    Configuration.prototype.toString = function () {
        return JSON.stringify(this.raw);
    };
    Object.defineProperty(Configuration.prototype, "config", {
        /**
         * The location of the config file
         */
        get: function () {
            return this.raw.config;
        },
        set: function (path) {
            this.raw.config = path;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(Configuration.prototype, "quiet", {
        get: function () {
            return this.raw.quiet;
        },
        set: function (value) {
            this.raw.quiet = value;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(Configuration.prototype, "trace", {
        get: function () {
            return this.raw.trace;
        },
        set: function (value) {
            this.raw.trace = value;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(Configuration.prototype, "force", {
        get: function () {
            return this.raw.force;
        },
        set: function (value) {
            this.raw.force = value;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(Configuration.prototype, "boring", {
        get: function () {
            return this.raw.boring;
        },
        set: function (value) {
            this.raw.boring = value;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(Configuration.prototype, "style", {
        get: function () {
            return this.raw.style;
        },
        set: function (value) {
            value = value.toLowerCase();
            if (!styles.hasOwnProperty(value)) {
                throw new Error('Unsupported style: ' + value);
            }
            this.raw.style = value;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(Configuration.prototype, "oneIndent", {
        get: function () {
            switch (this.style) {
                case 'compact':
                case 'compressed':
                    return '';
                default:
                    if (this.raw.oneIndent === '0') {
                        return '';
                    }
                    var m = this.raw.oneIndent.match(ONE_INDENT);
                    return s.repeat({ s: ' ', t: '\t' }[m[2]], parseInt(m[1], 10));
            }
        },
        set: function (value) {
            if (value.toString()[0] === '0') {
                this.raw.oneIndent = '0';
                return;
            }
            value = value.toString().toLowerCase();
            if (!ONE_INDENT.test(value)) {
                throw new Error('Unsupported oneIndent format: ' + value);
            }
            this.raw.oneIndent = value;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(Configuration.prototype, "newline", {
        get: function () {
            switch (this.style) {
                case 'compact':
                case 'compressed':
                    return '';
                default:
                    return newlines[this.raw.newline];
            }
        },
        set: function (value) {
            value = value.toLowerCase();
            if (!newlines.hasOwnProperty(value)) {
                throw new Error('Unsupported newline: ' + value);
            }
            this.raw.newline = value;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(Configuration.prototype, "quote", {
        get: function () {
            return quotes[this.raw.quote];
        },
        set: function (value) {
            value = value.toLowerCase();
            if (!quotes.hasOwnProperty(value)) {
                throw new Error('Unsupported quote type: ' + value);
            }
            this.raw.quote = value;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(Configuration.prototype, "oneSpace", {
        get: function () {
            return (this.style === 'compressed') ? '' : ' ';
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(Configuration.prototype, "declarationSeparator", {
        get: function () {
            switch (this.style) {
                case 'compact':
                    return ' ';
                case 'compressed':
                    return '';
                default:
                    return this.newline;
            }
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(Configuration.prototype, "ruleSeparator", {
        get: function () {
            switch (this.style) {
                case 'compact':
                    return newlines[this.raw.newline];
                case 'compressed':
                    return '';
                default:
                    return this.newline;
            }
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(Configuration.prototype, "block", {
        get: function () {
            return this.raw.block;
        },
        set: function (value) {
            if (value.indexOf('%s') === -1) {
                throw new Error('Invalid block format. Expected "%s".');
            }
            this.raw.block = value;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(Configuration.prototype, "element", {
        get: function () {
            return this.raw.element;
        },
        set: function (value) {
            if (value.indexOf('%s') === -1) {
                throw new Error('Invalid element format. Expected "%s".');
            }
            this.raw.element = value;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(Configuration.prototype, "modifier", {
        get: function () {
            return this.raw.modifier;
        },
        set: function (value) {
            if (value.indexOf('%s') === -1) {
                throw new Error('Invalid modifier format. Expected "%s".');
            }
            this.raw.modifier = value;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(Configuration.prototype, "overrides", {
        get: function () {
            return _overrides;
        },
        enumerable: true,
        configurable: true
    });
    return Configuration;
})();
module.exports = Configuration;