@payloadcms/db-mongodb 3.18.0 → 3.19.0-canary.d942873
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.
- package/dist/connect.d.ts.map +1 -1
- package/dist/connect.js +2 -1
- package/dist/connect.js.map +1 -1
- package/dist/queries/sanitizeQueryValue.d.ts.map +1 -1
- package/dist/queries/sanitizeQueryValue.js +2 -2
- package/dist/queries/sanitizeQueryValue.js.map +1 -1
- package/dist/utilities/buildJoinAggregation.d.ts.map +1 -1
- package/dist/utilities/buildJoinAggregation.js +9 -1
- package/dist/utilities/buildJoinAggregation.js.map +1 -1
- package/package.json +4 -4
package/dist/connect.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../src/connect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../src/connect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAOtC,eAAO,MAAM,OAAO,EAAE,OAsErB,CAAA"}
|
package/dist/connect.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import mongoose from 'mongoose';
|
|
2
|
+
import { defaultBeginTransaction } from 'payload';
|
|
2
3
|
export const connect = async function connect(options = {
|
|
3
4
|
hotReload: false
|
|
4
5
|
}) {
|
|
@@ -28,7 +29,7 @@ export const connect = async function connect(options = {
|
|
|
28
29
|
const client = this.connection.getClient();
|
|
29
30
|
if (!client.options.replicaSet) {
|
|
30
31
|
this.transactionOptions = false;
|
|
31
|
-
this.beginTransaction =
|
|
32
|
+
this.beginTransaction = defaultBeginTransaction();
|
|
32
33
|
}
|
|
33
34
|
if (!this.mongoMemoryServer && !hotReload) {
|
|
34
35
|
if (process.env.PAYLOAD_DROP_DATABASE === 'true') {
|
package/dist/connect.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/connect.ts"],"sourcesContent":["import type { ConnectOptions } from 'mongoose'\nimport type { Connect } from 'payload'\n\nimport mongoose from 'mongoose'\n\nimport type { MongooseAdapter } from './index.js'\n\nexport const connect: Connect = async function connect(\n this: MongooseAdapter,\n options = {\n hotReload: false,\n },\n) {\n const { hotReload } = options\n\n if (this.url === false) {\n return\n }\n\n if (typeof this.url !== 'string') {\n throw new Error('Error: missing MongoDB connection URL.')\n }\n\n const urlToConnect = this.url\n\n const connectionOptions: { useFacet: undefined } & ConnectOptions = {\n autoIndex: true,\n ...this.connectOptions,\n useFacet: undefined,\n }\n\n if (hotReload) {\n connectionOptions.autoIndex = false\n }\n\n try {\n this.connection = (await mongoose.connect(urlToConnect, connectionOptions)).connection\n\n // If we are running a replica set with MongoDB Memory Server,\n // wait until the replica set elects a primary before proceeding\n if (this.mongoMemoryServer) {\n await new Promise((resolve) => setTimeout(resolve, 2000))\n }\n\n const client = this.connection.getClient()\n\n if (!client.options.replicaSet) {\n this.transactionOptions = false\n this.beginTransaction =
|
|
1
|
+
{"version":3,"sources":["../src/connect.ts"],"sourcesContent":["import type { ConnectOptions } from 'mongoose'\nimport type { Connect } from 'payload'\n\nimport mongoose from 'mongoose'\nimport { defaultBeginTransaction } from 'payload'\n\nimport type { MongooseAdapter } from './index.js'\n\nexport const connect: Connect = async function connect(\n this: MongooseAdapter,\n options = {\n hotReload: false,\n },\n) {\n const { hotReload } = options\n\n if (this.url === false) {\n return\n }\n\n if (typeof this.url !== 'string') {\n throw new Error('Error: missing MongoDB connection URL.')\n }\n\n const urlToConnect = this.url\n\n const connectionOptions: { useFacet: undefined } & ConnectOptions = {\n autoIndex: true,\n ...this.connectOptions,\n useFacet: undefined,\n }\n\n if (hotReload) {\n connectionOptions.autoIndex = false\n }\n\n try {\n this.connection = (await mongoose.connect(urlToConnect, connectionOptions)).connection\n\n // If we are running a replica set with MongoDB Memory Server,\n // wait until the replica set elects a primary before proceeding\n if (this.mongoMemoryServer) {\n await new Promise((resolve) => setTimeout(resolve, 2000))\n }\n\n const client = this.connection.getClient()\n\n if (!client.options.replicaSet) {\n this.transactionOptions = false\n this.beginTransaction = defaultBeginTransaction()\n }\n\n if (!this.mongoMemoryServer && !hotReload) {\n if (process.env.PAYLOAD_DROP_DATABASE === 'true') {\n this.payload.logger.info('---- DROPPING DATABASE ----')\n await mongoose.connection.dropDatabase()\n this.payload.logger.info('---- DROPPED DATABASE ----')\n }\n }\n\n if (this.ensureIndexes) {\n await Promise.all(\n this.payload.config.collections.map(async (coll) => {\n await this.collections[coll.slug]?.ensureIndexes()\n }),\n )\n }\n\n if (process.env.NODE_ENV === 'production' && this.prodMigrations) {\n await this.migrate({ migrations: this.prodMigrations })\n }\n } catch (err) {\n this.payload.logger.error({\n err,\n msg: `Error: cannot connect to MongoDB. Details: ${err.message}`,\n })\n process.exit(1)\n }\n}\n"],"names":["mongoose","defaultBeginTransaction","connect","options","hotReload","url","Error","urlToConnect","connectionOptions","autoIndex","connectOptions","useFacet","undefined","connection","mongoMemoryServer","Promise","resolve","setTimeout","client","getClient","replicaSet","transactionOptions","beginTransaction","process","env","PAYLOAD_DROP_DATABASE","payload","logger","info","dropDatabase","ensureIndexes","all","config","collections","map","coll","slug","NODE_ENV","prodMigrations","migrate","migrations","err","error","msg","message","exit"],"mappings":"AAGA,OAAOA,cAAc,WAAU;AAC/B,SAASC,uBAAuB,QAAQ,UAAS;AAIjD,OAAO,MAAMC,UAAmB,eAAeA,QAE7CC,UAAU;IACRC,WAAW;AACb,CAAC;IAED,MAAM,EAAEA,SAAS,EAAE,GAAGD;IAEtB,IAAI,IAAI,CAACE,GAAG,KAAK,OAAO;QACtB;IACF;IAEA,IAAI,OAAO,IAAI,CAACA,GAAG,KAAK,UAAU;QAChC,MAAM,IAAIC,MAAM;IAClB;IAEA,MAAMC,eAAe,IAAI,CAACF,GAAG;IAE7B,MAAMG,oBAA8D;QAClEC,WAAW;QACX,GAAG,IAAI,CAACC,cAAc;QACtBC,UAAUC;IACZ;IAEA,IAAIR,WAAW;QACbI,kBAAkBC,SAAS,GAAG;IAChC;IAEA,IAAI;QACF,IAAI,CAACI,UAAU,GAAG,AAAC,CAAA,MAAMb,SAASE,OAAO,CAACK,cAAcC,kBAAiB,EAAGK,UAAU;QAEtF,8DAA8D;QAC9D,gEAAgE;QAChE,IAAI,IAAI,CAACC,iBAAiB,EAAE;YAC1B,MAAM,IAAIC,QAAQ,CAACC,UAAYC,WAAWD,SAAS;QACrD;QAEA,MAAME,SAAS,IAAI,CAACL,UAAU,CAACM,SAAS;QAExC,IAAI,CAACD,OAAOf,OAAO,CAACiB,UAAU,EAAE;YAC9B,IAAI,CAACC,kBAAkB,GAAG;YAC1B,IAAI,CAACC,gBAAgB,GAAGrB;QAC1B;QAEA,IAAI,CAAC,IAAI,CAACa,iBAAiB,IAAI,CAACV,WAAW;YACzC,IAAImB,QAAQC,GAAG,CAACC,qBAAqB,KAAK,QAAQ;gBAChD,IAAI,CAACC,OAAO,CAACC,MAAM,CAACC,IAAI,CAAC;gBACzB,MAAM5B,SAASa,UAAU,CAACgB,YAAY;gBACtC,IAAI,CAACH,OAAO,CAACC,MAAM,CAACC,IAAI,CAAC;YAC3B;QACF;QAEA,IAAI,IAAI,CAACE,aAAa,EAAE;YACtB,MAAMf,QAAQgB,GAAG,CACf,IAAI,CAACL,OAAO,CAACM,MAAM,CAACC,WAAW,CAACC,GAAG,CAAC,OAAOC;gBACzC,MAAM,IAAI,CAACF,WAAW,CAACE,KAAKC,IAAI,CAAC,EAAEN;YACrC;QAEJ;QAEA,IAAIP,QAAQC,GAAG,CAACa,QAAQ,KAAK,gBAAgB,IAAI,CAACC,cAAc,EAAE;YAChE,MAAM,IAAI,CAACC,OAAO,CAAC;gBAAEC,YAAY,IAAI,CAACF,cAAc;YAAC;QACvD;IACF,EAAE,OAAOG,KAAK;QACZ,IAAI,CAACf,OAAO,CAACC,MAAM,CAACe,KAAK,CAAC;YACxBD;YACAE,KAAK,CAAC,2CAA2C,EAAEF,IAAIG,OAAO,EAAE;QAClE;QACArB,QAAQsB,IAAI,CAAC;IACf;AACF,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sanitizeQueryValue.d.ts","sourceRoot":"","sources":["../../src/queries/sanitizeQueryValue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,cAAc,EAAE,OAAO,EAAqB,MAAM,SAAS,CAAA;AAKzF,KAAK,sBAAsB,GAAG;IAC5B,KAAK,EAAE,cAAc,CAAA;IACrB,WAAW,EAAE,OAAO,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,EAAE,GAAG,CAAA;CACT,CAAA;AA6DD,eAAO,MAAM,kBAAkB,kEAQ5B,sBAAsB,KAAG;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,GAAG,CAAC,EAAE,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"sanitizeQueryValue.d.ts","sourceRoot":"","sources":["../../src/queries/sanitizeQueryValue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,cAAc,EAAE,OAAO,EAAqB,MAAM,SAAS,CAAA;AAKzF,KAAK,sBAAsB,GAAG;IAC5B,KAAK,EAAE,cAAc,CAAA;IACrB,WAAW,EAAE,OAAO,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,EAAE,GAAG,CAAA;CACT,CAAA;AA6DD,eAAO,MAAM,kBAAkB,kEAQ5B,sBAAsB,KAAG;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,GAAG,CAAC,EAAE,OAAO,CAAA;CA6Ud,CAAA"}
|
|
@@ -340,10 +340,10 @@ export const sanitizeQueryValue = ({ field, hasCustomID, locale, operator, path,
|
|
|
340
340
|
]
|
|
341
341
|
}
|
|
342
342
|
};
|
|
343
|
-
if (maxDistance) {
|
|
343
|
+
if (maxDistance && !Number.isNaN(Number(maxDistance))) {
|
|
344
344
|
formattedValue.$maxDistance = parseFloat(maxDistance);
|
|
345
345
|
}
|
|
346
|
-
if (minDistance) {
|
|
346
|
+
if (minDistance && !Number.isNaN(Number(minDistance))) {
|
|
347
347
|
formattedValue.$minDistance = parseFloat(minDistance);
|
|
348
348
|
}
|
|
349
349
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/queries/sanitizeQueryValue.ts"],"sourcesContent":["import type { FlattenedBlock, FlattenedField, Payload, RelationshipField } from 'payload'\n\nimport { Types } from 'mongoose'\nimport { createArrayFromCommaDelineated } from 'payload'\n\ntype SanitizeQueryValueArgs = {\n field: FlattenedField\n hasCustomID: boolean\n locale?: string\n operator: string\n path: string\n payload: Payload\n val: any\n}\n\nconst buildExistsQuery = (formattedValue, path, treatEmptyString = true) => {\n if (formattedValue) {\n return {\n rawQuery: {\n $and: [\n { [path]: { $exists: true } },\n { [path]: { $ne: null } },\n ...(treatEmptyString ? [{ [path]: { $ne: '' } }] : []), // Treat empty string as null / undefined\n ],\n },\n }\n } else {\n return {\n rawQuery: {\n $or: [\n { [path]: { $exists: false } },\n { [path]: { $eq: null } },\n ...(treatEmptyString ? [{ [path]: { $eq: '' } }] : []), // Treat empty string as null / undefined\n ],\n },\n }\n }\n}\n\n// returns nestedField Field object from blocks.nestedField path because getLocalizedPaths splits them only for relationships\nconst getFieldFromSegments = ({\n field,\n segments,\n}: {\n field: FlattenedBlock | FlattenedField\n segments: string[]\n}) => {\n if ('blocks' in field) {\n for (const block of field.blocks) {\n const field = getFieldFromSegments({ field: block, segments })\n if (field) {\n return field\n }\n }\n }\n\n if ('fields' in field) {\n for (let i = 0; i < segments.length; i++) {\n const foundField = field.flattenedFields.find((each) => each.name === segments[i])\n\n if (!foundField) {\n break\n }\n\n if (foundField && segments.length - 1 === i) {\n return foundField\n }\n\n segments.shift()\n return getFieldFromSegments({ field: foundField, segments })\n }\n }\n}\n\nexport const sanitizeQueryValue = ({\n field,\n hasCustomID,\n locale,\n operator,\n path,\n payload,\n val,\n}: SanitizeQueryValueArgs): {\n operator?: string\n rawQuery?: unknown\n val?: unknown\n} => {\n let formattedValue = val\n let formattedOperator = operator\n\n if (['array', 'blocks', 'group', 'tab'].includes(field.type) && path.includes('.')) {\n const segments = path.split('.')\n segments.shift()\n const foundField = getFieldFromSegments({ field, segments })\n\n if (foundField) {\n field = foundField\n }\n }\n\n // Disregard invalid _ids\n if (path === '_id') {\n if (typeof val === 'string' && val.split(',').length === 1) {\n if (!hasCustomID) {\n const isValid = Types.ObjectId.isValid(val)\n\n if (!isValid) {\n return { operator: formattedOperator, val: undefined }\n } else {\n if (['in', 'not_in'].includes(operator)) {\n formattedValue = createArrayFromCommaDelineated(formattedValue).map(\n (id) => new Types.ObjectId(id),\n )\n } else {\n formattedValue = new Types.ObjectId(val)\n }\n }\n }\n\n if (field.type === 'number') {\n const parsedNumber = parseFloat(val)\n\n if (Number.isNaN(parsedNumber)) {\n return { operator: formattedOperator, val: undefined }\n }\n }\n } else if (Array.isArray(val) || (typeof val === 'string' && val.split(',').length > 1)) {\n if (typeof val === 'string') {\n formattedValue = createArrayFromCommaDelineated(val)\n }\n\n formattedValue = formattedValue.reduce((formattedValues, inVal) => {\n if (!hasCustomID) {\n if (Types.ObjectId.isValid(inVal)) {\n formattedValues.push(new Types.ObjectId(inVal))\n }\n }\n\n if (field.type === 'number') {\n const parsedNumber = parseFloat(inVal)\n if (!Number.isNaN(parsedNumber)) {\n formattedValues.push(parsedNumber)\n }\n } else {\n formattedValues.push(inVal)\n }\n\n return formattedValues\n }, [])\n }\n }\n\n // Cast incoming values as proper searchable types\n if (field.type === 'checkbox' && typeof val === 'string') {\n if (val.toLowerCase() === 'true') {\n formattedValue = true\n }\n if (val.toLowerCase() === 'false') {\n formattedValue = false\n }\n }\n\n if (['all', 'in', 'not_in'].includes(operator) && typeof formattedValue === 'string') {\n formattedValue = createArrayFromCommaDelineated(formattedValue)\n\n if (field.type === 'number') {\n formattedValue = formattedValue.map((arrayVal) => parseFloat(arrayVal))\n }\n }\n\n if (field.type === 'number') {\n if (typeof formattedValue === 'string' && operator !== 'exists') {\n formattedValue = Number(val)\n }\n\n if (operator === 'exists') {\n formattedValue = val === 'true' ? true : val === 'false' ? false : Boolean(val)\n\n return buildExistsQuery(formattedValue, path)\n }\n }\n\n if (field.type === 'date' && typeof val === 'string' && operator !== 'exists') {\n formattedValue = new Date(val)\n if (Number.isNaN(Date.parse(formattedValue))) {\n return undefined\n }\n }\n\n if (['relationship', 'upload'].includes(field.type)) {\n if (val === 'null') {\n formattedValue = null\n }\n\n // Object equality requires the value to be the first key in the object that is being queried.\n if (\n operator === 'equals' &&\n formattedValue &&\n typeof formattedValue === 'object' &&\n formattedValue.value &&\n formattedValue.relationTo\n ) {\n const { value } = formattedValue\n const isValid = Types.ObjectId.isValid(value)\n\n if (isValid) {\n formattedValue.value = new Types.ObjectId(value)\n }\n\n let localizedPath = path\n\n if (field.localized && payload.config.localization && locale) {\n localizedPath = `${path}.${locale}`\n }\n\n return {\n rawQuery: {\n $or: [\n {\n [localizedPath]: {\n $eq: {\n // disable auto sort\n /* eslint-disable */\n value: formattedValue.value,\n relationTo: formattedValue.relationTo,\n /* eslint-enable */\n },\n },\n },\n {\n [localizedPath]: {\n $eq: {\n relationTo: formattedValue.relationTo,\n value: formattedValue.value,\n },\n },\n },\n ],\n },\n }\n }\n\n const relationTo = (field as RelationshipField).relationTo\n\n if (['in', 'not_in'].includes(operator) && Array.isArray(formattedValue)) {\n formattedValue = formattedValue.reduce((formattedValues, inVal) => {\n if (!inVal) {\n return formattedValues\n }\n\n if (typeof relationTo === 'string' && payload.collections[relationTo].customIDType) {\n if (payload.collections[relationTo].customIDType === 'number') {\n const parsedNumber = parseFloat(inVal)\n if (!Number.isNaN(parsedNumber)) {\n formattedValues.push(parsedNumber)\n return formattedValues\n }\n }\n\n formattedValues.push(inVal)\n return formattedValues\n }\n\n if (\n Array.isArray(relationTo) &&\n relationTo.some((relationTo) => !!payload.collections[relationTo].customIDType)\n ) {\n if (Types.ObjectId.isValid(inVal.toString())) {\n formattedValues.push(new Types.ObjectId(inVal))\n } else {\n formattedValues.push(inVal)\n }\n return formattedValues\n }\n\n if (Types.ObjectId.isValid(inVal.toString())) {\n formattedValues.push(new Types.ObjectId(inVal))\n }\n\n return formattedValues\n }, [])\n }\n\n if (\n ['contains', 'equals', 'like', 'not_equals'].includes(operator) &&\n (!Array.isArray(relationTo) || !path.endsWith('.relationTo'))\n ) {\n if (typeof relationTo === 'string') {\n const customIDType = payload.collections[relationTo].customIDType\n\n if (customIDType) {\n if (customIDType === 'number') {\n formattedValue = parseFloat(val)\n\n if (Number.isNaN(formattedValue)) {\n return { operator: formattedOperator, val: undefined }\n }\n }\n } else {\n if (!Types.ObjectId.isValid(formattedValue)) {\n return { operator: formattedOperator, val: undefined }\n }\n formattedValue = new Types.ObjectId(formattedValue)\n }\n } else {\n const hasCustomIDType = relationTo.some(\n (relationTo) => !!payload.collections[relationTo].customIDType,\n )\n\n if (hasCustomIDType) {\n if (typeof val === 'string') {\n const formattedNumber = Number(val)\n formattedValue = [Types.ObjectId.isValid(val) ? new Types.ObjectId(val) : val]\n formattedOperator = operator === 'not_equals' ? 'not_in' : 'in'\n if (!Number.isNaN(formattedNumber)) {\n formattedValue.push(formattedNumber)\n }\n }\n } else {\n if (!Types.ObjectId.isValid(formattedValue)) {\n return { operator: formattedOperator, val: undefined }\n }\n formattedValue = new Types.ObjectId(formattedValue)\n }\n }\n }\n }\n\n // Set up specific formatting necessary by operators\n\n if (operator === 'near') {\n let lng\n let lat\n let maxDistance\n let minDistance\n\n if (Array.isArray(formattedValue)) {\n ;[lng, lat, maxDistance, minDistance] = formattedValue\n }\n\n if (typeof formattedValue === 'string') {\n ;[lng, lat, maxDistance, minDistance] = createArrayFromCommaDelineated(formattedValue)\n }\n\n if (lng == null || lat == null || (maxDistance == null && minDistance == null)) {\n formattedValue = undefined\n } else {\n formattedValue = {\n $geometry: { type: 'Point', coordinates: [parseFloat(lng), parseFloat(lat)] },\n }\n\n if (maxDistance) {\n formattedValue.$maxDistance = parseFloat(maxDistance)\n }\n if (minDistance) {\n formattedValue.$minDistance = parseFloat(minDistance)\n }\n }\n }\n\n if (operator === 'within' || operator === 'intersects') {\n formattedValue = {\n $geometry: formattedValue,\n }\n }\n\n if (path !== '_id' || (path === '_id' && hasCustomID && field.type === 'text')) {\n if (operator === 'contains' && !Types.ObjectId.isValid(formattedValue)) {\n formattedValue = {\n $options: 'i',\n $regex: formattedValue.replace(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&'),\n }\n }\n\n if (operator === 'exists') {\n formattedValue = formattedValue === 'true' || formattedValue === true\n\n // _id can't be empty string, will error Cast to ObjectId failed for value \"\"\n return buildExistsQuery(\n formattedValue,\n path,\n !['relationship', 'upload'].includes(field.type),\n )\n }\n }\n\n if (\n (path === '_id' || path === 'parent') &&\n operator === 'like' &&\n formattedValue.length === 24 &&\n !hasCustomID\n ) {\n formattedOperator = 'equals'\n }\n\n if (operator === 'exists') {\n formattedValue = formattedValue === 'true' || formattedValue === true\n\n // Clearable fields\n if (['relationship', 'select', 'upload'].includes(field.type)) {\n if (formattedValue) {\n return {\n rawQuery: {\n $and: [{ [path]: { $exists: true } }, { [path]: { $ne: null } }],\n },\n }\n } else {\n return {\n rawQuery: {\n $or: [{ [path]: { $exists: false } }, { [path]: { $eq: null } }],\n },\n }\n }\n }\n }\n\n return { operator: formattedOperator, val: formattedValue }\n}\n"],"names":["Types","createArrayFromCommaDelineated","buildExistsQuery","formattedValue","path","treatEmptyString","rawQuery","$and","$exists","$ne","$or","$eq","getFieldFromSegments","field","segments","block","blocks","i","length","foundField","flattenedFields","find","each","name","shift","sanitizeQueryValue","hasCustomID","locale","operator","payload","val","formattedOperator","includes","type","split","isValid","ObjectId","undefined","map","id","parsedNumber","parseFloat","Number","isNaN","Array","isArray","reduce","formattedValues","inVal","push","toLowerCase","arrayVal","Boolean","Date","parse","value","relationTo","localizedPath","localized","config","localization","collections","customIDType","some","toString","endsWith","hasCustomIDType","formattedNumber","lng","lat","maxDistance","minDistance","$geometry","coordinates","$maxDistance","$minDistance","$options","$regex","replace"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/queries/sanitizeQueryValue.ts"],"sourcesContent":["import type { FlattenedBlock, FlattenedField, Payload, RelationshipField } from 'payload'\n\nimport { Types } from 'mongoose'\nimport { createArrayFromCommaDelineated } from 'payload'\n\ntype SanitizeQueryValueArgs = {\n field: FlattenedField\n hasCustomID: boolean\n locale?: string\n operator: string\n path: string\n payload: Payload\n val: any\n}\n\nconst buildExistsQuery = (formattedValue, path, treatEmptyString = true) => {\n if (formattedValue) {\n return {\n rawQuery: {\n $and: [\n { [path]: { $exists: true } },\n { [path]: { $ne: null } },\n ...(treatEmptyString ? [{ [path]: { $ne: '' } }] : []), // Treat empty string as null / undefined\n ],\n },\n }\n } else {\n return {\n rawQuery: {\n $or: [\n { [path]: { $exists: false } },\n { [path]: { $eq: null } },\n ...(treatEmptyString ? [{ [path]: { $eq: '' } }] : []), // Treat empty string as null / undefined\n ],\n },\n }\n }\n}\n\n// returns nestedField Field object from blocks.nestedField path because getLocalizedPaths splits them only for relationships\nconst getFieldFromSegments = ({\n field,\n segments,\n}: {\n field: FlattenedBlock | FlattenedField\n segments: string[]\n}) => {\n if ('blocks' in field) {\n for (const block of field.blocks) {\n const field = getFieldFromSegments({ field: block, segments })\n if (field) {\n return field\n }\n }\n }\n\n if ('fields' in field) {\n for (let i = 0; i < segments.length; i++) {\n const foundField = field.flattenedFields.find((each) => each.name === segments[i])\n\n if (!foundField) {\n break\n }\n\n if (foundField && segments.length - 1 === i) {\n return foundField\n }\n\n segments.shift()\n return getFieldFromSegments({ field: foundField, segments })\n }\n }\n}\n\nexport const sanitizeQueryValue = ({\n field,\n hasCustomID,\n locale,\n operator,\n path,\n payload,\n val,\n}: SanitizeQueryValueArgs): {\n operator?: string\n rawQuery?: unknown\n val?: unknown\n} => {\n let formattedValue = val\n let formattedOperator = operator\n\n if (['array', 'blocks', 'group', 'tab'].includes(field.type) && path.includes('.')) {\n const segments = path.split('.')\n segments.shift()\n const foundField = getFieldFromSegments({ field, segments })\n\n if (foundField) {\n field = foundField\n }\n }\n\n // Disregard invalid _ids\n if (path === '_id') {\n if (typeof val === 'string' && val.split(',').length === 1) {\n if (!hasCustomID) {\n const isValid = Types.ObjectId.isValid(val)\n\n if (!isValid) {\n return { operator: formattedOperator, val: undefined }\n } else {\n if (['in', 'not_in'].includes(operator)) {\n formattedValue = createArrayFromCommaDelineated(formattedValue).map(\n (id) => new Types.ObjectId(id),\n )\n } else {\n formattedValue = new Types.ObjectId(val)\n }\n }\n }\n\n if (field.type === 'number') {\n const parsedNumber = parseFloat(val)\n\n if (Number.isNaN(parsedNumber)) {\n return { operator: formattedOperator, val: undefined }\n }\n }\n } else if (Array.isArray(val) || (typeof val === 'string' && val.split(',').length > 1)) {\n if (typeof val === 'string') {\n formattedValue = createArrayFromCommaDelineated(val)\n }\n\n formattedValue = formattedValue.reduce((formattedValues, inVal) => {\n if (!hasCustomID) {\n if (Types.ObjectId.isValid(inVal)) {\n formattedValues.push(new Types.ObjectId(inVal))\n }\n }\n\n if (field.type === 'number') {\n const parsedNumber = parseFloat(inVal)\n if (!Number.isNaN(parsedNumber)) {\n formattedValues.push(parsedNumber)\n }\n } else {\n formattedValues.push(inVal)\n }\n\n return formattedValues\n }, [])\n }\n }\n\n // Cast incoming values as proper searchable types\n if (field.type === 'checkbox' && typeof val === 'string') {\n if (val.toLowerCase() === 'true') {\n formattedValue = true\n }\n if (val.toLowerCase() === 'false') {\n formattedValue = false\n }\n }\n\n if (['all', 'in', 'not_in'].includes(operator) && typeof formattedValue === 'string') {\n formattedValue = createArrayFromCommaDelineated(formattedValue)\n\n if (field.type === 'number') {\n formattedValue = formattedValue.map((arrayVal) => parseFloat(arrayVal))\n }\n }\n\n if (field.type === 'number') {\n if (typeof formattedValue === 'string' && operator !== 'exists') {\n formattedValue = Number(val)\n }\n\n if (operator === 'exists') {\n formattedValue = val === 'true' ? true : val === 'false' ? false : Boolean(val)\n\n return buildExistsQuery(formattedValue, path)\n }\n }\n\n if (field.type === 'date' && typeof val === 'string' && operator !== 'exists') {\n formattedValue = new Date(val)\n if (Number.isNaN(Date.parse(formattedValue))) {\n return undefined\n }\n }\n\n if (['relationship', 'upload'].includes(field.type)) {\n if (val === 'null') {\n formattedValue = null\n }\n\n // Object equality requires the value to be the first key in the object that is being queried.\n if (\n operator === 'equals' &&\n formattedValue &&\n typeof formattedValue === 'object' &&\n formattedValue.value &&\n formattedValue.relationTo\n ) {\n const { value } = formattedValue\n const isValid = Types.ObjectId.isValid(value)\n\n if (isValid) {\n formattedValue.value = new Types.ObjectId(value)\n }\n\n let localizedPath = path\n\n if (field.localized && payload.config.localization && locale) {\n localizedPath = `${path}.${locale}`\n }\n\n return {\n rawQuery: {\n $or: [\n {\n [localizedPath]: {\n $eq: {\n // disable auto sort\n /* eslint-disable */\n value: formattedValue.value,\n relationTo: formattedValue.relationTo,\n /* eslint-enable */\n },\n },\n },\n {\n [localizedPath]: {\n $eq: {\n relationTo: formattedValue.relationTo,\n value: formattedValue.value,\n },\n },\n },\n ],\n },\n }\n }\n\n const relationTo = (field as RelationshipField).relationTo\n\n if (['in', 'not_in'].includes(operator) && Array.isArray(formattedValue)) {\n formattedValue = formattedValue.reduce((formattedValues, inVal) => {\n if (!inVal) {\n return formattedValues\n }\n\n if (typeof relationTo === 'string' && payload.collections[relationTo].customIDType) {\n if (payload.collections[relationTo].customIDType === 'number') {\n const parsedNumber = parseFloat(inVal)\n if (!Number.isNaN(parsedNumber)) {\n formattedValues.push(parsedNumber)\n return formattedValues\n }\n }\n\n formattedValues.push(inVal)\n return formattedValues\n }\n\n if (\n Array.isArray(relationTo) &&\n relationTo.some((relationTo) => !!payload.collections[relationTo].customIDType)\n ) {\n if (Types.ObjectId.isValid(inVal.toString())) {\n formattedValues.push(new Types.ObjectId(inVal))\n } else {\n formattedValues.push(inVal)\n }\n return formattedValues\n }\n\n if (Types.ObjectId.isValid(inVal.toString())) {\n formattedValues.push(new Types.ObjectId(inVal))\n }\n\n return formattedValues\n }, [])\n }\n\n if (\n ['contains', 'equals', 'like', 'not_equals'].includes(operator) &&\n (!Array.isArray(relationTo) || !path.endsWith('.relationTo'))\n ) {\n if (typeof relationTo === 'string') {\n const customIDType = payload.collections[relationTo].customIDType\n\n if (customIDType) {\n if (customIDType === 'number') {\n formattedValue = parseFloat(val)\n\n if (Number.isNaN(formattedValue)) {\n return { operator: formattedOperator, val: undefined }\n }\n }\n } else {\n if (!Types.ObjectId.isValid(formattedValue)) {\n return { operator: formattedOperator, val: undefined }\n }\n formattedValue = new Types.ObjectId(formattedValue)\n }\n } else {\n const hasCustomIDType = relationTo.some(\n (relationTo) => !!payload.collections[relationTo].customIDType,\n )\n\n if (hasCustomIDType) {\n if (typeof val === 'string') {\n const formattedNumber = Number(val)\n formattedValue = [Types.ObjectId.isValid(val) ? new Types.ObjectId(val) : val]\n formattedOperator = operator === 'not_equals' ? 'not_in' : 'in'\n if (!Number.isNaN(formattedNumber)) {\n formattedValue.push(formattedNumber)\n }\n }\n } else {\n if (!Types.ObjectId.isValid(formattedValue)) {\n return { operator: formattedOperator, val: undefined }\n }\n formattedValue = new Types.ObjectId(formattedValue)\n }\n }\n }\n }\n\n // Set up specific formatting necessary by operators\n\n if (operator === 'near') {\n let lng\n let lat\n let maxDistance\n let minDistance\n\n if (Array.isArray(formattedValue)) {\n ;[lng, lat, maxDistance, minDistance] = formattedValue\n }\n\n if (typeof formattedValue === 'string') {\n ;[lng, lat, maxDistance, minDistance] = createArrayFromCommaDelineated(formattedValue)\n }\n\n if (lng == null || lat == null || (maxDistance == null && minDistance == null)) {\n formattedValue = undefined\n } else {\n formattedValue = {\n $geometry: { type: 'Point', coordinates: [parseFloat(lng), parseFloat(lat)] },\n }\n\n if (maxDistance && !Number.isNaN(Number(maxDistance))) {\n formattedValue.$maxDistance = parseFloat(maxDistance)\n }\n\n if (minDistance && !Number.isNaN(Number(minDistance))) {\n formattedValue.$minDistance = parseFloat(minDistance)\n }\n }\n }\n\n if (operator === 'within' || operator === 'intersects') {\n formattedValue = {\n $geometry: formattedValue,\n }\n }\n\n if (path !== '_id' || (path === '_id' && hasCustomID && field.type === 'text')) {\n if (operator === 'contains' && !Types.ObjectId.isValid(formattedValue)) {\n formattedValue = {\n $options: 'i',\n $regex: formattedValue.replace(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&'),\n }\n }\n\n if (operator === 'exists') {\n formattedValue = formattedValue === 'true' || formattedValue === true\n\n // _id can't be empty string, will error Cast to ObjectId failed for value \"\"\n return buildExistsQuery(\n formattedValue,\n path,\n !['relationship', 'upload'].includes(field.type),\n )\n }\n }\n\n if (\n (path === '_id' || path === 'parent') &&\n operator === 'like' &&\n formattedValue.length === 24 &&\n !hasCustomID\n ) {\n formattedOperator = 'equals'\n }\n\n if (operator === 'exists') {\n formattedValue = formattedValue === 'true' || formattedValue === true\n\n // Clearable fields\n if (['relationship', 'select', 'upload'].includes(field.type)) {\n if (formattedValue) {\n return {\n rawQuery: {\n $and: [{ [path]: { $exists: true } }, { [path]: { $ne: null } }],\n },\n }\n } else {\n return {\n rawQuery: {\n $or: [{ [path]: { $exists: false } }, { [path]: { $eq: null } }],\n },\n }\n }\n }\n }\n\n return { operator: formattedOperator, val: formattedValue }\n}\n"],"names":["Types","createArrayFromCommaDelineated","buildExistsQuery","formattedValue","path","treatEmptyString","rawQuery","$and","$exists","$ne","$or","$eq","getFieldFromSegments","field","segments","block","blocks","i","length","foundField","flattenedFields","find","each","name","shift","sanitizeQueryValue","hasCustomID","locale","operator","payload","val","formattedOperator","includes","type","split","isValid","ObjectId","undefined","map","id","parsedNumber","parseFloat","Number","isNaN","Array","isArray","reduce","formattedValues","inVal","push","toLowerCase","arrayVal","Boolean","Date","parse","value","relationTo","localizedPath","localized","config","localization","collections","customIDType","some","toString","endsWith","hasCustomIDType","formattedNumber","lng","lat","maxDistance","minDistance","$geometry","coordinates","$maxDistance","$minDistance","$options","$regex","replace"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buildJoinAggregation.d.ts","sourceRoot":"","sources":["../../src/utilities/buildJoinAggregation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,yBAAyB,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAE1F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAIlD,KAAK,wBAAwB,GAAG;IAC9B,OAAO,EAAE,eAAe,CAAA;IACxB,UAAU,EAAE,cAAc,CAAA;IAC1B,gBAAgB,EAAE,yBAAyB,CAAA;IAC3C,KAAK,EAAE,SAAS,CAAA;IAEhB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IAEjC,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,uCAAuC;IACvC,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,eAAO,MAAM,oBAAoB,kGAU9B,wBAAwB,KAAG,OAAO,CAAC,aAAa,EAAE,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"buildJoinAggregation.d.ts","sourceRoot":"","sources":["../../src/utilities/buildJoinAggregation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,yBAAyB,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAE1F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAIlD,KAAK,wBAAwB,GAAG;IAC9B,OAAO,EAAE,eAAe,CAAA;IACxB,UAAU,EAAE,cAAc,CAAA;IAC1B,gBAAgB,EAAE,yBAAyB,CAAA;IAC3C,KAAK,EAAE,SAAS,CAAA;IAEhB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IAEjC,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,uCAAuC;IACvC,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,eAAO,MAAM,oBAAoB,kGAU9B,wBAAwB,KAAG,OAAO,CAAC,aAAa,EAAE,GAAG,SAAS,CA4KhE,CAAA"}
|
|
@@ -110,10 +110,18 @@ export const buildJoinAggregation = async ({ adapter, collection, collectionConf
|
|
|
110
110
|
} else {
|
|
111
111
|
const localeSuffix = join.field.localized && adapter.payload.config.localization && locale ? `.${locale}` : '';
|
|
112
112
|
const as = `${versions ? `version.${join.joinPath}` : join.joinPath}${localeSuffix}`;
|
|
113
|
+
let foreignField;
|
|
114
|
+
if (join.getForeignPath) {
|
|
115
|
+
foreignField = `${join.getForeignPath({
|
|
116
|
+
locale
|
|
117
|
+
})}${polymorphicSuffix}`;
|
|
118
|
+
} else {
|
|
119
|
+
foreignField = `${join.field.on}${polymorphicSuffix}`;
|
|
120
|
+
}
|
|
113
121
|
aggregate.push({
|
|
114
122
|
$lookup: {
|
|
115
123
|
as: `${as}.docs`,
|
|
116
|
-
foreignField
|
|
124
|
+
foreignField,
|
|
117
125
|
from: adapter.collections[slug].collection.name,
|
|
118
126
|
localField: versions ? 'parent' : '_id',
|
|
119
127
|
pipeline
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utilities/buildJoinAggregation.ts"],"sourcesContent":["import type { PipelineStage } from 'mongoose'\nimport type { CollectionSlug, JoinQuery, SanitizedCollectionConfig, Where } from 'payload'\n\nimport type { MongooseAdapter } from '../index.js'\n\nimport { buildSortParam } from '../queries/buildSortParam.js'\n\ntype BuildJoinAggregationArgs = {\n adapter: MongooseAdapter\n collection: CollectionSlug\n collectionConfig: SanitizedCollectionConfig\n joins: JoinQuery\n // the number of docs to get at the top collection level\n limit?: number\n locale: string\n projection?: Record<string, true>\n // the where clause for the top collection\n query?: Where\n /** whether the query is from drafts */\n versions?: boolean\n}\n\nexport const buildJoinAggregation = async ({\n adapter,\n collection,\n collectionConfig,\n joins,\n limit,\n locale,\n projection,\n query,\n versions,\n}: BuildJoinAggregationArgs): Promise<PipelineStage[] | undefined> => {\n if (Object.keys(collectionConfig.joins).length === 0 || joins === false) {\n return\n }\n\n const joinConfig = adapter.payload.collections[collection].config.joins\n const aggregate: PipelineStage[] = [\n {\n $sort: { createdAt: -1 },\n },\n ]\n\n if (query) {\n aggregate.push({\n $match: query,\n })\n }\n\n if (limit) {\n aggregate.push({\n $limit: limit,\n })\n }\n\n for (const slug of Object.keys(joinConfig)) {\n for (const join of joinConfig[slug]) {\n const joinModel = adapter.collections[join.field.collection]\n\n if (projection && !projection[join.joinPath]) {\n continue\n }\n\n if (joins?.[join.joinPath] === false) {\n continue\n }\n\n const {\n limit: limitJoin = join.field.defaultLimit ?? 10,\n sort: sortJoin = join.field.defaultSort || collectionConfig.defaultSort,\n where: whereJoin,\n } = joins?.[join.joinPath] || {}\n\n const sort = buildSortParam({\n config: adapter.payload.config,\n fields: adapter.payload.collections[slug].config.flattenedFields,\n locale,\n sort: sortJoin,\n timestamps: true,\n })\n const sortProperty = Object.keys(sort)[0]\n const sortDirection = sort[sortProperty] === 'asc' ? 1 : -1\n\n const $match = await joinModel.buildQuery({\n locale,\n payload: adapter.payload,\n where: whereJoin,\n })\n\n const pipeline: Exclude<PipelineStage, PipelineStage.Merge | PipelineStage.Out>[] = [\n { $match },\n {\n $sort: { [sortProperty]: sortDirection },\n },\n ]\n\n if (limitJoin > 0) {\n pipeline.push({\n $limit: limitJoin + 1,\n })\n }\n\n let polymorphicSuffix = ''\n if (Array.isArray(join.targetField.relationTo)) {\n polymorphicSuffix = '.value'\n }\n\n if (adapter.payload.config.localization && locale === 'all') {\n adapter.payload.config.localization.localeCodes.forEach((code) => {\n const as = `${versions ? `version.${join.joinPath}` : join.joinPath}${code}`\n\n aggregate.push(\n {\n $lookup: {\n as: `${as}.docs`,\n foreignField: `${join.field.on}${code}${polymorphicSuffix}`,\n from: adapter.collections[slug].collection.name,\n localField: versions ? 'parent' : '_id',\n pipeline,\n },\n },\n {\n $addFields: {\n [`${as}.docs`]: {\n $map: {\n as: 'doc',\n in: '$$doc._id',\n input: `$${as}.docs`,\n },\n }, // Slicing the docs to match the limit\n [`${as}.hasNextPage`]: limitJoin\n ? { $gt: [{ $size: `$${as}.docs` }, limitJoin] }\n : false,\n // Boolean indicating if more docs than limit\n },\n },\n )\n if (limitJoin > 0) {\n aggregate.push({\n $addFields: {\n [`${as}.docs`]: {\n $slice: [`$${as}.docs`, limitJoin],\n },\n },\n })\n }\n })\n } else {\n const localeSuffix =\n join.field.localized && adapter.payload.config.localization && locale ? `.${locale}` : ''\n const as = `${versions ? `version.${join.joinPath}` : join.joinPath}${localeSuffix}`\n\n aggregate.push(\n {\n $lookup: {\n as: `${as}.docs`,\n foreignField: `${join.field.on}${localeSuffix}${polymorphicSuffix}`,\n from: adapter.collections[slug].collection.name,\n localField: versions ? 'parent' : '_id',\n pipeline,\n },\n },\n {\n $addFields: {\n [`${as}.docs`]: {\n $map: {\n as: 'doc',\n in: '$$doc._id',\n input: `$${as}.docs`,\n },\n }, // Slicing the docs to match the limit\n [`${as}.hasNextPage`]: {\n $gt: [{ $size: `$${as}.docs` }, limitJoin || Number.MAX_VALUE],\n }, // Boolean indicating if more docs than limit\n },\n },\n )\n if (limitJoin > 0) {\n aggregate.push({\n $addFields: {\n [`${as}.docs`]: {\n $slice: [`$${as}.docs`, limitJoin],\n },\n },\n })\n }\n }\n }\n }\n\n if (projection) {\n aggregate.push({ $project: projection })\n }\n\n return aggregate\n}\n"],"names":["buildSortParam","buildJoinAggregation","adapter","collection","collectionConfig","joins","limit","locale","projection","query","versions","Object","keys","length","joinConfig","payload","collections","config","aggregate","$sort","createdAt","push","$match","$limit","slug","join","joinModel","field","joinPath","limitJoin","defaultLimit","sort","sortJoin","defaultSort","where","whereJoin","fields","flattenedFields","timestamps","sortProperty","sortDirection","buildQuery","pipeline","polymorphicSuffix","Array","isArray","targetField","relationTo","localization","localeCodes","forEach","code","as","$lookup","foreignField","on","from","name","localField","$addFields","$map","in","input","$gt","$size","$slice","localeSuffix","localized","Number","MAX_VALUE","$project"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/utilities/buildJoinAggregation.ts"],"sourcesContent":["import type { PipelineStage } from 'mongoose'\nimport type { CollectionSlug, JoinQuery, SanitizedCollectionConfig, Where } from 'payload'\n\nimport type { MongooseAdapter } from '../index.js'\n\nimport { buildSortParam } from '../queries/buildSortParam.js'\n\ntype BuildJoinAggregationArgs = {\n adapter: MongooseAdapter\n collection: CollectionSlug\n collectionConfig: SanitizedCollectionConfig\n joins: JoinQuery\n // the number of docs to get at the top collection level\n limit?: number\n locale: string\n projection?: Record<string, true>\n // the where clause for the top collection\n query?: Where\n /** whether the query is from drafts */\n versions?: boolean\n}\n\nexport const buildJoinAggregation = async ({\n adapter,\n collection,\n collectionConfig,\n joins,\n limit,\n locale,\n projection,\n query,\n versions,\n}: BuildJoinAggregationArgs): Promise<PipelineStage[] | undefined> => {\n if (Object.keys(collectionConfig.joins).length === 0 || joins === false) {\n return\n }\n\n const joinConfig = adapter.payload.collections[collection].config.joins\n const aggregate: PipelineStage[] = [\n {\n $sort: { createdAt: -1 },\n },\n ]\n\n if (query) {\n aggregate.push({\n $match: query,\n })\n }\n\n if (limit) {\n aggregate.push({\n $limit: limit,\n })\n }\n\n for (const slug of Object.keys(joinConfig)) {\n for (const join of joinConfig[slug]) {\n const joinModel = adapter.collections[join.field.collection]\n\n if (projection && !projection[join.joinPath]) {\n continue\n }\n\n if (joins?.[join.joinPath] === false) {\n continue\n }\n\n const {\n limit: limitJoin = join.field.defaultLimit ?? 10,\n sort: sortJoin = join.field.defaultSort || collectionConfig.defaultSort,\n where: whereJoin,\n } = joins?.[join.joinPath] || {}\n\n const sort = buildSortParam({\n config: adapter.payload.config,\n fields: adapter.payload.collections[slug].config.flattenedFields,\n locale,\n sort: sortJoin,\n timestamps: true,\n })\n const sortProperty = Object.keys(sort)[0]\n const sortDirection = sort[sortProperty] === 'asc' ? 1 : -1\n\n const $match = await joinModel.buildQuery({\n locale,\n payload: adapter.payload,\n where: whereJoin,\n })\n\n const pipeline: Exclude<PipelineStage, PipelineStage.Merge | PipelineStage.Out>[] = [\n { $match },\n {\n $sort: { [sortProperty]: sortDirection },\n },\n ]\n\n if (limitJoin > 0) {\n pipeline.push({\n $limit: limitJoin + 1,\n })\n }\n\n let polymorphicSuffix = ''\n if (Array.isArray(join.targetField.relationTo)) {\n polymorphicSuffix = '.value'\n }\n\n if (adapter.payload.config.localization && locale === 'all') {\n adapter.payload.config.localization.localeCodes.forEach((code) => {\n const as = `${versions ? `version.${join.joinPath}` : join.joinPath}${code}`\n\n aggregate.push(\n {\n $lookup: {\n as: `${as}.docs`,\n foreignField: `${join.field.on}${code}${polymorphicSuffix}`,\n from: adapter.collections[slug].collection.name,\n localField: versions ? 'parent' : '_id',\n pipeline,\n },\n },\n {\n $addFields: {\n [`${as}.docs`]: {\n $map: {\n as: 'doc',\n in: '$$doc._id',\n input: `$${as}.docs`,\n },\n }, // Slicing the docs to match the limit\n [`${as}.hasNextPage`]: limitJoin\n ? { $gt: [{ $size: `$${as}.docs` }, limitJoin] }\n : false,\n // Boolean indicating if more docs than limit\n },\n },\n )\n if (limitJoin > 0) {\n aggregate.push({\n $addFields: {\n [`${as}.docs`]: {\n $slice: [`$${as}.docs`, limitJoin],\n },\n },\n })\n }\n })\n } else {\n const localeSuffix =\n join.field.localized && adapter.payload.config.localization && locale ? `.${locale}` : ''\n const as = `${versions ? `version.${join.joinPath}` : join.joinPath}${localeSuffix}`\n\n let foreignField: string\n\n if (join.getForeignPath) {\n foreignField = `${join.getForeignPath({ locale })}${polymorphicSuffix}`\n } else {\n foreignField = `${join.field.on}${polymorphicSuffix}`\n }\n\n aggregate.push(\n {\n $lookup: {\n as: `${as}.docs`,\n foreignField,\n from: adapter.collections[slug].collection.name,\n localField: versions ? 'parent' : '_id',\n pipeline,\n },\n },\n {\n $addFields: {\n [`${as}.docs`]: {\n $map: {\n as: 'doc',\n in: '$$doc._id',\n input: `$${as}.docs`,\n },\n }, // Slicing the docs to match the limit\n [`${as}.hasNextPage`]: {\n $gt: [{ $size: `$${as}.docs` }, limitJoin || Number.MAX_VALUE],\n }, // Boolean indicating if more docs than limit\n },\n },\n )\n if (limitJoin > 0) {\n aggregate.push({\n $addFields: {\n [`${as}.docs`]: {\n $slice: [`$${as}.docs`, limitJoin],\n },\n },\n })\n }\n }\n }\n }\n\n if (projection) {\n aggregate.push({ $project: projection })\n }\n\n return aggregate\n}\n"],"names":["buildSortParam","buildJoinAggregation","adapter","collection","collectionConfig","joins","limit","locale","projection","query","versions","Object","keys","length","joinConfig","payload","collections","config","aggregate","$sort","createdAt","push","$match","$limit","slug","join","joinModel","field","joinPath","limitJoin","defaultLimit","sort","sortJoin","defaultSort","where","whereJoin","fields","flattenedFields","timestamps","sortProperty","sortDirection","buildQuery","pipeline","polymorphicSuffix","Array","isArray","targetField","relationTo","localization","localeCodes","forEach","code","as","$lookup","foreignField","on","from","name","localField","$addFields","$map","in","input","$gt","$size","$slice","localeSuffix","localized","getForeignPath","Number","MAX_VALUE","$project"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@payloadcms/db-mongodb",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.19.0-canary.d942873",
|
|
4
4
|
"description": "The officially supported MongoDB database adapter for Payload",
|
|
5
5
|
"homepage": "https://payloadcms.com",
|
|
6
6
|
"repository": {
|
|
@@ -47,11 +47,11 @@
|
|
|
47
47
|
"@types/mongoose-aggregate-paginate-v2": "1.0.12",
|
|
48
48
|
"mongodb": "6.12.0",
|
|
49
49
|
"mongodb-memory-server": "^10",
|
|
50
|
-
"
|
|
51
|
-
"
|
|
50
|
+
"@payloadcms/eslint-config": "3.9.0",
|
|
51
|
+
"payload": "3.19.0-canary.d942873"
|
|
52
52
|
},
|
|
53
53
|
"peerDependencies": {
|
|
54
|
-
"payload": "3.
|
|
54
|
+
"payload": "3.19.0-canary.d942873"
|
|
55
55
|
},
|
|
56
56
|
"scripts": {
|
|
57
57
|
"build": "pnpm build:types && pnpm build:swc",
|