payload 3.0.0-beta.73 → 3.0.0-beta.75

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/dist/admin/RichText.d.ts +2 -1
  2. package/dist/admin/RichText.d.ts.map +1 -1
  3. package/dist/admin/RichText.js.map +1 -1
  4. package/dist/admin/fields/Array.d.ts +3 -1
  5. package/dist/admin/fields/Array.d.ts.map +1 -1
  6. package/dist/admin/fields/Array.js.map +1 -1
  7. package/dist/admin/fields/Blocks.d.ts +3 -1
  8. package/dist/admin/fields/Blocks.d.ts.map +1 -1
  9. package/dist/admin/fields/Blocks.js.map +1 -1
  10. package/dist/admin/fields/Checkbox.d.ts +3 -1
  11. package/dist/admin/fields/Checkbox.d.ts.map +1 -1
  12. package/dist/admin/fields/Checkbox.js.map +1 -1
  13. package/dist/admin/fields/Code.d.ts +3 -1
  14. package/dist/admin/fields/Code.d.ts.map +1 -1
  15. package/dist/admin/fields/Code.js.map +1 -1
  16. package/dist/admin/fields/Date.d.ts +3 -1
  17. package/dist/admin/fields/Date.d.ts.map +1 -1
  18. package/dist/admin/fields/Date.js.map +1 -1
  19. package/dist/admin/fields/Email.d.ts +3 -1
  20. package/dist/admin/fields/Email.d.ts.map +1 -1
  21. package/dist/admin/fields/Email.js.map +1 -1
  22. package/dist/admin/fields/JSON.d.ts +3 -1
  23. package/dist/admin/fields/JSON.d.ts.map +1 -1
  24. package/dist/admin/fields/JSON.js.map +1 -1
  25. package/dist/admin/fields/Number.d.ts +3 -1
  26. package/dist/admin/fields/Number.d.ts.map +1 -1
  27. package/dist/admin/fields/Number.js.map +1 -1
  28. package/dist/admin/fields/Point.d.ts +3 -1
  29. package/dist/admin/fields/Point.d.ts.map +1 -1
  30. package/dist/admin/fields/Point.js.map +1 -1
  31. package/dist/admin/fields/Radio.d.ts +3 -1
  32. package/dist/admin/fields/Radio.d.ts.map +1 -1
  33. package/dist/admin/fields/Radio.js.map +1 -1
  34. package/dist/admin/fields/Relationship.d.ts +3 -1
  35. package/dist/admin/fields/Relationship.d.ts.map +1 -1
  36. package/dist/admin/fields/Relationship.js.map +1 -1
  37. package/dist/admin/fields/RichText.d.ts +3 -1
  38. package/dist/admin/fields/RichText.d.ts.map +1 -1
  39. package/dist/admin/fields/RichText.js.map +1 -1
  40. package/dist/admin/fields/Select.d.ts +3 -1
  41. package/dist/admin/fields/Select.d.ts.map +1 -1
  42. package/dist/admin/fields/Select.js.map +1 -1
  43. package/dist/admin/fields/Text.d.ts +3 -1
  44. package/dist/admin/fields/Text.d.ts.map +1 -1
  45. package/dist/admin/fields/Text.js.map +1 -1
  46. package/dist/admin/fields/Textarea.d.ts +3 -1
  47. package/dist/admin/fields/Textarea.d.ts.map +1 -1
  48. package/dist/admin/fields/Textarea.js.map +1 -1
  49. package/dist/admin/fields/Upload.d.ts +3 -2
  50. package/dist/admin/fields/Upload.d.ts.map +1 -1
  51. package/dist/admin/fields/Upload.js.map +1 -1
  52. package/dist/admin/forms/Form.d.ts +2 -2
  53. package/dist/admin/forms/Form.d.ts.map +1 -1
  54. package/dist/admin/forms/Form.js.map +1 -1
  55. package/dist/auth/baseFields/email.d.ts +2 -4
  56. package/dist/auth/baseFields/email.d.ts.map +1 -1
  57. package/dist/auth/baseFields/email.js +21 -21
  58. package/dist/auth/baseFields/email.js.map +1 -1
  59. package/dist/auth/baseFields/username.d.ts +2 -2
  60. package/dist/auth/baseFields/username.d.ts.map +1 -1
  61. package/dist/auth/baseFields/username.js +1 -1
  62. package/dist/auth/baseFields/username.js.map +1 -1
  63. package/dist/auth/ensureUsernameOrEmail.d.ts +17 -0
  64. package/dist/auth/ensureUsernameOrEmail.d.ts.map +1 -0
  65. package/dist/auth/ensureUsernameOrEmail.js +43 -0
  66. package/dist/auth/ensureUsernameOrEmail.js.map +1 -0
  67. package/dist/auth/getAuthFields.d.ts.map +1 -1
  68. package/dist/auth/getAuthFields.js +18 -10
  69. package/dist/auth/getAuthFields.js.map +1 -1
  70. package/dist/auth/operations/registerFirstUser.d.ts.map +1 -1
  71. package/dist/auth/operations/registerFirstUser.js +8 -0
  72. package/dist/auth/operations/registerFirstUser.js.map +1 -1
  73. package/dist/auth/types.d.ts +6 -1
  74. package/dist/auth/types.d.ts.map +1 -1
  75. package/dist/auth/types.js.map +1 -1
  76. package/dist/collections/config/defaults.d.ts.map +1 -1
  77. package/dist/collections/config/defaults.js +2 -1
  78. package/dist/collections/config/defaults.js.map +1 -1
  79. package/dist/collections/config/sanitize.d.ts.map +1 -1
  80. package/dist/collections/config/sanitize.js +17 -4
  81. package/dist/collections/config/sanitize.js.map +1 -1
  82. package/dist/collections/operations/create.d.ts.map +1 -1
  83. package/dist/collections/operations/create.js +8 -0
  84. package/dist/collections/operations/create.js.map +1 -1
  85. package/dist/collections/operations/update.d.ts.map +1 -1
  86. package/dist/collections/operations/update.js +11 -0
  87. package/dist/collections/operations/update.js.map +1 -1
  88. package/dist/collections/operations/updateByID.d.ts.map +1 -1
  89. package/dist/collections/operations/updateByID.js +11 -0
  90. package/dist/collections/operations/updateByID.js.map +1 -1
  91. package/dist/database/migrations/createMigration.d.ts.map +1 -1
  92. package/dist/database/migrations/createMigration.js +5 -1
  93. package/dist/database/migrations/createMigration.js.map +1 -1
  94. package/dist/database/migrations/migrate.d.ts +1 -1
  95. package/dist/database/migrations/migrate.d.ts.map +1 -1
  96. package/dist/database/migrations/migrate.js +3 -3
  97. package/dist/database/migrations/migrate.js.map +1 -1
  98. package/dist/database/migrations/readMigrationFiles.js +1 -1
  99. package/dist/database/migrations/readMigrationFiles.js.map +1 -1
  100. package/dist/database/migrations/writeMigrationIndex.d.ts +4 -0
  101. package/dist/database/migrations/writeMigrationIndex.d.ts.map +1 -0
  102. package/dist/database/migrations/writeMigrationIndex.js +32 -0
  103. package/dist/database/migrations/writeMigrationIndex.js.map +1 -0
  104. package/dist/database/types.d.ts +6 -10
  105. package/dist/database/types.d.ts.map +1 -1
  106. package/dist/database/types.js.map +1 -1
  107. package/dist/errors/ValidationError.d.ts +6 -8
  108. package/dist/errors/ValidationError.d.ts.map +1 -1
  109. package/dist/errors/ValidationError.js.map +1 -1
  110. package/dist/errors/index.d.ts +1 -0
  111. package/dist/errors/index.d.ts.map +1 -1
  112. package/dist/errors/index.js.map +1 -1
  113. package/dist/fields/config/client.d.ts +15 -15
  114. package/dist/fields/config/client.d.ts.map +1 -1
  115. package/dist/fields/config/types.d.ts +10 -1
  116. package/dist/fields/config/types.d.ts.map +1 -1
  117. package/dist/fields/config/types.js.map +1 -1
  118. package/dist/fields/hooks/afterRead/promise.d.ts.map +1 -1
  119. package/dist/fields/hooks/afterRead/promise.js +4 -0
  120. package/dist/fields/hooks/afterRead/promise.js.map +1 -1
  121. package/dist/fields/hooks/afterRead/relationshipPopulationPromise.d.ts.map +1 -1
  122. package/dist/fields/hooks/afterRead/relationshipPopulationPromise.js +10 -10
  123. package/dist/fields/hooks/afterRead/relationshipPopulationPromise.js.map +1 -1
  124. package/dist/fields/hooks/beforeChange/promise.d.ts.map +1 -1
  125. package/dist/fields/hooks/beforeChange/promise.js +1 -0
  126. package/dist/fields/hooks/beforeChange/promise.js.map +1 -1
  127. package/dist/fields/validations.d.ts +65 -74
  128. package/dist/fields/validations.d.ts.map +1 -1
  129. package/dist/fields/validations.js +20 -4
  130. package/dist/fields/validations.js.map +1 -1
  131. package/dist/index.d.ts +4 -2
  132. package/dist/index.d.ts.map +1 -1
  133. package/dist/index.js +2 -1
  134. package/dist/index.js.map +1 -1
  135. package/dist/utilities/configToJSONSchema.d.ts.map +1 -1
  136. package/dist/utilities/configToJSONSchema.js +88 -57
  137. package/dist/utilities/configToJSONSchema.js.map +1 -1
  138. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utilities/configToJSONSchema.ts"],"sourcesContent":["import type { JSONSchema4, JSONSchema4TypeName } from 'json-schema'\n\nimport pluralize from 'pluralize'\nconst { singular } = pluralize\n\nimport type { Auth } from '../auth/types.js'\nimport type { SanitizedCollectionConfig } from '../collections/config/types.js'\nimport type { SanitizedConfig } from '../config/types.js'\nimport type { Field, FieldAffectingData, Option } from '../fields/config/types.js'\nimport type { SanitizedGlobalConfig } from '../globals/config/types.js'\n\nimport { MissingEditorProp } from '../errors/MissingEditorProp.js'\nimport { fieldAffectsData, tabHasName } from '../fields/config/types.js'\nimport { deepCopyObject } from './deepCopyObject.js'\nimport { toWords } from './formatLabels.js'\nimport { getCollectionIDFieldTypes } from './getCollectionIDFieldTypes.js'\n\nconst fieldIsRequired = (field: Field) => {\n const isConditional = Boolean(field?.admin && field?.admin?.condition)\n if (isConditional) return false\n\n const isMarkedRequired = 'required' in field && field.required === true\n if (fieldAffectsData(field) && isMarkedRequired) return true\n\n // if any subfields are required, this field is required\n if ('fields' in field && field.type !== 'array') {\n return field.fields.some((subField) => fieldIsRequired(subField))\n }\n\n // if any tab subfields have required fields, this field is required\n if (field.type === 'tabs') {\n return field.tabs.some((tab) => {\n if ('name' in tab) {\n return tab.fields.some((subField) => fieldIsRequired(subField))\n }\n return false\n })\n }\n\n return false\n}\n\nfunction buildOptionEnums(options: Option[]): string[] {\n return options.map((option) => {\n if (typeof option === 'object' && 'value' in option) {\n return option.value\n }\n\n return option\n })\n}\n\nfunction generateEntitySchemas(\n entities: (SanitizedCollectionConfig | SanitizedGlobalConfig)[],\n): JSONSchema4 {\n const properties = [...entities].reduce((acc, { slug }) => {\n acc[slug] = {\n $ref: `#/definitions/${slug}`,\n }\n\n return acc\n }, {})\n\n return {\n type: 'object',\n additionalProperties: false,\n properties,\n required: Object.keys(properties),\n }\n}\n\nfunction generateLocaleEntitySchemas(localization: SanitizedConfig['localization']): JSONSchema4 {\n if (localization && 'locales' in localization && localization?.locales) {\n const localesFromConfig = localization?.locales\n\n const locales = [...localesFromConfig].map((locale) => {\n return locale.code\n }, [])\n\n return {\n type: 'string',\n enum: locales,\n }\n }\n\n return {\n type: 'null',\n }\n}\n\nfunction generateAuthEntitySchemas(entities: SanitizedCollectionConfig[]): JSONSchema4 {\n const properties: JSONSchema4[] = [...entities]\n .filter(({ auth }) => Boolean(auth))\n .map(({ slug }) => {\n return {\n allOf: [\n { $ref: `#/definitions/${slug}` },\n {\n type: 'object',\n additionalProperties: false,\n properties: {\n collection: { type: 'string', enum: [slug] },\n },\n required: ['collection'],\n },\n ],\n }\n }, {})\n\n return {\n oneOf: properties,\n }\n}\n\n/**\n * Generates the JSON Schema for database configuration\n *\n * @example { db: idType: string }\n */\nfunction generateDbEntitySchema(config: SanitizedConfig): JSONSchema4 {\n const defaultIDType: JSONSchema4 =\n config.db?.defaultIDType === 'number' ? { type: 'number' } : { type: 'string' }\n\n return {\n type: 'object',\n additionalProperties: false,\n properties: {\n defaultIDType,\n },\n required: ['defaultIDType'],\n }\n}\n\n/**\n * Returns a JSON Schema Type with 'null' added if the field is not required.\n */\nexport function withNullableJSONSchemaType(\n fieldType: JSONSchema4TypeName,\n isRequired: boolean,\n): JSONSchema4TypeName | JSONSchema4TypeName[] {\n const fieldTypes = [fieldType]\n if (isRequired) return fieldType\n fieldTypes.push('null')\n return fieldTypes\n}\n\nexport function fieldsToJSONSchema(\n /**\n * Used for relationship fields, to determine whether to use a string or number type for the ID.\n * While there is a default ID field type set by the db adapter, they can differ on a collection-level\n * if they have custom ID fields.\n */\n collectionIDFieldTypes: { [key: string]: 'number' | 'string' },\n fields: Field[],\n /**\n * Allows you to define new top-level interfaces that can be re-used in the output schema.\n */\n interfaceNameDefinitions: Map<string, JSONSchema4>,\n config?: SanitizedConfig,\n): {\n properties: {\n [k: string]: JSONSchema4\n }\n required: string[]\n} {\n const requiredFieldNames = new Set<string>()\n\n return {\n properties: Object.fromEntries(\n fields.reduce((fieldSchemas, field) => {\n const isRequired = fieldAffectsData(field) && fieldIsRequired(field)\n if (isRequired) requiredFieldNames.add(field.name)\n\n let fieldSchema: JSONSchema4\n\n switch (field.type) {\n case 'text':\n if (field.hasMany === true) {\n fieldSchema = {\n type: withNullableJSONSchemaType('array', isRequired),\n items: { type: 'string' },\n }\n } else {\n fieldSchema = { type: withNullableJSONSchemaType('string', isRequired) }\n }\n break\n case 'textarea':\n case 'code':\n case 'email':\n case 'date': {\n fieldSchema = { type: withNullableJSONSchemaType('string', isRequired) }\n break\n }\n\n case 'number': {\n if (field.hasMany === true) {\n fieldSchema = {\n type: withNullableJSONSchemaType('array', isRequired),\n items: { type: 'number' },\n }\n } else {\n fieldSchema = { type: withNullableJSONSchemaType('number', isRequired) }\n }\n break\n }\n\n case 'checkbox': {\n fieldSchema = { type: withNullableJSONSchemaType('boolean', isRequired) }\n break\n }\n\n case 'json': {\n fieldSchema = field.jsonSchema?.schema || {\n type: ['object', 'array', 'string', 'number', 'boolean', 'null'],\n }\n break\n }\n\n case 'richText': {\n if (!field?.editor) {\n throw new MissingEditorProp(field) // while we allow disabling editor functionality, you should not have any richText fields defined if you do not have an editor\n }\n if (typeof field.editor === 'function') {\n throw new Error('Attempted to access unsanitized rich text editor.')\n }\n if (field.editor.outputSchema) {\n fieldSchema = field.editor.outputSchema({\n collectionIDFieldTypes,\n config,\n field,\n interfaceNameDefinitions,\n isRequired,\n })\n } else {\n // Maintain backwards compatibility with existing rich text editors\n fieldSchema = {\n type: withNullableJSONSchemaType('array', isRequired),\n items: {\n type: 'object',\n },\n }\n }\n\n break\n }\n\n case 'radio': {\n fieldSchema = {\n type: withNullableJSONSchemaType('string', isRequired),\n enum: buildOptionEnums(field.options),\n }\n\n break\n }\n\n case 'select': {\n const optionEnums = buildOptionEnums(field.options)\n\n if (field.hasMany) {\n fieldSchema = {\n type: withNullableJSONSchemaType('array', isRequired),\n items: {\n type: 'string',\n enum: optionEnums,\n },\n }\n } else {\n fieldSchema = {\n type: withNullableJSONSchemaType('string', isRequired),\n enum: optionEnums,\n }\n }\n\n break\n }\n\n case 'point': {\n fieldSchema = {\n type: withNullableJSONSchemaType('array', isRequired),\n items: [\n {\n type: 'number',\n },\n {\n type: 'number',\n },\n ],\n maxItems: 2,\n minItems: 2,\n }\n break\n }\n\n case 'relationship': {\n if (Array.isArray(field.relationTo)) {\n if (field.hasMany) {\n fieldSchema = {\n type: withNullableJSONSchemaType('array', isRequired),\n items: {\n oneOf: field.relationTo.map((relation) => {\n return {\n type: 'object',\n additionalProperties: false,\n properties: {\n relationTo: {\n const: relation,\n },\n value: {\n oneOf: [\n {\n type: collectionIDFieldTypes[relation],\n },\n {\n $ref: `#/definitions/${relation}`,\n },\n ],\n },\n },\n required: ['value', 'relationTo'],\n }\n }),\n },\n }\n } else {\n fieldSchema = {\n oneOf: field.relationTo.map((relation) => {\n return {\n type: withNullableJSONSchemaType('object', isRequired),\n additionalProperties: false,\n properties: {\n relationTo: {\n const: relation,\n },\n value: {\n oneOf: [\n {\n type: collectionIDFieldTypes[relation],\n },\n {\n $ref: `#/definitions/${relation}`,\n },\n ],\n },\n },\n required: ['value', 'relationTo'],\n }\n }),\n }\n }\n } else if (field.hasMany) {\n fieldSchema = {\n type: withNullableJSONSchemaType('array', isRequired),\n items: {\n oneOf: [\n {\n type: collectionIDFieldTypes[field.relationTo],\n },\n {\n $ref: `#/definitions/${field.relationTo}`,\n },\n ],\n },\n }\n } else {\n fieldSchema = {\n oneOf: [\n {\n type: withNullableJSONSchemaType(\n collectionIDFieldTypes[field.relationTo],\n isRequired,\n ),\n },\n {\n $ref: `#/definitions/${field.relationTo}`,\n },\n ],\n }\n }\n\n break\n }\n\n case 'upload': {\n fieldSchema = {\n oneOf: [\n {\n type: collectionIDFieldTypes[field.relationTo],\n },\n {\n $ref: `#/definitions/${field.relationTo}`,\n },\n ],\n }\n if (!isRequired) fieldSchema.oneOf.push({ type: 'null' })\n break\n }\n\n case 'blocks': {\n fieldSchema = {\n type: withNullableJSONSchemaType('array', isRequired),\n items: {\n oneOf: field.blocks.map((block) => {\n const blockFieldSchemas = fieldsToJSONSchema(\n collectionIDFieldTypes,\n block.fields,\n interfaceNameDefinitions,\n config,\n )\n\n const blockSchema: JSONSchema4 = {\n type: 'object',\n additionalProperties: false,\n properties: {\n ...blockFieldSchemas.properties,\n blockType: {\n const: block.slug,\n },\n },\n required: ['blockType', ...blockFieldSchemas.required],\n }\n\n if (block.interfaceName) {\n interfaceNameDefinitions.set(block.interfaceName, blockSchema)\n\n return {\n $ref: `#/definitions/${block.interfaceName}`,\n }\n }\n\n return blockSchema\n }),\n },\n }\n break\n }\n\n case 'array': {\n fieldSchema = {\n type: withNullableJSONSchemaType('array', isRequired),\n items: {\n type: 'object',\n additionalProperties: false,\n ...fieldsToJSONSchema(\n collectionIDFieldTypes,\n field.fields,\n interfaceNameDefinitions,\n config,\n ),\n },\n }\n\n if (field.interfaceName) {\n interfaceNameDefinitions.set(field.interfaceName, fieldSchema)\n\n fieldSchema = {\n $ref: `#/definitions/${field.interfaceName}`,\n }\n }\n break\n }\n\n case 'row':\n case 'collapsible': {\n const childSchema = fieldsToJSONSchema(\n collectionIDFieldTypes,\n field.fields,\n interfaceNameDefinitions,\n config,\n )\n Object.entries(childSchema.properties).forEach(([propName, propSchema]) => {\n fieldSchemas.set(propName, propSchema)\n })\n childSchema.required.forEach((propName) => {\n requiredFieldNames.add(propName)\n })\n break\n }\n\n case 'tabs': {\n field.tabs.forEach((tab) => {\n const childSchema = fieldsToJSONSchema(\n collectionIDFieldTypes,\n tab.fields,\n interfaceNameDefinitions,\n config,\n )\n if (tabHasName(tab)) {\n // could have interface\n fieldSchemas.set(tab.name, {\n type: 'object',\n additionalProperties: false,\n ...childSchema,\n })\n\n // If the named tab has any required fields then we mark this as required otherwise it should be optional\n const hasRequiredFields = tab.fields.some((subField) => fieldIsRequired(subField))\n\n if (hasRequiredFields) {\n requiredFieldNames.add(tab.name)\n }\n } else {\n Object.entries(childSchema.properties).forEach(([propName, propSchema]) => {\n fieldSchemas.set(propName, propSchema)\n })\n childSchema.required.forEach((propName) => {\n requiredFieldNames.add(propName)\n })\n }\n })\n break\n }\n\n case 'group': {\n fieldSchema = {\n type: 'object',\n additionalProperties: false,\n ...fieldsToJSONSchema(\n collectionIDFieldTypes,\n field.fields,\n interfaceNameDefinitions,\n config,\n ),\n }\n\n if (field.interfaceName) {\n interfaceNameDefinitions.set(field.interfaceName, fieldSchema)\n\n fieldSchema = {\n $ref: `#/definitions/${field.interfaceName}`,\n }\n }\n break\n }\n\n default: {\n break\n }\n }\n\n if ('typescriptSchema' in field && field?.typescriptSchema?.length) {\n for (const schema of field.typescriptSchema) {\n fieldSchema = schema({ jsonSchema: fieldSchema })\n }\n }\n\n if (fieldSchema && fieldAffectsData(field)) {\n fieldSchemas.set(field.name, fieldSchema)\n }\n\n return fieldSchemas\n }, new Map<string, JSONSchema4>()),\n ),\n required: Array.from(requiredFieldNames),\n }\n}\n\n// This function is part of the public API and is exported through payload/utilities\nexport function entityToJSONSchema(\n config: SanitizedConfig,\n incomingEntity: SanitizedCollectionConfig | SanitizedGlobalConfig,\n interfaceNameDefinitions: Map<string, JSONSchema4>,\n defaultIDType: 'number' | 'text',\n): JSONSchema4 {\n const entity: SanitizedCollectionConfig | SanitizedGlobalConfig = deepCopyObject(incomingEntity)\n const title = entity.typescript?.interface\n ? entity.typescript.interface\n : singular(toWords(entity.slug, true))\n\n const idField: FieldAffectingData = { name: 'id', type: defaultIDType as 'text', required: true }\n const customIdField = entity.fields.find(\n (field) => fieldAffectsData(field) && field.name === 'id',\n ) as FieldAffectingData\n\n if (customIdField && customIdField.type !== 'group' && customIdField.type !== 'tab') {\n customIdField.required = true\n } else {\n entity.fields.unshift(idField)\n }\n\n // mark timestamp fields required\n if ('timestamps' in entity && entity.timestamps !== false) {\n entity.fields = entity.fields.map((field) => {\n if (fieldAffectsData(field) && (field.name === 'createdAt' || field.name === 'updatedAt')) {\n return {\n ...field,\n required: true,\n }\n }\n return field\n })\n }\n\n if ('auth' in entity && entity.auth && !entity.auth?.disableLocalStrategy) {\n entity.fields.push({\n name: 'password',\n type: 'text',\n })\n }\n\n // Used for relationship fields, to determine whether to use a string or number type for the ID.\n const collectionIDFieldTypes = getCollectionIDFieldTypes({ config, defaultIDType })\n\n return {\n type: 'object',\n additionalProperties: false,\n title,\n ...fieldsToJSONSchema(collectionIDFieldTypes, entity.fields, interfaceNameDefinitions, config),\n }\n}\n\nconst fieldType: JSONSchema4 = {\n type: 'string',\n required: false,\n}\nconst generateAuthFieldTypes = ({\n type,\n loginWithUsername,\n}: {\n loginWithUsername: Auth['loginWithUsername']\n type: 'forgotOrUnlock' | 'login' | 'register'\n}): JSONSchema4 => {\n const emailAuthFields = {\n additionalProperties: false,\n properties: { email: fieldType },\n required: ['email'],\n }\n const usernameAuthFields = {\n additionalProperties: false,\n properties: { username: fieldType },\n required: ['username'],\n }\n\n if (['login', 'register'].includes(type)) {\n emailAuthFields.properties['password'] = fieldType\n emailAuthFields.required.push('password')\n usernameAuthFields.properties['password'] = fieldType\n usernameAuthFields.required.push('password')\n }\n\n if (loginWithUsername) {\n switch (type) {\n case 'login': {\n if (loginWithUsername.allowEmailLogin) {\n // allow username or email and require password for login\n return {\n additionalProperties: false,\n oneOf: [emailAuthFields, usernameAuthFields],\n }\n } else {\n // allow only username and password for login\n return usernameAuthFields\n }\n }\n\n case 'register': {\n if (loginWithUsername.requireEmail) {\n // require username, email and password for registration\n return {\n additionalProperties: false,\n properties: {\n ...usernameAuthFields.properties,\n ...emailAuthFields.properties,\n },\n required: [...usernameAuthFields.required, ...emailAuthFields.required],\n }\n } else if (loginWithUsername.allowEmailLogin) {\n // allow both but only require username for registration\n return {\n additionalProperties: false,\n properties: {\n ...usernameAuthFields.properties,\n ...emailAuthFields.properties,\n },\n required: usernameAuthFields.required,\n }\n } else {\n // require only username and password for registration\n return usernameAuthFields\n }\n }\n\n case 'forgotOrUnlock': {\n if (loginWithUsername.allowEmailLogin) {\n // allow email or username for unlock/forgot-password\n return {\n additionalProperties: false,\n oneOf: [emailAuthFields, usernameAuthFields],\n }\n } else {\n // allow only username for unlock/forgot-password\n return usernameAuthFields\n }\n }\n }\n }\n\n // default email (and password for login/register)\n return emailAuthFields\n}\n\nexport function authCollectionToOperationsJSONSchema(\n config: SanitizedCollectionConfig,\n): JSONSchema4 {\n const loginWithUsername = config.auth?.loginWithUsername\n const loginUserFields: JSONSchema4 = generateAuthFieldTypes({ type: 'login', loginWithUsername })\n const forgotOrUnlockUserFields: JSONSchema4 = generateAuthFieldTypes({\n type: 'forgotOrUnlock',\n loginWithUsername,\n })\n const registerUserFields: JSONSchema4 = generateAuthFieldTypes({\n type: 'register',\n loginWithUsername,\n })\n\n const properties: JSONSchema4['properties'] = {\n forgotPassword: forgotOrUnlockUserFields,\n login: loginUserFields,\n registerFirstUser: registerUserFields,\n unlock: forgotOrUnlockUserFields,\n }\n\n return {\n type: 'object',\n additionalProperties: false,\n properties,\n required: Object.keys(properties),\n title: `${singular(toWords(`${config.slug}`, true))}AuthOperations`,\n }\n}\n\nfunction generateAuthOperationSchemas(collections: SanitizedCollectionConfig[]): JSONSchema4 {\n const properties = collections.reduce((acc, collection) => {\n if (collection.auth) {\n acc[collection.slug] = {\n $ref: `#/definitions/auth/${collection.slug}`,\n }\n }\n return acc\n }, {})\n\n return {\n type: 'object',\n additionalProperties: false,\n properties,\n required: Object.keys(properties),\n }\n}\n\n/**\n * This is used for generating the TypeScript types (payload-types.ts) with the payload generate:types command.\n */\nexport function configToJSONSchema(\n config: SanitizedConfig,\n defaultIDType?: 'number' | 'text',\n): JSONSchema4 {\n // a mutable Map to store custom top-level `interfaceName` types. Fields with an `interfaceName` property will be moved to the top-level definitions here\n const interfaceNameDefinitions: Map<string, JSONSchema4> = new Map()\n\n // Collections and Globals have to be moved to the top-level definitions as well. Reason: The top-level type will be the `Config` type - we don't want all collection and global\n // types to be inlined inside the `Config` type\n const entityDefinitions: { [k: string]: JSONSchema4 } = [\n ...config.globals,\n ...config.collections,\n ].reduce((acc, entity) => {\n acc[entity.slug] = entityToJSONSchema(config, entity, interfaceNameDefinitions, defaultIDType)\n return acc\n }, {})\n\n const authOperationDefinitions = [...config.collections]\n .filter(({ auth }) => Boolean(auth))\n .reduce(\n (acc, authCollection) => {\n acc.auth[authCollection.slug] = authCollectionToOperationsJSONSchema(authCollection)\n return acc\n },\n { auth: {} },\n )\n\n let jsonSchema: JSONSchema4 = {\n additionalProperties: false,\n definitions: {\n ...entityDefinitions,\n ...Object.fromEntries(interfaceNameDefinitions),\n ...authOperationDefinitions,\n },\n // These properties here will be very simple, as all the complexity is in the definitions. These are just the properties for the top-level `Config` type\n type: 'object',\n properties: {\n auth: generateAuthOperationSchemas(config.collections),\n collections: generateEntitySchemas(config.collections || []),\n db: generateDbEntitySchema(config),\n globals: generateEntitySchemas(config.globals || []),\n locale: generateLocaleEntitySchemas(config.localization),\n user: generateAuthEntitySchemas(config.collections),\n },\n required: ['user', 'locale', 'collections', 'globals', 'auth', 'db'],\n title: 'Config',\n }\n\n if (config?.typescript?.schema?.length) {\n for (const schema of config.typescript.schema) {\n jsonSchema = schema({ jsonSchema })\n }\n }\n\n return jsonSchema\n}\n"],"names":["pluralize","singular","MissingEditorProp","fieldAffectsData","tabHasName","deepCopyObject","toWords","getCollectionIDFieldTypes","fieldIsRequired","field","isConditional","Boolean","admin","condition","isMarkedRequired","required","type","fields","some","subField","tabs","tab","buildOptionEnums","options","map","option","value","generateEntitySchemas","entities","properties","reduce","acc","slug","$ref","additionalProperties","Object","keys","generateLocaleEntitySchemas","localization","locales","localesFromConfig","locale","code","enum","generateAuthEntitySchemas","filter","auth","allOf","collection","oneOf","generateDbEntitySchema","config","defaultIDType","db","withNullableJSONSchemaType","fieldType","isRequired","fieldTypes","push","fieldsToJSONSchema","collectionIDFieldTypes","interfaceNameDefinitions","requiredFieldNames","Set","fromEntries","fieldSchemas","add","name","fieldSchema","hasMany","items","jsonSchema","schema","editor","Error","outputSchema","optionEnums","maxItems","minItems","Array","isArray","relationTo","relation","const","blocks","block","blockFieldSchemas","blockSchema","blockType","interfaceName","set","childSchema","entries","forEach","propName","propSchema","hasRequiredFields","typescriptSchema","length","Map","from","entityToJSONSchema","incomingEntity","entity","title","typescript","interface","idField","customIdField","find","unshift","timestamps","disableLocalStrategy","generateAuthFieldTypes","loginWithUsername","emailAuthFields","email","usernameAuthFields","username","includes","allowEmailLogin","requireEmail","authCollectionToOperationsJSONSchema","loginUserFields","forgotOrUnlockUserFields","registerUserFields","forgotPassword","login","registerFirstUser","unlock","generateAuthOperationSchemas","collections","configToJSONSchema","entityDefinitions","globals","authOperationDefinitions","authCollection","definitions","user"],"mappings":"AAEA,OAAOA,eAAe,YAAW;AACjC,MAAM,EAAEC,QAAQ,EAAE,GAAGD;AAQrB,SAASE,iBAAiB,QAAQ,iCAAgC;AAClE,SAASC,gBAAgB,EAAEC,UAAU,QAAQ,4BAA2B;AACxE,SAASC,cAAc,QAAQ,sBAAqB;AACpD,SAASC,OAAO,QAAQ,oBAAmB;AAC3C,SAASC,yBAAyB,QAAQ,iCAAgC;AAE1E,MAAMC,kBAAkB,CAACC;IACvB,MAAMC,gBAAgBC,QAAQF,OAAOG,SAASH,OAAOG,OAAOC;IAC5D,IAAIH,eAAe,OAAO;IAE1B,MAAMI,mBAAmB,cAAcL,SAASA,MAAMM,QAAQ,KAAK;IACnE,IAAIZ,iBAAiBM,UAAUK,kBAAkB,OAAO;IAExD,wDAAwD;IACxD,IAAI,YAAYL,SAASA,MAAMO,IAAI,KAAK,SAAS;QAC/C,OAAOP,MAAMQ,MAAM,CAACC,IAAI,CAAC,CAACC,WAAaX,gBAAgBW;IACzD;IAEA,oEAAoE;IACpE,IAAIV,MAAMO,IAAI,KAAK,QAAQ;QACzB,OAAOP,MAAMW,IAAI,CAACF,IAAI,CAAC,CAACG;YACtB,IAAI,UAAUA,KAAK;gBACjB,OAAOA,IAAIJ,MAAM,CAACC,IAAI,CAAC,CAACC,WAAaX,gBAAgBW;YACvD;YACA,OAAO;QACT;IACF;IAEA,OAAO;AACT;AAEA,SAASG,iBAAiBC,OAAiB;IACzC,OAAOA,QAAQC,GAAG,CAAC,CAACC;QAClB,IAAI,OAAOA,WAAW,YAAY,WAAWA,QAAQ;YACnD,OAAOA,OAAOC,KAAK;QACrB;QAEA,OAAOD;IACT;AACF;AAEA,SAASE,sBACPC,QAA+D;IAE/D,MAAMC,aAAa;WAAID;KAAS,CAACE,MAAM,CAAC,CAACC,KAAK,EAAEC,IAAI,EAAE;QACpDD,GAAG,CAACC,KAAK,GAAG;YACVC,MAAM,CAAC,cAAc,EAAED,KAAK,CAAC;QAC/B;QAEA,OAAOD;IACT,GAAG,CAAC;IAEJ,OAAO;QACLf,MAAM;QACNkB,sBAAsB;QACtBL;QACAd,UAAUoB,OAAOC,IAAI,CAACP;IACxB;AACF;AAEA,SAASQ,4BAA4BC,YAA6C;IAChF,IAAIA,gBAAgB,aAAaA,gBAAgBA,cAAcC,SAAS;QACtE,MAAMC,oBAAoBF,cAAcC;QAExC,MAAMA,UAAU;eAAIC;SAAkB,CAAChB,GAAG,CAAC,CAACiB;YAC1C,OAAOA,OAAOC,IAAI;QACpB,GAAG,EAAE;QAEL,OAAO;YACL1B,MAAM;YACN2B,MAAMJ;QACR;IACF;IAEA,OAAO;QACLvB,MAAM;IACR;AACF;AAEA,SAAS4B,0BAA0BhB,QAAqC;IACtE,MAAMC,aAA4B;WAAID;KAAS,CAC5CiB,MAAM,CAAC,CAAC,EAAEC,IAAI,EAAE,GAAKnC,QAAQmC,OAC7BtB,GAAG,CAAC,CAAC,EAAEQ,IAAI,EAAE;QACZ,OAAO;YACLe,OAAO;gBACL;oBAAEd,MAAM,CAAC,cAAc,EAAED,KAAK,CAAC;gBAAC;gBAChC;oBACEhB,MAAM;oBACNkB,sBAAsB;oBACtBL,YAAY;wBACVmB,YAAY;4BAAEhC,MAAM;4BAAU2B,MAAM;gCAACX;6BAAK;wBAAC;oBAC7C;oBACAjB,UAAU;wBAAC;qBAAa;gBAC1B;aACD;QACH;IACF,GAAG,CAAC;IAEN,OAAO;QACLkC,OAAOpB;IACT;AACF;AAEA;;;;CAIC,GACD,SAASqB,uBAAuBC,MAAuB;IACrD,MAAMC,gBACJD,OAAOE,EAAE,EAAED,kBAAkB,WAAW;QAAEpC,MAAM;IAAS,IAAI;QAAEA,MAAM;IAAS;IAEhF,OAAO;QACLA,MAAM;QACNkB,sBAAsB;QACtBL,YAAY;YACVuB;QACF;QACArC,UAAU;YAAC;SAAgB;IAC7B;AACF;AAEA;;CAEC,GACD,OAAO,SAASuC,2BACdC,SAA8B,EAC9BC,UAAmB;IAEnB,MAAMC,aAAa;QAACF;KAAU;IAC9B,IAAIC,YAAY,OAAOD;IACvBE,WAAWC,IAAI,CAAC;IAChB,OAAOD;AACT;AAEA,OAAO,SAASE,mBACd;;;;GAIC,GACDC,sBAA8D,EAC9D3C,MAAe,EACf;;GAEC,GACD4C,wBAAkD,EAClDV,MAAwB;IAOxB,MAAMW,qBAAqB,IAAIC;IAE/B,OAAO;QACLlC,YAAYM,OAAO6B,WAAW,CAC5B/C,OAAOa,MAAM,CAAC,CAACmC,cAAcxD;YAC3B,MAAM+C,aAAarD,iBAAiBM,UAAUD,gBAAgBC;YAC9D,IAAI+C,YAAYM,mBAAmBI,GAAG,CAACzD,MAAM0D,IAAI;YAEjD,IAAIC;YAEJ,OAAQ3D,MAAMO,IAAI;gBAChB,KAAK;oBACH,IAAIP,MAAM4D,OAAO,KAAK,MAAM;wBAC1BD,cAAc;4BACZpD,MAAMsC,2BAA2B,SAASE;4BAC1Cc,OAAO;gCAAEtD,MAAM;4BAAS;wBAC1B;oBACF,OAAO;wBACLoD,cAAc;4BAAEpD,MAAMsC,2BAA2B,UAAUE;wBAAY;oBACzE;oBACA;gBACF,KAAK;gBACL,KAAK;gBACL,KAAK;gBACL,KAAK;oBAAQ;wBACXY,cAAc;4BAAEpD,MAAMsC,2BAA2B,UAAUE;wBAAY;wBACvE;oBACF;gBAEA,KAAK;oBAAU;wBACb,IAAI/C,MAAM4D,OAAO,KAAK,MAAM;4BAC1BD,cAAc;gCACZpD,MAAMsC,2BAA2B,SAASE;gCAC1Cc,OAAO;oCAAEtD,MAAM;gCAAS;4BAC1B;wBACF,OAAO;4BACLoD,cAAc;gCAAEpD,MAAMsC,2BAA2B,UAAUE;4BAAY;wBACzE;wBACA;oBACF;gBAEA,KAAK;oBAAY;wBACfY,cAAc;4BAAEpD,MAAMsC,2BAA2B,WAAWE;wBAAY;wBACxE;oBACF;gBAEA,KAAK;oBAAQ;wBACXY,cAAc3D,MAAM8D,UAAU,EAAEC,UAAU;4BACxCxD,MAAM;gCAAC;gCAAU;gCAAS;gCAAU;gCAAU;gCAAW;6BAAO;wBAClE;wBACA;oBACF;gBAEA,KAAK;oBAAY;wBACf,IAAI,CAACP,OAAOgE,QAAQ;4BAClB,MAAM,IAAIvE,kBAAkBO,OAAO,8HAA8H;;wBACnK;wBACA,IAAI,OAAOA,MAAMgE,MAAM,KAAK,YAAY;4BACtC,MAAM,IAAIC,MAAM;wBAClB;wBACA,IAAIjE,MAAMgE,MAAM,CAACE,YAAY,EAAE;4BAC7BP,cAAc3D,MAAMgE,MAAM,CAACE,YAAY,CAAC;gCACtCf;gCACAT;gCACA1C;gCACAoD;gCACAL;4BACF;wBACF,OAAO;4BACL,mEAAmE;4BACnEY,cAAc;gCACZpD,MAAMsC,2BAA2B,SAASE;gCAC1Cc,OAAO;oCACLtD,MAAM;gCACR;4BACF;wBACF;wBAEA;oBACF;gBAEA,KAAK;oBAAS;wBACZoD,cAAc;4BACZpD,MAAMsC,2BAA2B,UAAUE;4BAC3Cb,MAAMrB,iBAAiBb,MAAMc,OAAO;wBACtC;wBAEA;oBACF;gBAEA,KAAK;oBAAU;wBACb,MAAMqD,cAActD,iBAAiBb,MAAMc,OAAO;wBAElD,IAAId,MAAM4D,OAAO,EAAE;4BACjBD,cAAc;gCACZpD,MAAMsC,2BAA2B,SAASE;gCAC1Cc,OAAO;oCACLtD,MAAM;oCACN2B,MAAMiC;gCACR;4BACF;wBACF,OAAO;4BACLR,cAAc;gCACZpD,MAAMsC,2BAA2B,UAAUE;gCAC3Cb,MAAMiC;4BACR;wBACF;wBAEA;oBACF;gBAEA,KAAK;oBAAS;wBACZR,cAAc;4BACZpD,MAAMsC,2BAA2B,SAASE;4BAC1Cc,OAAO;gCACL;oCACEtD,MAAM;gCACR;gCACA;oCACEA,MAAM;gCACR;6BACD;4BACD6D,UAAU;4BACVC,UAAU;wBACZ;wBACA;oBACF;gBAEA,KAAK;oBAAgB;wBACnB,IAAIC,MAAMC,OAAO,CAACvE,MAAMwE,UAAU,GAAG;4BACnC,IAAIxE,MAAM4D,OAAO,EAAE;gCACjBD,cAAc;oCACZpD,MAAMsC,2BAA2B,SAASE;oCAC1Cc,OAAO;wCACLrB,OAAOxC,MAAMwE,UAAU,CAACzD,GAAG,CAAC,CAAC0D;4CAC3B,OAAO;gDACLlE,MAAM;gDACNkB,sBAAsB;gDACtBL,YAAY;oDACVoD,YAAY;wDACVE,OAAOD;oDACT;oDACAxD,OAAO;wDACLuB,OAAO;4DACL;gEACEjC,MAAM4C,sBAAsB,CAACsB,SAAS;4DACxC;4DACA;gEACEjD,MAAM,CAAC,cAAc,EAAEiD,SAAS,CAAC;4DACnC;yDACD;oDACH;gDACF;gDACAnE,UAAU;oDAAC;oDAAS;iDAAa;4CACnC;wCACF;oCACF;gCACF;4BACF,OAAO;gCACLqD,cAAc;oCACZnB,OAAOxC,MAAMwE,UAAU,CAACzD,GAAG,CAAC,CAAC0D;wCAC3B,OAAO;4CACLlE,MAAMsC,2BAA2B,UAAUE;4CAC3CtB,sBAAsB;4CACtBL,YAAY;gDACVoD,YAAY;oDACVE,OAAOD;gDACT;gDACAxD,OAAO;oDACLuB,OAAO;wDACL;4DACEjC,MAAM4C,sBAAsB,CAACsB,SAAS;wDACxC;wDACA;4DACEjD,MAAM,CAAC,cAAc,EAAEiD,SAAS,CAAC;wDACnC;qDACD;gDACH;4CACF;4CACAnE,UAAU;gDAAC;gDAAS;6CAAa;wCACnC;oCACF;gCACF;4BACF;wBACF,OAAO,IAAIN,MAAM4D,OAAO,EAAE;4BACxBD,cAAc;gCACZpD,MAAMsC,2BAA2B,SAASE;gCAC1Cc,OAAO;oCACLrB,OAAO;wCACL;4CACEjC,MAAM4C,sBAAsB,CAACnD,MAAMwE,UAAU,CAAC;wCAChD;wCACA;4CACEhD,MAAM,CAAC,cAAc,EAAExB,MAAMwE,UAAU,CAAC,CAAC;wCAC3C;qCACD;gCACH;4BACF;wBACF,OAAO;4BACLb,cAAc;gCACZnB,OAAO;oCACL;wCACEjC,MAAMsC,2BACJM,sBAAsB,CAACnD,MAAMwE,UAAU,CAAC,EACxCzB;oCAEJ;oCACA;wCACEvB,MAAM,CAAC,cAAc,EAAExB,MAAMwE,UAAU,CAAC,CAAC;oCAC3C;iCACD;4BACH;wBACF;wBAEA;oBACF;gBAEA,KAAK;oBAAU;wBACbb,cAAc;4BACZnB,OAAO;gCACL;oCACEjC,MAAM4C,sBAAsB,CAACnD,MAAMwE,UAAU,CAAC;gCAChD;gCACA;oCACEhD,MAAM,CAAC,cAAc,EAAExB,MAAMwE,UAAU,CAAC,CAAC;gCAC3C;6BACD;wBACH;wBACA,IAAI,CAACzB,YAAYY,YAAYnB,KAAK,CAACS,IAAI,CAAC;4BAAE1C,MAAM;wBAAO;wBACvD;oBACF;gBAEA,KAAK;oBAAU;wBACboD,cAAc;4BACZpD,MAAMsC,2BAA2B,SAASE;4BAC1Cc,OAAO;gCACLrB,OAAOxC,MAAM2E,MAAM,CAAC5D,GAAG,CAAC,CAAC6D;oCACvB,MAAMC,oBAAoB3B,mBACxBC,wBACAyB,MAAMpE,MAAM,EACZ4C,0BACAV;oCAGF,MAAMoC,cAA2B;wCAC/BvE,MAAM;wCACNkB,sBAAsB;wCACtBL,YAAY;4CACV,GAAGyD,kBAAkBzD,UAAU;4CAC/B2D,WAAW;gDACTL,OAAOE,MAAMrD,IAAI;4CACnB;wCACF;wCACAjB,UAAU;4CAAC;+CAAgBuE,kBAAkBvE,QAAQ;yCAAC;oCACxD;oCAEA,IAAIsE,MAAMI,aAAa,EAAE;wCACvB5B,yBAAyB6B,GAAG,CAACL,MAAMI,aAAa,EAAEF;wCAElD,OAAO;4CACLtD,MAAM,CAAC,cAAc,EAAEoD,MAAMI,aAAa,CAAC,CAAC;wCAC9C;oCACF;oCAEA,OAAOF;gCACT;4BACF;wBACF;wBACA;oBACF;gBAEA,KAAK;oBAAS;wBACZnB,cAAc;4BACZpD,MAAMsC,2BAA2B,SAASE;4BAC1Cc,OAAO;gCACLtD,MAAM;gCACNkB,sBAAsB;gCACtB,GAAGyB,mBACDC,wBACAnD,MAAMQ,MAAM,EACZ4C,0BACAV,OACD;4BACH;wBACF;wBAEA,IAAI1C,MAAMgF,aAAa,EAAE;4BACvB5B,yBAAyB6B,GAAG,CAACjF,MAAMgF,aAAa,EAAErB;4BAElDA,cAAc;gCACZnC,MAAM,CAAC,cAAc,EAAExB,MAAMgF,aAAa,CAAC,CAAC;4BAC9C;wBACF;wBACA;oBACF;gBAEA,KAAK;gBACL,KAAK;oBAAe;wBAClB,MAAME,cAAchC,mBAClBC,wBACAnD,MAAMQ,MAAM,EACZ4C,0BACAV;wBAEFhB,OAAOyD,OAAO,CAACD,YAAY9D,UAAU,EAAEgE,OAAO,CAAC,CAAC,CAACC,UAAUC,WAAW;4BACpE9B,aAAayB,GAAG,CAACI,UAAUC;wBAC7B;wBACAJ,YAAY5E,QAAQ,CAAC8E,OAAO,CAAC,CAACC;4BAC5BhC,mBAAmBI,GAAG,CAAC4B;wBACzB;wBACA;oBACF;gBAEA,KAAK;oBAAQ;wBACXrF,MAAMW,IAAI,CAACyE,OAAO,CAAC,CAACxE;4BAClB,MAAMsE,cAAchC,mBAClBC,wBACAvC,IAAIJ,MAAM,EACV4C,0BACAV;4BAEF,IAAI/C,WAAWiB,MAAM;gCACnB,uBAAuB;gCACvB4C,aAAayB,GAAG,CAACrE,IAAI8C,IAAI,EAAE;oCACzBnD,MAAM;oCACNkB,sBAAsB;oCACtB,GAAGyD,WAAW;gCAChB;gCAEA,yGAAyG;gCACzG,MAAMK,oBAAoB3E,IAAIJ,MAAM,CAACC,IAAI,CAAC,CAACC,WAAaX,gBAAgBW;gCAExE,IAAI6E,mBAAmB;oCACrBlC,mBAAmBI,GAAG,CAAC7C,IAAI8C,IAAI;gCACjC;4BACF,OAAO;gCACLhC,OAAOyD,OAAO,CAACD,YAAY9D,UAAU,EAAEgE,OAAO,CAAC,CAAC,CAACC,UAAUC,WAAW;oCACpE9B,aAAayB,GAAG,CAACI,UAAUC;gCAC7B;gCACAJ,YAAY5E,QAAQ,CAAC8E,OAAO,CAAC,CAACC;oCAC5BhC,mBAAmBI,GAAG,CAAC4B;gCACzB;4BACF;wBACF;wBACA;oBACF;gBAEA,KAAK;oBAAS;wBACZ1B,cAAc;4BACZpD,MAAM;4BACNkB,sBAAsB;4BACtB,GAAGyB,mBACDC,wBACAnD,MAAMQ,MAAM,EACZ4C,0BACAV,OACD;wBACH;wBAEA,IAAI1C,MAAMgF,aAAa,EAAE;4BACvB5B,yBAAyB6B,GAAG,CAACjF,MAAMgF,aAAa,EAAErB;4BAElDA,cAAc;gCACZnC,MAAM,CAAC,cAAc,EAAExB,MAAMgF,aAAa,CAAC,CAAC;4BAC9C;wBACF;wBACA;oBACF;gBAEA;oBAAS;wBACP;oBACF;YACF;YAEA,IAAI,sBAAsBhF,SAASA,OAAOwF,kBAAkBC,QAAQ;gBAClE,KAAK,MAAM1B,UAAU/D,MAAMwF,gBAAgB,CAAE;oBAC3C7B,cAAcI,OAAO;wBAAED,YAAYH;oBAAY;gBACjD;YACF;YAEA,IAAIA,eAAejE,iBAAiBM,QAAQ;gBAC1CwD,aAAayB,GAAG,CAACjF,MAAM0D,IAAI,EAAEC;YAC/B;YAEA,OAAOH;QACT,GAAG,IAAIkC;QAETpF,UAAUgE,MAAMqB,IAAI,CAACtC;IACvB;AACF;AAEA,oFAAoF;AACpF,OAAO,SAASuC,mBACdlD,MAAuB,EACvBmD,cAAiE,EACjEzC,wBAAkD,EAClDT,aAAgC;IAEhC,MAAMmD,SAA4DlG,eAAeiG;IACjF,MAAME,QAAQD,OAAOE,UAAU,EAAEC,YAC7BH,OAAOE,UAAU,CAACC,SAAS,GAC3BzG,SAASK,QAAQiG,OAAOvE,IAAI,EAAE;IAElC,MAAM2E,UAA8B;QAAExC,MAAM;QAAMnD,MAAMoC;QAAyBrC,UAAU;IAAK;IAChG,MAAM6F,gBAAgBL,OAAOtF,MAAM,CAAC4F,IAAI,CACtC,CAACpG,QAAUN,iBAAiBM,UAAUA,MAAM0D,IAAI,KAAK;IAGvD,IAAIyC,iBAAiBA,cAAc5F,IAAI,KAAK,WAAW4F,cAAc5F,IAAI,KAAK,OAAO;QACnF4F,cAAc7F,QAAQ,GAAG;IAC3B,OAAO;QACLwF,OAAOtF,MAAM,CAAC6F,OAAO,CAACH;IACxB;IAEA,iCAAiC;IACjC,IAAI,gBAAgBJ,UAAUA,OAAOQ,UAAU,KAAK,OAAO;QACzDR,OAAOtF,MAAM,GAAGsF,OAAOtF,MAAM,CAACO,GAAG,CAAC,CAACf;YACjC,IAAIN,iBAAiBM,UAAWA,CAAAA,MAAM0D,IAAI,KAAK,eAAe1D,MAAM0D,IAAI,KAAK,WAAU,GAAI;gBACzF,OAAO;oBACL,GAAG1D,KAAK;oBACRM,UAAU;gBACZ;YACF;YACA,OAAON;QACT;IACF;IAEA,IAAI,UAAU8F,UAAUA,OAAOzD,IAAI,IAAI,CAACyD,OAAOzD,IAAI,EAAEkE,sBAAsB;QACzET,OAAOtF,MAAM,CAACyC,IAAI,CAAC;YACjBS,MAAM;YACNnD,MAAM;QACR;IACF;IAEA,iGAAiG;IACjG,MAAM4C,yBAAyBrD,0BAA0B;QAAE4C;QAAQC;IAAc;IAEjF,OAAO;QACLpC,MAAM;QACNkB,sBAAsB;QACtBsE;QACA,GAAG7C,mBAAmBC,wBAAwB2C,OAAOtF,MAAM,EAAE4C,0BAA0BV,OAAO;IAChG;AACF;AAEA,MAAMI,YAAyB;IAC7BvC,MAAM;IACND,UAAU;AACZ;AACA,MAAMkG,yBAAyB,CAAC,EAC9BjG,IAAI,EACJkG,iBAAiB,EAIlB;IACC,MAAMC,kBAAkB;QACtBjF,sBAAsB;QACtBL,YAAY;YAAEuF,OAAO7D;QAAU;QAC/BxC,UAAU;YAAC;SAAQ;IACrB;IACA,MAAMsG,qBAAqB;QACzBnF,sBAAsB;QACtBL,YAAY;YAAEyF,UAAU/D;QAAU;QAClCxC,UAAU;YAAC;SAAW;IACxB;IAEA,IAAI;QAAC;QAAS;KAAW,CAACwG,QAAQ,CAACvG,OAAO;QACxCmG,gBAAgBtF,UAAU,CAAC,WAAW,GAAG0B;QACzC4D,gBAAgBpG,QAAQ,CAAC2C,IAAI,CAAC;QAC9B2D,mBAAmBxF,UAAU,CAAC,WAAW,GAAG0B;QAC5C8D,mBAAmBtG,QAAQ,CAAC2C,IAAI,CAAC;IACnC;IAEA,IAAIwD,mBAAmB;QACrB,OAAQlG;YACN,KAAK;gBAAS;oBACZ,IAAIkG,kBAAkBM,eAAe,EAAE;wBACrC,yDAAyD;wBACzD,OAAO;4BACLtF,sBAAsB;4BACtBe,OAAO;gCAACkE;gCAAiBE;6BAAmB;wBAC9C;oBACF,OAAO;wBACL,6CAA6C;wBAC7C,OAAOA;oBACT;gBACF;YAEA,KAAK;gBAAY;oBACf,IAAIH,kBAAkBO,YAAY,EAAE;wBAClC,wDAAwD;wBACxD,OAAO;4BACLvF,sBAAsB;4BACtBL,YAAY;gCACV,GAAGwF,mBAAmBxF,UAAU;gCAChC,GAAGsF,gBAAgBtF,UAAU;4BAC/B;4BACAd,UAAU;mCAAIsG,mBAAmBtG,QAAQ;mCAAKoG,gBAAgBpG,QAAQ;6BAAC;wBACzE;oBACF,OAAO,IAAImG,kBAAkBM,eAAe,EAAE;wBAC5C,wDAAwD;wBACxD,OAAO;4BACLtF,sBAAsB;4BACtBL,YAAY;gCACV,GAAGwF,mBAAmBxF,UAAU;gCAChC,GAAGsF,gBAAgBtF,UAAU;4BAC/B;4BACAd,UAAUsG,mBAAmBtG,QAAQ;wBACvC;oBACF,OAAO;wBACL,sDAAsD;wBACtD,OAAOsG;oBACT;gBACF;YAEA,KAAK;gBAAkB;oBACrB,IAAIH,kBAAkBM,eAAe,EAAE;wBACrC,qDAAqD;wBACrD,OAAO;4BACLtF,sBAAsB;4BACtBe,OAAO;gCAACkE;gCAAiBE;6BAAmB;wBAC9C;oBACF,OAAO;wBACL,iDAAiD;wBACjD,OAAOA;oBACT;gBACF;QACF;IACF;IAEA,kDAAkD;IAClD,OAAOF;AACT;AAEA,OAAO,SAASO,qCACdvE,MAAiC;IAEjC,MAAM+D,oBAAoB/D,OAAOL,IAAI,EAAEoE;IACvC,MAAMS,kBAA+BV,uBAAuB;QAAEjG,MAAM;QAASkG;IAAkB;IAC/F,MAAMU,2BAAwCX,uBAAuB;QACnEjG,MAAM;QACNkG;IACF;IACA,MAAMW,qBAAkCZ,uBAAuB;QAC7DjG,MAAM;QACNkG;IACF;IAEA,MAAMrF,aAAwC;QAC5CiG,gBAAgBF;QAChBG,OAAOJ;QACPK,mBAAmBH;QACnBI,QAAQL;IACV;IAEA,OAAO;QACL5G,MAAM;QACNkB,sBAAsB;QACtBL;QACAd,UAAUoB,OAAOC,IAAI,CAACP;QACtB2E,OAAO,CAAC,EAAEvG,SAASK,QAAQ,CAAC,EAAE6C,OAAOnB,IAAI,CAAC,CAAC,EAAE,OAAO,cAAc,CAAC;IACrE;AACF;AAEA,SAASkG,6BAA6BC,WAAwC;IAC5E,MAAMtG,aAAasG,YAAYrG,MAAM,CAAC,CAACC,KAAKiB;QAC1C,IAAIA,WAAWF,IAAI,EAAE;YACnBf,GAAG,CAACiB,WAAWhB,IAAI,CAAC,GAAG;gBACrBC,MAAM,CAAC,mBAAmB,EAAEe,WAAWhB,IAAI,CAAC,CAAC;YAC/C;QACF;QACA,OAAOD;IACT,GAAG,CAAC;IAEJ,OAAO;QACLf,MAAM;QACNkB,sBAAsB;QACtBL;QACAd,UAAUoB,OAAOC,IAAI,CAACP;IACxB;AACF;AAEA;;CAEC,GACD,OAAO,SAASuG,mBACdjF,MAAuB,EACvBC,aAAiC;IAEjC,yJAAyJ;IACzJ,MAAMS,2BAAqD,IAAIsC;IAE/D,gLAAgL;IAChL,+CAA+C;IAC/C,MAAMkC,oBAAkD;WACnDlF,OAAOmF,OAAO;WACdnF,OAAOgF,WAAW;KACtB,CAACrG,MAAM,CAAC,CAACC,KAAKwE;QACbxE,GAAG,CAACwE,OAAOvE,IAAI,CAAC,GAAGqE,mBAAmBlD,QAAQoD,QAAQ1C,0BAA0BT;QAChF,OAAOrB;IACT,GAAG,CAAC;IAEJ,MAAMwG,2BAA2B;WAAIpF,OAAOgF,WAAW;KAAC,CACrDtF,MAAM,CAAC,CAAC,EAAEC,IAAI,EAAE,GAAKnC,QAAQmC,OAC7BhB,MAAM,CACL,CAACC,KAAKyG;QACJzG,IAAIe,IAAI,CAAC0F,eAAexG,IAAI,CAAC,GAAG0F,qCAAqCc;QACrE,OAAOzG;IACT,GACA;QAAEe,MAAM,CAAC;IAAE;IAGf,IAAIyB,aAA0B;QAC5BrC,sBAAsB;QACtBuG,aAAa;YACX,GAAGJ,iBAAiB;YACpB,GAAGlG,OAAO6B,WAAW,CAACH,yBAAyB;YAC/C,GAAG0E,wBAAwB;QAC7B;QACA,wJAAwJ;QACxJvH,MAAM;QACNa,YAAY;YACViB,MAAMoF,6BAA6B/E,OAAOgF,WAAW;YACrDA,aAAaxG,sBAAsBwB,OAAOgF,WAAW,IAAI,EAAE;YAC3D9E,IAAIH,uBAAuBC;YAC3BmF,SAAS3G,sBAAsBwB,OAAOmF,OAAO,IAAI,EAAE;YACnD7F,QAAQJ,4BAA4Bc,OAAOb,YAAY;YACvDoG,MAAM9F,0BAA0BO,OAAOgF,WAAW;QACpD;QACApH,UAAU;YAAC;YAAQ;YAAU;YAAe;YAAW;YAAQ;SAAK;QACpEyF,OAAO;IACT;IAEA,IAAIrD,QAAQsD,YAAYjC,QAAQ0B,QAAQ;QACtC,KAAK,MAAM1B,UAAUrB,OAAOsD,UAAU,CAACjC,MAAM,CAAE;YAC7CD,aAAaC,OAAO;gBAAED;YAAW;QACnC;IACF;IAEA,OAAOA;AACT"}
1
+ {"version":3,"sources":["../../src/utilities/configToJSONSchema.ts"],"sourcesContent":["import type { JSONSchema4, JSONSchema4TypeName } from 'json-schema'\n\nimport pluralize from 'pluralize'\nconst { singular } = pluralize\n\nimport type { Auth } from '../auth/types.js'\nimport type { SanitizedCollectionConfig } from '../collections/config/types.js'\nimport type { SanitizedConfig } from '../config/types.js'\nimport type { Field, FieldAffectingData, Option } from '../fields/config/types.js'\nimport type { SanitizedGlobalConfig } from '../globals/config/types.js'\n\nimport { MissingEditorProp } from '../errors/MissingEditorProp.js'\nimport { fieldAffectsData, tabHasName } from '../fields/config/types.js'\nimport { deepCopyObject } from './deepCopyObject.js'\nimport { toWords } from './formatLabels.js'\nimport { getCollectionIDFieldTypes } from './getCollectionIDFieldTypes.js'\n\nconst fieldIsRequired = (field: Field) => {\n const isConditional = Boolean(field?.admin && field?.admin?.condition)\n if (isConditional) return false\n\n const isMarkedRequired = 'required' in field && field.required === true\n if (fieldAffectsData(field) && isMarkedRequired) return true\n\n // if any subfields are required, this field is required\n if ('fields' in field && field.type !== 'array') {\n return field.fields.some((subField) => fieldIsRequired(subField))\n }\n\n // if any tab subfields have required fields, this field is required\n if (field.type === 'tabs') {\n return field.tabs.some((tab) => {\n if ('name' in tab) {\n return tab.fields.some((subField) => fieldIsRequired(subField))\n }\n return false\n })\n }\n\n return false\n}\n\nfunction buildOptionEnums(options: Option[]): string[] {\n return options.map((option) => {\n if (typeof option === 'object' && 'value' in option) {\n return option.value\n }\n\n return option\n })\n}\n\nfunction generateEntitySchemas(\n entities: (SanitizedCollectionConfig | SanitizedGlobalConfig)[],\n): JSONSchema4 {\n const properties = [...entities].reduce((acc, { slug }) => {\n acc[slug] = {\n $ref: `#/definitions/${slug}`,\n }\n\n return acc\n }, {})\n\n return {\n type: 'object',\n additionalProperties: false,\n properties,\n required: Object.keys(properties),\n }\n}\n\nfunction generateLocaleEntitySchemas(localization: SanitizedConfig['localization']): JSONSchema4 {\n if (localization && 'locales' in localization && localization?.locales) {\n const localesFromConfig = localization?.locales\n\n const locales = [...localesFromConfig].map((locale) => {\n return locale.code\n }, [])\n\n return {\n type: 'string',\n enum: locales,\n }\n }\n\n return {\n type: 'null',\n }\n}\n\nfunction generateAuthEntitySchemas(entities: SanitizedCollectionConfig[]): JSONSchema4 {\n const properties: JSONSchema4[] = [...entities]\n .filter(({ auth }) => Boolean(auth))\n .map(({ slug }) => {\n return {\n allOf: [\n { $ref: `#/definitions/${slug}` },\n {\n type: 'object',\n additionalProperties: false,\n properties: {\n collection: { type: 'string', enum: [slug] },\n },\n required: ['collection'],\n },\n ],\n }\n }, {})\n\n return {\n oneOf: properties,\n }\n}\n\n/**\n * Generates the JSON Schema for database configuration\n *\n * @example { db: idType: string }\n */\nfunction generateDbEntitySchema(config: SanitizedConfig): JSONSchema4 {\n const defaultIDType: JSONSchema4 =\n config.db?.defaultIDType === 'number' ? { type: 'number' } : { type: 'string' }\n\n return {\n type: 'object',\n additionalProperties: false,\n properties: {\n defaultIDType,\n },\n required: ['defaultIDType'],\n }\n}\n\n/**\n * Returns a JSON Schema Type with 'null' added if the field is not required.\n */\nexport function withNullableJSONSchemaType(\n fieldType: JSONSchema4TypeName,\n isRequired: boolean,\n): JSONSchema4TypeName | JSONSchema4TypeName[] {\n const fieldTypes = [fieldType]\n if (isRequired) return fieldType\n fieldTypes.push('null')\n return fieldTypes\n}\n\nexport function fieldsToJSONSchema(\n /**\n * Used for relationship fields, to determine whether to use a string or number type for the ID.\n * While there is a default ID field type set by the db adapter, they can differ on a collection-level\n * if they have custom ID fields.\n */\n collectionIDFieldTypes: { [key: string]: 'number' | 'string' },\n fields: Field[],\n /**\n * Allows you to define new top-level interfaces that can be re-used in the output schema.\n */\n interfaceNameDefinitions: Map<string, JSONSchema4>,\n config?: SanitizedConfig,\n): {\n properties: {\n [k: string]: JSONSchema4\n }\n required: string[]\n} {\n const requiredFieldNames = new Set<string>()\n\n return {\n properties: Object.fromEntries(\n fields.reduce((fieldSchemas, field) => {\n const isRequired = fieldAffectsData(field) && fieldIsRequired(field)\n if (isRequired) requiredFieldNames.add(field.name)\n\n let fieldSchema: JSONSchema4\n\n switch (field.type) {\n case 'text':\n if (field.hasMany === true) {\n fieldSchema = {\n type: withNullableJSONSchemaType('array', isRequired),\n items: { type: 'string' },\n }\n } else {\n fieldSchema = { type: withNullableJSONSchemaType('string', isRequired) }\n }\n break\n case 'textarea':\n case 'code':\n case 'email':\n case 'date': {\n fieldSchema = { type: withNullableJSONSchemaType('string', isRequired) }\n break\n }\n\n case 'number': {\n if (field.hasMany === true) {\n fieldSchema = {\n type: withNullableJSONSchemaType('array', isRequired),\n items: { type: 'number' },\n }\n } else {\n fieldSchema = { type: withNullableJSONSchemaType('number', isRequired) }\n }\n break\n }\n\n case 'checkbox': {\n fieldSchema = { type: withNullableJSONSchemaType('boolean', isRequired) }\n break\n }\n\n case 'json': {\n fieldSchema = field.jsonSchema?.schema || {\n type: ['object', 'array', 'string', 'number', 'boolean', 'null'],\n }\n break\n }\n\n case 'richText': {\n if (!field?.editor) {\n throw new MissingEditorProp(field) // while we allow disabling editor functionality, you should not have any richText fields defined if you do not have an editor\n }\n if (typeof field.editor === 'function') {\n throw new Error('Attempted to access unsanitized rich text editor.')\n }\n if (field.editor.outputSchema) {\n fieldSchema = field.editor.outputSchema({\n collectionIDFieldTypes,\n config,\n field,\n interfaceNameDefinitions,\n isRequired,\n })\n } else {\n // Maintain backwards compatibility with existing rich text editors\n fieldSchema = {\n type: withNullableJSONSchemaType('array', isRequired),\n items: {\n type: 'object',\n },\n }\n }\n\n break\n }\n\n case 'radio': {\n fieldSchema = {\n type: withNullableJSONSchemaType('string', isRequired),\n enum: buildOptionEnums(field.options),\n }\n\n break\n }\n\n case 'select': {\n const optionEnums = buildOptionEnums(field.options)\n\n if (field.hasMany) {\n fieldSchema = {\n type: withNullableJSONSchemaType('array', isRequired),\n items: {\n type: 'string',\n enum: optionEnums,\n },\n }\n } else {\n fieldSchema = {\n type: withNullableJSONSchemaType('string', isRequired),\n enum: optionEnums,\n }\n }\n\n break\n }\n\n case 'point': {\n fieldSchema = {\n type: withNullableJSONSchemaType('array', isRequired),\n items: [\n {\n type: 'number',\n },\n {\n type: 'number',\n },\n ],\n maxItems: 2,\n minItems: 2,\n }\n break\n }\n\n case 'relationship': {\n if (Array.isArray(field.relationTo)) {\n if (field.hasMany) {\n fieldSchema = {\n type: withNullableJSONSchemaType('array', isRequired),\n items: {\n oneOf: field.relationTo.map((relation) => {\n return {\n type: 'object',\n additionalProperties: false,\n properties: {\n relationTo: {\n const: relation,\n },\n value: {\n oneOf: [\n {\n type: collectionIDFieldTypes[relation],\n },\n {\n $ref: `#/definitions/${relation}`,\n },\n ],\n },\n },\n required: ['value', 'relationTo'],\n }\n }),\n },\n }\n } else {\n fieldSchema = {\n oneOf: field.relationTo.map((relation) => {\n return {\n type: withNullableJSONSchemaType('object', isRequired),\n additionalProperties: false,\n properties: {\n relationTo: {\n const: relation,\n },\n value: {\n oneOf: [\n {\n type: collectionIDFieldTypes[relation],\n },\n {\n $ref: `#/definitions/${relation}`,\n },\n ],\n },\n },\n required: ['value', 'relationTo'],\n }\n }),\n }\n }\n } else if (field.hasMany) {\n fieldSchema = {\n type: withNullableJSONSchemaType('array', isRequired),\n items: {\n oneOf: [\n {\n type: collectionIDFieldTypes[field.relationTo],\n },\n {\n $ref: `#/definitions/${field.relationTo}`,\n },\n ],\n },\n }\n } else {\n fieldSchema = {\n oneOf: [\n {\n type: withNullableJSONSchemaType(\n collectionIDFieldTypes[field.relationTo],\n isRequired,\n ),\n },\n {\n $ref: `#/definitions/${field.relationTo}`,\n },\n ],\n }\n }\n\n break\n }\n\n case 'upload': {\n fieldSchema = {\n oneOf: [\n {\n type: collectionIDFieldTypes[field.relationTo],\n },\n {\n $ref: `#/definitions/${field.relationTo}`,\n },\n ],\n }\n if (!isRequired) fieldSchema.oneOf.push({ type: 'null' })\n break\n }\n\n case 'blocks': {\n fieldSchema = {\n type: withNullableJSONSchemaType('array', isRequired),\n items: {\n oneOf: field.blocks.map((block) => {\n const blockFieldSchemas = fieldsToJSONSchema(\n collectionIDFieldTypes,\n block.fields,\n interfaceNameDefinitions,\n config,\n )\n\n const blockSchema: JSONSchema4 = {\n type: 'object',\n additionalProperties: false,\n properties: {\n ...blockFieldSchemas.properties,\n blockType: {\n const: block.slug,\n },\n },\n required: ['blockType', ...blockFieldSchemas.required],\n }\n\n if (block.interfaceName) {\n interfaceNameDefinitions.set(block.interfaceName, blockSchema)\n\n return {\n $ref: `#/definitions/${block.interfaceName}`,\n }\n }\n\n return blockSchema\n }),\n },\n }\n break\n }\n\n case 'array': {\n fieldSchema = {\n type: withNullableJSONSchemaType('array', isRequired),\n items: {\n type: 'object',\n additionalProperties: false,\n ...fieldsToJSONSchema(\n collectionIDFieldTypes,\n field.fields,\n interfaceNameDefinitions,\n config,\n ),\n },\n }\n\n if (field.interfaceName) {\n interfaceNameDefinitions.set(field.interfaceName, fieldSchema)\n\n fieldSchema = {\n $ref: `#/definitions/${field.interfaceName}`,\n }\n }\n break\n }\n\n case 'row':\n case 'collapsible': {\n const childSchema = fieldsToJSONSchema(\n collectionIDFieldTypes,\n field.fields,\n interfaceNameDefinitions,\n config,\n )\n Object.entries(childSchema.properties).forEach(([propName, propSchema]) => {\n fieldSchemas.set(propName, propSchema)\n })\n childSchema.required.forEach((propName) => {\n requiredFieldNames.add(propName)\n })\n break\n }\n\n case 'tabs': {\n field.tabs.forEach((tab) => {\n const childSchema = fieldsToJSONSchema(\n collectionIDFieldTypes,\n tab.fields,\n interfaceNameDefinitions,\n config,\n )\n if (tabHasName(tab)) {\n // could have interface\n fieldSchemas.set(tab.name, {\n type: 'object',\n additionalProperties: false,\n ...childSchema,\n })\n\n // If the named tab has any required fields then we mark this as required otherwise it should be optional\n const hasRequiredFields = tab.fields.some((subField) => fieldIsRequired(subField))\n\n if (hasRequiredFields) {\n requiredFieldNames.add(tab.name)\n }\n } else {\n Object.entries(childSchema.properties).forEach(([propName, propSchema]) => {\n fieldSchemas.set(propName, propSchema)\n })\n childSchema.required.forEach((propName) => {\n requiredFieldNames.add(propName)\n })\n }\n })\n break\n }\n\n case 'group': {\n fieldSchema = {\n type: 'object',\n additionalProperties: false,\n ...fieldsToJSONSchema(\n collectionIDFieldTypes,\n field.fields,\n interfaceNameDefinitions,\n config,\n ),\n }\n\n if (field.interfaceName) {\n interfaceNameDefinitions.set(field.interfaceName, fieldSchema)\n\n fieldSchema = {\n $ref: `#/definitions/${field.interfaceName}`,\n }\n }\n break\n }\n\n default: {\n break\n }\n }\n\n if ('typescriptSchema' in field && field?.typescriptSchema?.length) {\n for (const schema of field.typescriptSchema) {\n fieldSchema = schema({ jsonSchema: fieldSchema })\n }\n }\n\n if (fieldSchema && fieldAffectsData(field)) {\n fieldSchemas.set(field.name, fieldSchema)\n }\n\n return fieldSchemas\n }, new Map<string, JSONSchema4>()),\n ),\n required: Array.from(requiredFieldNames),\n }\n}\n\n// This function is part of the public API and is exported through payload/utilities\nexport function entityToJSONSchema(\n config: SanitizedConfig,\n incomingEntity: SanitizedCollectionConfig | SanitizedGlobalConfig,\n interfaceNameDefinitions: Map<string, JSONSchema4>,\n defaultIDType: 'number' | 'text',\n): JSONSchema4 {\n const entity: SanitizedCollectionConfig | SanitizedGlobalConfig = deepCopyObject(incomingEntity)\n const title = entity.typescript?.interface\n ? entity.typescript.interface\n : singular(toWords(entity.slug, true))\n\n const idField: FieldAffectingData = { name: 'id', type: defaultIDType as 'text', required: true }\n const customIdField = entity.fields.find(\n (field) => fieldAffectsData(field) && field.name === 'id',\n ) as FieldAffectingData\n\n if (customIdField && customIdField.type !== 'group' && customIdField.type !== 'tab') {\n customIdField.required = true\n } else {\n entity.fields.unshift(idField)\n }\n\n // mark timestamp fields required\n if ('timestamps' in entity && entity.timestamps !== false) {\n entity.fields = entity.fields.map((field) => {\n if (fieldAffectsData(field) && (field.name === 'createdAt' || field.name === 'updatedAt')) {\n return {\n ...field,\n required: true,\n }\n }\n return field\n })\n }\n\n if ('auth' in entity && entity.auth && !entity.auth?.disableLocalStrategy) {\n entity.fields.push({\n name: 'password',\n type: 'text',\n })\n }\n\n // Used for relationship fields, to determine whether to use a string or number type for the ID.\n const collectionIDFieldTypes = getCollectionIDFieldTypes({ config, defaultIDType })\n\n return {\n type: 'object',\n additionalProperties: false,\n title,\n ...fieldsToJSONSchema(collectionIDFieldTypes, entity.fields, interfaceNameDefinitions, config),\n }\n}\n\nconst fieldType: JSONSchema4 = {\n type: 'string',\n required: false,\n}\nconst generateAuthFieldTypes = ({\n type,\n loginWithUsername,\n}: {\n loginWithUsername: Auth['loginWithUsername']\n type: 'forgotOrUnlock' | 'login' | 'register'\n}): JSONSchema4 => {\n if (loginWithUsername) {\n switch (type) {\n case 'login': {\n if (loginWithUsername.allowEmailLogin) {\n // allow username or email and require password for login\n return {\n additionalProperties: false,\n oneOf: [\n {\n additionalProperties: false,\n properties: { email: fieldType, password: fieldType },\n required: ['email', 'password'],\n },\n {\n additionalProperties: false,\n properties: { password: fieldType, username: fieldType },\n required: ['username', 'password'],\n },\n ],\n }\n } else {\n // allow only username and password for login\n return {\n additionalProperties: false,\n properties: {\n password: fieldType,\n username: fieldType,\n },\n required: ['username', 'password'],\n }\n }\n }\n\n case 'register': {\n const requiredFields: ('email' | 'password' | 'username')[] = ['password']\n const properties: {\n email?: JSONSchema4['properties']\n password?: JSONSchema4['properties']\n username?: JSONSchema4['properties']\n } = {\n password: fieldType,\n username: fieldType,\n }\n\n if (loginWithUsername.requireEmail) {\n requiredFields.push('email')\n }\n if (loginWithUsername.requireUsername) {\n requiredFields.push('username')\n }\n if (loginWithUsername.requireEmail || loginWithUsername.allowEmailLogin) {\n properties.email = fieldType\n }\n\n return {\n additionalProperties: false,\n properties,\n required: requiredFields,\n }\n }\n\n case 'forgotOrUnlock': {\n if (loginWithUsername.allowEmailLogin) {\n // allow email or username for unlock/forgot-password\n return {\n additionalProperties: false,\n oneOf: [\n {\n additionalProperties: false,\n properties: { email: fieldType },\n required: ['email'],\n },\n {\n additionalProperties: false,\n properties: { username: fieldType },\n required: ['username'],\n },\n ],\n }\n } else {\n // allow only username for unlock/forgot-password\n return {\n additionalProperties: false,\n properties: { username: fieldType },\n required: ['username'],\n }\n }\n }\n }\n }\n\n // default email (and password for login/register)\n return {\n additionalProperties: false,\n properties: { email: fieldType, password: fieldType },\n required: ['email', 'password'],\n }\n}\n\nexport function authCollectionToOperationsJSONSchema(\n config: SanitizedCollectionConfig,\n): JSONSchema4 {\n const loginWithUsername = config.auth?.loginWithUsername\n const loginUserFields: JSONSchema4 = generateAuthFieldTypes({ type: 'login', loginWithUsername })\n const forgotOrUnlockUserFields: JSONSchema4 = generateAuthFieldTypes({\n type: 'forgotOrUnlock',\n loginWithUsername,\n })\n const registerUserFields: JSONSchema4 = generateAuthFieldTypes({\n type: 'register',\n loginWithUsername,\n })\n\n const properties: JSONSchema4['properties'] = {\n forgotPassword: forgotOrUnlockUserFields,\n login: loginUserFields,\n registerFirstUser: registerUserFields,\n unlock: forgotOrUnlockUserFields,\n }\n\n return {\n type: 'object',\n additionalProperties: false,\n properties,\n required: Object.keys(properties),\n title: `${singular(toWords(`${config.slug}`, true))}AuthOperations`,\n }\n}\n\nfunction generateAuthOperationSchemas(collections: SanitizedCollectionConfig[]): JSONSchema4 {\n const properties = collections.reduce((acc, collection) => {\n if (collection.auth) {\n acc[collection.slug] = {\n $ref: `#/definitions/auth/${collection.slug}`,\n }\n }\n return acc\n }, {})\n\n return {\n type: 'object',\n additionalProperties: false,\n properties,\n required: Object.keys(properties),\n }\n}\n\n/**\n * This is used for generating the TypeScript types (payload-types.ts) with the payload generate:types command.\n */\nexport function configToJSONSchema(\n config: SanitizedConfig,\n defaultIDType?: 'number' | 'text',\n): JSONSchema4 {\n // a mutable Map to store custom top-level `interfaceName` types. Fields with an `interfaceName` property will be moved to the top-level definitions here\n const interfaceNameDefinitions: Map<string, JSONSchema4> = new Map()\n\n // Collections and Globals have to be moved to the top-level definitions as well. Reason: The top-level type will be the `Config` type - we don't want all collection and global\n // types to be inlined inside the `Config` type\n const entityDefinitions: { [k: string]: JSONSchema4 } = [\n ...config.globals,\n ...config.collections,\n ].reduce((acc, entity) => {\n acc[entity.slug] = entityToJSONSchema(config, entity, interfaceNameDefinitions, defaultIDType)\n return acc\n }, {})\n\n const authOperationDefinitions = [...config.collections]\n .filter(({ auth }) => Boolean(auth))\n .reduce(\n (acc, authCollection) => {\n acc.auth[authCollection.slug] = authCollectionToOperationsJSONSchema(authCollection)\n return acc\n },\n { auth: {} },\n )\n\n let jsonSchema: JSONSchema4 = {\n additionalProperties: false,\n definitions: {\n ...entityDefinitions,\n ...Object.fromEntries(interfaceNameDefinitions),\n ...authOperationDefinitions,\n },\n // These properties here will be very simple, as all the complexity is in the definitions. These are just the properties for the top-level `Config` type\n type: 'object',\n properties: {\n auth: generateAuthOperationSchemas(config.collections),\n collections: generateEntitySchemas(config.collections || []),\n db: generateDbEntitySchema(config),\n globals: generateEntitySchemas(config.globals || []),\n locale: generateLocaleEntitySchemas(config.localization),\n user: generateAuthEntitySchemas(config.collections),\n },\n required: ['user', 'locale', 'collections', 'globals', 'auth', 'db'],\n title: 'Config',\n }\n\n if (config?.typescript?.schema?.length) {\n for (const schema of config.typescript.schema) {\n jsonSchema = schema({ jsonSchema })\n }\n }\n\n return jsonSchema\n}\n"],"names":["pluralize","singular","MissingEditorProp","fieldAffectsData","tabHasName","deepCopyObject","toWords","getCollectionIDFieldTypes","fieldIsRequired","field","isConditional","Boolean","admin","condition","isMarkedRequired","required","type","fields","some","subField","tabs","tab","buildOptionEnums","options","map","option","value","generateEntitySchemas","entities","properties","reduce","acc","slug","$ref","additionalProperties","Object","keys","generateLocaleEntitySchemas","localization","locales","localesFromConfig","locale","code","enum","generateAuthEntitySchemas","filter","auth","allOf","collection","oneOf","generateDbEntitySchema","config","defaultIDType","db","withNullableJSONSchemaType","fieldType","isRequired","fieldTypes","push","fieldsToJSONSchema","collectionIDFieldTypes","interfaceNameDefinitions","requiredFieldNames","Set","fromEntries","fieldSchemas","add","name","fieldSchema","hasMany","items","jsonSchema","schema","editor","Error","outputSchema","optionEnums","maxItems","minItems","Array","isArray","relationTo","relation","const","blocks","block","blockFieldSchemas","blockSchema","blockType","interfaceName","set","childSchema","entries","forEach","propName","propSchema","hasRequiredFields","typescriptSchema","length","Map","from","entityToJSONSchema","incomingEntity","entity","title","typescript","interface","idField","customIdField","find","unshift","timestamps","disableLocalStrategy","generateAuthFieldTypes","loginWithUsername","allowEmailLogin","email","password","username","requiredFields","requireEmail","requireUsername","authCollectionToOperationsJSONSchema","loginUserFields","forgotOrUnlockUserFields","registerUserFields","forgotPassword","login","registerFirstUser","unlock","generateAuthOperationSchemas","collections","configToJSONSchema","entityDefinitions","globals","authOperationDefinitions","authCollection","definitions","user"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "payload",
3
- "version": "3.0.0-beta.73",
3
+ "version": "3.0.0-beta.75",
4
4
  "description": "Node, React, Headless CMS and Application Framework built on Next.js",
5
5
  "keywords": [
6
6
  "admin panel",
@@ -71,7 +71,7 @@
71
71
  "bin.js"
72
72
  ],
73
73
  "dependencies": {
74
- "@next/env": "^15.0.0-canary.53",
74
+ "@next/env": "^15.0.0-canary.104",
75
75
  "@swc-node/core": "1.13.1",
76
76
  "@swc-node/sourcemap-support": "0.5.0",
77
77
  "ajv": "8.14.0",
@@ -96,7 +96,7 @@
96
96
  "scmp": "2.1.0",
97
97
  "ts-essentials": "7.0.3",
98
98
  "uuid": "10.0.0",
99
- "@payloadcms/translations": "3.0.0-beta.73"
99
+ "@payloadcms/translations": "3.0.0-beta.75"
100
100
  },
101
101
  "devDependencies": {
102
102
  "@hyrious/esbuild-plugin-commonjs": "^0.2.4",