Skip to content

testing_guide: la solucion OXC documentada para @Field ya no funciona con rolldown-vite (vite 8) #19

Description

@ccisnedev

Contexto

doc/testing_guide.md (seccion "Vitest 4.x — configuring OXC for @field decorators") recomienda:
tsconfig.test.json con experimentalDecorators + vitest.config con oxc.tsconfig.configFile.

Durante la migracion de la API Fotos (consumidor real, metodo experiment-driven) se comprobo
con evidencia que esa solucion ya no funciona con el stack actual:

  1. En rolldown-vite (vite 8.0.13, el que resuelve vitest 4.1.x), OxcOptions hace
    Omit<TransformOptions, ... | 'tsconfig' | ...>: la opcion oxc.tsconfig.configFile
    documentada SE IGNORA EN SILENCIO. Sintoma: Output.toJson() not implemented en runtime
    (la metadata de @field nunca se registra) o SyntaxError: Invalid or unexpected token.
  2. Forzar oxc: { decorator: { legacy: true } } tampoco sirve: transforma con la convencion
    legacy (Field(prototype, nombre)) y @field es Stage 3 (Field(undefined, context)) →
    TypeError: Cannot read properties of undefined (reading 'Symbol(FieldMeta)') en
    __decorate de @oxc-project/runtime.
  3. Riesgo adicional inducido por la guia: si un consumidor pone experimentalDecorators: true
    en su tsconfig PRINCIPAL (no solo el de tests), tsc compila los @field con la convencion
    legacy y el dist de produccion queda con toJson()/toSchema() rotos — le ocurrio a la
    API Fotos (bug latente en produccion, sin sintomas hasta tener consumidores del canonical).

Solucion verificada (36/36 tests del consumidor + 292/292 del SDK)

  • Stack de tests alineado al del propio SDK: vitest 4.0.x + vite 7 (esbuild), sin opciones
    de transform; esbuild soporta los decoradores Stage 3 nativamente.
  • experimentalDecorators NO debe existir en ningun tsconfig del consumidor.

Propuesta

  1. Actualizar testing_guide.md: retirar la receta OXC; documentar el stack vitest+vite7/esbuild
    y advertir explicitamente contra experimentalDecorators (en especial en el tsconfig principal).
  2. Evaluar un test de conformidad o una verificacion en runtime que falle con mensaje claro
    cuando @field se invoque con la convencion legacy (deteccion temprana del mal setup).

Evidencia completa: repo fotos, cleanrooms/update_modular_api/ (commit 41a3422 del consumidor).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions