payload 3.85.0 → 4.0.0-internal.1f9ae9a
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/README.md +5 -5
- package/dist/admin/RichText.d.ts +2 -7
- 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/build.d.ts +25 -0
- package/dist/bin/build.d.ts.map +1 -0
- package/dist/bin/build.js +80 -0
- package/dist/bin/build.js.map +1 -0
- package/dist/bin/build.spec.js +170 -0
- package/dist/bin/build.spec.js.map +1 -0
- 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/index.d.ts.map +1 -1
- package/dist/bin/index.js +10 -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 +25 -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 +21 -12
- 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/email/types.d.ts +2 -7
- package/dist/email/types.d.ts.map +1 -1
- package/dist/email/types.js.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 +40 -114
- 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 +968 -637
- package/dist/index.d.ts +31 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -14
- 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/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/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 +7 -27
- 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 +2 -1
- package/dist/uploads/generateFileData.d.ts.map +1 -1
- package/dist/uploads/generateFileData.js +5 -2
- package/dist/uploads/generateFileData.js.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.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.map +1 -1
- package/dist/utilities/configToJSONSchema.js +46 -28
- package/dist/utilities/configToJSONSchema.js.map +1 -1
- package/dist/utilities/configToJSONSchema.spec.js +86 -57
- 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.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 +0 -2
- 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/email/normalizeSendEmailOptions.d.ts +0 -13
- package/dist/email/normalizeSendEmailOptions.d.ts.map +0 -1
- package/dist/email/normalizeSendEmailOptions.js +0 -20
- package/dist/email/normalizeSendEmailOptions.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
package/dist/config/sanitize.js
CHANGED
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
import { en } from '@payloadcms/translations/languages/en';
|
|
2
|
-
import { deepMergeSimple } from '@payloadcms/translations/utilities';
|
|
3
2
|
import { defaultUserCollection } from '../auth/defaultUser.js';
|
|
4
3
|
import { authRootEndpoints } from '../auth/endpoints/index.js';
|
|
5
4
|
import { sanitizeCollection } from '../collections/config/sanitize.js';
|
|
6
5
|
import { migrationsCollection } from '../database/migrations/migrationsCollection.js';
|
|
7
6
|
import { DuplicateCollection, InvalidConfiguration } from '../errors/index.js';
|
|
8
7
|
import { defaultTimezones } from '../fields/baseFields/timezone/defaultTimezones.js';
|
|
9
|
-
import { addFolderCollection } from '../folders/addFolderCollection.js';
|
|
10
|
-
import { addFolderFieldToCollection } from '../folders/addFolderFieldToCollection.js';
|
|
11
8
|
import { sanitizeGlobal } from '../globals/config/sanitize.js';
|
|
9
|
+
import { resolveHierarchyCollections } from '../hierarchy/resolveHierarchyCollections.js';
|
|
12
10
|
import { baseBlockFields, formatLabels, sanitizeFields } from '../index.js';
|
|
13
11
|
import { getLockedDocumentsCollection, lockedDocumentsCollectionSlug } from '../locked-documents/config.js';
|
|
14
12
|
import { getPreferencesCollection, preferencesCollectionSlug } from '../preferences/config.js';
|
|
@@ -25,9 +23,6 @@ const sanitizeAdminConfig = (configToSanitize)=>{
|
|
|
25
23
|
const sanitizedConfig = {
|
|
26
24
|
...configToSanitize
|
|
27
25
|
};
|
|
28
|
-
if (configToSanitize?.compatibility?.allowLocalizedWithinLocalized) {
|
|
29
|
-
process.env.NEXT_PUBLIC_PAYLOAD_COMPATIBILITY_allowLocalizedWithinLocalized = 'true';
|
|
30
|
-
}
|
|
31
26
|
// default logging level will be 'error' if not provided
|
|
32
27
|
sanitizedConfig.loggingLevels = {
|
|
33
28
|
Forbidden: 'info',
|
|
@@ -41,7 +36,7 @@ const sanitizeAdminConfig = (configToSanitize)=>{
|
|
|
41
36
|
widgets: []
|
|
42
37
|
}).widgets.push({
|
|
43
38
|
slug: 'collections',
|
|
44
|
-
Component: '@payloadcms/
|
|
39
|
+
Component: '@payloadcms/ui/rsc#CollectionCards',
|
|
45
40
|
minWidth: 'full'
|
|
46
41
|
});
|
|
47
42
|
sanitizedConfig.admin.dashboard.defaultLayout ??= [
|
|
@@ -144,9 +139,6 @@ export const sanitizeConfig = async (incomingConfig)=>{
|
|
|
144
139
|
lockedDocumentsCollectionSlug,
|
|
145
140
|
preferencesCollectionSlug
|
|
146
141
|
];
|
|
147
|
-
if (config.folders !== false) {
|
|
148
|
-
validRelationships.push(config.folders.slug);
|
|
149
|
-
}
|
|
150
142
|
const dashboardWidgets = config.admin?.dashboard?.widgets ?? [];
|
|
151
143
|
for (const widget of dashboardWidgets){
|
|
152
144
|
if (widget.fields?.length) {
|
|
@@ -187,7 +179,6 @@ export const sanitizeConfig = async (incomingConfig)=>{
|
|
|
187
179
|
config.blocks.push(flattenedSanitizedBlock);
|
|
188
180
|
}
|
|
189
181
|
}
|
|
190
|
-
const folderEnabledCollections = [];
|
|
191
182
|
// Track orderable join fields during sanitization
|
|
192
183
|
const orderableJoins = [];
|
|
193
184
|
for(let i = 0; i < config.collections.length; i++){
|
|
@@ -205,18 +196,7 @@ export const sanitizeConfig = async (incomingConfig)=>{
|
|
|
205
196
|
validRelationships.push(queryPresetsCollectionSlug);
|
|
206
197
|
}
|
|
207
198
|
}
|
|
208
|
-
if (config.folders !== false && config.collections[i].folders) {
|
|
209
|
-
addFolderFieldToCollection({
|
|
210
|
-
collection: config.collections[i],
|
|
211
|
-
collectionSpecific: config.folders.collectionSpecific,
|
|
212
|
-
folderFieldName: config.folders.fieldName,
|
|
213
|
-
folderSlug: config.folders.slug
|
|
214
|
-
});
|
|
215
|
-
}
|
|
216
199
|
config.collections[i] = await sanitizeCollection(config, config.collections[i], richTextSanitizationPromises, validRelationships, orderableJoins);
|
|
217
|
-
if (config.folders !== false && config.collections[i].folders) {
|
|
218
|
-
folderEnabledCollections.push(config.collections[i]);
|
|
219
|
-
}
|
|
220
200
|
}
|
|
221
201
|
// Process orderable features after all collections are sanitized
|
|
222
202
|
const fieldsToAdd = new Map();
|
|
@@ -266,6 +246,8 @@ export const sanitizeConfig = async (incomingConfig)=>{
|
|
|
266
246
|
config.globals[i] = await sanitizeGlobal(config, config.globals[i], richTextSanitizationPromises, validRelationships);
|
|
267
247
|
}
|
|
268
248
|
}
|
|
249
|
+
// Resolve hierarchy relationships across collections (also adds sidebar tabs)
|
|
250
|
+
resolveHierarchyCollections(config);
|
|
269
251
|
if (schedulePublishCollections.length || schedulePublishGlobals.length) {
|
|
270
252
|
;
|
|
271
253
|
((config.jobs ??= {}).tasks ??= []).push(getSchedulePublishTask({
|
|
@@ -290,31 +272,10 @@ export const sanitizeConfig = async (incomingConfig)=>{
|
|
|
290
272
|
defaultJobsCollection = config.jobs.jobsCollectionOverrides({
|
|
291
273
|
defaultJobsCollection
|
|
292
274
|
});
|
|
293
|
-
const hooks = defaultJobsCollection?.hooks;
|
|
294
|
-
// @todo - delete this check in 4.0
|
|
295
|
-
if (hooks && config?.jobs?.runHooks !== true) {
|
|
296
|
-
for (const [hookKey, hook] of Object.entries(hooks)){
|
|
297
|
-
const defaultAmount = hookKey === 'afterRead' || hookKey === 'beforeChange' ? 1 : 0;
|
|
298
|
-
if (hook.length > defaultAmount) {
|
|
299
|
-
// eslint-disable-next-line no-console
|
|
300
|
-
console.warn(`The jobsCollectionOverrides function is returning a collection with an additional ${hookKey} hook defined. These hooks will not run unless the jobs.runHooks option is set to true. Setting this option to true will negatively impact performance.`);
|
|
301
|
-
break;
|
|
302
|
-
}
|
|
303
|
-
}
|
|
304
|
-
}
|
|
305
275
|
}
|
|
306
276
|
const sanitizedJobsCollection = await sanitizeCollection(config, defaultJobsCollection, richTextSanitizationPromises, validRelationships);
|
|
307
277
|
(config.collections ??= []).push(sanitizedJobsCollection);
|
|
308
278
|
}
|
|
309
|
-
if (config.folders !== false && folderEnabledCollections.length) {
|
|
310
|
-
await addFolderCollection({
|
|
311
|
-
collectionSpecific: config.folders.collectionSpecific,
|
|
312
|
-
config: config,
|
|
313
|
-
folderEnabledCollections,
|
|
314
|
-
richTextSanitizationPromises,
|
|
315
|
-
validRelationships
|
|
316
|
-
});
|
|
317
|
-
}
|
|
318
279
|
const lockedDocumentsCollection = getLockedDocumentsCollection(config);
|
|
319
280
|
if (lockedDocumentsCollection) {
|
|
320
281
|
configWithDefaults.collections.push(await sanitizeCollection(config, lockedDocumentsCollection, richTextSanitizationPromises, validRelationships));
|
|
@@ -340,13 +301,8 @@ export const sanitizeConfig = async (incomingConfig)=>{
|
|
|
340
301
|
if (config.serverURL !== '') {
|
|
341
302
|
config.csrf.push(config.serverURL);
|
|
342
303
|
}
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
for (const collection of config.collections){
|
|
346
|
-
// deduped upload adapters
|
|
347
|
-
if (collection.upload?.adapter) {
|
|
348
|
-
uploadAdapters.add(collection.upload.adapter);
|
|
349
|
-
}
|
|
304
|
+
if (!config.storage) {
|
|
305
|
+
config.storage = [];
|
|
350
306
|
}
|
|
351
307
|
if (!config.upload) {
|
|
352
308
|
config.upload = {
|
|
@@ -366,9 +322,6 @@ export const sanitizeConfig = async (incomingConfig)=>{
|
|
|
366
322
|
isRoot: true,
|
|
367
323
|
parentIsLocalized: false
|
|
368
324
|
});
|
|
369
|
-
if (config.editor.i18n && Object.keys(config.editor.i18n).length >= 0) {
|
|
370
|
-
config.i18n.translations = deepMergeSimple(config.i18n.translations, config.editor.i18n);
|
|
371
|
-
}
|
|
372
325
|
}
|
|
373
326
|
const promises = [];
|
|
374
327
|
for (const sanitizeFunction of richTextSanitizationPromises){
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/config/sanitize.ts"],"sourcesContent":["import type { AcceptedLanguages } from '@payloadcms/translations'\n\nimport { en } from '@payloadcms/translations/languages/en'\nimport { deepMergeSimple } from '@payloadcms/translations/utilities'\n\nimport type { OrderableJoinInfo } from '../fields/config/sanitizeJoinField.js'\nimport type { CollectionSlug, GlobalSlug, SanitizedCollectionConfig } from '../index.js'\nimport type { SanitizedJobsConfig } from '../queues/config/types/index.js'\nimport type {\n Config,\n LocalizationConfigWithLabels,\n LocalizationConfigWithNoLabels,\n SanitizedConfig,\n Timezone,\n Widget,\n WidgetInstance,\n} from './types.js'\n\nimport { defaultUserCollection } from '../auth/defaultUser.js'\nimport { authRootEndpoints } from '../auth/endpoints/index.js'\nimport { sanitizeCollection } from '../collections/config/sanitize.js'\nimport { migrationsCollection } from '../database/migrations/migrationsCollection.js'\nimport { DuplicateCollection, InvalidConfiguration } from '../errors/index.js'\nimport { defaultTimezones } from '../fields/baseFields/timezone/defaultTimezones.js'\nimport { addFolderCollection } from '../folders/addFolderCollection.js'\nimport { addFolderFieldToCollection } from '../folders/addFolderFieldToCollection.js'\nimport { sanitizeGlobal } from '../globals/config/sanitize.js'\nimport { baseBlockFields, formatLabels, sanitizeFields } from '../index.js'\nimport {\n getLockedDocumentsCollection,\n lockedDocumentsCollectionSlug,\n} from '../locked-documents/config.js'\nimport { getPreferencesCollection, preferencesCollectionSlug } from '../preferences/config.js'\nimport { getQueryPresetsConfig, queryPresetsCollectionSlug } from '../query-presets/config.js'\nimport { getDefaultJobsCollection, jobsCollectionSlug } from '../queues/config/collection.js'\nimport { getJobStatsGlobal } from '../queues/config/global.js'\nimport { flattenAllFields, flattenBlock } from '../utilities/flattenAllFields.js'\nimport { hasScheduledPublishEnabled } from '../utilities/getVersionsConfig.js'\nimport { validateTimezones } from '../utilities/validateTimezones.js'\nimport { getSchedulePublishTask } from '../versions/schedule/job.js'\nimport { addDefaultsToConfig } from './defaults.js'\nimport { addOrderableEndpoint, addOrderableFieldsAndHook } from './orderable/index.js'\n\nconst sanitizeAdminConfig = (configToSanitize: Config): Partial<SanitizedConfig> => {\n const sanitizedConfig = { ...configToSanitize }\n\n if (configToSanitize?.compatibility?.allowLocalizedWithinLocalized) {\n process.env.NEXT_PUBLIC_PAYLOAD_COMPATIBILITY_allowLocalizedWithinLocalized = 'true'\n }\n\n // default logging level will be 'error' if not provided\n sanitizedConfig.loggingLevels = {\n Forbidden: 'info',\n Locked: 'info',\n MissingFile: 'info',\n NotFound: 'info',\n ValidationError: 'info',\n ...(sanitizedConfig.loggingLevels || {}),\n }\n ;(sanitizedConfig.admin!.dashboard ??= { widgets: [] }).widgets.push({\n slug: 'collections',\n Component: '@payloadcms/next/rsc#CollectionCards',\n minWidth: 'full',\n })\n sanitizedConfig.admin!.dashboard.defaultLayout ??= [\n {\n widgetSlug: 'collections',\n width: 'full',\n } satisfies WidgetInstance,\n ]\n\n // add default user collection if none provided\n if (!sanitizedConfig?.admin?.user) {\n const firstCollectionWithAuth = sanitizedConfig.collections!.find(({ auth }) => Boolean(auth))\n\n if (firstCollectionWithAuth) {\n sanitizedConfig.admin!.user = firstCollectionWithAuth.slug\n } else {\n sanitizedConfig.admin!.user = defaultUserCollection.slug\n sanitizedConfig.collections!.push(defaultUserCollection)\n }\n }\n\n const userCollection = sanitizedConfig.collections!.find(\n ({ slug }) => slug === sanitizedConfig.admin!.user,\n )\n\n if (!userCollection || !userCollection.auth) {\n throw new InvalidConfiguration(\n `${sanitizedConfig.admin!.user} is not a valid admin user collection`,\n )\n }\n\n if (sanitizedConfig?.admin?.timezones) {\n if (typeof configToSanitize?.admin?.timezones?.supportedTimezones === 'function') {\n sanitizedConfig.admin.timezones.supportedTimezones =\n configToSanitize.admin.timezones.supportedTimezones({ defaultTimezones })\n }\n\n if (!sanitizedConfig?.admin?.timezones?.supportedTimezones) {\n sanitizedConfig.admin.timezones.supportedTimezones = defaultTimezones\n }\n } else {\n sanitizedConfig.admin!.timezones = {\n supportedTimezones: defaultTimezones,\n }\n }\n\n validateTimezones({\n source: 'admin.timezones.supportedTimezones',\n timezones: sanitizedConfig.admin!.timezones.supportedTimezones as Timezone[],\n })\n\n return sanitizedConfig as unknown as Partial<SanitizedConfig>\n}\n\nexport const sanitizeConfig = async (incomingConfig: Config): Promise<SanitizedConfig> => {\n const configWithDefaults = addDefaultsToConfig(incomingConfig)\n\n const config: Partial<SanitizedConfig> = sanitizeAdminConfig(configWithDefaults)\n\n if (!config.endpoints) {\n config.endpoints = []\n }\n\n for (const endpoint of authRootEndpoints) {\n config.endpoints.push(endpoint)\n }\n\n if (config.localization && config.localization.locales?.length > 0) {\n // clone localization config so to not break everything\n const firstLocale = config.localization.locales[0]\n if (typeof firstLocale === 'string') {\n config.localization.localeCodes = [\n ...(config.localization as unknown as LocalizationConfigWithNoLabels).locales,\n ]\n\n // is string[], so convert to Locale[]\n config.localization.locales = (\n config.localization as unknown as LocalizationConfigWithNoLabels\n ).locales.map((locale) => ({\n code: locale,\n label: locale,\n rtl: false,\n toString: () => locale,\n }))\n } else {\n // is Locale[], so convert to string[] for localeCodes\n config.localization.localeCodes = config.localization.locales.map((locale) => locale.code)\n\n config.localization.locales = (\n config.localization as LocalizationConfigWithLabels\n ).locales.map((locale) => ({\n ...locale,\n toString: () => locale.code,\n }))\n }\n\n // Default fallback to true if not provided\n config.localization.fallback = config.localization?.fallback ?? true\n }\n\n const i18nConfig: SanitizedConfig['i18n'] = {\n fallbackLanguage: 'en',\n supportedLanguages: {\n en,\n },\n translations: {},\n }\n\n if (incomingConfig?.i18n) {\n i18nConfig.supportedLanguages =\n incomingConfig.i18n?.supportedLanguages || i18nConfig.supportedLanguages\n\n const supportedLangKeys = <AcceptedLanguages[]>Object.keys(i18nConfig.supportedLanguages)\n const fallbackLang = incomingConfig.i18n?.fallbackLanguage || i18nConfig.fallbackLanguage\n\n i18nConfig.fallbackLanguage = supportedLangKeys.includes(fallbackLang)\n ? fallbackLang\n : supportedLangKeys[0]!\n i18nConfig.translations =\n (incomingConfig.i18n?.translations as SanitizedConfig['i18n']['translations']) ||\n i18nConfig.translations\n }\n\n config.i18n = i18nConfig\n\n const richTextSanitizationPromises: Array<(config: SanitizedConfig) => Promise<void>> = []\n\n const schedulePublishCollections: CollectionSlug[] = []\n\n const queryPresetsCollections: CollectionSlug[] = []\n\n const schedulePublishGlobals: GlobalSlug[] = []\n\n const collectionSlugs = new Set<CollectionSlug>()\n\n const validRelationships = [\n ...(config.collections?.map((c) => c.slug) ?? []),\n jobsCollectionSlug,\n lockedDocumentsCollectionSlug,\n preferencesCollectionSlug,\n ]\n\n if (config.folders !== false) {\n validRelationships.push(config.folders!.slug)\n }\n\n const dashboardWidgets = config.admin?.dashboard?.widgets ?? ([] as Widget[])\n\n for (const widget of dashboardWidgets) {\n if (widget.fields?.length) {\n widget.fields = await sanitizeFields({\n config: config as unknown as Config,\n existingFieldNames: new Set(),\n fields: widget.fields,\n parentIsLocalized: false,\n richTextSanitizationPromises,\n validRelationships,\n })\n }\n }\n\n /**\n * Blocks sanitization needs to happen before collections, as collection/global join field sanitization needs config.blocks\n * to be populated with the sanitized blocks\n */\n config.blocks = []\n\n if (incomingConfig.blocks?.length) {\n for (const block of incomingConfig.blocks) {\n const sanitizedBlock = block\n\n if (sanitizedBlock._sanitized === true) {\n continue\n }\n sanitizedBlock._sanitized = true\n\n sanitizedBlock.fields = sanitizedBlock.fields.concat(baseBlockFields)\n\n sanitizedBlock.labels = !sanitizedBlock.labels\n ? formatLabels(sanitizedBlock.slug)\n : sanitizedBlock.labels\n\n sanitizedBlock.fields = await sanitizeFields({\n config: config as unknown as Config,\n existingFieldNames: new Set(),\n fields: sanitizedBlock.fields,\n parentIsLocalized: false,\n richTextSanitizationPromises,\n validRelationships,\n })\n\n const flattenedSanitizedBlock = flattenBlock({ block })\n\n config.blocks.push(flattenedSanitizedBlock)\n }\n }\n\n const folderEnabledCollections: SanitizedCollectionConfig[] = []\n\n // Track orderable join fields during sanitization\n const orderableJoins: OrderableJoinInfo[] = []\n\n for (let i = 0; i < config.collections!.length; i++) {\n if (collectionSlugs.has(config.collections![i]!.slug)) {\n throw new DuplicateCollection('slug', config.collections![i]!.slug)\n }\n\n collectionSlugs.add(config.collections![i]!.slug)\n\n const draftsConfig = config.collections![i]?.versions?.drafts\n\n if (typeof draftsConfig === 'object' && draftsConfig.schedulePublish) {\n schedulePublishCollections.push(config.collections![i]!.slug)\n }\n\n if (config.collections![i]!.enableQueryPresets) {\n queryPresetsCollections.push(config.collections![i]!.slug)\n\n if (!validRelationships.includes(queryPresetsCollectionSlug)) {\n validRelationships.push(queryPresetsCollectionSlug)\n }\n }\n\n if (config.folders !== false && config.collections![i]!.folders) {\n addFolderFieldToCollection({\n collection: config.collections![i]!,\n collectionSpecific: config.folders!.collectionSpecific,\n folderFieldName: config.folders!.fieldName,\n folderSlug: config.folders!.slug,\n })\n }\n\n config.collections![i] = await sanitizeCollection(\n config as unknown as Config,\n config.collections![i]!,\n richTextSanitizationPromises,\n validRelationships,\n orderableJoins,\n )\n\n if (config.folders !== false && config.collections![i]!.folders) {\n folderEnabledCollections.push(config.collections![i]!)\n }\n }\n\n // Process orderable features after all collections are sanitized\n const fieldsToAdd = new Map<SanitizedCollectionConfig, string[]>()\n const joinFieldPathsByCollection = new Map<string, Map<string, string>>()\n\n // Handle collection.orderable\n for (const collection of config.collections!) {\n if (collection.orderable) {\n const currentFields = fieldsToAdd.get(collection) || []\n fieldsToAdd.set(collection, [...currentFields, '_order'])\n collection.defaultSort = collection.defaultSort ?? '_order'\n }\n }\n\n // Handle orderable join fields (tracked during sanitization)\n for (const joinInfo of orderableJoins) {\n const targetCollection = config.collections!.find(\n (c) => c.slug === joinInfo.targetCollectionSlug,\n )\n if (targetCollection) {\n const currentFields = fieldsToAdd.get(targetCollection) || []\n fieldsToAdd.set(targetCollection, [...currentFields, joinInfo.orderFieldName])\n\n const currentJoinFieldPaths =\n joinFieldPathsByCollection.get(targetCollection.slug) || new Map<string, string>()\n currentJoinFieldPaths.set(joinInfo.orderFieldName, joinInfo.joinFieldOn)\n joinFieldPathsByCollection.set(targetCollection.slug, currentJoinFieldPaths)\n }\n }\n\n // Add fields, hooks, and update flattenedFields\n for (const [collection, orderableFields] of fieldsToAdd) {\n await addOrderableFieldsAndHook(\n collection,\n config as unknown as Config,\n orderableFields,\n joinFieldPathsByCollection,\n )\n // Regenerate flattenedFields since we added new fields\n collection.flattenedFields = flattenAllFields({ fields: collection.fields })\n }\n\n // Add endpoint if any orderable features exist\n if (fieldsToAdd.size > 0) {\n addOrderableEndpoint(config as SanitizedConfig, joinFieldPathsByCollection)\n }\n\n if (config.globals!.length > 0) {\n for (let i = 0; i < config.globals!.length; i++) {\n if (hasScheduledPublishEnabled(config.globals![i]!)) {\n schedulePublishGlobals.push(config.globals![i]!.slug)\n }\n\n config.globals![i] = await sanitizeGlobal(\n config as unknown as Config,\n config.globals![i]!,\n richTextSanitizationPromises,\n validRelationships,\n )\n }\n }\n\n if (schedulePublishCollections.length || schedulePublishGlobals.length) {\n ;((config.jobs ??= {} as SanitizedJobsConfig).tasks ??= []).push(\n getSchedulePublishTask({\n adminUserSlug: config.admin!.user,\n collections: schedulePublishCollections,\n globals: schedulePublishGlobals,\n }),\n )\n }\n\n ;(config.jobs ??= {} as SanitizedJobsConfig).enabled = Boolean(\n (Array.isArray(configWithDefaults.jobs?.tasks) && configWithDefaults.jobs?.tasks?.length) ||\n (Array.isArray(configWithDefaults.jobs?.workflows) &&\n configWithDefaults.jobs?.workflows?.length),\n )\n\n // Need to add default jobs collection before locked documents collections\n if (config.jobs.enabled) {\n // Check for schedule property in both tasks and workflows\n const hasScheduleProperty =\n (config?.jobs?.tasks?.length && config.jobs.tasks.some((task) => task.schedule)) ||\n (config?.jobs?.workflows?.length &&\n config.jobs.workflows.some((workflow) => workflow.schedule))\n\n if (hasScheduleProperty) {\n config.jobs.scheduling = true\n // Add payload-jobs-stats global for tracking when a job of a specific slug was last run\n ;(config.globals ??= []).push(\n await sanitizeGlobal(\n config as unknown as Config,\n getJobStatsGlobal(config as unknown as Config),\n richTextSanitizationPromises,\n validRelationships,\n ),\n )\n\n config.jobs.stats = true\n }\n\n let defaultJobsCollection = getDefaultJobsCollection(config.jobs)\n\n if (typeof config.jobs.jobsCollectionOverrides === 'function') {\n defaultJobsCollection = config.jobs.jobsCollectionOverrides({\n defaultJobsCollection,\n })\n\n const hooks = defaultJobsCollection?.hooks\n // @todo - delete this check in 4.0\n if (hooks && config?.jobs?.runHooks !== true) {\n for (const [hookKey, hook] of Object.entries(hooks)) {\n const defaultAmount = hookKey === 'afterRead' || hookKey === 'beforeChange' ? 1 : 0\n if (hook.length > defaultAmount) {\n // eslint-disable-next-line no-console\n console.warn(\n `The jobsCollectionOverrides function is returning a collection with an additional ${hookKey} hook defined. These hooks will not run unless the jobs.runHooks option is set to true. Setting this option to true will negatively impact performance.`,\n )\n break\n }\n }\n }\n }\n const sanitizedJobsCollection = await sanitizeCollection(\n config as unknown as Config,\n defaultJobsCollection,\n richTextSanitizationPromises,\n validRelationships,\n )\n\n ;(config.collections ??= []).push(sanitizedJobsCollection)\n }\n\n if (config.folders !== false && folderEnabledCollections.length) {\n await addFolderCollection({\n collectionSpecific: config.folders!.collectionSpecific,\n config: config as unknown as Config,\n folderEnabledCollections,\n richTextSanitizationPromises,\n validRelationships,\n })\n }\n\n const lockedDocumentsCollection = getLockedDocumentsCollection(config as unknown as Config)\n\n if (lockedDocumentsCollection) {\n configWithDefaults.collections!.push(\n await sanitizeCollection(\n config as unknown as Config,\n lockedDocumentsCollection,\n richTextSanitizationPromises,\n validRelationships,\n ),\n )\n }\n\n configWithDefaults.collections!.push(\n await sanitizeCollection(\n config as unknown as Config,\n getPreferencesCollection(config as unknown as Config),\n richTextSanitizationPromises,\n validRelationships,\n ),\n )\n\n const migrations = await sanitizeCollection(\n config as unknown as Config,\n migrationsCollection,\n richTextSanitizationPromises,\n validRelationships,\n )\n\n // @ts-expect-error indexSortableFields is only valid for @payloadcms/db-mongodb\n if (config?.db?.indexSortableFields) {\n migrations.indexes = [\n {\n fields: ['batch', 'name'],\n unique: false,\n },\n ]\n }\n configWithDefaults.collections!.push(migrations)\n\n if (queryPresetsCollections.length > 0) {\n configWithDefaults.collections!.push(\n await sanitizeCollection(\n config as unknown as Config,\n getQueryPresetsConfig(config as unknown as Config),\n richTextSanitizationPromises,\n validRelationships,\n ),\n )\n }\n\n if (config.serverURL !== '') {\n config.csrf!.push(config.serverURL!)\n }\n\n const uploadAdapters = new Set<string>()\n // interact with all collections\n for (const collection of config.collections!) {\n // deduped upload adapters\n if (collection.upload?.adapter) {\n uploadAdapters.add(collection.upload.adapter)\n }\n }\n\n if (!config.upload) {\n config.upload = { adapters: [] }\n }\n\n config.upload.adapters = Array.from(\n new Set(config.collections!.map((c) => c.upload?.adapter).filter(Boolean) as string[]),\n )\n\n // Pass through the email config as is so adapters don't break\n if (incomingConfig.email) {\n config.email = incomingConfig.email\n }\n\n /*\n Execute richText sanitization\n */\n if (typeof incomingConfig.editor === 'function') {\n config.editor = await incomingConfig.editor({\n config: config as SanitizedConfig,\n isRoot: true,\n parentIsLocalized: false,\n })\n if (config.editor.i18n && Object.keys(config.editor.i18n).length >= 0) {\n config.i18n.translations = deepMergeSimple(config.i18n.translations, config.editor.i18n)\n }\n }\n\n const promises: Promise<void>[] = []\n\n for (const sanitizeFunction of richTextSanitizationPromises) {\n promises.push(sanitizeFunction(config as SanitizedConfig))\n }\n\n await Promise.all(promises)\n\n return config as SanitizedConfig\n}\n"],"names":["en","deepMergeSimple","defaultUserCollection","authRootEndpoints","sanitizeCollection","migrationsCollection","DuplicateCollection","InvalidConfiguration","defaultTimezones","addFolderCollection","addFolderFieldToCollection","sanitizeGlobal","baseBlockFields","formatLabels","sanitizeFields","getLockedDocumentsCollection","lockedDocumentsCollectionSlug","getPreferencesCollection","preferencesCollectionSlug","getQueryPresetsConfig","queryPresetsCollectionSlug","getDefaultJobsCollection","jobsCollectionSlug","getJobStatsGlobal","flattenAllFields","flattenBlock","hasScheduledPublishEnabled","validateTimezones","getSchedulePublishTask","addDefaultsToConfig","addOrderableEndpoint","addOrderableFieldsAndHook","sanitizeAdminConfig","configToSanitize","sanitizedConfig","compatibility","allowLocalizedWithinLocalized","process","env","NEXT_PUBLIC_PAYLOAD_COMPATIBILITY_allowLocalizedWithinLocalized","loggingLevels","Forbidden","Locked","MissingFile","NotFound","ValidationError","admin","dashboard","widgets","push","slug","Component","minWidth","defaultLayout","widgetSlug","width","user","firstCollectionWithAuth","collections","find","auth","Boolean","userCollection","timezones","supportedTimezones","source","sanitizeConfig","incomingConfig","configWithDefaults","config","endpoints","endpoint","localization","locales","length","firstLocale","localeCodes","map","locale","code","label","rtl","toString","fallback","i18nConfig","fallbackLanguage","supportedLanguages","translations","i18n","supportedLangKeys","Object","keys","fallbackLang","includes","richTextSanitizationPromises","schedulePublishCollections","queryPresetsCollections","schedulePublishGlobals","collectionSlugs","Set","validRelationships","c","folders","dashboardWidgets","widget","fields","existingFieldNames","parentIsLocalized","blocks","block","sanitizedBlock","_sanitized","concat","labels","flattenedSanitizedBlock","folderEnabledCollections","orderableJoins","i","has","add","draftsConfig","versions","drafts","schedulePublish","enableQueryPresets","collection","collectionSpecific","folderFieldName","fieldName","folderSlug","fieldsToAdd","Map","joinFieldPathsByCollection","orderable","currentFields","get","set","defaultSort","joinInfo","targetCollection","targetCollectionSlug","orderFieldName","currentJoinFieldPaths","joinFieldOn","orderableFields","flattenedFields","size","globals","jobs","tasks","adminUserSlug","enabled","Array","isArray","workflows","hasScheduleProperty","some","task","schedule","workflow","scheduling","stats","defaultJobsCollection","jobsCollectionOverrides","hooks","runHooks","hookKey","hook","entries","defaultAmount","console","warn","sanitizedJobsCollection","lockedDocumentsCollection","migrations","db","indexSortableFields","indexes","unique","serverURL","csrf","uploadAdapters","upload","adapter","adapters","from","filter","email","editor","isRoot","promises","sanitizeFunction","Promise","all"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/config/sanitize.ts"],"sourcesContent":["import type { AcceptedLanguages } from '@payloadcms/translations'\n\nimport { en } from '@payloadcms/translations/languages/en'\n\nimport type { OrderableJoinInfo } from '../fields/config/sanitizeJoinField.js'\nimport type { CollectionSlug, GlobalSlug, SanitizedCollectionConfig } from '../index.js'\nimport type { SanitizedJobsConfig } from '../queues/config/types/index.js'\nimport type {\n Config,\n LocalizationConfigWithLabels,\n LocalizationConfigWithNoLabels,\n SanitizedConfig,\n Timezone,\n Widget,\n WidgetInstance,\n} from './types.js'\n\nimport { defaultUserCollection } from '../auth/defaultUser.js'\nimport { authRootEndpoints } from '../auth/endpoints/index.js'\nimport { sanitizeCollection } from '../collections/config/sanitize.js'\nimport { migrationsCollection } from '../database/migrations/migrationsCollection.js'\nimport { DuplicateCollection, InvalidConfiguration } from '../errors/index.js'\nimport { defaultTimezones } from '../fields/baseFields/timezone/defaultTimezones.js'\nimport { sanitizeGlobal } from '../globals/config/sanitize.js'\nimport { resolveHierarchyCollections } from '../hierarchy/resolveHierarchyCollections.js'\nimport { baseBlockFields, formatLabels, sanitizeFields } from '../index.js'\nimport {\n getLockedDocumentsCollection,\n lockedDocumentsCollectionSlug,\n} from '../locked-documents/config.js'\nimport { getPreferencesCollection, preferencesCollectionSlug } from '../preferences/config.js'\nimport { getQueryPresetsConfig, queryPresetsCollectionSlug } from '../query-presets/config.js'\nimport { getDefaultJobsCollection, jobsCollectionSlug } from '../queues/config/collection.js'\nimport { getJobStatsGlobal } from '../queues/config/global.js'\nimport { flattenAllFields, flattenBlock } from '../utilities/flattenAllFields.js'\nimport { hasScheduledPublishEnabled } from '../utilities/getVersionsConfig.js'\nimport { validateTimezones } from '../utilities/validateTimezones.js'\nimport { getSchedulePublishTask } from '../versions/schedule/job.js'\nimport { addDefaultsToConfig } from './defaults.js'\nimport { addOrderableEndpoint, addOrderableFieldsAndHook } from './orderable/index.js'\n\nconst sanitizeAdminConfig = (configToSanitize: Config): Partial<SanitizedConfig> => {\n const sanitizedConfig = { ...configToSanitize }\n\n // default logging level will be 'error' if not provided\n sanitizedConfig.loggingLevels = {\n Forbidden: 'info',\n Locked: 'info',\n MissingFile: 'info',\n NotFound: 'info',\n ValidationError: 'info',\n ...(sanitizedConfig.loggingLevels || {}),\n }\n ;(sanitizedConfig.admin!.dashboard ??= { widgets: [] }).widgets.push({\n slug: 'collections',\n Component: '@payloadcms/ui/rsc#CollectionCards',\n minWidth: 'full',\n })\n sanitizedConfig.admin!.dashboard.defaultLayout ??= [\n {\n widgetSlug: 'collections',\n width: 'full',\n } satisfies WidgetInstance,\n ]\n\n // add default user collection if none provided\n if (!sanitizedConfig?.admin?.user) {\n const firstCollectionWithAuth = sanitizedConfig.collections!.find(({ auth }) => Boolean(auth))\n\n if (firstCollectionWithAuth) {\n sanitizedConfig.admin!.user = firstCollectionWithAuth.slug\n } else {\n sanitizedConfig.admin!.user = defaultUserCollection.slug\n sanitizedConfig.collections!.push(defaultUserCollection)\n }\n }\n\n const userCollection = sanitizedConfig.collections!.find(\n ({ slug }) => slug === sanitizedConfig.admin!.user,\n )\n\n if (!userCollection || !userCollection.auth) {\n throw new InvalidConfiguration(\n `${sanitizedConfig.admin!.user} is not a valid admin user collection`,\n )\n }\n\n if (sanitizedConfig?.admin?.timezones) {\n if (typeof configToSanitize?.admin?.timezones?.supportedTimezones === 'function') {\n sanitizedConfig.admin.timezones.supportedTimezones =\n configToSanitize.admin.timezones.supportedTimezones({ defaultTimezones })\n }\n\n if (!sanitizedConfig?.admin?.timezones?.supportedTimezones) {\n sanitizedConfig.admin.timezones.supportedTimezones = defaultTimezones\n }\n } else {\n sanitizedConfig.admin!.timezones = {\n supportedTimezones: defaultTimezones,\n }\n }\n\n validateTimezones({\n source: 'admin.timezones.supportedTimezones',\n timezones: sanitizedConfig.admin!.timezones.supportedTimezones as Timezone[],\n })\n\n return sanitizedConfig as unknown as Partial<SanitizedConfig>\n}\n\nexport const sanitizeConfig = async (incomingConfig: Config): Promise<SanitizedConfig> => {\n const configWithDefaults = addDefaultsToConfig(incomingConfig)\n\n const config: Partial<SanitizedConfig> = sanitizeAdminConfig(configWithDefaults)\n\n if (!config.endpoints) {\n config.endpoints = []\n }\n\n for (const endpoint of authRootEndpoints) {\n config.endpoints.push(endpoint)\n }\n\n if (config.localization && config.localization.locales?.length > 0) {\n // clone localization config so to not break everything\n const firstLocale = config.localization.locales[0]\n if (typeof firstLocale === 'string') {\n config.localization.localeCodes = [\n ...(config.localization as unknown as LocalizationConfigWithNoLabels).locales,\n ]\n\n // is string[], so convert to Locale[]\n config.localization.locales = (\n config.localization as unknown as LocalizationConfigWithNoLabels\n ).locales.map((locale) => ({\n code: locale,\n label: locale,\n rtl: false,\n toString: () => locale,\n }))\n } else {\n // is Locale[], so convert to string[] for localeCodes\n config.localization.localeCodes = config.localization.locales.map((locale) => locale.code)\n\n config.localization.locales = (\n config.localization as LocalizationConfigWithLabels\n ).locales.map((locale) => ({\n ...locale,\n toString: () => locale.code,\n }))\n }\n\n // Default fallback to true if not provided\n config.localization.fallback = config.localization?.fallback ?? true\n }\n\n const i18nConfig: SanitizedConfig['i18n'] = {\n fallbackLanguage: 'en',\n supportedLanguages: {\n en,\n },\n translations: {},\n }\n\n if (incomingConfig?.i18n) {\n i18nConfig.supportedLanguages =\n incomingConfig.i18n?.supportedLanguages || i18nConfig.supportedLanguages\n\n const supportedLangKeys = <AcceptedLanguages[]>Object.keys(i18nConfig.supportedLanguages)\n const fallbackLang = incomingConfig.i18n?.fallbackLanguage || i18nConfig.fallbackLanguage\n\n i18nConfig.fallbackLanguage = supportedLangKeys.includes(fallbackLang)\n ? fallbackLang\n : supportedLangKeys[0]!\n i18nConfig.translations =\n (incomingConfig.i18n?.translations as SanitizedConfig['i18n']['translations']) ||\n i18nConfig.translations\n }\n\n config.i18n = i18nConfig\n\n const richTextSanitizationPromises: Array<(config: SanitizedConfig) => Promise<void>> = []\n\n const schedulePublishCollections: CollectionSlug[] = []\n\n const queryPresetsCollections: CollectionSlug[] = []\n\n const schedulePublishGlobals: GlobalSlug[] = []\n\n const collectionSlugs = new Set<CollectionSlug>()\n\n const validRelationships = [\n ...(config.collections?.map((c) => c.slug) ?? []),\n jobsCollectionSlug,\n lockedDocumentsCollectionSlug,\n preferencesCollectionSlug,\n ]\n\n const dashboardWidgets = config.admin?.dashboard?.widgets ?? ([] as Widget[])\n\n for (const widget of dashboardWidgets) {\n if (widget.fields?.length) {\n widget.fields = await sanitizeFields({\n config: config as unknown as Config,\n existingFieldNames: new Set(),\n fields: widget.fields,\n parentIsLocalized: false,\n richTextSanitizationPromises,\n validRelationships,\n })\n }\n }\n\n /**\n * Blocks sanitization needs to happen before collections, as collection/global join field sanitization needs config.blocks\n * to be populated with the sanitized blocks\n */\n config.blocks = []\n\n if (incomingConfig.blocks?.length) {\n for (const block of incomingConfig.blocks) {\n const sanitizedBlock = block\n\n if (sanitizedBlock._sanitized === true) {\n continue\n }\n sanitizedBlock._sanitized = true\n\n sanitizedBlock.fields = sanitizedBlock.fields.concat(baseBlockFields)\n\n sanitizedBlock.labels = !sanitizedBlock.labels\n ? formatLabels(sanitizedBlock.slug)\n : sanitizedBlock.labels\n\n sanitizedBlock.fields = await sanitizeFields({\n config: config as unknown as Config,\n existingFieldNames: new Set(),\n fields: sanitizedBlock.fields,\n parentIsLocalized: false,\n richTextSanitizationPromises,\n validRelationships,\n })\n\n const flattenedSanitizedBlock = flattenBlock({ block })\n\n config.blocks.push(flattenedSanitizedBlock)\n }\n }\n\n // Track orderable join fields during sanitization\n const orderableJoins: OrderableJoinInfo[] = []\n\n for (let i = 0; i < config.collections!.length; i++) {\n if (collectionSlugs.has(config.collections![i]!.slug)) {\n throw new DuplicateCollection('slug', config.collections![i]!.slug)\n }\n\n collectionSlugs.add(config.collections![i]!.slug)\n\n const draftsConfig = config.collections![i]?.versions?.drafts\n\n if (typeof draftsConfig === 'object' && draftsConfig.schedulePublish) {\n schedulePublishCollections.push(config.collections![i]!.slug)\n }\n\n if (config.collections![i]!.enableQueryPresets) {\n queryPresetsCollections.push(config.collections![i]!.slug)\n\n if (!validRelationships.includes(queryPresetsCollectionSlug)) {\n validRelationships.push(queryPresetsCollectionSlug)\n }\n }\n\n config.collections![i] = await sanitizeCollection(\n config as unknown as Config,\n config.collections![i]!,\n richTextSanitizationPromises,\n validRelationships,\n orderableJoins,\n )\n }\n\n // Process orderable features after all collections are sanitized\n const fieldsToAdd = new Map<SanitizedCollectionConfig, string[]>()\n const joinFieldPathsByCollection = new Map<string, Map<string, string>>()\n\n // Handle collection.orderable\n for (const collection of config.collections!) {\n if (collection.orderable) {\n const currentFields = fieldsToAdd.get(collection) || []\n fieldsToAdd.set(collection, [...currentFields, '_order'])\n collection.defaultSort = collection.defaultSort ?? '_order'\n }\n }\n\n // Handle orderable join fields (tracked during sanitization)\n for (const joinInfo of orderableJoins) {\n const targetCollection = config.collections!.find(\n (c) => c.slug === joinInfo.targetCollectionSlug,\n )\n if (targetCollection) {\n const currentFields = fieldsToAdd.get(targetCollection) || []\n fieldsToAdd.set(targetCollection, [...currentFields, joinInfo.orderFieldName])\n\n const currentJoinFieldPaths =\n joinFieldPathsByCollection.get(targetCollection.slug) || new Map<string, string>()\n currentJoinFieldPaths.set(joinInfo.orderFieldName, joinInfo.joinFieldOn)\n joinFieldPathsByCollection.set(targetCollection.slug, currentJoinFieldPaths)\n }\n }\n\n // Add fields, hooks, and update flattenedFields\n for (const [collection, orderableFields] of fieldsToAdd) {\n await addOrderableFieldsAndHook(\n collection,\n config as unknown as Config,\n orderableFields,\n joinFieldPathsByCollection,\n )\n // Regenerate flattenedFields since we added new fields\n collection.flattenedFields = flattenAllFields({ fields: collection.fields })\n }\n\n // Add endpoint if any orderable features exist\n if (fieldsToAdd.size > 0) {\n addOrderableEndpoint(config as SanitizedConfig, joinFieldPathsByCollection)\n }\n\n if (config.globals!.length > 0) {\n for (let i = 0; i < config.globals!.length; i++) {\n if (hasScheduledPublishEnabled(config.globals![i]!)) {\n schedulePublishGlobals.push(config.globals![i]!.slug)\n }\n\n config.globals![i] = await sanitizeGlobal(\n config as unknown as Config,\n config.globals![i]!,\n richTextSanitizationPromises,\n validRelationships,\n )\n }\n }\n\n // Resolve hierarchy relationships across collections (also adds sidebar tabs)\n resolveHierarchyCollections(config as unknown as Config)\n\n if (schedulePublishCollections.length || schedulePublishGlobals.length) {\n ;((config.jobs ??= {} as SanitizedJobsConfig).tasks ??= []).push(\n getSchedulePublishTask({\n adminUserSlug: config.admin!.user,\n collections: schedulePublishCollections,\n globals: schedulePublishGlobals,\n }),\n )\n }\n\n ;(config.jobs ??= {} as SanitizedJobsConfig).enabled = Boolean(\n (Array.isArray(configWithDefaults.jobs?.tasks) && configWithDefaults.jobs?.tasks?.length) ||\n (Array.isArray(configWithDefaults.jobs?.workflows) &&\n configWithDefaults.jobs?.workflows?.length),\n )\n\n // Need to add default jobs collection before locked documents collections\n if (config.jobs.enabled) {\n // Check for schedule property in both tasks and workflows\n const hasScheduleProperty =\n (config?.jobs?.tasks?.length && config.jobs.tasks.some((task) => task.schedule)) ||\n (config?.jobs?.workflows?.length &&\n config.jobs.workflows.some((workflow) => workflow.schedule))\n\n if (hasScheduleProperty) {\n config.jobs.scheduling = true\n // Add payload-jobs-stats global for tracking when a job of a specific slug was last run\n ;(config.globals ??= []).push(\n await sanitizeGlobal(\n config as unknown as Config,\n getJobStatsGlobal(config as unknown as Config),\n richTextSanitizationPromises,\n validRelationships,\n ),\n )\n\n config.jobs.stats = true\n }\n\n let defaultJobsCollection = getDefaultJobsCollection(config.jobs)\n\n if (typeof config.jobs.jobsCollectionOverrides === 'function') {\n defaultJobsCollection = config.jobs.jobsCollectionOverrides({\n defaultJobsCollection,\n })\n }\n const sanitizedJobsCollection = await sanitizeCollection(\n config as unknown as Config,\n defaultJobsCollection,\n richTextSanitizationPromises,\n validRelationships,\n )\n\n ;(config.collections ??= []).push(sanitizedJobsCollection)\n }\n\n const lockedDocumentsCollection = getLockedDocumentsCollection(config as unknown as Config)\n\n if (lockedDocumentsCollection) {\n configWithDefaults.collections!.push(\n await sanitizeCollection(\n config as unknown as Config,\n lockedDocumentsCollection,\n richTextSanitizationPromises,\n validRelationships,\n ),\n )\n }\n\n configWithDefaults.collections!.push(\n await sanitizeCollection(\n config as unknown as Config,\n getPreferencesCollection(config as unknown as Config),\n richTextSanitizationPromises,\n validRelationships,\n ),\n )\n\n const migrations = await sanitizeCollection(\n config as unknown as Config,\n migrationsCollection,\n richTextSanitizationPromises,\n validRelationships,\n )\n\n // @ts-expect-error indexSortableFields is only valid for @payloadcms/db-mongodb\n if (config?.db?.indexSortableFields) {\n migrations.indexes = [\n {\n fields: ['batch', 'name'],\n unique: false,\n },\n ]\n }\n configWithDefaults.collections!.push(migrations)\n\n if (queryPresetsCollections.length > 0) {\n configWithDefaults.collections!.push(\n await sanitizeCollection(\n config as unknown as Config,\n getQueryPresetsConfig(config as unknown as Config),\n richTextSanitizationPromises,\n validRelationships,\n ),\n )\n }\n\n if (config.serverURL !== '') {\n config.csrf!.push(config.serverURL!)\n }\n\n if (!config.storage) {\n config.storage = []\n }\n\n if (!config.upload) {\n config.upload = { adapters: [] }\n }\n\n config.upload.adapters = Array.from(\n new Set(config.collections!.map((c) => c.upload?.adapter).filter(Boolean) as string[]),\n )\n\n // Pass through the email config as is so adapters don't break\n if (incomingConfig.email) {\n config.email = incomingConfig.email\n }\n\n /*\n Execute richText sanitization\n */\n if (typeof incomingConfig.editor === 'function') {\n config.editor = await incomingConfig.editor({\n config: config as SanitizedConfig,\n isRoot: true,\n parentIsLocalized: false,\n })\n }\n\n const promises: Promise<void>[] = []\n\n for (const sanitizeFunction of richTextSanitizationPromises) {\n promises.push(sanitizeFunction(config as SanitizedConfig))\n }\n\n await Promise.all(promises)\n\n return config as SanitizedConfig\n}\n"],"names":["en","defaultUserCollection","authRootEndpoints","sanitizeCollection","migrationsCollection","DuplicateCollection","InvalidConfiguration","defaultTimezones","sanitizeGlobal","resolveHierarchyCollections","baseBlockFields","formatLabels","sanitizeFields","getLockedDocumentsCollection","lockedDocumentsCollectionSlug","getPreferencesCollection","preferencesCollectionSlug","getQueryPresetsConfig","queryPresetsCollectionSlug","getDefaultJobsCollection","jobsCollectionSlug","getJobStatsGlobal","flattenAllFields","flattenBlock","hasScheduledPublishEnabled","validateTimezones","getSchedulePublishTask","addDefaultsToConfig","addOrderableEndpoint","addOrderableFieldsAndHook","sanitizeAdminConfig","configToSanitize","sanitizedConfig","loggingLevels","Forbidden","Locked","MissingFile","NotFound","ValidationError","admin","dashboard","widgets","push","slug","Component","minWidth","defaultLayout","widgetSlug","width","user","firstCollectionWithAuth","collections","find","auth","Boolean","userCollection","timezones","supportedTimezones","source","sanitizeConfig","incomingConfig","configWithDefaults","config","endpoints","endpoint","localization","locales","length","firstLocale","localeCodes","map","locale","code","label","rtl","toString","fallback","i18nConfig","fallbackLanguage","supportedLanguages","translations","i18n","supportedLangKeys","Object","keys","fallbackLang","includes","richTextSanitizationPromises","schedulePublishCollections","queryPresetsCollections","schedulePublishGlobals","collectionSlugs","Set","validRelationships","c","dashboardWidgets","widget","fields","existingFieldNames","parentIsLocalized","blocks","block","sanitizedBlock","_sanitized","concat","labels","flattenedSanitizedBlock","orderableJoins","i","has","add","draftsConfig","versions","drafts","schedulePublish","enableQueryPresets","fieldsToAdd","Map","joinFieldPathsByCollection","collection","orderable","currentFields","get","set","defaultSort","joinInfo","targetCollection","targetCollectionSlug","orderFieldName","currentJoinFieldPaths","joinFieldOn","orderableFields","flattenedFields","size","globals","jobs","tasks","adminUserSlug","enabled","Array","isArray","workflows","hasScheduleProperty","some","task","schedule","workflow","scheduling","stats","defaultJobsCollection","jobsCollectionOverrides","sanitizedJobsCollection","lockedDocumentsCollection","migrations","db","indexSortableFields","indexes","unique","serverURL","csrf","storage","upload","adapters","from","adapter","filter","email","editor","isRoot","promises","sanitizeFunction","Promise","all"],"mappings":"AAEA,SAASA,EAAE,QAAQ,wCAAuC;AAe1D,SAASC,qBAAqB,QAAQ,yBAAwB;AAC9D,SAASC,iBAAiB,QAAQ,6BAA4B;AAC9D,SAASC,kBAAkB,QAAQ,oCAAmC;AACtE,SAASC,oBAAoB,QAAQ,iDAAgD;AACrF,SAASC,mBAAmB,EAAEC,oBAAoB,QAAQ,qBAAoB;AAC9E,SAASC,gBAAgB,QAAQ,oDAAmD;AACpF,SAASC,cAAc,QAAQ,gCAA+B;AAC9D,SAASC,2BAA2B,QAAQ,8CAA6C;AACzF,SAASC,eAAe,EAAEC,YAAY,EAAEC,cAAc,QAAQ,cAAa;AAC3E,SACEC,4BAA4B,EAC5BC,6BAA6B,QACxB,gCAA+B;AACtC,SAASC,wBAAwB,EAAEC,yBAAyB,QAAQ,2BAA0B;AAC9F,SAASC,qBAAqB,EAAEC,0BAA0B,QAAQ,6BAA4B;AAC9F,SAASC,wBAAwB,EAAEC,kBAAkB,QAAQ,iCAAgC;AAC7F,SAASC,iBAAiB,QAAQ,6BAA4B;AAC9D,SAASC,gBAAgB,EAAEC,YAAY,QAAQ,mCAAkC;AACjF,SAASC,0BAA0B,QAAQ,oCAAmC;AAC9E,SAASC,iBAAiB,QAAQ,oCAAmC;AACrE,SAASC,sBAAsB,QAAQ,8BAA6B;AACpE,SAASC,mBAAmB,QAAQ,gBAAe;AACnD,SAASC,oBAAoB,EAAEC,yBAAyB,QAAQ,uBAAsB;AAEtF,MAAMC,sBAAsB,CAACC;IAC3B,MAAMC,kBAAkB;QAAE,GAAGD,gBAAgB;IAAC;IAE9C,wDAAwD;IACxDC,gBAAgBC,aAAa,GAAG;QAC9BC,WAAW;QACXC,QAAQ;QACRC,aAAa;QACbC,UAAU;QACVC,iBAAiB;QACjB,GAAIN,gBAAgBC,aAAa,IAAI,CAAC,CAAC;IACzC;IACED,CAAAA,gBAAgBO,KAAK,CAAEC,SAAS,KAAK;QAAEC,SAAS,EAAE;IAAC,CAAA,EAAGA,OAAO,CAACC,IAAI,CAAC;QACnEC,MAAM;QACNC,WAAW;QACXC,UAAU;IACZ;IACAb,gBAAgBO,KAAK,CAAEC,SAAS,CAACM,aAAa,KAAK;QACjD;YACEC,YAAY;YACZC,OAAO;QACT;KACD;IAED,+CAA+C;IAC/C,IAAI,CAAChB,iBAAiBO,OAAOU,MAAM;QACjC,MAAMC,0BAA0BlB,gBAAgBmB,WAAW,CAAEC,IAAI,CAAC,CAAC,EAAEC,IAAI,EAAE,GAAKC,QAAQD;QAExF,IAAIH,yBAAyB;YAC3BlB,gBAAgBO,KAAK,CAAEU,IAAI,GAAGC,wBAAwBP,IAAI;QAC5D,OAAO;YACLX,gBAAgBO,KAAK,CAAEU,IAAI,GAAGhD,sBAAsB0C,IAAI;YACxDX,gBAAgBmB,WAAW,CAAET,IAAI,CAACzC;QACpC;IACF;IAEA,MAAMsD,iBAAiBvB,gBAAgBmB,WAAW,CAAEC,IAAI,CACtD,CAAC,EAAET,IAAI,EAAE,GAAKA,SAASX,gBAAgBO,KAAK,CAAEU,IAAI;IAGpD,IAAI,CAACM,kBAAkB,CAACA,eAAeF,IAAI,EAAE;QAC3C,MAAM,IAAI/C,qBACR,GAAG0B,gBAAgBO,KAAK,CAAEU,IAAI,CAAC,qCAAqC,CAAC;IAEzE;IAEA,IAAIjB,iBAAiBO,OAAOiB,WAAW;QACrC,IAAI,OAAOzB,kBAAkBQ,OAAOiB,WAAWC,uBAAuB,YAAY;YAChFzB,gBAAgBO,KAAK,CAACiB,SAAS,CAACC,kBAAkB,GAChD1B,iBAAiBQ,KAAK,CAACiB,SAAS,CAACC,kBAAkB,CAAC;gBAAElD;YAAiB;QAC3E;QAEA,IAAI,CAACyB,iBAAiBO,OAAOiB,WAAWC,oBAAoB;YAC1DzB,gBAAgBO,KAAK,CAACiB,SAAS,CAACC,kBAAkB,GAAGlD;QACvD;IACF,OAAO;QACLyB,gBAAgBO,KAAK,CAAEiB,SAAS,GAAG;YACjCC,oBAAoBlD;QACtB;IACF;IAEAkB,kBAAkB;QAChBiC,QAAQ;QACRF,WAAWxB,gBAAgBO,KAAK,CAAEiB,SAAS,CAACC,kBAAkB;IAChE;IAEA,OAAOzB;AACT;AAEA,OAAO,MAAM2B,iBAAiB,OAAOC;IACnC,MAAMC,qBAAqBlC,oBAAoBiC;IAE/C,MAAME,SAAmChC,oBAAoB+B;IAE7D,IAAI,CAACC,OAAOC,SAAS,EAAE;QACrBD,OAAOC,SAAS,GAAG,EAAE;IACvB;IAEA,KAAK,MAAMC,YAAY9D,kBAAmB;QACxC4D,OAAOC,SAAS,CAACrB,IAAI,CAACsB;IACxB;IAEA,IAAIF,OAAOG,YAAY,IAAIH,OAAOG,YAAY,CAACC,OAAO,EAAEC,SAAS,GAAG;QAClE,uDAAuD;QACvD,MAAMC,cAAcN,OAAOG,YAAY,CAACC,OAAO,CAAC,EAAE;QAClD,IAAI,OAAOE,gBAAgB,UAAU;YACnCN,OAAOG,YAAY,CAACI,WAAW,GAAG;mBAC7B,AAACP,OAAOG,YAAY,CAA+CC,OAAO;aAC9E;YAED,sCAAsC;YACtCJ,OAAOG,YAAY,CAACC,OAAO,GAAG,AAC5BJ,OAAOG,YAAY,CACnBC,OAAO,CAACI,GAAG,CAAC,CAACC,SAAY,CAAA;oBACzBC,MAAMD;oBACNE,OAAOF;oBACPG,KAAK;oBACLC,UAAU,IAAMJ;gBAClB,CAAA;QACF,OAAO;YACL,sDAAsD;YACtDT,OAAOG,YAAY,CAACI,WAAW,GAAGP,OAAOG,YAAY,CAACC,OAAO,CAACI,GAAG,CAAC,CAACC,SAAWA,OAAOC,IAAI;YAEzFV,OAAOG,YAAY,CAACC,OAAO,GAAG,AAC5BJ,OAAOG,YAAY,CACnBC,OAAO,CAACI,GAAG,CAAC,CAACC,SAAY,CAAA;oBACzB,GAAGA,MAAM;oBACTI,UAAU,IAAMJ,OAAOC,IAAI;gBAC7B,CAAA;QACF;QAEA,2CAA2C;QAC3CV,OAAOG,YAAY,CAACW,QAAQ,GAAGd,OAAOG,YAAY,EAAEW,YAAY;IAClE;IAEA,MAAMC,aAAsC;QAC1CC,kBAAkB;QAClBC,oBAAoB;YAClB/E;QACF;QACAgF,cAAc,CAAC;IACjB;IAEA,IAAIpB,gBAAgBqB,MAAM;QACxBJ,WAAWE,kBAAkB,GAC3BnB,eAAeqB,IAAI,EAAEF,sBAAsBF,WAAWE,kBAAkB;QAE1E,MAAMG,oBAAyCC,OAAOC,IAAI,CAACP,WAAWE,kBAAkB;QACxF,MAAMM,eAAezB,eAAeqB,IAAI,EAAEH,oBAAoBD,WAAWC,gBAAgB;QAEzFD,WAAWC,gBAAgB,GAAGI,kBAAkBI,QAAQ,CAACD,gBACrDA,eACAH,iBAAiB,CAAC,EAAE;QACxBL,WAAWG,YAAY,GACrB,AAACpB,eAAeqB,IAAI,EAAED,gBACtBH,WAAWG,YAAY;IAC3B;IAEAlB,OAAOmB,IAAI,GAAGJ;IAEd,MAAMU,+BAAkF,EAAE;IAE1F,MAAMC,6BAA+C,EAAE;IAEvD,MAAMC,0BAA4C,EAAE;IAEpD,MAAMC,yBAAuC,EAAE;IAE/C,MAAMC,kBAAkB,IAAIC;IAE5B,MAAMC,qBAAqB;WACrB/B,OAAOX,WAAW,EAAEmB,IAAI,CAACwB,IAAMA,EAAEnD,IAAI,KAAK,EAAE;QAChDvB;QACAN;QACAE;KACD;IAED,MAAM+E,mBAAmBjC,OAAOvB,KAAK,EAAEC,WAAWC,WAAY,EAAE;IAEhE,KAAK,MAAMuD,UAAUD,iBAAkB;QACrC,IAAIC,OAAOC,MAAM,EAAE9B,QAAQ;YACzB6B,OAAOC,MAAM,GAAG,MAAMrF,eAAe;gBACnCkD,QAAQA;gBACRoC,oBAAoB,IAAIN;gBACxBK,QAAQD,OAAOC,MAAM;gBACrBE,mBAAmB;gBACnBZ;gBACAM;YACF;QACF;IACF;IAEA;;;GAGC,GACD/B,OAAOsC,MAAM,GAAG,EAAE;IAElB,IAAIxC,eAAewC,MAAM,EAAEjC,QAAQ;QACjC,KAAK,MAAMkC,SAASzC,eAAewC,MAAM,CAAE;YACzC,MAAME,iBAAiBD;YAEvB,IAAIC,eAAeC,UAAU,KAAK,MAAM;gBACtC;YACF;YACAD,eAAeC,UAAU,GAAG;YAE5BD,eAAeL,MAAM,GAAGK,eAAeL,MAAM,CAACO,MAAM,CAAC9F;YAErD4F,eAAeG,MAAM,GAAG,CAACH,eAAeG,MAAM,GAC1C9F,aAAa2F,eAAe3D,IAAI,IAChC2D,eAAeG,MAAM;YAEzBH,eAAeL,MAAM,GAAG,MAAMrF,eAAe;gBAC3CkD,QAAQA;gBACRoC,oBAAoB,IAAIN;gBACxBK,QAAQK,eAAeL,MAAM;gBAC7BE,mBAAmB;gBACnBZ;gBACAM;YACF;YAEA,MAAMa,0BAA0BnF,aAAa;gBAAE8E;YAAM;YAErDvC,OAAOsC,MAAM,CAAC1D,IAAI,CAACgE;QACrB;IACF;IAEA,kDAAkD;IAClD,MAAMC,iBAAsC,EAAE;IAE9C,IAAK,IAAIC,IAAI,GAAGA,IAAI9C,OAAOX,WAAW,CAAEgB,MAAM,EAAEyC,IAAK;QACnD,IAAIjB,gBAAgBkB,GAAG,CAAC/C,OAAOX,WAAW,AAAC,CAACyD,EAAE,CAAEjE,IAAI,GAAG;YACrD,MAAM,IAAItC,oBAAoB,QAAQyD,OAAOX,WAAW,AAAC,CAACyD,EAAE,CAAEjE,IAAI;QACpE;QAEAgD,gBAAgBmB,GAAG,CAAChD,OAAOX,WAAW,AAAC,CAACyD,EAAE,CAAEjE,IAAI;QAEhD,MAAMoE,eAAejD,OAAOX,WAAW,AAAC,CAACyD,EAAE,EAAEI,UAAUC;QAEvD,IAAI,OAAOF,iBAAiB,YAAYA,aAAaG,eAAe,EAAE;YACpE1B,2BAA2B9C,IAAI,CAACoB,OAAOX,WAAW,AAAC,CAACyD,EAAE,CAAEjE,IAAI;QAC9D;QAEA,IAAImB,OAAOX,WAAW,AAAC,CAACyD,EAAE,CAAEO,kBAAkB,EAAE;YAC9C1B,wBAAwB/C,IAAI,CAACoB,OAAOX,WAAW,AAAC,CAACyD,EAAE,CAAEjE,IAAI;YAEzD,IAAI,CAACkD,mBAAmBP,QAAQ,CAACpE,6BAA6B;gBAC5D2E,mBAAmBnD,IAAI,CAACxB;YAC1B;QACF;QAEA4C,OAAOX,WAAW,AAAC,CAACyD,EAAE,GAAG,MAAMzG,mBAC7B2D,QACAA,OAAOX,WAAW,AAAC,CAACyD,EAAE,EACtBrB,8BACAM,oBACAc;IAEJ;IAEA,iEAAiE;IACjE,MAAMS,cAAc,IAAIC;IACxB,MAAMC,6BAA6B,IAAID;IAEvC,8BAA8B;IAC9B,KAAK,MAAME,cAAczD,OAAOX,WAAW,CAAG;QAC5C,IAAIoE,WAAWC,SAAS,EAAE;YACxB,MAAMC,gBAAgBL,YAAYM,GAAG,CAACH,eAAe,EAAE;YACvDH,YAAYO,GAAG,CAACJ,YAAY;mBAAIE;gBAAe;aAAS;YACxDF,WAAWK,WAAW,GAAGL,WAAWK,WAAW,IAAI;QACrD;IACF;IAEA,6DAA6D;IAC7D,KAAK,MAAMC,YAAYlB,eAAgB;QACrC,MAAMmB,mBAAmBhE,OAAOX,WAAW,CAAEC,IAAI,CAC/C,CAAC0C,IAAMA,EAAEnD,IAAI,KAAKkF,SAASE,oBAAoB;QAEjD,IAAID,kBAAkB;YACpB,MAAML,gBAAgBL,YAAYM,GAAG,CAACI,qBAAqB,EAAE;YAC7DV,YAAYO,GAAG,CAACG,kBAAkB;mBAAIL;gBAAeI,SAASG,cAAc;aAAC;YAE7E,MAAMC,wBACJX,2BAA2BI,GAAG,CAACI,iBAAiBnF,IAAI,KAAK,IAAI0E;YAC/DY,sBAAsBN,GAAG,CAACE,SAASG,cAAc,EAAEH,SAASK,WAAW;YACvEZ,2BAA2BK,GAAG,CAACG,iBAAiBnF,IAAI,EAAEsF;QACxD;IACF;IAEA,gDAAgD;IAChD,KAAK,MAAM,CAACV,YAAYY,gBAAgB,IAAIf,YAAa;QACvD,MAAMvF,0BACJ0F,YACAzD,QACAqE,iBACAb;QAEF,uDAAuD;QACvDC,WAAWa,eAAe,GAAG9G,iBAAiB;YAAE2E,QAAQsB,WAAWtB,MAAM;QAAC;IAC5E;IAEA,+CAA+C;IAC/C,IAAImB,YAAYiB,IAAI,GAAG,GAAG;QACxBzG,qBAAqBkC,QAA2BwD;IAClD;IAEA,IAAIxD,OAAOwE,OAAO,CAAEnE,MAAM,GAAG,GAAG;QAC9B,IAAK,IAAIyC,IAAI,GAAGA,IAAI9C,OAAOwE,OAAO,CAAEnE,MAAM,EAAEyC,IAAK;YAC/C,IAAIpF,2BAA2BsC,OAAOwE,OAAO,AAAC,CAAC1B,EAAE,GAAI;gBACnDlB,uBAAuBhD,IAAI,CAACoB,OAAOwE,OAAO,AAAC,CAAC1B,EAAE,CAAEjE,IAAI;YACtD;YAEAmB,OAAOwE,OAAO,AAAC,CAAC1B,EAAE,GAAG,MAAMpG,eACzBsD,QACAA,OAAOwE,OAAO,AAAC,CAAC1B,EAAE,EAClBrB,8BACAM;QAEJ;IACF;IAEA,8EAA8E;IAC9EpF,4BAA4BqD;IAE5B,IAAI0B,2BAA2BrB,MAAM,IAAIuB,uBAAuBvB,MAAM,EAAE;;QACpE,CAAA,AAACL,CAAAA,OAAOyE,IAAI,KAAK,CAAC,CAAuB,EAAGC,KAAK,KAAK,EAAE,AAAD,EAAG9F,IAAI,CAC9DhB,uBAAuB;YACrB+G,eAAe3E,OAAOvB,KAAK,CAAEU,IAAI;YACjCE,aAAaqC;YACb8C,SAAS5C;QACX;IAEJ;;IAEE5B,CAAAA,OAAOyE,IAAI,KAAK,CAAC,CAAuB,EAAGG,OAAO,GAAGpF,QACrD,AAACqF,MAAMC,OAAO,CAAC/E,mBAAmB0E,IAAI,EAAEC,UAAU3E,mBAAmB0E,IAAI,EAAEC,OAAOrE,UAC/EwE,MAAMC,OAAO,CAAC/E,mBAAmB0E,IAAI,EAAEM,cACtChF,mBAAmB0E,IAAI,EAAEM,WAAW1E;IAG1C,0EAA0E;IAC1E,IAAIL,OAAOyE,IAAI,CAACG,OAAO,EAAE;QACvB,0DAA0D;QAC1D,MAAMI,sBACJ,AAAChF,QAAQyE,MAAMC,OAAOrE,UAAUL,OAAOyE,IAAI,CAACC,KAAK,CAACO,IAAI,CAAC,CAACC,OAASA,KAAKC,QAAQ,KAC7EnF,QAAQyE,MAAMM,WAAW1E,UACxBL,OAAOyE,IAAI,CAACM,SAAS,CAACE,IAAI,CAAC,CAACG,WAAaA,SAASD,QAAQ;QAE9D,IAAIH,qBAAqB;YACvBhF,OAAOyE,IAAI,CAACY,UAAU,GAAG;YAEvBrF,CAAAA,OAAOwE,OAAO,KAAK,EAAE,AAAD,EAAG5F,IAAI,CAC3B,MAAMlC,eACJsD,QACAzC,kBAAkByC,SAClByB,8BACAM;YAIJ/B,OAAOyE,IAAI,CAACa,KAAK,GAAG;QACtB;QAEA,IAAIC,wBAAwBlI,yBAAyB2C,OAAOyE,IAAI;QAEhE,IAAI,OAAOzE,OAAOyE,IAAI,CAACe,uBAAuB,KAAK,YAAY;YAC7DD,wBAAwBvF,OAAOyE,IAAI,CAACe,uBAAuB,CAAC;gBAC1DD;YACF;QACF;QACA,MAAME,0BAA0B,MAAMpJ,mBACpC2D,QACAuF,uBACA9D,8BACAM;QAGA/B,CAAAA,OAAOX,WAAW,KAAK,EAAE,AAAD,EAAGT,IAAI,CAAC6G;IACpC;IAEA,MAAMC,4BAA4B3I,6BAA6BiD;IAE/D,IAAI0F,2BAA2B;QAC7B3F,mBAAmBV,WAAW,CAAET,IAAI,CAClC,MAAMvC,mBACJ2D,QACA0F,2BACAjE,8BACAM;IAGN;IAEAhC,mBAAmBV,WAAW,CAAET,IAAI,CAClC,MAAMvC,mBACJ2D,QACA/C,yBAAyB+C,SACzByB,8BACAM;IAIJ,MAAM4D,aAAa,MAAMtJ,mBACvB2D,QACA1D,sBACAmF,8BACAM;IAGF,gFAAgF;IAChF,IAAI/B,QAAQ4F,IAAIC,qBAAqB;QACnCF,WAAWG,OAAO,GAAG;YACnB;gBACE3D,QAAQ;oBAAC;oBAAS;iBAAO;gBACzB4D,QAAQ;YACV;SACD;IACH;IACAhG,mBAAmBV,WAAW,CAAET,IAAI,CAAC+G;IAErC,IAAIhE,wBAAwBtB,MAAM,GAAG,GAAG;QACtCN,mBAAmBV,WAAW,CAAET,IAAI,CAClC,MAAMvC,mBACJ2D,QACA7C,sBAAsB6C,SACtByB,8BACAM;IAGN;IAEA,IAAI/B,OAAOgG,SAAS,KAAK,IAAI;QAC3BhG,OAAOiG,IAAI,CAAErH,IAAI,CAACoB,OAAOgG,SAAS;IACpC;IAEA,IAAI,CAAChG,OAAOkG,OAAO,EAAE;QACnBlG,OAAOkG,OAAO,GAAG,EAAE;IACrB;IAEA,IAAI,CAAClG,OAAOmG,MAAM,EAAE;QAClBnG,OAAOmG,MAAM,GAAG;YAAEC,UAAU,EAAE;QAAC;IACjC;IAEApG,OAAOmG,MAAM,CAACC,QAAQ,GAAGvB,MAAMwB,IAAI,CACjC,IAAIvE,IAAI9B,OAAOX,WAAW,CAAEmB,GAAG,CAAC,CAACwB,IAAMA,EAAEmE,MAAM,EAAEG,SAASC,MAAM,CAAC/G;IAGnE,8DAA8D;IAC9D,IAAIM,eAAe0G,KAAK,EAAE;QACxBxG,OAAOwG,KAAK,GAAG1G,eAAe0G,KAAK;IACrC;IAEA;;GAEC,GACD,IAAI,OAAO1G,eAAe2G,MAAM,KAAK,YAAY;QAC/CzG,OAAOyG,MAAM,GAAG,MAAM3G,eAAe2G,MAAM,CAAC;YAC1CzG,QAAQA;YACR0G,QAAQ;YACRrE,mBAAmB;QACrB;IACF;IAEA,MAAMsE,WAA4B,EAAE;IAEpC,KAAK,MAAMC,oBAAoBnF,6BAA8B;QAC3DkF,SAAS/H,IAAI,CAACgI,iBAAiB5G;IACjC;IAEA,MAAM6G,QAAQC,GAAG,CAACH;IAElB,OAAO3G;AACT,EAAC"}
|
package/dist/config/types.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ClientTranslationKeys, DefaultTranslationsObject, I18n, I18nClient, I18nOptions, TFunction } from '@payloadcms/translations';
|
|
2
2
|
import type { BusboyConfig } from 'busboy';
|
|
3
3
|
import type GraphQL from 'graphql';
|
|
4
4
|
import type { GraphQLFormattedError } from 'graphql';
|
|
@@ -8,8 +8,9 @@ import type { DestinationStream, Level, LoggerOptions } from 'pino';
|
|
|
8
8
|
import type React from 'react';
|
|
9
9
|
import type { default as sharp } from 'sharp';
|
|
10
10
|
import type { DeepRequired } from 'ts-essentials';
|
|
11
|
+
import type { ServerAdapter } from '../admin/adapters/server.js';
|
|
11
12
|
import type { RichTextAdapterProvider } from '../admin/RichText.js';
|
|
12
|
-
import type { DocumentSubViewTypes, DocumentTabConfig, DocumentViewServerProps, RichTextAdapter } from '../admin/types.js';
|
|
13
|
+
import type { CustomStatus, DocumentSubViewTypes, DocumentTabConfig, DocumentViewServerProps, PublishButtonClientProps, PublishButtonServerProps, RichTextAdapter, UnpublishButtonClientProps, UnpublishButtonServerProps } from '../admin/types.js';
|
|
13
14
|
import type { AdminViewConfig, ViewTypes, VisibleEntities } from '../admin/views/index.js';
|
|
14
15
|
import type { SanitizedPermissions } from '../auth/index.js';
|
|
15
16
|
import type { AddToImportMap, ImportMap, Imports, InternalImportMap } from '../bin/generateImportMap/index.js';
|
|
@@ -17,7 +18,6 @@ import type { Collection, CollectionConfig, SanitizedCollectionConfig } from '..
|
|
|
17
18
|
import type { DatabaseAdapterResult } from '../database/types.js';
|
|
18
19
|
import type { EmailAdapter, SendEmailOptions } from '../email/types.js';
|
|
19
20
|
import type { ErrorName } from '../errors/types.js';
|
|
20
|
-
import type { RootFoldersConfiguration } from '../folders/types.js';
|
|
21
21
|
import type { GlobalConfig, Globals, SanitizedGlobalConfig } from '../globals/config/types.js';
|
|
22
22
|
import type { Block, ClientField, DataFromWidgetSlug, DefaultDocumentIDType, Field, FlattenedBlock, JobsConfig, KVAdapterResult, Payload, RegisteredPlugins, RequestContext, SelectField, TypedUser, TypedWidget, WidgetSlug } from '../index.js';
|
|
23
23
|
import type { QueryPreset, QueryPresetConstraints } from '../query-presets/types.js';
|
|
@@ -66,6 +66,40 @@ export type Plugin = ((config: Config) => Config | Promise<Config>) & {
|
|
|
66
66
|
/** @experimental Unique identifier for cross-plugin discovery via `config.plugins`. */
|
|
67
67
|
slug?: string;
|
|
68
68
|
};
|
|
69
|
+
/**
|
|
70
|
+
* Configures where uploaded files are stored (S3, GCS, Azure, Vercel Blob, etc.).
|
|
71
|
+
*
|
|
72
|
+
* Storage adapters run **before plugins**, so upload hooks, static file handlers,
|
|
73
|
+
* and presigned-URL endpoints are guaranteed to be in place before any plugin
|
|
74
|
+
* modifies the config.
|
|
75
|
+
*
|
|
76
|
+
* Pass the return value of a storage adapter factory to `storage` in your
|
|
77
|
+
* Payload config:
|
|
78
|
+
*
|
|
79
|
+
* ```ts
|
|
80
|
+
* import { s3Storage } from '@payloadcms/storage-s3'
|
|
81
|
+
*
|
|
82
|
+
* export default buildConfig({
|
|
83
|
+
* storage: [
|
|
84
|
+
* s3Storage({
|
|
85
|
+
* bucket: process.env.S3_BUCKET,
|
|
86
|
+
* collections: { media: true },
|
|
87
|
+
* config: { region: process.env.S3_REGION },
|
|
88
|
+
* }),
|
|
89
|
+
* ],
|
|
90
|
+
* })
|
|
91
|
+
* ```
|
|
92
|
+
*
|
|
93
|
+
* @see https://payloadcms.com/docs/uploads/storage-adapters
|
|
94
|
+
*/
|
|
95
|
+
export interface StorageAdapter {
|
|
96
|
+
/** Collection slugs this adapter is configured to handle. */
|
|
97
|
+
collections: string[];
|
|
98
|
+
/** Initializes the adapter and returns the modified config with upload hooks and handlers injected. */
|
|
99
|
+
init: (config: Config) => Config | Promise<Config>;
|
|
100
|
+
/** Unique identifier for this adapter (e.g. `'s3'`, `'gcs'`, `'azure'`). Surfaced in telemetry and on `payload.config.upload.adapters`. */
|
|
101
|
+
name: string;
|
|
102
|
+
}
|
|
69
103
|
/**
|
|
70
104
|
* A map of plugin slugs to Plugin instances, built from `config.plugins`.
|
|
71
105
|
* Registered slugs (via `RegisteredPlugins` module augmentation) return typed options.
|
|
@@ -314,6 +348,12 @@ export type ServerProps = {
|
|
|
314
348
|
readonly payload: Payload;
|
|
315
349
|
readonly permissions?: SanitizedPermissions;
|
|
316
350
|
readonly searchParams?: Params;
|
|
351
|
+
/**
|
|
352
|
+
* Framework-agnostic methods for server-side navigation, headers, cookies, and other server-only APIs.
|
|
353
|
+
* Plugins should call these methods instead of importing directly from `next/navigation`, `next/headers`, etc.
|
|
354
|
+
* These methods are populated by the given framework adapter, e.g. `@payloadcms/next`.
|
|
355
|
+
*/
|
|
356
|
+
readonly server: ServerAdapter;
|
|
317
357
|
readonly user?: TypedUser;
|
|
318
358
|
readonly viewType?: ViewTypes;
|
|
319
359
|
readonly visibleEntities?: VisibleEntities;
|
|
@@ -422,7 +462,7 @@ export type SanitizedLocalizationConfig = Prettify<{
|
|
|
422
462
|
* @see https://payloadcms.com/docs/configuration/localization#localization
|
|
423
463
|
*/
|
|
424
464
|
export type LocalizationConfig = Prettify<LocalizationConfigWithLabels | LocalizationConfigWithNoLabels>;
|
|
425
|
-
export type LabelFunction<TTranslationKeys =
|
|
465
|
+
export type LabelFunction<TTranslationKeys = ClientTranslationKeys> = (args: {
|
|
426
466
|
i18n: I18nClient;
|
|
427
467
|
t: TFunction<TTranslationKeys>;
|
|
428
468
|
}) => string;
|
|
@@ -627,6 +667,27 @@ export type DashboardConfig = {
|
|
|
627
667
|
export type SanitizedDashboardConfig = {
|
|
628
668
|
widgets: Array<Omit<Widget, 'Component'>>;
|
|
629
669
|
};
|
|
670
|
+
export type SidebarTab = {
|
|
671
|
+
/** Tab components */
|
|
672
|
+
components: {
|
|
673
|
+
/** Component to render as tab content */
|
|
674
|
+
Content: CustomComponent;
|
|
675
|
+
/** Component to render as tab icon */
|
|
676
|
+
Icon: PayloadComponent;
|
|
677
|
+
};
|
|
678
|
+
/** Disable this tab */
|
|
679
|
+
disabled?: boolean;
|
|
680
|
+
/** Make this tab active by default */
|
|
681
|
+
isDefaultActive?: boolean;
|
|
682
|
+
/**
|
|
683
|
+
* Label for accessibility and tab display.
|
|
684
|
+
* Supports i18n by passing an object with locale keys, or a function with `t` for translations.
|
|
685
|
+
* If not provided, the slug will be used as fallback.
|
|
686
|
+
*/
|
|
687
|
+
label?: LabelFunction | StaticLabel;
|
|
688
|
+
/** Unique identifier for override/disable */
|
|
689
|
+
slug: string;
|
|
690
|
+
};
|
|
630
691
|
/**
|
|
631
692
|
* This is the central configuration
|
|
632
693
|
*
|
|
@@ -737,6 +798,11 @@ export type Config = {
|
|
|
737
798
|
* These components will be rendered in a popup menu above the logout button.
|
|
738
799
|
*/
|
|
739
800
|
settingsMenu?: CustomComponent[];
|
|
801
|
+
/** Sidebar configuration */
|
|
802
|
+
sidebar?: {
|
|
803
|
+
/** Extensible tab system */
|
|
804
|
+
tabs?: SidebarTab[];
|
|
805
|
+
};
|
|
740
806
|
/**
|
|
741
807
|
* Replace or modify top-level admin routes, or add new ones:
|
|
742
808
|
* + `Account` - `/admin/account`
|
|
@@ -809,11 +875,6 @@ export type Config = {
|
|
|
809
875
|
* @default '/account'
|
|
810
876
|
*/
|
|
811
877
|
account?: `/${string}`;
|
|
812
|
-
/** The route for the browse by folder view.
|
|
813
|
-
*
|
|
814
|
-
* @default '/browse-by-folder'
|
|
815
|
-
*/
|
|
816
|
-
browseByFolder?: `/${string}`;
|
|
817
878
|
/** The route for the create first user page.
|
|
818
879
|
*
|
|
819
880
|
* @default '/create-first-user'
|
|
@@ -926,21 +987,6 @@ export type Config = {
|
|
|
926
987
|
* @see https://payloadcms.com/docs/configuration/collections#collection-configs
|
|
927
988
|
*/
|
|
928
989
|
collections?: CollectionConfig[];
|
|
929
|
-
/**
|
|
930
|
-
* Compatibility flags for prior Payload versions
|
|
931
|
-
*/
|
|
932
|
-
compatibility?: {
|
|
933
|
-
/**
|
|
934
|
-
* By default, Payload will remove the `localized: true` property
|
|
935
|
-
* from fields if a parent field is localized. Set this property
|
|
936
|
-
* to `true` only if you have an existing Payload database from pre-3.0
|
|
937
|
-
* that you would like to maintain without migrating. This is only
|
|
938
|
-
* relevant for MongoDB databases.
|
|
939
|
-
*
|
|
940
|
-
* @todo Remove in v4
|
|
941
|
-
*/
|
|
942
|
-
allowLocalizedWithinLocalized: true;
|
|
943
|
-
};
|
|
944
990
|
/**
|
|
945
991
|
* Prefix a string to all cookies that Payload sets.
|
|
946
992
|
*
|
|
@@ -997,12 +1043,6 @@ export type Config = {
|
|
|
997
1043
|
*/
|
|
998
1044
|
localizeStatus?: boolean;
|
|
999
1045
|
};
|
|
1000
|
-
/**
|
|
1001
|
-
* Options for folder view within the admin panel
|
|
1002
|
-
*
|
|
1003
|
-
* @experimental This feature may change in minor versions until it is fully stable
|
|
1004
|
-
*/
|
|
1005
|
-
folders?: false | RootFoldersConfiguration;
|
|
1006
1046
|
/**
|
|
1007
1047
|
* @see https://payloadcms.com/docs/configuration/globals#global-configs
|
|
1008
1048
|
*/
|
|
@@ -1264,6 +1304,20 @@ export type Config = {
|
|
|
1264
1304
|
*
|
|
1265
1305
|
*/
|
|
1266
1306
|
sharp?: SharpDependency;
|
|
1307
|
+
/**
|
|
1308
|
+
* Storage adapters that handle where uploaded files are stored (S3, GCS, Azure, Vercel Blob, etc.).
|
|
1309
|
+
*
|
|
1310
|
+
* Adapters are initialized **before** `plugins`, so file handling is fully wired before any plugin
|
|
1311
|
+
* runs. Use this instead of placing storage adapter packages in `plugins`.
|
|
1312
|
+
*
|
|
1313
|
+
* Migrate existing `plugins` usage automatically with:
|
|
1314
|
+
* ```sh
|
|
1315
|
+
* npx @payloadcms/codemod --transform migrate-storage-adapters-to-config
|
|
1316
|
+
* ```
|
|
1317
|
+
*
|
|
1318
|
+
* @see https://payloadcms.com/docs/uploads/storage-adapters
|
|
1319
|
+
*/
|
|
1320
|
+
storage?: StorageAdapter[];
|
|
1267
1321
|
/** Send anonymous telemetry data about general usage. */
|
|
1268
1322
|
telemetry?: boolean;
|
|
1269
1323
|
/** Control how typescript interfaces are generated from your collections. */
|
|
@@ -1339,8 +1393,16 @@ export type Config = {
|
|
|
1339
1393
|
*/
|
|
1340
1394
|
export type SanitizedConfig = {
|
|
1341
1395
|
admin: {
|
|
1396
|
+
/**
|
|
1397
|
+
* `Required` (shallow) marks the top-level dashboard props as required, mainly `defaultLayout`,
|
|
1398
|
+
* which sanitizing always fills in. Do not switch this to the `DeepRequired` used below: it
|
|
1399
|
+
* recurses into the widgets and re-expands the whole `Field` type (a large self-referencing
|
|
1400
|
+
* union), which is very expensive to check. Never run a `Field`-bearing type through
|
|
1401
|
+
* `DeepRequired`.
|
|
1402
|
+
*/
|
|
1403
|
+
dashboard: Required<NonNullable<NonNullable<Config['admin']>['dashboard']>>;
|
|
1342
1404
|
timezones: SanitizedTimezoneConfig;
|
|
1343
|
-
} & DeepRequired<Config['admin']
|
|
1405
|
+
} & DeepRequired<Omit<NonNullable<Config['admin']>, 'dashboard'>>;
|
|
1344
1406
|
blocks?: FlattenedBlock[];
|
|
1345
1407
|
collections: SanitizedCollectionConfig[];
|
|
1346
1408
|
/** Default richtext editor to use for richText fields */
|
|
@@ -1355,13 +1417,14 @@ export type SanitizedConfig = {
|
|
|
1355
1417
|
configDir: string;
|
|
1356
1418
|
rawConfig: string;
|
|
1357
1419
|
};
|
|
1420
|
+
storage: StorageAdapter[];
|
|
1358
1421
|
upload: {
|
|
1359
1422
|
/**
|
|
1360
1423
|
* Deduped list of adapters used in the project
|
|
1361
1424
|
*/
|
|
1362
1425
|
adapters: string[];
|
|
1363
1426
|
} & FetchAPIFileUploadOptions;
|
|
1364
|
-
} & Omit<DeepRequired<Config>, 'admin' | 'blocks' | 'collections' | 'editor' | 'endpoint' | 'globals' | 'i18n' | 'jobs' | 'localization' | 'upload'>;
|
|
1427
|
+
} & Omit<DeepRequired<Config>, 'admin' | 'blocks' | 'collections' | 'editor' | 'endpoint' | 'globals' | 'i18n' | 'jobs' | 'localization' | 'storage' | 'upload'>;
|
|
1365
1428
|
export type EditConfig = EditConfigWithoutRoot | EditConfigWithRoot;
|
|
1366
1429
|
/**
|
|
1367
1430
|
* Replace or modify _all_ nested document views and routes, including the document header, controls, and tabs. This cannot be used in conjunction with other nested views.
|
|
@@ -1403,6 +1466,99 @@ export type EditConfigWithoutRoot = {
|
|
|
1403
1466
|
versions?: DefaultDocumentViewConfig;
|
|
1404
1467
|
};
|
|
1405
1468
|
export type EntityDescriptionComponent = CustomComponent;
|
|
1469
|
+
/**
|
|
1470
|
+
* Custom components rendered within the Edit View.
|
|
1471
|
+
* Shared by Collection and Global configs.
|
|
1472
|
+
*/
|
|
1473
|
+
export type SharedEditViewComponents = {
|
|
1474
|
+
/**
|
|
1475
|
+
* Inject custom components before the document controls
|
|
1476
|
+
*/
|
|
1477
|
+
beforeDocumentControls?: CustomComponent[];
|
|
1478
|
+
/**
|
|
1479
|
+
* Inject custom components before the document metadata (left of status/timestamps)
|
|
1480
|
+
*/
|
|
1481
|
+
BeforeDocumentMeta?: CustomComponent[];
|
|
1482
|
+
/**
|
|
1483
|
+
* Inject custom components within the 3-dot menu dropdown
|
|
1484
|
+
*/
|
|
1485
|
+
editMenuItems?: CustomComponent[];
|
|
1486
|
+
/**
|
|
1487
|
+
* Replaces the "Preview" button
|
|
1488
|
+
*/
|
|
1489
|
+
PreviewButton?: CustomComponent;
|
|
1490
|
+
/**
|
|
1491
|
+
* Replaces the "Publish" button
|
|
1492
|
+
* + drafts must be enabled
|
|
1493
|
+
*/
|
|
1494
|
+
PublishButton?: PayloadComponent<PublishButtonServerProps, PublishButtonClientProps>;
|
|
1495
|
+
/**
|
|
1496
|
+
* Replaces the "Save" button
|
|
1497
|
+
* + drafts must be disabled
|
|
1498
|
+
*/
|
|
1499
|
+
SaveButton?: CustomComponent;
|
|
1500
|
+
/**
|
|
1501
|
+
* Replaces the "Save Draft" button
|
|
1502
|
+
* + drafts must be enabled
|
|
1503
|
+
* + autosave must be disabled
|
|
1504
|
+
*/
|
|
1505
|
+
SaveDraftButton?: CustomComponent;
|
|
1506
|
+
/**
|
|
1507
|
+
* Replaces the "Status" section
|
|
1508
|
+
*/
|
|
1509
|
+
Status?: CustomStatus;
|
|
1510
|
+
/**
|
|
1511
|
+
* Replaces the "Unpublish" button
|
|
1512
|
+
* + drafts must be enabled
|
|
1513
|
+
*/
|
|
1514
|
+
UnpublishButton?: PayloadComponent<UnpublishButtonServerProps, UnpublishButtonClientProps>;
|
|
1515
|
+
};
|
|
1516
|
+
/**
|
|
1517
|
+
* Custom views object shared by Collection and Global configs.
|
|
1518
|
+
* Allows custom view keys (matched by path) alongside the document `edit` view.
|
|
1519
|
+
*/
|
|
1520
|
+
export type SharedEntityViews = {
|
|
1521
|
+
/**
|
|
1522
|
+
* Add custom views.
|
|
1523
|
+
* Any additional keys define custom views that are matched by path and rendered at the entity level.
|
|
1524
|
+
* @link https://payloadcms.com/docs/custom-components/custom-views
|
|
1525
|
+
* @example
|
|
1526
|
+
* ```ts
|
|
1527
|
+
* views: {
|
|
1528
|
+
* audit: {
|
|
1529
|
+
* Component: '/path/to/AuditView',
|
|
1530
|
+
* path: '/audit',
|
|
1531
|
+
* exact: true,
|
|
1532
|
+
* }
|
|
1533
|
+
* }
|
|
1534
|
+
* ```
|
|
1535
|
+
*/
|
|
1536
|
+
[key: string]: {
|
|
1537
|
+
actions?: CustomComponent[];
|
|
1538
|
+
Component?: PayloadComponent;
|
|
1539
|
+
} | AdminViewConfig | EditConfig | undefined;
|
|
1540
|
+
/**
|
|
1541
|
+
* Replace, modify, or add new "document" views.
|
|
1542
|
+
* @link https://payloadcms.com/docs/custom-components/document-views
|
|
1543
|
+
*/
|
|
1544
|
+
edit?: EditConfig;
|
|
1545
|
+
};
|
|
1546
|
+
/**
|
|
1547
|
+
* Admin component slots shared by Collection and Global configs.
|
|
1548
|
+
* Collection extends this with list-only slots and `edit.Upload`; Global uses it as-is.
|
|
1549
|
+
*/
|
|
1550
|
+
export type SharedAdminComponents = {
|
|
1551
|
+
/**
|
|
1552
|
+
* Custom Description component for the entity. Rendered in the Edit View
|
|
1553
|
+
* (and List View for Collections).
|
|
1554
|
+
*/
|
|
1555
|
+
Description?: EntityDescriptionComponent;
|
|
1556
|
+
/**
|
|
1557
|
+
* Components within the edit view
|
|
1558
|
+
*/
|
|
1559
|
+
edit?: SharedEditViewComponents;
|
|
1560
|
+
views?: SharedEntityViews;
|
|
1561
|
+
};
|
|
1406
1562
|
export type EntityDescriptionFunction = ({ t }: {
|
|
1407
1563
|
t: TFunction;
|
|
1408
1564
|
}) => string;
|