From 7d44d0897bc68c8e95dd88149f6c303ea7bc30e3 Mon Sep 17 00:00:00 2001 From: arlo Date: Mon, 25 May 2026 16:01:49 +0800 Subject: [PATCH 1/4] refactor(rolldown): derive package data from rolldown logs --- packages/rolldown/package.json | 41 - .../components/data/PackageDetailsLoader.vue | 10 +- .../app/components/display/FileSizeBadge.vue | 4 +- .../src/app/components/packages/Table.vue | 5 +- .../app/pages/compare/[sessions]/index.vue | 3 +- .../app/pages/session/[session]/packages.vue | 86 ++- .../rolldown/__tests__/events-reader.test.ts | 42 ++ .../src/node/rolldown/events-manager.ts | 18 +- .../src/node/rolldown/events-reader.ts | 2 + .../rolldown/src/node/rolldown/log-cache.ts | 8 +- .../rpc/functions/rolldown-get-packages.ts | 283 ++++--- packages/rolldown/src/shared/types/data.ts | 7 + pnpm-lock.yaml | 700 ++++++++++-------- pnpm-workspace.yaml | 7 +- 14 files changed, 692 insertions(+), 524 deletions(-) diff --git a/packages/rolldown/package.json b/packages/rolldown/package.json index 5641a693..935b89c7 100644 --- a/packages/rolldown/package.json +++ b/packages/rolldown/package.json @@ -35,7 +35,6 @@ }, "dependencies": { "@floating-ui/dom": "catalog:frontend", - "@pnpm/read-project-manifest": "catalog:deps", "@rolldown/debug": "catalog:deps", "@vitejs/devtools-kit": "workspace:*", "birpc": "catalog:deps", @@ -78,45 +77,5 @@ "tsdown": "catalog:build", "unocss": "catalog:build", "vite-hot-client": "catalog:frontend" - }, - "inlinedDependencies": { - "@babel/code-frame": "7.29.0", - "@babel/helper-validator-identifier": "7.28.5", - "@gwhitney/detect-indent": "7.0.1", - "@pnpm/constants": "1001.3.1", - "@pnpm/core-loggers": "1001.0.9", - "@pnpm/error": "1000.1.0", - "@pnpm/graceful-fs": "1000.1.0", - "@pnpm/logger": "1001.0.1", - "@pnpm/manifest-utils": "1002.0.5", - "@pnpm/read-project-manifest": "1001.2.6", - "@pnpm/semver.peer-range": "1000.0.0", - "@pnpm/text.comments-parser": "1000.0.0", - "@pnpm/types": "1001.3.0", - "@pnpm/write-project-manifest": "1000.0.16", - "bole": "5.0.25", - "error-ex": "1.3.4", - "fast-deep-equal": "3.1.3", - "fast-safe-stringify": "2.1.1", - "graceful-fs": "4.2.11", - "imurmurhash": "0.1.4", - "individual": "3.0.0", - "is-arrayish": "0.2.1", - "is-windows": "1.0.2", - "js-tokens": "4.0.0", - "js-yaml": "4.1.1", - "json-parse-even-better-errors": "2.3.1", - "json5": "2.2.3", - "lines-and-columns": "1.2.4", - "parse-json": "5.2.0", - "picocolors": "1.1.1", - "read-yaml-file": "2.1.0", - "semver": "7.8.0", - "signal-exit": "4.1.0", - "split2": "4.2.0", - "strip-bom": "4.0.0", - "strip-comments-strings": "1.2.0", - "write-file-atomic": "5.0.1", - "write-yaml-file": "5.0.0" } } diff --git a/packages/rolldown/src/app/components/data/PackageDetailsLoader.vue b/packages/rolldown/src/app/components/data/PackageDetailsLoader.vue index 74c3dd90..f336f64d 100644 --- a/packages/rolldown/src/app/components/data/PackageDetailsLoader.vue +++ b/packages/rolldown/src/app/components/data/PackageDetailsLoader.vue @@ -13,11 +13,6 @@ const props = defineProps<{ const emit = defineEmits<{ (e: 'close'): void }>() -const parsedPackage = computed(() => { - const match = props.package.match(/^(@?[^@]+)@(.+)$/) - const [, name, version] = match! - return { name, version } -}) const rpc = useRpc() const { state, isLoading } = useAsyncState( async () => { @@ -33,6 +28,7 @@ const { state, isLoading } = useAsyncState( ) const normalizedBundledFiles = computed(() => state.value?.files?.filter(f => !!f.transformedCodeSize) ?? []) +const packageName = computed(() => state.value?.name ?? props.package) const importers = computed(() => { const pathMap = new Map() @@ -43,7 +39,7 @@ const importers = computed(() => { }) function openInNpm() { - const url = `https://www.npmjs.com/package/${parsedPackage.value.name}` + const url = `https://www.npmjs.com/package/${packageName.value}` window.open(url, '_blank') } @@ -56,7 +52,7 @@ function openInNpm() {
- +
diff --git a/packages/rolldown/src/app/components/display/FileSizeBadge.vue b/packages/rolldown/src/app/components/display/FileSizeBadge.vue index cc0c185c..1975981d 100644 --- a/packages/rolldown/src/app/components/display/FileSizeBadge.vue +++ b/packages/rolldown/src/app/components/display/FileSizeBadge.vue @@ -44,11 +44,11 @@ const color = computed(() => { const ratio = computed(() => props.total ? (props.bytes || 0) * 100 / props.total : 0) -const formatted = computed(() => bytesToHumanSize(props.bytes || 0, props.digits)) +const formatted = computed(() => props.bytes === 0 ? [0, 'kB'] : bytesToHumanSize(props.bytes || 0, props.digits))