aboutsummaryrefslogtreecommitdiffstats
path: root/library/moment/tasks/history.js
diff options
context:
space:
mode:
Diffstat (limited to 'library/moment/tasks/history.js')
-rw-r--r--library/moment/tasks/history.js123
1 files changed, 123 insertions, 0 deletions
diff --git a/library/moment/tasks/history.js b/library/moment/tasks/history.js
new file mode 100644
index 000000000..85e83338f
--- /dev/null
+++ b/library/moment/tasks/history.js
@@ -0,0 +1,123 @@
+var https = require('https'),
+ zlib = require('zlib'),
+ path = require('path'),
+ fs = require('fs');
+
+var count = 0;
+var resolved = 0;
+
+var outputs = [];
+
+var done;
+
+function check() {
+ if (resolved === count) {
+ normalize();
+ display();
+ }
+}
+
+function makeBar(length) {
+ var i = '';
+ while (i.length < length) {
+ i += '=';
+ }
+ return i;
+}
+
+function normalize() {
+ var i,
+ max = 0,
+ max2 = 0;
+ for (i = 0; i < count; i++) {
+ max = Math.max(max, outputs[i].gzip);
+ max2 = Math.max(max2, outputs[i].original);
+ }
+ for (i = 0; i < count; i++) {
+ outputs[i].bargraph = makeBar((outputs[i].gzip / max) * 80);
+ outputs[i].bargraph2 = makeBar((outputs[i].original / max2) * 80);
+ }
+}
+
+function display() {
+ var i;
+ for (i = 0; i < count; i++) {
+ console.log(outputs[i].version + ' ' + outputs[i].gzip + ' ' + outputs[i].original);
+ console.log('gzip ' + outputs[i].bargraph);
+ console.log('orig ' + outputs[i].bargraph2);
+ }
+ done();
+}
+
+function getSizeAtVersion(version, path) {
+ var data = '',
+ op = {},
+
+ req = https.request({
+ host: 'raw.github.com',
+ port: 443,
+ path: '/timrwood/moment/' + version + path
+ }, function (res) {
+ res.setEncoding('utf8');
+ res.on('data', function (chunk) {
+ data += chunk;
+ });
+ res.on('end', function (e) {
+ zlib.gzip(data, function (error, result) {
+ op.version = version;
+ op.gzip = result.length;
+ op.original = data.length;
+ resolved++;
+ check();
+ });
+ });
+ });
+
+ req.on('error', function (e) {
+ console.log('problem with request: ' + e.message);
+ });
+ req.end();
+ count++;
+ outputs.push(op);
+}
+
+function getRemote() {
+ var oldVersions = '1.0.1 1.1.0 1.1.1 1.1.2 1.2.0 1.3.0 1.4.0'.split(' '),
+ newVersions = '1.5.0 1.5.1 1.6.0 1.6.1 1.7.0 1.7.1'.split(' '),
+ i;
+
+ for (i = 0; i < oldVersions.length; i++) {
+ getSizeAtVersion(oldVersions[i], '/moment.min.js');
+ }
+ for (i = 0; i < newVersions.length; i++) {
+ getSizeAtVersion(newVersions[i], '/min/moment.min.js');
+ }
+}
+
+function getLocal() {
+ count++;
+ var op = {};
+ outputs.push(op);
+ fs.readFile(path.normalize(__dirname + '/../min/moment.min.js'), 'utf8', function (err, data) {
+ if (err) {
+ throw err;
+ }
+ zlib.gzip(data, function (error, result) {
+ op.version = '.next';
+ op.gzip = result.length;
+ op.original = data.length;
+ resolved++;
+ check();
+ });
+ });
+}
+
+
+
+module.exports = function (grunt) {
+ grunt.registerTask('history', 'Check the codebase filesize over different releases.', function () {
+ done = this.async();
+ getRemote();
+ getLocal();
+ });
+};