From e86b5429e824cdaa96a1ee6842ea84cee065d841 Mon Sep 17 00:00:00 2001 From: Mariusz Nowak Date: Wed, 27 Oct 2021 14:01:55 +0200 Subject: [PATCH] refactor(CLI): Improve file size output in logs --- lib/plugins/aws/deployFunction.js | 2 +- lib/plugins/aws/info/display.js | 2 +- lib/utils/filesize.js | 13 +++++++++ test/unit/lib/utils/filesize.test.js | 42 ++++++++++++++++++++++++++++ 4 files changed, 57 insertions(+), 2 deletions(-) create mode 100644 lib/utils/filesize.js create mode 100644 test/unit/lib/utils/filesize.test.js diff --git a/lib/plugins/aws/deployFunction.js b/lib/plugins/aws/deployFunction.js index f778312a2750..122db8649823 100644 --- a/lib/plugins/aws/deployFunction.js +++ b/lib/plugins/aws/deployFunction.js @@ -6,7 +6,7 @@ const path = require('path'); const fs = require('fs'); const wait = require('timers-ext/promise/sleep'); const validate = require('./lib/validate'); -const filesize = require('filesize'); +const filesize = require('../../utils/filesize'); const ServerlessError = require('../../serverless-error'); const { log, style, legacy, progress } = require('@serverless/utils/log'); diff --git a/lib/plugins/aws/info/display.js b/lib/plugins/aws/info/display.js index 190349bccb4b..6d7b67a80570 100644 --- a/lib/plugins/aws/info/display.js +++ b/lib/plugins/aws/info/display.js @@ -1,7 +1,7 @@ 'use strict'; const chalk = require('chalk'); -const filesize = require('filesize'); +const filesize = require('../../../utils/filesize'); const { legacy, isVerboseMode, style } = require('@serverless/utils/log'); module.exports = { diff --git a/lib/utils/filesize.js b/lib/utils/filesize.js new file mode 100644 index 000000000000..d4c35f5ba810 --- /dev/null +++ b/lib/utils/filesize.js @@ -0,0 +1,13 @@ +'use strict'; + +const ensureNaturalNumber = require('type/natural-number/ensure'); +const filesize = require('filesize'); + +const resolveSignificant = (size) => { + return size >= 1000 ? resolveSignificant(Math.floor(size / 1000)) : size; +}; + +module.exports = (size) => + filesize(size, { + round: resolveSignificant(ensureNaturalNumber(size, { name: 'size' })) >= 9 ? 0 : 2, + }); diff --git a/test/unit/lib/utils/filesize.test.js b/test/unit/lib/utils/filesize.test.js new file mode 100644 index 000000000000..e1a05ed191ff --- /dev/null +++ b/test/unit/lib/utils/filesize.test.js @@ -0,0 +1,42 @@ +'use strict'; + +const { expect } = require('chai'); +const filesize = require('../../../../lib/utils/filesize'); + +describe('test/unit/lib/utils/filesize.test.js', () => { + it('should display sizes below 1kb literally', () => { + expect(filesize(1)).to.equal('1 B'); + expect(filesize(10)).to.equal('10 B'); + expect(filesize(12)).to.equal('12 B'); + expect(filesize(100)).to.equal('100 B'); + expect(filesize(123)).to.equal('123 B'); + expect(filesize(987)).to.equal('987 B'); + }); + + it('expect to display round values without decimals', () => { + expect(filesize(1000)).to.equal('1 kB'); + expect(filesize(3000)).to.equal('3 kB'); + expect(filesize(1000 * 1000)).to.equal('1 MB'); + expect(filesize(4000 * 1000)).to.equal('4 MB'); + expect(filesize(1000 * 1000 * 1000)).to.equal('1 GB'); + expect(filesize(4000 * 1000 * 1000)).to.equal('4 GB'); + }); + + it('expect to display not round values below 9 with decimals', () => { + expect(filesize(1123)).to.equal('1.12 kB'); + expect(filesize(8123)).to.equal('8.12 kB'); + expect(filesize(1234848)).to.equal('1.23 MB'); + expect(filesize(8123494)).to.equal('8.12 MB'); + expect(filesize(1123484848)).to.equal('1.12 GB'); + expect(filesize(8123494934)).to.equal('8.12 GB'); + }); + + it('expect to display not round values above 9 without decimals', () => { + expect(filesize(12123)).to.equal('12 kB'); + expect(filesize(9123)).to.equal('9 kB'); + expect(filesize(12234848)).to.equal('12 MB'); + expect(filesize(9234949)).to.equal('9 MB'); + expect(filesize(12348484848)).to.equal('12 GB'); + expect(filesize(9349493432)).to.equal('9 GB'); + }); +});