diff --git a/lib/models/asset-size-printer.js b/lib/models/asset-size-printer.js index 55a3ff0d0f..75a56f7a31 100644 --- a/lib/models/asset-size-printer.js +++ b/lib/models/asset-size-printer.js @@ -29,6 +29,15 @@ AssetPrinterSize.prototype.print = function () { }.bind(this)); }; +AssetPrinterSize.prototype.printJSON = function () { + var ui = this.ui; + return this.makeAssetSizesObject().then(function (files) { + this.validateAssetPath(files); + + ui.writeLine(JSON.stringify({files: files})); + }.bind(this)); +}; + AssetPrinterSize.prototype.makeAssetSizesObject = function () { var fs = require('fs'); var zlib = require('zlib'); diff --git a/lib/tasks/show-asset-sizes.js b/lib/tasks/show-asset-sizes.js index 885bf29a19..fbfd219770 100644 --- a/lib/tasks/show-asset-sizes.js +++ b/lib/tasks/show-asset-sizes.js @@ -10,6 +10,10 @@ module.exports = Task.extend({ outputPath: options.outputPath }); + if (options.json) { + return sizePrinter.printJSON(); + } + return sizePrinter.print(); } }); diff --git a/tests/unit/models/asset-size-printer-test.js b/tests/unit/models/asset-size-printer-test.js index 1cdd931817..de5b6fba82 100644 --- a/tests/unit/models/asset-size-printer-test.js +++ b/tests/unit/models/asset-size-printer-test.js @@ -107,6 +107,24 @@ describe('models/asset-size-printer', function () { }); }); + it('can print out to JSON', function () { + var assetObjectKeys; + var sizePrinter = new AssetSizePrinter({ + ui: new MockUi(), + outputPath: storedTmpDir + }); + + return sizePrinter.printJSON() + .then(function () { + var output = JSON.parse(sizePrinter.ui.output); + + expect(output.files[0].name).to.include('nested-asset.css'); + expect(output.files[1].name).to.include('nested-asset.js'); + expect(output.files[1].size).to.equal(32); + expect(output.files[1].gzipSize).to.equal(52); + }); + }); + it('creates an array of asset objects', function () { var assetObjectKeys; var sizePrinter = new AssetSizePrinter({