TypeError: Cannot create property 'parent' on string 'Validation error'
ristiisa opened this issue · comments
ristiisa commented
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
}
}