@payloadcms/db-mongodb 3.58.0 → 3.59.0-internal.56a1b3b

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.
@@ -1 +1 @@
1
- {"version":3,"file":"updateJobs.d.ts","sourceRoot":"","sources":["../src/updateJobs.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAO,UAAU,EAAS,MAAM,SAAS,CAAA;AAWrD,eAAO,MAAM,UAAU,EAAE,UA0HxB,CAAA"}
1
+ {"version":3,"file":"updateJobs.d.ts","sourceRoot":"","sources":["../src/updateJobs.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAO,UAAU,EAAS,MAAM,SAAS,CAAA;AAWrD,eAAO,MAAM,UAAU,EAAE,UAoIxB,CAAA"}
@@ -40,8 +40,12 @@ export const updateJobs = async function updateMany({ id, data, limit, req, retu
40
40
  let updateData = data;
41
41
  const $inc = {};
42
42
  const $push = {};
43
+ const $addToSet = {};
44
+ const $pull = {};
43
45
  transform({
46
+ $addToSet,
44
47
  $inc,
48
+ $pull,
45
49
  $push,
46
50
  adapter: this,
47
51
  data,
@@ -55,6 +59,12 @@ export const updateJobs = async function updateMany({ id, data, limit, req, retu
55
59
  if (Object.keys($push).length) {
56
60
  updateOps.$push = $push;
57
61
  }
62
+ if (Object.keys($addToSet).length) {
63
+ updateOps.$addToSet = $addToSet;
64
+ }
65
+ if (Object.keys($pull).length) {
66
+ updateOps.$pull = $pull;
67
+ }
58
68
  if (Object.keys(updateOps).length) {
59
69
  updateOps.$set = updateData;
60
70
  updateData = updateOps;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/updateJobs.ts"],"sourcesContent":["import type { MongooseUpdateQueryOptions, UpdateQuery } from 'mongoose'\nimport type { Job, UpdateJobs, Where } from 'payload'\n\nimport type { MongooseAdapter } from './index.js'\n\nimport { buildQuery } from './queries/buildQuery.js'\nimport { buildSortParam } from './queries/buildSortParam.js'\nimport { getCollection } from './utilities/getEntity.js'\nimport { getSession } from './utilities/getSession.js'\nimport { handleError } from './utilities/handleError.js'\nimport { transform } from './utilities/transform.js'\n\nexport const updateJobs: UpdateJobs = async function updateMany(\n this: MongooseAdapter,\n { id, data, limit, req, returning, sort: sortArg, where: whereArg },\n) {\n if (\n !(data?.log as object[])?.length &&\n !(data.log && typeof data.log === 'object' && '$push' in data.log)\n ) {\n delete data.log\n }\n\n const where = id ? { id: { equals: id } } : (whereArg as Where)\n\n const { collectionConfig, Model } = getCollection({\n adapter: this,\n collectionSlug: 'payload-jobs',\n })\n\n const sort: Record<string, unknown> | undefined = buildSortParam({\n adapter: this,\n config: this.payload.config,\n fields: collectionConfig.flattenedFields,\n sort: sortArg || collectionConfig.defaultSort,\n timestamps: true,\n })\n\n const options: MongooseUpdateQueryOptions = {\n lean: true,\n new: true,\n session: await getSession(this, req),\n // Timestamps are manually added by the write transform\n timestamps: false,\n }\n\n let query = await buildQuery({\n adapter: this,\n collectionSlug: collectionConfig.slug,\n fields: collectionConfig.flattenedFields,\n where,\n })\n\n let updateData: UpdateQuery<any> = data\n\n const $inc: Record<string, number> = {}\n const $push: Record<string, { $each: any[] } | any> = {}\n\n transform({\n $inc,\n $push,\n adapter: this,\n data,\n fields: collectionConfig.fields,\n operation: 'write',\n })\n\n const updateOps: UpdateQuery<any> = {}\n\n if (Object.keys($inc).length) {\n updateOps.$inc = $inc\n }\n if (Object.keys($push).length) {\n updateOps.$push = $push\n }\n if (Object.keys(updateOps).length) {\n updateOps.$set = updateData\n updateData = updateOps\n }\n\n let result: Job[] = []\n\n try {\n if (id) {\n if (returning === false) {\n await Model.updateOne(query, updateData, options)\n transform({ adapter: this, data, fields: collectionConfig.fields, operation: 'read' })\n\n return null\n } else {\n const doc = await Model.findOneAndUpdate(query, updateData, options)\n result = doc ? [doc] : []\n }\n } else {\n if (typeof limit === 'number' && limit > 0) {\n const documentsToUpdate = await Model.find(\n query,\n {},\n { ...options, limit, projection: { _id: 1 }, sort },\n )\n if (documentsToUpdate.length === 0) {\n return null\n }\n\n query = { _id: { $in: documentsToUpdate.map((doc) => doc._id) } }\n }\n\n await Model.updateMany(query, updateData, options)\n\n if (returning === false) {\n return null\n }\n\n result = await Model.find(\n query,\n {},\n {\n ...options,\n sort,\n },\n )\n }\n } catch (error) {\n handleError({ collection: collectionConfig.slug, error, req })\n }\n\n transform({\n adapter: this,\n data: result,\n fields: collectionConfig.fields,\n operation: 'read',\n })\n\n return result\n}\n"],"names":["buildQuery","buildSortParam","getCollection","getSession","handleError","transform","updateJobs","updateMany","id","data","limit","req","returning","sort","sortArg","where","whereArg","log","length","equals","collectionConfig","Model","adapter","collectionSlug","config","payload","fields","flattenedFields","defaultSort","timestamps","options","lean","new","session","query","slug","updateData","$inc","$push","operation","updateOps","Object","keys","$set","result","updateOne","doc","findOneAndUpdate","documentsToUpdate","find","projection","_id","$in","map","error","collection"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/updateJobs.ts"],"sourcesContent":["import type { MongooseUpdateQueryOptions, UpdateQuery } from 'mongoose'\nimport type { Job, UpdateJobs, Where } from 'payload'\n\nimport type { MongooseAdapter } from './index.js'\n\nimport { buildQuery } from './queries/buildQuery.js'\nimport { buildSortParam } from './queries/buildSortParam.js'\nimport { getCollection } from './utilities/getEntity.js'\nimport { getSession } from './utilities/getSession.js'\nimport { handleError } from './utilities/handleError.js'\nimport { transform } from './utilities/transform.js'\n\nexport const updateJobs: UpdateJobs = async function updateMany(\n this: MongooseAdapter,\n { id, data, limit, req, returning, sort: sortArg, where: whereArg },\n) {\n if (\n !(data?.log as object[])?.length &&\n !(data.log && typeof data.log === 'object' && '$push' in data.log)\n ) {\n delete data.log\n }\n\n const where = id ? { id: { equals: id } } : (whereArg as Where)\n\n const { collectionConfig, Model } = getCollection({\n adapter: this,\n collectionSlug: 'payload-jobs',\n })\n\n const sort: Record<string, unknown> | undefined = buildSortParam({\n adapter: this,\n config: this.payload.config,\n fields: collectionConfig.flattenedFields,\n sort: sortArg || collectionConfig.defaultSort,\n timestamps: true,\n })\n\n const options: MongooseUpdateQueryOptions = {\n lean: true,\n new: true,\n session: await getSession(this, req),\n // Timestamps are manually added by the write transform\n timestamps: false,\n }\n\n let query = await buildQuery({\n adapter: this,\n collectionSlug: collectionConfig.slug,\n fields: collectionConfig.flattenedFields,\n where,\n })\n\n let updateData: UpdateQuery<any> = data\n\n const $inc: Record<string, number> = {}\n const $push: Record<string, { $each: any[] } | any> = {}\n const $addToSet: Record<string, { $each: any[] } | any> = {}\n const $pull: Record<string, { $in: any[] } | any> = {}\n\n transform({\n $addToSet,\n $inc,\n $pull,\n $push,\n adapter: this,\n data,\n fields: collectionConfig.fields,\n operation: 'write',\n })\n\n const updateOps: UpdateQuery<any> = {}\n\n if (Object.keys($inc).length) {\n updateOps.$inc = $inc\n }\n if (Object.keys($push).length) {\n updateOps.$push = $push\n }\n if (Object.keys($addToSet).length) {\n updateOps.$addToSet = $addToSet\n }\n if (Object.keys($pull).length) {\n updateOps.$pull = $pull\n }\n if (Object.keys(updateOps).length) {\n updateOps.$set = updateData\n updateData = updateOps\n }\n\n let result: Job[] = []\n\n try {\n if (id) {\n if (returning === false) {\n await Model.updateOne(query, updateData, options)\n transform({ adapter: this, data, fields: collectionConfig.fields, operation: 'read' })\n\n return null\n } else {\n const doc = await Model.findOneAndUpdate(query, updateData, options)\n result = doc ? [doc] : []\n }\n } else {\n if (typeof limit === 'number' && limit > 0) {\n const documentsToUpdate = await Model.find(\n query,\n {},\n { ...options, limit, projection: { _id: 1 }, sort },\n )\n if (documentsToUpdate.length === 0) {\n return null\n }\n\n query = { _id: { $in: documentsToUpdate.map((doc) => doc._id) } }\n }\n\n await Model.updateMany(query, updateData, options)\n\n if (returning === false) {\n return null\n }\n\n result = await Model.find(\n query,\n {},\n {\n ...options,\n sort,\n },\n )\n }\n } catch (error) {\n handleError({ collection: collectionConfig.slug, error, req })\n }\n\n transform({\n adapter: this,\n data: result,\n fields: collectionConfig.fields,\n operation: 'read',\n })\n\n return result\n}\n"],"names":["buildQuery","buildSortParam","getCollection","getSession","handleError","transform","updateJobs","updateMany","id","data","limit","req","returning","sort","sortArg","where","whereArg","log","length","equals","collectionConfig","Model","adapter","collectionSlug","config","payload","fields","flattenedFields","defaultSort","timestamps","options","lean","new","session","query","slug","updateData","$inc","$push","$addToSet","$pull","operation","updateOps","Object","keys","$set","result","updateOne","doc","findOneAndUpdate","documentsToUpdate","find","projection","_id","$in","map","error","collection"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"updateMany.d.ts","sourceRoot":"","sources":["../src/updateMany.ts"],"names":[],"mappings":"AAEA,OAAO,EAA2B,KAAK,UAAU,EAAE,MAAM,SAAS,CAAA;AAYlE,eAAO,MAAM,UAAU,EAAE,UAoGxB,CAAA"}
1
+ {"version":3,"file":"updateMany.d.ts","sourceRoot":"","sources":["../src/updateMany.ts"],"names":[],"mappings":"AAEA,OAAO,EAA2B,KAAK,UAAU,EAAE,MAAM,SAAS,CAAA;AAYlE,eAAO,MAAM,UAAU,EAAE,UAqIxB,CAAA"}
@@ -47,12 +47,37 @@ export const updateMany = async function updateMany({ collection: collectionSlug
47
47
  locale,
48
48
  where
49
49
  });
50
+ const $inc = {};
51
+ const $push = {};
52
+ const $addToSet = {};
53
+ const $pull = {};
50
54
  transform({
55
+ $addToSet,
56
+ $inc,
57
+ $pull,
58
+ $push,
51
59
  adapter: this,
52
60
  data,
53
61
  fields: collectionConfig.fields,
54
62
  operation: 'write'
55
63
  });
64
+ const updateOps = {};
65
+ if (Object.keys($inc).length) {
66
+ updateOps.$inc = $inc;
67
+ }
68
+ if (Object.keys($push).length) {
69
+ updateOps.$push = $push;
70
+ }
71
+ if (Object.keys($addToSet).length) {
72
+ updateOps.$addToSet = $addToSet;
73
+ }
74
+ if (Object.keys($pull).length) {
75
+ updateOps.$pull = $pull;
76
+ }
77
+ if (Object.keys(updateOps).length) {
78
+ updateOps.$set = data;
79
+ data = updateOps;
80
+ }
56
81
  try {
57
82
  if (typeof limit === 'number' && limit > 0) {
58
83
  const documentsToUpdate = await Model.find(query, {}, {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/updateMany.ts"],"sourcesContent":["import type { MongooseUpdateQueryOptions } from 'mongoose'\n\nimport { flattenWhereToOperators, type UpdateMany } from 'payload'\n\nimport type { MongooseAdapter } from './index.js'\n\nimport { buildQuery } from './queries/buildQuery.js'\nimport { buildSortParam } from './queries/buildSortParam.js'\nimport { buildProjectionFromSelect } from './utilities/buildProjectionFromSelect.js'\nimport { getCollection } from './utilities/getEntity.js'\nimport { getSession } from './utilities/getSession.js'\nimport { handleError } from './utilities/handleError.js'\nimport { transform } from './utilities/transform.js'\n\nexport const updateMany: UpdateMany = async function updateMany(\n this: MongooseAdapter,\n {\n collection: collectionSlug,\n data,\n limit,\n locale,\n options: optionsArgs = {},\n req,\n returning,\n select,\n sort: sortArg,\n where,\n },\n) {\n let hasNearConstraint = false\n\n if (where) {\n const constraints = flattenWhereToOperators(where)\n hasNearConstraint = constraints.some((prop) => Object.keys(prop).some((key) => key === 'near'))\n }\n\n const { collectionConfig, Model } = getCollection({ adapter: this, collectionSlug })\n\n let sort: Record<string, unknown> | undefined\n if (!hasNearConstraint) {\n sort = buildSortParam({\n adapter: this,\n config: this.payload.config,\n fields: collectionConfig.flattenedFields,\n locale,\n sort: sortArg || collectionConfig.defaultSort,\n timestamps: true,\n })\n }\n\n const options: MongooseUpdateQueryOptions = {\n ...optionsArgs,\n lean: true,\n new: true,\n projection: buildProjectionFromSelect({\n adapter: this,\n fields: collectionConfig.flattenedFields,\n select,\n }),\n session: await getSession(this, req),\n // Timestamps are manually added by the write transform\n timestamps: false,\n }\n\n let query = await buildQuery({\n adapter: this,\n collectionSlug,\n fields: collectionConfig.flattenedFields,\n locale,\n where,\n })\n\n transform({ adapter: this, data, fields: collectionConfig.fields, operation: 'write' })\n\n try {\n if (typeof limit === 'number' && limit > 0) {\n const documentsToUpdate = await Model.find(\n query,\n {},\n { ...options, limit, projection: { _id: 1 }, sort },\n )\n if (documentsToUpdate.length === 0) {\n return null\n }\n\n query = { _id: { $in: documentsToUpdate.map((doc) => doc._id) } }\n }\n\n await Model.updateMany(query, data, options)\n } catch (error) {\n handleError({ collection: collectionSlug, error, req })\n }\n\n if (returning === false) {\n return null\n }\n\n const result = await Model.find(\n query,\n {},\n {\n ...options,\n sort,\n },\n )\n\n transform({\n adapter: this,\n data: result,\n fields: collectionConfig.fields,\n operation: 'read',\n })\n\n return result\n}\n"],"names":["flattenWhereToOperators","buildQuery","buildSortParam","buildProjectionFromSelect","getCollection","getSession","handleError","transform","updateMany","collection","collectionSlug","data","limit","locale","options","optionsArgs","req","returning","select","sort","sortArg","where","hasNearConstraint","constraints","some","prop","Object","keys","key","collectionConfig","Model","adapter","config","payload","fields","flattenedFields","defaultSort","timestamps","lean","new","projection","session","query","operation","documentsToUpdate","find","_id","length","$in","map","doc","error","result"],"mappings":"AAEA,SAASA,uBAAuB,QAAyB,UAAS;AAIlE,SAASC,UAAU,QAAQ,0BAAyB;AACpD,SAASC,cAAc,QAAQ,8BAA6B;AAC5D,SAASC,yBAAyB,QAAQ,2CAA0C;AACpF,SAASC,aAAa,QAAQ,2BAA0B;AACxD,SAASC,UAAU,QAAQ,4BAA2B;AACtD,SAASC,WAAW,QAAQ,6BAA4B;AACxD,SAASC,SAAS,QAAQ,2BAA0B;AAEpD,OAAO,MAAMC,aAAyB,eAAeA,WAEnD,EACEC,YAAYC,cAAc,EAC1BC,IAAI,EACJC,KAAK,EACLC,MAAM,EACNC,SAASC,cAAc,CAAC,CAAC,EACzBC,GAAG,EACHC,SAAS,EACTC,MAAM,EACNC,MAAMC,OAAO,EACbC,KAAK,EACN;IAED,IAAIC,oBAAoB;IAExB,IAAID,OAAO;QACT,MAAME,cAAcvB,wBAAwBqB;QAC5CC,oBAAoBC,YAAYC,IAAI,CAAC,CAACC,OAASC,OAAOC,IAAI,CAACF,MAAMD,IAAI,CAAC,CAACI,MAAQA,QAAQ;IACzF;IAEA,MAAM,EAAEC,gBAAgB,EAAEC,KAAK,EAAE,GAAG1B,cAAc;QAAE2B,SAAS,IAAI;QAAErB;IAAe;IAElF,IAAIS;IACJ,IAAI,CAACG,mBAAmB;QACtBH,OAAOjB,eAAe;YACpB6B,SAAS,IAAI;YACbC,QAAQ,IAAI,CAACC,OAAO,CAACD,MAAM;YAC3BE,QAAQL,iBAAiBM,eAAe;YACxCtB;YACAM,MAAMC,WAAWS,iBAAiBO,WAAW;YAC7CC,YAAY;QACd;IACF;IAEA,MAAMvB,UAAsC;QAC1C,GAAGC,WAAW;QACduB,MAAM;QACNC,KAAK;QACLC,YAAYrC,0BAA0B;YACpC4B,SAAS,IAAI;YACbG,QAAQL,iBAAiBM,eAAe;YACxCjB;QACF;QACAuB,SAAS,MAAMpC,WAAW,IAAI,EAAEW;QAChC,uDAAuD;QACvDqB,YAAY;IACd;IAEA,IAAIK,QAAQ,MAAMzC,WAAW;QAC3B8B,SAAS,IAAI;QACbrB;QACAwB,QAAQL,iBAAiBM,eAAe;QACxCtB;QACAQ;IACF;IAEAd,UAAU;QAAEwB,SAAS,IAAI;QAAEpB;QAAMuB,QAAQL,iBAAiBK,MAAM;QAAES,WAAW;IAAQ;IAErF,IAAI;QACF,IAAI,OAAO/B,UAAU,YAAYA,QAAQ,GAAG;YAC1C,MAAMgC,oBAAoB,MAAMd,MAAMe,IAAI,CACxCH,OACA,CAAC,GACD;gBAAE,GAAG5B,OAAO;gBAAEF;gBAAO4B,YAAY;oBAAEM,KAAK;gBAAE;gBAAG3B;YAAK;YAEpD,IAAIyB,kBAAkBG,MAAM,KAAK,GAAG;gBAClC,OAAO;YACT;YAEAL,QAAQ;gBAAEI,KAAK;oBAAEE,KAAKJ,kBAAkBK,GAAG,CAAC,CAACC,MAAQA,IAAIJ,GAAG;gBAAE;YAAE;QAClE;QAEA,MAAMhB,MAAMtB,UAAU,CAACkC,OAAO/B,MAAMG;IACtC,EAAE,OAAOqC,OAAO;QACd7C,YAAY;YAAEG,YAAYC;YAAgByC;YAAOnC;QAAI;IACvD;IAEA,IAAIC,cAAc,OAAO;QACvB,OAAO;IACT;IAEA,MAAMmC,SAAS,MAAMtB,MAAMe,IAAI,CAC7BH,OACA,CAAC,GACD;QACE,GAAG5B,OAAO;QACVK;IACF;IAGFZ,UAAU;QACRwB,SAAS,IAAI;QACbpB,MAAMyC;QACNlB,QAAQL,iBAAiBK,MAAM;QAC/BS,WAAW;IACb;IAEA,OAAOS;AACT,EAAC"}
1
+ {"version":3,"sources":["../src/updateMany.ts"],"sourcesContent":["import type { MongooseUpdateQueryOptions, UpdateQuery } from 'mongoose'\n\nimport { flattenWhereToOperators, type UpdateMany } from 'payload'\n\nimport type { MongooseAdapter } from './index.js'\n\nimport { buildQuery } from './queries/buildQuery.js'\nimport { buildSortParam } from './queries/buildSortParam.js'\nimport { buildProjectionFromSelect } from './utilities/buildProjectionFromSelect.js'\nimport { getCollection } from './utilities/getEntity.js'\nimport { getSession } from './utilities/getSession.js'\nimport { handleError } from './utilities/handleError.js'\nimport { transform } from './utilities/transform.js'\n\nexport const updateMany: UpdateMany = async function updateMany(\n this: MongooseAdapter,\n {\n collection: collectionSlug,\n data,\n limit,\n locale,\n options: optionsArgs = {},\n req,\n returning,\n select,\n sort: sortArg,\n where,\n },\n) {\n let hasNearConstraint = false\n\n if (where) {\n const constraints = flattenWhereToOperators(where)\n hasNearConstraint = constraints.some((prop) => Object.keys(prop).some((key) => key === 'near'))\n }\n\n const { collectionConfig, Model } = getCollection({ adapter: this, collectionSlug })\n\n let sort: Record<string, unknown> | undefined\n if (!hasNearConstraint) {\n sort = buildSortParam({\n adapter: this,\n config: this.payload.config,\n fields: collectionConfig.flattenedFields,\n locale,\n sort: sortArg || collectionConfig.defaultSort,\n timestamps: true,\n })\n }\n\n const options: MongooseUpdateQueryOptions = {\n ...optionsArgs,\n lean: true,\n new: true,\n projection: buildProjectionFromSelect({\n adapter: this,\n fields: collectionConfig.flattenedFields,\n select,\n }),\n session: await getSession(this, req),\n // Timestamps are manually added by the write transform\n timestamps: false,\n }\n\n let query = await buildQuery({\n adapter: this,\n collectionSlug,\n fields: collectionConfig.flattenedFields,\n locale,\n where,\n })\n\n const $inc: Record<string, number> = {}\n const $push: Record<string, { $each: any[] } | any> = {}\n const $addToSet: Record<string, { $each: any[] } | any> = {}\n const $pull: Record<string, { $in: any[] } | any> = {}\n\n transform({\n $addToSet,\n $inc,\n $pull,\n $push,\n adapter: this,\n data,\n fields: collectionConfig.fields,\n operation: 'write',\n })\n\n const updateOps: UpdateQuery<any> = {}\n\n if (Object.keys($inc).length) {\n updateOps.$inc = $inc\n }\n if (Object.keys($push).length) {\n updateOps.$push = $push\n }\n if (Object.keys($addToSet).length) {\n updateOps.$addToSet = $addToSet\n }\n if (Object.keys($pull).length) {\n updateOps.$pull = $pull\n }\n if (Object.keys(updateOps).length) {\n updateOps.$set = data\n data = updateOps\n }\n\n try {\n if (typeof limit === 'number' && limit > 0) {\n const documentsToUpdate = await Model.find(\n query,\n {},\n { ...options, limit, projection: { _id: 1 }, sort },\n )\n if (documentsToUpdate.length === 0) {\n return null\n }\n\n query = { _id: { $in: documentsToUpdate.map((doc) => doc._id) } }\n }\n\n await Model.updateMany(query, data, options)\n } catch (error) {\n handleError({ collection: collectionSlug, error, req })\n }\n\n if (returning === false) {\n return null\n }\n\n const result = await Model.find(\n query,\n {},\n {\n ...options,\n sort,\n },\n )\n\n transform({\n adapter: this,\n data: result,\n fields: collectionConfig.fields,\n operation: 'read',\n })\n\n return result\n}\n"],"names":["flattenWhereToOperators","buildQuery","buildSortParam","buildProjectionFromSelect","getCollection","getSession","handleError","transform","updateMany","collection","collectionSlug","data","limit","locale","options","optionsArgs","req","returning","select","sort","sortArg","where","hasNearConstraint","constraints","some","prop","Object","keys","key","collectionConfig","Model","adapter","config","payload","fields","flattenedFields","defaultSort","timestamps","lean","new","projection","session","query","$inc","$push","$addToSet","$pull","operation","updateOps","length","$set","documentsToUpdate","find","_id","$in","map","doc","error","result"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"updateOne.d.ts","sourceRoot":"","sources":["../src/updateOne.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAWxC,eAAO,MAAM,SAAS,EAAE,SAiFvB,CAAA"}
1
+ {"version":3,"file":"updateOne.d.ts","sourceRoot":"","sources":["../src/updateOne.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAWxC,eAAO,MAAM,SAAS,EAAE,SAkGvB,CAAA"}
package/dist/updateOne.js CHANGED
@@ -39,8 +39,12 @@ export const updateOne = async function updateOne({ id, collection: collectionSl
39
39
  let updateData = data;
40
40
  const $inc = {};
41
41
  const $push = {};
42
+ const $addToSet = {};
43
+ const $pull = {};
42
44
  transform({
45
+ $addToSet,
43
46
  $inc,
47
+ $pull,
44
48
  $push,
45
49
  adapter: this,
46
50
  data,
@@ -54,6 +58,12 @@ export const updateOne = async function updateOne({ id, collection: collectionSl
54
58
  if (Object.keys($push).length) {
55
59
  updateOps.$push = $push;
56
60
  }
61
+ if (Object.keys($addToSet).length) {
62
+ updateOps.$addToSet = $addToSet;
63
+ }
64
+ if (Object.keys($pull).length) {
65
+ updateOps.$pull = $pull;
66
+ }
57
67
  if (Object.keys(updateOps).length) {
58
68
  updateOps.$set = updateData;
59
69
  updateData = updateOps;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/updateOne.ts"],"sourcesContent":["import type { MongooseUpdateQueryOptions, UpdateQuery } from 'mongoose'\nimport type { UpdateOne } from 'payload'\n\nimport type { MongooseAdapter } from './index.js'\n\nimport { buildQuery } from './queries/buildQuery.js'\nimport { buildProjectionFromSelect } from './utilities/buildProjectionFromSelect.js'\nimport { getCollection } from './utilities/getEntity.js'\nimport { getSession } from './utilities/getSession.js'\nimport { handleError } from './utilities/handleError.js'\nimport { transform } from './utilities/transform.js'\n\nexport const updateOne: UpdateOne = async function updateOne(\n this: MongooseAdapter,\n {\n id,\n collection: collectionSlug,\n data,\n locale,\n options: optionsArgs = {},\n req,\n returning,\n select,\n where: whereArg = {},\n },\n) {\n const { collectionConfig, Model } = getCollection({ adapter: this, collectionSlug })\n const where = id ? { id: { equals: id } } : whereArg\n const fields = collectionConfig.fields\n\n const options: MongooseUpdateQueryOptions = {\n ...optionsArgs,\n lean: true,\n new: true,\n projection: buildProjectionFromSelect({\n adapter: this,\n fields: collectionConfig.flattenedFields,\n select,\n }),\n session: await getSession(this, req),\n // Timestamps are manually added by the write transform\n timestamps: false,\n }\n\n const query = await buildQuery({\n adapter: this,\n collectionSlug,\n fields: collectionConfig.flattenedFields,\n locale,\n where,\n })\n\n let result\n\n let updateData: UpdateQuery<any> = data\n\n const $inc: Record<string, number> = {}\n const $push: Record<string, { $each: any[] } | any> = {}\n\n transform({ $inc, $push, adapter: this, data, fields, operation: 'write' })\n\n const updateOps: UpdateQuery<any> = {}\n\n if (Object.keys($inc).length) {\n updateOps.$inc = $inc\n }\n if (Object.keys($push).length) {\n updateOps.$push = $push\n }\n if (Object.keys(updateOps).length) {\n updateOps.$set = updateData\n updateData = updateOps\n }\n\n try {\n if (returning === false) {\n await Model.updateOne(query, updateData, options)\n transform({ adapter: this, data, fields, operation: 'read' })\n return null\n } else {\n result = await Model.findOneAndUpdate(query, updateData, options)\n }\n } catch (error) {\n handleError({ collection: collectionSlug, error, req })\n }\n\n if (!result) {\n return null\n }\n\n transform({ adapter: this, data: result, fields, operation: 'read' })\n\n return result\n}\n"],"names":["buildQuery","buildProjectionFromSelect","getCollection","getSession","handleError","transform","updateOne","id","collection","collectionSlug","data","locale","options","optionsArgs","req","returning","select","where","whereArg","collectionConfig","Model","adapter","equals","fields","lean","new","projection","flattenedFields","session","timestamps","query","result","updateData","$inc","$push","operation","updateOps","Object","keys","length","$set","findOneAndUpdate","error"],"mappings":"AAKA,SAASA,UAAU,QAAQ,0BAAyB;AACpD,SAASC,yBAAyB,QAAQ,2CAA0C;AACpF,SAASC,aAAa,QAAQ,2BAA0B;AACxD,SAASC,UAAU,QAAQ,4BAA2B;AACtD,SAASC,WAAW,QAAQ,6BAA4B;AACxD,SAASC,SAAS,QAAQ,2BAA0B;AAEpD,OAAO,MAAMC,YAAuB,eAAeA,UAEjD,EACEC,EAAE,EACFC,YAAYC,cAAc,EAC1BC,IAAI,EACJC,MAAM,EACNC,SAASC,cAAc,CAAC,CAAC,EACzBC,GAAG,EACHC,SAAS,EACTC,MAAM,EACNC,OAAOC,WAAW,CAAC,CAAC,EACrB;IAED,MAAM,EAAEC,gBAAgB,EAAEC,KAAK,EAAE,GAAGlB,cAAc;QAAEmB,SAAS,IAAI;QAAEZ;IAAe;IAClF,MAAMQ,QAAQV,KAAK;QAAEA,IAAI;YAAEe,QAAQf;QAAG;IAAE,IAAIW;IAC5C,MAAMK,SAASJ,iBAAiBI,MAAM;IAEtC,MAAMX,UAAsC;QAC1C,GAAGC,WAAW;QACdW,MAAM;QACNC,KAAK;QACLC,YAAYzB,0BAA0B;YACpCoB,SAAS,IAAI;YACbE,QAAQJ,iBAAiBQ,eAAe;YACxCX;QACF;QACAY,SAAS,MAAMzB,WAAW,IAAI,EAAEW;QAChC,uDAAuD;QACvDe,YAAY;IACd;IAEA,MAAMC,QAAQ,MAAM9B,WAAW;QAC7BqB,SAAS,IAAI;QACbZ;QACAc,QAAQJ,iBAAiBQ,eAAe;QACxChB;QACAM;IACF;IAEA,IAAIc;IAEJ,IAAIC,aAA+BtB;IAEnC,MAAMuB,OAA+B,CAAC;IACtC,MAAMC,QAAgD,CAAC;IAEvD7B,UAAU;QAAE4B;QAAMC;QAAOb,SAAS,IAAI;QAAEX;QAAMa;QAAQY,WAAW;IAAQ;IAEzE,MAAMC,YAA8B,CAAC;IAErC,IAAIC,OAAOC,IAAI,CAACL,MAAMM,MAAM,EAAE;QAC5BH,UAAUH,IAAI,GAAGA;IACnB;IACA,IAAII,OAAOC,IAAI,CAACJ,OAAOK,MAAM,EAAE;QAC7BH,UAAUF,KAAK,GAAGA;IACpB;IACA,IAAIG,OAAOC,IAAI,CAACF,WAAWG,MAAM,EAAE;QACjCH,UAAUI,IAAI,GAAGR;QACjBA,aAAaI;IACf;IAEA,IAAI;QACF,IAAIrB,cAAc,OAAO;YACvB,MAAMK,MAAMd,SAAS,CAACwB,OAAOE,YAAYpB;YACzCP,UAAU;gBAAEgB,SAAS,IAAI;gBAAEX;gBAAMa;gBAAQY,WAAW;YAAO;YAC3D,OAAO;QACT,OAAO;YACLJ,SAAS,MAAMX,MAAMqB,gBAAgB,CAACX,OAAOE,YAAYpB;QAC3D;IACF,EAAE,OAAO8B,OAAO;QACdtC,YAAY;YAAEI,YAAYC;YAAgBiC;YAAO5B;QAAI;IACvD;IAEA,IAAI,CAACiB,QAAQ;QACX,OAAO;IACT;IAEA1B,UAAU;QAAEgB,SAAS,IAAI;QAAEX,MAAMqB;QAAQR;QAAQY,WAAW;IAAO;IAEnE,OAAOJ;AACT,EAAC"}
1
+ {"version":3,"sources":["../src/updateOne.ts"],"sourcesContent":["import type { MongooseUpdateQueryOptions, UpdateQuery } from 'mongoose'\nimport type { UpdateOne } from 'payload'\n\nimport type { MongooseAdapter } from './index.js'\n\nimport { buildQuery } from './queries/buildQuery.js'\nimport { buildProjectionFromSelect } from './utilities/buildProjectionFromSelect.js'\nimport { getCollection } from './utilities/getEntity.js'\nimport { getSession } from './utilities/getSession.js'\nimport { handleError } from './utilities/handleError.js'\nimport { transform } from './utilities/transform.js'\n\nexport const updateOne: UpdateOne = async function updateOne(\n this: MongooseAdapter,\n {\n id,\n collection: collectionSlug,\n data,\n locale,\n options: optionsArgs = {},\n req,\n returning,\n select,\n where: whereArg = {},\n },\n) {\n const { collectionConfig, Model } = getCollection({ adapter: this, collectionSlug })\n const where = id ? { id: { equals: id } } : whereArg\n const fields = collectionConfig.fields\n\n const options: MongooseUpdateQueryOptions = {\n ...optionsArgs,\n lean: true,\n new: true,\n projection: buildProjectionFromSelect({\n adapter: this,\n fields: collectionConfig.flattenedFields,\n select,\n }),\n session: await getSession(this, req),\n // Timestamps are manually added by the write transform\n timestamps: false,\n }\n\n const query = await buildQuery({\n adapter: this,\n collectionSlug,\n fields: collectionConfig.flattenedFields,\n locale,\n where,\n })\n\n let result\n\n let updateData: UpdateQuery<any> = data\n\n const $inc: Record<string, number> = {}\n const $push: Record<string, { $each: any[] } | any> = {}\n const $addToSet: Record<string, { $each: any[] } | any> = {}\n const $pull: Record<string, { $in: any[] } | any> = {}\n\n transform({\n $addToSet,\n $inc,\n $pull,\n $push,\n adapter: this,\n data,\n fields,\n operation: 'write',\n })\n\n const updateOps: UpdateQuery<any> = {}\n\n if (Object.keys($inc).length) {\n updateOps.$inc = $inc\n }\n if (Object.keys($push).length) {\n updateOps.$push = $push\n }\n if (Object.keys($addToSet).length) {\n updateOps.$addToSet = $addToSet\n }\n if (Object.keys($pull).length) {\n updateOps.$pull = $pull\n }\n if (Object.keys(updateOps).length) {\n updateOps.$set = updateData\n updateData = updateOps\n }\n\n try {\n if (returning === false) {\n await Model.updateOne(query, updateData, options)\n transform({ adapter: this, data, fields, operation: 'read' })\n return null\n } else {\n result = await Model.findOneAndUpdate(query, updateData, options)\n }\n } catch (error) {\n handleError({ collection: collectionSlug, error, req })\n }\n\n if (!result) {\n return null\n }\n\n transform({ adapter: this, data: result, fields, operation: 'read' })\n\n return result\n}\n"],"names":["buildQuery","buildProjectionFromSelect","getCollection","getSession","handleError","transform","updateOne","id","collection","collectionSlug","data","locale","options","optionsArgs","req","returning","select","where","whereArg","collectionConfig","Model","adapter","equals","fields","lean","new","projection","flattenedFields","session","timestamps","query","result","updateData","$inc","$push","$addToSet","$pull","operation","updateOps","Object","keys","length","$set","findOneAndUpdate","error"],"mappings":"AAKA,SAASA,UAAU,QAAQ,0BAAyB;AACpD,SAASC,yBAAyB,QAAQ,2CAA0C;AACpF,SAASC,aAAa,QAAQ,2BAA0B;AACxD,SAASC,UAAU,QAAQ,4BAA2B;AACtD,SAASC,WAAW,QAAQ,6BAA4B;AACxD,SAASC,SAAS,QAAQ,2BAA0B;AAEpD,OAAO,MAAMC,YAAuB,eAAeA,UAEjD,EACEC,EAAE,EACFC,YAAYC,cAAc,EAC1BC,IAAI,EACJC,MAAM,EACNC,SAASC,cAAc,CAAC,CAAC,EACzBC,GAAG,EACHC,SAAS,EACTC,MAAM,EACNC,OAAOC,WAAW,CAAC,CAAC,EACrB;IAED,MAAM,EAAEC,gBAAgB,EAAEC,KAAK,EAAE,GAAGlB,cAAc;QAAEmB,SAAS,IAAI;QAAEZ;IAAe;IAClF,MAAMQ,QAAQV,KAAK;QAAEA,IAAI;YAAEe,QAAQf;QAAG;IAAE,IAAIW;IAC5C,MAAMK,SAASJ,iBAAiBI,MAAM;IAEtC,MAAMX,UAAsC;QAC1C,GAAGC,WAAW;QACdW,MAAM;QACNC,KAAK;QACLC,YAAYzB,0BAA0B;YACpCoB,SAAS,IAAI;YACbE,QAAQJ,iBAAiBQ,eAAe;YACxCX;QACF;QACAY,SAAS,MAAMzB,WAAW,IAAI,EAAEW;QAChC,uDAAuD;QACvDe,YAAY;IACd;IAEA,MAAMC,QAAQ,MAAM9B,WAAW;QAC7BqB,SAAS,IAAI;QACbZ;QACAc,QAAQJ,iBAAiBQ,eAAe;QACxChB;QACAM;IACF;IAEA,IAAIc;IAEJ,IAAIC,aAA+BtB;IAEnC,MAAMuB,OAA+B,CAAC;IACtC,MAAMC,QAAgD,CAAC;IACvD,MAAMC,YAAoD,CAAC;IAC3D,MAAMC,QAA8C,CAAC;IAErD/B,UAAU;QACR8B;QACAF;QACAG;QACAF;QACAb,SAAS,IAAI;QACbX;QACAa;QACAc,WAAW;IACb;IAEA,MAAMC,YAA8B,CAAC;IAErC,IAAIC,OAAOC,IAAI,CAACP,MAAMQ,MAAM,EAAE;QAC5BH,UAAUL,IAAI,GAAGA;IACnB;IACA,IAAIM,OAAOC,IAAI,CAACN,OAAOO,MAAM,EAAE;QAC7BH,UAAUJ,KAAK,GAAGA;IACpB;IACA,IAAIK,OAAOC,IAAI,CAACL,WAAWM,MAAM,EAAE;QACjCH,UAAUH,SAAS,GAAGA;IACxB;IACA,IAAII,OAAOC,IAAI,CAACJ,OAAOK,MAAM,EAAE;QAC7BH,UAAUF,KAAK,GAAGA;IACpB;IACA,IAAIG,OAAOC,IAAI,CAACF,WAAWG,MAAM,EAAE;QACjCH,UAAUI,IAAI,GAAGV;QACjBA,aAAaM;IACf;IAEA,IAAI;QACF,IAAIvB,cAAc,OAAO;YACvB,MAAMK,MAAMd,SAAS,CAACwB,OAAOE,YAAYpB;YACzCP,UAAU;gBAAEgB,SAAS,IAAI;gBAAEX;gBAAMa;gBAAQc,WAAW;YAAO;YAC3D,OAAO;QACT,OAAO;YACLN,SAAS,MAAMX,MAAMuB,gBAAgB,CAACb,OAAOE,YAAYpB;QAC3D;IACF,EAAE,OAAOgC,OAAO;QACdxC,YAAY;YAAEI,YAAYC;YAAgBmC;YAAO9B;QAAI;IACvD;IAEA,IAAI,CAACiB,QAAQ;QACX,OAAO;IACT;IAEA1B,UAAU;QAAEgB,SAAS,IAAI;QAAEX,MAAMqB;QAAQR;QAAQc,WAAW;IAAO;IAEnE,OAAON;AACT,EAAC"}
@@ -1,7 +1,13 @@
1
1
  import type { Field } from 'payload';
2
2
  import type { MongooseAdapter } from '../index.js';
3
3
  type Args = {
4
+ $addToSet?: Record<string, {
5
+ $each: any[];
6
+ } | any>;
4
7
  $inc?: Record<string, number>;
8
+ $pull?: Record<string, {
9
+ $in: any[];
10
+ } | any>;
5
11
  $push?: Record<string, {
6
12
  $each: any[];
7
13
  } | any>;
@@ -26,6 +32,6 @@ type Args = {
26
32
  */
27
33
  validateRelationships?: boolean;
28
34
  };
29
- export declare const transform: ({ $inc, $push, adapter, data, fields, globalSlug, operation, parentIsLocalized, validateRelationships, }: Args) => null | undefined;
35
+ export declare const transform: ({ $addToSet, $inc, $pull, $push, adapter, data, fields, globalSlug, operation, parentIsLocalized, validateRelationships, }: Args) => null | undefined;
30
36
  export {};
31
37
  //# sourceMappingURL=transform.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../../src/utilities/transform.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,KAAK,EAQN,MAAM,SAAS,CAAA;AAMhB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAgMlD,KAAK,IAAI,GAAG;IACV,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,GAAG,EAAE,CAAA;KAAE,GAAG,GAAG,CAAC,CAAA;IAC9C,8BAA8B;IAC9B,OAAO,EAAE,eAAe,CAAA;IACxB,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;IACzD,uCAAuC;IACvC,MAAM,EAAE,KAAK,EAAE,CAAA;IACf,kEAAkE;IAClE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;;;OAIG;IACH,SAAS,EAAE,MAAM,GAAG,OAAO,CAAA;IAC3B,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B;;;OAGG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAA;CAChC,CAAA;AAuKD,eAAO,MAAM,SAAS,6GAUnB,IAAI,qBAyMN,CAAA"}
1
+ {"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../../src/utilities/transform.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,KAAK,EAQN,MAAM,SAAS,CAAA;AAMhB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AA8OlD,KAAK,IAAI,GAAG;IACV,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,GAAG,EAAE,CAAA;KAAE,GAAG,GAAG,CAAC,CAAA;IAClD,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,GAAG,EAAE,CAAA;KAAE,GAAG,GAAG,CAAC,CAAA;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,GAAG,EAAE,CAAA;KAAE,GAAG,GAAG,CAAC,CAAA;IAC9C,8BAA8B;IAC9B,OAAO,EAAE,eAAe,CAAA;IACxB,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;IACzD,uCAAuC;IACvC,MAAM,EAAE,KAAK,EAAE,CAAA;IACf,kEAAkE;IAClE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;;;OAIG;IACH,SAAS,EAAE,MAAM,GAAG,OAAO,CAAA;IAC3B,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B;;;OAGG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAA;CAChC,CAAA;AAuKD,eAAO,MAAM,SAAS,+HAYnB,IAAI,qBAsXN,CAAA"}
@@ -4,6 +4,42 @@ import { fieldAffectsData, fieldShouldBeLocalized } from 'payload/shared';
4
4
  function isValidRelationObject(value) {
5
5
  return typeof value === 'object' && value !== null && 'relationTo' in value && 'value' in value;
6
6
  }
7
+ /**
8
+ * Process relationship values for polymorphic and simple relationships
9
+ * Used by both $push and $remove operations
10
+ */ const processRelationshipValues = (items, field, config, operation, validateRelationships)=>{
11
+ return items.map((item)=>{
12
+ // Handle polymorphic relationships
13
+ if (Array.isArray(field.relationTo) && isValidRelationObject(item)) {
14
+ const relatedCollection = config.collections?.find(({ slug })=>slug === item.relationTo);
15
+ if (relatedCollection) {
16
+ return {
17
+ relationTo: item.relationTo,
18
+ value: convertRelationshipValue({
19
+ operation,
20
+ relatedCollection,
21
+ validateRelationships,
22
+ value: item.value
23
+ })
24
+ };
25
+ }
26
+ return item;
27
+ }
28
+ // Handle simple relationships
29
+ if (typeof field.relationTo === 'string') {
30
+ const relatedCollection = config.collections?.find(({ slug })=>slug === field.relationTo);
31
+ if (relatedCollection) {
32
+ return convertRelationshipValue({
33
+ operation,
34
+ relatedCollection,
35
+ validateRelationships,
36
+ value: item
37
+ });
38
+ }
39
+ }
40
+ return item;
41
+ });
42
+ };
7
43
  const convertRelationshipValue = ({ operation, relatedCollection, validateRelationships, value })=>{
8
44
  const customIDField = relatedCollection.fields.find((field)=>fieldAffectsData(field) && field.name === 'id');
9
45
  if (operation === 'read') {
@@ -261,14 +297,16 @@ const stripFields = ({ config, data, fields, reservedKeys = [] })=>{
261
297
  }
262
298
  }
263
299
  };
264
- export const transform = ({ $inc, $push, adapter, data, fields, globalSlug, operation, parentIsLocalized = false, validateRelationships = true })=>{
300
+ export const transform = ({ $addToSet, $inc, $pull, $push, adapter, data, fields, globalSlug, operation, parentIsLocalized = false, validateRelationships = true })=>{
265
301
  if (!data) {
266
302
  return null;
267
303
  }
268
304
  if (Array.isArray(data)) {
269
305
  for (const item of data){
270
306
  transform({
307
+ $addToSet,
271
308
  $inc,
309
+ $pull,
272
310
  $push,
273
311
  adapter,
274
312
  data: item,
@@ -310,38 +348,68 @@ export const transform = ({ $inc, $push, adapter, data, fields, globalSlug, oper
310
348
  if (operation === 'write' && globalSlug) {
311
349
  data.globalType = globalSlug;
312
350
  }
313
- const sanitize = ({ field, parentIsLocalized, parentPath, ref: incomingRef })=>{
351
+ const sanitize = ({ field, parentIsLocalized, parentPath, parentRef: incomingParentRef, ref: incomingRef })=>{
314
352
  if (!incomingRef || typeof incomingRef !== 'object') {
315
353
  return;
316
354
  }
317
355
  const ref = incomingRef;
356
+ const parentRef = incomingParentRef || {};
357
+ // Clear empty parent containers by setting them to undefined.
358
+ const clearEmptyContainer = ()=>{
359
+ if (!parentRef || typeof parentRef !== 'object') {
360
+ return;
361
+ }
362
+ if (!ref || typeof ref !== 'object') {
363
+ return;
364
+ }
365
+ if (Object.keys(ref).length > 0) {
366
+ return;
367
+ }
368
+ const containerKey = Object.keys(parentRef).find((k)=>parentRef[k] === ref);
369
+ if (containerKey) {
370
+ parentRef[containerKey] = undefined;
371
+ }
372
+ };
318
373
  if ($inc && field.type === 'number' && operation === 'write' && field.name in ref && ref[field.name]) {
319
374
  const value = ref[field.name];
320
375
  if (value && typeof value === 'object' && '$inc' in value && typeof value.$inc === 'number') {
321
376
  $inc[`${parentPath}${field.name}`] = value.$inc;
322
377
  delete ref[field.name];
378
+ clearEmptyContainer();
323
379
  }
324
380
  }
325
381
  if ($push && field.type === 'array' && operation === 'write' && field.name in ref && ref[field.name]) {
326
382
  const value = ref[field.name];
327
- if (value && typeof value === 'object' && '$push' in value) {
328
- const push = value.$push;
383
+ if (value && typeof value === 'object' && ('$push' in value || config.localization && fieldShouldBeLocalized({
384
+ field,
385
+ parentIsLocalized
386
+ }) && Object.values(value).some((localeValue)=>localeValue && typeof localeValue === 'object' && '$push' in localeValue))) {
329
387
  if (config.localization && fieldShouldBeLocalized({
330
388
  field,
331
389
  parentIsLocalized
332
390
  })) {
333
- if (typeof push === 'object' && push !== null) {
334
- Object.entries(push).forEach(([localeKey, localeData])=>{
335
- if (Array.isArray(localeData)) {
391
+ // Handle localized fields: { field: { locale: { $push: data } } }
392
+ let hasLocaleOperations = false;
393
+ Object.entries(value).forEach(([localeKey, localeValue])=>{
394
+ if (localeValue && typeof localeValue === 'object' && '$push' in localeValue) {
395
+ hasLocaleOperations = true;
396
+ const push = localeValue.$push;
397
+ if (Array.isArray(push)) {
336
398
  $push[`${parentPath}${field.name}.${localeKey}`] = {
337
- $each: localeData
399
+ $each: push
338
400
  };
339
- } else if (typeof localeData === 'object') {
340
- $push[`${parentPath}${field.name}.${localeKey}`] = localeData;
401
+ } else if (typeof push === 'object') {
402
+ $push[`${parentPath}${field.name}.${localeKey}`] = push;
341
403
  }
342
- });
404
+ }
405
+ });
406
+ if (hasLocaleOperations) {
407
+ delete ref[field.name];
408
+ clearEmptyContainer();
343
409
  }
344
- } else {
410
+ } else if (value && typeof value === 'object' && '$push' in value) {
411
+ // Handle non-localized fields: { field: { $push: data } }
412
+ const push = value.$push;
345
413
  if (Array.isArray(push)) {
346
414
  $push[`${parentPath}${field.name}`] = {
347
415
  $each: push
@@ -349,8 +417,98 @@ export const transform = ({ $inc, $push, adapter, data, fields, globalSlug, oper
349
417
  } else if (typeof push === 'object') {
350
418
  $push[`${parentPath}${field.name}`] = push;
351
419
  }
420
+ delete ref[field.name];
421
+ clearEmptyContainer();
422
+ }
423
+ }
424
+ }
425
+ // Handle $push operation for relationship fields (converts to $addToSet)
426
+ // Handle $push operation for relationship fields (converts to $addToSet) - unified approach
427
+ if ($addToSet && (field.type === 'relationship' || field.type === 'upload') && 'hasMany' in field && field.hasMany && operation === 'write' && field.name in ref && ref[field.name]) {
428
+ const value = ref[field.name];
429
+ if (value && typeof value === 'object' && ('$push' in value || config.localization && fieldShouldBeLocalized({
430
+ field,
431
+ parentIsLocalized
432
+ }) && Object.values(value).some((localeValue)=>localeValue && typeof localeValue === 'object' && '$push' in localeValue))) {
433
+ if (config.localization && fieldShouldBeLocalized({
434
+ field,
435
+ parentIsLocalized
436
+ })) {
437
+ // Handle localized fields: { field: { locale: { $push: data } } }
438
+ let hasLocaleOperations = false;
439
+ Object.entries(value).forEach(([localeKey, localeValue])=>{
440
+ if (localeValue && typeof localeValue === 'object' && '$push' in localeValue) {
441
+ hasLocaleOperations = true;
442
+ const push = localeValue.$push;
443
+ const localeItems = Array.isArray(push) ? push : [
444
+ push
445
+ ];
446
+ const processedLocaleItems = processRelationshipValues(localeItems, field, config, operation, validateRelationships);
447
+ $addToSet[`${parentPath}${field.name}.${localeKey}`] = {
448
+ $each: processedLocaleItems
449
+ };
450
+ }
451
+ });
452
+ if (hasLocaleOperations) {
453
+ delete ref[field.name];
454
+ clearEmptyContainer();
455
+ }
456
+ } else if (value && typeof value === 'object' && '$push' in value) {
457
+ // Handle non-localized fields: { field: { $push: data } }
458
+ const itemsToAppend = Array.isArray(value.$push) ? value.$push : [
459
+ value.$push
460
+ ];
461
+ const processedItems = processRelationshipValues(itemsToAppend, field, config, operation, validateRelationships);
462
+ $addToSet[`${parentPath}${field.name}`] = {
463
+ $each: processedItems
464
+ };
465
+ delete ref[field.name];
466
+ clearEmptyContainer();
467
+ }
468
+ }
469
+ }
470
+ // Handle $remove operation for relationship fields (converts to $pull)
471
+ if ($pull && (field.type === 'relationship' || field.type === 'upload') && 'hasMany' in field && field.hasMany && operation === 'write' && field.name in ref && ref[field.name]) {
472
+ const value = ref[field.name];
473
+ if (value && typeof value === 'object' && ('$remove' in value || config.localization && fieldShouldBeLocalized({
474
+ field,
475
+ parentIsLocalized
476
+ }) && Object.values(value).some((localeValue)=>localeValue && typeof localeValue === 'object' && '$remove' in localeValue))) {
477
+ if (config.localization && fieldShouldBeLocalized({
478
+ field,
479
+ parentIsLocalized
480
+ })) {
481
+ // Handle localized fields: { field: { locale: { $remove: data } } }
482
+ let hasLocaleOperations = false;
483
+ Object.entries(value).forEach(([localeKey, localeValue])=>{
484
+ if (localeValue && typeof localeValue === 'object' && '$remove' in localeValue) {
485
+ hasLocaleOperations = true;
486
+ const remove = localeValue.$remove;
487
+ const localeItems = Array.isArray(remove) ? remove : [
488
+ remove
489
+ ];
490
+ const processedLocaleItems = processRelationshipValues(localeItems, field, config, operation, validateRelationships);
491
+ $pull[`${parentPath}${field.name}.${localeKey}`] = {
492
+ $in: processedLocaleItems
493
+ };
494
+ }
495
+ });
496
+ if (hasLocaleOperations) {
497
+ delete ref[field.name];
498
+ clearEmptyContainer();
499
+ }
500
+ } else if (value && typeof value === 'object' && '$remove' in value) {
501
+ // Handle non-localized fields: { field: { $remove: data } }
502
+ const itemsToRemove = Array.isArray(value.$remove) ? value.$remove : [
503
+ value.$remove
504
+ ];
505
+ const processedItems = processRelationshipValues(itemsToRemove, field, config, operation, validateRelationships);
506
+ $pull[`${parentPath}${field.name}`] = {
507
+ $in: processedItems
508
+ };
509
+ delete ref[field.name];
510
+ clearEmptyContainer();
352
511
  }
353
- delete ref[field.name];
354
512
  }
355
513
  }
356
514
  if (field.type === 'date' && operation === 'read' && field.name in ref && ref[field.name]) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utilities/transform.ts"],"sourcesContent":["import type {\n CollectionConfig,\n DateField,\n Field,\n FlattenedBlock,\n FlattenedField,\n JoinField,\n RelationshipField,\n SanitizedConfig,\n TraverseFieldsCallback,\n UploadField,\n} from 'payload'\n\nimport { Types } from 'mongoose'\nimport { flattenAllFields, traverseFields } from 'payload'\nimport { fieldAffectsData, fieldShouldBeLocalized } from 'payload/shared'\n\nimport type { MongooseAdapter } from '../index.js'\n\ninterface RelationObject {\n relationTo: string\n value: number | string\n}\n\nfunction isValidRelationObject(value: unknown): value is RelationObject {\n return typeof value === 'object' && value !== null && 'relationTo' in value && 'value' in value\n}\n\nconst convertRelationshipValue = ({\n operation,\n relatedCollection,\n validateRelationships,\n value,\n}: {\n operation: Args['operation']\n relatedCollection: CollectionConfig\n validateRelationships?: boolean\n value: unknown\n}) => {\n const customIDField = relatedCollection.fields.find(\n (field) => fieldAffectsData(field) && field.name === 'id',\n )\n\n if (operation === 'read') {\n if (value instanceof Types.ObjectId) {\n return value.toHexString()\n }\n\n return value\n }\n\n if (customIDField) {\n return value\n }\n\n if (typeof value === 'string') {\n try {\n return new Types.ObjectId(value)\n } catch (e) {\n if (validateRelationships) {\n throw e\n }\n return value\n }\n }\n\n return value\n}\n\nconst sanitizeRelationship = ({\n config,\n field,\n locale,\n operation,\n ref,\n validateRelationships,\n value,\n}: {\n config: SanitizedConfig\n field: JoinField | RelationshipField | UploadField\n locale?: string\n operation: Args['operation']\n ref: Record<string, unknown>\n validateRelationships?: boolean\n value?: unknown\n}) => {\n if (field.type === 'join') {\n if (\n operation === 'read' &&\n value &&\n typeof value === 'object' &&\n 'docs' in value &&\n Array.isArray(value.docs)\n ) {\n for (let i = 0; i < value.docs.length; i++) {\n const item = value.docs[i]\n\n if (item instanceof Types.ObjectId) {\n value.docs[i] = item.toHexString()\n } else if (Array.isArray(field.collection) && item) {\n // Fields here for polymorphic joins cannot be determinted, JSON.parse needed\n value.docs[i] = JSON.parse(JSON.stringify(value.docs[i]))\n }\n }\n }\n\n return value\n }\n let relatedCollection: CollectionConfig | undefined\n let result = value\n\n const hasManyRelations = typeof field.relationTo !== 'string'\n\n if (!hasManyRelations) {\n relatedCollection = config.collections?.find(({ slug }) => slug === field.relationTo)\n }\n\n if (Array.isArray(value)) {\n result = value.map((val) => {\n // Handle has many - polymorphic\n if (isValidRelationObject(val)) {\n const relatedCollectionForSingleValue = config.collections?.find(\n ({ slug }) => slug === val.relationTo,\n )\n\n if (relatedCollectionForSingleValue) {\n return {\n relationTo: val.relationTo,\n value: convertRelationshipValue({\n operation,\n relatedCollection: relatedCollectionForSingleValue,\n validateRelationships,\n value: val.value,\n }),\n }\n }\n }\n\n if (relatedCollection) {\n return convertRelationshipValue({\n operation,\n relatedCollection,\n validateRelationships,\n value: val,\n })\n }\n\n return val\n })\n }\n // Handle has one - polymorphic\n else if (isValidRelationObject(value)) {\n relatedCollection = config.collections?.find(({ slug }) => slug === value.relationTo)\n\n if (relatedCollection) {\n result = {\n relationTo: value.relationTo,\n value: convertRelationshipValue({\n operation,\n relatedCollection,\n validateRelationships,\n value: value.value,\n }),\n }\n }\n }\n // Handle has one\n else if (relatedCollection) {\n result = convertRelationshipValue({\n operation,\n relatedCollection,\n validateRelationships,\n value,\n })\n }\n\n if (locale) {\n ref[locale] = result\n } else {\n ref[field.name] = result\n }\n}\n\nconst sanitizeDate = ({\n field,\n locale,\n ref,\n value,\n}: {\n field: DateField\n locale?: string\n ref: Record<string, unknown>\n value: unknown\n}) => {\n if (!value) {\n return\n }\n\n if (value instanceof Date) {\n value = value.toISOString()\n }\n\n if (locale) {\n ref[locale] = value\n } else {\n ref[field.name] = value\n }\n}\n\ntype Args = {\n $inc?: Record<string, number>\n $push?: Record<string, { $each: any[] } | any>\n /** instance of the adapter */\n adapter: MongooseAdapter\n /** data to transform, can be an array of documents or a single document */\n data: Record<string, unknown> | Record<string, unknown>[]\n /** fields accossiated with the data */\n fields: Field[]\n /** slug of the global, pass only when the operation is `write` */\n globalSlug?: string\n /**\n * Type of the operation\n * read - sanitizes ObjectIDs, Date to strings.\n * write - sanitizes string relationships to ObjectIDs.\n */\n operation: 'read' | 'write'\n parentIsLocalized?: boolean\n /**\n * Throw errors on invalid relationships\n * @default true\n */\n validateRelationships?: boolean\n}\n\nconst stripFields = ({\n config,\n data,\n fields,\n reservedKeys = [],\n}: {\n config: SanitizedConfig\n data: any\n fields: FlattenedField[]\n reservedKeys?: string[]\n}) => {\n for (const k in data) {\n if (!fields.some((field) => field.name === k) && !reservedKeys.includes(k)) {\n delete data[k]\n }\n }\n\n for (const field of fields) {\n reservedKeys = []\n const fieldData = data[field.name]\n if (!fieldData || typeof fieldData !== 'object') {\n continue\n }\n\n if (field.type === 'blocks') {\n reservedKeys.push('blockType')\n }\n\n if ('flattenedFields' in field || 'blocks' in field) {\n if (field.localized && config.localization) {\n for (const localeKey in fieldData) {\n if (!config.localization.localeCodes.some((code) => code === localeKey)) {\n delete fieldData[localeKey]\n continue\n }\n\n const localeData = fieldData[localeKey]\n\n if (!localeData || typeof localeData !== 'object') {\n continue\n }\n\n if (field.type === 'array' || field.type === 'blocks') {\n if (!Array.isArray(localeData)) {\n continue\n }\n\n let hasNull = false\n for (let i = 0; i < localeData.length; i++) {\n const data = localeData[i]\n let fields: FlattenedField[] | null = null\n\n if (field.type === 'array') {\n fields = field.flattenedFields\n } else {\n let maybeBlock: FlattenedBlock | undefined = undefined\n\n if (field.blockReferences) {\n const maybeBlockReference = field.blockReferences.find((each) => {\n const slug = typeof each === 'string' ? each : each.slug\n return slug === data.blockType\n })\n\n if (maybeBlockReference) {\n if (typeof maybeBlockReference === 'object') {\n maybeBlock = maybeBlockReference\n } else {\n maybeBlock = config.blocks?.find((each) => each.slug === maybeBlockReference)\n }\n }\n }\n\n if (!maybeBlock) {\n maybeBlock = field.blocks.find((each) => each.slug === data.blockType)\n }\n\n if (maybeBlock) {\n fields = maybeBlock.flattenedFields\n } else {\n localeData[i] = null\n hasNull = true\n }\n }\n\n if (!fields) {\n continue\n }\n\n stripFields({ config, data, fields, reservedKeys })\n }\n\n if (hasNull) {\n fieldData[localeKey] = localeData.filter(Boolean)\n }\n\n continue\n } else {\n stripFields({ config, data: localeData, fields: field.flattenedFields, reservedKeys })\n }\n }\n continue\n }\n\n if (field.type === 'array' || field.type === 'blocks') {\n if (!Array.isArray(fieldData)) {\n continue\n }\n\n let hasNull = false\n\n for (let i = 0; i < fieldData.length; i++) {\n const data = fieldData[i]\n let fields: FlattenedField[] | null = null\n\n if (field.type === 'array') {\n fields = field.flattenedFields\n } else {\n let maybeBlock: FlattenedBlock | undefined = undefined\n\n if (field.blockReferences) {\n const maybeBlockReference = field.blockReferences.find((each) => {\n const slug = typeof each === 'string' ? each : each.slug\n return slug === data.blockType\n })\n\n if (maybeBlockReference) {\n if (typeof maybeBlockReference === 'object') {\n maybeBlock = maybeBlockReference\n } else {\n maybeBlock = config.blocks?.find((each) => each.slug === maybeBlockReference)\n }\n }\n }\n\n if (!maybeBlock) {\n maybeBlock = field.blocks.find((each) => each.slug === data.blockType)\n }\n\n if (maybeBlock) {\n fields = maybeBlock.flattenedFields\n } else {\n fieldData[i] = null\n hasNull = true\n }\n }\n\n if (!fields) {\n continue\n }\n\n stripFields({ config, data, fields, reservedKeys })\n }\n\n if (hasNull) {\n data[field.name] = fieldData.filter(Boolean)\n }\n\n continue\n } else {\n stripFields({ config, data: fieldData, fields: field.flattenedFields, reservedKeys })\n }\n }\n }\n}\n\nexport const transform = ({\n $inc,\n $push,\n adapter,\n data,\n fields,\n globalSlug,\n operation,\n parentIsLocalized = false,\n validateRelationships = true,\n}: Args) => {\n if (!data) {\n return null\n }\n\n if (Array.isArray(data)) {\n for (const item of data) {\n transform({\n $inc,\n $push,\n adapter,\n data: item,\n fields,\n globalSlug,\n operation,\n validateRelationships,\n })\n }\n return\n }\n\n const {\n payload: { config },\n } = adapter\n\n if (operation === 'read') {\n delete data['__v']\n data.id = data._id || data.id\n delete data['_id']\n\n if (data.id instanceof Types.ObjectId) {\n data.id = data.id.toHexString()\n }\n\n // Handle BigInt conversion for custom ID fields of type 'number'\n if (adapter.useBigIntForNumberIDs && typeof data.id === 'bigint') {\n data.id = Number(data.id)\n }\n\n if (!adapter.allowAdditionalKeys) {\n stripFields({\n config,\n data,\n fields: flattenAllFields({ cache: true, fields }),\n reservedKeys: ['id', 'globalType'],\n })\n }\n }\n\n if (operation === 'write' && globalSlug) {\n data.globalType = globalSlug\n }\n\n const sanitize: TraverseFieldsCallback = ({\n field,\n parentIsLocalized,\n parentPath,\n ref: incomingRef,\n }) => {\n if (!incomingRef || typeof incomingRef !== 'object') {\n return\n }\n\n const ref = incomingRef as Record<string, unknown>\n\n if (\n $inc &&\n field.type === 'number' &&\n operation === 'write' &&\n field.name in ref &&\n ref[field.name]\n ) {\n const value = ref[field.name]\n if (value && typeof value === 'object' && '$inc' in value && typeof value.$inc === 'number') {\n $inc[`${parentPath}${field.name}`] = value.$inc\n delete ref[field.name]\n }\n }\n\n if (\n $push &&\n field.type === 'array' &&\n operation === 'write' &&\n field.name in ref &&\n ref[field.name]\n ) {\n const value = ref[field.name]\n if (value && typeof value === 'object' && '$push' in value) {\n const push = value.$push\n\n if (config.localization && fieldShouldBeLocalized({ field, parentIsLocalized })) {\n if (typeof push === 'object' && push !== null) {\n Object.entries(push).forEach(([localeKey, localeData]) => {\n if (Array.isArray(localeData)) {\n $push[`${parentPath}${field.name}.${localeKey}`] = { $each: localeData }\n } else if (typeof localeData === 'object') {\n $push[`${parentPath}${field.name}.${localeKey}`] = localeData\n }\n })\n }\n } else {\n if (Array.isArray(push)) {\n $push[`${parentPath}${field.name}`] = { $each: push }\n } else if (typeof push === 'object') {\n $push[`${parentPath}${field.name}`] = push\n }\n }\n\n delete ref[field.name]\n }\n }\n\n if (field.type === 'date' && operation === 'read' && field.name in ref && ref[field.name]) {\n if (config.localization && fieldShouldBeLocalized({ field, parentIsLocalized })) {\n const fieldRef = ref[field.name] as Record<string, unknown>\n if (!fieldRef || typeof fieldRef !== 'object') {\n return\n }\n\n for (const locale of config.localization.localeCodes) {\n sanitizeDate({\n field,\n locale,\n ref: fieldRef,\n value: fieldRef[locale],\n })\n }\n } else {\n sanitizeDate({\n field,\n ref,\n value: ref[field.name],\n })\n }\n }\n\n if (\n field.type === 'relationship' ||\n field.type === 'upload' ||\n (operation === 'read' && field.type === 'join')\n ) {\n if (!ref[field.name]) {\n return\n }\n\n // handle localized relationships\n if (config.localization && fieldShouldBeLocalized({ field, parentIsLocalized })) {\n const locales = config.localization.locales\n const fieldRef = ref[field.name] as Record<string, unknown>\n if (typeof fieldRef !== 'object') {\n return\n }\n\n for (const { code } of locales) {\n const value = fieldRef[code]\n if (value) {\n sanitizeRelationship({\n config,\n field,\n locale: code,\n operation,\n ref: fieldRef,\n validateRelationships,\n value,\n })\n }\n }\n } else {\n // handle non-localized relationships\n sanitizeRelationship({\n config,\n field,\n locale: undefined,\n operation,\n ref,\n validateRelationships,\n value: ref[field.name],\n })\n }\n }\n }\n\n traverseFields({\n callback: sanitize,\n config,\n fields,\n fillEmpty: false,\n parentIsLocalized,\n ref: data,\n })\n\n if (operation === 'write') {\n if (typeof data.updatedAt === 'undefined') {\n // If data.updatedAt is explicitly set to `null` we should not set it - this means we don't want to change the value of updatedAt.\n data.updatedAt = new Date().toISOString()\n } else if (data.updatedAt === null) {\n // `updatedAt` may be explicitly set to null to disable updating it - if that is the case, we need to delete the property. Keeping it as null will\n // cause the database to think we want to set it to null, which we don't.\n delete data.updatedAt\n }\n }\n}\n"],"names":["Types","flattenAllFields","traverseFields","fieldAffectsData","fieldShouldBeLocalized","isValidRelationObject","value","convertRelationshipValue","operation","relatedCollection","validateRelationships","customIDField","fields","find","field","name","ObjectId","toHexString","e","sanitizeRelationship","config","locale","ref","type","Array","isArray","docs","i","length","item","collection","JSON","parse","stringify","result","hasManyRelations","relationTo","collections","slug","map","val","relatedCollectionForSingleValue","sanitizeDate","Date","toISOString","stripFields","data","reservedKeys","k","some","includes","fieldData","push","localized","localization","localeKey","localeCodes","code","localeData","hasNull","flattenedFields","maybeBlock","undefined","blockReferences","maybeBlockReference","each","blockType","blocks","filter","Boolean","transform","$inc","$push","adapter","globalSlug","parentIsLocalized","payload","id","_id","useBigIntForNumberIDs","Number","allowAdditionalKeys","cache","globalType","sanitize","parentPath","incomingRef","Object","entries","forEach","$each","fieldRef","locales","callback","fillEmpty","updatedAt"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/utilities/transform.ts"],"sourcesContent":["import type {\n CollectionConfig,\n DateField,\n Field,\n FlattenedBlock,\n FlattenedField,\n JoinField,\n RelationshipField,\n SanitizedConfig,\n TraverseFieldsCallback,\n UploadField,\n} from 'payload'\n\nimport { Types } from 'mongoose'\nimport { flattenAllFields, traverseFields } from 'payload'\nimport { fieldAffectsData, fieldShouldBeLocalized } from 'payload/shared'\n\nimport type { MongooseAdapter } from '../index.js'\n\ninterface RelationObject {\n relationTo: string\n value: number | string\n}\n\nfunction isValidRelationObject(value: unknown): value is RelationObject {\n return typeof value === 'object' && value !== null && 'relationTo' in value && 'value' in value\n}\n\n/**\n * Process relationship values for polymorphic and simple relationships\n * Used by both $push and $remove operations\n */\nconst processRelationshipValues = (\n items: unknown[],\n field: RelationshipField | UploadField,\n config: SanitizedConfig,\n operation: 'read' | 'write',\n validateRelationships: boolean,\n) => {\n return items.map((item) => {\n // Handle polymorphic relationships\n if (Array.isArray(field.relationTo) && isValidRelationObject(item)) {\n const relatedCollection = config.collections?.find(({ slug }) => slug === item.relationTo)\n if (relatedCollection) {\n return {\n relationTo: item.relationTo,\n value: convertRelationshipValue({\n operation,\n relatedCollection,\n validateRelationships,\n value: item.value,\n }),\n }\n }\n return item\n }\n\n // Handle simple relationships\n if (typeof field.relationTo === 'string') {\n const relatedCollection = config.collections?.find(({ slug }) => slug === field.relationTo)\n if (relatedCollection) {\n return convertRelationshipValue({\n operation,\n relatedCollection,\n validateRelationships,\n value: item,\n })\n }\n }\n\n return item\n })\n}\n\nconst convertRelationshipValue = ({\n operation,\n relatedCollection,\n validateRelationships,\n value,\n}: {\n operation: Args['operation']\n relatedCollection: CollectionConfig\n validateRelationships?: boolean\n value: unknown\n}) => {\n const customIDField = relatedCollection.fields.find(\n (field) => fieldAffectsData(field) && field.name === 'id',\n )\n\n if (operation === 'read') {\n if (value instanceof Types.ObjectId) {\n return value.toHexString()\n }\n\n return value\n }\n\n if (customIDField) {\n return value\n }\n\n if (typeof value === 'string') {\n try {\n return new Types.ObjectId(value)\n } catch (e) {\n if (validateRelationships) {\n throw e\n }\n return value\n }\n }\n\n return value\n}\n\nconst sanitizeRelationship = ({\n config,\n field,\n locale,\n operation,\n ref,\n validateRelationships,\n value,\n}: {\n config: SanitizedConfig\n field: JoinField | RelationshipField | UploadField\n locale?: string\n operation: Args['operation']\n ref: Record<string, unknown>\n validateRelationships?: boolean\n value?: unknown\n}) => {\n if (field.type === 'join') {\n if (\n operation === 'read' &&\n value &&\n typeof value === 'object' &&\n 'docs' in value &&\n Array.isArray(value.docs)\n ) {\n for (let i = 0; i < value.docs.length; i++) {\n const item = value.docs[i]\n\n if (item instanceof Types.ObjectId) {\n value.docs[i] = item.toHexString()\n } else if (Array.isArray(field.collection) && item) {\n // Fields here for polymorphic joins cannot be determinted, JSON.parse needed\n value.docs[i] = JSON.parse(JSON.stringify(value.docs[i]))\n }\n }\n }\n\n return value\n }\n let relatedCollection: CollectionConfig | undefined\n let result = value\n\n const hasManyRelations = typeof field.relationTo !== 'string'\n\n if (!hasManyRelations) {\n relatedCollection = config.collections?.find(({ slug }) => slug === field.relationTo)\n }\n\n if (Array.isArray(value)) {\n result = value.map((val) => {\n // Handle has many - polymorphic\n if (isValidRelationObject(val)) {\n const relatedCollectionForSingleValue = config.collections?.find(\n ({ slug }) => slug === val.relationTo,\n )\n\n if (relatedCollectionForSingleValue) {\n return {\n relationTo: val.relationTo,\n value: convertRelationshipValue({\n operation,\n relatedCollection: relatedCollectionForSingleValue,\n validateRelationships,\n value: val.value,\n }),\n }\n }\n }\n\n if (relatedCollection) {\n return convertRelationshipValue({\n operation,\n relatedCollection,\n validateRelationships,\n value: val,\n })\n }\n\n return val\n })\n }\n // Handle has one - polymorphic\n else if (isValidRelationObject(value)) {\n relatedCollection = config.collections?.find(({ slug }) => slug === value.relationTo)\n\n if (relatedCollection) {\n result = {\n relationTo: value.relationTo,\n value: convertRelationshipValue({\n operation,\n relatedCollection,\n validateRelationships,\n value: value.value,\n }),\n }\n }\n }\n // Handle has one\n else if (relatedCollection) {\n result = convertRelationshipValue({\n operation,\n relatedCollection,\n validateRelationships,\n value,\n })\n }\n\n if (locale) {\n ref[locale] = result\n } else {\n ref[field.name] = result\n }\n}\n\nconst sanitizeDate = ({\n field,\n locale,\n ref,\n value,\n}: {\n field: DateField\n locale?: string\n ref: Record<string, unknown>\n value: unknown\n}) => {\n if (!value) {\n return\n }\n\n if (value instanceof Date) {\n value = value.toISOString()\n }\n\n if (locale) {\n ref[locale] = value\n } else {\n ref[field.name] = value\n }\n}\n\ntype Args = {\n $addToSet?: Record<string, { $each: any[] } | any>\n $inc?: Record<string, number>\n $pull?: Record<string, { $in: any[] } | any>\n $push?: Record<string, { $each: any[] } | any>\n /** instance of the adapter */\n adapter: MongooseAdapter\n /** data to transform, can be an array of documents or a single document */\n data: Record<string, unknown> | Record<string, unknown>[]\n /** fields accossiated with the data */\n fields: Field[]\n /** slug of the global, pass only when the operation is `write` */\n globalSlug?: string\n /**\n * Type of the operation\n * read - sanitizes ObjectIDs, Date to strings.\n * write - sanitizes string relationships to ObjectIDs.\n */\n operation: 'read' | 'write'\n parentIsLocalized?: boolean\n /**\n * Throw errors on invalid relationships\n * @default true\n */\n validateRelationships?: boolean\n}\n\nconst stripFields = ({\n config,\n data,\n fields,\n reservedKeys = [],\n}: {\n config: SanitizedConfig\n data: any\n fields: FlattenedField[]\n reservedKeys?: string[]\n}) => {\n for (const k in data) {\n if (!fields.some((field) => field.name === k) && !reservedKeys.includes(k)) {\n delete data[k]\n }\n }\n\n for (const field of fields) {\n reservedKeys = []\n const fieldData = data[field.name]\n if (!fieldData || typeof fieldData !== 'object') {\n continue\n }\n\n if (field.type === 'blocks') {\n reservedKeys.push('blockType')\n }\n\n if ('flattenedFields' in field || 'blocks' in field) {\n if (field.localized && config.localization) {\n for (const localeKey in fieldData) {\n if (!config.localization.localeCodes.some((code) => code === localeKey)) {\n delete fieldData[localeKey]\n continue\n }\n\n const localeData = fieldData[localeKey]\n\n if (!localeData || typeof localeData !== 'object') {\n continue\n }\n\n if (field.type === 'array' || field.type === 'blocks') {\n if (!Array.isArray(localeData)) {\n continue\n }\n\n let hasNull = false\n for (let i = 0; i < localeData.length; i++) {\n const data = localeData[i]\n let fields: FlattenedField[] | null = null\n\n if (field.type === 'array') {\n fields = field.flattenedFields\n } else {\n let maybeBlock: FlattenedBlock | undefined = undefined\n\n if (field.blockReferences) {\n const maybeBlockReference = field.blockReferences.find((each) => {\n const slug = typeof each === 'string' ? each : each.slug\n return slug === data.blockType\n })\n\n if (maybeBlockReference) {\n if (typeof maybeBlockReference === 'object') {\n maybeBlock = maybeBlockReference\n } else {\n maybeBlock = config.blocks?.find((each) => each.slug === maybeBlockReference)\n }\n }\n }\n\n if (!maybeBlock) {\n maybeBlock = field.blocks.find((each) => each.slug === data.blockType)\n }\n\n if (maybeBlock) {\n fields = maybeBlock.flattenedFields\n } else {\n localeData[i] = null\n hasNull = true\n }\n }\n\n if (!fields) {\n continue\n }\n\n stripFields({ config, data, fields, reservedKeys })\n }\n\n if (hasNull) {\n fieldData[localeKey] = localeData.filter(Boolean)\n }\n\n continue\n } else {\n stripFields({ config, data: localeData, fields: field.flattenedFields, reservedKeys })\n }\n }\n continue\n }\n\n if (field.type === 'array' || field.type === 'blocks') {\n if (!Array.isArray(fieldData)) {\n continue\n }\n\n let hasNull = false\n\n for (let i = 0; i < fieldData.length; i++) {\n const data = fieldData[i]\n let fields: FlattenedField[] | null = null\n\n if (field.type === 'array') {\n fields = field.flattenedFields\n } else {\n let maybeBlock: FlattenedBlock | undefined = undefined\n\n if (field.blockReferences) {\n const maybeBlockReference = field.blockReferences.find((each) => {\n const slug = typeof each === 'string' ? each : each.slug\n return slug === data.blockType\n })\n\n if (maybeBlockReference) {\n if (typeof maybeBlockReference === 'object') {\n maybeBlock = maybeBlockReference\n } else {\n maybeBlock = config.blocks?.find((each) => each.slug === maybeBlockReference)\n }\n }\n }\n\n if (!maybeBlock) {\n maybeBlock = field.blocks.find((each) => each.slug === data.blockType)\n }\n\n if (maybeBlock) {\n fields = maybeBlock.flattenedFields\n } else {\n fieldData[i] = null\n hasNull = true\n }\n }\n\n if (!fields) {\n continue\n }\n\n stripFields({ config, data, fields, reservedKeys })\n }\n\n if (hasNull) {\n data[field.name] = fieldData.filter(Boolean)\n }\n\n continue\n } else {\n stripFields({ config, data: fieldData, fields: field.flattenedFields, reservedKeys })\n }\n }\n }\n}\n\nexport const transform = ({\n $addToSet,\n $inc,\n $pull,\n $push,\n adapter,\n data,\n fields,\n globalSlug,\n operation,\n parentIsLocalized = false,\n validateRelationships = true,\n}: Args) => {\n if (!data) {\n return null\n }\n\n if (Array.isArray(data)) {\n for (const item of data) {\n transform({\n $addToSet,\n $inc,\n $pull,\n $push,\n adapter,\n data: item,\n fields,\n globalSlug,\n operation,\n validateRelationships,\n })\n }\n return\n }\n\n const {\n payload: { config },\n } = adapter\n\n if (operation === 'read') {\n delete data['__v']\n data.id = data._id || data.id\n delete data['_id']\n\n if (data.id instanceof Types.ObjectId) {\n data.id = data.id.toHexString()\n }\n\n // Handle BigInt conversion for custom ID fields of type 'number'\n if (adapter.useBigIntForNumberIDs && typeof data.id === 'bigint') {\n data.id = Number(data.id)\n }\n\n if (!adapter.allowAdditionalKeys) {\n stripFields({\n config,\n data,\n fields: flattenAllFields({ cache: true, fields }),\n reservedKeys: ['id', 'globalType'],\n })\n }\n }\n\n if (operation === 'write' && globalSlug) {\n data.globalType = globalSlug\n }\n\n const sanitize: TraverseFieldsCallback = ({\n field,\n parentIsLocalized,\n parentPath,\n parentRef: incomingParentRef,\n ref: incomingRef,\n }) => {\n if (!incomingRef || typeof incomingRef !== 'object') {\n return\n }\n\n const ref = incomingRef as Record<string, unknown>\n const parentRef = (incomingParentRef || {}) as Record<string, unknown>\n\n // Clear empty parent containers by setting them to undefined.\n const clearEmptyContainer = () => {\n if (!parentRef || typeof parentRef !== 'object') {\n return\n }\n if (!ref || typeof ref !== 'object') {\n return\n }\n if (Object.keys(ref).length > 0) {\n return\n }\n const containerKey = Object.keys(parentRef).find((k) => parentRef[k] === ref)\n if (containerKey) {\n parentRef[containerKey] = undefined\n }\n }\n\n if (\n $inc &&\n field.type === 'number' &&\n operation === 'write' &&\n field.name in ref &&\n ref[field.name]\n ) {\n const value = ref[field.name]\n if (value && typeof value === 'object' && '$inc' in value && typeof value.$inc === 'number') {\n $inc[`${parentPath}${field.name}`] = value.$inc\n delete ref[field.name]\n clearEmptyContainer()\n }\n }\n\n if (\n $push &&\n field.type === 'array' &&\n operation === 'write' &&\n field.name in ref &&\n ref[field.name]\n ) {\n const value = ref[field.name]\n\n if (\n value &&\n typeof value === 'object' &&\n ('$push' in value ||\n (config.localization &&\n fieldShouldBeLocalized({ field, parentIsLocalized }) &&\n Object.values(value).some(\n (localeValue) =>\n localeValue && typeof localeValue === 'object' && '$push' in localeValue,\n )))\n ) {\n if (config.localization && fieldShouldBeLocalized({ field, parentIsLocalized })) {\n // Handle localized fields: { field: { locale: { $push: data } } }\n let hasLocaleOperations = false\n Object.entries(value).forEach(([localeKey, localeValue]) => {\n if (localeValue && typeof localeValue === 'object' && '$push' in localeValue) {\n hasLocaleOperations = true\n const push = localeValue.$push\n if (Array.isArray(push)) {\n $push[`${parentPath}${field.name}.${localeKey}`] = { $each: push }\n } else if (typeof push === 'object') {\n $push[`${parentPath}${field.name}.${localeKey}`] = push\n }\n }\n })\n\n if (hasLocaleOperations) {\n delete ref[field.name]\n clearEmptyContainer()\n }\n } else if (value && typeof value === 'object' && '$push' in value) {\n // Handle non-localized fields: { field: { $push: data } }\n const push = value.$push\n if (Array.isArray(push)) {\n $push[`${parentPath}${field.name}`] = { $each: push }\n } else if (typeof push === 'object') {\n $push[`${parentPath}${field.name}`] = push\n }\n delete ref[field.name]\n clearEmptyContainer()\n }\n }\n }\n\n // Handle $push operation for relationship fields (converts to $addToSet)\n\n // Handle $push operation for relationship fields (converts to $addToSet) - unified approach\n if (\n $addToSet &&\n (field.type === 'relationship' || field.type === 'upload') &&\n 'hasMany' in field &&\n field.hasMany &&\n operation === 'write' &&\n field.name in ref &&\n ref[field.name]\n ) {\n const value = ref[field.name]\n\n if (\n value &&\n typeof value === 'object' &&\n ('$push' in value ||\n (config.localization &&\n fieldShouldBeLocalized({ field, parentIsLocalized }) &&\n Object.values(value).some(\n (localeValue) =>\n localeValue &&\n typeof localeValue === 'object' &&\n '$push' in (localeValue as Record<string, unknown>),\n )))\n ) {\n if (config.localization && fieldShouldBeLocalized({ field, parentIsLocalized })) {\n // Handle localized fields: { field: { locale: { $push: data } } }\n let hasLocaleOperations = false\n Object.entries(value).forEach(([localeKey, localeValue]) => {\n if (localeValue && typeof localeValue === 'object' && '$push' in localeValue) {\n hasLocaleOperations = true\n const push = localeValue.$push\n const localeItems = Array.isArray(push) ? push : [push]\n const processedLocaleItems = processRelationshipValues(\n localeItems,\n field,\n config,\n operation,\n validateRelationships,\n )\n $addToSet[`${parentPath}${field.name}.${localeKey}`] = { $each: processedLocaleItems }\n }\n })\n\n if (hasLocaleOperations) {\n delete ref[field.name]\n clearEmptyContainer()\n }\n } else if (value && typeof value === 'object' && '$push' in value) {\n // Handle non-localized fields: { field: { $push: data } }\n const itemsToAppend = Array.isArray(value.$push) ? value.$push : [value.$push]\n const processedItems = processRelationshipValues(\n itemsToAppend,\n field,\n config,\n operation,\n validateRelationships,\n )\n $addToSet[`${parentPath}${field.name}`] = { $each: processedItems }\n delete ref[field.name]\n clearEmptyContainer()\n }\n }\n }\n\n // Handle $remove operation for relationship fields (converts to $pull)\n if (\n $pull &&\n (field.type === 'relationship' || field.type === 'upload') &&\n 'hasMany' in field &&\n field.hasMany &&\n operation === 'write' &&\n field.name in ref &&\n ref[field.name]\n ) {\n const value = ref[field.name]\n if (\n value &&\n typeof value === 'object' &&\n ('$remove' in value ||\n (config.localization &&\n fieldShouldBeLocalized({ field, parentIsLocalized }) &&\n Object.values(value).some(\n (localeValue) =>\n localeValue &&\n typeof localeValue === 'object' &&\n '$remove' in (localeValue as Record<string, unknown>),\n )))\n ) {\n if (config.localization && fieldShouldBeLocalized({ field, parentIsLocalized })) {\n // Handle localized fields: { field: { locale: { $remove: data } } }\n let hasLocaleOperations = false\n Object.entries(value).forEach(([localeKey, localeValue]) => {\n if (localeValue && typeof localeValue === 'object' && '$remove' in localeValue) {\n hasLocaleOperations = true\n const remove = localeValue.$remove\n const localeItems = Array.isArray(remove) ? remove : [remove]\n const processedLocaleItems = processRelationshipValues(\n localeItems,\n field,\n config,\n operation,\n validateRelationships,\n )\n $pull[`${parentPath}${field.name}.${localeKey}`] = { $in: processedLocaleItems }\n }\n })\n\n if (hasLocaleOperations) {\n delete ref[field.name]\n clearEmptyContainer()\n }\n } else if (value && typeof value === 'object' && '$remove' in value) {\n // Handle non-localized fields: { field: { $remove: data } }\n const itemsToRemove = Array.isArray(value.$remove) ? value.$remove : [value.$remove]\n const processedItems = processRelationshipValues(\n itemsToRemove,\n field,\n config,\n operation,\n validateRelationships,\n )\n $pull[`${parentPath}${field.name}`] = { $in: processedItems }\n delete ref[field.name]\n clearEmptyContainer()\n }\n }\n }\n\n if (field.type === 'date' && operation === 'read' && field.name in ref && ref[field.name]) {\n if (config.localization && fieldShouldBeLocalized({ field, parentIsLocalized })) {\n const fieldRef = ref[field.name] as Record<string, unknown>\n if (!fieldRef || typeof fieldRef !== 'object') {\n return\n }\n\n for (const locale of config.localization.localeCodes) {\n sanitizeDate({\n field,\n locale,\n ref: fieldRef,\n value: fieldRef[locale],\n })\n }\n } else {\n sanitizeDate({\n field,\n ref,\n value: ref[field.name],\n })\n }\n }\n\n if (\n field.type === 'relationship' ||\n field.type === 'upload' ||\n (operation === 'read' && field.type === 'join')\n ) {\n if (!ref[field.name]) {\n return\n }\n\n // handle localized relationships\n if (config.localization && fieldShouldBeLocalized({ field, parentIsLocalized })) {\n const locales = config.localization.locales\n const fieldRef = ref[field.name] as Record<string, unknown>\n if (typeof fieldRef !== 'object') {\n return\n }\n\n for (const { code } of locales) {\n const value = fieldRef[code]\n if (value) {\n sanitizeRelationship({\n config,\n field,\n locale: code,\n operation,\n ref: fieldRef,\n validateRelationships,\n value,\n })\n }\n }\n } else {\n // handle non-localized relationships\n sanitizeRelationship({\n config,\n field,\n locale: undefined,\n operation,\n ref,\n validateRelationships,\n value: ref[field.name],\n })\n }\n }\n }\n\n traverseFields({\n callback: sanitize,\n config,\n fields,\n fillEmpty: false,\n parentIsLocalized,\n ref: data,\n })\n\n if (operation === 'write') {\n if (typeof data.updatedAt === 'undefined') {\n // If data.updatedAt is explicitly set to `null` we should not set it - this means we don't want to change the value of updatedAt.\n data.updatedAt = new Date().toISOString()\n } else if (data.updatedAt === null) {\n // `updatedAt` may be explicitly set to null to disable updating it - if that is the case, we need to delete the property. Keeping it as null will\n // cause the database to think we want to set it to null, which we don't.\n delete data.updatedAt\n }\n }\n}\n"],"names":["Types","flattenAllFields","traverseFields","fieldAffectsData","fieldShouldBeLocalized","isValidRelationObject","value","processRelationshipValues","items","field","config","operation","validateRelationships","map","item","Array","isArray","relationTo","relatedCollection","collections","find","slug","convertRelationshipValue","customIDField","fields","name","ObjectId","toHexString","e","sanitizeRelationship","locale","ref","type","docs","i","length","collection","JSON","parse","stringify","result","hasManyRelations","val","relatedCollectionForSingleValue","sanitizeDate","Date","toISOString","stripFields","data","reservedKeys","k","some","includes","fieldData","push","localized","localization","localeKey","localeCodes","code","localeData","hasNull","flattenedFields","maybeBlock","undefined","blockReferences","maybeBlockReference","each","blockType","blocks","filter","Boolean","transform","$addToSet","$inc","$pull","$push","adapter","globalSlug","parentIsLocalized","payload","id","_id","useBigIntForNumberIDs","Number","allowAdditionalKeys","cache","globalType","sanitize","parentPath","parentRef","incomingParentRef","incomingRef","clearEmptyContainer","Object","keys","containerKey","values","localeValue","hasLocaleOperations","entries","forEach","$each","hasMany","localeItems","processedLocaleItems","itemsToAppend","processedItems","remove","$remove","$in","itemsToRemove","fieldRef","locales","callback","fillEmpty","updatedAt"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@payloadcms/db-mongodb",
3
- "version": "3.58.0",
3
+ "version": "3.59.0-internal.56a1b3b",
4
4
  "description": "The officially supported MongoDB database adapter for Payload",
5
5
  "homepage": "https://payloadcms.com",
6
6
  "repository": {
@@ -50,10 +50,10 @@
50
50
  "mongodb": "6.16.0",
51
51
  "mongodb-memory-server": "10.1.4",
52
52
  "@payloadcms/eslint-config": "3.28.0",
53
- "payload": "3.58.0"
53
+ "payload": "3.59.0-internal.56a1b3b"
54
54
  },
55
55
  "peerDependencies": {
56
- "payload": "3.58.0"
56
+ "payload": "3.59.0-internal.56a1b3b"
57
57
  },
58
58
  "scripts": {
59
59
  "build": "pnpm build:types && pnpm build:swc",