fbpx

Алфавитная сортировка списка bower-скриптов

1 минута чтения

Скрипт запускает gulp задачу, берет bower.json и сортирует список скриптов в алфавитном порядке.

gulp.task('bower-sort', function () {
    var newBowerJSON = {},
        bowerPath = 'bower.json';// путь к файлу
    objGetFromFile(bowerPath);
    objSaveToFile(newBowerJSON, bowerPath);

    function objGetFromFile(path) {
        try {
            var bowerFile = fs.readFileSync(path, 'utf8'),
                bowerJSON = JSON.parse(bowerFile),
                tempObj = {};
        } catch(e) {
            throw e;
        }
        newBowerJSON = bowerJSON;
        if (bowerJSON.hasOwnProperty('devDependencies')) {
            tempObj = sortObj(bowerJSON.devDependencies);
            newBowerJSON.devDependencies = tempObj;
        }
        if (bowerJSON.hasOwnProperty('dependencies')) {
            tempObj = sortObj(bowerJSON.dependencies);
            newBowerJSON.dependencies = tempObj;
        }
    }
    
    /* Сортировка строк */
    function sortObj(obj) {
        if (Object.getPrototypeOf(obj) !== Object.prototype) {
            throw 'not an object';
        }
        var myObj = obj,
            keys = [],
            output = {},
            k, i, len;
        for (k in myObj) {
            if (myObj.hasOwnProperty(k)) {
                keys.push(k);
            }
        }
        keys.sort();
        for (i = 0, len = keys.length; i < len; i++) {
            output[keys[i]] = myObj[keys[i]];
        }

        return output;
    }

    /* Перезапись файла */
    function objSaveToFile(obj, path) {
        if (!!obj.length)
            throw 'obj has no required fields';

        var result = '';
        try {
            fs.writeFileSync(
                path,
                JSON.stringify(obj, null, 2),
                'utf8'
            );
            result = 'saved';
        } catch (e) {
            result = e;
        } finally {
            notify({
                title: 'bower sort',
                message: result
            });
        }
    }
});

Добавить комментарий

Предыдущая статья

Memoize Pattern

Следующая статья

Как детектировать iOS на JavaScript