payload 4.0.0-internal.e16cf59 → 4.0.0-internal.e55ccef
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/LICENSE.md +1 -1
- package/bin.js +11 -0
- package/dist/__testing__/predefinedMigration.d.ts +4 -3
- package/dist/__testing__/predefinedMigration.d.ts.map +1 -1
- package/dist/admin/RichText.d.ts +4 -17
- 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/devReload.d.ts +9 -0
- package/dist/admin/adapters/devReload.d.ts.map +1 -0
- package/dist/admin/adapters/devReload.js +6 -0
- package/dist/admin/adapters/devReload.js.map +1 -0
- package/dist/admin/adapters/index.d.ts +7 -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/render.d.ts +16 -0
- package/dist/admin/adapters/render.d.ts.map +1 -0
- package/dist/admin/adapters/render.js +7 -0
- package/dist/admin/adapters/render.js.map +1 -0
- package/dist/admin/adapters/router.d.ts +64 -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/adapters/views.d.ts +36 -0
- package/dist/admin/adapters/views.d.ts.map +1 -0
- package/dist/admin/adapters/views.js +7 -0
- package/dist/admin/adapters/views.js.map +1 -0
- 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/fields/Row.d.ts +2 -2
- package/dist/admin/fields/Row.d.ts.map +1 -1
- package/dist/admin/fields/Row.js.map +1 -1
- package/dist/admin/forms/Description.d.ts +2 -2
- package/dist/admin/forms/Description.d.ts.map +1 -1
- package/dist/admin/forms/Description.js.map +1 -1
- package/dist/admin/forms/Field.d.ts +10 -5
- package/dist/admin/forms/Field.d.ts.map +1 -1
- package/dist/admin/forms/Field.js.map +1 -1
- package/dist/admin/functions/index.d.ts +10 -1
- 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 +3 -2
- package/dist/admin/types.d.ts.map +1 -1
- package/dist/admin/types.js.map +1 -1
- package/dist/admin/views/dashboard.d.ts +7 -0
- package/dist/admin/views/dashboard.d.ts.map +1 -1
- package/dist/admin/views/dashboard.js.map +1 -1
- package/dist/admin/views/document.d.ts +5 -3
- package/dist/admin/views/document.d.ts.map +1 -1
- package/dist/admin/views/document.js.map +1 -1
- package/dist/admin/views/hierarchyList.d.ts +1 -0
- package/dist/admin/views/hierarchyList.d.ts.map +1 -1
- package/dist/admin/views/hierarchyList.js.map +1 -1
- package/dist/admin/views/list.d.ts +10 -1
- package/dist/admin/views/list.d.ts.map +1 -1
- package/dist/admin/views/list.js.map +1 -1
- package/dist/auth/baseFields/apiKey.d.ts +10 -2
- package/dist/auth/baseFields/apiKey.d.ts.map +1 -1
- package/dist/auth/baseFields/apiKey.js +35 -24
- package/dist/auth/baseFields/apiKey.js.map +1 -1
- package/dist/auth/cookies.d.ts +2 -2
- package/dist/auth/cookies.d.ts.map +1 -1
- package/dist/auth/defaultAccess.d.ts +1 -1
- package/dist/auth/defaultAccess.d.ts.map +1 -1
- package/dist/auth/defaultAccess.js +1 -1
- package/dist/auth/defaultAccess.js.map +1 -1
- package/dist/auth/defaultUser.d.ts.map +1 -1
- package/dist/auth/defaultUser.js +2 -1
- package/dist/auth/defaultUser.js.map +1 -1
- package/dist/auth/extractJWT.d.ts +1 -1
- package/dist/auth/getAuthFields.js +2 -2
- package/dist/auth/getAuthFields.js.map +1 -1
- package/dist/auth/getFieldsToSign.d.ts +1 -1
- package/dist/auth/getLoginOptions.d.ts +1 -1
- package/dist/auth/operations/auth.d.ts +2 -2
- package/dist/auth/operations/auth.d.ts.map +1 -1
- package/dist/auth/operations/auth.js.map +1 -1
- package/dist/auth/operations/login.d.ts +2 -1
- package/dist/auth/operations/login.d.ts.map +1 -1
- package/dist/auth/operations/login.js.map +1 -1
- package/dist/auth/operations/me.d.ts +2 -2
- package/dist/auth/operations/me.d.ts.map +1 -1
- package/dist/auth/operations/me.js.map +1 -1
- package/dist/auth/operations/refresh.d.ts.map +1 -1
- package/dist/auth/operations/refresh.js +9 -3
- package/dist/auth/operations/refresh.js.map +1 -1
- package/dist/auth/operations/resetPassword.d.ts.map +1 -1
- package/dist/auth/operations/resetPassword.js.map +1 -1
- package/dist/auth/sendVerificationEmail.d.ts +2 -2
- package/dist/auth/sendVerificationEmail.d.ts.map +1 -1
- package/dist/auth/sendVerificationEmail.js +1 -1
- package/dist/auth/sendVerificationEmail.js.map +1 -1
- package/dist/auth/sessions.d.ts +4 -5
- package/dist/auth/sessions.d.ts.map +1 -1
- package/dist/auth/sessions.js +5 -3
- package/dist/auth/sessions.js.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/incrementLoginAttempts.d.ts +2 -2
- package/dist/auth/strategies/local/incrementLoginAttempts.d.ts.map +1 -1
- package/dist/auth/strategies/local/incrementLoginAttempts.js +1 -1
- package/dist/auth/strategies/local/incrementLoginAttempts.js.map +1 -1
- package/dist/auth/types.d.ts +25 -21
- package/dist/auth/types.d.ts.map +1 -1
- package/dist/auth/types.js.map +1 -1
- package/dist/bin/build.d.ts +49 -0
- package/dist/bin/build.d.ts.map +1 -0
- package/dist/bin/build.js +226 -0
- package/dist/bin/build.js.map +1 -0
- package/dist/bin/build.spec.js +594 -0
- package/dist/bin/build.spec.js.map +1 -0
- package/dist/bin/frameworkConventions.d.ts +8 -0
- package/dist/bin/frameworkConventions.d.ts.map +1 -0
- package/dist/bin/frameworkConventions.js +8 -0
- package/dist/bin/frameworkConventions.js.map +1 -0
- package/dist/bin/generateImportMap/index.d.ts.map +1 -1
- package/dist/bin/generateImportMap/index.js +8 -5
- package/dist/bin/generateImportMap/index.js.map +1 -1
- package/dist/bin/generateImportMap/iterateCollections.d.ts.map +1 -1
- package/dist/bin/generateImportMap/iterateCollections.js +11 -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 +12 -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/utilities/resolveImportMapFilePath.d.ts +5 -1
- package/dist/bin/generateImportMap/utilities/resolveImportMapFilePath.d.ts.map +1 -1
- package/dist/bin/generateImportMap/utilities/resolveImportMapFilePath.js +33 -18
- package/dist/bin/generateImportMap/utilities/resolveImportMapFilePath.js.map +1 -1
- package/dist/bin/generateTypes.d.ts +3 -2
- package/dist/bin/generateTypes.d.ts.map +1 -1
- package/dist/bin/generateTypes.js +11 -1
- package/dist/bin/generateTypes.js.map +1 -1
- package/dist/bin/index.d.ts.map +1 -1
- package/dist/bin/index.js +9 -0
- package/dist/bin/index.js.map +1 -1
- package/dist/bin/loadEnv.d.ts +3 -1
- package/dist/bin/loadEnv.d.ts.map +1 -1
- package/dist/bin/loadEnv.js +40 -10
- package/dist/bin/loadEnv.js.map +1 -1
- package/dist/collections/config/client.d.ts +3 -3
- package/dist/collections/config/client.d.ts.map +1 -1
- package/dist/collections/config/client.js +1 -0
- package/dist/collections/config/client.js.map +1 -1
- package/dist/collections/config/defaults.d.ts +0 -4
- package/dist/collections/config/defaults.d.ts.map +1 -1
- package/dist/collections/config/defaults.js +2 -17
- package/dist/collections/config/defaults.js.map +1 -1
- package/dist/collections/config/defaults.spec.js +47 -0
- package/dist/collections/config/defaults.spec.js.map +1 -0
- 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 +1 -11
- package/dist/collections/config/sanitize.js.map +1 -1
- package/dist/collections/config/types.d.ts +13 -9
- package/dist/collections/config/types.d.ts.map +1 -1
- package/dist/collections/config/types.js.map +1 -1
- package/dist/collections/dataloader.d.ts +1 -1
- package/dist/collections/endpoints/create.d.ts.map +1 -1
- package/dist/collections/endpoints/create.js +0 -2
- package/dist/collections/endpoints/create.js.map +1 -1
- package/dist/collections/endpoints/updateByID.d.ts.map +1 -1
- package/dist/collections/endpoints/updateByID.js +1 -2
- package/dist/collections/endpoints/updateByID.js.map +1 -1
- package/dist/collections/operations/count.d.ts.map +1 -1
- package/dist/collections/operations/count.js +1 -0
- package/dist/collections/operations/count.js.map +1 -1
- package/dist/collections/operations/create.d.ts +0 -1
- package/dist/collections/operations/create.d.ts.map +1 -1
- package/dist/collections/operations/create.js +15 -6
- 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 +3 -0
- package/dist/collections/operations/delete.js.map +1 -1
- package/dist/collections/operations/findDistinct.d.ts.map +1 -1
- package/dist/collections/operations/findDistinct.js +1 -0
- package/dist/collections/operations/findDistinct.js.map +1 -1
- package/dist/collections/operations/findVersionByID.d.ts.map +1 -1
- package/dist/collections/operations/local/count.d.ts +3 -3
- package/dist/collections/operations/local/count.d.ts.map +1 -1
- package/dist/collections/operations/local/count.js.map +1 -1
- package/dist/collections/operations/local/countVersions.d.ts +3 -3
- package/dist/collections/operations/local/countVersions.d.ts.map +1 -1
- package/dist/collections/operations/local/countVersions.js.map +1 -1
- package/dist/collections/operations/local/create.d.ts +3 -3
- package/dist/collections/operations/local/create.d.ts.map +1 -1
- package/dist/collections/operations/local/create.js.map +1 -1
- package/dist/collections/operations/local/delete.d.ts +3 -3
- package/dist/collections/operations/local/delete.d.ts.map +1 -1
- package/dist/collections/operations/local/delete.js.map +1 -1
- package/dist/collections/operations/local/duplicate.d.ts +3 -3
- package/dist/collections/operations/local/duplicate.d.ts.map +1 -1
- package/dist/collections/operations/local/duplicate.js.map +1 -1
- package/dist/collections/operations/local/find.d.ts +3 -3
- package/dist/collections/operations/local/find.d.ts.map +1 -1
- package/dist/collections/operations/local/find.js.map +1 -1
- package/dist/collections/operations/local/findByID.d.ts +3 -3
- package/dist/collections/operations/local/findByID.d.ts.map +1 -1
- package/dist/collections/operations/local/findByID.js.map +1 -1
- package/dist/collections/operations/local/findDistinct.d.ts +2 -2
- package/dist/collections/operations/local/findDistinct.d.ts.map +1 -1
- package/dist/collections/operations/local/findDistinct.js.map +1 -1
- package/dist/collections/operations/local/findVersionByID.d.ts +3 -3
- package/dist/collections/operations/local/findVersionByID.d.ts.map +1 -1
- package/dist/collections/operations/local/findVersionByID.js.map +1 -1
- package/dist/collections/operations/local/findVersions.d.ts +3 -3
- package/dist/collections/operations/local/findVersions.d.ts.map +1 -1
- package/dist/collections/operations/local/findVersions.js.map +1 -1
- package/dist/collections/operations/local/restoreVersion.d.ts +3 -3
- package/dist/collections/operations/local/restoreVersion.d.ts.map +1 -1
- package/dist/collections/operations/local/restoreVersion.js.map +1 -1
- package/dist/collections/operations/local/update.d.ts +7 -11
- package/dist/collections/operations/local/update.d.ts.map +1 -1
- package/dist/collections/operations/local/update.js +1 -2
- package/dist/collections/operations/local/update.js.map +1 -1
- package/dist/collections/operations/restoreVersion.d.ts.map +1 -1
- package/dist/collections/operations/update.d.ts +0 -1
- package/dist/collections/operations/update.d.ts.map +1 -1
- package/dist/collections/operations/update.js +8 -4
- package/dist/collections/operations/update.js.map +1 -1
- package/dist/collections/operations/updateByID.d.ts +0 -1
- package/dist/collections/operations/updateByID.d.ts.map +1 -1
- package/dist/collections/operations/updateByID.js +1 -5
- package/dist/collections/operations/updateByID.js.map +1 -1
- package/dist/collections/operations/utilities/buildAfterOperation.d.ts +1 -1
- package/dist/collections/operations/utilities/buildAfterOperation.d.ts.map +1 -1
- package/dist/collections/operations/utilities/copyDataWithFreshRowIDs.d.ts +9 -0
- package/dist/collections/operations/utilities/copyDataWithFreshRowIDs.d.ts.map +1 -0
- package/dist/collections/operations/utilities/copyDataWithFreshRowIDs.js +170 -0
- package/dist/collections/operations/utilities/copyDataWithFreshRowIDs.js.map +1 -0
- package/dist/collections/operations/utilities/types.d.ts +20 -29
- package/dist/collections/operations/utilities/types.d.ts.map +1 -1
- package/dist/collections/operations/utilities/types.js.map +1 -1
- package/dist/collections/operations/utilities/update.d.ts +1 -2
- package/dist/collections/operations/utilities/update.d.ts.map +1 -1
- package/dist/collections/operations/utilities/update.js +64 -65
- 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 +3 -3
- package/dist/config/client.d.ts.map +1 -1
- package/dist/config/client.js +2 -1
- package/dist/config/client.js.map +1 -1
- package/dist/config/defaults.d.ts +0 -4
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +0 -78
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/definePlugin.d.ts +10 -10
- package/dist/config/definePlugin.d.ts.map +1 -1
- package/dist/config/definePlugin.js +7 -11
- package/dist/config/definePlugin.js.map +1 -1
- package/dist/config/orderable/fractional-indexing.d.ts +23 -23
- package/dist/config/orderable/fractional-indexing.d.ts.map +1 -1
- package/dist/config/orderable/index.d.ts.map +1 -1
- package/dist/config/orderable/index.js +23 -0
- package/dist/config/orderable/index.js.map +1 -1
- package/dist/config/sanitize.d.ts.map +1 -1
- package/dist/config/sanitize.js +139 -27
- package/dist/config/sanitize.js.map +1 -1
- package/dist/config/types.d.ts +126 -38
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +2 -0
- package/dist/config/types.js.map +1 -1
- package/dist/database/getLocalizedPaths.d.ts.map +1 -1
- package/dist/database/getLocalizedPaths.js +1 -1
- package/dist/database/getLocalizedPaths.js.map +1 -1
- package/dist/database/migrations/migrationsCollection.d.ts.map +1 -1
- package/dist/database/migrations/migrationsCollection.js +2 -1
- package/dist/database/migrations/migrationsCollection.js.map +1 -1
- package/dist/database/types.d.ts +1 -5
- package/dist/database/types.d.ts.map +1 -1
- package/dist/database/types.js.map +1 -1
- package/dist/errors/APIError.d.ts.map +1 -1
- package/dist/errors/AuthenticationError.d.ts.map +1 -1
- package/dist/errors/DuplicateCollection.d.ts.map +1 -1
- package/dist/errors/DuplicateFieldName.d.ts.map +1 -1
- package/dist/errors/DuplicateGlobal.d.ts.map +1 -1
- package/dist/errors/ErrorDeletingFile.d.ts.map +1 -1
- package/dist/errors/FileRetrievalError.d.ts.map +1 -1
- package/dist/errors/FileUploadError.d.ts.map +1 -1
- package/dist/errors/Forbidden.d.ts.map +1 -1
- package/dist/errors/InvalidConfiguration.d.ts.map +1 -1
- package/dist/errors/InvalidFieldJoin.d.ts.map +1 -1
- package/dist/errors/InvalidFieldName.d.ts.map +1 -1
- package/dist/errors/InvalidFieldRelationship.d.ts.map +1 -1
- package/dist/errors/InvalidSchema.d.ts.map +1 -1
- package/dist/errors/Locked.d.ts.map +1 -1
- package/dist/errors/LockedAuth.d.ts.map +1 -1
- package/dist/errors/MissingCollectionLabel.d.ts.map +1 -1
- package/dist/errors/MissingEditorProp.d.ts.map +1 -1
- package/dist/errors/MissingFieldInputOptions.d.ts.map +1 -1
- package/dist/errors/MissingFieldType.d.ts.map +1 -1
- package/dist/errors/MissingFile.d.ts.map +1 -1
- package/dist/errors/NotFound.d.ts.map +1 -1
- package/dist/errors/QueryError.d.ts.map +1 -1
- package/dist/errors/ReservedFieldName.d.ts.map +1 -1
- package/dist/errors/TimestampsRequired.d.ts.map +1 -1
- package/dist/errors/UnauthorizedError.d.ts.map +1 -1
- package/dist/errors/UnverifiedEmail.d.ts.map +1 -1
- package/dist/errors/ValidationError.d.ts +1 -0
- package/dist/errors/ValidationError.d.ts.map +1 -1
- package/dist/errors/ValidationError.js.map +1 -1
- package/dist/exports/internal.d.ts +2 -0
- package/dist/exports/internal.d.ts.map +1 -1
- package/dist/exports/internal.js +2 -0
- package/dist/exports/internal.js.map +1 -1
- package/dist/exports/migrations.d.ts +5 -13
- package/dist/exports/migrations.d.ts.map +1 -1
- package/dist/exports/migrations.js +5 -13
- package/dist/exports/migrations.js.map +1 -1
- package/dist/exports/shared.d.ts +24 -2
- package/dist/exports/shared.d.ts.map +1 -1
- package/dist/exports/shared.js +23 -1
- package/dist/exports/shared.js.map +1 -1
- package/dist/fields/baseFields/slug/countVersions.d.ts.map +1 -1
- package/dist/fields/baseFields/slug/countVersions.js +6 -8
- package/dist/fields/baseFields/slug/countVersions.js.map +1 -1
- package/dist/fields/baseFields/slug/generateSlug.d.ts +14 -7
- package/dist/fields/baseFields/slug/generateSlug.d.ts.map +1 -1
- package/dist/fields/baseFields/slug/generateSlug.js +53 -73
- package/dist/fields/baseFields/slug/generateSlug.js.map +1 -1
- package/dist/fields/baseFields/slug/types.d.ts +14 -0
- package/dist/fields/baseFields/slug/types.d.ts.map +1 -0
- package/dist/fields/baseFields/slug/types.js +6 -0
- package/dist/fields/baseFields/slug/types.js.map +1 -0
- package/dist/fields/config/client.d.ts +6 -6
- package/dist/fields/config/client.d.ts.map +1 -1
- package/dist/fields/config/client.js +14 -14
- 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 +41 -14
- package/dist/fields/config/sanitize.js.map +1 -1
- package/dist/fields/config/types.d.ts +80 -76
- package/dist/fields/config/types.d.ts.map +1 -1
- package/dist/fields/config/types.js +1 -1
- package/dist/fields/config/types.js.map +1 -1
- package/dist/fields/hooks/afterChange/promise.js +1 -1
- package/dist/fields/hooks/afterChange/promise.js.map +1 -1
- package/dist/fields/hooks/afterRead/promise.d.ts.map +1 -1
- package/dist/fields/hooks/afterRead/promise.js +13 -3
- package/dist/fields/hooks/afterRead/promise.js.map +1 -1
- package/dist/fields/hooks/beforeChange/promise.d.ts.map +1 -1
- package/dist/fields/hooks/beforeChange/promise.js +3 -3
- package/dist/fields/hooks/beforeChange/promise.js.map +1 -1
- package/dist/fields/hooks/beforeDuplicate/promise.js +2 -2
- package/dist/fields/hooks/beforeDuplicate/promise.js.map +1 -1
- package/dist/fields/hooks/beforeValidate/promise.d.ts.map +1 -1
- package/dist/fields/hooks/beforeValidate/promise.js +16 -5
- package/dist/fields/hooks/beforeValidate/promise.js.map +1 -1
- package/dist/fields/hooks/beforeValidate/stripNullRows.d.ts +10 -0
- package/dist/fields/hooks/beforeValidate/stripNullRows.d.ts.map +1 -0
- package/dist/fields/hooks/beforeValidate/stripNullRows.js +18 -0
- package/dist/fields/hooks/beforeValidate/stripNullRows.js.map +1 -0
- package/dist/fields/setDefaultBeforeDuplicate.js +1 -0
- package/dist/fields/setDefaultBeforeDuplicate.js.map +1 -1
- package/dist/fields/sortableFieldTypes.d.ts.map +1 -1
- package/dist/fields/sortableFieldTypes.js +1 -0
- package/dist/fields/sortableFieldTypes.js.map +1 -1
- package/dist/fields/validations.d.ts +4 -1
- package/dist/fields/validations.d.ts.map +1 -1
- package/dist/fields/validations.js +12 -4
- package/dist/fields/validations.js.map +1 -1
- package/dist/globals/config/client.d.ts +4 -4
- 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 +2 -6
- package/dist/globals/config/sanitize.js.map +1 -1
- package/dist/globals/config/sanitize.spec.js +43 -0
- package/dist/globals/config/sanitize.spec.js.map +1 -0
- package/dist/globals/endpoints/update.d.ts.map +1 -1
- package/dist/globals/endpoints/update.js +0 -2
- package/dist/globals/endpoints/update.js.map +1 -1
- package/dist/globals/operations/findVersionByID.d.ts.map +1 -1
- package/dist/globals/operations/local/countVersions.d.ts +3 -3
- package/dist/globals/operations/local/countVersions.d.ts.map +1 -1
- package/dist/globals/operations/local/countVersions.js.map +1 -1
- package/dist/globals/operations/local/findOne.d.ts +3 -3
- package/dist/globals/operations/local/findOne.d.ts.map +1 -1
- package/dist/globals/operations/local/findOne.js.map +1 -1
- package/dist/globals/operations/local/findVersionByID.d.ts +3 -3
- package/dist/globals/operations/local/findVersionByID.d.ts.map +1 -1
- package/dist/globals/operations/local/findVersionByID.js.map +1 -1
- package/dist/globals/operations/local/findVersions.d.ts +3 -3
- package/dist/globals/operations/local/findVersions.d.ts.map +1 -1
- package/dist/globals/operations/local/findVersions.js.map +1 -1
- package/dist/globals/operations/local/restoreVersion.d.ts +3 -3
- package/dist/globals/operations/local/restoreVersion.d.ts.map +1 -1
- package/dist/globals/operations/local/restoreVersion.js.map +1 -1
- package/dist/globals/operations/local/update.d.ts +7 -9
- package/dist/globals/operations/local/update.d.ts.map +1 -1
- package/dist/globals/operations/local/update.js +1 -2
- package/dist/globals/operations/local/update.js.map +1 -1
- package/dist/globals/operations/restoreVersion.d.ts.map +1 -1
- package/dist/globals/operations/update.d.ts +0 -1
- package/dist/globals/operations/update.d.ts.map +1 -1
- package/dist/globals/operations/update.js +52 -58
- package/dist/globals/operations/update.js.map +1 -1
- package/dist/hierarchy/resolveHierarchyCollections.js +1 -1
- package/dist/hierarchy/resolveHierarchyCollections.js.map +1 -1
- package/dist/hierarchy/sanitizeHierarchyCollection.d.ts.map +1 -1
- package/dist/hierarchy/sanitizeHierarchyCollection.js +3 -1
- package/dist/hierarchy/sanitizeHierarchyCollection.js.map +1 -1
- package/dist/hierarchy/types.d.ts +8 -1
- package/dist/hierarchy/types.d.ts.map +1 -1
- package/dist/hierarchy/types.js.map +1 -1
- package/dist/index.bundled.d.ts +864 -468
- package/dist/index.d.ts +82 -35
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +55 -37
- package/dist/index.js.map +1 -1
- package/dist/kv/adapters/DatabaseKVAdapter.d.ts.map +1 -1
- package/dist/kv/adapters/DatabaseKVAdapter.js +1 -0
- package/dist/kv/adapters/DatabaseKVAdapter.js.map +1 -1
- package/dist/kv/adapters/InMemoryKVAdapter.d.ts.map +1 -1
- package/dist/locked-documents/config.d.ts.map +1 -1
- package/dist/locked-documents/config.js +2 -1
- package/dist/locked-documents/config.js.map +1 -1
- package/dist/preferences/config.d.ts.map +1 -1
- package/dist/preferences/config.js +2 -1
- package/dist/preferences/config.js.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 +4 -1
- package/dist/preferences/keys.js.map +1 -1
- package/dist/preferences/types.d.ts +15 -0
- package/dist/preferences/types.d.ts.map +1 -1
- package/dist/preferences/types.js +3 -1
- package/dist/preferences/types.js.map +1 -1
- package/dist/query-presets/config.d.ts.map +1 -1
- package/dist/query-presets/config.js +77 -37
- 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 +3 -2
- package/dist/query-presets/constraints.js.map +1 -1
- package/dist/query-presets/types.d.ts +1 -1
- package/dist/query-presets/types.d.ts.map +1 -1
- package/dist/queues/config/collection.d.ts.map +1 -1
- package/dist/queues/config/collection.js +2 -1
- package/dist/queues/config/collection.js.map +1 -1
- package/dist/queues/config/generateJobsJSONSchemas.d.ts +1 -1
- package/dist/queues/config/generateJobsJSONSchemas.d.ts.map +1 -1
- package/dist/queues/config/generateJobsJSONSchemas.js +33 -12
- package/dist/queues/config/generateJobsJSONSchemas.js.map +1 -1
- package/dist/queues/config/global.d.ts.map +1 -1
- package/dist/queues/config/global.js +2 -1
- package/dist/queues/config/global.js.map +1 -1
- package/dist/queues/errors/index.d.ts.map +1 -1
- package/dist/queues/localAPI.d.ts +8 -8
- package/dist/queues/localAPI.d.ts.map +1 -1
- package/dist/queues/operations/runJobs/runJob/importHandlerPath.d.ts +1 -1
- package/dist/queues/operations/runJobs/runJob/importHandlerPath.d.ts.map +1 -1
- package/dist/queues/utilities/getCurrentDate.d.ts.map +1 -1
- package/dist/types/constants.d.ts +2 -2
- package/dist/types/constants.d.ts.map +1 -1
- package/dist/types/index.d.ts +18 -8
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/uploads/cropImage.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/processMultipart.d.ts.map +1 -1
- package/dist/uploads/fetchAPI-multipart/processMultipart.js +4 -0
- package/dist/uploads/fetchAPI-multipart/processMultipart.js.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 +7 -19
- package/dist/uploads/getBaseFields.js.map +1 -1
- package/dist/uploads/getFileByPath.d.ts +1 -1
- package/dist/uploads/image-resizing/getImageResizeAction.d.ts +1 -1
- package/dist/uploads/matchMimeType.d.ts +8 -0
- package/dist/uploads/matchMimeType.d.ts.map +1 -0
- package/dist/uploads/matchMimeType.js +19 -0
- package/dist/uploads/matchMimeType.js.map +1 -0
- package/dist/uploads/matchMimeType.spec.js +66 -0
- package/dist/uploads/matchMimeType.spec.js.map +1 -0
- package/dist/uploads/safeFetch.d.ts +1 -1
- package/dist/uploads/safeFetch.d.ts.map +1 -1
- package/dist/uploads/safeFetch.js +11 -5
- package/dist/uploads/safeFetch.js.map +1 -1
- package/dist/uploads/types.d.ts +33 -29
- package/dist/uploads/types.d.ts.map +1 -1
- package/dist/uploads/types.js.map +1 -1
- package/dist/utilities/addDataAndFileToRequest.d.ts.map +1 -1
- package/dist/utilities/addDataAndFileToRequest.js +6 -0
- package/dist/utilities/addDataAndFileToRequest.js.map +1 -1
- package/dist/utilities/appendDateTimezoneSelectFields.js +2 -2
- package/dist/utilities/appendDateTimezoneSelectFields.js.map +1 -1
- package/dist/utilities/configToJSONSchema.d.ts +68 -16
- package/dist/utilities/configToJSONSchema.d.ts.map +1 -1
- package/dist/utilities/configToJSONSchema.js +312 -117
- package/dist/utilities/configToJSONSchema.js.map +1 -1
- package/dist/utilities/configToJSONSchema.spec.js +656 -85
- package/dist/utilities/configToJSONSchema.spec.js.map +1 -1
- package/dist/utilities/createLocalReq.d.ts +2 -2
- package/dist/utilities/createLocalReq.d.ts.map +1 -1
- package/dist/utilities/createLocalReq.js.map +1 -1
- package/dist/utilities/createPayloadRequest.d.ts.map +1 -1
- package/dist/utilities/createPayloadRequest.js +1 -0
- package/dist/utilities/createPayloadRequest.js.map +1 -1
- package/dist/utilities/deepCopyObject.d.ts.map +1 -1
- package/dist/utilities/deepCopyObject.js +8 -0
- package/dist/utilities/deepCopyObject.js.map +1 -1
- package/dist/utilities/dependencies/dependencyChecker.js +1 -1
- package/dist/utilities/dependencies/dependencyChecker.js.map +1 -1
- package/dist/utilities/dependencies/getDependencies.d.ts.map +1 -1
- package/dist/utilities/dependencies/getDependencies.js +5 -5
- package/dist/utilities/dependencies/getDependencies.js.map +1 -1
- package/dist/utilities/dynamicImport.js +1 -1
- package/dist/utilities/dynamicImport.js.map +1 -1
- package/dist/utilities/filterDataToSelectedLocales.d.ts.map +1 -1
- package/dist/utilities/filterDataToSelectedLocales.js +5 -12
- package/dist/utilities/filterDataToSelectedLocales.js.map +1 -1
- package/dist/utilities/filterDataToSelectedLocales.spec.js +1 -2
- package/dist/utilities/filterDataToSelectedLocales.spec.js.map +1 -1
- package/dist/utilities/flattenAllFields.d.ts.map +1 -1
- package/dist/utilities/flattenAllFields.js +7 -22
- package/dist/utilities/flattenAllFields.js.map +1 -1
- package/dist/utilities/formatErrors.d.ts.map +1 -1
- package/dist/utilities/formatErrors.js +3 -1
- package/dist/utilities/formatErrors.js.map +1 -1
- package/dist/utilities/getDataByPath.d.ts.map +1 -1
- package/dist/utilities/getEntityPermissions/getEntityPermissions.d.ts.map +1 -1
- package/dist/utilities/getEntityPermissions/getEntityPermissions.js +2 -0
- package/dist/utilities/getEntityPermissions/getEntityPermissions.js.map +1 -1
- package/dist/utilities/getEntityPermissions/populateFieldPermissions.d.ts +7 -1
- package/dist/utilities/getEntityPermissions/populateFieldPermissions.d.ts.map +1 -1
- package/dist/utilities/getEntityPermissions/populateFieldPermissions.js +24 -7
- package/dist/utilities/getEntityPermissions/populateFieldPermissions.js.map +1 -1
- package/dist/utilities/getFieldByPath.d.ts.map +1 -1
- package/dist/utilities/getFieldByPath.js +1 -1
- package/dist/utilities/getFieldByPath.js.map +1 -1
- package/dist/utilities/getRequestLanguage.d.ts +2 -2
- package/dist/utilities/getRequestLanguage.d.ts.map +1 -1
- package/dist/utilities/getRequestLanguage.js.map +1 -1
- package/dist/utilities/getRequestOrigin.d.ts +2 -2
- package/dist/utilities/getVersionsConfig.d.ts +1 -1
- package/dist/utilities/getVersionsConfig.js.map +1 -1
- package/dist/utilities/handleEndpoints.d.ts.map +1 -1
- package/dist/utilities/handleEndpoints.js +7 -4
- package/dist/utilities/handleEndpoints.js.map +1 -1
- package/dist/utilities/isEntityHidden.d.ts +2 -2
- package/dist/utilities/isURLAllowed.d.ts.map +1 -1
- package/dist/utilities/isURLAllowed.js +9 -3
- package/dist/utilities/isURLAllowed.js.map +1 -1
- package/dist/utilities/isURLAllowed.spec.js +78 -0
- package/dist/utilities/isURLAllowed.spec.js.map +1 -0
- package/dist/utilities/isValidID.d.ts +1 -1
- package/dist/utilities/logger.d.ts +1 -1
- package/dist/utilities/mergeLocalizedData.d.ts +14 -4
- package/dist/utilities/mergeLocalizedData.d.ts.map +1 -1
- package/dist/utilities/mergeLocalizedData.js +54 -46
- package/dist/utilities/mergeLocalizedData.js.map +1 -1
- package/dist/utilities/mergeLocalizedData.spec.js +23 -23
- package/dist/utilities/mergeLocalizedData.spec.js.map +1 -1
- package/dist/utilities/miniChalk.d.ts.map +1 -1
- package/dist/utilities/parseCookies.d.ts +1 -1
- package/dist/utilities/parseParams/index.d.ts +2 -5
- package/dist/utilities/parseParams/index.d.ts.map +1 -1
- package/dist/utilities/parseParams/index.js.map +1 -1
- package/dist/utilities/parseParams/index.spec.js +0 -9
- package/dist/utilities/parseParams/index.spec.js.map +1 -1
- package/dist/utilities/resolveSelect.d.ts.map +1 -1
- package/dist/utilities/telemetry/conf/index.d.ts.map +1 -1
- package/dist/utilities/telemetry/events/adminInit.d.ts.map +1 -1
- package/dist/utilities/telemetry/events/adminInit.js +2 -3
- package/dist/utilities/telemetry/events/adminInit.js.map +1 -1
- package/dist/utilities/telemetry/events/serverInit.d.ts.map +1 -1
- package/dist/utilities/telemetry/events/serverInit.js +2 -3
- package/dist/utilities/telemetry/events/serverInit.js.map +1 -1
- package/dist/utilities/telemetry/index.d.ts +15 -4
- package/dist/utilities/telemetry/index.d.ts.map +1 -1
- package/dist/utilities/telemetry/index.js +6 -1
- package/dist/utilities/telemetry/index.js.map +1 -1
- package/dist/utilities/telemetry/index.spec.js +43 -0
- package/dist/utilities/telemetry/index.spec.js.map +1 -0
- package/dist/utilities/transformColumnPreferences.js +4 -2
- package/dist/utilities/transformColumnPreferences.js.map +1 -1
- package/dist/utilities/traverseFields.d.ts.map +1 -1
- package/dist/utilities/traverseFields.js +2 -4
- package/dist/utilities/traverseFields.js.map +1 -1
- package/dist/utilities/traverseForLocalizedFields.d.ts.map +1 -1
- package/dist/utilities/traverseForLocalizedFields.js +3 -0
- package/dist/utilities/traverseForLocalizedFields.js.map +1 -1
- package/dist/versions/baseFields.d.ts +1 -2
- package/dist/versions/baseFields.d.ts.map +1 -1
- package/dist/versions/baseFields.js +0 -13
- package/dist/versions/baseFields.js.map +1 -1
- package/dist/versions/buildCollectionFields.d.ts.map +1 -1
- package/dist/versions/buildCollectionFields.js +0 -2
- package/dist/versions/buildCollectionFields.js.map +1 -1
- package/dist/versions/buildGlobalFields.d.ts.map +1 -1
- package/dist/versions/buildGlobalFields.js +0 -2
- package/dist/versions/buildGlobalFields.js.map +1 -1
- package/dist/versions/buildSingleLocalePublishData.d.ts +32 -0
- package/dist/versions/buildSingleLocalePublishData.d.ts.map +1 -0
- package/dist/versions/buildSingleLocalePublishData.js +37 -0
- package/dist/versions/buildSingleLocalePublishData.js.map +1 -0
- package/dist/versions/defaults.d.ts.map +1 -1
- package/dist/versions/getLatestCollectionVersion.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/saveVersion.d.ts +0 -2
- package/dist/versions/saveVersion.d.ts.map +1 -1
- package/dist/versions/saveVersion.js +12 -17
- package/dist/versions/saveVersion.js.map +1 -1
- package/dist/versions/schedule/job.d.ts.map +1 -1
- package/dist/versions/schedule/job.js +6 -10
- package/dist/versions/schedule/job.js.map +1 -1
- package/dist/versions/types.d.ts +2 -15
- package/dist/versions/types.d.ts.map +1 -1
- package/dist/versions/types.js.map +1 -1
- package/package.json +23 -20
- package/dist/database/migrations/templates/localizeStatus.d.ts +0 -10
- package/dist/database/migrations/templates/localizeStatus.d.ts.map +0 -1
- package/dist/database/migrations/templates/localizeStatus.js +0 -54
- package/dist/database/migrations/templates/localizeStatus.js.map +0 -1
- package/dist/fields/baseFields/slug/index.d.ts +0 -89
- package/dist/fields/baseFields/slug/index.d.ts.map +0 -1
- package/dist/fields/baseFields/slug/index.js +0 -81
- package/dist/fields/baseFields/slug/index.js.map +0 -1
- package/dist/versions/migrations/localizeStatus/index.d.ts +0 -12
- package/dist/versions/migrations/localizeStatus/index.d.ts.map +0 -1
- package/dist/versions/migrations/localizeStatus/index.js +0 -33
- package/dist/versions/migrations/localizeStatus/index.js.map +0 -1
- package/dist/versions/migrations/localizeStatus/mongo/down.d.ts +0 -9
- package/dist/versions/migrations/localizeStatus/mongo/down.d.ts.map +0 -1
- package/dist/versions/migrations/localizeStatus/mongo/down.js +0 -112
- package/dist/versions/migrations/localizeStatus/mongo/down.js.map +0 -1
- package/dist/versions/migrations/localizeStatus/mongo/index.d.ts +0 -8
- package/dist/versions/migrations/localizeStatus/mongo/index.d.ts.map +0 -1
- package/dist/versions/migrations/localizeStatus/mongo/index.js +0 -8
- package/dist/versions/migrations/localizeStatus/mongo/index.js.map +0 -1
- package/dist/versions/migrations/localizeStatus/mongo/up.d.ts +0 -9
- package/dist/versions/migrations/localizeStatus/mongo/up.d.ts.map +0 -1
- package/dist/versions/migrations/localizeStatus/mongo/up.js +0 -220
- package/dist/versions/migrations/localizeStatus/mongo/up.js.map +0 -1
- package/dist/versions/migrations/localizeStatus/sql/down.d.ts +0 -11
- package/dist/versions/migrations/localizeStatus/sql/down.d.ts.map +0 -1
- package/dist/versions/migrations/localizeStatus/sql/down.js +0 -213
- package/dist/versions/migrations/localizeStatus/sql/down.js.map +0 -1
- package/dist/versions/migrations/localizeStatus/sql/index.d.ts +0 -8
- package/dist/versions/migrations/localizeStatus/sql/index.d.ts.map +0 -1
- package/dist/versions/migrations/localizeStatus/sql/index.js +0 -8
- package/dist/versions/migrations/localizeStatus/sql/index.js.map +0 -1
- package/dist/versions/migrations/localizeStatus/sql/migrateMainCollection.d.ts +0 -13
- package/dist/versions/migrations/localizeStatus/sql/migrateMainCollection.d.ts.map +0 -1
- package/dist/versions/migrations/localizeStatus/sql/migrateMainCollection.js +0 -51
- package/dist/versions/migrations/localizeStatus/sql/migrateMainCollection.js.map +0 -1
- package/dist/versions/migrations/localizeStatus/sql/migrateMainGlobal.d.ts +0 -13
- package/dist/versions/migrations/localizeStatus/sql/migrateMainGlobal.d.ts.map +0 -1
- package/dist/versions/migrations/localizeStatus/sql/migrateMainGlobal.js +0 -54
- package/dist/versions/migrations/localizeStatus/sql/migrateMainGlobal.js.map +0 -1
- package/dist/versions/migrations/localizeStatus/sql/up.d.ts +0 -11
- package/dist/versions/migrations/localizeStatus/sql/up.d.ts.map +0 -1
- package/dist/versions/migrations/localizeStatus/sql/up.js +0 -277
- package/dist/versions/migrations/localizeStatus/sql/up.js.map +0 -1
- package/dist/versions/saveSnapshot.d.ts +0 -18
- package/dist/versions/saveSnapshot.d.ts.map +0 -1
- package/dist/versions/saveSnapshot.js +0 -38
- package/dist/versions/saveSnapshot.js.map +0 -1
|
@@ -1,10 +1,13 @@
|
|
|
1
|
+
import { createHash } from 'crypto';
|
|
1
2
|
import { MissingEditorProp } from '../errors/MissingEditorProp.js';
|
|
2
|
-
import { fieldAffectsData } from '../fields/config/types.js';
|
|
3
|
+
import { fieldAffectsData, fieldIsVirtual } from '../fields/config/types.js';
|
|
3
4
|
import { generateJobsJSONSchemas } from '../queues/config/generateJobsJSONSchemas.js';
|
|
4
5
|
import { flattenAllFields } from './flattenAllFields.js';
|
|
5
|
-
import { formatNames } from './formatLabels.js';
|
|
6
|
+
import { formatNames, toWords } from './formatLabels.js';
|
|
6
7
|
import { getCollectionIDFieldTypes } from './getCollectionIDFieldTypes.js';
|
|
7
8
|
import { optionsAreEqual } from './optionsAreEqual.js';
|
|
9
|
+
// Virtual fields (computed) and join fields (derived from the inverse relationship) are read-only.
|
|
10
|
+
const fieldIsInputExcluded = (field)=>field.type === 'join' || fieldIsVirtual(field);
|
|
8
11
|
const fieldIsRequired = (field)=>{
|
|
9
12
|
const isConditional = Boolean(field?.admin && field?.admin?.condition);
|
|
10
13
|
if (isConditional) {
|
|
@@ -33,7 +36,7 @@ function generateEntitySchemas(entities) {
|
|
|
33
36
|
...entities
|
|
34
37
|
].reduce((acc, { slug })=>{
|
|
35
38
|
acc[slug] = {
|
|
36
|
-
$ref:
|
|
39
|
+
$ref: `#/$defs/${slug}`
|
|
37
40
|
};
|
|
38
41
|
return acc;
|
|
39
42
|
}, {});
|
|
@@ -49,7 +52,23 @@ function generateEntitySelectSchemas(entities) {
|
|
|
49
52
|
...entities
|
|
50
53
|
].reduce((acc, { slug })=>{
|
|
51
54
|
acc[slug] = {
|
|
52
|
-
$ref:
|
|
55
|
+
$ref: `#/$defs/${slug}_select`
|
|
56
|
+
};
|
|
57
|
+
return acc;
|
|
58
|
+
}, {});
|
|
59
|
+
return {
|
|
60
|
+
type: 'object',
|
|
61
|
+
additionalProperties: false,
|
|
62
|
+
properties,
|
|
63
|
+
required: Object.keys(properties)
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
function generateEntityInputSchemas(entities) {
|
|
67
|
+
const properties = [
|
|
68
|
+
...entities
|
|
69
|
+
].reduce((acc, { slug })=>{
|
|
70
|
+
acc[slug] = {
|
|
71
|
+
$ref: `#/$defs/${slug}_input`
|
|
53
72
|
};
|
|
54
73
|
return acc;
|
|
55
74
|
}, {});
|
|
@@ -120,7 +139,7 @@ function getAllowedWidgetWidths({ maxWidth, minWidth }) {
|
|
|
120
139
|
}
|
|
121
140
|
return widgetWidths.slice(minIndex, maxIndex + 1);
|
|
122
141
|
}
|
|
123
|
-
function generateWidgetSchemas({ collectionIDFieldTypes, config, i18n, interfaceNameDefinitions,
|
|
142
|
+
function generateWidgetSchemas({ collectionIDFieldTypes, config, forceInlineBlocks, i18n, interfaceNameDefinitions, typeStringDefinitions }) {
|
|
124
143
|
const widgets = config.admin?.dashboard?.widgets ?? [];
|
|
125
144
|
const definitions = {};
|
|
126
145
|
const properties = {};
|
|
@@ -132,9 +151,17 @@ function generateWidgetSchemas({ collectionIDFieldTypes, config, i18n, interface
|
|
|
132
151
|
});
|
|
133
152
|
let dataSchema;
|
|
134
153
|
if (widget.fields?.length) {
|
|
135
|
-
const widgetFieldSchemas = fieldsToJSONSchema(
|
|
136
|
-
|
|
137
|
-
|
|
154
|
+
const widgetFieldSchemas = fieldsToJSONSchema({
|
|
155
|
+
collectionIDFieldTypes,
|
|
156
|
+
config,
|
|
157
|
+
fields: flattenAllFields({
|
|
158
|
+
fields: widget.fields
|
|
159
|
+
}),
|
|
160
|
+
forceInlineBlocks,
|
|
161
|
+
i18n,
|
|
162
|
+
interfaceNameDefinitions,
|
|
163
|
+
typeStringDefinitions
|
|
164
|
+
});
|
|
138
165
|
dataSchema = {
|
|
139
166
|
type: 'object',
|
|
140
167
|
additionalProperties: false,
|
|
@@ -161,7 +188,7 @@ function generateWidgetSchemas({ collectionIDFieldTypes, config, i18n, interface
|
|
|
161
188
|
]
|
|
162
189
|
};
|
|
163
190
|
properties[widget.slug] = {
|
|
164
|
-
$ref:
|
|
191
|
+
$ref: `#/$defs/${definition}`
|
|
165
192
|
};
|
|
166
193
|
}
|
|
167
194
|
return {
|
|
@@ -240,7 +267,7 @@ function generateAuthEntitySchemas(entities) {
|
|
|
240
267
|
...entities
|
|
241
268
|
].filter(({ auth })=>Boolean(auth)).map(({ slug })=>{
|
|
242
269
|
return {
|
|
243
|
-
$ref:
|
|
270
|
+
$ref: `#/$defs/${slug}`
|
|
244
271
|
};
|
|
245
272
|
}, {});
|
|
246
273
|
return {
|
|
@@ -299,17 +326,35 @@ function entityOrFieldToJsDocs({ entity, i18n }) {
|
|
|
299
326
|
}
|
|
300
327
|
return description;
|
|
301
328
|
}
|
|
302
|
-
export function fieldsToJSONSchema(
|
|
303
|
-
* Used for relationship fields, to determine whether to use a string or number type for the ID.
|
|
304
|
-
* While there is a default ID field type set by the db adapter, they can differ on a collection-level
|
|
305
|
-
* if they have custom ID fields.
|
|
306
|
-
*/ collectionIDFieldTypes, fields, /**
|
|
307
|
-
* Allows you to define new top-level interfaces that can be re-used in the output schema.
|
|
308
|
-
*/ interfaceNameDefinitions, config, i18n, opts = {}) {
|
|
329
|
+
export function fieldsToJSONSchema({ collectionIDFieldTypes, config, fields, forceInlineBlocks, i18n, interfaceNameDefinitions, typeStringDefinitions, variant = 'output' }) {
|
|
309
330
|
const requiredFieldNames = new Set();
|
|
331
|
+
// Registers a named-interface (group/tab/array/select) def and returns its `$ref` name. For input,
|
|
332
|
+
// shares the read-shaped def when byte-identical; otherwise registers an `Input`-suffixed twin so
|
|
333
|
+
// the write shape doesn't collide with the read one.
|
|
334
|
+
const registerNamedInterface = (name, schema)=>{
|
|
335
|
+
if (variant === 'input') {
|
|
336
|
+
const outputDef = interfaceNameDefinitions.get(name);
|
|
337
|
+
if (outputDef && JSON.stringify(outputDef) === JSON.stringify(schema)) {
|
|
338
|
+
return name;
|
|
339
|
+
}
|
|
340
|
+
const inputName = `${name}Input`;
|
|
341
|
+
interfaceNameDefinitions.set(inputName, schema);
|
|
342
|
+
return inputName;
|
|
343
|
+
}
|
|
344
|
+
interfaceNameDefinitions.set(name, schema);
|
|
345
|
+
return name;
|
|
346
|
+
};
|
|
310
347
|
return {
|
|
311
348
|
properties: Object.fromEntries(fields.reduce((fieldSchemas, field, index)=>{
|
|
349
|
+
if (variant === 'input' && fieldIsInputExcluded(field)) {
|
|
350
|
+
return fieldSchemas;
|
|
351
|
+
}
|
|
352
|
+
const hasDefaultValue = 'defaultValue' in field && field.defaultValue !== undefined;
|
|
353
|
+
// `isRequired` only controls nullability (a non-required field gets `| null`). It does not
|
|
354
|
+
// change between variants, so e.g. a defaulted field stays non-null on input.
|
|
312
355
|
const isRequired = fieldAffectsData(field) && fieldIsRequired(field);
|
|
356
|
+
// `isOptionalOnInput` controls the `?`: on input, defaulted fields can be omitted.
|
|
357
|
+
const isOptionalOnInput = variant === 'input' && hasDefaultValue;
|
|
313
358
|
const fieldDescription = entityOrFieldToJsDocs({
|
|
314
359
|
entity: field,
|
|
315
360
|
i18n
|
|
@@ -328,13 +373,21 @@ export function fieldsToJSONSchema(/**
|
|
|
328
373
|
items: {
|
|
329
374
|
type: 'object',
|
|
330
375
|
additionalProperties: false,
|
|
331
|
-
...fieldsToJSONSchema(
|
|
376
|
+
...fieldsToJSONSchema({
|
|
377
|
+
collectionIDFieldTypes,
|
|
378
|
+
config,
|
|
379
|
+
fields: field.flattenedFields,
|
|
380
|
+
forceInlineBlocks,
|
|
381
|
+
i18n,
|
|
382
|
+
interfaceNameDefinitions,
|
|
383
|
+
typeStringDefinitions,
|
|
384
|
+
variant
|
|
385
|
+
})
|
|
332
386
|
}
|
|
333
387
|
};
|
|
334
388
|
if (field.interfaceName) {
|
|
335
|
-
interfaceNameDefinitions.set(field.interfaceName, fieldSchema);
|
|
336
389
|
fieldSchema = {
|
|
337
|
-
$ref:
|
|
390
|
+
$ref: `#/$defs/${registerNamedInterface(field.interfaceName, fieldSchema)}`
|
|
338
391
|
};
|
|
339
392
|
}
|
|
340
393
|
break;
|
|
@@ -344,25 +397,26 @@ export function fieldsToJSONSchema(/**
|
|
|
344
397
|
// Check for a case where no blocks are provided.
|
|
345
398
|
// We need to generate an empty array for this case, note that JSON schema 4 doesn't support empty arrays
|
|
346
399
|
// so the best we can get is `unknown[]`
|
|
347
|
-
const hasBlocks = Boolean(field.
|
|
400
|
+
const hasBlocks = Boolean(field.blocks.length);
|
|
348
401
|
fieldSchema = {
|
|
349
402
|
...baseFieldSchema,
|
|
350
403
|
type: withNullableJSONSchemaType('array', isRequired),
|
|
351
404
|
items: hasBlocks ? {
|
|
352
|
-
oneOf:
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
return {};
|
|
357
|
-
}
|
|
358
|
-
if (!opts.forceInlineBlocks) {
|
|
359
|
-
return {
|
|
360
|
-
$ref: `#/definitions/${resolvedBlock.interfaceName ?? resolvedBlock.slug}`
|
|
361
|
-
};
|
|
362
|
-
}
|
|
363
|
-
block = resolvedBlock;
|
|
405
|
+
oneOf: field.blocks.map((blockOrReference)=>{
|
|
406
|
+
const block = typeof blockOrReference === 'string' ? config?.blocks?.find((b)=>b.slug === blockOrReference) : blockOrReference;
|
|
407
|
+
if (!block) {
|
|
408
|
+
return {};
|
|
364
409
|
}
|
|
365
|
-
const blockFieldSchemas = fieldsToJSONSchema(
|
|
410
|
+
const blockFieldSchemas = fieldsToJSONSchema({
|
|
411
|
+
collectionIDFieldTypes,
|
|
412
|
+
config,
|
|
413
|
+
fields: block.flattenedFields,
|
|
414
|
+
forceInlineBlocks,
|
|
415
|
+
i18n,
|
|
416
|
+
interfaceNameDefinitions,
|
|
417
|
+
typeStringDefinitions,
|
|
418
|
+
variant
|
|
419
|
+
});
|
|
366
420
|
const blockSchema = {
|
|
367
421
|
type: 'object',
|
|
368
422
|
additionalProperties: false,
|
|
@@ -377,13 +431,9 @@ export function fieldsToJSONSchema(/**
|
|
|
377
431
|
...blockFieldSchemas.required
|
|
378
432
|
]
|
|
379
433
|
};
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
$ref: `#/definitions/${block.interfaceName}`
|
|
384
|
-
};
|
|
385
|
-
}
|
|
386
|
-
return blockSchema;
|
|
434
|
+
return forceInlineBlocks ? blockSchema : {
|
|
435
|
+
$ref: `#/$defs/${registerBlockInterface(block, blockSchema, interfaceNameDefinitions, variant)}`
|
|
436
|
+
};
|
|
387
437
|
})
|
|
388
438
|
} : {}
|
|
389
439
|
};
|
|
@@ -400,6 +450,7 @@ export function fieldsToJSONSchema(/**
|
|
|
400
450
|
case 'code':
|
|
401
451
|
case 'date':
|
|
402
452
|
case 'email':
|
|
453
|
+
case 'slug':
|
|
403
454
|
case 'textarea':
|
|
404
455
|
{
|
|
405
456
|
fieldSchema = {
|
|
@@ -415,12 +466,20 @@ export function fieldsToJSONSchema(/**
|
|
|
415
466
|
...baseFieldSchema,
|
|
416
467
|
type: 'object',
|
|
417
468
|
additionalProperties: false,
|
|
418
|
-
...fieldsToJSONSchema(
|
|
469
|
+
...fieldsToJSONSchema({
|
|
470
|
+
collectionIDFieldTypes,
|
|
471
|
+
config,
|
|
472
|
+
fields: field.flattenedFields,
|
|
473
|
+
forceInlineBlocks,
|
|
474
|
+
i18n,
|
|
475
|
+
interfaceNameDefinitions,
|
|
476
|
+
typeStringDefinitions,
|
|
477
|
+
variant
|
|
478
|
+
})
|
|
419
479
|
};
|
|
420
480
|
if (field.interfaceName) {
|
|
421
|
-
interfaceNameDefinitions.set(field.interfaceName, fieldSchema);
|
|
422
481
|
fieldSchema = {
|
|
423
|
-
$ref:
|
|
482
|
+
$ref: `#/$defs/${registerNamedInterface(field.interfaceName, fieldSchema)}`
|
|
424
483
|
};
|
|
425
484
|
}
|
|
426
485
|
}
|
|
@@ -444,7 +503,7 @@ export function fieldsToJSONSchema(/**
|
|
|
444
503
|
type: collectionIDFieldTypes[collection]
|
|
445
504
|
},
|
|
446
505
|
{
|
|
447
|
-
$ref:
|
|
506
|
+
$ref: `#/$defs/${collection}`
|
|
448
507
|
}
|
|
449
508
|
]
|
|
450
509
|
}
|
|
@@ -462,7 +521,7 @@ export function fieldsToJSONSchema(/**
|
|
|
462
521
|
type: collectionIDFieldTypes[field.collection]
|
|
463
522
|
},
|
|
464
523
|
{
|
|
465
|
-
$ref:
|
|
524
|
+
$ref: `#/$defs/${field.collection}`
|
|
466
525
|
}
|
|
467
526
|
]
|
|
468
527
|
};
|
|
@@ -545,9 +604,8 @@ export function fieldsToJSONSchema(/**
|
|
|
545
604
|
enum: buildOptionEnums(field.options)
|
|
546
605
|
};
|
|
547
606
|
if (field.interfaceName) {
|
|
548
|
-
interfaceNameDefinitions.set(field.interfaceName, fieldSchema);
|
|
549
607
|
fieldSchema = {
|
|
550
|
-
$ref:
|
|
608
|
+
$ref: `#/$defs/${registerNamedInterface(field.interfaceName, fieldSchema)}`
|
|
551
609
|
};
|
|
552
610
|
}
|
|
553
611
|
break;
|
|
@@ -555,6 +613,19 @@ export function fieldsToJSONSchema(/**
|
|
|
555
613
|
case 'relationship':
|
|
556
614
|
case 'upload':
|
|
557
615
|
{
|
|
616
|
+
// Read: an ID or the populated doc. Input: only the ID, so drop the `$ref`.
|
|
617
|
+
const relationValueSchema = (relation)=>variant === 'input' ? {
|
|
618
|
+
type: collectionIDFieldTypes[relation]
|
|
619
|
+
} : {
|
|
620
|
+
oneOf: [
|
|
621
|
+
{
|
|
622
|
+
type: collectionIDFieldTypes[relation]
|
|
623
|
+
},
|
|
624
|
+
{
|
|
625
|
+
$ref: `#/$defs/${relation}`
|
|
626
|
+
}
|
|
627
|
+
]
|
|
628
|
+
};
|
|
558
629
|
if (Array.isArray(field.relationTo)) {
|
|
559
630
|
if (field.hasMany) {
|
|
560
631
|
fieldSchema = {
|
|
@@ -569,16 +640,7 @@ export function fieldsToJSONSchema(/**
|
|
|
569
640
|
relationTo: {
|
|
570
641
|
const: relation
|
|
571
642
|
},
|
|
572
|
-
value:
|
|
573
|
-
oneOf: [
|
|
574
|
-
{
|
|
575
|
-
type: collectionIDFieldTypes[relation]
|
|
576
|
-
},
|
|
577
|
-
{
|
|
578
|
-
$ref: `#/definitions/${relation}`
|
|
579
|
-
}
|
|
580
|
-
]
|
|
581
|
-
}
|
|
643
|
+
value: relationValueSchema(relation)
|
|
582
644
|
},
|
|
583
645
|
required: [
|
|
584
646
|
'value',
|
|
@@ -599,16 +661,7 @@ export function fieldsToJSONSchema(/**
|
|
|
599
661
|
relationTo: {
|
|
600
662
|
const: relation
|
|
601
663
|
},
|
|
602
|
-
value:
|
|
603
|
-
oneOf: [
|
|
604
|
-
{
|
|
605
|
-
type: collectionIDFieldTypes[relation]
|
|
606
|
-
},
|
|
607
|
-
{
|
|
608
|
-
$ref: `#/definitions/${relation}`
|
|
609
|
-
}
|
|
610
|
-
]
|
|
611
|
-
}
|
|
664
|
+
value: relationValueSchema(relation)
|
|
612
665
|
},
|
|
613
666
|
required: [
|
|
614
667
|
'value',
|
|
@@ -622,17 +675,24 @@ export function fieldsToJSONSchema(/**
|
|
|
622
675
|
fieldSchema = {
|
|
623
676
|
...baseFieldSchema,
|
|
624
677
|
type: withNullableJSONSchemaType('array', isRequired),
|
|
625
|
-
items: {
|
|
678
|
+
items: variant === 'input' ? {
|
|
679
|
+
type: collectionIDFieldTypes[field.relationTo]
|
|
680
|
+
} : {
|
|
626
681
|
oneOf: [
|
|
627
682
|
{
|
|
628
683
|
type: collectionIDFieldTypes[field.relationTo]
|
|
629
684
|
},
|
|
630
685
|
{
|
|
631
|
-
$ref:
|
|
686
|
+
$ref: `#/$defs/${field.relationTo}`
|
|
632
687
|
}
|
|
633
688
|
]
|
|
634
689
|
}
|
|
635
690
|
};
|
|
691
|
+
} else if (variant === 'input') {
|
|
692
|
+
fieldSchema = {
|
|
693
|
+
...baseFieldSchema,
|
|
694
|
+
type: withNullableJSONSchemaType(collectionIDFieldTypes[field.relationTo], isRequired)
|
|
695
|
+
};
|
|
636
696
|
} else {
|
|
637
697
|
fieldSchema = {
|
|
638
698
|
...baseFieldSchema,
|
|
@@ -641,7 +701,7 @@ export function fieldsToJSONSchema(/**
|
|
|
641
701
|
type: withNullableJSONSchemaType(collectionIDFieldTypes[field.relationTo], isRequired)
|
|
642
702
|
},
|
|
643
703
|
{
|
|
644
|
-
$ref:
|
|
704
|
+
$ref: `#/$defs/${field.relationTo}`
|
|
645
705
|
}
|
|
646
706
|
]
|
|
647
707
|
};
|
|
@@ -657,16 +717,18 @@ export function fieldsToJSONSchema(/**
|
|
|
657
717
|
if (typeof field.editor === 'function') {
|
|
658
718
|
throw new Error('Attempted to access unsanitized rich text editor.');
|
|
659
719
|
}
|
|
660
|
-
if (field.editor.
|
|
720
|
+
if (field.editor.jsonSchema) {
|
|
661
721
|
fieldSchema = {
|
|
662
722
|
...baseFieldSchema,
|
|
663
|
-
...field.editor.
|
|
723
|
+
...field.editor.jsonSchema({
|
|
664
724
|
collectionIDFieldTypes,
|
|
665
725
|
config,
|
|
666
726
|
field,
|
|
667
727
|
i18n,
|
|
668
728
|
interfaceNameDefinitions,
|
|
669
|
-
isRequired
|
|
729
|
+
isRequired,
|
|
730
|
+
typeStringDefinitions,
|
|
731
|
+
variant
|
|
670
732
|
})
|
|
671
733
|
};
|
|
672
734
|
} else {
|
|
@@ -694,7 +756,7 @@ export function fieldsToJSONSchema(/**
|
|
|
694
756
|
// only if the field's options match the global config
|
|
695
757
|
if (isTimezoneField && hasMatchingGlobalTimezones) {
|
|
696
758
|
fieldSchema = {
|
|
697
|
-
$ref:
|
|
759
|
+
$ref: `#/$defs/supportedTimezones`
|
|
698
760
|
};
|
|
699
761
|
} else {
|
|
700
762
|
if (field.hasMany) {
|
|
@@ -719,9 +781,8 @@ export function fieldsToJSONSchema(/**
|
|
|
719
781
|
}
|
|
720
782
|
}
|
|
721
783
|
if (field.interfaceName) {
|
|
722
|
-
interfaceNameDefinitions.set(field.interfaceName, fieldSchema);
|
|
723
784
|
fieldSchema = {
|
|
724
|
-
$ref:
|
|
785
|
+
$ref: `#/$defs/${registerNamedInterface(field.interfaceName, fieldSchema)}`
|
|
725
786
|
};
|
|
726
787
|
}
|
|
727
788
|
break;
|
|
@@ -734,12 +795,20 @@ export function fieldsToJSONSchema(/**
|
|
|
734
795
|
...baseFieldSchema,
|
|
735
796
|
type: 'object',
|
|
736
797
|
additionalProperties: false,
|
|
737
|
-
...fieldsToJSONSchema(
|
|
798
|
+
...fieldsToJSONSchema({
|
|
799
|
+
collectionIDFieldTypes,
|
|
800
|
+
config,
|
|
801
|
+
fields: field.flattenedFields,
|
|
802
|
+
forceInlineBlocks,
|
|
803
|
+
i18n,
|
|
804
|
+
interfaceNameDefinitions,
|
|
805
|
+
typeStringDefinitions,
|
|
806
|
+
variant
|
|
807
|
+
})
|
|
738
808
|
};
|
|
739
809
|
if (field.interfaceName) {
|
|
740
|
-
interfaceNameDefinitions.set(field.interfaceName, fieldSchema);
|
|
741
810
|
fieldSchema = {
|
|
742
|
-
$ref:
|
|
811
|
+
$ref: `#/$defs/${registerNamedInterface(field.interfaceName, fieldSchema)}`
|
|
743
812
|
};
|
|
744
813
|
}
|
|
745
814
|
break;
|
|
@@ -765,15 +834,16 @@ export function fieldsToJSONSchema(/**
|
|
|
765
834
|
break;
|
|
766
835
|
}
|
|
767
836
|
}
|
|
768
|
-
if ('
|
|
769
|
-
for (const schema of field.
|
|
837
|
+
if ('jsonSchema' in field && field?.jsonSchema?.length) {
|
|
838
|
+
for (const schema of field.jsonSchema){
|
|
770
839
|
fieldSchema = schema({
|
|
771
|
-
jsonSchema: fieldSchema
|
|
840
|
+
jsonSchema: fieldSchema,
|
|
841
|
+
variant
|
|
772
842
|
});
|
|
773
843
|
}
|
|
774
844
|
}
|
|
775
845
|
if (fieldSchema && fieldAffectsData(field)) {
|
|
776
|
-
if (isRequired && fieldSchema.required !== false) {
|
|
846
|
+
if (isRequired && !isOptionalOnInput && fieldSchema.required !== false) {
|
|
777
847
|
requiredFieldNames.add(field.name);
|
|
778
848
|
}
|
|
779
849
|
fieldSchemas.set(field.name, fieldSchema);
|
|
@@ -784,17 +854,21 @@ export function fieldsToJSONSchema(/**
|
|
|
784
854
|
};
|
|
785
855
|
}
|
|
786
856
|
// This function is part of the public API and is exported through payload/utilities
|
|
787
|
-
export function entityToJSONSchema(config, entity, interfaceNameDefinitions, defaultIDType, collectionIDFieldTypes, i18n,
|
|
857
|
+
export function entityToJSONSchema(config, entity, interfaceNameDefinitions, defaultIDType, typeStringDefinitions, collectionIDFieldTypes, i18n, forceInlineBlocks, variant = 'output') {
|
|
788
858
|
if (!collectionIDFieldTypes) {
|
|
789
859
|
collectionIDFieldTypes = getCollectionIDFieldTypes({
|
|
790
860
|
config,
|
|
791
861
|
defaultIDType
|
|
792
862
|
});
|
|
793
863
|
}
|
|
794
|
-
const
|
|
864
|
+
const isInput = variant === 'input';
|
|
865
|
+
const baseTitle = entity.typescript?.interface ? entity.typescript.interface : formatNames(entity.slug).singular;
|
|
866
|
+
const title = isInput ? `${baseTitle}Input` : baseTitle;
|
|
795
867
|
let mutableFields = [
|
|
796
868
|
...entity.flattenedFields
|
|
797
869
|
];
|
|
870
|
+
// `required: true` keeps `id` non-null. On input it's made optional further below (it's dropped
|
|
871
|
+
// from `required`) so you can omit it or pass a custom ID, but it's still never `null`.
|
|
798
872
|
const idField = {
|
|
799
873
|
name: 'id',
|
|
800
874
|
type: defaultIDType,
|
|
@@ -802,20 +876,18 @@ export function entityToJSONSchema(config, entity, interfaceNameDefinitions, def
|
|
|
802
876
|
};
|
|
803
877
|
const customIdField = mutableFields.find((field)=>field.name === 'id');
|
|
804
878
|
if (customIdField && customIdField.type !== 'group' && customIdField.type !== 'tab') {
|
|
805
|
-
mutableFields = mutableFields.map((field)=>{
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
required: true
|
|
810
|
-
};
|
|
811
|
-
}
|
|
812
|
-
return field;
|
|
813
|
-
});
|
|
879
|
+
mutableFields = mutableFields.map((field)=>field === customIdField ? {
|
|
880
|
+
...field,
|
|
881
|
+
required: true
|
|
882
|
+
} : field);
|
|
814
883
|
} else {
|
|
815
884
|
mutableFields.unshift(idField);
|
|
816
885
|
}
|
|
817
|
-
|
|
818
|
-
|
|
886
|
+
if (isInput) {
|
|
887
|
+
// Timestamps are managed by Payload. `_status` remains because create/update accept it.
|
|
888
|
+
mutableFields = mutableFields.filter((field)=>field.name !== 'createdAt' && field.name !== 'updatedAt');
|
|
889
|
+
} else if ('timestamps' in entity && entity.timestamps !== false) {
|
|
890
|
+
// mark timestamp fields required
|
|
819
891
|
mutableFields = mutableFields.map((field)=>{
|
|
820
892
|
if (field.name === 'createdAt' || field.name === 'updatedAt') {
|
|
821
893
|
return {
|
|
@@ -833,9 +905,23 @@ export function entityToJSONSchema(config, entity, interfaceNameDefinitions, def
|
|
|
833
905
|
});
|
|
834
906
|
}
|
|
835
907
|
const isAuthCollection = 'auth' in entity && entity.auth;
|
|
836
|
-
const fieldsSchema = fieldsToJSONSchema(
|
|
837
|
-
|
|
838
|
-
|
|
908
|
+
const fieldsSchema = fieldsToJSONSchema({
|
|
909
|
+
collectionIDFieldTypes,
|
|
910
|
+
config,
|
|
911
|
+
fields: mutableFields,
|
|
912
|
+
forceInlineBlocks,
|
|
913
|
+
i18n,
|
|
914
|
+
interfaceNameDefinitions,
|
|
915
|
+
typeStringDefinitions,
|
|
916
|
+
variant
|
|
917
|
+
});
|
|
918
|
+
// On input, `id` is optional (omit it, or pass a custom ID). Removing it from `required` makes
|
|
919
|
+
// it optional without making it nullable.
|
|
920
|
+
if (isInput && Array.isArray(fieldsSchema.required)) {
|
|
921
|
+
fieldsSchema.required = fieldsSchema.required.filter((name)=>name !== 'id');
|
|
922
|
+
}
|
|
923
|
+
// The `User`-union discriminator (read-side, e.g. `req.user`); not part of create/update data.
|
|
924
|
+
if (isAuthCollection && !isInput) {
|
|
839
925
|
fieldsSchema.properties = {
|
|
840
926
|
...fieldsSchema.properties,
|
|
841
927
|
collection: {
|
|
@@ -865,6 +951,47 @@ export function entityToJSONSchema(config, entity, interfaceNameDefinitions, def
|
|
|
865
951
|
}
|
|
866
952
|
return jsonSchema;
|
|
867
953
|
}
|
|
954
|
+
/**
|
|
955
|
+
* Like {@link entityToJSONSchema}, but returns a standalone schema for one collection or global:
|
|
956
|
+
* the entity plus only the `$defs` it actually uses, so it resolves on its own rather than
|
|
957
|
+
* as part of the whole config schema.
|
|
958
|
+
*
|
|
959
|
+
* Relationship/upload `$ref`s to other collections are left in place - the caller handles those.
|
|
960
|
+
* (The `input` variant reduces relationships to IDs, so only rich-text node `$defs` still ref them.)
|
|
961
|
+
*/ export function entityToStandaloneJSONSchema({ config, defaultIDType, entity, i18n, variant = 'output' }) {
|
|
962
|
+
const definitions = new Map();
|
|
963
|
+
// entityToJSONSchema fills `definitions` with everything the fields reference (node unions, blocks).
|
|
964
|
+
const schema = entityToJSONSchema(config, entity, definitions, defaultIDType, new Set(), undefined, i18n, true, variant);
|
|
965
|
+
// Timezone fields `$ref` supportedTimezones, which lives on the root config schema, so add it here.
|
|
966
|
+
const supportedTimezones = config.admin?.timezones?.supportedTimezones;
|
|
967
|
+
if (supportedTimezones?.length && schemaHasRef([
|
|
968
|
+
schema,
|
|
969
|
+
...definitions.values()
|
|
970
|
+
], '#/$defs/supportedTimezones')) {
|
|
971
|
+
definitions.set('supportedTimezones', timezonesToJSONSchema(supportedTimezones));
|
|
972
|
+
}
|
|
973
|
+
return {
|
|
974
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
975
|
+
...schema,
|
|
976
|
+
$defs: Object.fromEntries(definitions)
|
|
977
|
+
};
|
|
978
|
+
}
|
|
979
|
+
/**
|
|
980
|
+
* Recursive function that returns true if
|
|
981
|
+
* `node` has a `$ref` to `ref` somewhere inside it.
|
|
982
|
+
* */ function schemaHasRef(node, ref) {
|
|
983
|
+
if (Array.isArray(node)) {
|
|
984
|
+
return node.some((child)=>schemaHasRef(child, ref));
|
|
985
|
+
}
|
|
986
|
+
if (node && typeof node === 'object') {
|
|
987
|
+
const obj = node;
|
|
988
|
+
if (obj.$ref === ref) {
|
|
989
|
+
return true;
|
|
990
|
+
}
|
|
991
|
+
return Object.values(obj).some((value)=>schemaHasRef(value, ref));
|
|
992
|
+
}
|
|
993
|
+
return false;
|
|
994
|
+
}
|
|
868
995
|
export function fieldsToSelectJSONSchema({ config, fields, interfaceNameDefinitions }) {
|
|
869
996
|
const schema = {
|
|
870
997
|
type: 'object',
|
|
@@ -886,7 +1013,7 @@ export function fieldsToSelectJSONSchema({ config, fields, interfaceNameDefiniti
|
|
|
886
1013
|
const definition = `${field.interfaceName}_select`;
|
|
887
1014
|
interfaceNameDefinitions.set(definition, fieldSchema);
|
|
888
1015
|
fieldSchema = {
|
|
889
|
-
$ref:
|
|
1016
|
+
$ref: `#/$defs/${definition}`
|
|
890
1017
|
};
|
|
891
1018
|
}
|
|
892
1019
|
schema.properties[field.name] = {
|
|
@@ -906,7 +1033,7 @@ export function fieldsToSelectJSONSchema({ config, fields, interfaceNameDefiniti
|
|
|
906
1033
|
additionalProperties: false,
|
|
907
1034
|
properties: {}
|
|
908
1035
|
};
|
|
909
|
-
for (const block of field.
|
|
1036
|
+
for (const block of field.blocks){
|
|
910
1037
|
if (typeof block === 'string') {
|
|
911
1038
|
continue; // TODO
|
|
912
1039
|
}
|
|
@@ -919,7 +1046,7 @@ export function fieldsToSelectJSONSchema({ config, fields, interfaceNameDefiniti
|
|
|
919
1046
|
const definition = `${block.interfaceName}_select`;
|
|
920
1047
|
interfaceNameDefinitions.set(definition, blockSchema);
|
|
921
1048
|
blockSchema = {
|
|
922
|
-
$ref:
|
|
1049
|
+
$ref: `#/$defs/${definition}`
|
|
923
1050
|
};
|
|
924
1051
|
}
|
|
925
1052
|
blocksSchema.properties[block.slug] = {
|
|
@@ -1121,7 +1248,7 @@ function generateAuthOperationSchemas(collections) {
|
|
|
1121
1248
|
const properties = collections.reduce((acc, collection)=>{
|
|
1122
1249
|
if (collection.auth) {
|
|
1123
1250
|
acc[collection.slug] = {
|
|
1124
|
-
$ref:
|
|
1251
|
+
$ref: `#/$defs/auth/${collection.slug}`
|
|
1125
1252
|
};
|
|
1126
1253
|
}
|
|
1127
1254
|
return acc;
|
|
@@ -1133,11 +1260,56 @@ function generateAuthOperationSchemas(collections) {
|
|
|
1133
1260
|
required: Object.keys(properties)
|
|
1134
1261
|
};
|
|
1135
1262
|
}
|
|
1263
|
+
const hashBlockSchema = (schema)=>createHash('sha256').update(JSON.stringify(schema)).digest('hex').slice(0, 8).toUpperCase();
|
|
1264
|
+
/**
|
|
1265
|
+
* Registers a block's schema as a top-level definition and returns its name.
|
|
1266
|
+
*
|
|
1267
|
+
* The name is the block's `interfaceName`, or a PascalCase form of its slug. If a different block
|
|
1268
|
+
* already uses that name - whether it was auto-generated or an explicit `interfaceName` - this one
|
|
1269
|
+
* gets a content-hash suffix (`Hero_3F2A1B0C`) so the two don't overwrite each other. Registering
|
|
1270
|
+
* the same block shape again reuses its name.
|
|
1271
|
+
*
|
|
1272
|
+
* The `input` variant adds an `Input` suffix (`HeroInput`) - unless the read-shaped def is already
|
|
1273
|
+
* registered with byte-identical content (a block with nothing that differs between input and
|
|
1274
|
+
* output), in which case it's shared as-is rather than emitting a redundant twin.
|
|
1275
|
+
*/ export function registerBlockInterface(block, blockSchema, interfaceNameDefinitions, variant = 'output') {
|
|
1276
|
+
const rawName = block.interfaceName ?? toWords(block.slug, true);
|
|
1277
|
+
if (variant === 'input') {
|
|
1278
|
+
const outputDef = interfaceNameDefinitions.get(rawName);
|
|
1279
|
+
if (outputDef && hashBlockSchema(outputDef) === hashBlockSchema(blockSchema)) {
|
|
1280
|
+
return rawName;
|
|
1281
|
+
}
|
|
1282
|
+
}
|
|
1283
|
+
const baseName = variant === 'input' ? `${rawName}Input` : rawName;
|
|
1284
|
+
const existing = interfaceNameDefinitions.get(baseName);
|
|
1285
|
+
// The name is free - claim it.
|
|
1286
|
+
if (!existing) {
|
|
1287
|
+
interfaceNameDefinitions.set(baseName, blockSchema);
|
|
1288
|
+
return baseName;
|
|
1289
|
+
}
|
|
1290
|
+
const hash = hashBlockSchema(blockSchema);
|
|
1291
|
+
// The same block shape is already registered under this name, so reuse it.
|
|
1292
|
+
if (hashBlockSchema(existing) === hash) {
|
|
1293
|
+
return baseName;
|
|
1294
|
+
}
|
|
1295
|
+
// A different block already owns the name. Disambiguate this one with its hash.
|
|
1296
|
+
blockSchema.description = `Multiple blocks resolve to the \`${baseName}\` interface with different fields, so a content hash is appended to keep the generated types stable and unambiguous. Set a unique \`interfaceName\` on the block to choose the name yourself. See https://payloadcms.com/docs/typescript/generating-types#block-interface-name-collisions`;
|
|
1297
|
+
const uniqueName = `${baseName}_${hash}`;
|
|
1298
|
+
interfaceNameDefinitions.set(uniqueName, blockSchema);
|
|
1299
|
+
return uniqueName;
|
|
1300
|
+
}
|
|
1136
1301
|
/**
|
|
1137
1302
|
* This is used for generating the TypeScript types (payload-types.ts) with the payload generate:types command.
|
|
1138
|
-
*/ export function configToJSONSchema(config, defaultIDType, i18n,
|
|
1139
|
-
// a mutable Map
|
|
1303
|
+
*/ export function configToJSONSchema(config, defaultIDType, i18n, { forceInlineBlocks } = {}) {
|
|
1304
|
+
// a mutable Map of top-level definitions in the generated JSON Schema.
|
|
1305
|
+
// - `array`/`group`/named-`tab` fields are registered here when they set
|
|
1306
|
+
// `interfaceName` (otherwise they stay inline).
|
|
1307
|
+
// - `block` configs always register here via `registerBlockInterface`, keyed by
|
|
1308
|
+
// `block.interfaceName` if set, else a PascalCase form of the slug (with a
|
|
1309
|
+
// content-hash suffix when two different blocks resolve to the same name).
|
|
1140
1310
|
const interfaceNameDefinitions = new Map();
|
|
1311
|
+
// a mutable Set for raw TS source to be appended to `payload-types.ts`.
|
|
1312
|
+
const typeStringDefinitions = new Set();
|
|
1141
1313
|
// Used for relationship fields, to determine whether to use a string or number type for the ID.
|
|
1142
1314
|
const collectionIDFieldTypes = getCollectionIDFieldTypes({
|
|
1143
1315
|
config,
|
|
@@ -1155,8 +1327,12 @@ function generateAuthOperationSchemas(collections) {
|
|
|
1155
1327
|
entity: collection
|
|
1156
1328
|
}))
|
|
1157
1329
|
];
|
|
1330
|
+
const generateInputTypes = config.typescript?.generateInputTypes === true;
|
|
1158
1331
|
const entityDefinitions = entities.reduce((acc, { type, entity })=>{
|
|
1159
|
-
acc[entity.slug] = entityToJSONSchema(config, entity, interfaceNameDefinitions, defaultIDType, collectionIDFieldTypes, i18n,
|
|
1332
|
+
acc[entity.slug] = entityToJSONSchema(config, entity, interfaceNameDefinitions, defaultIDType, typeStringDefinitions, collectionIDFieldTypes, i18n, forceInlineBlocks);
|
|
1333
|
+
if (generateInputTypes) {
|
|
1334
|
+
acc[`${entity.slug}_input`] = entityToJSONSchema(config, entity, interfaceNameDefinitions, defaultIDType, typeStringDefinitions, collectionIDFieldTypes, i18n, forceInlineBlocks, 'input');
|
|
1335
|
+
}
|
|
1160
1336
|
const select = fieldsToSelectJSONSchema({
|
|
1161
1337
|
config,
|
|
1162
1338
|
fields: entity.flattenedFields,
|
|
@@ -1178,9 +1354,10 @@ function generateAuthOperationSchemas(collections) {
|
|
|
1178
1354
|
const widgetSchemas = generateWidgetSchemas({
|
|
1179
1355
|
collectionIDFieldTypes,
|
|
1180
1356
|
config,
|
|
1357
|
+
forceInlineBlocks,
|
|
1181
1358
|
i18n,
|
|
1182
1359
|
interfaceNameDefinitions,
|
|
1183
|
-
|
|
1360
|
+
typeStringDefinitions
|
|
1184
1361
|
});
|
|
1185
1362
|
const authOperationDefinitions = [
|
|
1186
1363
|
...config.collections
|
|
@@ -1190,7 +1367,7 @@ function generateAuthOperationSchemas(collections) {
|
|
|
1190
1367
|
}, {
|
|
1191
1368
|
auth: {}
|
|
1192
1369
|
});
|
|
1193
|
-
const jobsSchemas = config.jobs ? generateJobsJSONSchemas(config, config.jobs, interfaceNameDefinitions, collectionIDFieldTypes, i18n) : {};
|
|
1370
|
+
const jobsSchemas = config.jobs ? generateJobsJSONSchemas(config, config.jobs, interfaceNameDefinitions, collectionIDFieldTypes, typeStringDefinitions, i18n) : {};
|
|
1194
1371
|
const blocksDefinition = {
|
|
1195
1372
|
type: 'object',
|
|
1196
1373
|
additionalProperties: false,
|
|
@@ -1199,7 +1376,15 @@ function generateAuthOperationSchemas(collections) {
|
|
|
1199
1376
|
};
|
|
1200
1377
|
if (config?.blocks?.length) {
|
|
1201
1378
|
for (const block of config.blocks){
|
|
1202
|
-
const blockFieldSchemas = fieldsToJSONSchema(
|
|
1379
|
+
const blockFieldSchemas = fieldsToJSONSchema({
|
|
1380
|
+
collectionIDFieldTypes,
|
|
1381
|
+
config,
|
|
1382
|
+
fields: block.flattenedFields,
|
|
1383
|
+
forceInlineBlocks,
|
|
1384
|
+
i18n,
|
|
1385
|
+
interfaceNameDefinitions,
|
|
1386
|
+
typeStringDefinitions
|
|
1387
|
+
});
|
|
1203
1388
|
const blockSchema = {
|
|
1204
1389
|
type: 'object',
|
|
1205
1390
|
additionalProperties: false,
|
|
@@ -1214,23 +1399,22 @@ function generateAuthOperationSchemas(collections) {
|
|
|
1214
1399
|
...blockFieldSchemas.required
|
|
1215
1400
|
]
|
|
1216
1401
|
};
|
|
1217
|
-
const interfaceName = block.interfaceName ?? block.slug;
|
|
1218
|
-
interfaceNameDefinitions.set(interfaceName, blockSchema);
|
|
1219
1402
|
blocksDefinition.properties[block.slug] = {
|
|
1220
|
-
$ref:
|
|
1403
|
+
$ref: `#/$defs/${registerBlockInterface(block, blockSchema, interfaceNameDefinitions)}`
|
|
1221
1404
|
};
|
|
1222
1405
|
blocksDefinition.required.push(block.slug);
|
|
1223
1406
|
}
|
|
1224
1407
|
}
|
|
1225
1408
|
let jsonSchema = {
|
|
1226
|
-
|
|
1227
|
-
definitions: {
|
|
1409
|
+
$defs: {
|
|
1228
1410
|
supportedTimezones: timezoneDefinitions,
|
|
1229
1411
|
...entityDefinitions,
|
|
1230
1412
|
...widgetSchemas.definitions,
|
|
1231
1413
|
...Object.fromEntries(interfaceNameDefinitions),
|
|
1232
1414
|
...authOperationDefinitions
|
|
1233
1415
|
},
|
|
1416
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
1417
|
+
additionalProperties: false,
|
|
1234
1418
|
// These properties here will be very simple, as all the complexity is in the definitions. These are just the properties for the top-level `Config` type
|
|
1235
1419
|
type: 'object',
|
|
1236
1420
|
properties: {
|
|
@@ -1245,6 +1429,10 @@ function generateAuthOperationSchemas(collections) {
|
|
|
1245
1429
|
globalsSelect: generateEntitySelectSchemas(config.globals || []),
|
|
1246
1430
|
locale: generateLocaleEntitySchemas(config.localization),
|
|
1247
1431
|
widgets: widgetSchemas.schema,
|
|
1432
|
+
...generateInputTypes ? {
|
|
1433
|
+
collectionsInput: generateEntityInputSchemas(config.collections || []),
|
|
1434
|
+
globalsInput: generateEntityInputSchemas(config.globals || [])
|
|
1435
|
+
} : {},
|
|
1248
1436
|
...config.typescript?.strictDraftTypes ? {
|
|
1249
1437
|
strictDraftTypes: {
|
|
1250
1438
|
type: 'boolean',
|
|
@@ -1261,6 +1449,10 @@ function generateAuthOperationSchemas(collections) {
|
|
|
1261
1449
|
'collectionsSelect',
|
|
1262
1450
|
'collectionsJoins',
|
|
1263
1451
|
'globalsSelect',
|
|
1452
|
+
...generateInputTypes ? [
|
|
1453
|
+
'collectionsInput',
|
|
1454
|
+
'globalsInput'
|
|
1455
|
+
] : [],
|
|
1264
1456
|
...config.typescript?.strictDraftTypes ? [
|
|
1265
1457
|
'strictDraftTypes'
|
|
1266
1458
|
] : [],
|
|
@@ -1275,7 +1467,7 @@ function generateAuthOperationSchemas(collections) {
|
|
|
1275
1467
|
};
|
|
1276
1468
|
if (jobsSchemas.definitions?.size) {
|
|
1277
1469
|
for (const [key, value] of jobsSchemas.definitions){
|
|
1278
|
-
jsonSchema
|
|
1470
|
+
jsonSchema.$defs[key] = value;
|
|
1279
1471
|
}
|
|
1280
1472
|
}
|
|
1281
1473
|
if (jobsSchemas.properties) {
|
|
@@ -1299,7 +1491,10 @@ function generateAuthOperationSchemas(collections) {
|
|
|
1299
1491
|
});
|
|
1300
1492
|
}
|
|
1301
1493
|
}
|
|
1302
|
-
return
|
|
1494
|
+
return {
|
|
1495
|
+
jsonSchema,
|
|
1496
|
+
typeStringDefinitions
|
|
1497
|
+
};
|
|
1303
1498
|
}
|
|
1304
1499
|
|
|
1305
1500
|
//# sourceMappingURL=configToJSONSchema.js.map
|