@payloadcms/db-mongodb 4.0.0-internal.9726517 → 4.0.0-internal.a1317b2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/dist/create.d.ts.map +1 -1
  2. package/dist/create.js +2 -1
  3. package/dist/create.js.map +1 -1
  4. package/dist/createGlobalVersion.js +1 -1
  5. package/dist/createGlobalVersion.js.map +1 -1
  6. package/dist/createMigration.d.ts.map +1 -1
  7. package/dist/createMigration.js +9 -2
  8. package/dist/createMigration.js.map +1 -1
  9. package/dist/createVersion.js +1 -1
  10. package/dist/createVersion.js.map +1 -1
  11. package/dist/exports/migration-utils.d.ts +0 -1
  12. package/dist/exports/migration-utils.d.ts.map +1 -1
  13. package/dist/exports/migration-utils.js +0 -1
  14. package/dist/exports/migration-utils.js.map +1 -1
  15. package/dist/find.js +1 -1
  16. package/dist/find.js.map +1 -1
  17. package/dist/findOne.js +1 -1
  18. package/dist/findOne.js.map +1 -1
  19. package/dist/migrateFresh.d.ts +4 -2
  20. package/dist/migrateFresh.d.ts.map +1 -1
  21. package/dist/migrateFresh.js +20 -6
  22. package/dist/migrateFresh.js.map +1 -1
  23. package/dist/predefinedMigrations/migrateRelationshipsV2_V3.d.ts.map +1 -1
  24. package/dist/predefinedMigrations/migrateRelationshipsV2_V3.js +4 -4
  25. package/dist/predefinedMigrations/migrateRelationshipsV2_V3.js.map +1 -1
  26. package/dist/queries/buildSearchParams.d.ts.map +1 -1
  27. package/dist/queries/buildSearchParams.js +139 -6
  28. package/dist/queries/buildSearchParams.js.map +1 -1
  29. package/dist/queries/buildSortParam.spec.js +1 -1
  30. package/dist/queries/buildSortParam.spec.js.map +1 -1
  31. package/dist/queries/getLocalizedSortProperty.spec.js +1 -1
  32. package/dist/queries/getLocalizedSortProperty.spec.js.map +1 -1
  33. package/dist/queries/parseParams.js.map +1 -1
  34. package/dist/queryDrafts.js +1 -1
  35. package/dist/queryDrafts.js.map +1 -1
  36. package/dist/updateJobs.d.ts.map +1 -1
  37. package/dist/updateJobs.js +70 -13
  38. package/dist/updateJobs.js.map +1 -1
  39. package/dist/utilities/buildJoinAggregation.d.ts +1 -1
  40. package/dist/utilities/buildJoinAggregation.d.ts.map +1 -1
  41. package/dist/utilities/buildJoinAggregation.js +2 -2
  42. package/dist/utilities/buildJoinAggregation.js.map +1 -1
  43. package/dist/utilities/transform.d.ts.map +1 -1
  44. package/dist/utilities/transform.js +15 -0
  45. package/dist/utilities/transform.js.map +1 -1
  46. package/dist/utilities/transform.spec.js +67 -0
  47. package/dist/utilities/transform.spec.js.map +1 -1
  48. package/package.json +5 -5
  49. package/dist/predefinedMigrations/jobs-processing-lease-v4.d.ts +0 -5
  50. package/dist/predefinedMigrations/jobs-processing-lease-v4.d.ts.map +0 -1
  51. package/dist/predefinedMigrations/jobs-processing-lease-v4.js +0 -12
  52. package/dist/predefinedMigrations/jobs-processing-lease-v4.js.map +0 -1
  53. package/dist/predefinedMigrations/migrateJobsProcessingLease.d.ts +0 -6
  54. package/dist/predefinedMigrations/migrateJobsProcessingLease.d.ts.map +0 -1
  55. package/dist/predefinedMigrations/migrateJobsProcessingLease.js +0 -81
  56. package/dist/predefinedMigrations/migrateJobsProcessingLease.js.map +0 -1
  57. package/dist/predefinedMigrations/migrateJobsProcessingLease.spec.js +0 -130
  58. package/dist/predefinedMigrations/migrateJobsProcessingLease.spec.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utilities/transform.spec.ts"],"sourcesContent":["import { describe, it, expect } from 'vitest'\nimport { flattenAllFields, type Field, type SanitizedConfig } from 'payload'\nimport { Types } from 'mongoose'\n\nimport { transform } from './transform.js'\nimport type { MongooseAdapter } from '../index.js'\n\nconst flattenRelationshipValues = (obj: Record<string, any>, prefix = ''): Record<string, any> => {\n return Object.keys(obj).reduce(\n (acc, key) => {\n const fullKey = prefix ? `${prefix}.${key}` : key\n const value = obj[key]\n\n if (value && typeof value === 'object' && !(value instanceof Types.ObjectId)) {\n Object.assign(acc, flattenRelationshipValues(value, fullKey))\n // skip relationTo and blockType\n } else if (!fullKey.endsWith('relationTo') && !fullKey.endsWith('blockType')) {\n acc[fullKey] = value\n }\n\n return acc\n },\n {} as Record<string, any>,\n )\n}\n\nconst relsFields: Field[] = [\n {\n name: 'rel_1',\n type: 'relationship',\n relationTo: 'rels',\n },\n {\n name: 'rel_1_l',\n type: 'relationship',\n localized: true,\n relationTo: 'rels',\n },\n {\n name: 'rel_2',\n type: 'relationship',\n hasMany: true,\n relationTo: 'rels',\n },\n {\n name: 'rel_2_l',\n type: 'relationship',\n hasMany: true,\n localized: true,\n relationTo: 'rels',\n },\n {\n name: 'rel_3',\n type: 'relationship',\n relationTo: ['rels'],\n },\n {\n name: 'rel_3_l',\n type: 'relationship',\n localized: true,\n relationTo: ['rels'],\n },\n {\n name: 'rel_4',\n type: 'relationship',\n hasMany: true,\n relationTo: ['rels'],\n },\n {\n name: 'rel_4_l',\n type: 'relationship',\n hasMany: true,\n localized: true,\n relationTo: ['rels'],\n },\n]\n\nconst referenceBlockFields: Field[] = [\n ...relsFields,\n {\n name: 'group',\n type: 'group',\n fields: relsFields,\n },\n {\n name: 'array',\n type: 'array',\n fields: relsFields,\n },\n]\n\nconst config = {\n blocks: [\n {\n slug: 'reference-block',\n fields: referenceBlockFields,\n flattenedFields: flattenAllFields({ fields: referenceBlockFields }),\n },\n ],\n collections: [\n {\n slug: 'docs',\n fields: [\n ...relsFields,\n {\n name: 'array',\n type: 'array',\n fields: [\n {\n name: 'array',\n type: 'array',\n fields: relsFields,\n },\n {\n name: 'blocks',\n type: 'blocks',\n blocks: [{ slug: 'block', fields: relsFields }],\n },\n ...relsFields,\n ],\n },\n {\n name: 'arrayLocalized',\n type: 'array',\n fields: [\n {\n name: 'array',\n type: 'array',\n fields: relsFields,\n },\n {\n name: 'blocks',\n type: 'blocks',\n blocks: [{ slug: 'block', fields: relsFields }],\n },\n ...relsFields,\n ],\n localized: true,\n },\n {\n name: 'blocks',\n type: 'blocks',\n blocks: [\n {\n slug: 'block',\n fields: [\n ...relsFields,\n {\n name: 'group',\n type: 'group',\n fields: relsFields,\n },\n {\n name: 'array',\n type: 'array',\n fields: relsFields,\n },\n ],\n },\n ],\n },\n {\n name: 'referencedBlocks',\n type: 'blocks',\n blocks: ['reference-block'],\n },\n {\n name: 'group',\n type: 'group',\n fields: [\n ...relsFields,\n {\n name: 'array',\n type: 'array',\n fields: relsFields,\n },\n ],\n },\n {\n name: 'groupLocalized',\n type: 'group',\n fields: [\n ...relsFields,\n {\n name: 'array',\n type: 'array',\n fields: relsFields,\n },\n ],\n localized: true,\n },\n {\n name: 'groupAndRow',\n type: 'group',\n fields: [\n {\n type: 'row',\n fields: [\n ...relsFields,\n {\n type: 'array',\n name: 'array',\n fields: relsFields,\n },\n ],\n },\n ],\n },\n {\n type: 'tabs',\n tabs: [\n {\n name: 'tab',\n fields: relsFields,\n },\n {\n name: 'tabLocalized',\n fields: relsFields,\n localized: true,\n },\n {\n label: 'another',\n fields: [\n {\n type: 'tabs',\n tabs: [\n {\n name: 'nestedTab',\n fields: relsFields,\n },\n ],\n },\n ],\n },\n ],\n },\n ],\n },\n {\n slug: 'rels',\n fields: [],\n },\n ],\n localization: {\n defaultLocale: 'en',\n localeCodes: ['en', 'es'],\n locales: [\n { code: 'en', label: 'EN' },\n { code: 'es', label: 'ES' },\n ],\n },\n} as SanitizedConfig\n\nconst relsData = {\n rel_1: new Types.ObjectId().toHexString(),\n rel_1_l: {\n en: new Types.ObjectId().toHexString(),\n es: new Types.ObjectId().toHexString(),\n },\n rel_2: [new Types.ObjectId().toHexString()],\n rel_2_l: {\n en: [new Types.ObjectId().toHexString()],\n es: [new Types.ObjectId().toHexString()],\n },\n rel_3: {\n relationTo: 'rels',\n value: new Types.ObjectId().toHexString(),\n },\n rel_3_l: {\n en: {\n relationTo: 'rels',\n value: new Types.ObjectId().toHexString(),\n },\n es: {\n relationTo: 'rels',\n value: new Types.ObjectId().toHexString(),\n },\n },\n rel_4: [\n {\n relationTo: 'rels',\n value: new Types.ObjectId().toHexString(),\n },\n ],\n rel_4_l: {\n en: [\n {\n relationTo: 'rels',\n value: new Types.ObjectId().toHexString(),\n },\n ],\n es: [\n {\n relationTo: 'rels',\n value: new Types.ObjectId().toHexString(),\n },\n ],\n },\n}\n\ndescribe('transform', () => {\n it('should sanitize relationships', () => {\n const data = {\n ...relsData,\n array: [\n {\n ...relsData,\n array: [{ ...relsData }],\n blocks: [\n {\n blockType: 'block',\n ...relsData,\n },\n ],\n },\n ],\n arrayLocalized: {\n en: [\n {\n ...relsData,\n array: [{ ...relsData }],\n blocks: [\n {\n blockType: 'block',\n ...relsData,\n },\n ],\n },\n ],\n es: [\n {\n ...relsData,\n array: [{ ...relsData }],\n blocks: [\n {\n blockType: 'block',\n ...relsData,\n },\n ],\n },\n ],\n },\n blocks: [\n {\n blockType: 'block',\n ...relsData,\n array: [{ ...relsData }],\n group: { ...relsData },\n },\n ],\n referencedBlocks: [\n {\n blockType: 'reference-block',\n array: [{ ...relsData }],\n group: { ...relsData },\n ...relsData,\n },\n ],\n group: {\n ...relsData,\n array: [{ ...relsData }],\n },\n groupAndRow: {\n ...relsData,\n array: [{ ...relsData }],\n },\n groupLocalized: {\n en: {\n ...relsData,\n array: [{ ...relsData }],\n },\n es: {\n ...relsData,\n array: [{ ...relsData }],\n },\n },\n tab: { ...relsData },\n tabLocalized: {\n en: { ...relsData },\n es: { ...relsData },\n },\n nestedTab: { ...relsData },\n }\n const flattenValuesBefore = Object.values(flattenRelationshipValues(data))\n\n const mockAdapter = {\n payload: {\n config,\n },\n } as MongooseAdapter\n\n transform({\n adapter: mockAdapter,\n operation: 'write',\n data,\n fields: config.collections[0].fields,\n })\n if ('updatedAt' in data) {\n delete data.updatedAt\n }\n\n const flattenValuesAfter = Object.values(flattenRelationshipValues(data))\n\n flattenValuesAfter.forEach((value, i) => {\n expect(value).toBeInstanceOf(Types.ObjectId)\n expect(flattenValuesBefore[i]).toBe(value.toHexString())\n })\n })\n})\n"],"names":["describe","it","expect","flattenAllFields","Types","transform","flattenRelationshipValues","obj","prefix","Object","keys","reduce","acc","key","fullKey","value","ObjectId","assign","endsWith","relsFields","name","type","relationTo","localized","hasMany","referenceBlockFields","fields","config","blocks","slug","flattenedFields","collections","tabs","label","localization","defaultLocale","localeCodes","locales","code","relsData","rel_1","toHexString","rel_1_l","en","es","rel_2","rel_2_l","rel_3","rel_3_l","rel_4","rel_4_l","data","array","blockType","arrayLocalized","group","referencedBlocks","groupAndRow","groupLocalized","tab","tabLocalized","nestedTab","flattenValuesBefore","values","mockAdapter","payload","adapter","operation","updatedAt","flattenValuesAfter","forEach","i","toBeInstanceOf","toBe"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/utilities/transform.spec.ts"],"sourcesContent":["import { describe, it, expect } from 'vitest'\nimport { flattenAllFields, type Field, type SanitizedConfig } from 'payload'\nimport { Types } from 'mongoose'\n\nimport { transform } from './transform.js'\nimport type { MongooseAdapter } from '../index.js'\n\nconst flattenRelationshipValues = (obj: Record<string, any>, prefix = ''): Record<string, any> => {\n return Object.keys(obj).reduce(\n (acc, key) => {\n const fullKey = prefix ? `${prefix}.${key}` : key\n const value = obj[key]\n\n if (value && typeof value === 'object' && !(value instanceof Types.ObjectId)) {\n Object.assign(acc, flattenRelationshipValues(value, fullKey))\n // skip relationTo and blockType\n } else if (!fullKey.endsWith('relationTo') && !fullKey.endsWith('blockType')) {\n acc[fullKey] = value\n }\n\n return acc\n },\n {} as Record<string, any>,\n )\n}\n\nconst relsFields: Field[] = [\n {\n name: 'rel_1',\n type: 'relationship',\n relationTo: 'rels',\n },\n {\n name: 'rel_1_l',\n type: 'relationship',\n localized: true,\n relationTo: 'rels',\n },\n {\n name: 'rel_2',\n type: 'relationship',\n hasMany: true,\n relationTo: 'rels',\n },\n {\n name: 'rel_2_l',\n type: 'relationship',\n hasMany: true,\n localized: true,\n relationTo: 'rels',\n },\n {\n name: 'rel_3',\n type: 'relationship',\n relationTo: ['rels'],\n },\n {\n name: 'rel_3_l',\n type: 'relationship',\n localized: true,\n relationTo: ['rels'],\n },\n {\n name: 'rel_4',\n type: 'relationship',\n hasMany: true,\n relationTo: ['rels'],\n },\n {\n name: 'rel_4_l',\n type: 'relationship',\n hasMany: true,\n localized: true,\n relationTo: ['rels'],\n },\n]\n\nconst referenceBlockFields: Field[] = [\n ...relsFields,\n {\n name: 'group',\n type: 'group',\n fields: relsFields,\n },\n {\n name: 'array',\n type: 'array',\n fields: relsFields,\n },\n]\n\nconst config = {\n blocks: [\n {\n slug: 'reference-block',\n fields: referenceBlockFields,\n flattenedFields: flattenAllFields({ fields: referenceBlockFields }),\n },\n ],\n collections: [\n {\n slug: 'docs',\n fields: [\n ...relsFields,\n {\n name: 'array',\n type: 'array',\n fields: [\n {\n name: 'array',\n type: 'array',\n fields: relsFields,\n },\n {\n name: 'blocks',\n type: 'blocks',\n blocks: [{ slug: 'block', fields: relsFields }],\n },\n ...relsFields,\n ],\n },\n {\n name: 'arrayLocalized',\n type: 'array',\n fields: [\n {\n name: 'array',\n type: 'array',\n fields: relsFields,\n },\n {\n name: 'blocks',\n type: 'blocks',\n blocks: [{ slug: 'block', fields: relsFields }],\n },\n ...relsFields,\n ],\n localized: true,\n },\n {\n name: 'blocks',\n type: 'blocks',\n blocks: [\n {\n slug: 'block',\n fields: [\n ...relsFields,\n {\n name: 'group',\n type: 'group',\n fields: relsFields,\n },\n {\n name: 'array',\n type: 'array',\n fields: relsFields,\n },\n ],\n },\n ],\n },\n {\n name: 'referencedBlocks',\n type: 'blocks',\n blocks: ['reference-block'],\n },\n {\n name: 'group',\n type: 'group',\n fields: [\n ...relsFields,\n {\n name: 'array',\n type: 'array',\n fields: relsFields,\n },\n ],\n },\n {\n name: 'groupLocalized',\n type: 'group',\n fields: [\n ...relsFields,\n {\n name: 'array',\n type: 'array',\n fields: relsFields,\n },\n ],\n localized: true,\n },\n {\n name: 'groupAndRow',\n type: 'group',\n fields: [\n {\n type: 'row',\n fields: [\n ...relsFields,\n {\n type: 'array',\n name: 'array',\n fields: relsFields,\n },\n ],\n },\n ],\n },\n {\n type: 'tabs',\n tabs: [\n {\n name: 'tab',\n fields: relsFields,\n },\n {\n name: 'tabLocalized',\n fields: relsFields,\n localized: true,\n },\n {\n label: 'another',\n fields: [\n {\n type: 'tabs',\n tabs: [\n {\n name: 'nestedTab',\n fields: relsFields,\n },\n ],\n },\n ],\n },\n ],\n },\n ],\n },\n {\n slug: 'rels',\n fields: [],\n },\n ],\n localization: {\n defaultLocale: 'en',\n localeCodes: ['en', 'es'],\n locales: [\n { code: 'en', label: 'EN' },\n { code: 'es', label: 'ES' },\n ],\n },\n} as SanitizedConfig\n\nconst relsData = {\n rel_1: new Types.ObjectId().toHexString(),\n rel_1_l: {\n en: new Types.ObjectId().toHexString(),\n es: new Types.ObjectId().toHexString(),\n },\n rel_2: [new Types.ObjectId().toHexString()],\n rel_2_l: {\n en: [new Types.ObjectId().toHexString()],\n es: [new Types.ObjectId().toHexString()],\n },\n rel_3: {\n relationTo: 'rels',\n value: new Types.ObjectId().toHexString(),\n },\n rel_3_l: {\n en: {\n relationTo: 'rels',\n value: new Types.ObjectId().toHexString(),\n },\n es: {\n relationTo: 'rels',\n value: new Types.ObjectId().toHexString(),\n },\n },\n rel_4: [\n {\n relationTo: 'rels',\n value: new Types.ObjectId().toHexString(),\n },\n ],\n rel_4_l: {\n en: [\n {\n relationTo: 'rels',\n value: new Types.ObjectId().toHexString(),\n },\n ],\n es: [\n {\n relationTo: 'rels',\n value: new Types.ObjectId().toHexString(),\n },\n ],\n },\n}\n\ndescribe('transform', () => {\n it('should sanitize relationships', () => {\n const data = {\n ...relsData,\n array: [\n {\n ...relsData,\n array: [{ ...relsData }],\n blocks: [\n {\n blockType: 'block',\n ...relsData,\n },\n ],\n },\n ],\n arrayLocalized: {\n en: [\n {\n ...relsData,\n array: [{ ...relsData }],\n blocks: [\n {\n blockType: 'block',\n ...relsData,\n },\n ],\n },\n ],\n es: [\n {\n ...relsData,\n array: [{ ...relsData }],\n blocks: [\n {\n blockType: 'block',\n ...relsData,\n },\n ],\n },\n ],\n },\n blocks: [\n {\n blockType: 'block',\n ...relsData,\n array: [{ ...relsData }],\n group: { ...relsData },\n },\n ],\n referencedBlocks: [\n {\n blockType: 'reference-block',\n array: [{ ...relsData }],\n group: { ...relsData },\n ...relsData,\n },\n ],\n group: {\n ...relsData,\n array: [{ ...relsData }],\n },\n groupAndRow: {\n ...relsData,\n array: [{ ...relsData }],\n },\n groupLocalized: {\n en: {\n ...relsData,\n array: [{ ...relsData }],\n },\n es: {\n ...relsData,\n array: [{ ...relsData }],\n },\n },\n tab: { ...relsData },\n tabLocalized: {\n en: { ...relsData },\n es: { ...relsData },\n },\n nestedTab: { ...relsData },\n }\n const flattenValuesBefore = Object.values(flattenRelationshipValues(data))\n\n const mockAdapter = {\n payload: {\n config,\n },\n } as MongooseAdapter\n\n transform({\n adapter: mockAdapter,\n operation: 'write',\n data,\n fields: config.collections[0].fields,\n })\n if ('updatedAt' in data) {\n delete data.updatedAt\n }\n\n const flattenValuesAfter = Object.values(flattenRelationshipValues(data))\n\n flattenValuesAfter.forEach((value, i) => {\n expect(value).toBeInstanceOf(Types.ObjectId)\n expect(flattenValuesBefore[i]).toBe(value.toHexString())\n })\n })\n\n it('should strip null elements from array and blocks fields on read', () => {\n const data: Record<string, any> = {\n _id: new Types.ObjectId(),\n array: [null, { rel_1: new Types.ObjectId() }],\n arrayLocalized: {\n en: [null, { rel_1: new Types.ObjectId() }],\n },\n blocks: [null, { blockType: 'block', rel_1: new Types.ObjectId() }],\n }\n\n const mockAdapter = {\n allowAdditionalKeys: false,\n payload: {\n config,\n },\n } as MongooseAdapter\n\n expect(() =>\n transform({\n adapter: mockAdapter,\n operation: 'read',\n data,\n fields: config.collections[0].fields,\n }),\n ).not.toThrow()\n\n expect(data.array).toHaveLength(1)\n expect(data.array[0]).toMatchObject({})\n expect(data.arrayLocalized.en).toHaveLength(1)\n expect(data.blocks).toHaveLength(1)\n expect(data.blocks[0].blockType).toBe('block')\n })\n\n it('should skip null entries in hasMany relationship arrays without coercing them', () => {\n const validId = new Types.ObjectId()\n const data: Record<string, any> = {\n _id: new Types.ObjectId(),\n rel_2: [null, validId],\n }\n\n const mockAdapter = {\n allowAdditionalKeys: false,\n payload: {\n config,\n },\n } as MongooseAdapter\n\n expect(() =>\n transform({\n adapter: mockAdapter,\n operation: 'read',\n data,\n fields: config.collections[0].fields,\n }),\n ).not.toThrow()\n\n expect(data.rel_2[0]).toBeNull()\n expect(data.rel_2[1]).toBe(validId.toHexString())\n })\n})\n"],"names":["describe","it","expect","flattenAllFields","Types","transform","flattenRelationshipValues","obj","prefix","Object","keys","reduce","acc","key","fullKey","value","ObjectId","assign","endsWith","relsFields","name","type","relationTo","localized","hasMany","referenceBlockFields","fields","config","blocks","slug","flattenedFields","collections","tabs","label","localization","defaultLocale","localeCodes","locales","code","relsData","rel_1","toHexString","rel_1_l","en","es","rel_2","rel_2_l","rel_3","rel_3_l","rel_4","rel_4_l","data","array","blockType","arrayLocalized","group","referencedBlocks","groupAndRow","groupLocalized","tab","tabLocalized","nestedTab","flattenValuesBefore","values","mockAdapter","payload","adapter","operation","updatedAt","flattenValuesAfter","forEach","i","toBeInstanceOf","toBe","_id","allowAdditionalKeys","not","toThrow","toHaveLength","toMatchObject","validId","toBeNull"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@payloadcms/db-mongodb",
3
- "version": "4.0.0-internal.9726517",
3
+ "version": "4.0.0-internal.a1317b2",
4
4
  "description": "The officially supported MongoDB database adapter for Payload",
5
5
  "homepage": "https://payloadcms.com",
6
6
  "repository": {
@@ -43,7 +43,7 @@
43
43
  "predefinedMigrations"
44
44
  ],
45
45
  "dependencies": {
46
- "mongoose": "8.22.1",
46
+ "mongoose": "9.9.2",
47
47
  "mongoose-paginate-v2": "1.9.4",
48
48
  "prompts": "2.4.2",
49
49
  "uuid": "14.0.0"
@@ -51,13 +51,13 @@
51
51
  "devDependencies": {
52
52
  "@types/mongoose-aggregate-paginate-v2": "1.0.12",
53
53
  "@types/prompts": "^2.4.5",
54
- "mongodb": "6.20.0",
54
+ "mongodb": "7.5.0",
55
55
  "mongodb-memory-server": "10.1.4",
56
56
  "@payloadcms/eslint-config": "3.28.0",
57
- "payload": "4.0.0-internal.9726517"
57
+ "payload": "4.0.0-internal.a1317b2"
58
58
  },
59
59
  "peerDependencies": {
60
- "payload": "4.0.0-internal.9726517"
60
+ "payload": "4.0.0-internal.a1317b2"
61
61
  },
62
62
  "scripts": {
63
63
  "build": "pnpm build:types && pnpm build:swc",
@@ -1,5 +0,0 @@
1
- declare const imports = "import { migrateJobsProcessingLease } from '@payloadcms/db-mongodb/migration-utils'";
2
- declare const upSQL = "await migrateJobsProcessingLease({\n direction: 'up',\n req,\n})";
3
- declare const downSQL = "await migrateJobsProcessingLease({\n direction: 'down',\n req,\n})";
4
- export { downSQL, imports, upSQL };
5
- //# sourceMappingURL=jobs-processing-lease-v4.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"jobs-processing-lease-v4.d.ts","sourceRoot":"","sources":["../../src/predefinedMigrations/jobs-processing-lease-v4.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,OAAO,wFAAwF,CAAA;AACrG,QAAA,MAAM,KAAK,uEAGR,CAAA;AACH,QAAA,MAAM,OAAO,yEAGV,CAAA;AAEH,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA"}
@@ -1,12 +0,0 @@
1
- const imports = `import { migrateJobsProcessingLease } from '@payloadcms/db-mongodb/migration-utils'`;
2
- const upSQL = `await migrateJobsProcessingLease({
3
- direction: 'up',
4
- req,
5
- })`;
6
- const downSQL = `await migrateJobsProcessingLease({
7
- direction: 'down',
8
- req,
9
- })`;
10
- export { downSQL, imports, upSQL };
11
-
12
- //# sourceMappingURL=jobs-processing-lease-v4.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/predefinedMigrations/jobs-processing-lease-v4.ts"],"sourcesContent":["const imports = `import { migrateJobsProcessingLease } from '@payloadcms/db-mongodb/migration-utils'`\nconst upSQL = `await migrateJobsProcessingLease({\n direction: 'up',\n req,\n})`\nconst downSQL = `await migrateJobsProcessingLease({\n direction: 'down',\n req,\n})`\n\nexport { downSQL, imports, upSQL }\n"],"names":["imports","upSQL","downSQL"],"mappings":"AAAA,MAAMA,UAAU,CAAC,mFAAmF,CAAC;AACrG,MAAMC,QAAQ,CAAC;;;EAGb,CAAC;AACH,MAAMC,UAAU,CAAC;;;EAGf,CAAC;AAEH,SAASA,OAAO,EAAEF,OAAO,EAAEC,KAAK,GAAE"}
@@ -1,6 +0,0 @@
1
- import type { PayloadRequest } from 'payload';
2
- export declare function migrateJobsProcessingLease({ direction, req, }: {
3
- direction: 'down' | 'up';
4
- req: PayloadRequest;
5
- }): Promise<void>;
6
- //# sourceMappingURL=migrateJobsProcessingLease.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"migrateJobsProcessingLease.d.ts","sourceRoot":"","sources":["../../src/predefinedMigrations/migrateJobsProcessingLease.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAO7C,wBAAsB,0BAA0B,CAAC,EAC/C,SAAS,EACT,GAAG,GACJ,EAAE;IACD,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,GAAG,EAAE,cAAc,CAAA;CACpB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsChB"}
@@ -1,81 +0,0 @@
1
- import { getCollection } from '../utilities/getEntity.js';
2
- import { getSession } from '../utilities/getSession.js';
3
- export async function migrateJobsProcessingLease({ direction, req }) {
4
- const adapter = req.payload.db;
5
- const { Model } = getCollection({
6
- adapter,
7
- collectionSlug: 'payload-jobs'
8
- });
9
- const session = await getSession(adapter, req);
10
- const indexes = await Model.collection.indexes({
11
- session
12
- });
13
- if (direction === 'up') {
14
- await Model.collection.updateMany({
15
- processing: true
16
- }, {
17
- $set: {
18
- processingUntil: new Date(0)
19
- }
20
- }, {
21
- session
22
- });
23
- await Model.collection.updateMany({}, {
24
- $unset: {
25
- processing: ''
26
- }
27
- }, {
28
- session
29
- });
30
- const processingIndex = indexes.find((index)=>index.key.processing === 1);
31
- if (processingIndex?.name) {
32
- await Model.collection.dropIndex(processingIndex.name, {
33
- session
34
- });
35
- }
36
- await Model.collection.createIndex({
37
- processingUntil: 1
38
- }, {
39
- session
40
- });
41
- return;
42
- }
43
- await Model.collection.updateMany({}, {
44
- $set: {
45
- processing: false
46
- }
47
- }, {
48
- session
49
- });
50
- await Model.collection.updateMany({
51
- processingUntil: {
52
- $ne: null
53
- }
54
- }, {
55
- $set: {
56
- processing: true
57
- }
58
- }, {
59
- session
60
- });
61
- await Model.collection.updateMany({}, {
62
- $unset: {
63
- processingUntil: ''
64
- }
65
- }, {
66
- session
67
- });
68
- const processingUntilIndex = indexes.find((index)=>index.key.processingUntil === 1);
69
- if (processingUntilIndex?.name) {
70
- await Model.collection.dropIndex(processingUntilIndex.name, {
71
- session
72
- });
73
- }
74
- await Model.collection.createIndex({
75
- processing: 1
76
- }, {
77
- session
78
- });
79
- }
80
-
81
- //# sourceMappingURL=migrateJobsProcessingLease.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/predefinedMigrations/migrateJobsProcessingLease.ts"],"sourcesContent":["import type { PayloadRequest } from 'payload'\n\nimport type { MongooseAdapter } from '../index.js'\n\nimport { getCollection } from '../utilities/getEntity.js'\nimport { getSession } from '../utilities/getSession.js'\n\nexport async function migrateJobsProcessingLease({\n direction,\n req,\n}: {\n direction: 'down' | 'up'\n req: PayloadRequest\n}): Promise<void> {\n const adapter = req.payload.db as MongooseAdapter\n const { Model } = getCollection({ adapter, collectionSlug: 'payload-jobs' })\n const session = await getSession(adapter, req)\n const indexes = await Model.collection.indexes({ session })\n\n if (direction === 'up') {\n await Model.collection.updateMany(\n { processing: true },\n { $set: { processingUntil: new Date(0) } },\n { session },\n )\n await Model.collection.updateMany({}, { $unset: { processing: '' } }, { session })\n\n const processingIndex = indexes.find((index) => index.key.processing === 1)\n if (processingIndex?.name) {\n await Model.collection.dropIndex(processingIndex.name, { session })\n }\n\n await Model.collection.createIndex({ processingUntil: 1 }, { session })\n\n return\n }\n\n await Model.collection.updateMany({}, { $set: { processing: false } }, { session })\n await Model.collection.updateMany(\n { processingUntil: { $ne: null } },\n { $set: { processing: true } },\n { session },\n )\n await Model.collection.updateMany({}, { $unset: { processingUntil: '' } }, { session })\n\n const processingUntilIndex = indexes.find((index) => index.key.processingUntil === 1)\n if (processingUntilIndex?.name) {\n await Model.collection.dropIndex(processingUntilIndex.name, { session })\n }\n\n await Model.collection.createIndex({ processing: 1 }, { session })\n}\n"],"names":["getCollection","getSession","migrateJobsProcessingLease","direction","req","adapter","payload","db","Model","collectionSlug","session","indexes","collection","updateMany","processing","$set","processingUntil","Date","$unset","processingIndex","find","index","key","name","dropIndex","createIndex","$ne","processingUntilIndex"],"mappings":"AAIA,SAASA,aAAa,QAAQ,4BAA2B;AACzD,SAASC,UAAU,QAAQ,6BAA4B;AAEvD,OAAO,eAAeC,2BAA2B,EAC/CC,SAAS,EACTC,GAAG,EAIJ;IACC,MAAMC,UAAUD,IAAIE,OAAO,CAACC,EAAE;IAC9B,MAAM,EAAEC,KAAK,EAAE,GAAGR,cAAc;QAAEK;QAASI,gBAAgB;IAAe;IAC1E,MAAMC,UAAU,MAAMT,WAAWI,SAASD;IAC1C,MAAMO,UAAU,MAAMH,MAAMI,UAAU,CAACD,OAAO,CAAC;QAAED;IAAQ;IAEzD,IAAIP,cAAc,MAAM;QACtB,MAAMK,MAAMI,UAAU,CAACC,UAAU,CAC/B;YAAEC,YAAY;QAAK,GACnB;YAAEC,MAAM;gBAAEC,iBAAiB,IAAIC,KAAK;YAAG;QAAE,GACzC;YAAEP;QAAQ;QAEZ,MAAMF,MAAMI,UAAU,CAACC,UAAU,CAAC,CAAC,GAAG;YAAEK,QAAQ;gBAAEJ,YAAY;YAAG;QAAE,GAAG;YAAEJ;QAAQ;QAEhF,MAAMS,kBAAkBR,QAAQS,IAAI,CAAC,CAACC,QAAUA,MAAMC,GAAG,CAACR,UAAU,KAAK;QACzE,IAAIK,iBAAiBI,MAAM;YACzB,MAAMf,MAAMI,UAAU,CAACY,SAAS,CAACL,gBAAgBI,IAAI,EAAE;gBAAEb;YAAQ;QACnE;QAEA,MAAMF,MAAMI,UAAU,CAACa,WAAW,CAAC;YAAET,iBAAiB;QAAE,GAAG;YAAEN;QAAQ;QAErE;IACF;IAEA,MAAMF,MAAMI,UAAU,CAACC,UAAU,CAAC,CAAC,GAAG;QAAEE,MAAM;YAAED,YAAY;QAAM;IAAE,GAAG;QAAEJ;IAAQ;IACjF,MAAMF,MAAMI,UAAU,CAACC,UAAU,CAC/B;QAAEG,iBAAiB;YAAEU,KAAK;QAAK;IAAE,GACjC;QAAEX,MAAM;YAAED,YAAY;QAAK;IAAE,GAC7B;QAAEJ;IAAQ;IAEZ,MAAMF,MAAMI,UAAU,CAACC,UAAU,CAAC,CAAC,GAAG;QAAEK,QAAQ;YAAEF,iBAAiB;QAAG;IAAE,GAAG;QAAEN;IAAQ;IAErF,MAAMiB,uBAAuBhB,QAAQS,IAAI,CAAC,CAACC,QAAUA,MAAMC,GAAG,CAACN,eAAe,KAAK;IACnF,IAAIW,sBAAsBJ,MAAM;QAC9B,MAAMf,MAAMI,UAAU,CAACY,SAAS,CAACG,qBAAqBJ,IAAI,EAAE;YAAEb;QAAQ;IACxE;IAEA,MAAMF,MAAMI,UAAU,CAACa,WAAW,CAAC;QAAEX,YAAY;IAAE,GAAG;QAAEJ;IAAQ;AAClE"}
@@ -1,130 +0,0 @@
1
- import { afterEach, describe, expect, it, vi } from 'vitest';
2
- const mocks = vi.hoisted(()=>({
3
- collection: {
4
- createIndex: vi.fn().mockResolvedValue(undefined),
5
- dropIndex: vi.fn().mockResolvedValue(undefined),
6
- indexes: vi.fn(),
7
- updateMany: vi.fn().mockResolvedValue(undefined)
8
- },
9
- getSession: vi.fn().mockResolvedValue(undefined)
10
- }));
11
- vi.mock('../utilities/getEntity.js', ()=>({
12
- getCollection: ()=>({
13
- Model: {
14
- collection: mocks.collection
15
- }
16
- })
17
- }));
18
- vi.mock('../utilities/getSession.js', ()=>({
19
- getSession: mocks.getSession
20
- }));
21
- import { migrateJobsProcessingLease } from './migrateJobsProcessingLease.js';
22
- describe('MongoDB jobs processing lease migration', ()=>{
23
- const req = {
24
- payload: {
25
- db: {}
26
- }
27
- };
28
- afterEach(()=>{
29
- vi.clearAllMocks();
30
- });
31
- it('should migrate active jobs to expired leases', async ()=>{
32
- mocks.collection.indexes.mockResolvedValue([
33
- {
34
- key: {
35
- _id: 1
36
- },
37
- name: '_id_'
38
- },
39
- {
40
- key: {
41
- processing: 1
42
- },
43
- name: 'processing_1'
44
- }
45
- ]);
46
- await migrateJobsProcessingLease({
47
- direction: 'up',
48
- req
49
- });
50
- expect(mocks.collection.updateMany).toHaveBeenNthCalledWith(1, {
51
- processing: true
52
- }, {
53
- $set: {
54
- processingUntil: new Date(0)
55
- }
56
- }, {
57
- session: undefined
58
- });
59
- expect(mocks.collection.updateMany).toHaveBeenNthCalledWith(2, {}, {
60
- $unset: {
61
- processing: ''
62
- }
63
- }, {
64
- session: undefined
65
- });
66
- expect(mocks.collection.dropIndex).toHaveBeenCalledWith('processing_1', {
67
- session: undefined
68
- });
69
- expect(mocks.collection.createIndex).toHaveBeenCalledWith({
70
- processingUntil: 1
71
- }, {
72
- session: undefined
73
- });
74
- });
75
- it('should restore the processing field when migrating down', async ()=>{
76
- mocks.collection.indexes.mockResolvedValue([
77
- {
78
- key: {
79
- _id: 1
80
- },
81
- name: '_id_'
82
- },
83
- {
84
- key: {
85
- processingUntil: 1
86
- },
87
- name: 'processingUntil_1'
88
- }
89
- ]);
90
- await migrateJobsProcessingLease({
91
- direction: 'down',
92
- req
93
- });
94
- expect(mocks.collection.updateMany).toHaveBeenNthCalledWith(1, {}, {
95
- $set: {
96
- processing: false
97
- }
98
- }, {
99
- session: undefined
100
- });
101
- expect(mocks.collection.updateMany).toHaveBeenNthCalledWith(2, {
102
- processingUntil: {
103
- $ne: null
104
- }
105
- }, {
106
- $set: {
107
- processing: true
108
- }
109
- }, {
110
- session: undefined
111
- });
112
- expect(mocks.collection.updateMany).toHaveBeenNthCalledWith(3, {}, {
113
- $unset: {
114
- processingUntil: ''
115
- }
116
- }, {
117
- session: undefined
118
- });
119
- expect(mocks.collection.dropIndex).toHaveBeenCalledWith('processingUntil_1', {
120
- session: undefined
121
- });
122
- expect(mocks.collection.createIndex).toHaveBeenCalledWith({
123
- processing: 1
124
- }, {
125
- session: undefined
126
- });
127
- });
128
- });
129
-
130
- //# sourceMappingURL=migrateJobsProcessingLease.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/predefinedMigrations/migrateJobsProcessingLease.spec.ts"],"sourcesContent":["import type { PayloadRequest } from 'payload'\n\nimport { afterEach, describe, expect, it, vi } from 'vitest'\n\nconst mocks = vi.hoisted(() => ({\n collection: {\n createIndex: vi.fn().mockResolvedValue(undefined),\n dropIndex: vi.fn().mockResolvedValue(undefined),\n indexes: vi.fn(),\n updateMany: vi.fn().mockResolvedValue(undefined),\n },\n getSession: vi.fn().mockResolvedValue(undefined),\n}))\n\nvi.mock('../utilities/getEntity.js', () => ({\n getCollection: () => ({ Model: { collection: mocks.collection } }),\n}))\n\nvi.mock('../utilities/getSession.js', () => ({\n getSession: mocks.getSession,\n}))\n\nimport { migrateJobsProcessingLease } from './migrateJobsProcessingLease.js'\n\ndescribe('MongoDB jobs processing lease migration', () => {\n const req = { payload: { db: {} } } as PayloadRequest\n\n afterEach(() => {\n vi.clearAllMocks()\n })\n\n it('should migrate active jobs to expired leases', async () => {\n mocks.collection.indexes.mockResolvedValue([\n { key: { _id: 1 }, name: '_id_' },\n { key: { processing: 1 }, name: 'processing_1' },\n ])\n\n await migrateJobsProcessingLease({ direction: 'up', req })\n\n expect(mocks.collection.updateMany).toHaveBeenNthCalledWith(\n 1,\n { processing: true },\n { $set: { processingUntil: new Date(0) } },\n { session: undefined },\n )\n expect(mocks.collection.updateMany).toHaveBeenNthCalledWith(\n 2,\n {},\n { $unset: { processing: '' } },\n { session: undefined },\n )\n expect(mocks.collection.dropIndex).toHaveBeenCalledWith('processing_1', {\n session: undefined,\n })\n expect(mocks.collection.createIndex).toHaveBeenCalledWith(\n { processingUntil: 1 },\n { session: undefined },\n )\n })\n\n it('should restore the processing field when migrating down', async () => {\n mocks.collection.indexes.mockResolvedValue([\n { key: { _id: 1 }, name: '_id_' },\n { key: { processingUntil: 1 }, name: 'processingUntil_1' },\n ])\n\n await migrateJobsProcessingLease({ direction: 'down', req })\n\n expect(mocks.collection.updateMany).toHaveBeenNthCalledWith(\n 1,\n {},\n { $set: { processing: false } },\n { session: undefined },\n )\n expect(mocks.collection.updateMany).toHaveBeenNthCalledWith(\n 2,\n { processingUntil: { $ne: null } },\n { $set: { processing: true } },\n { session: undefined },\n )\n expect(mocks.collection.updateMany).toHaveBeenNthCalledWith(\n 3,\n {},\n { $unset: { processingUntil: '' } },\n { session: undefined },\n )\n expect(mocks.collection.dropIndex).toHaveBeenCalledWith('processingUntil_1', {\n session: undefined,\n })\n expect(mocks.collection.createIndex).toHaveBeenCalledWith(\n { processing: 1 },\n { session: undefined },\n )\n })\n})\n"],"names":["afterEach","describe","expect","it","vi","mocks","hoisted","collection","createIndex","fn","mockResolvedValue","undefined","dropIndex","indexes","updateMany","getSession","mock","getCollection","Model","migrateJobsProcessingLease","req","payload","db","clearAllMocks","key","_id","name","processing","direction","toHaveBeenNthCalledWith","$set","processingUntil","Date","session","$unset","toHaveBeenCalledWith","$ne"],"mappings":"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"}