@payloadcms/db-mongodb 3.90.2 → 3.91.0-internal.07e4582
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/init.d.ts.map +1 -1
- package/dist/init.js +89 -67
- package/dist/init.js.map +1 -1
- package/dist/models/buildCollectionSchema.d.ts +8 -2
- package/dist/models/buildCollectionSchema.d.ts.map +1 -1
- package/dist/models/buildCollectionSchema.js +4 -2
- package/dist/models/buildCollectionSchema.js.map +1 -1
- package/dist/models/buildGlobalModel.d.ts +5 -1
- package/dist/models/buildGlobalModel.d.ts.map +1 -1
- package/dist/models/buildGlobalModel.js +4 -2
- package/dist/models/buildGlobalModel.js.map +1 -1
- package/dist/models/buildSchema.d.ts +4 -0
- package/dist/models/buildSchema.d.ts.map +1 -1
- package/dist/models/buildSchema.js +64 -26
- package/dist/models/buildSchema.js.map +1 -1
- package/dist/models/buildSchema.spec.js +387 -0
- package/dist/models/buildSchema.spec.js.map +1 -0
- package/dist/models/schemaBuildContext.d.ts +21 -0
- package/dist/models/schemaBuildContext.d.ts.map +1 -0
- package/dist/models/schemaBuildContext.js +29 -0
- package/dist/models/schemaBuildContext.js.map +1 -0
- package/dist/models/schemaBuildContext.spec.js +72 -0
- package/dist/models/schemaBuildContext.spec.js.map +1 -0
- package/package.json +3 -3
|
@@ -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 FlattenedField,\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 flattenedFields?: FlattenedField[]\n parentIsLocalized?: boolean\n payload: Payload\n}): Schema => {\n const {\n buildSchemaOptions = {},\n configFields,\n flattenedFields,\n parentIsLocalized,\n payload,\n } = args\n const { allowIDField, options } = buildSchemaOptions\n let fields = {}\n\n let schemaFields = configFields\n\n if (!allowIDField) {\n // Use flattenedFields if available to find custom id field regardless of nesting\n const fieldsToSearch = flattenedFields || schemaFields\n const idField = fieldsToSearch.find((field) => fieldAffectsData(field) && field.name === 'id')\n if (idField) {\n fields = {\n _id:\n idField.type === 'number'\n ? payload.db.useBigIntForNumberIDs\n ? mongoose.Schema.Types.BigInt\n : Number\n : String,\n }\n schemaFields = schemaFields.filter(\n (field) => !(fieldAffectsData(field) && field.name === 'id'),\n )\n }\n }\n\n const schema = new mongoose.Schema(fields, options as any)\n\n schemaFields.forEach((field) => {\n if (fieldIsVirtual(field)) {\n return\n }\n\n if (!fieldIsPresentationalOnly(field)) {\n const addFieldSchema = getSchemaGenerator(field.type)\n\n if (addFieldSchema) {\n addFieldSchema(field, schema, payload, buildSchemaOptions, parentIsLocalized ?? false)\n }\n }\n })\n\n if (args.compoundIndexes) {\n for (const index of args.compoundIndexes) {\n const indexDefinition: Record<string, 1> = {}\n\n for (const field of index.fields) {\n if (field.pathHasLocalized && payload.config.localization) {\n for (const locale of payload.config.localization.locales) {\n indexDefinition[field.localizedPath.replace('<locale>', locale.code)] = 1\n }\n } else {\n indexDefinition[field.path] = 1\n }\n }\n\n schema.index(indexDefinition, {\n unique: args.buildSchemaOptions.disableUnique ? false : index.unique,\n })\n }\n }\n\n return schema\n}\n\nconst array: FieldSchemaGenerator<ArrayField> = (\n field: ArrayField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n) => {\n const baseSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: [\n buildSchema({\n buildSchemaOptions: {\n allowIDField: true,\n disableUnique: buildSchemaOptions.disableUnique,\n draftsEnabled: buildSchemaOptions.draftsEnabled,\n options: {\n _id: false,\n id: false,\n minimize: false,\n },\n },\n configFields: field.fields,\n parentIsLocalized: parentIsLocalized || field.localized,\n payload,\n }),\n ],\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst blocks: FieldSchemaGenerator<BlocksField> = (\n field: BlocksField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const fieldSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\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 if (fieldIsVirtual(blockField)) {\n return\n }\n\n const addFieldSchema = getSchemaGenerator(blockField.type)\n\n if (addFieldSchema) {\n addFieldSchema(\n blockField,\n blockSchema,\n payload,\n buildSchemaOptions,\n (parentIsLocalized || field.localized) ?? false,\n )\n }\n })\n\n if (fieldShouldBeLocalized({ field, parentIsLocalized }) && payload.config.localization) {\n payload.config.localization.localeCodes.forEach((localeCode) => {\n // @ts-expect-error Possible incorrect typing in mongoose types, this works\n schema.path(`${field.name}.${localeCode}`).discriminator(block.slug, blockSchema)\n })\n } else {\n // @ts-expect-error Possible incorrect typing in mongoose types, this works\n schema.path(field.name).discriminator(block.slug, blockSchema)\n }\n })\n}\n\nconst checkbox: FieldSchemaGenerator<CheckboxField> = (\n field: CheckboxField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: Boolean,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst code: FieldSchemaGenerator<CodeField> = (\n field: CodeField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: String,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst collapsible: FieldSchemaGenerator<CollapsibleField> = (\n field: CollapsibleField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n field.fields.forEach((subField: Field) => {\n if (fieldIsVirtual(subField)) {\n return\n }\n\n const addFieldSchema = getSchemaGenerator(subField.type)\n\n if (addFieldSchema) {\n addFieldSchema(subField, schema, payload, buildSchemaOptions, parentIsLocalized)\n }\n })\n}\n\nconst date: FieldSchemaGenerator<DateField> = (\n field: DateField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: Date,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst email: FieldSchemaGenerator<EmailField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: String,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst group: FieldSchemaGenerator<GroupField> = (\n field: GroupField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n if (fieldAffectsData(field)) {\n const formattedBaseSchema = formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized })\n\n // carry indexSortableFields through to versions if drafts enabled\n const indexSortableFields =\n buildSchemaOptions.indexSortableFields &&\n field.name === 'version' &&\n buildSchemaOptions.draftsEnabled\n\n const baseSchema: SchemaTypeOptions<any> = {\n ...formattedBaseSchema,\n type: buildSchema({\n buildSchemaOptions: {\n disableUnique: buildSchemaOptions.disableUnique,\n draftsEnabled: buildSchemaOptions.draftsEnabled,\n indexSortableFields,\n options: {\n _id: false,\n id: false,\n minimize: false,\n },\n },\n configFields: field.fields,\n parentIsLocalized: parentIsLocalized || field.localized,\n payload,\n }),\n }\n\n schema.add({\n [field.name]: localizeSchema(\n field,\n baseSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\n })\n } else {\n field.fields.forEach((subField) => {\n if (fieldIsVirtual(subField)) {\n return\n }\n\n const addFieldSchema = getSchemaGenerator(subField.type)\n\n if (addFieldSchema) {\n addFieldSchema(\n subField,\n schema,\n payload,\n buildSchemaOptions,\n (parentIsLocalized || field.localized) ?? false,\n )\n }\n })\n }\n}\n\nconst json: FieldSchemaGenerator<JSONField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: mongoose.Schema.Types.Mixed,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst number: FieldSchemaGenerator<NumberField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: field.hasMany ? [Number] : Number,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst point: FieldSchemaGenerator<PointField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema: SchemaTypeOptions<unknown> = {\n type: {\n type: String,\n enum: ['Point'],\n ...(typeof field.defaultValue !== 'undefined' && {\n default: 'Point',\n }),\n },\n coordinates: {\n type: [Number],\n default: formatDefaultValue(field),\n required: false,\n },\n }\n\n if (\n buildSchemaOptions.disableUnique &&\n field.unique &&\n fieldShouldBeLocalized({ field, parentIsLocalized })\n ) {\n baseSchema.coordinates.sparse = true\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n\n if (field.index === true || field.index === undefined) {\n const indexOptions: IndexOptions = {}\n if (!buildSchemaOptions.disableUnique && field.unique) {\n indexOptions.sparse = true\n indexOptions.unique = true\n }\n if (fieldShouldBeLocalized({ field, parentIsLocalized }) && payload.config.localization) {\n payload.config.localization.locales.forEach((locale) => {\n schema.index({ [`${field.name}.${locale.code}`]: '2dsphere' }, indexOptions)\n })\n } else {\n schema.index({ [field.name]: '2dsphere' }, indexOptions)\n }\n }\n}\n\nconst radio: FieldSchemaGenerator<RadioField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: String,\n enum: field.options.map((option) => {\n if (typeof option === 'object') {\n return option.value\n }\n return option\n }),\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst relationship: FieldSchemaGenerator<RelationshipField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n) => {\n const hasManyRelations = Array.isArray(field.relationTo)\n let schemaToReturn: { [key: string]: any } = {}\n\n const valueType = getRelationshipValueType(field, payload)\n\n if (fieldShouldBeLocalized({ field, parentIsLocalized }) && payload.config.localization) {\n schemaToReturn = {\n _id: false,\n type: payload.config.localization.localeCodes.reduce((locales, locale) => {\n let localeSchema: { [key: string]: any } = {}\n\n if (hasManyRelations) {\n localeSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n _id: false,\n type: mongoose.Schema.Types.Mixed,\n relationTo: { type: String, enum: field.relationTo },\n value: {\n type: valueType,\n refPath: `${field.name}.${locale}.relationTo`,\n },\n }\n } else {\n localeSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: valueType,\n ref: field.relationTo,\n }\n }\n\n return {\n ...locales,\n [locale]: field.hasMany\n ? { type: [localeSchema], default: formatDefaultValue(field) }\n : localeSchema,\n }\n }, {}),\n localized: true,\n }\n } else if (hasManyRelations) {\n schemaToReturn = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n _id: false,\n type: mongoose.Schema.Types.Mixed,\n relationTo: { type: String, enum: field.relationTo },\n value: {\n type: valueType,\n refPath: `${field.name}.relationTo`,\n },\n }\n\n if (field.hasMany) {\n schemaToReturn = {\n type: [schemaToReturn],\n default: formatDefaultValue(field),\n }\n }\n } else {\n schemaToReturn = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: valueType,\n ref: field.relationTo,\n }\n\n if (field.hasMany) {\n schemaToReturn = {\n type: [schemaToReturn],\n default: formatDefaultValue(field),\n }\n }\n }\n\n schema.add({\n [field.name]: schemaToReturn,\n })\n}\n\nconst richText: FieldSchemaGenerator<RichTextField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: mongoose.Schema.Types.Mixed,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst row: FieldSchemaGenerator<RowField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n field.fields.forEach((subField: Field) => {\n if (fieldIsVirtual(subField)) {\n return\n }\n\n const addFieldSchema = getSchemaGenerator(subField.type)\n\n if (addFieldSchema) {\n addFieldSchema(subField, schema, payload, buildSchemaOptions, parentIsLocalized)\n }\n })\n}\n\nconst select: FieldSchemaGenerator<SelectField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: String,\n enum: field.options.map((option) => {\n if (typeof option === 'object') {\n return option.value\n }\n return option\n }),\n }\n\n if (buildSchemaOptions.draftsEnabled || !field.required) {\n ;(baseSchema.enum as unknown[]).push(null)\n }\n\n schema.add({\n [field.name]: localizeSchema(\n field,\n field.hasMany ? [baseSchema] : baseSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\n })\n}\n\nconst tabs: FieldSchemaGenerator<TabsField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n field.tabs.forEach((tab) => {\n if (tabHasName(tab)) {\n if (fieldIsVirtual(tab)) {\n return\n }\n const baseSchema = {\n type: buildSchema({\n buildSchemaOptions: {\n disableUnique: buildSchemaOptions.disableUnique,\n draftsEnabled: buildSchemaOptions.draftsEnabled,\n options: {\n _id: false,\n id: false,\n minimize: false,\n },\n },\n configFields: tab.fields,\n parentIsLocalized: parentIsLocalized || tab.localized,\n payload,\n }),\n }\n\n schema.add({\n [tab.name]: localizeSchema(tab, baseSchema, payload.config.localization, parentIsLocalized),\n })\n } else {\n tab.fields.forEach((subField: Field) => {\n if (fieldIsVirtual(subField)) {\n return\n }\n const addFieldSchema = getSchemaGenerator(subField.type)\n\n if (addFieldSchema) {\n addFieldSchema(\n subField,\n schema,\n payload,\n buildSchemaOptions,\n (parentIsLocalized || tab.localized) ?? false,\n )\n }\n })\n }\n })\n}\n\nconst text: FieldSchemaGenerator<TextField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: field.hasMany ? [String] : String,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst textarea: FieldSchemaGenerator<TextareaField> = (\n field: TextareaField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: String,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst upload: FieldSchemaGenerator<UploadField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const hasManyRelations = Array.isArray(field.relationTo)\n let schemaToReturn: { [key: string]: any } = {}\n\n const valueType = getRelationshipValueType(field, payload)\n\n if (fieldShouldBeLocalized({ field, parentIsLocalized }) && payload.config.localization) {\n schemaToReturn = {\n _id: false,\n type: payload.config.localization.localeCodes.reduce((locales, locale) => {\n let localeSchema: { [key: string]: any } = {}\n\n if (hasManyRelations) {\n localeSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n _id: false,\n type: mongoose.Schema.Types.Mixed,\n relationTo: { type: String, enum: field.relationTo },\n value: {\n type: valueType,\n refPath: `${field.name}.${locale}.relationTo`,\n },\n }\n } else {\n localeSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: valueType,\n ref: field.relationTo,\n }\n }\n\n return {\n ...locales,\n [locale]: field.hasMany\n ? { type: [localeSchema], default: formatDefaultValue(field) }\n : localeSchema,\n }\n }, {}),\n localized: true,\n }\n } else if (hasManyRelations) {\n schemaToReturn = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n _id: false,\n type: mongoose.Schema.Types.Mixed,\n relationTo: { type: String, enum: field.relationTo },\n value: {\n type: valueType,\n refPath: `${field.name}.relationTo`,\n },\n }\n\n if (field.hasMany) {\n schemaToReturn = {\n type: [schemaToReturn],\n default: formatDefaultValue(field),\n }\n }\n } else {\n schemaToReturn = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: valueType,\n ref: field.relationTo,\n }\n\n if (field.hasMany) {\n schemaToReturn = {\n type: [schemaToReturn],\n default: formatDefaultValue(field),\n }\n }\n }\n\n schema.add({\n [field.name]: schemaToReturn,\n })\n}\n\nconst getSchemaGenerator = (fieldType: string): FieldSchemaGenerator | null => {\n if (fieldType in fieldToSchemaMap) {\n return fieldToSchemaMap[fieldType as keyof typeof fieldToSchemaMap] as FieldSchemaGenerator\n }\n\n return null\n}\n\nconst fieldToSchemaMap = {\n array,\n blocks,\n checkbox,\n code,\n collapsible,\n date,\n email,\n group,\n json,\n number,\n point,\n radio,\n relationship,\n richText,\n row,\n select,\n tabs,\n text,\n textarea,\n upload,\n}\n\nconst getRelationshipValueType = (field: RelationshipField | UploadField, payload: Payload) => {\n if (typeof field.relationTo === 'string') {\n const customIDType = payload.collections[field.relationTo]?.customIDType\n\n if (!customIDType) {\n return mongoose.Schema.Types.ObjectId\n }\n\n if (customIDType === 'number') {\n if (payload.db.useBigIntForNumberIDs) {\n return mongoose.Schema.Types.BigInt\n } else {\n return mongoose.Schema.Types.Number\n }\n }\n\n return mongoose.Schema.Types.String\n }\n\n // has custom id relationTo\n if (\n field.relationTo.some((relationTo) => {\n return !!payload.collections[relationTo]?.customIDType\n })\n ) {\n return mongoose.Schema.Types.Mixed\n }\n\n return mongoose.Schema.Types.ObjectId\n}\n"],"names":["mongoose","fieldAffectsData","fieldIsPresentationalOnly","fieldIsVirtual","fieldShouldBeLocalized","tabHasName","formatDefaultValue","field","defaultValue","undefined","formatBaseSchema","buildSchemaOptions","parentIsLocalized","disableUnique","draftsEnabled","indexSortableFields","schema","default","index","unique","required","type","sparse","hidden","localizeSchema","entity","localization","Array","isArray","locales","localeCodes","reduce","localeSchema","locale","_id","localized","buildSchema","args","configFields","flattenedFields","payload","allowIDField","options","fields","schemaFields","fieldsToSearch","idField","find","name","db","useBigIntForNumberIDs","Schema","Types","BigInt","Number","String","filter","forEach","addFieldSchema","getSchemaGenerator","compoundIndexes","indexDefinition","pathHasLocalized","config","localizedPath","replace","code","path","array","baseSchema","id","minimize","add","blocks","fieldSchema","discriminatorKey","blockReferences","blockItem","blockSchema","block","blockField","localeCode","discriminator","slug","checkbox","Boolean","collapsible","subField","date","Date","email","group","formattedBaseSchema","json","Mixed","number","hasMany","point","enum","coordinates","indexOptions","radio","map","option","value","relationship","hasManyRelations","relationTo","schemaToReturn","valueType","getRelationshipValueType","refPath","ref","richText","row","select","push","tabs","tab","text","textarea","upload","fieldType","fieldToSchemaMap","customIDType","collections","ObjectId","some"],"mappings":"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"}
|
|
1
|
+
{"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 FlattenedField,\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 { createSchemaBuildContext } from 'payload/internal'\nimport {\n fieldAffectsData,\n fieldIsPresentationalOnly,\n fieldIsVirtual,\n fieldShouldBeLocalized,\n tabHasName,\n} from 'payload/shared'\n\nimport type { MongoSchemaBuildContext } from './schemaBuildContext.js'\n\nimport { getBlockSchemaCacheKey } from './schemaBuildContext.js'\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 schemaBuildState: SchemaBuildState,\n) => void\n\ntype SchemaBuildState = {\n context: MongoSchemaBuildContext\n isVersion: boolean\n path: string\n}\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 flattenedFields?: FlattenedField[]\n isVersion?: boolean\n parentIsLocalized?: boolean\n payload: Payload\n schemaBuildContext?: MongoSchemaBuildContext\n schemaPath?: string\n}): Schema => {\n const {\n buildSchemaOptions = {},\n configFields,\n flattenedFields,\n parentIsLocalized,\n payload,\n } = args\n const schemaBuildContext = args.schemaBuildContext ?? createSchemaBuildContext<Schema>()\n const schemaBuildState: SchemaBuildState = {\n context: schemaBuildContext,\n isVersion: args.isVersion ?? false,\n path: args.schemaPath ?? 'schema',\n }\n const { allowIDField, options } = buildSchemaOptions\n let fields = {}\n\n let schemaFields = configFields\n\n if (!allowIDField) {\n // Use flattenedFields if available to find custom id field regardless of nesting\n const fieldsToSearch = flattenedFields || schemaFields\n const idField = fieldsToSearch.find((field) => fieldAffectsData(field) && field.name === 'id')\n if (idField) {\n fields = {\n _id:\n idField.type === 'number'\n ? payload.db.useBigIntForNumberIDs\n ? mongoose.Schema.Types.BigInt\n : Number\n : String,\n }\n schemaFields = schemaFields.filter(\n (field) => !(fieldAffectsData(field) && field.name === 'id'),\n )\n }\n }\n\n const schema = new mongoose.Schema(fields, options as any)\n\n schemaFields.forEach((field) => {\n if (fieldIsVirtual(field)) {\n return\n }\n\n if (!fieldIsPresentationalOnly(field)) {\n const addFieldSchema = getSchemaGenerator(field.type)\n\n if (addFieldSchema) {\n addFieldSchema(\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized ?? false,\n schemaBuildState,\n )\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 schemaBuildState,\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 isVersion: schemaBuildState.isVersion,\n parentIsLocalized: parentIsLocalized || field.localized,\n payload,\n schemaBuildContext: schemaBuildState.context,\n schemaPath: `${schemaBuildState.path}/field:${field.name}`,\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 schemaBuildState,\n): void => {\n const fieldSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\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 block = typeof blockItem === 'string' ? payload.blocks[blockItem] : blockItem\n\n if (!block) {\n return\n }\n\n const isLocalized = Boolean(parentIsLocalized || field.localized)\n const isReference = typeof blockItem === 'string'\n const fieldPath = `${schemaBuildState.path}/field:${field.name}`\n const blockSchema = schemaBuildState.context.getOrCreate({\n build: () => {\n const template = new mongoose.Schema({}, { _id: false, id: false })\n\n block.fields.forEach((blockField) => {\n if (fieldIsVirtual(blockField)) {\n return\n }\n\n const addFieldSchema = getSchemaGenerator(blockField.type)\n\n if (addFieldSchema) {\n addFieldSchema(blockField, template, payload, buildSchemaOptions, isLocalized, {\n context: schemaBuildState.context,\n isVersion: schemaBuildState.isVersion,\n path: isReference ? `block:${block.slug}` : `${fieldPath}/block:${block.slug}`,\n })\n }\n })\n\n return template\n },\n cacheKey: getBlockSchemaCacheKey({\n blockSlug: block.slug,\n buildSchemaOptions,\n fieldPath,\n isLocalized,\n isReference,\n isVersion: schemaBuildState.isVersion,\n }),\n definition: block,\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 schemaBuildState,\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(\n subField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n schemaBuildState,\n )\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 schemaBuildState,\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 isVersion: schemaBuildState.isVersion,\n parentIsLocalized: parentIsLocalized || field.localized,\n payload,\n schemaBuildContext: schemaBuildState.context,\n schemaPath: `${schemaBuildState.path}/field:${field.name}`,\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 schemaBuildState,\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 schemaBuildState,\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(\n subField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n schemaBuildState,\n )\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 schemaBuildState,\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 isVersion: schemaBuildState.isVersion,\n parentIsLocalized: parentIsLocalized || tab.localized,\n payload,\n schemaBuildContext: schemaBuildState.context,\n schemaPath: `${schemaBuildState.path}/tab:${tab.name}`,\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 schemaBuildState,\n )\n }\n })\n }\n })\n}\n\nconst text: FieldSchemaGenerator<TextField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: field.hasMany ? [String] : String,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst textarea: FieldSchemaGenerator<TextareaField> = (\n field: TextareaField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: String,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst upload: FieldSchemaGenerator<UploadField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const hasManyRelations = Array.isArray(field.relationTo)\n let schemaToReturn: { [key: string]: any } = {}\n\n const valueType = getRelationshipValueType(field, payload)\n\n if (fieldShouldBeLocalized({ field, parentIsLocalized }) && payload.config.localization) {\n schemaToReturn = {\n _id: false,\n type: payload.config.localization.localeCodes.reduce((locales, locale) => {\n let localeSchema: { [key: string]: any } = {}\n\n if (hasManyRelations) {\n localeSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n _id: false,\n type: mongoose.Schema.Types.Mixed,\n relationTo: { type: String, enum: field.relationTo },\n value: {\n type: valueType,\n refPath: `${field.name}.${locale}.relationTo`,\n },\n }\n } else {\n localeSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: valueType,\n ref: field.relationTo,\n }\n }\n\n return {\n ...locales,\n [locale]: field.hasMany\n ? { type: [localeSchema], default: formatDefaultValue(field) }\n : localeSchema,\n }\n }, {}),\n localized: true,\n }\n } else if (hasManyRelations) {\n schemaToReturn = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n _id: false,\n type: mongoose.Schema.Types.Mixed,\n relationTo: { type: String, enum: field.relationTo },\n value: {\n type: valueType,\n refPath: `${field.name}.relationTo`,\n },\n }\n\n if (field.hasMany) {\n schemaToReturn = {\n type: [schemaToReturn],\n default: formatDefaultValue(field),\n }\n }\n } else {\n schemaToReturn = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: valueType,\n ref: field.relationTo,\n }\n\n if (field.hasMany) {\n schemaToReturn = {\n type: [schemaToReturn],\n default: formatDefaultValue(field),\n }\n }\n }\n\n schema.add({\n [field.name]: schemaToReturn,\n })\n}\n\nconst getSchemaGenerator = (fieldType: string): FieldSchemaGenerator | null => {\n if (fieldType in fieldToSchemaMap) {\n return fieldToSchemaMap[fieldType as keyof typeof fieldToSchemaMap] as FieldSchemaGenerator\n }\n\n return null\n}\n\nconst fieldToSchemaMap = {\n array,\n blocks,\n checkbox,\n code,\n collapsible,\n date,\n email,\n group,\n json,\n number,\n point,\n radio,\n relationship,\n richText,\n row,\n select,\n tabs,\n text,\n textarea,\n upload,\n}\n\nconst getRelationshipValueType = (field: RelationshipField | UploadField, payload: Payload) => {\n if (typeof field.relationTo === 'string') {\n const customIDType = payload.collections[field.relationTo]?.customIDType\n\n if (!customIDType) {\n return mongoose.Schema.Types.ObjectId\n }\n\n if (customIDType === 'number') {\n if (payload.db.useBigIntForNumberIDs) {\n return mongoose.Schema.Types.BigInt\n } else {\n return mongoose.Schema.Types.Number\n }\n }\n\n return mongoose.Schema.Types.String\n }\n\n // has custom id relationTo\n if (\n field.relationTo.some((relationTo) => {\n return !!payload.collections[relationTo]?.customIDType\n })\n ) {\n return mongoose.Schema.Types.Mixed\n }\n\n return mongoose.Schema.Types.ObjectId\n}\n"],"names":["mongoose","createSchemaBuildContext","fieldAffectsData","fieldIsPresentationalOnly","fieldIsVirtual","fieldShouldBeLocalized","tabHasName","getBlockSchemaCacheKey","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","flattenedFields","payload","schemaBuildContext","schemaBuildState","context","isVersion","path","schemaPath","allowIDField","options","fields","schemaFields","fieldsToSearch","idField","find","name","db","useBigIntForNumberIDs","Schema","Types","BigInt","Number","String","filter","forEach","addFieldSchema","getSchemaGenerator","compoundIndexes","indexDefinition","pathHasLocalized","config","localizedPath","replace","code","array","baseSchema","id","minimize","add","blocks","fieldSchema","discriminatorKey","blockReferences","blockItem","block","isLocalized","Boolean","isReference","fieldPath","blockSchema","getOrCreate","build","template","blockField","slug","cacheKey","blockSlug","definition","localeCode","discriminator","checkbox","collapsible","subField","date","Date","email","group","formattedBaseSchema","json","Mixed","number","hasMany","point","enum","coordinates","indexOptions","radio","map","option","value","relationship","hasManyRelations","relationTo","schemaToReturn","valueType","getRelationshipValueType","refPath","ref","richText","row","select","push","tabs","tab","text","textarea","upload","fieldType","fieldToSchemaMap","customIDType","collections","ObjectId","some"],"mappings":"AAEA,OAAOA,cAAc,WAAU;AA+B/B,SAASC,wBAAwB,QAAQ,mBAAkB;AAC3D,SACEC,gBAAgB,EAChBC,yBAAyB,EACzBC,cAAc,EACdC,sBAAsB,EACtBC,UAAU,QACL,iBAAgB;AAIvB,SAASC,sBAAsB,QAAQ,0BAAyB;AAyBhE;;;CAGC,GACD,MAAMC,qBAAqB,CAACC,QAC1B,OAAOA,MAAMC,YAAY,KAAK,eAAe,OAAOD,MAAMC,YAAY,KAAK,aACvED,MAAMC,YAAY,GAClBC;AAEN,MAAMC,mBAAmB,CAAC,EACxBC,kBAAkB,EAClBJ,KAAK,EACLK,iBAAiB,EAKlB;IACC,MAAM,EAAEC,aAAa,EAAEC,aAAa,EAAEC,mBAAmB,EAAE,GAAGJ;IAC9D,MAAMK,SAAqC;QACzCC,SAASX,mBAAmBC;QAC5BW,OAAOX,MAAMW,KAAK,IAAK,CAACL,iBAAiBN,MAAMY,MAAM,IAAKJ,uBAAuB;QACjFK,UAAU;QACVD,QAAQ,AAAC,CAACN,iBAAiBN,MAAMY,MAAM,IAAK;IAC9C;IAEA,IACEH,OAAOG,MAAM,IACZhB,CAAAA,uBAAuB;QAAEI;QAAOK;IAAkB,MACjDE,iBACCd,iBAAiBO,UAChBA,MAAMc,IAAI,KAAK,WACfd,MAAMc,IAAI,KAAK,SACfd,MAAMa,QAAQ,KAAK,IAAI,GAC3B;QACAJ,OAAOM,MAAM,GAAG;IAClB;IAEA,IAAIf,MAAMgB,MAAM,EAAE;QAChBP,OAAOO,MAAM,GAAG;IAClB;IAEA,OAAOP;AACT;AAEA,MAAMQ,iBAAiB,CACrBC,QACAT,QACAU,cACAd;IAEA,IACET,uBAAuB;QAAEI,OAAOkB;QAAQb;IAAkB,MAC1Dc,gBACAC,MAAMC,OAAO,CAACF,aAAaG,OAAO,GAClC;QACA,OAAO;YACLR,MAAMK,aAAaI,WAAW,CAACC,MAAM,CACnC,CAACC,cAAcC,SAAY,CAAA;oBACzB,GAAGD,YAAY;oBACf,CAACC,OAAO,EAAEjB;gBACZ,CAAA,GACA;gBACEkB,KAAK;YACP;YAEFC,WAAW;QACb;IACF;IACA,OAAOnB;AACT;AAEA,OAAO,MAAMoB,cAAc,CAACC;IAW1B,MAAM,EACJ1B,qBAAqB,CAAC,CAAC,EACvB2B,YAAY,EACZC,eAAe,EACf3B,iBAAiB,EACjB4B,OAAO,EACR,GAAGH;IACJ,MAAMI,qBAAqBJ,KAAKI,kBAAkB,IAAI1C;IACtD,MAAM2C,mBAAqC;QACzCC,SAASF;QACTG,WAAWP,KAAKO,SAAS,IAAI;QAC7BC,MAAMR,KAAKS,UAAU,IAAI;IAC3B;IACA,MAAM,EAAEC,YAAY,EAAEC,OAAO,EAAE,GAAGrC;IAClC,IAAIsC,SAAS,CAAC;IAEd,IAAIC,eAAeZ;IAEnB,IAAI,CAACS,cAAc;QACjB,iFAAiF;QACjF,MAAMI,iBAAiBZ,mBAAmBW;QAC1C,MAAME,UAAUD,eAAeE,IAAI,CAAC,CAAC9C,QAAUP,iBAAiBO,UAAUA,MAAM+C,IAAI,KAAK;QACzF,IAAIF,SAAS;YACXH,SAAS;gBACPf,KACEkB,QAAQ/B,IAAI,KAAK,WACbmB,QAAQe,EAAE,CAACC,qBAAqB,GAC9B1D,SAAS2D,MAAM,CAACC,KAAK,CAACC,MAAM,GAC5BC,SACFC;YACR;YACAX,eAAeA,aAAaY,MAAM,CAChC,CAACvD,QAAU,CAAEP,CAAAA,iBAAiBO,UAAUA,MAAM+C,IAAI,KAAK,IAAG;QAE9D;IACF;IAEA,MAAMtC,SAAS,IAAIlB,SAAS2D,MAAM,CAACR,QAAQD;IAE3CE,aAAaa,OAAO,CAAC,CAACxD;QACpB,IAAIL,eAAeK,QAAQ;YACzB;QACF;QAEA,IAAI,CAACN,0BAA0BM,QAAQ;YACrC,MAAMyD,iBAAiBC,mBAAmB1D,MAAMc,IAAI;YAEpD,IAAI2C,gBAAgB;gBAClBA,eACEzD,OACAS,QACAwB,SACA7B,oBACAC,qBAAqB,OACrB8B;YAEJ;QACF;IACF;IAEA,IAAIL,KAAK6B,eAAe,EAAE;QACxB,KAAK,MAAMhD,SAASmB,KAAK6B,eAAe,CAAE;YACxC,MAAMC,kBAAqC,CAAC;YAE5C,KAAK,MAAM5D,SAASW,MAAM+B,MAAM,CAAE;gBAChC,IAAI1C,MAAM6D,gBAAgB,IAAI5B,QAAQ6B,MAAM,CAAC3C,YAAY,EAAE;oBACzD,KAAK,MAAMO,UAAUO,QAAQ6B,MAAM,CAAC3C,YAAY,CAACG,OAAO,CAAE;wBACxDsC,eAAe,CAAC5D,MAAM+D,aAAa,CAACC,OAAO,CAAC,YAAYtC,OAAOuC,IAAI,EAAE,GAAG;oBAC1E;gBACF,OAAO;oBACLL,eAAe,CAAC5D,MAAMsC,IAAI,CAAC,GAAG;gBAChC;YACF;YAEA7B,OAAOE,KAAK,CAACiD,iBAAiB;gBAC5BhD,QAAQkB,KAAK1B,kBAAkB,CAACE,aAAa,GAAG,QAAQK,MAAMC,MAAM;YACtE;QACF;IACF;IAEA,OAAOH;AACT,EAAC;AAED,MAAMyD,QAA0C,CAC9ClE,OACAS,QACAwB,SACA7B,oBACAC,mBACA8B;IAEA,MAAMgC,aAAqC;QACzC,GAAGhE,iBAAiB;YAAEC;YAAoBJ;YAAOK;QAAkB,EAAE;QACrES,MAAM;YACJe,YAAY;gBACVzB,oBAAoB;oBAClBoC,cAAc;oBACdlC,eAAeF,mBAAmBE,aAAa;oBAC/CC,eAAeH,mBAAmBG,aAAa;oBAC/CkC,SAAS;wBACPd,KAAK;wBACLyC,IAAI;wBACJC,UAAU;oBACZ;gBACF;gBACAtC,cAAc/B,MAAM0C,MAAM;gBAC1BL,WAAWF,iBAAiBE,SAAS;gBACrChC,mBAAmBA,qBAAqBL,MAAM4B,SAAS;gBACvDK;gBACAC,oBAAoBC,iBAAiBC,OAAO;gBAC5CG,YAAY,GAAGJ,iBAAiBG,IAAI,CAAC,OAAO,EAAEtC,MAAM+C,IAAI,EAAE;YAC5D;SACD;IACH;IAEAtC,OAAO6D,GAAG,CAAC;QACT,CAACtE,MAAM+C,IAAI,CAAC,EAAE9B,eAAejB,OAAOmE,YAAYlC,QAAQ6B,MAAM,CAAC3C,YAAY,EAAEd;IAC/E;AACF;AAEA,MAAMkE,SAA4C,CAChDvE,OACAS,QACAwB,SACA7B,oBACAC,mBACA8B;IAEA,MAAMqC,cAAsC;QAC1C,GAAGrE,iBAAiB;YAAEC;YAAoBJ;YAAOK;QAAkB,EAAE;QACrES,MAAM;YAAC,IAAIvB,SAAS2D,MAAM,CAAC,CAAC,GAAG;gBAAEvB,KAAK;gBAAO8C,kBAAkB;YAAY;SAAG;IAChF;IAEAhE,OAAO6D,GAAG,CAAC;QACT,CAACtE,MAAM+C,IAAI,CAAC,EAAE9B,eACZjB,OACAwE,aACAvC,QAAQ6B,MAAM,CAAC3C,YAAY,EAC3Bd;IAEJ;IACEL,CAAAA,MAAM0E,eAAe,IAAI1E,MAAMuE,MAAM,AAAD,EAAGf,OAAO,CAAC,CAACmB;QAChD,MAAMC,QAAQ,OAAOD,cAAc,WAAW1C,QAAQsC,MAAM,CAACI,UAAU,GAAGA;QAE1E,IAAI,CAACC,OAAO;YACV;QACF;QAEA,MAAMC,cAAcC,QAAQzE,qBAAqBL,MAAM4B,SAAS;QAChE,MAAMmD,cAAc,OAAOJ,cAAc;QACzC,MAAMK,YAAY,GAAG7C,iBAAiBG,IAAI,CAAC,OAAO,EAAEtC,MAAM+C,IAAI,EAAE;QAChE,MAAMkC,cAAc9C,iBAAiBC,OAAO,CAAC8C,WAAW,CAAC;YACvDC,OAAO;gBACL,MAAMC,WAAW,IAAI7F,SAAS2D,MAAM,CAAC,CAAC,GAAG;oBAAEvB,KAAK;oBAAOyC,IAAI;gBAAM;gBAEjEQ,MAAMlC,MAAM,CAACc,OAAO,CAAC,CAAC6B;oBACpB,IAAI1F,eAAe0F,aAAa;wBAC9B;oBACF;oBAEA,MAAM5B,iBAAiBC,mBAAmB2B,WAAWvE,IAAI;oBAEzD,IAAI2C,gBAAgB;wBAClBA,eAAe4B,YAAYD,UAAUnD,SAAS7B,oBAAoByE,aAAa;4BAC7EzC,SAASD,iBAAiBC,OAAO;4BACjCC,WAAWF,iBAAiBE,SAAS;4BACrCC,MAAMyC,cAAc,CAAC,MAAM,EAAEH,MAAMU,IAAI,EAAE,GAAG,GAAGN,UAAU,OAAO,EAAEJ,MAAMU,IAAI,EAAE;wBAChF;oBACF;gBACF;gBAEA,OAAOF;YACT;YACAG,UAAUzF,uBAAuB;gBAC/B0F,WAAWZ,MAAMU,IAAI;gBACrBlF;gBACA4E;gBACAH;gBACAE;gBACA1C,WAAWF,iBAAiBE,SAAS;YACvC;YACAoD,YAAYb;QACd;QAEA,IAAIhF,uBAAuB;YAAEI;YAAOK;QAAkB,MAAM4B,QAAQ6B,MAAM,CAAC3C,YAAY,EAAE;YACvFc,QAAQ6B,MAAM,CAAC3C,YAAY,CAACI,WAAW,CAACiC,OAAO,CAAC,CAACkC;gBAC/C,2EAA2E;gBAC3EjF,OAAO6B,IAAI,CAAC,GAAGtC,MAAM+C,IAAI,CAAC,CAAC,EAAE2C,YAAY,EAAEC,aAAa,CAACf,MAAMU,IAAI,EAAEL;YACvE;QACF,OAAO;YACL,2EAA2E;YAC3ExE,OAAO6B,IAAI,CAACtC,MAAM+C,IAAI,EAAE4C,aAAa,CAACf,MAAMU,IAAI,EAAEL;QACpD;IACF;AACF;AAEA,MAAMW,WAAgD,CACpD5F,OACAS,QACAwB,SACA7B,oBACAC;IAEA,MAAM8D,aAAqC;QACzC,GAAGhE,iBAAiB;YAAEC;YAAoBJ;YAAOK;QAAkB,EAAE;QACrES,MAAMgE;IACR;IAEArE,OAAO6D,GAAG,CAAC;QACT,CAACtE,MAAM+C,IAAI,CAAC,EAAE9B,eAAejB,OAAOmE,YAAYlC,QAAQ6B,MAAM,CAAC3C,YAAY,EAAEd;IAC/E;AACF;AAEA,MAAM4D,OAAwC,CAC5CjE,OACAS,QACAwB,SACA7B,oBACAC;IAEA,MAAM8D,aAAqC;QACzC,GAAGhE,iBAAiB;YAAEC;YAAoBJ;YAAOK;QAAkB,EAAE;QACrES,MAAMwC;IACR;IAEA7C,OAAO6D,GAAG,CAAC;QACT,CAACtE,MAAM+C,IAAI,CAAC,EAAE9B,eAAejB,OAAOmE,YAAYlC,QAAQ6B,MAAM,CAAC3C,YAAY,EAAEd;IAC/E;AACF;AAEA,MAAMwF,cAAsD,CAC1D7F,OACAS,QACAwB,SACA7B,oBACAC,mBACA8B;IAEAnC,MAAM0C,MAAM,CAACc,OAAO,CAAC,CAACsC;QACpB,IAAInG,eAAemG,WAAW;YAC5B;QACF;QAEA,MAAMrC,iBAAiBC,mBAAmBoC,SAAShF,IAAI;QAEvD,IAAI2C,gBAAgB;YAClBA,eACEqC,UACArF,QACAwB,SACA7B,oBACAC,mBACA8B;QAEJ;IACF;AACF;AAEA,MAAM4D,OAAwC,CAC5C/F,OACAS,QACAwB,SACA7B,oBACAC;IAEA,MAAM8D,aAAqC;QACzC,GAAGhE,iBAAiB;YAAEC;YAAoBJ;YAAOK;QAAkB,EAAE;QACrES,MAAMkF;IACR;IAEAvF,OAAO6D,GAAG,CAAC;QACT,CAACtE,MAAM+C,IAAI,CAAC,EAAE9B,eAAejB,OAAOmE,YAAYlC,QAAQ6B,MAAM,CAAC3C,YAAY,EAAEd;IAC/E;AACF;AAEA,MAAM4F,QAA0C,CAC9CjG,OACAS,QACAwB,SACA7B,oBACAC;IAEA,MAAM8D,aAAqC;QACzC,GAAGhE,iBAAiB;YAAEC;YAAoBJ;YAAOK;QAAkB,EAAE;QACrES,MAAMwC;IACR;IAEA7C,OAAO6D,GAAG,CAAC;QACT,CAACtE,MAAM+C,IAAI,CAAC,EAAE9B,eAAejB,OAAOmE,YAAYlC,QAAQ6B,MAAM,CAAC3C,YAAY,EAAEd;IAC/E;AACF;AAEA,MAAM6F,QAA0C,CAC9ClG,OACAS,QACAwB,SACA7B,oBACAC,mBACA8B;IAEA,IAAI1C,iBAAiBO,QAAQ;QAC3B,MAAMmG,sBAAsBhG,iBAAiB;YAAEC;YAAoBJ;YAAOK;QAAkB;QAE5F,kEAAkE;QAClE,MAAMG,sBACJJ,mBAAmBI,mBAAmB,IACtCR,MAAM+C,IAAI,KAAK,aACf3C,mBAAmBG,aAAa;QAElC,MAAM4D,aAAqC;YACzC,GAAGgC,mBAAmB;YACtBrF,MAAMe,YAAY;gBAChBzB,oBAAoB;oBAClBE,eAAeF,mBAAmBE,aAAa;oBAC/CC,eAAeH,mBAAmBG,aAAa;oBAC/CC;oBACAiC,SAAS;wBACPd,KAAK;wBACLyC,IAAI;wBACJC,UAAU;oBACZ;gBACF;gBACAtC,cAAc/B,MAAM0C,MAAM;gBAC1BL,WAAWF,iBAAiBE,SAAS;gBACrChC,mBAAmBA,qBAAqBL,MAAM4B,SAAS;gBACvDK;gBACAC,oBAAoBC,iBAAiBC,OAAO;gBAC5CG,YAAY,GAAGJ,iBAAiBG,IAAI,CAAC,OAAO,EAAEtC,MAAM+C,IAAI,EAAE;YAC5D;QACF;QAEAtC,OAAO6D,GAAG,CAAC;YACT,CAACtE,MAAM+C,IAAI,CAAC,EAAE9B,eACZjB,OACAmE,YACAlC,QAAQ6B,MAAM,CAAC3C,YAAY,EAC3Bd;QAEJ;IACF,OAAO;QACLL,MAAM0C,MAAM,CAACc,OAAO,CAAC,CAACsC;YACpB,IAAInG,eAAemG,WAAW;gBAC5B;YACF;YAEA,MAAMrC,iBAAiBC,mBAAmBoC,SAAShF,IAAI;YAEvD,IAAI2C,gBAAgB;gBAClBA,eACEqC,UACArF,QACAwB,SACA7B,oBACA,AAACC,CAAAA,qBAAqBL,MAAM4B,SAAS,AAAD,KAAM,OAC1CO;YAEJ;QACF;IACF;AACF;AAEA,MAAMiE,OAAwC,CAC5CpG,OACAS,QACAwB,SACA7B,oBACAC;IAEA,MAAM8D,aAAqC;QACzC,GAAGhE,iBAAiB;YAAEC;YAAoBJ;YAAOK;QAAkB,EAAE;QACrES,MAAMvB,SAAS2D,MAAM,CAACC,KAAK,CAACkD,KAAK;IACnC;IAEA5F,OAAO6D,GAAG,CAAC;QACT,CAACtE,MAAM+C,IAAI,CAAC,EAAE9B,eAAejB,OAAOmE,YAAYlC,QAAQ6B,MAAM,CAAC3C,YAAY,EAAEd;IAC/E;AACF;AAEA,MAAMiG,SAA4C,CAChDtG,OACAS,QACAwB,SACA7B,oBACAC;IAEA,MAAM8D,aAAqC;QACzC,GAAGhE,iBAAiB;YAAEC;YAAoBJ;YAAOK;QAAkB,EAAE;QACrES,MAAMd,MAAMuG,OAAO,GAAG;YAAClD;SAAO,GAAGA;IACnC;IAEA5C,OAAO6D,GAAG,CAAC;QACT,CAACtE,MAAM+C,IAAI,CAAC,EAAE9B,eAAejB,OAAOmE,YAAYlC,QAAQ6B,MAAM,CAAC3C,YAAY,EAAEd;IAC/E;AACF;AAEA,MAAMmG,QAA0C,CAC9CxG,OACAS,QACAwB,SACA7B,oBACAC;IAEA,MAAM8D,aAAyC;QAC7CrD,MAAM;YACJA,MAAMwC;YACNmD,MAAM;gBAAC;aAAQ;YACf,GAAI,OAAOzG,MAAMC,YAAY,KAAK,eAAe;gBAC/CS,SAAS;YACX,CAAC;QACH;QACAgG,aAAa;YACX5F,MAAM;gBAACuC;aAAO;YACd3C,SAASX,mBAAmBC;YAC5Ba,UAAU;QACZ;IACF;IAEA,IACET,mBAAmBE,aAAa,IAChCN,MAAMY,MAAM,IACZhB,uBAAuB;QAAEI;QAAOK;IAAkB,IAClD;QACA8D,WAAWuC,WAAW,CAAC3F,MAAM,GAAG;IAClC;IAEAN,OAAO6D,GAAG,CAAC;QACT,CAACtE,MAAM+C,IAAI,CAAC,EAAE9B,eAAejB,OAAOmE,YAAYlC,QAAQ6B,MAAM,CAAC3C,YAAY,EAAEd;IAC/E;IAEA,IAAIL,MAAMW,KAAK,KAAK,QAAQX,MAAMW,KAAK,KAAKT,WAAW;QACrD,MAAMyG,eAA6B,CAAC;QACpC,IAAI,CAACvG,mBAAmBE,aAAa,IAAIN,MAAMY,MAAM,EAAE;YACrD+F,aAAa5F,MAAM,GAAG;YACtB4F,aAAa/F,MAAM,GAAG;QACxB;QACA,IAAIhB,uBAAuB;YAAEI;YAAOK;QAAkB,MAAM4B,QAAQ6B,MAAM,CAAC3C,YAAY,EAAE;YACvFc,QAAQ6B,MAAM,CAAC3C,YAAY,CAACG,OAAO,CAACkC,OAAO,CAAC,CAAC9B;gBAC3CjB,OAAOE,KAAK,CAAC;oBAAE,CAAC,GAAGX,MAAM+C,IAAI,CAAC,CAAC,EAAErB,OAAOuC,IAAI,EAAE,CAAC,EAAE;gBAAW,GAAG0C;YACjE;QACF,OAAO;YACLlG,OAAOE,KAAK,CAAC;gBAAE,CAACX,MAAM+C,IAAI,CAAC,EAAE;YAAW,GAAG4D;QAC7C;IACF;AACF;AAEA,MAAMC,QAA0C,CAC9C5G,OACAS,QACAwB,SACA7B,oBACAC;IAEA,MAAM8D,aAAa;QACjB,GAAGhE,iBAAiB;YAAEC;YAAoBJ;YAAOK;QAAkB,EAAE;QACrES,MAAMwC;QACNmD,MAAMzG,MAAMyC,OAAO,CAACoE,GAAG,CAAC,CAACC;YACvB,IAAI,OAAOA,WAAW,UAAU;gBAC9B,OAAOA,OAAOC,KAAK;YACrB;YACA,OAAOD;QACT;IACF;IAEArG,OAAO6D,GAAG,CAAC;QACT,CAACtE,MAAM+C,IAAI,CAAC,EAAE9B,eAAejB,OAAOmE,YAAYlC,QAAQ6B,MAAM,CAAC3C,YAAY,EAAEd;IAC/E;AACF;AAEA,MAAM2G,eAAwD,CAC5DhH,OACAS,QACAwB,SACA7B,oBACAC;IAEA,MAAM4G,mBAAmB7F,MAAMC,OAAO,CAACrB,MAAMkH,UAAU;IACvD,IAAIC,iBAAyC,CAAC;IAE9C,MAAMC,YAAYC,yBAAyBrH,OAAOiC;IAElD,IAAIrC,uBAAuB;QAAEI;QAAOK;IAAkB,MAAM4B,QAAQ6B,MAAM,CAAC3C,YAAY,EAAE;QACvFgG,iBAAiB;YACfxF,KAAK;YACLb,MAAMmB,QAAQ6B,MAAM,CAAC3C,YAAY,CAACI,WAAW,CAACC,MAAM,CAAC,CAACF,SAASI;gBAC7D,IAAID,eAAuC,CAAC;gBAE5C,IAAIwF,kBAAkB;oBACpBxF,eAAe;wBACb,GAAGtB,iBAAiB;4BAAEC;4BAAoBJ;4BAAOK;wBAAkB,EAAE;wBACrEsB,KAAK;wBACLb,MAAMvB,SAAS2D,MAAM,CAACC,KAAK,CAACkD,KAAK;wBACjCa,YAAY;4BAAEpG,MAAMwC;4BAAQmD,MAAMzG,MAAMkH,UAAU;wBAAC;wBACnDH,OAAO;4BACLjG,MAAMsG;4BACNE,SAAS,GAAGtH,MAAM+C,IAAI,CAAC,CAAC,EAAErB,OAAO,WAAW,CAAC;wBAC/C;oBACF;gBACF,OAAO;oBACLD,eAAe;wBACb,GAAGtB,iBAAiB;4BAAEC;4BAAoBJ;4BAAOK;wBAAkB,EAAE;wBACrES,MAAMsG;wBACNG,KAAKvH,MAAMkH,UAAU;oBACvB;gBACF;gBAEA,OAAO;oBACL,GAAG5F,OAAO;oBACV,CAACI,OAAO,EAAE1B,MAAMuG,OAAO,GACnB;wBAAEzF,MAAM;4BAACW;yBAAa;wBAAEf,SAASX,mBAAmBC;oBAAO,IAC3DyB;gBACN;YACF,GAAG,CAAC;YACJG,WAAW;QACb;IACF,OAAO,IAAIqF,kBAAkB;QAC3BE,iBAAiB;YACf,GAAGhH,iBAAiB;gBAAEC;gBAAoBJ;gBAAOK;YAAkB,EAAE;YACrEsB,KAAK;YACLb,MAAMvB,SAAS2D,MAAM,CAACC,KAAK,CAACkD,KAAK;YACjCa,YAAY;gBAAEpG,MAAMwC;gBAAQmD,MAAMzG,MAAMkH,UAAU;YAAC;YACnDH,OAAO;gBACLjG,MAAMsG;gBACNE,SAAS,GAAGtH,MAAM+C,IAAI,CAAC,WAAW,CAAC;YACrC;QACF;QAEA,IAAI/C,MAAMuG,OAAO,EAAE;YACjBY,iBAAiB;gBACfrG,MAAM;oBAACqG;iBAAe;gBACtBzG,SAASX,mBAAmBC;YAC9B;QACF;IACF,OAAO;QACLmH,iBAAiB;YACf,GAAGhH,iBAAiB;gBAAEC;gBAAoBJ;gBAAOK;YAAkB,EAAE;YACrES,MAAMsG;YACNG,KAAKvH,MAAMkH,UAAU;QACvB;QAEA,IAAIlH,MAAMuG,OAAO,EAAE;YACjBY,iBAAiB;gBACfrG,MAAM;oBAACqG;iBAAe;gBACtBzG,SAASX,mBAAmBC;YAC9B;QACF;IACF;IAEAS,OAAO6D,GAAG,CAAC;QACT,CAACtE,MAAM+C,IAAI,CAAC,EAAEoE;IAChB;AACF;AAEA,MAAMK,WAAgD,CACpDxH,OACAS,QACAwB,SACA7B,oBACAC;IAEA,MAAM8D,aAAa;QACjB,GAAGhE,iBAAiB;YAAEC;YAAoBJ;YAAOK;QAAkB,EAAE;QACrES,MAAMvB,SAAS2D,MAAM,CAACC,KAAK,CAACkD,KAAK;IACnC;IAEA5F,OAAO6D,GAAG,CAAC;QACT,CAACtE,MAAM+C,IAAI,CAAC,EAAE9B,eAAejB,OAAOmE,YAAYlC,QAAQ6B,MAAM,CAAC3C,YAAY,EAAEd;IAC/E;AACF;AAEA,MAAMoH,MAAsC,CAC1CzH,OACAS,QACAwB,SACA7B,oBACAC,mBACA8B;IAEAnC,MAAM0C,MAAM,CAACc,OAAO,CAAC,CAACsC;QACpB,IAAInG,eAAemG,WAAW;YAC5B;QACF;QAEA,MAAMrC,iBAAiBC,mBAAmBoC,SAAShF,IAAI;QAEvD,IAAI2C,gBAAgB;YAClBA,eACEqC,UACArF,QACAwB,SACA7B,oBACAC,mBACA8B;QAEJ;IACF;AACF;AAEA,MAAMuF,SAA4C,CAChD1H,OACAS,QACAwB,SACA7B,oBACAC;IAEA,MAAM8D,aAAqC;QACzC,GAAGhE,iBAAiB;YAAEC;YAAoBJ;YAAOK;QAAkB,EAAE;QACrES,MAAMwC;QACNmD,MAAMzG,MAAMyC,OAAO,CAACoE,GAAG,CAAC,CAACC;YACvB,IAAI,OAAOA,WAAW,UAAU;gBAC9B,OAAOA,OAAOC,KAAK;YACrB;YACA,OAAOD;QACT;IACF;IAEA,IAAI1G,mBAAmBG,aAAa,IAAI,CAACP,MAAMa,QAAQ,EAAE;;QACrDsD,WAAWsC,IAAI,CAAekB,IAAI,CAAC;IACvC;IAEAlH,OAAO6D,GAAG,CAAC;QACT,CAACtE,MAAM+C,IAAI,CAAC,EAAE9B,eACZjB,OACAA,MAAMuG,OAAO,GAAG;YAACpC;SAAW,GAAGA,YAC/BlC,QAAQ6B,MAAM,CAAC3C,YAAY,EAC3Bd;IAEJ;AACF;AAEA,MAAMuH,OAAwC,CAC5C5H,OACAS,QACAwB,SACA7B,oBACAC,mBACA8B;IAEAnC,MAAM4H,IAAI,CAACpE,OAAO,CAAC,CAACqE;QAClB,IAAIhI,WAAWgI,MAAM;YACnB,IAAIlI,eAAekI,MAAM;gBACvB;YACF;YACA,MAAM1D,aAAa;gBACjBrD,MAAMe,YAAY;oBAChBzB,oBAAoB;wBAClBE,eAAeF,mBAAmBE,aAAa;wBAC/CC,eAAeH,mBAAmBG,aAAa;wBAC/CkC,SAAS;4BACPd,KAAK;4BACLyC,IAAI;4BACJC,UAAU;wBACZ;oBACF;oBACAtC,cAAc8F,IAAInF,MAAM;oBACxBL,WAAWF,iBAAiBE,SAAS;oBACrChC,mBAAmBA,qBAAqBwH,IAAIjG,SAAS;oBACrDK;oBACAC,oBAAoBC,iBAAiBC,OAAO;oBAC5CG,YAAY,GAAGJ,iBAAiBG,IAAI,CAAC,KAAK,EAAEuF,IAAI9E,IAAI,EAAE;gBACxD;YACF;YAEAtC,OAAO6D,GAAG,CAAC;gBACT,CAACuD,IAAI9E,IAAI,CAAC,EAAE9B,eAAe4G,KAAK1D,YAAYlC,QAAQ6B,MAAM,CAAC3C,YAAY,EAAEd;YAC3E;QACF,OAAO;YACLwH,IAAInF,MAAM,CAACc,OAAO,CAAC,CAACsC;gBAClB,IAAInG,eAAemG,WAAW;oBAC5B;gBACF;gBACA,MAAMrC,iBAAiBC,mBAAmBoC,SAAShF,IAAI;gBAEvD,IAAI2C,gBAAgB;oBAClBA,eACEqC,UACArF,QACAwB,SACA7B,oBACA,AAACC,CAAAA,qBAAqBwH,IAAIjG,SAAS,AAAD,KAAM,OACxCO;gBAEJ;YACF;QACF;IACF;AACF;AAEA,MAAM2F,OAAwC,CAC5C9H,OACAS,QACAwB,SACA7B,oBACAC;IAEA,MAAM8D,aAAa;QACjB,GAAGhE,iBAAiB;YAAEC;YAAoBJ;YAAOK;QAAkB,EAAE;QACrES,MAAMd,MAAMuG,OAAO,GAAG;YAACjD;SAAO,GAAGA;IACnC;IAEA7C,OAAO6D,GAAG,CAAC;QACT,CAACtE,MAAM+C,IAAI,CAAC,EAAE9B,eAAejB,OAAOmE,YAAYlC,QAAQ6B,MAAM,CAAC3C,YAAY,EAAEd;IAC/E;AACF;AAEA,MAAM0H,WAAgD,CACpD/H,OACAS,QACAwB,SACA7B,oBACAC;IAEA,MAAM8D,aAAa;QACjB,GAAGhE,iBAAiB;YAAEC;YAAoBJ;YAAOK;QAAkB,EAAE;QACrES,MAAMwC;IACR;IAEA7C,OAAO6D,GAAG,CAAC;QACT,CAACtE,MAAM+C,IAAI,CAAC,EAAE9B,eAAejB,OAAOmE,YAAYlC,QAAQ6B,MAAM,CAAC3C,YAAY,EAAEd;IAC/E;AACF;AAEA,MAAM2H,SAA4C,CAChDhI,OACAS,QACAwB,SACA7B,oBACAC;IAEA,MAAM4G,mBAAmB7F,MAAMC,OAAO,CAACrB,MAAMkH,UAAU;IACvD,IAAIC,iBAAyC,CAAC;IAE9C,MAAMC,YAAYC,yBAAyBrH,OAAOiC;IAElD,IAAIrC,uBAAuB;QAAEI;QAAOK;IAAkB,MAAM4B,QAAQ6B,MAAM,CAAC3C,YAAY,EAAE;QACvFgG,iBAAiB;YACfxF,KAAK;YACLb,MAAMmB,QAAQ6B,MAAM,CAAC3C,YAAY,CAACI,WAAW,CAACC,MAAM,CAAC,CAACF,SAASI;gBAC7D,IAAID,eAAuC,CAAC;gBAE5C,IAAIwF,kBAAkB;oBACpBxF,eAAe;wBACb,GAAGtB,iBAAiB;4BAAEC;4BAAoBJ;4BAAOK;wBAAkB,EAAE;wBACrEsB,KAAK;wBACLb,MAAMvB,SAAS2D,MAAM,CAACC,KAAK,CAACkD,KAAK;wBACjCa,YAAY;4BAAEpG,MAAMwC;4BAAQmD,MAAMzG,MAAMkH,UAAU;wBAAC;wBACnDH,OAAO;4BACLjG,MAAMsG;4BACNE,SAAS,GAAGtH,MAAM+C,IAAI,CAAC,CAAC,EAAErB,OAAO,WAAW,CAAC;wBAC/C;oBACF;gBACF,OAAO;oBACLD,eAAe;wBACb,GAAGtB,iBAAiB;4BAAEC;4BAAoBJ;4BAAOK;wBAAkB,EAAE;wBACrES,MAAMsG;wBACNG,KAAKvH,MAAMkH,UAAU;oBACvB;gBACF;gBAEA,OAAO;oBACL,GAAG5F,OAAO;oBACV,CAACI,OAAO,EAAE1B,MAAMuG,OAAO,GACnB;wBAAEzF,MAAM;4BAACW;yBAAa;wBAAEf,SAASX,mBAAmBC;oBAAO,IAC3DyB;gBACN;YACF,GAAG,CAAC;YACJG,WAAW;QACb;IACF,OAAO,IAAIqF,kBAAkB;QAC3BE,iBAAiB;YACf,GAAGhH,iBAAiB;gBAAEC;gBAAoBJ;gBAAOK;YAAkB,EAAE;YACrEsB,KAAK;YACLb,MAAMvB,SAAS2D,MAAM,CAACC,KAAK,CAACkD,KAAK;YACjCa,YAAY;gBAAEpG,MAAMwC;gBAAQmD,MAAMzG,MAAMkH,UAAU;YAAC;YACnDH,OAAO;gBACLjG,MAAMsG;gBACNE,SAAS,GAAGtH,MAAM+C,IAAI,CAAC,WAAW,CAAC;YACrC;QACF;QAEA,IAAI/C,MAAMuG,OAAO,EAAE;YACjBY,iBAAiB;gBACfrG,MAAM;oBAACqG;iBAAe;gBACtBzG,SAASX,mBAAmBC;YAC9B;QACF;IACF,OAAO;QACLmH,iBAAiB;YACf,GAAGhH,iBAAiB;gBAAEC;gBAAoBJ;gBAAOK;YAAkB,EAAE;YACrES,MAAMsG;YACNG,KAAKvH,MAAMkH,UAAU;QACvB;QAEA,IAAIlH,MAAMuG,OAAO,EAAE;YACjBY,iBAAiB;gBACfrG,MAAM;oBAACqG;iBAAe;gBACtBzG,SAASX,mBAAmBC;YAC9B;QACF;IACF;IAEAS,OAAO6D,GAAG,CAAC;QACT,CAACtE,MAAM+C,IAAI,CAAC,EAAEoE;IAChB;AACF;AAEA,MAAMzD,qBAAqB,CAACuE;IAC1B,IAAIA,aAAaC,kBAAkB;QACjC,OAAOA,gBAAgB,CAACD,UAA2C;IACrE;IAEA,OAAO;AACT;AAEA,MAAMC,mBAAmB;IACvBhE;IACAK;IACAqB;IACA3B;IACA4B;IACAE;IACAE;IACAC;IACAE;IACAE;IACAE;IACAI;IACAI;IACAQ;IACAC;IACAC;IACAE;IACAE;IACAC;IACAC;AACF;AAEA,MAAMX,2BAA2B,CAACrH,OAAwCiC;IACxE,IAAI,OAAOjC,MAAMkH,UAAU,KAAK,UAAU;QACxC,MAAMiB,eAAelG,QAAQmG,WAAW,CAACpI,MAAMkH,UAAU,CAAC,EAAEiB;QAE5D,IAAI,CAACA,cAAc;YACjB,OAAO5I,SAAS2D,MAAM,CAACC,KAAK,CAACkF,QAAQ;QACvC;QAEA,IAAIF,iBAAiB,UAAU;YAC7B,IAAIlG,QAAQe,EAAE,CAACC,qBAAqB,EAAE;gBACpC,OAAO1D,SAAS2D,MAAM,CAACC,KAAK,CAACC,MAAM;YACrC,OAAO;gBACL,OAAO7D,SAAS2D,MAAM,CAACC,KAAK,CAACE,MAAM;YACrC;QACF;QAEA,OAAO9D,SAAS2D,MAAM,CAACC,KAAK,CAACG,MAAM;IACrC;IAEA,2BAA2B;IAC3B,IACEtD,MAAMkH,UAAU,CAACoB,IAAI,CAAC,CAACpB;QACrB,OAAO,CAAC,CAACjF,QAAQmG,WAAW,CAAClB,WAAW,EAAEiB;IAC5C,IACA;QACA,OAAO5I,SAAS2D,MAAM,CAACC,KAAK,CAACkD,KAAK;IACpC;IAEA,OAAO9G,SAAS2D,MAAM,CAACC,KAAK,CAACkF,QAAQ;AACvC"}
|
|
@@ -0,0 +1,387 @@
|
|
|
1
|
+
import { createSchemaBuildContext } from 'payload/internal';
|
|
2
|
+
import { describe, expect, test } from 'vitest';
|
|
3
|
+
import { buildSchema } from './buildSchema.js';
|
|
4
|
+
import { getBlockSchemaCacheKey } from './schemaBuildContext.js';
|
|
5
|
+
const buildSchemaWithContext = buildSchema;
|
|
6
|
+
describe('MongoDB schema build context', ()=>{
|
|
7
|
+
test('should scope cache keys by referenced and inline placement', ()=>{
|
|
8
|
+
const createKey = ({ fieldPath, isReference })=>getBlockSchemaCacheKey({
|
|
9
|
+
blockSlug: 'hero',
|
|
10
|
+
buildSchemaOptions: {},
|
|
11
|
+
fieldPath,
|
|
12
|
+
isLocalized: false,
|
|
13
|
+
isReference,
|
|
14
|
+
isVersion: false
|
|
15
|
+
});
|
|
16
|
+
const firstReferenceKey = createKey({
|
|
17
|
+
fieldPath: 'collection:posts/field:first',
|
|
18
|
+
isReference: true
|
|
19
|
+
});
|
|
20
|
+
const secondReferenceKey = createKey({
|
|
21
|
+
fieldPath: 'collection:posts/field:second',
|
|
22
|
+
isReference: true
|
|
23
|
+
});
|
|
24
|
+
const firstInlineKey = createKey({
|
|
25
|
+
fieldPath: 'collection:posts/field:first',
|
|
26
|
+
isReference: false
|
|
27
|
+
});
|
|
28
|
+
const secondInlineKey = createKey({
|
|
29
|
+
fieldPath: 'collection:posts/field:second',
|
|
30
|
+
isReference: false
|
|
31
|
+
});
|
|
32
|
+
expect(firstReferenceKey).toBe(secondReferenceKey);
|
|
33
|
+
expect(firstInlineKey).not.toBe(secondInlineKey);
|
|
34
|
+
expect(firstReferenceKey).not.toBe(firstInlineKey);
|
|
35
|
+
});
|
|
36
|
+
test('should normalize false and undefined in block variant keys', ()=>{
|
|
37
|
+
expect(getBlockSchemaCacheKey({
|
|
38
|
+
blockSlug: 'hero',
|
|
39
|
+
buildSchemaOptions: {},
|
|
40
|
+
fieldPath: 'collection:posts/field:layout',
|
|
41
|
+
isLocalized: false,
|
|
42
|
+
isReference: true,
|
|
43
|
+
isVersion: false
|
|
44
|
+
})).toBe(getBlockSchemaCacheKey({
|
|
45
|
+
blockSlug: 'hero',
|
|
46
|
+
buildSchemaOptions: {
|
|
47
|
+
disableUnique: false,
|
|
48
|
+
draftsEnabled: false,
|
|
49
|
+
indexSortableFields: false
|
|
50
|
+
},
|
|
51
|
+
fieldPath: 'collection:posts/field:layout',
|
|
52
|
+
isLocalized: false,
|
|
53
|
+
isReference: true,
|
|
54
|
+
isVersion: false
|
|
55
|
+
}));
|
|
56
|
+
});
|
|
57
|
+
test.each([
|
|
58
|
+
{
|
|
59
|
+
buildSchemaOptions: {
|
|
60
|
+
disableUnique: true
|
|
61
|
+
},
|
|
62
|
+
isLocalized: false,
|
|
63
|
+
isVersion: false,
|
|
64
|
+
variant: 'unique handling'
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
buildSchemaOptions: {
|
|
68
|
+
draftsEnabled: true
|
|
69
|
+
},
|
|
70
|
+
isLocalized: false,
|
|
71
|
+
isVersion: false,
|
|
72
|
+
variant: 'draft handling'
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
buildSchemaOptions: {
|
|
76
|
+
indexSortableFields: true
|
|
77
|
+
},
|
|
78
|
+
isLocalized: false,
|
|
79
|
+
isVersion: false,
|
|
80
|
+
variant: 'sortable indexes'
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
buildSchemaOptions: {},
|
|
84
|
+
isLocalized: true,
|
|
85
|
+
isVersion: false,
|
|
86
|
+
variant: 'localization'
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
buildSchemaOptions: {},
|
|
90
|
+
isLocalized: false,
|
|
91
|
+
isVersion: true,
|
|
92
|
+
variant: 'versions'
|
|
93
|
+
}
|
|
94
|
+
])('should separate $variant in block cache keys', ({ buildSchemaOptions, isLocalized, isVersion })=>{
|
|
95
|
+
const baseKey = getBlockSchemaCacheKey({
|
|
96
|
+
blockSlug: 'hero',
|
|
97
|
+
buildSchemaOptions: {},
|
|
98
|
+
fieldPath: 'collection:posts/field:layout',
|
|
99
|
+
isLocalized: false,
|
|
100
|
+
isReference: true,
|
|
101
|
+
isVersion: false
|
|
102
|
+
});
|
|
103
|
+
expect(getBlockSchemaCacheKey({
|
|
104
|
+
blockSlug: 'hero',
|
|
105
|
+
buildSchemaOptions,
|
|
106
|
+
fieldPath: 'collection:posts/field:layout',
|
|
107
|
+
isLocalized,
|
|
108
|
+
isReference: true,
|
|
109
|
+
isVersion
|
|
110
|
+
})).not.toBe(baseKey);
|
|
111
|
+
});
|
|
112
|
+
test('should build a diamond graph once per block and variant', ()=>{
|
|
113
|
+
const blocks = createDiamondBlockGraph();
|
|
114
|
+
const payload = createPayloadFixture({
|
|
115
|
+
blocks
|
|
116
|
+
});
|
|
117
|
+
const { builds, context } = createRecordedSchemaBuildContext();
|
|
118
|
+
const schema = buildSchemaWithContext({
|
|
119
|
+
buildSchemaOptions: {},
|
|
120
|
+
configFields: createRootFields(),
|
|
121
|
+
payload,
|
|
122
|
+
schemaBuildContext: context
|
|
123
|
+
});
|
|
124
|
+
expect(builds.filter(({ label })=>label === 'block:leaf')).toHaveLength(1);
|
|
125
|
+
expect(builds.filter(({ label })=>label === 'block:root')).toHaveLength(1);
|
|
126
|
+
expect(getBlockDiscriminator({
|
|
127
|
+
path: 'layoutA',
|
|
128
|
+
schema,
|
|
129
|
+
slug: 'root'
|
|
130
|
+
})).toBeDefined();
|
|
131
|
+
expect(getBlockDiscriminator({
|
|
132
|
+
path: 'layoutB',
|
|
133
|
+
schema,
|
|
134
|
+
slug: 'root'
|
|
135
|
+
})).toBeDefined();
|
|
136
|
+
});
|
|
137
|
+
test('should keep cloned block registrations independent after template reuse', ()=>{
|
|
138
|
+
const blocks = createDiamondBlockGraph();
|
|
139
|
+
const schema = buildSchemaWithContext({
|
|
140
|
+
buildSchemaOptions: {},
|
|
141
|
+
configFields: createRootFields(),
|
|
142
|
+
payload: createPayloadFixture({
|
|
143
|
+
blocks
|
|
144
|
+
}),
|
|
145
|
+
schemaBuildContext: createSchemaBuildContext()
|
|
146
|
+
});
|
|
147
|
+
const firstRoot = getBlockDiscriminator({
|
|
148
|
+
path: 'layoutA',
|
|
149
|
+
schema,
|
|
150
|
+
slug: 'root'
|
|
151
|
+
});
|
|
152
|
+
const secondRoot = getBlockDiscriminator({
|
|
153
|
+
path: 'layoutB',
|
|
154
|
+
schema,
|
|
155
|
+
slug: 'root'
|
|
156
|
+
});
|
|
157
|
+
expect(firstRoot).not.toBe(secondRoot);
|
|
158
|
+
expect(describeSchema(firstRoot)).toEqual(describeSchema(secondRoot));
|
|
159
|
+
firstRoot.add({
|
|
160
|
+
firstParentOnly: String
|
|
161
|
+
});
|
|
162
|
+
expect(firstRoot.path('firstParentOnly')).toBeDefined();
|
|
163
|
+
expect(secondRoot.path('firstParentOnly')).toBeUndefined();
|
|
164
|
+
});
|
|
165
|
+
test('should separate a shared inline block by nested field path', ()=>{
|
|
166
|
+
const sharedInlineBlock = {
|
|
167
|
+
slug: 'inline',
|
|
168
|
+
fields: [
|
|
169
|
+
{
|
|
170
|
+
name: 'text',
|
|
171
|
+
type: 'text'
|
|
172
|
+
}
|
|
173
|
+
]
|
|
174
|
+
};
|
|
175
|
+
const { builds, context } = createRecordedSchemaBuildContext();
|
|
176
|
+
buildSchemaWithContext({
|
|
177
|
+
buildSchemaOptions: {},
|
|
178
|
+
configFields: [
|
|
179
|
+
{
|
|
180
|
+
name: 'first',
|
|
181
|
+
type: 'group',
|
|
182
|
+
fields: [
|
|
183
|
+
{
|
|
184
|
+
name: 'items',
|
|
185
|
+
type: 'array',
|
|
186
|
+
fields: [
|
|
187
|
+
{
|
|
188
|
+
name: 'layout',
|
|
189
|
+
type: 'blocks',
|
|
190
|
+
blocks: [
|
|
191
|
+
sharedInlineBlock
|
|
192
|
+
]
|
|
193
|
+
}
|
|
194
|
+
]
|
|
195
|
+
}
|
|
196
|
+
]
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
name: 'second',
|
|
200
|
+
type: 'group',
|
|
201
|
+
fields: [
|
|
202
|
+
{
|
|
203
|
+
name: 'items',
|
|
204
|
+
type: 'array',
|
|
205
|
+
fields: [
|
|
206
|
+
{
|
|
207
|
+
name: 'layout',
|
|
208
|
+
type: 'blocks',
|
|
209
|
+
blocks: [
|
|
210
|
+
sharedInlineBlock
|
|
211
|
+
]
|
|
212
|
+
}
|
|
213
|
+
]
|
|
214
|
+
}
|
|
215
|
+
]
|
|
216
|
+
}
|
|
217
|
+
],
|
|
218
|
+
payload: createPayloadFixture({
|
|
219
|
+
blocks: []
|
|
220
|
+
}),
|
|
221
|
+
schemaBuildContext: context
|
|
222
|
+
});
|
|
223
|
+
expect(builds.filter(({ label })=>label.startsWith('inline:'))).toHaveLength(2);
|
|
224
|
+
});
|
|
225
|
+
});
|
|
226
|
+
const createRecordedSchemaBuildContext = ()=>{
|
|
227
|
+
const cacheContext = createSchemaBuildContext();
|
|
228
|
+
const builds = [];
|
|
229
|
+
return {
|
|
230
|
+
builds,
|
|
231
|
+
context: {
|
|
232
|
+
clear: cacheContext.clear,
|
|
233
|
+
getOrCreate: (args)=>cacheContext.getOrCreate({
|
|
234
|
+
...args,
|
|
235
|
+
build: ()=>{
|
|
236
|
+
const schema = args.build();
|
|
237
|
+
builds.push({
|
|
238
|
+
label: args.cacheKey.split('|')[0],
|
|
239
|
+
schema,
|
|
240
|
+
variantKey: args.cacheKey
|
|
241
|
+
});
|
|
242
|
+
return schema;
|
|
243
|
+
}
|
|
244
|
+
})
|
|
245
|
+
}
|
|
246
|
+
};
|
|
247
|
+
};
|
|
248
|
+
const createDiamondBlockGraph = ()=>[
|
|
249
|
+
{
|
|
250
|
+
slug: 'leaf',
|
|
251
|
+
fields: [
|
|
252
|
+
{
|
|
253
|
+
name: 'text',
|
|
254
|
+
type: 'text'
|
|
255
|
+
}
|
|
256
|
+
]
|
|
257
|
+
},
|
|
258
|
+
{
|
|
259
|
+
slug: 'left',
|
|
260
|
+
fields: [
|
|
261
|
+
{
|
|
262
|
+
name: 'leaves',
|
|
263
|
+
type: 'blocks',
|
|
264
|
+
blockReferences: [
|
|
265
|
+
'leaf'
|
|
266
|
+
],
|
|
267
|
+
blocks: []
|
|
268
|
+
}
|
|
269
|
+
]
|
|
270
|
+
},
|
|
271
|
+
{
|
|
272
|
+
slug: 'right',
|
|
273
|
+
fields: [
|
|
274
|
+
{
|
|
275
|
+
name: 'leaves',
|
|
276
|
+
type: 'blocks',
|
|
277
|
+
blockReferences: [
|
|
278
|
+
'leaf'
|
|
279
|
+
],
|
|
280
|
+
blocks: []
|
|
281
|
+
}
|
|
282
|
+
]
|
|
283
|
+
},
|
|
284
|
+
{
|
|
285
|
+
slug: 'root',
|
|
286
|
+
fields: [
|
|
287
|
+
{
|
|
288
|
+
name: 'branches',
|
|
289
|
+
type: 'blocks',
|
|
290
|
+
blockReferences: [
|
|
291
|
+
'left',
|
|
292
|
+
'right'
|
|
293
|
+
],
|
|
294
|
+
blocks: []
|
|
295
|
+
}
|
|
296
|
+
]
|
|
297
|
+
}
|
|
298
|
+
];
|
|
299
|
+
const createPayloadFixture = ({ blocks })=>({
|
|
300
|
+
blocks: Object.fromEntries(blocks.map((block)=>[
|
|
301
|
+
block.slug,
|
|
302
|
+
block
|
|
303
|
+
])),
|
|
304
|
+
config: {
|
|
305
|
+
indexSortableFields: false,
|
|
306
|
+
localization: {
|
|
307
|
+
defaultLocale: 'en',
|
|
308
|
+
fallback: true,
|
|
309
|
+
localeCodes: [
|
|
310
|
+
'en'
|
|
311
|
+
],
|
|
312
|
+
locales: [
|
|
313
|
+
{
|
|
314
|
+
code: 'en',
|
|
315
|
+
label: 'en'
|
|
316
|
+
}
|
|
317
|
+
]
|
|
318
|
+
}
|
|
319
|
+
},
|
|
320
|
+
db: {
|
|
321
|
+
useBigIntForNumberIDs: false
|
|
322
|
+
}
|
|
323
|
+
});
|
|
324
|
+
const createRootFields = ()=>[
|
|
325
|
+
{
|
|
326
|
+
name: 'layoutA',
|
|
327
|
+
type: 'blocks',
|
|
328
|
+
blockReferences: [
|
|
329
|
+
'root'
|
|
330
|
+
],
|
|
331
|
+
blocks: []
|
|
332
|
+
},
|
|
333
|
+
{
|
|
334
|
+
name: 'layoutB',
|
|
335
|
+
type: 'blocks',
|
|
336
|
+
blockReferences: [
|
|
337
|
+
'root'
|
|
338
|
+
],
|
|
339
|
+
blocks: []
|
|
340
|
+
}
|
|
341
|
+
];
|
|
342
|
+
const describeSchema = (schema)=>{
|
|
343
|
+
const discriminators = [];
|
|
344
|
+
const paths = [];
|
|
345
|
+
const visited = new WeakSet();
|
|
346
|
+
const visit = (currentSchema, prefix = '')=>{
|
|
347
|
+
if (visited.has(currentSchema)) {
|
|
348
|
+
return;
|
|
349
|
+
}
|
|
350
|
+
visited.add(currentSchema);
|
|
351
|
+
for (const [pathName, schemaPath] of Object.entries(currentSchema.paths)){
|
|
352
|
+
const path = prefix ? `${prefix}.${pathName}` : pathName;
|
|
353
|
+
const childSchema = getPathSchema(schemaPath);
|
|
354
|
+
paths.push({
|
|
355
|
+
instance: schemaPath.instance,
|
|
356
|
+
path
|
|
357
|
+
});
|
|
358
|
+
for (const [slug, discriminatorSchema] of Object.entries(childSchema?.discriminators ?? {})){
|
|
359
|
+
discriminators.push(`${path}:${slug}`);
|
|
360
|
+
visit(discriminatorSchema, `${path}<${slug}>`);
|
|
361
|
+
}
|
|
362
|
+
if (childSchema) {
|
|
363
|
+
visit(childSchema, path);
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
};
|
|
367
|
+
visit(schema);
|
|
368
|
+
return {
|
|
369
|
+
discriminators: discriminators.sort(),
|
|
370
|
+
indexes: schema.indexes(),
|
|
371
|
+
options: {
|
|
372
|
+
_id: schema.options._id,
|
|
373
|
+
discriminatorKey: schema.options.discriminatorKey,
|
|
374
|
+
id: schema.options.id,
|
|
375
|
+
minimize: schema.options.minimize
|
|
376
|
+
},
|
|
377
|
+
paths: paths.sort((left, right)=>left.path.localeCompare(right.path))
|
|
378
|
+
};
|
|
379
|
+
};
|
|
380
|
+
const getBlockDiscriminator = ({ path, schema, slug })=>getDocumentArrayPath({
|
|
381
|
+
path,
|
|
382
|
+
schema
|
|
383
|
+
}).schema.discriminators?.[slug];
|
|
384
|
+
const getDocumentArrayPath = ({ path, schema })=>schema.path(path);
|
|
385
|
+
const getPathSchema = (path)=>path.schema ?? path.caster?.schema;
|
|
386
|
+
|
|
387
|
+
//# sourceMappingURL=buildSchema.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/models/buildSchema.spec.ts"],"sourcesContent":["import type { Block, BlockSlug, Field, Payload } from 'payload'\nimport type { Schema } from 'mongoose'\n\nimport { createSchemaBuildContext } from 'payload/internal'\nimport { describe, expect, test } from 'vitest'\n\nimport type { MongoSchemaBuildContext } from './schemaBuildContext.js'\n\nimport { buildSchema } from './buildSchema.js'\nimport { getBlockSchemaCacheKey } from './schemaBuildContext.js'\n\ntype DescribedSchema = {\n discriminators: string[]\n indexes: ReturnType<Schema['indexes']>\n options: {\n _id?: boolean\n discriminatorKey?: string\n id?: boolean\n minimize?: boolean\n }\n paths: Array<{ instance: string; path: string }>\n}\n\nconst buildSchemaWithContext = buildSchema as (\n args: Parameters<typeof buildSchema>[0] & {\n schemaBuildContext: MongoSchemaBuildContext\n },\n) => Schema\n\ndescribe('MongoDB schema build context', () => {\n test('should scope cache keys by referenced and inline placement', () => {\n const createKey = ({ fieldPath, isReference }: { fieldPath: string; isReference: boolean }) =>\n getBlockSchemaCacheKey({\n blockSlug: 'hero',\n buildSchemaOptions: {},\n fieldPath,\n isLocalized: false,\n isReference,\n isVersion: false,\n })\n\n const firstReferenceKey = createKey({\n fieldPath: 'collection:posts/field:first',\n isReference: true,\n })\n const secondReferenceKey = createKey({\n fieldPath: 'collection:posts/field:second',\n isReference: true,\n })\n const firstInlineKey = createKey({\n fieldPath: 'collection:posts/field:first',\n isReference: false,\n })\n const secondInlineKey = createKey({\n fieldPath: 'collection:posts/field:second',\n isReference: false,\n })\n\n expect(firstReferenceKey).toBe(secondReferenceKey)\n expect(firstInlineKey).not.toBe(secondInlineKey)\n expect(firstReferenceKey).not.toBe(firstInlineKey)\n })\n\n test('should normalize false and undefined in block variant keys', () => {\n expect(\n getBlockSchemaCacheKey({\n blockSlug: 'hero',\n buildSchemaOptions: {},\n fieldPath: 'collection:posts/field:layout',\n isLocalized: false,\n isReference: true,\n isVersion: false,\n }),\n ).toBe(\n getBlockSchemaCacheKey({\n blockSlug: 'hero',\n buildSchemaOptions: {\n disableUnique: false,\n draftsEnabled: false,\n indexSortableFields: false,\n },\n fieldPath: 'collection:posts/field:layout',\n isLocalized: false,\n isReference: true,\n isVersion: false,\n }),\n )\n })\n\n test.each([\n {\n buildSchemaOptions: { disableUnique: true },\n isLocalized: false,\n isVersion: false,\n variant: 'unique handling',\n },\n {\n buildSchemaOptions: { draftsEnabled: true },\n isLocalized: false,\n isVersion: false,\n variant: 'draft handling',\n },\n {\n buildSchemaOptions: { indexSortableFields: true },\n isLocalized: false,\n isVersion: false,\n variant: 'sortable indexes',\n },\n {\n buildSchemaOptions: {},\n isLocalized: true,\n isVersion: false,\n variant: 'localization',\n },\n {\n buildSchemaOptions: {},\n isLocalized: false,\n isVersion: true,\n variant: 'versions',\n },\n ])(\n 'should separate $variant in block cache keys',\n ({ buildSchemaOptions, isLocalized, isVersion }) => {\n const baseKey = getBlockSchemaCacheKey({\n blockSlug: 'hero',\n buildSchemaOptions: {},\n fieldPath: 'collection:posts/field:layout',\n isLocalized: false,\n isReference: true,\n isVersion: false,\n })\n\n expect(\n getBlockSchemaCacheKey({\n blockSlug: 'hero',\n buildSchemaOptions,\n fieldPath: 'collection:posts/field:layout',\n isLocalized,\n isReference: true,\n isVersion,\n }),\n ).not.toBe(baseKey)\n },\n )\n\n test('should build a diamond graph once per block and variant', () => {\n const blocks = createDiamondBlockGraph()\n const payload = createPayloadFixture({ blocks })\n const { builds, context } = createRecordedSchemaBuildContext()\n const schema = buildSchemaWithContext({\n buildSchemaOptions: {},\n configFields: createRootFields(),\n payload,\n schemaBuildContext: context,\n })\n\n expect(builds.filter(({ label }) => label === 'block:leaf')).toHaveLength(1)\n expect(builds.filter(({ label }) => label === 'block:root')).toHaveLength(1)\n expect(getBlockDiscriminator({ path: 'layoutA', schema, slug: 'root' })).toBeDefined()\n expect(getBlockDiscriminator({ path: 'layoutB', schema, slug: 'root' })).toBeDefined()\n })\n\n test('should keep cloned block registrations independent after template reuse', () => {\n const blocks = createDiamondBlockGraph()\n const schema = buildSchemaWithContext({\n buildSchemaOptions: {},\n configFields: createRootFields(),\n payload: createPayloadFixture({ blocks }),\n schemaBuildContext: createSchemaBuildContext<Schema>(),\n })\n const firstRoot = getBlockDiscriminator({ path: 'layoutA', schema, slug: 'root' })!\n const secondRoot = getBlockDiscriminator({ path: 'layoutB', schema, slug: 'root' })!\n\n expect(firstRoot).not.toBe(secondRoot)\n expect(describeSchema(firstRoot)).toEqual(describeSchema(secondRoot))\n\n firstRoot.add({ firstParentOnly: String })\n\n expect(firstRoot.path('firstParentOnly')).toBeDefined()\n expect(secondRoot.path('firstParentOnly')).toBeUndefined()\n })\n\n test('should separate a shared inline block by nested field path', () => {\n const sharedInlineBlock: Block = { slug: 'inline', fields: [{ name: 'text', type: 'text' }] }\n const { builds, context } = createRecordedSchemaBuildContext()\n\n buildSchemaWithContext({\n buildSchemaOptions: {},\n configFields: [\n {\n name: 'first',\n type: 'group',\n fields: [\n {\n name: 'items',\n type: 'array',\n fields: [{ name: 'layout', type: 'blocks', blocks: [sharedInlineBlock] }],\n },\n ],\n },\n {\n name: 'second',\n type: 'group',\n fields: [\n {\n name: 'items',\n type: 'array',\n fields: [{ name: 'layout', type: 'blocks', blocks: [sharedInlineBlock] }],\n },\n ],\n },\n ],\n payload: createPayloadFixture({ blocks: [] }),\n schemaBuildContext: context,\n })\n\n expect(builds.filter(({ label }) => label.startsWith('inline:'))).toHaveLength(2)\n })\n})\n\nconst createRecordedSchemaBuildContext = (): {\n builds: Array<{ label: string; schema: Schema; variantKey: string }>\n context: MongoSchemaBuildContext\n} => {\n const cacheContext = createSchemaBuildContext<Schema>()\n const builds: Array<{ label: string; schema: Schema; variantKey: string }> = []\n\n return {\n builds,\n context: {\n clear: cacheContext.clear,\n getOrCreate: (args) =>\n cacheContext.getOrCreate({\n ...args,\n build: () => {\n const schema = args.build()\n\n builds.push({\n label: args.cacheKey.split('|')[0]!,\n schema,\n variantKey: args.cacheKey,\n })\n\n return schema\n },\n }),\n },\n }\n}\n\nconst createDiamondBlockGraph = (): Block[] => [\n { slug: 'leaf', fields: [{ name: 'text', type: 'text' }] },\n {\n slug: 'left',\n fields: [\n { name: 'leaves', type: 'blocks', blockReferences: ['leaf' as BlockSlug], blocks: [] },\n ],\n },\n {\n slug: 'right',\n fields: [\n { name: 'leaves', type: 'blocks', blockReferences: ['leaf' as BlockSlug], blocks: [] },\n ],\n },\n {\n slug: 'root',\n fields: [\n {\n name: 'branches',\n type: 'blocks',\n blockReferences: ['left' as BlockSlug, 'right' as BlockSlug],\n blocks: [],\n },\n ],\n },\n]\n\nconst createPayloadFixture = ({ blocks }: { blocks: Block[] }): Payload =>\n ({\n blocks: Object.fromEntries(blocks.map((block) => [block.slug, block])),\n config: {\n indexSortableFields: false,\n localization: {\n defaultLocale: 'en',\n fallback: true,\n localeCodes: ['en'],\n locales: [{ code: 'en', label: 'en' }],\n },\n },\n db: { useBigIntForNumberIDs: false },\n }) as unknown as Payload\n\nconst createRootFields = (): Field[] => [\n { name: 'layoutA', type: 'blocks', blockReferences: ['root' as BlockSlug], blocks: [] },\n { name: 'layoutB', type: 'blocks', blockReferences: ['root' as BlockSlug], blocks: [] },\n]\n\nconst describeSchema = (schema: Schema): DescribedSchema => {\n const discriminators: string[] = []\n const paths: Array<{ instance: string; path: string }> = []\n const visited = new WeakSet<Schema>()\n\n const visit = (currentSchema: Schema, prefix = ''): void => {\n if (visited.has(currentSchema)) {\n return\n }\n\n visited.add(currentSchema)\n\n for (const [pathName, schemaPath] of Object.entries(currentSchema.paths)) {\n const path = prefix ? `${prefix}.${pathName}` : pathName\n const childSchema = getPathSchema(schemaPath)\n\n paths.push({ instance: schemaPath.instance, path })\n\n for (const [slug, discriminatorSchema] of Object.entries(\n (childSchema as (Schema & { discriminators?: Record<string, Schema> }) | undefined)\n ?.discriminators ?? {},\n )) {\n discriminators.push(`${path}:${slug}`)\n visit(discriminatorSchema, `${path}<${slug}>`)\n }\n\n if (childSchema) {\n visit(childSchema, path)\n }\n }\n }\n\n visit(schema)\n\n return {\n discriminators: discriminators.sort(),\n indexes: schema.indexes(),\n options: {\n _id: schema.options._id,\n discriminatorKey: schema.options.discriminatorKey,\n id: schema.options.id,\n minimize: schema.options.minimize,\n },\n paths: paths.sort((left, right) => left.path.localeCompare(right.path)),\n }\n}\n\nconst getBlockDiscriminator = ({\n path,\n schema,\n slug,\n}: {\n path: string\n schema: Schema\n slug: string\n}): Schema | undefined => getDocumentArrayPath({ path, schema }).schema.discriminators?.[slug]\n\nconst getDocumentArrayPath = ({\n path,\n schema,\n}: {\n path: string\n schema: Schema\n}): {\n discriminator: (name: string, schema: Schema) => unknown\n schema: Schema & { discriminators?: Record<string, Schema> }\n} =>\n schema.path(path) as unknown as {\n discriminator: (name: string, schema: Schema) => unknown\n schema: Schema & { discriminators?: Record<string, Schema> }\n }\n\nconst getPathSchema = (path: Schema['paths'][string]): Schema | undefined =>\n (path as typeof path & { caster?: { schema?: Schema }; schema?: Schema }).schema ??\n (path as typeof path & { caster?: { schema?: Schema }; schema?: Schema }).caster?.schema\n"],"names":["createSchemaBuildContext","describe","expect","test","buildSchema","getBlockSchemaCacheKey","buildSchemaWithContext","createKey","fieldPath","isReference","blockSlug","buildSchemaOptions","isLocalized","isVersion","firstReferenceKey","secondReferenceKey","firstInlineKey","secondInlineKey","toBe","not","disableUnique","draftsEnabled","indexSortableFields","each","variant","baseKey","blocks","createDiamondBlockGraph","payload","createPayloadFixture","builds","context","createRecordedSchemaBuildContext","schema","configFields","createRootFields","schemaBuildContext","filter","label","toHaveLength","getBlockDiscriminator","path","slug","toBeDefined","firstRoot","secondRoot","describeSchema","toEqual","add","firstParentOnly","String","toBeUndefined","sharedInlineBlock","fields","name","type","startsWith","cacheContext","clear","getOrCreate","args","build","push","cacheKey","split","variantKey","blockReferences","Object","fromEntries","map","block","config","localization","defaultLocale","fallback","localeCodes","locales","code","db","useBigIntForNumberIDs","discriminators","paths","visited","WeakSet","visit","currentSchema","prefix","has","pathName","schemaPath","entries","childSchema","getPathSchema","instance","discriminatorSchema","sort","indexes","options","_id","discriminatorKey","id","minimize","left","right","localeCompare","getDocumentArrayPath","caster"],"mappings":"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"}
|