Open qmphan opened 4 years ago
thanks. added to Roadmap
fixed in 1.9.0 version
This fix breaks the behavior that I use in my code.
I've got user.entity
with the Exclude
decorator for passwords:
@Entity()
export class User {
@Column({
type: 'varchar',
length: 150,
update: false,
unique: true,
})
username: string;
@Exclude()
@Column()
password: string;
@BeforeInsert()
async hashPassword() {
this.password = await bcrypt.hash(this.password, 10);
}
}
And my fixture looks like this:
entity: User
parameters: {}
items:
user1:
username: '{{internet.userName}}'
password: 'test'
__call:
hashPassword:
user2:
username: '{{internet.userName}}'
password: 'test'
__call:
hashPassword:
Before the fix everything worked just fine. But now this.password
is undefinded
inside the hashPassword
, and it causes an error during the creation of fixtures.
Considering the fact that decorators are not ignored anymore, I removed the __call
params from my fixtures, but it doesn't work either.
@RobinCK Isn't it going to be a better solution to allow users to ignore decorators by some command-line option?
@aleksandryackovlev Yes, you are right, I need to move this into the entity configuration
Hi, first of all, thank you for this lib. Is it possible to do something like this, so everyone (inculded me) will be happy
in he yaml file
entity: User
ignoreDecorators: true
items:
user1:
username: foo
password: test
then add the key in jFixturesSchema.js
ignoreDecorators: Joi.boolean(),
add it to in Resolver.js
l15 for (const { entity, items, parameters, processor, resolvedFields, ignoreDecorators } of fixtureConfigs) {
l29 for (const name of referenceNames) {
const data = Object.assign({}, propertyList);
this.stack.push({
parameters: parameters || {},
processor,
entity: entity,
name: name,
resolvedFields,
data,
dependencies: this.resolveDependencies(name, data),
ignoreDecorators
});
and finaly in Builder.js
add method
function isIgnoreDecorators(fixture) {
return !!fixture.ignoreDecorators
}
then use it to configure the ignoreDecorators parameter
entity = class_transformer_1.plainToClassFromExist(entity, data, { ignoreDecorators: isIgnoreDecorators(fixture) });
This way it doesn't break anything and you can disable decorator for specific entities
@RobinCK I find this way more convenient than a cli option.
we are having the problem that they are not ignored - even though setting ignoreDecorators to true. It will not add any field to an object that has the @Exclude()
annotation on the class
Hello,
Thank you for this nice and handy library!
I have entity with decorators (I use DateTime type from luxon) and had problem because attribute of type DateTime cannot be created with new DateTime(). In luxon, you have to use DateTime.local() or DateTime.utc() to create new instances.
So I have write some decorators to get around this. However, my decorators are ignored when fixtures are transformed due to the parameter ignoreDecorators set to true in the call to plainToClassFromExist in Builder.js
What are the reasons for setting ignoreDecorators to true? Could you make it optional?