UNPKG

ember-cli

Version:

Command line tool for developing ambitious ember.js apps

88 lines (74 loc) 2.38 kB
'use strict'; const chalk = require('chalk'); const path = require('path'); const RSVP = require('rsvp'); const assign = require('ember-cli-lodash-subset').assign; class AssetPrinterSize { constructor(options) { assign(this, options); } print() { const filesize = require('filesize'); let ui = this.ui; return this.makeAssetSizesObject().then(files => { if (files.length !== 0) { ui.writeLine(chalk.green('File sizes:')); return files.forEach(file => { let sizeOutput = filesize(file.size); if (file.showGzipped) { sizeOutput += ` (${filesize(file.gzipSize)} gzipped)`; } ui.writeLine(chalk.blue(` - ${file.name}: `) + sizeOutput); }); } else { ui.writeLine(chalk.red(`No asset files found in the path provided: ${this.outputPath}`)); } }); } printJSON() { let ui = this.ui; return this.makeAssetSizesObject().then(files => { if (files.length !== 0) { let entries = files.map(file => ({ name: file.name, size: file.size, gzipSize: file.gzipSize, })); ui.writeLine(JSON.stringify({ files: entries })); } else { ui.writeLine(chalk.red(`No asset files found in the path provided: ${this.outputPath}`)); } }); } makeAssetSizesObject() { const fs = require('fs'); const zlib = require('zlib'); let gzip = RSVP.denodeify(zlib.gzip); let files = this.makeFileGlob(); let testFileRegex = /(test-(loader|support))|(testem)/i; let assets = files // Skip test files .filter(file => { let filename = path.basename(file); return !testFileRegex.test(filename); }) // Print human-readable file sizes (including gzipped) .map(file => { let contentsBuffer = fs.readFileSync(file); return gzip(contentsBuffer).then(buffer => ({ name: file, size: contentsBuffer.length, gzipSize: buffer.length, showGzipped: contentsBuffer.length > 0, })); }); return RSVP.all(assets); } makeFileGlob() { const glob = require('glob'); let outputPath = this.outputPath; let globOptions = { nodir: true }; return glob.sync(`${outputPath}/**/*.{css,js}`, globOptions); } } module.exports = AssetPrinterSize;