ForestAdmin/forest-express-sequelize

View on GitHub
src/services/apimap-field-type-detector.js

Summary

Maintainability
C
1 day
Test Coverage
B
88%
function ApimapFieldTypeDetector(column, options) {
  const DataTypes = options.Sequelize;

  this.perform = () => {
    if (column.type instanceof DataTypes.STRING
      || column.type instanceof DataTypes.TEXT
      || (DataTypes.CITEXT && column.type instanceof DataTypes.CITEXT)
      || column.type === 'citext') { // TODO: Remove 'citext' once Sequelize 4 has been deprecated.
      return 'String';
    }
    if (column.type instanceof DataTypes.ENUM) {
      return 'Enum';
    }
    if (column.type instanceof DataTypes.BOOLEAN) {
      return 'Boolean';
    }
    if (column.type instanceof DataTypes.DATEONLY) {
      return 'Dateonly';
    }
    if (column.type instanceof DataTypes.DATE) {
      return 'Date';
    }
    if (column.type instanceof DataTypes.INTEGER
      || column.type instanceof DataTypes.FLOAT
      || column.type instanceof DataTypes['DOUBLE PRECISION']
      || column.type instanceof DataTypes.BIGINT
      || column.type instanceof DataTypes.DECIMAL) {
      return 'Number';
    }
    if (column.type instanceof DataTypes.JSONB
      || column.type instanceof DataTypes.JSON) {
      return 'Json';
    }
    if (column.type instanceof DataTypes.TIME) {
      return 'Time';
    }
    if (column.type instanceof DataTypes.GEOMETRY
      && column.type.type === 'POINT') {
      return 'Point';
    }
    if (column.type instanceof DataTypes.UUID
      || column.type instanceof DataTypes.UUIDV1
      || column.type instanceof DataTypes.UUIDV4) {
      return 'Uuid';
    }
    // NOTICE: Detect Array types (Array(String), Array(Integer), ...)
    if (column.type.type) {
      return [new ApimapFieldTypeDetector({ type: column.type.type }, options).perform()];
    }
    return null;
  };
}

module.exports = ApimapFieldTypeDetector;