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:
- 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.
- 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.
- 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
- 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).
- 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).
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:
OxcOptionshaceOmit<TransformOptions, ... | 'tsconfig' | ...>: la opcionoxc.tsconfig.configFiledocumentada SE IGNORA EN SILENCIO. Sintoma:
Output.toJson() not implementeden runtime(la metadata de @field nunca se registra) o
SyntaxError: Invalid or unexpected token.oxc: { decorator: { legacy: true } }tampoco sirve: transforma con la convencionlegacy (
Field(prototype, nombre)) y @field es Stage 3 (Field(undefined, context)) →TypeError: Cannot read properties of undefined (reading 'Symbol(FieldMeta)')en__decoratede @oxc-project/runtime.experimentalDecorators: trueen su tsconfig PRINCIPAL (no solo el de tests),
tsccompila los @field con la convencionlegacy y el
distde produccion queda contoJson()/toSchema()rotos — le ocurrio a laAPI Fotos (bug latente en produccion, sin sintomas hasta tener consumidores del canonical).
Solucion verificada (36/36 tests del consumidor + 292/292 del SDK)
de transform; esbuild soporta los decoradores Stage 3 nativamente.
experimentalDecoratorsNO debe existir en ningun tsconfig del consumidor.Propuesta
y advertir explicitamente contra experimentalDecorators (en especial en el tsconfig principal).
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).