Data Mock Generator Server
Panoramica
Il server data-mock-generator genera dati fittizi realistici per testing, sviluppo e prototipazione. Risolve un problema comune: per testare un'applicazione servono dati che assomiglino a quelli reali, ma crearli manualmente e' tedioso e non scalabile.
Questo server offre 16 tipi di generatore, supporta output in JSON e CSV,
e non ha dipendenze esterne per la generazione dei dati: utilizza esclusivamente
Math.random() e crypto.randomUUID().
+------------------------------------------------------------+
| data-mock-generator server |
| |
| +-------------------------------------------------------+ |
| | Tool Layer | |
| | | |
| | generate-mock-data generate-json | |
| | generate-csv list-generators | |
| +-------------------------------------------------------+ |
| | |
| v |
| +-------------------------------------------------------+ |
| | services/generators.ts | |
| | | |
| | 16 generatori: | |
| | firstName, lastName, email, phone, address, | |
| | company, date, integer, float, boolean, | |
| | uuid, sentence, paragraph, url, ipv4, hexColor | |
| | | |
| | Nessuna dipendenza esterna: | |
| | Math.random() + crypto.randomUUID() | |
| +-------------------------------------------------------+ |
+------------------------------------------------------------+
Caratteristiche principali
- 16 generatori built-in: coprono i tipi di dato piu' comuni
- Tre formati di output: JSON array, JSON Schema-based, CSV
- Nessuna dipendenza esterna: generazione interamente interna
- Limiti di sicurezza: massimo 10.000 righe per chiamata
- CSV con escaping: gestione corretta di delimitatori, virgolette e newline
Tabella dei Tool
[object Object],[object Object],[object Object]
undefined
Architettura
Service Layer: generators.ts
Il file services/generators.ts contiene:
- Dataset di base: array di nomi, cognomi, strade, citta', aziende, parole lorem, domini
- 16 funzioni generatore: ognuna restituisce
string | number | boolean - Registry:
Record<string, GeneratorInfo>con nome, descrizione e funzione - Lookup:
getGenerator(name)per ottenere la funzione da un nome stringa
Tabella dei 16 generatori
[object Object],[object Object],[object Object],[object Object]
undefined
Flusso di generate-mock-data
schema: [{ field: "name", type: "firstName" },
{ field: "age", type: "integer" }]
count: 3
|
v
Validazione tipi: getGenerator(type) per ogni campo
|
v
Per ogni riga (0..count-1):
Per ogni campo:
row[field] = generator()
|
v
Output: [
{ "name": "James", "age": 4521 },
{ "name": "Linda", "age": 892 },
{ "name": "Robert", "age": 7103 }
]
Flusso di generate-json (JSON Schema)
jsonSchema: {
properties: {
id: { type: "string", format: "uuid" },
email: { type: "string", format: "email" },
score: { type: "number" }
}
}
|
v
Per ogni property: resolveGenerator(prop)
1. Controlla prop.format -> getGenerator(format)
2. Mappa formati noti: email, uri, uuid, ipv4, date, ...
3. Fallback su prop.type: string->sentence, number->float,
integer->integer, boolean->boolean
|
v
Generazione righe come generate-mock-data
Flusso di generate-csv
columns: [{ name: "Nome", type: "firstName" },
{ name: "Email", type: "email" }]
delimiter: ";"
|
v
Header: escapeCsvField("Nome", ";") + ";" + escapeCsvField("Email", ";")
|
v
Per ogni riga:
value = String(generator())
escapeCsvField(value, delimiter):
- Se contiene delimiter, '"' o '\n':
wrap in "" e raddoppia le virgolette interne
- Altrimenti: valore come stringa
|
v
Output:
Nome;Email
James;james_smith@example.com
Linda;linda.johnson42@test.org
Integrazione Event Bus
Questo server non pubblica ne' sottoscrive eventi. E' un server puramente generativo senza side-effect.
Interazioni con altri server
[object Object],[object Object],[object Object]
undefined
Esempi di utilizzo
Generazione dati da schema
Richiesta:
{
"tool": "generate-mock-data",
"arguments": {
"schema": [
{ "field": "id", "type": "uuid" },
{ "field": "name", "type": "firstName" },
{ "field": "surname", "type": "lastName" },
{ "field": "email", "type": "email" },
{ "field": "active", "type": "boolean" }
],
"count": 3
}
}
Risposta:
[
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "Jennifer",
"surname": "Martinez",
"email": "jennifer.martinez@example.com",
"active": true
},
{
"id": "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
"name": "Robert",
"surname": "Smith",
"email": "robert_smith42@test.org",
"active": false
}
]
Generazione da JSON Schema
Richiesta:
{
"tool": "generate-json",
"arguments": {
"jsonSchema": {
"properties": {
"userId": { "type": "string", "format": "uuid" },
"email": { "type": "string", "format": "email" },
"registeredAt": { "type": "string", "format": "date" },
"score": { "type": "integer" }
}
},
"count": 2
}
}
Risposta:
[
{ "userId": "abc-123-...", "email": "james.lee@mock.dev", "registeredAt": "2019-03-15", "score": 7842 },
{ "userId": "def-456-...", "email": "mary_white@demo.net", "registeredAt": "2022-11-08", "score": 1256 }
]
Generazione CSV
Richiesta:
{
"tool": "generate-csv",
"arguments": {
"columns": [
{ "name": "Nome", "type": "firstName" },
{ "name": "Cognome", "type": "lastName" },
{ "name": "IP", "type": "ipv4" }
],
"count": 3,
"delimiter": ";"
}
}
Risposta:
Nome;Cognome;IP
James;Smith;192.168.1.42
Linda;Johnson;10.0.0.15
Robert;Williams;172.16.5.200
Lista generatori
Richiesta:
{
"tool": "list-generators",
"arguments": {}
}
Risposta (parziale):
[
{ "name": "firstName", "description": "Generates a random first name" },
{ "name": "lastName", "description": "Generates a random last name" },
{ "name": "email", "description": "Generates a random email address" },
{ "name": "uuid", "description": "Generates a random UUID v4 using crypto.randomUUID()" }
]
Sviluppi futuri
- Generatori personalizzati: definizione di generatori custom con pattern regex
- Relazioni tra campi: email basata sul firstName+lastName della stessa riga
- Locale/i18n: nomi, indirizzi e formati specifici per paese (IT, DE, FR, etc.)
- Generazione SQL INSERT: output diretto come statement SQL
- Seed deterministico: parametro
seedper generazione riproducibile - Vincoli di unicita': garanzia che certi campi (email, uuid) non si ripetano
- Range configurabili: min/max per integer e float, date range personalizzato
- Template di schema: schema predefiniti per utenti, prodotti, ordini, etc.