-
Notifications
You must be signed in to change notification settings - Fork 16
feat: bundle-stats plugin poc implementation #1024
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
BioPhoton
wants to merge
19
commits into
main
Choose a base branch
from
plugin-bundle-stats-poc
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Code PushUp🤨 Code PushUp report has both improvements and regressions – compared current commit 7eeb857 with previous commit 562c83b. 🕵️ See full comparison in Code PushUp portal 🔍 🏷️ Categories👍 1 group improved, 👎 9 groups regressed, 👍 7 audits improved, 👎 54 audits regressed, 11 audits changed without impacting score🗃️ Groups
11 other groups are unchanged. 🛡️ Audits
533 other audits are unchanged. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Labels
📖 Project documentation
improvements or additions to the project documentation
🔬 testing
writing tests
🛠️ tooling
🧩 utils
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Bundle Stats Plugin PoC Implementation
Fine-grained bundle size tracking for your builds
This plugin enables advanced bundle stats capabilities to avoiding unwanted size increase.
📝 Related Issue
👉 #1015 – Bundle Stats Plugin Architecture Discussion
Examples
Here you can have look at the JSON as well as
Markdown
report of the plugin.{ } JSON Report
{
"commit": {
"hash": "c009534b5e154788947572c863d4a22c72f6be0b",
"message": "feat: MVP v1",
"date": "2025-07-13T22:54:22.000Z",
"author": "Michael"
},
"packageName": "@code-pushup/core",
"version": "0.69.2",
"date": "2025-07-14T01:32:27.553Z",
"duration": 101,
"plugins": [
{
"packageName": "@code-pushup/bundle-stats-plugin",
"version": "0.69.2",
"title": "Bundle Stats",
"slug": "bundle-stats",
"icon": "folder-rules",
"date": "2025-07-14T01:32:27.579Z",
"duration": 54,
"audits": [
{
"slug": "scoring-total-size-pass",
"displayValue": "52.71 kB (5 files)",
"value": 53979,
"score": 1,
"details": {
"issues": []
},
"title": "📏 - Total Size Pass",
"description": "Demonstrates threshold passing when total size is within max limits.\n\n
⚙️ Config Summary
\n\nSelection\n•includeOutputs
:**/*
\n\nScoring\n•totalSize
:0 B – 97.66 kB
\n\n},
{
"slug": "scoring-total-size-pass-minmax",
"displayValue": "52.71 kB (5 files)",
"value": 53979,
"score": 1,
"details": {
"issues": []
},
"title": "📏 - Total Size Pass Range",
"description": "Demonstrates threshold passing when total size is within range limits.\n\n
⚙️ Config Summary
\n\nSelection\n•includeOutputs
:**/*
\n\nScoring\n•totalSize
:0 B – 97.66 kB
\n\n},
{
"slug": "scoring-total-size-too-big",
"displayValue": "52.71 kB (5 files)",
"value": 53979,
"score": 0,
"details": {
"issues": []
},
"title": "📏 - Total Size Too Big",
"description": "Demonstrates threshold failure when total size exceeds simple number limit.\n\n
⚙️ Config Summary
\n\nSelection\n•includeOutputs
:**/*
\n\nScoring\n•totalSize
:0 B – 1 B
\n\n},
{
"slug": "scoring-total-size-too-small-minmax",
"displayValue": "52.71 kB (5 files)",
"value": 53979,
"score": 1,
"details": {
"issues": []
},
"title": "📏 - Total Size Too Small Range",
"description": "Demonstrates threshold warning when total size is below minimum in range.\n\n
⚙️ Config Summary
\n\nSelection\n•includeOutputs
:**/*
\n\nScoring\n•totalSize
:1 B – 97.66 kB
\n\n},
{
"slug": "scoring-penalty-artefact-size-pass",
"displayValue": "52.71 kB (5 files)",
"value": 53979,
"score": 1,
"details": {
"issues": []
},
"title": "📏 - Penalty Artefact Size Pass",
"description": "Demonstrates penalty passing when all files are within size limits.\n\n
⚙️ Config Summary
\n\nSelection\n•includeOutputs
:**/*
\n\nScoring\n•totalSize
:0 B – 97.66 kB
\n•penalty.artefactSize
:0 B – 97.66 kB
\n\n},
{
"slug": "scoring-penalty-artefact-size-pass-minmax",
"displayValue": "52.71 kB (5 files)",
"value": 53979,
"score": 1,
"details": {
"issues": []
},
"title": "📏 - Penalty Artefact Size Pass Range",
"description": "Demonstrates penalty passing with min/max range constraints.\n\n
⚙️ Config Summary
\n\nSelection\n•includeOutputs
:**/*
\n\nScoring\n•totalSize
:0 B – 97.66 kB
\n•penalty.artefactSize
:0 B – 97.66 kB
\n\n},
{
"slug": "scoring-penalty-artefact-size-too-big",
"displayValue": "52.71 kB (5 files)",
"value": 53979,
"score": 0,
"details": {
"issues": [
{
"message": "🔺
dist/index.js
is 595 B (> 1 B)","severity": "error",
"source": {
"file": "dist/index.js"
}
},
{
"message": "🔺
dist/bin.js
is 549 B (> 1 B)","severity": "error",
"source": {
"file": "dist/bin.js"
}
},
{
"message": "🔺
dist/chunks/chunk-PKX4VJZC.js
is 50.14 kB (> 1 B)","severity": "error",
"source": {
"file": "dist/chunks/chunk-PKX4VJZC.js"
}
},
{
"message": "🔺
dist/chunks/feature-2-SERQNJVR.js
is 130 B (> 1 B)","severity": "error",
"source": {
"file": "dist/chunks/feature-2-SERQNJVR.js"
}
},
{
"message": "🔺
dist/chunks/chunk-SK6HMZ5B.js
is 1.33 kB (> 1 B)","severity": "error",
"source": {
"file": "dist/chunks/chunk-SK6HMZ5B.js"
}
}
]
},
"title": "📏 - Penalty Artefact Size Too Big",
"description": "Demonstrates penalty failure when files exceed maximum size.\n\n
⚙️ Config Summary
\n\nSelection\n•includeOutputs
:**/*
\n\nScoring\n•totalSize
:0 B – 97.66 kB
\n•penalty.artefactSize
:0 B – 1 B
\n\n},
{
"slug": "scoring-penalty-artefact-size-too-small-minmax",
"displayValue": "52.71 kB (5 files)",
"value": 53979,
"score": 1,
"details": {
"issues": []
},
"title": "📏 - Penalty Artefact Size Too Small Range",
"description": "Demonstrates penalty warning when files are below minimum size.\n\n
⚙️ Config Summary
\n\nSelection\n•includeOutputs
:**/*
\n\nScoring\n•totalSize
:0 B – 97.66 kB
\n•penalty.artefactSize
:1 B – 97.66 kB
\n\n},
{
"slug": "scoring-penalty-blacklist-pass",
"displayValue": "52.71 kB (5 files)",
"value": 53979,
"score": 1,
"details": {
"issues": []
},
"title": "📏 - Penalty Blacklist Pass",
"description": "Demonstrates penalty passing when no blacklisted patterns match.\n\n
⚙️ Config Summary
\n\nSelection\n•includeOutputs
:**/*
\n\nScoring\n•totalSize
:0 B – 97.66 kB
\n•penalty.blacklist
:**/non-existent-pattern/**
\n\n},
{
"slug": "scoring-penalty-blacklist-fail",
"displayValue": "52.71 kB (5 files)",
"value": 53979,
"score": 0,
"details": {
"issues": [
{
"message": "🚫
dist/index.js
matches blacklist pattern**/*
","severity": "error",
"source": {
"file": "dist/index.js"
}
},
{
"message": "🚫
dist/chunks/chunk-PKX4VJZC.js
matches blacklist pattern**/*
","severity": "error",
"source": {
"file": "dist/index.js"
}
},
{
"message": "🚫
dist/chunks/chunk-SK6HMZ5B.js
matches blacklist pattern**/*
","severity": "error",
"source": {
"file": "dist/index.js"
}
},
{
"message": "🚫
dist/chunks/feature-2-SERQNJVR.js
matches blacklist pattern**/*
","severity": "error",
"source": {
"file": "dist/index.js"
}
},
{
"message": "🚫
dist/bin.js
matches blacklist pattern**/*
","severity": "error",
"source": {
"file": "dist/bin.js"
}
},
{
"message": "🚫
dist/chunks/chunk-PKX4VJZC.js
matches blacklist pattern**/*
","severity": "error",
"source": {
"file": "dist/bin.js"
}
},
{
"message": "🚫
dist/chunks/chunk-SK6HMZ5B.js
matches blacklist pattern**/*
","severity": "error",
"source": {
"file": "dist/bin.js"
}
},
{
"message": "🚫
dist/chunks/chunk-PKX4VJZC.js
matches blacklist pattern**/*
","severity": "error",
"source": {
"file": "dist/chunks/chunk-PKX4VJZC.js"
}
},
{
"message": "🚫
dist/chunks/chunk-SK6HMZ5B.js
matches blacklist pattern**/*
","severity": "error",
"source": {
"file": "dist/chunks/chunk-PKX4VJZC.js"
}
},
{
"message": "🚫
dist/chunks/feature-2-SERQNJVR.js
matches blacklist pattern**/*
","severity": "error",
"source": {
"file": "dist/chunks/feature-2-SERQNJVR.js"
}
},
{
"message": "🚫
dist/chunks/chunk-SK6HMZ5B.js
matches blacklist pattern**/*
","severity": "error",
"source": {
"file": "dist/chunks/feature-2-SERQNJVR.js"
}
},
{
"message": "🚫
dist/chunks/chunk-SK6HMZ5B.js
matches blacklist pattern**/*
","severity": "error",
"source": {
"file": "dist/chunks/chunk-SK6HMZ5B.js"
}
}
]
},
"title": "📏 - Penalty Blacklist Fail",
"description": "Demonstrates penalty failure when blacklisted patterns are found.\n\n
⚙️ Config Summary
\n\nSelection\n•includeOutputs
:**/*
\n\nScoring\n•totalSize
:0 B – 97.66 kB
\n•penalty.blacklist
:**/*
\n\n},
{
"slug": "insights-grouping",
"displayValue": "52.71 kB (5 files)",
"value": 53979,
"score": 1,
"details": {
"issues": [],
"table": {
"columns": [
{
"key": "group",
"label": "Group",
"align": "left"
},
{
"key": "size",
"label": "Size",
"align": "center"
}
],
"rows": [
{
"group": "📦 minimatch",
"size": "42.26 kB"
},
{
"group": "📦 brace-expansion",
"size": "4.67 kB"
},
{
"group": "🤝 chunks",
"size": "2.53 kB"
},
{
"group": "📦 balanced-match",
"size": "1.51 kB"
},
{
"group": "📦 Distributables",
"size": "595 B"
},
{
"group": "📦 bin",
"size": "549 B"
},
{
"group": "🔧 Formatting Utilities",
"size": "269 B"
},
{
"group": "🔧 Math Utilities",
"size": "145 B"
},
{
"group": "📦 my-lib",
"size": "93 B"
},
{
"group": "🧩 feature-2-SERQNJVR",
"size": "92 B"
},
{
"group": "🧩 feature-2",
"size": "38 B"
}
]
}
},
"title": "📊 - Insights Table - Grouping",
"description": "Demonstrates how the bundle is grouped.\n\n
⚙️ Config Summary
\n\nSelection\n•includeOutputs
:**/*
\n\nScoring\n•totalSize
:0 B – 97.66 kB
\n\nInsights\n• 🔧**/math.ts
\n• 🔧**/format.ts
\n• 🧩**/*feature-2*
\n• 🏁src/index.ts, src/bin.ts
\n• 🤝dist/chunks/chunk-*.js
\n• 📦**/node_modules/**
\n• 📦dist/index.js, dist/bin.js
\n\n},
{
"slug": "insights-rest-group",
"displayValue": "52.71 kB (5 files)",
"value": 53979,
"score": 1,
"details": {
"issues": [],
"table": {
"columns": [
{
"key": "group",
"label": "Group",
"align": "left"
},
{
"key": "size",
"label": "Size",
"align": "center"
}
],
"rows": [
{
"group": "🧩 feature-1",
"size": "269 B"
},
{
"group": "Rest",
"size": "52.45 kB"
}
]
}
},
"title": "📊 - Insights Table - With Rest Group",
"description": "Demonstrates how all non-matching assets are grouped into the "Rest" row.\n\n
⚙️ Config Summary
\n\nSelection\n•includeOutputs
:**/*
\n\nScoring\n•totalSize
:0 B – 97.66 kB
\n\nInsights\n• 🧩**/*feature-1*
\n\n},
{
"slug": "tree-default",
"displayValue": "52.71 kB (5 files)",
"value": 53979,
"score": 1,
"details": {
"issues": [],
"trees": [
{
"root": {
"name": "🗂️ tree-default",
"values": {
"size": "52.71 kB",
"sources": "21 sources"
},
"children": [
{
"name": "📍 dist/index.js",
"values": {
"size": "595 B",
"sources": "2 sources"
},
"children": [
{
"name": "📄 ../shared-source/src/index.ts",
"values": {
"size": "386 B",
"sources": ""
},
"children": []
}
]
},
{
"name": "📍 dist/bin.js",
"values": {
"size": "549 B",
"sources": "2 sources"
},
"children": [
{
"name": "📄 ../shared-source/src/bin.ts",
"values": {
"size": "373 B",
"sources": ""
},
"children": []
}
]
},
{
"name": "📄 dist/chunks/chunk-PKX4VJZC.js",
"values": {
"size": "50.14 kB",
"sources": "14 sources"
},
"children": [
{
"name": "📄 ../shared-source/src/lib/utils/format.ts",
"values": {
"size": "269 B",
"sources": ""
},
"children": []
},
{
"name": "📄 ../shared-source/src/lib/feature-1.ts",
"values": {
"size": "269 B",
"sources": ""
},
"children": []
},
{
"name": "📄 ../shared-source/src/lib/utils/math.ts",
"values": {
"size": "145 B",
"sources": ""
},
"children": []
},
{
"name": "📄 ../shared-source/src/lib/utils/string.ts",
"values": {
"size": "54 B",
"sources": ""
},
"children": []
},
{
"name": "📁 @/",
"values": {
"size": "48.53 kB",
"sources": "9 sources"
},
"children": [
{
"name": "📄 ../../../../../node_modules/balanced-match/index.js",
"values": {
"size": "1.51 kB",
"sources": ""
},
"children": []
},
{
"name": "📄 ../../../../../node_modules/brace-expansion/index.js",
"values": {
"size": "4.67 kB",
"sources": ""
},
"children": []
},
{
"name": "📄 ../../../../../node_modules/minimatch/dist/esm/index.js",
"values": {
"size": "23.4 kB",
"sources": ""
},
"children": []
},
{
"name": "📄 ../../../../../node_modules/minimatch/dist/esm/assert-valid-pattern.js",
"values": {
"size": "261 B",
"sources": ""
},
"children": []
},
{
"name": "📄 ../../../../../node_modules/minimatch/dist/esm/brace-expressions.js",
"values": {
"size": "3.09 kB",
"sources": ""
},
"children": []
},
{
"name": "📄 ../../../../../node_modules/minimatch/dist/esm/unescape.js",
"values": {
"size": "210 B",
"sources": ""
},
"children": []
},
{
"name": "📄 ../../../../../node_modules/minimatch/dist/esm/ast.js",
"values": {
"size": "15.15 kB",
"sources": ""
},
"children": []
},
{
"name": "📄 ../../../../../node_modules/minimatch/dist/esm/escape.js",
"values": {
"size": "165 B",
"sources": ""
},
"children": []
},
{
"name": "📄 ../shared-source/node_modules/my-lib/index.js",
"values": {
"size": "93 B",
"sources": ""
},
"children": []
}
]
}
]
},
{
"name": "📍 dist/chunks/feature-2-SERQNJVR.js",
"values": {
"size": "130 B",
"sources": "2 sources"
},
"children": [
{
"name": "📄 ../shared-source/src/lib/feature-2.ts",
"values": {
"size": "38 B",
"sources": ""
},
"children": []
}
]
},
{
"name": "📄 dist/chunks/chunk-SK6HMZ5B.js",
"values": {
"size": "1.33 kB",
"sources": ""
},
"children": []
}
]
}
}
]
},
"title": "🌳 - Artefact Tree - Default",
"description": "Demonstrates default tree without any custom options.\n\n
⚙️ Config Summary
\n\nSelection\n•includeOutputs
:**/*
\n\nScoring\n•totalSize
:0 B – 97.66 kB
\n\n},
{
"slug": "tree-max-depth",
"displayValue": "52.71 kB (5 files)",
"value": 53979,
"score": 1,
"details": {
"issues": [],
"trees": [
{
"root": {
"name": "🗂️ tree-max-depth",
"values": {
"size": "52.71 kB",
"sources": "21 sources"
},
"children": [
{
"name": "📍 dist/index.js",
"values": {
"size": "595 B",
"sources": "2 sources"
},
"children": []
},
{
"name": "📍 dist/bin.js",
"values": {
"size": "549 B",
"sources": "2 sources"
},
"children": []
},
{
"name": "📄 dist/chunks/chunk-PKX4VJZC.js",
"values": {
"size": "50.14 kB",
"sources": "14 sources"
},
"children": []
},
{
"name": "📍 dist/chunks/feature-2-SERQNJVR.js",
"values": {
"size": "130 B",
"sources": "2 sources"
},
"children": []
},
{
"name": "📄 dist/chunks/chunk-SK6HMZ5B.js",
"values": {
"size": "1.33 kB",
"sources": ""
},
"children": []
}
]
}
}
]
},
"title": "🌳 - Artefact Tree - Max Depth",
"description": "Demonstrates maxDepth pruning option.\n\n
⚙️ Config Summary
\n\nSelection\n•includeOutputs
:**/*
\n\nScoring\n•totalSize
:0 B – 97.66 kB
\n\nArtefact Tree\n•pruning
:maxDepth: 1
\n\n},
{
"slug": "tree-max-children",
"displayValue": "52.71 kB (5 files)",
"value": 53979,
"score": 1,
"details": {
"issues": [],
"trees": [
{
"root": {
"name": "🗂️ tree-max-children",
"values": {
"size": "52.71 kB",
"sources": "21 sources"
},
"children": [
{
"name": "📍 dist/index.js",
"values": {
"size": "595 B",
"sources": "2 sources"
},
"children": [
{
"name": "📄 ../shared-source/src/index.ts",
"values": {
"size": "386 B",
"sources": ""
},
"children": []
}
]
},
{
"name": "📍 dist/bin.js",
"values": {
"size": "549 B",
"sources": "2 sources"
},
"children": [
{
"name": "📄 ../shared-source/src/bin.ts",
"values": {
"size": "373 B",
"sources": ""
},
"children": []
}
]
},
{
"name": "📁 ... 3 more",
"values": {
"size": "51.6 kB",
"sources": "17 sources"
},
"children": []
}
]
}
}
]
},
"title": "🌳 - Artefact Tree - Max Children",
"description": "Demonstrates maxChildren pruning option.\n\n
⚙️ Config Summary
\n\nSelection\n•includeOutputs
:**/*
\n\nScoring\n•totalSize
:0 B – 97.66 kB
\n\nArtefact Tree\n•pruning
:maxChildren: 2
\n\n},
{
"slug": "tree-start-depth",
"displayValue": "52.71 kB (5 files)",
"value": 53979,
"score": 1,
"details": {
"issues": [],
"trees": [
{
"root": {
"name": "🗂️ tree-start-depth",
"values": {
"size": "52.71 kB",
"sources": "21 sources"
},
"children": [
{
"name": "📍 dist/index.js",
"values": {
"size": "595 B",
"sources": "2 sources"
},
"children": [
{
"name": "📄 ../shared-source/src/index.ts",
"values": {
"size": "386 B",
"sources": ""
},
"children": []
}
]
},
{
"name": "📍 dist/bin.js",
"values": {
"size": "549 B",
"sources": "2 sources"
},
"children": [
{
"name": "📄 ../shared-source/src/bin.ts",
"values": {
"size": "373 B",
"sources": ""
},
"children": []
}
]
},
{
"name": "📄 dist/chunks/chunk-PKX4VJZC.js",
"values": {
"size": "50.14 kB",
"sources": "14 sources"
},
"children": [
{
"name": "📄 ../shared-source/src/lib/utils/format.ts",
"values": {
"size": "269 B",
"sources": ""
},
"children": []
},
{
"name": "📄 ../shared-source/src/lib/feature-1.ts",
"values": {
"size": "269 B",
"sources": ""
},
"children": []
},
{
"name": "📄 ../shared-source/src/lib/utils/math.ts",
"values": {
"size": "145 B",
"sources": ""
},
"children": []
},
{
"name": "📄 ../shared-source/src/lib/utils/string.ts",
"values": {
"size": "54 B",
"sources": ""
},
"children": []
},
{
"name": "📁 @/",
"values": {
"size": "48.53 kB",
"sources": "9 sources"
},
"children": [
{
"name": "📄 ../../../../../node_modules/balanced-match/index.js",
"values": {
"size": "1.51 kB",
"sources": ""
},
"children": []
},
{
"name": "📄 ../../../../../node_modules/brace-expansion/index.js",
"values": {
"size": "4.67 kB",
"sources": ""
},
"children": []
},
{
"name": "📄 ../../../../../node_modules/minimatch/dist/esm/index.js",
"values": {
"size": "23.4 kB",
"sources": ""
},
"children": []
},
{
"name": "📄 ../../../../../node_modules/minimatch/dist/esm/assert-valid-pattern.js",
"values": {
"size": "261 B",
"sources": ""
},
"children": []
},
{
"name": "📄 ../../../../../node_modules/minimatch/dist/esm/brace-expressions.js",
"values": {
"size": "3.09 kB",
"sources": ""
},
"children": []
},
{
"name": "📄 ../../../../../node_modules/minimatch/dist/esm/unescape.js",
"values": {
"size": "210 B",
"sources": ""
},
"children": []
},
{
"name": "📄 ../../../../../node_modules/minimatch/dist/esm/ast.js",
"values": {
"size": "15.15 kB",
"sources": ""
},
"children": []
},
{
"name": "📄 ../../../../../node_modules/minimatch/dist/esm/escape.js",
"values": {
"size": "165 B",
"sources": ""
},
"children": []
},
{
"name": "📄 ../shared-source/node_modules/my-lib/index.js",
"values": {
"size": "93 B",
"sources": ""
},
"children": []
}
]
}
]
},
{
"name": "📍 dist/chunks/feature-2-SERQNJVR.js",
"values": {
"size": "130 B",
"sources": "2 sources"
},
"children": [
{
"name": "📄 ../shared-source/src/lib/feature-2.ts",
"values": {
"size": "38 B",
"sources": ""
},
"children": []
}
]
},
{
"name": "📄 dist/chunks/chunk-SK6HMZ5B.js",
"values": {
"size": "1.33 kB",
"sources": ""
},
"children": []
}
]
}
}
]
},
"title": "🌳 - Artefact Tree - Start Depth",
"description": "Demonstrates startDepth pruning option.\n\n
⚙️ Config Summary
\n\nSelection\n•includeOutputs
:**/*
\n\nScoring\n•totalSize
:0 B – 97.66 kB
\n\nArtefact Tree\n•pruning
:startDepth: 2
\n\n},
{
"slug": "tree-groups-title-icon",
"displayValue": "52.71 kB (5 files)",
"value": 53979,
"score": 1,
"details": {
"issues": [],
"trees": [
{
"root": {
"name": "🗂️ tree-groups-title-icon",
"values": {
"size": "52.71 kB",
"sources": "21 sources"
},
"children": [
{
"name": "📍 dist/index.js",
"values": {
"size": "595 B",
"sources": "2 sources"
},
"children": [
{
"name": "📄 ../shared-source/src/index.ts",
"values": {
"size": "386 B",
"sources": ""
},
"children": []
}
]
},
{
"name": "📍 dist/bin.js",
"values": {
"size": "549 B",
"sources": "2 sources"
},
"children": [
{
"name": "📄 ../shared-source/src/bin.ts",
"values": {
"size": "373 B",
"sources": ""
},
"children": []
}
]
},
{
"name": "📄 dist/chunks/chunk-PKX4VJZC.js",
"values": {
"size": "50.14 kB",
"sources": "14 sources"
},
"children": [
{
"name": "📄 ../shared-source/src/lib/utils/format.ts",
"values": {
"size": "269 B",
"sources": ""
},
"children": []
},
{
"name": "📄 ../shared-source/src/lib/feature-1.ts",
"values": {
"size": "269 B",
"sources": ""
},
"children": []
},
{
"name": "📄 ../shared-source/src/lib/utils/math.ts",
"values": {
"size": "145 B",
"sources": ""
},
"children": []
},
{
"name": "📄 ../shared-source/src/lib/utils/string.ts",
"values": {
"size": "54 B",
"sources": ""
},
"children": []
},
{
"name": "📦 Node Modules",
"values": {
"size": "48.53 kB",
"sources": "9 sources"
},
"children": [
{
"name": "📄 ../../../../../node_modules/balanced-match/index.js",
"values": {
"size": "1.51 kB",
"sources": ""
},
"children": []
},
{
"name": "📄 ../../../../../node_modules/brace-expansion/index.js",
"values": {
"size": "4.67 kB",
"sources": ""
},
"children": []
},
{
"name": "📄 ../../../../../node_modules/minimatch/dist/esm/index.js",
"values": {
"size": "23.4 kB",
"sources": ""
},
"children": []
},
{
"name": "📄 ../../../../../node_modules/minimatch/dist/esm/assert-valid-pattern.js",
"values": {
"size": "261 B",
"sources": ""
},
"children": []
},
{
"name": "📄 ../../../../../node_modules/minimatch/dist/esm/brace-expressions.js",
"values": {
"size": "3.09 kB",
"sources": ""
},
"children": []
},
{
"name": "📄 ../../../../../node_modules/minimatch/dist/esm/unescape.js",
"values": {
"size": "210 B",
"sources": ""
},
"children": []
},
{
"name": "📄 ../../../../../node_modules/minimatch/dist/esm/ast.js",
"values": {
"size": "15.15 kB",
"sources": ""
},
"children": []
},
{
"name": "📄 ../../../../../node_modules/minimatch/dist/esm/escape.js",
"values": {
"size": "165 B",
"sources": ""
},
"children": []
},
{
"name": "📄 ../shared-source/node_modules/my-lib/index.js",
"values": {
"size": "93 B",
"sources": ""
},
"children": []
}
]
}
]
},
{
"name": "📍 dist/chunks/feature-2-SERQNJVR.js",
"values": {
"size": "130 B",
"sources": "2 sources"
},
"children": [
{
"name": "📄 ../shared-source/src/lib/feature-2.ts",
"values": {
"size": "38 B",
"sources": ""
},
"children": []
}
]
},
{
"name": "📄 dist/chunks/chunk-SK6HMZ5B.js",
"values": {
"size": "1.33 kB",
"sources": ""
},
"children": []
}
]
}
}
]
},
"title": "🌳 - Artefact Tree - Groups Title Icon",
"description": "Demonstrates groups with title and icon.\n\n
⚙️ Config Summary
\n\nSelection\n•includeOutputs
:**/*
\n\nScoring\n•totalSize
:0 B – 97.66 kB
\n\nArtefact Tree\n•groups
: 1\n\n},
{
"slug": "tree-groups-pattern-only",
"displayValue": "52.71 kB (5 files)",
"value": 53979,
"score": 1,
"details": {
"issues": [],
"trees": [
{
"root": {
"name": "🗂️ tree-groups-pattern-only",
"values": {
"size": "52.71 kB",
"sources": "21 sources"
},
"children": [
{
"name": "📍 dist/index.js",
"values": {
"size": "595 B",
"sources": "2 sources"
},
"children": [
{
"name": "📄 ../shared-source/src/index.ts",
"values": {
"size": "386 B",
"sources": ""
},
"children": []
}
]
},
{
"name": "📍 dist/bin.js",
"values": {
"size": "549 B",
"sources": "2 sources"
},
"children": [
{
"name": "📄 ../shared-source/src/bin.ts",
"values": {
"size": "373 B",
"sources": ""
},
"children": []
}
]
},
{
"name": "📄 dist/chunks/chunk-PKX4VJZC.js",
"values": {
"size": "50.14 kB",
"sources": "14 sources"
},
"children": [
{
"name": "📄 ../../../../../node_modules/balanced-match/index.js",
"values": {
"size": "1.51 kB",
"sources": ""
},
"children": []
},
{
"name": "📄 ../../../../../node_modules/brace-expansion/index.js",
"values": {
"size": "4.67 kB",
"sources": ""
},
"children": []
},
{
"name": "📄 ../../../../../node_modules/minimatch/dist/esm/index.js",
"values": {
"size": "23.4 kB",
"sources": ""
},
"children": []
},
{
"name": "📄 ../../../../../node_modules/minimatch/dist/esm/assert-valid-pattern.js",
"values": {
"size": "261 B",
"sources": ""
},
"children": []
},
{
"name": "📄 ../../../../../node_modules/minimatch/dist/esm/brace-expressions.js",
"values": {
"size": "3.09 kB",
"sources": ""
},
"children": []
},
{
"name": "📄 ../../../../../node_modules/minimatch/dist/esm/unescape.js",
"values": {
"size": "210 B",
"sources": ""
},
"children": []
},
{
"name": "📄 ../../../../../node_modules/minimatch/dist/esm/ast.js",
"values": {
"size": "15.15 kB",
"sources": ""
},
"children": []
},
{
"name": "📄 ../../../../../node_modules/minimatch/dist/esm/escape.js",
"values": {
"size": "165 B",
"sources": ""
},
"children": []
},
{
"name": "📄 ../shared-source/node_modules/my-lib/index.js",
"values": {
"size": "93 B",
"sources": ""
},
"children": []
},
{
"name": "📄 ../shared-source/src/lib/feature-1.ts",
"values": {
"size": "269 B",
"sources": ""
},
"children": []
},
{
"name": "📁 ... 1 more",
"values": {
"size": "468 B",
"sources": "3 sources"
},
"children": []
}
]
},
{
"name": "📍 dist/chunks/feature-2-SERQNJVR.js",
"values": {
"size": "130 B",
"sources": "2 sources"
},
"children": [
{
"name": "📄 ../shared-source/src/lib/feature-2.ts",
"values": {
"size": "38 B",
"sources": ""
},
"children": []
}
]
},
{
"name": "📄 dist/chunks/chunk-SK6HMZ5B.js",
"values": {
"size": "1.33 kB",
"sources": ""
},
"children": []
}
]
}
}
]
},
"title": "🌳 - Artefact Tree - Groups Pattern Only",
"description": "Demonstrates groups with pattern only.\n\n
⚙️ Config Summary
\n\nSelection\n•includeOutputs
:**/*
\n\nScoring\n•totalSize
:0 B – 97.66 kB
\n\nArtefact Tree\n•groups
: 1\n\n},
{
"slug": "tree-groups-max-depth",
"displayValue": "52.71 kB (5 files)",
"value": 53979,
"score": 1,
"details": {
"issues": [],
"trees": [
{
"root": {
"name": "🗂️ tree-groups-max-depth",
"values": {
"size": "52.71 kB",
"sources": "21 sources"
},
"children": [
{
"name": "📍 dist/index.js",
"values": {
"size": "595 B",
"sources": "2 sources"
},
"children": [
{
"name": "📄 ../shared-source/src/index.ts",
"values": {
"size": "386 B",
"sources": ""
},
"children": []
}
]
},
{
"name": "📍 dist/bin.js",
"values": {
"size": "549 B",
"sources": "2 sources"
},
"children": [
{
"name": "📄 ../shared-source/src/bin.ts",
"values": {
"size": "373 B",
"sources": ""
},
"children": []
}
]
},
{
"name": "📄 dist/chunks/chunk-PKX4VJZC.js",
"values": {
"size": "50.14 kB",
"sources": "14 sources"
},
"children": [
{
"name": "📄 ../shared-source/src/lib/utils/format.ts",
"values": {
"size": "269 B",
"sources": ""
},
"children": []
},
{
"name": "📄 ../shared-source/src/lib/feature-1.ts",
"values": {
"size": "269 B",
"sources": ""
},
"children": []
},
{
"name": "📄 ../shared-source/src/lib/utils/math.ts",
"values": {
"size": "145 B",
"sources": ""
},
"children": []
},
{
"name": "📄 ../shared-source/src/lib/utils/string.ts",
"values": {
"size": "54 B",
"sources": ""
},
"children": []
},
{
"name": "📁 ../esm/",
"values": {
"size": "48.53 kB",
"sources": "9 sources"
},
"children": [
{
"name": "📄 ../../../../../node_modules/balanced-match/index.js",
"values": {
"size": "1.51 kB",
"sources": ""
},
"children": []
},
{
"name": "📄 ../../../../../node_modules/brace-expansion/index.js",
"values": {
"size": "4.67 kB",
"sources": ""
},
"children": []
},
{
"name": "📄 ../../../../../node_modules/minimatch/dist/esm/index.js",
"values": {
"size": "23.4 kB",
"sources": ""
},
"children": []
},
{
"name": "📄 ../../../../../node_modules/minimatch/dist/esm/assert-valid-pattern.js",
"values": {
"size": "261 B",
"sources": ""
},
"children": []
},
{
"name": "📄 ../../../../../node_modules/minimatch/dist/esm/brace-expressions.js",
"values": {
"size": "3.09 kB",
"sources": ""
},
"children": []
},
{
"name": "📄 ../../../../../node_modules/minimatch/dist/esm/unescape.js",
"values": {
"size": "210 B",
"sources": ""
},
"children": []
},
{
"name": "📄 ../../../../../node_modules/minimatch/dist/esm/ast.js",
"values": {
"size": "15.15 kB",
"sources": ""
},
"children": []
},
{
"name": "📄 ../../../../../node_modules/minimatch/dist/esm/escape.js",
"values": {
"size": "165 B",
"sources": ""
},
"children": []
},
{
"name": "📄 ../shared-source/node_modules/my-lib/index.js",
"values": {
"size": "93 B",
"sources": ""
},
"children": []
}
]
}
]
},
{
"name": "📍 dist/chunks/feature-2-SERQNJVR.js",
"values": {
"size": "130 B",
"sources": "2 sources"
},
"children": [
{
"name": "📄 ../shared-source/src/lib/feature-2.ts",
"values": {
"size": "38 B",
"sources": ""
},
"children": []
}
]
},
{
"name": "📄 dist/chunks/chunk-SK6HMZ5B.js",
"values": {
"size": "1.33 kB",
"sources": ""
},
"children": []
}
]
}
}
]
},
"title": "🌳 - Artefact Tree - Groups Max Depth",
"description": "Demonstrates per-group maxDepth option.\n\n
⚙️ Config Summary
\n\nSelection**\n•includeOutputs
:**/*
\n\nScoring\n•totalSize
:0 B – 97.66 kB
\n\nArtefact Tree\n•groups
: 1\n\n}
],
"description": "Official Code PushUp Bundle Stats plugin.",
"docsUrl": "https://npm.im/@code-pushup/bundle-stats-plugin",
"groups": []
}
]
}
📋 Markdown Report
Code PushUp Report
🛡️ Audits
📏 - Penalty Artefact Size Too Big (Bundle Stats)
🟥 52.71 kB (5 files) (score: 0)
Issues
dist/bin.js
is 549 B (> 1 B)dist/bin.js
dist/chunks/chunk-PKX4VJZC.js
is 50.14 kB (> 1 B)dist/chunks/chunk-PKX4VJZC.js
dist/chunks/chunk-SK6HMZ5B.js
is 1.33 kB (> 1 B)dist/chunks/chunk-SK6HMZ5B.js
dist/chunks/feature-2-SERQNJVR.js
is 130 B (> 1 B)dist/chunks/feature-2-SERQNJVR.js
dist/index.js
is 595 B (> 1 B)dist/index.js
Demonstrates penalty failure when files exceed maximum size.
⚙️ Config Summary
Selection
•
includeOutputs
:**/*
Scoring
•
totalSize
:0 B – 97.66 kB
•
penalty.artefactSize
:0 B – 1 B
📏 - Penalty Blacklist Fail (Bundle Stats)
🟥 52.71 kB (5 files) (score: 0)
Issues
dist/bin.js
matches blacklist pattern**/*
dist/bin.js
dist/chunks/chunk-PKX4VJZC.js
matches blacklist pattern**/*
dist/bin.js
dist/chunks/chunk-SK6HMZ5B.js
matches blacklist pattern**/*
dist/bin.js
dist/chunks/chunk-PKX4VJZC.js
matches blacklist pattern**/*
dist/chunks/chunk-PKX4VJZC.js
dist/chunks/chunk-SK6HMZ5B.js
matches blacklist pattern**/*
dist/chunks/chunk-PKX4VJZC.js
dist/chunks/chunk-SK6HMZ5B.js
matches blacklist pattern**/*
dist/chunks/chunk-SK6HMZ5B.js
dist/chunks/feature-2-SERQNJVR.js
matches blacklist pattern**/*
dist/chunks/feature-2-SERQNJVR.js
dist/chunks/chunk-SK6HMZ5B.js
matches blacklist pattern**/*
dist/chunks/feature-2-SERQNJVR.js
dist/index.js
matches blacklist pattern**/*
dist/index.js
dist/chunks/chunk-PKX4VJZC.js
matches blacklist pattern**/*
dist/index.js
dist/chunks/chunk-SK6HMZ5B.js
matches blacklist pattern**/*
dist/index.js
dist/chunks/feature-2-SERQNJVR.js
matches blacklist pattern**/*
dist/index.js
Demonstrates penalty failure when blacklisted patterns are found.
⚙️ Config Summary
Selection
•
includeOutputs
:**/*
Scoring
•
totalSize
:0 B – 97.66 kB
•
penalty.blacklist
:**/*
📏 - Total Size Too Big (Bundle Stats)
🟥 52.71 kB (5 files) (score: 0)
Demonstrates threshold failure when total size exceeds simple number limit.
⚙️ Config Summary
Selection
•
includeOutputs
:**/*
Scoring
•
totalSize
:0 B – 1 B
🌳 - Artefact Tree - Default (Bundle Stats)
🟩 52.71 kB (5 files) (score: 100)
Demonstrates default tree without any custom options.
⚙️ Config Summary
Selection
•
includeOutputs
:**/*
Scoring
•
totalSize
:0 B – 97.66 kB
🌳 - Artefact Tree - Groups Max Depth (Bundle Stats)
🟩 52.71 kB (5 files) (score: 100)
Demonstrates per-group maxDepth option.
⚙️ Config Summary
Selection
•
includeOutputs
:**/*
Scoring
•
totalSize
:0 B – 97.66 kB
Artefact Tree
•
groups
: 1🌳 - Artefact Tree - Groups Pattern Only (Bundle Stats)
🟩 52.71 kB (5 files) (score: 100)
Demonstrates groups with pattern only.
⚙️ Config Summary
Selection
•
includeOutputs
:**/*
Scoring
•
totalSize
:0 B – 97.66 kB
Artefact Tree
•
groups
: 1🌳 - Artefact Tree - Groups Title Icon (Bundle Stats)
🟩 52.71 kB (5 files) (score: 100)
Demonstrates groups with title and icon.
⚙️ Config Summary
Selection
•
includeOutputs
:**/*
Scoring
•
totalSize
:0 B – 97.66 kB
Artefact Tree
•
groups
: 1🌳 - Artefact Tree - Max Children (Bundle Stats)
🟩 52.71 kB (5 files) (score: 100)
Demonstrates maxChildren pruning option.
⚙️ Config Summary
Selection
•
includeOutputs
:**/*
Scoring
•
totalSize
:0 B – 97.66 kB
Artefact Tree
•
pruning
:maxChildren: 2
🌳 - Artefact Tree - Max Depth (Bundle Stats)
🟩 52.71 kB (5 files) (score: 100)
Demonstrates maxDepth pruning option.
⚙️ Config Summary
Selection
•
includeOutputs
:**/*
Scoring
•
totalSize
:0 B – 97.66 kB
Artefact Tree
•
pruning
:maxDepth: 1
🌳 - Artefact Tree - Start Depth (Bundle Stats)
🟩 52.71 kB (5 files) (score: 100)
Demonstrates startDepth pruning option.
⚙️ Config Summary
Selection
•
includeOutputs
:**/*
Scoring
•
totalSize
:0 B – 97.66 kB
Artefact Tree
•
pruning
:startDepth: 2
📊 - Insights Table - Grouping (Bundle Stats)
🟩 52.71 kB (5 files) (score: 100)
Demonstrates how the bundle is grouped.
⚙️ Config Summary
Selection
•
includeOutputs
:**/*
Scoring
•
totalSize
:0 B – 97.66 kB
Insights
• 🔧
**/math.ts
• 🔧
**/format.ts
• 🧩
**/*feature-2*
• 🏁
src/index.ts, src/bin.ts
• 🤝
dist/chunks/chunk-*.js
• 📦
**/node_modules/**
• 📦
dist/index.js, dist/bin.js
📊 - Insights Table - With Rest Group (Bundle Stats)
🟩 52.71 kB (5 files) (score: 100)
Demonstrates how all non-matching assets are grouped into the "Rest" row.
⚙️ Config Summary
Selection
•
includeOutputs
:**/*
Scoring
•
totalSize
:0 B – 97.66 kB
Insights
• 🧩
**/*feature-1*
📏 - Penalty Artefact Size Pass (Bundle Stats)
🟩 52.71 kB (5 files) (score: 100)
Demonstrates penalty passing when all files are within size limits.
⚙️ Config Summary
Selection
•
includeOutputs
:**/*
Scoring
•
totalSize
:0 B – 97.66 kB
•
penalty.artefactSize
:0 B – 97.66 kB
📏 - Penalty Artefact Size Pass Range (Bundle Stats)
🟩 52.71 kB (5 files) (score: 100)
Demonstrates penalty passing with min/max range constraints.
⚙️ Config Summary
Selection
•
includeOutputs
:**/*
Scoring
•
totalSize
:0 B – 97.66 kB
•
penalty.artefactSize
:0 B – 97.66 kB
📏 - Penalty Artefact Size Too Small Range (Bundle Stats)
🟩 52.71 kB (5 files) (score: 100)
Demonstrates penalty warning when files are below minimum size.
⚙️ Config Summary
Selection
•
includeOutputs
:**/*
Scoring
•
totalSize
:0 B – 97.66 kB
•
penalty.artefactSize
:1 B – 97.66 kB
📏 - Penalty Blacklist Pass (Bundle Stats)
🟩 52.71 kB (5 files) (score: 100)
Demonstrates penalty passing when no blacklisted patterns match.
⚙️ Config Summary
Selection
•
includeOutputs
:**/*
Scoring
•
totalSize
:0 B – 97.66 kB
•
penalty.blacklist
:**/non-existent-pattern/**
📏 - Total Size Pass (Bundle Stats)
🟩 52.71 kB (5 files) (score: 100)
Demonstrates threshold passing when total size is within max limits.
⚙️ Config Summary
Selection
•
includeOutputs
:**/*
Scoring
•
totalSize
:0 B – 97.66 kB
📏 - Total Size Pass Range (Bundle Stats)
🟩 52.71 kB (5 files) (score: 100)
Demonstrates threshold passing when total size is within range limits.
⚙️ Config Summary
Selection
•
includeOutputs
:**/*
Scoring
•
totalSize
:0 B – 97.66 kB
📏 - Total Size Too Small Range (Bundle Stats)
🟩 52.71 kB (5 files) (score: 100)
Demonstrates threshold warning when total size is below minimum in range.
⚙️ Config Summary
Selection
•
includeOutputs
:**/*
Scoring
•
totalSize
:1 B – 97.66 kB
About
Report was created by Code PushUp on Mon, Jul 14, 2025, 3:32 AM GMT+2.
0.69.2
0.69.2
Made with ❤ by Code PushUp
Features
Legend:
Todos:
✅ MVP State
The final implementation is delivered in the following PR's: