PicaDeckSync

Databases, by design.

@picadeck/mongoose-parser

Parse Mongoose models and connections into a UniversalSchema for visualization.

Installation

npm install @picadeck/mongoose-parser

Import

import {
  parseMongooseModels,
  parseMongooseConnection,
} from "@picadeck/mongoose-parser";

API

parseMongooseModels(models: Model[]): UniversalSchema

Accepts an array of Mongoose model instances. Iterates each model's schema paths, extracts fields, types, validators, and ref-based relationships.

parseMongooseConnection(connection: Connection): UniversalSchema

Convenience wrapper that reads all registered models from a Mongoose connection object and passes them to parseMongooseModels.

Full Example

server.ts
import express from "express";
import mongoose from "mongoose";
import { schemaVisualizer } from "@picadeck/core";
import { parseMongooseConnection } from "@picadeck/mongoose-parser";

// Define your models
const UserSchema = new mongoose.Schema({
  name: { type: String, required: true },
  email: { type: String, required: true, unique: true },
  posts: [{ type: mongoose.Schema.Types.ObjectId, ref: "Post" }],
});

const PostSchema = new mongoose.Schema({
  title: String,
  body: String,
  author: { type: mongoose.Schema.Types.ObjectId, ref: "User" },
  createdAt: { type: Date, default: Date.now },
});

mongoose.model("User", UserSchema);
mongoose.model("Post", PostSchema);

const app = express();

await mongoose.connect("mongodb://localhost:27017/blog");

const schema = parseMongooseConnection(mongoose.connection);
app.use("/schema", schemaVisualizer(schema));

app.listen(3000);

Supported Types

Mongoose TypeNormalizedType
StringSTRING
NumberINTEGER / FLOAT
BooleanBOOLEAN
DateDATETIME
ObjectIdUUID
BufferBINARY
MixedJSON
ArrayARRAY
MapJSON

Notes

  • Works with @nestjs/mongoose out of the box. NestJS decorators compile to standard Mongoose schemas at runtime.
  • Ref fields are automatically detected as relationships.
  • Discriminator models are included when using parseMongooseConnection.