diff --git a/src/collections/buildSchema.ts b/src/collections/buildSchema.ts index 6a22567751..36ae7c762a 100644 --- a/src/collections/buildSchema.ts +++ b/src/collections/buildSchema.ts @@ -11,7 +11,11 @@ const buildCollectionSchema = (collection: SanitizedCollectionConfig, config: Sa collection.fields, { draftsEnabled: Boolean(typeof collection?.versions === 'object' && collection.versions.drafts), - options: { timestamps: collection.timestamps !== false, ...schemaOptions }, + options: { + timestamps: collection.timestamps !== false, + minimize: false, + ...schemaOptions, + }, indexSortableFields: config.indexSortableFields, }, ); diff --git a/src/collections/initLocal.ts b/src/collections/initLocal.ts index 006c733795..e16542672a 100644 --- a/src/collections/initLocal.ts +++ b/src/collections/initLocal.ts @@ -70,6 +70,7 @@ export default function initCollectionsLocal(ctx: Payload): void { draftsEnabled: true, options: { timestamps: false, + minimize: false, }, }, ); diff --git a/src/globals/buildModel.ts b/src/globals/buildModel.ts index 4fcbe46ca9..e586943963 100644 --- a/src/globals/buildModel.ts +++ b/src/globals/buildModel.ts @@ -6,14 +6,22 @@ import { GlobalModel } from './config/types'; const buildModel = (config: SanitizedConfig): GlobalModel | null => { if (config.globals && config.globals.length > 0) { - const globalsSchema = new mongoose.Schema({}, { discriminatorKey: 'globalType', timestamps: true }); + const globalsSchema = new mongoose.Schema({}, { discriminatorKey: 'globalType', timestamps: true, minimize: false }); globalsSchema.plugin(buildQueryPlugin); const Globals = mongoose.model('globals', globalsSchema) as unknown as GlobalModel; Object.values(config.globals).forEach((globalConfig) => { - const globalSchema = buildSchema(config, globalConfig.fields, { global: true }); + const globalSchema = buildSchema( + config, + globalConfig.fields, + { + options: { + minimize: false, + }, + }, + ); Globals.discriminator(globalConfig.slug, globalSchema); }); diff --git a/src/globals/initLocal.ts b/src/globals/initLocal.ts index 0cbf9ae04c..cea8748d27 100644 --- a/src/globals/initLocal.ts +++ b/src/globals/initLocal.ts @@ -27,6 +27,7 @@ export default function initGlobalsLocal(ctx: Payload): void { draftsEnabled: true, options: { timestamps: false, + minimize: false, }, }, ); diff --git a/src/mongoose/buildSchema.ts b/src/mongoose/buildSchema.ts index 4ff9ada9a3..d89c95f516 100644 --- a/src/mongoose/buildSchema.ts +++ b/src/mongoose/buildSchema.ts @@ -40,7 +40,6 @@ export type BuildSchemaOptions = { allowIDField?: boolean disableUnique?: boolean draftsEnabled?: boolean - global?: boolean indexSortableFields?: boolean } diff --git a/test/fields/int.spec.ts b/test/fields/int.spec.ts index 4dac81557a..d361d3bfef 100644 --- a/test/fields/int.spec.ts +++ b/test/fields/int.spec.ts @@ -524,6 +524,19 @@ describe('Fields', () => { }, })).rejects.toThrow('The following field is invalid: json'); }); + + it('should save empty json objects', async () => { + const createdJSON = await payload.create({ + collection: 'json-fields', + data: { + json: { + state: {}, + }, + }, + }); + + expect(createdJSON.json.state).toBeDefined(); + }); }); describe('richText', () => { diff --git a/test/globals/config.ts b/test/globals/config.ts index e4cd5841ab..4ea54823a5 100644 --- a/test/globals/config.ts +++ b/test/globals/config.ts @@ -24,6 +24,10 @@ export default buildConfig({ slug, access, fields: [ + { + name: 'json', + type: 'json', + }, { name: 'title', type: 'text', diff --git a/test/globals/int.spec.ts b/test/globals/int.spec.ts index 682dbae773..b5102797d6 100644 --- a/test/globals/int.spec.ts +++ b/test/globals/int.spec.ts @@ -60,6 +60,19 @@ describe('globals', () => { }); describe('local', () => { + it('should save empty json objects', async () => { + const createdJSON = await payload.updateGlobal({ + slug, + data: { + json: { + state: {}, + }, + }, + }); + + expect(createdJSON.json.state).toBeDefined(); + }); + it('should create', async () => { const data = { title: 'title',