@payloadcms/db-mongodb 3.60.0-internal.c277fd4 → 3.60.0

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":"findDistinct.d.ts","sourceRoot":"","sources":["../src/findDistinct.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAkB,MAAM,SAAS,CAAA;AAW3D,eAAO,MAAM,YAAY,EAAE,YAoP1B,CAAA"}
1
+ {"version":3,"file":"findDistinct.d.ts","sourceRoot":"","sources":["../src/findDistinct.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAkB,MAAM,SAAS,CAAA;AAW3D,eAAO,MAAM,YAAY,EAAE,YA4P1B,CAAA"}
@@ -46,7 +46,9 @@ export const findDistinct = async function(args) {
46
46
  let rels = [];
47
47
  let tempPath = '';
48
48
  let insideRelation = false;
49
- for (const segment of args.field.split('.')){
49
+ const segments = args.field.split('.');
50
+ for(let i = 0; i < segments.length; i++){
51
+ const segment = segments[i];
50
52
  const field = currentFields.find((e)=>e.name === segment);
51
53
  if (rels.length) {
52
54
  insideRelation = true;
@@ -64,6 +66,11 @@ export const findDistinct = async function(args) {
64
66
  continue;
65
67
  }
66
68
  if ((field.type === 'relationship' || field.type === 'upload') && typeof field.relationTo === 'string') {
69
+ if (i === segments.length - 2 && segments[i + 1] === 'id') {
70
+ foundField = field;
71
+ fieldPath = tempPath;
72
+ break;
73
+ }
67
74
  rels.push({
68
75
  fieldPath: tempPath,
69
76
  relationTo: field.relationTo
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/findDistinct.ts"],"sourcesContent":["import type { PipelineStage } from 'mongoose'\nimport type { FindDistinct, FlattenedField } from 'payload'\n\nimport { getFieldByPath } 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'\n\nexport const findDistinct: FindDistinct = async function (this: MongooseAdapter, args) {\n const { collectionConfig, Model } = getCollection({\n adapter: this,\n collectionSlug: args.collection,\n })\n\n const session = await getSession(this, args.req)\n\n const { where = {} } = args\n\n let sortAggregation: PipelineStage[] = []\n\n const sort = buildSortParam({\n adapter: this,\n config: this.payload.config,\n fields: collectionConfig.flattenedFields,\n locale: args.locale,\n sort: args.sort ?? args.field,\n sortAggregation,\n timestamps: true,\n })\n\n const query = await buildQuery({\n adapter: this,\n collectionSlug: args.collection,\n fields: collectionConfig.flattenedFields,\n locale: args.locale,\n where,\n })\n\n const fieldPathResult = getFieldByPath({\n config: this.payload.config,\n fields: collectionConfig.flattenedFields,\n includeRelationships: true,\n path: args.field,\n })\n let fieldPath = args.field\n if (fieldPathResult?.pathHasLocalized && args.locale) {\n fieldPath = fieldPathResult.localizedPath.replace('<locale>', args.locale)\n }\n\n const page = args.page || 1\n\n let sortProperty = Object.keys(sort)[0]! // assert because buildSortParam always returns at least 1 key.\n const sortDirection = sort[sortProperty] === 'asc' ? 1 : -1\n\n let currentFields = collectionConfig.flattenedFields\n let foundField: FlattenedField | null = null\n\n let rels: {\n fieldPath: string\n relationTo: string\n }[] = []\n\n let tempPath = ''\n let insideRelation = false\n\n for (const segment of args.field.split('.')) {\n const field = currentFields.find((e) => e.name === segment)\n if (rels.length) {\n insideRelation = true\n }\n\n if (!field) {\n break\n }\n\n if (tempPath) {\n tempPath = `${tempPath}.${field.name}`\n } else {\n tempPath = field.name\n }\n\n if ('flattenedFields' in field) {\n currentFields = field.flattenedFields\n continue\n }\n\n if (\n (field.type === 'relationship' || field.type === 'upload') &&\n typeof field.relationTo === 'string'\n ) {\n rels.push({ fieldPath: tempPath, relationTo: field.relationTo })\n currentFields = this.payload.collections[field.relationTo]?.config\n .flattenedFields as FlattenedField[]\n continue\n }\n foundField = field\n }\n\n const resolvedField = foundField || fieldPathResult?.field\n const isHasManyValue = resolvedField && 'hasMany' in resolvedField && resolvedField\n\n let relationLookup: null | PipelineStage[] = null\n\n if (!insideRelation) {\n rels = []\n }\n\n if (rels.length) {\n if (sortProperty.startsWith('_')) {\n const sortWithoutRelationPrefix = sortProperty.replace(/^_+/, '')\n const lastFieldPath = rels.at(-1)?.fieldPath as string\n if (sortWithoutRelationPrefix.startsWith(lastFieldPath)) {\n sortProperty = sortWithoutRelationPrefix\n }\n }\n relationLookup = rels.reduce<PipelineStage[]>((acc, { fieldPath, relationTo }) => {\n sortAggregation = sortAggregation.filter((each) => {\n if ('$lookup' in each && each.$lookup.as.replace(/^_+/, '') === fieldPath) {\n return false\n }\n\n return true\n })\n const { Model: foreignModel } = getCollection({ adapter: this, collectionSlug: relationTo })\n acc.push({\n $lookup: {\n as: fieldPath,\n foreignField: '_id',\n from: foreignModel.collection.name,\n localField: fieldPath,\n },\n })\n acc.push({ $unwind: `$${fieldPath}` })\n return acc\n }, [])\n }\n\n let $unwind: any = ''\n let $group: any = null\n if (\n isHasManyValue &&\n sortAggregation.length &&\n sortAggregation[0] &&\n '$lookup' in sortAggregation[0]\n ) {\n $unwind = { path: `$${sortAggregation[0].$lookup.as}`, preserveNullAndEmptyArrays: true }\n $group = {\n _id: {\n _field: `$${sortAggregation[0].$lookup.as}._id`,\n _sort: `$${sortProperty}`,\n },\n }\n } else if (isHasManyValue) {\n $unwind = { path: `$${args.field}`, preserveNullAndEmptyArrays: true }\n }\n\n if (!$group) {\n $group = {\n _id: {\n _field: `$${fieldPath}`,\n ...(sortProperty === fieldPath\n ? {}\n : {\n _sort: `$${sortProperty}`,\n }),\n },\n }\n }\n\n const pipeline: PipelineStage[] = [\n {\n $match: query,\n },\n ...(sortAggregation.length > 0 ? sortAggregation : []),\n ...(relationLookup?.length ? relationLookup : []),\n ...($unwind\n ? [\n {\n $unwind,\n },\n ]\n : []),\n {\n $group,\n },\n {\n $sort: {\n [sortProperty === fieldPath ? '_id._field' : '_id._sort']: sortDirection,\n },\n },\n ]\n\n const getValues = async () => {\n return Model.aggregate(pipeline, { session }).then((res) =>\n res.map((each) => ({\n [args.field]: JSON.parse(JSON.stringify(each._id._field)),\n })),\n )\n }\n\n if (args.limit) {\n pipeline.push({\n $skip: (page - 1) * args.limit,\n })\n pipeline.push({ $limit: args.limit })\n const totalDocs = await Model.aggregate(\n [\n {\n $match: query,\n },\n {\n $group: {\n _id: `$${fieldPath}`,\n },\n },\n { $count: 'count' },\n ],\n {\n session,\n },\n ).then((res) => res[0]?.count ?? 0)\n const totalPages = Math.ceil(totalDocs / args.limit)\n const hasPrevPage = page > 1\n const hasNextPage = totalPages > page\n const pagingCounter = (page - 1) * args.limit + 1\n\n return {\n hasNextPage,\n hasPrevPage,\n limit: args.limit,\n nextPage: hasNextPage ? page + 1 : null,\n page,\n pagingCounter,\n prevPage: hasPrevPage ? page - 1 : null,\n totalDocs,\n totalPages,\n values: await getValues(),\n }\n }\n\n const values = await getValues()\n\n return {\n hasNextPage: false,\n hasPrevPage: false,\n limit: 0,\n page: 1,\n pagingCounter: 1,\n totalDocs: values.length,\n totalPages: 1,\n values,\n }\n}\n"],"names":["getFieldByPath","buildQuery","buildSortParam","getCollection","getSession","findDistinct","args","collectionConfig","Model","adapter","collectionSlug","collection","session","req","where","sortAggregation","sort","config","payload","fields","flattenedFields","locale","field","timestamps","query","fieldPathResult","includeRelationships","path","fieldPath","pathHasLocalized","localizedPath","replace","page","sortProperty","Object","keys","sortDirection","currentFields","foundField","rels","tempPath","insideRelation","segment","split","find","e","name","length","type","relationTo","push","collections","resolvedField","isHasManyValue","relationLookup","startsWith","sortWithoutRelationPrefix","lastFieldPath","at","reduce","acc","filter","each","$lookup","as","foreignModel","foreignField","from","localField","$unwind","$group","preserveNullAndEmptyArrays","_id","_field","_sort","pipeline","$match","$sort","getValues","aggregate","then","res","map","JSON","parse","stringify","limit","$skip","$limit","totalDocs","$count","count","totalPages","Math","ceil","hasPrevPage","hasNextPage","pagingCounter","nextPage","prevPage","values"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/findDistinct.ts"],"sourcesContent":["import type { PipelineStage } from 'mongoose'\nimport type { FindDistinct, FlattenedField } from 'payload'\n\nimport { getFieldByPath } 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'\n\nexport const findDistinct: FindDistinct = async function (this: MongooseAdapter, args) {\n const { collectionConfig, Model } = getCollection({\n adapter: this,\n collectionSlug: args.collection,\n })\n\n const session = await getSession(this, args.req)\n\n const { where = {} } = args\n\n let sortAggregation: PipelineStage[] = []\n\n const sort = buildSortParam({\n adapter: this,\n config: this.payload.config,\n fields: collectionConfig.flattenedFields,\n locale: args.locale,\n sort: args.sort ?? args.field,\n sortAggregation,\n timestamps: true,\n })\n\n const query = await buildQuery({\n adapter: this,\n collectionSlug: args.collection,\n fields: collectionConfig.flattenedFields,\n locale: args.locale,\n where,\n })\n\n const fieldPathResult = getFieldByPath({\n config: this.payload.config,\n fields: collectionConfig.flattenedFields,\n includeRelationships: true,\n path: args.field,\n })\n let fieldPath = args.field\n if (fieldPathResult?.pathHasLocalized && args.locale) {\n fieldPath = fieldPathResult.localizedPath.replace('<locale>', args.locale)\n }\n\n const page = args.page || 1\n\n let sortProperty = Object.keys(sort)[0]! // assert because buildSortParam always returns at least 1 key.\n const sortDirection = sort[sortProperty] === 'asc' ? 1 : -1\n\n let currentFields = collectionConfig.flattenedFields\n let foundField: FlattenedField | null = null\n\n let rels: {\n fieldPath: string\n relationTo: string\n }[] = []\n\n let tempPath = ''\n let insideRelation = false\n\n const segments = args.field.split('.')\n\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i]\n const field = currentFields.find((e) => e.name === segment)\n if (rels.length) {\n insideRelation = true\n }\n\n if (!field) {\n break\n }\n\n if (tempPath) {\n tempPath = `${tempPath}.${field.name}`\n } else {\n tempPath = field.name\n }\n\n if ('flattenedFields' in field) {\n currentFields = field.flattenedFields\n continue\n }\n\n if (\n (field.type === 'relationship' || field.type === 'upload') &&\n typeof field.relationTo === 'string'\n ) {\n if (i === segments.length - 2 && segments[i + 1] === 'id') {\n foundField = field\n fieldPath = tempPath\n break\n }\n rels.push({ fieldPath: tempPath, relationTo: field.relationTo })\n currentFields = this.payload.collections[field.relationTo]?.config\n .flattenedFields as FlattenedField[]\n continue\n }\n foundField = field\n }\n\n const resolvedField = foundField || fieldPathResult?.field\n const isHasManyValue = resolvedField && 'hasMany' in resolvedField && resolvedField\n\n let relationLookup: null | PipelineStage[] = null\n\n if (!insideRelation) {\n rels = []\n }\n\n if (rels.length) {\n if (sortProperty.startsWith('_')) {\n const sortWithoutRelationPrefix = sortProperty.replace(/^_+/, '')\n const lastFieldPath = rels.at(-1)?.fieldPath as string\n if (sortWithoutRelationPrefix.startsWith(lastFieldPath)) {\n sortProperty = sortWithoutRelationPrefix\n }\n }\n relationLookup = rels.reduce<PipelineStage[]>((acc, { fieldPath, relationTo }) => {\n sortAggregation = sortAggregation.filter((each) => {\n if ('$lookup' in each && each.$lookup.as.replace(/^_+/, '') === fieldPath) {\n return false\n }\n\n return true\n })\n const { Model: foreignModel } = getCollection({ adapter: this, collectionSlug: relationTo })\n acc.push({\n $lookup: {\n as: fieldPath,\n foreignField: '_id',\n from: foreignModel.collection.name,\n localField: fieldPath,\n },\n })\n acc.push({ $unwind: `$${fieldPath}` })\n return acc\n }, [])\n }\n\n let $unwind: any = ''\n let $group: any = null\n if (\n isHasManyValue &&\n sortAggregation.length &&\n sortAggregation[0] &&\n '$lookup' in sortAggregation[0]\n ) {\n $unwind = { path: `$${sortAggregation[0].$lookup.as}`, preserveNullAndEmptyArrays: true }\n $group = {\n _id: {\n _field: `$${sortAggregation[0].$lookup.as}._id`,\n _sort: `$${sortProperty}`,\n },\n }\n } else if (isHasManyValue) {\n $unwind = { path: `$${args.field}`, preserveNullAndEmptyArrays: true }\n }\n\n if (!$group) {\n $group = {\n _id: {\n _field: `$${fieldPath}`,\n ...(sortProperty === fieldPath\n ? {}\n : {\n _sort: `$${sortProperty}`,\n }),\n },\n }\n }\n\n const pipeline: PipelineStage[] = [\n {\n $match: query,\n },\n ...(sortAggregation.length > 0 ? sortAggregation : []),\n ...(relationLookup?.length ? relationLookup : []),\n ...($unwind\n ? [\n {\n $unwind,\n },\n ]\n : []),\n {\n $group,\n },\n {\n $sort: {\n [sortProperty === fieldPath ? '_id._field' : '_id._sort']: sortDirection,\n },\n },\n ]\n\n const getValues = async () => {\n return Model.aggregate(pipeline, { session }).then((res) =>\n res.map((each) => ({\n [args.field]: JSON.parse(JSON.stringify(each._id._field)),\n })),\n )\n }\n\n if (args.limit) {\n pipeline.push({\n $skip: (page - 1) * args.limit,\n })\n pipeline.push({ $limit: args.limit })\n const totalDocs = await Model.aggregate(\n [\n {\n $match: query,\n },\n {\n $group: {\n _id: `$${fieldPath}`,\n },\n },\n { $count: 'count' },\n ],\n {\n session,\n },\n ).then((res) => res[0]?.count ?? 0)\n const totalPages = Math.ceil(totalDocs / args.limit)\n const hasPrevPage = page > 1\n const hasNextPage = totalPages > page\n const pagingCounter = (page - 1) * args.limit + 1\n\n return {\n hasNextPage,\n hasPrevPage,\n limit: args.limit,\n nextPage: hasNextPage ? page + 1 : null,\n page,\n pagingCounter,\n prevPage: hasPrevPage ? page - 1 : null,\n totalDocs,\n totalPages,\n values: await getValues(),\n }\n }\n\n const values = await getValues()\n\n return {\n hasNextPage: false,\n hasPrevPage: false,\n limit: 0,\n page: 1,\n pagingCounter: 1,\n totalDocs: values.length,\n totalPages: 1,\n values,\n }\n}\n"],"names":["getFieldByPath","buildQuery","buildSortParam","getCollection","getSession","findDistinct","args","collectionConfig","Model","adapter","collectionSlug","collection","session","req","where","sortAggregation","sort","config","payload","fields","flattenedFields","locale","field","timestamps","query","fieldPathResult","includeRelationships","path","fieldPath","pathHasLocalized","localizedPath","replace","page","sortProperty","Object","keys","sortDirection","currentFields","foundField","rels","tempPath","insideRelation","segments","split","i","length","segment","find","e","name","type","relationTo","push","collections","resolvedField","isHasManyValue","relationLookup","startsWith","sortWithoutRelationPrefix","lastFieldPath","at","reduce","acc","filter","each","$lookup","as","foreignModel","foreignField","from","localField","$unwind","$group","preserveNullAndEmptyArrays","_id","_field","_sort","pipeline","$match","$sort","getValues","aggregate","then","res","map","JSON","parse","stringify","limit","$skip","$limit","totalDocs","$count","count","totalPages","Math","ceil","hasPrevPage","hasNextPage","pagingCounter","nextPage","prevPage","values"],"mappings":"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"}
@@ -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;AAgPlD,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;AA0KD,eAAO,MAAM,SAAS,+HAYnB,IAAI,qBAsXN,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;AAmQlD,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;AA0KD,eAAO,MAAM,SAAS,+HAYnB,IAAI,qBA4XN,CAAA"}
@@ -8,7 +8,7 @@ function isValidRelationObject(value) {
8
8
  /**
9
9
  * Process relationship values for polymorphic and simple relationships
10
10
  * Used by both $push and $remove operations
11
- */ const processRelationshipValues = (items, field, config, operation, validateRelationships)=>{
11
+ */ const processRelationshipValues = (items, field, config, operation, validateRelationships, adapter)=>{
12
12
  return items.map((item)=>{
13
13
  // Handle polymorphic relationships
14
14
  if (Array.isArray(field.relationTo) && isValidRelationObject(item)) {
@@ -17,6 +17,7 @@ function isValidRelationObject(value) {
17
17
  return {
18
18
  relationTo: item.relationTo,
19
19
  value: convertRelationshipValue({
20
+ adapter,
20
21
  operation,
21
22
  relatedCollection,
22
23
  validateRelationships,
@@ -31,6 +32,7 @@ function isValidRelationObject(value) {
31
32
  const relatedCollection = config.collections?.find(({ slug })=>slug === field.relationTo);
32
33
  if (relatedCollection) {
33
34
  return convertRelationshipValue({
35
+ adapter,
34
36
  operation,
35
37
  relatedCollection,
36
38
  validateRelationships,
@@ -41,12 +43,15 @@ function isValidRelationObject(value) {
41
43
  return item;
42
44
  });
43
45
  };
44
- const convertRelationshipValue = ({ operation, relatedCollection, validateRelationships, value })=>{
46
+ const convertRelationshipValue = ({ adapter, operation, relatedCollection, validateRelationships, value })=>{
45
47
  const customIDField = relatedCollection.fields.find((field)=>fieldAffectsData(field) && field.name === 'id');
46
48
  if (operation === 'read') {
47
49
  if (isObjectID(value)) {
48
50
  return value.toHexString();
49
51
  }
52
+ if (customIDField?.type === 'number' && typeof value === 'bigint' && adapter.useBigIntForNumberIDs) {
53
+ return Number(value);
54
+ }
50
55
  return value;
51
56
  }
52
57
  if (customIDField) {
@@ -64,7 +69,7 @@ const convertRelationshipValue = ({ operation, relatedCollection, validateRelati
64
69
  }
65
70
  return value;
66
71
  };
67
- const sanitizeRelationship = ({ config, field, locale, operation, ref, validateRelationships, value })=>{
72
+ const sanitizeRelationship = ({ adapter, config, field, locale, operation, ref, validateRelationships, value })=>{
68
73
  if (field.type === 'join') {
69
74
  if (operation === 'read' && value && typeof value === 'object' && 'docs' in value && Array.isArray(value.docs)) {
70
75
  for(let i = 0; i < value.docs.length; i++){
@@ -94,6 +99,7 @@ const sanitizeRelationship = ({ config, field, locale, operation, ref, validateR
94
99
  return {
95
100
  relationTo: val.relationTo,
96
101
  value: convertRelationshipValue({
102
+ adapter,
97
103
  operation,
98
104
  relatedCollection: relatedCollectionForSingleValue,
99
105
  validateRelationships,
@@ -104,6 +110,7 @@ const sanitizeRelationship = ({ config, field, locale, operation, ref, validateR
104
110
  }
105
111
  if (relatedCollection) {
106
112
  return convertRelationshipValue({
113
+ adapter,
107
114
  operation,
108
115
  relatedCollection,
109
116
  validateRelationships,
@@ -118,6 +125,7 @@ const sanitizeRelationship = ({ config, field, locale, operation, ref, validateR
118
125
  result = {
119
126
  relationTo: value.relationTo,
120
127
  value: convertRelationshipValue({
128
+ adapter,
121
129
  operation,
122
130
  relatedCollection,
123
131
  validateRelationships,
@@ -127,6 +135,7 @@ const sanitizeRelationship = ({ config, field, locale, operation, ref, validateR
127
135
  }
128
136
  } else if (relatedCollection) {
129
137
  result = convertRelationshipValue({
138
+ adapter,
130
139
  operation,
131
140
  relatedCollection,
132
141
  validateRelationships,
@@ -447,7 +456,7 @@ export const transform = ({ $addToSet, $inc, $pull, $push, adapter, data, fields
447
456
  const localeItems = Array.isArray(push) ? push : [
448
457
  push
449
458
  ];
450
- const processedLocaleItems = processRelationshipValues(localeItems, field, config, operation, validateRelationships);
459
+ const processedLocaleItems = processRelationshipValues(localeItems, field, config, operation, validateRelationships, adapter);
451
460
  $addToSet[`${parentPath}${field.name}.${localeKey}`] = {
452
461
  $each: processedLocaleItems
453
462
  };
@@ -462,7 +471,7 @@ export const transform = ({ $addToSet, $inc, $pull, $push, adapter, data, fields
462
471
  const itemsToAppend = Array.isArray(value.$push) ? value.$push : [
463
472
  value.$push
464
473
  ];
465
- const processedItems = processRelationshipValues(itemsToAppend, field, config, operation, validateRelationships);
474
+ const processedItems = processRelationshipValues(itemsToAppend, field, config, operation, validateRelationships, adapter);
466
475
  $addToSet[`${parentPath}${field.name}`] = {
467
476
  $each: processedItems
468
477
  };
@@ -491,7 +500,7 @@ export const transform = ({ $addToSet, $inc, $pull, $push, adapter, data, fields
491
500
  const localeItems = Array.isArray(remove) ? remove : [
492
501
  remove
493
502
  ];
494
- const processedLocaleItems = processRelationshipValues(localeItems, field, config, operation, validateRelationships);
503
+ const processedLocaleItems = processRelationshipValues(localeItems, field, config, operation, validateRelationships, adapter);
495
504
  $pull[`${parentPath}${field.name}.${localeKey}`] = {
496
505
  $in: processedLocaleItems
497
506
  };
@@ -506,7 +515,7 @@ export const transform = ({ $addToSet, $inc, $pull, $push, adapter, data, fields
506
515
  const itemsToRemove = Array.isArray(value.$remove) ? value.$remove : [
507
516
  value.$remove
508
517
  ];
509
- const processedItems = processRelationshipValues(itemsToRemove, field, config, operation, validateRelationships);
518
+ const processedItems = processRelationshipValues(itemsToRemove, field, config, operation, validateRelationships, adapter);
510
519
  $pull[`${parentPath}${field.name}`] = {
511
520
  $in: processedItems
512
521
  };
@@ -558,6 +567,7 @@ export const transform = ({ $addToSet, $inc, $pull, $push, adapter, data, fields
558
567
  const value = fieldRef[code];
559
568
  if (value) {
560
569
  sanitizeRelationship({
570
+ adapter,
561
571
  config,
562
572
  field,
563
573
  locale: code,
@@ -571,6 +581,7 @@ export const transform = ({ $addToSet, $inc, $pull, $push, adapter, data, fields
571
581
  } else {
572
582
  // handle non-localized relationships
573
583
  sanitizeRelationship({
584
+ adapter,
574
585
  config,
575
586
  field,
576
587
  locale: undefined,
@@ -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\nimport { isObjectID } from './isObjectID.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 (isObjectID(value)) {\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 (isObjectID(item)) {\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 if (field.type === 'blocks') {\n fieldData[localeKey] = []\n }\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 (isObjectID(data.id)) {\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","isObjectID","isValidRelationObject","value","processRelationshipValues","items","field","config","operation","validateRelationships","map","item","Array","isArray","relationTo","relatedCollection","collections","find","slug","convertRelationshipValue","customIDField","fields","name","toHexString","ObjectId","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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"}
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\nimport { isObjectID } from './isObjectID.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 adapter: MongooseAdapter,\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 adapter,\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 adapter,\n operation,\n relatedCollection,\n validateRelationships,\n value: item,\n })\n }\n }\n\n return item\n })\n}\n\nconst convertRelationshipValue = ({\n adapter,\n operation,\n relatedCollection,\n validateRelationships,\n value,\n}: {\n adapter: MongooseAdapter\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 (isObjectID(value)) {\n return value.toHexString()\n }\n\n if (\n customIDField?.type === 'number' &&\n typeof value === 'bigint' &&\n adapter.useBigIntForNumberIDs\n ) {\n return Number(value)\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 adapter,\n config,\n field,\n locale,\n operation,\n ref,\n validateRelationships,\n value,\n}: {\n adapter: MongooseAdapter\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 (isObjectID(item)) {\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 adapter,\n operation,\n relatedCollection: relatedCollectionForSingleValue,\n validateRelationships,\n value: val.value,\n }),\n }\n }\n }\n\n if (relatedCollection) {\n return convertRelationshipValue({\n adapter,\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 adapter,\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 adapter,\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 if (field.type === 'blocks') {\n fieldData[localeKey] = []\n }\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 (isObjectID(data.id)) {\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 adapter,\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 adapter,\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 adapter,\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 adapter,\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 adapter,\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 adapter,\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","isObjectID","isValidRelationObject","value","processRelationshipValues","items","field","config","operation","validateRelationships","adapter","map","item","Array","isArray","relationTo","relatedCollection","collections","find","slug","convertRelationshipValue","customIDField","fields","name","toHexString","type","useBigIntForNumberIDs","Number","ObjectId","e","sanitizeRelationship","locale","ref","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","globalSlug","parentIsLocalized","payload","id","_id","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":"AAaA,SAASA,KAAK,QAAQ,WAAU;AAChC,SAASC,gBAAgB,EAAEC,cAAc,QAAQ,UAAS;AAC1D,SAASC,gBAAgB,EAAEC,sBAAsB,QAAQ,iBAAgB;AAIzE,SAASC,UAAU,QAAQ,kBAAiB;AAO5C,SAASC,sBAAsBC,KAAc;IAC3C,OAAO,OAAOA,UAAU,YAAYA,UAAU,QAAQ,gBAAgBA,SAAS,WAAWA;AAC5F;AAEA;;;CAGC,GACD,MAAMC,4BAA4B,CAChCC,OACAC,OACAC,QACAC,WACAC,uBACAC;IAEA,OAAOL,MAAMM,GAAG,CAAC,CAACC;QAChB,mCAAmC;QACnC,IAAIC,MAAMC,OAAO,CAACR,MAAMS,UAAU,KAAKb,sBAAsBU,OAAO;YAClE,MAAMI,oBAAoBT,OAAOU,WAAW,EAAEC,KAAK,CAAC,EAAEC,IAAI,EAAE,GAAKA,SAASP,KAAKG,UAAU;YACzF,IAAIC,mBAAmB;gBACrB,OAAO;oBACLD,YAAYH,KAAKG,UAAU;oBAC3BZ,OAAOiB,yBAAyB;wBAC9BV;wBACAF;wBACAQ;wBACAP;wBACAN,OAAOS,KAAKT,KAAK;oBACnB;gBACF;YACF;YACA,OAAOS;QACT;QAEA,8BAA8B;QAC9B,IAAI,OAAON,MAAMS,UAAU,KAAK,UAAU;YACxC,MAAMC,oBAAoBT,OAAOU,WAAW,EAAEC,KAAK,CAAC,EAAEC,IAAI,EAAE,GAAKA,SAASb,MAAMS,UAAU;YAC1F,IAAIC,mBAAmB;gBACrB,OAAOI,yBAAyB;oBAC9BV;oBACAF;oBACAQ;oBACAP;oBACAN,OAAOS;gBACT;YACF;QACF;QAEA,OAAOA;IACT;AACF;AAEA,MAAMQ,2BAA2B,CAAC,EAChCV,OAAO,EACPF,SAAS,EACTQ,iBAAiB,EACjBP,qBAAqB,EACrBN,KAAK,EAON;IACC,MAAMkB,gBAAgBL,kBAAkBM,MAAM,CAACJ,IAAI,CACjD,CAACZ,QAAUP,iBAAiBO,UAAUA,MAAMiB,IAAI,KAAK;IAGvD,IAAIf,cAAc,QAAQ;QACxB,IAAIP,WAAWE,QAAQ;YACrB,OAAOA,MAAMqB,WAAW;QAC1B;QAEA,IACEH,eAAeI,SAAS,YACxB,OAAOtB,UAAU,YACjBO,QAAQgB,qBAAqB,EAC7B;YACA,OAAOC,OAAOxB;QAChB;QAEA,OAAOA;IACT;IAEA,IAAIkB,eAAe;QACjB,OAAOlB;IACT;IAEA,IAAI,OAAOA,UAAU,UAAU;QAC7B,IAAI;YACF,OAAO,IAAIP,MAAMgC,QAAQ,CAACzB;QAC5B,EAAE,OAAO0B,GAAG;YACV,IAAIpB,uBAAuB;gBACzB,MAAMoB;YACR;YACA,OAAO1B;QACT;IACF;IAEA,OAAOA;AACT;AAEA,MAAM2B,uBAAuB,CAAC,EAC5BpB,OAAO,EACPH,MAAM,EACND,KAAK,EACLyB,MAAM,EACNvB,SAAS,EACTwB,GAAG,EACHvB,qBAAqB,EACrBN,KAAK,EAUN;IACC,IAAIG,MAAMmB,IAAI,KAAK,QAAQ;QACzB,IACEjB,cAAc,UACdL,SACA,OAAOA,UAAU,YACjB,UAAUA,SACVU,MAAMC,OAAO,CAACX,MAAM8B,IAAI,GACxB;YACA,IAAK,IAAIC,IAAI,GAAGA,IAAI/B,MAAM8B,IAAI,CAACE,MAAM,EAAED,IAAK;gBAC1C,MAAMtB,OAAOT,MAAM8B,IAAI,CAACC,EAAE;gBAE1B,IAAIjC,WAAWW,OAAO;oBACpBT,MAAM8B,IAAI,CAACC,EAAE,GAAGtB,KAAKY,WAAW;gBAClC,OAAO,IAAIX,MAAMC,OAAO,CAACR,MAAM8B,UAAU,KAAKxB,MAAM;oBAClD,6EAA6E;oBAC7ET,MAAM8B,IAAI,CAACC,EAAE,GAAGG,KAAKC,KAAK,CAACD,KAAKE,SAAS,CAACpC,MAAM8B,IAAI,CAACC,EAAE;gBACzD;YACF;QACF;QAEA,OAAO/B;IACT;IACA,IAAIa;IACJ,IAAIwB,SAASrC;IAEb,MAAMsC,mBAAmB,OAAOnC,MAAMS,UAAU,KAAK;IAErD,IAAI,CAAC0B,kBAAkB;QACrBzB,oBAAoBT,OAAOU,WAAW,EAAEC,KAAK,CAAC,EAAEC,IAAI,EAAE,GAAKA,SAASb,MAAMS,UAAU;IACtF;IAEA,IAAIF,MAAMC,OAAO,CAACX,QAAQ;QACxBqC,SAASrC,MAAMQ,GAAG,CAAC,CAAC+B;YAClB,gCAAgC;YAChC,IAAIxC,sBAAsBwC,MAAM;gBAC9B,MAAMC,kCAAkCpC,OAAOU,WAAW,EAAEC,KAC1D,CAAC,EAAEC,IAAI,EAAE,GAAKA,SAASuB,IAAI3B,UAAU;gBAGvC,IAAI4B,iCAAiC;oBACnC,OAAO;wBACL5B,YAAY2B,IAAI3B,UAAU;wBAC1BZ,OAAOiB,yBAAyB;4BAC9BV;4BACAF;4BACAQ,mBAAmB2B;4BACnBlC;4BACAN,OAAOuC,IAAIvC,KAAK;wBAClB;oBACF;gBACF;YACF;YAEA,IAAIa,mBAAmB;gBACrB,OAAOI,yBAAyB;oBAC9BV;oBACAF;oBACAQ;oBACAP;oBACAN,OAAOuC;gBACT;YACF;YAEA,OAAOA;QACT;IACF,OAEK,IAAIxC,sBAAsBC,QAAQ;QACrCa,oBAAoBT,OAAOU,WAAW,EAAEC,KAAK,CAAC,EAAEC,IAAI,EAAE,GAAKA,SAAShB,MAAMY,UAAU;QAEpF,IAAIC,mBAAmB;YACrBwB,SAAS;gBACPzB,YAAYZ,MAAMY,UAAU;gBAC5BZ,OAAOiB,yBAAyB;oBAC9BV;oBACAF;oBACAQ;oBACAP;oBACAN,OAAOA,MAAMA,KAAK;gBACpB;YACF;QACF;IACF,OAEK,IAAIa,mBAAmB;QAC1BwB,SAASpB,yBAAyB;YAChCV;YACAF;YACAQ;YACAP;YACAN;QACF;IACF;IAEA,IAAI4B,QAAQ;QACVC,GAAG,CAACD,OAAO,GAAGS;IAChB,OAAO;QACLR,GAAG,CAAC1B,MAAMiB,IAAI,CAAC,GAAGiB;IACpB;AACF;AAEA,MAAMI,eAAe,CAAC,EACpBtC,KAAK,EACLyB,MAAM,EACNC,GAAG,EACH7B,KAAK,EAMN;IACC,IAAI,CAACA,OAAO;QACV;IACF;IAEA,IAAIA,iBAAiB0C,MAAM;QACzB1C,QAAQA,MAAM2C,WAAW;IAC3B;IAEA,IAAIf,QAAQ;QACVC,GAAG,CAACD,OAAO,GAAG5B;IAChB,OAAO;QACL6B,GAAG,CAAC1B,MAAMiB,IAAI,CAAC,GAAGpB;IACpB;AACF;AA6BA,MAAM4C,cAAc,CAAC,EACnBxC,MAAM,EACNyC,IAAI,EACJ1B,MAAM,EACN2B,eAAe,EAAE,EAMlB;IACC,IAAK,MAAMC,KAAKF,KAAM;QACpB,IAAI,CAAC1B,OAAO6B,IAAI,CAAC,CAAC7C,QAAUA,MAAMiB,IAAI,KAAK2B,MAAM,CAACD,aAAaG,QAAQ,CAACF,IAAI;YAC1E,OAAOF,IAAI,CAACE,EAAE;QAChB;IACF;IAEA,KAAK,MAAM5C,SAASgB,OAAQ;QAC1B2B,eAAe,EAAE;QACjB,MAAMI,YAAYL,IAAI,CAAC1C,MAAMiB,IAAI,CAAC;QAClC,IAAI,CAAC8B,aAAa,OAAOA,cAAc,UAAU;YAC/C;QACF;QAEA,IAAI/C,MAAMmB,IAAI,KAAK,UAAU;YAC3BwB,aAAaK,IAAI,CAAC;QACpB;QAEA,IAAI,qBAAqBhD,SAAS,YAAYA,OAAO;YACnD,IAAIA,MAAMiD,SAAS,IAAIhD,OAAOiD,YAAY,EAAE;gBAC1C,IAAK,MAAMC,aAAaJ,UAAW;oBACjC,IAAI,CAAC9C,OAAOiD,YAAY,CAACE,WAAW,CAACP,IAAI,CAAC,CAACQ,OAASA,SAASF,YAAY;wBACvE,OAAOJ,SAAS,CAACI,UAAU;wBAC3B;oBACF;oBAEA,MAAMG,aAAaP,SAAS,CAACI,UAAU;oBAEvC,IAAI,CAACG,cAAc,OAAOA,eAAe,UAAU;wBACjD,IAAItD,MAAMmB,IAAI,KAAK,UAAU;4BAC3B4B,SAAS,CAACI,UAAU,GAAG,EAAE;wBAC3B;wBACA;oBACF;oBAEA,IAAInD,MAAMmB,IAAI,KAAK,WAAWnB,MAAMmB,IAAI,KAAK,UAAU;wBACrD,IAAI,CAACZ,MAAMC,OAAO,CAAC8C,aAAa;4BAC9B;wBACF;wBAEA,IAAIC,UAAU;wBACd,IAAK,IAAI3B,IAAI,GAAGA,IAAI0B,WAAWzB,MAAM,EAAED,IAAK;4BAC1C,MAAMc,OAAOY,UAAU,CAAC1B,EAAE;4BAC1B,IAAIZ,SAAkC;4BAEtC,IAAIhB,MAAMmB,IAAI,KAAK,SAAS;gCAC1BH,SAAShB,MAAMwD,eAAe;4BAChC,OAAO;gCACL,IAAIC,aAAyCC;gCAE7C,IAAI1D,MAAM2D,eAAe,EAAE;oCACzB,MAAMC,sBAAsB5D,MAAM2D,eAAe,CAAC/C,IAAI,CAAC,CAACiD;wCACtD,MAAMhD,OAAO,OAAOgD,SAAS,WAAWA,OAAOA,KAAKhD,IAAI;wCACxD,OAAOA,SAAS6B,KAAKoB,SAAS;oCAChC;oCAEA,IAAIF,qBAAqB;wCACvB,IAAI,OAAOA,wBAAwB,UAAU;4CAC3CH,aAAaG;wCACf,OAAO;4CACLH,aAAaxD,OAAO8D,MAAM,EAAEnD,KAAK,CAACiD,OAASA,KAAKhD,IAAI,KAAK+C;wCAC3D;oCACF;gCACF;gCAEA,IAAI,CAACH,YAAY;oCACfA,aAAazD,MAAM+D,MAAM,CAACnD,IAAI,CAAC,CAACiD,OAASA,KAAKhD,IAAI,KAAK6B,KAAKoB,SAAS;gCACvE;gCAEA,IAAIL,YAAY;oCACdzC,SAASyC,WAAWD,eAAe;gCACrC,OAAO;oCACLF,UAAU,CAAC1B,EAAE,GAAG;oCAChB2B,UAAU;gCACZ;4BACF;4BAEA,IAAI,CAACvC,QAAQ;gCACX;4BACF;4BAEAyB,YAAY;gCAAExC;gCAAQyC;gCAAM1B;gCAAQ2B;4BAAa;wBACnD;wBAEA,IAAIY,SAAS;4BACXR,SAAS,CAACI,UAAU,GAAGG,WAAWU,MAAM,CAACC;wBAC3C;wBAEA;oBACF,OAAO;wBACLxB,YAAY;4BAAExC;4BAAQyC,MAAMY;4BAAYtC,QAAQhB,MAAMwD,eAAe;4BAAEb;wBAAa;oBACtF;gBACF;gBACA;YACF;YAEA,IAAI3C,MAAMmB,IAAI,KAAK,WAAWnB,MAAMmB,IAAI,KAAK,UAAU;gBACrD,IAAI,CAACZ,MAAMC,OAAO,CAACuC,YAAY;oBAC7B;gBACF;gBAEA,IAAIQ,UAAU;gBAEd,IAAK,IAAI3B,IAAI,GAAGA,IAAImB,UAAUlB,MAAM,EAAED,IAAK;oBACzC,MAAMc,OAAOK,SAAS,CAACnB,EAAE;oBACzB,IAAIZ,SAAkC;oBAEtC,IAAIhB,MAAMmB,IAAI,KAAK,SAAS;wBAC1BH,SAAShB,MAAMwD,eAAe;oBAChC,OAAO;wBACL,IAAIC,aAAyCC;wBAE7C,IAAI1D,MAAM2D,eAAe,EAAE;4BACzB,MAAMC,sBAAsB5D,MAAM2D,eAAe,CAAC/C,IAAI,CAAC,CAACiD;gCACtD,MAAMhD,OAAO,OAAOgD,SAAS,WAAWA,OAAOA,KAAKhD,IAAI;gCACxD,OAAOA,SAAS6B,KAAKoB,SAAS;4BAChC;4BAEA,IAAIF,qBAAqB;gCACvB,IAAI,OAAOA,wBAAwB,UAAU;oCAC3CH,aAAaG;gCACf,OAAO;oCACLH,aAAaxD,OAAO8D,MAAM,EAAEnD,KAAK,CAACiD,OAASA,KAAKhD,IAAI,KAAK+C;gCAC3D;4BACF;wBACF;wBAEA,IAAI,CAACH,YAAY;4BACfA,aAAazD,MAAM+D,MAAM,CAACnD,IAAI,CAAC,CAACiD,OAASA,KAAKhD,IAAI,KAAK6B,KAAKoB,SAAS;wBACvE;wBAEA,IAAIL,YAAY;4BACdzC,SAASyC,WAAWD,eAAe;wBACrC,OAAO;4BACLT,SAAS,CAACnB,EAAE,GAAG;4BACf2B,UAAU;wBACZ;oBACF;oBAEA,IAAI,CAACvC,QAAQ;wBACX;oBACF;oBAEAyB,YAAY;wBAAExC;wBAAQyC;wBAAM1B;wBAAQ2B;oBAAa;gBACnD;gBAEA,IAAIY,SAAS;oBACXb,IAAI,CAAC1C,MAAMiB,IAAI,CAAC,GAAG8B,UAAUiB,MAAM,CAACC;gBACtC;gBAEA;YACF,OAAO;gBACLxB,YAAY;oBAAExC;oBAAQyC,MAAMK;oBAAW/B,QAAQhB,MAAMwD,eAAe;oBAAEb;gBAAa;YACrF;QACF;IACF;AACF;AAEA,OAAO,MAAMuB,YAAY,CAAC,EACxBC,SAAS,EACTC,IAAI,EACJC,KAAK,EACLC,KAAK,EACLlE,OAAO,EACPsC,IAAI,EACJ1B,MAAM,EACNuD,UAAU,EACVrE,SAAS,EACTsE,oBAAoB,KAAK,EACzBrE,wBAAwB,IAAI,EACvB;IACL,IAAI,CAACuC,MAAM;QACT,OAAO;IACT;IAEA,IAAInC,MAAMC,OAAO,CAACkC,OAAO;QACvB,KAAK,MAAMpC,QAAQoC,KAAM;YACvBwB,UAAU;gBACRC;gBACAC;gBACAC;gBACAC;gBACAlE;gBACAsC,MAAMpC;gBACNU;gBACAuD;gBACArE;gBACAC;YACF;QACF;QACA;IACF;IAEA,MAAM,EACJsE,SAAS,EAAExE,MAAM,EAAE,EACpB,GAAGG;IAEJ,IAAIF,cAAc,QAAQ;QACxB,OAAOwC,IAAI,CAAC,MAAM;QAClBA,KAAKgC,EAAE,GAAGhC,KAAKiC,GAAG,IAAIjC,KAAKgC,EAAE;QAC7B,OAAOhC,IAAI,CAAC,MAAM;QAElB,IAAI/C,WAAW+C,KAAKgC,EAAE,GAAG;YACvBhC,KAAKgC,EAAE,GAAGhC,KAAKgC,EAAE,CAACxD,WAAW;QAC/B;QAEA,iEAAiE;QACjE,IAAId,QAAQgB,qBAAqB,IAAI,OAAOsB,KAAKgC,EAAE,KAAK,UAAU;YAChEhC,KAAKgC,EAAE,GAAGrD,OAAOqB,KAAKgC,EAAE;QAC1B;QAEA,IAAI,CAACtE,QAAQwE,mBAAmB,EAAE;YAChCnC,YAAY;gBACVxC;gBACAyC;gBACA1B,QAAQzB,iBAAiB;oBAAEsF,OAAO;oBAAM7D;gBAAO;gBAC/C2B,cAAc;oBAAC;oBAAM;iBAAa;YACpC;QACF;IACF;IAEA,IAAIzC,cAAc,WAAWqE,YAAY;QACvC7B,KAAKoC,UAAU,GAAGP;IACpB;IAEA,MAAMQ,WAAmC,CAAC,EACxC/E,KAAK,EACLwE,iBAAiB,EACjBQ,UAAU,EACVC,WAAWC,iBAAiB,EAC5BxD,KAAKyD,WAAW,EACjB;QACC,IAAI,CAACA,eAAe,OAAOA,gBAAgB,UAAU;YACnD;QACF;QAEA,MAAMzD,MAAMyD;QACZ,MAAMF,YAAaC,qBAAqB,CAAC;QAEzC,8DAA8D;QAC9D,MAAME,sBAAsB;YAC1B,IAAI,CAACH,aAAa,OAAOA,cAAc,UAAU;gBAC/C;YACF;YACA,IAAI,CAACvD,OAAO,OAAOA,QAAQ,UAAU;gBACnC;YACF;YACA,IAAI2D,OAAOC,IAAI,CAAC5D,KAAKG,MAAM,GAAG,GAAG;gBAC/B;YACF;YACA,MAAM0D,eAAeF,OAAOC,IAAI,CAACL,WAAWrE,IAAI,CAAC,CAACgC,IAAMqC,SAAS,CAACrC,EAAE,KAAKlB;YACzE,IAAI6D,cAAc;gBAChBN,SAAS,CAACM,aAAa,GAAG7B;YAC5B;QACF;QAEA,IACEU,QACApE,MAAMmB,IAAI,KAAK,YACfjB,cAAc,WACdF,MAAMiB,IAAI,IAAIS,OACdA,GAAG,CAAC1B,MAAMiB,IAAI,CAAC,EACf;YACA,MAAMpB,QAAQ6B,GAAG,CAAC1B,MAAMiB,IAAI,CAAC;YAC7B,IAAIpB,SAAS,OAAOA,UAAU,YAAY,UAAUA,SAAS,OAAOA,MAAMuE,IAAI,KAAK,UAAU;gBAC3FA,IAAI,CAAC,GAAGY,aAAahF,MAAMiB,IAAI,EAAE,CAAC,GAAGpB,MAAMuE,IAAI;gBAC/C,OAAO1C,GAAG,CAAC1B,MAAMiB,IAAI,CAAC;gBACtBmE;YACF;QACF;QAEA,IACEd,SACAtE,MAAMmB,IAAI,KAAK,WACfjB,cAAc,WACdF,MAAMiB,IAAI,IAAIS,OACdA,GAAG,CAAC1B,MAAMiB,IAAI,CAAC,EACf;YACA,MAAMpB,QAAQ6B,GAAG,CAAC1B,MAAMiB,IAAI,CAAC;YAE7B,IACEpB,SACA,OAAOA,UAAU,YAChB,CAAA,WAAWA,SACTI,OAAOiD,YAAY,IAClBxD,uBAAuB;gBAAEM;gBAAOwE;YAAkB,MAClDa,OAAOG,MAAM,CAAC3F,OAAOgD,IAAI,CACvB,CAAC4C,cACCA,eAAe,OAAOA,gBAAgB,YAAY,WAAWA,YAChE,GACL;gBACA,IAAIxF,OAAOiD,YAAY,IAAIxD,uBAAuB;oBAAEM;oBAAOwE;gBAAkB,IAAI;oBAC/E,kEAAkE;oBAClE,IAAIkB,sBAAsB;oBAC1BL,OAAOM,OAAO,CAAC9F,OAAO+F,OAAO,CAAC,CAAC,CAACzC,WAAWsC,YAAY;wBACrD,IAAIA,eAAe,OAAOA,gBAAgB,YAAY,WAAWA,aAAa;4BAC5EC,sBAAsB;4BACtB,MAAM1C,OAAOyC,YAAYnB,KAAK;4BAC9B,IAAI/D,MAAMC,OAAO,CAACwC,OAAO;gCACvBsB,KAAK,CAAC,GAAGU,aAAahF,MAAMiB,IAAI,CAAC,CAAC,EAAEkC,WAAW,CAAC,GAAG;oCAAE0C,OAAO7C;gCAAK;4BACnE,OAAO,IAAI,OAAOA,SAAS,UAAU;gCACnCsB,KAAK,CAAC,GAAGU,aAAahF,MAAMiB,IAAI,CAAC,CAAC,EAAEkC,WAAW,CAAC,GAAGH;4BACrD;wBACF;oBACF;oBAEA,IAAI0C,qBAAqB;wBACvB,OAAOhE,GAAG,CAAC1B,MAAMiB,IAAI,CAAC;wBACtBmE;oBACF;gBACF,OAAO,IAAIvF,SAAS,OAAOA,UAAU,YAAY,WAAWA,OAAO;oBACjE,0DAA0D;oBAC1D,MAAMmD,OAAOnD,MAAMyE,KAAK;oBACxB,IAAI/D,MAAMC,OAAO,CAACwC,OAAO;wBACvBsB,KAAK,CAAC,GAAGU,aAAahF,MAAMiB,IAAI,EAAE,CAAC,GAAG;4BAAE4E,OAAO7C;wBAAK;oBACtD,OAAO,IAAI,OAAOA,SAAS,UAAU;wBACnCsB,KAAK,CAAC,GAAGU,aAAahF,MAAMiB,IAAI,EAAE,CAAC,GAAG+B;oBACxC;oBACA,OAAOtB,GAAG,CAAC1B,MAAMiB,IAAI,CAAC;oBACtBmE;gBACF;YACF;QACF;QAEA,yEAAyE;QAEzE,4FAA4F;QAC5F,IACEjB,aACCnE,CAAAA,MAAMmB,IAAI,KAAK,kBAAkBnB,MAAMmB,IAAI,KAAK,QAAO,KACxD,aAAanB,SACbA,MAAM8F,OAAO,IACb5F,cAAc,WACdF,MAAMiB,IAAI,IAAIS,OACdA,GAAG,CAAC1B,MAAMiB,IAAI,CAAC,EACf;YACA,MAAMpB,QAAQ6B,GAAG,CAAC1B,MAAMiB,IAAI,CAAC;YAE7B,IACEpB,SACA,OAAOA,UAAU,YAChB,CAAA,WAAWA,SACTI,OAAOiD,YAAY,IAClBxD,uBAAuB;gBAAEM;gBAAOwE;YAAkB,MAClDa,OAAOG,MAAM,CAAC3F,OAAOgD,IAAI,CACvB,CAAC4C,cACCA,eACA,OAAOA,gBAAgB,YACvB,WAAYA,YACf,GACL;gBACA,IAAIxF,OAAOiD,YAAY,IAAIxD,uBAAuB;oBAAEM;oBAAOwE;gBAAkB,IAAI;oBAC/E,kEAAkE;oBAClE,IAAIkB,sBAAsB;oBAC1BL,OAAOM,OAAO,CAAC9F,OAAO+F,OAAO,CAAC,CAAC,CAACzC,WAAWsC,YAAY;wBACrD,IAAIA,eAAe,OAAOA,gBAAgB,YAAY,WAAWA,aAAa;4BAC5EC,sBAAsB;4BACtB,MAAM1C,OAAOyC,YAAYnB,KAAK;4BAC9B,MAAMyB,cAAcxF,MAAMC,OAAO,CAACwC,QAAQA,OAAO;gCAACA;6BAAK;4BACvD,MAAMgD,uBAAuBlG,0BAC3BiG,aACA/F,OACAC,QACAC,WACAC,uBACAC;4BAEF+D,SAAS,CAAC,GAAGa,aAAahF,MAAMiB,IAAI,CAAC,CAAC,EAAEkC,WAAW,CAAC,GAAG;gCAAE0C,OAAOG;4BAAqB;wBACvF;oBACF;oBAEA,IAAIN,qBAAqB;wBACvB,OAAOhE,GAAG,CAAC1B,MAAMiB,IAAI,CAAC;wBACtBmE;oBACF;gBACF,OAAO,IAAIvF,SAAS,OAAOA,UAAU,YAAY,WAAWA,OAAO;oBACjE,0DAA0D;oBAC1D,MAAMoG,gBAAgB1F,MAAMC,OAAO,CAACX,MAAMyE,KAAK,IAAIzE,MAAMyE,KAAK,GAAG;wBAACzE,MAAMyE,KAAK;qBAAC;oBAC9E,MAAM4B,iBAAiBpG,0BACrBmG,eACAjG,OACAC,QACAC,WACAC,uBACAC;oBAEF+D,SAAS,CAAC,GAAGa,aAAahF,MAAMiB,IAAI,EAAE,CAAC,GAAG;wBAAE4E,OAAOK;oBAAe;oBAClE,OAAOxE,GAAG,CAAC1B,MAAMiB,IAAI,CAAC;oBACtBmE;gBACF;YACF;QACF;QAEA,uEAAuE;QACvE,IACEf,SACCrE,CAAAA,MAAMmB,IAAI,KAAK,kBAAkBnB,MAAMmB,IAAI,KAAK,QAAO,KACxD,aAAanB,SACbA,MAAM8F,OAAO,IACb5F,cAAc,WACdF,MAAMiB,IAAI,IAAIS,OACdA,GAAG,CAAC1B,MAAMiB,IAAI,CAAC,EACf;YACA,MAAMpB,QAAQ6B,GAAG,CAAC1B,MAAMiB,IAAI,CAAC;YAC7B,IACEpB,SACA,OAAOA,UAAU,YAChB,CAAA,aAAaA,SACXI,OAAOiD,YAAY,IAClBxD,uBAAuB;gBAAEM;gBAAOwE;YAAkB,MAClDa,OAAOG,MAAM,CAAC3F,OAAOgD,IAAI,CACvB,CAAC4C,cACCA,eACA,OAAOA,gBAAgB,YACvB,aAAcA,YACjB,GACL;gBACA,IAAIxF,OAAOiD,YAAY,IAAIxD,uBAAuB;oBAAEM;oBAAOwE;gBAAkB,IAAI;oBAC/E,oEAAoE;oBACpE,IAAIkB,sBAAsB;oBAC1BL,OAAOM,OAAO,CAAC9F,OAAO+F,OAAO,CAAC,CAAC,CAACzC,WAAWsC,YAAY;wBACrD,IAAIA,eAAe,OAAOA,gBAAgB,YAAY,aAAaA,aAAa;4BAC9EC,sBAAsB;4BACtB,MAAMS,SAASV,YAAYW,OAAO;4BAClC,MAAML,cAAcxF,MAAMC,OAAO,CAAC2F,UAAUA,SAAS;gCAACA;6BAAO;4BAC7D,MAAMH,uBAAuBlG,0BAC3BiG,aACA/F,OACAC,QACAC,WACAC,uBACAC;4BAEFiE,KAAK,CAAC,GAAGW,aAAahF,MAAMiB,IAAI,CAAC,CAAC,EAAEkC,WAAW,CAAC,GAAG;gCAAEkD,KAAKL;4BAAqB;wBACjF;oBACF;oBAEA,IAAIN,qBAAqB;wBACvB,OAAOhE,GAAG,CAAC1B,MAAMiB,IAAI,CAAC;wBACtBmE;oBACF;gBACF,OAAO,IAAIvF,SAAS,OAAOA,UAAU,YAAY,aAAaA,OAAO;oBACnE,4DAA4D;oBAC5D,MAAMyG,gBAAgB/F,MAAMC,OAAO,CAACX,MAAMuG,OAAO,IAAIvG,MAAMuG,OAAO,GAAG;wBAACvG,MAAMuG,OAAO;qBAAC;oBACpF,MAAMF,iBAAiBpG,0BACrBwG,eACAtG,OACAC,QACAC,WACAC,uBACAC;oBAEFiE,KAAK,CAAC,GAAGW,aAAahF,MAAMiB,IAAI,EAAE,CAAC,GAAG;wBAAEoF,KAAKH;oBAAe;oBAC5D,OAAOxE,GAAG,CAAC1B,MAAMiB,IAAI,CAAC;oBACtBmE;gBACF;YACF;QACF;QAEA,IAAIpF,MAAMmB,IAAI,KAAK,UAAUjB,cAAc,UAAUF,MAAMiB,IAAI,IAAIS,OAAOA,GAAG,CAAC1B,MAAMiB,IAAI,CAAC,EAAE;YACzF,IAAIhB,OAAOiD,YAAY,IAAIxD,uBAAuB;gBAAEM;gBAAOwE;YAAkB,IAAI;gBAC/E,MAAM+B,WAAW7E,GAAG,CAAC1B,MAAMiB,IAAI,CAAC;gBAChC,IAAI,CAACsF,YAAY,OAAOA,aAAa,UAAU;oBAC7C;gBACF;gBAEA,KAAK,MAAM9E,UAAUxB,OAAOiD,YAAY,CAACE,WAAW,CAAE;oBACpDd,aAAa;wBACXtC;wBACAyB;wBACAC,KAAK6E;wBACL1G,OAAO0G,QAAQ,CAAC9E,OAAO;oBACzB;gBACF;YACF,OAAO;gBACLa,aAAa;oBACXtC;oBACA0B;oBACA7B,OAAO6B,GAAG,CAAC1B,MAAMiB,IAAI,CAAC;gBACxB;YACF;QACF;QAEA,IACEjB,MAAMmB,IAAI,KAAK,kBACfnB,MAAMmB,IAAI,KAAK,YACdjB,cAAc,UAAUF,MAAMmB,IAAI,KAAK,QACxC;YACA,IAAI,CAACO,GAAG,CAAC1B,MAAMiB,IAAI,CAAC,EAAE;gBACpB;YACF;YAEA,iCAAiC;YACjC,IAAIhB,OAAOiD,YAAY,IAAIxD,uBAAuB;gBAAEM;gBAAOwE;YAAkB,IAAI;gBAC/E,MAAMgC,UAAUvG,OAAOiD,YAAY,CAACsD,OAAO;gBAC3C,MAAMD,WAAW7E,GAAG,CAAC1B,MAAMiB,IAAI,CAAC;gBAChC,IAAI,OAAOsF,aAAa,UAAU;oBAChC;gBACF;gBAEA,KAAK,MAAM,EAAElD,IAAI,EAAE,IAAImD,QAAS;oBAC9B,MAAM3G,QAAQ0G,QAAQ,CAAClD,KAAK;oBAC5B,IAAIxD,OAAO;wBACT2B,qBAAqB;4BACnBpB;4BACAH;4BACAD;4BACAyB,QAAQ4B;4BACRnD;4BACAwB,KAAK6E;4BACLpG;4BACAN;wBACF;oBACF;gBACF;YACF,OAAO;gBACL,qCAAqC;gBACrC2B,qBAAqB;oBACnBpB;oBACAH;oBACAD;oBACAyB,QAAQiC;oBACRxD;oBACAwB;oBACAvB;oBACAN,OAAO6B,GAAG,CAAC1B,MAAMiB,IAAI,CAAC;gBACxB;YACF;QACF;IACF;IAEAzB,eAAe;QACbiH,UAAU1B;QACV9E;QACAe;QACA0F,WAAW;QACXlC;QACA9C,KAAKgB;IACP;IAEA,IAAIxC,cAAc,SAAS;QACzB,IAAI,OAAOwC,KAAKiE,SAAS,KAAK,aAAa;YACzC,kIAAkI;YAClIjE,KAAKiE,SAAS,GAAG,IAAIpE,OAAOC,WAAW;QACzC,OAAO,IAAIE,KAAKiE,SAAS,KAAK,MAAM;YAClC,kJAAkJ;YAClJ,yEAAyE;YACzE,OAAOjE,KAAKiE,SAAS;QACvB;IACF;AACF,EAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@payloadcms/db-mongodb",
3
- "version": "3.60.0-internal.c277fd4",
3
+ "version": "3.60.0",
4
4
  "description": "The officially supported MongoDB database adapter for Payload",
5
5
  "homepage": "https://payloadcms.com",
6
6
  "repository": {
@@ -49,11 +49,11 @@
49
49
  "@types/uuid": "10.0.0",
50
50
  "mongodb": "6.16.0",
51
51
  "mongodb-memory-server": "10.1.4",
52
- "@payloadcms/eslint-config": "3.28.0",
53
- "payload": "3.60.0-internal.c277fd4"
52
+ "payload": "3.60.0",
53
+ "@payloadcms/eslint-config": "3.28.0"
54
54
  },
55
55
  "peerDependencies": {
56
- "payload": "3.60.0-internal.c277fd4"
56
+ "payload": "3.60.0"
57
57
  },
58
58
  "scripts": {
59
59
  "build": "pnpm build:types && pnpm build:swc",