@strapi/core 0.0.0-experimental.25e22c6cc9bc6b35392bb55d09f641a0a65e7403 → 0.0.0-experimental.25f7de53c1fc990bbb86d4aa43c379acfa838064
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.
Potentially problematic release.
This version of @strapi/core might be problematic. Click here for more details.
- package/LICENSE +18 -3
- package/dist/Strapi.d.ts +3 -1
- package/dist/Strapi.d.ts.map +1 -1
- package/dist/Strapi.js +437 -369
- package/dist/Strapi.js.map +1 -1
- package/dist/Strapi.mjs +426 -377
- package/dist/Strapi.mjs.map +1 -1
- package/dist/compile.js +23 -14
- package/dist/compile.js.map +1 -1
- package/dist/compile.mjs +22 -14
- package/dist/compile.mjs.map +1 -1
- package/dist/configuration/config-loader.js +110 -97
- package/dist/configuration/config-loader.js.map +1 -1
- package/dist/configuration/config-loader.mjs +109 -96
- package/dist/configuration/config-loader.mjs.map +1 -1
- package/dist/configuration/get-dirs.js +31 -29
- package/dist/configuration/get-dirs.js.map +1 -1
- package/dist/configuration/get-dirs.mjs +30 -30
- package/dist/configuration/get-dirs.mjs.map +1 -1
- package/dist/configuration/index.d.ts +1 -0
- package/dist/configuration/index.d.ts.map +1 -1
- package/dist/configuration/index.js +85 -73
- package/dist/configuration/index.js.map +1 -1
- package/dist/configuration/index.mjs +84 -69
- package/dist/configuration/index.mjs.map +1 -1
- package/dist/configuration/urls.d.ts.map +1 -1
- package/dist/configuration/urls.js +74 -61
- package/dist/configuration/urls.js.map +1 -1
- package/dist/configuration/urls.mjs +73 -62
- package/dist/configuration/urls.mjs.map +1 -1
- package/dist/container.js +27 -23
- package/dist/container.js.map +1 -1
- package/dist/container.mjs +26 -24
- package/dist/container.mjs.map +1 -1
- package/dist/core-api/controller/collection-type.js +77 -76
- package/dist/core-api/controller/collection-type.js.map +1 -1
- package/dist/core-api/controller/collection-type.mjs +76 -77
- package/dist/core-api/controller/collection-type.mjs.map +1 -1
- package/dist/core-api/controller/index.js +63 -48
- package/dist/core-api/controller/index.js.map +1 -1
- package/dist/core-api/controller/index.mjs +62 -49
- package/dist/core-api/controller/index.mjs.map +1 -1
- package/dist/core-api/controller/single-type.js +41 -40
- package/dist/core-api/controller/single-type.js.map +1 -1
- package/dist/core-api/controller/single-type.mjs +40 -41
- package/dist/core-api/controller/single-type.mjs.map +1 -1
- package/dist/core-api/controller/transform.js +72 -63
- package/dist/core-api/controller/transform.js.map +1 -1
- package/dist/core-api/controller/transform.mjs +71 -64
- package/dist/core-api/controller/transform.mjs.map +1 -1
- package/dist/core-api/routes/index.d.ts +4 -22
- package/dist/core-api/routes/index.d.ts.map +1 -1
- package/dist/core-api/routes/index.js +174 -62
- package/dist/core-api/routes/index.js.map +1 -1
- package/dist/core-api/routes/index.mjs +172 -62
- package/dist/core-api/routes/index.mjs.map +1 -1
- package/dist/core-api/routes/validation/common.d.ts +135 -0
- package/dist/core-api/routes/validation/common.d.ts.map +1 -0
- package/dist/core-api/routes/validation/common.js +201 -0
- package/dist/core-api/routes/validation/common.js.map +1 -0
- package/dist/core-api/routes/validation/common.mjs +198 -0
- package/dist/core-api/routes/validation/common.mjs.map +1 -0
- package/dist/core-api/routes/validation/component.d.ts +42 -0
- package/dist/core-api/routes/validation/component.d.ts.map +1 -0
- package/dist/core-api/routes/validation/content-type.d.ts +139 -0
- package/dist/core-api/routes/validation/content-type.d.ts.map +1 -0
- package/dist/core-api/routes/validation/content-type.js +176 -0
- package/dist/core-api/routes/validation/content-type.js.map +1 -0
- package/dist/core-api/routes/validation/content-type.mjs +174 -0
- package/dist/core-api/routes/validation/content-type.mjs.map +1 -0
- package/dist/core-api/routes/validation/index.d.ts +4 -0
- package/dist/core-api/routes/validation/index.d.ts.map +1 -0
- package/dist/core-api/service/collection-type.d.ts +2 -2
- package/dist/core-api/service/collection-type.js +73 -60
- package/dist/core-api/service/collection-type.js.map +1 -1
- package/dist/core-api/service/collection-type.mjs +72 -62
- package/dist/core-api/service/collection-type.mjs.map +1 -1
- package/dist/core-api/service/core-service.js +9 -8
- package/dist/core-api/service/core-service.js.map +1 -1
- package/dist/core-api/service/core-service.mjs +8 -9
- package/dist/core-api/service/core-service.mjs.map +1 -1
- package/dist/core-api/service/index.js +13 -13
- package/dist/core-api/service/index.js.map +1 -1
- package/dist/core-api/service/index.mjs +12 -14
- package/dist/core-api/service/index.mjs.map +1 -1
- package/dist/core-api/service/pagination.js +69 -43
- package/dist/core-api/service/pagination.js.map +1 -1
- package/dist/core-api/service/pagination.mjs +68 -47
- package/dist/core-api/service/pagination.mjs.map +1 -1
- package/dist/core-api/service/single-type.js +43 -39
- package/dist/core-api/service/single-type.js.map +1 -1
- package/dist/core-api/service/single-type.mjs +42 -41
- package/dist/core-api/service/single-type.mjs.map +1 -1
- package/dist/domain/content-type/index.js +95 -100
- package/dist/domain/content-type/index.js.map +1 -1
- package/dist/domain/content-type/index.mjs +94 -100
- package/dist/domain/content-type/index.mjs.map +1 -1
- package/dist/domain/content-type/validator.js +84 -69
- package/dist/domain/content-type/validator.js.map +1 -1
- package/dist/domain/content-type/validator.mjs +83 -68
- package/dist/domain/content-type/validator.mjs.map +1 -1
- package/dist/domain/module/index.d.ts.map +1 -1
- package/dist/domain/module/index.js +112 -100
- package/dist/domain/module/index.js.map +1 -1
- package/dist/domain/module/index.mjs +111 -99
- package/dist/domain/module/index.mjs.map +1 -1
- package/dist/domain/module/validation.js +25 -20
- package/dist/domain/module/validation.js.map +1 -1
- package/dist/domain/module/validation.mjs +24 -21
- package/dist/domain/module/validation.mjs.map +1 -1
- package/dist/ee/index.d.ts +1 -0
- package/dist/ee/index.d.ts.map +1 -1
- package/dist/ee/index.js +171 -132
- package/dist/ee/index.js.map +1 -1
- package/dist/ee/index.mjs +170 -134
- package/dist/ee/index.mjs.map +1 -1
- package/dist/ee/license.d.ts.map +1 -1
- package/dist/ee/license.js +100 -75
- package/dist/ee/license.js.map +1 -1
- package/dist/ee/license.mjs +99 -76
- package/dist/ee/license.mjs.map +1 -1
- package/dist/factories.d.ts +3 -1
- package/dist/factories.d.ts.map +1 -1
- package/dist/factories.js +80 -67
- package/dist/factories.js.map +1 -1
- package/dist/factories.mjs +77 -70
- package/dist/factories.mjs.map +1 -1
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +29 -26
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +29 -29
- package/dist/index.mjs.map +1 -1
- package/dist/loaders/admin.d.ts.map +1 -1
- package/dist/loaders/admin.js +21 -20
- package/dist/loaders/admin.js.map +1 -1
- package/dist/loaders/admin.mjs +20 -20
- package/dist/loaders/admin.mjs.map +1 -1
- package/dist/loaders/apis.js +143 -120
- package/dist/loaders/apis.js.map +1 -1
- package/dist/loaders/apis.mjs +142 -119
- package/dist/loaders/apis.mjs.map +1 -1
- package/dist/loaders/components.js +33 -34
- package/dist/loaders/components.js.map +1 -1
- package/dist/loaders/components.mjs +32 -34
- package/dist/loaders/components.mjs.map +1 -1
- package/dist/loaders/index.js +22 -20
- package/dist/loaders/index.js.map +1 -1
- package/dist/loaders/index.mjs +21 -21
- package/dist/loaders/index.mjs.map +1 -1
- package/dist/loaders/middlewares.js +29 -25
- package/dist/loaders/middlewares.js.map +1 -1
- package/dist/loaders/middlewares.mjs +28 -25
- package/dist/loaders/middlewares.mjs.map +1 -1
- package/dist/loaders/plugins/get-enabled-plugins.d.ts.map +1 -1
- package/dist/loaders/plugins/get-enabled-plugins.js +125 -102
- package/dist/loaders/plugins/get-enabled-plugins.js.map +1 -1
- package/dist/loaders/plugins/get-enabled-plugins.mjs +124 -101
- package/dist/loaders/plugins/get-enabled-plugins.mjs.map +1 -1
- package/dist/loaders/plugins/get-user-plugins-config.js +25 -24
- package/dist/loaders/plugins/get-user-plugins-config.js.map +1 -1
- package/dist/loaders/plugins/get-user-plugins-config.mjs +24 -23
- package/dist/loaders/plugins/get-user-plugins-config.mjs.map +1 -1
- package/dist/loaders/plugins/index.d.ts.map +1 -1
- package/dist/loaders/plugins/index.js +141 -104
- package/dist/loaders/plugins/index.js.map +1 -1
- package/dist/loaders/plugins/index.mjs +121 -104
- package/dist/loaders/plugins/index.mjs.map +1 -1
- package/dist/loaders/policies.js +24 -20
- package/dist/loaders/policies.js.map +1 -1
- package/dist/loaders/policies.mjs +23 -20
- package/dist/loaders/policies.mjs.map +1 -1
- package/dist/loaders/sanitizers.js +10 -4
- package/dist/loaders/sanitizers.js.map +1 -1
- package/dist/loaders/sanitizers.mjs +9 -6
- package/dist/loaders/sanitizers.mjs.map +1 -1
- package/dist/loaders/src-index.js +35 -27
- package/dist/loaders/src-index.js.map +1 -1
- package/dist/loaders/src-index.mjs +34 -29
- package/dist/loaders/src-index.mjs.map +1 -1
- package/dist/loaders/validators.js +9 -4
- package/dist/loaders/validators.js.map +1 -1
- package/dist/loaders/validators.mjs +8 -6
- package/dist/loaders/validators.mjs.map +1 -1
- package/dist/middlewares/body.d.ts.map +1 -1
- package/dist/middlewares/body.js +58 -54
- package/dist/middlewares/body.js.map +1 -1
- package/dist/middlewares/body.mjs +57 -51
- package/dist/middlewares/body.mjs.map +1 -1
- package/dist/middlewares/compression.js +6 -6
- package/dist/middlewares/compression.js.map +1 -1
- package/dist/middlewares/compression.mjs +5 -5
- package/dist/middlewares/compression.mjs.map +1 -1
- package/dist/middlewares/cors.d.ts.map +1 -1
- package/dist/middlewares/cors.js +59 -44
- package/dist/middlewares/cors.js.map +1 -1
- package/dist/middlewares/cors.mjs +58 -43
- package/dist/middlewares/cors.mjs.map +1 -1
- package/dist/middlewares/errors.js +32 -30
- package/dist/middlewares/errors.js.map +1 -1
- package/dist/middlewares/errors.mjs +31 -31
- package/dist/middlewares/errors.mjs.map +1 -1
- package/dist/middlewares/favicon.js +27 -17
- package/dist/middlewares/favicon.js.map +1 -1
- package/dist/middlewares/favicon.mjs +26 -16
- package/dist/middlewares/favicon.mjs.map +1 -1
- package/dist/middlewares/index.js +32 -30
- package/dist/middlewares/index.js.map +1 -1
- package/dist/middlewares/index.mjs +31 -31
- package/dist/middlewares/index.mjs.map +1 -1
- package/dist/middlewares/ip.js +6 -6
- package/dist/middlewares/ip.js.map +1 -1
- package/dist/middlewares/ip.mjs +5 -5
- package/dist/middlewares/ip.mjs.map +1 -1
- package/dist/middlewares/logger.js +10 -9
- package/dist/middlewares/logger.js.map +1 -1
- package/dist/middlewares/logger.mjs +9 -10
- package/dist/middlewares/logger.mjs.map +1 -1
- package/dist/middlewares/powered-by.js +13 -9
- package/dist/middlewares/powered-by.js.map +1 -1
- package/dist/middlewares/powered-by.mjs +12 -10
- package/dist/middlewares/powered-by.mjs.map +1 -1
- package/dist/middlewares/public.js +33 -29
- package/dist/middlewares/public.js.map +1 -1
- package/dist/middlewares/public.mjs +32 -28
- package/dist/middlewares/public.mjs.map +1 -1
- package/dist/middlewares/query.d.ts.map +1 -1
- package/dist/middlewares/query.js +35 -32
- package/dist/middlewares/query.js.map +1 -1
- package/dist/middlewares/query.mjs +34 -31
- package/dist/middlewares/query.mjs.map +1 -1
- package/dist/middlewares/response-time.js +10 -9
- package/dist/middlewares/response-time.js.map +1 -1
- package/dist/middlewares/response-time.mjs +9 -10
- package/dist/middlewares/response-time.mjs.map +1 -1
- package/dist/middlewares/responses.js +14 -12
- package/dist/middlewares/responses.js.map +1 -1
- package/dist/middlewares/responses.mjs +13 -13
- package/dist/middlewares/responses.mjs.map +1 -1
- package/dist/middlewares/security.d.ts.map +1 -1
- package/dist/middlewares/security.js +110 -65
- package/dist/middlewares/security.js.map +1 -1
- package/dist/middlewares/security.mjs +108 -63
- package/dist/middlewares/security.mjs.map +1 -1
- package/dist/middlewares/session.js +26 -25
- package/dist/middlewares/session.js.map +1 -1
- package/dist/middlewares/session.mjs +25 -24
- package/dist/middlewares/session.mjs.map +1 -1
- package/dist/migrations/database/5.0.0-discard-drafts.d.ts +14 -11
- package/dist/migrations/database/5.0.0-discard-drafts.d.ts.map +1 -1
- package/dist/migrations/database/5.0.0-discard-drafts.js +153 -35
- package/dist/migrations/database/5.0.0-discard-drafts.js.map +1 -1
- package/dist/migrations/database/5.0.0-discard-drafts.mjs +152 -37
- package/dist/migrations/database/5.0.0-discard-drafts.mjs.map +1 -1
- package/dist/migrations/draft-publish.d.ts +2 -2
- package/dist/migrations/draft-publish.d.ts.map +1 -1
- package/dist/migrations/draft-publish.js +61 -34
- package/dist/migrations/draft-publish.js.map +1 -1
- package/dist/migrations/draft-publish.mjs +60 -36
- package/dist/migrations/draft-publish.mjs.map +1 -1
- package/dist/migrations/i18n.d.ts +5 -0
- package/dist/migrations/i18n.d.ts.map +1 -0
- package/dist/migrations/i18n.js +71 -0
- package/dist/migrations/i18n.js.map +1 -0
- package/dist/migrations/i18n.mjs +68 -0
- package/dist/migrations/i18n.mjs.map +1 -0
- package/dist/migrations/index.d.ts +5 -0
- package/dist/migrations/index.d.ts.map +1 -0
- package/dist/migrations/index.js +29 -0
- package/dist/migrations/index.js.map +1 -0
- package/dist/migrations/index.mjs +26 -0
- package/dist/migrations/index.mjs.map +1 -0
- package/dist/package.json.js +183 -0
- package/dist/package.json.js.map +1 -0
- package/dist/package.json.mjs +160 -0
- package/dist/package.json.mjs.map +1 -0
- package/dist/providers/admin.d.ts.map +1 -1
- package/dist/providers/admin.js +27 -17
- package/dist/providers/admin.js.map +1 -1
- package/dist/providers/admin.mjs +26 -19
- package/dist/providers/admin.mjs.map +1 -1
- package/dist/providers/coreStore.js +13 -8
- package/dist/providers/coreStore.js.map +1 -1
- package/dist/providers/coreStore.mjs +12 -10
- package/dist/providers/coreStore.mjs.map +1 -1
- package/dist/providers/cron.js +19 -16
- package/dist/providers/cron.js.map +1 -1
- package/dist/providers/cron.mjs +18 -18
- package/dist/providers/cron.mjs.map +1 -1
- package/dist/providers/index.js +18 -9
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/index.mjs +17 -10
- package/dist/providers/index.mjs.map +1 -1
- package/dist/providers/provider.js +4 -3
- package/dist/providers/provider.js.map +1 -1
- package/dist/providers/provider.mjs +3 -4
- package/dist/providers/provider.mjs.map +1 -1
- package/dist/providers/registries.js +37 -32
- package/dist/providers/registries.js.map +1 -1
- package/dist/providers/registries.mjs +36 -34
- package/dist/providers/registries.mjs.map +1 -1
- package/dist/providers/telemetry.js +19 -16
- package/dist/providers/telemetry.js.map +1 -1
- package/dist/providers/telemetry.mjs +18 -18
- package/dist/providers/telemetry.mjs.map +1 -1
- package/dist/providers/webhooks.js +28 -26
- package/dist/providers/webhooks.js.map +1 -1
- package/dist/providers/webhooks.mjs +27 -28
- package/dist/providers/webhooks.mjs.map +1 -1
- package/dist/registries/apis.js +23 -20
- package/dist/registries/apis.js.map +1 -1
- package/dist/registries/apis.mjs +22 -22
- package/dist/registries/apis.mjs.map +1 -1
- package/dist/registries/components.js +35 -37
- package/dist/registries/components.js.map +1 -1
- package/dist/registries/components.mjs +34 -39
- package/dist/registries/components.mjs.map +1 -1
- package/dist/registries/content-types.js +54 -59
- package/dist/registries/content-types.js.map +1 -1
- package/dist/registries/content-types.mjs +53 -61
- package/dist/registries/content-types.mjs.map +1 -1
- package/dist/registries/controllers.js +70 -71
- package/dist/registries/controllers.js.map +1 -1
- package/dist/registries/controllers.mjs +69 -73
- package/dist/registries/controllers.mjs.map +1 -1
- package/dist/registries/custom-fields.js +75 -65
- package/dist/registries/custom-fields.js.map +1 -1
- package/dist/registries/custom-fields.mjs +74 -67
- package/dist/registries/custom-fields.mjs.map +1 -1
- package/dist/registries/hooks.js +46 -49
- package/dist/registries/hooks.js.map +1 -1
- package/dist/registries/hooks.mjs +45 -51
- package/dist/registries/hooks.mjs.map +1 -1
- package/dist/registries/middlewares.js +49 -51
- package/dist/registries/middlewares.js.map +1 -1
- package/dist/registries/middlewares.mjs +48 -53
- package/dist/registries/middlewares.mjs.map +1 -1
- package/dist/registries/models.js +14 -13
- package/dist/registries/models.js.map +1 -1
- package/dist/registries/models.mjs +13 -14
- package/dist/registries/models.mjs.map +1 -1
- package/dist/registries/modules.js +39 -36
- package/dist/registries/modules.js.map +1 -1
- package/dist/registries/modules.mjs +38 -38
- package/dist/registries/modules.mjs.map +1 -1
- package/dist/registries/namespace.js +21 -20
- package/dist/registries/namespace.js.map +1 -1
- package/dist/registries/namespace.mjs +20 -23
- package/dist/registries/namespace.mjs.map +1 -1
- package/dist/registries/plugins.js +23 -20
- package/dist/registries/plugins.js.map +1 -1
- package/dist/registries/plugins.mjs +22 -22
- package/dist/registries/plugins.mjs.map +1 -1
- package/dist/registries/policies.d.ts +1 -1
- package/dist/registries/policies.d.ts.map +1 -1
- package/dist/registries/policies.js +103 -96
- package/dist/registries/policies.js.map +1 -1
- package/dist/registries/policies.mjs +102 -98
- package/dist/registries/policies.mjs.map +1 -1
- package/dist/registries/sanitizers.js +23 -22
- package/dist/registries/sanitizers.js.map +1 -1
- package/dist/registries/sanitizers.mjs +22 -22
- package/dist/registries/sanitizers.mjs.map +1 -1
- package/dist/registries/services.js +71 -71
- package/dist/registries/services.js.map +1 -1
- package/dist/registries/services.mjs +70 -73
- package/dist/registries/services.mjs.map +1 -1
- package/dist/registries/validators.js +23 -22
- package/dist/registries/validators.js.map +1 -1
- package/dist/registries/validators.mjs +22 -22
- package/dist/registries/validators.mjs.map +1 -1
- package/dist/services/auth/index.js +74 -74
- package/dist/services/auth/index.js.map +1 -1
- package/dist/services/auth/index.mjs +73 -74
- package/dist/services/auth/index.mjs.map +1 -1
- package/dist/services/config.js +47 -43
- package/dist/services/config.js.map +1 -1
- package/dist/services/config.mjs +46 -44
- package/dist/services/config.mjs.map +1 -1
- package/dist/services/content-api/index.d.ts +10 -12
- package/dist/services/content-api/index.d.ts.map +1 -1
- package/dist/services/content-api/index.js +80 -79
- package/dist/services/content-api/index.js.map +1 -1
- package/dist/services/content-api/index.mjs +79 -79
- package/dist/services/content-api/index.mjs.map +1 -1
- package/dist/services/content-api/permissions/engine.js +8 -5
- package/dist/services/content-api/permissions/engine.js.map +1 -1
- package/dist/services/content-api/permissions/engine.mjs +7 -5
- package/dist/services/content-api/permissions/engine.mjs.map +1 -1
- package/dist/services/content-api/permissions/index.d.ts +10 -12
- package/dist/services/content-api/permissions/index.d.ts.map +1 -1
- package/dist/services/content-api/permissions/index.js +101 -81
- package/dist/services/content-api/permissions/index.js.map +1 -1
- package/dist/services/content-api/permissions/index.mjs +100 -81
- package/dist/services/content-api/permissions/index.mjs.map +1 -1
- package/dist/services/content-api/permissions/providers/action.d.ts +5 -6
- package/dist/services/content-api/permissions/providers/action.d.ts.map +1 -1
- package/dist/services/content-api/permissions/providers/action.js +17 -14
- package/dist/services/content-api/permissions/providers/action.js.map +1 -1
- package/dist/services/content-api/permissions/providers/action.mjs +16 -16
- package/dist/services/content-api/permissions/providers/action.mjs.map +1 -1
- package/dist/services/content-api/permissions/providers/condition.d.ts +5 -6
- package/dist/services/content-api/permissions/providers/condition.d.ts.map +1 -1
- package/dist/services/content-api/permissions/providers/condition.js +17 -14
- package/dist/services/content-api/permissions/providers/condition.js.map +1 -1
- package/dist/services/content-api/permissions/providers/condition.mjs +16 -16
- package/dist/services/content-api/permissions/providers/condition.mjs.map +1 -1
- package/dist/services/core-store.js +115 -95
- package/dist/services/core-store.js.map +1 -1
- package/dist/services/core-store.mjs +114 -97
- package/dist/services/core-store.mjs.map +1 -1
- package/dist/services/cron.d.ts +3 -3
- package/dist/services/cron.d.ts.map +1 -1
- package/dist/services/cron.js +74 -60
- package/dist/services/cron.js.map +1 -1
- package/dist/services/cron.mjs +73 -62
- package/dist/services/cron.mjs.map +1 -1
- package/dist/services/custom-fields.js +9 -7
- package/dist/services/custom-fields.js.map +1 -1
- package/dist/services/custom-fields.mjs +8 -9
- package/dist/services/custom-fields.mjs.map +1 -1
- package/dist/services/document-service/attributes/index.js +23 -18
- package/dist/services/document-service/attributes/index.js.map +1 -1
- package/dist/services/document-service/attributes/index.mjs +22 -19
- package/dist/services/document-service/attributes/index.mjs.map +1 -1
- package/dist/services/document-service/attributes/transforms.js +16 -15
- package/dist/services/document-service/attributes/transforms.js.map +1 -1
- package/dist/services/document-service/attributes/transforms.mjs +15 -15
- package/dist/services/document-service/attributes/transforms.mjs.map +1 -1
- package/dist/services/document-service/common.d.ts +1 -1
- package/dist/services/document-service/common.d.ts.map +1 -1
- package/dist/services/document-service/common.js +5 -4
- package/dist/services/document-service/common.js.map +1 -1
- package/dist/services/document-service/common.mjs +4 -5
- package/dist/services/document-service/common.mjs.map +1 -1
- package/dist/services/document-service/components.d.ts.map +1 -1
- package/dist/services/document-service/components.js +257 -259
- package/dist/services/document-service/components.js.map +1 -1
- package/dist/services/document-service/components.mjs +254 -262
- package/dist/services/document-service/components.mjs.map +1 -1
- package/dist/services/document-service/draft-and-publish.d.ts +1 -1
- package/dist/services/document-service/draft-and-publish.d.ts.map +1 -1
- package/dist/services/document-service/draft-and-publish.js +94 -54
- package/dist/services/document-service/draft-and-publish.js.map +1 -1
- package/dist/services/document-service/draft-and-publish.mjs +87 -54
- package/dist/services/document-service/draft-and-publish.mjs.map +1 -1
- package/dist/services/document-service/entries.d.ts +2 -2
- package/dist/services/document-service/entries.d.ts.map +1 -1
- package/dist/services/document-service/entries.js +109 -92
- package/dist/services/document-service/entries.js.map +1 -1
- package/dist/services/document-service/entries.mjs +108 -93
- package/dist/services/document-service/entries.mjs.map +1 -1
- package/dist/services/document-service/events.d.ts +1 -1
- package/dist/services/document-service/events.d.ts.map +1 -1
- package/dist/services/document-service/events.js +52 -40
- package/dist/services/document-service/events.js.map +1 -1
- package/dist/services/document-service/events.mjs +51 -41
- package/dist/services/document-service/events.mjs.map +1 -1
- package/dist/services/document-service/index.d.ts +2 -1
- package/dist/services/document-service/index.d.ts.map +1 -1
- package/dist/services/document-service/index.js +53 -32
- package/dist/services/document-service/index.js.map +1 -1
- package/dist/services/document-service/index.mjs +52 -33
- package/dist/services/document-service/index.mjs.map +1 -1
- package/dist/services/document-service/internationalization.js +66 -50
- package/dist/services/document-service/internationalization.js.map +1 -1
- package/dist/services/document-service/internationalization.mjs +61 -50
- package/dist/services/document-service/internationalization.mjs.map +1 -1
- package/dist/services/document-service/middlewares/errors.js +23 -19
- package/dist/services/document-service/middlewares/errors.js.map +1 -1
- package/dist/services/document-service/middlewares/errors.mjs +22 -20
- package/dist/services/document-service/middlewares/errors.mjs.map +1 -1
- package/dist/services/document-service/middlewares/middleware-manager.js +46 -44
- package/dist/services/document-service/middlewares/middleware-manager.js.map +1 -1
- package/dist/services/document-service/middlewares/middleware-manager.mjs +45 -45
- package/dist/services/document-service/middlewares/middleware-manager.mjs.map +1 -1
- package/dist/services/document-service/params.js +11 -5
- package/dist/services/document-service/params.js.map +1 -1
- package/dist/services/document-service/params.mjs +10 -6
- package/dist/services/document-service/params.mjs.map +1 -1
- package/dist/services/document-service/repository.d.ts.map +1 -1
- package/dist/services/document-service/repository.js +355 -269
- package/dist/services/document-service/repository.js.map +1 -1
- package/dist/services/document-service/repository.mjs +354 -270
- package/dist/services/document-service/repository.mjs.map +1 -1
- package/dist/services/document-service/transform/data.js +22 -12
- package/dist/services/document-service/transform/data.js.map +1 -1
- package/dist/services/document-service/transform/data.mjs +21 -13
- package/dist/services/document-service/transform/data.mjs.map +1 -1
- package/dist/services/document-service/transform/fields.js +26 -17
- package/dist/services/document-service/transform/fields.js.map +1 -1
- package/dist/services/document-service/transform/fields.mjs +25 -18
- package/dist/services/document-service/transform/fields.mjs.map +1 -1
- package/dist/services/document-service/transform/id-map.d.ts +1 -1
- package/dist/services/document-service/transform/id-map.d.ts.map +1 -1
- package/dist/services/document-service/transform/id-map.js +116 -69
- package/dist/services/document-service/transform/id-map.js.map +1 -1
- package/dist/services/document-service/transform/id-map.mjs +115 -70
- package/dist/services/document-service/transform/id-map.mjs.map +1 -1
- package/dist/services/document-service/transform/id-transform.d.ts +1 -1
- package/dist/services/document-service/transform/id-transform.d.ts.map +1 -1
- package/dist/services/document-service/transform/id-transform.js +38 -30
- package/dist/services/document-service/transform/id-transform.js.map +1 -1
- package/dist/services/document-service/transform/id-transform.mjs +36 -30
- package/dist/services/document-service/transform/id-transform.mjs.map +1 -1
- package/dist/services/document-service/transform/populate.js +23 -18
- package/dist/services/document-service/transform/populate.js.map +1 -1
- package/dist/services/document-service/transform/populate.mjs +22 -19
- package/dist/services/document-service/transform/populate.mjs.map +1 -1
- package/dist/services/document-service/transform/query.js +11 -6
- package/dist/services/document-service/transform/query.js.map +1 -1
- package/dist/services/document-service/transform/query.mjs +10 -7
- package/dist/services/document-service/transform/query.mjs.map +1 -1
- package/dist/services/document-service/transform/relations/extract/data-ids.d.ts +1 -1
- package/dist/services/document-service/transform/relations/extract/data-ids.d.ts.map +1 -1
- package/dist/services/document-service/transform/relations/extract/data-ids.js +71 -48
- package/dist/services/document-service/transform/relations/extract/data-ids.js.map +1 -1
- package/dist/services/document-service/transform/relations/extract/data-ids.mjs +70 -49
- package/dist/services/document-service/transform/relations/extract/data-ids.mjs.map +1 -1
- package/dist/services/document-service/transform/relations/transform/data-ids.d.ts.map +1 -1
- package/dist/services/document-service/transform/relations/transform/data-ids.js +97 -63
- package/dist/services/document-service/transform/relations/transform/data-ids.js.map +1 -1
- package/dist/services/document-service/transform/relations/transform/data-ids.mjs +96 -64
- package/dist/services/document-service/transform/relations/transform/data-ids.mjs.map +1 -1
- package/dist/services/document-service/transform/relations/transform/default-locale.js +47 -29
- package/dist/services/document-service/transform/relations/transform/default-locale.js.map +1 -1
- package/dist/services/document-service/transform/relations/transform/default-locale.mjs +46 -30
- package/dist/services/document-service/transform/relations/transform/default-locale.mjs.map +1 -1
- package/dist/services/document-service/transform/relations/utils/dp.d.ts +1 -1
- package/dist/services/document-service/transform/relations/utils/dp.d.ts.map +1 -1
- package/dist/services/document-service/transform/relations/utils/dp.js +52 -26
- package/dist/services/document-service/transform/relations/utils/dp.js.map +1 -1
- package/dist/services/document-service/transform/relations/utils/dp.mjs +51 -27
- package/dist/services/document-service/transform/relations/utils/dp.mjs.map +1 -1
- package/dist/services/document-service/transform/relations/utils/i18n.d.ts +1 -1
- package/dist/services/document-service/transform/relations/utils/i18n.d.ts.map +1 -1
- package/dist/services/document-service/transform/relations/utils/i18n.js +20 -18
- package/dist/services/document-service/transform/relations/utils/i18n.js.map +1 -1
- package/dist/services/document-service/transform/relations/utils/i18n.mjs +19 -21
- package/dist/services/document-service/transform/relations/utils/i18n.mjs.map +1 -1
- package/dist/services/document-service/transform/relations/utils/map-relation.d.ts.map +1 -1
- package/dist/services/document-service/transform/relations/utils/map-relation.js +118 -79
- package/dist/services/document-service/transform/relations/utils/map-relation.js.map +1 -1
- package/dist/services/document-service/transform/relations/utils/map-relation.mjs +115 -79
- package/dist/services/document-service/transform/relations/utils/map-relation.mjs.map +1 -1
- package/dist/services/document-service/utils/bidirectional-relations.d.ts +95 -0
- package/dist/services/document-service/utils/bidirectional-relations.d.ts.map +1 -0
- package/dist/services/document-service/utils/bidirectional-relations.js +148 -0
- package/dist/services/document-service/utils/bidirectional-relations.js.map +1 -0
- package/dist/services/document-service/utils/bidirectional-relations.mjs +145 -0
- package/dist/services/document-service/utils/bidirectional-relations.mjs.map +1 -0
- package/dist/services/document-service/utils/populate.d.ts +1 -1
- package/dist/services/document-service/utils/populate.d.ts.map +1 -1
- package/dist/services/document-service/utils/populate.js +67 -37
- package/dist/services/document-service/utils/populate.js.map +1 -1
- package/dist/services/document-service/utils/populate.mjs +66 -38
- package/dist/services/document-service/utils/populate.mjs.map +1 -1
- package/dist/services/document-service/utils/unidirectional-relations.d.ts +36 -0
- package/dist/services/document-service/utils/unidirectional-relations.d.ts.map +1 -0
- package/dist/services/document-service/utils/unidirectional-relations.js +116 -0
- package/dist/services/document-service/utils/unidirectional-relations.js.map +1 -0
- package/dist/services/document-service/utils/unidirectional-relations.mjs +113 -0
- package/dist/services/document-service/utils/unidirectional-relations.mjs.map +1 -0
- package/dist/services/entity-service/index.js +230 -161
- package/dist/services/entity-service/index.js.map +1 -1
- package/dist/services/entity-service/index.mjs +229 -160
- package/dist/services/entity-service/index.mjs.map +1 -1
- package/dist/services/entity-validator/blocks-validator.d.ts +1 -2
- package/dist/services/entity-validator/blocks-validator.d.ts.map +1 -1
- package/dist/services/entity-validator/blocks-validator.js +137 -104
- package/dist/services/entity-validator/blocks-validator.js.map +1 -1
- package/dist/services/entity-validator/blocks-validator.mjs +135 -105
- package/dist/services/entity-validator/blocks-validator.mjs.map +1 -1
- package/dist/services/entity-validator/index.d.ts +15 -1
- package/dist/services/entity-validator/index.d.ts.map +1 -1
- package/dist/services/entity-validator/index.js +362 -311
- package/dist/services/entity-validator/index.js.map +1 -1
- package/dist/services/entity-validator/index.mjs +358 -308
- package/dist/services/entity-validator/index.mjs.map +1 -1
- package/dist/services/entity-validator/validators.d.ts +36 -25
- package/dist/services/entity-validator/validators.d.ts.map +1 -1
- package/dist/services/entity-validator/validators.js +283 -110
- package/dist/services/entity-validator/validators.js.map +1 -1
- package/dist/services/entity-validator/validators.mjs +274 -108
- package/dist/services/entity-validator/validators.mjs.map +1 -1
- package/dist/services/errors.js +65 -65
- package/dist/services/errors.js.map +1 -1
- package/dist/services/errors.mjs +64 -66
- package/dist/services/errors.mjs.map +1 -1
- package/dist/services/event-hub.js +82 -69
- package/dist/services/event-hub.js.map +1 -1
- package/dist/services/event-hub.mjs +81 -71
- package/dist/services/event-hub.mjs.map +1 -1
- package/dist/services/features.js +19 -14
- package/dist/services/features.js.map +1 -1
- package/dist/services/features.mjs +18 -15
- package/dist/services/features.mjs.map +1 -1
- package/dist/services/fs.js +41 -40
- package/dist/services/fs.js.map +1 -1
- package/dist/services/fs.mjs +40 -39
- package/dist/services/fs.mjs.map +1 -1
- package/dist/services/metrics/admin-user-hash.d.ts.map +1 -1
- package/dist/services/metrics/admin-user-hash.js +13 -11
- package/dist/services/metrics/admin-user-hash.js.map +1 -1
- package/dist/services/metrics/admin-user-hash.mjs +12 -10
- package/dist/services/metrics/admin-user-hash.mjs.map +1 -1
- package/dist/services/metrics/index.js +46 -40
- package/dist/services/metrics/index.js.map +1 -1
- package/dist/services/metrics/index.mjs +45 -42
- package/dist/services/metrics/index.mjs.map +1 -1
- package/dist/services/metrics/is-truthy.js +13 -6
- package/dist/services/metrics/is-truthy.js.map +1 -1
- package/dist/services/metrics/is-truthy.mjs +12 -6
- package/dist/services/metrics/is-truthy.mjs.map +1 -1
- package/dist/services/metrics/middleware.d.ts.map +1 -1
- package/dist/services/metrics/middleware.js +37 -22
- package/dist/services/metrics/middleware.js.map +1 -1
- package/dist/services/metrics/middleware.mjs +36 -24
- package/dist/services/metrics/middleware.mjs.map +1 -1
- package/dist/services/metrics/rate-limiter.d.ts.map +1 -1
- package/dist/services/metrics/rate-limiter.js +24 -19
- package/dist/services/metrics/rate-limiter.js.map +1 -1
- package/dist/services/metrics/rate-limiter.mjs +23 -21
- package/dist/services/metrics/rate-limiter.mjs.map +1 -1
- package/dist/services/metrics/sender.d.ts.map +1 -1
- package/dist/services/metrics/sender.js +78 -69
- package/dist/services/metrics/sender.js.map +1 -1
- package/dist/services/metrics/sender.mjs +77 -64
- package/dist/services/metrics/sender.mjs.map +1 -1
- package/dist/services/query-params.js +13 -10
- package/dist/services/query-params.js.map +1 -1
- package/dist/services/query-params.mjs +12 -12
- package/dist/services/query-params.mjs.map +1 -1
- package/dist/services/reloader.js +35 -32
- package/dist/services/reloader.js.map +1 -1
- package/dist/services/reloader.mjs +34 -33
- package/dist/services/reloader.mjs.map +1 -1
- package/dist/services/request-context.js +11 -8
- package/dist/services/request-context.js.map +1 -1
- package/dist/services/request-context.mjs +10 -10
- package/dist/services/request-context.mjs.map +1 -1
- package/dist/services/server/admin-api.js +11 -10
- package/dist/services/server/admin-api.js.map +1 -1
- package/dist/services/server/admin-api.mjs +10 -11
- package/dist/services/server/admin-api.mjs.map +1 -1
- package/dist/services/server/api.js +33 -27
- package/dist/services/server/api.js.map +1 -1
- package/dist/services/server/api.mjs +32 -26
- package/dist/services/server/api.mjs.map +1 -1
- package/dist/services/server/compose-endpoint.js +116 -105
- package/dist/services/server/compose-endpoint.js.map +1 -1
- package/dist/services/server/compose-endpoint.mjs +115 -105
- package/dist/services/server/compose-endpoint.mjs.map +1 -1
- package/dist/services/server/content-api.js +11 -9
- package/dist/services/server/content-api.js.map +1 -1
- package/dist/services/server/content-api.mjs +10 -10
- package/dist/services/server/content-api.mjs.map +1 -1
- package/dist/services/server/http-server.js +48 -44
- package/dist/services/server/http-server.js.map +1 -1
- package/dist/services/server/http-server.mjs +47 -43
- package/dist/services/server/http-server.mjs.map +1 -1
- package/dist/services/server/index.js +85 -82
- package/dist/services/server/index.js.map +1 -1
- package/dist/services/server/index.mjs +84 -81
- package/dist/services/server/index.mjs.map +1 -1
- package/dist/services/server/koa.js +49 -47
- package/dist/services/server/koa.js.map +1 -1
- package/dist/services/server/koa.mjs +48 -44
- package/dist/services/server/koa.mjs.map +1 -1
- package/dist/services/server/middleware.js +86 -82
- package/dist/services/server/middleware.js.map +1 -1
- package/dist/services/server/middleware.mjs +85 -82
- package/dist/services/server/middleware.mjs.map +1 -1
- package/dist/services/server/policy.js +24 -17
- package/dist/services/server/policy.js.map +1 -1
- package/dist/services/server/policy.mjs +23 -18
- package/dist/services/server/policy.mjs.map +1 -1
- package/dist/services/server/register-middlewares.js +68 -61
- package/dist/services/server/register-middlewares.js.map +1 -1
- package/dist/services/server/register-middlewares.mjs +67 -63
- package/dist/services/server/register-middlewares.mjs.map +1 -1
- package/dist/services/server/register-routes.js +109 -66
- package/dist/services/server/register-routes.js.map +1 -1
- package/dist/services/server/register-routes.mjs +108 -66
- package/dist/services/server/register-routes.mjs.map +1 -1
- package/dist/services/server/routing.d.ts +10 -0
- package/dist/services/server/routing.d.ts.map +1 -1
- package/dist/services/server/routing.js +100 -81
- package/dist/services/server/routing.js.map +1 -1
- package/dist/services/server/routing.mjs +99 -81
- package/dist/services/server/routing.mjs.map +1 -1
- package/dist/services/utils/dynamic-zones.js +13 -14
- package/dist/services/utils/dynamic-zones.js.map +1 -1
- package/dist/services/utils/dynamic-zones.mjs +12 -16
- package/dist/services/utils/dynamic-zones.mjs.map +1 -1
- package/dist/services/webhook-runner.js +124 -122
- package/dist/services/webhook-runner.js.map +1 -1
- package/dist/services/webhook-runner.mjs +123 -121
- package/dist/services/webhook-runner.mjs.map +1 -1
- package/dist/services/webhook-store.js +132 -99
- package/dist/services/webhook-store.js.map +1 -1
- package/dist/services/webhook-store.mjs +131 -101
- package/dist/services/webhook-store.mjs.map +1 -1
- package/dist/services/worker-queue.js +44 -49
- package/dist/services/worker-queue.js.map +1 -1
- package/dist/services/worker-queue.mjs +43 -49
- package/dist/services/worker-queue.mjs.map +1 -1
- package/dist/utils/convert-custom-field-type.js +17 -20
- package/dist/utils/convert-custom-field-type.js.map +1 -1
- package/dist/utils/convert-custom-field-type.mjs +16 -21
- package/dist/utils/convert-custom-field-type.mjs.map +1 -1
- package/dist/utils/cron.js +64 -30
- package/dist/utils/cron.js.map +1 -1
- package/dist/utils/cron.mjs +63 -31
- package/dist/utils/cron.mjs.map +1 -1
- package/dist/utils/fetch.d.ts.map +1 -1
- package/dist/utils/fetch.js +24 -17
- package/dist/utils/fetch.js.map +1 -1
- package/dist/utils/fetch.mjs +23 -18
- package/dist/utils/fetch.mjs.map +1 -1
- package/dist/utils/filepath-to-prop-path.d.ts +1 -1
- package/dist/utils/filepath-to-prop-path.d.ts.map +1 -1
- package/dist/utils/filepath-to-prop-path.js +22 -9
- package/dist/utils/filepath-to-prop-path.js.map +1 -1
- package/dist/utils/filepath-to-prop-path.mjs +20 -7
- package/dist/utils/filepath-to-prop-path.mjs.map +1 -1
- package/dist/utils/is-initialized.js +21 -12
- package/dist/utils/is-initialized.js.map +1 -1
- package/dist/utils/is-initialized.mjs +20 -13
- package/dist/utils/is-initialized.mjs.map +1 -1
- package/dist/utils/lifecycles.js +6 -5
- package/dist/utils/lifecycles.js.map +1 -1
- package/dist/utils/lifecycles.mjs +5 -6
- package/dist/utils/lifecycles.mjs.map +1 -1
- package/dist/utils/load-config-file.js +40 -38
- package/dist/utils/load-config-file.js.map +1 -1
- package/dist/utils/load-config-file.mjs +39 -36
- package/dist/utils/load-config-file.mjs.map +1 -1
- package/dist/utils/load-files.js +40 -35
- package/dist/utils/load-files.js.map +1 -1
- package/dist/utils/load-files.mjs +39 -32
- package/dist/utils/load-files.mjs.map +1 -1
- package/dist/utils/open-browser.js +8 -8
- package/dist/utils/open-browser.js.map +1 -1
- package/dist/utils/open-browser.mjs +7 -7
- package/dist/utils/open-browser.mjs.map +1 -1
- package/dist/utils/resolve-working-dirs.js +23 -10
- package/dist/utils/resolve-working-dirs.js.map +1 -1
- package/dist/utils/resolve-working-dirs.mjs +22 -9
- package/dist/utils/resolve-working-dirs.mjs.map +1 -1
- package/dist/utils/signals.js +20 -14
- package/dist/utils/signals.js.map +1 -1
- package/dist/utils/signals.mjs +19 -15
- package/dist/utils/signals.mjs.map +1 -1
- package/dist/utils/startup-logger.d.ts.map +1 -1
- package/dist/utils/startup-logger.js +107 -78
- package/dist/utils/startup-logger.js.map +1 -1
- package/dist/utils/startup-logger.mjs +106 -75
- package/dist/utils/startup-logger.mjs.map +1 -1
- package/dist/utils/transform-content-types-to-models.d.ts +355 -23
- package/dist/utils/transform-content-types-to-models.d.ts.map +1 -1
- package/dist/utils/transform-content-types-to-models.js +350 -248
- package/dist/utils/transform-content-types-to-models.js.map +1 -1
- package/dist/utils/transform-content-types-to-models.mjs +349 -256
- package/dist/utils/transform-content-types-to-models.mjs.map +1 -1
- package/dist/utils/update-notifier/index.d.ts.map +1 -1
- package/dist/utils/update-notifier/index.js +68 -73
- package/dist/utils/update-notifier/index.js.map +1 -1
- package/dist/utils/update-notifier/index.mjs +67 -67
- package/dist/utils/update-notifier/index.mjs.map +1 -1
- package/package.json +34 -32
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { type Core, Schema, type UID } from '@strapi/types';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
/**
|
|
4
|
+
* AbstractCoreRouteValidator provides the foundation for validating and managing core routes within a Strapi context for a specific model.
|
|
5
|
+
*
|
|
6
|
+
* This abstract class facilitates validation logic for scalar and populatable fields defined in a model schema.
|
|
7
|
+
*
|
|
8
|
+
* It uses runtime information about Strapi models to derive and expose schema validations.
|
|
9
|
+
*
|
|
10
|
+
* @template {UID.Schema} T Representing the schema identifier to be validated.
|
|
11
|
+
*/
|
|
12
|
+
export declare abstract class AbstractCoreRouteValidator<T extends UID.Schema> {
|
|
13
|
+
/**
|
|
14
|
+
* The `_strapi` variable serves as a reference to the core Strapi instance.
|
|
15
|
+
* It is used for interacting with the loaded model.
|
|
16
|
+
*/
|
|
17
|
+
protected readonly _strapi: Core.Strapi;
|
|
18
|
+
/**
|
|
19
|
+
* A unique identifier used to represent a model within Strapi.
|
|
20
|
+
*
|
|
21
|
+
* The type of the identifier is generic to allow flexibility and ensure type safety
|
|
22
|
+
* when working with either content-types or components.
|
|
23
|
+
*/
|
|
24
|
+
protected readonly _uid: T;
|
|
25
|
+
/**
|
|
26
|
+
* Protected constructor for initializing the class with the provided Strapi instance and unique identifier (UID).
|
|
27
|
+
*
|
|
28
|
+
* @param strapi The Strapi instance to be used.
|
|
29
|
+
* @param uid The unique identifier for the instance.
|
|
30
|
+
*/
|
|
31
|
+
protected constructor(strapi: Core.Strapi, uid: T);
|
|
32
|
+
/**
|
|
33
|
+
* Retrieves an enum schema constructed from the keys of the scalar fields.
|
|
34
|
+
*
|
|
35
|
+
* @return A Zod enum containing the keys from the scalar fields.
|
|
36
|
+
*/
|
|
37
|
+
get scalarFieldsEnum(): z.ZodEnum<[string]>;
|
|
38
|
+
/**
|
|
39
|
+
* Retrieves an enum schema constructed from the keys of fields that can be populated (relations, components, files, etc.)
|
|
40
|
+
*
|
|
41
|
+
* @return A ZodEnum object containing the list of populatable field keys.
|
|
42
|
+
*/
|
|
43
|
+
get populatableFieldsEnum(): z.ZodEnum<[string]>;
|
|
44
|
+
/**
|
|
45
|
+
* Retrieves an array representation of the scalar fields.
|
|
46
|
+
*
|
|
47
|
+
* @return An array containing the scalar fields as defined by {@link scalarFieldsEnum}.
|
|
48
|
+
*/
|
|
49
|
+
get scalarFieldsArray(): z.ZodArray<z.ZodEnum<[string]>, "many">;
|
|
50
|
+
/**
|
|
51
|
+
* Retrieves an array of populatable fields.
|
|
52
|
+
*
|
|
53
|
+
* @return A Zod array schema representing the available populatable fields as defined by {@link populatableFieldsEnum}.
|
|
54
|
+
*/
|
|
55
|
+
get populatableFieldsArray(): z.ZodArray<z.ZodEnum<[string]>, "many">;
|
|
56
|
+
/**
|
|
57
|
+
* Retrieves the schema associated with the current model.
|
|
58
|
+
*
|
|
59
|
+
* The schema represents the structural definition of the model,
|
|
60
|
+
* as retrieved from the Strapi model associated with the given UID.
|
|
61
|
+
*
|
|
62
|
+
* @return The schema of the model retrieved from Strapi.
|
|
63
|
+
*/
|
|
64
|
+
protected get _schema(): T extends UID.ContentType ? Schema.ContentType<T> : T extends `${string}.${string}` ? Schema.Component<T> : never;
|
|
65
|
+
/**
|
|
66
|
+
* Retrieves scalar fields from the object's schema attributes.
|
|
67
|
+
*
|
|
68
|
+
* Filters the schema attributes to include only those that are scalar and not private.
|
|
69
|
+
*
|
|
70
|
+
* @return An object composed of scalar fields from the schema attributes.
|
|
71
|
+
*/
|
|
72
|
+
protected get _scalarFields(): {
|
|
73
|
+
[k: string]: Schema.Attribute.AnyAttribute;
|
|
74
|
+
};
|
|
75
|
+
/**
|
|
76
|
+
* Retrieves the populatable fields from the schema attributes.
|
|
77
|
+
*
|
|
78
|
+
* Filters the schema attributes to include only those that are populatable and not private.
|
|
79
|
+
*
|
|
80
|
+
* @return An object containing the populatable fields derived from the schema attributes.
|
|
81
|
+
*/
|
|
82
|
+
protected get _populatableFields(): {
|
|
83
|
+
[k: string]: Schema.Attribute.AnyAttribute;
|
|
84
|
+
};
|
|
85
|
+
/**
|
|
86
|
+
* Creates a Zod schema as a record with scalar fields as keys and the specified type as values.
|
|
87
|
+
*
|
|
88
|
+
* @param type - The Zod type to use for the record's values.
|
|
89
|
+
* @return A Zod record schema with scalar fields as keys and the specified type as values.
|
|
90
|
+
*/
|
|
91
|
+
fieldRecord(type: z.ZodTypeAny): z.ZodRecord<z.ZodEnum<[string]>, z.ZodTypeAny>;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Maps a Strapi attribute definition to a corresponding Zod validation schema.
|
|
95
|
+
* This function handles various Strapi attribute types and converts them into
|
|
96
|
+
* appropriate Zod validation schemas with their respective constraints.
|
|
97
|
+
*
|
|
98
|
+
* @param attribute - The Strapi attribute configuration object. Contains type information
|
|
99
|
+
* and validation rules for the attribute.
|
|
100
|
+
*
|
|
101
|
+
* @returns A Zod schema that corresponds to the input attribute's type and validation rules
|
|
102
|
+
*
|
|
103
|
+
* @example
|
|
104
|
+
* ```typescript
|
|
105
|
+
* // String attribute with constraints
|
|
106
|
+
* const stringAttribute = {
|
|
107
|
+
* type: 'string',
|
|
108
|
+
* minLength: 3,
|
|
109
|
+
* maxLength: 50,
|
|
110
|
+
* required: true
|
|
111
|
+
* };
|
|
112
|
+
* const stringSchema = mapAttributeToSchema(stringAttribute);
|
|
113
|
+
*
|
|
114
|
+
* // Enumeration attribute
|
|
115
|
+
* const enumAttribute = {
|
|
116
|
+
* type: 'enumeration',
|
|
117
|
+
* enum: ['draft', 'published', 'archived']
|
|
118
|
+
* };
|
|
119
|
+
* const enumSchema = mapAttributeToSchema(enumAttribute);
|
|
120
|
+
*
|
|
121
|
+
* // Media attribute with multiple files
|
|
122
|
+
* const mediaAttribute = {
|
|
123
|
+
* type: 'media',
|
|
124
|
+
* multiple: true
|
|
125
|
+
* };
|
|
126
|
+
* const mediaSchema = mapAttributeToSchema(mediaAttribute);
|
|
127
|
+
* ```
|
|
128
|
+
*
|
|
129
|
+
* @throws {Error} Throws an error if an unsupported attribute type is provided
|
|
130
|
+
*
|
|
131
|
+
* @remarks
|
|
132
|
+
* - Complex types (component, relation, dynamic zone) use placeholder schemas
|
|
133
|
+
*/
|
|
134
|
+
export declare const mapAttributeToSchema: (attribute: Schema.Attribute.AnyAttribute) => z.Schema;
|
|
135
|
+
//# sourceMappingURL=common.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../../src/core-api/routes/validation/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,KAAK,GAAG,EAAE,MAAM,eAAe,CAAC;AAE5D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;;;;GAQG;AACH,8BAAsB,0BAA0B,CAAC,CAAC,SAAS,GAAG,CAAC,MAAM;IACnE;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC;IAExC;;;;;OAKG;IACH,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IAE3B;;;;;OAKG;IACH,SAAS,aAAa,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC;IAKjD;;;;OAIG;IACH,IAAW,gBAAgB,wBAE1B;IAED;;;;OAIG;IACH,IAAW,qBAAqB,wBAE/B;IAED;;;;OAIG;IACH,IAAW,iBAAiB,4CAE3B;IAED;;;;OAIG;IACH,IAAW,sBAAsB,4CAEhC;IAED;;;;;;;OAOG;IACH,SAAS,KAAK,OAAO,sHAEpB;IAED;;;;;;OAMG;IACH,SAAS,KAAK,aAAa;;MAQ1B;IAED;;;;;;OAMG;IACH,SAAS,KAAK,kBAAkB;;MAQ/B;IAED;;;;;OAKG;IACI,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,UAAU;CAGtC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,eAAO,MAAM,oBAAoB,cAAe,OAAO,SAAS,CAAC,YAAY,KAAG,EAAE,MAqEjF,CAAC"}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var strapiUtils = require('@strapi/utils');
|
|
4
|
+
var zod = require('zod');
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* AbstractCoreRouteValidator provides the foundation for validating and managing core routes within a Strapi context for a specific model.
|
|
8
|
+
*
|
|
9
|
+
* This abstract class facilitates validation logic for scalar and populatable fields defined in a model schema.
|
|
10
|
+
*
|
|
11
|
+
* It uses runtime information about Strapi models to derive and expose schema validations.
|
|
12
|
+
*
|
|
13
|
+
* @template {UID.Schema} T Representing the schema identifier to be validated.
|
|
14
|
+
*/ class AbstractCoreRouteValidator {
|
|
15
|
+
/**
|
|
16
|
+
* Retrieves an enum schema constructed from the keys of the scalar fields.
|
|
17
|
+
*
|
|
18
|
+
* @return A Zod enum containing the keys from the scalar fields.
|
|
19
|
+
*/ get scalarFieldsEnum() {
|
|
20
|
+
return zod.z.enum(Object.keys(this._scalarFields));
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Retrieves an enum schema constructed from the keys of fields that can be populated (relations, components, files, etc.)
|
|
24
|
+
*
|
|
25
|
+
* @return A ZodEnum object containing the list of populatable field keys.
|
|
26
|
+
*/ get populatableFieldsEnum() {
|
|
27
|
+
return zod.z.enum(Object.keys(this._populatableFields));
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Retrieves an array representation of the scalar fields.
|
|
31
|
+
*
|
|
32
|
+
* @return An array containing the scalar fields as defined by {@link scalarFieldsEnum}.
|
|
33
|
+
*/ get scalarFieldsArray() {
|
|
34
|
+
return zod.z.array(this.scalarFieldsEnum);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Retrieves an array of populatable fields.
|
|
38
|
+
*
|
|
39
|
+
* @return A Zod array schema representing the available populatable fields as defined by {@link populatableFieldsEnum}.
|
|
40
|
+
*/ get populatableFieldsArray() {
|
|
41
|
+
return zod.z.array(this.populatableFieldsEnum);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Retrieves the schema associated with the current model.
|
|
45
|
+
*
|
|
46
|
+
* The schema represents the structural definition of the model,
|
|
47
|
+
* as retrieved from the Strapi model associated with the given UID.
|
|
48
|
+
*
|
|
49
|
+
* @return The schema of the model retrieved from Strapi.
|
|
50
|
+
*/ get _schema() {
|
|
51
|
+
return this._strapi.getModel(this._uid);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Retrieves scalar fields from the object's schema attributes.
|
|
55
|
+
*
|
|
56
|
+
* Filters the schema attributes to include only those that are scalar and not private.
|
|
57
|
+
*
|
|
58
|
+
* @return An object composed of scalar fields from the schema attributes.
|
|
59
|
+
*/ get _scalarFields() {
|
|
60
|
+
const attributes = Object.entries(this._schema.attributes);
|
|
61
|
+
const scalarEntries = attributes.filter(([, attribute])=>strapiUtils.contentTypes.isScalarAttribute(attribute)).filter(([attributeName])=>!strapiUtils.contentTypes.isPrivateAttribute(this._schema, attributeName));
|
|
62
|
+
return Object.fromEntries(scalarEntries);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Retrieves the populatable fields from the schema attributes.
|
|
66
|
+
*
|
|
67
|
+
* Filters the schema attributes to include only those that are populatable and not private.
|
|
68
|
+
*
|
|
69
|
+
* @return An object containing the populatable fields derived from the schema attributes.
|
|
70
|
+
*/ get _populatableFields() {
|
|
71
|
+
const attributes = Object.entries(this._schema.attributes);
|
|
72
|
+
const populatableEntries = attributes.filter(([, attribute])=>!strapiUtils.contentTypes.isScalarAttribute(attribute)).filter(([attributeName])=>!strapiUtils.contentTypes.isPrivateAttribute(this._schema, attributeName));
|
|
73
|
+
return Object.fromEntries(populatableEntries);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Creates a Zod schema as a record with scalar fields as keys and the specified type as values.
|
|
77
|
+
*
|
|
78
|
+
* @param type - The Zod type to use for the record's values.
|
|
79
|
+
* @return A Zod record schema with scalar fields as keys and the specified type as values.
|
|
80
|
+
*/ fieldRecord(type) {
|
|
81
|
+
return zod.z.record(this.scalarFieldsEnum, type);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Protected constructor for initializing the class with the provided Strapi instance and unique identifier (UID).
|
|
85
|
+
*
|
|
86
|
+
* @param strapi The Strapi instance to be used.
|
|
87
|
+
* @param uid The unique identifier for the instance.
|
|
88
|
+
*/ constructor(strapi, uid){
|
|
89
|
+
this._strapi = strapi;
|
|
90
|
+
this._uid = uid;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Maps a Strapi attribute definition to a corresponding Zod validation schema.
|
|
95
|
+
* This function handles various Strapi attribute types and converts them into
|
|
96
|
+
* appropriate Zod validation schemas with their respective constraints.
|
|
97
|
+
*
|
|
98
|
+
* @param attribute - The Strapi attribute configuration object. Contains type information
|
|
99
|
+
* and validation rules for the attribute.
|
|
100
|
+
*
|
|
101
|
+
* @returns A Zod schema that corresponds to the input attribute's type and validation rules
|
|
102
|
+
*
|
|
103
|
+
* @example
|
|
104
|
+
* ```typescript
|
|
105
|
+
* // String attribute with constraints
|
|
106
|
+
* const stringAttribute = {
|
|
107
|
+
* type: 'string',
|
|
108
|
+
* minLength: 3,
|
|
109
|
+
* maxLength: 50,
|
|
110
|
+
* required: true
|
|
111
|
+
* };
|
|
112
|
+
* const stringSchema = mapAttributeToSchema(stringAttribute);
|
|
113
|
+
*
|
|
114
|
+
* // Enumeration attribute
|
|
115
|
+
* const enumAttribute = {
|
|
116
|
+
* type: 'enumeration',
|
|
117
|
+
* enum: ['draft', 'published', 'archived']
|
|
118
|
+
* };
|
|
119
|
+
* const enumSchema = mapAttributeToSchema(enumAttribute);
|
|
120
|
+
*
|
|
121
|
+
* // Media attribute with multiple files
|
|
122
|
+
* const mediaAttribute = {
|
|
123
|
+
* type: 'media',
|
|
124
|
+
* multiple: true
|
|
125
|
+
* };
|
|
126
|
+
* const mediaSchema = mapAttributeToSchema(mediaAttribute);
|
|
127
|
+
* ```
|
|
128
|
+
*
|
|
129
|
+
* @throws {Error} Throws an error if an unsupported attribute type is provided
|
|
130
|
+
*
|
|
131
|
+
* @remarks
|
|
132
|
+
* - Complex types (component, relation, dynamic zone) use placeholder schemas
|
|
133
|
+
*/ const mapAttributeToSchema = (attribute)=>{
|
|
134
|
+
switch(attribute.type){
|
|
135
|
+
case 'string':
|
|
136
|
+
case 'text':
|
|
137
|
+
case 'richtext':
|
|
138
|
+
{
|
|
139
|
+
const { minLength, maxLength, required, default: def } = attribute;
|
|
140
|
+
return [
|
|
141
|
+
zod.z.string()
|
|
142
|
+
].map((schema)=>minLength !== undefined ? schema.min(minLength) : schema).map((schema)=>maxLength !== undefined ? schema.max(maxLength) : schema).map((schema)=>required ? schema : schema.optional()).map((schema)=>{
|
|
143
|
+
if (typeof def === 'undefined') {
|
|
144
|
+
return schema;
|
|
145
|
+
}
|
|
146
|
+
// Needed to infer the type and target the correct schema.default() version
|
|
147
|
+
return typeof def === 'function' ? schema.default(def) : schema.default(def);
|
|
148
|
+
})[0];
|
|
149
|
+
}
|
|
150
|
+
case 'blocks':
|
|
151
|
+
return zod.z.string();
|
|
152
|
+
case 'float':
|
|
153
|
+
return zod.z.number().describe(`A float field`);
|
|
154
|
+
case 'decimal':
|
|
155
|
+
return zod.z.number().describe(`A decimal field`);
|
|
156
|
+
case 'biginteger':
|
|
157
|
+
return zod.z.number().describe(`A biginteger field`);
|
|
158
|
+
case 'integer':
|
|
159
|
+
return zod.z.number().int().describe(`An integer field`);
|
|
160
|
+
case 'boolean':
|
|
161
|
+
return zod.z.boolean().describe(`A boolean field`);
|
|
162
|
+
case 'date':
|
|
163
|
+
case 'datetime':
|
|
164
|
+
case 'timestamp':
|
|
165
|
+
case 'time':
|
|
166
|
+
return zod.z.string().datetime().describe(`A date field`);
|
|
167
|
+
case 'email':
|
|
168
|
+
return zod.z.string().email().describe(`An email field`);
|
|
169
|
+
case 'enumeration':
|
|
170
|
+
return zod.z.enum(attribute.enum).describe(`An enumeration field with possible values: ${attribute.enum.join(', ')}`);
|
|
171
|
+
case 'component':
|
|
172
|
+
{
|
|
173
|
+
const schema = zod.z.any().describe('imagine this is a component');
|
|
174
|
+
return attribute.repeatable ? zod.z.array(schema) : schema.nullable();
|
|
175
|
+
}
|
|
176
|
+
case 'relation':
|
|
177
|
+
{
|
|
178
|
+
const schema = zod.z.any().describe(`A related document`);
|
|
179
|
+
return strapiUtils.relations.isAnyToMany(attribute) ? zod.z.array(schema) : schema.nullable();
|
|
180
|
+
}
|
|
181
|
+
case 'dynamiczone':
|
|
182
|
+
return zod.z.array(zod.z.any()).describe('Imagine this is a dynamic zone').nullable();
|
|
183
|
+
case 'json':
|
|
184
|
+
return zod.z.any().describe(`A JSON field`);
|
|
185
|
+
case 'uid':
|
|
186
|
+
return zod.z.string().describe(`A unique identifier (UID) field`);
|
|
187
|
+
case 'password':
|
|
188
|
+
return zod.z.string().describe(`A password field`);
|
|
189
|
+
case 'media':
|
|
190
|
+
{
|
|
191
|
+
const schema = zod.z.any().describe(`A media field`);
|
|
192
|
+
return attribute.multiple ? zod.z.array(schema) : schema.nullable();
|
|
193
|
+
}
|
|
194
|
+
default:
|
|
195
|
+
throw new Error(`Unsupported attribute type: ${attribute['type']}`);
|
|
196
|
+
}
|
|
197
|
+
};
|
|
198
|
+
|
|
199
|
+
exports.AbstractCoreRouteValidator = AbstractCoreRouteValidator;
|
|
200
|
+
exports.mapAttributeToSchema = mapAttributeToSchema;
|
|
201
|
+
//# sourceMappingURL=common.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.js","sources":["../../../../src/core-api/routes/validation/common.ts"],"sourcesContent":["import { type Core, Schema, type UID } from '@strapi/types';\nimport { contentTypes, relations } from '@strapi/utils';\nimport { z } from 'zod';\n\n/**\n * AbstractCoreRouteValidator provides the foundation for validating and managing core routes within a Strapi context for a specific model.\n *\n * This abstract class facilitates validation logic for scalar and populatable fields defined in a model schema.\n *\n * It uses runtime information about Strapi models to derive and expose schema validations.\n *\n * @template {UID.Schema} T Representing the schema identifier to be validated.\n */\nexport abstract class AbstractCoreRouteValidator<T extends UID.Schema> {\n /**\n * The `_strapi` variable serves as a reference to the core Strapi instance.\n * It is used for interacting with the loaded model.\n */\n protected readonly _strapi: Core.Strapi;\n\n /**\n * A unique identifier used to represent a model within Strapi.\n *\n * The type of the identifier is generic to allow flexibility and ensure type safety\n * when working with either content-types or components.\n */\n protected readonly _uid: T;\n\n /**\n * Protected constructor for initializing the class with the provided Strapi instance and unique identifier (UID).\n *\n * @param strapi The Strapi instance to be used.\n * @param uid The unique identifier for the instance.\n */\n protected constructor(strapi: Core.Strapi, uid: T) {\n this._strapi = strapi;\n this._uid = uid;\n }\n\n /**\n * Retrieves an enum schema constructed from the keys of the scalar fields.\n *\n * @return A Zod enum containing the keys from the scalar fields.\n */\n public get scalarFieldsEnum() {\n return z.enum(Object.keys(this._scalarFields) as [string]);\n }\n\n /**\n * Retrieves an enum schema constructed from the keys of fields that can be populated (relations, components, files, etc.)\n *\n * @return A ZodEnum object containing the list of populatable field keys.\n */\n public get populatableFieldsEnum() {\n return z.enum(Object.keys(this._populatableFields) as [string]);\n }\n\n /**\n * Retrieves an array representation of the scalar fields.\n *\n * @return An array containing the scalar fields as defined by {@link scalarFieldsEnum}.\n */\n public get scalarFieldsArray() {\n return z.array(this.scalarFieldsEnum);\n }\n\n /**\n * Retrieves an array of populatable fields.\n *\n * @return A Zod array schema representing the available populatable fields as defined by {@link populatableFieldsEnum}.\n */\n public get populatableFieldsArray() {\n return z.array(this.populatableFieldsEnum);\n }\n\n /**\n * Retrieves the schema associated with the current model.\n *\n * The schema represents the structural definition of the model,\n * as retrieved from the Strapi model associated with the given UID.\n *\n * @return The schema of the model retrieved from Strapi.\n */\n protected get _schema() {\n return this._strapi.getModel(this._uid);\n }\n\n /**\n * Retrieves scalar fields from the object's schema attributes.\n *\n * Filters the schema attributes to include only those that are scalar and not private.\n *\n * @return An object composed of scalar fields from the schema attributes.\n */\n protected get _scalarFields() {\n const attributes = Object.entries(this._schema.attributes);\n\n const scalarEntries = attributes\n .filter(([, attribute]) => contentTypes.isScalarAttribute(attribute))\n .filter(([attributeName]) => !contentTypes.isPrivateAttribute(this._schema, attributeName));\n\n return Object.fromEntries(scalarEntries);\n }\n\n /**\n * Retrieves the populatable fields from the schema attributes.\n *\n * Filters the schema attributes to include only those that are populatable and not private.\n *\n * @return An object containing the populatable fields derived from the schema attributes.\n */\n protected get _populatableFields() {\n const attributes = Object.entries(this._schema.attributes);\n\n const populatableEntries = attributes\n .filter(([, attribute]) => !contentTypes.isScalarAttribute(attribute))\n .filter(([attributeName]) => !contentTypes.isPrivateAttribute(this._schema, attributeName));\n\n return Object.fromEntries(populatableEntries);\n }\n\n /**\n * Creates a Zod schema as a record with scalar fields as keys and the specified type as values.\n *\n * @param type - The Zod type to use for the record's values.\n * @return A Zod record schema with scalar fields as keys and the specified type as values.\n */\n public fieldRecord(type: z.ZodTypeAny) {\n return z.record(this.scalarFieldsEnum, type);\n }\n}\n\n/**\n * Maps a Strapi attribute definition to a corresponding Zod validation schema.\n * This function handles various Strapi attribute types and converts them into\n * appropriate Zod validation schemas with their respective constraints.\n *\n * @param attribute - The Strapi attribute configuration object. Contains type information\n * and validation rules for the attribute.\n *\n * @returns A Zod schema that corresponds to the input attribute's type and validation rules\n *\n * @example\n * ```typescript\n * // String attribute with constraints\n * const stringAttribute = {\n * type: 'string',\n * minLength: 3,\n * maxLength: 50,\n * required: true\n * };\n * const stringSchema = mapAttributeToSchema(stringAttribute);\n *\n * // Enumeration attribute\n * const enumAttribute = {\n * type: 'enumeration',\n * enum: ['draft', 'published', 'archived']\n * };\n * const enumSchema = mapAttributeToSchema(enumAttribute);\n *\n * // Media attribute with multiple files\n * const mediaAttribute = {\n * type: 'media',\n * multiple: true\n * };\n * const mediaSchema = mapAttributeToSchema(mediaAttribute);\n * ```\n *\n * @throws {Error} Throws an error if an unsupported attribute type is provided\n *\n * @remarks\n * - Complex types (component, relation, dynamic zone) use placeholder schemas\n */\nexport const mapAttributeToSchema = (attribute: Schema.Attribute.AnyAttribute): z.Schema => {\n switch (attribute.type) {\n case 'string':\n case 'text':\n case 'richtext': {\n const { minLength, maxLength, required, default: def } = attribute;\n\n return [z.string()]\n .map((schema) => (minLength !== undefined ? schema.min(minLength) : schema))\n .map((schema) => (maxLength !== undefined ? schema.max(maxLength) : schema))\n .map((schema) => (required ? schema : schema.optional()))\n .map((schema) => {\n if (typeof def === 'undefined') {\n return schema;\n }\n\n // Needed to infer the type and target the correct schema.default() version\n return typeof def === 'function' ? schema.default(def) : schema.default(def);\n })[0];\n }\n case 'blocks':\n return z.string();\n case 'float':\n return z.number().describe(`A float field`);\n case 'decimal':\n return z.number().describe(`A decimal field`);\n case 'biginteger':\n return z.number().describe(`A biginteger field`);\n case 'integer':\n return z.number().int().describe(`An integer field`);\n case 'boolean':\n return z.boolean().describe(`A boolean field`);\n case 'date':\n case 'datetime':\n case 'timestamp':\n case 'time':\n return z.string().datetime().describe(`A date field`);\n case 'email':\n return z.string().email().describe(`An email field`);\n case 'enumeration':\n return z\n .enum(attribute.enum as [string])\n .describe(`An enumeration field with possible values: ${attribute.enum.join(', ')}`);\n case 'component': {\n const schema = z.any().describe('imagine this is a component');\n\n return attribute.repeatable ? z.array(schema) : schema.nullable();\n }\n case 'relation': {\n const schema = z.any().describe(`A related document`);\n\n return relations.isAnyToMany(attribute) ? z.array(schema) : schema.nullable();\n }\n case 'dynamiczone':\n return z.array(z.any()).describe('Imagine this is a dynamic zone').nullable();\n case 'json':\n return z.any().describe(`A JSON field`);\n case 'uid':\n return z.string().describe(`A unique identifier (UID) field`);\n case 'password':\n return z.string().describe(`A password field`);\n case 'media': {\n const schema = z.any().describe(`A media field`);\n\n return attribute.multiple ? z.array(schema) : schema.nullable();\n }\n default:\n throw new Error(`Unsupported attribute type: ${attribute['type']}`);\n }\n};\n"],"names":["AbstractCoreRouteValidator","scalarFieldsEnum","z","enum","Object","keys","_scalarFields","populatableFieldsEnum","_populatableFields","scalarFieldsArray","array","populatableFieldsArray","_schema","_strapi","getModel","_uid","attributes","entries","scalarEntries","filter","attribute","contentTypes","isScalarAttribute","attributeName","isPrivateAttribute","fromEntries","populatableEntries","fieldRecord","type","record","strapi","uid","mapAttributeToSchema","minLength","maxLength","required","default","def","string","map","schema","undefined","min","max","optional","number","describe","int","boolean","datetime","email","join","any","repeatable","nullable","relations","isAnyToMany","multiple","Error"],"mappings":"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"}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import { contentTypes, relations } from '@strapi/utils';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* AbstractCoreRouteValidator provides the foundation for validating and managing core routes within a Strapi context for a specific model.
|
|
6
|
+
*
|
|
7
|
+
* This abstract class facilitates validation logic for scalar and populatable fields defined in a model schema.
|
|
8
|
+
*
|
|
9
|
+
* It uses runtime information about Strapi models to derive and expose schema validations.
|
|
10
|
+
*
|
|
11
|
+
* @template {UID.Schema} T Representing the schema identifier to be validated.
|
|
12
|
+
*/ class AbstractCoreRouteValidator {
|
|
13
|
+
/**
|
|
14
|
+
* Retrieves an enum schema constructed from the keys of the scalar fields.
|
|
15
|
+
*
|
|
16
|
+
* @return A Zod enum containing the keys from the scalar fields.
|
|
17
|
+
*/ get scalarFieldsEnum() {
|
|
18
|
+
return z.enum(Object.keys(this._scalarFields));
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Retrieves an enum schema constructed from the keys of fields that can be populated (relations, components, files, etc.)
|
|
22
|
+
*
|
|
23
|
+
* @return A ZodEnum object containing the list of populatable field keys.
|
|
24
|
+
*/ get populatableFieldsEnum() {
|
|
25
|
+
return z.enum(Object.keys(this._populatableFields));
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Retrieves an array representation of the scalar fields.
|
|
29
|
+
*
|
|
30
|
+
* @return An array containing the scalar fields as defined by {@link scalarFieldsEnum}.
|
|
31
|
+
*/ get scalarFieldsArray() {
|
|
32
|
+
return z.array(this.scalarFieldsEnum);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Retrieves an array of populatable fields.
|
|
36
|
+
*
|
|
37
|
+
* @return A Zod array schema representing the available populatable fields as defined by {@link populatableFieldsEnum}.
|
|
38
|
+
*/ get populatableFieldsArray() {
|
|
39
|
+
return z.array(this.populatableFieldsEnum);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Retrieves the schema associated with the current model.
|
|
43
|
+
*
|
|
44
|
+
* The schema represents the structural definition of the model,
|
|
45
|
+
* as retrieved from the Strapi model associated with the given UID.
|
|
46
|
+
*
|
|
47
|
+
* @return The schema of the model retrieved from Strapi.
|
|
48
|
+
*/ get _schema() {
|
|
49
|
+
return this._strapi.getModel(this._uid);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Retrieves scalar fields from the object's schema attributes.
|
|
53
|
+
*
|
|
54
|
+
* Filters the schema attributes to include only those that are scalar and not private.
|
|
55
|
+
*
|
|
56
|
+
* @return An object composed of scalar fields from the schema attributes.
|
|
57
|
+
*/ get _scalarFields() {
|
|
58
|
+
const attributes = Object.entries(this._schema.attributes);
|
|
59
|
+
const scalarEntries = attributes.filter(([, attribute])=>contentTypes.isScalarAttribute(attribute)).filter(([attributeName])=>!contentTypes.isPrivateAttribute(this._schema, attributeName));
|
|
60
|
+
return Object.fromEntries(scalarEntries);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Retrieves the populatable fields from the schema attributes.
|
|
64
|
+
*
|
|
65
|
+
* Filters the schema attributes to include only those that are populatable and not private.
|
|
66
|
+
*
|
|
67
|
+
* @return An object containing the populatable fields derived from the schema attributes.
|
|
68
|
+
*/ get _populatableFields() {
|
|
69
|
+
const attributes = Object.entries(this._schema.attributes);
|
|
70
|
+
const populatableEntries = attributes.filter(([, attribute])=>!contentTypes.isScalarAttribute(attribute)).filter(([attributeName])=>!contentTypes.isPrivateAttribute(this._schema, attributeName));
|
|
71
|
+
return Object.fromEntries(populatableEntries);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Creates a Zod schema as a record with scalar fields as keys and the specified type as values.
|
|
75
|
+
*
|
|
76
|
+
* @param type - The Zod type to use for the record's values.
|
|
77
|
+
* @return A Zod record schema with scalar fields as keys and the specified type as values.
|
|
78
|
+
*/ fieldRecord(type) {
|
|
79
|
+
return z.record(this.scalarFieldsEnum, type);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Protected constructor for initializing the class with the provided Strapi instance and unique identifier (UID).
|
|
83
|
+
*
|
|
84
|
+
* @param strapi The Strapi instance to be used.
|
|
85
|
+
* @param uid The unique identifier for the instance.
|
|
86
|
+
*/ constructor(strapi, uid){
|
|
87
|
+
this._strapi = strapi;
|
|
88
|
+
this._uid = uid;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Maps a Strapi attribute definition to a corresponding Zod validation schema.
|
|
93
|
+
* This function handles various Strapi attribute types and converts them into
|
|
94
|
+
* appropriate Zod validation schemas with their respective constraints.
|
|
95
|
+
*
|
|
96
|
+
* @param attribute - The Strapi attribute configuration object. Contains type information
|
|
97
|
+
* and validation rules for the attribute.
|
|
98
|
+
*
|
|
99
|
+
* @returns A Zod schema that corresponds to the input attribute's type and validation rules
|
|
100
|
+
*
|
|
101
|
+
* @example
|
|
102
|
+
* ```typescript
|
|
103
|
+
* // String attribute with constraints
|
|
104
|
+
* const stringAttribute = {
|
|
105
|
+
* type: 'string',
|
|
106
|
+
* minLength: 3,
|
|
107
|
+
* maxLength: 50,
|
|
108
|
+
* required: true
|
|
109
|
+
* };
|
|
110
|
+
* const stringSchema = mapAttributeToSchema(stringAttribute);
|
|
111
|
+
*
|
|
112
|
+
* // Enumeration attribute
|
|
113
|
+
* const enumAttribute = {
|
|
114
|
+
* type: 'enumeration',
|
|
115
|
+
* enum: ['draft', 'published', 'archived']
|
|
116
|
+
* };
|
|
117
|
+
* const enumSchema = mapAttributeToSchema(enumAttribute);
|
|
118
|
+
*
|
|
119
|
+
* // Media attribute with multiple files
|
|
120
|
+
* const mediaAttribute = {
|
|
121
|
+
* type: 'media',
|
|
122
|
+
* multiple: true
|
|
123
|
+
* };
|
|
124
|
+
* const mediaSchema = mapAttributeToSchema(mediaAttribute);
|
|
125
|
+
* ```
|
|
126
|
+
*
|
|
127
|
+
* @throws {Error} Throws an error if an unsupported attribute type is provided
|
|
128
|
+
*
|
|
129
|
+
* @remarks
|
|
130
|
+
* - Complex types (component, relation, dynamic zone) use placeholder schemas
|
|
131
|
+
*/ const mapAttributeToSchema = (attribute)=>{
|
|
132
|
+
switch(attribute.type){
|
|
133
|
+
case 'string':
|
|
134
|
+
case 'text':
|
|
135
|
+
case 'richtext':
|
|
136
|
+
{
|
|
137
|
+
const { minLength, maxLength, required, default: def } = attribute;
|
|
138
|
+
return [
|
|
139
|
+
z.string()
|
|
140
|
+
].map((schema)=>minLength !== undefined ? schema.min(minLength) : schema).map((schema)=>maxLength !== undefined ? schema.max(maxLength) : schema).map((schema)=>required ? schema : schema.optional()).map((schema)=>{
|
|
141
|
+
if (typeof def === 'undefined') {
|
|
142
|
+
return schema;
|
|
143
|
+
}
|
|
144
|
+
// Needed to infer the type and target the correct schema.default() version
|
|
145
|
+
return typeof def === 'function' ? schema.default(def) : schema.default(def);
|
|
146
|
+
})[0];
|
|
147
|
+
}
|
|
148
|
+
case 'blocks':
|
|
149
|
+
return z.string();
|
|
150
|
+
case 'float':
|
|
151
|
+
return z.number().describe(`A float field`);
|
|
152
|
+
case 'decimal':
|
|
153
|
+
return z.number().describe(`A decimal field`);
|
|
154
|
+
case 'biginteger':
|
|
155
|
+
return z.number().describe(`A biginteger field`);
|
|
156
|
+
case 'integer':
|
|
157
|
+
return z.number().int().describe(`An integer field`);
|
|
158
|
+
case 'boolean':
|
|
159
|
+
return z.boolean().describe(`A boolean field`);
|
|
160
|
+
case 'date':
|
|
161
|
+
case 'datetime':
|
|
162
|
+
case 'timestamp':
|
|
163
|
+
case 'time':
|
|
164
|
+
return z.string().datetime().describe(`A date field`);
|
|
165
|
+
case 'email':
|
|
166
|
+
return z.string().email().describe(`An email field`);
|
|
167
|
+
case 'enumeration':
|
|
168
|
+
return z.enum(attribute.enum).describe(`An enumeration field with possible values: ${attribute.enum.join(', ')}`);
|
|
169
|
+
case 'component':
|
|
170
|
+
{
|
|
171
|
+
const schema = z.any().describe('imagine this is a component');
|
|
172
|
+
return attribute.repeatable ? z.array(schema) : schema.nullable();
|
|
173
|
+
}
|
|
174
|
+
case 'relation':
|
|
175
|
+
{
|
|
176
|
+
const schema = z.any().describe(`A related document`);
|
|
177
|
+
return relations.isAnyToMany(attribute) ? z.array(schema) : schema.nullable();
|
|
178
|
+
}
|
|
179
|
+
case 'dynamiczone':
|
|
180
|
+
return z.array(z.any()).describe('Imagine this is a dynamic zone').nullable();
|
|
181
|
+
case 'json':
|
|
182
|
+
return z.any().describe(`A JSON field`);
|
|
183
|
+
case 'uid':
|
|
184
|
+
return z.string().describe(`A unique identifier (UID) field`);
|
|
185
|
+
case 'password':
|
|
186
|
+
return z.string().describe(`A password field`);
|
|
187
|
+
case 'media':
|
|
188
|
+
{
|
|
189
|
+
const schema = z.any().describe(`A media field`);
|
|
190
|
+
return attribute.multiple ? z.array(schema) : schema.nullable();
|
|
191
|
+
}
|
|
192
|
+
default:
|
|
193
|
+
throw new Error(`Unsupported attribute type: ${attribute['type']}`);
|
|
194
|
+
}
|
|
195
|
+
};
|
|
196
|
+
|
|
197
|
+
export { AbstractCoreRouteValidator, mapAttributeToSchema };
|
|
198
|
+
//# sourceMappingURL=common.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.mjs","sources":["../../../../src/core-api/routes/validation/common.ts"],"sourcesContent":["import { type Core, Schema, type UID } from '@strapi/types';\nimport { contentTypes, relations } from '@strapi/utils';\nimport { z } from 'zod';\n\n/**\n * AbstractCoreRouteValidator provides the foundation for validating and managing core routes within a Strapi context for a specific model.\n *\n * This abstract class facilitates validation logic for scalar and populatable fields defined in a model schema.\n *\n * It uses runtime information about Strapi models to derive and expose schema validations.\n *\n * @template {UID.Schema} T Representing the schema identifier to be validated.\n */\nexport abstract class AbstractCoreRouteValidator<T extends UID.Schema> {\n /**\n * The `_strapi` variable serves as a reference to the core Strapi instance.\n * It is used for interacting with the loaded model.\n */\n protected readonly _strapi: Core.Strapi;\n\n /**\n * A unique identifier used to represent a model within Strapi.\n *\n * The type of the identifier is generic to allow flexibility and ensure type safety\n * when working with either content-types or components.\n */\n protected readonly _uid: T;\n\n /**\n * Protected constructor for initializing the class with the provided Strapi instance and unique identifier (UID).\n *\n * @param strapi The Strapi instance to be used.\n * @param uid The unique identifier for the instance.\n */\n protected constructor(strapi: Core.Strapi, uid: T) {\n this._strapi = strapi;\n this._uid = uid;\n }\n\n /**\n * Retrieves an enum schema constructed from the keys of the scalar fields.\n *\n * @return A Zod enum containing the keys from the scalar fields.\n */\n public get scalarFieldsEnum() {\n return z.enum(Object.keys(this._scalarFields) as [string]);\n }\n\n /**\n * Retrieves an enum schema constructed from the keys of fields that can be populated (relations, components, files, etc.)\n *\n * @return A ZodEnum object containing the list of populatable field keys.\n */\n public get populatableFieldsEnum() {\n return z.enum(Object.keys(this._populatableFields) as [string]);\n }\n\n /**\n * Retrieves an array representation of the scalar fields.\n *\n * @return An array containing the scalar fields as defined by {@link scalarFieldsEnum}.\n */\n public get scalarFieldsArray() {\n return z.array(this.scalarFieldsEnum);\n }\n\n /**\n * Retrieves an array of populatable fields.\n *\n * @return A Zod array schema representing the available populatable fields as defined by {@link populatableFieldsEnum}.\n */\n public get populatableFieldsArray() {\n return z.array(this.populatableFieldsEnum);\n }\n\n /**\n * Retrieves the schema associated with the current model.\n *\n * The schema represents the structural definition of the model,\n * as retrieved from the Strapi model associated with the given UID.\n *\n * @return The schema of the model retrieved from Strapi.\n */\n protected get _schema() {\n return this._strapi.getModel(this._uid);\n }\n\n /**\n * Retrieves scalar fields from the object's schema attributes.\n *\n * Filters the schema attributes to include only those that are scalar and not private.\n *\n * @return An object composed of scalar fields from the schema attributes.\n */\n protected get _scalarFields() {\n const attributes = Object.entries(this._schema.attributes);\n\n const scalarEntries = attributes\n .filter(([, attribute]) => contentTypes.isScalarAttribute(attribute))\n .filter(([attributeName]) => !contentTypes.isPrivateAttribute(this._schema, attributeName));\n\n return Object.fromEntries(scalarEntries);\n }\n\n /**\n * Retrieves the populatable fields from the schema attributes.\n *\n * Filters the schema attributes to include only those that are populatable and not private.\n *\n * @return An object containing the populatable fields derived from the schema attributes.\n */\n protected get _populatableFields() {\n const attributes = Object.entries(this._schema.attributes);\n\n const populatableEntries = attributes\n .filter(([, attribute]) => !contentTypes.isScalarAttribute(attribute))\n .filter(([attributeName]) => !contentTypes.isPrivateAttribute(this._schema, attributeName));\n\n return Object.fromEntries(populatableEntries);\n }\n\n /**\n * Creates a Zod schema as a record with scalar fields as keys and the specified type as values.\n *\n * @param type - The Zod type to use for the record's values.\n * @return A Zod record schema with scalar fields as keys and the specified type as values.\n */\n public fieldRecord(type: z.ZodTypeAny) {\n return z.record(this.scalarFieldsEnum, type);\n }\n}\n\n/**\n * Maps a Strapi attribute definition to a corresponding Zod validation schema.\n * This function handles various Strapi attribute types and converts them into\n * appropriate Zod validation schemas with their respective constraints.\n *\n * @param attribute - The Strapi attribute configuration object. Contains type information\n * and validation rules for the attribute.\n *\n * @returns A Zod schema that corresponds to the input attribute's type and validation rules\n *\n * @example\n * ```typescript\n * // String attribute with constraints\n * const stringAttribute = {\n * type: 'string',\n * minLength: 3,\n * maxLength: 50,\n * required: true\n * };\n * const stringSchema = mapAttributeToSchema(stringAttribute);\n *\n * // Enumeration attribute\n * const enumAttribute = {\n * type: 'enumeration',\n * enum: ['draft', 'published', 'archived']\n * };\n * const enumSchema = mapAttributeToSchema(enumAttribute);\n *\n * // Media attribute with multiple files\n * const mediaAttribute = {\n * type: 'media',\n * multiple: true\n * };\n * const mediaSchema = mapAttributeToSchema(mediaAttribute);\n * ```\n *\n * @throws {Error} Throws an error if an unsupported attribute type is provided\n *\n * @remarks\n * - Complex types (component, relation, dynamic zone) use placeholder schemas\n */\nexport const mapAttributeToSchema = (attribute: Schema.Attribute.AnyAttribute): z.Schema => {\n switch (attribute.type) {\n case 'string':\n case 'text':\n case 'richtext': {\n const { minLength, maxLength, required, default: def } = attribute;\n\n return [z.string()]\n .map((schema) => (minLength !== undefined ? schema.min(minLength) : schema))\n .map((schema) => (maxLength !== undefined ? schema.max(maxLength) : schema))\n .map((schema) => (required ? schema : schema.optional()))\n .map((schema) => {\n if (typeof def === 'undefined') {\n return schema;\n }\n\n // Needed to infer the type and target the correct schema.default() version\n return typeof def === 'function' ? schema.default(def) : schema.default(def);\n })[0];\n }\n case 'blocks':\n return z.string();\n case 'float':\n return z.number().describe(`A float field`);\n case 'decimal':\n return z.number().describe(`A decimal field`);\n case 'biginteger':\n return z.number().describe(`A biginteger field`);\n case 'integer':\n return z.number().int().describe(`An integer field`);\n case 'boolean':\n return z.boolean().describe(`A boolean field`);\n case 'date':\n case 'datetime':\n case 'timestamp':\n case 'time':\n return z.string().datetime().describe(`A date field`);\n case 'email':\n return z.string().email().describe(`An email field`);\n case 'enumeration':\n return z\n .enum(attribute.enum as [string])\n .describe(`An enumeration field with possible values: ${attribute.enum.join(', ')}`);\n case 'component': {\n const schema = z.any().describe('imagine this is a component');\n\n return attribute.repeatable ? z.array(schema) : schema.nullable();\n }\n case 'relation': {\n const schema = z.any().describe(`A related document`);\n\n return relations.isAnyToMany(attribute) ? z.array(schema) : schema.nullable();\n }\n case 'dynamiczone':\n return z.array(z.any()).describe('Imagine this is a dynamic zone').nullable();\n case 'json':\n return z.any().describe(`A JSON field`);\n case 'uid':\n return z.string().describe(`A unique identifier (UID) field`);\n case 'password':\n return z.string().describe(`A password field`);\n case 'media': {\n const schema = z.any().describe(`A media field`);\n\n return attribute.multiple ? z.array(schema) : schema.nullable();\n }\n default:\n throw new Error(`Unsupported attribute type: ${attribute['type']}`);\n }\n};\n"],"names":["AbstractCoreRouteValidator","scalarFieldsEnum","z","enum","Object","keys","_scalarFields","populatableFieldsEnum","_populatableFields","scalarFieldsArray","array","populatableFieldsArray","_schema","_strapi","getModel","_uid","attributes","entries","scalarEntries","filter","attribute","contentTypes","isScalarAttribute","attributeName","isPrivateAttribute","fromEntries","populatableEntries","fieldRecord","type","record","strapi","uid","mapAttributeToSchema","minLength","maxLength","required","default","def","string","map","schema","undefined","min","max","optional","number","describe","int","boolean","datetime","email","join","any","repeatable","nullable","relations","isAnyToMany","multiple","Error"],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { Core, UID } from '@strapi/types';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { AbstractCoreRouteValidator } from './common';
|
|
4
|
+
/**
|
|
5
|
+
* A component validator for core content-type routes.
|
|
6
|
+
*
|
|
7
|
+
* Provides validation schemas and utilities for handling component-specific validation in content-type routes.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```ts
|
|
11
|
+
* const strapi = // ... strapi instance
|
|
12
|
+
* const uid = 'api::article.article'
|
|
13
|
+
* const validator = new CoreComponentRouteValidator(strapi, uid);
|
|
14
|
+
*
|
|
15
|
+
* // Get validation schema for a component entry
|
|
16
|
+
* const componentSchema = validator.component;
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export declare class CoreComponentRouteValidator extends AbstractCoreRouteValidator<UID.Component> {
|
|
20
|
+
/**
|
|
21
|
+
* Creates a new instance of CoreComponentRouteValidator
|
|
22
|
+
*
|
|
23
|
+
* @param strapi - The Strapi instance
|
|
24
|
+
* @param uid - The component's unique identifier
|
|
25
|
+
*/
|
|
26
|
+
constructor(strapi: Core.Strapi, uid: UID.Component);
|
|
27
|
+
/**
|
|
28
|
+
* Generates a comprehensive validation schema for a single component entry.
|
|
29
|
+
*
|
|
30
|
+
* Combines scalar fields and populatable fields into a single schema.
|
|
31
|
+
*
|
|
32
|
+
* @returns A schema for validating complete entries
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```ts
|
|
36
|
+
* const validator = new CoreComponentRouteValidator(strapi, uid);
|
|
37
|
+
* const entrySchema = validator.entry;
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
get entry(): z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=component.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../../../src/core-api/routes/validation/component.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,0BAA0B,EAAwB,MAAM,UAAU,CAAC;AAE5E;;;;;;;;;;;;;;GAcG;AACH,qBAAa,2BAA4B,SAAQ,0BAA0B,CAAC,GAAG,CAAC,SAAS,CAAC;IACxF;;;;;OAKG;gBACS,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,SAAS;IAInD;;;;;;;;;;;;OAYG;IACH,IAAI,KAAK,mDAQR;CACF"}
|