payload 4.0.0-internal.5b1e7cd → 4.0.0-internal.5f0cd13
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/admin/RichText.d.ts +3 -16
- package/dist/admin/RichText.d.ts.map +1 -1
- package/dist/admin/RichText.js.map +1 -1
- package/dist/admin/adapters/cookies.d.ts +21 -0
- package/dist/admin/adapters/cookies.d.ts.map +1 -0
- package/dist/admin/adapters/cookies.js +3 -0
- package/dist/admin/adapters/cookies.js.map +1 -0
- package/dist/admin/adapters/index.d.ts +4 -0
- package/dist/admin/adapters/index.d.ts.map +1 -0
- package/dist/admin/adapters/index.js +3 -0
- package/dist/admin/adapters/index.js.map +1 -0
- package/dist/admin/adapters/router.d.ts +56 -0
- package/dist/admin/adapters/router.d.ts.map +1 -0
- package/dist/admin/adapters/router.js +3 -0
- package/dist/admin/adapters/router.js.map +1 -0
- package/dist/admin/adapters/server.d.ts +23 -0
- package/dist/admin/adapters/server.d.ts.map +1 -0
- package/dist/admin/adapters/server.js +6 -0
- package/dist/admin/adapters/server.js.map +1 -0
- package/dist/admin/elements/Nav.d.ts +13 -0
- package/dist/admin/elements/Nav.d.ts.map +1 -1
- package/dist/admin/elements/Nav.js.map +1 -1
- package/dist/admin/elements/Table.d.ts +1 -0
- package/dist/admin/elements/Table.d.ts.map +1 -1
- package/dist/admin/elements/Table.js.map +1 -1
- package/dist/admin/functions/index.d.ts +1 -38
- package/dist/admin/functions/index.d.ts.map +1 -1
- package/dist/admin/functions/index.js.map +1 -1
- package/dist/admin/types.d.ts +5 -4
- package/dist/admin/types.d.ts.map +1 -1
- package/dist/admin/types.js.map +1 -1
- package/dist/admin/views/hierarchyList.d.ts +10 -0
- package/dist/admin/views/hierarchyList.d.ts.map +1 -0
- package/dist/admin/views/hierarchyList.js +3 -0
- package/dist/admin/views/hierarchyList.js.map +1 -0
- package/dist/admin/views/index.d.ts +1 -3
- package/dist/admin/views/index.d.ts.map +1 -1
- package/dist/admin/views/index.js.map +1 -1
- package/dist/admin/views/list.d.ts +47 -2
- package/dist/admin/views/list.d.ts.map +1 -1
- package/dist/admin/views/list.js.map +1 -1
- package/dist/auth/cookies.d.ts.map +1 -1
- package/dist/auth/defaultAccess.d.ts.map +1 -1
- package/dist/auth/ensureUsernameOrEmail.d.ts.map +1 -1
- package/dist/auth/executeAccess.d.ts.map +1 -1
- package/dist/auth/executeAuthStrategies.d.ts.map +1 -1
- package/dist/auth/extractAccessFromPermission.d.ts.map +1 -1
- package/dist/auth/extractJWT.d.ts.map +1 -1
- package/dist/auth/getAuthFields.d.ts.map +1 -1
- package/dist/auth/getFieldsToSign.d.ts.map +1 -1
- package/dist/auth/getLoginOptions.d.ts.map +1 -1
- package/dist/auth/isUserLocked.d.ts.map +1 -1
- package/dist/auth/jwt.d.ts.map +1 -1
- package/dist/auth/operations/access.d.ts.map +1 -1
- package/dist/auth/operations/auth.d.ts.map +1 -1
- package/dist/auth/operations/forgotPassword.d.ts.map +1 -1
- package/dist/auth/operations/init.d.ts.map +1 -1
- package/dist/auth/operations/local/auth.d.ts.map +1 -1
- package/dist/auth/operations/login.d.ts.map +1 -1
- package/dist/auth/operations/logout.d.ts.map +1 -1
- package/dist/auth/operations/me.d.ts.map +1 -1
- package/dist/auth/operations/refresh.d.ts.map +1 -1
- package/dist/auth/operations/registerFirstUser.d.ts.map +1 -1
- package/dist/auth/operations/resetPassword.d.ts.map +1 -1
- package/dist/auth/operations/unlock.d.ts.map +1 -1
- package/dist/auth/operations/verifyEmail.d.ts.map +1 -1
- package/dist/auth/sessions.d.ts.map +1 -1
- package/dist/auth/strategies/apiKey.d.ts.map +1 -1
- package/dist/auth/strategies/apiKey.js +6 -17
- package/dist/auth/strategies/apiKey.js.map +1 -1
- package/dist/auth/strategies/local/authenticate.d.ts.map +1 -1
- package/dist/auth/strategies/local/generatePasswordSaltHash.d.ts.map +1 -1
- package/dist/auth/strategies/local/incrementLoginAttempts.d.ts.map +1 -1
- package/dist/auth/strategies/local/register.d.ts.map +1 -1
- package/dist/auth/strategies/local/resetLoginAttempts.d.ts.map +1 -1
- package/dist/bin/generateImportMap/iterateCollections.d.ts.map +1 -1
- package/dist/bin/generateImportMap/iterateCollections.js +1 -0
- package/dist/bin/generateImportMap/iterateCollections.js.map +1 -1
- package/dist/bin/generateImportMap/iterateConfig.d.ts.map +1 -1
- package/dist/bin/generateImportMap/iterateConfig.js +7 -0
- package/dist/bin/generateImportMap/iterateConfig.js.map +1 -1
- package/dist/bin/generateImportMap/iterateFields.d.ts.map +1 -1
- package/dist/bin/generateImportMap/iterateFields.js +4 -1
- package/dist/bin/generateImportMap/iterateFields.js.map +1 -1
- package/dist/bin/generateImportMap/iterateGlobals.d.ts.map +1 -1
- package/dist/bin/generateImportMap/iterateGlobals.js +20 -8
- package/dist/bin/generateImportMap/iterateGlobals.js.map +1 -1
- package/dist/bin/generateImportMap/utilities/getFromImportMap.d.ts.map +1 -1
- package/dist/bin/generateTypes.d.ts.map +1 -1
- package/dist/bin/generateTypes.js +7 -1
- package/dist/bin/generateTypes.js.map +1 -1
- package/dist/bin/index.d.ts.map +1 -1
- package/dist/bin/index.js +1 -3
- package/dist/bin/index.js.map +1 -1
- package/dist/bin/migrate.d.ts.map +1 -1
- package/dist/collections/config/client.d.ts +4 -2
- package/dist/collections/config/client.d.ts.map +1 -1
- package/dist/collections/config/client.js +13 -1
- package/dist/collections/config/client.js.map +1 -1
- package/dist/collections/config/defaults.d.ts.map +1 -1
- package/dist/collections/config/defaults.js +1 -1
- package/dist/collections/config/defaults.js.map +1 -1
- package/dist/collections/config/sanitize.d.ts +10 -1
- package/dist/collections/config/sanitize.d.ts.map +1 -1
- package/dist/collections/config/sanitize.js +51 -10
- package/dist/collections/config/sanitize.js.map +1 -1
- package/dist/collections/config/sanitizeCompoundIndexes.d.ts.map +1 -1
- package/dist/collections/config/types.d.ts +76 -91
- package/dist/collections/config/types.d.ts.map +1 -1
- package/dist/collections/config/types.js.map +1 -1
- package/dist/collections/config/useAsTitle.d.ts.map +1 -1
- package/dist/collections/dataloader.d.ts.map +1 -1
- package/dist/collections/operations/count.d.ts.map +1 -1
- package/dist/collections/operations/countVersions.d.ts.map +1 -1
- package/dist/collections/operations/create.d.ts.map +1 -1
- package/dist/collections/operations/create.js +24 -19
- package/dist/collections/operations/create.js.map +1 -1
- package/dist/collections/operations/delete.d.ts.map +1 -1
- package/dist/collections/operations/delete.js +7 -2
- package/dist/collections/operations/delete.js.map +1 -1
- package/dist/collections/operations/deleteByID.d.ts.map +1 -1
- package/dist/collections/operations/deleteByID.js +7 -2
- package/dist/collections/operations/deleteByID.js.map +1 -1
- package/dist/collections/operations/duplicate.d.ts.map +1 -1
- package/dist/collections/operations/find.d.ts.map +1 -1
- package/dist/collections/operations/find.js +7 -2
- package/dist/collections/operations/find.js.map +1 -1
- package/dist/collections/operations/findByID.d.ts.map +1 -1
- package/dist/collections/operations/findByID.js +10 -5
- package/dist/collections/operations/findByID.js.map +1 -1
- package/dist/collections/operations/findDistinct.d.ts.map +1 -1
- package/dist/collections/operations/findVersionByID.d.ts.map +1 -1
- package/dist/collections/operations/findVersionByID.js +6 -4
- package/dist/collections/operations/findVersionByID.js.map +1 -1
- package/dist/collections/operations/findVersions.d.ts.map +1 -1
- package/dist/collections/operations/findVersions.js +6 -4
- package/dist/collections/operations/findVersions.js.map +1 -1
- package/dist/collections/operations/restoreVersion.d.ts.map +1 -1
- package/dist/collections/operations/restoreVersion.js +7 -2
- package/dist/collections/operations/restoreVersion.js.map +1 -1
- package/dist/collections/operations/update.d.ts.map +1 -1
- package/dist/collections/operations/update.js +7 -2
- package/dist/collections/operations/update.js.map +1 -1
- package/dist/collections/operations/updateByID.d.ts.map +1 -1
- package/dist/collections/operations/updateByID.js +7 -2
- package/dist/collections/operations/updateByID.js.map +1 -1
- package/dist/collections/operations/utilities/buildAfterOperation.d.ts.map +1 -1
- package/dist/collections/operations/utilities/sanitizeSortQuery.d.ts.map +1 -1
- package/dist/collections/operations/utilities/update.d.ts.map +1 -1
- package/dist/collections/operations/utilities/update.js +5 -4
- package/dist/collections/operations/utilities/update.js.map +1 -1
- package/dist/config/build.d.ts.map +1 -1
- package/dist/config/build.js +8 -0
- package/dist/config/build.js.map +1 -1
- package/dist/config/client.d.ts +1 -1
- package/dist/config/client.d.ts.map +1 -1
- package/dist/config/client.js +2 -11
- package/dist/config/client.js.map +1 -1
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +0 -15
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/orderable/index.d.ts.map +1 -1
- package/dist/config/orderable/index.js +0 -4
- package/dist/config/orderable/index.js.map +1 -1
- package/dist/config/sanitize.d.ts.map +1 -1
- package/dist/config/sanitize.js +6 -53
- package/dist/config/sanitize.js.map +1 -1
- package/dist/config/types.d.ts +188 -32
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js.map +1 -1
- package/dist/database/combineQueries.d.ts.map +1 -1
- package/dist/database/migrations/findMigrationDir.d.ts.map +1 -1
- package/dist/database/migrations/getPredefinedMigration.d.ts.map +1 -1
- package/dist/database/migrations/readMigrationFiles.d.ts.map +1 -1
- package/dist/database/migrations/templates/localizeStatus.d.ts.map +1 -1
- package/dist/database/migrations/writeMigrationIndex.d.ts.map +1 -1
- package/dist/database/sanitizeJoinQuery.d.ts.map +1 -1
- package/dist/database/sanitizeWhereQuery.d.ts.map +1 -1
- package/dist/duplicateDocument/index.d.ts.map +1 -1
- package/dist/email/getStringifiedToAddress.d.ts.map +1 -1
- package/dist/exports/shared.d.ts +6 -3
- package/dist/exports/shared.d.ts.map +1 -1
- package/dist/exports/shared.js +4 -2
- package/dist/exports/shared.js.map +1 -1
- package/dist/fields/baseFields/slug/countVersions.d.ts.map +1 -1
- package/dist/fields/baseFields/slug/generateSlug.d.ts.map +1 -1
- package/dist/fields/baseFields/slug/index.d.ts.map +1 -1
- package/dist/fields/baseFields/slug/index.js +7 -5
- package/dist/fields/baseFields/slug/index.js.map +1 -1
- package/dist/fields/config/client.d.ts +1 -1
- package/dist/fields/config/client.d.ts.map +1 -1
- package/dist/fields/config/client.js +4 -3
- package/dist/fields/config/client.js.map +1 -1
- package/dist/fields/config/sanitize.d.ts.map +1 -1
- package/dist/fields/config/sanitize.js +13 -20
- package/dist/fields/config/sanitize.js.map +1 -1
- package/dist/fields/config/sanitizeJoinField.d.ts.map +1 -1
- package/dist/fields/config/sanitizeJoinField.js +3 -0
- package/dist/fields/config/sanitizeJoinField.js.map +1 -1
- package/dist/fields/config/types.d.ts +44 -118
- package/dist/fields/config/types.d.ts.map +1 -1
- package/dist/fields/config/types.js +12 -2
- package/dist/fields/config/types.js.map +1 -1
- package/dist/fields/getDefaultValue.d.ts.map +1 -1
- package/dist/fields/hooks/afterChange/index.d.ts.map +1 -1
- package/dist/fields/hooks/afterChange/promise.d.ts.map +1 -1
- package/dist/fields/hooks/afterChange/traverseFields.d.ts.map +1 -1
- package/dist/fields/hooks/afterRead/promise.d.ts.map +1 -1
- package/dist/fields/hooks/afterRead/relationshipPopulationPromise.d.ts.map +1 -1
- package/dist/fields/hooks/afterRead/traverseFields.d.ts.map +1 -1
- package/dist/fields/hooks/afterRead/virtualFieldPopulationPromise.d.ts.map +1 -1
- package/dist/fields/hooks/beforeChange/cloneDataFromOriginalDoc.d.ts.map +1 -1
- package/dist/fields/hooks/beforeChange/getExistingRowDoc.d.ts.map +1 -1
- package/dist/fields/hooks/beforeChange/index.d.ts.map +1 -1
- package/dist/fields/hooks/beforeChange/promise.d.ts.map +1 -1
- package/dist/fields/hooks/beforeChange/traverseFields.d.ts.map +1 -1
- package/dist/fields/hooks/beforeDuplicate/index.d.ts.map +1 -1
- package/dist/fields/hooks/beforeDuplicate/promise.d.ts.map +1 -1
- package/dist/fields/hooks/beforeDuplicate/traverseFields.d.ts.map +1 -1
- package/dist/fields/hooks/beforeValidate/index.d.ts.map +1 -1
- package/dist/fields/hooks/beforeValidate/promise.d.ts.map +1 -1
- package/dist/fields/hooks/beforeValidate/traverseFields.d.ts.map +1 -1
- package/dist/fields/isFieldDisabled.d.ts +12 -0
- package/dist/fields/isFieldDisabled.d.ts.map +1 -0
- package/dist/fields/isFieldDisabled.js +15 -0
- package/dist/fields/isFieldDisabled.js.map +1 -0
- package/dist/fields/isFieldDisabled.spec.js +134 -0
- package/dist/fields/isFieldDisabled.spec.js.map +1 -0
- package/dist/fields/mergeBaseFields.d.ts.map +1 -1
- package/dist/fields/setDefaultBeforeDuplicate.d.ts.map +1 -1
- package/dist/fields/validations.js +1 -1
- package/dist/fields/validations.js.map +1 -1
- package/dist/globals/config/client.d.ts +1 -1
- package/dist/globals/config/client.d.ts.map +1 -1
- package/dist/globals/config/client.js +2 -1
- package/dist/globals/config/client.js.map +1 -1
- package/dist/globals/config/sanitize.d.ts +6 -1
- package/dist/globals/config/sanitize.d.ts.map +1 -1
- package/dist/globals/config/sanitize.js +6 -2
- package/dist/globals/config/sanitize.js.map +1 -1
- package/dist/globals/config/types.d.ts +4 -57
- package/dist/globals/config/types.d.ts.map +1 -1
- package/dist/globals/config/types.js.map +1 -1
- package/dist/globals/operations/countGlobalVersions.d.ts.map +1 -1
- package/dist/globals/operations/docAccess.d.ts.map +1 -1
- package/dist/globals/operations/findOne.d.ts.map +1 -1
- package/dist/globals/operations/findOne.js +7 -2
- package/dist/globals/operations/findOne.js.map +1 -1
- package/dist/globals/operations/findVersionByID.d.ts.map +1 -1
- package/dist/globals/operations/findVersionByID.js +6 -4
- package/dist/globals/operations/findVersionByID.js.map +1 -1
- package/dist/globals/operations/findVersions.d.ts.map +1 -1
- package/dist/globals/operations/findVersions.js +6 -4
- package/dist/globals/operations/findVersions.js.map +1 -1
- package/dist/globals/operations/restoreVersion.d.ts.map +1 -1
- package/dist/globals/operations/update.d.ts.map +1 -1
- package/dist/globals/operations/update.js +7 -2
- package/dist/globals/operations/update.js.map +1 -1
- package/dist/hierarchy/addHierarchyToCollection.d.ts +9 -0
- package/dist/hierarchy/addHierarchyToCollection.d.ts.map +1 -0
- package/dist/hierarchy/addHierarchyToCollection.js +76 -0
- package/dist/hierarchy/addHierarchyToCollection.js.map +1 -0
- package/dist/hierarchy/buildParentField.d.ts +11 -0
- package/dist/hierarchy/buildParentField.d.ts.map +1 -0
- package/dist/hierarchy/buildParentField.js +42 -0
- package/dist/hierarchy/buildParentField.js.map +1 -0
- package/dist/hierarchy/constants.d.ts +15 -0
- package/dist/hierarchy/constants.d.ts.map +1 -0
- package/dist/hierarchy/constants.js +11 -0
- package/dist/hierarchy/constants.js.map +1 -0
- package/dist/hierarchy/createFolderField.d.ts +39 -0
- package/dist/hierarchy/createFolderField.d.ts.map +1 -0
- package/dist/hierarchy/createFolderField.js +54 -0
- package/dist/hierarchy/createFolderField.js.map +1 -0
- package/dist/hierarchy/createTagField.d.ts +44 -0
- package/dist/hierarchy/createTagField.d.ts.map +1 -0
- package/dist/hierarchy/createTagField.js +48 -0
- package/dist/hierarchy/createTagField.js.map +1 -0
- package/dist/hierarchy/getInitialTreeData.d.ts +27 -0
- package/dist/hierarchy/getInitialTreeData.d.ts.map +1 -0
- package/dist/hierarchy/getInitialTreeData.js +125 -0
- package/dist/hierarchy/getInitialTreeData.js.map +1 -0
- package/dist/hierarchy/hooks/collectionAfterDelete.d.ts +14 -0
- package/dist/hierarchy/hooks/collectionAfterDelete.d.ts.map +1 -0
- package/dist/hierarchy/hooks/collectionAfterDelete.js +21 -0
- package/dist/hierarchy/hooks/collectionAfterDelete.js.map +1 -0
- package/dist/hierarchy/hooks/collectionAfterRead.d.ts +27 -0
- package/dist/hierarchy/hooks/collectionAfterRead.d.ts.map +1 -0
- package/dist/hierarchy/hooks/collectionAfterRead.js +72 -0
- package/dist/hierarchy/hooks/collectionAfterRead.js.map +1 -0
- package/dist/hierarchy/hooks/collectionBeforeChange.d.ts +19 -0
- package/dist/hierarchy/hooks/collectionBeforeChange.d.ts.map +1 -0
- package/dist/hierarchy/hooks/collectionBeforeChange.js +90 -0
- package/dist/hierarchy/hooks/collectionBeforeChange.js.map +1 -0
- package/dist/hierarchy/hooks/collectionBeforeDelete.d.ts +15 -0
- package/dist/hierarchy/hooks/collectionBeforeDelete.d.ts.map +1 -0
- package/dist/hierarchy/hooks/collectionBeforeDelete.js +20 -0
- package/dist/hierarchy/hooks/collectionBeforeDelete.js.map +1 -0
- package/dist/hierarchy/hooks/collectionBeforeOperation.d.ts +33 -0
- package/dist/hierarchy/hooks/collectionBeforeOperation.d.ts.map +1 -0
- package/dist/hierarchy/hooks/collectionBeforeOperation.js +66 -0
- package/dist/hierarchy/hooks/collectionBeforeOperation.js.map +1 -0
- package/dist/hierarchy/hooks/ensureSafeCollectionsChange.d.ts +8 -0
- package/dist/hierarchy/hooks/ensureSafeCollectionsChange.d.ts.map +1 -0
- package/dist/hierarchy/hooks/ensureSafeCollectionsChange.js +108 -0
- package/dist/hierarchy/hooks/ensureSafeCollectionsChange.js.map +1 -0
- package/dist/hierarchy/injectHierarchyButton.d.ts +14 -0
- package/dist/hierarchy/injectHierarchyButton.d.ts.map +1 -0
- package/dist/hierarchy/injectHierarchyButton.js +37 -0
- package/dist/hierarchy/injectHierarchyButton.js.map +1 -0
- package/dist/hierarchy/presets.d.ts +13 -0
- package/dist/hierarchy/presets.d.ts.map +1 -0
- package/dist/hierarchy/presets.js +52 -0
- package/dist/hierarchy/presets.js.map +1 -0
- package/dist/hierarchy/resolveHierarchyCollections.d.ts +23 -0
- package/dist/hierarchy/resolveHierarchyCollections.d.ts.map +1 -0
- package/dist/hierarchy/resolveHierarchyCollections.js +321 -0
- package/dist/hierarchy/resolveHierarchyCollections.js.map +1 -0
- package/dist/hierarchy/sanitizeHierarchyCollection.d.ts +14 -0
- package/dist/hierarchy/sanitizeHierarchyCollection.d.ts.map +1 -0
- package/dist/hierarchy/sanitizeHierarchyCollection.js +119 -0
- package/dist/hierarchy/sanitizeHierarchyCollection.js.map +1 -0
- package/dist/hierarchy/types.d.ts +162 -0
- package/dist/hierarchy/types.d.ts.map +1 -0
- package/dist/hierarchy/types.js +6 -0
- package/dist/hierarchy/types.js.map +1 -0
- package/dist/hierarchy/utils/buildLocalizedHierarchyPaths.d.ts +77 -0
- package/dist/hierarchy/utils/buildLocalizedHierarchyPaths.d.ts.map +1 -0
- package/dist/hierarchy/utils/buildLocalizedHierarchyPaths.js +77 -0
- package/dist/hierarchy/utils/buildLocalizedHierarchyPaths.js.map +1 -0
- package/dist/hierarchy/utils/computePaths.d.ts +31 -0
- package/dist/hierarchy/utils/computePaths.d.ts.map +1 -0
- package/dist/hierarchy/utils/computePaths.js +445 -0
- package/dist/hierarchy/utils/computePaths.js.map +1 -0
- package/dist/hierarchy/utils/findUseAsTitle.d.ts +14 -0
- package/dist/hierarchy/utils/findUseAsTitle.d.ts.map +1 -0
- package/dist/hierarchy/utils/findUseAsTitle.js +89 -0
- package/dist/hierarchy/utils/findUseAsTitle.js.map +1 -0
- package/dist/hierarchy/utils/getAncestors.d.ts +34 -0
- package/dist/hierarchy/utils/getAncestors.d.ts.map +1 -0
- package/dist/hierarchy/utils/getAncestors.js +94 -0
- package/dist/hierarchy/utils/getAncestors.js.map +1 -0
- package/dist/hierarchy/utils/getLocalizedValue.d.ts +30 -0
- package/dist/hierarchy/utils/getLocalizedValue.d.ts.map +1 -0
- package/dist/hierarchy/utils/getLocalizedValue.js +46 -0
- package/dist/hierarchy/utils/getLocalizedValue.js.map +1 -0
- package/dist/hierarchy/utils/getLocalizedValue.spec.js +250 -0
- package/dist/hierarchy/utils/getLocalizedValue.spec.js.map +1 -0
- package/dist/index.bundled.d.ts +1017 -672
- package/dist/index.d.ts +32 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -8
- package/dist/index.js.map +1 -1
- package/dist/kv/adapters/DatabaseKVAdapter.d.ts.map +1 -1
- package/dist/locked-documents/config.d.ts.map +1 -1
- package/dist/preferences/config.d.ts.map +1 -1
- package/dist/preferences/deleteUserPreferences.d.ts.map +1 -1
- package/dist/preferences/keys.d.ts +8 -4
- package/dist/preferences/keys.d.ts.map +1 -1
- package/dist/preferences/keys.js +7 -4
- package/dist/preferences/keys.js.map +1 -1
- package/dist/preferences/types.d.ts +1 -1
- package/dist/preferences/types.d.ts.map +1 -1
- package/dist/preferences/types.js.map +1 -1
- package/dist/query-presets/access.d.ts.map +1 -1
- package/dist/query-presets/config.d.ts.map +1 -1
- package/dist/query-presets/config.js +11 -7
- package/dist/query-presets/config.js.map +1 -1
- package/dist/query-presets/constraints.d.ts.map +1 -1
- package/dist/query-presets/constraints.js +1 -1
- package/dist/query-presets/constraints.js.map +1 -1
- package/dist/queues/config/generateJobsJSONSchemas.d.ts +1 -1
- package/dist/queues/config/generateJobsJSONSchemas.d.ts.map +1 -1
- package/dist/queues/config/generateJobsJSONSchemas.js +31 -10
- package/dist/queues/config/generateJobsJSONSchemas.js.map +1 -1
- package/dist/queues/config/types/index.d.ts +0 -21
- package/dist/queues/config/types/index.d.ts.map +1 -1
- package/dist/queues/config/types/index.js.map +1 -1
- package/dist/queues/config/types/taskTypes.d.ts +0 -20
- package/dist/queues/config/types/taskTypes.d.ts.map +1 -1
- package/dist/queues/config/types/taskTypes.js.map +1 -1
- package/dist/queues/endpoints/run.d.ts.map +1 -1
- package/dist/queues/errors/handleWorkflowError.d.ts.map +1 -1
- package/dist/queues/errors/handleWorkflowError.js +9 -1
- package/dist/queues/errors/handleWorkflowError.js.map +1 -1
- package/dist/queues/localAPI.d.ts.map +1 -1
- package/dist/queues/localAPI.js +26 -67
- package/dist/queues/localAPI.js.map +1 -1
- package/dist/queues/operations/handleSchedules/getQueuesWithSchedules.d.ts.map +1 -1
- package/dist/queues/operations/handleSchedules/index.d.ts.map +1 -1
- package/dist/queues/operations/handleSchedules/index.js +1 -4
- package/dist/queues/operations/handleSchedules/index.js.map +1 -1
- package/dist/queues/operations/runJobs/index.d.ts.map +1 -1
- package/dist/queues/operations/runJobs/index.js +40 -37
- package/dist/queues/operations/runJobs/index.js.map +1 -1
- package/dist/queues/operations/runJobs/runJSONJob/index.d.ts.map +1 -1
- package/dist/queues/operations/runJobs/runJob/getRunTaskFunction.d.ts.map +1 -1
- package/dist/queues/operations/runJobs/runJob/getRunTaskFunction.js +3 -22
- package/dist/queues/operations/runJobs/runJob/getRunTaskFunction.js.map +1 -1
- package/dist/queues/operations/runJobs/runJob/getUpdateJobFunction.d.ts.map +1 -1
- package/dist/queues/operations/runJobs/runJob/getUpdateJobFunction.js +0 -2
- package/dist/queues/operations/runJobs/runJob/getUpdateJobFunction.js.map +1 -1
- package/dist/queues/operations/runJobs/runJob/index.d.ts.map +1 -1
- package/dist/queues/utilities/getJobTaskStatus.d.ts.map +1 -1
- package/dist/queues/utilities/updateJob.d.ts +1 -3
- package/dist/queues/utilities/updateJob.d.ts.map +1 -1
- package/dist/queues/utilities/updateJob.js +2 -18
- package/dist/queues/utilities/updateJob.js.map +1 -1
- package/dist/translations/getLocalI18n.d.ts.map +1 -1
- package/dist/types/index.d.ts +54 -5
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/uploads/checkFileAccess.d.ts.map +1 -1
- package/dist/uploads/checkFileRestrictions.d.ts.map +1 -1
- package/dist/uploads/docWithFilenameExists.d.ts.map +1 -1
- package/dist/uploads/endpoints/getFileFromURL.d.ts.map +1 -1
- package/dist/uploads/endpoints/getFileFromURL.js +9 -5
- package/dist/uploads/endpoints/getFileFromURL.js.map +1 -1
- package/dist/uploads/fetchAPI-multipart/isEligibleRequest.d.ts.map +1 -1
- package/dist/uploads/fetchAPI-multipart/processNested.d.ts.map +1 -1
- package/dist/uploads/fetchAPI-multipart/utilities.d.ts.map +1 -1
- package/dist/uploads/fileExists.d.ts.map +1 -1
- package/dist/uploads/generateFileData.d.ts.map +1 -1
- package/dist/uploads/getBaseFields.d.ts.map +1 -1
- package/dist/uploads/getBaseFields.js +24 -70
- package/dist/uploads/getBaseFields.js.map +1 -1
- package/dist/uploads/getExternalFile.d.ts.map +1 -1
- package/dist/uploads/getFileByPath.d.ts.map +1 -1
- package/dist/uploads/getFileTypeFallback.d.ts.map +1 -1
- package/dist/uploads/getSafeFilename.d.ts +9 -4
- package/dist/uploads/getSafeFilename.d.ts.map +1 -1
- package/dist/uploads/getSafeFilename.js +5 -5
- package/dist/uploads/getSafeFilename.js.map +1 -1
- package/dist/uploads/image-resizing/createImageSize.d.ts.map +1 -1
- package/dist/uploads/image-resizing/generateImageSizeFilename.d.ts.map +1 -1
- package/dist/uploads/image-resizing/getImageResizeAction.d.ts.map +1 -1
- package/dist/uploads/image-resizing/parseFilename.d.ts.map +1 -1
- package/dist/uploads/image-resizing/sanitizeResizeConfig.d.ts.map +1 -1
- package/dist/uploads/mimeTypeValidator.d.ts.map +1 -1
- package/dist/uploads/safeFetch.d.ts +1 -1
- package/dist/uploads/safeFetch.d.ts.map +1 -1
- package/dist/uploads/saveBufferToFile.d.ts.map +1 -1
- package/dist/uploads/tempFile.d.ts.map +1 -1
- package/dist/uploads/types.d.ts +12 -29
- package/dist/uploads/types.d.ts.map +1 -1
- package/dist/uploads/types.js.map +1 -1
- package/dist/uploads/uploadFiles.d.ts.map +1 -1
- package/dist/utilities/addLocalesToRequest.d.ts.map +1 -1
- package/dist/utilities/addSelectGenericsToGeneretedTypes.d.ts.map +1 -1
- package/dist/utilities/appendDateTimezoneSelectFields.d.ts +13 -0
- package/dist/utilities/appendDateTimezoneSelectFields.d.ts.map +1 -0
- package/dist/utilities/appendDateTimezoneSelectFields.js +47 -0
- package/dist/utilities/appendDateTimezoneSelectFields.js.map +1 -0
- package/dist/utilities/appendNonTrashedFilter.d.ts.map +1 -1
- package/dist/utilities/appendUploadSelectFields.d.ts.map +1 -1
- package/dist/utilities/appendUploadSelectFields.js +3 -0
- package/dist/utilities/appendUploadSelectFields.js.map +1 -1
- package/dist/utilities/canAccessAdmin.d.ts.map +1 -1
- package/dist/utilities/checkDocumentLockStatus.d.ts.map +1 -1
- package/dist/utilities/configToJSONSchema.d.ts +34 -16
- package/dist/utilities/configToJSONSchema.d.ts.map +1 -1
- package/dist/utilities/configToJSONSchema.js +127 -52
- package/dist/utilities/configToJSONSchema.js.map +1 -1
- package/dist/utilities/configToJSONSchema.spec.js +94 -65
- package/dist/utilities/configToJSONSchema.spec.js.map +1 -1
- package/dist/utilities/createPayloadRequest.d.ts.map +1 -1
- package/dist/utilities/deepCopyObject.d.ts.map +1 -1
- package/dist/utilities/dependencies/resolveFrom.d.ts.map +1 -1
- package/dist/utilities/escapeRegExp.d.ts.map +1 -1
- package/dist/utilities/extractID.d.ts.map +1 -1
- package/dist/utilities/extractID.js +1 -1
- package/dist/utilities/extractID.js.map +1 -1
- package/dist/utilities/flattenAllFields.d.ts.map +1 -1
- package/dist/utilities/formatAdminURL.d.ts +13 -2
- package/dist/utilities/formatAdminURL.d.ts.map +1 -1
- package/dist/utilities/formatAdminURL.js +3 -15
- package/dist/utilities/formatAdminURL.js.map +1 -1
- package/dist/utilities/formatAdminURL.spec.js +1 -90
- package/dist/utilities/formatAdminURL.spec.js.map +1 -1
- package/dist/utilities/formatErrors.d.ts.map +1 -1
- package/dist/utilities/formatLabels.d.ts.map +1 -1
- package/dist/utilities/getBestFitFromSizes.d.ts.map +1 -1
- package/dist/utilities/getBlockSelect.d.ts.map +1 -1
- package/dist/utilities/getDataByPath.d.ts.map +1 -1
- package/dist/utilities/getEntityPermissions/populateFieldPermissions.d.ts.map +1 -1
- package/dist/utilities/getFieldByPath.d.ts.map +1 -1
- package/dist/utilities/getFieldPermissions.d.ts.map +1 -1
- package/dist/utilities/getObjectDotNotation.d.ts.map +1 -1
- package/dist/utilities/getRequestEntity.d.ts.map +1 -1
- package/dist/utilities/getRequestLanguage.d.ts.map +1 -1
- package/dist/utilities/getRequestOrigin.d.ts.map +1 -1
- package/dist/utilities/getSafeRedirect.d.ts.map +1 -1
- package/dist/utilities/getSelectMode.d.ts.map +1 -1
- package/dist/utilities/getSiblingData.d.ts.map +1 -1
- package/dist/utilities/getTranslatedLabel.d.ts.map +1 -1
- package/dist/utilities/getVersionsConfig.d.ts.map +1 -1
- package/dist/utilities/handleEndpoints.d.ts.map +1 -1
- package/dist/utilities/handleEndpoints.js +2 -6
- package/dist/utilities/handleEndpoints.js.map +1 -1
- package/dist/utilities/headersWithCors.d.ts.map +1 -1
- package/dist/utilities/isEntityHidden.d.ts.map +1 -1
- package/dist/utilities/isURLAllowed.d.ts.map +1 -1
- package/dist/utilities/isValidID.d.ts.map +1 -1
- package/dist/utilities/logError.d.ts.map +1 -1
- package/dist/utilities/logger.d.ts.map +1 -1
- package/dist/utilities/mergeHeaders.d.ts.map +1 -1
- package/dist/utilities/mergeListSearchAndWhere.d.ts.map +1 -1
- package/dist/utilities/optionsAreEqual.d.ts.map +1 -1
- package/dist/utilities/parseBooleanString.d.ts.map +1 -1
- package/dist/utilities/parseCookies.d.ts.map +1 -1
- package/dist/utilities/parseParams/index.d.ts.map +1 -1
- package/dist/utilities/profiling.d.ts.map +1 -1
- package/dist/utilities/reduceFieldsToValues.d.ts.map +1 -1
- package/dist/utilities/resolveSelect.d.ts +16 -0
- package/dist/utilities/resolveSelect.d.ts.map +1 -0
- package/dist/utilities/resolveSelect.js +19 -0
- package/dist/utilities/resolveSelect.js.map +1 -0
- package/dist/utilities/routeError.d.ts.map +1 -1
- package/dist/utilities/sanitizeFallbackLocale.d.ts.map +1 -1
- package/dist/utilities/sanitizeInternalFields.d.ts.map +1 -1
- package/dist/utilities/sanitizeJoinParams.d.ts.map +1 -1
- package/dist/utilities/sanitizePopulateParam.d.ts.map +1 -1
- package/dist/utilities/sanitizeSelect.d.ts +1 -2
- package/dist/utilities/sanitizeSelect.d.ts.map +1 -1
- package/dist/utilities/sanitizeSelect.js +19 -25
- package/dist/utilities/sanitizeSelect.js.map +1 -1
- package/dist/utilities/sanitizeSelectParam.d.ts.map +1 -1
- package/dist/utilities/sanitizeSortParams.d.ts.map +1 -1
- package/dist/utilities/setsAreEqual.d.ts.map +1 -1
- package/dist/utilities/slugify.d.ts.map +1 -1
- package/dist/utilities/stripUnselectedFields.d.ts.map +1 -1
- package/dist/utilities/telemetry/events/adminInit.d.ts.map +1 -1
- package/dist/utilities/telemetry/events/serverInit.d.ts.map +1 -1
- package/dist/utilities/telemetry/index.d.ts.map +1 -1
- package/dist/utilities/telemetry/oneWayHash.d.ts.map +1 -1
- package/dist/utilities/timestamp.d.ts.map +1 -1
- package/dist/utilities/toKebabCase.d.ts.map +1 -1
- package/dist/utilities/transformColumnPreferences.d.ts.map +1 -1
- package/dist/utilities/transformWhereQuery.d.ts.map +1 -1
- package/dist/utilities/traverseFields.d.ts.map +1 -1
- package/dist/utilities/traverseForLocalizedFields.d.ts.map +1 -1
- package/dist/utilities/unflatten.d.ts.map +1 -1
- package/dist/utilities/validateMimeType.d.ts.map +1 -1
- package/dist/utilities/validateTimezones.d.ts.map +1 -1
- package/dist/utilities/validateWhereQuery.d.ts.map +1 -1
- package/dist/utilities/wordBoundariesRegex.d.ts.map +1 -1
- package/dist/utilities/wrapInternalEndpoints.d.ts.map +1 -1
- package/dist/versions/baseFields.d.ts.map +1 -1
- package/dist/versions/baseFields.js +3 -2
- package/dist/versions/baseFields.js.map +1 -1
- package/dist/versions/buildCollectionFields.d.ts.map +1 -1
- package/dist/versions/buildCollectionFields.js +0 -1
- package/dist/versions/buildCollectionFields.js.map +1 -1
- package/dist/versions/buildGlobalFields.d.ts.map +1 -1
- package/dist/versions/buildGlobalFields.js +0 -1
- package/dist/versions/buildGlobalFields.js.map +1 -1
- package/dist/versions/buildVersionCompoundIndexes.d.ts.map +1 -1
- package/dist/versions/deleteCollectionVersions.d.ts.map +1 -1
- package/dist/versions/deleteScheduledPublishJobs.d.ts.map +1 -1
- package/dist/versions/drafts/appendVersionToQueryKey.d.ts.map +1 -1
- package/dist/versions/drafts/getQueryDraftsSelect.d.ts.map +1 -1
- package/dist/versions/drafts/getQueryDraftsSort.d.ts.map +1 -1
- package/dist/versions/drafts/replaceWithDraftIfAvailable.d.ts.map +1 -1
- package/dist/versions/enforceMaxVersions.d.ts.map +1 -1
- package/dist/versions/getLatestCollectionVersion.d.ts.map +1 -1
- package/dist/versions/getLatestGlobalVersion.d.ts.map +1 -1
- package/dist/versions/migrations/localizeStatus/shared.d.ts.map +1 -1
- package/dist/versions/payloadPackageList.d.ts.map +1 -1
- package/dist/versions/payloadPackageList.js +0 -1
- package/dist/versions/payloadPackageList.js.map +1 -1
- package/dist/versions/saveSnapshot.d.ts.map +1 -1
- package/dist/versions/schedule/job.d.ts.map +1 -1
- package/package.json +20 -20
- package/dist/admin/views/folderList.d.ts +0 -56
- package/dist/admin/views/folderList.d.ts.map +0 -1
- package/dist/admin/views/folderList.js +0 -3
- package/dist/admin/views/folderList.js.map +0 -1
- package/dist/folders/addFolderCollection.d.ts +0 -10
- package/dist/folders/addFolderCollection.d.ts.map +0 -1
- package/dist/folders/addFolderCollection.js +0 -26
- package/dist/folders/addFolderCollection.js.map +0 -1
- package/dist/folders/addFolderFieldToCollection.d.ts +0 -8
- package/dist/folders/addFolderFieldToCollection.d.ts.map +0 -1
- package/dist/folders/addFolderFieldToCollection.js +0 -20
- package/dist/folders/addFolderFieldToCollection.js.map +0 -1
- package/dist/folders/buildFolderField.d.ts +0 -8
- package/dist/folders/buildFolderField.d.ts.map +0 -1
- package/dist/folders/buildFolderField.js +0 -87
- package/dist/folders/buildFolderField.js.map +0 -1
- package/dist/folders/constants.d.ts +0 -3
- package/dist/folders/constants.d.ts.map +0 -1
- package/dist/folders/constants.js +0 -4
- package/dist/folders/constants.js.map +0 -1
- package/dist/folders/createFolderCollection.d.ts +0 -11
- package/dist/folders/createFolderCollection.d.ts.map +0 -1
- package/dist/folders/createFolderCollection.js +0 -115
- package/dist/folders/createFolderCollection.js.map +0 -1
- package/dist/folders/hooks/deleteSubfoldersAfterDelete.d.ts +0 -8
- package/dist/folders/hooks/deleteSubfoldersAfterDelete.d.ts.map +0 -1
- package/dist/folders/hooks/deleteSubfoldersAfterDelete.js +0 -15
- package/dist/folders/hooks/deleteSubfoldersAfterDelete.js.map +0 -1
- package/dist/folders/hooks/dissasociateAfterDelete.d.ts +0 -8
- package/dist/folders/hooks/dissasociateAfterDelete.d.ts.map +0 -1
- package/dist/folders/hooks/dissasociateAfterDelete.js +0 -20
- package/dist/folders/hooks/dissasociateAfterDelete.js.map +0 -1
- package/dist/folders/hooks/ensureSafeCollectionsChange.d.ts +0 -5
- package/dist/folders/hooks/ensureSafeCollectionsChange.d.ts.map +0 -1
- package/dist/folders/hooks/ensureSafeCollectionsChange.js +0 -107
- package/dist/folders/hooks/ensureSafeCollectionsChange.js.map +0 -1
- package/dist/folders/hooks/reparentChildFolder.d.ts +0 -24
- package/dist/folders/hooks/reparentChildFolder.d.ts.map +0 -1
- package/dist/folders/hooks/reparentChildFolder.js +0 -72
- package/dist/folders/hooks/reparentChildFolder.js.map +0 -1
- package/dist/folders/types.d.ts +0 -118
- package/dist/folders/types.d.ts.map +0 -1
- package/dist/folders/types.js +0 -3
- package/dist/folders/types.js.map +0 -1
- package/dist/folders/utils/buildFolderWhereConstraints.d.ts +0 -13
- package/dist/folders/utils/buildFolderWhereConstraints.d.ts.map +0 -1
- package/dist/folders/utils/buildFolderWhereConstraints.js +0 -45
- package/dist/folders/utils/buildFolderWhereConstraints.js.map +0 -1
- package/dist/folders/utils/formatFolderOrDocumentItem.d.ts +0 -12
- package/dist/folders/utils/formatFolderOrDocumentItem.d.ts.map +0 -1
- package/dist/folders/utils/formatFolderOrDocumentItem.js +0 -30
- package/dist/folders/utils/formatFolderOrDocumentItem.js.map +0 -1
- package/dist/folders/utils/getFolderBreadcrumbs.d.ts +0 -14
- package/dist/folders/utils/getFolderBreadcrumbs.d.ts.map +0 -1
- package/dist/folders/utils/getFolderBreadcrumbs.js +0 -45
- package/dist/folders/utils/getFolderBreadcrumbs.js.map +0 -1
- package/dist/folders/utils/getFolderData.d.ts +0 -33
- package/dist/folders/utils/getFolderData.d.ts.map +0 -1
- package/dist/folders/utils/getFolderData.js +0 -88
- package/dist/folders/utils/getFolderData.js.map +0 -1
- package/dist/folders/utils/getFoldersAndDocumentsFromJoin.d.ts +0 -24
- package/dist/folders/utils/getFoldersAndDocumentsFromJoin.d.ts.map +0 -1
- package/dist/folders/utils/getFoldersAndDocumentsFromJoin.js +0 -66
- package/dist/folders/utils/getFoldersAndDocumentsFromJoin.js.map +0 -1
- package/dist/folders/utils/getOrphanedDocs.d.ts +0 -15
- package/dist/folders/utils/getOrphanedDocs.d.ts.map +0 -1
- package/dist/folders/utils/getOrphanedDocs.js +0 -40
- package/dist/folders/utils/getOrphanedDocs.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utilities/configToJSONSchema.ts"],"sourcesContent":["import type { I18n } from '@payloadcms/translations'\nimport type { JSONSchema4, JSONSchema4TypeName } from 'json-schema'\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 { FieldAffectingData, FlattenedField, Option } from '../fields/config/types.js'\nimport type { SanitizedGlobalConfig } from '../globals/config/types.js'\n\nimport { MissingEditorProp } from '../errors/MissingEditorProp.js'\nimport { fieldAffectsData } from '../fields/config/types.js'\nimport { generateJobsJSONSchemas } from '../queues/config/generateJobsJSONSchemas.js'\nimport { flattenAllFields } from './flattenAllFields.js'\nimport { formatNames } from './formatLabels.js'\nimport { getCollectionIDFieldTypes } from './getCollectionIDFieldTypes.js'\nimport { optionsAreEqual } from './optionsAreEqual.js'\n\nconst fieldIsRequired = (field: FlattenedField): boolean => {\n const isConditional = Boolean(field?.admin && field?.admin?.condition)\n if (isConditional) {\n return false\n }\n\n const isMarkedRequired = 'required' in field && field.required === true\n if (fieldAffectsData(field) && isMarkedRequired) {\n return true\n }\n\n // if any subfields are required, this field is required\n if ('fields' in field && field.type !== 'array') {\n return field.flattenedFields.some((subField) => fieldIsRequired(subField))\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(\n (acc, { slug }) => {\n acc[slug] = {\n $ref: `#/definitions/${slug}`,\n }\n\n return acc\n },\n {} as Record<string, JSONSchema4>,\n )\n\n return {\n type: 'object',\n additionalProperties: false,\n properties,\n required: Object.keys(properties),\n }\n}\n\nfunction generateEntitySelectSchemas(\n entities: (SanitizedCollectionConfig | SanitizedGlobalConfig)[],\n): JSONSchema4 {\n const properties = [...entities].reduce(\n (acc, { slug }) => {\n acc[slug] = {\n $ref: `#/definitions/${slug}_select`,\n }\n\n return acc\n },\n {} as Record<string, JSONSchema4>,\n )\n\n return {\n type: 'object',\n additionalProperties: false,\n properties,\n required: Object.keys(properties),\n }\n}\n\nfunction generateCollectionJoinsSchemas(collections: SanitizedCollectionConfig[]): JSONSchema4 {\n const properties = [...collections].reduce<Record<string, JSONSchema4>>(\n (acc, { slug, joins, polymorphicJoins }) => {\n const schema = {\n type: 'object',\n additionalProperties: false,\n properties: {},\n required: [] as string[],\n } satisfies JSONSchema4\n\n for (const collectionSlug in joins) {\n for (const join of joins[collectionSlug]!) {\n ;(schema.properties as any)[join.joinPath] = {\n type: 'string',\n enum: [collectionSlug],\n }\n schema.required.push(join.joinPath)\n }\n }\n\n for (const join of polymorphicJoins) {\n ;(schema.properties as any)[join.joinPath] = {\n type: 'string',\n enum: join.field.collection,\n }\n schema.required.push(join.joinPath)\n }\n\n if (Object.keys(schema.properties).length > 0) {\n acc[slug] = schema\n }\n\n return acc\n },\n {},\n )\n\n return {\n type: 'object',\n additionalProperties: false,\n properties,\n required: Object.keys(properties),\n }\n}\n\nconst widgetWidths = ['x-small', 'small', 'medium', 'large', 'x-large', 'full'] as const\n\nfunction getAllowedWidgetWidths({\n maxWidth,\n minWidth,\n}: {\n maxWidth?: (typeof widgetWidths)[number]\n minWidth?: (typeof widgetWidths)[number]\n}): string[] {\n const minIndex = minWidth ? widgetWidths.indexOf(minWidth) : 0\n const maxIndex = maxWidth ? widgetWidths.indexOf(maxWidth) : widgetWidths.length - 1\n\n if (minIndex === -1 || maxIndex === -1 || minIndex > maxIndex) {\n return [...widgetWidths]\n }\n\n return widgetWidths.slice(minIndex, maxIndex + 1)\n}\n\nfunction generateWidgetSchemas({\n collectionIDFieldTypes,\n config,\n i18n,\n interfaceNameDefinitions,\n opts = {},\n}: {\n collectionIDFieldTypes: { [key: string]: 'number' | 'string' }\n config: SanitizedConfig\n i18n?: I18n\n interfaceNameDefinitions: Map<string, JSONSchema4>\n opts?: ConfigToJSONSchemaOptions\n}): {\n definitions: Record<string, JSONSchema4>\n schema: JSONSchema4\n} {\n const widgets = config.admin?.dashboard?.widgets ?? []\n const definitions: Record<string, JSONSchema4> = {}\n const properties: Record<string, JSONSchema4> = {}\n\n for (const widget of widgets) {\n const definition = `${widget.slug}_widget`\n const widthEnum = getAllowedWidgetWidths({\n maxWidth: widget.maxWidth,\n minWidth: widget.minWidth,\n })\n let dataSchema: JSONSchema4\n\n if (widget.fields?.length) {\n const widgetFieldSchemas = fieldsToJSONSchema(\n collectionIDFieldTypes,\n flattenAllFields({ fields: widget.fields }),\n interfaceNameDefinitions,\n config,\n i18n,\n opts,\n )\n\n dataSchema = {\n type: 'object',\n additionalProperties: false,\n ...widgetFieldSchemas,\n }\n } else {\n dataSchema = {\n type: 'object',\n additionalProperties: true,\n }\n }\n\n definitions[definition] = {\n type: 'object',\n additionalProperties: false,\n properties: {\n data: dataSchema,\n width: {\n type: 'string',\n enum: widthEnum,\n },\n },\n required: ['width'],\n }\n\n properties[widget.slug] = {\n $ref: `#/definitions/${definition}`,\n }\n }\n\n return {\n definitions,\n schema: {\n type: 'object',\n additionalProperties: false,\n properties,\n required: Object.keys(properties),\n },\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 generateFallbackLocaleEntitySchemas(\n localization: SanitizedConfig['localization'],\n): JSONSchema4 {\n if (localization && 'localeCodes' in localization && localization?.localeCodes) {\n const localeCodes = [...localization.localeCodes].map((localeCode) => {\n return localeCode\n }, [])\n\n return {\n oneOf: [\n { type: 'string', enum: ['false', 'none', 'null'] },\n { type: 'boolean', enum: [false] },\n { type: 'null' },\n { type: 'string', enum: localeCodes },\n { type: 'array', items: { type: 'string', enum: localeCodes } },\n ],\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 { $ref: `#/definitions/${slug}` }\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) {\n return fieldType\n }\n fieldTypes.push('null')\n return fieldTypes\n}\n\nfunction entityOrFieldToJsDocs({\n entity,\n i18n,\n}: {\n entity: FlattenedField | SanitizedCollectionConfig | SanitizedGlobalConfig\n i18n?: I18n\n}): string | undefined {\n let description: string | undefined = undefined\n if (entity?.admin?.description) {\n if (typeof entity?.admin?.description === 'string') {\n description = entity?.admin?.description\n } else if (typeof entity?.admin?.description === 'object') {\n if (entity?.admin?.description?.en) {\n description = entity?.admin?.description?.en\n } else if (entity?.admin?.description?.[i18n!.language]) {\n description = entity?.admin?.description?.[i18n!.language]\n }\n } else if (typeof entity?.admin?.description === 'function' && i18n) {\n // do not evaluate description functions for generating JSDocs. The output of\n // those can differ depending on where and when they are called, creating\n // inconsistencies in the generated JSDocs.\n }\n }\n return description\n}\n\ntype ConfigToJSONSchemaOptions = {\n forceInlineBlocks?: boolean\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: FlattenedField[],\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 i18n?: I18n,\n opts: ConfigToJSONSchemaOptions = {},\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, index) => {\n const isRequired = fieldAffectsData(field) && fieldIsRequired(field)\n\n const fieldDescription = entityOrFieldToJsDocs({ entity: field, i18n })\n const baseFieldSchema: JSONSchema4 = {}\n if (fieldDescription) {\n baseFieldSchema.description = fieldDescription\n }\n\n let fieldSchema: JSONSchema4\n\n switch (field.type) {\n case 'array': {\n fieldSchema = {\n ...baseFieldSchema,\n type: withNullableJSONSchemaType('array', isRequired),\n items: {\n type: 'object',\n additionalProperties: false,\n ...fieldsToJSONSchema(\n collectionIDFieldTypes,\n field.flattenedFields,\n interfaceNameDefinitions,\n config,\n i18n,\n opts,\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 case 'blocks': {\n // Check for a case where no blocks are provided.\n // We need to generate an empty array for this case, note that JSON schema 4 doesn't support empty arrays\n // so the best we can get is `unknown[]`\n const hasBlocks = Boolean(\n field.blockReferences ? field.blockReferences.length : field.blocks.length,\n )\n\n fieldSchema = {\n ...baseFieldSchema,\n type: withNullableJSONSchemaType('array', isRequired),\n items: hasBlocks\n ? {\n oneOf: (field.blockReferences ?? field.blocks).map((block) => {\n if (typeof block === 'string') {\n const resolvedBlock = config?.blocks?.find((b) => b.slug === block)\n\n if (!resolvedBlock) {\n return {}\n }\n\n if (!opts.forceInlineBlocks) {\n return {\n $ref: `#/definitions/${resolvedBlock.interfaceName ?? resolvedBlock.slug}`,\n }\n }\n\n block = resolvedBlock\n }\n const blockFieldSchemas = fieldsToJSONSchema(\n collectionIDFieldTypes,\n block.flattenedFields,\n interfaceNameDefinitions,\n config,\n i18n,\n opts,\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 (!opts.forceInlineBlocks && 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 }\n break\n }\n case 'checkbox': {\n fieldSchema = {\n ...baseFieldSchema,\n type: withNullableJSONSchemaType('boolean', isRequired),\n }\n break\n }\n case 'code':\n case 'date':\n case 'email':\n case 'textarea': {\n fieldSchema = {\n ...baseFieldSchema,\n type: withNullableJSONSchemaType('string', isRequired),\n }\n break\n }\n\n case 'group': {\n if (fieldAffectsData(field)) {\n fieldSchema = {\n ...baseFieldSchema,\n type: 'object',\n additionalProperties: false,\n ...fieldsToJSONSchema(\n collectionIDFieldTypes,\n field.flattenedFields,\n interfaceNameDefinitions,\n config,\n i18n,\n opts,\n ),\n }\n\n if (field.interfaceName) {\n interfaceNameDefinitions.set(field.interfaceName, fieldSchema)\n\n fieldSchema = { $ref: `#/definitions/${field.interfaceName}` }\n }\n }\n break\n }\n\n case 'join': {\n let items: JSONSchema4\n\n if (Array.isArray(field.collection)) {\n items = {\n oneOf: field.collection.map((collection) => ({\n type: 'object',\n additionalProperties: false,\n properties: {\n relationTo: {\n const: collection,\n },\n value: {\n oneOf: [\n {\n type: collectionIDFieldTypes[collection],\n },\n {\n $ref: `#/definitions/${collection}`,\n },\n ],\n },\n },\n required: ['collectionSlug', 'value'],\n })),\n }\n } else {\n items = {\n oneOf: [\n {\n type: collectionIDFieldTypes[field.collection],\n },\n {\n $ref: `#/definitions/${field.collection}`,\n },\n ],\n }\n }\n\n fieldSchema = {\n ...baseFieldSchema,\n type: 'object',\n additionalProperties: false,\n properties: {\n docs: {\n type: 'array',\n items,\n },\n hasNextPage: { type: 'boolean' },\n totalDocs: { type: 'number' },\n },\n }\n break\n }\n\n case 'json': {\n fieldSchema = field.jsonSchema?.schema || {\n ...baseFieldSchema,\n type: ['object', 'array', 'string', 'number', 'boolean', 'null'],\n }\n break\n }\n\n case 'number': {\n if (field.hasMany === true) {\n fieldSchema = {\n ...baseFieldSchema,\n type: withNullableJSONSchemaType('array', isRequired),\n items: { type: 'number' },\n }\n } else {\n fieldSchema = {\n ...baseFieldSchema,\n type: withNullableJSONSchemaType('number', isRequired),\n }\n }\n break\n }\n\n case 'point': {\n fieldSchema = {\n ...baseFieldSchema,\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 'radio': {\n fieldSchema = {\n ...baseFieldSchema,\n type: withNullableJSONSchemaType('string', isRequired),\n enum: buildOptionEnums(field.options),\n }\n\n if (field.interfaceName) {\n interfaceNameDefinitions.set(field.interfaceName, fieldSchema)\n\n fieldSchema = {\n $ref: `#/definitions/${field.interfaceName}`,\n }\n }\n\n break\n }\n case 'relationship':\n case 'upload': {\n if (Array.isArray(field.relationTo)) {\n if (field.hasMany) {\n fieldSchema = {\n ...baseFieldSchema,\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 ...baseFieldSchema,\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 ...baseFieldSchema,\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 ...baseFieldSchema,\n oneOf: [\n {\n type: withNullableJSONSchemaType(\n collectionIDFieldTypes[field.relationTo]!,\n isRequired,\n ),\n },\n { $ref: `#/definitions/${field.relationTo}` },\n ],\n }\n }\n\n break\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 = {\n ...baseFieldSchema,\n ...field.editor.outputSchema({\n collectionIDFieldTypes,\n config,\n field,\n i18n,\n interfaceNameDefinitions,\n isRequired,\n }),\n }\n } else {\n // Maintain backwards compatibility with existing rich text editors\n fieldSchema = {\n ...baseFieldSchema,\n type: withNullableJSONSchemaType('array', isRequired),\n items: {\n type: 'object',\n },\n }\n }\n\n break\n }\n\n case 'select': {\n const optionEnums = buildOptionEnums(field.options)\n // We get the previous field to check for a date in the case of a timezone select\n // This works because timezone selects are always inserted right after a date with 'timezone: true'\n const previousField = fields?.[index - 1]\n const isTimezoneField =\n previousField?.type === 'date' && previousField.timezone && field.name.includes('_tz')\n\n // Check if the timezone field's options match the global config's supported timezones\n const hasMatchingGlobalTimezones =\n isTimezoneField &&\n config &&\n optionsAreEqual(field.options, config.admin?.timezones?.supportedTimezones)\n\n // Timezone selects should reference the supportedTimezones definition\n // only if the field's options match the global config\n if (isTimezoneField && hasMatchingGlobalTimezones) {\n fieldSchema = {\n $ref: `#/definitions/supportedTimezones`,\n }\n } else {\n if (field.hasMany) {\n fieldSchema = {\n ...baseFieldSchema,\n type: withNullableJSONSchemaType('array', isRequired),\n items: {\n type: 'string',\n },\n }\n if (optionEnums?.length) {\n ;(fieldSchema.items as JSONSchema4).enum = optionEnums\n }\n } else {\n fieldSchema = {\n ...baseFieldSchema,\n type: withNullableJSONSchemaType('string', isRequired),\n }\n if (optionEnums?.length) {\n fieldSchema.enum = optionEnums\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 break\n }\n case 'tab': {\n fieldSchema = {\n ...baseFieldSchema,\n type: 'object',\n additionalProperties: false,\n ...fieldsToJSONSchema(\n collectionIDFieldTypes,\n field.flattenedFields,\n interfaceNameDefinitions,\n config,\n i18n,\n opts,\n ),\n }\n\n if (field.interfaceName) {\n interfaceNameDefinitions.set(field.interfaceName, fieldSchema)\n\n fieldSchema = { $ref: `#/definitions/${field.interfaceName}` }\n }\n break\n }\n\n case 'text':\n if (field.hasMany === true) {\n fieldSchema = {\n ...baseFieldSchema,\n type: withNullableJSONSchemaType('array', isRequired),\n items: { type: 'string' },\n }\n } else {\n fieldSchema = {\n ...baseFieldSchema,\n type: withNullableJSONSchemaType('string', isRequired),\n }\n }\n break\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 if (isRequired && fieldSchema.required !== false) {\n requiredFieldNames.add(field.name)\n }\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 entity: SanitizedCollectionConfig | SanitizedGlobalConfig,\n interfaceNameDefinitions: Map<string, JSONSchema4>,\n defaultIDType: 'number' | 'text',\n collectionIDFieldTypes?: { [key: string]: 'number' | 'string' },\n i18n?: I18n,\n opts: ConfigToJSONSchemaOptions = {},\n): JSONSchema4 {\n if (!collectionIDFieldTypes) {\n collectionIDFieldTypes = getCollectionIDFieldTypes({ config, defaultIDType })\n }\n\n const title = entity.typescript?.interface\n ? entity.typescript.interface\n : formatNames(entity.slug).singular\n\n let mutableFields = [...entity.flattenedFields]\n\n const idField: FieldAffectingData = { name: 'id', type: defaultIDType as 'text', required: true }\n const customIdField = mutableFields.find((field) => field.name === 'id') as FieldAffectingData\n\n if (customIdField && customIdField.type !== 'group' && customIdField.type !== 'tab') {\n mutableFields = mutableFields.map((field) => {\n if (field === customIdField) {\n return { ...field, required: true }\n }\n\n return field\n })\n } else {\n mutableFields.unshift(idField)\n }\n\n // mark timestamp fields required\n if ('timestamps' in entity && entity.timestamps !== false) {\n mutableFields = mutableFields.map((field) => {\n if (field.name === 'createdAt' || field.name === 'updatedAt') {\n return {\n ...field,\n required: true,\n }\n }\n return field\n })\n }\n\n if (\n 'auth' in entity &&\n entity.auth &&\n (!entity.auth?.disableLocalStrategy ||\n (typeof entity.auth?.disableLocalStrategy === 'object' &&\n entity.auth.disableLocalStrategy.enableFields))\n ) {\n mutableFields.push({\n name: 'password',\n type: 'text',\n })\n }\n\n const isAuthCollection = 'auth' in entity && entity.auth\n\n const fieldsSchema = fieldsToJSONSchema(\n collectionIDFieldTypes,\n mutableFields,\n interfaceNameDefinitions,\n config,\n i18n,\n opts,\n )\n\n // Add collection property to auth collections\n if (isAuthCollection) {\n fieldsSchema.properties = {\n ...fieldsSchema.properties,\n collection: { type: 'string', enum: [entity.slug] },\n }\n fieldsSchema.required = [...(fieldsSchema.required || []), 'collection']\n }\n\n const jsonSchema: JSONSchema4 = {\n type: 'object',\n additionalProperties: false,\n title,\n ...fieldsSchema,\n }\n\n const entityDescription = entityOrFieldToJsDocs({ entity, i18n })\n\n if (entityDescription) {\n jsonSchema.description = entityDescription\n }\n\n return jsonSchema\n}\n\nexport function fieldsToSelectJSONSchema({\n config,\n fields,\n interfaceNameDefinitions,\n}: {\n config: SanitizedConfig\n fields: FlattenedField[]\n interfaceNameDefinitions: Map<string, JSONSchema4>\n}): JSONSchema4 {\n const schema: JSONSchema4 = {\n type: 'object',\n additionalProperties: false,\n properties: {},\n }\n\n for (const field of fields) {\n switch (field.type) {\n case 'array':\n case 'group':\n case 'tab': {\n let fieldSchema: JSONSchema4 = fieldsToSelectJSONSchema({\n config,\n fields: field.flattenedFields,\n interfaceNameDefinitions,\n })\n\n if (field.interfaceName) {\n const definition = `${field.interfaceName}_select`\n interfaceNameDefinitions.set(definition, fieldSchema)\n\n fieldSchema = {\n $ref: `#/definitions/${definition}`,\n }\n }\n\n schema.properties![field.name] = {\n oneOf: [\n {\n type: 'boolean',\n },\n fieldSchema,\n ],\n }\n\n break\n }\n\n case 'blocks': {\n const blocksSchema: JSONSchema4 = {\n type: 'object',\n additionalProperties: false,\n properties: {},\n }\n\n for (const block of field.blockReferences ?? field.blocks) {\n if (typeof block === 'string') {\n continue // TODO\n }\n\n let blockSchema = fieldsToSelectJSONSchema({\n config,\n fields: block.flattenedFields,\n interfaceNameDefinitions,\n })\n\n if (block.interfaceName) {\n const definition = `${block.interfaceName}_select`\n interfaceNameDefinitions.set(definition, blockSchema)\n blockSchema = {\n $ref: `#/definitions/${definition}`,\n }\n }\n\n blocksSchema.properties![block.slug] = {\n oneOf: [\n {\n type: 'boolean',\n },\n blockSchema,\n ],\n }\n }\n\n schema.properties![field.name] = {\n oneOf: [\n {\n type: 'boolean',\n },\n blocksSchema,\n ],\n }\n\n break\n }\n\n default:\n schema.properties![field.name] = {\n type: 'boolean',\n }\n break\n }\n }\n\n return schema\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 '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 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 }\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: `${formatNames(config.slug).singular}AuthOperations`,\n }\n}\n\n// Generates the JSON Schema for supported timezones\nexport function timezonesToJSONSchema(\n supportedTimezones: SanitizedConfig['admin']['timezones']['supportedTimezones'],\n): JSONSchema4 {\n return {\n description: 'Supported timezones in IANA format.',\n enum: supportedTimezones.map((timezone) =>\n typeof timezone === 'string' ? timezone : timezone.value,\n ),\n }\n}\n\nfunction generateAuthOperationSchemas(collections: SanitizedCollectionConfig[]): JSONSchema4 {\n const properties = collections.reduce(\n (acc, collection) => {\n if (collection.auth) {\n acc[collection.slug] = {\n $ref: `#/definitions/auth/${collection.slug}`,\n }\n }\n return acc\n },\n {} as Record<string, JSONSchema4>,\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 i18n?: I18n,\n opts: ConfigToJSONSchemaOptions = {},\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 // Used for relationship fields, to determine whether to use a string or number type for the ID.\n const collectionIDFieldTypes = getCollectionIDFieldTypes({\n config,\n defaultIDType: defaultIDType!,\n })\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\n const entities: {\n entity: SanitizedCollectionConfig | SanitizedGlobalConfig\n type: 'collection' | 'global'\n }[] = [\n ...config.globals.map((global) => ({ type: 'global' as const, entity: global })),\n ...config.collections.map((collection) => ({\n type: 'collection' as const,\n entity: collection,\n })),\n ]\n\n const entityDefinitions: { [k: string]: JSONSchema4 } = entities.reduce(\n (acc, { type, entity }) => {\n acc[entity.slug] = entityToJSONSchema(\n config,\n entity,\n interfaceNameDefinitions,\n defaultIDType!,\n collectionIDFieldTypes,\n i18n,\n opts,\n )\n const select = fieldsToSelectJSONSchema({\n config,\n fields: entity.flattenedFields,\n interfaceNameDefinitions,\n })\n\n if (type === 'global') {\n select.properties!.globalType = {\n type: 'boolean',\n }\n }\n\n acc[`${entity.slug}_select`] = {\n type: 'object',\n additionalProperties: false,\n ...select,\n }\n\n return acc\n },\n {} as Record<string, JSONSchema4>,\n )\n\n const timezoneDefinitions = timezonesToJSONSchema(config.admin.timezones.supportedTimezones)\n const widgetSchemas = generateWidgetSchemas({\n collectionIDFieldTypes,\n config,\n i18n,\n interfaceNameDefinitions,\n opts,\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: {} as Record<string, JSONSchema4> },\n )\n\n const jobsSchemas = config.jobs\n ? generateJobsJSONSchemas(\n config,\n config.jobs,\n interfaceNameDefinitions,\n collectionIDFieldTypes,\n i18n,\n )\n : {}\n\n const blocksDefinition: JSONSchema4 | undefined = {\n type: 'object',\n additionalProperties: false,\n properties: {},\n required: [],\n }\n if (config?.blocks?.length) {\n for (const block of config.blocks) {\n const blockFieldSchemas = fieldsToJSONSchema(\n collectionIDFieldTypes,\n block.flattenedFields,\n interfaceNameDefinitions,\n config,\n i18n,\n opts,\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 const interfaceName = block.interfaceName ?? block.slug\n interfaceNameDefinitions.set(interfaceName, blockSchema)\n\n blocksDefinition.properties![block.slug] = {\n $ref: `#/definitions/${interfaceName}`,\n }\n ;(blocksDefinition.required as string[]).push(block.slug)\n }\n }\n\n let jsonSchema: JSONSchema4 = {\n additionalProperties: false,\n definitions: {\n supportedTimezones: timezoneDefinitions,\n ...entityDefinitions,\n ...widgetSchemas.definitions,\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 blocks: blocksDefinition,\n collections: generateEntitySchemas(config.collections || []),\n collectionsJoins: generateCollectionJoinsSchemas(config.collections || []),\n collectionsSelect: generateEntitySelectSchemas(config.collections || []),\n db: generateDbEntitySchema(config),\n fallbackLocale: generateFallbackLocaleEntitySchemas(config.localization),\n globals: generateEntitySchemas(config.globals || []),\n globalsSelect: generateEntitySelectSchemas(config.globals || []),\n locale: generateLocaleEntitySchemas(config.localization),\n widgets: widgetSchemas.schema,\n ...(config.typescript?.strictDraftTypes\n ? {\n strictDraftTypes: {\n type: 'boolean',\n const: true,\n },\n }\n : {}),\n user: generateAuthEntitySchemas(config.collections),\n },\n required: [\n 'user',\n 'locale',\n 'fallbackLocale',\n 'collections',\n 'collectionsSelect',\n 'collectionsJoins',\n 'globalsSelect',\n ...(config.typescript?.strictDraftTypes ? ['strictDraftTypes'] : []),\n 'globals',\n 'auth',\n 'db',\n 'jobs',\n 'blocks',\n 'widgets',\n ],\n title: 'Config',\n }\n\n if (jobsSchemas.definitions?.size) {\n for (const [key, value] of jobsSchemas.definitions) {\n jsonSchema.definitions![key] = value\n }\n }\n if (jobsSchemas.properties) {\n jsonSchema.properties!.jobs = {\n type: 'object',\n additionalProperties: false,\n properties: jobsSchemas.properties,\n required: ['tasks', 'workflows'],\n }\n }\n\n if (config?.typescript?.schema?.length) {\n for (const schema of config.typescript.schema) {\n jsonSchema = schema({ collectionIDFieldTypes, config, i18n: i18n!, jsonSchema })\n }\n }\n\n return jsonSchema\n}\n"],"names":["MissingEditorProp","fieldAffectsData","generateJobsJSONSchemas","flattenAllFields","formatNames","getCollectionIDFieldTypes","optionsAreEqual","fieldIsRequired","field","isConditional","Boolean","admin","condition","isMarkedRequired","required","type","flattenedFields","some","subField","buildOptionEnums","options","map","option","value","generateEntitySchemas","entities","properties","reduce","acc","slug","$ref","additionalProperties","Object","keys","generateEntitySelectSchemas","generateCollectionJoinsSchemas","collections","joins","polymorphicJoins","schema","collectionSlug","join","joinPath","enum","push","collection","length","widgetWidths","getAllowedWidgetWidths","maxWidth","minWidth","minIndex","indexOf","maxIndex","slice","generateWidgetSchemas","collectionIDFieldTypes","config","i18n","interfaceNameDefinitions","opts","widgets","dashboard","definitions","widget","definition","widthEnum","dataSchema","fields","widgetFieldSchemas","fieldsToJSONSchema","data","width","generateLocaleEntitySchemas","localization","locales","localesFromConfig","locale","code","generateFallbackLocaleEntitySchemas","localeCodes","localeCode","oneOf","items","generateAuthEntitySchemas","filter","auth","generateDbEntitySchema","defaultIDType","db","withNullableJSONSchemaType","fieldType","isRequired","fieldTypes","entityOrFieldToJsDocs","entity","description","undefined","en","language","requiredFieldNames","Set","fromEntries","fieldSchemas","index","fieldDescription","baseFieldSchema","fieldSchema","interfaceName","set","hasBlocks","blockReferences","blocks","block","resolvedBlock","find","b","forceInlineBlocks","blockFieldSchemas","blockSchema","blockType","const","Array","isArray","relationTo","docs","hasNextPage","totalDocs","jsonSchema","hasMany","maxItems","minItems","relation","editor","Error","outputSchema","optionEnums","previousField","isTimezoneField","timezone","name","includes","hasMatchingGlobalTimezones","timezones","supportedTimezones","typescriptSchema","add","Map","from","entityToJSONSchema","title","typescript","interface","singular","mutableFields","idField","customIdField","unshift","timestamps","disableLocalStrategy","enableFields","isAuthCollection","fieldsSchema","entityDescription","fieldsToSelectJSONSchema","blocksSchema","generateAuthFieldTypes","loginWithUsername","allowEmailLogin","email","username","password","requiredFields","requireEmail","requireUsername","authCollectionToOperationsJSONSchema","loginUserFields","forgotOrUnlockUserFields","registerUserFields","forgotPassword","login","registerFirstUser","unlock","timezonesToJSONSchema","generateAuthOperationSchemas","configToJSONSchema","globals","global","entityDefinitions","select","globalType","timezoneDefinitions","widgetSchemas","authOperationDefinitions","authCollection","jobsSchemas","jobs","blocksDefinition","collectionsJoins","collectionsSelect","fallbackLocale","globalsSelect","strictDraftTypes","user","size","key"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/utilities/configToJSONSchema.ts"],"sourcesContent":["import type { I18n } from '@payloadcms/translations'\nimport type { JSONSchema4, JSONSchema4TypeName } from 'json-schema'\n\nimport { createHash } from 'crypto'\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 { FieldAffectingData, FlattenedField, Option } from '../fields/config/types.js'\nimport type { SanitizedGlobalConfig } from '../globals/config/types.js'\n\nimport { MissingEditorProp } from '../errors/MissingEditorProp.js'\nimport { fieldAffectsData } from '../fields/config/types.js'\nimport { generateJobsJSONSchemas } from '../queues/config/generateJobsJSONSchemas.js'\nimport { flattenAllFields } from './flattenAllFields.js'\nimport { formatNames, toWords } from './formatLabels.js'\nimport { getCollectionIDFieldTypes } from './getCollectionIDFieldTypes.js'\nimport { optionsAreEqual } from './optionsAreEqual.js'\n\nconst fieldIsRequired = (field: FlattenedField): boolean => {\n const isConditional = Boolean(field?.admin && field?.admin?.condition)\n if (isConditional) {\n return false\n }\n\n const isMarkedRequired = 'required' in field && field.required === true\n if (fieldAffectsData(field) && isMarkedRequired) {\n return true\n }\n\n // if any subfields are required, this field is required\n if ('fields' in field && field.type !== 'array') {\n return field.flattenedFields.some((subField) => fieldIsRequired(subField))\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(\n (acc, { slug }) => {\n acc[slug] = {\n $ref: `#/definitions/${slug}`,\n }\n\n return acc\n },\n {} as Record<string, JSONSchema4>,\n )\n\n return {\n type: 'object',\n additionalProperties: false,\n properties,\n required: Object.keys(properties),\n }\n}\n\nfunction generateEntitySelectSchemas(\n entities: (SanitizedCollectionConfig | SanitizedGlobalConfig)[],\n): JSONSchema4 {\n const properties = [...entities].reduce(\n (acc, { slug }) => {\n acc[slug] = {\n $ref: `#/definitions/${slug}_select`,\n }\n\n return acc\n },\n {} as Record<string, JSONSchema4>,\n )\n\n return {\n type: 'object',\n additionalProperties: false,\n properties,\n required: Object.keys(properties),\n }\n}\n\nfunction generateCollectionJoinsSchemas(collections: SanitizedCollectionConfig[]): JSONSchema4 {\n const properties = [...collections].reduce<Record<string, JSONSchema4>>(\n (acc, { slug, joins, polymorphicJoins }) => {\n const schema = {\n type: 'object',\n additionalProperties: false,\n properties: {},\n required: [] as string[],\n } satisfies JSONSchema4\n\n for (const collectionSlug in joins) {\n for (const join of joins[collectionSlug]!) {\n ;(schema.properties as any)[join.joinPath] = {\n type: 'string',\n enum: [collectionSlug],\n }\n schema.required.push(join.joinPath)\n }\n }\n\n for (const join of polymorphicJoins) {\n ;(schema.properties as any)[join.joinPath] = {\n type: 'string',\n enum: join.field.collection,\n }\n schema.required.push(join.joinPath)\n }\n\n if (Object.keys(schema.properties).length > 0) {\n acc[slug] = schema\n }\n\n return acc\n },\n {},\n )\n\n return {\n type: 'object',\n additionalProperties: false,\n properties,\n required: Object.keys(properties),\n }\n}\n\nconst widgetWidths = ['x-small', 'small', 'medium', 'large', 'x-large', 'full'] as const\n\nfunction getAllowedWidgetWidths({\n maxWidth,\n minWidth,\n}: {\n maxWidth?: (typeof widgetWidths)[number]\n minWidth?: (typeof widgetWidths)[number]\n}): string[] {\n const minIndex = minWidth ? widgetWidths.indexOf(minWidth) : 0\n const maxIndex = maxWidth ? widgetWidths.indexOf(maxWidth) : widgetWidths.length - 1\n\n if (minIndex === -1 || maxIndex === -1 || minIndex > maxIndex) {\n return [...widgetWidths]\n }\n\n return widgetWidths.slice(minIndex, maxIndex + 1)\n}\n\nfunction generateWidgetSchemas({\n collectionIDFieldTypes,\n config,\n forceInlineBlocks,\n i18n,\n interfaceNameDefinitions,\n typeStringDefinitions,\n}: {\n collectionIDFieldTypes: { [key: string]: 'number' | 'string' }\n config: SanitizedConfig\n forceInlineBlocks?: boolean\n i18n?: I18n\n interfaceNameDefinitions: Map<string, JSONSchema4>\n typeStringDefinitions: Set<string>\n}): {\n definitions: Record<string, JSONSchema4>\n schema: JSONSchema4\n} {\n const widgets = config.admin?.dashboard?.widgets ?? []\n const definitions: Record<string, JSONSchema4> = {}\n const properties: Record<string, JSONSchema4> = {}\n\n for (const widget of widgets) {\n const definition = `${widget.slug}_widget`\n const widthEnum = getAllowedWidgetWidths({\n maxWidth: widget.maxWidth,\n minWidth: widget.minWidth,\n })\n let dataSchema: JSONSchema4\n\n if (widget.fields?.length) {\n const widgetFieldSchemas = fieldsToJSONSchema({\n collectionIDFieldTypes,\n config,\n fields: flattenAllFields({ fields: widget.fields }),\n forceInlineBlocks,\n i18n,\n interfaceNameDefinitions,\n typeStringDefinitions,\n })\n\n dataSchema = {\n type: 'object',\n additionalProperties: false,\n ...widgetFieldSchemas,\n }\n } else {\n dataSchema = {\n type: 'object',\n additionalProperties: true,\n }\n }\n\n definitions[definition] = {\n type: 'object',\n additionalProperties: false,\n properties: {\n data: dataSchema,\n width: {\n type: 'string',\n enum: widthEnum,\n },\n },\n required: ['width'],\n }\n\n properties[widget.slug] = {\n $ref: `#/definitions/${definition}`,\n }\n }\n\n return {\n definitions,\n schema: {\n type: 'object',\n additionalProperties: false,\n properties,\n required: Object.keys(properties),\n },\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 generateFallbackLocaleEntitySchemas(\n localization: SanitizedConfig['localization'],\n): JSONSchema4 {\n if (localization && 'localeCodes' in localization && localization?.localeCodes) {\n const localeCodes = [...localization.localeCodes].map((localeCode) => {\n return localeCode\n }, [])\n\n return {\n oneOf: [\n { type: 'string', enum: ['false', 'none', 'null'] },\n { type: 'boolean', enum: [false] },\n { type: 'null' },\n { type: 'string', enum: localeCodes },\n { type: 'array', items: { type: 'string', enum: localeCodes } },\n ],\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 { $ref: `#/definitions/${slug}` }\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) {\n return fieldType\n }\n fieldTypes.push('null')\n return fieldTypes\n}\n\nfunction entityOrFieldToJsDocs({\n entity,\n i18n,\n}: {\n entity: FlattenedField | SanitizedCollectionConfig | SanitizedGlobalConfig\n i18n?: I18n\n}): string | undefined {\n let description: string | undefined = undefined\n if (entity?.admin?.description) {\n if (typeof entity?.admin?.description === 'string') {\n description = entity?.admin?.description\n } else if (typeof entity?.admin?.description === 'object') {\n if (entity?.admin?.description?.en) {\n description = entity?.admin?.description?.en\n } else if (entity?.admin?.description?.[i18n!.language]) {\n description = entity?.admin?.description?.[i18n!.language]\n }\n } else if (typeof entity?.admin?.description === 'function' && i18n) {\n // do not evaluate description functions for generating JSDocs. The output of\n // those can differ depending on where and when they are called, creating\n // inconsistencies in the generated JSDocs.\n }\n }\n return description\n}\n\ntype ConfigToJSONSchemaOptions = {\n forceInlineBlocks?: boolean\n}\n\nexport type FieldsToJSONSchemaArgs = {\n /**\n * Used for relationship fields, to determine whether to use a string or\n * number type for the ID. While there is a default ID field type set by\n * the db adapter, they can differ on a collection-level if they have\n * custom ID fields.\n */\n collectionIDFieldTypes: { [key: string]: 'number' | 'string' }\n config?: SanitizedConfig\n fields: FlattenedField[]\n /**\n * If true, blocks are inlined into each `block` field instead of being\n * lifted to a top-level definition. Used by the MCP plugin.\n */\n forceInlineBlocks?: boolean\n i18n?: I18n\n /** Allows you to define new top-level interfaces that can be re-used in the output schema. */\n interfaceNameDefinitions: Map<string, JSONSchema4>\n /**\n * Allows you to append raw TS source to `payload-types.ts`. Identical\n * strings de-dupe naturally, so the same helper written from many fields\n * ends up emitted once.\n */\n typeStringDefinitions: Set<string>\n}\n\nexport function fieldsToJSONSchema({\n collectionIDFieldTypes,\n config,\n fields,\n forceInlineBlocks,\n i18n,\n interfaceNameDefinitions,\n typeStringDefinitions,\n}: FieldsToJSONSchemaArgs): {\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, index) => {\n const isRequired = fieldAffectsData(field) && fieldIsRequired(field)\n\n const fieldDescription = entityOrFieldToJsDocs({ entity: field, i18n })\n const baseFieldSchema: JSONSchema4 = {}\n if (fieldDescription) {\n baseFieldSchema.description = fieldDescription\n }\n\n let fieldSchema: JSONSchema4\n\n switch (field.type) {\n case 'array': {\n fieldSchema = {\n ...baseFieldSchema,\n type: withNullableJSONSchemaType('array', isRequired),\n items: {\n type: 'object',\n additionalProperties: false,\n ...fieldsToJSONSchema({\n collectionIDFieldTypes,\n config,\n fields: field.flattenedFields,\n forceInlineBlocks,\n i18n,\n interfaceNameDefinitions,\n typeStringDefinitions,\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 case 'blocks': {\n // Check for a case where no blocks are provided.\n // We need to generate an empty array for this case, note that JSON schema 4 doesn't support empty arrays\n // so the best we can get is `unknown[]`\n const hasBlocks = Boolean(\n field.blockReferences ? field.blockReferences.length : field.blocks.length,\n )\n\n fieldSchema = {\n ...baseFieldSchema,\n type: withNullableJSONSchemaType('array', isRequired),\n items: hasBlocks\n ? {\n oneOf: (field.blockReferences ?? field.blocks).map((blockOrReference) => {\n const block =\n typeof blockOrReference === 'string'\n ? config?.blocks?.find((b) => b.slug === blockOrReference)\n : blockOrReference\n\n if (!block) {\n return {}\n }\n\n const blockFieldSchemas = fieldsToJSONSchema({\n collectionIDFieldTypes,\n config,\n fields: block.flattenedFields,\n forceInlineBlocks,\n i18n,\n interfaceNameDefinitions,\n typeStringDefinitions,\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 return forceInlineBlocks\n ? blockSchema\n : {\n $ref: `#/definitions/${registerBlockInterface(block, blockSchema, interfaceNameDefinitions)}`,\n }\n }),\n }\n : {},\n }\n break\n }\n case 'checkbox': {\n fieldSchema = {\n ...baseFieldSchema,\n type: withNullableJSONSchemaType('boolean', isRequired),\n }\n break\n }\n case 'code':\n case 'date':\n case 'email':\n case 'textarea': {\n fieldSchema = {\n ...baseFieldSchema,\n type: withNullableJSONSchemaType('string', isRequired),\n }\n break\n }\n\n case 'group': {\n if (fieldAffectsData(field)) {\n fieldSchema = {\n ...baseFieldSchema,\n type: 'object',\n additionalProperties: false,\n ...fieldsToJSONSchema({\n collectionIDFieldTypes,\n config,\n fields: field.flattenedFields,\n forceInlineBlocks,\n i18n,\n interfaceNameDefinitions,\n typeStringDefinitions,\n }),\n }\n\n if (field.interfaceName) {\n interfaceNameDefinitions.set(field.interfaceName, fieldSchema)\n\n fieldSchema = { $ref: `#/definitions/${field.interfaceName}` }\n }\n }\n break\n }\n\n case 'join': {\n let items: JSONSchema4\n\n if (Array.isArray(field.collection)) {\n items = {\n oneOf: field.collection.map((collection) => ({\n type: 'object',\n additionalProperties: false,\n properties: {\n relationTo: {\n const: collection,\n },\n value: {\n oneOf: [\n {\n type: collectionIDFieldTypes[collection],\n },\n {\n $ref: `#/definitions/${collection}`,\n },\n ],\n },\n },\n required: ['collectionSlug', 'value'],\n })),\n }\n } else {\n items = {\n oneOf: [\n {\n type: collectionIDFieldTypes[field.collection],\n },\n {\n $ref: `#/definitions/${field.collection}`,\n },\n ],\n }\n }\n\n fieldSchema = {\n ...baseFieldSchema,\n type: 'object',\n additionalProperties: false,\n properties: {\n docs: {\n type: 'array',\n items,\n },\n hasNextPage: { type: 'boolean' },\n totalDocs: { type: 'number' },\n },\n }\n break\n }\n\n case 'json': {\n fieldSchema = field.jsonSchema?.schema || {\n ...baseFieldSchema,\n type: ['object', 'array', 'string', 'number', 'boolean', 'null'],\n }\n break\n }\n\n case 'number': {\n if (field.hasMany === true) {\n fieldSchema = {\n ...baseFieldSchema,\n type: withNullableJSONSchemaType('array', isRequired),\n items: { type: 'number' },\n }\n } else {\n fieldSchema = {\n ...baseFieldSchema,\n type: withNullableJSONSchemaType('number', isRequired),\n }\n }\n break\n }\n\n case 'point': {\n fieldSchema = {\n ...baseFieldSchema,\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 'radio': {\n fieldSchema = {\n ...baseFieldSchema,\n type: withNullableJSONSchemaType('string', isRequired),\n enum: buildOptionEnums(field.options),\n }\n\n if (field.interfaceName) {\n interfaceNameDefinitions.set(field.interfaceName, fieldSchema)\n\n fieldSchema = {\n $ref: `#/definitions/${field.interfaceName}`,\n }\n }\n\n break\n }\n case 'relationship':\n case 'upload': {\n if (Array.isArray(field.relationTo)) {\n if (field.hasMany) {\n fieldSchema = {\n ...baseFieldSchema,\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 ...baseFieldSchema,\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 ...baseFieldSchema,\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 ...baseFieldSchema,\n oneOf: [\n {\n type: withNullableJSONSchemaType(\n collectionIDFieldTypes[field.relationTo]!,\n isRequired,\n ),\n },\n { $ref: `#/definitions/${field.relationTo}` },\n ],\n }\n }\n\n break\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.jsonSchema) {\n fieldSchema = {\n ...baseFieldSchema,\n ...field.editor.jsonSchema({\n collectionIDFieldTypes,\n config,\n field,\n i18n,\n interfaceNameDefinitions,\n isRequired,\n typeStringDefinitions,\n }),\n }\n } else {\n // Maintain backwards compatibility with existing rich text editors\n fieldSchema = {\n ...baseFieldSchema,\n type: withNullableJSONSchemaType('array', isRequired),\n items: {\n type: 'object',\n },\n }\n }\n\n break\n }\n\n case 'select': {\n const optionEnums = buildOptionEnums(field.options)\n // We get the previous field to check for a date in the case of a timezone select\n // This works because timezone selects are always inserted right after a date with 'timezone: true'\n const previousField = fields?.[index - 1]\n const isTimezoneField =\n previousField?.type === 'date' && previousField.timezone && field.name.includes('_tz')\n\n // Check if the timezone field's options match the global config's supported timezones\n const hasMatchingGlobalTimezones =\n isTimezoneField &&\n config &&\n optionsAreEqual(field.options, config.admin?.timezones?.supportedTimezones)\n\n // Timezone selects should reference the supportedTimezones definition\n // only if the field's options match the global config\n if (isTimezoneField && hasMatchingGlobalTimezones) {\n fieldSchema = {\n $ref: `#/definitions/supportedTimezones`,\n }\n } else {\n if (field.hasMany) {\n fieldSchema = {\n ...baseFieldSchema,\n type: withNullableJSONSchemaType('array', isRequired),\n items: {\n type: 'string',\n },\n }\n if (optionEnums?.length) {\n ;(fieldSchema.items as JSONSchema4).enum = optionEnums\n }\n } else {\n fieldSchema = {\n ...baseFieldSchema,\n type: withNullableJSONSchemaType('string', isRequired),\n }\n if (optionEnums?.length) {\n fieldSchema.enum = optionEnums\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 break\n }\n case 'tab': {\n fieldSchema = {\n ...baseFieldSchema,\n type: 'object',\n additionalProperties: false,\n ...fieldsToJSONSchema({\n collectionIDFieldTypes,\n config,\n fields: field.flattenedFields,\n forceInlineBlocks,\n i18n,\n interfaceNameDefinitions,\n typeStringDefinitions,\n }),\n }\n\n if (field.interfaceName) {\n interfaceNameDefinitions.set(field.interfaceName, fieldSchema)\n\n fieldSchema = { $ref: `#/definitions/${field.interfaceName}` }\n }\n break\n }\n\n case 'text':\n if (field.hasMany === true) {\n fieldSchema = {\n ...baseFieldSchema,\n type: withNullableJSONSchemaType('array', isRequired),\n items: { type: 'string' },\n }\n } else {\n fieldSchema = {\n ...baseFieldSchema,\n type: withNullableJSONSchemaType('string', isRequired),\n }\n }\n break\n\n default: {\n break\n }\n }\n\n if ('jsonSchema' in field && field?.jsonSchema?.length) {\n for (const schema of field.jsonSchema) {\n fieldSchema = schema({ jsonSchema: fieldSchema! })\n }\n }\n\n if (fieldSchema! && fieldAffectsData(field)) {\n if (isRequired && fieldSchema.required !== false) {\n requiredFieldNames.add(field.name)\n }\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 entity: SanitizedCollectionConfig | SanitizedGlobalConfig,\n interfaceNameDefinitions: Map<string, JSONSchema4>,\n defaultIDType: 'number' | 'text',\n typeStringDefinitions: Set<string>,\n collectionIDFieldTypes?: { [key: string]: 'number' | 'string' },\n i18n?: I18n,\n forceInlineBlocks?: boolean,\n): JSONSchema4 {\n if (!collectionIDFieldTypes) {\n collectionIDFieldTypes = getCollectionIDFieldTypes({ config, defaultIDType })\n }\n\n const title = entity.typescript?.interface\n ? entity.typescript.interface\n : formatNames(entity.slug).singular\n\n let mutableFields = [...entity.flattenedFields]\n\n const idField: FieldAffectingData = { name: 'id', type: defaultIDType as 'text', required: true }\n const customIdField = mutableFields.find((field) => field.name === 'id') as FieldAffectingData\n\n if (customIdField && customIdField.type !== 'group' && customIdField.type !== 'tab') {\n mutableFields = mutableFields.map((field) => {\n if (field === customIdField) {\n return { ...field, required: true }\n }\n\n return field\n })\n } else {\n mutableFields.unshift(idField)\n }\n\n // mark timestamp fields required\n if ('timestamps' in entity && entity.timestamps !== false) {\n mutableFields = mutableFields.map((field) => {\n if (field.name === 'createdAt' || field.name === 'updatedAt') {\n return {\n ...field,\n required: true,\n }\n }\n return field\n })\n }\n\n if (\n 'auth' in entity &&\n entity.auth &&\n (!entity.auth?.disableLocalStrategy ||\n (typeof entity.auth?.disableLocalStrategy === 'object' &&\n entity.auth.disableLocalStrategy.enableFields))\n ) {\n mutableFields.push({\n name: 'password',\n type: 'text',\n })\n }\n\n const isAuthCollection = 'auth' in entity && entity.auth\n\n const fieldsSchema = fieldsToJSONSchema({\n collectionIDFieldTypes,\n config,\n fields: mutableFields,\n forceInlineBlocks,\n i18n,\n interfaceNameDefinitions,\n typeStringDefinitions,\n })\n\n // Add collection property to auth collections\n if (isAuthCollection) {\n fieldsSchema.properties = {\n ...fieldsSchema.properties,\n collection: { type: 'string', enum: [entity.slug] },\n }\n fieldsSchema.required = [...(fieldsSchema.required || []), 'collection']\n }\n\n const jsonSchema: JSONSchema4 = {\n type: 'object',\n additionalProperties: false,\n title,\n ...fieldsSchema,\n }\n\n const entityDescription = entityOrFieldToJsDocs({ entity, i18n })\n\n if (entityDescription) {\n jsonSchema.description = entityDescription\n }\n\n return jsonSchema\n}\n\nexport function fieldsToSelectJSONSchema({\n config,\n fields,\n interfaceNameDefinitions,\n}: {\n config: SanitizedConfig\n fields: FlattenedField[]\n interfaceNameDefinitions: Map<string, JSONSchema4>\n}): JSONSchema4 {\n const schema: JSONSchema4 = {\n type: 'object',\n additionalProperties: false,\n properties: {},\n }\n\n for (const field of fields) {\n switch (field.type) {\n case 'array':\n case 'group':\n case 'tab': {\n let fieldSchema: JSONSchema4 = fieldsToSelectJSONSchema({\n config,\n fields: field.flattenedFields,\n interfaceNameDefinitions,\n })\n\n if (field.interfaceName) {\n const definition = `${field.interfaceName}_select`\n interfaceNameDefinitions.set(definition, fieldSchema)\n\n fieldSchema = {\n $ref: `#/definitions/${definition}`,\n }\n }\n\n schema.properties![field.name] = {\n oneOf: [\n {\n type: 'boolean',\n },\n fieldSchema,\n ],\n }\n\n break\n }\n\n case 'blocks': {\n const blocksSchema: JSONSchema4 = {\n type: 'object',\n additionalProperties: false,\n properties: {},\n }\n\n for (const block of field.blockReferences ?? field.blocks) {\n if (typeof block === 'string') {\n continue // TODO\n }\n\n let blockSchema = fieldsToSelectJSONSchema({\n config,\n fields: block.flattenedFields,\n interfaceNameDefinitions,\n })\n\n if (block.interfaceName) {\n const definition = `${block.interfaceName}_select`\n interfaceNameDefinitions.set(definition, blockSchema)\n blockSchema = {\n $ref: `#/definitions/${definition}`,\n }\n }\n\n blocksSchema.properties![block.slug] = {\n oneOf: [\n {\n type: 'boolean',\n },\n blockSchema,\n ],\n }\n }\n\n schema.properties![field.name] = {\n oneOf: [\n {\n type: 'boolean',\n },\n blocksSchema,\n ],\n }\n\n break\n }\n\n default:\n schema.properties![field.name] = {\n type: 'boolean',\n }\n break\n }\n }\n\n return schema\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 '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 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 }\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: `${formatNames(config.slug).singular}AuthOperations`,\n }\n}\n\n// Generates the JSON Schema for supported timezones\nexport function timezonesToJSONSchema(\n supportedTimezones: SanitizedConfig['admin']['timezones']['supportedTimezones'],\n): JSONSchema4 {\n return {\n description: 'Supported timezones in IANA format.',\n enum: supportedTimezones.map((timezone) =>\n typeof timezone === 'string' ? timezone : timezone.value,\n ),\n }\n}\n\nfunction generateAuthOperationSchemas(collections: SanitizedCollectionConfig[]): JSONSchema4 {\n const properties = collections.reduce(\n (acc, collection) => {\n if (collection.auth) {\n acc[collection.slug] = {\n $ref: `#/definitions/auth/${collection.slug}`,\n }\n }\n return acc\n },\n {} as Record<string, JSONSchema4>,\n )\n\n return {\n type: 'object',\n additionalProperties: false,\n properties,\n required: Object.keys(properties),\n }\n}\n\nconst hashBlockSchema = (schema: JSONSchema4): string =>\n createHash('sha256').update(JSON.stringify(schema)).digest('hex').slice(0, 8).toUpperCase()\n\n/**\n * Registers a block's schema as a top-level definition and returns its name.\n *\n * The name is the block's `interfaceName`, or a PascalCase form of its slug. If a different\n * block already uses that name, this one gets a content-hash suffix (`Hero_3F2A1B0C`) so the\n * two don't overwrite each other. Registering the same block shape again reuses its name.\n */\nfunction registerBlockInterface(\n block: { interfaceName?: string; slug: string },\n blockSchema: JSONSchema4,\n interfaceNameDefinitions: Map<string, JSONSchema4>,\n): string {\n const baseName = block.interfaceName ?? toWords(block.slug, true)\n const existing = interfaceNameDefinitions.get(baseName)\n\n // Use the clean name if it is free, or if the block sets an explicit interfaceName.\n if (!existing || block.interfaceName) {\n interfaceNameDefinitions.set(baseName, blockSchema)\n return baseName\n }\n\n const hash = hashBlockSchema(blockSchema)\n\n // The same block shape is already registered under this name, so reuse it.\n if (hashBlockSchema(existing) === hash) {\n return baseName\n }\n\n // A different block already owns the clean name. Disambiguate this one with its hash.\n blockSchema.description = `Multiple blocks resolve to the \\`${baseName}\\` interface with different fields, so a content hash is appended to keep the generated types stable and unambiguous. Set a unique \\`interfaceName\\` on the block to choose the name yourself. See https://payloadcms.com/docs/typescript/generating-types#block-interface-name-collisions`\n\n const uniqueName = `${baseName}_${hash}`\n interfaceNameDefinitions.set(uniqueName, blockSchema)\n return uniqueName\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 i18n?: I18n,\n { forceInlineBlocks }: ConfigToJSONSchemaOptions = {},\n): { jsonSchema: JSONSchema4; typeStringDefinitions: Set<string> } {\n // a mutable Map of top-level definitions in the generated JSON Schema.\n // - `array`/`group`/named-`tab` fields are registered here when they set\n // `interfaceName` (otherwise they stay inline).\n // - `block` configs always register here via `registerBlockInterface`, keyed by\n // `block.interfaceName` if set, else a PascalCase form of the slug (with a\n // content-hash suffix when two different blocks resolve to the same name).\n const interfaceNameDefinitions: Map<string, JSONSchema4> = new Map()\n // a mutable Set for raw TS source to be appended to `payload-types.ts`.\n const typeStringDefinitions: Set<string> = new Set()\n\n // Used for relationship fields, to determine whether to use a string or number type for the ID.\n const collectionIDFieldTypes = getCollectionIDFieldTypes({\n config,\n defaultIDType: defaultIDType!,\n })\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\n const entities: {\n entity: SanitizedCollectionConfig | SanitizedGlobalConfig\n type: 'collection' | 'global'\n }[] = [\n ...config.globals.map((global) => ({ type: 'global' as const, entity: global })),\n ...config.collections.map((collection) => ({\n type: 'collection' as const,\n entity: collection,\n })),\n ]\n\n const entityDefinitions: { [k: string]: JSONSchema4 } = entities.reduce(\n (acc, { type, entity }) => {\n acc[entity.slug] = entityToJSONSchema(\n config,\n entity,\n interfaceNameDefinitions,\n defaultIDType!,\n typeStringDefinitions,\n collectionIDFieldTypes,\n i18n,\n forceInlineBlocks,\n )\n const select = fieldsToSelectJSONSchema({\n config,\n fields: entity.flattenedFields,\n interfaceNameDefinitions,\n })\n\n if (type === 'global') {\n select.properties!.globalType = {\n type: 'boolean',\n }\n }\n\n acc[`${entity.slug}_select`] = {\n type: 'object',\n additionalProperties: false,\n ...select,\n }\n\n return acc\n },\n {} as Record<string, JSONSchema4>,\n )\n\n const timezoneDefinitions = timezonesToJSONSchema(config.admin.timezones.supportedTimezones)\n const widgetSchemas = generateWidgetSchemas({\n collectionIDFieldTypes,\n config,\n forceInlineBlocks,\n i18n,\n interfaceNameDefinitions,\n typeStringDefinitions,\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: {} as Record<string, JSONSchema4> },\n )\n\n const jobsSchemas = config.jobs\n ? generateJobsJSONSchemas(\n config,\n config.jobs,\n interfaceNameDefinitions,\n collectionIDFieldTypes,\n typeStringDefinitions,\n i18n,\n )\n : {}\n\n const blocksDefinition: JSONSchema4 | undefined = {\n type: 'object',\n additionalProperties: false,\n properties: {},\n required: [],\n }\n if (config?.blocks?.length) {\n for (const block of config.blocks) {\n const blockFieldSchemas = fieldsToJSONSchema({\n collectionIDFieldTypes,\n config,\n fields: block.flattenedFields,\n forceInlineBlocks,\n i18n,\n interfaceNameDefinitions,\n typeStringDefinitions,\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 blocksDefinition.properties![block.slug] = {\n $ref: `#/definitions/${registerBlockInterface(block, blockSchema, interfaceNameDefinitions)}`,\n }\n ;(blocksDefinition.required as string[]).push(block.slug)\n }\n }\n\n let jsonSchema: JSONSchema4 = {\n additionalProperties: false,\n definitions: {\n supportedTimezones: timezoneDefinitions,\n ...entityDefinitions,\n ...widgetSchemas.definitions,\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 blocks: blocksDefinition,\n collections: generateEntitySchemas(config.collections || []),\n collectionsJoins: generateCollectionJoinsSchemas(config.collections || []),\n collectionsSelect: generateEntitySelectSchemas(config.collections || []),\n db: generateDbEntitySchema(config),\n fallbackLocale: generateFallbackLocaleEntitySchemas(config.localization),\n globals: generateEntitySchemas(config.globals || []),\n globalsSelect: generateEntitySelectSchemas(config.globals || []),\n locale: generateLocaleEntitySchemas(config.localization),\n widgets: widgetSchemas.schema,\n ...(config.typescript?.strictDraftTypes\n ? {\n strictDraftTypes: {\n type: 'boolean',\n const: true,\n },\n }\n : {}),\n user: generateAuthEntitySchemas(config.collections),\n },\n required: [\n 'user',\n 'locale',\n 'fallbackLocale',\n 'collections',\n 'collectionsSelect',\n 'collectionsJoins',\n 'globalsSelect',\n ...(config.typescript?.strictDraftTypes ? ['strictDraftTypes'] : []),\n 'globals',\n 'auth',\n 'db',\n 'jobs',\n 'blocks',\n 'widgets',\n ],\n title: 'Config',\n }\n\n if (jobsSchemas.definitions?.size) {\n for (const [key, value] of jobsSchemas.definitions) {\n jsonSchema.definitions![key] = value\n }\n }\n if (jobsSchemas.properties) {\n jsonSchema.properties!.jobs = {\n type: 'object',\n additionalProperties: false,\n properties: jobsSchemas.properties,\n required: ['tasks', 'workflows'],\n }\n }\n\n if (config?.typescript?.schema?.length) {\n for (const schema of config.typescript.schema) {\n jsonSchema = schema({ collectionIDFieldTypes, config, i18n: i18n!, jsonSchema })\n }\n }\n\n return { jsonSchema, typeStringDefinitions }\n}\n"],"names":["createHash","MissingEditorProp","fieldAffectsData","generateJobsJSONSchemas","flattenAllFields","formatNames","toWords","getCollectionIDFieldTypes","optionsAreEqual","fieldIsRequired","field","isConditional","Boolean","admin","condition","isMarkedRequired","required","type","flattenedFields","some","subField","buildOptionEnums","options","map","option","value","generateEntitySchemas","entities","properties","reduce","acc","slug","$ref","additionalProperties","Object","keys","generateEntitySelectSchemas","generateCollectionJoinsSchemas","collections","joins","polymorphicJoins","schema","collectionSlug","join","joinPath","enum","push","collection","length","widgetWidths","getAllowedWidgetWidths","maxWidth","minWidth","minIndex","indexOf","maxIndex","slice","generateWidgetSchemas","collectionIDFieldTypes","config","forceInlineBlocks","i18n","interfaceNameDefinitions","typeStringDefinitions","widgets","dashboard","definitions","widget","definition","widthEnum","dataSchema","fields","widgetFieldSchemas","fieldsToJSONSchema","data","width","generateLocaleEntitySchemas","localization","locales","localesFromConfig","locale","code","generateFallbackLocaleEntitySchemas","localeCodes","localeCode","oneOf","items","generateAuthEntitySchemas","filter","auth","generateDbEntitySchema","defaultIDType","db","withNullableJSONSchemaType","fieldType","isRequired","fieldTypes","entityOrFieldToJsDocs","entity","description","undefined","en","language","requiredFieldNames","Set","fromEntries","fieldSchemas","index","fieldDescription","baseFieldSchema","fieldSchema","interfaceName","set","hasBlocks","blockReferences","blocks","blockOrReference","block","find","b","blockFieldSchemas","blockSchema","blockType","const","registerBlockInterface","Array","isArray","relationTo","docs","hasNextPage","totalDocs","jsonSchema","hasMany","maxItems","minItems","relation","editor","Error","optionEnums","previousField","isTimezoneField","timezone","name","includes","hasMatchingGlobalTimezones","timezones","supportedTimezones","add","Map","from","entityToJSONSchema","title","typescript","interface","singular","mutableFields","idField","customIdField","unshift","timestamps","disableLocalStrategy","enableFields","isAuthCollection","fieldsSchema","entityDescription","fieldsToSelectJSONSchema","blocksSchema","generateAuthFieldTypes","loginWithUsername","allowEmailLogin","email","username","password","requiredFields","requireEmail","requireUsername","authCollectionToOperationsJSONSchema","loginUserFields","forgotOrUnlockUserFields","registerUserFields","forgotPassword","login","registerFirstUser","unlock","timezonesToJSONSchema","generateAuthOperationSchemas","hashBlockSchema","update","JSON","stringify","digest","toUpperCase","baseName","existing","get","hash","uniqueName","configToJSONSchema","globals","global","entityDefinitions","select","globalType","timezoneDefinitions","widgetSchemas","authOperationDefinitions","authCollection","jobsSchemas","jobs","blocksDefinition","collectionsJoins","collectionsSelect","fallbackLocale","globalsSelect","strictDraftTypes","user","size","key"],"mappings":"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"}
|
|
@@ -26,7 +26,7 @@ describe('configToJSONSchema', ()=>{
|
|
|
26
26
|
]
|
|
27
27
|
};
|
|
28
28
|
const sanitizedConfig = await sanitizeConfig(config);
|
|
29
|
-
const schema = configToJSONSchema(sanitizedConfig, 'text');
|
|
29
|
+
const { jsonSchema: schema } = configToJSONSchema(sanitizedConfig, 'text');
|
|
30
30
|
expect(schema?.definitions?.test).toStrictEqual({
|
|
31
31
|
type: 'object',
|
|
32
32
|
additionalProperties: false,
|
|
@@ -103,7 +103,7 @@ describe('configToJSONSchema', ()=>{
|
|
|
103
103
|
type: 'blocks',
|
|
104
104
|
blocks: [
|
|
105
105
|
{
|
|
106
|
-
slug: '
|
|
106
|
+
slug: 'testRequired',
|
|
107
107
|
fields: [
|
|
108
108
|
{
|
|
109
109
|
name: 'field',
|
|
@@ -120,7 +120,7 @@ describe('configToJSONSchema', ()=>{
|
|
|
120
120
|
]
|
|
121
121
|
};
|
|
122
122
|
const sanitizedConfig = await sanitizeConfig(config);
|
|
123
|
-
const schema = configToJSONSchema(sanitizedConfig, 'text');
|
|
123
|
+
const { jsonSchema: schema } = configToJSONSchema(sanitizedConfig, 'text');
|
|
124
124
|
expect(schema?.definitions?.test).toStrictEqual({
|
|
125
125
|
type: 'object',
|
|
126
126
|
additionalProperties: false,
|
|
@@ -147,34 +147,7 @@ describe('configToJSONSchema', ()=>{
|
|
|
147
147
|
items: {
|
|
148
148
|
oneOf: [
|
|
149
149
|
{
|
|
150
|
-
|
|
151
|
-
additionalProperties: false,
|
|
152
|
-
properties: {
|
|
153
|
-
id: {
|
|
154
|
-
type: [
|
|
155
|
-
'string',
|
|
156
|
-
'null'
|
|
157
|
-
]
|
|
158
|
-
},
|
|
159
|
-
blockName: {
|
|
160
|
-
type: [
|
|
161
|
-
'string',
|
|
162
|
-
'null'
|
|
163
|
-
]
|
|
164
|
-
},
|
|
165
|
-
blockType: {
|
|
166
|
-
const: 'test'
|
|
167
|
-
},
|
|
168
|
-
field: {
|
|
169
|
-
type: [
|
|
170
|
-
'string',
|
|
171
|
-
'null'
|
|
172
|
-
]
|
|
173
|
-
}
|
|
174
|
-
},
|
|
175
|
-
required: [
|
|
176
|
-
'blockType'
|
|
177
|
-
]
|
|
150
|
+
$ref: '#/definitions/Test'
|
|
178
151
|
}
|
|
179
152
|
]
|
|
180
153
|
}
|
|
@@ -187,32 +160,7 @@ describe('configToJSONSchema', ()=>{
|
|
|
187
160
|
items: {
|
|
188
161
|
oneOf: [
|
|
189
162
|
{
|
|
190
|
-
|
|
191
|
-
additionalProperties: false,
|
|
192
|
-
properties: {
|
|
193
|
-
id: {
|
|
194
|
-
type: [
|
|
195
|
-
'string',
|
|
196
|
-
'null'
|
|
197
|
-
]
|
|
198
|
-
},
|
|
199
|
-
blockName: {
|
|
200
|
-
type: [
|
|
201
|
-
'string',
|
|
202
|
-
'null'
|
|
203
|
-
]
|
|
204
|
-
},
|
|
205
|
-
blockType: {
|
|
206
|
-
const: 'test'
|
|
207
|
-
},
|
|
208
|
-
field: {
|
|
209
|
-
type: 'string'
|
|
210
|
-
}
|
|
211
|
-
},
|
|
212
|
-
required: [
|
|
213
|
-
'blockType',
|
|
214
|
-
'field'
|
|
215
|
-
]
|
|
163
|
+
$ref: '#/definitions/TestRequired'
|
|
216
164
|
}
|
|
217
165
|
]
|
|
218
166
|
}
|
|
@@ -225,6 +173,87 @@ describe('configToJSONSchema', ()=>{
|
|
|
225
173
|
title: 'Test'
|
|
226
174
|
});
|
|
227
175
|
});
|
|
176
|
+
it('keeps the first block interface name clean and content-hashes the colliding one', async ()=>{
|
|
177
|
+
// @ts-expect-error - partial config for testing
|
|
178
|
+
const config = {
|
|
179
|
+
collections: [
|
|
180
|
+
{
|
|
181
|
+
slug: 'pages',
|
|
182
|
+
fields: [
|
|
183
|
+
{
|
|
184
|
+
name: 'layout',
|
|
185
|
+
type: 'blocks',
|
|
186
|
+
blocks: [
|
|
187
|
+
{
|
|
188
|
+
slug: 'hero',
|
|
189
|
+
fields: [
|
|
190
|
+
{
|
|
191
|
+
name: 'title',
|
|
192
|
+
type: 'text'
|
|
193
|
+
}
|
|
194
|
+
]
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
slug: 'cta',
|
|
198
|
+
fields: [
|
|
199
|
+
{
|
|
200
|
+
name: 'label',
|
|
201
|
+
type: 'text'
|
|
202
|
+
}
|
|
203
|
+
]
|
|
204
|
+
}
|
|
205
|
+
]
|
|
206
|
+
}
|
|
207
|
+
],
|
|
208
|
+
timestamps: false
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
slug: 'posts',
|
|
212
|
+
fields: [
|
|
213
|
+
{
|
|
214
|
+
name: 'layout',
|
|
215
|
+
type: 'blocks',
|
|
216
|
+
// Same slug `hero`, DIFFERENT fields → name collision with pages' hero.
|
|
217
|
+
blocks: [
|
|
218
|
+
{
|
|
219
|
+
slug: 'hero',
|
|
220
|
+
fields: [
|
|
221
|
+
{
|
|
222
|
+
name: 'heading',
|
|
223
|
+
type: 'text'
|
|
224
|
+
}
|
|
225
|
+
]
|
|
226
|
+
}
|
|
227
|
+
]
|
|
228
|
+
}
|
|
229
|
+
],
|
|
230
|
+
timestamps: false
|
|
231
|
+
}
|
|
232
|
+
]
|
|
233
|
+
};
|
|
234
|
+
const sanitizedConfig = await sanitizeConfig(config);
|
|
235
|
+
const { jsonSchema: schema } = configToJSONSchema(sanitizedConfig, 'text');
|
|
236
|
+
const defs = schema.definitions;
|
|
237
|
+
// The first `hero` keeps the clean name; the unique block is unaffected.
|
|
238
|
+
expect(defs.Hero).toBeDefined();
|
|
239
|
+
expect(defs.Cta).toBeDefined();
|
|
240
|
+
// Only the second, differently-shaped `hero` is disambiguated with a content hash.
|
|
241
|
+
const hashedHeroNames = Object.keys(defs).filter((k)=>/^Hero_[0-9A-F]{8}$/.test(k));
|
|
242
|
+
expect(hashedHeroNames).toHaveLength(1);
|
|
243
|
+
// The disambiguated interface carries the explanatory JSDoc note; the clean one does not.
|
|
244
|
+
expect(defs[hashedHeroNames[0]].description).toContain('content hash');
|
|
245
|
+
expect(defs.Hero.description).toBeUndefined();
|
|
246
|
+
// Each collection's block field references its own block's interface.
|
|
247
|
+
const refsOf = (slug)=>defs[slug].properties.layout.items.oneOf.map((r)=>r.$ref);
|
|
248
|
+
expect(refsOf('pages')).toContain('#/definitions/Hero');
|
|
249
|
+
expect(refsOf('pages')).toContain('#/definitions/Cta');
|
|
250
|
+
expect(refsOf('posts')).toStrictEqual([
|
|
251
|
+
`#/definitions/${hashedHeroNames[0]}`
|
|
252
|
+
]);
|
|
253
|
+
// Hashing is deterministic: regenerating yields identical names.
|
|
254
|
+
const { jsonSchema: schema2 } = configToJSONSchema(sanitizedConfig, 'text');
|
|
255
|
+
expect(Object.keys(schema2.definitions).filter((k)=>/^Hero/.test(k)).sort()).toStrictEqual(Object.keys(defs).filter((k)=>/^Hero/.test(k)).sort());
|
|
256
|
+
});
|
|
228
257
|
it('should handle tabs and named tabs with required fields', async ()=>{
|
|
229
258
|
// @ts-expect-error
|
|
230
259
|
const config = {
|
|
@@ -273,7 +302,7 @@ describe('configToJSONSchema', ()=>{
|
|
|
273
302
|
]
|
|
274
303
|
};
|
|
275
304
|
const sanitizedConfig = await sanitizeConfig(config);
|
|
276
|
-
const schema = configToJSONSchema(sanitizedConfig, 'text');
|
|
305
|
+
const { jsonSchema: schema } = configToJSONSchema(sanitizedConfig, 'text');
|
|
277
306
|
expect(schema?.definitions?.test).toStrictEqual({
|
|
278
307
|
type: 'object',
|
|
279
308
|
additionalProperties: false,
|
|
@@ -340,7 +369,7 @@ describe('configToJSONSchema', ()=>{
|
|
|
340
369
|
{
|
|
341
370
|
name: 'withCustom',
|
|
342
371
|
type: 'text',
|
|
343
|
-
|
|
372
|
+
jsonSchema: [
|
|
344
373
|
()=>customSchema
|
|
345
374
|
]
|
|
346
375
|
},
|
|
@@ -361,7 +390,7 @@ describe('configToJSONSchema', ()=>{
|
|
|
361
390
|
]
|
|
362
391
|
};
|
|
363
392
|
const sanitizedConfig = await sanitizeConfig(config);
|
|
364
|
-
const schema = configToJSONSchema(sanitizedConfig, 'text');
|
|
393
|
+
const { jsonSchema: schema } = configToJSONSchema(sanitizedConfig, 'text');
|
|
365
394
|
expect(schema?.definitions?.test).toStrictEqual({
|
|
366
395
|
type: 'object',
|
|
367
396
|
additionalProperties: false,
|
|
@@ -422,7 +451,7 @@ describe('configToJSONSchema', ()=>{
|
|
|
422
451
|
const sanitizedConfig = await sanitizeConfig(config);
|
|
423
452
|
expect(typeof sanitizedConfig?.blocks?.[0]?.fields?.[0]?.editor).toBe('object');
|
|
424
453
|
expect(typeof sanitizedConfig.collections[0].fields[0]?.blocks?.[0]?.fields?.[0]?.editor).toBe('object');
|
|
425
|
-
const schema = configToJSONSchema(sanitizedConfig, 'text');
|
|
454
|
+
const { jsonSchema: schema } = configToJSONSchema(sanitizedConfig, 'text');
|
|
426
455
|
const expectedBlockSchema = {
|
|
427
456
|
type: 'object',
|
|
428
457
|
additionalProperties: false,
|
|
@@ -497,7 +526,7 @@ describe('configToJSONSchema', ()=>{
|
|
|
497
526
|
type: 'text',
|
|
498
527
|
required: true,
|
|
499
528
|
defaultValue: 'test',
|
|
500
|
-
|
|
529
|
+
jsonSchema: [
|
|
501
530
|
()=>({
|
|
502
531
|
type: 'string',
|
|
503
532
|
required: false
|
|
@@ -510,7 +539,7 @@ describe('configToJSONSchema', ()=>{
|
|
|
510
539
|
]
|
|
511
540
|
};
|
|
512
541
|
const sanitizedConfig = await sanitizeConfig(config);
|
|
513
|
-
const schema = configToJSONSchema(sanitizedConfig, 'text');
|
|
542
|
+
const { jsonSchema: schema } = configToJSONSchema(sanitizedConfig, 'text');
|
|
514
543
|
// @ts-expect-error
|
|
515
544
|
expect(schema.definitions.test.properties.title.required).toStrictEqual(false);
|
|
516
545
|
});
|
|
@@ -564,14 +593,14 @@ describe('configToJSONSchema', ()=>{
|
|
|
564
593
|
};
|
|
565
594
|
const sanitizedConfig = await sanitizeConfig(config);
|
|
566
595
|
// Without forceInlineBlocks: blocks field uses $ref
|
|
567
|
-
const schemaDefault = configToJSONSchema(sanitizedConfig, 'text');
|
|
596
|
+
const { jsonSchema: schemaDefault } = configToJSONSchema(sanitizedConfig, 'text');
|
|
568
597
|
const arrItemsDefault = schemaDefault.definitions.test.properties.arr.items;
|
|
569
598
|
const arrBlocksDefault = arrItemsDefault.properties.blocks.items.oneOf[0];
|
|
570
599
|
expect(arrBlocksDefault).toStrictEqual({
|
|
571
600
|
$ref: '#/definitions/MyBlock'
|
|
572
601
|
});
|
|
573
602
|
// With forceInlineBlocks: blocks field is inlined, no $ref
|
|
574
|
-
const schemaInline = configToJSONSchema(sanitizedConfig, 'text', undefined, {
|
|
603
|
+
const { jsonSchema: schemaInline } = configToJSONSchema(sanitizedConfig, 'text', undefined, {
|
|
575
604
|
forceInlineBlocks: true
|
|
576
605
|
});
|
|
577
606
|
const arrItemsInline = schemaInline.definitions.test.properties.arr.items;
|