payload 4.0.0-internal.5f0cd13 → 4.0.0-internal.63f8536
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/admin/RichText.d.ts +2 -2
- package/dist/admin/RichText.d.ts.map +1 -1
- package/dist/admin/RichText.js.map +1 -1
- 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 +3 -0
- package/dist/admin/adapters/index.d.ts.map +1 -1
- package/dist/admin/adapters/index.js.map +1 -1
- 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/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/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/list.d.ts +5 -0
- 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/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/getAuthFields.js +2 -2
- package/dist/auth/getAuthFields.js.map +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.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.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 +28 -21
- package/dist/auth/types.d.ts.map +1 -1
- package/dist/auth/types.js.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/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/utilities/resolveImportMapFilePath.d.ts +5 -1
- package/dist/bin/generateImportMap/utilities/resolveImportMapFilePath.d.ts.map +1 -1
- package/dist/bin/generateImportMap/utilities/resolveImportMapFilePath.js +32 -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 +4 -0
- 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 +1 -1
- 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.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 +11 -7
- package/dist/collections/config/types.d.ts.map +1 -1
- package/dist/collections/config/types.js.map +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/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/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/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 +0 -9
- 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/client.d.ts +2 -2
- package/dist/config/client.d.ts.map +1 -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/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 +137 -13
- package/dist/config/sanitize.js.map +1 -1
- package/dist/config/types.d.ts +57 -19
- 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/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 +1 -0
- package/dist/exports/internal.d.ts.map +1 -1
- package/dist/exports/internal.js +1 -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 +23 -2
- package/dist/exports/shared.d.ts.map +1 -1
- package/dist/exports/shared.js +22 -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 +3 -3
- package/dist/fields/config/client.d.ts.map +1 -1
- package/dist/fields/config/client.js +13 -13
- 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 +40 -4
- package/dist/fields/config/sanitize.js.map +1 -1
- package/dist/fields/config/types.d.ts +49 -28
- package/dist/fields/config/types.d.ts.map +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 +11 -2
- package/dist/fields/hooks/beforeValidate/promise.js.map +1 -1
- 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/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/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/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/index.bundled.d.ts +595 -368
- package/dist/index.d.ts +71 -26
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +54 -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/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 +4 -0
- 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 +75 -35
- 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 +2 -1
- package/dist/query-presets/constraints.js.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.js +2 -2
- 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/types/index.d.ts +8 -3
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.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/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.map +1 -1
- package/dist/uploads/safeFetch.js +11 -5
- package/dist/uploads/safeFetch.js.map +1 -1
- package/dist/uploads/types.d.ts +21 -0
- 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 +36 -2
- package/dist/utilities/configToJSONSchema.d.ts.map +1 -1
- package/dist/utilities/configToJSONSchema.js +204 -84
- package/dist/utilities/configToJSONSchema.js.map +1 -1
- package/dist/utilities/configToJSONSchema.spec.js +534 -29
- 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/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/getVersionsConfig.js.map +1 -1
- package/dist/utilities/handleEndpoints.d.ts.map +1 -1
- package/dist/utilities/handleEndpoints.js +7 -3
- package/dist/utilities/handleEndpoints.js.map +1 -1
- 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/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/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/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 +14 -3
- 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/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 +9 -6
- 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,11 +1,13 @@
|
|
|
1
1
|
import { createHash } from 'crypto';
|
|
2
2
|
import { MissingEditorProp } from '../errors/MissingEditorProp.js';
|
|
3
|
-
import { fieldAffectsData } from '../fields/config/types.js';
|
|
3
|
+
import { fieldAffectsData, fieldIsVirtual } from '../fields/config/types.js';
|
|
4
4
|
import { generateJobsJSONSchemas } from '../queues/config/generateJobsJSONSchemas.js';
|
|
5
5
|
import { flattenAllFields } from './flattenAllFields.js';
|
|
6
6
|
import { formatNames, toWords } from './formatLabels.js';
|
|
7
7
|
import { getCollectionIDFieldTypes } from './getCollectionIDFieldTypes.js';
|
|
8
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);
|
|
9
11
|
const fieldIsRequired = (field)=>{
|
|
10
12
|
const isConditional = Boolean(field?.admin && field?.admin?.condition);
|
|
11
13
|
if (isConditional) {
|
|
@@ -34,7 +36,7 @@ function generateEntitySchemas(entities) {
|
|
|
34
36
|
...entities
|
|
35
37
|
].reduce((acc, { slug })=>{
|
|
36
38
|
acc[slug] = {
|
|
37
|
-
$ref:
|
|
39
|
+
$ref: `#/$defs/${slug}`
|
|
38
40
|
};
|
|
39
41
|
return acc;
|
|
40
42
|
}, {});
|
|
@@ -50,7 +52,23 @@ function generateEntitySelectSchemas(entities) {
|
|
|
50
52
|
...entities
|
|
51
53
|
].reduce((acc, { slug })=>{
|
|
52
54
|
acc[slug] = {
|
|
53
|
-
$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`
|
|
54
72
|
};
|
|
55
73
|
return acc;
|
|
56
74
|
}, {});
|
|
@@ -170,7 +188,7 @@ function generateWidgetSchemas({ collectionIDFieldTypes, config, forceInlineBloc
|
|
|
170
188
|
]
|
|
171
189
|
};
|
|
172
190
|
properties[widget.slug] = {
|
|
173
|
-
$ref:
|
|
191
|
+
$ref: `#/$defs/${definition}`
|
|
174
192
|
};
|
|
175
193
|
}
|
|
176
194
|
return {
|
|
@@ -249,7 +267,7 @@ function generateAuthEntitySchemas(entities) {
|
|
|
249
267
|
...entities
|
|
250
268
|
].filter(({ auth })=>Boolean(auth)).map(({ slug })=>{
|
|
251
269
|
return {
|
|
252
|
-
$ref:
|
|
270
|
+
$ref: `#/$defs/${slug}`
|
|
253
271
|
};
|
|
254
272
|
}, {});
|
|
255
273
|
return {
|
|
@@ -308,11 +326,35 @@ function entityOrFieldToJsDocs({ entity, i18n }) {
|
|
|
308
326
|
}
|
|
309
327
|
return description;
|
|
310
328
|
}
|
|
311
|
-
export function fieldsToJSONSchema({ collectionIDFieldTypes, config, fields, forceInlineBlocks, i18n, interfaceNameDefinitions, typeStringDefinitions }) {
|
|
329
|
+
export function fieldsToJSONSchema({ collectionIDFieldTypes, config, fields, forceInlineBlocks, i18n, interfaceNameDefinitions, typeStringDefinitions, variant = 'output' }) {
|
|
312
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
|
+
};
|
|
313
347
|
return {
|
|
314
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.
|
|
315
355
|
const isRequired = fieldAffectsData(field) && fieldIsRequired(field);
|
|
356
|
+
// `isOptionalOnInput` controls the `?`: on input, defaulted fields can be omitted.
|
|
357
|
+
const isOptionalOnInput = variant === 'input' && hasDefaultValue;
|
|
316
358
|
const fieldDescription = entityOrFieldToJsDocs({
|
|
317
359
|
entity: field,
|
|
318
360
|
i18n
|
|
@@ -338,14 +380,14 @@ export function fieldsToJSONSchema({ collectionIDFieldTypes, config, fields, for
|
|
|
338
380
|
forceInlineBlocks,
|
|
339
381
|
i18n,
|
|
340
382
|
interfaceNameDefinitions,
|
|
341
|
-
typeStringDefinitions
|
|
383
|
+
typeStringDefinitions,
|
|
384
|
+
variant
|
|
342
385
|
})
|
|
343
386
|
}
|
|
344
387
|
};
|
|
345
388
|
if (field.interfaceName) {
|
|
346
|
-
interfaceNameDefinitions.set(field.interfaceName, fieldSchema);
|
|
347
389
|
fieldSchema = {
|
|
348
|
-
$ref:
|
|
390
|
+
$ref: `#/$defs/${registerNamedInterface(field.interfaceName, fieldSchema)}`
|
|
349
391
|
};
|
|
350
392
|
}
|
|
351
393
|
break;
|
|
@@ -355,12 +397,12 @@ export function fieldsToJSONSchema({ collectionIDFieldTypes, config, fields, for
|
|
|
355
397
|
// Check for a case where no blocks are provided.
|
|
356
398
|
// We need to generate an empty array for this case, note that JSON schema 4 doesn't support empty arrays
|
|
357
399
|
// so the best we can get is `unknown[]`
|
|
358
|
-
const hasBlocks = Boolean(field.
|
|
400
|
+
const hasBlocks = Boolean(field.blocks.length);
|
|
359
401
|
fieldSchema = {
|
|
360
402
|
...baseFieldSchema,
|
|
361
403
|
type: withNullableJSONSchemaType('array', isRequired),
|
|
362
404
|
items: hasBlocks ? {
|
|
363
|
-
oneOf:
|
|
405
|
+
oneOf: field.blocks.map((blockOrReference)=>{
|
|
364
406
|
const block = typeof blockOrReference === 'string' ? config?.blocks?.find((b)=>b.slug === blockOrReference) : blockOrReference;
|
|
365
407
|
if (!block) {
|
|
366
408
|
return {};
|
|
@@ -372,7 +414,8 @@ export function fieldsToJSONSchema({ collectionIDFieldTypes, config, fields, for
|
|
|
372
414
|
forceInlineBlocks,
|
|
373
415
|
i18n,
|
|
374
416
|
interfaceNameDefinitions,
|
|
375
|
-
typeStringDefinitions
|
|
417
|
+
typeStringDefinitions,
|
|
418
|
+
variant
|
|
376
419
|
});
|
|
377
420
|
const blockSchema = {
|
|
378
421
|
type: 'object',
|
|
@@ -389,7 +432,7 @@ export function fieldsToJSONSchema({ collectionIDFieldTypes, config, fields, for
|
|
|
389
432
|
]
|
|
390
433
|
};
|
|
391
434
|
return forceInlineBlocks ? blockSchema : {
|
|
392
|
-
$ref:
|
|
435
|
+
$ref: `#/$defs/${registerBlockInterface(block, blockSchema, interfaceNameDefinitions, variant)}`
|
|
393
436
|
};
|
|
394
437
|
})
|
|
395
438
|
} : {}
|
|
@@ -407,6 +450,7 @@ export function fieldsToJSONSchema({ collectionIDFieldTypes, config, fields, for
|
|
|
407
450
|
case 'code':
|
|
408
451
|
case 'date':
|
|
409
452
|
case 'email':
|
|
453
|
+
case 'slug':
|
|
410
454
|
case 'textarea':
|
|
411
455
|
{
|
|
412
456
|
fieldSchema = {
|
|
@@ -429,13 +473,13 @@ export function fieldsToJSONSchema({ collectionIDFieldTypes, config, fields, for
|
|
|
429
473
|
forceInlineBlocks,
|
|
430
474
|
i18n,
|
|
431
475
|
interfaceNameDefinitions,
|
|
432
|
-
typeStringDefinitions
|
|
476
|
+
typeStringDefinitions,
|
|
477
|
+
variant
|
|
433
478
|
})
|
|
434
479
|
};
|
|
435
480
|
if (field.interfaceName) {
|
|
436
|
-
interfaceNameDefinitions.set(field.interfaceName, fieldSchema);
|
|
437
481
|
fieldSchema = {
|
|
438
|
-
$ref:
|
|
482
|
+
$ref: `#/$defs/${registerNamedInterface(field.interfaceName, fieldSchema)}`
|
|
439
483
|
};
|
|
440
484
|
}
|
|
441
485
|
}
|
|
@@ -459,7 +503,7 @@ export function fieldsToJSONSchema({ collectionIDFieldTypes, config, fields, for
|
|
|
459
503
|
type: collectionIDFieldTypes[collection]
|
|
460
504
|
},
|
|
461
505
|
{
|
|
462
|
-
$ref:
|
|
506
|
+
$ref: `#/$defs/${collection}`
|
|
463
507
|
}
|
|
464
508
|
]
|
|
465
509
|
}
|
|
@@ -477,7 +521,7 @@ export function fieldsToJSONSchema({ collectionIDFieldTypes, config, fields, for
|
|
|
477
521
|
type: collectionIDFieldTypes[field.collection]
|
|
478
522
|
},
|
|
479
523
|
{
|
|
480
|
-
$ref:
|
|
524
|
+
$ref: `#/$defs/${field.collection}`
|
|
481
525
|
}
|
|
482
526
|
]
|
|
483
527
|
};
|
|
@@ -560,9 +604,8 @@ export function fieldsToJSONSchema({ collectionIDFieldTypes, config, fields, for
|
|
|
560
604
|
enum: buildOptionEnums(field.options)
|
|
561
605
|
};
|
|
562
606
|
if (field.interfaceName) {
|
|
563
|
-
interfaceNameDefinitions.set(field.interfaceName, fieldSchema);
|
|
564
607
|
fieldSchema = {
|
|
565
|
-
$ref:
|
|
608
|
+
$ref: `#/$defs/${registerNamedInterface(field.interfaceName, fieldSchema)}`
|
|
566
609
|
};
|
|
567
610
|
}
|
|
568
611
|
break;
|
|
@@ -570,6 +613,19 @@ export function fieldsToJSONSchema({ collectionIDFieldTypes, config, fields, for
|
|
|
570
613
|
case 'relationship':
|
|
571
614
|
case 'upload':
|
|
572
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
|
+
};
|
|
573
629
|
if (Array.isArray(field.relationTo)) {
|
|
574
630
|
if (field.hasMany) {
|
|
575
631
|
fieldSchema = {
|
|
@@ -584,16 +640,7 @@ export function fieldsToJSONSchema({ collectionIDFieldTypes, config, fields, for
|
|
|
584
640
|
relationTo: {
|
|
585
641
|
const: relation
|
|
586
642
|
},
|
|
587
|
-
value:
|
|
588
|
-
oneOf: [
|
|
589
|
-
{
|
|
590
|
-
type: collectionIDFieldTypes[relation]
|
|
591
|
-
},
|
|
592
|
-
{
|
|
593
|
-
$ref: `#/definitions/${relation}`
|
|
594
|
-
}
|
|
595
|
-
]
|
|
596
|
-
}
|
|
643
|
+
value: relationValueSchema(relation)
|
|
597
644
|
},
|
|
598
645
|
required: [
|
|
599
646
|
'value',
|
|
@@ -614,16 +661,7 @@ export function fieldsToJSONSchema({ collectionIDFieldTypes, config, fields, for
|
|
|
614
661
|
relationTo: {
|
|
615
662
|
const: relation
|
|
616
663
|
},
|
|
617
|
-
value:
|
|
618
|
-
oneOf: [
|
|
619
|
-
{
|
|
620
|
-
type: collectionIDFieldTypes[relation]
|
|
621
|
-
},
|
|
622
|
-
{
|
|
623
|
-
$ref: `#/definitions/${relation}`
|
|
624
|
-
}
|
|
625
|
-
]
|
|
626
|
-
}
|
|
664
|
+
value: relationValueSchema(relation)
|
|
627
665
|
},
|
|
628
666
|
required: [
|
|
629
667
|
'value',
|
|
@@ -637,17 +675,24 @@ export function fieldsToJSONSchema({ collectionIDFieldTypes, config, fields, for
|
|
|
637
675
|
fieldSchema = {
|
|
638
676
|
...baseFieldSchema,
|
|
639
677
|
type: withNullableJSONSchemaType('array', isRequired),
|
|
640
|
-
items: {
|
|
678
|
+
items: variant === 'input' ? {
|
|
679
|
+
type: collectionIDFieldTypes[field.relationTo]
|
|
680
|
+
} : {
|
|
641
681
|
oneOf: [
|
|
642
682
|
{
|
|
643
683
|
type: collectionIDFieldTypes[field.relationTo]
|
|
644
684
|
},
|
|
645
685
|
{
|
|
646
|
-
$ref:
|
|
686
|
+
$ref: `#/$defs/${field.relationTo}`
|
|
647
687
|
}
|
|
648
688
|
]
|
|
649
689
|
}
|
|
650
690
|
};
|
|
691
|
+
} else if (variant === 'input') {
|
|
692
|
+
fieldSchema = {
|
|
693
|
+
...baseFieldSchema,
|
|
694
|
+
type: withNullableJSONSchemaType(collectionIDFieldTypes[field.relationTo], isRequired)
|
|
695
|
+
};
|
|
651
696
|
} else {
|
|
652
697
|
fieldSchema = {
|
|
653
698
|
...baseFieldSchema,
|
|
@@ -656,7 +701,7 @@ export function fieldsToJSONSchema({ collectionIDFieldTypes, config, fields, for
|
|
|
656
701
|
type: withNullableJSONSchemaType(collectionIDFieldTypes[field.relationTo], isRequired)
|
|
657
702
|
},
|
|
658
703
|
{
|
|
659
|
-
$ref:
|
|
704
|
+
$ref: `#/$defs/${field.relationTo}`
|
|
660
705
|
}
|
|
661
706
|
]
|
|
662
707
|
};
|
|
@@ -682,7 +727,8 @@ export function fieldsToJSONSchema({ collectionIDFieldTypes, config, fields, for
|
|
|
682
727
|
i18n,
|
|
683
728
|
interfaceNameDefinitions,
|
|
684
729
|
isRequired,
|
|
685
|
-
typeStringDefinitions
|
|
730
|
+
typeStringDefinitions,
|
|
731
|
+
variant
|
|
686
732
|
})
|
|
687
733
|
};
|
|
688
734
|
} else {
|
|
@@ -710,7 +756,7 @@ export function fieldsToJSONSchema({ collectionIDFieldTypes, config, fields, for
|
|
|
710
756
|
// only if the field's options match the global config
|
|
711
757
|
if (isTimezoneField && hasMatchingGlobalTimezones) {
|
|
712
758
|
fieldSchema = {
|
|
713
|
-
$ref:
|
|
759
|
+
$ref: `#/$defs/supportedTimezones`
|
|
714
760
|
};
|
|
715
761
|
} else {
|
|
716
762
|
if (field.hasMany) {
|
|
@@ -735,9 +781,8 @@ export function fieldsToJSONSchema({ collectionIDFieldTypes, config, fields, for
|
|
|
735
781
|
}
|
|
736
782
|
}
|
|
737
783
|
if (field.interfaceName) {
|
|
738
|
-
interfaceNameDefinitions.set(field.interfaceName, fieldSchema);
|
|
739
784
|
fieldSchema = {
|
|
740
|
-
$ref:
|
|
785
|
+
$ref: `#/$defs/${registerNamedInterface(field.interfaceName, fieldSchema)}`
|
|
741
786
|
};
|
|
742
787
|
}
|
|
743
788
|
break;
|
|
@@ -757,13 +802,13 @@ export function fieldsToJSONSchema({ collectionIDFieldTypes, config, fields, for
|
|
|
757
802
|
forceInlineBlocks,
|
|
758
803
|
i18n,
|
|
759
804
|
interfaceNameDefinitions,
|
|
760
|
-
typeStringDefinitions
|
|
805
|
+
typeStringDefinitions,
|
|
806
|
+
variant
|
|
761
807
|
})
|
|
762
808
|
};
|
|
763
809
|
if (field.interfaceName) {
|
|
764
|
-
interfaceNameDefinitions.set(field.interfaceName, fieldSchema);
|
|
765
810
|
fieldSchema = {
|
|
766
|
-
$ref:
|
|
811
|
+
$ref: `#/$defs/${registerNamedInterface(field.interfaceName, fieldSchema)}`
|
|
767
812
|
};
|
|
768
813
|
}
|
|
769
814
|
break;
|
|
@@ -792,12 +837,13 @@ export function fieldsToJSONSchema({ collectionIDFieldTypes, config, fields, for
|
|
|
792
837
|
if ('jsonSchema' in field && field?.jsonSchema?.length) {
|
|
793
838
|
for (const schema of field.jsonSchema){
|
|
794
839
|
fieldSchema = schema({
|
|
795
|
-
jsonSchema: fieldSchema
|
|
840
|
+
jsonSchema: fieldSchema,
|
|
841
|
+
variant
|
|
796
842
|
});
|
|
797
843
|
}
|
|
798
844
|
}
|
|
799
845
|
if (fieldSchema && fieldAffectsData(field)) {
|
|
800
|
-
if (isRequired && fieldSchema.required !== false) {
|
|
846
|
+
if (isRequired && !isOptionalOnInput && fieldSchema.required !== false) {
|
|
801
847
|
requiredFieldNames.add(field.name);
|
|
802
848
|
}
|
|
803
849
|
fieldSchemas.set(field.name, fieldSchema);
|
|
@@ -808,17 +854,21 @@ export function fieldsToJSONSchema({ collectionIDFieldTypes, config, fields, for
|
|
|
808
854
|
};
|
|
809
855
|
}
|
|
810
856
|
// This function is part of the public API and is exported through payload/utilities
|
|
811
|
-
export function entityToJSONSchema(config, entity, interfaceNameDefinitions, defaultIDType, typeStringDefinitions, collectionIDFieldTypes, i18n, forceInlineBlocks) {
|
|
857
|
+
export function entityToJSONSchema(config, entity, interfaceNameDefinitions, defaultIDType, typeStringDefinitions, collectionIDFieldTypes, i18n, forceInlineBlocks, variant = 'output') {
|
|
812
858
|
if (!collectionIDFieldTypes) {
|
|
813
859
|
collectionIDFieldTypes = getCollectionIDFieldTypes({
|
|
814
860
|
config,
|
|
815
861
|
defaultIDType
|
|
816
862
|
});
|
|
817
863
|
}
|
|
818
|
-
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;
|
|
819
867
|
let mutableFields = [
|
|
820
868
|
...entity.flattenedFields
|
|
821
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`.
|
|
822
872
|
const idField = {
|
|
823
873
|
name: 'id',
|
|
824
874
|
type: defaultIDType,
|
|
@@ -826,20 +876,18 @@ export function entityToJSONSchema(config, entity, interfaceNameDefinitions, def
|
|
|
826
876
|
};
|
|
827
877
|
const customIdField = mutableFields.find((field)=>field.name === 'id');
|
|
828
878
|
if (customIdField && customIdField.type !== 'group' && customIdField.type !== 'tab') {
|
|
829
|
-
mutableFields = mutableFields.map((field)=>{
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
required: true
|
|
834
|
-
};
|
|
835
|
-
}
|
|
836
|
-
return field;
|
|
837
|
-
});
|
|
879
|
+
mutableFields = mutableFields.map((field)=>field === customIdField ? {
|
|
880
|
+
...field,
|
|
881
|
+
required: true
|
|
882
|
+
} : field);
|
|
838
883
|
} else {
|
|
839
884
|
mutableFields.unshift(idField);
|
|
840
885
|
}
|
|
841
|
-
|
|
842
|
-
|
|
886
|
+
if (isInput) {
|
|
887
|
+
// Managed by Payload, not set by a client.
|
|
888
|
+
mutableFields = mutableFields.filter((field)=>field.name !== 'createdAt' && field.name !== 'updatedAt' && field.name !== '_status');
|
|
889
|
+
} else if ('timestamps' in entity && entity.timestamps !== false) {
|
|
890
|
+
// mark timestamp fields required
|
|
843
891
|
mutableFields = mutableFields.map((field)=>{
|
|
844
892
|
if (field.name === 'createdAt' || field.name === 'updatedAt') {
|
|
845
893
|
return {
|
|
@@ -864,10 +912,16 @@ export function entityToJSONSchema(config, entity, interfaceNameDefinitions, def
|
|
|
864
912
|
forceInlineBlocks,
|
|
865
913
|
i18n,
|
|
866
914
|
interfaceNameDefinitions,
|
|
867
|
-
typeStringDefinitions
|
|
915
|
+
typeStringDefinitions,
|
|
916
|
+
variant
|
|
868
917
|
});
|
|
869
|
-
//
|
|
870
|
-
|
|
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) {
|
|
871
925
|
fieldsSchema.properties = {
|
|
872
926
|
...fieldsSchema.properties,
|
|
873
927
|
collection: {
|
|
@@ -897,6 +951,47 @@ export function entityToJSONSchema(config, entity, interfaceNameDefinitions, def
|
|
|
897
951
|
}
|
|
898
952
|
return jsonSchema;
|
|
899
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
|
+
}
|
|
900
995
|
export function fieldsToSelectJSONSchema({ config, fields, interfaceNameDefinitions }) {
|
|
901
996
|
const schema = {
|
|
902
997
|
type: 'object',
|
|
@@ -918,7 +1013,7 @@ export function fieldsToSelectJSONSchema({ config, fields, interfaceNameDefiniti
|
|
|
918
1013
|
const definition = `${field.interfaceName}_select`;
|
|
919
1014
|
interfaceNameDefinitions.set(definition, fieldSchema);
|
|
920
1015
|
fieldSchema = {
|
|
921
|
-
$ref:
|
|
1016
|
+
$ref: `#/$defs/${definition}`
|
|
922
1017
|
};
|
|
923
1018
|
}
|
|
924
1019
|
schema.properties[field.name] = {
|
|
@@ -938,7 +1033,7 @@ export function fieldsToSelectJSONSchema({ config, fields, interfaceNameDefiniti
|
|
|
938
1033
|
additionalProperties: false,
|
|
939
1034
|
properties: {}
|
|
940
1035
|
};
|
|
941
|
-
for (const block of field.
|
|
1036
|
+
for (const block of field.blocks){
|
|
942
1037
|
if (typeof block === 'string') {
|
|
943
1038
|
continue; // TODO
|
|
944
1039
|
}
|
|
@@ -951,7 +1046,7 @@ export function fieldsToSelectJSONSchema({ config, fields, interfaceNameDefiniti
|
|
|
951
1046
|
const definition = `${block.interfaceName}_select`;
|
|
952
1047
|
interfaceNameDefinitions.set(definition, blockSchema);
|
|
953
1048
|
blockSchema = {
|
|
954
|
-
$ref:
|
|
1049
|
+
$ref: `#/$defs/${definition}`
|
|
955
1050
|
};
|
|
956
1051
|
}
|
|
957
1052
|
blocksSchema.properties[block.slug] = {
|
|
@@ -1153,7 +1248,7 @@ function generateAuthOperationSchemas(collections) {
|
|
|
1153
1248
|
const properties = collections.reduce((acc, collection)=>{
|
|
1154
1249
|
if (collection.auth) {
|
|
1155
1250
|
acc[collection.slug] = {
|
|
1156
|
-
$ref:
|
|
1251
|
+
$ref: `#/$defs/auth/${collection.slug}`
|
|
1157
1252
|
};
|
|
1158
1253
|
}
|
|
1159
1254
|
return acc;
|
|
@@ -1169,14 +1264,26 @@ const hashBlockSchema = (schema)=>createHash('sha256').update(JSON.stringify(sch
|
|
|
1169
1264
|
/**
|
|
1170
1265
|
* Registers a block's schema as a top-level definition and returns its name.
|
|
1171
1266
|
*
|
|
1172
|
-
* The name is the block's `interfaceName`, or a PascalCase form of its slug. If a different
|
|
1173
|
-
*
|
|
1174
|
-
* two don't overwrite each other. Registering
|
|
1175
|
-
|
|
1176
|
-
|
|
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;
|
|
1177
1284
|
const existing = interfaceNameDefinitions.get(baseName);
|
|
1178
|
-
//
|
|
1179
|
-
if (!existing
|
|
1285
|
+
// The name is free - claim it.
|
|
1286
|
+
if (!existing) {
|
|
1180
1287
|
interfaceNameDefinitions.set(baseName, blockSchema);
|
|
1181
1288
|
return baseName;
|
|
1182
1289
|
}
|
|
@@ -1185,7 +1292,7 @@ const hashBlockSchema = (schema)=>createHash('sha256').update(JSON.stringify(sch
|
|
|
1185
1292
|
if (hashBlockSchema(existing) === hash) {
|
|
1186
1293
|
return baseName;
|
|
1187
1294
|
}
|
|
1188
|
-
// A different block already owns the
|
|
1295
|
+
// A different block already owns the name. Disambiguate this one with its hash.
|
|
1189
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`;
|
|
1190
1297
|
const uniqueName = `${baseName}_${hash}`;
|
|
1191
1298
|
interfaceNameDefinitions.set(uniqueName, blockSchema);
|
|
@@ -1220,8 +1327,12 @@ const hashBlockSchema = (schema)=>createHash('sha256').update(JSON.stringify(sch
|
|
|
1220
1327
|
entity: collection
|
|
1221
1328
|
}))
|
|
1222
1329
|
];
|
|
1330
|
+
const generateInputTypes = config.typescript?.generateInputTypes === true;
|
|
1223
1331
|
const entityDefinitions = entities.reduce((acc, { type, entity })=>{
|
|
1224
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
|
+
}
|
|
1225
1336
|
const select = fieldsToSelectJSONSchema({
|
|
1226
1337
|
config,
|
|
1227
1338
|
fields: entity.flattenedFields,
|
|
@@ -1289,20 +1400,21 @@ const hashBlockSchema = (schema)=>createHash('sha256').update(JSON.stringify(sch
|
|
|
1289
1400
|
]
|
|
1290
1401
|
};
|
|
1291
1402
|
blocksDefinition.properties[block.slug] = {
|
|
1292
|
-
$ref:
|
|
1403
|
+
$ref: `#/$defs/${registerBlockInterface(block, blockSchema, interfaceNameDefinitions)}`
|
|
1293
1404
|
};
|
|
1294
1405
|
blocksDefinition.required.push(block.slug);
|
|
1295
1406
|
}
|
|
1296
1407
|
}
|
|
1297
1408
|
let jsonSchema = {
|
|
1298
|
-
|
|
1299
|
-
definitions: {
|
|
1409
|
+
$defs: {
|
|
1300
1410
|
supportedTimezones: timezoneDefinitions,
|
|
1301
1411
|
...entityDefinitions,
|
|
1302
1412
|
...widgetSchemas.definitions,
|
|
1303
1413
|
...Object.fromEntries(interfaceNameDefinitions),
|
|
1304
1414
|
...authOperationDefinitions
|
|
1305
1415
|
},
|
|
1416
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
1417
|
+
additionalProperties: false,
|
|
1306
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
|
|
1307
1419
|
type: 'object',
|
|
1308
1420
|
properties: {
|
|
@@ -1317,6 +1429,10 @@ const hashBlockSchema = (schema)=>createHash('sha256').update(JSON.stringify(sch
|
|
|
1317
1429
|
globalsSelect: generateEntitySelectSchemas(config.globals || []),
|
|
1318
1430
|
locale: generateLocaleEntitySchemas(config.localization),
|
|
1319
1431
|
widgets: widgetSchemas.schema,
|
|
1432
|
+
...generateInputTypes ? {
|
|
1433
|
+
collectionsInput: generateEntityInputSchemas(config.collections || []),
|
|
1434
|
+
globalsInput: generateEntityInputSchemas(config.globals || [])
|
|
1435
|
+
} : {},
|
|
1320
1436
|
...config.typescript?.strictDraftTypes ? {
|
|
1321
1437
|
strictDraftTypes: {
|
|
1322
1438
|
type: 'boolean',
|
|
@@ -1333,6 +1449,10 @@ const hashBlockSchema = (schema)=>createHash('sha256').update(JSON.stringify(sch
|
|
|
1333
1449
|
'collectionsSelect',
|
|
1334
1450
|
'collectionsJoins',
|
|
1335
1451
|
'globalsSelect',
|
|
1452
|
+
...generateInputTypes ? [
|
|
1453
|
+
'collectionsInput',
|
|
1454
|
+
'globalsInput'
|
|
1455
|
+
] : [],
|
|
1336
1456
|
...config.typescript?.strictDraftTypes ? [
|
|
1337
1457
|
'strictDraftTypes'
|
|
1338
1458
|
] : [],
|
|
@@ -1347,7 +1467,7 @@ const hashBlockSchema = (schema)=>createHash('sha256').update(JSON.stringify(sch
|
|
|
1347
1467
|
};
|
|
1348
1468
|
if (jobsSchemas.definitions?.size) {
|
|
1349
1469
|
for (const [key, value] of jobsSchemas.definitions){
|
|
1350
|
-
jsonSchema
|
|
1470
|
+
jsonSchema.$defs[key] = value;
|
|
1351
1471
|
}
|
|
1352
1472
|
}
|
|
1353
1473
|
if (jobsSchemas.properties) {
|