sequelize / sequelize-typescript

Decorators and some other features for sequelize

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

TypeError: Cannot create property 'parent' on string 'Validation error'

ristiisa opened this issue · comments

Issue

Versions

  • sequelize: 6.29.3
  • sequelize-typescript: 2.1.5
  • typescript: 5.0.2

Issue type

  • bug report
  • feature request

Actual behavior

It seems when some constraint fails we don't get the true error and instead we get this:

Uncaught TypeError TypeError: Cannot create property 'parent' on string 'Validation error'
    at UniqueConstraintError (...\node_modules\sequelize\lib\errors\validation\unique-constraint-error.js:37:20)
    at _cloneError (...\node_modules\tslog\dist\cjs\BaseLogger.js:238:26)
    at _recursiveCloneAndMaskValuesOfKeys (...\node_modules\tslog\dist\cjs\BaseLogger.js:183:41)
    at <anonymous> (...\node_modules\tslog\dist\cjs\BaseLogger.js:157:25)
    at _mask (...\node_modules\tslog\dist\cjs\BaseLogger.js:156:22)
    at log (...\node_modules\tslog\dist\cjs\BaseLogger.js:99:24)
    at error (...\node_modules\tslog\dist\cjs\index.js:29:22)
    at <anonymous> (...\src\main.ts:71:9)
    at emit (events:512:28)
    at <anonymous> (internal/process/execution:159:25)
    at processPromiseRejections (internal/process/promises:289:13)
    at processTicksAndRejections (internal/process/task_queues:96:32)

Expected behavior

We should get the real error.

Steps to reproduce

new Person({id: "f1f49ab0-194f-46a6-a955-56b80a711d49", name: "dude"}).save();
new Person({id: "f1f49ab0-194f-46a6-a955-56b80a711d49", name: "dude"}).save();
import {
  Table,
  Column,
  Model,
  PrimaryKey,
  IsUUID,
  Default,
} from "sequelize-typescript";

import { UUIDV4 } from "sequelize";
@Table({ tableName: "persons" })
export default class Person extends Model {
  @PrimaryKey
  @IsUUID(4)
  @Default(UUIDV4())
  @Column
  declare id: string;

  @Column
  declare name: string;
}
const DataTypes = require("sequelize").DataTypes;

module.exports = {
  up: async (queryInterface) => {
    await queryInterface.createTable("persons", {
      id: {
        type: DataTypes.UUID,
        field: "id",
        primaryKey: true,
        defaultValue: DataTypes.UUIDV4
      },
      name: {
        type: DataTypes.TEXT,
        field: "name",
      },
      createdAt: {
        type: DataTypes.DATE,
        field: "createdAt"
      },
      updatedAt: {
        type: DataTypes.DATE,
        field: "updatedAt"
      },
      deletedAt: {
        type: DataTypes.DATE,
        field: "deletedAt"
      }
    });
  },
  down: async (queryInterface) => {
    await queryInterface.dropTable("persons");
  },
};

Related code

{
  "compilerOptions": {
    "target": "es2022",
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true,
    "module": "commonjs",
    "moduleResolution": "node",
    "outDir": "out",
    "esModuleInterop": true,
    "forceConsistentCasingInFileNames": true,
    "strict": true,
    "strictPropertyInitialization": false,
    "sourceMap": true
  }
}