UNPKG

2.75 kBJavaScriptView Raw
1#!/usr/bin/env node
2
3import fs from "fs";
4import zlib from "zlib";
5import prettyBytes from "pretty-bytes";
6const beforeSourcemap = JSON.parse(fs.readFileSync('./before.json').toString());
7const afterSourcemap = JSON.parse(fs.readFileSync('./after.json').toString());
8
9function fileSize(file) {
10 const {size} = fs.statSync(file);
11 const gzipped = zlib.gzipSync(fs.readFileSync(file)).length
12 return {
13 size,
14 gzipped
15 };
16}
17
18const beforejs = fileSize('./before/maplibre-gl.js');
19const beforecss = fileSize('./before/maplibre-gl.css');
20const afterjs = fileSize('./after/maplibre-gl.js');
21const aftercss = fileSize('./after/maplibre-gl.css');
22
23console.log('Bundle size report:\n');
24console.log(`**Size Change:** ${prettyBytes(afterjs.gzipped + aftercss.gzipped - (beforejs.gzipped + beforecss.gzipped), { signed: true })}`);
25console.log(`**Total Size Before:** ${prettyBytes(beforejs.gzipped + beforecss.gzipped)}`);
26console.log(`**Total Size After:** ${prettyBytes(afterjs.gzipped + aftercss.gzipped)}`);
27console.log(`
28| Output file | Before | After | Change |
29| :--- | :---: | :---: | :---: |
30| maplibre-gl.js | ${prettyBytes(beforejs.gzipped)} | ${prettyBytes(afterjs.gzipped)} | ${prettyBytes(afterjs.gzipped - beforejs.gzipped, { signed: true })} |
31| maplibre-gl.css | ${prettyBytes(beforecss.gzipped)} | ${prettyBytes(aftercss.gzipped)} | ${prettyBytes(aftercss.gzipped - beforecss.gzipped, { signed: true })} |`);
32
33const before = {};
34beforeSourcemap.results.forEach(result => {
35 Object.keys(result.files).forEach(filename => {
36 const {size} = result.files[filename];
37 before[filename] = size;
38 });
39});
40
41const after = {};
42afterSourcemap.results.forEach(result => {
43 Object.keys(result.files).forEach(filename => {
44 const {size} = result.files[filename];
45 after[filename] = size;
46 });
47});
48
49const diffs = [];
50Object.keys(Object.assign({}, before, after)).forEach(filename => {
51 const beforeSize = before[filename] || 0;
52 const afterSize = after[filename] || 0;
53 if (Math.abs(afterSize - beforeSize) > 0) {
54 diffs.push([
55 afterSize - beforeSize, // for sorting
56 filename.replace(/^[\./]+/, ''), // omit ../
57 prettyBytes(beforeSize),
58 prettyBytes(afterSize),
59 prettyBytes(afterSize - beforeSize, { signed: true })
60 ]);
61 }
62});
63
64diffs.sort((a, b) => b[0] - a[0]);
65
66console.log(`
67<details><summary>ℹ️ <strong>View Details</strong></summary>`);
68if (diffs.length) {
69 console.log(`
70| Source file | Before | After | Change |
71| :--- | :---: | :---: | :---: |
72${diffs.map(diff => '| ' + diff.slice(1).join(' | ') + ' |').join('\n')}
73`);
74} else {
75 console.log('No major changes');
76}
77console.log(`</details>`);