efesto-migrate
v0.1.0
Published
Codemod deterministico Express -> Bun/Elysia per i BaseApiService di efesto.
Downloads
163
Maintainers
Readme
efesto-migrate
Codemod deterministico Express → Bun/Elysia per i BaseApiService. Pensato per
essere brainless per l'utente: un comando fa tutto il meccanico e segnala —
senza indovinare in silenzio — i pochi punti che richiedono giudizio umano.
Uso
# dry-run: report senza scrivere
bunx efesto-migrate ./src/routes --dry
# applica le trasformazioni in-place
bunx efesto-migrate ./src/routesLavora in-place: esegui su un repo pulito (git) così rivedi il diff.
Sviluppo nel repo (senza pubblicare): bun packages/migrate/index.ts <dir>.
Il pacchetto pubblicato è compilato in packages/migrate/dist/index.js (npm run build).
Principio (perché ci si può fidare)
Asimmetria, non percentuale: può emettere codice che NON gira (errore di
compilazione, // EFESTO-TODO), ma mai codice che gira e significa qualcosa di
diverso dall'originale. Whitelist di trasformazioni provabilmente equivalenti
→ automatiche; tutto il resto → marker, codice intatto.
Cosa fa in automatico (AUTO)
- import
"efesto"→"efesto/elysia"; - firma handler
(req,res,next)→ destructuring{ body, params, query, headers }dei soli campi usati, solo sereqè usato esclusivamente comereq.{body,params,query,headers},ressolo dentroreturn res.json(x), enextmai usato; req.<campo>→<campo>,return res.json(x)→return x;- rimuove i riferimenti ai tipi generati (
*Types.*) dalla firma.
Cosa segnala e lascia a te (MARKER // EFESTO-TODO)
- handler non standard (
res.status/res.send/res.redirect/next,req.file, accessi non banali areq) → conversione manuale a(ctx) => return value; _<verb>Validationin forma express-validator (array) → TypeBox ({ body/query/params }; con multer includifiles);swaggerModelsul service → spostalo inefesto({ models });- cache
key/purgeKeycon identificatori fuori dallo scope Elysia ({ctx,params,query,body,headers,store}), es.allParams,req.*; - import da
express/express-validatorda rimuovere.
Dopo il codemod (a mano, una-tantum nel server)
- risolvi i
// EFESTO-TODO; - centralizza gli
swaggerModelinefesto({ models })e aggiungi unonErrorche mappaerr.status(vediexample/elysia-project/lib/server.ts); tsc --noEmit, poi avvia e verifica a runtime (cache, upload, errori).
Riferimento completo del mapping: docs/migration-express-to-elysia.md.
Limiti noti (v1)
- il typecheck NON è il gate (Bun non typecheck-a): usa
tsc --noEmit; - l'import di tipi non esportati da
efesto/elysia(SwaggerModel) resta danglante → errore tsc loud, adiacente al markerswaggerModel; - l'auto-rewrite degli handler copre solo la forma standard a metodo; arrow function e firme insolite → marker.
