@payloadcms/db-mongodb 3.26.0-canary.bbb3083 → 3.27.0-canary.ecc3f49
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/connect.d.ts.map +1 -1
- package/dist/connect.js +5 -1
- package/dist/connect.js.map +1 -1
- package/dist/count.d.ts.map +1 -1
- package/dist/count.js +8 -4
- package/dist/count.js.map +1 -1
- package/dist/countGlobalVersions.d.ts.map +1 -1
- package/dist/countGlobalVersions.js +8 -3
- package/dist/countGlobalVersions.js.map +1 -1
- package/dist/countVersions.d.ts.map +1 -1
- package/dist/countVersions.js +8 -3
- package/dist/countVersions.js.map +1 -1
- package/dist/create.d.ts.map +1 -1
- package/dist/create.js +13 -6
- package/dist/create.js.map +1 -1
- package/dist/createGlobal.d.ts +1 -1
- package/dist/createGlobal.d.ts.map +1 -1
- package/dist/createGlobal.js +12 -5
- package/dist/createGlobal.js.map +1 -1
- package/dist/createGlobalVersion.d.ts.map +1 -1
- package/dist/createGlobalVersion.js +13 -5
- package/dist/createGlobalVersion.js.map +1 -1
- package/dist/createMigration.d.ts.map +1 -1
- package/dist/createMigration.js.map +1 -1
- package/dist/createVersion.d.ts.map +1 -1
- package/dist/createVersion.js +13 -5
- package/dist/createVersion.js.map +1 -1
- package/dist/deleteMany.d.ts +1 -1
- package/dist/deleteMany.d.ts.map +1 -1
- package/dist/deleteMany.js +8 -4
- package/dist/deleteMany.js.map +1 -1
- package/dist/deleteOne.d.ts.map +1 -1
- package/dist/deleteOne.js +14 -6
- package/dist/deleteOne.js.map +1 -1
- package/dist/deleteVersions.d.ts.map +1 -1
- package/dist/deleteVersions.js +9 -4
- package/dist/deleteVersions.js.map +1 -1
- package/dist/find.d.ts.map +1 -1
- package/dist/find.js +25 -8
- package/dist/find.js.map +1 -1
- package/dist/findGlobal.d.ts.map +1 -1
- package/dist/findGlobal.js +8 -5
- package/dist/findGlobal.js.map +1 -1
- package/dist/findGlobalVersions.d.ts.map +1 -1
- package/dist/findGlobalVersions.js +8 -4
- package/dist/findGlobalVersions.js.map +1 -1
- package/dist/findOne.d.ts +1 -1
- package/dist/findOne.d.ts.map +1 -1
- package/dist/findOne.js +18 -8
- package/dist/findOne.js.map +1 -1
- package/dist/findVersions.d.ts.map +1 -1
- package/dist/findVersions.js +8 -4
- package/dist/findVersions.js.map +1 -1
- package/dist/index.d.ts +6 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +1 -5
- package/dist/init.js.map +1 -1
- package/dist/migrateFresh.d.ts.map +1 -1
- package/dist/migrateFresh.js.map +1 -1
- package/dist/models/buildCollectionSchema.d.ts.map +1 -1
- package/dist/models/buildCollectionSchema.js +0 -4
- package/dist/models/buildCollectionSchema.js.map +1 -1
- package/dist/models/buildSchema.d.ts.map +1 -1
- package/dist/models/buildSchema.js +545 -515
- package/dist/models/buildSchema.js.map +1 -1
- package/dist/predefinedMigrations/migrateRelationshipsV2_V3.d.ts.map +1 -1
- package/dist/predefinedMigrations/migrateRelationshipsV2_V3.js +21 -8
- package/dist/predefinedMigrations/migrateRelationshipsV2_V3.js.map +1 -1
- package/dist/predefinedMigrations/migrateVersionsV1_V2.d.ts.map +1 -1
- package/dist/predefinedMigrations/migrateVersionsV1_V2.js +20 -8
- package/dist/predefinedMigrations/migrateVersionsV1_V2.js.map +1 -1
- package/dist/queries/buildSearchParams.d.ts +1 -1
- package/dist/queries/buildSearchParams.d.ts.map +1 -1
- package/dist/queries/buildSearchParams.js +42 -29
- package/dist/queries/buildSearchParams.js.map +1 -1
- package/dist/queries/buildSortParam.d.ts +2 -3
- package/dist/queries/buildSortParam.d.ts.map +1 -1
- package/dist/queries/buildSortParam.js +1 -1
- package/dist/queries/buildSortParam.js.map +1 -1
- package/dist/queries/getBuildQueryPlugin.d.ts.map +1 -1
- package/dist/queries/getBuildQueryPlugin.js +15 -8
- package/dist/queries/getBuildQueryPlugin.js.map +1 -1
- package/dist/queries/getLocalizedSortProperty.d.ts +1 -1
- package/dist/queries/getLocalizedSortProperty.d.ts.map +1 -1
- package/dist/queries/getLocalizedSortProperty.js +11 -6
- package/dist/queries/getLocalizedSortProperty.js.map +1 -1
- package/dist/queries/getLocalizedSortProperty.spec.js +8 -0
- package/dist/queries/getLocalizedSortProperty.spec.js.map +1 -1
- package/dist/queries/operatorMap.d.ts +1 -0
- package/dist/queries/operatorMap.d.ts.map +1 -1
- package/dist/queries/operatorMap.js.map +1 -1
- package/dist/queries/parseParams.d.ts +1 -1
- package/dist/queries/parseParams.d.ts.map +1 -1
- package/dist/queries/parseParams.js +3 -3
- package/dist/queries/parseParams.js.map +1 -1
- package/dist/queries/sanitizeQueryValue.d.ts +1 -1
- package/dist/queries/sanitizeQueryValue.d.ts.map +1 -1
- package/dist/queries/sanitizeQueryValue.js +30 -26
- package/dist/queries/sanitizeQueryValue.js.map +1 -1
- package/dist/queryDrafts.d.ts.map +1 -1
- package/dist/queryDrafts.js +26 -8
- package/dist/queryDrafts.js.map +1 -1
- package/dist/transactions/beginTransaction.d.ts.map +1 -1
- package/dist/transactions/beginTransaction.js +4 -2
- package/dist/transactions/beginTransaction.js.map +1 -1
- package/dist/transactions/commitTransaction.d.ts.map +1 -1
- package/dist/transactions/commitTransaction.js +1 -1
- package/dist/transactions/commitTransaction.js.map +1 -1
- package/dist/transactions/rollbackTransaction.d.ts.map +1 -1
- package/dist/transactions/rollbackTransaction.js +3 -3
- package/dist/transactions/rollbackTransaction.js.map +1 -1
- package/dist/types.d.ts +2 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/updateGlobal.d.ts.map +1 -1
- package/dist/updateGlobal.js +17 -7
- package/dist/updateGlobal.js.map +1 -1
- package/dist/updateGlobalVersion.d.ts +1 -1
- package/dist/updateGlobalVersion.d.ts.map +1 -1
- package/dist/updateGlobalVersion.js +14 -6
- package/dist/updateGlobalVersion.js.map +1 -1
- package/dist/updateMany.d.ts +3 -0
- package/dist/updateMany.d.ts.map +1 -0
- package/dist/updateMany.js +75 -0
- package/dist/updateMany.js.map +1 -0
- package/dist/updateOne.d.ts.map +1 -1
- package/dist/updateOne.js +17 -8
- package/dist/updateOne.js.map +1 -1
- package/dist/updateVersion.d.ts.map +1 -1
- package/dist/updateVersion.js +14 -5
- package/dist/updateVersion.js.map +1 -1
- package/dist/upsert.d.ts.map +1 -1
- package/dist/upsert.js +2 -1
- package/dist/upsert.js.map +1 -1
- package/dist/utilities/aggregatePaginate.d.ts +19 -0
- package/dist/utilities/aggregatePaginate.d.ts.map +1 -0
- package/dist/utilities/aggregatePaginate.js +78 -0
- package/dist/utilities/aggregatePaginate.js.map +1 -0
- package/dist/utilities/buildJoinAggregation.d.ts +5 -6
- package/dist/utilities/buildJoinAggregation.d.ts.map +1 -1
- package/dist/utilities/buildJoinAggregation.js +39 -36
- package/dist/utilities/buildJoinAggregation.js.map +1 -1
- package/dist/utilities/buildProjectionFromSelect.d.ts.map +1 -1
- package/dist/utilities/buildProjectionFromSelect.js +8 -4
- package/dist/utilities/buildProjectionFromSelect.js.map +1 -1
- package/dist/utilities/getDBName.d.ts +1 -1
- package/dist/utilities/getDBName.d.ts.map +1 -1
- package/dist/utilities/getDBName.js +6 -2
- package/dist/utilities/getDBName.js.map +1 -1
- package/dist/utilities/getEntity.d.ts +33 -0
- package/dist/utilities/getEntity.d.ts.map +1 -0
- package/dist/utilities/getEntity.js +49 -0
- package/dist/utilities/getEntity.js.map +1 -0
- package/dist/utilities/handleError.d.ts +1 -1
- package/dist/utilities/handleError.d.ts.map +1 -1
- package/dist/utilities/handleError.js +3 -2
- package/dist/utilities/handleError.js.map +1 -1
- package/dist/utilities/transform.d.ts.map +1 -1
- package/dist/utilities/transform.js +10 -9
- package/dist/utilities/transform.js.map +1 -1
- package/package.json +6 -5
|
@@ -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 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 _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 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 _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}\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
|
+
{"version":3,"sources":["../../src/models/buildSchema.ts"],"sourcesContent":["import type { IndexOptions, Schema, SchemaOptions, SchemaTypeOptions } from 'mongoose'\n\nimport mongoose from 'mongoose'\nimport {\n APIError,\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<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 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 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","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","fieldType","fieldToSchemaMap","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,
|
|
1
|
+
{"version":3,"file":"migrateRelationshipsV2_V3.d.ts","sourceRoot":"","sources":["../../src/predefinedMigrations/migrateRelationshipsV2_V3.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAS,cAAc,EAAE,MAAM,SAAS,CAAA;AA2GpD,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,CAqGhB"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { buildVersionCollectionFields, buildVersionGlobalFields } from 'payload';
|
|
2
|
+
import { getCollection, getGlobal } from '../utilities/getEntity.js';
|
|
2
3
|
import { getSession } from '../utilities/getSession.js';
|
|
3
4
|
import { transform } from '../utilities/transform.js';
|
|
4
|
-
const migrateModelWithBatching = async ({ batchSize,
|
|
5
|
+
const migrateModelWithBatching = async ({ batchSize, db, fields, Model, parentIsLocalized, session })=>{
|
|
5
6
|
let hasNext = true;
|
|
6
7
|
let skip = 0;
|
|
7
8
|
while(hasNext){
|
|
@@ -27,7 +28,8 @@ const migrateModelWithBatching = async ({ batchSize, config, db, fields, Model,
|
|
|
27
28
|
parentIsLocalized
|
|
28
29
|
});
|
|
29
30
|
}
|
|
30
|
-
await Model.collection.bulkWrite(
|
|
31
|
+
await Model.collection.bulkWrite(// @ts-expect-error bulkWrite has a weird type, insertOne, updateMany etc are required here as well.
|
|
32
|
+
docs.map((doc)=>({
|
|
31
33
|
updateOne: {
|
|
32
34
|
filter: {
|
|
33
35
|
_id: doc._id
|
|
@@ -86,12 +88,15 @@ export async function migrateRelationshipsV2_V3({ batchSize, req }) {
|
|
|
86
88
|
for (const collection of payload.config.collections){
|
|
87
89
|
if (hasRelationshipOrUploadField(collection)) {
|
|
88
90
|
payload.logger.info(`Migrating collection "${collection.slug}"`);
|
|
91
|
+
const { Model } = getCollection({
|
|
92
|
+
adapter: db,
|
|
93
|
+
collectionSlug: collection.slug
|
|
94
|
+
});
|
|
89
95
|
await migrateModelWithBatching({
|
|
90
96
|
batchSize,
|
|
91
|
-
config,
|
|
92
97
|
db,
|
|
93
98
|
fields: collection.fields,
|
|
94
|
-
Model
|
|
99
|
+
Model,
|
|
95
100
|
parentIsLocalized: false,
|
|
96
101
|
session
|
|
97
102
|
});
|
|
@@ -99,12 +104,16 @@ export async function migrateRelationshipsV2_V3({ batchSize, req }) {
|
|
|
99
104
|
}
|
|
100
105
|
if (collection.versions) {
|
|
101
106
|
payload.logger.info(`Migrating collection versions "${collection.slug}"`);
|
|
107
|
+
const { Model } = getCollection({
|
|
108
|
+
adapter: db,
|
|
109
|
+
collectionSlug: collection.slug,
|
|
110
|
+
versions: true
|
|
111
|
+
});
|
|
102
112
|
await migrateModelWithBatching({
|
|
103
113
|
batchSize,
|
|
104
|
-
config,
|
|
105
114
|
db,
|
|
106
115
|
fields: buildVersionCollectionFields(config, collection),
|
|
107
|
-
Model
|
|
116
|
+
Model,
|
|
108
117
|
parentIsLocalized: false,
|
|
109
118
|
session
|
|
110
119
|
});
|
|
@@ -143,12 +152,16 @@ export async function migrateRelationshipsV2_V3({ batchSize, req }) {
|
|
|
143
152
|
}
|
|
144
153
|
if (global.versions) {
|
|
145
154
|
payload.logger.info(`Migrating global versions "${global.slug}"`);
|
|
155
|
+
const { Model } = getGlobal({
|
|
156
|
+
adapter: db,
|
|
157
|
+
globalSlug: global.slug,
|
|
158
|
+
versions: true
|
|
159
|
+
});
|
|
146
160
|
await migrateModelWithBatching({
|
|
147
161
|
batchSize,
|
|
148
|
-
config,
|
|
149
162
|
db,
|
|
150
163
|
fields: buildVersionGlobalFields(config, global),
|
|
151
|
-
Model
|
|
164
|
+
Model,
|
|
152
165
|
parentIsLocalized: false,
|
|
153
166
|
session
|
|
154
167
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/predefinedMigrations/migrateRelationshipsV2_V3.ts"],"sourcesContent":["import type { ClientSession, Model } from 'mongoose'\nimport type { Field, PayloadRequest
|
|
1
|
+
{"version":3,"sources":["../../src/predefinedMigrations/migrateRelationshipsV2_V3.ts"],"sourcesContent":["import type { ClientSession, Model } from 'mongoose'\nimport type { Field, PayloadRequest } from 'payload'\n\nimport { buildVersionCollectionFields, buildVersionGlobalFields } from 'payload'\n\nimport type { MongooseAdapter } from '../index.js'\n\nimport { getCollection, getGlobal } from '../utilities/getEntity.js'\nimport { getSession } from '../utilities/getSession.js'\nimport { transform } from '../utilities/transform.js'\n\nconst migrateModelWithBatching = async ({\n batchSize,\n db,\n fields,\n Model,\n parentIsLocalized,\n session,\n}: {\n batchSize: number\n db: MongooseAdapter\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 transform({ adapter: db, data: doc, fields, operation: 'write', parentIsLocalized })\n }\n\n await Model.collection.bulkWrite(\n // @ts-expect-error bulkWrite has a weird type, insertOne, updateMany etc are required here as well.\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 const { Model } = getCollection({ adapter: db, collectionSlug: collection.slug })\n\n await migrateModelWithBatching({\n batchSize,\n db,\n fields: collection.fields,\n Model,\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 const { Model } = getCollection({\n adapter: db,\n collectionSlug: collection.slug,\n versions: true,\n })\n\n await migrateModelWithBatching({\n batchSize,\n db,\n fields: buildVersionCollectionFields(config, collection),\n Model,\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 transform({\n adapter: db,\n data: doc,\n fields: global.fields,\n operation: 'write',\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 const { Model } = getGlobal({ adapter: db, globalSlug: global.slug, versions: true })\n\n await migrateModelWithBatching({\n batchSize,\n db,\n fields: buildVersionGlobalFields(config, global),\n Model,\n parentIsLocalized: false,\n session,\n })\n\n payload.logger.info(`Migrated global versions \"${global.slug}\"`)\n }\n }\n}\n"],"names":["buildVersionCollectionFields","buildVersionGlobalFields","getCollection","getGlobal","getSession","transform","migrateModelWithBatching","batchSize","db","fields","Model","parentIsLocalized","session","hasNext","skip","docs","find","lean","limit","length","pop","doc","adapter","data","operation","collection","bulkWrite","map","updateOne","filter","_id","update","$set","hasRelationshipOrUploadField","field","type","block","blocks","tab","tabs","migrateRelationshipsV2_V3","req","payload","config","collections","logger","info","slug","collectionSlug","versions","globals","GlobalsModel","global","findOne","globalType","$eq","globalSlug"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrateVersionsV1_V2.d.ts","sourceRoot":"","sources":["../../src/predefinedMigrations/migrateVersionsV1_V2.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAW,cAAc,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"migrateVersionsV1_V2.d.ts","sourceRoot":"","sources":["../../src/predefinedMigrations/migrateVersionsV1_V2.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAW,cAAc,EAAE,MAAM,SAAS,CAAA;AAOtD,wBAAsB,oBAAoB,CAAC,EAAE,GAAG,EAAE,EAAE;IAAE,GAAG,EAAE,cAAc,CAAA;CAAE,iBAqC1E"}
|
|
@@ -1,12 +1,15 @@
|
|
|
1
|
+
import { getCollection, getGlobal } from '../utilities/getEntity.js';
|
|
1
2
|
import { getSession } from '../utilities/getSession.js';
|
|
2
3
|
export async function migrateVersionsV1_V2({ req }) {
|
|
3
4
|
const { payload } = req;
|
|
4
|
-
const
|
|
5
|
+
const adapter = payload.db;
|
|
6
|
+
const session = await getSession(adapter, req);
|
|
5
7
|
// For each collection
|
|
6
8
|
for (const { slug, versions } of payload.config.collections){
|
|
7
9
|
if (versions?.drafts) {
|
|
8
10
|
await migrateCollectionDocs({
|
|
9
11
|
slug,
|
|
12
|
+
adapter,
|
|
10
13
|
payload,
|
|
11
14
|
session
|
|
12
15
|
});
|
|
@@ -16,8 +19,12 @@ export async function migrateVersionsV1_V2({ req }) {
|
|
|
16
19
|
// For each global
|
|
17
20
|
for (const { slug, versions } of payload.config.globals){
|
|
18
21
|
if (versions) {
|
|
19
|
-
const
|
|
20
|
-
|
|
22
|
+
const { Model } = getGlobal({
|
|
23
|
+
adapter,
|
|
24
|
+
globalSlug: slug,
|
|
25
|
+
versions: true
|
|
26
|
+
});
|
|
27
|
+
await Model.findOneAndUpdate({}, {
|
|
21
28
|
latest: true
|
|
22
29
|
}, {
|
|
23
30
|
session,
|
|
@@ -29,9 +36,13 @@ export async function migrateVersionsV1_V2({ req }) {
|
|
|
29
36
|
}
|
|
30
37
|
}
|
|
31
38
|
}
|
|
32
|
-
async function migrateCollectionDocs({ slug, docsAtATime = 100, payload, session }) {
|
|
33
|
-
const
|
|
34
|
-
|
|
39
|
+
async function migrateCollectionDocs({ slug, adapter, docsAtATime = 100, payload, session }) {
|
|
40
|
+
const { Model } = getCollection({
|
|
41
|
+
adapter,
|
|
42
|
+
collectionSlug: slug,
|
|
43
|
+
versions: true
|
|
44
|
+
});
|
|
45
|
+
const remainingDocs = await Model.aggregate([
|
|
35
46
|
// Sort so that newest are first
|
|
36
47
|
{
|
|
37
48
|
$sort: {
|
|
@@ -75,7 +86,7 @@ async function migrateCollectionDocs({ slug, docsAtATime = 100, payload, session
|
|
|
75
86
|
session
|
|
76
87
|
}).exec();
|
|
77
88
|
if (!remainingDocs || remainingDocs.length === 0) {
|
|
78
|
-
const newVersions = await
|
|
89
|
+
const newVersions = await Model.find({
|
|
79
90
|
latest: {
|
|
80
91
|
$eq: true
|
|
81
92
|
}
|
|
@@ -88,7 +99,7 @@ async function migrateCollectionDocs({ slug, docsAtATime = 100, payload, session
|
|
|
88
99
|
return;
|
|
89
100
|
}
|
|
90
101
|
const remainingDocIDs = remainingDocs.map((doc)=>doc._versionID);
|
|
91
|
-
await
|
|
102
|
+
await Model.updateMany({
|
|
92
103
|
_id: {
|
|
93
104
|
$in: remainingDocIDs
|
|
94
105
|
}
|
|
@@ -99,6 +110,7 @@ async function migrateCollectionDocs({ slug, docsAtATime = 100, payload, session
|
|
|
99
110
|
});
|
|
100
111
|
await migrateCollectionDocs({
|
|
101
112
|
slug,
|
|
113
|
+
adapter,
|
|
102
114
|
payload,
|
|
103
115
|
session
|
|
104
116
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/predefinedMigrations/migrateVersionsV1_V2.ts"],"sourcesContent":["import type { ClientSession } from 'mongoose'\nimport type { Payload, PayloadRequest } from 'payload'\n\nimport type { MongooseAdapter } from '../index.js'\n\nimport { getSession } from '../utilities/getSession.js'\n\nexport async function migrateVersionsV1_V2({ req }: { req: PayloadRequest }) {\n const { payload } = req\n\n const
|
|
1
|
+
{"version":3,"sources":["../../src/predefinedMigrations/migrateVersionsV1_V2.ts"],"sourcesContent":["import type { ClientSession } from 'mongoose'\nimport type { Payload, PayloadRequest } from 'payload'\n\nimport type { MongooseAdapter } from '../index.js'\n\nimport { getCollection, getGlobal } from '../utilities/getEntity.js'\nimport { getSession } from '../utilities/getSession.js'\n\nexport async function migrateVersionsV1_V2({ req }: { req: PayloadRequest }) {\n const { payload } = req\n\n const adapter = payload.db as MongooseAdapter\n const session = await getSession(adapter, req)\n\n // For each collection\n\n for (const { slug, versions } of payload.config.collections) {\n if (versions?.drafts) {\n await migrateCollectionDocs({ slug, adapter, payload, session })\n\n payload.logger.info(`Migrated the \"${slug}\" collection.`)\n }\n }\n\n // For each global\n for (const { slug, versions } of payload.config.globals) {\n if (versions) {\n const { Model } = getGlobal({\n adapter,\n globalSlug: slug,\n versions: true,\n })\n\n await Model.findOneAndUpdate(\n {},\n { latest: true },\n {\n session,\n sort: { updatedAt: -1 },\n },\n ).exec()\n\n payload.logger.info(`Migrated the \"${slug}\" global.`)\n }\n }\n}\n\nasync function migrateCollectionDocs({\n slug,\n adapter,\n docsAtATime = 100,\n payload,\n session,\n}: {\n adapter: MongooseAdapter\n docsAtATime?: number\n payload: Payload\n session?: ClientSession\n slug: string\n}) {\n const { Model } = getCollection({\n adapter,\n collectionSlug: slug,\n versions: true,\n })\n const remainingDocs = await Model.aggregate(\n [\n // Sort so that newest are first\n {\n $sort: {\n updatedAt: -1,\n },\n },\n // Group by parent ID\n // take the $first of each\n {\n $group: {\n _id: '$parent',\n _versionID: { $first: '$_id' },\n createdAt: { $first: '$createdAt' },\n latest: { $first: '$latest' },\n updatedAt: { $first: '$updatedAt' },\n version: { $first: '$version' },\n },\n },\n {\n $match: {\n latest: { $eq: null },\n },\n },\n {\n $limit: docsAtATime,\n },\n ],\n {\n allowDiskUse: true,\n session,\n },\n ).exec()\n\n if (!remainingDocs || remainingDocs.length === 0) {\n const newVersions = await Model.find(\n {\n latest: {\n $eq: true,\n },\n },\n undefined,\n { session },\n )\n\n if (newVersions?.length) {\n payload.logger.info(\n `Migrated ${newVersions.length} documents in the \"${slug}\" versions collection.`,\n )\n }\n\n return\n }\n\n const remainingDocIDs = remainingDocs.map((doc) => doc._versionID)\n\n await Model.updateMany(\n {\n _id: {\n $in: remainingDocIDs,\n },\n },\n {\n latest: true,\n },\n {\n session,\n },\n )\n\n await migrateCollectionDocs({ slug, adapter, payload, session })\n}\n"],"names":["getCollection","getGlobal","getSession","migrateVersionsV1_V2","req","payload","adapter","db","session","slug","versions","config","collections","drafts","migrateCollectionDocs","logger","info","globals","Model","globalSlug","findOneAndUpdate","latest","sort","updatedAt","exec","docsAtATime","collectionSlug","remainingDocs","aggregate","$sort","$group","_id","_versionID","$first","createdAt","version","$match","$eq","$limit","allowDiskUse","length","newVersions","find","undefined","remainingDocIDs","map","doc","updateMany","$in"],"mappings":"AAKA,SAASA,aAAa,EAAEC,SAAS,QAAQ,4BAA2B;AACpE,SAASC,UAAU,QAAQ,6BAA4B;AAEvD,OAAO,eAAeC,qBAAqB,EAAEC,GAAG,EAA2B;IACzE,MAAM,EAAEC,OAAO,EAAE,GAAGD;IAEpB,MAAME,UAAUD,QAAQE,EAAE;IAC1B,MAAMC,UAAU,MAAMN,WAAWI,SAASF;IAE1C,sBAAsB;IAEtB,KAAK,MAAM,EAAEK,IAAI,EAAEC,QAAQ,EAAE,IAAIL,QAAQM,MAAM,CAACC,WAAW,CAAE;QAC3D,IAAIF,UAAUG,QAAQ;YACpB,MAAMC,sBAAsB;gBAAEL;gBAAMH;gBAASD;gBAASG;YAAQ;YAE9DH,QAAQU,MAAM,CAACC,IAAI,CAAC,CAAC,cAAc,EAAEP,KAAK,aAAa,CAAC;QAC1D;IACF;IAEA,kBAAkB;IAClB,KAAK,MAAM,EAAEA,IAAI,EAAEC,QAAQ,EAAE,IAAIL,QAAQM,MAAM,CAACM,OAAO,CAAE;QACvD,IAAIP,UAAU;YACZ,MAAM,EAAEQ,KAAK,EAAE,GAAGjB,UAAU;gBAC1BK;gBACAa,YAAYV;gBACZC,UAAU;YACZ;YAEA,MAAMQ,MAAME,gBAAgB,CAC1B,CAAC,GACD;gBAAEC,QAAQ;YAAK,GACf;gBACEb;gBACAc,MAAM;oBAAEC,WAAW,CAAC;gBAAE;YACxB,GACAC,IAAI;YAENnB,QAAQU,MAAM,CAACC,IAAI,CAAC,CAAC,cAAc,EAAEP,KAAK,SAAS,CAAC;QACtD;IACF;AACF;AAEA,eAAeK,sBAAsB,EACnCL,IAAI,EACJH,OAAO,EACPmB,cAAc,GAAG,EACjBpB,OAAO,EACPG,OAAO,EAOR;IACC,MAAM,EAAEU,KAAK,EAAE,GAAGlB,cAAc;QAC9BM;QACAoB,gBAAgBjB;QAChBC,UAAU;IACZ;IACA,MAAMiB,gBAAgB,MAAMT,MAAMU,SAAS,CACzC;QACE,gCAAgC;QAChC;YACEC,OAAO;gBACLN,WAAW,CAAC;YACd;QACF;QACA,qBAAqB;QACrB,0BAA0B;QAC1B;YACEO,QAAQ;gBACNC,KAAK;gBACLC,YAAY;oBAAEC,QAAQ;gBAAO;gBAC7BC,WAAW;oBAAED,QAAQ;gBAAa;gBAClCZ,QAAQ;oBAAEY,QAAQ;gBAAU;gBAC5BV,WAAW;oBAAEU,QAAQ;gBAAa;gBAClCE,SAAS;oBAAEF,QAAQ;gBAAW;YAChC;QACF;QACA;YACEG,QAAQ;gBACNf,QAAQ;oBAAEgB,KAAK;gBAAK;YACtB;QACF;QACA;YACEC,QAAQb;QACV;KACD,EACD;QACEc,cAAc;QACd/B;IACF,GACAgB,IAAI;IAEN,IAAI,CAACG,iBAAiBA,cAAca,MAAM,KAAK,GAAG;QAChD,MAAMC,cAAc,MAAMvB,MAAMwB,IAAI,CAClC;YACErB,QAAQ;gBACNgB,KAAK;YACP;QACF,GACAM,WACA;YAAEnC;QAAQ;QAGZ,IAAIiC,aAAaD,QAAQ;YACvBnC,QAAQU,MAAM,CAACC,IAAI,CACjB,CAAC,SAAS,EAAEyB,YAAYD,MAAM,CAAC,mBAAmB,EAAE/B,KAAK,sBAAsB,CAAC;QAEpF;QAEA;IACF;IAEA,MAAMmC,kBAAkBjB,cAAckB,GAAG,CAAC,CAACC,MAAQA,IAAId,UAAU;IAEjE,MAAMd,MAAM6B,UAAU,CACpB;QACEhB,KAAK;YACHiB,KAAKJ;QACP;IACF,GACA;QACEvB,QAAQ;IACV,GACA;QACEb;IACF;IAGF,MAAMM,sBAAsB;QAAEL;QAAMH;QAASD;QAASG;IAAQ;AAChE"}
|
|
@@ -17,6 +17,6 @@ export declare function buildSearchParam({ collectionSlug, fields, globalSlug, i
|
|
|
17
17
|
parentIsLocalized: boolean;
|
|
18
18
|
payload: Payload;
|
|
19
19
|
val: unknown;
|
|
20
|
-
}): Promise<SearchParam>;
|
|
20
|
+
}): Promise<SearchParam | undefined>;
|
|
21
21
|
export {};
|
|
22
22
|
//# sourceMappingURL=buildSearchParams.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buildSearchParams.d.ts","sourceRoot":"","sources":["../../src/queries/buildSearchParams.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"buildSearchParams.d.ts","sourceRoot":"","sources":["../../src/queries/buildSearchParams.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAyB,OAAO,EAAE,MAAM,SAAS,CAAA;AAa7E,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,GAAG,SAAS,CAAC,CAqQnC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Types } from 'mongoose';
|
|
2
|
-
import { getLocalizedPaths } from 'payload';
|
|
2
|
+
import { APIError, getLocalizedPaths } from 'payload';
|
|
3
3
|
import { validOperatorSet } from 'payload/shared';
|
|
4
|
+
import { getCollection } from '../utilities/getEntity.js';
|
|
4
5
|
import { operatorMap } from './operatorMap.js';
|
|
5
6
|
import { sanitizeQueryValue } from './sanitizeQueryValue.js';
|
|
6
7
|
const subQueryOptions = {
|
|
@@ -18,7 +19,7 @@ const subQueryOptions = {
|
|
|
18
19
|
let paths = [];
|
|
19
20
|
let hasCustomID = false;
|
|
20
21
|
if (sanitizedPath === '_id') {
|
|
21
|
-
const customIDFieldType = payload.collections[collectionSlug]?.customIDType;
|
|
22
|
+
const customIDFieldType = collectionSlug ? payload.collections[collectionSlug]?.customIDType : undefined;
|
|
22
23
|
let idFieldType = 'text';
|
|
23
24
|
if (customIDFieldType) {
|
|
24
25
|
idFieldType = customIDFieldType;
|
|
@@ -31,7 +32,7 @@ const subQueryOptions = {
|
|
|
31
32
|
name: 'id',
|
|
32
33
|
type: idFieldType
|
|
33
34
|
},
|
|
34
|
-
parentIsLocalized,
|
|
35
|
+
parentIsLocalized: parentIsLocalized ?? false,
|
|
35
36
|
path: '_id'
|
|
36
37
|
});
|
|
37
38
|
} else {
|
|
@@ -45,6 +46,9 @@ const subQueryOptions = {
|
|
|
45
46
|
payload
|
|
46
47
|
});
|
|
47
48
|
}
|
|
49
|
+
if (!paths[0]) {
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
48
52
|
const [{ field, path }] = paths;
|
|
49
53
|
if (path) {
|
|
50
54
|
const sanitizedQueryValue = sanitizeQueryValue({
|
|
@@ -66,20 +70,26 @@ const subQueryOptions = {
|
|
|
66
70
|
value: rawQuery
|
|
67
71
|
};
|
|
68
72
|
}
|
|
73
|
+
if (!formattedOperator) {
|
|
74
|
+
return undefined;
|
|
75
|
+
}
|
|
69
76
|
// If there are multiple collections to search through,
|
|
70
77
|
// Recursively build up a list of query constraints
|
|
71
78
|
if (paths.length > 1) {
|
|
72
79
|
// Remove top collection and reverse array
|
|
73
80
|
// to work backwards from top
|
|
74
81
|
const pathsToQuery = paths.slice(1).reverse();
|
|
75
|
-
|
|
82
|
+
let relationshipQuery = {
|
|
76
83
|
value: {}
|
|
77
84
|
};
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
85
|
+
for (const [i, { collectionSlug, path: subPath }] of pathsToQuery.entries()){
|
|
86
|
+
if (!collectionSlug) {
|
|
87
|
+
throw new APIError(`Collection with the slug ${collectionSlug} was not found.`);
|
|
88
|
+
}
|
|
89
|
+
const { Model: SubModel } = getCollection({
|
|
90
|
+
adapter: payload.db,
|
|
91
|
+
collectionSlug
|
|
92
|
+
});
|
|
83
93
|
if (i === 0) {
|
|
84
94
|
const subQuery = await SubModel.buildQuery({
|
|
85
95
|
locale,
|
|
@@ -107,36 +117,38 @@ const subQueryOptions = {
|
|
|
107
117
|
}
|
|
108
118
|
};
|
|
109
119
|
}
|
|
110
|
-
const nextSubPath = pathsToQuery[i + 1]
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
$in
|
|
120
|
+
const nextSubPath = pathsToQuery[i + 1]?.path;
|
|
121
|
+
if (nextSubPath) {
|
|
122
|
+
relationshipQuery = {
|
|
123
|
+
value: {
|
|
124
|
+
[nextSubPath]: $in
|
|
115
125
|
}
|
|
116
|
-
}
|
|
117
|
-
}
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
continue;
|
|
118
129
|
}
|
|
119
|
-
const subQuery =
|
|
130
|
+
const subQuery = relationshipQuery.value;
|
|
120
131
|
const result = await SubModel.find(subQuery, subQueryOptions);
|
|
121
132
|
const $in = result.map((doc)=>doc._id);
|
|
122
133
|
// If it is the last recursion
|
|
123
134
|
// then pass through the search param
|
|
124
135
|
if (i + 1 === pathsToQuery.length) {
|
|
125
|
-
|
|
136
|
+
relationshipQuery = {
|
|
126
137
|
path,
|
|
127
138
|
value: {
|
|
128
139
|
$in
|
|
129
140
|
}
|
|
130
141
|
};
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
142
|
+
} else {
|
|
143
|
+
relationshipQuery = {
|
|
144
|
+
value: {
|
|
145
|
+
_id: {
|
|
146
|
+
$in
|
|
147
|
+
}
|
|
136
148
|
}
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
}
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
}
|
|
140
152
|
return relationshipQuery;
|
|
141
153
|
}
|
|
142
154
|
if (formattedOperator && validOperatorSet.has(formattedOperator)) {
|
|
@@ -160,7 +172,7 @@ const subQueryOptions = {
|
|
|
160
172
|
};
|
|
161
173
|
if (typeof formattedValue === 'string') {
|
|
162
174
|
if (Types.ObjectId.isValid(formattedValue)) {
|
|
163
|
-
result.value[multiIDCondition]
|
|
175
|
+
result.value[multiIDCondition]?.push({
|
|
164
176
|
[path]: {
|
|
165
177
|
[operatorKey]: new Types.ObjectId(formattedValue)
|
|
166
178
|
}
|
|
@@ -176,7 +188,7 @@ const subQueryOptions = {
|
|
|
176
188
|
}
|
|
177
189
|
});
|
|
178
190
|
if (hasNumberIDRelation) {
|
|
179
|
-
result.value[multiIDCondition]
|
|
191
|
+
result.value[multiIDCondition]?.push({
|
|
180
192
|
[path]: {
|
|
181
193
|
[operatorKey]: parseFloat(formattedValue)
|
|
182
194
|
}
|
|
@@ -184,7 +196,8 @@ const subQueryOptions = {
|
|
|
184
196
|
}
|
|
185
197
|
}
|
|
186
198
|
}
|
|
187
|
-
|
|
199
|
+
const length = result.value[multiIDCondition]?.length;
|
|
200
|
+
if (typeof length === 'number' && length > 1) {
|
|
188
201
|
return result;
|
|
189
202
|
}
|
|
190
203
|
}
|