package/package.json000666 0000001661 3560116604 011556 0ustar00000000 000000 { "name": "@atomico/rollup-plugin-sizes", "version": "1.1.4", "description": "This small utility allows you to monitor the size of the bundle", "main": "index.js", "source": "src/index.js", "publishConfig": { "access": "public" }, "scripts": { "build": "rollup -c ", "prepare": "npm run build && npm run test", "test": "ava" }, "repository": { "type": "git", "url": "https://github.com/atomicojs/rollup-plugin-sizes" }, "keywords": [ "rollup-plugin", "gzip", "brotli" ], "author": "Uppercod", "license": "ISC", "devDependencies": { "ava": "^3.1.0", "rollup": "^2.3.3" }, "dependencies": { "simple-string-table": "^1.0.0", "brotli-size": "^4.0.0", "gzip-size": "^5.1.1" }, "peerDependencies": { "rollup": "1.x || 2.x" }, "ava": { "files": [ "!**/cases/**", "!**/tmp/**" ] } } package/index.js000666 0000004123 3560116604 010731 0ustar00000000 000000 'use strict'; function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } var getGzip = _interopDefault(require('gzip-size')); var getBrotli = _interopDefault(require('brotli-size')); var table = _interopDefault(require('simple-string-table')); let color = { reset: "\x1b[0m", green: "\x1b[32m", yellow: "\x1b[33m", red: "\x1b[31m", }; function toKB(size) { return (size / 1000).toFixed(2) + "KB"; } function sizes(limit, customLog) { if (limit) { limit = limit * 1000; limit = { danger: limit, warning: limit * 0.9, }; } function getColor(size) { if (!limit) return color.green; return size > limit.danger ? color.red : size > limit.warning ? color.yellow : color.green; } return { name: "@atomico/rollup-plugin-sizes", async generateBundle(opts, bundles) { let length = Object.keys(bundles).length; let rows = [[length > 1 ? "FILES" : "FILE", "GZIP", "BROTLI"]]; let totalGzip = 0; let totalBroli = 0; let sizes = {}; let index = 1; for (let key in bundles) { let code = bundles[key].code; if (typeof code !== "string") continue; let gzip = await getGzip(code); let brotli = await getBrotli(code); totalGzip += gzip; totalBroli += brotli; sizes[index++] = gzip; rows.push([key, toKB(gzip), toKB(brotli)]); } if (length > 1) { rows.push(["", toKB(totalGzip), toKB(totalBroli)]); } sizes[index] = totalGzip; if (customLog) { customLog(rows); } else { console.log( [color.reset] .concat( table(rows) .split("\n") .map( (stringRow, index) => (sizes[index] ? getColor(sizes[index]) : "") + stringRow ), color.reset ) .join("\n") ); } }, }; } module.exports = sizes; package/README.md000666 0000001642 3560116604 010546 0ustar00000000 000000 # @atomico/rollup-plugin-sizes This small utility allows you to monitor the size of the bundle as it is generated by rollup, generating a record by console, the size of both in gzip and brotli. ![example](https://res.cloudinary.com/dz0i8dmpt/image/upload/v1558889910/github/rollup-plugin-sizes/Grupo_2.png) ```js import sizes from "@atomico/rollup-plugins-sizes"; export default { input: /*...*/, output: /*...*/, plugins: [ sizes(10)//10 === 10kb ] }; ``` Additionally you can give `sizes(limit:number|string)` a first parameter capable of generating alerts by console, example `size(1.2)`, **this parameter will always represent KB**. 1. if it exceeds the limit, the file will be printed in red. 2. If it approaches 90% of the limit, it will be printed in yellow. 3. if it does not fulfill the 2 previous conditions, it is printed in green. > compatible with dynamic rollup import package/rollup.config.js000666 0000000202 3560116604 012375 0ustar00000000 000000 import pkg from "./package.json"; export default { input: pkg.source, output: { file: pkg.main, format: "cjs" } }; package/src/index.js000666 0000003617 3560116604 011527 0ustar00000000 000000 import getGzip from "gzip-size"; import getBrotli from "brotli-size"; import table from "simple-string-table"; let color = { reset: "\x1b[0m", green: "\x1b[32m", yellow: "\x1b[33m", red: "\x1b[31m", }; function toKB(size) { return (size / 1000).toFixed(2) + "KB"; } export default function sizes(limit, customLog) { if (limit) { limit = limit * 1000; limit = { danger: limit, warning: limit * 0.9, }; } function getColor(size) { if (!limit) return color.green; return size > limit.danger ? color.red : size > limit.warning ? color.yellow : color.green; } return { name: "@atomico/rollup-plugin-sizes", async generateBundle(opts, bundles) { let length = Object.keys(bundles).length; let rows = [[length > 1 ? "FILES" : "FILE", "GZIP", "BROTLI"]]; let totalGzip = 0; let totalBroli = 0; let sizes = {}; let index = 1; for (let key in bundles) { let code = bundles[key].code; if (typeof code !== "string") continue; let gzip = await getGzip(code); let brotli = await getBrotli(code); totalGzip += gzip; totalBroli += brotli; sizes[index++] = gzip; rows.push([key, toKB(gzip), toKB(brotli)]); } if (length > 1) { rows.push(["", toKB(totalGzip), toKB(totalBroli)]); } sizes[index] = totalGzip; if (customLog) { customLog(rows); } else { console.log( [color.reset] .concat( table(rows) .split("\n") .map( (stringRow, index) => (sizes[index] ? getColor(sizes[index]) : "") + stringRow ), color.reset ) .join("\n") ); } }, }; } package/test/cases/root-1.js000666 0000001331 3560116604 013016 0ustar00000000 000000 export default function() { return `adipisicing pariatur dolor commodo laborum in do ipsum exercitation quis nisi occaecat laboris voluptate ut minim irure amet esse adipisicing nostrud adipisicing laborum incididunt enim non laborum amet ipsum dolore irure ex cupidatat occaecat eiusmod enim ex occaecat aliquip aute consequat ad exercitation laborum nulla cillum eu nisi dolore culpa labore est Lorem do amet proident excepteur mollit aute consectetur consectetur et minim ex esse esse anim voluptate commodo enim voluptate sit eiusmod mollit ullamco dolor sint eiusmod cillum excepteur consectetur non culpa occaecat sit culpa exercitation ad minim sit quis velit laborum in ullamco commodo pariatur in est cupidatat`; } package/test/cases/root-2.js000666 0000001331 3560116604 013017 0ustar00000000 000000 export default function() { return `adipisicing pariatur dolor commodo laborum in do ipsum exercitation quis nisi occaecat laboris voluptate ut minim irure amet esse adipisicing nostrud adipisicing laborum incididunt enim non laborum amet ipsum dolore irure ex cupidatat occaecat eiusmod enim ex occaecat aliquip aute consequat ad exercitation laborum nulla cillum eu nisi dolore culpa labore est Lorem do amet proident excepteur mollit aute consectetur consectetur et minim ex esse esse anim voluptate commodo enim voluptate sit eiusmod mollit ullamco dolor sint eiusmod cillum excepteur consectetur non culpa occaecat sit culpa exercitation ad minim sit quis velit laborum in ullamco commodo pariatur in est cupidatat`; } package/test/test.js000666 0000002210 3560116604 011553 0ustar00000000 000000 const test = require("ava"); const { rollup } = require("rollup"); const { readFile } = require("fs").promises; const getGzip = require("gzip-size").sync; const getBrotli = require("brotli-size").sync; const sizes = require("../index"); function toKB(size) { return (size / 1000).toFixed(2) + "KB"; } test("converts json", async t => { let table; const bundle = await rollup({ input: [__dirname + "/cases/root-1.js", __dirname + "/cases/root-2.js"], plugins: [sizes(null, nextTable => (table = nextTable))] }); await bundle.write({ dir: __dirname + "/tmp", format: "es" }); let [header, sizesRoot1, sizeRoot2] = table; // get files already processed to compare sizes from the temporary directory let fileSizes = await Promise.all([ readFile(__dirname + "/tmp/root-1.js", "utf8"), readFile(__dirname + "/tmp/root-2.js", "utf8") ]).then(files => files.map(file => [toKB(getGzip(file)), toKB(getBrotli(file))]) ); [sizesRoot1, sizeRoot2].map(([file, gzip, brotli], index) => { t.is(gzip, fileSizes[index][0]); t.is(brotli, fileSizes[index][1]); }); }); package/test/tmp/root-1.js000666 0000001346 3560116604 012526 0ustar00000000 000000 function root1() { return `adipisicing pariatur dolor commodo laborum in do ipsum exercitation quis nisi occaecat laboris voluptate ut minim irure amet esse adipisicing nostrud adipisicing laborum incididunt enim non laborum amet ipsum dolore irure ex cupidatat occaecat eiusmod enim ex occaecat aliquip aute consequat ad exercitation laborum nulla cillum eu nisi dolore culpa labore est Lorem do amet proident excepteur mollit aute consectetur consectetur et minim ex esse esse anim voluptate commodo enim voluptate sit eiusmod mollit ullamco dolor sint eiusmod cillum excepteur consectetur non culpa occaecat sit culpa exercitation ad minim sit quis velit laborum in ullamco commodo pariatur in est cupidatat`; } export default root1; package/test/tmp/root-2.js000666 0000001346 3560116604 012527 0ustar00000000 000000 function root2() { return `adipisicing pariatur dolor commodo laborum in do ipsum exercitation quis nisi occaecat laboris voluptate ut minim irure amet esse adipisicing nostrud adipisicing laborum incididunt enim non laborum amet ipsum dolore irure ex cupidatat occaecat eiusmod enim ex occaecat aliquip aute consequat ad exercitation laborum nulla cillum eu nisi dolore culpa labore est Lorem do amet proident excepteur mollit aute consectetur consectetur et minim ex esse esse anim voluptate commodo enim voluptate sit eiusmod mollit ullamco dolor sint eiusmod cillum excepteur consectetur non culpa occaecat sit culpa exercitation ad minim sit quis velit laborum in ullamco commodo pariatur in est cupidatat`; } export default root2;