diff --git a/packages/core/database/src/__tests__/fields/string-field.test.ts b/packages/core/database/src/__tests__/fields/string-field.test.ts index ff095bc862..88898d7553 100644 --- a/packages/core/database/src/__tests__/fields/string-field.test.ts +++ b/packages/core/database/src/__tests__/fields/string-field.test.ts @@ -119,4 +119,32 @@ describe('string field', () => { name: 'n1', }); }); + + it('trim when value is null should be null', async () => { + const collection = db.collection({ + name: 'tests', + fields: [{ type: 'string', name: 'name', trim: true }], + }); + await db.sync(); + const model = await collection.model.create({ + name: null, + }); + expect(model.toJSON()).toMatchObject({ + name: null, + }); + }); + + it('when value is number should be convert to string', async () => { + const collection = db.collection({ + name: 'tests', + fields: [{ type: 'string', name: 'name', trim: true }], + }); + await db.sync(); + const model = await collection.model.create({ + name: 123, + }); + expect(model.toJSON()).toMatchObject({ + name: '123', + }); + }); }); diff --git a/packages/core/database/src/__tests__/fields/text-field.test.ts b/packages/core/database/src/__tests__/fields/text-field.test.ts index 762269cb7f..1225367b9b 100644 --- a/packages/core/database/src/__tests__/fields/text-field.test.ts +++ b/packages/core/database/src/__tests__/fields/text-field.test.ts @@ -66,4 +66,32 @@ describe('text field', () => { name: 'n1', }); }); + + it('trim when value is null should be null', async () => { + const collection = db.collection({ + name: 'tests', + fields: [{ type: 'string', name: 'name', trim: true }], + }); + await db.sync(); + const model = await collection.model.create({ + name: null, + }); + expect(model.toJSON()).toMatchObject({ + name: null, + }); + }); + + it('when value is number should be convert to string', async () => { + const collection = db.collection({ + name: 'tests', + fields: [{ type: 'string', name: 'name', trim: true }], + }); + await db.sync(); + const model = await collection.model.create({ + name: 123, + }); + expect(model.toJSON()).toMatchObject({ + name: '123', + }); + }); }); diff --git a/packages/core/database/src/fields/string-field.ts b/packages/core/database/src/fields/string-field.ts index 627768beeb..1b0719af8f 100644 --- a/packages/core/database/src/fields/string-field.ts +++ b/packages/core/database/src/fields/string-field.ts @@ -24,7 +24,13 @@ export class StringField extends Field { return { set(value) { - this.setDataValue(name, trim ? value?.trim() : value); + if (value == null) { + return value; + } + if (typeof value !== 'string') { + value = value.toString(); + } + this.setDataValue(name, trim ? value.trim() : value); }, }; } diff --git a/packages/core/database/src/fields/text-field.ts b/packages/core/database/src/fields/text-field.ts index 39f1ef4670..4b045db75e 100644 --- a/packages/core/database/src/fields/text-field.ts +++ b/packages/core/database/src/fields/text-field.ts @@ -29,7 +29,13 @@ export class TextField extends Field { return { set(value) { - this.setDataValue(name, trim ? value?.trim() : value); + if (value == null) { + return value; + } + if (typeof value !== 'string') { + value = value.toString(); + } + this.setDataValue(name, trim ? value.trim() : value); }, }; }