Générateur de Schémas Mongoose et Modèles TypeScript depuis JSON
Infère et génère des schémas MongoDB Mongoose, interfaces Document TypeScript, sous-documents imbriqués, horodatages et modèles exportables depuis du JSON.
import mongoose, { Schema, Document, Model, Types } from 'mongoose';
// ============================================================================
// Subdocument TypeScript Interfaces
// ============================================================================
IProfile {
firstName: string;
lastName: string;
avatarUrl: string;
bio: string;
website: string;
}
IAddress {
label: string;
street: string;
city: string;
state: string;
zipCode: string;
country: string;
isPrimary: boolean;
}
IPreferences {
theme: string;
receiveNewsletter: boolean;
}
// ============================================================================
// Main Document Interface
// ============================================================================
IUserDocument extends Document {
username: string;
email: string;
passwordHash: string;
roles: string[];
profile: IProfile;
score: number;
isActive: boolean;
addresses: Types.DocumentArray<IAddress>;
preferences: IPreferences;
lastLoginAt: Date;
createdAt: Date;
updatedAt: Date;
}
// ============================================================================
// Nested Child Schemas
// ============================================================================
const ProfileSchema = new Schema<IProfile>(
{
firstName: { type: String, required: true, trim: true },
lastName: { type: String, required: true, trim: true },
avatarUrl: { type: String, required: true, trim: true },
bio: { type: String, required: true, trim: true },
website: { type: String, required: true, trim: true },
},
{ _id: false }
);
const AddressSchema = new Schema<IAddress>(
{
label: { type: String, required: true, trim: true },
street: { type: String, required: true, trim: true },
city: { type: String, required: true, trim: true },
state: { type: String, required: true, trim: true },
zipCode: { type: String, required: true, trim: true },
country: { type: String, required: true, trim: true },
isPrimary: { type: Boolean, required: true },
},
{ _id: false }
);
const PreferencesSchema = new Schema<IPreferences>(
{
theme: { type: String, required: true, trim: true },
receiveNewsletter: { type: Boolean, required: true },
},
{ _id: false }
);
// ============================================================================
// Root Document Schema
// ============================================================================
const UserSchema = new Schema<IUserDocument>(
{
username: { type: String, required: true, unique: true, trim: true },
email: { type: String, required: true, unique: true, trim: true, lowercase: true },
passwordHash: { type: String, required: true, trim: true },
roles: [{ type: String, trim: true }],
profile: { type: ProfileSchema, required: true },
score: { type: Number, required: true },
isActive: { type: Boolean, required: true },
addresses: [AddressSchema],
preferences: { type: PreferencesSchema, required: true },
lastLoginAt: { type: Date, required: true },
},
{
timestamps: true,
versionKey: false
}
);
// ============================================================================
// Model Export (Safe for Next.js Fast Refresh & Node.js Cluster)
// ============================================================================
User: Model<IUserDocument> =
mongoose.models.User || mongoose.model<IUserDocument>('User', UserSchema);
export default User;Inférence 100% Côté Client
L'analyse JSON et la synthèse de code s'exécutent entièrement dans le bac à sable de votre navigateur, sans transfert serveur.
Génération de Code Double
Génère simultanément schémas Mongoose, interfaces Document TypeScript, DTOs purs et schémas de validation Zod.
Bonnes Pratiques Mongoose
Gestion automatique des timestamps, références ObjectId, nettoyage de chaînes et contrôle des sous-documents.