@payloadcms/db-mongodb 3.38.0-canary.7 → 3.38.0-canary.9

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.
@@ -219,34 +219,46 @@ const email = (field, schema, payload, buildSchemaOptions, parentIsLocalized)=>{
219
219
  });
220
220
  };
221
221
  const group = (field, schema, payload, buildSchemaOptions, parentIsLocalized)=>{
222
- const formattedBaseSchema = formatBaseSchema({
223
- buildSchemaOptions,
224
- field,
225
- parentIsLocalized
226
- });
227
- // carry indexSortableFields through to versions if drafts enabled
228
- const indexSortableFields = buildSchemaOptions.indexSortableFields && field.name === 'version' && buildSchemaOptions.draftsEnabled;
229
- const baseSchema = {
230
- ...formattedBaseSchema,
231
- type: buildSchema({
232
- buildSchemaOptions: {
233
- disableUnique: buildSchemaOptions.disableUnique,
234
- draftsEnabled: buildSchemaOptions.draftsEnabled,
235
- indexSortableFields,
236
- options: {
237
- _id: false,
238
- id: false,
239
- minimize: false
240
- }
241
- },
242
- configFields: field.fields,
243
- parentIsLocalized: parentIsLocalized || field.localized,
244
- payload
245
- })
246
- };
247
- schema.add({
248
- [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized)
249
- });
222
+ if (fieldAffectsData(field)) {
223
+ const formattedBaseSchema = formatBaseSchema({
224
+ buildSchemaOptions,
225
+ field,
226
+ parentIsLocalized
227
+ });
228
+ // carry indexSortableFields through to versions if drafts enabled
229
+ const indexSortableFields = buildSchemaOptions.indexSortableFields && field.name === 'version' && buildSchemaOptions.draftsEnabled;
230
+ const baseSchema = {
231
+ ...formattedBaseSchema,
232
+ type: buildSchema({
233
+ buildSchemaOptions: {
234
+ disableUnique: buildSchemaOptions.disableUnique,
235
+ draftsEnabled: buildSchemaOptions.draftsEnabled,
236
+ indexSortableFields,
237
+ options: {
238
+ _id: false,
239
+ id: false,
240
+ minimize: false
241
+ }
242
+ },
243
+ configFields: field.fields,
244
+ parentIsLocalized: parentIsLocalized || field.localized,
245
+ payload
246
+ })
247
+ };
248
+ schema.add({
249
+ [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized)
250
+ });
251
+ } else {
252
+ field.fields.forEach((subField)=>{
253
+ if (fieldIsVirtual(subField)) {
254
+ return;
255
+ }
256
+ const addFieldSchema = getSchemaGenerator(subField.type);
257
+ if (addFieldSchema) {
258
+ addFieldSchema(subField, schema, payload, buildSchemaOptions, (parentIsLocalized || field.localized) ?? false);
259
+ }
260
+ });
261
+ }
250
262
  };
