util.js 2.02 KB
const gulp = require("gulp");
const isFunction = o => {
    return {}.toString.call(o) === "[object Function]";
}

module.exports = {
    _task: (defrels = [])  => {
        return (taskName, rels, cb) => {
            if(isFunction(rels)) {
                cb = rels;
                rels = defrels;
            } else {
                rels = defrels.concat(rels || []);
            }

            return gulp.task(taskName, rels, cb);
        }
    },
    getMd5: md5path => {
        let md5 = md5path.replace(/[\s\S]*-([a-zA-Z0-9]{10})\.?[\s\S]*/g, "$1");

        return md5;
    },
    args: function (key) {
        const args = process.argv.slice(2);
        let value = "";
        key = `--${key}`;

        args.every(arg => {
            let arr = arg.split("=");

            if (arr[0] != key) return true;

            value = arr[1];
            return false;
        });
        return value;
    },
    scopeCss: function (css, parent) {
        if (!css) return css;

        if (!parent) return css;

        var replace = function (css, replacer) {
            //strip block comments
            css = css.replace(/\/\*([\s\S]*?)\*\//g, '');

            return css.replace(/([^\r\n,{}]+)(,(?=[^}]*{)|\s*{)/g, replacer);
        };

        css = replace(css, parent + ' $1$2');

        //regexp.escape
        var parentRe = parent.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');

        //replace self-selectors
        css = css.replace(new RegExp('(' + parentRe + ')\\s*\\1(?=[\\s\\r\\n,{])', 'g'), '$1');

        //replace `:host` with parent
        css = css.replace(new RegExp('(' + parentRe + ')\\s*:host', 'g'), '$1');

        //revoke wrongly replaced @ statements, like @supports, @import, @media etc.
        css = css.replace(new RegExp('(' + parentRe + ')\\s*@', 'g'), '@');

        css = css.replace(new RegExp('(' + parentRe + ')\\s*(body|html)\\s*{', 'g'), '$1{');

        //revoke wrongly replaced :root blocks
        css = css.replace(new RegExp('(' + parentRe + ')\\s*:root', 'g'), ':root');

        return css;
    },
}