# Multijet v2.0.0 ![cover](https://hackmd.io/_uploads/SJQaK595p.png) ## Panoramica novità - Supporto completo a **Bun** (runtime + package manager) - Nuova variante `multijet minimal` - Refactor completo CLI (performance, stability, QoL) - Nuovi comandi CLI per self-upgrade e codegen - Nuove configurazioni default per linting più aggressivo e formatting - Rimosso codice e moduli opzionali legacy - Testing locale servizi migliorato (docker-compose + NGNIX) - Nuovo sistema di logging strutturato - Refactor core/utils - Risolti errori di build con AWS SAM - Risolti problemi di sicurezza e code smells - Upgrade completo di tutte le dipendenze core ## Bun Multijet v2 supporta nativamente [Bun](https://bun.sh/), il runtime e package manager JavaScript **più veloce** in assoluto. Creando un progetto con la CLI è possibile selezionare `bun` come opzione di runtime. In questo modo, **tutte le dipendenze verranno installate con bun**, sia durante la creazione e sia utilizzando la CLI per generare libs o microservizi (multijet capisce automaticamente quale package manager utilizzare a seconda del progetto in cui viene eseguito). Viene inoltre incluso nello script di build Docker l'opzione di immagine ufficiale `oven/bun:alpine` per utilizzare Bun come **runtime** invece di Node.js. ## Nuova CLI ![cli](https://hackmd.io/_uploads/Hku7w9cqT.png) > ⚠️ a partire da v2.0.0, è consigliabile installare la CLI globalmente con `npm i -g multijet@latest` per una esperienza migliore. E' comunque possibile utilizzarla tramite `npx` o `bunx`. La nuova CLI di multijet è ispirata in parte a `@angular/cli` e presenta un comando nuovo e cambiamenti radicali a quelli già esistenti. Inoltre è stato fatto un refactoring completo per rendere molto più semplice aggiungere funzionalità future. Cambiamenti principali: - Il comando base è stato modificato da `multijet` a `mjet` - Nuovo comando `mjet upgrade`: ispirato a `bun upgrade`, consente di aggiornare la versione di mjet CLI all'ultima versione. - `mjet create`: refactor completo e nuove scelte di scaffolding progetto - Variant: `Core`/`Minimal` - Runtime: `Bun`/`Node.js` - `mjet new`: modificato il comportamento aggiungendo opzioni di generazione: `lib`, `ms` (microservice) e `pkg` (package) > ℹ️ La CLI v1.x è sempre utilizzabile con il comando `npx multijet@1`. Questo rende possibile il mantenimento di progetti vecchi che utilizzano multijet v1. ## Variante minimal La variante minimal **non** include i moduli e file relativi a sviluppo di REST API, incluso sistema di build e deploy specifico e generazione OpenAPI. Questo rende possibile creare un progetto più generico senza rinunciare alla comodità e velocità di multijet⚡ Il template minimal contiene solo gli elementi essenziali di Multijet per gestire una monorepo Node.js: - Turborepo - npm workspaces - ESBuild bundler - ESLint, Prettier A differenza della variante `Core`, minimal include solo un workspace `packages`. E' possibile generare ulteriori package tramite la CLI con `mjet new pkg <name>`. ## Modifiche minori - Cambiato nome libreria core da `fastify-utils` a `http` in ottica di astrarre l'utilizzo di Fastify per una eventuale *nuova variante* 👀 - Aggiunto [eslint-plugin-sonarjs](https://github.com/SonarSource/eslint-plugin-sonarjs) per linting più aggressivo - Aggiunto di default `docker-compose` e NGNIX nella root di un progetto Core, facilitando di molto il testing in locale di microservizi. A partire da v2 è altamente **sconsigliato** l'utilizzo di `aws sam` per testing in locale (è estremamente lento). Gli script non sono stati rimossi quindi è comunque possibile utilizzarlo ## Anteprima nuove versioni > ⚠️ Queste feature sono ancora sperimentali o in fase iniziale, è possibile che cambino in futuro. Non saranno presenti in multijet v2.0.0 Le seguenti sono in ordine di priorità (dalla più alta alla più bassa): - Nuovo modulo per facilitare lavoro con database SQL - interazioni typesafe con database SQL **senza** utilizzo di ORM come [Prisma](https://www.prisma.io/) o [Drizzle](https://orm.drizzle.team/) - [sqlc](https://sqlc.dev/) (*ancora in beta per TypeScript*) per generare modelli e funzioni typesafe a partire da query raw (file `.sql`) - scala facilmente progetti grandi che usano database relazionali - Integrazione `kysley` (query builder) per database SQL non supportati da `sqlc` e coma alternativa da file raw `.sql` - ![image](https://github.com/kysely-org/kysely/blob/master/assets/demo.gif?raw=true) - Nuova variante `fast` - sperimentazione framework web [Hono](https://hono.dev/) (al posto di Fastify) - nuovo core web minimale - ottimale per progetti più piccoli - eseguibile ovunque nativamente (Node, Bun, Deno, Lambda, WASM & Cloudflare Workers) - performance migliori rispetto a variante standard, meno features - `mjet takeoff` (altamente sperimentale) - nuovo comando CLI `mjet takeoff` - generazione automatica microservizi e storage basandosi su OpenAPI - generazione automatica di ogni route a OpenAPI con relativi handler - risparmia tempo, il boilerplate è automatico