diff --git a/packages/repository/src/__tests__/unit/model/model.unit.ts b/packages/repository/src/__tests__/unit/model/model.unit.ts index f924d51ed920..abe2df4c32cb 100644 --- a/packages/repository/src/__tests__/unit/model/model.unit.ts +++ b/packages/repository/src/__tests__/unit/model/model.unit.ts @@ -46,6 +46,8 @@ describe('model', () => { const flexibleDef = new ModelDefinition('Flexible'); flexibleDef .addProperty('id', {type: 'string', id: true}) + .addProperty('createdAt', Date) + .addSetting('hiddenProperties', ['createdAt']) .addSetting('strict', false); const addressDef = new ModelDefinition('Address'); @@ -121,8 +123,8 @@ describe('model', () => { class Flexible extends Entity { static definition = flexibleDef; - id: string; + createdAt?: Date; constructor(data?: Partial) { super(data); @@ -460,6 +462,16 @@ describe('model', () => { }); }); + it('excludes hidden properties from toJSON() output with strict false', () => { + const flexible = new Flexible({ + id: '123a', + createdAt: new Date(), + }); + expect(flexible.toJSON()).to.eql({ + id: '123a', + }); + }); + describe('rejectNavigationalPropertiesInData', () => { class Order extends Entity { static definition = new ModelDefinition('Order') diff --git a/packages/repository/src/model.ts b/packages/repository/src/model.ts index d0be36a56b23..d6e33e891141 100644 --- a/packages/repository/src/model.ts +++ b/packages/repository/src/model.ts @@ -265,17 +265,20 @@ export abstract class Model { * See function `asObject` for each property's conversion rules. */ toObject(options?: Options): Object { + const def = (this.constructor as typeof Model).definition; const obj: AnyObject = {}; if (options && options.ignoreUnknownProperties === false) { + const hiddenProperties: string[] = def?.settings.hiddenProperties || []; for (const p in this) { - const val = (this as AnyObject)[p]; - obj[p] = asObject(val, options); + if (!hiddenProperties.includes(p)) { + const val = (this as AnyObject)[p]; + obj[p] = asObject(val, options); + } } return obj; } - const def = (this.constructor as typeof Model).definition; const props = def.properties; const keys = Object.keys(props);