1 | "use strict";
|
2 | var __importDefault = (this && this.__importDefault) || function (mod) {
|
3 | return (mod && mod.__esModule) ? mod : { "default": mod };
|
4 | };
|
5 | const path_1 = __importDefault(require("path"));
|
6 |
|
7 | const libnpmpack_1 = __importDefault(require("libnpmpack"));
|
8 | const tar_stream_1 = __importDefault(require("tar-stream"));
|
9 | const stream_1 = require("stream");
|
10 | const gunzip_maybe_1 = __importDefault(require("gunzip-maybe"));
|
11 | const gzip_size_1 = __importDefault(require("gzip-size"));
|
12 | const brotli_size_1 = require("brotli-size");
|
13 | const getTarFiles = async (tarball) => new Promise((resolve, reject) => {
|
14 | const files = [];
|
15 | stream_1.Readable.from(tarball)
|
16 | .pipe(gunzip_maybe_1.default())
|
17 | .pipe(tar_stream_1.default.extract())
|
18 | .on('entry', (header, stream, next) => {
|
19 | const file = {
|
20 | |
21 |
|
22 |
|
23 |
|
24 | path: header.name.replace(/^[^/]+\/?/, '/'),
|
25 | mode: header.mode,
|
26 | size: header.size,
|
27 | sizeGzip: Number.NaN,
|
28 | sizeBrotli: Number.NaN,
|
29 | };
|
30 | files.push(file);
|
31 | stream = stream
|
32 | .pipe(brotli_size_1.stream())
|
33 | .on('brotli-size', sizeBrotli => {
|
34 | file.sizeBrotli = sizeBrotli;
|
35 | })
|
36 | .pipe(gzip_size_1.default.stream())
|
37 | .on('gzip-size', sizeGzip => {
|
38 | file.sizeGzip = sizeGzip;
|
39 | });
|
40 | stream
|
41 | .on('end', next)
|
42 | .resume();
|
43 | })
|
44 | .on('error', error => reject(error))
|
45 | .on('finish', () => resolve(files));
|
46 | });
|
47 | async function pkgSize(pkgPath = '') {
|
48 | pkgPath = path_1.default.resolve(pkgPath);
|
49 | const tarball = await libnpmpack_1.default(pkgPath);
|
50 | const files = await getTarFiles(tarball);
|
51 | return { pkgPath, files };
|
52 | }
|
53 | module.exports = pkgSize;
|