@node-cli/bundlecheck 1.0.0 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/trend.d.ts +2 -1
- package/dist/trend.js +16 -7
- package/dist/trend.js.map +1 -1
- package/package.json +8 -8
package/dist/trend.d.ts
CHANGED
|
@@ -14,7 +14,8 @@ export type TrendOptions = {
|
|
|
14
14
|
};
|
|
15
15
|
/**
|
|
16
16
|
* Select versions for trend analysis
|
|
17
|
-
* Returns the most recent versions (newest first)
|
|
17
|
+
* Returns the most recent stable versions (newest first)
|
|
18
|
+
* Filters out prerelease versions (canary, alpha, beta, rc, etc.)
|
|
18
19
|
*/
|
|
19
20
|
export declare function selectTrendVersions(allVersions: string[], count?: number): string[];
|
|
20
21
|
/**
|
package/dist/trend.js
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
import { Logger } from "@node-cli/logger";
|
|
2
2
|
import kleur from "kleur";
|
|
3
|
+
import { prerelease } from "semver";
|
|
3
4
|
import { checkBundleSize, formatBytes } from "./bundler.js";
|
|
4
5
|
import { TREND_VERSION_COUNT } from "./defaults.js";
|
|
5
6
|
/**
|
|
6
7
|
* Select versions for trend analysis
|
|
7
|
-
* Returns the most recent versions (newest first)
|
|
8
|
+
* Returns the most recent stable versions (newest first)
|
|
9
|
+
* Filters out prerelease versions (canary, alpha, beta, rc, etc.)
|
|
8
10
|
*/ export function selectTrendVersions(allVersions, count = TREND_VERSION_COUNT) {
|
|
9
|
-
|
|
11
|
+
// Filter out prerelease versions (canary, alpha, beta, rc, etc.)
|
|
12
|
+
const stableVersions = allVersions.filter((v)=>!prerelease(v));
|
|
13
|
+
return stableVersions.slice(0, count);
|
|
10
14
|
}
|
|
11
15
|
/**
|
|
12
16
|
* Analyze bundle size trend across multiple versions
|
|
@@ -57,15 +61,20 @@ import { TREND_VERSION_COUNT } from "./defaults.js";
|
|
|
57
61
|
const maxGzipSize = Math.max(...gzipSizes);
|
|
58
62
|
const minRawSize = Math.min(...rawSizes);
|
|
59
63
|
const maxRawSize = Math.max(...rawSizes);
|
|
64
|
+
// Check if all formatted values are the same (to avoid misleading bar differences)
|
|
65
|
+
const formattedGzipSizes = results.map((r)=>formatBytes(r.gzipSize));
|
|
66
|
+
const formattedRawSizes = results.map((r)=>formatBytes(r.rawSize));
|
|
67
|
+
const allGzipSame = new Set(formattedGzipSizes).size === 1;
|
|
68
|
+
const allRawSame = new Set(formattedRawSizes).size === 1;
|
|
60
69
|
// Find max version length for alignment
|
|
61
70
|
const maxVersionLen = Math.max(...results.map((r)=>r.version.length));
|
|
62
71
|
// Bar width (characters)
|
|
63
72
|
const barWidth = 30;
|
|
64
73
|
const minBarWidth = 10; // Minimum bar length for smallest value
|
|
65
74
|
// Helper to calculate bar length with min-max scaling
|
|
66
|
-
const calcBarLength = (value, min, max)=>{
|
|
67
|
-
if (max === min) {
|
|
68
|
-
return barWidth; // All values are the same
|
|
75
|
+
const calcBarLength = (value, min, max, allSame)=>{
|
|
76
|
+
if (max === min || allSame) {
|
|
77
|
+
return barWidth; // All values are effectively the same
|
|
69
78
|
}
|
|
70
79
|
// Scale from minBarWidth to barWidth based on position between min and max
|
|
71
80
|
const ratio = (value - min) / (max - min);
|
|
@@ -79,7 +88,7 @@ import { TREND_VERSION_COUNT } from "./defaults.js";
|
|
|
79
88
|
// Gzip size bars
|
|
80
89
|
lines.push(blue("Gzip Size:"));
|
|
81
90
|
for (const result of results){
|
|
82
|
-
const barLength = calcBarLength(result.gzipSize, minGzipSize, maxGzipSize);
|
|
91
|
+
const barLength = calcBarLength(result.gzipSize, minGzipSize, maxGzipSize, allGzipSame);
|
|
83
92
|
const bar = "▇".repeat(barLength);
|
|
84
93
|
const padding = " ".repeat(maxVersionLen - result.version.length);
|
|
85
94
|
const sizeStr = formatBytes(result.gzipSize);
|
|
@@ -89,7 +98,7 @@ import { TREND_VERSION_COUNT } from "./defaults.js";
|
|
|
89
98
|
// Raw size bars
|
|
90
99
|
lines.push(blue("Raw Size:"));
|
|
91
100
|
for (const result of results){
|
|
92
|
-
const barLength = calcBarLength(result.rawSize, minRawSize, maxRawSize);
|
|
101
|
+
const barLength = calcBarLength(result.rawSize, minRawSize, maxRawSize, allRawSame);
|
|
93
102
|
const bar = "▇".repeat(barLength);
|
|
94
103
|
const padding = " ".repeat(maxVersionLen - result.version.length);
|
|
95
104
|
const sizeStr = formatBytes(result.rawSize);
|
package/dist/trend.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/trend.ts"],"sourcesContent":["import { Logger } from \"@node-cli/logger\";\nimport kleur from \"kleur\";\nimport { checkBundleSize, formatBytes } from \"./bundler.js\";\nimport { TREND_VERSION_COUNT } from \"./defaults.js\";\n\nexport type TrendResult = {\n\tversion: string;\n\trawSize: number;\n\tgzipSize: number;\n};\n\nexport type TrendOptions = {\n\tpackageName: string;\n\tversions: string[];\n\texports?: string[];\n\tadditionalExternals?: string[];\n\tnoExternal?: boolean;\n\tgzipLevel?: number;\n\tboring?: boolean;\n};\n\n/**\n * Select versions for trend analysis\n * Returns the most recent versions (newest first)\n */\nexport function selectTrendVersions(\n\tallVersions: string[],\n\tcount: number = TREND_VERSION_COUNT,\n): string[] {\n\treturn allVersions.slice(0, count);\n}\n\n/**\n * Analyze bundle size trend across multiple versions\n */\nexport async function analyzeTrend(\n\toptions: TrendOptions,\n): Promise<TrendResult[]> {\n\tconst {\n\t\tpackageName,\n\t\tversions,\n\t\texports,\n\t\tadditionalExternals,\n\t\tnoExternal,\n\t\tgzipLevel,\n\t\tboring,\n\t} = options;\n\n\tconst log = new Logger({ boring });\n\tconst results: TrendResult[] = [];\n\n\tfor (const version of versions) {\n\t\tconst versionedPackage = `${packageName}@${version}`;\n\t\tlog.info(` Checking ${version}...`);\n\n\t\ttry {\n\t\t\tconst result = await checkBundleSize({\n\t\t\t\tpackageName: versionedPackage,\n\t\t\t\texports,\n\t\t\t\tadditionalExternals,\n\t\t\t\tnoExternal,\n\t\t\t\tgzipLevel,\n\t\t\t});\n\n\t\t\tresults.push({\n\t\t\t\tversion,\n\t\t\t\trawSize: result.rawSize,\n\t\t\t\tgzipSize: result.gzipSize,\n\t\t\t});\n\t\t} catch {\n\t\t\t// Skip versions that fail to analyze\n\t\t\tlog.info(` Skipping ${version} (failed to analyze)`);\n\t\t}\n\t}\n\n\treturn results;\n}\n\n/**\n * Render a bar graph showing bundle size trend\n */\nexport function renderTrendGraph(\n\tpackageName: string,\n\tresults: TrendResult[],\n\tboring: boolean = false,\n): string[] {\n\tif (results.length === 0) {\n\t\treturn [\"No data to display\"];\n\t}\n\n\tconst lines: string[] = [];\n\n\t// Color helper (respects boring flag)\n\tconst blue = (text: string) => (boring ? text : kleur.blue(text));\n\n\t// Find min/max sizes for scaling (use min-max scaling to show differences)\n\tconst gzipSizes = results.map((r) => r.gzipSize);\n\tconst rawSizes = results.map((r) => r.rawSize);\n\n\tconst minGzipSize = Math.min(...gzipSizes);\n\tconst maxGzipSize = Math.max(...gzipSizes);\n\tconst minRawSize = Math.min(...rawSizes);\n\tconst maxRawSize = Math.max(...rawSizes);\n\n\t// Find max version length for alignment\n\tconst maxVersionLen = Math.max(...results.map((r) => r.version.length));\n\n\t// Bar width (characters)\n\tconst barWidth = 30;\n\tconst minBarWidth = 10; // Minimum bar length for smallest value\n\n\t// Helper to calculate bar length with min-max scaling\n\tconst calcBarLength = (value: number, min: number, max: number): number => {\n\t\tif (max === min) {\n\t\t\treturn barWidth; // All values are the same\n\t\t}\n\t\t// Scale from minBarWidth to barWidth based on position between min and max\n\t\tconst ratio = (value - min) / (max - min);\n\t\treturn Math.round(minBarWidth + ratio * (barWidth - minBarWidth));\n\t};\n\n\t// Header\n\tlines.push(\"\");\n\tlines.push(`${blue(\"Bundle Size:\")} ${packageName}`);\n\tlines.push(\"─\".repeat(60));\n\tlines.push(\"\");\n\n\t// Gzip size bars\n\tlines.push(blue(\"Gzip Size:\"));\n\tfor (const result of results) {\n\t\tconst barLength = calcBarLength(result.gzipSize, minGzipSize, maxGzipSize);\n\t\tconst bar = \"▇\".repeat(barLength);\n\t\tconst padding = \" \".repeat(maxVersionLen - result.version.length);\n\t\tconst sizeStr = formatBytes(result.gzipSize);\n\t\tlines.push(` ${result.version}${padding} ${bar} ${sizeStr}`);\n\t}\n\n\tlines.push(\"\");\n\n\t// Raw size bars\n\tlines.push(blue(\"Raw Size:\"));\n\tfor (const result of results) {\n\t\tconst barLength = calcBarLength(result.rawSize, minRawSize, maxRawSize);\n\t\tconst bar = \"▇\".repeat(barLength);\n\t\tconst padding = \" \".repeat(maxVersionLen - result.version.length);\n\t\tconst sizeStr = formatBytes(result.rawSize);\n\t\tlines.push(` ${result.version}${padding} ${bar} ${sizeStr}`);\n\t}\n\n\tlines.push(\"\");\n\n\t// Summary\n\tconst oldestResult = results[results.length - 1];\n\tconst newestResult = results[0];\n\n\tif (results.length > 1) {\n\t\tconst gzipDiff = newestResult.gzipSize - oldestResult.gzipSize;\n\t\tconst gzipPercent = ((gzipDiff / oldestResult.gzipSize) * 100).toFixed(1);\n\t\tconst rawDiff = newestResult.rawSize - oldestResult.rawSize;\n\t\tconst rawPercent = ((rawDiff / oldestResult.rawSize) * 100).toFixed(1);\n\n\t\tconst gzipTrend =\n\t\t\tgzipDiff >= 0\n\t\t\t\t? `+${formatBytes(gzipDiff)}`\n\t\t\t\t: `-${formatBytes(Math.abs(gzipDiff))}`;\n\t\tconst rawTrend =\n\t\t\trawDiff >= 0\n\t\t\t\t? `+${formatBytes(rawDiff)}`\n\t\t\t\t: `-${formatBytes(Math.abs(rawDiff))}`;\n\n\t\tlines.push(\"─\".repeat(60));\n\t\tlines.push(\n\t\t\t`Change from ${oldestResult.version} to ${newestResult.version}:`,\n\t\t);\n\t\tlines.push(\n\t\t\t` ${blue(\"Gzip:\")} ${gzipTrend} (${gzipDiff >= 0 ? \"+\" : \"\"}${gzipPercent}%)`,\n\t\t);\n\t\tlines.push(\n\t\t\t` ${blue(\"Raw:\")} ${rawTrend} (${rawDiff >= 0 ? \"+\" : \"\"}${rawPercent}%)`,\n\t\t);\n\t}\n\n\tlines.push(\"\");\n\n\treturn lines;\n}\n"],"names":["Logger","kleur","checkBundleSize","formatBytes","TREND_VERSION_COUNT","selectTrendVersions","allVersions","count","slice","analyzeTrend","options","packageName","versions","exports","additionalExternals","noExternal","gzipLevel","boring","log","results","version","versionedPackage","info","result","push","rawSize","gzipSize","renderTrendGraph","length","lines","blue","text","gzipSizes","map","r","rawSizes","minGzipSize","Math","min","maxGzipSize","max","minRawSize","maxRawSize","maxVersionLen","barWidth","minBarWidth","calcBarLength","value","ratio","round","repeat","barLength","bar","padding","sizeStr","oldestResult","newestResult","gzipDiff","gzipPercent","toFixed","rawDiff","rawPercent","gzipTrend","abs","rawTrend"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../src/trend.ts"],"sourcesContent":["import { Logger } from \"@node-cli/logger\";\nimport kleur from \"kleur\";\nimport { prerelease } from \"semver\";\nimport { checkBundleSize, formatBytes } from \"./bundler.js\";\nimport { TREND_VERSION_COUNT } from \"./defaults.js\";\n\nexport type TrendResult = {\n\tversion: string;\n\trawSize: number;\n\tgzipSize: number;\n};\n\nexport type TrendOptions = {\n\tpackageName: string;\n\tversions: string[];\n\texports?: string[];\n\tadditionalExternals?: string[];\n\tnoExternal?: boolean;\n\tgzipLevel?: number;\n\tboring?: boolean;\n};\n\n/**\n * Select versions for trend analysis\n * Returns the most recent stable versions (newest first)\n * Filters out prerelease versions (canary, alpha, beta, rc, etc.)\n */\nexport function selectTrendVersions(\n\tallVersions: string[],\n\tcount: number = TREND_VERSION_COUNT,\n): string[] {\n\t// Filter out prerelease versions (canary, alpha, beta, rc, etc.)\n\tconst stableVersions = allVersions.filter((v) => !prerelease(v));\n\treturn stableVersions.slice(0, count);\n}\n\n/**\n * Analyze bundle size trend across multiple versions\n */\nexport async function analyzeTrend(\n\toptions: TrendOptions,\n): Promise<TrendResult[]> {\n\tconst {\n\t\tpackageName,\n\t\tversions,\n\t\texports,\n\t\tadditionalExternals,\n\t\tnoExternal,\n\t\tgzipLevel,\n\t\tboring,\n\t} = options;\n\n\tconst log = new Logger({ boring });\n\tconst results: TrendResult[] = [];\n\n\tfor (const version of versions) {\n\t\tconst versionedPackage = `${packageName}@${version}`;\n\t\tlog.info(` Checking ${version}...`);\n\n\t\ttry {\n\t\t\tconst result = await checkBundleSize({\n\t\t\t\tpackageName: versionedPackage,\n\t\t\t\texports,\n\t\t\t\tadditionalExternals,\n\t\t\t\tnoExternal,\n\t\t\t\tgzipLevel,\n\t\t\t});\n\n\t\t\tresults.push({\n\t\t\t\tversion,\n\t\t\t\trawSize: result.rawSize,\n\t\t\t\tgzipSize: result.gzipSize,\n\t\t\t});\n\t\t} catch {\n\t\t\t// Skip versions that fail to analyze\n\t\t\tlog.info(` Skipping ${version} (failed to analyze)`);\n\t\t}\n\t}\n\n\treturn results;\n}\n\n/**\n * Render a bar graph showing bundle size trend\n */\nexport function renderTrendGraph(\n\tpackageName: string,\n\tresults: TrendResult[],\n\tboring: boolean = false,\n): string[] {\n\tif (results.length === 0) {\n\t\treturn [\"No data to display\"];\n\t}\n\n\tconst lines: string[] = [];\n\n\t// Color helper (respects boring flag)\n\tconst blue = (text: string) => (boring ? text : kleur.blue(text));\n\n\t// Find min/max sizes for scaling (use min-max scaling to show differences)\n\tconst gzipSizes = results.map((r) => r.gzipSize);\n\tconst rawSizes = results.map((r) => r.rawSize);\n\n\tconst minGzipSize = Math.min(...gzipSizes);\n\tconst maxGzipSize = Math.max(...gzipSizes);\n\tconst minRawSize = Math.min(...rawSizes);\n\tconst maxRawSize = Math.max(...rawSizes);\n\n\t// Check if all formatted values are the same (to avoid misleading bar differences)\n\tconst formattedGzipSizes = results.map((r) => formatBytes(r.gzipSize));\n\tconst formattedRawSizes = results.map((r) => formatBytes(r.rawSize));\n\tconst allGzipSame = new Set(formattedGzipSizes).size === 1;\n\tconst allRawSame = new Set(formattedRawSizes).size === 1;\n\n\t// Find max version length for alignment\n\tconst maxVersionLen = Math.max(...results.map((r) => r.version.length));\n\n\t// Bar width (characters)\n\tconst barWidth = 30;\n\tconst minBarWidth = 10; // Minimum bar length for smallest value\n\n\t// Helper to calculate bar length with min-max scaling\n\tconst calcBarLength = (\n\t\tvalue: number,\n\t\tmin: number,\n\t\tmax: number,\n\t\tallSame: boolean,\n\t): number => {\n\t\tif (max === min || allSame) {\n\t\t\treturn barWidth; // All values are effectively the same\n\t\t}\n\t\t// Scale from minBarWidth to barWidth based on position between min and max\n\t\tconst ratio = (value - min) / (max - min);\n\t\treturn Math.round(minBarWidth + ratio * (barWidth - minBarWidth));\n\t};\n\n\t// Header\n\tlines.push(\"\");\n\tlines.push(`${blue(\"Bundle Size:\")} ${packageName}`);\n\tlines.push(\"─\".repeat(60));\n\tlines.push(\"\");\n\n\t// Gzip size bars\n\tlines.push(blue(\"Gzip Size:\"));\n\tfor (const result of results) {\n\t\tconst barLength = calcBarLength(\n\t\t\tresult.gzipSize,\n\t\t\tminGzipSize,\n\t\t\tmaxGzipSize,\n\t\t\tallGzipSame,\n\t\t);\n\t\tconst bar = \"▇\".repeat(barLength);\n\t\tconst padding = \" \".repeat(maxVersionLen - result.version.length);\n\t\tconst sizeStr = formatBytes(result.gzipSize);\n\t\tlines.push(` ${result.version}${padding} ${bar} ${sizeStr}`);\n\t}\n\n\tlines.push(\"\");\n\n\t// Raw size bars\n\tlines.push(blue(\"Raw Size:\"));\n\tfor (const result of results) {\n\t\tconst barLength = calcBarLength(\n\t\t\tresult.rawSize,\n\t\t\tminRawSize,\n\t\t\tmaxRawSize,\n\t\t\tallRawSame,\n\t\t);\n\t\tconst bar = \"▇\".repeat(barLength);\n\t\tconst padding = \" \".repeat(maxVersionLen - result.version.length);\n\t\tconst sizeStr = formatBytes(result.rawSize);\n\t\tlines.push(` ${result.version}${padding} ${bar} ${sizeStr}`);\n\t}\n\n\tlines.push(\"\");\n\n\t// Summary\n\tconst oldestResult = results[results.length - 1];\n\tconst newestResult = results[0];\n\n\tif (results.length > 1) {\n\t\tconst gzipDiff = newestResult.gzipSize - oldestResult.gzipSize;\n\t\tconst gzipPercent = ((gzipDiff / oldestResult.gzipSize) * 100).toFixed(1);\n\t\tconst rawDiff = newestResult.rawSize - oldestResult.rawSize;\n\t\tconst rawPercent = ((rawDiff / oldestResult.rawSize) * 100).toFixed(1);\n\n\t\tconst gzipTrend =\n\t\t\tgzipDiff >= 0\n\t\t\t\t? `+${formatBytes(gzipDiff)}`\n\t\t\t\t: `-${formatBytes(Math.abs(gzipDiff))}`;\n\t\tconst rawTrend =\n\t\t\trawDiff >= 0\n\t\t\t\t? `+${formatBytes(rawDiff)}`\n\t\t\t\t: `-${formatBytes(Math.abs(rawDiff))}`;\n\n\t\tlines.push(\"─\".repeat(60));\n\t\tlines.push(\n\t\t\t`Change from ${oldestResult.version} to ${newestResult.version}:`,\n\t\t);\n\t\tlines.push(\n\t\t\t` ${blue(\"Gzip:\")} ${gzipTrend} (${gzipDiff >= 0 ? \"+\" : \"\"}${gzipPercent}%)`,\n\t\t);\n\t\tlines.push(\n\t\t\t` ${blue(\"Raw:\")} ${rawTrend} (${rawDiff >= 0 ? \"+\" : \"\"}${rawPercent}%)`,\n\t\t);\n\t}\n\n\tlines.push(\"\");\n\n\treturn lines;\n}\n"],"names":["Logger","kleur","prerelease","checkBundleSize","formatBytes","TREND_VERSION_COUNT","selectTrendVersions","allVersions","count","stableVersions","filter","v","slice","analyzeTrend","options","packageName","versions","exports","additionalExternals","noExternal","gzipLevel","boring","log","results","version","versionedPackage","info","result","push","rawSize","gzipSize","renderTrendGraph","length","lines","blue","text","gzipSizes","map","r","rawSizes","minGzipSize","Math","min","maxGzipSize","max","minRawSize","maxRawSize","formattedGzipSizes","formattedRawSizes","allGzipSame","Set","size","allRawSame","maxVersionLen","barWidth","minBarWidth","calcBarLength","value","allSame","ratio","round","repeat","barLength","bar","padding","sizeStr","oldestResult","newestResult","gzipDiff","gzipPercent","toFixed","rawDiff","rawPercent","gzipTrend","abs","rawTrend"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@node-cli/bundlecheck",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.1",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"author": "Arno Versini",
|
|
6
6
|
"description": "CLI tool to check the bundle size of npm packages (like bundlephobia)",
|
|
@@ -34,19 +34,19 @@
|
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
36
|
"@inquirer/select": "5.0.4",
|
|
37
|
-
"@node-cli/logger": "1.3.
|
|
38
|
-
"@node-cli/parser": "2.4.
|
|
37
|
+
"@node-cli/logger": "1.3.4",
|
|
38
|
+
"@node-cli/parser": "2.4.5",
|
|
39
39
|
"esbuild": "0.27.2",
|
|
40
40
|
"kleur": "4.1.5",
|
|
41
|
-
"semver": "7.7.
|
|
41
|
+
"semver": "7.7.3"
|
|
42
42
|
},
|
|
43
43
|
"publishConfig": {
|
|
44
44
|
"access": "public"
|
|
45
45
|
},
|
|
46
46
|
"devDependencies": {
|
|
47
|
-
"@node-cli/comments": "0.2.
|
|
48
|
-
"@vitest/coverage-v8": "4.0.
|
|
49
|
-
"vitest": "4.0.
|
|
47
|
+
"@node-cli/comments": "0.2.9",
|
|
48
|
+
"@vitest/coverage-v8": "4.0.18",
|
|
49
|
+
"vitest": "4.0.18"
|
|
50
50
|
},
|
|
51
|
-
"gitHead": "
|
|
51
|
+
"gitHead": "290c95d11163e5beace97376acc91ecbf1eecfce"
|
|
52
52
|
}
|