Skip to content

Commit ee6a7dd

Browse files
committed
Epic commit, 97% moar awesomer
1 parent 7dc5b4e commit ee6a7dd

4 files changed

Lines changed: 94 additions & 39 deletions

File tree

index.js

Lines changed: 41 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -17,23 +17,17 @@ const formatBytes = (bytes) => {
1717
const analyze = (bundle, opts = {}, format = false) => {
1818
let { root, limit, filter } = opts;
1919
let deps = {};
20+
let entrySize;
2021
let bundleSize = 0;
2122
let bundleModules = bundle.modules;
2223

2324
return new Promise((resolve, reject) => {
24-
if (bundleModules && !Array.isArray(bundleModules)) {
25-
bundleModules = Object.keys(bundleModules).map((id) => {
26-
let { originalLength, renderedLength } = bundleModules[id];
27-
return {id, dependencies: [], originalLength, renderedLength}
28-
});
29-
}
30-
3125
let modules = bundleModules.map((m, i) => {
32-
let id = m.id.replace(root, '');
33-
let size = m.renderedLength;
34-
if (!size && size !== 0) {
35-
size = m.code ? Buffer.byteLength(m.code, 'utf8') : 0;
36-
}
26+
let { id, originalLength: origSize, renderedLength, isEntry, code } = m;
27+
id = id.replace(root, '');
28+
let size = renderedLength;
29+
if (!size && size !== 0) size = code ? Buffer.byteLength(code, 'utf8') : 0;
30+
if (isEntry) entrySize = size;
3731
bundleSize += size;
3832

3933
if (Array.isArray(filter) && !filter.some((f) => id.match(f))) return null
@@ -45,14 +39,17 @@ const analyze = (bundle, opts = {}, format = false) => {
4539
deps[d].push(id);
4640
});
4741

48-
return {id, size}
42+
return {id, size, origSize, isEntry}
4943
}).filter((m) => m);
5044

45+
if (entrySize) bundleSize = entrySize;
46+
5147
modules.sort((a, b) => b.size - a.size);
5248
if (limit || limit === 0) modules = modules.slice(0, limit);
5349
modules.forEach((m) => {
5450
m.dependents = deps[m.id] || [];
5551
m.percent = ((m.size / bundleSize) * 100).toFixed(2);
52+
m.reduction = 100 - ((m.size / m.origSize) * 100).toFixed(2);
5653
});
5754

5855
if (!format) return resolve(modules)
@@ -62,9 +59,12 @@ const analyze = (bundle, opts = {}, format = false) => {
6259
let formatted = `${borderX}${heading}${displaySize}${borderX}`;
6360

6461
modules.forEach((m) => {
62+
if (m.isEntry) return
6563
formatted += `file:${buf}${m.id}\n`;
6664
formatted += `size:${buf}${formatBytes(m.size)}\n`;
6765
formatted += `percent:${buf}${m.percent}%\n`;
66+
formatted += `orig. size:${buf}${formatBytes(m.origSize || 'unknown')}\n`;
67+
formatted += `code reduction:${buf}${m.reduction}%\n`;
6868
formatted += `dependents:${buf}${m.dependents.length}\n`;
6969
m.dependents.forEach((d) => {
7070
formatted += `${tab}-${buf}${d.replace(root, '')}\n`;
@@ -82,15 +82,39 @@ const plugin = (opts = {}) => {
8282
let cb = opts.writeTo || (opts.stdout ? console.log : console.error);
8383
if (opts.onAnalysis) cb = opts.onAnalysis;
8484
let written;
85+
let modules;
8586

86-
let runAnalysis = (outputOptions, bundle, isWrite) => {
87+
let runAnalysis = (out, bundle, isWrite) => new Promise((resolve, reject) => {
88+
resolve();
8789
if (written) return
88-
if (outputOptions.bundle) bundle = outputOptions.bundle;
8990
written = true;
90-
return analyze(bundle, opts, !opts.onAnalysis).then(cb)
91-
};
91+
if (out.bundle) bundle = out.bundle;
92+
if (!Array.isArray(bundle.modules)) {
93+
modules.forEach((m) => {
94+
let bm = bundle.modules[m.id];
95+
bm.id = bm.id || m.id;
96+
bm.isEntry = bm.isEntry || m.isEntry;
97+
bm.dependencies = m.dependencies || [];
98+
});
99+
modules = Object.keys(bundle.modules).map((k) => bundle.modules[k]);
100+
} else {
101+
modules = bundle.modules;
102+
}
103+
return analyze({modules}, opts, !opts.onAnalysis).then(cb)
104+
});
92105
return {
93106
name: 'rollup-analyzer-plugin',
107+
transformChunk: (_a, _b, chunk) => new Promise((resolve, reject) => {
108+
resolve(null);
109+
if (!chunk || !chunk.orderedModules) return
110+
modules = chunk.orderedModules.map((m) => {
111+
return {
112+
id: m.id,
113+
isEntry: m.isEntryPoint,
114+
dependencies: m.dependencies.map((d) => d.id)
115+
}
116+
});
117+
}),
94118
generateBundle: runAnalysis,
95119
ongenerate: runAnalysis
96120
}

module.js

Lines changed: 41 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -15,23 +15,17 @@ const formatBytes = (bytes) => {
1515
export const analyze = (bundle, opts = {}, format = false) => {
1616
let { root, limit, filter } = opts
1717
let deps = {}
18+
let entrySize
1819
let bundleSize = 0
1920
let bundleModules = bundle.modules
2021

2122
return new Promise((resolve, reject) => {
22-
if (bundleModules && !Array.isArray(bundleModules)) {
23-
bundleModules = Object.keys(bundleModules).map((id) => {
24-
let { originalLength, renderedLength } = bundleModules[id]
25-
return {id, dependencies: [], originalLength, renderedLength}
26-
})
27-
}
28-
2923
let modules = bundleModules.map((m, i) => {
30-
let id = m.id.replace(root, '')
31-
let size = m.renderedLength
32-
if (!size && size !== 0) {
33-
size = m.code ? Buffer.byteLength(m.code, 'utf8') : 0
34-
}
24+
let { id, originalLength: origSize, renderedLength, isEntry, code } = m
25+
id = id.replace(root, '')
26+
let size = renderedLength
27+
if (!size && size !== 0) size = code ? Buffer.byteLength(code, 'utf8') : 0
28+
if (isEntry) entrySize = size
3529
bundleSize += size
3630

3731
if (Array.isArray(filter) && !filter.some((f) => id.match(f))) return null
@@ -43,14 +37,17 @@ export const analyze = (bundle, opts = {}, format = false) => {
4337
deps[d].push(id)
4438
})
4539

46-
return {id, size}
40+
return {id, size, origSize, isEntry}
4741
}).filter((m) => m)
4842

43+
if (entrySize) bundleSize = entrySize
44+
4945
modules.sort((a, b) => b.size - a.size)
5046
if (limit || limit === 0) modules = modules.slice(0, limit)
5147
modules.forEach((m) => {
5248
m.dependents = deps[m.id] || []
5349
m.percent = ((m.size / bundleSize) * 100).toFixed(2)
50+
m.reduction = 100 - ((m.size / m.origSize) * 100).toFixed(2)
5451
})
5552

5653
if (!format) return resolve(modules)
@@ -60,9 +57,12 @@ export const analyze = (bundle, opts = {}, format = false) => {
6057
let formatted = `${borderX}${heading}${displaySize}${borderX}`
6158

6259
modules.forEach((m) => {
60+
if (m.isEntry) return
6361
formatted += `file:${buf}${m.id}\n`
6462
formatted += `size:${buf}${formatBytes(m.size)}\n`
6563
formatted += `percent:${buf}${m.percent}%\n`
64+
formatted += `orig. size:${buf}${formatBytes(m.origSize || 'unknown')}\n`
65+
formatted += `code reduction:${buf}${m.reduction}%\n`
6666
formatted += `dependents:${buf}${m.dependents.length}\n`
6767
m.dependents.forEach((d) => {
6868
formatted += `${tab}-${buf}${d.replace(root, '')}\n`
@@ -80,15 +80,39 @@ export const plugin = (opts = {}) => {
8080
let cb = opts.writeTo || (opts.stdout ? console.log : console.error)
8181
if (opts.onAnalysis) cb = opts.onAnalysis
8282
let written
83+
let modules
8384

84-
let runAnalysis = (outputOptions, bundle, isWrite) => {
85+
let runAnalysis = (out, bundle, isWrite) => new Promise((resolve, reject) => {
86+
resolve()
8587
if (written) return
86-
if (outputOptions.bundle) bundle = outputOptions.bundle
8788
written = true
88-
return analyze(bundle, opts, !opts.onAnalysis).then(cb)
89-
}
89+
if (out.bundle) bundle = out.bundle
90+
if (!Array.isArray(bundle.modules)) {
91+
modules.forEach((m) => {
92+
let bm = bundle.modules[m.id]
93+
bm.id = bm.id || m.id
94+
bm.isEntry = bm.isEntry || m.isEntry
95+
bm.dependencies = m.dependencies || []
96+
})
97+
modules = Object.keys(bundle.modules).map((k) => bundle.modules[k])
98+
} else {
99+
modules = bundle.modules
100+
}
101+
return analyze({modules}, opts, !opts.onAnalysis).then(cb)
102+
})
90103
return {
91104
name: 'rollup-analyzer-plugin',
105+
transformChunk: (_a, _b, chunk) => new Promise((resolve, reject) => {
106+
resolve(null)
107+
if (!chunk || !chunk.orderedModules) return
108+
modules = chunk.orderedModules.map((m) => {
109+
return {
110+
id: m.id,
111+
isEntry: m.isEntryPoint,
112+
dependencies: m.dependencies.map((d) => d.id)
113+
}
114+
})
115+
}),
92116
generateBundle: runAnalysis,
93117
ongenerate: runAnalysis
94118
}

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "rollup-analyzer",
3-
"version": "2.0.0-beta.2",
3+
"version": "2.0.0-beta.3",
44
"description": "Analyze file sizes of rollup bundled imports",
55
"main": "index.js",
66
"module": "module.js",
@@ -35,7 +35,7 @@
3535
"devDependencies": {
3636
"ava": "^0.25.0",
3737
"husky": "^0.14.3",
38-
"rollup": "latest",
38+
"rollup": "^0.60.1",
3939
"rollup40": "npm:rollup@0.40.x",
4040
"rollup45": "npm:rollup@0.45.x",
4141
"rollup50": "npm:rollup@0.50.x",

yarn.lock

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,8 @@
5858
resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f"
5959

6060
"@types/node@*":
61-
version "10.3.1"
62-
resolved "https://registry.yarnpkg.com/@types/node/-/node-10.3.1.tgz#51092fbacaed768a122a293814474fbf6e5e8b6d"
61+
version "10.3.2"
62+
resolved "https://registry.yarnpkg.com/@types/node/-/node-10.3.2.tgz#3840ec6c12556fdda6e0e6d036df853101d732a4"
6363

6464
abbrev@1:
6565
version "1.1.1"
@@ -2239,13 +2239,20 @@ rimraf@^2.6.1:
22392239
version "0.55.5"
22402240
resolved "https://registry.yarnpkg.com/rollup/-/rollup-0.55.5.tgz#2f88c300f7cf24b5ec2dca8a6aba73b04e087e93"
22412241

2242-
"rollup60@npm:rollup@0.60.x", rollup@latest:
2242+
"rollup60@npm:rollup@0.60.x":
22432243
version "0.60.0"
22442244
resolved "https://registry.yarnpkg.com/rollup/-/rollup-0.60.0.tgz#2c4acaaf3d8a858a81ff740d6253e21eeb58ff21"
22452245
dependencies:
22462246
"@types/estree" "0.0.39"
22472247
"@types/node" "*"
22482248

2249+
rollup@^0.60.1:
2250+
version "0.60.1"
2251+
resolved "https://registry.yarnpkg.com/rollup/-/rollup-0.60.1.tgz#07cb66153f1541d5f7e82b8393b405c31647dae9"
2252+
dependencies:
2253+
"@types/estree" "0.0.39"
2254+
"@types/node" "*"
2255+
22492256
safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
22502257
version "5.1.2"
22512258
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"

0 commit comments

Comments
 (0)