@payloadcms/db-mongodb 3.24.0-canary.48fef90 → 3.24.0-canary.5891112

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 (56) hide show
  1. package/dist/init.d.ts.map +1 -1
  2. package/dist/init.js +24 -16
  3. package/dist/init.js.map +1 -1
  4. package/dist/models/buildCollectionSchema.d.ts.map +1 -1
  5. package/dist/models/buildCollectionSchema.js +12 -16
  6. package/dist/models/buildCollectionSchema.js.map +1 -1
  7. package/dist/models/buildGlobalModel.d.ts.map +1 -1
  8. package/dist/models/buildGlobalModel.js +8 -4
  9. package/dist/models/buildGlobalModel.js.map +1 -1
  10. package/dist/models/buildSchema.d.ts +6 -1
  11. package/dist/models/buildSchema.d.ts.map +1 -1
  12. package/dist/models/buildSchema.js +220 -99
  13. package/dist/models/buildSchema.js.map +1 -1
  14. package/dist/predefinedMigrations/migrateRelationshipsV2_V3.d.ts.map +1 -1
  15. package/dist/predefinedMigrations/migrateRelationshipsV2_V3.js +6 -2
  16. package/dist/predefinedMigrations/migrateRelationshipsV2_V3.js.map +1 -1
  17. package/dist/queries/buildAndOrConditions.d.ts +2 -1
  18. package/dist/queries/buildAndOrConditions.d.ts.map +1 -1
  19. package/dist/queries/buildAndOrConditions.js +2 -1
  20. package/dist/queries/buildAndOrConditions.js.map +1 -1
  21. package/dist/queries/buildQuery.d.ts.map +1 -1
  22. package/dist/queries/buildQuery.js +1 -0
  23. package/dist/queries/buildQuery.js.map +1 -1
  24. package/dist/queries/buildSearchParams.d.ts +2 -1
  25. package/dist/queries/buildSearchParams.d.ts.map +1 -1
  26. package/dist/queries/buildSearchParams.js +4 -1
  27. package/dist/queries/buildSearchParams.js.map +1 -1
  28. package/dist/queries/buildSortParam.d.ts +2 -1
  29. package/dist/queries/buildSortParam.d.ts.map +1 -1
  30. package/dist/queries/buildSortParam.js +2 -1
  31. package/dist/queries/buildSortParam.js.map +1 -1
  32. package/dist/queries/getLocalizedSortProperty.d.ts +2 -1
  33. package/dist/queries/getLocalizedSortProperty.d.ts.map +1 -1
  34. package/dist/queries/getLocalizedSortProperty.js +11 -3
  35. package/dist/queries/getLocalizedSortProperty.js.map +1 -1
  36. package/dist/queries/parseParams.d.ts +2 -1
  37. package/dist/queries/parseParams.d.ts.map +1 -1
  38. package/dist/queries/parseParams.js +3 -1
  39. package/dist/queries/parseParams.js.map +1 -1
  40. package/dist/queries/sanitizeQueryValue.d.ts +2 -1
  41. package/dist/queries/sanitizeQueryValue.d.ts.map +1 -1
  42. package/dist/queries/sanitizeQueryValue.js +6 -2
  43. package/dist/queries/sanitizeQueryValue.js.map +1 -1
  44. package/dist/utilities/buildJoinAggregation.d.ts.map +1 -1
  45. package/dist/utilities/buildJoinAggregation.js +11 -2
  46. package/dist/utilities/buildJoinAggregation.js.map +1 -1
  47. package/dist/utilities/buildProjectionFromSelect.d.ts.map +1 -1
  48. package/dist/utilities/buildProjectionFromSelect.js +18 -17
  49. package/dist/utilities/buildProjectionFromSelect.js.map +1 -1
  50. package/dist/utilities/sanitizeRelationshipIDs.d.ts +2 -1
  51. package/dist/utilities/sanitizeRelationshipIDs.d.ts.map +1 -1
  52. package/dist/utilities/sanitizeRelationshipIDs.js +7 -3
  53. package/dist/utilities/sanitizeRelationshipIDs.js.map +1 -1
  54. package/dist/utilities/sanitizeRelationshipIDs.spec.js +44 -0
  55. package/dist/utilities/sanitizeRelationshipIDs.spec.js.map +1 -1
  56. 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 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 fieldIsLocalized,\n fieldIsPresentationalOnly,\n fieldIsVirtual,\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 = (\n field: Field,\n schema: Schema,\n config: Payload,\n buildSchemaOptions: BuildSchemaOptions,\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 = (field: FieldAffectingData, buildSchemaOptions: BuildSchemaOptions) => {\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 (field.localized ||\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,\n localization: false | SanitizedLocalizationConfig,\n) => {\n if (fieldIsLocalized(entity) && localization && Array.isArray(localization.locales)) {\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 = (\n payload: Payload,\n configFields: Field[],\n buildSchemaOptions: BuildSchemaOptions = {},\n): Schema => {\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)\n\n schemaFields.forEach((field) => {\n if (fieldIsVirtual(field)) {\n return\n }\n\n if (!fieldIsPresentationalOnly(field)) {\n const addFieldSchema: FieldSchemaGenerator = fieldToSchemaMap[field.type]\n\n if (addFieldSchema) {\n addFieldSchema(field, schema, payload, buildSchemaOptions)\n }\n }\n })\n\n return schema\n}\n\nconst fieldToSchemaMap: Record<string, FieldSchemaGenerator> = {\n array: (\n field: ArrayField,\n schema: Schema,\n payload: Payload,\n buildSchemaOptions: BuildSchemaOptions,\n ) => {\n const baseSchema = {\n ...formatBaseSchema(field, buildSchemaOptions),\n type: [\n buildSchema(payload, field.fields, {\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 ],\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization),\n })\n },\n blocks: (\n field: BlocksField,\n schema: Schema,\n payload: Payload,\n buildSchemaOptions: BuildSchemaOptions,\n ): void => {\n const fieldSchema = {\n type: [new mongoose.Schema({}, { _id: false, discriminatorKey: 'blockType' })],\n }\n\n schema.add({\n [field.name]: localizeSchema(field, fieldSchema, payload.config.localization),\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 block.fields.forEach((blockField) => {\n const addFieldSchema: FieldSchemaGenerator = fieldToSchemaMap[blockField.type]\n if (addFieldSchema) {\n addFieldSchema(blockField, blockSchema, payload, buildSchemaOptions)\n }\n })\n\n if (field.localized && 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 checkbox: (\n field: CheckboxField,\n schema: Schema,\n payload: Payload,\n buildSchemaOptions: BuildSchemaOptions,\n ): void => {\n const baseSchema = { ...formatBaseSchema(field, buildSchemaOptions), type: Boolean }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization),\n })\n },\n code: (\n field: CodeField,\n schema: Schema,\n payload: Payload,\n buildSchemaOptions: BuildSchemaOptions,\n ): void => {\n const baseSchema = { ...formatBaseSchema(field, buildSchemaOptions), type: String }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization),\n })\n },\n collapsible: (\n field: CollapsibleField,\n schema: Schema,\n payload: Payload,\n buildSchemaOptions: BuildSchemaOptions,\n ): void => {\n field.fields.forEach((subField: Field) => {\n if (fieldIsVirtual(subField)) {\n return\n }\n\n const addFieldSchema: FieldSchemaGenerator = fieldToSchemaMap[subField.type]\n\n if (addFieldSchema) {\n addFieldSchema(subField, schema, payload, buildSchemaOptions)\n }\n })\n },\n date: (\n field: DateField,\n schema: Schema,\n payload: Payload,\n buildSchemaOptions: BuildSchemaOptions,\n ): void => {\n const baseSchema = { ...formatBaseSchema(field, buildSchemaOptions), type: Date }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization),\n })\n },\n email: (\n field: EmailField,\n schema: Schema,\n payload: Payload,\n buildSchemaOptions: BuildSchemaOptions,\n ): void => {\n const baseSchema = { ...formatBaseSchema(field, buildSchemaOptions), type: String }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization),\n })\n },\n group: (\n field: GroupField,\n schema: Schema,\n payload: Payload,\n buildSchemaOptions: BuildSchemaOptions,\n ): void => {\n const formattedBaseSchema = formatBaseSchema(field, buildSchemaOptions)\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 = {\n ...formattedBaseSchema,\n type: buildSchema(payload, field.fields, {\n disableUnique: buildSchemaOptions.disableUnique,\n draftsEnabled: buildSchemaOptions.draftsEnabled,\n indexSortableFields,\n options: {\n _id: false,\n id: false,\n minimize: false,\n },\n }),\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization),\n })\n },\n json: (\n field: JSONField,\n schema: Schema,\n payload: Payload,\n buildSchemaOptions: BuildSchemaOptions,\n ): void => {\n const baseSchema = {\n ...formatBaseSchema(field, buildSchemaOptions),\n type: mongoose.Schema.Types.Mixed,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization),\n })\n },\n number: (\n field: NumberField,\n schema: Schema,\n payload: Payload,\n buildSchemaOptions: BuildSchemaOptions,\n ): void => {\n const baseSchema = {\n ...formatBaseSchema(field, buildSchemaOptions),\n type: field.hasMany ? [Number] : Number,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization),\n })\n },\n point: (\n field: PointField,\n schema: Schema,\n payload: Payload,\n buildSchemaOptions: BuildSchemaOptions,\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 if (buildSchemaOptions.disableUnique && field.unique && field.localized) {\n baseSchema.coordinates.sparse = true\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization),\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 (field.localized && 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 radio: (\n field: RadioField,\n schema: Schema,\n payload: Payload,\n buildSchemaOptions: BuildSchemaOptions,\n ): void => {\n const baseSchema = {\n ...formatBaseSchema(field, buildSchemaOptions),\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),\n })\n },\n relationship: (\n field: RelationshipField,\n schema: Schema,\n payload: Payload,\n buildSchemaOptions: BuildSchemaOptions,\n ) => {\n const hasManyRelations = Array.isArray(field.relationTo)\n let schemaToReturn: { [key: string]: any } = {}\n\n const valueType = getRelationshipValueType(field, payload)\n\n if (field.localized && payload.config.localization) {\n schemaToReturn = {\n type: payload.config.localization.localeCodes.reduce((locales, locale) => {\n let localeSchema: { [key: string]: any } = {}\n\n if (hasManyRelations) {\n localeSchema = {\n ...formatBaseSchema(field, buildSchemaOptions),\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(field, buildSchemaOptions),\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(field, buildSchemaOptions),\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(field, buildSchemaOptions),\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 richText: (\n field: RichTextField,\n schema: Schema,\n payload: Payload,\n buildSchemaOptions: BuildSchemaOptions,\n ): void => {\n const baseSchema = {\n ...formatBaseSchema(field, buildSchemaOptions),\n type: mongoose.Schema.Types.Mixed,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization),\n })\n },\n row: (\n field: RowField,\n schema: Schema,\n payload: Payload,\n buildSchemaOptions: BuildSchemaOptions,\n ): void => {\n field.fields.forEach((subField: Field) => {\n if (fieldIsVirtual(subField)) {\n return\n }\n\n const addFieldSchema: FieldSchemaGenerator = fieldToSchemaMap[subField.type]\n\n if (addFieldSchema) {\n addFieldSchema(subField, schema, payload, buildSchemaOptions)\n }\n })\n },\n select: (\n field: SelectField,\n schema: Schema,\n payload: Payload,\n buildSchemaOptions: BuildSchemaOptions,\n ): void => {\n const baseSchema = {\n ...formatBaseSchema(field, buildSchemaOptions),\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.push(null)\n }\n\n schema.add({\n [field.name]: localizeSchema(\n field,\n field.hasMany ? [baseSchema] : baseSchema,\n payload.config.localization,\n ),\n })\n },\n tabs: (\n field: TabsField,\n schema: Schema,\n payload: Payload,\n buildSchemaOptions: BuildSchemaOptions,\n ): void => {\n field.tabs.forEach((tab) => {\n if (tabHasName(tab)) {\n if (fieldIsVirtual(tab)) {\n return\n }\n const baseSchema = {\n type: buildSchema(payload, tab.fields, {\n disableUnique: buildSchemaOptions.disableUnique,\n draftsEnabled: buildSchemaOptions.draftsEnabled,\n options: {\n _id: false,\n id: false,\n minimize: false,\n },\n }),\n }\n\n schema.add({\n [tab.name]: localizeSchema(tab, baseSchema, payload.config.localization),\n })\n } else {\n tab.fields.forEach((subField: Field) => {\n if (fieldIsVirtual(subField)) {\n return\n }\n const addFieldSchema: FieldSchemaGenerator = fieldToSchemaMap[subField.type]\n\n if (addFieldSchema) {\n addFieldSchema(subField, schema, payload, buildSchemaOptions)\n }\n })\n }\n })\n },\n text: (\n field: TextField,\n schema: Schema,\n payload: Payload,\n buildSchemaOptions: BuildSchemaOptions,\n ): void => {\n const baseSchema = {\n ...formatBaseSchema(field, buildSchemaOptions),\n type: field.hasMany ? [String] : String,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization),\n })\n },\n textarea: (\n field: TextareaField,\n schema: Schema,\n payload: Payload,\n buildSchemaOptions: BuildSchemaOptions,\n ): void => {\n const baseSchema = { ...formatBaseSchema(field, buildSchemaOptions), type: String }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization),\n })\n },\n upload: (\n field: UploadField,\n schema: Schema,\n payload: Payload,\n buildSchemaOptions: BuildSchemaOptions,\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 (field.localized && payload.config.localization) {\n schemaToReturn = {\n type: payload.config.localization.localeCodes.reduce((locales, locale) => {\n let localeSchema: { [key: string]: any } = {}\n\n if (hasManyRelations) {\n localeSchema = {\n ...formatBaseSchema(field, buildSchemaOptions),\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(field, buildSchemaOptions),\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(field, buildSchemaOptions),\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(field, buildSchemaOptions),\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}\n\nconst getRelationshipValueType = (field: RelationshipField | UploadField, payload: Payload) => {\n if (typeof field.relationTo === 'string') {\n const { customIDType } = payload.collections[field.relationTo]\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","fieldIsLocalized","fieldIsPresentationalOnly","fieldIsVirtual","tabHasName","formatDefaultValue","field","defaultValue","undefined","formatBaseSchema","buildSchemaOptions","disableUnique","draftsEnabled","indexSortableFields","schema","default","index","unique","required","localized","type","sparse","hidden","localizeSchema","entity","localization","Array","isArray","locales","localeCodes","reduce","localeSchema","locale","_id","buildSchema","payload","configFields","allowIDField","options","fields","schemaFields","idField","find","name","Number","String","filter","Schema","forEach","addFieldSchema","fieldToSchemaMap","array","baseSchema","id","minimize","add","config","blocks","fieldSchema","discriminatorKey","blockReferences","blockItem","blockSchema","block","blockField","localeCode","path","discriminator","slug","checkbox","Boolean","code","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","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 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 = (\n field: Field,\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,\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 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)\n\n schemaFields.forEach((field) => {\n if (fieldIsVirtual(field)) {\n return\n }\n\n if (!fieldIsPresentationalOnly(field)) {\n const addFieldSchema: FieldSchemaGenerator = fieldToSchemaMap[field.type]\n\n if (addFieldSchema) {\n addFieldSchema(field, schema, payload, buildSchemaOptions, parentIsLocalized)\n }\n }\n })\n\n return schema\n}\n\nconst fieldToSchemaMap: Record<string, FieldSchemaGenerator> = {\n array: (field: ArrayField, schema, payload, buildSchemaOptions, parentIsLocalized) => {\n const baseSchema = {\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(\n field,\n baseSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\n })\n },\n blocks: (field: BlocksField, schema, payload, buildSchemaOptions, parentIsLocalized): void => {\n const fieldSchema = {\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 block.fields.forEach((blockField) => {\n const addFieldSchema: FieldSchemaGenerator = fieldToSchemaMap[blockField.type]\n if (addFieldSchema) {\n addFieldSchema(\n blockField,\n blockSchema,\n payload,\n buildSchemaOptions,\n parentIsLocalized || field.localized,\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 checkbox: (\n field: CheckboxField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n ): void => {\n const baseSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: Boolean,\n }\n\n schema.add({\n [field.name]: localizeSchema(\n field,\n baseSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\n })\n },\n code: (field: CodeField, schema, payload, buildSchemaOptions, parentIsLocalized): void => {\n const baseSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: String,\n }\n\n schema.add({\n [field.name]: localizeSchema(\n field,\n baseSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\n })\n },\n collapsible: (\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: FieldSchemaGenerator = fieldToSchemaMap[subField.type]\n\n if (addFieldSchema) {\n addFieldSchema(subField, schema, payload, buildSchemaOptions, parentIsLocalized)\n }\n })\n },\n date: (field: DateField, schema, payload, buildSchemaOptions, parentIsLocalized): void => {\n const baseSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: Date,\n }\n\n schema.add({\n [field.name]: localizeSchema(\n field,\n baseSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\n })\n },\n email: (field: EmailField, schema, payload, buildSchemaOptions, parentIsLocalized): void => {\n const baseSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: String,\n }\n\n schema.add({\n [field.name]: localizeSchema(\n field,\n baseSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\n })\n },\n group: (field: GroupField, schema, payload, buildSchemaOptions, parentIsLocalized): void => {\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 = {\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 },\n json: (field: JSONField, schema, payload, buildSchemaOptions, parentIsLocalized): void => {\n const baseSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: mongoose.Schema.Types.Mixed,\n }\n\n schema.add({\n [field.name]: localizeSchema(\n field,\n baseSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\n })\n },\n number: (field: NumberField, schema, payload, buildSchemaOptions, parentIsLocalized): void => {\n const baseSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: field.hasMany ? [Number] : Number,\n }\n\n schema.add({\n [field.name]: localizeSchema(\n field,\n baseSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\n })\n },\n point: (field: PointField, schema, payload, buildSchemaOptions, parentIsLocalized): 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 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(\n field,\n baseSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\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 radio: (field: RadioField, schema, payload, buildSchemaOptions, parentIsLocalized): 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(\n field,\n baseSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\n })\n },\n relationship: (\n field: RelationshipField,\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 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 richText: (\n field: RichTextField,\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(\n field,\n baseSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\n })\n },\n row: (field: RowField, schema, payload, buildSchemaOptions, parentIsLocalized): void => {\n field.fields.forEach((subField: Field) => {\n if (fieldIsVirtual(subField)) {\n return\n }\n\n const addFieldSchema: FieldSchemaGenerator = fieldToSchemaMap[subField.type]\n\n if (addFieldSchema) {\n addFieldSchema(subField, schema, payload, buildSchemaOptions, parentIsLocalized)\n }\n })\n },\n select: (field: SelectField, schema, payload, buildSchemaOptions, parentIsLocalized): 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 if (buildSchemaOptions.draftsEnabled || !field.required) {\n baseSchema.enum.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 tabs: (field: TabsField, schema, payload, buildSchemaOptions, parentIsLocalized): 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(\n tab,\n baseSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\n })\n } else {\n tab.fields.forEach((subField: Field) => {\n if (fieldIsVirtual(subField)) {\n return\n }\n const addFieldSchema: FieldSchemaGenerator = fieldToSchemaMap[subField.type]\n\n if (addFieldSchema) {\n addFieldSchema(\n subField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized || tab.localized,\n )\n }\n })\n }\n })\n },\n text: (field: TextField, schema, payload, buildSchemaOptions, parentIsLocalized): void => {\n const baseSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: field.hasMany ? [String] : String,\n }\n\n schema.add({\n [field.name]: localizeSchema(\n field,\n baseSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\n })\n },\n textarea: (\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(\n field,\n baseSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\n })\n },\n upload: (field: UploadField, schema, payload, buildSchemaOptions, parentIsLocalized): 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 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}\n\nconst getRelationshipValueType = (field: RelationshipField | UploadField, payload: Payload) => {\n if (typeof field.relationTo === 'string') {\n const { customIDType } = payload.collections[field.relationTo]\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","fieldToSchemaMap","array","baseSchema","id","minimize","add","config","blocks","fieldSchema","discriminatorKey","blockReferences","blockItem","blockSchema","block","blockField","localeCode","path","discriminator","slug","checkbox","Boolean","code","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","customIDType","collections","ObjectId","some"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"migrateRelationshipsV2_V3.d.ts","sourceRoot":"","sources":["../../src/predefinedMigrations/migrateRelationshipsV2_V3.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAS,cAAc,EAAmB,MAAM,SAAS,CAAA;AAuGrE,wBAAsB,yBAAyB,CAAC,EAC9C,SAAS,EACT,GAAG,GACJ,EAAE;IACD,SAAS,EAAE,MAAM,CAAA;IACjB,GAAG,EAAE,cAAc,CAAA;CACpB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmFhB"}
1
+ {"version":3,"file":"migrateRelationshipsV2_V3.d.ts","sourceRoot":"","sources":["../../src/predefinedMigrations/migrateRelationshipsV2_V3.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAS,cAAc,EAAmB,MAAM,SAAS,CAAA;AAyGrE,wBAAsB,yBAAyB,CAAC,EAC9C,SAAS,EACT,GAAG,GACJ,EAAE;IACD,SAAS,EAAE,MAAM,CAAA;IACjB,GAAG,EAAE,cAAc,CAAA;CACpB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0FhB"}
@@ -1,7 +1,7 @@
1
1
  import { buildVersionCollectionFields, buildVersionGlobalFields } from 'payload';
2
2
  import { getSession } from '../utilities/getSession.js';
3
3
  import { sanitizeRelationshipIDs } from '../utilities/sanitizeRelationshipIDs.js';
4
- const migrateModelWithBatching = async ({ batchSize, config, fields, Model, session })=>{
4
+ const migrateModelWithBatching = async ({ batchSize, config, fields, Model, parentIsLocalized, session })=>{
5
5
  let hasNext = true;
6
6
  let skip = 0;
7
7
  while(hasNext){
@@ -22,7 +22,8 @@ const migrateModelWithBatching = async ({ batchSize, config, fields, Model, sess
22
22
  sanitizeRelationshipIDs({
23
23
  config,
24
24
  data: doc,
25
- fields
25
+ fields,
26
+ parentIsLocalized
26
27
  });
27
28
  }
28
29
  await Model.collection.bulkWrite(docs.map((doc)=>({
@@ -89,6 +90,7 @@ export async function migrateRelationshipsV2_V3({ batchSize, req }) {
89
90
  config,
90
91
  fields: collection.fields,
91
92
  Model: db.collections[collection.slug],
93
+ parentIsLocalized: false,
92
94
  session
93
95
  });
94
96
  payload.logger.info(`Migrated collection "${collection.slug}"`);
@@ -100,6 +102,7 @@ export async function migrateRelationshipsV2_V3({ batchSize, req }) {
100
102
  config,
101
103
  fields: buildVersionCollectionFields(config, collection),
102
104
  Model: db.versions[collection.slug],
105
+ parentIsLocalized: false,
103
106
  session
104
107
  });
105
108
  payload.logger.info(`Migrated collection versions "${collection.slug}"`);
@@ -141,6 +144,7 @@ export async function migrateRelationshipsV2_V3({ batchSize, req }) {
141
144
  config,
142
145
  fields: buildVersionGlobalFields(config, global),
143
146
  Model: db.versions[global.slug],
147
+ parentIsLocalized: false,
144
148
  session
145
149
  });
146
150
  payload.logger.info(`Migrated global versions "${global.slug}"`);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/predefinedMigrations/migrateRelationshipsV2_V3.ts"],"sourcesContent":["import type { ClientSession, Model } from 'mongoose'\nimport type { Field, PayloadRequest, SanitizedConfig } from 'payload'\n\nimport { buildVersionCollectionFields, buildVersionGlobalFields } from 'payload'\n\nimport type { MongooseAdapter } from '../index.js'\n\nimport { getSession } from '../utilities/getSession.js'\nimport { sanitizeRelationshipIDs } from '../utilities/sanitizeRelationshipIDs.js'\n\nconst migrateModelWithBatching = async ({\n batchSize,\n config,\n fields,\n Model,\n session,\n}: {\n batchSize: number\n config: SanitizedConfig\n fields: Field[]\n Model: Model<any>\n session: ClientSession\n}): Promise<void> => {\n let hasNext = true\n let skip = 0\n\n while (hasNext) {\n const docs = await Model.find(\n {},\n {},\n {\n lean: true,\n limit: batchSize + 1,\n session,\n skip,\n },\n )\n\n if (docs.length === 0) {\n break\n }\n\n hasNext = docs.length > batchSize\n\n if (hasNext) {\n docs.pop()\n }\n\n for (const doc of docs) {\n sanitizeRelationshipIDs({ config, data: doc, fields })\n }\n\n await Model.collection.bulkWrite(\n docs.map((doc) => ({\n updateOne: {\n filter: { _id: doc._id },\n update: {\n $set: doc,\n },\n },\n })),\n { session },\n )\n\n skip += batchSize\n }\n}\n\nconst hasRelationshipOrUploadField = ({ fields }: { fields: Field[] }): boolean => {\n for (const field of fields) {\n if (field.type === 'relationship' || field.type === 'upload') {\n return true\n }\n\n if ('fields' in field) {\n if (hasRelationshipOrUploadField({ fields: field.fields })) {\n return true\n }\n }\n\n if ('blocks' in field) {\n for (const block of field.blocks) {\n if (typeof block === 'string') {\n // Skip - string blocks have been added in v3 and thus don't need to be migrated\n continue\n }\n if (hasRelationshipOrUploadField({ fields: block.fields })) {\n return true\n }\n }\n }\n\n if ('tabs' in field) {\n for (const tab of field.tabs) {\n if (hasRelationshipOrUploadField({ fields: tab.fields })) {\n return true\n }\n }\n }\n }\n\n return false\n}\n\nexport async function migrateRelationshipsV2_V3({\n batchSize,\n req,\n}: {\n batchSize: number\n req: PayloadRequest\n}): Promise<void> {\n const { payload } = req\n const db = payload.db as MongooseAdapter\n const config = payload.config\n\n const session = await getSession(db, req)\n\n for (const collection of payload.config.collections) {\n if (hasRelationshipOrUploadField(collection)) {\n payload.logger.info(`Migrating collection \"${collection.slug}\"`)\n\n await migrateModelWithBatching({\n batchSize,\n config,\n fields: collection.fields,\n Model: db.collections[collection.slug],\n session,\n })\n\n payload.logger.info(`Migrated collection \"${collection.slug}\"`)\n }\n\n if (collection.versions) {\n payload.logger.info(`Migrating collection versions \"${collection.slug}\"`)\n\n await migrateModelWithBatching({\n batchSize,\n config,\n fields: buildVersionCollectionFields(config, collection),\n Model: db.versions[collection.slug],\n session,\n })\n\n payload.logger.info(`Migrated collection versions \"${collection.slug}\"`)\n }\n }\n\n const { globals: GlobalsModel } = db\n\n for (const global of payload.config.globals) {\n if (hasRelationshipOrUploadField(global)) {\n payload.logger.info(`Migrating global \"${global.slug}\"`)\n\n const doc = await GlobalsModel.findOne<Record<string, unknown>>(\n {\n globalType: {\n $eq: global.slug,\n },\n },\n {},\n { lean: true, session },\n )\n\n // in case if the global doesn't exist in the database yet (not saved)\n if (doc) {\n sanitizeRelationshipIDs({ config, data: doc, fields: global.fields })\n\n await GlobalsModel.collection.updateOne(\n {\n globalType: global.slug,\n },\n { $set: doc },\n { session },\n )\n }\n\n payload.logger.info(`Migrated global \"${global.slug}\"`)\n }\n\n if (global.versions) {\n payload.logger.info(`Migrating global versions \"${global.slug}\"`)\n\n await migrateModelWithBatching({\n batchSize,\n config,\n fields: buildVersionGlobalFields(config, global),\n Model: db.versions[global.slug],\n session,\n })\n\n payload.logger.info(`Migrated global versions \"${global.slug}\"`)\n }\n }\n}\n"],"names":["buildVersionCollectionFields","buildVersionGlobalFields","getSession","sanitizeRelationshipIDs","migrateModelWithBatching","batchSize","config","fields","Model","session","hasNext","skip","docs","find","lean","limit","length","pop","doc","data","collection","bulkWrite","map","updateOne","filter","_id","update","$set","hasRelationshipOrUploadField","field","type","block","blocks","tab","tabs","migrateRelationshipsV2_V3","req","payload","db","collections","logger","info","slug","versions","globals","GlobalsModel","global","findOne","globalType","$eq"],"mappings":"AAGA,SAASA,4BAA4B,EAAEC,wBAAwB,QAAQ,UAAS;AAIhF,SAASC,UAAU,QAAQ,6BAA4B;AACvD,SAASC,uBAAuB,QAAQ,0CAAyC;AAEjF,MAAMC,2BAA2B,OAAO,EACtCC,SAAS,EACTC,MAAM,EACNC,MAAM,EACNC,KAAK,EACLC,OAAO,EAOR;IACC,IAAIC,UAAU;IACd,IAAIC,OAAO;IAEX,MAAOD,QAAS;QACd,MAAME,OAAO,MAAMJ,MAAMK,IAAI,CAC3B,CAAC,GACD,CAAC,GACD;YACEC,MAAM;YACNC,OAAOV,YAAY;YACnBI;YACAE;QACF;QAGF,IAAIC,KAAKI,MAAM,KAAK,GAAG;YACrB;QACF;QAEAN,UAAUE,KAAKI,MAAM,GAAGX;QAExB,IAAIK,SAAS;YACXE,KAAKK,GAAG;QACV;QAEA,KAAK,MAAMC,OAAON,KAAM;YACtBT,wBAAwB;gBAAEG;gBAAQa,MAAMD;gBAAKX;YAAO;QACtD;QAEA,MAAMC,MAAMY,UAAU,CAACC,SAAS,CAC9BT,KAAKU,GAAG,CAAC,CAACJ,MAAS,CAAA;gBACjBK,WAAW;oBACTC,QAAQ;wBAAEC,KAAKP,IAAIO,GAAG;oBAAC;oBACvBC,QAAQ;wBACNC,MAAMT;oBACR;gBACF;YACF,CAAA,IACA;YAAET;QAAQ;QAGZE,QAAQN;IACV;AACF;AAEA,MAAMuB,+BAA+B,CAAC,EAAErB,MAAM,EAAuB;IACnE,KAAK,MAAMsB,SAAStB,OAAQ;QAC1B,IAAIsB,MAAMC,IAAI,KAAK,kBAAkBD,MAAMC,IAAI,KAAK,UAAU;YAC5D,OAAO;QACT;QAEA,IAAI,YAAYD,OAAO;YACrB,IAAID,6BAA6B;gBAAErB,QAAQsB,MAAMtB,MAAM;YAAC,IAAI;gBAC1D,OAAO;YACT;QACF;QAEA,IAAI,YAAYsB,OAAO;YACrB,KAAK,MAAME,SAASF,MAAMG,MAAM,CAAE;gBAChC,IAAI,OAAOD,UAAU,UAAU;oBAE7B;gBACF;gBACA,IAAIH,6BAA6B;oBAAErB,QAAQwB,MAAMxB,MAAM;gBAAC,IAAI;oBAC1D,OAAO;gBACT;YACF;QACF;QAEA,IAAI,UAAUsB,OAAO;YACnB,KAAK,MAAMI,OAAOJ,MAAMK,IAAI,CAAE;gBAC5B,IAAIN,6BAA6B;oBAAErB,QAAQ0B,IAAI1B,MAAM;gBAAC,IAAI;oBACxD,OAAO;gBACT;YACF;QACF;IACF;IAEA,OAAO;AACT;AAEA,OAAO,eAAe4B,0BAA0B,EAC9C9B,SAAS,EACT+B,GAAG,EAIJ;IACC,MAAM,EAAEC,OAAO,EAAE,GAAGD;IACpB,MAAME,KAAKD,QAAQC,EAAE;IACrB,MAAMhC,SAAS+B,QAAQ/B,MAAM;IAE7B,MAAMG,UAAU,MAAMP,WAAWoC,IAAIF;IAErC,KAAK,MAAMhB,cAAciB,QAAQ/B,MAAM,CAACiC,WAAW,CAAE;QACnD,IAAIX,6BAA6BR,aAAa;YAC5CiB,QAAQG,MAAM,CAACC,IAAI,CAAC,CAAC,sBAAsB,EAAErB,WAAWsB,IAAI,CAAC,CAAC,CAAC;YAE/D,MAAMtC,yBAAyB;gBAC7BC;gBACAC;gBACAC,QAAQa,WAAWb,MAAM;gBACzBC,OAAO8B,GAAGC,WAAW,CAACnB,WAAWsB,IAAI,CAAC;gBACtCjC;YACF;YAEA4B,QAAQG,MAAM,CAACC,IAAI,CAAC,CAAC,qBAAqB,EAAErB,WAAWsB,IAAI,CAAC,CAAC,CAAC;QAChE;QAEA,IAAItB,WAAWuB,QAAQ,EAAE;YACvBN,QAAQG,MAAM,CAACC,IAAI,CAAC,CAAC,+BAA+B,EAAErB,WAAWsB,IAAI,CAAC,CAAC,CAAC;YAExE,MAAMtC,yBAAyB;gBAC7BC;gBACAC;gBACAC,QAAQP,6BAA6BM,QAAQc;gBAC7CZ,OAAO8B,GAAGK,QAAQ,CAACvB,WAAWsB,IAAI,CAAC;gBACnCjC;YACF;YAEA4B,QAAQG,MAAM,CAACC,IAAI,CAAC,CAAC,8BAA8B,EAAErB,WAAWsB,IAAI,CAAC,CAAC,CAAC;QACzE;IACF;IAEA,MAAM,EAAEE,SAASC,YAAY,EAAE,GAAGP;IAElC,KAAK,MAAMQ,UAAUT,QAAQ/B,MAAM,CAACsC,OAAO,CAAE;QAC3C,IAAIhB,6BAA6BkB,SAAS;YACxCT,QAAQG,MAAM,CAACC,IAAI,CAAC,CAAC,kBAAkB,EAAEK,OAAOJ,IAAI,CAAC,CAAC,CAAC;YAEvD,MAAMxB,MAAM,MAAM2B,aAAaE,OAAO,CACpC;gBACEC,YAAY;oBACVC,KAAKH,OAAOJ,IAAI;gBAClB;YACF,GACA,CAAC,GACD;gBAAE5B,MAAM;gBAAML;YAAQ;YAGxB,uEAAuE;YACvE,IAAIS,KAAK;gBACPf,wBAAwB;oBAAEG;oBAAQa,MAAMD;oBAAKX,QAAQuC,OAAOvC,MAAM;gBAAC;gBAEnE,MAAMsC,aAAazB,UAAU,CAACG,SAAS,CACrC;oBACEyB,YAAYF,OAAOJ,IAAI;gBACzB,GACA;oBAAEf,MAAMT;gBAAI,GACZ;oBAAET;gBAAQ;YAEd;YAEA4B,QAAQG,MAAM,CAACC,IAAI,CAAC,CAAC,iBAAiB,EAAEK,OAAOJ,IAAI,CAAC,CAAC,CAAC;QACxD;QAEA,IAAII,OAAOH,QAAQ,EAAE;YACnBN,QAAQG,MAAM,CAACC,IAAI,CAAC,CAAC,2BAA2B,EAAEK,OAAOJ,IAAI,CAAC,CAAC,CAAC;YAEhE,MAAMtC,yBAAyB;gBAC7BC;gBACAC;gBACAC,QAAQN,yBAAyBK,QAAQwC;gBACzCtC,OAAO8B,GAAGK,QAAQ,CAACG,OAAOJ,IAAI,CAAC;gBAC/BjC;YACF;YAEA4B,QAAQG,MAAM,CAACC,IAAI,CAAC,CAAC,0BAA0B,EAAEK,OAAOJ,IAAI,CAAC,CAAC,CAAC;QACjE;IACF;AACF"}
1
+ {"version":3,"sources":["../../src/predefinedMigrations/migrateRelationshipsV2_V3.ts"],"sourcesContent":["import type { ClientSession, Model } from 'mongoose'\nimport type { Field, PayloadRequest, SanitizedConfig } from 'payload'\n\nimport { buildVersionCollectionFields, buildVersionGlobalFields } from 'payload'\n\nimport type { MongooseAdapter } from '../index.js'\n\nimport { getSession } from '../utilities/getSession.js'\nimport { sanitizeRelationshipIDs } from '../utilities/sanitizeRelationshipIDs.js'\n\nconst migrateModelWithBatching = async ({\n batchSize,\n config,\n fields,\n Model,\n parentIsLocalized,\n session,\n}: {\n batchSize: number\n config: SanitizedConfig\n fields: Field[]\n Model: Model<any>\n parentIsLocalized: boolean\n session: ClientSession\n}): Promise<void> => {\n let hasNext = true\n let skip = 0\n\n while (hasNext) {\n const docs = await Model.find(\n {},\n {},\n {\n lean: true,\n limit: batchSize + 1,\n session,\n skip,\n },\n )\n\n if (docs.length === 0) {\n break\n }\n\n hasNext = docs.length > batchSize\n\n if (hasNext) {\n docs.pop()\n }\n\n for (const doc of docs) {\n sanitizeRelationshipIDs({ config, data: doc, fields, parentIsLocalized })\n }\n\n await Model.collection.bulkWrite(\n docs.map((doc) => ({\n updateOne: {\n filter: { _id: doc._id },\n update: {\n $set: doc,\n },\n },\n })),\n { session },\n )\n\n skip += batchSize\n }\n}\n\nconst hasRelationshipOrUploadField = ({ fields }: { fields: Field[] }): boolean => {\n for (const field of fields) {\n if (field.type === 'relationship' || field.type === 'upload') {\n return true\n }\n\n if ('fields' in field) {\n if (hasRelationshipOrUploadField({ fields: field.fields })) {\n return true\n }\n }\n\n if ('blocks' in field) {\n for (const block of field.blocks) {\n if (typeof block === 'string') {\n // Skip - string blocks have been added in v3 and thus don't need to be migrated\n continue\n }\n if (hasRelationshipOrUploadField({ fields: block.fields })) {\n return true\n }\n }\n }\n\n if ('tabs' in field) {\n for (const tab of field.tabs) {\n if (hasRelationshipOrUploadField({ fields: tab.fields })) {\n return true\n }\n }\n }\n }\n\n return false\n}\n\nexport async function migrateRelationshipsV2_V3({\n batchSize,\n req,\n}: {\n batchSize: number\n req: PayloadRequest\n}): Promise<void> {\n const { payload } = req\n const db = payload.db as MongooseAdapter\n const config = payload.config\n\n const session = await getSession(db, req)\n\n for (const collection of payload.config.collections) {\n if (hasRelationshipOrUploadField(collection)) {\n payload.logger.info(`Migrating collection \"${collection.slug}\"`)\n\n await migrateModelWithBatching({\n batchSize,\n config,\n fields: collection.fields,\n Model: db.collections[collection.slug],\n parentIsLocalized: false,\n session,\n })\n\n payload.logger.info(`Migrated collection \"${collection.slug}\"`)\n }\n\n if (collection.versions) {\n payload.logger.info(`Migrating collection versions \"${collection.slug}\"`)\n\n await migrateModelWithBatching({\n batchSize,\n config,\n fields: buildVersionCollectionFields(config, collection),\n Model: db.versions[collection.slug],\n parentIsLocalized: false,\n session,\n })\n\n payload.logger.info(`Migrated collection versions \"${collection.slug}\"`)\n }\n }\n\n const { globals: GlobalsModel } = db\n\n for (const global of payload.config.globals) {\n if (hasRelationshipOrUploadField(global)) {\n payload.logger.info(`Migrating global \"${global.slug}\"`)\n\n const doc = await GlobalsModel.findOne<Record<string, unknown>>(\n {\n globalType: {\n $eq: global.slug,\n },\n },\n {},\n { lean: true, session },\n )\n\n // in case if the global doesn't exist in the database yet (not saved)\n if (doc) {\n sanitizeRelationshipIDs({\n config,\n data: doc,\n fields: global.fields,\n })\n\n await GlobalsModel.collection.updateOne(\n {\n globalType: global.slug,\n },\n { $set: doc },\n { session },\n )\n }\n\n payload.logger.info(`Migrated global \"${global.slug}\"`)\n }\n\n if (global.versions) {\n payload.logger.info(`Migrating global versions \"${global.slug}\"`)\n\n await migrateModelWithBatching({\n batchSize,\n config,\n fields: buildVersionGlobalFields(config, global),\n Model: db.versions[global.slug],\n parentIsLocalized: false,\n session,\n })\n\n payload.logger.info(`Migrated global versions \"${global.slug}\"`)\n }\n }\n}\n"],"names":["buildVersionCollectionFields","buildVersionGlobalFields","getSession","sanitizeRelationshipIDs","migrateModelWithBatching","batchSize","config","fields","Model","parentIsLocalized","session","hasNext","skip","docs","find","lean","limit","length","pop","doc","data","collection","bulkWrite","map","updateOne","filter","_id","update","$set","hasRelationshipOrUploadField","field","type","block","blocks","tab","tabs","migrateRelationshipsV2_V3","req","payload","db","collections","logger","info","slug","versions","globals","GlobalsModel","global","findOne","globalType","$eq"],"mappings":"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"}
@@ -1,9 +1,10 @@
1
1
  import type { FlattenedField, Payload, Where } from 'payload';
2
- export declare function buildAndOrConditions({ collectionSlug, fields, globalSlug, locale, payload, where, }: {
2
+ export declare function buildAndOrConditions({ collectionSlug, fields, globalSlug, locale, parentIsLocalized, payload, where, }: {
3
3
  collectionSlug?: string;
4
4
  fields: FlattenedField[];
5
5
  globalSlug?: string;
6
6
  locale?: string;
7
+ parentIsLocalized: boolean;
7
8
  payload: Payload;
8
9
  where: Where[];
9
10
  }): Promise<Record<string, unknown>[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"buildAndOrConditions.d.ts","sourceRoot":"","sources":["../../src/queries/buildAndOrConditions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAI7D,wBAAsB,oBAAoB,CAAC,EACzC,cAAc,EACd,MAAM,EACN,UAAU,EACV,MAAM,EACN,OAAO,EACP,KAAK,GACN,EAAE;IACD,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,KAAK,EAAE,CAAA;CACf,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAsBrC"}
1
+ {"version":3,"file":"buildAndOrConditions.d.ts","sourceRoot":"","sources":["../../src/queries/buildAndOrConditions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAI7D,wBAAsB,oBAAoB,CAAC,EACzC,cAAc,EACd,MAAM,EACN,UAAU,EACV,MAAM,EACN,iBAAiB,EACjB,OAAO,EACP,KAAK,GACN,EAAE;IACD,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,iBAAiB,EAAE,OAAO,CAAA;IAC1B,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,KAAK,EAAE,CAAA;CACf,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAuBrC"}
@@ -1,5 +1,5 @@
1
1
  import { parseParams } from './parseParams.js';
2
- export async function buildAndOrConditions({ collectionSlug, fields, globalSlug, locale, payload, where }) {
2
+ export async function buildAndOrConditions({ collectionSlug, fields, globalSlug, locale, parentIsLocalized, payload, where }) {
3
3
  const completedConditions = [];
4
4
  // Loop over all AND / OR operations and add them to the AND / OR query param
5
5
  // Operations should come through as an array
@@ -11,6 +11,7 @@ export async function buildAndOrConditions({ collectionSlug, fields, globalSlug,
11
11
  fields,
12
12
  globalSlug,
13
13
  locale,
14
+ parentIsLocalized,
14
15
  payload,
15
16
  where: condition
16
17
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/queries/buildAndOrConditions.ts"],"sourcesContent":["import type { FlattenedField, Payload, Where } from 'payload'\n\nimport { parseParams } from './parseParams.js'\n\nexport async function buildAndOrConditions({\n collectionSlug,\n fields,\n globalSlug,\n locale,\n payload,\n where,\n}: {\n collectionSlug?: string\n fields: FlattenedField[]\n globalSlug?: string\n locale?: string\n payload: Payload\n where: Where[]\n}): Promise<Record<string, unknown>[]> {\n const completedConditions = []\n // Loop over all AND / OR operations and add them to the AND / OR query param\n // Operations should come through as an array\n\n for (const condition of where) {\n // If the operation is properly formatted as an object\n if (typeof condition === 'object') {\n const result = await parseParams({\n collectionSlug,\n fields,\n globalSlug,\n locale,\n payload,\n where: condition,\n })\n if (Object.keys(result).length > 0) {\n completedConditions.push(result)\n }\n }\n }\n return completedConditions\n}\n"],"names":["parseParams","buildAndOrConditions","collectionSlug","fields","globalSlug","locale","payload","where","completedConditions","condition","result","Object","keys","length","push"],"mappings":"AAEA,SAASA,WAAW,QAAQ,mBAAkB;AAE9C,OAAO,eAAeC,qBAAqB,EACzCC,cAAc,EACdC,MAAM,EACNC,UAAU,EACVC,MAAM,EACNC,OAAO,EACPC,KAAK,EAQN;IACC,MAAMC,sBAAsB,EAAE;IAC9B,6EAA6E;IAC7E,6CAA6C;IAE7C,KAAK,MAAMC,aAAaF,MAAO;QAC7B,sDAAsD;QACtD,IAAI,OAAOE,cAAc,UAAU;YACjC,MAAMC,SAAS,MAAMV,YAAY;gBAC/BE;gBACAC;gBACAC;gBACAC;gBACAC;gBACAC,OAAOE;YACT;YACA,IAAIE,OAAOC,IAAI,CAACF,QAAQG,MAAM,GAAG,GAAG;gBAClCL,oBAAoBM,IAAI,CAACJ;YAC3B;QACF;IACF;IACA,OAAOF;AACT"}
1
+ {"version":3,"sources":["../../src/queries/buildAndOrConditions.ts"],"sourcesContent":["import type { FlattenedField, Payload, Where } from 'payload'\n\nimport { parseParams } from './parseParams.js'\n\nexport async function buildAndOrConditions({\n collectionSlug,\n fields,\n globalSlug,\n locale,\n parentIsLocalized,\n payload,\n where,\n}: {\n collectionSlug?: string\n fields: FlattenedField[]\n globalSlug?: string\n locale?: string\n parentIsLocalized: boolean\n payload: Payload\n where: Where[]\n}): Promise<Record<string, unknown>[]> {\n const completedConditions = []\n // Loop over all AND / OR operations and add them to the AND / OR query param\n // Operations should come through as an array\n\n for (const condition of where) {\n // If the operation is properly formatted as an object\n if (typeof condition === 'object') {\n const result = await parseParams({\n collectionSlug,\n fields,\n globalSlug,\n locale,\n parentIsLocalized,\n payload,\n where: condition,\n })\n if (Object.keys(result).length > 0) {\n completedConditions.push(result)\n }\n }\n }\n return completedConditions\n}\n"],"names":["parseParams","buildAndOrConditions","collectionSlug","fields","globalSlug","locale","parentIsLocalized","payload","where","completedConditions","condition","result","Object","keys","length","push"],"mappings":"AAEA,SAASA,WAAW,QAAQ,mBAAkB;AAE9C,OAAO,eAAeC,qBAAqB,EACzCC,cAAc,EACdC,MAAM,EACNC,UAAU,EACVC,MAAM,EACNC,iBAAiB,EACjBC,OAAO,EACPC,KAAK,EASN;IACC,MAAMC,sBAAsB,EAAE;IAC9B,6EAA6E;IAC7E,6CAA6C;IAE7C,KAAK,MAAMC,aAAaF,MAAO;QAC7B,sDAAsD;QACtD,IAAI,OAAOE,cAAc,UAAU;YACjC,MAAMC,SAAS,MAAMX,YAAY;gBAC/BE;gBACAC;gBACAC;gBACAC;gBACAC;gBACAC;gBACAC,OAAOE;YACT;YACA,IAAIE,OAAOC,IAAI,CAACF,QAAQG,MAAM,GAAG,GAAG;gBAClCL,oBAAoBM,IAAI,CAACJ;YAC3B;QACF;IACF;IACA,OAAOF;AACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"buildQuery.d.ts","sourceRoot":"","sources":["../../src/queries/buildQuery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAM7D,KAAK,uBAAuB,GAAG;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,cAAc,CAAC,EAAE,cAAc,EAAE,CAAA;CAClC,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,KAAK,CAAA;CACb,CAAA;AAID,eAAO,MAAM,mBAAmB,yCAG7B,uBAAuB,0BAsCzB,CAAA"}
1
+ {"version":3,"file":"buildQuery.d.ts","sourceRoot":"","sources":["../../src/queries/buildQuery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAM7D,KAAK,uBAAuB,GAAG;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,cAAc,CAAC,EAAE,cAAc,EAAE,CAAA;CAClC,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,KAAK,CAAA;CACb,CAAA;AAID,eAAO,MAAM,mBAAmB,yCAG7B,uBAAuB,0BAuCzB,CAAA"}
@@ -23,6 +23,7 @@ export const getBuildQueryPlugin = ({ collectionSlug, versionsFields } = {})=>{
23
23
  fields,
24
24
  globalSlug,
25
25
  locale,
26
+ parentIsLocalized: false,
26
27
  payload,
27
28
  where
28
29
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/queries/buildQuery.ts"],"sourcesContent":["import type { FlattenedField, Payload, Where } from 'payload'\n\nimport { QueryError } from 'payload'\n\nimport { parseParams } from './parseParams.js'\n\ntype GetBuildQueryPluginArgs = {\n collectionSlug?: string\n versionsFields?: FlattenedField[]\n}\n\nexport type BuildQueryArgs = {\n globalSlug?: string\n locale?: string\n payload: Payload\n where: Where\n}\n\n// This plugin asynchronously builds a list of Mongoose query constraints\n// which can then be used in subsequent Mongoose queries.\nexport const getBuildQueryPlugin = ({\n collectionSlug,\n versionsFields,\n}: GetBuildQueryPluginArgs = {}) => {\n return function buildQueryPlugin(schema) {\n const modifiedSchema = schema\n async function buildQuery({\n globalSlug,\n locale,\n payload,\n where,\n }: BuildQueryArgs): Promise<Record<string, unknown>> {\n let fields = versionsFields\n if (!fields) {\n if (globalSlug) {\n const globalConfig = payload.globals.config.find(({ slug }) => slug === globalSlug)\n fields = globalConfig.flattenedFields\n }\n if (collectionSlug) {\n const collectionConfig = payload.collections[collectionSlug].config\n fields = collectionConfig.flattenedFields\n }\n }\n const errors = []\n const result = await parseParams({\n collectionSlug,\n fields,\n globalSlug,\n locale,\n payload,\n where,\n })\n\n if (errors.length > 0) {\n throw new QueryError(errors)\n }\n\n return result\n }\n modifiedSchema.statics.buildQuery = buildQuery\n }\n}\n"],"names":["QueryError","parseParams","getBuildQueryPlugin","collectionSlug","versionsFields","buildQueryPlugin","schema","modifiedSchema","buildQuery","globalSlug","locale","payload","where","fields","globalConfig","globals","config","find","slug","flattenedFields","collectionConfig","collections","errors","result","length","statics"],"mappings":"AAEA,SAASA,UAAU,QAAQ,UAAS;AAEpC,SAASC,WAAW,QAAQ,mBAAkB;AAc9C,yEAAyE;AACzE,yDAAyD;AACzD,OAAO,MAAMC,sBAAsB,CAAC,EAClCC,cAAc,EACdC,cAAc,EACU,GAAG,CAAC,CAAC;IAC7B,OAAO,SAASC,iBAAiBC,MAAM;QACrC,MAAMC,iBAAiBD;QACvB,eAAeE,WAAW,EACxBC,UAAU,EACVC,MAAM,EACNC,OAAO,EACPC,KAAK,EACU;YACf,IAAIC,SAAST;YACb,IAAI,CAACS,QAAQ;gBACX,IAAIJ,YAAY;oBACd,MAAMK,eAAeH,QAAQI,OAAO,CAACC,MAAM,CAACC,IAAI,CAAC,CAAC,EAAEC,IAAI,EAAE,GAAKA,SAAST;oBACxEI,SAASC,aAAaK,eAAe;gBACvC;gBACA,IAAIhB,gBAAgB;oBAClB,MAAMiB,mBAAmBT,QAAQU,WAAW,CAAClB,eAAe,CAACa,MAAM;oBACnEH,SAASO,iBAAiBD,eAAe;gBAC3C;YACF;YACA,MAAMG,SAAS,EAAE;YACjB,MAAMC,SAAS,MAAMtB,YAAY;gBAC/BE;gBACAU;gBACAJ;gBACAC;gBACAC;gBACAC;YACF;YAEA,IAAIU,OAAOE,MAAM,GAAG,GAAG;gBACrB,MAAM,IAAIxB,WAAWsB;YACvB;YAEA,OAAOC;QACT;QACAhB,eAAekB,OAAO,CAACjB,UAAU,GAAGA;IACtC;AACF,EAAC"}
1
+ {"version":3,"sources":["../../src/queries/buildQuery.ts"],"sourcesContent":["import type { FlattenedField, Payload, Where } from 'payload'\n\nimport { QueryError } from 'payload'\n\nimport { parseParams } from './parseParams.js'\n\ntype GetBuildQueryPluginArgs = {\n collectionSlug?: string\n versionsFields?: FlattenedField[]\n}\n\nexport type BuildQueryArgs = {\n globalSlug?: string\n locale?: string\n payload: Payload\n where: Where\n}\n\n// This plugin asynchronously builds a list of Mongoose query constraints\n// which can then be used in subsequent Mongoose queries.\nexport const getBuildQueryPlugin = ({\n collectionSlug,\n versionsFields,\n}: GetBuildQueryPluginArgs = {}) => {\n return function buildQueryPlugin(schema) {\n const modifiedSchema = schema\n async function buildQuery({\n globalSlug,\n locale,\n payload,\n where,\n }: BuildQueryArgs): Promise<Record<string, unknown>> {\n let fields = versionsFields\n if (!fields) {\n if (globalSlug) {\n const globalConfig = payload.globals.config.find(({ slug }) => slug === globalSlug)\n fields = globalConfig.flattenedFields\n }\n if (collectionSlug) {\n const collectionConfig = payload.collections[collectionSlug].config\n fields = collectionConfig.flattenedFields\n }\n }\n const errors = []\n const result = await parseParams({\n collectionSlug,\n fields,\n globalSlug,\n locale,\n parentIsLocalized: false,\n payload,\n where,\n })\n\n if (errors.length > 0) {\n throw new QueryError(errors)\n }\n\n return result\n }\n modifiedSchema.statics.buildQuery = buildQuery\n }\n}\n"],"names":["QueryError","parseParams","getBuildQueryPlugin","collectionSlug","versionsFields","buildQueryPlugin","schema","modifiedSchema","buildQuery","globalSlug","locale","payload","where","fields","globalConfig","globals","config","find","slug","flattenedFields","collectionConfig","collections","errors","result","parentIsLocalized","length","statics"],"mappings":"AAEA,SAASA,UAAU,QAAQ,UAAS;AAEpC,SAASC,WAAW,QAAQ,mBAAkB;AAc9C,yEAAyE;AACzE,yDAAyD;AACzD,OAAO,MAAMC,sBAAsB,CAAC,EAClCC,cAAc,EACdC,cAAc,EACU,GAAG,CAAC,CAAC;IAC7B,OAAO,SAASC,iBAAiBC,MAAM;QACrC,MAAMC,iBAAiBD;QACvB,eAAeE,WAAW,EACxBC,UAAU,EACVC,MAAM,EACNC,OAAO,EACPC,KAAK,EACU;YACf,IAAIC,SAAST;YACb,IAAI,CAACS,QAAQ;gBACX,IAAIJ,YAAY;oBACd,MAAMK,eAAeH,QAAQI,OAAO,CAACC,MAAM,CAACC,IAAI,CAAC,CAAC,EAAEC,IAAI,EAAE,GAAKA,SAAST;oBACxEI,SAASC,aAAaK,eAAe;gBACvC;gBACA,IAAIhB,gBAAgB;oBAClB,MAAMiB,mBAAmBT,QAAQU,WAAW,CAAClB,eAAe,CAACa,MAAM;oBACnEH,SAASO,iBAAiBD,eAAe;gBAC3C;YACF;YACA,MAAMG,SAAS,EAAE;YACjB,MAAMC,SAAS,MAAMtB,YAAY;gBAC/BE;gBACAU;gBACAJ;gBACAC;gBACAc,mBAAmB;gBACnBb;gBACAC;YACF;YAEA,IAAIU,OAAOG,MAAM,GAAG,GAAG;gBACrB,MAAM,IAAIzB,WAAWsB;YACvB;YAEA,OAAOC;QACT;QACAhB,eAAemB,OAAO,CAAClB,UAAU,GAAGA;IACtC;AACF,EAAC"}
@@ -7,13 +7,14 @@ type SearchParam = {
7
7
  /**
8
8
  * Convert the Payload key / value / operator into a MongoDB query
9
9
  */
10
- export declare function buildSearchParam({ collectionSlug, fields, globalSlug, incomingPath, locale, operator, payload, val, }: {
10
+ export declare function buildSearchParam({ collectionSlug, fields, globalSlug, incomingPath, locale, operator, parentIsLocalized, payload, val, }: {
11
11
  collectionSlug?: string;
12
12
  fields: FlattenedField[];
13
13
  globalSlug?: string;
14
14
  incomingPath: string;
15
15
  locale?: string;
16
16
  operator: string;
17
+ parentIsLocalized: boolean;
17
18
  payload: Payload;
18
19
  val: unknown;
19
20
  }): Promise<SearchParam>;
@@ -1 +1 @@
1
- {"version":3,"file":"buildSearchParams.d.ts","sourceRoot":"","sources":["../../src/queries/buildSearchParams.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAyB,OAAO,EAAE,MAAM,SAAS,CAAA;AAW7E,KAAK,WAAW,GAAG;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AAOD;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,EACrC,cAAc,EACd,MAAM,EACN,UAAU,EACV,YAAY,EACZ,MAAM,EACN,QAAQ,EACR,OAAO,EACP,GAAG,GACJ,EAAE;IACD,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,EAAE,OAAO,CAAA;CACb,GAAG,OAAO,CAAC,WAAW,CAAC,CAiOvB"}
1
+ {"version":3,"file":"buildSearchParams.d.ts","sourceRoot":"","sources":["../../src/queries/buildSearchParams.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAyB,OAAO,EAAE,MAAM,SAAS,CAAA;AAW7E,KAAK,WAAW,GAAG;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AAOD;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,EACrC,cAAc,EACd,MAAM,EACN,UAAU,EACV,YAAY,EACZ,MAAM,EACN,QAAQ,EACR,iBAAiB,EACjB,OAAO,EACP,GAAG,GACJ,EAAE;IACD,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,EAAE,OAAO,CAAA;CACb,GAAG,OAAO,CAAC,WAAW,CAAC,CAoOvB"}
@@ -9,7 +9,7 @@ const subQueryOptions = {
9
9
  };
10
10
  /**
11
11
  * Convert the Payload key / value / operator into a MongoDB query
12
- */ export async function buildSearchParam({ collectionSlug, fields, globalSlug, incomingPath, locale, operator, payload, val }) {
12
+ */ export async function buildSearchParam({ collectionSlug, fields, globalSlug, incomingPath, locale, operator, parentIsLocalized, payload, val }) {
13
13
  // Replace GraphQL nested field double underscore formatting
14
14
  let sanitizedPath = incomingPath.replace(/__/g, '.');
15
15
  if (sanitizedPath === 'id') {
@@ -31,6 +31,7 @@ const subQueryOptions = {
31
31
  name: 'id',
32
32
  type: idFieldType
33
33
  },
34
+ parentIsLocalized,
34
35
  path: '_id'
35
36
  });
36
37
  } else {
@@ -40,6 +41,7 @@ const subQueryOptions = {
40
41
  globalSlug,
41
42
  incomingPath: sanitizedPath,
42
43
  locale,
44
+ parentIsLocalized,
43
45
  payload
44
46
  });
45
47
  }
@@ -50,6 +52,7 @@ const subQueryOptions = {
50
52
  hasCustomID,
51
53
  locale,
52
54
  operator,
55
+ parentIsLocalized,
53
56
  path,
54
57
  payload,
55
58
  val
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/queries/buildSearchParams.ts"],"sourcesContent":["import type { FlattenedField, Operator, PathToQuery, Payload } from 'payload'\n\nimport { Types } from 'mongoose'\nimport { getLocalizedPaths } from 'payload'\nimport { validOperatorSet } from 'payload/shared'\n\nimport type { MongooseAdapter } from '../index.js'\n\nimport { operatorMap } from './operatorMap.js'\nimport { sanitizeQueryValue } from './sanitizeQueryValue.js'\n\ntype SearchParam = {\n path?: string\n rawQuery?: unknown\n value?: unknown\n}\n\nconst subQueryOptions = {\n lean: true,\n limit: 50,\n}\n\n/**\n * Convert the Payload key / value / operator into a MongoDB query\n */\nexport async function buildSearchParam({\n collectionSlug,\n fields,\n globalSlug,\n incomingPath,\n locale,\n operator,\n payload,\n val,\n}: {\n collectionSlug?: string\n fields: FlattenedField[]\n globalSlug?: string\n incomingPath: string\n locale?: string\n operator: string\n payload: Payload\n val: unknown\n}): Promise<SearchParam> {\n // Replace GraphQL nested field double underscore formatting\n let sanitizedPath = incomingPath.replace(/__/g, '.')\n if (sanitizedPath === 'id') {\n sanitizedPath = '_id'\n }\n\n let paths: PathToQuery[] = []\n\n let hasCustomID = false\n\n if (sanitizedPath === '_id') {\n const customIDFieldType = payload.collections[collectionSlug]?.customIDType\n\n let idFieldType: 'number' | 'text' = 'text'\n\n if (customIDFieldType) {\n idFieldType = customIDFieldType\n hasCustomID = true\n }\n\n paths.push({\n collectionSlug,\n complete: true,\n field: {\n name: 'id',\n type: idFieldType,\n } as FlattenedField,\n path: '_id',\n })\n } else {\n paths = getLocalizedPaths({\n collectionSlug,\n fields,\n globalSlug,\n incomingPath: sanitizedPath,\n locale,\n payload,\n })\n }\n\n const [{ field, path }] = paths\n if (path) {\n const sanitizedQueryValue = sanitizeQueryValue({\n field,\n hasCustomID,\n locale,\n operator,\n path,\n payload,\n val,\n })\n\n if (!sanitizedQueryValue) {\n return undefined\n }\n\n const { operator: formattedOperator, rawQuery, val: formattedValue } = sanitizedQueryValue\n\n if (rawQuery) {\n return { value: rawQuery }\n }\n\n // If there are multiple collections to search through,\n // Recursively build up a list of query constraints\n if (paths.length > 1) {\n // Remove top collection and reverse array\n // to work backwards from top\n const pathsToQuery = paths.slice(1).reverse()\n\n const initialRelationshipQuery = {\n value: {},\n } as SearchParam\n\n const relationshipQuery = await pathsToQuery.reduce(\n async (priorQuery, { collectionSlug: slug, path: subPath }, i) => {\n const priorQueryResult = await priorQuery\n\n const SubModel = (payload.db as MongooseAdapter).collections[slug]\n\n // On the \"deepest\" collection,\n // Search on the value passed through the query\n if (i === 0) {\n const subQuery = await SubModel.buildQuery({\n locale,\n payload,\n where: {\n [subPath]: {\n [formattedOperator]: val,\n },\n },\n })\n\n const result = await SubModel.find(subQuery, subQueryOptions)\n\n const $in: unknown[] = []\n\n result.forEach((doc) => {\n const stringID = doc._id.toString()\n $in.push(stringID)\n\n if (Types.ObjectId.isValid(stringID)) {\n $in.push(doc._id)\n }\n })\n\n if (pathsToQuery.length === 1) {\n return {\n path,\n value: { $in },\n }\n }\n\n const nextSubPath = pathsToQuery[i + 1].path\n\n return {\n value: { [nextSubPath]: { $in } },\n }\n }\n\n const subQuery = priorQueryResult.value\n const result = await SubModel.find(subQuery, subQueryOptions)\n\n const $in = result.map((doc) => doc._id)\n\n // If it is the last recursion\n // then pass through the search param\n if (i + 1 === pathsToQuery.length) {\n return {\n path,\n value: { $in },\n }\n }\n\n return {\n value: {\n _id: { $in },\n },\n }\n },\n Promise.resolve(initialRelationshipQuery),\n )\n\n return relationshipQuery\n }\n\n if (formattedOperator && validOperatorSet.has(formattedOperator as Operator)) {\n const operatorKey = operatorMap[formattedOperator]\n\n if (field.type === 'relationship' || field.type === 'upload') {\n let hasNumberIDRelation\n let multiIDCondition = '$or'\n if (operatorKey === '$ne') {\n multiIDCondition = '$and'\n }\n\n const result = {\n value: {\n [multiIDCondition]: [{ [path]: { [operatorKey]: formattedValue } }],\n },\n }\n\n if (typeof formattedValue === 'string') {\n if (Types.ObjectId.isValid(formattedValue)) {\n result.value[multiIDCondition].push({\n [path]: { [operatorKey]: new Types.ObjectId(formattedValue) },\n })\n } else {\n ;(Array.isArray(field.relationTo) ? field.relationTo : [field.relationTo]).forEach(\n (relationTo) => {\n const isRelatedToCustomNumberID =\n payload.collections[relationTo]?.customIDType === 'number'\n\n if (isRelatedToCustomNumberID) {\n hasNumberIDRelation = true\n }\n },\n )\n\n if (hasNumberIDRelation) {\n result.value[multiIDCondition].push({\n [path]: { [operatorKey]: parseFloat(formattedValue) },\n })\n }\n }\n }\n\n if (result.value[multiIDCondition].length > 1) {\n return result\n }\n }\n\n if (formattedOperator === 'like' && typeof formattedValue === 'string') {\n const words = formattedValue.split(' ')\n\n const result = {\n value: {\n $and: words.map((word) => ({\n [path]: {\n $options: 'i',\n $regex: word.replace(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&'),\n },\n })),\n },\n }\n\n return result\n }\n\n // Some operators like 'near' need to define a full query\n // so if there is no operator key, just return the value\n if (!operatorKey) {\n return {\n path,\n value: formattedValue,\n }\n }\n\n return {\n path,\n value: { [operatorKey]: formattedValue },\n }\n }\n }\n return undefined\n}\n"],"names":["Types","getLocalizedPaths","validOperatorSet","operatorMap","sanitizeQueryValue","subQueryOptions","lean","limit","buildSearchParam","collectionSlug","fields","globalSlug","incomingPath","locale","operator","payload","val","sanitizedPath","replace","paths","hasCustomID","customIDFieldType","collections","customIDType","idFieldType","push","complete","field","name","type","path","sanitizedQueryValue","undefined","formattedOperator","rawQuery","formattedValue","value","length","pathsToQuery","slice","reverse","initialRelationshipQuery","relationshipQuery","reduce","priorQuery","slug","subPath","i","priorQueryResult","SubModel","db","subQuery","buildQuery","where","result","find","$in","forEach","doc","stringID","_id","toString","ObjectId","isValid","nextSubPath","map","Promise","resolve","has","operatorKey","hasNumberIDRelation","multiIDCondition","Array","isArray","relationTo","isRelatedToCustomNumberID","parseFloat","words","split","$and","word","$options","$regex"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/queries/buildSearchParams.ts"],"sourcesContent":["import type { FlattenedField, Operator, PathToQuery, Payload } from 'payload'\n\nimport { Types } from 'mongoose'\nimport { getLocalizedPaths } from 'payload'\nimport { validOperatorSet } from 'payload/shared'\n\nimport type { MongooseAdapter } from '../index.js'\n\nimport { operatorMap } from './operatorMap.js'\nimport { sanitizeQueryValue } from './sanitizeQueryValue.js'\n\ntype SearchParam = {\n path?: string\n rawQuery?: unknown\n value?: unknown\n}\n\nconst subQueryOptions = {\n lean: true,\n limit: 50,\n}\n\n/**\n * Convert the Payload key / value / operator into a MongoDB query\n */\nexport async function buildSearchParam({\n collectionSlug,\n fields,\n globalSlug,\n incomingPath,\n locale,\n operator,\n parentIsLocalized,\n payload,\n val,\n}: {\n collectionSlug?: string\n fields: FlattenedField[]\n globalSlug?: string\n incomingPath: string\n locale?: string\n operator: string\n parentIsLocalized: boolean\n payload: Payload\n val: unknown\n}): Promise<SearchParam> {\n // Replace GraphQL nested field double underscore formatting\n let sanitizedPath = incomingPath.replace(/__/g, '.')\n if (sanitizedPath === 'id') {\n sanitizedPath = '_id'\n }\n\n let paths: PathToQuery[] = []\n\n let hasCustomID = false\n\n if (sanitizedPath === '_id') {\n const customIDFieldType = payload.collections[collectionSlug]?.customIDType\n\n let idFieldType: 'number' | 'text' = 'text'\n\n if (customIDFieldType) {\n idFieldType = customIDFieldType\n hasCustomID = true\n }\n\n paths.push({\n collectionSlug,\n complete: true,\n field: {\n name: 'id',\n type: idFieldType,\n } as FlattenedField,\n parentIsLocalized,\n path: '_id',\n })\n } else {\n paths = getLocalizedPaths({\n collectionSlug,\n fields,\n globalSlug,\n incomingPath: sanitizedPath,\n locale,\n parentIsLocalized,\n payload,\n })\n }\n\n const [{ field, path }] = paths\n if (path) {\n const sanitizedQueryValue = sanitizeQueryValue({\n field,\n hasCustomID,\n locale,\n operator,\n parentIsLocalized,\n path,\n payload,\n val,\n })\n\n if (!sanitizedQueryValue) {\n return undefined\n }\n\n const { operator: formattedOperator, rawQuery, val: formattedValue } = sanitizedQueryValue\n\n if (rawQuery) {\n return { value: rawQuery }\n }\n\n // If there are multiple collections to search through,\n // Recursively build up a list of query constraints\n if (paths.length > 1) {\n // Remove top collection and reverse array\n // to work backwards from top\n const pathsToQuery = paths.slice(1).reverse()\n\n const initialRelationshipQuery = {\n value: {},\n } as SearchParam\n\n const relationshipQuery = await pathsToQuery.reduce(\n async (priorQuery, { collectionSlug: slug, path: subPath }, i) => {\n const priorQueryResult = await priorQuery\n\n const SubModel = (payload.db as MongooseAdapter).collections[slug]\n\n // On the \"deepest\" collection,\n // Search on the value passed through the query\n if (i === 0) {\n const subQuery = await SubModel.buildQuery({\n locale,\n payload,\n where: {\n [subPath]: {\n [formattedOperator]: val,\n },\n },\n })\n\n const result = await SubModel.find(subQuery, subQueryOptions)\n\n const $in: unknown[] = []\n\n result.forEach((doc) => {\n const stringID = doc._id.toString()\n $in.push(stringID)\n\n if (Types.ObjectId.isValid(stringID)) {\n $in.push(doc._id)\n }\n })\n\n if (pathsToQuery.length === 1) {\n return {\n path,\n value: { $in },\n }\n }\n\n const nextSubPath = pathsToQuery[i + 1].path\n\n return {\n value: { [nextSubPath]: { $in } },\n }\n }\n\n const subQuery = priorQueryResult.value\n const result = await SubModel.find(subQuery, subQueryOptions)\n\n const $in = result.map((doc) => doc._id)\n\n // If it is the last recursion\n // then pass through the search param\n if (i + 1 === pathsToQuery.length) {\n return {\n path,\n value: { $in },\n }\n }\n\n return {\n value: {\n _id: { $in },\n },\n }\n },\n Promise.resolve(initialRelationshipQuery),\n )\n\n return relationshipQuery\n }\n\n if (formattedOperator && validOperatorSet.has(formattedOperator as Operator)) {\n const operatorKey = operatorMap[formattedOperator]\n\n if (field.type === 'relationship' || field.type === 'upload') {\n let hasNumberIDRelation\n let multiIDCondition = '$or'\n if (operatorKey === '$ne') {\n multiIDCondition = '$and'\n }\n\n const result = {\n value: {\n [multiIDCondition]: [{ [path]: { [operatorKey]: formattedValue } }],\n },\n }\n\n if (typeof formattedValue === 'string') {\n if (Types.ObjectId.isValid(formattedValue)) {\n result.value[multiIDCondition].push({\n [path]: { [operatorKey]: new Types.ObjectId(formattedValue) },\n })\n } else {\n ;(Array.isArray(field.relationTo) ? field.relationTo : [field.relationTo]).forEach(\n (relationTo) => {\n const isRelatedToCustomNumberID =\n payload.collections[relationTo]?.customIDType === 'number'\n\n if (isRelatedToCustomNumberID) {\n hasNumberIDRelation = true\n }\n },\n )\n\n if (hasNumberIDRelation) {\n result.value[multiIDCondition].push({\n [path]: { [operatorKey]: parseFloat(formattedValue) },\n })\n }\n }\n }\n\n if (result.value[multiIDCondition].length > 1) {\n return result\n }\n }\n\n if (formattedOperator === 'like' && typeof formattedValue === 'string') {\n const words = formattedValue.split(' ')\n\n const result = {\n value: {\n $and: words.map((word) => ({\n [path]: {\n $options: 'i',\n $regex: word.replace(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&'),\n },\n })),\n },\n }\n\n return result\n }\n\n // Some operators like 'near' need to define a full query\n // so if there is no operator key, just return the value\n if (!operatorKey) {\n return {\n path,\n value: formattedValue,\n }\n }\n\n return {\n path,\n value: { [operatorKey]: formattedValue },\n }\n }\n }\n return undefined\n}\n"],"names":["Types","getLocalizedPaths","validOperatorSet","operatorMap","sanitizeQueryValue","subQueryOptions","lean","limit","buildSearchParam","collectionSlug","fields","globalSlug","incomingPath","locale","operator","parentIsLocalized","payload","val","sanitizedPath","replace","paths","hasCustomID","customIDFieldType","collections","customIDType","idFieldType","push","complete","field","name","type","path","sanitizedQueryValue","undefined","formattedOperator","rawQuery","formattedValue","value","length","pathsToQuery","slice","reverse","initialRelationshipQuery","relationshipQuery","reduce","priorQuery","slug","subPath","i","priorQueryResult","SubModel","db","subQuery","buildQuery","where","result","find","$in","forEach","doc","stringID","_id","toString","ObjectId","isValid","nextSubPath","map","Promise","resolve","has","operatorKey","hasNumberIDRelation","multiIDCondition","Array","isArray","relationTo","isRelatedToCustomNumberID","parseFloat","words","split","$and","word","$options","$regex"],"mappings":"AAEA,SAASA,KAAK,QAAQ,WAAU;AAChC,SAASC,iBAAiB,QAAQ,UAAS;AAC3C,SAASC,gBAAgB,QAAQ,iBAAgB;AAIjD,SAASC,WAAW,QAAQ,mBAAkB;AAC9C,SAASC,kBAAkB,QAAQ,0BAAyB;AAQ5D,MAAMC,kBAAkB;IACtBC,MAAM;IACNC,OAAO;AACT;AAEA;;CAEC,GACD,OAAO,eAAeC,iBAAiB,EACrCC,cAAc,EACdC,MAAM,EACNC,UAAU,EACVC,YAAY,EACZC,MAAM,EACNC,QAAQ,EACRC,iBAAiB,EACjBC,OAAO,EACPC,GAAG,EAWJ;IACC,4DAA4D;IAC5D,IAAIC,gBAAgBN,aAAaO,OAAO,CAAC,OAAO;IAChD,IAAID,kBAAkB,MAAM;QAC1BA,gBAAgB;IAClB;IAEA,IAAIE,QAAuB,EAAE;IAE7B,IAAIC,cAAc;IAElB,IAAIH,kBAAkB,OAAO;QAC3B,MAAMI,oBAAoBN,QAAQO,WAAW,CAACd,eAAe,EAAEe;QAE/D,IAAIC,cAAiC;QAErC,IAAIH,mBAAmB;YACrBG,cAAcH;YACdD,cAAc;QAChB;QAEAD,MAAMM,IAAI,CAAC;YACTjB;YACAkB,UAAU;YACVC,OAAO;gBACLC,MAAM;gBACNC,MAAML;YACR;YACAV;YACAgB,MAAM;QACR;IACF,OAAO;QACLX,QAAQnB,kBAAkB;YACxBQ;YACAC;YACAC;YACAC,cAAcM;YACdL;YACAE;YACAC;QACF;IACF;IAEA,MAAM,CAAC,EAAEY,KAAK,EAAEG,IAAI,EAAE,CAAC,GAAGX;IAC1B,IAAIW,MAAM;QACR,MAAMC,sBAAsB5B,mBAAmB;YAC7CwB;YACAP;YACAR;YACAC;YACAC;YACAgB;YACAf;YACAC;QACF;QAEA,IAAI,CAACe,qBAAqB;YACxB,OAAOC;QACT;QAEA,MAAM,EAAEnB,UAAUoB,iBAAiB,EAAEC,QAAQ,EAAElB,KAAKmB,cAAc,EAAE,GAAGJ;QAEvE,IAAIG,UAAU;YACZ,OAAO;gBAAEE,OAAOF;YAAS;QAC3B;QAEA,uDAAuD;QACvD,mDAAmD;QACnD,IAAIf,MAAMkB,MAAM,GAAG,GAAG;YACpB,0CAA0C;YAC1C,6BAA6B;YAC7B,MAAMC,eAAenB,MAAMoB,KAAK,CAAC,GAAGC,OAAO;YAE3C,MAAMC,2BAA2B;gBAC/BL,OAAO,CAAC;YACV;YAEA,MAAMM,oBAAoB,MAAMJ,aAAaK,MAAM,CACjD,OAAOC,YAAY,EAAEpC,gBAAgBqC,IAAI,EAAEf,MAAMgB,OAAO,EAAE,EAAEC;gBAC1D,MAAMC,mBAAmB,MAAMJ;gBAE/B,MAAMK,WAAW,AAAClC,QAAQmC,EAAE,CAAqB5B,WAAW,CAACuB,KAAK;gBAElE,+BAA+B;gBAC/B,+CAA+C;gBAC/C,IAAIE,MAAM,GAAG;oBACX,MAAMI,WAAW,MAAMF,SAASG,UAAU,CAAC;wBACzCxC;wBACAG;wBACAsC,OAAO;4BACL,CAACP,QAAQ,EAAE;gCACT,CAACb,kBAAkB,EAAEjB;4BACvB;wBACF;oBACF;oBAEA,MAAMsC,SAAS,MAAML,SAASM,IAAI,CAACJ,UAAU/C;oBAE7C,MAAMoD,MAAiB,EAAE;oBAEzBF,OAAOG,OAAO,CAAC,CAACC;wBACd,MAAMC,WAAWD,IAAIE,GAAG,CAACC,QAAQ;wBACjCL,IAAI/B,IAAI,CAACkC;wBAET,IAAI5D,MAAM+D,QAAQ,CAACC,OAAO,CAACJ,WAAW;4BACpCH,IAAI/B,IAAI,CAACiC,IAAIE,GAAG;wBAClB;oBACF;oBAEA,IAAItB,aAAaD,MAAM,KAAK,GAAG;wBAC7B,OAAO;4BACLP;4BACAM,OAAO;gCAAEoB;4BAAI;wBACf;oBACF;oBAEA,MAAMQ,cAAc1B,YAAY,CAACS,IAAI,EAAE,CAACjB,IAAI;oBAE5C,OAAO;wBACLM,OAAO;4BAAE,CAAC4B,YAAY,EAAE;gCAAER;4BAAI;wBAAE;oBAClC;gBACF;gBAEA,MAAML,WAAWH,iBAAiBZ,KAAK;gBACvC,MAAMkB,SAAS,MAAML,SAASM,IAAI,CAACJ,UAAU/C;gBAE7C,MAAMoD,MAAMF,OAAOW,GAAG,CAAC,CAACP,MAAQA,IAAIE,GAAG;gBAEvC,8BAA8B;gBAC9B,qCAAqC;gBACrC,IAAIb,IAAI,MAAMT,aAAaD,MAAM,EAAE;oBACjC,OAAO;wBACLP;wBACAM,OAAO;4BAAEoB;wBAAI;oBACf;gBACF;gBAEA,OAAO;oBACLpB,OAAO;wBACLwB,KAAK;4BAAEJ;wBAAI;oBACb;gBACF;YACF,GACAU,QAAQC,OAAO,CAAC1B;YAGlB,OAAOC;QACT;QAEA,IAAIT,qBAAqBhC,iBAAiBmE,GAAG,CAACnC,oBAAgC;YAC5E,MAAMoC,cAAcnE,WAAW,CAAC+B,kBAAkB;YAElD,IAAIN,MAAME,IAAI,KAAK,kBAAkBF,MAAME,IAAI,KAAK,UAAU;gBAC5D,IAAIyC;gBACJ,IAAIC,mBAAmB;gBACvB,IAAIF,gBAAgB,OAAO;oBACzBE,mBAAmB;gBACrB;gBAEA,MAAMjB,SAAS;oBACblB,OAAO;wBACL,CAACmC,iBAAiB,EAAE;4BAAC;gCAAE,CAACzC,KAAK,EAAE;oCAAE,CAACuC,YAAY,EAAElC;gCAAe;4BAAE;yBAAE;oBACrE;gBACF;gBAEA,IAAI,OAAOA,mBAAmB,UAAU;oBACtC,IAAIpC,MAAM+D,QAAQ,CAACC,OAAO,CAAC5B,iBAAiB;wBAC1CmB,OAAOlB,KAAK,CAACmC,iBAAiB,CAAC9C,IAAI,CAAC;4BAClC,CAACK,KAAK,EAAE;gCAAE,CAACuC,YAAY,EAAE,IAAItE,MAAM+D,QAAQ,CAAC3B;4BAAgB;wBAC9D;oBACF,OAAO;;wBACHqC,CAAAA,MAAMC,OAAO,CAAC9C,MAAM+C,UAAU,IAAI/C,MAAM+C,UAAU,GAAG;4BAAC/C,MAAM+C,UAAU;yBAAC,AAAD,EAAGjB,OAAO,CAChF,CAACiB;4BACC,MAAMC,4BACJ5D,QAAQO,WAAW,CAACoD,WAAW,EAAEnD,iBAAiB;4BAEpD,IAAIoD,2BAA2B;gCAC7BL,sBAAsB;4BACxB;wBACF;wBAGF,IAAIA,qBAAqB;4BACvBhB,OAAOlB,KAAK,CAACmC,iBAAiB,CAAC9C,IAAI,CAAC;gCAClC,CAACK,KAAK,EAAE;oCAAE,CAACuC,YAAY,EAAEO,WAAWzC;gCAAgB;4BACtD;wBACF;oBACF;gBACF;gBAEA,IAAImB,OAAOlB,KAAK,CAACmC,iBAAiB,CAAClC,MAAM,GAAG,GAAG;oBAC7C,OAAOiB;gBACT;YACF;YAEA,IAAIrB,sBAAsB,UAAU,OAAOE,mBAAmB,UAAU;gBACtE,MAAM0C,QAAQ1C,eAAe2C,KAAK,CAAC;gBAEnC,MAAMxB,SAAS;oBACblB,OAAO;wBACL2C,MAAMF,MAAMZ,GAAG,CAAC,CAACe,OAAU,CAAA;gCACzB,CAAClD,KAAK,EAAE;oCACNmD,UAAU;oCACVC,QAAQF,KAAK9D,OAAO,CAAC,uBAAuB;gCAC9C;4BACF,CAAA;oBACF;gBACF;gBAEA,OAAOoC;YACT;YAEA,yDAAyD;YACzD,wDAAwD;YACxD,IAAI,CAACe,aAAa;gBAChB,OAAO;oBACLvC;oBACAM,OAAOD;gBACT;YACF;YAEA,OAAO;gBACLL;gBACAM,OAAO;oBAAE,CAACiC,YAAY,EAAElC;gBAAe;YACzC;QACF;IACF;IACA,OAAOH;AACT"}
@@ -4,6 +4,7 @@ type Args = {
4
4
  config: SanitizedConfig;
5
5
  fields: FlattenedField[];
6
6
  locale: string;
7
+ parentIsLocalized?: boolean;
7
8
  sort: Sort;
8
9
  timestamps: boolean;
9
10
  };
@@ -12,6 +13,6 @@ export type SortArgs = {
12
13
  property: string;
13
14
  }[];
14
15
  export type SortDirection = 'asc' | 'desc';
15
- export declare const buildSortParam: ({ config, fields, locale, sort, timestamps, }: Args) => PaginateOptions["sort"];
16
+ export declare const buildSortParam: ({ config, fields, locale, parentIsLocalized, sort, timestamps, }: Args) => PaginateOptions["sort"];
16
17
  export {};
17
18
  //# sourceMappingURL=buildSortParam.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"buildSortParam.d.ts","sourceRoot":"","sources":["../../src/queries/buildSortParam.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAIpE,KAAK,IAAI,GAAG;IACV,MAAM,EAAE,eAAe,CAAA;IACvB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,IAAI,CAAA;IACV,UAAU,EAAE,OAAO,CAAA;CACpB,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;AAE1C,eAAO,MAAM,cAAc,kDAMxB,IAAI,KAAG,eAAe,CAAC,MAAM,CAsC/B,CAAA"}
1
+ {"version":3,"file":"buildSortParam.d.ts","sourceRoot":"","sources":["../../src/queries/buildSortParam.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAIpE,KAAK,IAAI,GAAG;IACV,MAAM,EAAE,eAAe,CAAA;IACvB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,IAAI,EAAE,IAAI,CAAA;IACV,UAAU,EAAE,OAAO,CAAA;CACpB,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;AAE1C,eAAO,MAAM,cAAc,qEAOxB,IAAI,KAAG,eAAe,CAAC,MAAM,CAuC/B,CAAA"}
@@ -1,5 +1,5 @@
1
1
  import { getLocalizedSortProperty } from './getLocalizedSortProperty.js';
2
- export const buildSortParam = ({ config, fields, locale, sort, timestamps })=>{
2
+ export const buildSortParam = ({ config, fields, locale, parentIsLocalized, sort, timestamps })=>{
3
3
  if (!sort) {
4
4
  if (timestamps) {
5
5
  sort = '-createdAt';
@@ -30,6 +30,7 @@ export const buildSortParam = ({ config, fields, locale, sort, timestamps })=>{
30
30
  config,
31
31
  fields,
32
32
  locale,
33
+ parentIsLocalized,
33
34
  segments: sortProperty.split('.')
34
35
  });
35
36
  acc[localizedProperty] = sortDirection;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/queries/buildSortParam.ts"],"sourcesContent":["import type { PaginateOptions } from 'mongoose'\nimport type { FlattenedField, SanitizedConfig, Sort } from 'payload'\n\nimport { getLocalizedSortProperty } from './getLocalizedSortProperty.js'\n\ntype Args = {\n config: SanitizedConfig\n fields: FlattenedField[]\n locale: string\n sort: Sort\n timestamps: boolean\n}\n\nexport type SortArgs = {\n direction: SortDirection\n property: string\n}[]\n\nexport type SortDirection = 'asc' | 'desc'\n\nexport const buildSortParam = ({\n config,\n fields,\n locale,\n sort,\n timestamps,\n}: Args): PaginateOptions['sort'] => {\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 const sorting = sort.reduce<PaginateOptions['sort']>((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 const localizedProperty = getLocalizedSortProperty({\n config,\n fields,\n locale,\n segments: sortProperty.split('.'),\n })\n acc[localizedProperty] = sortDirection\n return acc\n }, {})\n\n return sorting\n}\n"],"names":["getLocalizedSortProperty","buildSortParam","config","fields","locale","sort","timestamps","sorting","reduce","acc","item","sortProperty","sortDirection","indexOf","substring","localizedProperty","segments","split"],"mappings":"AAGA,SAASA,wBAAwB,QAAQ,gCAA+B;AAiBxE,OAAO,MAAMC,iBAAiB,CAAC,EAC7BC,MAAM,EACNC,MAAM,EACNC,MAAM,EACNC,IAAI,EACJC,UAAU,EACL;IACL,IAAI,CAACD,MAAM;QACT,IAAIC,YAAY;YACdD,OAAO;QACT,OAAO;YACLA,OAAO;QACT;IACF;IAEA,IAAI,OAAOA,SAAS,UAAU;QAC5BA,OAAO;YAACA;SAAK;IACf;IAEA,MAAME,UAAUF,KAAKG,MAAM,CAA0B,CAACC,KAAKC;QACzD,IAAIC;QACJ,IAAIC;QACJ,IAAIF,KAAKG,OAAO,CAAC,SAAS,GAAG;YAC3BF,eAAeD,KAAKI,SAAS,CAAC;YAC9BF,gBAAgB;QAClB,OAAO;YACLD,eAAeD;YACfE,gBAAgB;QAClB;QACA,IAAID,iBAAiB,MAAM;YACzBF,GAAG,CAAC,MAAM,GAAGG;YACb,OAAOH;QACT;QACA,MAAMM,oBAAoBf,yBAAyB;YACjDE;YACAC;YACAC;YACAY,UAAUL,aAAaM,KAAK,CAAC;QAC/B;QACAR,GAAG,CAACM,kBAAkB,GAAGH;QACzB,OAAOH;IACT,GAAG,CAAC;IAEJ,OAAOF;AACT,EAAC"}
1
+ {"version":3,"sources":["../../src/queries/buildSortParam.ts"],"sourcesContent":["import type { PaginateOptions } from 'mongoose'\nimport type { FlattenedField, SanitizedConfig, Sort } from 'payload'\n\nimport { getLocalizedSortProperty } from './getLocalizedSortProperty.js'\n\ntype Args = {\n config: SanitizedConfig\n fields: FlattenedField[]\n locale: string\n parentIsLocalized?: boolean\n sort: Sort\n timestamps: boolean\n}\n\nexport type SortArgs = {\n direction: SortDirection\n property: string\n}[]\n\nexport type SortDirection = 'asc' | 'desc'\n\nexport const buildSortParam = ({\n config,\n fields,\n locale,\n parentIsLocalized,\n sort,\n timestamps,\n}: Args): PaginateOptions['sort'] => {\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 const sorting = sort.reduce<PaginateOptions['sort']>((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 const localizedProperty = getLocalizedSortProperty({\n config,\n fields,\n locale,\n parentIsLocalized,\n segments: sortProperty.split('.'),\n })\n acc[localizedProperty] = sortDirection\n return acc\n }, {})\n\n return sorting\n}\n"],"names":["getLocalizedSortProperty","buildSortParam","config","fields","locale","parentIsLocalized","sort","timestamps","sorting","reduce","acc","item","sortProperty","sortDirection","indexOf","substring","localizedProperty","segments","split"],"mappings":"AAGA,SAASA,wBAAwB,QAAQ,gCAA+B;AAkBxE,OAAO,MAAMC,iBAAiB,CAAC,EAC7BC,MAAM,EACNC,MAAM,EACNC,MAAM,EACNC,iBAAiB,EACjBC,IAAI,EACJC,UAAU,EACL;IACL,IAAI,CAACD,MAAM;QACT,IAAIC,YAAY;YACdD,OAAO;QACT,OAAO;YACLA,OAAO;QACT;IACF;IAEA,IAAI,OAAOA,SAAS,UAAU;QAC5BA,OAAO;YAACA;SAAK;IACf;IAEA,MAAME,UAAUF,KAAKG,MAAM,CAA0B,CAACC,KAAKC;QACzD,IAAIC;QACJ,IAAIC;QACJ,IAAIF,KAAKG,OAAO,CAAC,SAAS,GAAG;YAC3BF,eAAeD,KAAKI,SAAS,CAAC;YAC9BF,gBAAgB;QAClB,OAAO;YACLD,eAAeD;YACfE,gBAAgB;QAClB;QACA,IAAID,iBAAiB,MAAM;YACzBF,GAAG,CAAC,MAAM,GAAGG;YACb,OAAOH;QACT;QACA,MAAMM,oBAAoBhB,yBAAyB;YACjDE;YACAC;YACAC;YACAC;YACAY,UAAUL,aAAaM,KAAK,CAAC;QAC/B;QACAR,GAAG,CAACM,kBAAkB,GAAGH;QACzB,OAAOH;IACT,GAAG,CAAC;IAEJ,OAAOF;AACT,EAAC"}
@@ -3,9 +3,10 @@ type Args = {
3
3
  config: SanitizedConfig;
4
4
  fields: FlattenedField[];
5
5
  locale: string;
6
+ parentIsLocalized: boolean;
6
7
  result?: string;
7
8
  segments: string[];
8
9
  };
9
- export declare const getLocalizedSortProperty: ({ config, fields, locale, result: incomingResult, segments: incomingSegments, }: Args) => string;
10
+ export declare const getLocalizedSortProperty: ({ config, fields, locale, parentIsLocalized, result: incomingResult, segments: incomingSegments, }: Args) => string;
10
11
  export {};
11
12
  //# sourceMappingURL=getLocalizedSortProperty.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getLocalizedSortProperty.d.ts","sourceRoot":"","sources":["../../src/queries/getLocalizedSortProperty.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAI9D,KAAK,IAAI,GAAG;IACV,MAAM,EAAE,eAAe,CAAA;IACvB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB,CAAA;AAED,eAAO,MAAM,wBAAwB,oFAMlC,IAAI,KAAG,MAqFT,CAAA"}
1
+ {"version":3,"file":"getLocalizedSortProperty.d.ts","sourceRoot":"","sources":["../../src/queries/getLocalizedSortProperty.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAI9D,KAAK,IAAI,GAAG;IACV,MAAM,EAAE,eAAe,CAAA;IACvB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,iBAAiB,EAAE,OAAO,CAAA;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB,CAAA;AAED,eAAO,MAAM,wBAAwB,uGAOlC,IAAI,KAAG,MA0FT,CAAA"}
@@ -1,5 +1,5 @@
1
- import { fieldAffectsData, fieldIsPresentationalOnly } from 'payload/shared';
2
- export const getLocalizedSortProperty = ({ config, fields, locale, result: incomingResult, segments: incomingSegments })=>{
1
+ import { fieldAffectsData, fieldIsPresentationalOnly, fieldShouldBeLocalized } from 'payload/shared';
2
+ export const getLocalizedSortProperty = ({ config, fields, locale, parentIsLocalized, result: incomingResult, segments: incomingSegments })=>{
3
3
  // If localization is not enabled, accept exactly
4
4
  // what is sent in
5
5
  if (!config.localization) {
@@ -14,11 +14,15 @@ export const getLocalizedSortProperty = ({ config, fields, locale, result: incom
14
14
  const matchedField = fields.find((field)=>fieldAffectsData(field) && field.name === firstSegment);
15
15
  if (matchedField && !fieldIsPresentationalOnly(matchedField)) {
16
16
  let nextFields;
17
+ let nextParentIsLocalized = parentIsLocalized;
17
18
  const remainingSegments = [
18
19
  ...segments
19
20
  ];
20
21
  let localizedSegment = matchedField.name;
21
- if (matchedField.localized) {
22
+ if (fieldShouldBeLocalized({
23
+ field: matchedField,
24
+ parentIsLocalized
25
+ })) {
22
26
  // Check to see if next segment is a locale
23
27
  if (segments.length > 0) {
24
28
  const nextSegmentIsLocale = config.localization.localeCodes.includes(remainingSegments[0]);
@@ -36,6 +40,9 @@ export const getLocalizedSortProperty = ({ config, fields, locale, result: incom
36
40
  // If there are subfields, pass them through
37
41
  if (matchedField.type === 'tab' || matchedField.type === 'group' || matchedField.type === 'array') {
38
42
  nextFields = matchedField.flattenedFields;
43
+ if (!nextParentIsLocalized) {
44
+ nextParentIsLocalized = matchedField.localized;
45
+ }
39
46
  }
40
47
  if (matchedField.type === 'blocks') {
41
48
  nextFields = (matchedField.blockReferences ?? matchedField.blocks).reduce((flattenedBlockFields, _block)=>{
@@ -53,6 +60,7 @@ export const getLocalizedSortProperty = ({ config, fields, locale, result: incom
53
60
  config,
54
61
  fields: nextFields,
55
62
  locale,
63
+ parentIsLocalized: nextParentIsLocalized,
56
64
  result,
57
65
  segments: remainingSegments
58
66
  });