Skip to content

Instantly share code, notes, and snippets.

@ericf
Created December 18, 2013 21:07
Show Gist options
  • Select an option

  • Save ericf/8029841 to your computer and use it in GitHub Desktop.

Select an option

Save ericf/8029841 to your computer and use it in GitHub Desktop.

Revisions

  1. ericf revised this gist Dec 18, 2013. 1 changed file with 15 additions and 0 deletions.
    15 changes: 15 additions & 0 deletions utils.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,15 @@
    function passError(callback) {
    return function (reason) {
    setImmediate(function () {
    callback(reason);
    });
    };
    }

    function passValue(callback) {
    return function (value) {
    setImmediate(function () {
    callback(null, value);
    });
    };
    }
  2. ericf created this gist Dec 18, 2013.
    61 changes: 61 additions & 0 deletions gistfile1.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,61 @@
    'use strict';

    var fs = require('fs'),
    path = require('path'),
    Promise = require('es6-promise').Promise,
    zlib = require('zlib');

    var utils = require('../utils');

    module.exports = function fileSizes(pureDir, callback) {
    getModules(pureDir)
    .then(getFileSizes.bind(null, pureDir))
    .then(utils.passValue(callback))
    .catch(utils.passError(callback));
    };

    // -----------------------------------------------------------------------------

    function getModules(pureDir) {
    return new Promise(function (resolve, reject) {
    fs.readdir(pureDir, function (err, files) {
    if (err) { return reject(err); }

    resolve(files.filter(function (file) {
    return (/\-min\.css$/).test(file);
    }).map(function (file) {
    return file.replace(/\-min\.css$/, '');
    }));
    });
    });
    }

    function getFileSizes(pureDir, modules) {
    return Promise.all(modules.map(function (module) {
    var filePath = path.join(pureDir, module + '-min.css');
    return readModule(filePath).then(getSize);
    })).then(function (sizes) {
    return sizes.reduce(function (map, size, i) {
    map[modules[i]] = size;
    return map;
    }, {});
    });
    }

    function readModule(filePath) {
    return new Promise(function (resolve, reject) {
    fs.readFile(filePath, function (err, file) {
    if (err) { return reject(err); }
    resolve(file);
    });
    });
    }

    function getSize(file) {
    return new Promise(function (resolve, reject) {
    zlib.gzip(file, function (err, compressed) {
    if (err) { return reject(err); }
    resolve(compressed.length);
    });
    });
    }