251
263
  const json = (field, schema, payload, buildSchemaOptions, parentIsLocalized)=>{
252
264
  const baseSchema = {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/models/buildSchema.ts"],"sourcesContent":["import type { IndexOptions, Schema, SchemaOptions, SchemaTypeOptions } from 'mongoose'\n\nimport mongoose from 'mongoose'\nimport {\n type ArrayField,\n type BlocksField,\n type CheckboxField,\n type CodeField,\n type CollapsibleField,\n type DateField,\n type EmailField,\n type Field,\n type FieldAffectingData,\n type GroupField,\n type JSONField,\n type NonPresentationalField,\n type NumberField,\n type Payload,\n type PointField,\n type RadioField,\n type RelationshipField,\n type RichTextField,\n type RowField,\n type SanitizedCompoundIndex,\n type SanitizedLocalizationConfig,\n type SelectField,\n type Tab,\n type TabsField,\n type TextareaField,\n type TextField,\n type UploadField,\n} from 'payload'\nimport {\n fieldAffectsData,\n fieldIsPresentationalOnly,\n fieldIsVirtual,\n fieldShouldBeLocalized,\n tabHasName,\n} from 'payload/shared'\n\nexport type BuildSchemaOptions = {\n allowIDField?: boolean\n disableUnique?: boolean\n draftsEnabled?: boolean\n indexSortableFields?: boolean\n options?: SchemaOptions\n}\n\ntype FieldSchemaGenerator<T extends Field = Field> = (\n field: T,\n schema: Schema,\n config: Payload,\n buildSchemaOptions: BuildSchemaOptions,\n parentIsLocalized: boolean,\n) => void\n\n/**\n * get a field's defaultValue only if defined and not dynamic so that it can be set on the field schema\n * @param field\n */\nconst formatDefaultValue = (field: FieldAffectingData) =>\n typeof field.defaultValue !== 'undefined' && typeof field.defaultValue !== 'function'\n ? field.defaultValue\n : undefined\n\nconst formatBaseSchema = ({\n buildSchemaOptions,\n field,\n parentIsLocalized,\n}: {\n buildSchemaOptions: BuildSchemaOptions\n field: FieldAffectingData\n parentIsLocalized: boolean\n}) => {\n const { disableUnique, draftsEnabled, indexSortableFields } = buildSchemaOptions\n const schema: SchemaTypeOptions<unknown> = {\n default: formatDefaultValue(field),\n index: field.index || (!disableUnique && field.unique) || indexSortableFields || false,\n required: false,\n unique: (!disableUnique && field.unique) || false,\n }\n\n if (\n schema.unique &&\n (fieldShouldBeLocalized({ field, parentIsLocalized }) ||\n draftsEnabled ||\n (fieldAffectsData(field) &&\n field.type !== 'group' &&\n field.type !== 'tab' &&\n field.required !== true))\n ) {\n schema.sparse = true\n }\n\n if (field.hidden) {\n schema.hidden = true\n }\n\n return schema\n}\n\nconst localizeSchema = (\n entity: NonPresentationalField | Tab,\n schema: SchemaTypeOptions<any>,\n localization: false | SanitizedLocalizationConfig,\n parentIsLocalized: boolean,\n) => {\n if (\n fieldShouldBeLocalized({ field: entity, parentIsLocalized }) &&\n localization &&\n Array.isArray(localization.locales)\n ) {\n return {\n type: localization.localeCodes.reduce(\n (localeSchema, locale) => ({\n ...localeSchema,\n [locale]: schema,\n }),\n {\n _id: false,\n },\n ),\n localized: true,\n }\n }\n return schema\n}\n\nexport const buildSchema = (args: {\n buildSchemaOptions: BuildSchemaOptions\n compoundIndexes?: SanitizedCompoundIndex[]\n configFields: Field[]\n parentIsLocalized?: boolean\n payload: Payload\n}): Schema => {\n const { buildSchemaOptions = {}, configFields, parentIsLocalized, payload } = args\n const { allowIDField, options } = buildSchemaOptions\n let fields = {}\n\n let schemaFields = configFields\n\n if (!allowIDField) {\n const idField = schemaFields.find((field) => fieldAffectsData(field) && field.name === 'id')\n if (idField) {\n fields = {\n _id: idField.type === 'number' ? Number : String,\n }\n schemaFields = schemaFields.filter(\n (field) => !(fieldAffectsData(field) && field.name === 'id'),\n )\n }\n }\n\n const schema = new mongoose.Schema(fields, options as any)\n\n schemaFields.forEach((field) => {\n if (fieldIsVirtual(field)) {\n return\n }\n\n if (!fieldIsPresentationalOnly(field)) {\n const addFieldSchema = getSchemaGenerator(field.type)\n\n if (addFieldSchema) {\n addFieldSchema(field, schema, payload, buildSchemaOptions, parentIsLocalized ?? false)\n }\n }\n })\n\n if (args.compoundIndexes) {\n for (const index of args.compoundIndexes) {\n const indexDefinition: Record<string, 1> = {}\n\n for (const field of index.fields) {\n if (field.pathHasLocalized && payload.config.localization) {\n for (const locale of payload.config.localization.locales) {\n indexDefinition[field.localizedPath.replace('<locale>', locale.code)] = 1\n }\n } else {\n indexDefinition[field.path] = 1\n }\n }\n\n schema.index(indexDefinition, {\n unique: args.buildSchemaOptions.disableUnique ? false : index.unique,\n })\n }\n }\n\n return schema\n}\n\nconst array: FieldSchemaGenerator<ArrayField> = (\n field: ArrayField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n) => {\n const baseSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: [\n buildSchema({\n buildSchemaOptions: {\n allowIDField: true,\n disableUnique: buildSchemaOptions.disableUnique,\n draftsEnabled: buildSchemaOptions.draftsEnabled,\n options: {\n _id: false,\n id: false,\n minimize: false,\n },\n },\n configFields: field.fields,\n parentIsLocalized: parentIsLocalized || field.localized,\n payload,\n }),\n ],\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst blocks: FieldSchemaGenerator<BlocksField> = (\n field: BlocksField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const fieldSchema: SchemaTypeOptions<any> = {\n type: [new mongoose.Schema({}, { _id: false, discriminatorKey: 'blockType' })],\n }\n\n schema.add({\n [field.name]: localizeSchema(\n field,\n fieldSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\n })\n ;(field.blockReferences ?? field.blocks).forEach((blockItem) => {\n const blockSchema = new mongoose.Schema({}, { _id: false, id: false })\n\n const block = typeof blockItem === 'string' ? payload.blocks[blockItem] : blockItem\n\n if (!block) {\n return\n }\n\n block.fields.forEach((blockField) => {\n const addFieldSchema = getSchemaGenerator(blockField.type)\n\n if (addFieldSchema) {\n addFieldSchema(\n blockField,\n blockSchema,\n payload,\n buildSchemaOptions,\n (parentIsLocalized || field.localized) ?? false,\n )\n }\n })\n\n if (fieldShouldBeLocalized({ field, parentIsLocalized }) && payload.config.localization) {\n payload.config.localization.localeCodes.forEach((localeCode) => {\n // @ts-expect-error Possible incorrect typing in mongoose types, this works\n schema.path(`${field.name}.${localeCode}`).discriminator(block.slug, blockSchema)\n })\n } else {\n // @ts-expect-error Possible incorrect typing in mongoose types, this works\n schema.path(field.name).discriminator(block.slug, blockSchema)\n }\n })\n}\n\nconst checkbox: FieldSchemaGenerator<CheckboxField> = (\n field: CheckboxField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: Boolean,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst code: FieldSchemaGenerator<CodeField> = (\n field: CodeField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: String,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst collapsible: FieldSchemaGenerator<CollapsibleField> = (\n field: CollapsibleField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n field.fields.forEach((subField: Field) => {\n if (fieldIsVirtual(subField)) {\n return\n }\n\n const addFieldSchema = getSchemaGenerator(subField.type)\n\n if (addFieldSchema) {\n addFieldSchema(subField, schema, payload, buildSchemaOptions, parentIsLocalized)\n }\n })\n}\n\nconst date: FieldSchemaGenerator<DateField> = (\n field: DateField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: Date,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst email: FieldSchemaGenerator<EmailField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: String,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst group: FieldSchemaGenerator<GroupField> = (\n field: GroupField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const formattedBaseSchema = formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized })\n\n // carry indexSortableFields through to versions if drafts enabled\n const indexSortableFields =\n buildSchemaOptions.indexSortableFields &&\n field.name === 'version' &&\n buildSchemaOptions.draftsEnabled\n\n const baseSchema: SchemaTypeOptions<any> = {\n ...formattedBaseSchema,\n type: buildSchema({\n buildSchemaOptions: {\n disableUnique: buildSchemaOptions.disableUnique,\n draftsEnabled: buildSchemaOptions.draftsEnabled,\n indexSortableFields,\n options: {\n _id: false,\n id: false,\n minimize: false,\n },\n },\n configFields: field.fields,\n parentIsLocalized: parentIsLocalized || field.localized,\n payload,\n }),\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst json: FieldSchemaGenerator<JSONField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: mongoose.Schema.Types.Mixed,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst number: FieldSchemaGenerator<NumberField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: field.hasMany ? [Number] : Number,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst point: FieldSchemaGenerator<PointField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema: SchemaTypeOptions<unknown> = {\n type: {\n type: String,\n enum: ['Point'],\n ...(typeof field.defaultValue !== 'undefined' && {\n default: 'Point',\n }),\n },\n coordinates: {\n type: [Number],\n default: formatDefaultValue(field),\n required: false,\n },\n }\n\n if (\n buildSchemaOptions.disableUnique &&\n field.unique &&\n fieldShouldBeLocalized({ field, parentIsLocalized })\n ) {\n baseSchema.coordinates.sparse = true\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n\n if (field.index === true || field.index === undefined) {\n const indexOptions: IndexOptions = {}\n if (!buildSchemaOptions.disableUnique && field.unique) {\n indexOptions.sparse = true\n indexOptions.unique = true\n }\n if (fieldShouldBeLocalized({ field, parentIsLocalized }) && payload.config.localization) {\n payload.config.localization.locales.forEach((locale) => {\n schema.index({ [`${field.name}.${locale.code}`]: '2dsphere' }, indexOptions)\n })\n } else {\n schema.index({ [field.name]: '2dsphere' }, indexOptions)\n }\n }\n}\n\nconst radio: FieldSchemaGenerator<RadioField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: String,\n enum: field.options.map((option) => {\n if (typeof option === 'object') {\n return option.value\n }\n return option\n }),\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst relationship: FieldSchemaGenerator<RelationshipField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n) => {\n const hasManyRelations = Array.isArray(field.relationTo)\n let schemaToReturn: { [key: string]: any } = {}\n\n const valueType = getRelationshipValueType(field, payload)\n\n if (fieldShouldBeLocalized({ field, parentIsLocalized }) && payload.config.localization) {\n schemaToReturn = {\n _id: false,\n type: payload.config.localization.localeCodes.reduce((locales, locale) => {\n let localeSchema: { [key: string]: any } = {}\n\n if (hasManyRelations) {\n localeSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n _id: false,\n type: mongoose.Schema.Types.Mixed,\n relationTo: { type: String, enum: field.relationTo },\n value: {\n type: valueType,\n refPath: `${field.name}.${locale}.relationTo`,\n },\n }\n } else {\n localeSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: valueType,\n ref: field.relationTo,\n }\n }\n\n return {\n ...locales,\n [locale]: field.hasMany\n ? { type: [localeSchema], default: formatDefaultValue(field) }\n : localeSchema,\n }\n }, {}),\n localized: true,\n }\n } else if (hasManyRelations) {\n schemaToReturn = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n _id: false,\n type: mongoose.Schema.Types.Mixed,\n relationTo: { type: String, enum: field.relationTo },\n value: {\n type: valueType,\n refPath: `${field.name}.relationTo`,\n },\n }\n\n if (field.hasMany) {\n schemaToReturn = {\n type: [schemaToReturn],\n default: formatDefaultValue(field),\n }\n }\n } else {\n schemaToReturn = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: valueType,\n ref: field.relationTo,\n }\n\n if (field.hasMany) {\n schemaToReturn = {\n type: [schemaToReturn],\n default: formatDefaultValue(field),\n }\n }\n }\n\n schema.add({\n [field.name]: schemaToReturn,\n })\n}\n\nconst richText: FieldSchemaGenerator<RichTextField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: mongoose.Schema.Types.Mixed,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst row: FieldSchemaGenerator<RowField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n field.fields.forEach((subField: Field) => {\n if (fieldIsVirtual(subField)) {\n return\n }\n\n const addFieldSchema = getSchemaGenerator(subField.type)\n\n if (addFieldSchema) {\n addFieldSchema(subField, schema, payload, buildSchemaOptions, parentIsLocalized)\n }\n })\n}\n\nconst select: FieldSchemaGenerator<SelectField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: String,\n enum: field.options.map((option) => {\n if (typeof option === 'object') {\n return option.value\n }\n return option\n }),\n }\n\n if (buildSchemaOptions.draftsEnabled || !field.required) {\n ;(baseSchema.enum as unknown[]).push(null)\n }\n\n schema.add({\n [field.name]: localizeSchema(\n field,\n field.hasMany ? [baseSchema] : baseSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\n })\n}\n\nconst tabs: FieldSchemaGenerator<TabsField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n field.tabs.forEach((tab) => {\n if (tabHasName(tab)) {\n if (fieldIsVirtual(tab)) {\n return\n }\n const baseSchema = {\n type: buildSchema({\n buildSchemaOptions: {\n disableUnique: buildSchemaOptions.disableUnique,\n draftsEnabled: buildSchemaOptions.draftsEnabled,\n options: {\n _id: false,\n id: false,\n minimize: false,\n },\n },\n configFields: tab.fields,\n parentIsLocalized: parentIsLocalized || tab.localized,\n payload,\n }),\n }\n\n schema.add({\n [tab.name]: localizeSchema(tab, baseSchema, payload.config.localization, parentIsLocalized),\n })\n } else {\n tab.fields.forEach((subField: Field) => {\n if (fieldIsVirtual(subField)) {\n return\n }\n const addFieldSchema = getSchemaGenerator(subField.type)\n\n if (addFieldSchema) {\n addFieldSchema(\n subField,\n schema,\n payload,\n buildSchemaOptions,\n (parentIsLocalized || tab.localized) ?? false,\n )\n }\n })\n }\n })\n}\n\nconst text: FieldSchemaGenerator<TextField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: field.hasMany ? [String] : String,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst textarea: FieldSchemaGenerator<TextareaField> = (\n field: TextareaField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: String,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst upload: FieldSchemaGenerator<UploadField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const hasManyRelations = Array.isArray(field.relationTo)\n let schemaToReturn: { [key: string]: any } = {}\n\n const valueType = getRelationshipValueType(field, payload)\n\n if (fieldShouldBeLocalized({ field, parentIsLocalized }) && payload.config.localization) {\n schemaToReturn = {\n _id: false,\n type: payload.config.localization.localeCodes.reduce((locales, locale) => {\n let localeSchema: { [key: string]: any } = {}\n\n if (hasManyRelations) {\n localeSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n _id: false,\n type: mongoose.Schema.Types.Mixed,\n relationTo: { type: String, enum: field.relationTo },\n value: {\n type: valueType,\n refPath: `${field.name}.${locale}.relationTo`,\n },\n }\n } else {\n localeSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: valueType,\n ref: field.relationTo,\n }\n }\n\n return {\n ...locales,\n [locale]: field.hasMany\n ? { type: [localeSchema], default: formatDefaultValue(field) }\n : localeSchema,\n }\n }, {}),\n localized: true,\n }\n } else if (hasManyRelations) {\n schemaToReturn = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n _id: false,\n type: mongoose.Schema.Types.Mixed,\n relationTo: { type: String, enum: field.relationTo },\n value: {\n type: valueType,\n refPath: `${field.name}.relationTo`,\n },\n }\n\n if (field.hasMany) {\n schemaToReturn = {\n type: [schemaToReturn],\n default: formatDefaultValue(field),\n }\n }\n } else {\n schemaToReturn = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: valueType,\n ref: field.relationTo,\n }\n\n if (field.hasMany) {\n schemaToReturn = {\n type: [schemaToReturn],\n default: formatDefaultValue(field),\n }\n }\n }\n\n schema.add({\n [field.name]: schemaToReturn,\n })\n}\n\nconst getSchemaGenerator = (fieldType: string): FieldSchemaGenerator | null => {\n if (fieldType in fieldToSchemaMap) {\n return fieldToSchemaMap[fieldType as keyof typeof fieldToSchemaMap] as FieldSchemaGenerator\n }\n\n return null\n}\n\nconst fieldToSchemaMap = {\n array,\n blocks,\n checkbox,\n code,\n collapsible,\n date,\n email,\n group,\n json,\n number,\n point,\n radio,\n relationship,\n richText,\n row,\n select,\n tabs,\n text,\n textarea,\n upload,\n}\n\nconst getRelationshipValueType = (field: RelationshipField | UploadField, payload: Payload) => {\n if (typeof field.relationTo === 'string') {\n const customIDType = payload.collections[field.relationTo]?.customIDType\n\n if (!customIDType) {\n return mongoose.Schema.Types.ObjectId\n }\n\n if (customIDType === 'number') {\n return mongoose.Schema.Types.Number\n }\n\n return mongoose.Schema.Types.String\n }\n\n // has custom id relationTo\n if (\n field.relationTo.some((relationTo) => {\n return !!payload.collections[relationTo]?.customIDType\n })\n ) {\n return mongoose.Schema.Types.Mixed\n }\n\n return mongoose.Schema.Types.ObjectId\n}\n"],"names":["mongoose","fieldAffectsData","fieldIsPresentationalOnly","fieldIsVirtual","fieldShouldBeLocalized","tabHasName","formatDefaultValue","field","defaultValue","undefined","formatBaseSchema","buildSchemaOptions","parentIsLocalized","disableUnique","draftsEnabled","indexSortableFields","schema","default","index","unique","required","type","sparse","hidden","localizeSchema","entity","localization","Array","isArray","locales","localeCodes","reduce","localeSchema","locale","_id","localized","buildSchema","args","configFields","payload","allowIDField","options","fields","schemaFields","idField","find","name","Number","String","filter","Schema","forEach","addFieldSchema","getSchemaGenerator","compoundIndexes","indexDefinition","pathHasLocalized","config","localizedPath","replace","code","path","array","baseSchema","id","minimize","add","blocks","fieldSchema","discriminatorKey","blockReferences","blockItem","blockSchema","block","blockField","localeCode","discriminator","slug","checkbox","Boolean","collapsible","subField","date","Date","email","group","formattedBaseSchema","json","Types","Mixed","number","hasMany","point","enum","coordinates","indexOptions","radio","map","option","value","relationship","hasManyRelations","relationTo","schemaToReturn","valueType","getRelationshipValueType","refPath","ref","richText","row","select","push","tabs","tab","text","textarea","upload","fieldType","fieldToSchemaMap","customIDType","collections","ObjectId","some"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/models/buildSchema.ts"],"sourcesContent":["import type { IndexOptions, Schema, SchemaOptions, SchemaTypeOptions } from 'mongoose'\n\nimport mongoose from 'mongoose'\nimport {\n type ArrayField,\n type BlocksField,\n type CheckboxField,\n type CodeField,\n type CollapsibleField,\n type DateField,\n type EmailField,\n type Field,\n type FieldAffectingData,\n type GroupField,\n type JSONField,\n type NonPresentationalField,\n type NumberField,\n type Payload,\n type PointField,\n type RadioField,\n type RelationshipField,\n type RichTextField,\n type RowField,\n type SanitizedCompoundIndex,\n type SanitizedLocalizationConfig,\n type SelectField,\n type Tab,\n type TabsField,\n type TextareaField,\n type TextField,\n type UploadField,\n} from 'payload'\nimport {\n fieldAffectsData,\n fieldIsPresentationalOnly,\n fieldIsVirtual,\n fieldShouldBeLocalized,\n tabHasName,\n} from 'payload/shared'\n\nexport type BuildSchemaOptions = {\n allowIDField?: boolean\n disableUnique?: boolean\n draftsEnabled?: boolean\n indexSortableFields?: boolean\n options?: SchemaOptions\n}\n\ntype FieldSchemaGenerator<T extends Field = Field> = (\n field: T,\n schema: Schema,\n config: Payload,\n buildSchemaOptions: BuildSchemaOptions,\n parentIsLocalized: boolean,\n) => void\n\n/**\n * get a field's defaultValue only if defined and not dynamic so that it can be set on the field schema\n * @param field\n */\nconst formatDefaultValue = (field: FieldAffectingData) =>\n typeof field.defaultValue !== 'undefined' && typeof field.defaultValue !== 'function'\n ? field.defaultValue\n : undefined\n\nconst formatBaseSchema = ({\n buildSchemaOptions,\n field,\n parentIsLocalized,\n}: {\n buildSchemaOptions: BuildSchemaOptions\n field: FieldAffectingData\n parentIsLocalized: boolean\n}) => {\n const { disableUnique, draftsEnabled, indexSortableFields } = buildSchemaOptions\n const schema: SchemaTypeOptions<unknown> = {\n default: formatDefaultValue(field),\n index: field.index || (!disableUnique && field.unique) || indexSortableFields || false,\n required: false,\n unique: (!disableUnique && field.unique) || false,\n }\n\n if (\n schema.unique &&\n (fieldShouldBeLocalized({ field, parentIsLocalized }) ||\n draftsEnabled ||\n (fieldAffectsData(field) &&\n field.type !== 'group' &&\n field.type !== 'tab' &&\n field.required !== true))\n ) {\n schema.sparse = true\n }\n\n if (field.hidden) {\n schema.hidden = true\n }\n\n return schema\n}\n\nconst localizeSchema = (\n entity: NonPresentationalField | Tab,\n schema: SchemaTypeOptions<any>,\n localization: false | SanitizedLocalizationConfig,\n parentIsLocalized: boolean,\n) => {\n if (\n fieldShouldBeLocalized({ field: entity, parentIsLocalized }) &&\n localization &&\n Array.isArray(localization.locales)\n ) {\n return {\n type: localization.localeCodes.reduce(\n (localeSchema, locale) => ({\n ...localeSchema,\n [locale]: schema,\n }),\n {\n _id: false,\n },\n ),\n localized: true,\n }\n }\n return schema\n}\n\nexport const buildSchema = (args: {\n buildSchemaOptions: BuildSchemaOptions\n compoundIndexes?: SanitizedCompoundIndex[]\n configFields: Field[]\n parentIsLocalized?: boolean\n payload: Payload\n}): Schema => {\n const { buildSchemaOptions = {}, configFields, parentIsLocalized, payload } = args\n const { allowIDField, options } = buildSchemaOptions\n let fields = {}\n\n let schemaFields = configFields\n\n if (!allowIDField) {\n const idField = schemaFields.find((field) => fieldAffectsData(field) && field.name === 'id')\n if (idField) {\n fields = {\n _id: idField.type === 'number' ? Number : String,\n }\n schemaFields = schemaFields.filter(\n (field) => !(fieldAffectsData(field) && field.name === 'id'),\n )\n }\n }\n\n const schema = new mongoose.Schema(fields, options as any)\n\n schemaFields.forEach((field) => {\n if (fieldIsVirtual(field)) {\n return\n }\n\n if (!fieldIsPresentationalOnly(field)) {\n const addFieldSchema = getSchemaGenerator(field.type)\n\n if (addFieldSchema) {\n addFieldSchema(field, schema, payload, buildSchemaOptions, parentIsLocalized ?? false)\n }\n }\n })\n\n if (args.compoundIndexes) {\n for (const index of args.compoundIndexes) {\n const indexDefinition: Record<string, 1> = {}\n\n for (const field of index.fields) {\n if (field.pathHasLocalized && payload.config.localization) {\n for (const locale of payload.config.localization.locales) {\n indexDefinition[field.localizedPath.replace('<locale>', locale.code)] = 1\n }\n } else {\n indexDefinition[field.path] = 1\n }\n }\n\n schema.index(indexDefinition, {\n unique: args.buildSchemaOptions.disableUnique ? false : index.unique,\n })\n }\n }\n\n return schema\n}\n\nconst array: FieldSchemaGenerator<ArrayField> = (\n field: ArrayField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n) => {\n const baseSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: [\n buildSchema({\n buildSchemaOptions: {\n allowIDField: true,\n disableUnique: buildSchemaOptions.disableUnique,\n draftsEnabled: buildSchemaOptions.draftsEnabled,\n options: {\n _id: false,\n id: false,\n minimize: false,\n },\n },\n configFields: field.fields,\n parentIsLocalized: parentIsLocalized || field.localized,\n payload,\n }),\n ],\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst blocks: FieldSchemaGenerator<BlocksField> = (\n field: BlocksField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const fieldSchema: SchemaTypeOptions<any> = {\n type: [new mongoose.Schema({}, { _id: false, discriminatorKey: 'blockType' })],\n }\n\n schema.add({\n [field.name]: localizeSchema(\n field,\n fieldSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\n })\n ;(field.blockReferences ?? field.blocks).forEach((blockItem) => {\n const blockSchema = new mongoose.Schema({}, { _id: false, id: false })\n\n const block = typeof blockItem === 'string' ? payload.blocks[blockItem] : blockItem\n\n if (!block) {\n return\n }\n\n block.fields.forEach((blockField) => {\n const addFieldSchema = getSchemaGenerator(blockField.type)\n\n if (addFieldSchema) {\n addFieldSchema(\n blockField,\n blockSchema,\n payload,\n buildSchemaOptions,\n (parentIsLocalized || field.localized) ?? false,\n )\n }\n })\n\n if (fieldShouldBeLocalized({ field, parentIsLocalized }) && payload.config.localization) {\n payload.config.localization.localeCodes.forEach((localeCode) => {\n // @ts-expect-error Possible incorrect typing in mongoose types, this works\n schema.path(`${field.name}.${localeCode}`).discriminator(block.slug, blockSchema)\n })\n } else {\n // @ts-expect-error Possible incorrect typing in mongoose types, this works\n schema.path(field.name).discriminator(block.slug, blockSchema)\n }\n })\n}\n\nconst checkbox: FieldSchemaGenerator<CheckboxField> = (\n field: CheckboxField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: Boolean,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst code: FieldSchemaGenerator<CodeField> = (\n field: CodeField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: String,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst collapsible: FieldSchemaGenerator<CollapsibleField> = (\n field: CollapsibleField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n field.fields.forEach((subField: Field) => {\n if (fieldIsVirtual(subField)) {\n return\n }\n\n const addFieldSchema = getSchemaGenerator(subField.type)\n\n if (addFieldSchema) {\n addFieldSchema(subField, schema, payload, buildSchemaOptions, parentIsLocalized)\n }\n })\n}\n\nconst date: FieldSchemaGenerator<DateField> = (\n field: DateField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: Date,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst email: FieldSchemaGenerator<EmailField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: String,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst group: FieldSchemaGenerator<GroupField> = (\n field: GroupField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n if (fieldAffectsData(field)) {\n const formattedBaseSchema = formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized })\n\n // carry indexSortableFields through to versions if drafts enabled\n const indexSortableFields =\n buildSchemaOptions.indexSortableFields &&\n field.name === 'version' &&\n buildSchemaOptions.draftsEnabled\n\n const baseSchema: SchemaTypeOptions<any> = {\n ...formattedBaseSchema,\n type: buildSchema({\n buildSchemaOptions: {\n disableUnique: buildSchemaOptions.disableUnique,\n draftsEnabled: buildSchemaOptions.draftsEnabled,\n indexSortableFields,\n options: {\n _id: false,\n id: false,\n minimize: false,\n },\n },\n configFields: field.fields,\n parentIsLocalized: parentIsLocalized || field.localized,\n payload,\n }),\n }\n\n schema.add({\n [field.name]: localizeSchema(\n field,\n baseSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\n })\n } else {\n field.fields.forEach((subField) => {\n if (fieldIsVirtual(subField)) {\n return\n }\n\n const addFieldSchema = getSchemaGenerator(subField.type)\n\n if (addFieldSchema) {\n addFieldSchema(\n subField,\n schema,\n payload,\n buildSchemaOptions,\n (parentIsLocalized || field.localized) ?? false,\n )\n }\n })\n }\n}\n\nconst json: FieldSchemaGenerator<JSONField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: mongoose.Schema.Types.Mixed,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst number: FieldSchemaGenerator<NumberField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: field.hasMany ? [Number] : Number,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst point: FieldSchemaGenerator<PointField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema: SchemaTypeOptions<unknown> = {\n type: {\n type: String,\n enum: ['Point'],\n ...(typeof field.defaultValue !== 'undefined' && {\n default: 'Point',\n }),\n },\n coordinates: {\n type: [Number],\n default: formatDefaultValue(field),\n required: false,\n },\n }\n\n if (\n buildSchemaOptions.disableUnique &&\n field.unique &&\n fieldShouldBeLocalized({ field, parentIsLocalized })\n ) {\n baseSchema.coordinates.sparse = true\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n\n if (field.index === true || field.index === undefined) {\n const indexOptions: IndexOptions = {}\n if (!buildSchemaOptions.disableUnique && field.unique) {\n indexOptions.sparse = true\n indexOptions.unique = true\n }\n if (fieldShouldBeLocalized({ field, parentIsLocalized }) && payload.config.localization) {\n payload.config.localization.locales.forEach((locale) => {\n schema.index({ [`${field.name}.${locale.code}`]: '2dsphere' }, indexOptions)\n })\n } else {\n schema.index({ [field.name]: '2dsphere' }, indexOptions)\n }\n }\n}\n\nconst radio: FieldSchemaGenerator<RadioField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: String,\n enum: field.options.map((option) => {\n if (typeof option === 'object') {\n return option.value\n }\n return option\n }),\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst relationship: FieldSchemaGenerator<RelationshipField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n) => {\n const hasManyRelations = Array.isArray(field.relationTo)\n let schemaToReturn: { [key: string]: any } = {}\n\n const valueType = getRelationshipValueType(field, payload)\n\n if (fieldShouldBeLocalized({ field, parentIsLocalized }) && payload.config.localization) {\n schemaToReturn = {\n _id: false,\n type: payload.config.localization.localeCodes.reduce((locales, locale) => {\n let localeSchema: { [key: string]: any } = {}\n\n if (hasManyRelations) {\n localeSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n _id: false,\n type: mongoose.Schema.Types.Mixed,\n relationTo: { type: String, enum: field.relationTo },\n value: {\n type: valueType,\n refPath: `${field.name}.${locale}.relationTo`,\n },\n }\n } else {\n localeSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: valueType,\n ref: field.relationTo,\n }\n }\n\n return {\n ...locales,\n [locale]: field.hasMany\n ? { type: [localeSchema], default: formatDefaultValue(field) }\n : localeSchema,\n }\n }, {}),\n localized: true,\n }\n } else if (hasManyRelations) {\n schemaToReturn = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n _id: false,\n type: mongoose.Schema.Types.Mixed,\n relationTo: { type: String, enum: field.relationTo },\n value: {\n type: valueType,\n refPath: `${field.name}.relationTo`,\n },\n }\n\n if (field.hasMany) {\n schemaToReturn = {\n type: [schemaToReturn],\n default: formatDefaultValue(field),\n }\n }\n } else {\n schemaToReturn = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: valueType,\n ref: field.relationTo,\n }\n\n if (field.hasMany) {\n schemaToReturn = {\n type: [schemaToReturn],\n default: formatDefaultValue(field),\n }\n }\n }\n\n schema.add({\n [field.name]: schemaToReturn,\n })\n}\n\nconst richText: FieldSchemaGenerator<RichTextField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: mongoose.Schema.Types.Mixed,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst row: FieldSchemaGenerator<RowField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n field.fields.forEach((subField: Field) => {\n if (fieldIsVirtual(subField)) {\n return\n }\n\n const addFieldSchema = getSchemaGenerator(subField.type)\n\n if (addFieldSchema) {\n addFieldSchema(subField, schema, payload, buildSchemaOptions, parentIsLocalized)\n }\n })\n}\n\nconst select: FieldSchemaGenerator<SelectField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: String,\n enum: field.options.map((option) => {\n if (typeof option === 'object') {\n return option.value\n }\n return option\n }),\n }\n\n if (buildSchemaOptions.draftsEnabled || !field.required) {\n ;(baseSchema.enum as unknown[]).push(null)\n }\n\n schema.add({\n [field.name]: localizeSchema(\n field,\n field.hasMany ? [baseSchema] : baseSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\n })\n}\n\nconst tabs: FieldSchemaGenerator<TabsField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n field.tabs.forEach((tab) => {\n if (tabHasName(tab)) {\n if (fieldIsVirtual(tab)) {\n return\n }\n const baseSchema = {\n type: buildSchema({\n buildSchemaOptions: {\n disableUnique: buildSchemaOptions.disableUnique,\n draftsEnabled: buildSchemaOptions.draftsEnabled,\n options: {\n _id: false,\n id: false,\n minimize: false,\n },\n },\n configFields: tab.fields,\n parentIsLocalized: parentIsLocalized || tab.localized,\n payload,\n }),\n }\n\n schema.add({\n [tab.name]: localizeSchema(tab, baseSchema, payload.config.localization, parentIsLocalized),\n })\n } else {\n tab.fields.forEach((subField: Field) => {\n if (fieldIsVirtual(subField)) {\n return\n }\n const addFieldSchema = getSchemaGenerator(subField.type)\n\n if (addFieldSchema) {\n addFieldSchema(\n subField,\n schema,\n payload,\n buildSchemaOptions,\n (parentIsLocalized || tab.localized) ?? false,\n )\n }\n })\n }\n })\n}\n\nconst text: FieldSchemaGenerator<TextField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: field.hasMany ? [String] : String,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst textarea: FieldSchemaGenerator<TextareaField> = (\n field: TextareaField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: String,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst upload: FieldSchemaGenerator<UploadField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const hasManyRelations = Array.isArray(field.relationTo)\n let schemaToReturn: { [key: string]: any } = {}\n\n const valueType = getRelationshipValueType(field, payload)\n\n if (fieldShouldBeLocalized({ field, parentIsLocalized }) && payload.config.localization) {\n schemaToReturn = {\n _id: false,\n type: payload.config.localization.localeCodes.reduce((locales, locale) => {\n let localeSchema: { [key: string]: any } = {}\n\n if (hasManyRelations) {\n localeSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n _id: false,\n type: mongoose.Schema.Types.Mixed,\n relationTo: { type: String, enum: field.relationTo },\n value: {\n type: valueType,\n refPath: `${field.name}.${locale}.relationTo`,\n },\n }\n } else {\n localeSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: valueType,\n ref: field.relationTo,\n }\n }\n\n return {\n ...locales,\n [locale]: field.hasMany\n ? { type: [localeSchema], default: formatDefaultValue(field) }\n : localeSchema,\n }\n }, {}),\n localized: true,\n }\n } else if (hasManyRelations) {\n schemaToReturn = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n _id: false,\n type: mongoose.Schema.Types.Mixed,\n relationTo: { type: String, enum: field.relationTo },\n value: {\n type: valueType,\n refPath: `${field.name}.relationTo`,\n },\n }\n\n if (field.hasMany) {\n schemaToReturn = {\n type: [schemaToReturn],\n default: formatDefaultValue(field),\n }\n }\n } else {\n schemaToReturn = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: valueType,\n ref: field.relationTo,\n }\n\n if (field.hasMany) {\n schemaToReturn = {\n type: [schemaToReturn],\n default: formatDefaultValue(field),\n }\n }\n }\n\n schema.add({\n [field.name]: schemaToReturn,\n })\n}\n\nconst getSchemaGenerator = (fieldType: string): FieldSchemaGenerator | null => {\n if (fieldType in fieldToSchemaMap) {\n return fieldToSchemaMap[fieldType as keyof typeof fieldToSchemaMap] as FieldSchemaGenerator\n }\n\n return null\n}\n\nconst fieldToSchemaMap = {\n array,\n blocks,\n checkbox,\n code,\n collapsible,\n date,\n email,\n group,\n json,\n number,\n point,\n radio,\n relationship,\n richText,\n row,\n select,\n tabs,\n text,\n textarea,\n upload,\n}\n\nconst getRelationshipValueType = (field: RelationshipField | UploadField, payload: Payload) => {\n if (typeof field.relationTo === 'string') {\n const customIDType = payload.collections[field.relationTo]?.customIDType\n\n if (!customIDType) {\n return mongoose.Schema.Types.ObjectId\n }\n\n if (customIDType === 'number') {\n return mongoose.Schema.Types.Number\n }\n\n return mongoose.Schema.Types.String\n }\n\n // has custom id relationTo\n if (\n field.relationTo.some((relationTo) => {\n return !!payload.collections[relationTo]?.customIDType\n })\n ) {\n return mongoose.Schema.Types.Mixed\n }\n\n return mongoose.Schema.Types.ObjectId\n}\n"],"names":["mongoose","fieldAffectsData","fieldIsPresentationalOnly","fieldIsVirtual","fieldShouldBeLocalized","tabHasName","formatDefaultValue","field","defaultValue","undefined","formatBaseSchema","buildSchemaOptions","parentIsLocalized","disableUnique","draftsEnabled","indexSortableFields","schema","default","index","unique","required","type","sparse","hidden","localizeSchema","entity","localization","Array","isArray","locales","localeCodes","reduce","localeSchema","locale","_id","localized","buildSchema","args","configFields","payload","allowIDField","options","fields","schemaFields","idField","find","name","Number","String","filter","Schema","forEach","addFieldSchema","getSchemaGenerator","compoundIndexes","indexDefinition","pathHasLocalized","config","localizedPath","replace","code","path","array","baseSchema","id","minimize","add","blocks","fieldSchema","discriminatorKey","blockReferences","blockItem","blockSchema","block","blockField","localeCode","discriminator","slug","checkbox","Boolean","collapsible","subField","date","Date","email","group","formattedBaseSchema","json","Types","Mixed","number","hasMany","point","enum","coordinates","indexOptions","radio","map","option","value","relationship","hasManyRelations","relationTo","schemaToReturn","valueType","getRelationshipValueType","refPath","ref","richText","row","select","push","tabs","tab","text","textarea","upload","fieldType","fieldToSchemaMap","customIDType","collections","ObjectId","some"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"sanitizeQueryValue.d.ts","sourceRoot":"","sources":["../../src/queries/sanitizeQueryValue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,cAAc,EACd,OAAO,EAER,MAAM,SAAS,CAAA;AAMhB,KAAK,sBAAsB,GAAG;IAC5B,KAAK,EAAE,cAAc,CAAA;IACrB,WAAW,EAAE,OAAO,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,EAAE,GAAG,CAAA;CACT,CAAA;AAoED,eAAO,MAAM,kBAAkB,qFAS5B,sBAAsB,KACrB;IACE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,GAAG,CAAC,EAAE,OAAO,CAAA;CACd,GACD,SA8VH,CAAA"}
1
+ {"version":3,"file":"sanitizeQueryValue.d.ts","sourceRoot":"","sources":["../../src/queries/sanitizeQueryValue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,cAAc,EACd,OAAO,EAER,MAAM,SAAS,CAAA;AAMhB,KAAK,sBAAsB,GAAG;IAC5B,KAAK,EAAE,cAAc,CAAA;IACrB,WAAW,EAAE,OAAO,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,EAAE,GAAG,CAAA;CACT,CAAA;AAoED,eAAO,MAAM,kBAAkB,qFAS5B,sBAAsB,KACrB;IACE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,GAAG,CAAC,EAAE,OAAO,CAAA;CACd,GACD,SA+VH,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/queries/sanitizeQueryValue.ts"],"sourcesContent":["import type {\n FlattenedBlock,\n FlattenedBlocksField,\n FlattenedField,\n Payload,\n RelationshipField,\n} from 'payload'\n\nimport { Types } from 'mongoose'\nimport { createArrayFromCommaDelineated } from 'payload'\nimport { fieldShouldBeLocalized } from 'payload/shared'\n\ntype SanitizeQueryValueArgs = {\n field: FlattenedField\n hasCustomID: boolean\n locale?: string\n operator: string\n parentIsLocalized: boolean\n path: string\n payload: Payload\n val: any\n}\n\nconst buildExistsQuery = (formattedValue: unknown, path: string, treatEmptyString = true) => {\n if (formattedValue) {\n return {\n rawQuery: {\n $and: [\n { [path]: { $exists: true } },\n { [path]: { $ne: null } },\n ...(treatEmptyString ? [{ [path]: { $ne: '' } }] : []), // Treat empty string as null / undefined\n ],\n },\n }\n } else {\n return {\n rawQuery: {\n $or: [\n { [path]: { $exists: false } },\n { [path]: { $eq: null } },\n ...(treatEmptyString ? [{ [path]: { $eq: '' } }] : []), // Treat empty string as null / undefined\n ],\n },\n }\n }\n}\n\n// returns nestedField Field object from blocks.nestedField path because getLocalizedPaths splits them only for relationships\nconst getFieldFromSegments = ({\n field,\n payload,\n segments,\n}: {\n field: FlattenedBlock | FlattenedField\n payload: Payload\n segments: string[]\n}): FlattenedField | undefined => {\n if ('blocks' in field || 'blockReferences' in field) {\n const _field: FlattenedBlocksField = field as FlattenedBlocksField\n for (const _block of _field.blockReferences ?? _field.blocks) {\n const block: FlattenedBlock | undefined =\n typeof _block === 'string' ? payload.blocks[_block] : _block\n if (block) {\n const field = getFieldFromSegments({ field: block, payload, segments })\n if (field) {\n return field\n }\n }\n }\n }\n\n if ('fields' in field) {\n for (let i = 0; i < segments.length; i++) {\n const foundField = field.flattenedFields.find((each) => each.name === segments[i])\n\n if (!foundField) {\n break\n }\n\n if (foundField && segments.length - 1 === i) {\n return foundField\n }\n\n segments.shift()\n return getFieldFromSegments({ field: foundField, payload, segments })\n }\n }\n}\n\nexport const sanitizeQueryValue = ({\n field,\n hasCustomID,\n locale,\n operator,\n parentIsLocalized,\n path,\n payload,\n val,\n}: SanitizeQueryValueArgs):\n | {\n operator?: string\n rawQuery?: unknown\n val?: unknown\n }\n | undefined => {\n let formattedValue = val\n let formattedOperator = operator\n if (['array', 'blocks', 'group', 'tab'].includes(field.type) && path.includes('.')) {\n const segments = path.split('.')\n segments.shift()\n const foundField = getFieldFromSegments({ field, payload, segments })\n\n if (foundField) {\n field = foundField\n }\n }\n\n // Disregard invalid _ids\n if (path === '_id') {\n if (typeof val === 'string' && val.split(',').length === 1) {\n if (!hasCustomID) {\n const isValid = Types.ObjectId.isValid(val)\n\n if (!isValid) {\n return { operator: formattedOperator, val: undefined }\n } else {\n if (['in', 'not_in'].includes(operator)) {\n formattedValue = createArrayFromCommaDelineated(formattedValue).map(\n (id) => new Types.ObjectId(id),\n )\n } else {\n formattedValue = new Types.ObjectId(val)\n }\n }\n }\n\n if (field.type === 'number') {\n const parsedNumber = parseFloat(val)\n\n if (Number.isNaN(parsedNumber)) {\n return { operator: formattedOperator, val: undefined }\n }\n }\n } else if (Array.isArray(val) || (typeof val === 'string' && val.split(',').length > 1)) {\n if (typeof val === 'string') {\n formattedValue = createArrayFromCommaDelineated(val)\n }\n\n if (Array.isArray(formattedValue)) {\n formattedValue = formattedValue.reduce<unknown[]>((formattedValues, inVal) => {\n if (!hasCustomID) {\n if (Types.ObjectId.isValid(inVal)) {\n formattedValues.push(new Types.ObjectId(inVal))\n }\n }\n\n if (field.type === 'number') {\n const parsedNumber = parseFloat(inVal)\n if (!Number.isNaN(parsedNumber)) {\n formattedValues.push(parsedNumber)\n }\n } else {\n formattedValues.push(inVal)\n }\n\n return formattedValues\n }, [])\n }\n }\n }\n\n // Cast incoming values as proper searchable types\n if (field.type === 'checkbox' && typeof val === 'string') {\n if (val.toLowerCase() === 'true') {\n formattedValue = true\n }\n if (val.toLowerCase() === 'false') {\n formattedValue = false\n }\n }\n\n if (['all', 'in', 'not_in'].includes(operator) && typeof formattedValue === 'string') {\n formattedValue = createArrayFromCommaDelineated(formattedValue)\n\n if (field.type === 'number' && Array.isArray(formattedValue)) {\n formattedValue = formattedValue.map((arrayVal) => parseFloat(arrayVal))\n }\n }\n\n if (field.type === 'number') {\n if (typeof formattedValue === 'string' && operator !== 'exists') {\n formattedValue = Number(val)\n }\n\n if (operator === 'exists') {\n formattedValue = val === 'true' ? true : val === 'false' ? false : Boolean(val)\n\n return buildExistsQuery(formattedValue, path)\n }\n }\n\n if (field.type === 'date' && typeof val === 'string' && operator !== 'exists') {\n formattedValue = new Date(val)\n if (Number.isNaN(Date.parse(formattedValue))) {\n return undefined\n }\n }\n\n if (['relationship', 'upload'].includes(field.type)) {\n if (val === 'null') {\n formattedValue = null\n }\n\n // Object equality requires the value to be the first key in the object that is being queried.\n if (\n operator === 'equals' &&\n formattedValue &&\n typeof formattedValue === 'object' &&\n formattedValue.value &&\n formattedValue.relationTo\n ) {\n const { value } = formattedValue\n const isValid = Types.ObjectId.isValid(value)\n\n if (isValid) {\n formattedValue.value = new Types.ObjectId(value)\n }\n\n let localizedPath = path\n\n if (\n fieldShouldBeLocalized({ field, parentIsLocalized }) &&\n payload.config.localization &&\n locale\n ) {\n localizedPath = `${path}.${locale}`\n }\n\n return {\n rawQuery: {\n $or: [\n {\n [localizedPath]: {\n $eq: {\n // disable auto sort\n /* eslint-disable */\n value: formattedValue.value,\n relationTo: formattedValue.relationTo,\n /* eslint-enable */\n },\n },\n },\n {\n [localizedPath]: {\n $eq: {\n relationTo: formattedValue.relationTo,\n value: formattedValue.value,\n },\n },\n },\n ],\n },\n }\n }\n\n const relationTo = (field as RelationshipField).relationTo\n\n if (['in', 'not_in'].includes(operator) && Array.isArray(formattedValue)) {\n formattedValue = formattedValue.reduce((formattedValues, inVal) => {\n if (!inVal) {\n return formattedValues\n }\n\n if (typeof relationTo === 'string' && payload.collections[relationTo]?.customIDType) {\n if (payload.collections[relationTo].customIDType === 'number') {\n const parsedNumber = parseFloat(inVal)\n if (!Number.isNaN(parsedNumber)) {\n formattedValues.push(parsedNumber)\n return formattedValues\n }\n }\n\n formattedValues.push(inVal)\n return formattedValues\n }\n\n if (\n Array.isArray(relationTo) &&\n relationTo.some((relationTo) => !!payload.collections[relationTo]?.customIDType)\n ) {\n if (Types.ObjectId.isValid(inVal.toString())) {\n formattedValues.push(new Types.ObjectId(inVal))\n } else {\n formattedValues.push(inVal)\n }\n return formattedValues\n }\n\n if (Types.ObjectId.isValid(inVal.toString())) {\n formattedValues.push(new Types.ObjectId(inVal))\n }\n\n return formattedValues\n }, [])\n }\n\n if (\n ['contains', 'equals', 'like', 'not_equals'].includes(operator) &&\n (!Array.isArray(relationTo) || !path.endsWith('.relationTo'))\n ) {\n if (typeof relationTo === 'string') {\n const customIDType = payload.collections[relationTo]?.customIDType\n\n if (customIDType) {\n if (customIDType === 'number') {\n formattedValue = parseFloat(val)\n\n if (Number.isNaN(formattedValue)) {\n return { operator: formattedOperator, val: undefined }\n }\n }\n } else {\n if (!Types.ObjectId.isValid(formattedValue)) {\n return { operator: formattedOperator, val: undefined }\n }\n formattedValue = new Types.ObjectId(formattedValue)\n }\n } else {\n const hasCustomIDType = relationTo.some(\n (relationTo) => !!payload.collections[relationTo]?.customIDType,\n )\n\n if (hasCustomIDType) {\n if (typeof val === 'string') {\n const formattedNumber = Number(val)\n formattedValue = [Types.ObjectId.isValid(val) ? new Types.ObjectId(val) : val]\n formattedOperator = operator === 'not_equals' ? 'not_in' : 'in'\n if (!Number.isNaN(formattedNumber)) {\n formattedValue.push(formattedNumber)\n }\n }\n } else {\n if (!Types.ObjectId.isValid(formattedValue)) {\n return { operator: formattedOperator, val: undefined }\n }\n formattedValue = new Types.ObjectId(formattedValue)\n }\n }\n }\n\n if (\n operator === 'all' &&\n Array.isArray(relationTo) &&\n path.endsWith('.value') &&\n Array.isArray(formattedValue)\n ) {\n formattedValue.forEach((v, i) => {\n if (Types.ObjectId.isValid(v)) {\n formattedValue[i] = new Types.ObjectId(v)\n }\n })\n }\n }\n\n // Set up specific formatting necessary by operators\n\n if (operator === 'near') {\n let lng\n let lat\n let maxDistance\n let minDistance\n\n if (Array.isArray(formattedValue)) {\n ;[lng, lat, maxDistance, minDistance] = formattedValue\n }\n\n if (typeof formattedValue === 'string') {\n ;[lng, lat, maxDistance, minDistance] = createArrayFromCommaDelineated(formattedValue)\n }\n\n if (lng == null || lat == null || (maxDistance == null && minDistance == null)) {\n formattedValue = undefined\n } else {\n formattedValue = {\n $geometry: { type: 'Point', coordinates: [parseFloat(lng), parseFloat(lat)] },\n }\n\n if (maxDistance && !Number.isNaN(Number(maxDistance))) {\n formattedValue.$maxDistance = parseFloat(maxDistance)\n }\n\n if (minDistance && !Number.isNaN(Number(minDistance))) {\n formattedValue.$minDistance = parseFloat(minDistance)\n }\n }\n }\n\n if (operator === 'within' || operator === 'intersects') {\n formattedValue = {\n $geometry: formattedValue,\n }\n }\n\n if (path !== '_id' || (path === '_id' && hasCustomID && field.type === 'text')) {\n if (operator === 'contains' && !Types.ObjectId.isValid(formattedValue)) {\n formattedValue = {\n $options: 'i',\n $regex: formattedValue.replace(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&'),\n }\n }\n\n if (operator === 'exists') {\n formattedValue = formattedValue === 'true' || formattedValue === true\n\n // _id can't be empty string, will error Cast to ObjectId failed for value \"\"\n return buildExistsQuery(\n formattedValue,\n path,\n !['relationship', 'upload'].includes(field.type),\n )\n }\n }\n\n if (\n (path === '_id' || path === 'parent') &&\n operator === 'like' &&\n formattedValue.length === 24 &&\n !hasCustomID\n ) {\n formattedOperator = 'equals'\n }\n\n if (operator === 'exists') {\n formattedValue = formattedValue === 'true' || formattedValue === true\n\n // Clearable fields\n if (['relationship', 'select', 'upload'].includes(field.type)) {\n if (formattedValue) {\n return {\n rawQuery: {\n $and: [{ [path]: { $exists: true } }, { [path]: { $ne: null } }],\n },\n }\n } else {\n return {\n rawQuery: {\n $or: [{ [path]: { $exists: false } }, { [path]: { $eq: null } }],\n },\n }\n }\n }\n }\n\n return { operator: formattedOperator, val: formattedValue }\n}\n"],"names":["Types","createArrayFromCommaDelineated","fieldShouldBeLocalized","buildExistsQuery","formattedValue","path","treatEmptyString","rawQuery","$and","$exists","$ne","$or","$eq","getFieldFromSegments","field","payload","segments","_field","_block","blockReferences","blocks","block","i","length","foundField","flattenedFields","find","each","name","shift","sanitizeQueryValue","hasCustomID","locale","operator","parentIsLocalized","val","formattedOperator","includes","type","split","isValid","ObjectId","undefined","map","id","parsedNumber","parseFloat","Number","isNaN","Array","isArray","reduce","formattedValues","inVal","push","toLowerCase","arrayVal","Boolean","Date","parse","value","relationTo","localizedPath","config","localization","collections","customIDType","some","toString","endsWith","hasCustomIDType","formattedNumber","forEach","v","lng","lat","maxDistance","minDistance","$geometry","coordinates","$maxDistance","$minDistance","$options","$regex","replace"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/queries/sanitizeQueryValue.ts"],"sourcesContent":["import type {\n FlattenedBlock,\n FlattenedBlocksField,\n FlattenedField,\n Payload,\n RelationshipField,\n} from 'payload'\n\nimport { Types } from 'mongoose'\nimport { createArrayFromCommaDelineated } from 'payload'\nimport { fieldShouldBeLocalized } from 'payload/shared'\n\ntype SanitizeQueryValueArgs = {\n field: FlattenedField\n hasCustomID: boolean\n locale?: string\n operator: string\n parentIsLocalized: boolean\n path: string\n payload: Payload\n val: any\n}\n\nconst buildExistsQuery = (formattedValue: unknown, path: string, treatEmptyString = true) => {\n if (formattedValue) {\n return {\n rawQuery: {\n $and: [\n { [path]: { $exists: true } },\n { [path]: { $ne: null } },\n ...(treatEmptyString ? [{ [path]: { $ne: '' } }] : []), // Treat empty string as null / undefined\n ],\n },\n }\n } else {\n return {\n rawQuery: {\n $or: [\n { [path]: { $exists: false } },\n { [path]: { $eq: null } },\n ...(treatEmptyString ? [{ [path]: { $eq: '' } }] : []), // Treat empty string as null / undefined\n ],\n },\n }\n }\n}\n\n// returns nestedField Field object from blocks.nestedField path because getLocalizedPaths splits them only for relationships\nconst getFieldFromSegments = ({\n field,\n payload,\n segments,\n}: {\n field: FlattenedBlock | FlattenedField\n payload: Payload\n segments: string[]\n}): FlattenedField | undefined => {\n if ('blocks' in field || 'blockReferences' in field) {\n const _field: FlattenedBlocksField = field as FlattenedBlocksField\n for (const _block of _field.blockReferences ?? _field.blocks) {\n const block: FlattenedBlock | undefined =\n typeof _block === 'string' ? payload.blocks[_block] : _block\n if (block) {\n const field = getFieldFromSegments({ field: block, payload, segments })\n if (field) {\n return field\n }\n }\n }\n }\n\n if ('fields' in field) {\n for (let i = 0; i < segments.length; i++) {\n const foundField = field.flattenedFields.find((each) => each.name === segments[i])\n\n if (!foundField) {\n break\n }\n\n if (foundField && segments.length - 1 === i) {\n return foundField\n }\n\n segments.shift()\n return getFieldFromSegments({ field: foundField, payload, segments })\n }\n }\n}\n\nexport const sanitizeQueryValue = ({\n field,\n hasCustomID,\n locale,\n operator,\n parentIsLocalized,\n path,\n payload,\n val,\n}: SanitizeQueryValueArgs):\n | {\n operator?: string\n rawQuery?: unknown\n val?: unknown\n }\n | undefined => {\n let formattedValue = val\n let formattedOperator = operator\n\n if (['array', 'blocks', 'group', 'tab'].includes(field.type) && path.includes('.')) {\n const segments = path.split('.')\n segments.shift()\n const foundField = getFieldFromSegments({ field, payload, segments })\n\n if (foundField) {\n field = foundField\n }\n }\n\n // Disregard invalid _ids\n if (path === '_id') {\n if (typeof val === 'string' && val.split(',').length === 1) {\n if (!hasCustomID) {\n const isValid = Types.ObjectId.isValid(val)\n\n if (!isValid) {\n return { operator: formattedOperator, val: undefined }\n } else {\n if (['in', 'not_in'].includes(operator)) {\n formattedValue = createArrayFromCommaDelineated(formattedValue).map(\n (id) => new Types.ObjectId(id),\n )\n } else {\n formattedValue = new Types.ObjectId(val)\n }\n }\n }\n\n if (field.type === 'number') {\n const parsedNumber = parseFloat(val)\n\n if (Number.isNaN(parsedNumber)) {\n return { operator: formattedOperator, val: undefined }\n }\n }\n } else if (Array.isArray(val) || (typeof val === 'string' && val.split(',').length > 1)) {\n if (typeof val === 'string') {\n formattedValue = createArrayFromCommaDelineated(val)\n }\n\n if (Array.isArray(formattedValue)) {\n formattedValue = formattedValue.reduce<unknown[]>((formattedValues, inVal) => {\n if (!hasCustomID) {\n if (Types.ObjectId.isValid(inVal)) {\n formattedValues.push(new Types.ObjectId(inVal))\n }\n }\n\n if (field.type === 'number') {\n const parsedNumber = parseFloat(inVal)\n if (!Number.isNaN(parsedNumber)) {\n formattedValues.push(parsedNumber)\n }\n } else {\n formattedValues.push(inVal)\n }\n\n return formattedValues\n }, [])\n }\n }\n }\n\n // Cast incoming values as proper searchable types\n if (field.type === 'checkbox' && typeof val === 'string') {\n if (val.toLowerCase() === 'true') {\n formattedValue = true\n }\n if (val.toLowerCase() === 'false') {\n formattedValue = false\n }\n }\n\n if (['all', 'in', 'not_in'].includes(operator) && typeof formattedValue === 'string') {\n formattedValue = createArrayFromCommaDelineated(formattedValue)\n\n if (field.type === 'number' && Array.isArray(formattedValue)) {\n formattedValue = formattedValue.map((arrayVal) => parseFloat(arrayVal))\n }\n }\n\n if (field.type === 'number') {\n if (typeof formattedValue === 'string' && operator !== 'exists') {\n formattedValue = Number(val)\n }\n\n if (operator === 'exists') {\n formattedValue = val === 'true' ? true : val === 'false' ? false : Boolean(val)\n\n return buildExistsQuery(formattedValue, path)\n }\n }\n\n if (field.type === 'date' && typeof val === 'string' && operator !== 'exists') {\n formattedValue = new Date(val)\n if (Number.isNaN(Date.parse(formattedValue))) {\n return undefined\n }\n }\n\n if (['relationship', 'upload'].includes(field.type)) {\n if (val === 'null') {\n formattedValue = null\n }\n\n // Object equality requires the value to be the first key in the object that is being queried.\n if (\n operator === 'equals' &&\n formattedValue &&\n typeof formattedValue === 'object' &&\n formattedValue.value &&\n formattedValue.relationTo\n ) {\n const { value } = formattedValue\n const isValid = Types.ObjectId.isValid(value)\n\n if (isValid) {\n formattedValue.value = new Types.ObjectId(value)\n }\n\n let localizedPath = path\n\n if (\n fieldShouldBeLocalized({ field, parentIsLocalized }) &&\n payload.config.localization &&\n locale\n ) {\n localizedPath = `${path}.${locale}`\n }\n\n return {\n rawQuery: {\n $or: [\n {\n [localizedPath]: {\n $eq: {\n // disable auto sort\n /* eslint-disable */\n value: formattedValue.value,\n relationTo: formattedValue.relationTo,\n /* eslint-enable */\n },\n },\n },\n {\n [localizedPath]: {\n $eq: {\n relationTo: formattedValue.relationTo,\n value: formattedValue.value,\n },\n },\n },\n ],\n },\n }\n }\n\n const relationTo = (field as RelationshipField).relationTo\n\n if (['in', 'not_in'].includes(operator) && Array.isArray(formattedValue)) {\n formattedValue = formattedValue.reduce((formattedValues, inVal) => {\n if (!inVal) {\n return formattedValues\n }\n\n if (typeof relationTo === 'string' && payload.collections[relationTo]?.customIDType) {\n if (payload.collections[relationTo].customIDType === 'number') {\n const parsedNumber = parseFloat(inVal)\n if (!Number.isNaN(parsedNumber)) {\n formattedValues.push(parsedNumber)\n return formattedValues\n }\n }\n\n formattedValues.push(inVal)\n return formattedValues\n }\n\n if (\n Array.isArray(relationTo) &&\n relationTo.some((relationTo) => !!payload.collections[relationTo]?.customIDType)\n ) {\n if (Types.ObjectId.isValid(inVal.toString())) {\n formattedValues.push(new Types.ObjectId(inVal))\n } else {\n formattedValues.push(inVal)\n }\n return formattedValues\n }\n\n if (Types.ObjectId.isValid(inVal.toString())) {\n formattedValues.push(new Types.ObjectId(inVal))\n }\n\n return formattedValues\n }, [])\n }\n\n if (\n ['contains', 'equals', 'like', 'not_equals'].includes(operator) &&\n (!Array.isArray(relationTo) || !path.endsWith('.relationTo'))\n ) {\n if (typeof relationTo === 'string') {\n const customIDType = payload.collections[relationTo]?.customIDType\n\n if (customIDType) {\n if (customIDType === 'number') {\n formattedValue = parseFloat(val)\n\n if (Number.isNaN(formattedValue)) {\n return { operator: formattedOperator, val: undefined }\n }\n }\n } else {\n if (!Types.ObjectId.isValid(formattedValue)) {\n return { operator: formattedOperator, val: undefined }\n }\n formattedValue = new Types.ObjectId(formattedValue)\n }\n } else {\n const hasCustomIDType = relationTo.some(\n (relationTo) => !!payload.collections[relationTo]?.customIDType,\n )\n\n if (hasCustomIDType) {\n if (typeof val === 'string') {\n const formattedNumber = Number(val)\n formattedValue = [Types.ObjectId.isValid(val) ? new Types.ObjectId(val) : val]\n formattedOperator = operator === 'not_equals' ? 'not_in' : 'in'\n if (!Number.isNaN(formattedNumber)) {\n formattedValue.push(formattedNumber)\n }\n }\n } else {\n if (!Types.ObjectId.isValid(formattedValue)) {\n return { operator: formattedOperator, val: undefined }\n }\n formattedValue = new Types.ObjectId(formattedValue)\n }\n }\n }\n\n if (\n operator === 'all' &&\n Array.isArray(relationTo) &&\n path.endsWith('.value') &&\n Array.isArray(formattedValue)\n ) {\n formattedValue.forEach((v, i) => {\n if (Types.ObjectId.isValid(v)) {\n formattedValue[i] = new Types.ObjectId(v)\n }\n })\n }\n }\n\n // Set up specific formatting necessary by operators\n\n if (operator === 'near') {\n let lng\n let lat\n let maxDistance\n let minDistance\n\n if (Array.isArray(formattedValue)) {\n ;[lng, lat, maxDistance, minDistance] = formattedValue\n }\n\n if (typeof formattedValue === 'string') {\n ;[lng, lat, maxDistance, minDistance] = createArrayFromCommaDelineated(formattedValue)\n }\n\n if (lng == null || lat == null || (maxDistance == null && minDistance == null)) {\n formattedValue = undefined\n } else {\n formattedValue = {\n $geometry: { type: 'Point', coordinates: [parseFloat(lng), parseFloat(lat)] },\n }\n\n if (maxDistance && !Number.isNaN(Number(maxDistance))) {\n formattedValue.$maxDistance = parseFloat(maxDistance)\n }\n\n if (minDistance && !Number.isNaN(Number(minDistance))) {\n formattedValue.$minDistance = parseFloat(minDistance)\n }\n }\n }\n\n if (operator === 'within' || operator === 'intersects') {\n formattedValue = {\n $geometry: formattedValue,\n }\n }\n\n if (path !== '_id' || (path === '_id' && hasCustomID && field.type === 'text')) {\n if (operator === 'contains' && !Types.ObjectId.isValid(formattedValue)) {\n formattedValue = {\n $options: 'i',\n $regex: formattedValue.replace(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&'),\n }\n }\n\n if (operator === 'exists') {\n formattedValue = formattedValue === 'true' || formattedValue === true\n\n // _id can't be empty string, will error Cast to ObjectId failed for value \"\"\n return buildExistsQuery(\n formattedValue,\n path,\n !['relationship', 'upload'].includes(field.type),\n )\n }\n }\n\n if (\n (path === '_id' || path === 'parent') &&\n operator === 'like' &&\n formattedValue.length === 24 &&\n !hasCustomID\n ) {\n formattedOperator = 'equals'\n }\n\n if (operator === 'exists') {\n formattedValue = formattedValue === 'true' || formattedValue === true\n\n // Clearable fields\n if (['relationship', 'select', 'upload'].includes(field.type)) {\n if (formattedValue) {\n return {\n rawQuery: {\n $and: [{ [path]: { $exists: true } }, { [path]: { $ne: null } }],\n },\n }\n } else {\n return {\n rawQuery: {\n $or: [{ [path]: { $exists: false } }, { [path]: { $eq: null } }],\n },\n }\n }\n }\n }\n\n return { operator: formattedOperator, val: formattedValue }\n}\n"],"names":["Types","createArrayFromCommaDelineated","fieldShouldBeLocalized","buildExistsQuery","formattedValue","path","treatEmptyString","rawQuery","$and","$exists","$ne","$or","$eq","getFieldFromSegments","field","payload","segments","_field","_block","blockReferences","blocks","block","i","length","foundField","flattenedFields","find","each","name","shift","sanitizeQueryValue","hasCustomID","locale","operator","parentIsLocalized","val","formattedOperator","includes","type","split","isValid","ObjectId","undefined","map","id","parsedNumber","parseFloat","Number","isNaN","Array","isArray","reduce","formattedValues","inVal","push","toLowerCase","arrayVal","Boolean","Date","parse","value","relationTo","localizedPath","config","localization","collections","customIDType","some","toString","endsWith","hasCustomIDType","formattedNumber","forEach","v","lng","lat","maxDistance","minDistance","$geometry","coordinates","$maxDistance","$minDistance","$options","$regex","replace"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"buildProjectionFromSelect.d.ts","sourceRoot":"","sources":["../../src/utilities/buildProjectionFromSelect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,cAAc,EAGd,UAAU,EACX,MAAM,SAAS,CAAA;AAShB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAmLlD,eAAO,MAAM,yBAAyB,iCAInC;IACD,OAAO,EAAE,eAAe,CAAA;IACxB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,MAAM,CAAC,EAAE,UAAU,CAAA;CACpB,KAAG,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,SAmB1B,CAAA"}
1
+ {"version":3,"file":"buildProjectionFromSelect.d.ts","sourceRoot":"","sources":["../../src/utilities/buildProjectionFromSelect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,cAAc,EAGd,UAAU,EACX,MAAM,SAAS,CAAA;AAShB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAkLlD,eAAO,MAAM,yBAAyB,iCAInC;IACD,OAAO,EAAE,eAAe,CAAA;IACxB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,MAAM,CAAC,EAAE,UAAU,CAAA;CACpB,KAAG,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,SAmB1B,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utilities/buildProjectionFromSelect.ts"],"sourcesContent":["import type {\n FieldAffectingData,\n FlattenedField,\n SelectIncludeType,\n SelectMode,\n SelectType,\n} from 'payload'\n\nimport {\n deepCopyObjectSimple,\n fieldAffectsData,\n fieldShouldBeLocalized,\n getSelectMode,\n} from 'payload/shared'\n\nimport type { MongooseAdapter } from '../index.js'\n\nconst addFieldToProjection = ({\n adapter,\n databaseSchemaPath,\n field,\n parentIsLocalized,\n projection,\n}: {\n adapter: MongooseAdapter\n databaseSchemaPath: string\n field: FieldAffectingData\n parentIsLocalized: boolean\n projection: Record<string, true>\n}) => {\n const { config } = adapter.payload\n\n if (parentIsLocalized && config.localization) {\n for (const locale of config.localization.localeCodes) {\n const localeDatabaseSchemaPath = databaseSchemaPath.replace('<locale>', locale)\n projection[`${localeDatabaseSchemaPath}${field.name}`] = true\n }\n } else {\n projection[`${databaseSchemaPath}${field.name}`] = true\n }\n}\n\nconst traverseFields = ({\n adapter,\n databaseSchemaPath = '',\n fields,\n parentIsLocalized = false,\n projection,\n select,\n selectAllOnCurrentLevel = false,\n selectMode,\n}: {\n adapter: MongooseAdapter\n databaseSchemaPath?: string\n fields: FlattenedField[]\n parentIsLocalized?: boolean\n projection: Record<string, true>\n select: SelectType\n selectAllOnCurrentLevel?: boolean\n selectMode: SelectMode\n}) => {\n for (const field of fields) {\n if (fieldAffectsData(field)) {\n if (selectMode === 'include') {\n if (select[field.name] === true || selectAllOnCurrentLevel) {\n addFieldToProjection({\n adapter,\n databaseSchemaPath,\n field,\n parentIsLocalized,\n projection,\n })\n continue\n }\n\n if (!select[field.name]) {\n continue\n }\n }\n\n if (selectMode === 'exclude') {\n if (typeof select[field.name] === 'undefined') {\n addFieldToProjection({\n adapter,\n databaseSchemaPath,\n field,\n parentIsLocalized,\n projection,\n })\n continue\n }\n\n if (select[field.name] === false) {\n continue\n }\n }\n }\n\n let fieldDatabaseSchemaPath = databaseSchemaPath\n\n if (fieldAffectsData(field)) {\n fieldDatabaseSchemaPath = `${databaseSchemaPath}${field.name}.`\n\n if (fieldShouldBeLocalized({ field, parentIsLocalized })) {\n fieldDatabaseSchemaPath = `${fieldDatabaseSchemaPath}<locale>.`\n }\n }\n\n switch (field.type) {\n case 'array':\n case 'group':\n case 'tab': {\n const fieldSelect = select[field.name] as SelectType\n\n if (field.type === 'array' && selectMode === 'include') {\n fieldSelect.id = true\n }\n\n traverseFields({\n adapter,\n databaseSchemaPath: fieldDatabaseSchemaPath,\n fields: field.flattenedFields,\n parentIsLocalized: parentIsLocalized || field.localized,\n projection,\n select: fieldSelect,\n selectMode,\n })\n\n break\n }\n\n case 'blocks': {\n const blocksSelect = select[field.name] as SelectType\n\n for (const _block of field.blockReferences ?? field.blocks) {\n const block = typeof _block === 'string' ? adapter.payload.blocks[_block] : _block\n\n if (!block) {\n continue\n }\n\n if (\n (selectMode === 'include' && blocksSelect[block.slug] === true) ||\n (selectMode === 'exclude' && typeof blocksSelect[block.slug] === 'undefined')\n ) {\n traverseFields({\n adapter,\n databaseSchemaPath: fieldDatabaseSchemaPath,\n fields: block.flattenedFields,\n parentIsLocalized: parentIsLocalized || field.localized,\n projection,\n select: {},\n selectAllOnCurrentLevel: true,\n selectMode: 'include',\n })\n continue\n }\n\n let blockSelectMode = selectMode\n\n if (selectMode === 'exclude' && blocksSelect[block.slug] === false) {\n blockSelectMode = 'include'\n }\n\n if (typeof blocksSelect[block.slug] !== 'object') {\n blocksSelect[block.slug] = {}\n }\n\n if (blockSelectMode === 'include' && typeof blocksSelect[block.slug] === 'object') {\n const blockSelect = blocksSelect[block.slug] as SelectIncludeType\n blockSelect.id = true\n blockSelect.blockType = true\n }\n\n traverseFields({\n adapter,\n databaseSchemaPath: fieldDatabaseSchemaPath,\n fields: block.flattenedFields,\n parentIsLocalized: parentIsLocalized || field.localized,\n projection,\n select: blocksSelect[block.slug] as SelectType,\n selectMode: blockSelectMode,\n })\n }\n\n break\n }\n\n default:\n break\n }\n }\n}\n\nexport const buildProjectionFromSelect = ({\n adapter,\n fields,\n select,\n}: {\n adapter: MongooseAdapter\n fields: FlattenedField[]\n select?: SelectType\n}): Record<string, true> | undefined => {\n if (!select) {\n return\n }\n\n const projection: Record<string, true> = {\n _id: true,\n }\n\n traverseFields({\n adapter,\n fields,\n projection,\n // Clone to safely mutate it later\n select: deepCopyObjectSimple(select),\n selectMode: getSelectMode(select),\n })\n\n return projection\n}\n"],"names":["deepCopyObjectSimple","fieldAffectsData","fieldShouldBeLocalized","getSelectMode","addFieldToProjection","adapter","databaseSchemaPath","field","parentIsLocalized","projection","config","payload","localization","locale","localeCodes","localeDatabaseSchemaPath","replace","name","traverseFields","fields","select","selectAllOnCurrentLevel","selectMode","fieldDatabaseSchemaPath","type","fieldSelect","id","flattenedFields","localized","blocksSelect","_block","blockReferences","blocks","block","slug","blockSelectMode","blockSelect","blockType","buildProjectionFromSelect","_id"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/utilities/buildProjectionFromSelect.ts"],"sourcesContent":["import type {\n FieldAffectingData,\n FlattenedField,\n SelectIncludeType,\n SelectMode,\n SelectType,\n} from 'payload'\n\nimport {\n deepCopyObjectSimple,\n fieldAffectsData,\n fieldShouldBeLocalized,\n getSelectMode,\n} from 'payload/shared'\n\nimport type { MongooseAdapter } from '../index.js'\n\nconst addFieldToProjection = ({\n adapter,\n databaseSchemaPath,\n field,\n parentIsLocalized,\n projection,\n}: {\n adapter: MongooseAdapter\n databaseSchemaPath: string\n field: FieldAffectingData\n parentIsLocalized: boolean\n projection: Record<string, true>\n}) => {\n const { config } = adapter.payload\n\n if (parentIsLocalized && config.localization) {\n for (const locale of config.localization.localeCodes) {\n const localeDatabaseSchemaPath = databaseSchemaPath.replace('<locale>', locale)\n projection[`${localeDatabaseSchemaPath}${field.name}`] = true\n }\n } else {\n projection[`${databaseSchemaPath}${field.name}`] = true\n }\n}\n\nconst traverseFields = ({\n adapter,\n databaseSchemaPath = '',\n fields,\n parentIsLocalized = false,\n projection,\n select,\n selectAllOnCurrentLevel = false,\n selectMode,\n}: {\n adapter: MongooseAdapter\n databaseSchemaPath?: string\n fields: FlattenedField[]\n parentIsLocalized?: boolean\n projection: Record<string, true>\n select: SelectType\n selectAllOnCurrentLevel?: boolean\n selectMode: SelectMode\n}) => {\n for (const field of fields) {\n if (fieldAffectsData(field)) {\n if (selectMode === 'include') {\n if (select[field.name] === true || selectAllOnCurrentLevel) {\n addFieldToProjection({\n adapter,\n databaseSchemaPath,\n field,\n parentIsLocalized,\n projection,\n })\n continue\n }\n\n if (!select[field.name]) {\n continue\n }\n }\n\n if (selectMode === 'exclude') {\n if (typeof select[field.name] === 'undefined') {\n addFieldToProjection({\n adapter,\n databaseSchemaPath,\n field,\n parentIsLocalized,\n projection,\n })\n continue\n }\n\n if (select[field.name] === false) {\n continue\n }\n }\n }\n\n let fieldDatabaseSchemaPath = databaseSchemaPath\n\n if (fieldAffectsData(field)) {\n fieldDatabaseSchemaPath = `${databaseSchemaPath}${field.name}.`\n\n if (fieldShouldBeLocalized({ field, parentIsLocalized })) {\n fieldDatabaseSchemaPath = `${fieldDatabaseSchemaPath}<locale>.`\n }\n }\n\n switch (field.type) {\n case 'array':\n case 'group':\n case 'tab': {\n const fieldSelect = select[field.name] as SelectType\n\n if (field.type === 'array' && selectMode === 'include') {\n fieldSelect.id = true\n }\n\n traverseFields({\n adapter,\n databaseSchemaPath: fieldDatabaseSchemaPath,\n fields: field.flattenedFields,\n parentIsLocalized: parentIsLocalized || field.localized,\n projection,\n select: fieldSelect,\n selectMode,\n })\n\n break\n }\n case 'blocks': {\n const blocksSelect = select[field.name] as SelectType\n\n for (const _block of field.blockReferences ?? field.blocks) {\n const block = typeof _block === 'string' ? adapter.payload.blocks[_block] : _block\n\n if (!block) {\n continue\n }\n\n if (\n (selectMode === 'include' && blocksSelect[block.slug] === true) ||\n (selectMode === 'exclude' && typeof blocksSelect[block.slug] === 'undefined')\n ) {\n traverseFields({\n adapter,\n databaseSchemaPath: fieldDatabaseSchemaPath,\n fields: block.flattenedFields,\n parentIsLocalized: parentIsLocalized || field.localized,\n projection,\n select: {},\n selectAllOnCurrentLevel: true,\n selectMode: 'include',\n })\n continue\n }\n\n let blockSelectMode = selectMode\n\n if (selectMode === 'exclude' && blocksSelect[block.slug] === false) {\n blockSelectMode = 'include'\n }\n\n if (typeof blocksSelect[block.slug] !== 'object') {\n blocksSelect[block.slug] = {}\n }\n\n if (blockSelectMode === 'include' && typeof blocksSelect[block.slug] === 'object') {\n const blockSelect = blocksSelect[block.slug] as SelectIncludeType\n blockSelect.id = true\n blockSelect.blockType = true\n }\n\n traverseFields({\n adapter,\n databaseSchemaPath: fieldDatabaseSchemaPath,\n fields: block.flattenedFields,\n parentIsLocalized: parentIsLocalized || field.localized,\n projection,\n select: blocksSelect[block.slug] as SelectType,\n selectMode: blockSelectMode,\n })\n }\n\n break\n }\n\n default:\n break\n }\n }\n}\n\nexport const buildProjectionFromSelect = ({\n adapter,\n fields,\n select,\n}: {\n adapter: MongooseAdapter\n fields: FlattenedField[]\n select?: SelectType\n}): Record<string, true> | undefined => {\n if (!select) {\n return\n }\n\n const projection: Record<string, true> = {\n _id: true,\n }\n\n traverseFields({\n adapter,\n fields,\n projection,\n // Clone to safely mutate it later\n select: deepCopyObjectSimple(select),\n selectMode: getSelectMode(select),\n })\n\n return projection\n}\n"],"names":["deepCopyObjectSimple","fieldAffectsData","fieldShouldBeLocalized","getSelectMode","addFieldToProjection","adapter","databaseSchemaPath","field","parentIsLocalized","projection","config","payload","localization","locale","localeCodes","localeDatabaseSchemaPath","replace","name","traverseFields","fields","select","selectAllOnCurrentLevel","selectMode","fieldDatabaseSchemaPath","type","fieldSelect","id","flattenedFields","localized","blocksSelect","_block","blockReferences","blocks","block","slug","blockSelectMode","blockSelect","blockType","buildProjectionFromSelect","_id"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@payloadcms/db-mongodb",
3
- "version": "3.38.0-canary.7",
3
+ "version": "3.38.0-canary.9",
4
4
  "description": "The officially supported MongoDB database adapter for Payload",
5
5
  "homepage": "https://payloadcms.com",
6
6
  "repository": {
@@ -48,11 +48,11 @@
48
48
  "@types/uuid": "10.0.0",
49
49
  "mongodb": "6.12.0",
50
50
  "mongodb-memory-server": "^10",
51
- "@payloadcms/eslint-config": "3.28.0",
52
- "payload": "3.38.0-canary.7"
51
+ "payload": "3.38.0-canary.9",
52
+ "@payloadcms/eslint-config": "3.28.0"
53
53
  },
54
54
  "peerDependencies": {
55
- "payload": "3.38.0-canary.7"
55
+ "payload": "3.38.0-canary.9"
56
56
  },
57
57
  "scripts": {
58
58
  "build": "pnpm build:types && pnpm build:swc",