Generador de Esquemas Mongoose y Modelos TypeScript desde JSON
Infiere y genera esquemas MongoDB Mongoose, interfaces Document de TypeScript, subdocumentos anidados, marcas de tiempo y exportación de modelos desde 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;Inferencia 100% en el Cliente
El análisis JSON y la generación de código se ejecutan íntegramente en el navegador sin transferencias al servidor.
Generación de Código Dual
Genera simultáneamente esquemas de Mongoose, interfaces Document de TypeScript, DTOs puros y validaciones Zod.
Buenas Prácticas de Mongoose
Soporte para marcas de tiempo automáticas, referencias ObjectId, recorte de cadenas y gestión de subdocumentos.