@payloadcms/db-mongodb 3.48.0-canary.5 → 3.48.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.
Files changed (48) hide show
  1. package/dist/connect.d.ts.map +1 -1
  2. package/dist/connect.js +17 -0
  3. package/dist/connect.js.map +1 -1
  4. package/dist/find.d.ts.map +1 -1
  5. package/dist/find.js +10 -0
  6. package/dist/find.js.map +1 -1
  7. package/dist/findDistinct.d.ts +3 -0
  8. package/dist/findDistinct.d.ts.map +1 -0
  9. package/dist/findDistinct.js +122 -0
  10. package/dist/findDistinct.js.map +1 -0
  11. package/dist/findOne.d.ts.map +1 -1
  12. package/dist/findOne.js +12 -0
  13. package/dist/findOne.js.map +1 -1
  14. package/dist/index.d.ts +32 -1
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +9 -2
  17. package/dist/index.js.map +1 -1
  18. package/dist/models/buildSchema.d.ts.map +1 -1
  19. package/dist/models/buildSchema.js +6 -2
  20. package/dist/models/buildSchema.js.map +1 -1
  21. package/dist/queries/buildSortParam.d.ts.map +1 -1
  22. package/dist/queries/buildSortParam.js +35 -13
  23. package/dist/queries/buildSortParam.js.map +1 -1
  24. package/dist/queryDrafts.d.ts.map +1 -1
  25. package/dist/queryDrafts.js +11 -0
  26. package/dist/queryDrafts.js.map +1 -1
  27. package/dist/updateOne.d.ts.map +1 -1
  28. package/dist/updateOne.js +11 -2
  29. package/dist/updateOne.js.map +1 -1
  30. package/dist/utilities/aggregatePaginate.d.ts.map +1 -1
  31. package/dist/utilities/aggregatePaginate.js +4 -2
  32. package/dist/utilities/aggregatePaginate.js.map +1 -1
  33. package/dist/utilities/buildJoinAggregation.d.ts.map +1 -1
  34. package/dist/utilities/buildJoinAggregation.js +3 -0
  35. package/dist/utilities/buildJoinAggregation.js.map +1 -1
  36. package/dist/utilities/compatabilityOptions.d.ts +24 -0
  37. package/dist/utilities/compatabilityOptions.d.ts.map +1 -0
  38. package/dist/utilities/compatabilityOptions.js +24 -0
  39. package/dist/utilities/compatabilityOptions.js.map +1 -0
  40. package/dist/utilities/resolveJoins.d.ts +25 -0
  41. package/dist/utilities/resolveJoins.d.ts.map +1 -0
  42. package/dist/utilities/resolveJoins.js +469 -0
  43. package/dist/utilities/resolveJoins.js.map +1 -0
  44. package/dist/utilities/transform.d.ts +2 -1
  45. package/dist/utilities/transform.d.ts.map +1 -1
  46. package/dist/utilities/transform.js +14 -2
  47. package/dist/utilities/transform.js.map +1 -1
  48. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/models/buildSchema.ts"],"sourcesContent":["import type { IndexOptions, Schema, SchemaOptions, SchemaTypeOptions } from 'mongoose'\n\nimport mongoose from 'mongoose'\nimport {\n type ArrayField,\n type BlocksField,\n type CheckboxField,\n type CodeField,\n type CollapsibleField,\n type DateField,\n type EmailField,\n type Field,\n type FieldAffectingData,\n type GroupField,\n type JSONField,\n type NonPresentationalField,\n type NumberField,\n type Payload,\n type PointField,\n type RadioField,\n type RelationshipField,\n type RichTextField,\n type RowField,\n type SanitizedCompoundIndex,\n type SanitizedLocalizationConfig,\n type SelectField,\n type Tab,\n type TabsField,\n type TextareaField,\n type TextField,\n type UploadField,\n} from 'payload'\nimport {\n fieldAffectsData,\n fieldIsPresentationalOnly,\n fieldIsVirtual,\n fieldShouldBeLocalized,\n tabHasName,\n} from 'payload/shared'\n\nexport type BuildSchemaOptions = {\n allowIDField?: boolean\n disableUnique?: boolean\n draftsEnabled?: boolean\n indexSortableFields?: boolean\n options?: SchemaOptions\n}\n\ntype FieldSchemaGenerator<T extends Field = Field> = (\n field: T,\n schema: Schema,\n config: Payload,\n buildSchemaOptions: BuildSchemaOptions,\n parentIsLocalized: boolean,\n) => void\n\n/**\n * get a field's defaultValue only if defined and not dynamic so that it can be set on the field schema\n * @param field\n */\nconst formatDefaultValue = (field: FieldAffectingData) =>\n typeof field.defaultValue !== 'undefined' && typeof field.defaultValue !== 'function'\n ? field.defaultValue\n : undefined\n\nconst formatBaseSchema = ({\n buildSchemaOptions,\n field,\n parentIsLocalized,\n}: {\n buildSchemaOptions: BuildSchemaOptions\n field: FieldAffectingData\n parentIsLocalized: boolean\n}) => {\n const { disableUnique, draftsEnabled, indexSortableFields } = buildSchemaOptions\n const schema: SchemaTypeOptions<unknown> = {\n default: formatDefaultValue(field),\n index: field.index || (!disableUnique && field.unique) || indexSortableFields || false,\n required: false,\n unique: (!disableUnique && field.unique) || false,\n }\n\n if (\n schema.unique &&\n (fieldShouldBeLocalized({ field, parentIsLocalized }) ||\n draftsEnabled ||\n (fieldAffectsData(field) &&\n field.type !== 'group' &&\n field.type !== 'tab' &&\n field.required !== true))\n ) {\n schema.sparse = true\n }\n\n if (field.hidden) {\n schema.hidden = true\n }\n\n return schema\n}\n\nconst localizeSchema = (\n entity: NonPresentationalField | Tab,\n schema: SchemaTypeOptions<any>,\n localization: false | SanitizedLocalizationConfig,\n parentIsLocalized: boolean,\n) => {\n if (\n fieldShouldBeLocalized({ field: entity, parentIsLocalized }) &&\n localization &&\n Array.isArray(localization.locales)\n ) {\n return {\n type: localization.localeCodes.reduce(\n (localeSchema, locale) => ({\n ...localeSchema,\n [locale]: schema,\n }),\n {\n _id: false,\n },\n ),\n localized: true,\n }\n }\n return schema\n}\n\nexport const buildSchema = (args: {\n buildSchemaOptions: BuildSchemaOptions\n compoundIndexes?: SanitizedCompoundIndex[]\n configFields: Field[]\n parentIsLocalized?: boolean\n payload: Payload\n}): Schema => {\n const { buildSchemaOptions = {}, configFields, parentIsLocalized, payload } = args\n const { allowIDField, options } = buildSchemaOptions\n let fields = {}\n\n let schemaFields = configFields\n\n if (!allowIDField) {\n const idField = schemaFields.find((field) => fieldAffectsData(field) && field.name === 'id')\n if (idField) {\n fields = {\n _id: idField.type === 'number' ? Number : String,\n }\n schemaFields = schemaFields.filter(\n (field) => !(fieldAffectsData(field) && field.name === 'id'),\n )\n }\n }\n\n const schema = new mongoose.Schema(fields, options as any)\n\n schemaFields.forEach((field) => {\n if (fieldIsVirtual(field)) {\n return\n }\n\n if (!fieldIsPresentationalOnly(field)) {\n const addFieldSchema = getSchemaGenerator(field.type)\n\n if (addFieldSchema) {\n addFieldSchema(field, schema, payload, buildSchemaOptions, parentIsLocalized ?? false)\n }\n }\n })\n\n if (args.compoundIndexes) {\n for (const index of args.compoundIndexes) {\n const indexDefinition: Record<string, 1> = {}\n\n for (const field of index.fields) {\n if (field.pathHasLocalized && payload.config.localization) {\n for (const locale of payload.config.localization.locales) {\n indexDefinition[field.localizedPath.replace('<locale>', locale.code)] = 1\n }\n } else {\n indexDefinition[field.path] = 1\n }\n }\n\n schema.index(indexDefinition, {\n unique: args.buildSchemaOptions.disableUnique ? false : index.unique,\n })\n }\n }\n\n return schema\n}\n\nconst array: FieldSchemaGenerator<ArrayField> = (\n field: ArrayField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n) => {\n const baseSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: [\n buildSchema({\n buildSchemaOptions: {\n allowIDField: true,\n disableUnique: buildSchemaOptions.disableUnique,\n draftsEnabled: buildSchemaOptions.draftsEnabled,\n options: {\n _id: false,\n id: false,\n minimize: false,\n },\n },\n configFields: field.fields,\n parentIsLocalized: parentIsLocalized || field.localized,\n payload,\n }),\n ],\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst blocks: FieldSchemaGenerator<BlocksField> = (\n field: BlocksField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const fieldSchema: SchemaTypeOptions<any> = {\n type: [new mongoose.Schema({}, { _id: false, discriminatorKey: 'blockType' })],\n }\n\n schema.add({\n [field.name]: localizeSchema(\n field,\n fieldSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\n })\n ;(field.blockReferences ?? field.blocks).forEach((blockItem) => {\n const blockSchema = new mongoose.Schema({}, { _id: false, id: false })\n\n const block = typeof blockItem === 'string' ? payload.blocks[blockItem] : blockItem\n\n if (!block) {\n return\n }\n\n block.fields.forEach((blockField) => {\n const addFieldSchema = getSchemaGenerator(blockField.type)\n\n if (addFieldSchema) {\n addFieldSchema(\n blockField,\n blockSchema,\n payload,\n buildSchemaOptions,\n (parentIsLocalized || field.localized) ?? false,\n )\n }\n })\n\n if (fieldShouldBeLocalized({ field, parentIsLocalized }) && payload.config.localization) {\n payload.config.localization.localeCodes.forEach((localeCode) => {\n // @ts-expect-error Possible incorrect typing in mongoose types, this works\n schema.path(`${field.name}.${localeCode}`).discriminator(block.slug, blockSchema)\n })\n } else {\n // @ts-expect-error Possible incorrect typing in mongoose types, this works\n schema.path(field.name).discriminator(block.slug, blockSchema)\n }\n })\n}\n\nconst checkbox: FieldSchemaGenerator<CheckboxField> = (\n field: CheckboxField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: Boolean,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst code: FieldSchemaGenerator<CodeField> = (\n field: CodeField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: String,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst collapsible: FieldSchemaGenerator<CollapsibleField> = (\n field: CollapsibleField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n field.fields.forEach((subField: Field) => {\n if (fieldIsVirtual(subField)) {\n return\n }\n\n const addFieldSchema = getSchemaGenerator(subField.type)\n\n if (addFieldSchema) {\n addFieldSchema(subField, schema, payload, buildSchemaOptions, parentIsLocalized)\n }\n })\n}\n\nconst date: FieldSchemaGenerator<DateField> = (\n field: DateField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: Date,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst email: FieldSchemaGenerator<EmailField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: String,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst group: FieldSchemaGenerator<GroupField> = (\n field: GroupField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n if (fieldAffectsData(field)) {\n const formattedBaseSchema = formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized })\n\n // carry indexSortableFields through to versions if drafts enabled\n const indexSortableFields =\n buildSchemaOptions.indexSortableFields &&\n field.name === 'version' &&\n buildSchemaOptions.draftsEnabled\n\n const baseSchema: SchemaTypeOptions<any> = {\n ...formattedBaseSchema,\n type: buildSchema({\n buildSchemaOptions: {\n disableUnique: buildSchemaOptions.disableUnique,\n draftsEnabled: buildSchemaOptions.draftsEnabled,\n indexSortableFields,\n options: {\n _id: false,\n id: false,\n minimize: false,\n },\n },\n configFields: field.fields,\n parentIsLocalized: parentIsLocalized || field.localized,\n payload,\n }),\n }\n\n schema.add({\n [field.name]: localizeSchema(\n field,\n baseSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\n })\n } else {\n field.fields.forEach((subField) => {\n if (fieldIsVirtual(subField)) {\n return\n }\n\n const addFieldSchema = getSchemaGenerator(subField.type)\n\n if (addFieldSchema) {\n addFieldSchema(\n subField,\n schema,\n payload,\n buildSchemaOptions,\n (parentIsLocalized || field.localized) ?? false,\n )\n }\n })\n }\n}\n\nconst json: FieldSchemaGenerator<JSONField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: mongoose.Schema.Types.Mixed,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst number: FieldSchemaGenerator<NumberField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: field.hasMany ? [Number] : Number,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst point: FieldSchemaGenerator<PointField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema: SchemaTypeOptions<unknown> = {\n type: {\n type: String,\n enum: ['Point'],\n ...(typeof field.defaultValue !== 'undefined' && {\n default: 'Point',\n }),\n },\n coordinates: {\n type: [Number],\n default: formatDefaultValue(field),\n required: false,\n },\n }\n\n if (\n buildSchemaOptions.disableUnique &&\n field.unique &&\n fieldShouldBeLocalized({ field, parentIsLocalized })\n ) {\n baseSchema.coordinates.sparse = true\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n\n if (field.index === true || field.index === undefined) {\n const indexOptions: IndexOptions = {}\n if (!buildSchemaOptions.disableUnique && field.unique) {\n indexOptions.sparse = true\n indexOptions.unique = true\n }\n if (fieldShouldBeLocalized({ field, parentIsLocalized }) && payload.config.localization) {\n payload.config.localization.locales.forEach((locale) => {\n schema.index({ [`${field.name}.${locale.code}`]: '2dsphere' }, indexOptions)\n })\n } else {\n schema.index({ [field.name]: '2dsphere' }, indexOptions)\n }\n }\n}\n\nconst radio: FieldSchemaGenerator<RadioField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: String,\n enum: field.options.map((option) => {\n if (typeof option === 'object') {\n return option.value\n }\n return option\n }),\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst relationship: FieldSchemaGenerator<RelationshipField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n) => {\n const hasManyRelations = Array.isArray(field.relationTo)\n let schemaToReturn: { [key: string]: any } = {}\n\n const valueType = getRelationshipValueType(field, payload)\n\n if (fieldShouldBeLocalized({ field, parentIsLocalized }) && payload.config.localization) {\n schemaToReturn = {\n _id: false,\n type: payload.config.localization.localeCodes.reduce((locales, locale) => {\n let localeSchema: { [key: string]: any } = {}\n\n if (hasManyRelations) {\n localeSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n _id: false,\n type: mongoose.Schema.Types.Mixed,\n relationTo: { type: String, enum: field.relationTo },\n value: {\n type: valueType,\n refPath: `${field.name}.${locale}.relationTo`,\n },\n }\n } else {\n localeSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: valueType,\n ref: field.relationTo,\n }\n }\n\n return {\n ...locales,\n [locale]: field.hasMany\n ? { type: [localeSchema], default: formatDefaultValue(field) }\n : localeSchema,\n }\n }, {}),\n localized: true,\n }\n } else if (hasManyRelations) {\n schemaToReturn = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n _id: false,\n type: mongoose.Schema.Types.Mixed,\n relationTo: { type: String, enum: field.relationTo },\n value: {\n type: valueType,\n refPath: `${field.name}.relationTo`,\n },\n }\n\n if (field.hasMany) {\n schemaToReturn = {\n type: [schemaToReturn],\n default: formatDefaultValue(field),\n }\n }\n } else {\n schemaToReturn = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: valueType,\n ref: field.relationTo,\n }\n\n if (field.hasMany) {\n schemaToReturn = {\n type: [schemaToReturn],\n default: formatDefaultValue(field),\n }\n }\n }\n\n schema.add({\n [field.name]: schemaToReturn,\n })\n}\n\nconst richText: FieldSchemaGenerator<RichTextField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: mongoose.Schema.Types.Mixed,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst row: FieldSchemaGenerator<RowField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n field.fields.forEach((subField: Field) => {\n if (fieldIsVirtual(subField)) {\n return\n }\n\n const addFieldSchema = getSchemaGenerator(subField.type)\n\n if (addFieldSchema) {\n addFieldSchema(subField, schema, payload, buildSchemaOptions, parentIsLocalized)\n }\n })\n}\n\nconst select: FieldSchemaGenerator<SelectField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: String,\n enum: field.options.map((option) => {\n if (typeof option === 'object') {\n return option.value\n }\n return option\n }),\n }\n\n if (buildSchemaOptions.draftsEnabled || !field.required) {\n ;(baseSchema.enum as unknown[]).push(null)\n }\n\n schema.add({\n [field.name]: localizeSchema(\n field,\n field.hasMany ? [baseSchema] : baseSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\n })\n}\n\nconst tabs: FieldSchemaGenerator<TabsField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n field.tabs.forEach((tab) => {\n if (tabHasName(tab)) {\n if (fieldIsVirtual(tab)) {\n return\n }\n const baseSchema = {\n type: buildSchema({\n buildSchemaOptions: {\n disableUnique: buildSchemaOptions.disableUnique,\n draftsEnabled: buildSchemaOptions.draftsEnabled,\n options: {\n _id: false,\n id: false,\n minimize: false,\n },\n },\n configFields: tab.fields,\n parentIsLocalized: parentIsLocalized || tab.localized,\n payload,\n }),\n }\n\n schema.add({\n [tab.name]: localizeSchema(tab, baseSchema, payload.config.localization, parentIsLocalized),\n })\n } else {\n tab.fields.forEach((subField: Field) => {\n if (fieldIsVirtual(subField)) {\n return\n }\n const addFieldSchema = getSchemaGenerator(subField.type)\n\n if (addFieldSchema) {\n addFieldSchema(\n subField,\n schema,\n payload,\n buildSchemaOptions,\n (parentIsLocalized || tab.localized) ?? false,\n )\n }\n })\n }\n })\n}\n\nconst text: FieldSchemaGenerator<TextField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: field.hasMany ? [String] : String,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst textarea: FieldSchemaGenerator<TextareaField> = (\n field: TextareaField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: String,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst upload: FieldSchemaGenerator<UploadField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const hasManyRelations = Array.isArray(field.relationTo)\n let schemaToReturn: { [key: string]: any } = {}\n\n const valueType = getRelationshipValueType(field, payload)\n\n if (fieldShouldBeLocalized({ field, parentIsLocalized }) && payload.config.localization) {\n schemaToReturn = {\n _id: false,\n type: payload.config.localization.localeCodes.reduce((locales, locale) => {\n let localeSchema: { [key: string]: any } = {}\n\n if (hasManyRelations) {\n localeSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n _id: false,\n type: mongoose.Schema.Types.Mixed,\n relationTo: { type: String, enum: field.relationTo },\n value: {\n type: valueType,\n refPath: `${field.name}.${locale}.relationTo`,\n },\n }\n } else {\n localeSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: valueType,\n ref: field.relationTo,\n }\n }\n\n return {\n ...locales,\n [locale]: field.hasMany\n ? { type: [localeSchema], default: formatDefaultValue(field) }\n : localeSchema,\n }\n }, {}),\n localized: true,\n }\n } else if (hasManyRelations) {\n schemaToReturn = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n _id: false,\n type: mongoose.Schema.Types.Mixed,\n relationTo: { type: String, enum: field.relationTo },\n value: {\n type: valueType,\n refPath: `${field.name}.relationTo`,\n },\n }\n\n if (field.hasMany) {\n schemaToReturn = {\n type: [schemaToReturn],\n default: formatDefaultValue(field),\n }\n }\n } else {\n schemaToReturn = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: valueType,\n ref: field.relationTo,\n }\n\n if (field.hasMany) {\n schemaToReturn = {\n type: [schemaToReturn],\n default: formatDefaultValue(field),\n }\n }\n }\n\n schema.add({\n [field.name]: schemaToReturn,\n })\n}\n\nconst getSchemaGenerator = (fieldType: string): FieldSchemaGenerator | null => {\n if (fieldType in fieldToSchemaMap) {\n return fieldToSchemaMap[fieldType as keyof typeof fieldToSchemaMap] as FieldSchemaGenerator\n }\n\n return null\n}\n\nconst fieldToSchemaMap = {\n array,\n blocks,\n checkbox,\n code,\n collapsible,\n date,\n email,\n group,\n json,\n number,\n point,\n radio,\n relationship,\n richText,\n row,\n select,\n tabs,\n text,\n textarea,\n upload,\n}\n\nconst getRelationshipValueType = (field: RelationshipField | UploadField, payload: Payload) => {\n if (typeof field.relationTo === 'string') {\n const customIDType = payload.collections[field.relationTo]?.customIDType\n\n if (!customIDType) {\n return mongoose.Schema.Types.ObjectId\n }\n\n if (customIDType === 'number') {\n return mongoose.Schema.Types.Number\n }\n\n return mongoose.Schema.Types.String\n }\n\n // has custom id relationTo\n if (\n field.relationTo.some((relationTo) => {\n return !!payload.collections[relationTo]?.customIDType\n })\n ) {\n return mongoose.Schema.Types.Mixed\n }\n\n return mongoose.Schema.Types.ObjectId\n}\n"],"names":["mongoose","fieldAffectsData","fieldIsPresentationalOnly","fieldIsVirtual","fieldShouldBeLocalized","tabHasName","formatDefaultValue","field","defaultValue","undefined","formatBaseSchema","buildSchemaOptions","parentIsLocalized","disableUnique","draftsEnabled","indexSortableFields","schema","default","index","unique","required","type","sparse","hidden","localizeSchema","entity","localization","Array","isArray","locales","localeCodes","reduce","localeSchema","locale","_id","localized","buildSchema","args","configFields","payload","allowIDField","options","fields","schemaFields","idField","find","name","Number","String","filter","Schema","forEach","addFieldSchema","getSchemaGenerator","compoundIndexes","indexDefinition","pathHasLocalized","config","localizedPath","replace","code","path","array","baseSchema","id","minimize","add","blocks","fieldSchema","discriminatorKey","blockReferences","blockItem","blockSchema","block","blockField","localeCode","discriminator","slug","checkbox","Boolean","collapsible","subField","date","Date","email","group","formattedBaseSchema","json","Types","Mixed","number","hasMany","point","enum","coordinates","indexOptions","radio","map","option","value","relationship","hasManyRelations","relationTo","schemaToReturn","valueType","getRelationshipValueType","refPath","ref","richText","row","select","push","tabs","tab","text","textarea","upload","fieldType","fieldToSchemaMap","customIDType","collections","ObjectId","some"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/models/buildSchema.ts"],"sourcesContent":["import type { IndexOptions, Schema, SchemaOptions, SchemaTypeOptions } from 'mongoose'\n\nimport mongoose from 'mongoose'\nimport {\n type ArrayField,\n type BlocksField,\n type CheckboxField,\n type CodeField,\n type CollapsibleField,\n type DateField,\n type EmailField,\n type Field,\n type FieldAffectingData,\n type GroupField,\n type JSONField,\n type NonPresentationalField,\n type NumberField,\n type Payload,\n type PointField,\n type RadioField,\n type RelationshipField,\n type RichTextField,\n type RowField,\n type SanitizedCompoundIndex,\n type SanitizedLocalizationConfig,\n type SelectField,\n type Tab,\n type TabsField,\n type TextareaField,\n type TextField,\n type UploadField,\n} from 'payload'\nimport {\n fieldAffectsData,\n fieldIsPresentationalOnly,\n fieldIsVirtual,\n fieldShouldBeLocalized,\n tabHasName,\n} from 'payload/shared'\n\nexport type BuildSchemaOptions = {\n allowIDField?: boolean\n disableUnique?: boolean\n draftsEnabled?: boolean\n indexSortableFields?: boolean\n options?: SchemaOptions\n}\n\ntype FieldSchemaGenerator<T extends Field = Field> = (\n field: T,\n schema: Schema,\n config: Payload,\n buildSchemaOptions: BuildSchemaOptions,\n parentIsLocalized: boolean,\n) => void\n\n/**\n * get a field's defaultValue only if defined and not dynamic so that it can be set on the field schema\n * @param field\n */\nconst formatDefaultValue = (field: FieldAffectingData) =>\n typeof field.defaultValue !== 'undefined' && typeof field.defaultValue !== 'function'\n ? field.defaultValue\n : undefined\n\nconst formatBaseSchema = ({\n buildSchemaOptions,\n field,\n parentIsLocalized,\n}: {\n buildSchemaOptions: BuildSchemaOptions\n field: FieldAffectingData\n parentIsLocalized: boolean\n}) => {\n const { disableUnique, draftsEnabled, indexSortableFields } = buildSchemaOptions\n const schema: SchemaTypeOptions<unknown> = {\n default: formatDefaultValue(field),\n index: field.index || (!disableUnique && field.unique) || indexSortableFields || false,\n required: false,\n unique: (!disableUnique && field.unique) || false,\n }\n\n if (\n schema.unique &&\n (fieldShouldBeLocalized({ field, parentIsLocalized }) ||\n draftsEnabled ||\n (fieldAffectsData(field) &&\n field.type !== 'group' &&\n field.type !== 'tab' &&\n field.required !== true))\n ) {\n schema.sparse = true\n }\n\n if (field.hidden) {\n schema.hidden = true\n }\n\n return schema\n}\n\nconst localizeSchema = (\n entity: NonPresentationalField | Tab,\n schema: SchemaTypeOptions<any>,\n localization: false | SanitizedLocalizationConfig,\n parentIsLocalized: boolean,\n) => {\n if (\n fieldShouldBeLocalized({ field: entity, parentIsLocalized }) &&\n localization &&\n Array.isArray(localization.locales)\n ) {\n return {\n type: localization.localeCodes.reduce(\n (localeSchema, locale) => ({\n ...localeSchema,\n [locale]: schema,\n }),\n {\n _id: false,\n },\n ),\n localized: true,\n }\n }\n return schema\n}\n\nexport const buildSchema = (args: {\n buildSchemaOptions: BuildSchemaOptions\n compoundIndexes?: SanitizedCompoundIndex[]\n configFields: Field[]\n parentIsLocalized?: boolean\n payload: Payload\n}): Schema => {\n const { buildSchemaOptions = {}, configFields, parentIsLocalized, payload } = args\n const { allowIDField, options } = buildSchemaOptions\n let fields = {}\n\n let schemaFields = configFields\n\n if (!allowIDField) {\n const idField = schemaFields.find((field) => fieldAffectsData(field) && field.name === 'id')\n if (idField) {\n fields = {\n _id:\n idField.type === 'number'\n ? payload.db.useBigIntForNumberIDs\n ? mongoose.Schema.Types.BigInt\n : Number\n : String,\n }\n schemaFields = schemaFields.filter(\n (field) => !(fieldAffectsData(field) && field.name === 'id'),\n )\n }\n }\n\n const schema = new mongoose.Schema(fields, options as any)\n\n schemaFields.forEach((field) => {\n if (fieldIsVirtual(field)) {\n return\n }\n\n if (!fieldIsPresentationalOnly(field)) {\n const addFieldSchema = getSchemaGenerator(field.type)\n\n if (addFieldSchema) {\n addFieldSchema(field, schema, payload, buildSchemaOptions, parentIsLocalized ?? false)\n }\n }\n })\n\n if (args.compoundIndexes) {\n for (const index of args.compoundIndexes) {\n const indexDefinition: Record<string, 1> = {}\n\n for (const field of index.fields) {\n if (field.pathHasLocalized && payload.config.localization) {\n for (const locale of payload.config.localization.locales) {\n indexDefinition[field.localizedPath.replace('<locale>', locale.code)] = 1\n }\n } else {\n indexDefinition[field.path] = 1\n }\n }\n\n schema.index(indexDefinition, {\n unique: args.buildSchemaOptions.disableUnique ? false : index.unique,\n })\n }\n }\n\n return schema\n}\n\nconst array: FieldSchemaGenerator<ArrayField> = (\n field: ArrayField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n) => {\n const baseSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: [\n buildSchema({\n buildSchemaOptions: {\n allowIDField: true,\n disableUnique: buildSchemaOptions.disableUnique,\n draftsEnabled: buildSchemaOptions.draftsEnabled,\n options: {\n _id: false,\n id: false,\n minimize: false,\n },\n },\n configFields: field.fields,\n parentIsLocalized: parentIsLocalized || field.localized,\n payload,\n }),\n ],\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst blocks: FieldSchemaGenerator<BlocksField> = (\n field: BlocksField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const fieldSchema: SchemaTypeOptions<any> = {\n type: [new mongoose.Schema({}, { _id: false, discriminatorKey: 'blockType' })],\n }\n\n schema.add({\n [field.name]: localizeSchema(\n field,\n fieldSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\n })\n ;(field.blockReferences ?? field.blocks).forEach((blockItem) => {\n const blockSchema = new mongoose.Schema({}, { _id: false, id: false })\n\n const block = typeof blockItem === 'string' ? payload.blocks[blockItem] : blockItem\n\n if (!block) {\n return\n }\n\n block.fields.forEach((blockField) => {\n const addFieldSchema = getSchemaGenerator(blockField.type)\n\n if (addFieldSchema) {\n addFieldSchema(\n blockField,\n blockSchema,\n payload,\n buildSchemaOptions,\n (parentIsLocalized || field.localized) ?? false,\n )\n }\n })\n\n if (fieldShouldBeLocalized({ field, parentIsLocalized }) && payload.config.localization) {\n payload.config.localization.localeCodes.forEach((localeCode) => {\n // @ts-expect-error Possible incorrect typing in mongoose types, this works\n schema.path(`${field.name}.${localeCode}`).discriminator(block.slug, blockSchema)\n })\n } else {\n // @ts-expect-error Possible incorrect typing in mongoose types, this works\n schema.path(field.name).discriminator(block.slug, blockSchema)\n }\n })\n}\n\nconst checkbox: FieldSchemaGenerator<CheckboxField> = (\n field: CheckboxField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: Boolean,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst code: FieldSchemaGenerator<CodeField> = (\n field: CodeField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: String,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst collapsible: FieldSchemaGenerator<CollapsibleField> = (\n field: CollapsibleField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n field.fields.forEach((subField: Field) => {\n if (fieldIsVirtual(subField)) {\n return\n }\n\n const addFieldSchema = getSchemaGenerator(subField.type)\n\n if (addFieldSchema) {\n addFieldSchema(subField, schema, payload, buildSchemaOptions, parentIsLocalized)\n }\n })\n}\n\nconst date: FieldSchemaGenerator<DateField> = (\n field: DateField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: Date,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst email: FieldSchemaGenerator<EmailField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: String,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst group: FieldSchemaGenerator<GroupField> = (\n field: GroupField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n if (fieldAffectsData(field)) {\n const formattedBaseSchema = formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized })\n\n // carry indexSortableFields through to versions if drafts enabled\n const indexSortableFields =\n buildSchemaOptions.indexSortableFields &&\n field.name === 'version' &&\n buildSchemaOptions.draftsEnabled\n\n const baseSchema: SchemaTypeOptions<any> = {\n ...formattedBaseSchema,\n type: buildSchema({\n buildSchemaOptions: {\n disableUnique: buildSchemaOptions.disableUnique,\n draftsEnabled: buildSchemaOptions.draftsEnabled,\n indexSortableFields,\n options: {\n _id: false,\n id: false,\n minimize: false,\n },\n },\n configFields: field.fields,\n parentIsLocalized: parentIsLocalized || field.localized,\n payload,\n }),\n }\n\n schema.add({\n [field.name]: localizeSchema(\n field,\n baseSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\n })\n } else {\n field.fields.forEach((subField) => {\n if (fieldIsVirtual(subField)) {\n return\n }\n\n const addFieldSchema = getSchemaGenerator(subField.type)\n\n if (addFieldSchema) {\n addFieldSchema(\n subField,\n schema,\n payload,\n buildSchemaOptions,\n (parentIsLocalized || field.localized) ?? false,\n )\n }\n })\n }\n}\n\nconst json: FieldSchemaGenerator<JSONField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: mongoose.Schema.Types.Mixed,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst number: FieldSchemaGenerator<NumberField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: field.hasMany ? [Number] : Number,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst point: FieldSchemaGenerator<PointField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema: SchemaTypeOptions<unknown> = {\n type: {\n type: String,\n enum: ['Point'],\n ...(typeof field.defaultValue !== 'undefined' && {\n default: 'Point',\n }),\n },\n coordinates: {\n type: [Number],\n default: formatDefaultValue(field),\n required: false,\n },\n }\n\n if (\n buildSchemaOptions.disableUnique &&\n field.unique &&\n fieldShouldBeLocalized({ field, parentIsLocalized })\n ) {\n baseSchema.coordinates.sparse = true\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n\n if (field.index === true || field.index === undefined) {\n const indexOptions: IndexOptions = {}\n if (!buildSchemaOptions.disableUnique && field.unique) {\n indexOptions.sparse = true\n indexOptions.unique = true\n }\n if (fieldShouldBeLocalized({ field, parentIsLocalized }) && payload.config.localization) {\n payload.config.localization.locales.forEach((locale) => {\n schema.index({ [`${field.name}.${locale.code}`]: '2dsphere' }, indexOptions)\n })\n } else {\n schema.index({ [field.name]: '2dsphere' }, indexOptions)\n }\n }\n}\n\nconst radio: FieldSchemaGenerator<RadioField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: String,\n enum: field.options.map((option) => {\n if (typeof option === 'object') {\n return option.value\n }\n return option\n }),\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst relationship: FieldSchemaGenerator<RelationshipField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n) => {\n const hasManyRelations = Array.isArray(field.relationTo)\n let schemaToReturn: { [key: string]: any } = {}\n\n const valueType = getRelationshipValueType(field, payload)\n\n if (fieldShouldBeLocalized({ field, parentIsLocalized }) && payload.config.localization) {\n schemaToReturn = {\n _id: false,\n type: payload.config.localization.localeCodes.reduce((locales, locale) => {\n let localeSchema: { [key: string]: any } = {}\n\n if (hasManyRelations) {\n localeSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n _id: false,\n type: mongoose.Schema.Types.Mixed,\n relationTo: { type: String, enum: field.relationTo },\n value: {\n type: valueType,\n refPath: `${field.name}.${locale}.relationTo`,\n },\n }\n } else {\n localeSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: valueType,\n ref: field.relationTo,\n }\n }\n\n return {\n ...locales,\n [locale]: field.hasMany\n ? { type: [localeSchema], default: formatDefaultValue(field) }\n : localeSchema,\n }\n }, {}),\n localized: true,\n }\n } else if (hasManyRelations) {\n schemaToReturn = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n _id: false,\n type: mongoose.Schema.Types.Mixed,\n relationTo: { type: String, enum: field.relationTo },\n value: {\n type: valueType,\n refPath: `${field.name}.relationTo`,\n },\n }\n\n if (field.hasMany) {\n schemaToReturn = {\n type: [schemaToReturn],\n default: formatDefaultValue(field),\n }\n }\n } else {\n schemaToReturn = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: valueType,\n ref: field.relationTo,\n }\n\n if (field.hasMany) {\n schemaToReturn = {\n type: [schemaToReturn],\n default: formatDefaultValue(field),\n }\n }\n }\n\n schema.add({\n [field.name]: schemaToReturn,\n })\n}\n\nconst richText: FieldSchemaGenerator<RichTextField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: mongoose.Schema.Types.Mixed,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst row: FieldSchemaGenerator<RowField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n field.fields.forEach((subField: Field) => {\n if (fieldIsVirtual(subField)) {\n return\n }\n\n const addFieldSchema = getSchemaGenerator(subField.type)\n\n if (addFieldSchema) {\n addFieldSchema(subField, schema, payload, buildSchemaOptions, parentIsLocalized)\n }\n })\n}\n\nconst select: FieldSchemaGenerator<SelectField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: String,\n enum: field.options.map((option) => {\n if (typeof option === 'object') {\n return option.value\n }\n return option\n }),\n }\n\n if (buildSchemaOptions.draftsEnabled || !field.required) {\n ;(baseSchema.enum as unknown[]).push(null)\n }\n\n schema.add({\n [field.name]: localizeSchema(\n field,\n field.hasMany ? [baseSchema] : baseSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\n })\n}\n\nconst tabs: FieldSchemaGenerator<TabsField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n field.tabs.forEach((tab) => {\n if (tabHasName(tab)) {\n if (fieldIsVirtual(tab)) {\n return\n }\n const baseSchema = {\n type: buildSchema({\n buildSchemaOptions: {\n disableUnique: buildSchemaOptions.disableUnique,\n draftsEnabled: buildSchemaOptions.draftsEnabled,\n options: {\n _id: false,\n id: false,\n minimize: false,\n },\n },\n configFields: tab.fields,\n parentIsLocalized: parentIsLocalized || tab.localized,\n payload,\n }),\n }\n\n schema.add({\n [tab.name]: localizeSchema(tab, baseSchema, payload.config.localization, parentIsLocalized),\n })\n } else {\n tab.fields.forEach((subField: Field) => {\n if (fieldIsVirtual(subField)) {\n return\n }\n const addFieldSchema = getSchemaGenerator(subField.type)\n\n if (addFieldSchema) {\n addFieldSchema(\n subField,\n schema,\n payload,\n buildSchemaOptions,\n (parentIsLocalized || tab.localized) ?? false,\n )\n }\n })\n }\n })\n}\n\nconst text: FieldSchemaGenerator<TextField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: field.hasMany ? [String] : String,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst textarea: FieldSchemaGenerator<TextareaField> = (\n field: TextareaField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: String,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst upload: FieldSchemaGenerator<UploadField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const hasManyRelations = Array.isArray(field.relationTo)\n let schemaToReturn: { [key: string]: any } = {}\n\n const valueType = getRelationshipValueType(field, payload)\n\n if (fieldShouldBeLocalized({ field, parentIsLocalized }) && payload.config.localization) {\n schemaToReturn = {\n _id: false,\n type: payload.config.localization.localeCodes.reduce((locales, locale) => {\n let localeSchema: { [key: string]: any } = {}\n\n if (hasManyRelations) {\n localeSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n _id: false,\n type: mongoose.Schema.Types.Mixed,\n relationTo: { type: String, enum: field.relationTo },\n value: {\n type: valueType,\n refPath: `${field.name}.${locale}.relationTo`,\n },\n }\n } else {\n localeSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: valueType,\n ref: field.relationTo,\n }\n }\n\n return {\n ...locales,\n [locale]: field.hasMany\n ? { type: [localeSchema], default: formatDefaultValue(field) }\n : localeSchema,\n }\n }, {}),\n localized: true,\n }\n } else if (hasManyRelations) {\n schemaToReturn = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n _id: false,\n type: mongoose.Schema.Types.Mixed,\n relationTo: { type: String, enum: field.relationTo },\n value: {\n type: valueType,\n refPath: `${field.name}.relationTo`,\n },\n }\n\n if (field.hasMany) {\n schemaToReturn = {\n type: [schemaToReturn],\n default: formatDefaultValue(field),\n }\n }\n } else {\n schemaToReturn = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: valueType,\n ref: field.relationTo,\n }\n\n if (field.hasMany) {\n schemaToReturn = {\n type: [schemaToReturn],\n default: formatDefaultValue(field),\n }\n }\n }\n\n schema.add({\n [field.name]: schemaToReturn,\n })\n}\n\nconst getSchemaGenerator = (fieldType: string): FieldSchemaGenerator | null => {\n if (fieldType in fieldToSchemaMap) {\n return fieldToSchemaMap[fieldType as keyof typeof fieldToSchemaMap] as FieldSchemaGenerator\n }\n\n return null\n}\n\nconst fieldToSchemaMap = {\n array,\n blocks,\n checkbox,\n code,\n collapsible,\n date,\n email,\n group,\n json,\n number,\n point,\n radio,\n relationship,\n richText,\n row,\n select,\n tabs,\n text,\n textarea,\n upload,\n}\n\nconst getRelationshipValueType = (field: RelationshipField | UploadField, payload: Payload) => {\n if (typeof field.relationTo === 'string') {\n const customIDType = payload.collections[field.relationTo]?.customIDType\n\n if (!customIDType) {\n return mongoose.Schema.Types.ObjectId\n }\n\n if (customIDType === 'number') {\n if (payload.db.useBigIntForNumberIDs) {\n return mongoose.Schema.Types.BigInt\n } else {\n return mongoose.Schema.Types.Number\n }\n }\n\n return mongoose.Schema.Types.String\n }\n\n // has custom id relationTo\n if (\n field.relationTo.some((relationTo) => {\n return !!payload.collections[relationTo]?.customIDType\n })\n ) {\n return mongoose.Schema.Types.Mixed\n }\n\n return mongoose.Schema.Types.ObjectId\n}\n"],"names":["mongoose","fieldAffectsData","fieldIsPresentationalOnly","fieldIsVirtual","fieldShouldBeLocalized","tabHasName","formatDefaultValue","field","defaultValue","undefined","formatBaseSchema","buildSchemaOptions","parentIsLocalized","disableUnique","draftsEnabled","indexSortableFields","schema","default","index","unique","required","type","sparse","hidden","localizeSchema","entity","localization","Array","isArray","locales","localeCodes","reduce","localeSchema","locale","_id","localized","buildSchema","args","configFields","payload","allowIDField","options","fields","schemaFields","idField","find","name","db","useBigIntForNumberIDs","Schema","Types","BigInt","Number","String","filter","forEach","addFieldSchema","getSchemaGenerator","compoundIndexes","indexDefinition","pathHasLocalized","config","localizedPath","replace","code","path","array","baseSchema","id","minimize","add","blocks","fieldSchema","discriminatorKey","blockReferences","blockItem","blockSchema","block","blockField","localeCode","discriminator","slug","checkbox","Boolean","collapsible","subField","date","Date","email","group","formattedBaseSchema","json","Mixed","number","hasMany","point","enum","coordinates","indexOptions","radio","map","option","value","relationship","hasManyRelations","relationTo","schemaToReturn","valueType","getRelationshipValueType","refPath","ref","richText","row","select","push","tabs","tab","text","textarea","upload","fieldType","fieldToSchemaMap","customIDType","collections","ObjectId","some"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"buildSortParam.d.ts","sourceRoot":"","sources":["../../src/queries/buildSortParam.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAE7C,OAAO,EAEL,KAAK,cAAc,EAEnB,KAAK,eAAe,EACpB,KAAK,IAAI,EACV,MAAM,SAAS,CAAA;AAEhB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAKlD,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,eAAe,CAAA;IACxB,MAAM,EAAE,eAAe,CAAA;IACvB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,eAAe,CAAC,EAAE,aAAa,EAAE,CAAA;IACjC,UAAU,EAAE,OAAO,CAAA;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG;IACrB,SAAS,EAAE,aAAa,CAAA;IACxB,QAAQ,EAAE,MAAM,CAAA;CACjB,EAAE,CAAA;AAEH,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,MAAM,CAAA;AAoG1C,eAAO,MAAM,cAAc,yGAUxB,IAAI,KAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAgF9B,CAAA"}
1
+ {"version":3,"file":"buildSortParam.d.ts","sourceRoot":"","sources":["../../src/queries/buildSortParam.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAE7C,OAAO,EAEL,KAAK,cAAc,EAEnB,KAAK,eAAe,EACpB,KAAK,IAAI,EACV,MAAM,SAAS,CAAA;AAEhB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAKlD,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,eAAe,CAAA;IACxB,MAAM,EAAE,eAAe,CAAA;IACvB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,eAAe,CAAC,EAAE,aAAa,EAAE,CAAA;IACjC,UAAU,EAAE,OAAO,CAAA;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG;IACrB,SAAS,EAAE,aAAa,CAAA;IACxB,QAAQ,EAAE,MAAM,CAAA;CACjB,EAAE,CAAA;AAEH,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,MAAM,CAAA;AA8H1C,eAAO,MAAM,cAAc,yGAUxB,IAAI,KAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAgF9B,CAAA"}
@@ -42,27 +42,49 @@ const relationshipSort = ({ adapter, fields, locale, path, sort, sortAggregation
42
42
  if (foreignFieldPath.pathHasLocalized && locale) {
43
43
  sortFieldPath = foreignFieldPath.localizedPath.replace('<locale>', locale);
44
44
  }
45
- if (!sortAggregation.some((each)=>{
46
- return '$lookup' in each && each.$lookup.as === `__${path}`;
47
- })) {
45
+ const as = `__${relationshipPath.replace(/\./g, '__')}`;
46
+ // If we have not already sorted on this relationship yet, we need to add a lookup stage
47
+ if (!sortAggregation.some((each)=>'$lookup' in each && each.$lookup.as === as)) {
48
+ let localField = versions ? `version.${relationshipPath}` : relationshipPath;
49
+ if (adapter.usePipelineInSortLookup) {
50
+ const flattenedField = `__${localField.replace(/\./g, '__')}_lookup`;
51
+ sortAggregation.push({
52
+ $addFields: {
53
+ [flattenedField]: `$${localField}`
54
+ }
55
+ });
56
+ localField = flattenedField;
57
+ }
48
58
  sortAggregation.push({
49
59
  $lookup: {
50
- as: `__${path}`,
60
+ as,
51
61
  foreignField: '_id',
52
62
  from: foreignCollection.Model.collection.name,
53
- localField: versions ? `version.${relationshipPath}` : relationshipPath,
54
- pipeline: [
55
- {
56
- $project: {
57
- [sortFieldPath]: true
63
+ localField,
64
+ ...!adapter.usePipelineInSortLookup && {
65
+ pipeline: [
66
+ {
67
+ $project: {
68
+ [sortFieldPath]: true
69
+ }
58
70
  }
59
- }
60
- ]
71
+ ]
72
+ }
61
73
  }
62
74
  });
63
- sort[`__${path}.${sortFieldPath}`] = sortDirection;
64
- return true;
75
+ if (adapter.usePipelineInSortLookup) {
76
+ sortAggregation.push({
77
+ $unset: localField
78
+ });
79
+ }
65
80
  }
81
+ if (!adapter.usePipelineInSortLookup) {
82
+ const lookup = sortAggregation.find((each)=>'$lookup' in each && each.$lookup.as === as);
83
+ const pipeline = lookup.$lookup.pipeline[0];
84
+ pipeline.$project[sortFieldPath] = true;
85
+ }
86
+ sort[`${as}.${sortFieldPath}`] = sortDirection;
87
+ return true;
66
88
  }
67
89
  }
68
90
  return false;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/queries/buildSortParam.ts"],"sourcesContent":["import type { PipelineStage } from 'mongoose'\n\nimport {\n APIError,\n type FlattenedField,\n getFieldByPath,\n type SanitizedConfig,\n type Sort,\n} from 'payload'\n\nimport type { MongooseAdapter } from '../index.js'\n\nimport { getCollection } from '../utilities/getEntity.js'\nimport { getLocalizedSortProperty } from './getLocalizedSortProperty.js'\n\ntype Args = {\n adapter: MongooseAdapter\n config: SanitizedConfig\n fields: FlattenedField[]\n locale?: string\n parentIsLocalized?: boolean\n sort?: Sort\n sortAggregation?: PipelineStage[]\n timestamps: boolean\n versions?: boolean\n}\n\nexport type SortArgs = {\n direction: SortDirection\n property: string\n}[]\n\nexport type SortDirection = 'asc' | 'desc'\n\nconst relationshipSort = ({\n adapter,\n fields,\n locale,\n path,\n sort,\n sortAggregation,\n sortDirection,\n versions,\n}: {\n adapter: MongooseAdapter\n fields: FlattenedField[]\n locale?: string\n path: string\n sort: Record<string, string>\n sortAggregation: PipelineStage[]\n sortDirection: SortDirection\n versions?: boolean\n}) => {\n let currentFields = fields\n const segments = path.split('.')\n if (segments.length < 2) {\n return false\n }\n\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i]\n const field = currentFields.find((each) => each.name === segment)\n\n if (!field) {\n return false\n }\n\n if ('fields' in field) {\n currentFields = field.flattenedFields\n if (field.name === 'version' && versions && i === 0) {\n segments.shift()\n i--\n }\n } else if (\n (field.type === 'relationship' || field.type === 'upload') &&\n i !== segments.length - 1\n ) {\n const relationshipPath = segments.slice(0, i + 1).join('.')\n let sortFieldPath = segments.slice(i + 1, segments.length).join('.')\n if (sortFieldPath.endsWith('.id')) {\n sortFieldPath = sortFieldPath.split('.').slice(0, -1).join('.')\n }\n if (Array.isArray(field.relationTo)) {\n throw new APIError('Not supported')\n }\n\n const foreignCollection = getCollection({ adapter, collectionSlug: field.relationTo })\n\n const foreignFieldPath = getFieldByPath({\n fields: foreignCollection.collectionConfig.flattenedFields,\n path: sortFieldPath,\n })\n\n if (!foreignFieldPath) {\n return false\n }\n\n if (foreignFieldPath.pathHasLocalized && locale) {\n sortFieldPath = foreignFieldPath.localizedPath.replace('<locale>', locale)\n }\n\n if (\n !sortAggregation.some((each) => {\n return '$lookup' in each && each.$lookup.as === `__${path}`\n })\n ) {\n sortAggregation.push({\n $lookup: {\n as: `__${path}`,\n foreignField: '_id',\n from: foreignCollection.Model.collection.name,\n localField: versions ? `version.${relationshipPath}` : relationshipPath,\n pipeline: [\n {\n $project: {\n [sortFieldPath]: true,\n },\n },\n ],\n },\n })\n\n sort[`__${path}.${sortFieldPath}`] = sortDirection\n\n return true\n }\n }\n }\n\n return false\n}\n\nexport const buildSortParam = ({\n adapter,\n config,\n fields,\n locale,\n parentIsLocalized = false,\n sort,\n sortAggregation,\n timestamps,\n versions,\n}: Args): Record<string, string> => {\n if (!sort) {\n if (timestamps) {\n sort = '-createdAt'\n } else {\n sort = '-id'\n }\n }\n\n if (typeof sort === 'string') {\n sort = [sort]\n }\n\n // We use this flag to determine if the sort is unique or not to decide whether to add a fallback sort.\n const isUniqueSort = sort.some((item) => {\n const field = getFieldByPath({ fields, path: item })\n return field?.field?.unique\n })\n\n // In the case of Mongo, when sorting by a field that is not unique, the results are not guaranteed to be in the same order each time.\n // So we add a fallback sort to ensure that the results are always in the same order.\n let fallbackSort = '-id'\n\n if (timestamps) {\n fallbackSort = '-createdAt'\n }\n\n const includeFallbackSort =\n !adapter.disableFallbackSort &&\n !isUniqueSort &&\n !(sort.includes(fallbackSort) || sort.includes(fallbackSort.replace('-', '')))\n\n if (includeFallbackSort) {\n sort.push(fallbackSort)\n }\n\n const sorting = sort.reduce<Record<string, string>>((acc, item) => {\n let sortProperty: string\n let sortDirection: SortDirection\n if (item.indexOf('-') === 0) {\n sortProperty = item.substring(1)\n sortDirection = 'desc'\n } else {\n sortProperty = item\n sortDirection = 'asc'\n }\n if (sortProperty === 'id') {\n acc['_id'] = sortDirection\n return acc\n }\n\n if (\n sortAggregation &&\n relationshipSort({\n adapter,\n fields,\n locale,\n path: sortProperty,\n sort: acc,\n sortAggregation,\n sortDirection,\n versions,\n })\n ) {\n return acc\n }\n\n const localizedProperty = getLocalizedSortProperty({\n config,\n fields,\n locale,\n parentIsLocalized,\n segments: sortProperty.split('.'),\n })\n acc[localizedProperty] = sortDirection\n\n return acc\n }, {})\n\n return sorting\n}\n"],"names":["APIError","getFieldByPath","getCollection","getLocalizedSortProperty","relationshipSort","adapter","fields","locale","path","sort","sortAggregation","sortDirection","versions","currentFields","segments","split","length","i","segment","field","find","each","name","flattenedFields","shift","type","relationshipPath","slice","join","sortFieldPath","endsWith","Array","isArray","relationTo","foreignCollection","collectionSlug","foreignFieldPath","collectionConfig","pathHasLocalized","localizedPath","replace","some","$lookup","as","push","foreignField","from","Model","collection","localField","pipeline","$project","buildSortParam","config","parentIsLocalized","timestamps","isUniqueSort","item","unique","fallbackSort","includeFallbackSort","disableFallbackSort","includes","sorting","reduce","acc","sortProperty","indexOf","substring","localizedProperty"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/queries/buildSortParam.ts"],"sourcesContent":["import type { PipelineStage } from 'mongoose'\n\nimport {\n APIError,\n type FlattenedField,\n getFieldByPath,\n type SanitizedConfig,\n type Sort,\n} from 'payload'\n\nimport type { MongooseAdapter } from '../index.js'\n\nimport { getCollection } from '../utilities/getEntity.js'\nimport { getLocalizedSortProperty } from './getLocalizedSortProperty.js'\n\ntype Args = {\n adapter: MongooseAdapter\n config: SanitizedConfig\n fields: FlattenedField[]\n locale?: string\n parentIsLocalized?: boolean\n sort?: Sort\n sortAggregation?: PipelineStage[]\n timestamps: boolean\n versions?: boolean\n}\n\nexport type SortArgs = {\n direction: SortDirection\n property: string\n}[]\n\nexport type SortDirection = 'asc' | 'desc'\n\nconst relationshipSort = ({\n adapter,\n fields,\n locale,\n path,\n sort,\n sortAggregation,\n sortDirection,\n versions,\n}: {\n adapter: MongooseAdapter\n fields: FlattenedField[]\n locale?: string\n path: string\n sort: Record<string, string>\n sortAggregation: PipelineStage[]\n sortDirection: SortDirection\n versions?: boolean\n}) => {\n let currentFields = fields\n const segments = path.split('.')\n if (segments.length < 2) {\n return false\n }\n\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i]\n const field = currentFields.find((each) => each.name === segment)\n\n if (!field) {\n return false\n }\n\n if ('fields' in field) {\n currentFields = field.flattenedFields\n if (field.name === 'version' && versions && i === 0) {\n segments.shift()\n i--\n }\n } else if (\n (field.type === 'relationship' || field.type === 'upload') &&\n i !== segments.length - 1\n ) {\n const relationshipPath = segments.slice(0, i + 1).join('.')\n let sortFieldPath = segments.slice(i + 1, segments.length).join('.')\n if (sortFieldPath.endsWith('.id')) {\n sortFieldPath = sortFieldPath.split('.').slice(0, -1).join('.')\n }\n if (Array.isArray(field.relationTo)) {\n throw new APIError('Not supported')\n }\n\n const foreignCollection = getCollection({ adapter, collectionSlug: field.relationTo })\n\n const foreignFieldPath = getFieldByPath({\n fields: foreignCollection.collectionConfig.flattenedFields,\n path: sortFieldPath,\n })\n\n if (!foreignFieldPath) {\n return false\n }\n\n if (foreignFieldPath.pathHasLocalized && locale) {\n sortFieldPath = foreignFieldPath.localizedPath.replace('<locale>', locale)\n }\n\n const as = `__${relationshipPath.replace(/\\./g, '__')}`\n\n // If we have not already sorted on this relationship yet, we need to add a lookup stage\n if (!sortAggregation.some((each) => '$lookup' in each && each.$lookup.as === as)) {\n let localField = versions ? `version.${relationshipPath}` : relationshipPath\n\n if (adapter.usePipelineInSortLookup) {\n const flattenedField = `__${localField.replace(/\\./g, '__')}_lookup`\n sortAggregation.push({\n $addFields: {\n [flattenedField]: `$${localField}`,\n },\n })\n localField = flattenedField\n }\n\n sortAggregation.push({\n $lookup: {\n as,\n foreignField: '_id',\n from: foreignCollection.Model.collection.name,\n localField,\n ...(!adapter.usePipelineInSortLookup && {\n pipeline: [\n {\n $project: {\n [sortFieldPath]: true,\n },\n },\n ],\n }),\n },\n })\n\n if (adapter.usePipelineInSortLookup) {\n sortAggregation.push({\n $unset: localField,\n })\n }\n }\n\n if (!adapter.usePipelineInSortLookup) {\n const lookup = sortAggregation.find(\n (each) => '$lookup' in each && each.$lookup.as === as,\n ) as PipelineStage.Lookup\n const pipeline = lookup.$lookup.pipeline![0] as PipelineStage.Project\n pipeline.$project[sortFieldPath] = true\n }\n\n sort[`${as}.${sortFieldPath}`] = sortDirection\n return true\n }\n }\n\n return false\n}\n\nexport const buildSortParam = ({\n adapter,\n config,\n fields,\n locale,\n parentIsLocalized = false,\n sort,\n sortAggregation,\n timestamps,\n versions,\n}: Args): Record<string, string> => {\n if (!sort) {\n if (timestamps) {\n sort = '-createdAt'\n } else {\n sort = '-id'\n }\n }\n\n if (typeof sort === 'string') {\n sort = [sort]\n }\n\n // We use this flag to determine if the sort is unique or not to decide whether to add a fallback sort.\n const isUniqueSort = sort.some((item) => {\n const field = getFieldByPath({ fields, path: item })\n return field?.field?.unique\n })\n\n // In the case of Mongo, when sorting by a field that is not unique, the results are not guaranteed to be in the same order each time.\n // So we add a fallback sort to ensure that the results are always in the same order.\n let fallbackSort = '-id'\n\n if (timestamps) {\n fallbackSort = '-createdAt'\n }\n\n const includeFallbackSort =\n !adapter.disableFallbackSort &&\n !isUniqueSort &&\n !(sort.includes(fallbackSort) || sort.includes(fallbackSort.replace('-', '')))\n\n if (includeFallbackSort) {\n sort.push(fallbackSort)\n }\n\n const sorting = sort.reduce<Record<string, string>>((acc, item) => {\n let sortProperty: string\n let sortDirection: SortDirection\n if (item.indexOf('-') === 0) {\n sortProperty = item.substring(1)\n sortDirection = 'desc'\n } else {\n sortProperty = item\n sortDirection = 'asc'\n }\n if (sortProperty === 'id') {\n acc['_id'] = sortDirection\n return acc\n }\n\n if (\n sortAggregation &&\n relationshipSort({\n adapter,\n fields,\n locale,\n path: sortProperty,\n sort: acc,\n sortAggregation,\n sortDirection,\n versions,\n })\n ) {\n return acc\n }\n\n const localizedProperty = getLocalizedSortProperty({\n config,\n fields,\n locale,\n parentIsLocalized,\n segments: sortProperty.split('.'),\n })\n acc[localizedProperty] = sortDirection\n\n return acc\n }, {})\n\n return sorting\n}\n"],"names":["APIError","getFieldByPath","getCollection","getLocalizedSortProperty","relationshipSort","adapter","fields","locale","path","sort","sortAggregation","sortDirection","versions","currentFields","segments","split","length","i","segment","field","find","each","name","flattenedFields","shift","type","relationshipPath","slice","join","sortFieldPath","endsWith","Array","isArray","relationTo","foreignCollection","collectionSlug","foreignFieldPath","collectionConfig","pathHasLocalized","localizedPath","replace","as","some","$lookup","localField","usePipelineInSortLookup","flattenedField","push","$addFields","foreignField","from","Model","collection","pipeline","$project","$unset","lookup","buildSortParam","config","parentIsLocalized","timestamps","isUniqueSort","item","unique","fallbackSort","includeFallbackSort","disableFallbackSort","includes","sorting","reduce","acc","sortProperty","indexOf","substring","localizedProperty"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"queryDrafts.d.ts","sourceRoot":"","sources":["../src/queryDrafts.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAe1C,eAAO,MAAM,WAAW,EAAE,WA8JzB,CAAA"}
1
+ {"version":3,"file":"queryDrafts.d.ts","sourceRoot":"","sources":["../src/queryDrafts.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAgB1C,eAAO,MAAM,WAAW,EAAE,WAyKzB,CAAA"}
@@ -6,6 +6,7 @@ import { buildJoinAggregation } from './utilities/buildJoinAggregation.js';
6
6
  import { buildProjectionFromSelect } from './utilities/buildProjectionFromSelect.js';
7
7
  import { getCollection } from './utilities/getEntity.js';
8
8
  import { getSession } from './utilities/getSession.js';
9
+ import { resolveJoins } from './utilities/resolveJoins.js';
9
10
  import { transform } from './utilities/transform.js';
10
11
  export const queryDrafts = async function queryDrafts({ collection: collectionSlug, joins, limit, locale, page, pagination, req, select, sort: sortArg, where = {} }) {
11
12
  const { collectionConfig, Model } = getCollection({
@@ -120,6 +121,16 @@ export const queryDrafts = async function queryDrafts({ collection: collectionSl
120
121
  } else {
121
122
  result = await Model.paginate(versionQuery, paginationOptions);
122
123
  }
124
+ if (!this.useJoinAggregations) {
125
+ await resolveJoins({
126
+ adapter: this,
127
+ collectionSlug,
128
+ docs: result.docs,
129
+ joins,
130
+ locale,
131
+ versions: true
132
+ });
133
+ }
123
134
  transform({
124
135
  adapter: this,
125
136
  data: result.docs,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/queryDrafts.ts"],"sourcesContent":["import type { PaginateOptions, PipelineStage, QueryOptions } from 'mongoose'\nimport type { QueryDrafts } from 'payload'\n\nimport { buildVersionCollectionFields, combineQueries, flattenWhereToOperators } from 'payload'\n\nimport type { MongooseAdapter } from './index.js'\n\nimport { buildQuery } from './queries/buildQuery.js'\nimport { buildSortParam } from './queries/buildSortParam.js'\nimport { aggregatePaginate } from './utilities/aggregatePaginate.js'\nimport { buildJoinAggregation } from './utilities/buildJoinAggregation.js'\nimport { buildProjectionFromSelect } from './utilities/buildProjectionFromSelect.js'\nimport { getCollection } from './utilities/getEntity.js'\nimport { getSession } from './utilities/getSession.js'\nimport { transform } from './utilities/transform.js'\n\nexport const queryDrafts: QueryDrafts = async function queryDrafts(\n this: MongooseAdapter,\n {\n collection: collectionSlug,\n joins,\n limit,\n locale,\n page,\n pagination,\n req,\n select,\n sort: sortArg,\n where = {},\n },\n) {\n const { collectionConfig, Model } = getCollection({\n adapter: this,\n collectionSlug,\n versions: true,\n })\n\n const options: QueryOptions = {\n session: await getSession(this, req),\n }\n\n let hasNearConstraint\n let sort\n\n if (where) {\n const constraints = flattenWhereToOperators(where)\n hasNearConstraint = constraints.some((prop) => Object.keys(prop).some((key) => key === 'near'))\n }\n\n const fields = buildVersionCollectionFields(this.payload.config, collectionConfig, true)\n\n const sortAggregation: PipelineStage[] = []\n if (!hasNearConstraint) {\n sort = buildSortParam({\n adapter: this,\n config: this.payload.config,\n fields,\n locale,\n sort: sortArg || collectionConfig.defaultSort,\n sortAggregation,\n timestamps: true,\n versions: true,\n })\n }\n\n const combinedWhere = combineQueries({ latest: { equals: true } }, where)\n\n const versionQuery = await buildQuery({\n adapter: this,\n fields,\n locale,\n where: combinedWhere,\n })\n\n const projection = buildProjectionFromSelect({\n adapter: this,\n fields,\n select,\n })\n // useEstimatedCount is faster, but not accurate, as it ignores any filters. It is thus set to true if there are no filters.\n const useEstimatedCount =\n hasNearConstraint || !versionQuery || Object.keys(versionQuery).length === 0\n const paginationOptions: PaginateOptions = {\n lean: true,\n leanWithId: true,\n options,\n page,\n pagination,\n projection,\n sort,\n useEstimatedCount,\n }\n\n if (this.collation) {\n const defaultLocale = 'en'\n paginationOptions.collation = {\n locale: locale && locale !== 'all' && locale !== '*' ? locale : defaultLocale,\n ...this.collation,\n }\n }\n\n if (\n !useEstimatedCount &&\n Object.keys(versionQuery).length === 0 &&\n this.disableIndexHints !== true\n ) {\n // Improve the performance of the countDocuments query which is used if useEstimatedCount is set to false by adding\n // a hint. By default, if no hint is provided, MongoDB does not use an indexed field to count the returned documents,\n // which makes queries very slow. This only happens when no query (filter) is provided. If one is provided, it uses\n // the correct indexed field\n paginationOptions.useCustomCountFn = () => {\n return Promise.resolve(\n Model.countDocuments(versionQuery, {\n hint: { _id: 1 },\n }),\n )\n }\n }\n\n if (limit && limit > 0) {\n paginationOptions.limit = limit\n // limit must also be set here, it's ignored when pagination is false\n\n paginationOptions.options!.limit = limit\n }\n\n let result\n\n const aggregate = await buildJoinAggregation({\n adapter: this,\n collection: collectionSlug,\n collectionConfig,\n joins,\n locale,\n projection,\n query: versionQuery,\n versions: true,\n })\n\n // build join aggregation\n if (aggregate || sortAggregation.length > 0) {\n result = await aggregatePaginate({\n adapter: this,\n collation: paginationOptions.collation,\n joinAggregation: aggregate,\n limit: paginationOptions.limit,\n Model,\n page: paginationOptions.page,\n pagination: paginationOptions.pagination,\n projection: paginationOptions.projection,\n query: versionQuery,\n session: paginationOptions.options?.session ?? undefined,\n sort: paginationOptions.sort as object,\n sortAggregation,\n useEstimatedCount: paginationOptions.useEstimatedCount,\n })\n } else {\n result = await Model.paginate(versionQuery, paginationOptions)\n }\n\n transform({\n adapter: this,\n data: result.docs,\n fields: buildVersionCollectionFields(this.payload.config, collectionConfig),\n operation: 'read',\n })\n\n for (let i = 0; i < result.docs.length; i++) {\n const id = result.docs[i].parent\n result.docs[i] = result.docs[i].version ?? {}\n result.docs[i].id = id\n }\n\n return result\n}\n"],"names":["buildVersionCollectionFields","combineQueries","flattenWhereToOperators","buildQuery","buildSortParam","aggregatePaginate","buildJoinAggregation","buildProjectionFromSelect","getCollection","getSession","transform","queryDrafts","collection","collectionSlug","joins","limit","locale","page","pagination","req","select","sort","sortArg","where","collectionConfig","Model","adapter","versions","options","session","hasNearConstraint","constraints","some","prop","Object","keys","key","fields","payload","config","sortAggregation","defaultSort","timestamps","combinedWhere","latest","equals","versionQuery","projection","useEstimatedCount","length","paginationOptions","lean","leanWithId","collation","defaultLocale","disableIndexHints","useCustomCountFn","Promise","resolve","countDocuments","hint","_id","result","aggregate","query","joinAggregation","undefined","paginate","data","docs","operation","i","id","parent","version"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/queryDrafts.ts"],"sourcesContent":["import type { PaginateOptions, PipelineStage, QueryOptions } from 'mongoose'\nimport type { QueryDrafts } from 'payload'\n\nimport { buildVersionCollectionFields, combineQueries, flattenWhereToOperators } from 'payload'\n\nimport type { MongooseAdapter } from './index.js'\n\nimport { buildQuery } from './queries/buildQuery.js'\nimport { buildSortParam } from './queries/buildSortParam.js'\nimport { aggregatePaginate } from './utilities/aggregatePaginate.js'\nimport { buildJoinAggregation } from './utilities/buildJoinAggregation.js'\nimport { buildProjectionFromSelect } from './utilities/buildProjectionFromSelect.js'\nimport { getCollection } from './utilities/getEntity.js'\nimport { getSession } from './utilities/getSession.js'\nimport { resolveJoins } from './utilities/resolveJoins.js'\nimport { transform } from './utilities/transform.js'\n\nexport const queryDrafts: QueryDrafts = async function queryDrafts(\n this: MongooseAdapter,\n {\n collection: collectionSlug,\n joins,\n limit,\n locale,\n page,\n pagination,\n req,\n select,\n sort: sortArg,\n where = {},\n },\n) {\n const { collectionConfig, Model } = getCollection({\n adapter: this,\n collectionSlug,\n versions: true,\n })\n\n const options: QueryOptions = {\n session: await getSession(this, req),\n }\n\n let hasNearConstraint\n let sort\n\n if (where) {\n const constraints = flattenWhereToOperators(where)\n hasNearConstraint = constraints.some((prop) => Object.keys(prop).some((key) => key === 'near'))\n }\n\n const fields = buildVersionCollectionFields(this.payload.config, collectionConfig, true)\n\n const sortAggregation: PipelineStage[] = []\n if (!hasNearConstraint) {\n sort = buildSortParam({\n adapter: this,\n config: this.payload.config,\n fields,\n locale,\n sort: sortArg || collectionConfig.defaultSort,\n sortAggregation,\n timestamps: true,\n versions: true,\n })\n }\n\n const combinedWhere = combineQueries({ latest: { equals: true } }, where)\n\n const versionQuery = await buildQuery({\n adapter: this,\n fields,\n locale,\n where: combinedWhere,\n })\n\n const projection = buildProjectionFromSelect({\n adapter: this,\n fields,\n select,\n })\n // useEstimatedCount is faster, but not accurate, as it ignores any filters. It is thus set to true if there are no filters.\n const useEstimatedCount =\n hasNearConstraint || !versionQuery || Object.keys(versionQuery).length === 0\n const paginationOptions: PaginateOptions = {\n lean: true,\n leanWithId: true,\n options,\n page,\n pagination,\n projection,\n sort,\n useEstimatedCount,\n }\n\n if (this.collation) {\n const defaultLocale = 'en'\n paginationOptions.collation = {\n locale: locale && locale !== 'all' && locale !== '*' ? locale : defaultLocale,\n ...this.collation,\n }\n }\n\n if (\n !useEstimatedCount &&\n Object.keys(versionQuery).length === 0 &&\n this.disableIndexHints !== true\n ) {\n // Improve the performance of the countDocuments query which is used if useEstimatedCount is set to false by adding\n // a hint. By default, if no hint is provided, MongoDB does not use an indexed field to count the returned documents,\n // which makes queries very slow. This only happens when no query (filter) is provided. If one is provided, it uses\n // the correct indexed field\n paginationOptions.useCustomCountFn = () => {\n return Promise.resolve(\n Model.countDocuments(versionQuery, {\n hint: { _id: 1 },\n }),\n )\n }\n }\n\n if (limit && limit > 0) {\n paginationOptions.limit = limit\n // limit must also be set here, it's ignored when pagination is false\n\n paginationOptions.options!.limit = limit\n }\n\n let result\n\n const aggregate = await buildJoinAggregation({\n adapter: this,\n collection: collectionSlug,\n collectionConfig,\n joins,\n locale,\n projection,\n query: versionQuery,\n versions: true,\n })\n\n // build join aggregation\n if (aggregate || sortAggregation.length > 0) {\n result = await aggregatePaginate({\n adapter: this,\n collation: paginationOptions.collation,\n joinAggregation: aggregate,\n limit: paginationOptions.limit,\n Model,\n page: paginationOptions.page,\n pagination: paginationOptions.pagination,\n projection: paginationOptions.projection,\n query: versionQuery,\n session: paginationOptions.options?.session ?? undefined,\n sort: paginationOptions.sort as object,\n sortAggregation,\n useEstimatedCount: paginationOptions.useEstimatedCount,\n })\n } else {\n result = await Model.paginate(versionQuery, paginationOptions)\n }\n\n if (!this.useJoinAggregations) {\n await resolveJoins({\n adapter: this,\n collectionSlug,\n docs: result.docs as Record<string, unknown>[],\n joins,\n locale,\n versions: true,\n })\n }\n\n transform({\n adapter: this,\n data: result.docs,\n fields: buildVersionCollectionFields(this.payload.config, collectionConfig),\n operation: 'read',\n })\n\n for (let i = 0; i < result.docs.length; i++) {\n const id = result.docs[i].parent\n result.docs[i] = result.docs[i].version ?? {}\n result.docs[i].id = id\n }\n\n return result\n}\n"],"names":["buildVersionCollectionFields","combineQueries","flattenWhereToOperators","buildQuery","buildSortParam","aggregatePaginate","buildJoinAggregation","buildProjectionFromSelect","getCollection","getSession","resolveJoins","transform","queryDrafts","collection","collectionSlug","joins","limit","locale","page","pagination","req","select","sort","sortArg","where","collectionConfig","Model","adapter","versions","options","session","hasNearConstraint","constraints","some","prop","Object","keys","key","fields","payload","config","sortAggregation","defaultSort","timestamps","combinedWhere","latest","equals","versionQuery","projection","useEstimatedCount","length","paginationOptions","lean","leanWithId","collation","defaultLocale","disableIndexHints","useCustomCountFn","Promise","resolve","countDocuments","hint","_id","result","aggregate","query","joinAggregation","undefined","paginate","useJoinAggregations","docs","data","operation","i","id","parent","version"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"updateOne.d.ts","sourceRoot":"","sources":["../src/updateOne.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAWxC,eAAO,MAAM,SAAS,EAAE,SA6DvB,CAAA"}
1
+ {"version":3,"file":"updateOne.d.ts","sourceRoot":"","sources":["../src/updateOne.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAWxC,eAAO,MAAM,SAAS,EAAE,SAkEvB,CAAA"}
package/dist/updateOne.js CHANGED
@@ -34,15 +34,24 @@ export const updateOne = async function updateOne({ id, collection: collectionSl
34
34
  where
35
35
  });
36
36
  let result;
37
+ const $inc = {};
38
+ let updateData = data;
37
39
  transform({
40
+ $inc,
38
41
  adapter: this,
39
42
  data,
40
43
  fields,
41
44
  operation: 'write'
42
45
  });
46
+ if (Object.keys($inc).length) {
47
+ updateData = {
48
+ $inc,
49
+ $set: updateData
50
+ };
51
+ }
43
52
  try {
44
53
  if (returning === false) {
45
- await Model.updateOne(query, data, options);
54
+ await Model.updateOne(query, updateData, options);
46
55
  transform({
47
56
  adapter: this,
48
57
  data,
@@ -51,7 +60,7 @@ export const updateOne = async function updateOne({ id, collection: collectionSl
51
60
  });
52
61
  return null;
53
62
  } else {
54
- result = await Model.findOneAndUpdate(query, data, options);
63
+ result = await Model.findOneAndUpdate(query, updateData, options);
55
64
  }
56
65
  } catch (error) {
57
66
  handleError({
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/updateOne.ts"],"sourcesContent":["import type { MongooseUpdateQueryOptions } from 'mongoose'\nimport type { UpdateOne } from 'payload'\n\nimport type { MongooseAdapter } from './index.js'\n\nimport { buildQuery } from './queries/buildQuery.js'\nimport { buildProjectionFromSelect } from './utilities/buildProjectionFromSelect.js'\nimport { getCollection } from './utilities/getEntity.js'\nimport { getSession } from './utilities/getSession.js'\nimport { handleError } from './utilities/handleError.js'\nimport { transform } from './utilities/transform.js'\n\nexport const updateOne: UpdateOne = async function updateOne(\n this: MongooseAdapter,\n {\n id,\n collection: collectionSlug,\n data,\n locale,\n options: optionsArgs = {},\n req,\n returning,\n select,\n where: whereArg = {},\n },\n) {\n const { collectionConfig, Model } = getCollection({ adapter: this, collectionSlug })\n const where = id ? { id: { equals: id } } : whereArg\n const fields = collectionConfig.fields\n\n const options: MongooseUpdateQueryOptions = {\n ...optionsArgs,\n lean: true,\n new: true,\n projection: buildProjectionFromSelect({\n adapter: this,\n fields: collectionConfig.flattenedFields,\n select,\n }),\n session: await getSession(this, req),\n }\n\n const query = await buildQuery({\n adapter: this,\n collectionSlug,\n fields: collectionConfig.flattenedFields,\n locale,\n where,\n })\n\n let result\n\n transform({ adapter: this, data, fields, operation: 'write' })\n\n try {\n if (returning === false) {\n await Model.updateOne(query, data, options)\n transform({ adapter: this, data, fields, operation: 'read' })\n return null\n } else {\n result = await Model.findOneAndUpdate(query, data, options)\n }\n } catch (error) {\n handleError({ collection: collectionSlug, error, req })\n }\n\n if (!result) {\n return null\n }\n\n transform({ adapter: this, data: result, fields, operation: 'read' })\n\n return result\n}\n"],"names":["buildQuery","buildProjectionFromSelect","getCollection","getSession","handleError","transform","updateOne","id","collection","collectionSlug","data","locale","options","optionsArgs","req","returning","select","where","whereArg","collectionConfig","Model","adapter","equals","fields","lean","new","projection","flattenedFields","session","query","result","operation","findOneAndUpdate","error"],"mappings":"AAKA,SAASA,UAAU,QAAQ,0BAAyB;AACpD,SAASC,yBAAyB,QAAQ,2CAA0C;AACpF,SAASC,aAAa,QAAQ,2BAA0B;AACxD,SAASC,UAAU,QAAQ,4BAA2B;AACtD,SAASC,WAAW,QAAQ,6BAA4B;AACxD,SAASC,SAAS,QAAQ,2BAA0B;AAEpD,OAAO,MAAMC,YAAuB,eAAeA,UAEjD,EACEC,EAAE,EACFC,YAAYC,cAAc,EAC1BC,IAAI,EACJC,MAAM,EACNC,SAASC,cAAc,CAAC,CAAC,EACzBC,GAAG,EACHC,SAAS,EACTC,MAAM,EACNC,OAAOC,WAAW,CAAC,CAAC,EACrB;IAED,MAAM,EAAEC,gBAAgB,EAAEC,KAAK,EAAE,GAAGlB,cAAc;QAAEmB,SAAS,IAAI;QAAEZ;IAAe;IAClF,MAAMQ,QAAQV,KAAK;QAAEA,IAAI;YAAEe,QAAQf;QAAG;IAAE,IAAIW;IAC5C,MAAMK,SAASJ,iBAAiBI,MAAM;IAEtC,MAAMX,UAAsC;QAC1C,GAAGC,WAAW;QACdW,MAAM;QACNC,KAAK;QACLC,YAAYzB,0BAA0B;YACpCoB,SAAS,IAAI;YACbE,QAAQJ,iBAAiBQ,eAAe;YACxCX;QACF;QACAY,SAAS,MAAMzB,WAAW,IAAI,EAAEW;IAClC;IAEA,MAAMe,QAAQ,MAAM7B,WAAW;QAC7BqB,SAAS,IAAI;QACbZ;QACAc,QAAQJ,iBAAiBQ,eAAe;QACxChB;QACAM;IACF;IAEA,IAAIa;IAEJzB,UAAU;QAAEgB,SAAS,IAAI;QAAEX;QAAMa;QAAQQ,WAAW;IAAQ;IAE5D,IAAI;QACF,IAAIhB,cAAc,OAAO;YACvB,MAAMK,MAAMd,SAAS,CAACuB,OAAOnB,MAAME;YACnCP,UAAU;gBAAEgB,SAAS,IAAI;gBAAEX;gBAAMa;gBAAQQ,WAAW;YAAO;YAC3D,OAAO;QACT,OAAO;YACLD,SAAS,MAAMV,MAAMY,gBAAgB,CAACH,OAAOnB,MAAME;QACrD;IACF,EAAE,OAAOqB,OAAO;QACd7B,YAAY;YAAEI,YAAYC;YAAgBwB;YAAOnB;QAAI;IACvD;IAEA,IAAI,CAACgB,QAAQ;QACX,OAAO;IACT;IAEAzB,UAAU;QAAEgB,SAAS,IAAI;QAAEX,MAAMoB;QAAQP;QAAQQ,WAAW;IAAO;IAEnE,OAAOD;AACT,EAAC"}
1
+ {"version":3,"sources":["../src/updateOne.ts"],"sourcesContent":["import type { MongooseUpdateQueryOptions, UpdateQuery } from 'mongoose'\nimport type { UpdateOne } from 'payload'\n\nimport type { MongooseAdapter } from './index.js'\n\nimport { buildQuery } from './queries/buildQuery.js'\nimport { buildProjectionFromSelect } from './utilities/buildProjectionFromSelect.js'\nimport { getCollection } from './utilities/getEntity.js'\nimport { getSession } from './utilities/getSession.js'\nimport { handleError } from './utilities/handleError.js'\nimport { transform } from './utilities/transform.js'\n\nexport const updateOne: UpdateOne = async function updateOne(\n this: MongooseAdapter,\n {\n id,\n collection: collectionSlug,\n data,\n locale,\n options: optionsArgs = {},\n req,\n returning,\n select,\n where: whereArg = {},\n },\n) {\n const { collectionConfig, Model } = getCollection({ adapter: this, collectionSlug })\n const where = id ? { id: { equals: id } } : whereArg\n const fields = collectionConfig.fields\n\n const options: MongooseUpdateQueryOptions = {\n ...optionsArgs,\n lean: true,\n new: true,\n projection: buildProjectionFromSelect({\n adapter: this,\n fields: collectionConfig.flattenedFields,\n select,\n }),\n session: await getSession(this, req),\n }\n\n const query = await buildQuery({\n adapter: this,\n collectionSlug,\n fields: collectionConfig.flattenedFields,\n locale,\n where,\n })\n\n let result\n\n const $inc: Record<string, number> = {}\n let updateData: UpdateQuery<any> = data\n transform({ $inc, adapter: this, data, fields, operation: 'write' })\n if (Object.keys($inc).length) {\n updateData = { $inc, $set: updateData }\n }\n\n try {\n if (returning === false) {\n await Model.updateOne(query, updateData, options)\n transform({ adapter: this, data, fields, operation: 'read' })\n return null\n } else {\n result = await Model.findOneAndUpdate(query, updateData, options)\n }\n } catch (error) {\n handleError({ collection: collectionSlug, error, req })\n }\n\n if (!result) {\n return null\n }\n\n transform({ adapter: this, data: result, fields, operation: 'read' })\n\n return result\n}\n"],"names":["buildQuery","buildProjectionFromSelect","getCollection","getSession","handleError","transform","updateOne","id","collection","collectionSlug","data","locale","options","optionsArgs","req","returning","select","where","whereArg","collectionConfig","Model","adapter","equals","fields","lean","new","projection","flattenedFields","session","query","result","$inc","updateData","operation","Object","keys","length","$set","findOneAndUpdate","error"],"mappings":"AAKA,SAASA,UAAU,QAAQ,0BAAyB;AACpD,SAASC,yBAAyB,QAAQ,2CAA0C;AACpF,SAASC,aAAa,QAAQ,2BAA0B;AACxD,SAASC,UAAU,QAAQ,4BAA2B;AACtD,SAASC,WAAW,QAAQ,6BAA4B;AACxD,SAASC,SAAS,QAAQ,2BAA0B;AAEpD,OAAO,MAAMC,YAAuB,eAAeA,UAEjD,EACEC,EAAE,EACFC,YAAYC,cAAc,EAC1BC,IAAI,EACJC,MAAM,EACNC,SAASC,cAAc,CAAC,CAAC,EACzBC,GAAG,EACHC,SAAS,EACTC,MAAM,EACNC,OAAOC,WAAW,CAAC,CAAC,EACrB;IAED,MAAM,EAAEC,gBAAgB,EAAEC,KAAK,EAAE,GAAGlB,cAAc;QAAEmB,SAAS,IAAI;QAAEZ;IAAe;IAClF,MAAMQ,QAAQV,KAAK;QAAEA,IAAI;YAAEe,QAAQf;QAAG;IAAE,IAAIW;IAC5C,MAAMK,SAASJ,iBAAiBI,MAAM;IAEtC,MAAMX,UAAsC;QAC1C,GAAGC,WAAW;QACdW,MAAM;QACNC,KAAK;QACLC,YAAYzB,0BAA0B;YACpCoB,SAAS,IAAI;YACbE,QAAQJ,iBAAiBQ,eAAe;YACxCX;QACF;QACAY,SAAS,MAAMzB,WAAW,IAAI,EAAEW;IAClC;IAEA,MAAMe,QAAQ,MAAM7B,WAAW;QAC7BqB,SAAS,IAAI;QACbZ;QACAc,QAAQJ,iBAAiBQ,eAAe;QACxChB;QACAM;IACF;IAEA,IAAIa;IAEJ,MAAMC,OAA+B,CAAC;IACtC,IAAIC,aAA+BtB;IACnCL,UAAU;QAAE0B;QAAMV,SAAS,IAAI;QAAEX;QAAMa;QAAQU,WAAW;IAAQ;IAClE,IAAIC,OAAOC,IAAI,CAACJ,MAAMK,MAAM,EAAE;QAC5BJ,aAAa;YAAED;YAAMM,MAAML;QAAW;IACxC;IAEA,IAAI;QACF,IAAIjB,cAAc,OAAO;YACvB,MAAMK,MAAMd,SAAS,CAACuB,OAAOG,YAAYpB;YACzCP,UAAU;gBAAEgB,SAAS,IAAI;gBAAEX;gBAAMa;gBAAQU,WAAW;YAAO;YAC3D,OAAO;QACT,OAAO;YACLH,SAAS,MAAMV,MAAMkB,gBAAgB,CAACT,OAAOG,YAAYpB;QAC3D;IACF,EAAE,OAAO2B,OAAO;QACdnC,YAAY;YAAEI,YAAYC;YAAgB8B;YAAOzB;QAAI;IACvD;IAEA,IAAI,CAACgB,QAAQ;QACX,OAAO;IACT;IAEAzB,UAAU;QAAEgB,SAAS,IAAI;QAAEX,MAAMoB;QAAQP;QAAQU,WAAW;IAAO;IAEnE,OAAOH;AACT,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"aggregatePaginate.d.ts","sourceRoot":"","sources":["../../src/utilities/aggregatePaginate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAE5C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAElD,eAAO,MAAM,iBAAiB,mJAc3B;IACD,OAAO,EAAE,eAAe,CAAA;IACxB,SAAS,CAAC,EAAE,gBAAgB,CAAA;IAC5B,eAAe,CAAC,EAAE,aAAa,EAAE,CAAA;IACjC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACpC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B,OAAO,CAAC,EAAE,aAAa,CAAA;IACvB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,eAAe,CAAC,EAAE,aAAa,EAAE,CAAA;IACjC,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAC5B,KAAG,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CA+E7B,CAAA"}
1
+ {"version":3,"file":"aggregatePaginate.d.ts","sourceRoot":"","sources":["../../src/utilities/aggregatePaginate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAE5C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAElD,eAAO,MAAM,iBAAiB,mJAc3B;IACD,OAAO,EAAE,eAAe,CAAA;IACxB,SAAS,CAAC,EAAE,gBAAgB,CAAA;IAC5B,eAAe,CAAC,EAAE,aAAa,EAAE,CAAA;IACjC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACpC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B,OAAO,CAAC,EAAE,aAAa,CAAA;IACvB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,eAAe,CAAC,EAAE,aAAa,EAAE,CAAA;IACjC,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAC5B,KAAG,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAmF7B,CAAA"}
@@ -48,8 +48,10 @@ export const aggregatePaginate = async ({ adapter, collation, joinAggregation, l
48
48
  } : undefined;
49
49
  countPromise = Model.countDocuments(query, {
50
50
  collation,
51
- hint,
52
- session
51
+ session,
52
+ ...hint ? {
53
+ hint
54
+ } : {}
53
55
  });
54
56
  }
55
57
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utilities/aggregatePaginate.ts"],"sourcesContent":["import type { CollationOptions } from 'mongodb'\nimport type { ClientSession, Model, PipelineStage } from 'mongoose'\nimport type { PaginatedDocs } from 'payload'\n\nimport type { MongooseAdapter } from '../index.js'\n\nexport const aggregatePaginate = async ({\n adapter,\n collation,\n joinAggregation,\n limit,\n Model,\n page,\n pagination,\n projection,\n query,\n session,\n sort,\n sortAggregation,\n useEstimatedCount,\n}: {\n adapter: MongooseAdapter\n collation?: CollationOptions\n joinAggregation?: PipelineStage[]\n limit?: number\n Model: Model<any>\n page?: number\n pagination?: boolean\n projection?: Record<string, boolean>\n query: Record<string, unknown>\n session?: ClientSession\n sort?: object\n sortAggregation?: PipelineStage[]\n useEstimatedCount?: boolean\n}): Promise<PaginatedDocs<any>> => {\n const aggregation: PipelineStage[] = [{ $match: query }]\n\n if (sortAggregation && sortAggregation.length > 0) {\n for (const stage of sortAggregation) {\n aggregation.push(stage)\n }\n }\n\n if (sort) {\n const $sort: Record<string, -1 | 1> = {}\n\n Object.entries(sort).forEach(([key, value]) => {\n $sort[key] = value === 'desc' ? -1 : 1\n })\n\n aggregation.push({ $sort })\n }\n\n if (page) {\n aggregation.push({ $skip: (page - 1) * (limit ?? 0) })\n }\n\n if (limit) {\n aggregation.push({ $limit: limit })\n }\n\n if (joinAggregation) {\n for (const stage of joinAggregation) {\n aggregation.push(stage)\n }\n }\n\n if (projection) {\n aggregation.push({ $project: projection })\n }\n\n let countPromise: Promise<null | number> = Promise.resolve(null)\n\n if (pagination !== false && limit) {\n if (useEstimatedCount) {\n countPromise = Model.estimatedDocumentCount(query)\n } else {\n const hint = adapter.disableIndexHints !== true ? { _id: 1 } : undefined\n countPromise = Model.countDocuments(query, { collation, hint, session })\n }\n }\n\n const [docs, countResult] = await Promise.all([\n Model.aggregate(aggregation, { collation, session }),\n countPromise,\n ])\n\n const count = countResult === null ? docs.length : countResult\n\n const totalPages =\n pagination !== false && typeof limit === 'number' && limit !== 0 ? Math.ceil(count / limit) : 1\n\n const hasPrevPage = typeof page === 'number' && pagination !== false && page > 1\n const hasNextPage = typeof page === 'number' && pagination !== false && totalPages > page\n const pagingCounter =\n typeof page === 'number' && pagination !== false && typeof limit === 'number'\n ? (page - 1) * limit + 1\n : 1\n\n const result: PaginatedDocs = {\n docs,\n hasNextPage,\n hasPrevPage,\n limit: limit ?? 0,\n nextPage: hasNextPage ? page + 1 : null,\n page,\n pagingCounter,\n prevPage: hasPrevPage ? page - 1 : null,\n totalDocs: count,\n totalPages,\n }\n\n return result\n}\n"],"names":["aggregatePaginate","adapter","collation","joinAggregation","limit","Model","page","pagination","projection","query","session","sort","sortAggregation","useEstimatedCount","aggregation","$match","length","stage","push","$sort","Object","entries","forEach","key","value","$skip","$limit","$project","countPromise","Promise","resolve","estimatedDocumentCount","hint","disableIndexHints","_id","undefined","countDocuments","docs","countResult","all","aggregate","count","totalPages","Math","ceil","hasPrevPage","hasNextPage","pagingCounter","result","nextPage","prevPage","totalDocs"],"mappings":"AAMA,OAAO,MAAMA,oBAAoB,OAAO,EACtCC,OAAO,EACPC,SAAS,EACTC,eAAe,EACfC,KAAK,EACLC,KAAK,EACLC,IAAI,EACJC,UAAU,EACVC,UAAU,EACVC,KAAK,EACLC,OAAO,EACPC,IAAI,EACJC,eAAe,EACfC,iBAAiB,EAelB;IACC,MAAMC,cAA+B;QAAC;YAAEC,QAAQN;QAAM;KAAE;IAExD,IAAIG,mBAAmBA,gBAAgBI,MAAM,GAAG,GAAG;QACjD,KAAK,MAAMC,SAASL,gBAAiB;YACnCE,YAAYI,IAAI,CAACD;QACnB;IACF;IAEA,IAAIN,MAAM;QACR,MAAMQ,QAAgC,CAAC;QAEvCC,OAAOC,OAAO,CAACV,MAAMW,OAAO,CAAC,CAAC,CAACC,KAAKC,MAAM;YACxCL,KAAK,CAACI,IAAI,GAAGC,UAAU,SAAS,CAAC,IAAI;QACvC;QAEAV,YAAYI,IAAI,CAAC;YAAEC;QAAM;IAC3B;IAEA,IAAIb,MAAM;QACRQ,YAAYI,IAAI,CAAC;YAAEO,OAAO,AAACnB,CAAAA,OAAO,CAAA,IAAMF,CAAAA,SAAS,CAAA;QAAG;IACtD;IAEA,IAAIA,OAAO;QACTU,YAAYI,IAAI,CAAC;YAAEQ,QAAQtB;QAAM;IACnC;IAEA,IAAID,iBAAiB;QACnB,KAAK,MAAMc,SAASd,gBAAiB;YACnCW,YAAYI,IAAI,CAACD;QACnB;IACF;IAEA,IAAIT,YAAY;QACdM,YAAYI,IAAI,CAAC;YAAES,UAAUnB;QAAW;IAC1C;IAEA,IAAIoB,eAAuCC,QAAQC,OAAO,CAAC;IAE3D,IAAIvB,eAAe,SAASH,OAAO;QACjC,IAAIS,mBAAmB;YACrBe,eAAevB,MAAM0B,sBAAsB,CAACtB;QAC9C,OAAO;YACL,MAAMuB,OAAO/B,QAAQgC,iBAAiB,KAAK,OAAO;gBAAEC,KAAK;YAAE,IAAIC;YAC/DP,eAAevB,MAAM+B,cAAc,CAAC3B,OAAO;gBAAEP;gBAAW8B;gBAAMtB;YAAQ;QACxE;IACF;IAEA,MAAM,CAAC2B,MAAMC,YAAY,GAAG,MAAMT,QAAQU,GAAG,CAAC;QAC5ClC,MAAMmC,SAAS,CAAC1B,aAAa;YAAEZ;YAAWQ;QAAQ;QAClDkB;KACD;IAED,MAAMa,QAAQH,gBAAgB,OAAOD,KAAKrB,MAAM,GAAGsB;IAEnD,MAAMI,aACJnC,eAAe,SAAS,OAAOH,UAAU,YAAYA,UAAU,IAAIuC,KAAKC,IAAI,CAACH,QAAQrC,SAAS;IAEhG,MAAMyC,cAAc,OAAOvC,SAAS,YAAYC,eAAe,SAASD,OAAO;IAC/E,MAAMwC,cAAc,OAAOxC,SAAS,YAAYC,eAAe,SAASmC,aAAapC;IACrF,MAAMyC,gBACJ,OAAOzC,SAAS,YAAYC,eAAe,SAAS,OAAOH,UAAU,WACjE,AAACE,CAAAA,OAAO,CAAA,IAAKF,QAAQ,IACrB;IAEN,MAAM4C,SAAwB;QAC5BX;QACAS;QACAD;QACAzC,OAAOA,SAAS;QAChB6C,UAAUH,cAAcxC,OAAO,IAAI;QACnCA;QACAyC;QACAG,UAAUL,cAAcvC,OAAO,IAAI;QACnC6C,WAAWV;QACXC;IACF;IAEA,OAAOM;AACT,EAAC"}
1
+ {"version":3,"sources":["../../src/utilities/aggregatePaginate.ts"],"sourcesContent":["import type { CollationOptions } from 'mongodb'\nimport type { ClientSession, Model, PipelineStage } from 'mongoose'\nimport type { PaginatedDocs } from 'payload'\n\nimport type { MongooseAdapter } from '../index.js'\n\nexport const aggregatePaginate = async ({\n adapter,\n collation,\n joinAggregation,\n limit,\n Model,\n page,\n pagination,\n projection,\n query,\n session,\n sort,\n sortAggregation,\n useEstimatedCount,\n}: {\n adapter: MongooseAdapter\n collation?: CollationOptions\n joinAggregation?: PipelineStage[]\n limit?: number\n Model: Model<any>\n page?: number\n pagination?: boolean\n projection?: Record<string, boolean>\n query: Record<string, unknown>\n session?: ClientSession\n sort?: object\n sortAggregation?: PipelineStage[]\n useEstimatedCount?: boolean\n}): Promise<PaginatedDocs<any>> => {\n const aggregation: PipelineStage[] = [{ $match: query }]\n\n if (sortAggregation && sortAggregation.length > 0) {\n for (const stage of sortAggregation) {\n aggregation.push(stage)\n }\n }\n\n if (sort) {\n const $sort: Record<string, -1 | 1> = {}\n\n Object.entries(sort).forEach(([key, value]) => {\n $sort[key] = value === 'desc' ? -1 : 1\n })\n\n aggregation.push({ $sort })\n }\n\n if (page) {\n aggregation.push({ $skip: (page - 1) * (limit ?? 0) })\n }\n\n if (limit) {\n aggregation.push({ $limit: limit })\n }\n\n if (joinAggregation) {\n for (const stage of joinAggregation) {\n aggregation.push(stage)\n }\n }\n\n if (projection) {\n aggregation.push({ $project: projection })\n }\n\n let countPromise: Promise<null | number> = Promise.resolve(null)\n\n if (pagination !== false && limit) {\n if (useEstimatedCount) {\n countPromise = Model.estimatedDocumentCount(query)\n } else {\n const hint = adapter.disableIndexHints !== true ? { _id: 1 } : undefined\n countPromise = Model.countDocuments(query, {\n collation,\n session,\n ...(hint ? { hint } : {}),\n })\n }\n }\n\n const [docs, countResult] = await Promise.all([\n Model.aggregate(aggregation, { collation, session }),\n countPromise,\n ])\n\n const count = countResult === null ? docs.length : countResult\n\n const totalPages =\n pagination !== false && typeof limit === 'number' && limit !== 0 ? Math.ceil(count / limit) : 1\n\n const hasPrevPage = typeof page === 'number' && pagination !== false && page > 1\n const hasNextPage = typeof page === 'number' && pagination !== false && totalPages > page\n const pagingCounter =\n typeof page === 'number' && pagination !== false && typeof limit === 'number'\n ? (page - 1) * limit + 1\n : 1\n\n const result: PaginatedDocs = {\n docs,\n hasNextPage,\n hasPrevPage,\n limit: limit ?? 0,\n nextPage: hasNextPage ? page + 1 : null,\n page,\n pagingCounter,\n prevPage: hasPrevPage ? page - 1 : null,\n totalDocs: count,\n totalPages,\n }\n\n return result\n}\n"],"names":["aggregatePaginate","adapter","collation","joinAggregation","limit","Model","page","pagination","projection","query","session","sort","sortAggregation","useEstimatedCount","aggregation","$match","length","stage","push","$sort","Object","entries","forEach","key","value","$skip","$limit","$project","countPromise","Promise","resolve","estimatedDocumentCount","hint","disableIndexHints","_id","undefined","countDocuments","docs","countResult","all","aggregate","count","totalPages","Math","ceil","hasPrevPage","hasNextPage","pagingCounter","result","nextPage","prevPage","totalDocs"],"mappings":"AAMA,OAAO,MAAMA,oBAAoB,OAAO,EACtCC,OAAO,EACPC,SAAS,EACTC,eAAe,EACfC,KAAK,EACLC,KAAK,EACLC,IAAI,EACJC,UAAU,EACVC,UAAU,EACVC,KAAK,EACLC,OAAO,EACPC,IAAI,EACJC,eAAe,EACfC,iBAAiB,EAelB;IACC,MAAMC,cAA+B;QAAC;YAAEC,QAAQN;QAAM;KAAE;IAExD,IAAIG,mBAAmBA,gBAAgBI,MAAM,GAAG,GAAG;QACjD,KAAK,MAAMC,SAASL,gBAAiB;YACnCE,YAAYI,IAAI,CAACD;QACnB;IACF;IAEA,IAAIN,MAAM;QACR,MAAMQ,QAAgC,CAAC;QAEvCC,OAAOC,OAAO,CAACV,MAAMW,OAAO,CAAC,CAAC,CAACC,KAAKC,MAAM;YACxCL,KAAK,CAACI,IAAI,GAAGC,UAAU,SAAS,CAAC,IAAI;QACvC;QAEAV,YAAYI,IAAI,CAAC;YAAEC;QAAM;IAC3B;IAEA,IAAIb,MAAM;QACRQ,YAAYI,IAAI,CAAC;YAAEO,OAAO,AAACnB,CAAAA,OAAO,CAAA,IAAMF,CAAAA,SAAS,CAAA;QAAG;IACtD;IAEA,IAAIA,OAAO;QACTU,YAAYI,IAAI,CAAC;YAAEQ,QAAQtB;QAAM;IACnC;IAEA,IAAID,iBAAiB;QACnB,KAAK,MAAMc,SAASd,gBAAiB;YACnCW,YAAYI,IAAI,CAACD;QACnB;IACF;IAEA,IAAIT,YAAY;QACdM,YAAYI,IAAI,CAAC;YAAES,UAAUnB;QAAW;IAC1C;IAEA,IAAIoB,eAAuCC,QAAQC,OAAO,CAAC;IAE3D,IAAIvB,eAAe,SAASH,OAAO;QACjC,IAAIS,mBAAmB;YACrBe,eAAevB,MAAM0B,sBAAsB,CAACtB;QAC9C,OAAO;YACL,MAAMuB,OAAO/B,QAAQgC,iBAAiB,KAAK,OAAO;gBAAEC,KAAK;YAAE,IAAIC;YAC/DP,eAAevB,MAAM+B,cAAc,CAAC3B,OAAO;gBACzCP;gBACAQ;gBACA,GAAIsB,OAAO;oBAAEA;gBAAK,IAAI,CAAC,CAAC;YAC1B;QACF;IACF;IAEA,MAAM,CAACK,MAAMC,YAAY,GAAG,MAAMT,QAAQU,GAAG,CAAC;QAC5ClC,MAAMmC,SAAS,CAAC1B,aAAa;YAAEZ;YAAWQ;QAAQ;QAClDkB;KACD;IAED,MAAMa,QAAQH,gBAAgB,OAAOD,KAAKrB,MAAM,GAAGsB;IAEnD,MAAMI,aACJnC,eAAe,SAAS,OAAOH,UAAU,YAAYA,UAAU,IAAIuC,KAAKC,IAAI,CAACH,QAAQrC,SAAS;IAEhG,MAAMyC,cAAc,OAAOvC,SAAS,YAAYC,eAAe,SAASD,OAAO;IAC/E,MAAMwC,cAAc,OAAOxC,SAAS,YAAYC,eAAe,SAASmC,aAAapC;IACrF,MAAMyC,gBACJ,OAAOzC,SAAS,YAAYC,eAAe,SAAS,OAAOH,UAAU,WACjE,AAACE,CAAAA,OAAO,CAAA,IAAKF,QAAQ,IACrB;IAEN,MAAM4C,SAAwB;QAC5BX;QACAS;QACAD;QACAzC,OAAOA,SAAS;QAChB6C,UAAUH,cAAcxC,OAAO,IAAI;QACnCA;QACAyC;QACAG,UAAUL,cAAcvC,OAAO,IAAI;QACnC6C,WAAWV;QACXC;IACF;IAEA,OAAOM;AACT,EAAC"}
@@ -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;AAE7C,OAAO,EAIL,KAAK,cAAc,EAInB,KAAK,SAAS,EACd,KAAK,yBAAyB,EAC/B,MAAM,SAAS,CAAA;AAGhB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAOlD,KAAK,wBAAwB,GAAG;IAC9B,OAAO,EAAE,eAAe,CAAA;IACxB,UAAU,EAAE,cAAc,CAAA;IAC1B,gBAAgB,EAAE,yBAAyB,CAAA;IAC3C,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IAEjC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC/B,uCAAuC;IACvC,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,eAAO,MAAM,oBAAoB,mGAS9B,wBAAwB,KAAG,OAAO,CAAC,aAAa,EAAE,GAAG,SAAS,CAschE,CAAA"}
1
+ {"version":3,"file":"buildJoinAggregation.d.ts","sourceRoot":"","sources":["../../src/utilities/buildJoinAggregation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAE7C,OAAO,EAIL,KAAK,cAAc,EAInB,KAAK,SAAS,EACd,KAAK,yBAAyB,EAC/B,MAAM,SAAS,CAAA;AAGhB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAOlD,KAAK,wBAAwB,GAAG;IAC9B,OAAO,EAAE,eAAe,CAAA;IACxB,UAAU,EAAE,cAAc,CAAA;IAC1B,gBAAgB,EAAE,yBAAyB,CAAA;IAC3C,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IAEjC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC/B,uCAAuC;IACvC,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,eAAO,MAAM,oBAAoB,mGAS9B,wBAAwB,KAAG,OAAO,CAAC,aAAa,EAAE,GAAG,SAAS,CAychE,CAAA"}
@@ -4,6 +4,9 @@ import { buildQuery } from '../queries/buildQuery.js';
4
4
  import { buildSortParam } from '../queries/buildSortParam.js';
5
5
  import { getCollection } from './getEntity.js';
6
6
  export const buildJoinAggregation = async ({ adapter, collection, collectionConfig, draftsEnabled, joins, locale, projection, versions })=>{
7
+ if (!adapter.useJoinAggregations) {
8
+ return;
9
+ }
7
10
  if (Object.keys(collectionConfig.joins).length === 0 && collectionConfig.polymorphicJoins.length == 0 || joins === false) {
8
11
  return;
9
12
  }