Swagger generator apis and models for Angular and NextJS
npm install @devlearning/swagger-generatorGeneratore automatico di client API e modelli per Angular, Next.js e Flutter/Dart da specifiche Swagger/OpenAPI.


- β
Generazione automatica di modelli e API da Swagger JSON
- π¨ Multi-framework: Angular, Next.js, Flutter/Dart
- π Type-safe: Tipizzazione forte per TypeScript e Dart
- π¦ Zero dipendenze nei file generati (configurabile)
- π CLI semplice da usare
- π Validazione del documento Swagger prima della generazione
- π Logging strutturato per debugging
``bash`
npm install @devlearning/swagger-generator --save-dev
`bash`
npx swgen --url
#### Angular
`bash`
npx swgen \
--url http://localhost:5000/swagger/v1/swagger.json \
--output src/app/core/autogen \
--target angular \
--dateTimeLibrary moment
#### Next.js
`bash`
npx swgen \
--url https://api.example.com/swagger.json \
--output src/lib/api \
--target next \
--dateTimeLibrary date-fns
#### Flutter/Dart
`bash`
npx swgen \
--url http://localhost:5000/swagger/v1/swagger.json \
--output lib/core/api \
--target flutter \
--package my_app_name
| Opzione | Alias | Descrizione | Obbligatorio | Default |
|---------|-------|-------------|--------------|---------|
| --url | -u | URL del file swagger.json | β
| - |--output
| | -o | Directory di output | β
| - |--target
| | -t | Framework target (angular, next, flutter) | β
| - |--dateTimeLibrary
| | -d | Libreria date (moment, date-fns) | β | date-fns |--package
| | -p | Nome package (solo Dart/Flutter) | β | - |--api-client-name
| | -a | Nome classe API unificata | β | - |
Di default, il generatore crea classi API separate raggruppate per tag Swagger. Con l'opzione --api-client-name, puoi generare una singola classe unificata contenente tutti i metodi API.
#### Esempio: Flutter con classe unificata
`bash`
npx swgen \
--url http://localhost:5000/swagger/v1/swagger.json \
--output lib/core/api \
--target flutter \
--package my_app \
--api-client-name ApiClient
Genera:
`dart`
// lib/core/api/api_client.dart
class ApiClient {
// Tutti i metodi API in una singola classe
Future
Future> getProducts() async { ... }
Future
// ...
}
#### Senza --api-client-name (comportamento predefinito)
Genera classi separate per tag:
`dart
// lib/core/api/users_api.dart
class UsersApi { ... }
// lib/core/api/products_api.dart
class ProductsApi { ... }
// lib/core/api/orders_api.dart
class OrdersApi { ... }
`
#### Quando usare la classe unificata?
- β
Progetti piccoli/medi con pochi endpoint
- β
Quando preferisci un singolo punto di accesso alle API
- β
Per semplificare la dependency injection
#### Quando usare classi separate?
- β
Progetti grandi con molti endpoint
- β
Quando vuoi separare le responsabilitΓ per dominio
- β
Per team diversi che lavorano su moduli diversi
output/
βββ models/
β βββ user.model.ts
β βββ product.model.ts
β βββ ...
βββ api/
βββ user.api.ts
βββ product.api.ts
βββ ...
`$3
`
output/
βββ models/
β βββ user.ts
β βββ product.ts
β βββ ...
βββ api/
βββ user-api.ts
βββ product-api.ts
βββ ...
`$3
`
lib/output/
βββ user/
β βββ models/
β β βββ user.dart
β βββ api/
β βββ user_api.dart
βββ product/
βββ models/
β βββ product.dart
βββ api/
βββ product_api.dart
`π§ Integrazione nel Progetto
$3
1. Crea un service wrapper:
`typescript
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { environment } from '@env/environment';@Injectable({ providedIn: 'root' })
export class ApiService {
constructor(private http: HttpClient) {}
// I tuoi metodi personalizzati qui
}
`2. Usa i modelli generati:
`typescript
import { User } from './autogen/models/user.model';
import { UserApi } from './autogen/api/user.api';
`$3
`typescript
import { getUsers } from '@/lib/api/user-api';
import { User } from '@/lib/api/models/user';export async function UsersPage() {
const users = await getUsers();
// ...
}
`$3
`dart
import 'package:my_app/core/api/user/api/user_api.dart';
import 'package:my_app/core/api/user/models/user.dart';final userApi = UserApi();
final users = await userApi.getUsers();
`π Risoluzione Problemi
$3
Il documento Swagger non Γ¨ valido. Verifica:
- Presenza di openApi version
- Presenza di paths object
- Struttura corretta delle definizioni$3
L'API restituisce null per un tipo primitivo. Verifica che il backend ritorni sempre un valore valido.$3
β
RISOLTO - Ora il generatore gestisce correttamente String, int, bool, double con conversioni automatiche.π οΈ Sviluppo
`bash
Clone repository
git clone Install dependencies
npm installBuild
npm run buildTest local
npm run debug-angular
npm run debug-nextjs
npm run debug-flutter
`π Script NPM
| Script | Descrizione |
|--------|-------------|
|
npm run build | Compila TypeScript e copia templates |
| npm run debug-angular | Test con target Angular |
| npm run debug-nextjs | Test con target Next.js |
| npm run debug-flutter | Test con target Flutter |
| npm run deploy | Pubblica su npm |π€ Contribuire
Contributi benvenuti! Per favore:
1. Fai fork del progetto
2. Crea un branch per la tua feature (
git checkout -b feature/amazing-feature)
3. Commit dei cambiamenti (git commit -m 'Add amazing feature')
4. Push del branch (git push origin feature/amazing-feature`)ISC License - vedi file LICENSE per dettagli
Sviluppato da DeVLearninG Team
---
Note: Questo tool Γ¨ in sviluppo attivo. Per bug o feature request, apri una issue su GitHub.