1.0.3 • Published 2 years ago

plantilla-node-cli v1.0.3

Weekly downloads
-
License
MIT
Repository
-
Last release
2 years ago

Sequelize-auto-models

Automatically generate models for SequelizeJS via the command line.

Install

npm i -g plantilla-node-cli

Prerequisites

You will need to install the correct dialect binding globally before using sequelize-auto-models.

Example for MySQL/MariaDB

npm install -g mysql

Example for Postgres

npm install -g pg pg-hstore

Example for Sqlite3

npm install -g sqlite

Example for MSSQL

npm install -g mssql

Usage

[node] sequelize-auto-models -h <host> -d <database> -u <user> -x [password] -p [port]  --dialect [dialect] -c [/path/to/config] -o [/path/to/models] -t [tableName] -C

Options:
  -h, --host                   IP/Hostname for the database.   [required]
  -d, --database               Database name.                  [required]
  -u, --user                   Username for database.
  -x, --pass                   Password for database.
  -p, --port                   Port number for database.
  -c, --config                 JSON file for Sequelize's constructor "options" flag object as defined here: https://sequelize.readthedocs.org/en/latest/api/sequelize/
  -o, --output-models          What directory to place the models.
  -i, --output-interfaces      What directory to place the interfaces.
  -e, --dialect                The dialect/engine that you're using: postgres, mysql, sqlite
  -a, --additional             Path to a json file containing model definitions (for all tables) which are to be defined within a model's configuration parameter. For more info: https://sequelize.readthedocs.org/en/latest/docs/models-definition/#configuration
  -t, --tables                 Comma-separated names of tables to import
  -T, --skip-tables            Comma-separated names of tables to skip
  -C, --camel                  Use camel case to name models and fields
  -n, --no-write               Prevent writing the models to disk.
  -s, --schema                 Database schema from which to retrieve tables
  -z, --typescript             Output models as typescript with a definitions file.

Example

plantilla-cli -h 127.0.0.1 -d db_name -u root -x 12345 -p 3306  --dialect mysql  -o src/models -t users -z -i src/interfaces

Produces a file/files such as ./models/users.model.ts which looks like:

import { Model, DataTypes } from 'sequelize';
import { database } from '../config/database';

 export class users extends Model { 	
   public id:any;
   public username:any;
   public password:any;
   public name:any;
   public idlevel:any;
   public email:any;
   public last_access:any;
   public status:any;
   public attempts:any;
   public setpass:any;
   public lang:any;
   public created_at:any;
   public updated_at:any; 
 } 

users.init({
      id: {
         type: DataTypes.INTEGER.UNSIGNED,
         allowNull: false,
         primaryKey: true,
         comment: "null",
         autoIncrement: true
      },
      username: {
         type: DataTypes.STRING(255),
         allowNull: false
      },
      password: {
         type: DataTypes.STRING(255),
         allowNull: false,
         defaultValue: '364465d85f36a90eeba0fd6de82c8492'
      },
      name: {
         type: DataTypes.STRING(255),
         allowNull: true
      },
      idlevel: {
         type: DataTypes.INTEGER.UNSIGNED,
         allowNull: false,
         defaultValue: '0'
      },
      email: {
         type: DataTypes.STRING(255),
         allowNull: false,
         defaultValue: ''
      },
      last_access: {
         type: DataTypes.DATE,
         allowNull: true
      },
      status: {
         type: DataTypes.INTEGER,
         allowNull: false,
         defaultValue: '0'
      },
      attempts: {
         type: DataTypes.INTEGER.UNSIGNED,
         allowNull: false,
         defaultValue: '0'
      },
      setpass: {
         type: DataTypes.DATE,
         allowNull: true
      },
      lang: {
         type: DataTypes.STRING(10),
         allowNull: true,
         defaultValue: 'en-US'
      },
      created_at: {
         type: DataTypes.DATE,
         allowNull: false,
         defaultValue: ''
      },
      updated_at: {
         type: DataTypes.DATE,
         allowNull: true
      }
   }, {
      sequelize: database,
      tableName: 'users',
      timestamps: false
   }
);

Produces a file/files such as ./interfaces/users.interface.ts which looks like:

// table: users
export interface usersInterface {
   id:any;
   username:string;
   password:string;
   name?:string;
   idlevel:number;
   email:string;
   last_access?:Date;
   status:number;
   attempts:number;
   setpass?:Date;
   lang?:string;
   created_at:Date;
   updated_at?:Date;
}

Typescript

Add -z to cli options or typescript: true to programmatic options. Model usage in a ts file:

// All models, can put in or extend to a db object at server init
import * as dbTables from './models/db.tables';
const tables = dbTables.getModels(sequelize); //:dbTables.ITable
tables.Device.findAll
// Single models
import * as dbDef from './models/db.d';
const devices:dbDef.DeviceModel = sequelize.import('./models/Device');
devices.findAll