diff --git a/app/components/Code/DirectoryListing.vue b/app/components/Code/DirectoryListing.vue index 48b16cf3c..31a6d1fe2 100644 --- a/app/components/Code/DirectoryListing.vue +++ b/app/components/Code/DirectoryListing.vue @@ -120,10 +120,7 @@ const bytesFormatter = useBytesFormatter() {{ node.name }} - + {{ bytesFormatter.format(node.size) }} diff --git a/server/api/registry/files/[...pkg].get.ts b/server/api/registry/files/[...pkg].get.ts index 467ae9de5..9ef22d987 100644 --- a/server/api/registry/files/[...pkg].get.ts +++ b/server/api/registry/files/[...pkg].get.ts @@ -46,7 +46,7 @@ export default defineCachedEventHandler( swr: true, getKey: event => { const pkg = getRouterParam(event, 'pkg') ?? '' - return `files:v1:${pkg.replace(/\/+$/, '').trim()}` + return `files:v2:${pkg.replace(/\/+$/, '').trim()}` }, }, ) diff --git a/server/utils/file-tree.ts b/server/utils/file-tree.ts index b0885d14e..9d8933f3b 100644 --- a/server/utils/file-tree.ts +++ b/server/utils/file-tree.ts @@ -39,11 +39,14 @@ export function convertToFileTree( const path = parentPath ? `${parentPath}/${node.name}` : node.name if (node.type === 'directory') { + const children = node.files ? convertToFileTree(node.files, path) : [] + result.push({ name: node.name, path, type: 'directory', - children: node.files ? convertToFileTree(node.files, path) : [], + size: children.reduce((total, child) => total + (child.size ?? 0), 0), + children, }) } else { result.push({ diff --git a/shared/types/npm-registry.ts b/shared/types/npm-registry.ts index 0d2ed3492..7f414e53f 100644 --- a/shared/types/npm-registry.ts +++ b/shared/types/npm-registry.ts @@ -355,7 +355,7 @@ export interface PackageFileTree { path: string /** Node type */ type: 'file' | 'directory' - /** File size in bytes (only for files) */ + /** Node size in bytes (file size or recursive directory total) */ size?: number /** Child nodes (only for directories) */ children?: PackageFileTree[] diff --git a/test/unit/server/utils/file-tree.spec.ts b/test/unit/server/utils/file-tree.spec.ts index dfdd09ce4..7e5f7de06 100644 --- a/test/unit/server/utils/file-tree.spec.ts +++ b/test/unit/server/utils/file-tree.spec.ts @@ -93,6 +93,8 @@ describe('convertToFileTree', () => { const formatFile = getChildren(utilsDir).find(child => child.name === 'format.ts') expect(formatFile?.path).toBe('src/utils/format.ts') expect(formatFile?.size).toBe(22) + expect(utilsDir?.size).toBe(22) + expect(src?.size).toBe(122) }) it('returns an empty tree for empty input', () => { @@ -112,6 +114,7 @@ describe('convertToFileTree', () => { const tree = convertToFileTree(input) expect(tree[0]?.type).toBe('directory') + expect(tree[0]?.size).toBe(0) expect(tree[0]?.children).toEqual([]) }) })