PicaDeckSync

Databases, by design.

@picadeck/sequelize-parser

Parse a Sequelize instance or model array into a UniversalSchema for visualization.

Installation

npm install @picadeck/sequelize-parser

Import

import {
  parseSequelizeInstance,
  parseSequelizeModels,
} from "@picadeck/sequelize-parser";

API

parseSequelizeInstance(sequelize: Sequelize): UniversalSchema

Accepts an initialized Sequelize instance. Reads all defined models, their attributes, associations, and constraints.

parseSequelizeModels(models: Model[], database?: string): UniversalSchema

Accepts an array of Sequelize model classes directly. The optional database parameter sets the database name in the output metadata.

Full Example

server.ts
import express from "express";
import { Sequelize, DataTypes } from "sequelize";
import { schemaVisualizer } from "@picadeck/core";
import { parseSequelizeInstance } from "@picadeck/sequelize-parser";

const sequelize = new Sequelize("postgres://localhost:5432/shop");

const Product = sequelize.define("Product", {
  name: { type: DataTypes.STRING, allowNull: false },
  price: { type: DataTypes.DECIMAL(10, 2), allowNull: false },
  description: DataTypes.TEXT,
  inStock: { type: DataTypes.BOOLEAN, defaultValue: true },
});

const Category = sequelize.define("Category", {
  name: { type: DataTypes.STRING, allowNull: false, unique: true },
});

Category.hasMany(Product);
Product.belongsTo(Category);

await sequelize.sync();

const app = express();

const schema = parseSequelizeInstance(sequelize);
app.use("/schema", schemaVisualizer(schema));

app.listen(3000);

Supported Types

Sequelize TypeNormalizedType
STRINGSTRING
INTEGERINTEGER
FLOAT / DOUBLEFLOAT
DECIMALDECIMAL
BOOLEANBOOLEAN
DATE / DATEONLYDATETIME / DATE
UUID / UUIDV4UUID
JSON / JSONBJSON
TEXTTEXT
ENUMENUM

Notes

  • Works with @nestjs/sequelize. Inject the Sequelize instance from the DI container.
  • Associations (hasMany, belongsTo, belongsToMany) are mapped to relationships with correct cardinality.
  • Virtual fields are excluded from the output by default.