Bundle analysis: `normalizePath` replaces everything after the first `-` in a file name, so different assets collide

Abierto Apto para principiantes
#993 1 comentario 0 reacciones 0 asignados Ver en GitHub

@ChiptenIsCool ya está trabajando en esto.

Desde el 5/11/2026.

  • #361 de @ChiptenIsCool — abierto

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
72/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
javascript, node.js
Área
backend

Línea de trabajo

Empieza inspeccionando normalizePath en @codecov/bundler-plugin-core y las pruebas de sus patrones de nombres de archivo de Vite. Reproduce la colisión con las dos rutas de maplibre del issue y comprueba después que la normalización conserva el nombre completo del asset antes del hash. El objetivo se cumple cuando esas rutas se normalizan de forma distinta y los assets sin cambios dejan de producir cambios de tamaño falsos.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

Describe the bug

normalizePath in @codecov/bundler-plugin-core replaces everything from the first - in a file name up to the extension with *, not only the hash. If two assets share the text before their first -, they get the same normalized path, and the bundle comparison matches the wrong files against each other.

On https://github.com/kristof-mattei/endless-ssh-rs-with-web/pull/3817#issuecomment-6641294034 (the rows are in the comment's edit history), the bundle report contained these two rows:

Asset Name Size Change Total Size Change (%)
assets/maplibre-*.js -517.19kB 1.85kB -99.64%
assets/maplibre-*.js 517.19kB 519.04kB 27926.19% ⚠️

Both rows come from two unchanged files matched against each other: maplibre-gl-worker-Br3j0JGE.js (519.04 kB) and maplibre-gl-AxBTEyzg.js (1.85 kB). The size changes cancel out exactly. The bundle totals in the same comment are correct.

Environment

  • @codecov/vite-plugin 2.0.1 and @codecov/bundler-plugin-core 2.0.1 (the latest release of both)
  • Vite 8.3.5 with Rolldown 1.2.16, default chunkFileNames and assetFileNames
  • CI on GitHub Actions. Reproduced locally on Node.js 26.13.0

To Reproduce

import { normalizePath } from "@codecov/bundler-plugin-core";

normalizePath("assets/maplibre-gl-AxBTEyzg.js", "assets/[name]-[hash].js", "vite");
// "assets/maplibre-*.js"
normalizePath("assets/maplibre-gl-worker-Br3j0JGE.js", "assets/[name]-[hash][extname]", "vite");
// "assets/maplibre-*.js"
normalizePath("assets/preload-helper-BRbzi6Nc.js", "assets/[name]-[hash].js", "vite");
// "assets/preload-*.js"

Expected behavior

normalizePath replaces only the hash: assets/maplibre-gl-*.js, assets/maplibre-gl-worker-*.js, assets/preload-helper-*.js. If an asset is unchanged, the bundle report lists no size change for it.

Additional context

None at the moment

Lenguaje dominante
Sin datos de lenguaje
Estrellas
52
Forks
26
Métricas de merge de PR
Sin PR fusionados en 30 d

Preparar el entorno

Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de codecov/feedback

Todos los issues de codecov/feedback

Issues similares

Más issues de Backend & API Design

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.