mirror of
https://github.com/fsolla/teqo.git
synced 2026-11-15 18:53:06 +00:00
2.7 KiB
2.7 KiB
OPS46-S1 — hook ESM mapeia next/cache incondicionalmente (impl)
Fonte: issue #789 (body = spec). Débito capturado na revisão estrutural do OPS46 (PR #787).
Problema
tests/helpers/e2eEsmResolve.mjs remapeia next/cache → next/cache.js sem tentar a
resolução bare primeiro. Quando o next publicar um exports map (major bump), o remap
pode mascarar um erro de resolução real (fail-loud vira fail-silent).
Abordagem recomendada
No branch specifier === 'next/cache':
await nextResolve(specifier, context)primeiro.- Só no rejeito com
error.code === 'ERR_MODULE_NOT_FOUND', remapear paranext/cache.js(comportamento atual do fallback). - Qualquer outro erro propaga — fail-loud preservado.
Branch react-server (injeção de conditions) intocado: o issue só cita o remap, e a injeção
não mascarava erro (apenas adiciona condição, espelhando --conditions=react-server).
Fases
- Editar
tests/helpers/e2eEsmResolve.mjs(~5 linhas; hook já éasync, entãoawaitdentro do try/catch é válido e necessário para capturar a rejeição). - Spec unit
tests/unit/e2eEsmResolve.unit.spec.ts(padrão do repo: vitest importa.mjsdireto, ex.agentPoolModels.unit.spec.ts): três casos comnextResolvemockado — bare-ok não remapeia; bareERR_MODULE_NOT_FOUNDremapeia paranext/cache.js; erro de outro código propaga. O repo já testa helpers.mjsdessa forma; a regressão fail-loud→fail-silent é exatamente o tipo que merece pin. pnpm gate:fast(lint + typecheck + unit).- Sanity opcional (OPS72, discricionário):
pnpm exec playwright test --listpara provar que a coleta de testes segue funcionando com o hook carregado.
Alternativas rejeitadas
- Remover o remap de vez: quebraria
playwright testbare (VS Code extension,--list, ad-hoc) até o next publicar exports map — a razão de existir do hook (OPS46) continuaria pendente. - Checar
error.messagepornext/cache: spec do issue pede sóERR_MODULE_NOT_FOUND; o branch já é escopado ao specifier, e o fallback propaga erros próprios. Menos código.
Riscos
- Catch largo (baixo): um
ERR_MODULE_NOT_FOUNDde import transitivo dentro da resolução denext/cachedispararia o remap — mas só dentro do branchnext/cache, e o fallbacknext/cache.jspropaga seus próprios erros. Mascaramento residual mínimo, dentro do spec. - Esquecer
awaitno try (nulo): semawaito try não captura rejeição — a spec unit cobre o caso.
Gatilho de reavaliação
Bump major do next: quando o exports map existir, a resolução bare passa e o fallback fica
morto — o remap pode então ser removido.