@strapi/core 5.56.0 → 5.58.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Strapi.d.ts +29 -0
- package/dist/Strapi.d.ts.map +1 -1
- package/dist/Strapi.js +10 -3
- package/dist/Strapi.js.map +1 -1
- package/dist/Strapi.mjs +10 -3
- package/dist/Strapi.mjs.map +1 -1
- package/dist/configuration/get-dirs.js +2 -2
- package/dist/configuration/get-dirs.js.map +1 -1
- package/dist/configuration/get-dirs.mjs +2 -2
- package/dist/configuration/get-dirs.mjs.map +1 -1
- package/dist/configuration/index.d.ts +1 -2
- package/dist/configuration/index.d.ts.map +1 -1
- package/dist/configuration/index.js +1 -2
- package/dist/configuration/index.js.map +1 -1
- package/dist/configuration/index.mjs +2 -3
- package/dist/configuration/index.mjs.map +1 -1
- package/dist/core-api/controller/collection-type.js +3 -3
- package/dist/core-api/controller/collection-type.js.map +1 -1
- package/dist/core-api/controller/collection-type.mjs +1 -1
- package/dist/core-api/controller/collection-type.mjs.map +1 -1
- package/dist/core-api/controller/index.js +2 -2
- package/dist/core-api/controller/index.js.map +1 -1
- package/dist/core-api/controller/index.mjs +2 -2
- package/dist/core-api/controller/index.mjs.map +1 -1
- package/dist/core-api/controller/single-type.js +2 -2
- package/dist/core-api/controller/single-type.js.map +1 -1
- package/dist/core-api/controller/single-type.mjs +1 -1
- package/dist/core-api/controller/single-type.mjs.map +1 -1
- package/dist/core-api/controller/transform.d.ts +1 -4
- package/dist/core-api/controller/transform.d.ts.map +1 -1
- package/dist/core-api/controller/transform.js +8 -8
- package/dist/core-api/controller/transform.js.map +1 -1
- package/dist/core-api/controller/transform.mjs +5 -5
- package/dist/core-api/controller/transform.mjs.map +1 -1
- package/dist/core-api/routes/index.js +1 -1
- package/dist/core-api/routes/index.js.map +1 -1
- package/dist/core-api/routes/index.mjs +1 -1
- package/dist/core-api/routes/index.mjs.map +1 -1
- package/dist/core-api/service/pagination.js +9 -9
- package/dist/core-api/service/pagination.js.map +1 -1
- package/dist/core-api/service/pagination.mjs +7 -7
- package/dist/core-api/service/pagination.mjs.map +1 -1
- package/dist/domain/content-type/index.d.ts.map +1 -1
- package/dist/domain/content-type/index.js +1 -2
- package/dist/domain/content-type/index.js.map +1 -1
- package/dist/domain/content-type/index.mjs +1 -2
- package/dist/domain/content-type/index.mjs.map +1 -1
- package/dist/ee/entitlements.d.ts +44 -0
- package/dist/ee/entitlements.d.ts.map +1 -0
- package/dist/ee/entitlements.js +54 -0
- package/dist/ee/entitlements.js.map +1 -0
- package/dist/ee/entitlements.mjs +51 -0
- package/dist/ee/entitlements.mjs.map +1 -0
- package/dist/ee/index.d.ts +33 -0
- package/dist/ee/index.d.ts.map +1 -1
- package/dist/ee/index.js +74 -7
- package/dist/ee/index.js.map +1 -1
- package/dist/ee/index.mjs +74 -7
- package/dist/ee/index.mjs.map +1 -1
- package/dist/ee/license.d.ts +10 -0
- package/dist/ee/license.d.ts.map +1 -1
- package/dist/ee/license.js +25 -1
- package/dist/ee/license.js.map +1 -1
- package/dist/ee/license.mjs +25 -2
- package/dist/ee/license.mjs.map +1 -1
- package/dist/factories.d.ts.map +1 -1
- package/dist/factories.js +3 -2
- package/dist/factories.js.map +1 -1
- package/dist/factories.mjs +3 -2
- package/dist/factories.mjs.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/dist/loaders/apis.d.ts.map +1 -1
- package/dist/loaders/apis.js +1 -2
- package/dist/loaders/apis.js.map +1 -1
- package/dist/loaders/apis.mjs +1 -2
- package/dist/loaders/apis.mjs.map +1 -1
- package/dist/loaders/plugins/get-enabled-plugins.d.ts +1 -1
- package/dist/loaders/plugins/get-enabled-plugins.d.ts.map +1 -1
- package/dist/loaders/plugins/get-enabled-plugins.js +6 -5
- package/dist/loaders/plugins/get-enabled-plugins.js.map +1 -1
- package/dist/loaders/plugins/get-enabled-plugins.mjs +6 -5
- package/dist/loaders/plugins/get-enabled-plugins.mjs.map +1 -1
- package/dist/loaders/plugins/get-user-plugins-config.js +2 -2
- package/dist/loaders/plugins/get-user-plugins-config.js.map +1 -1
- package/dist/loaders/plugins/get-user-plugins-config.mjs +2 -2
- package/dist/loaders/plugins/get-user-plugins-config.mjs.map +1 -1
- package/dist/loaders/plugins/index.js +9 -12
- package/dist/loaders/plugins/index.js.map +1 -1
- package/dist/loaders/plugins/index.mjs +9 -12
- package/dist/loaders/plugins/index.mjs.map +1 -1
- package/dist/middlewares/body.js +2 -2
- package/dist/middlewares/body.js.map +1 -1
- package/dist/middlewares/body.mjs +2 -2
- package/dist/middlewares/body.mjs.map +1 -1
- package/dist/middlewares/public.js +2 -2
- package/dist/middlewares/public.js.map +1 -1
- package/dist/middlewares/public.mjs +2 -2
- package/dist/middlewares/public.mjs.map +1 -1
- package/dist/middlewares/responses.d.ts.map +1 -1
- package/dist/middlewares/responses.js +1 -3
- package/dist/middlewares/responses.js.map +1 -1
- package/dist/middlewares/responses.mjs +1 -3
- package/dist/middlewares/responses.mjs.map +1 -1
- package/dist/middlewares/security.d.ts.map +1 -1
- package/dist/middlewares/security.js +3 -3
- package/dist/middlewares/security.js.map +1 -1
- package/dist/middlewares/security.mjs +3 -3
- package/dist/middlewares/security.mjs.map +1 -1
- package/dist/middlewares/session.js +2 -2
- package/dist/middlewares/session.js.map +1 -1
- package/dist/middlewares/session.mjs +2 -2
- package/dist/middlewares/session.mjs.map +1 -1
- package/dist/migrations/database/5.0.0-discard-drafts.d.ts.map +1 -1
- package/dist/migrations/database/5.0.0-discard-drafts.js +1 -2
- package/dist/migrations/database/5.0.0-discard-drafts.js.map +1 -1
- package/dist/migrations/database/5.0.0-discard-drafts.mjs +1 -2
- package/dist/migrations/database/5.0.0-discard-drafts.mjs.map +1 -1
- package/dist/migrations/i18n.d.ts.map +1 -1
- package/dist/migrations/i18n.js +6 -4
- package/dist/migrations/i18n.js.map +1 -1
- package/dist/migrations/i18n.mjs +6 -4
- package/dist/migrations/i18n.mjs.map +1 -1
- package/dist/package.json.js +16 -16
- package/dist/package.json.mjs +16 -16
- package/dist/registries/apis.js +2 -2
- package/dist/registries/apis.js.map +1 -1
- package/dist/registries/apis.mjs +2 -2
- package/dist/registries/apis.mjs.map +1 -1
- package/dist/registries/components.js +2 -2
- package/dist/registries/components.js.map +1 -1
- package/dist/registries/components.mjs +2 -2
- package/dist/registries/components.mjs.map +1 -1
- package/dist/registries/content-types.d.ts +1 -1
- package/dist/registries/content-types.js +3 -3
- package/dist/registries/content-types.js.map +1 -1
- package/dist/registries/content-types.mjs +3 -3
- package/dist/registries/content-types.mjs.map +1 -1
- package/dist/registries/controllers.js +3 -3
- package/dist/registries/controllers.js.map +1 -1
- package/dist/registries/controllers.mjs +3 -3
- package/dist/registries/controllers.mjs.map +1 -1
- package/dist/registries/custom-fields.js +4 -4
- package/dist/registries/custom-fields.js.map +1 -1
- package/dist/registries/custom-fields.mjs +4 -4
- package/dist/registries/custom-fields.mjs.map +1 -1
- package/dist/registries/hooks.d.ts +1 -1
- package/dist/registries/hooks.js +2 -2
- package/dist/registries/hooks.js.map +1 -1
- package/dist/registries/hooks.mjs +2 -2
- package/dist/registries/hooks.mjs.map +1 -1
- package/dist/registries/middlewares.d.ts +1 -1
- package/dist/registries/middlewares.js +3 -3
- package/dist/registries/middlewares.js.map +1 -1
- package/dist/registries/middlewares.mjs +3 -3
- package/dist/registries/middlewares.mjs.map +1 -1
- package/dist/registries/modules.d.ts +1 -4
- package/dist/registries/modules.d.ts.map +1 -1
- package/dist/registries/modules.js +3 -3
- package/dist/registries/modules.js.map +1 -1
- package/dist/registries/modules.mjs +3 -3
- package/dist/registries/modules.mjs.map +1 -1
- package/dist/registries/plugins.js +2 -2
- package/dist/registries/plugins.js.map +1 -1
- package/dist/registries/plugins.mjs +2 -2
- package/dist/registries/plugins.mjs.map +1 -1
- package/dist/registries/policies.d.ts +1 -1
- package/dist/registries/policies.js +4 -4
- package/dist/registries/policies.js.map +1 -1
- package/dist/registries/policies.mjs +3 -3
- package/dist/registries/policies.mjs.map +1 -1
- package/dist/registries/services.js +3 -3
- package/dist/registries/services.js.map +1 -1
- package/dist/registries/services.mjs +3 -3
- package/dist/registries/services.mjs.map +1 -1
- package/dist/services/auth/index.js +3 -3
- package/dist/services/auth/index.js.map +1 -1
- package/dist/services/auth/index.mjs +3 -3
- package/dist/services/auth/index.mjs.map +1 -1
- package/dist/services/core-store.js +3 -3
- package/dist/services/core-store.js.map +1 -1
- package/dist/services/core-store.mjs +1 -1
- package/dist/services/core-store.mjs.map +1 -1
- package/dist/services/cron.d.ts.map +1 -1
- package/dist/services/cron.js +2 -4
- package/dist/services/cron.js.map +1 -1
- package/dist/services/cron.mjs +2 -4
- package/dist/services/cron.mjs.map +1 -1
- package/dist/services/document-service/attributes/index.js +2 -2
- package/dist/services/document-service/attributes/index.js.map +1 -1
- package/dist/services/document-service/attributes/index.mjs +1 -1
- package/dist/services/document-service/attributes/index.mjs.map +1 -1
- package/dist/services/document-service/attributes/transforms.js +3 -3
- package/dist/services/document-service/attributes/transforms.js.map +1 -1
- package/dist/services/document-service/attributes/transforms.mjs +2 -2
- package/dist/services/document-service/attributes/transforms.mjs.map +1 -1
- package/dist/services/document-service/components.d.ts.map +1 -1
- package/dist/services/document-service/components.js +13 -14
- package/dist/services/document-service/components.js.map +1 -1
- package/dist/services/document-service/components.mjs +12 -13
- package/dist/services/document-service/components.mjs.map +1 -1
- package/dist/services/document-service/draft-and-publish.js +65 -38
- package/dist/services/document-service/draft-and-publish.js.map +1 -1
- package/dist/services/document-service/draft-and-publish.mjs +59 -32
- 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 +16 -8
- package/dist/services/document-service/entries.js.map +1 -1
- package/dist/services/document-service/entries.mjs +17 -9
- package/dist/services/document-service/entries.mjs.map +1 -1
- package/dist/services/document-service/first-published-at.js +7 -5
- package/dist/services/document-service/first-published-at.js.map +1 -1
- package/dist/services/document-service/first-published-at.mjs +7 -5
- package/dist/services/document-service/first-published-at.mjs.map +1 -1
- package/dist/services/document-service/internationalization.d.ts.map +1 -1
- package/dist/services/document-service/internationalization.js +37 -28
- package/dist/services/document-service/internationalization.js.map +1 -1
- package/dist/services/document-service/internationalization.mjs +33 -24
- package/dist/services/document-service/internationalization.mjs.map +1 -1
- package/dist/services/document-service/params.d.ts +1 -0
- package/dist/services/document-service/params.d.ts.map +1 -1
- package/dist/services/document-service/params.js +6 -4
- package/dist/services/document-service/params.js.map +1 -1
- package/dist/services/document-service/params.mjs +6 -5
- 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 +84 -61
- package/dist/services/document-service/repository.js.map +1 -1
- package/dist/services/document-service/repository.mjs +47 -24
- package/dist/services/document-service/repository.mjs.map +1 -1
- package/dist/services/document-service/transform/fields.d.ts.map +1 -1
- package/dist/services/document-service/transform/fields.js +7 -1
- package/dist/services/document-service/transform/fields.js.map +1 -1
- package/dist/services/document-service/transform/fields.mjs +7 -1
- package/dist/services/document-service/transform/fields.mjs.map +1 -1
- package/dist/services/document-service/transform/id-map.d.ts.map +1 -1
- package/dist/services/document-service/transform/id-map.js +2 -1
- package/dist/services/document-service/transform/id-map.js.map +1 -1
- package/dist/services/document-service/transform/id-map.mjs +2 -1
- package/dist/services/document-service/transform/id-map.mjs.map +1 -1
- package/dist/services/document-service/transform/id-transform.js +2 -2
- package/dist/services/document-service/transform/id-transform.js.map +1 -1
- package/dist/services/document-service/transform/id-transform.mjs +1 -1
- package/dist/services/document-service/transform/id-transform.mjs.map +1 -1
- package/dist/services/document-service/transform/populate.d.ts.map +1 -1
- package/dist/services/document-service/transform/populate.js +8 -1
- package/dist/services/document-service/transform/populate.js.map +1 -1
- package/dist/services/document-service/transform/populate.mjs +8 -1
- package/dist/services/document-service/transform/populate.mjs.map +1 -1
- package/dist/services/document-service/transform/query.d.ts +3 -1
- package/dist/services/document-service/transform/query.d.ts.map +1 -1
- package/dist/services/document-service/transform/query.js +12 -6
- package/dist/services/document-service/transform/query.js.map +1 -1
- package/dist/services/document-service/transform/query.mjs +11 -5
- package/dist/services/document-service/transform/query.mjs.map +1 -1
- package/dist/services/document-service/transform/relations/extract/data-ids.js +2 -2
- 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 +1 -1
- package/dist/services/document-service/transform/relations/extract/data-ids.mjs.map +1 -1
- package/dist/services/document-service/transform/relations/transform/data-ids.js +2 -2
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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.map +1 -1
- package/dist/services/document-service/transform/relations/utils/dp.js +1 -2
- package/dist/services/document-service/transform/relations/utils/dp.js.map +1 -1
- package/dist/services/document-service/transform/relations/utils/dp.mjs +1 -2
- package/dist/services/document-service/transform/relations/utils/dp.mjs.map +1 -1
- package/dist/services/document-service/transform/relations/utils/i18n.d.ts +2 -2
- package/dist/services/document-service/transform/relations/utils/i18n.d.ts.map +1 -1
- package/dist/services/document-service/transform/relations/utils/i18n.js +2 -2
- package/dist/services/document-service/transform/relations/utils/i18n.js.map +1 -1
- package/dist/services/document-service/transform/relations/utils/i18n.mjs +2 -2
- 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 +16 -10
- 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 +13 -7
- package/dist/services/document-service/transform/relations/utils/map-relation.mjs.map +1 -1
- package/dist/services/document-service/transform/relations/utils/xto-one.js +3 -3
- package/dist/services/document-service/transform/relations/utils/xto-one.js.map +1 -1
- package/dist/services/document-service/transform/relations/utils/xto-one.mjs +2 -2
- package/dist/services/document-service/transform/relations/utils/xto-one.mjs.map +1 -1
- package/dist/services/document-service/utils/bidirectional-relations.js +3 -3
- package/dist/services/document-service/utils/bidirectional-relations.js.map +1 -1
- package/dist/services/document-service/utils/bidirectional-relations.mjs +3 -3
- package/dist/services/document-service/utils/bidirectional-relations.mjs.map +1 -1
- package/dist/services/document-service/utils/clone-relations.js +3 -3
- package/dist/services/document-service/utils/clone-relations.js.map +1 -1
- package/dist/services/document-service/utils/clone-relations.mjs +3 -3
- package/dist/services/document-service/utils/clone-relations.mjs.map +1 -1
- package/dist/services/document-service/utils/self-referential-relations.js +4 -4
- package/dist/services/document-service/utils/self-referential-relations.js.map +1 -1
- package/dist/services/document-service/utils/self-referential-relations.mjs +4 -4
- package/dist/services/document-service/utils/self-referential-relations.mjs.map +1 -1
- package/dist/services/document-service/utils/unidirectional-relations.js +3 -3
- package/dist/services/document-service/utils/unidirectional-relations.js.map +1 -1
- package/dist/services/document-service/utils/unidirectional-relations.mjs +3 -3
- package/dist/services/document-service/utils/unidirectional-relations.mjs.map +1 -1
- package/dist/services/entity-validator/index.d.ts.map +1 -1
- package/dist/services/entity-validator/index.js +9 -10
- package/dist/services/entity-validator/index.js.map +1 -1
- package/dist/services/entity-validator/index.mjs +4 -5
- package/dist/services/entity-validator/index.mjs.map +1 -1
- package/dist/services/localization.d.ts +4 -0
- package/dist/services/localization.d.ts.map +1 -0
- package/dist/services/localization.js +51 -0
- package/dist/services/localization.js.map +1 -0
- package/dist/services/localization.mjs +49 -0
- package/dist/services/localization.mjs.map +1 -0
- package/dist/services/server/compose-endpoint.js +7 -7
- package/dist/services/server/compose-endpoint.js.map +1 -1
- package/dist/services/server/compose-endpoint.mjs +3 -3
- package/dist/services/server/compose-endpoint.mjs.map +1 -1
- package/dist/services/server/koa-methods.js +2 -2
- package/dist/services/server/koa-methods.js.map +1 -1
- package/dist/services/server/koa-methods.mjs +1 -1
- package/dist/services/server/koa-methods.mjs.map +1 -1
- package/dist/services/server/koa.d.ts.map +1 -1
- package/dist/services/server/koa.js +1 -2
- package/dist/services/server/koa.js.map +1 -1
- package/dist/services/server/koa.mjs +1 -2
- package/dist/services/server/koa.mjs.map +1 -1
- package/dist/services/server/middleware.d.ts.map +1 -1
- package/dist/services/server/middleware.js +1 -2
- package/dist/services/server/middleware.js.map +1 -1
- package/dist/services/server/middleware.mjs +1 -2
- package/dist/services/server/middleware.mjs.map +1 -1
- package/dist/services/server/routing.js +2 -2
- package/dist/services/server/routing.js.map +1 -1
- package/dist/services/server/routing.mjs +2 -2
- package/dist/services/server/routing.mjs.map +1 -1
- package/dist/services/utils/conditional-fields.d.ts +1 -1
- package/dist/services/utils/conditional-fields.d.ts.map +1 -1
- package/dist/services/utils/conditional-fields.js +2 -8
- package/dist/services/utils/conditional-fields.js.map +1 -1
- package/dist/services/utils/conditional-fields.mjs +2 -8
- package/dist/services/utils/conditional-fields.mjs.map +1 -1
- package/dist/services/utils/dynamic-zones.d.ts.map +1 -1
- package/dist/services/utils/dynamic-zones.js +2 -8
- package/dist/services/utils/dynamic-zones.js.map +1 -1
- package/dist/services/utils/dynamic-zones.mjs +2 -8
- package/dist/services/utils/dynamic-zones.mjs.map +1 -1
- package/dist/utils/cron.js +2 -2
- package/dist/utils/cron.js.map +1 -1
- package/dist/utils/cron.mjs +1 -1
- package/dist/utils/cron.mjs.map +1 -1
- package/dist/utils/detect-customizations.d.ts +31 -0
- package/dist/utils/detect-customizations.d.ts.map +1 -0
- package/dist/utils/detect-customizations.js +173 -0
- package/dist/utils/detect-customizations.js.map +1 -0
- package/dist/utils/detect-customizations.mjs +165 -0
- package/dist/utils/detect-customizations.mjs.map +1 -0
- package/dist/utils/filepath-to-prop-path.d.ts.map +1 -1
- package/dist/utils/filepath-to-prop-path.js +5 -12
- package/dist/utils/filepath-to-prop-path.js.map +1 -1
- package/dist/utils/filepath-to-prop-path.mjs +5 -11
- package/dist/utils/filepath-to-prop-path.mjs.map +1 -1
- package/dist/utils/is-initialized.js +3 -3
- package/dist/utils/is-initialized.js.map +1 -1
- package/dist/utils/is-initialized.mjs +2 -2
- package/dist/utils/is-initialized.mjs.map +1 -1
- package/dist/utils/startup-logger.d.ts.map +1 -1
- package/dist/utils/startup-logger.js +2 -4
- package/dist/utils/startup-logger.js.map +1 -1
- package/dist/utils/startup-logger.mjs +2 -3
- package/dist/utils/startup-logger.mjs.map +1 -1
- package/dist/utils/transform-content-types-to-models.js +4 -4
- package/dist/utils/transform-content-types-to-models.js.map +1 -1
- package/dist/utils/transform-content-types-to-models.mjs +3 -3
- package/dist/utils/transform-content-types-to-models.mjs.map +1 -1
- package/package.json +16 -16
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entries.js","sources":["../../../src/services/document-service/entries.ts"],"sourcesContent":["import type { UID, Modules } from '@strapi/types';\nimport { async, errors } from '@strapi/utils';\nimport { assoc, omit } from 'lodash/fp';\n\nimport * as components from './components';\n\nimport { transformParamsDocumentId } from './transform/id-transform';\nimport { transformParamsToQuery } from './transform/query';\nimport { pickSelectionParams } from './params';\nimport { applyTransforms } from './attributes';\nimport { clearTransformDataRequestCache, transformData } from './transform/data';\n\n/**\n * Reads and validates the `api.documents.strictRelations` flag.\n * false/undefined => legacy behaviour (relational required constraints not enforced),\n * true => enforce required media and relations on non-draft writes.\n * Mirrors the validation of `api.documents.strictParams` (see repository.ts).\n */\nconst isStrictRelationsEnabled = (): boolean => {\n const rawStrictRelations: unknown = strapi.config.get('api.documents.strictRelations', undefined);\n\n if (\n rawStrictRelations !== undefined &&\n rawStrictRelations !== false &&\n rawStrictRelations !== true\n ) {\n throw new errors.ValidationError(\n `Invalid config.api.documents.strictRelations value: \"${rawStrictRelations}\". Expected boolean (true or false).`\n );\n }\n\n return rawStrictRelations === true;\n};\n\nconst createEntriesService = (\n uid: UID.ContentType,\n entityValidator: Modules.EntityValidator.EntityValidator\n) => {\n const contentType = strapi.contentType(uid);\n\n async function createEntry(params = {} as any) {\n const { data, ...restParams } = await transformParamsDocumentId(uid, params);\n const query = transformParamsToQuery(uid, pickSelectionParams(restParams) as any); // select / populate\n\n // Validation\n if (!data) {\n throw new Error('Create requires data attribute');\n }\n\n // Check for uniqueness based on documentId and locale (if localized)\n if (data.documentId) {\n const i18nService = strapi.plugin('i18n')?.service('content-types');\n const isLocalized = i18nService?.isLocalizedContentType(contentType) ?? false;\n const hasDraftAndPublish = contentType.options?.draftAndPublish === true;\n\n const whereClause: Record<string, unknown> = { documentId: data.documentId };\n\n if (isLocalized) {\n whereClause.locale = data.locale;\n }\n\n let publishedStateDescription = '';\n\n if (hasDraftAndPublish) {\n if (data.publishedAt) {\n // Current entry is published, check for existing published entry\n whereClause.publishedAt = { $notNull: true };\n publishedStateDescription = 'published';\n } else {\n // Current entry is a draft, check for existing draft entry\n whereClause.publishedAt = { $null: true };\n publishedStateDescription = 'draft';\n }\n }\n\n const existingEntry = await strapi.db.query(uid).findOne({\n select: ['id'],\n where: whereClause,\n });\n\n if (existingEntry) {\n let errorMsg = `A ${publishedStateDescription} entry with documentId \"${data.documentId}\"`;\n if (isLocalized && data.locale) {\n errorMsg += ` and locale \"${data.locale}\"`;\n }\n errorMsg += ` already exists for UID \"${uid}\". This combination must be unique.`;\n throw new errors.ApplicationError(errorMsg);\n }\n }\n\n const validData = await entityValidator.validateEntityCreation(contentType, data, {\n // Note: publishedAt value will always be set when DP is disabled\n isDraft: !params?.data?.publishedAt,\n locale: params?.locale,\n strictRelations: isStrictRelationsEnabled(),\n });\n\n // Component handling\n const componentData = await components.createComponents(uid, validData);\n const dataWithComponents = components.assignComponentData(\n contentType,\n componentData,\n validData\n );\n\n const entryData = applyTransforms(contentType, dataWithComponents);\n\n const doc = await strapi.db.query(uid).create({ ...query, data: entryData });\n\n return doc;\n }\n\n async function deleteEntry(id: number, query = {} as any) {\n const componentsToDelete = await components.getComponents(uid, { id });\n\n const deletedEntry = await strapi.db.query(uid).delete({ ...query, where: { id } });\n\n await components.deleteComponents(uid, componentsToDelete as any, { loadComponents: false });\n\n return deletedEntry;\n }\n\n async function updateEntry(entryToUpdate: any, params = {} as any) {\n const { data, ...restParams } = await transformParamsDocumentId(uid, params);\n const query = transformParamsToQuery(uid, pickSelectionParams(restParams) as any); // select / populate\n\n const validData = await entityValidator.validateEntityUpdate(\n contentType,\n data,\n {\n isDraft: !params?.data?.publishedAt, // Always update the draft version\n locale: params?.locale,\n strictRelations: isStrictRelationsEnabled(),\n },\n entryToUpdate\n );\n // Component handling\n const componentData = await components.updateComponents(uid, entryToUpdate, validData as any);\n const dataWithComponents = components.assignComponentData(\n contentType,\n componentData,\n validData\n );\n\n const entryData = applyTransforms(contentType, dataWithComponents);\n\n return strapi.db\n .query(uid)\n .update({ ...query, where: { id: entryToUpdate.id }, data: entryData });\n }\n\n async function publishEntry(entry: any, params = {} as any) {\n clearTransformDataRequestCache();\n\n return async.pipe(\n omit('id'),\n assoc('publishedAt', new Date()),\n (draft) => {\n const opts = {\n uid,\n locale: draft.locale,\n status: 'published',\n allowMissingId: true,\n useRequestCache: false,\n };\n return transformData(draft, opts);\n },\n // Create the published entry\n (draft) => createEntry({ ...params, data: draft, locale: draft.locale, status: 'published' })\n )(entry);\n }\n\n async function discardDraftEntry(entry: any, params = {} as any) {\n clearTransformDataRequestCache();\n\n return async.pipe(\n omit('id'),\n assoc('publishedAt', null),\n (entry) => {\n const opts = {\n uid,\n locale: entry.locale,\n status: 'draft',\n allowMissingId: true,\n useRequestCache: false,\n };\n return transformData(entry, opts);\n },\n // Create the draft entry\n (data) => createEntry({ ...params, locale: data.locale, data, status: 'draft' })\n )(entry);\n }\n\n return {\n create: createEntry,\n delete: deleteEntry,\n update: updateEntry,\n publish: publishEntry,\n discardDraft: discardDraftEntry,\n };\n};\n\nexport { createEntriesService };\n"],"names":["isStrictRelationsEnabled","rawStrictRelations","strapi","config","get","undefined","errors","ValidationError","createEntriesService","uid","entityValidator","contentType","createEntry","params","data","restParams","transformParamsDocumentId","query","transformParamsToQuery","pickSelectionParams","Error","documentId","i18nService","plugin","service","isLocalized","isLocalizedContentType","hasDraftAndPublish","options","draftAndPublish","whereClause","locale","publishedStateDescription","publishedAt","$notNull","$null","existingEntry","db","findOne","select","where","errorMsg","ApplicationError","validData","validateEntityCreation","isDraft","strictRelations","componentData","components","dataWithComponents","entryData","applyTransforms","doc","create","deleteEntry","id","componentsToDelete","deletedEntry","delete","loadComponents","updateEntry","entryToUpdate","validateEntityUpdate","update","publishEntry","entry","clearTransformDataRequestCache","async","pipe","omit","assoc","Date","draft","opts","status","allowMissingId","useRequestCache","transformData","discardDraftEntry","publish","discardDraft"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"entries.js","sources":["../../../src/services/document-service/entries.ts"],"sourcesContent":["import type { UID, Modules } from '@strapi/types';\nimport { async, errors } from '@strapi/utils';\nimport { omit } from 'lodash';\n\nimport * as components from './components';\n\nimport { transformParamsDocumentId } from './transform/id-transform';\nimport { transformParamsToQuery } from './transform/query';\nimport { isParamEmpty, pickSelectionParams } from './params';\nimport { applyTransforms } from './attributes';\nimport { clearTransformDataRequestCache, transformData } from './transform/data';\n\n/**\n * Reads and validates the `api.documents.strictRelations` flag.\n * false/undefined => legacy behaviour (relational required constraints not enforced),\n * true => enforce required media and relations on non-draft writes.\n * Mirrors the validation of `api.documents.strictParams` (see repository.ts).\n */\nconst isStrictRelationsEnabled = (): boolean => {\n const rawStrictRelations: unknown = strapi.config.get('api.documents.strictRelations', undefined);\n\n if (\n rawStrictRelations !== undefined &&\n rawStrictRelations !== false &&\n rawStrictRelations !== true\n ) {\n throw new errors.ValidationError(\n `Invalid config.api.documents.strictRelations value: \"${rawStrictRelations}\". Expected boolean (true or false).`\n );\n }\n\n return rawStrictRelations === true;\n};\n\nconst createEntriesService = (\n uid: UID.ContentType,\n entityValidator: Modules.EntityValidator.EntityValidator\n) => {\n const contentType = strapi.contentType(uid);\n\n async function createEntry(params = {} as any) {\n const { data: inputData, ...restParams } = await transformParamsDocumentId(uid, params);\n const query = transformParamsToQuery(uid, pickSelectionParams(restParams) as any); // select / populate\n\n // Validation\n if (!inputData) {\n throw new Error('Create requires data attribute');\n }\n\n const data = isParamEmpty(inputData.documentId) ? omit(inputData, 'documentId') : inputData;\n\n // Check for uniqueness based on documentId and locale (if localized)\n if (data.documentId) {\n const isLocalized = strapi.localization.isLocalizedContentType(contentType);\n const hasDraftAndPublish = contentType.options?.draftAndPublish === true;\n\n const whereClause: Record<string, unknown> = { documentId: data.documentId };\n\n if (isLocalized) {\n whereClause.locale = data.locale;\n }\n\n let publishedStateDescription = '';\n\n if (hasDraftAndPublish) {\n if (data.publishedAt) {\n // Current entry is published, check for existing published entry\n whereClause.publishedAt = { $notNull: true };\n publishedStateDescription = 'published';\n } else {\n // Current entry is a draft, check for existing draft entry\n whereClause.publishedAt = { $null: true };\n publishedStateDescription = 'draft';\n }\n }\n\n const existingEntry = await strapi.db.query(uid).findOne({\n select: ['id'],\n where: whereClause,\n });\n\n if (existingEntry) {\n let errorMsg = `A ${publishedStateDescription} entry with documentId \"${data.documentId}\"`;\n if (isLocalized && data.locale) {\n errorMsg += ` and locale \"${data.locale}\"`;\n }\n errorMsg += ` already exists for UID \"${uid}\". This combination must be unique.`;\n throw new errors.ApplicationError(errorMsg);\n }\n }\n\n const validData = await entityValidator.validateEntityCreation(contentType, data, {\n // Note: publishedAt value will always be set when DP is disabled\n isDraft: !params?.data?.publishedAt,\n locale: params?.locale,\n strictRelations: isStrictRelationsEnabled(),\n });\n\n // Component handling\n const componentData = await components.createComponents(uid, validData);\n const dataWithComponents = components.assignComponentData(\n contentType,\n componentData,\n validData\n );\n\n const entryData = applyTransforms(contentType, dataWithComponents);\n\n const doc = await strapi.db.query(uid).create({ ...query, data: entryData });\n\n return doc;\n }\n\n async function deleteEntry(id: number, query = {} as any) {\n const componentsToDelete = await components.getComponents(uid, { id });\n\n const deletedEntry = await strapi.db.query(uid).delete({ ...query, where: { id } });\n\n await components.deleteComponents(uid, componentsToDelete as any, { loadComponents: false });\n\n return deletedEntry;\n }\n\n async function updateEntry(entryToUpdate: any, params = {} as any) {\n const { data: inputData, ...restParams } = await transformParamsDocumentId(uid, params);\n const query = transformParamsToQuery(uid, pickSelectionParams(restParams) as any); // select / populate\n\n const data = inputData ? omit(inputData, 'documentId') : inputData;\n\n const validData = await entityValidator.validateEntityUpdate(\n contentType,\n data,\n {\n isDraft: !params?.data?.publishedAt, // Always update the draft version\n locale: params?.locale,\n strictRelations: isStrictRelationsEnabled(),\n },\n entryToUpdate\n );\n // Component handling\n const componentData = await components.updateComponents(uid, entryToUpdate, validData as any);\n const dataWithComponents = components.assignComponentData(\n contentType,\n componentData,\n validData\n );\n\n const entryData = applyTransforms(contentType, dataWithComponents);\n\n return strapi.db\n .query(uid)\n .update({ ...query, where: { id: entryToUpdate.id }, data: entryData });\n }\n\n async function publishEntry(entry: any, params = {} as any) {\n clearTransformDataRequestCache();\n const publishedAt = new Date();\n\n return async.pipe(\n (value) => omit(value, 'id'),\n (value) => ({ ...value, publishedAt }),\n (draft) => {\n const opts = {\n uid,\n locale: draft.locale,\n status: 'published',\n allowMissingId: true,\n useRequestCache: false,\n };\n return transformData(draft, opts);\n },\n // Create the published entry\n (draft) => createEntry({ ...params, data: draft, locale: draft.locale, status: 'published' })\n )(entry);\n }\n\n async function discardDraftEntry(entry: any, params = {} as any) {\n clearTransformDataRequestCache();\n\n return async.pipe(\n (value) => omit(value, 'id'),\n (value) => ({ ...value, publishedAt: null }),\n (entry) => {\n const opts = {\n uid,\n locale: entry.locale,\n status: 'draft',\n allowMissingId: true,\n useRequestCache: false,\n };\n return transformData(entry, opts);\n },\n // Create the draft entry\n (data) => createEntry({ ...params, locale: data.locale, data, status: 'draft' })\n )(entry);\n }\n\n return {\n create: createEntry,\n delete: deleteEntry,\n update: updateEntry,\n publish: publishEntry,\n discardDraft: discardDraftEntry,\n };\n};\n\nexport { createEntriesService };\n"],"names":["isStrictRelationsEnabled","rawStrictRelations","strapi","config","get","undefined","errors","ValidationError","createEntriesService","uid","entityValidator","contentType","createEntry","params","data","inputData","restParams","transformParamsDocumentId","query","transformParamsToQuery","pickSelectionParams","Error","isParamEmpty","documentId","omit","isLocalized","localization","isLocalizedContentType","hasDraftAndPublish","options","draftAndPublish","whereClause","locale","publishedStateDescription","publishedAt","$notNull","$null","existingEntry","db","findOne","select","where","errorMsg","ApplicationError","validData","validateEntityCreation","isDraft","strictRelations","componentData","components","dataWithComponents","entryData","applyTransforms","doc","create","deleteEntry","id","componentsToDelete","deletedEntry","delete","loadComponents","updateEntry","entryToUpdate","validateEntityUpdate","update","publishEntry","entry","clearTransformDataRequestCache","Date","async","pipe","value","draft","opts","status","allowMissingId","useRequestCache","transformData","discardDraftEntry","publish","discardDraft"],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { async, errors } from '@strapi/utils';
|
|
2
|
-
import { omit
|
|
2
|
+
import { omit } from 'lodash';
|
|
3
3
|
import { updateComponents, assignComponentData, getComponents, deleteComponents, createComponents } from './components.mjs';
|
|
4
4
|
import { transformParamsDocumentId as curriedTransformParamsDocumentId } from './transform/id-transform.mjs';
|
|
5
5
|
import { transformParamsToQuery } from './transform/query.mjs';
|
|
6
|
-
import { pickSelectionParams } from './params.mjs';
|
|
6
|
+
import { pickSelectionParams, isParamEmpty } from './params.mjs';
|
|
7
7
|
import { applyTransforms } from './attributes/index.mjs';
|
|
8
8
|
import { clearTransformDataRequestCache, transformData } from './transform/data.mjs';
|
|
9
9
|
|
|
@@ -22,16 +22,16 @@ import { clearTransformDataRequestCache, transformData } from './transform/data.
|
|
|
22
22
|
const createEntriesService = (uid, entityValidator)=>{
|
|
23
23
|
const contentType = strapi.contentType(uid);
|
|
24
24
|
async function createEntry(params = {}) {
|
|
25
|
-
const { data, ...restParams } = await curriedTransformParamsDocumentId(uid, params);
|
|
25
|
+
const { data: inputData, ...restParams } = await curriedTransformParamsDocumentId(uid, params);
|
|
26
26
|
const query = transformParamsToQuery(uid, pickSelectionParams(restParams)); // select / populate
|
|
27
27
|
// Validation
|
|
28
|
-
if (!
|
|
28
|
+
if (!inputData) {
|
|
29
29
|
throw new Error('Create requires data attribute');
|
|
30
30
|
}
|
|
31
|
+
const data = isParamEmpty(inputData.documentId) ? omit(inputData, 'documentId') : inputData;
|
|
31
32
|
// Check for uniqueness based on documentId and locale (if localized)
|
|
32
33
|
if (data.documentId) {
|
|
33
|
-
const
|
|
34
|
-
const isLocalized = i18nService?.isLocalizedContentType(contentType) ?? false;
|
|
34
|
+
const isLocalized = strapi.localization.isLocalizedContentType(contentType);
|
|
35
35
|
const hasDraftAndPublish = contentType.options?.draftAndPublish === true;
|
|
36
36
|
const whereClause = {
|
|
37
37
|
documentId: data.documentId
|
|
@@ -102,8 +102,9 @@ const createEntriesService = (uid, entityValidator)=>{
|
|
|
102
102
|
return deletedEntry;
|
|
103
103
|
}
|
|
104
104
|
async function updateEntry(entryToUpdate, params = {}) {
|
|
105
|
-
const { data, ...restParams } = await curriedTransformParamsDocumentId(uid, params);
|
|
105
|
+
const { data: inputData, ...restParams } = await curriedTransformParamsDocumentId(uid, params);
|
|
106
106
|
const query = transformParamsToQuery(uid, pickSelectionParams(restParams)); // select / populate
|
|
107
|
+
const data = inputData ? omit(inputData, 'documentId') : inputData;
|
|
107
108
|
const validData = await entityValidator.validateEntityUpdate(contentType, data, {
|
|
108
109
|
isDraft: !params?.data?.publishedAt,
|
|
109
110
|
locale: params?.locale,
|
|
@@ -123,7 +124,11 @@ const createEntriesService = (uid, entityValidator)=>{
|
|
|
123
124
|
}
|
|
124
125
|
async function publishEntry(entry, params = {}) {
|
|
125
126
|
clearTransformDataRequestCache();
|
|
126
|
-
|
|
127
|
+
const publishedAt = new Date();
|
|
128
|
+
return async.pipe((value)=>omit(value, 'id'), (value)=>({
|
|
129
|
+
...value,
|
|
130
|
+
publishedAt
|
|
131
|
+
}), (draft)=>{
|
|
127
132
|
const opts = {
|
|
128
133
|
uid,
|
|
129
134
|
locale: draft.locale,
|
|
@@ -142,7 +147,10 @@ const createEntriesService = (uid, entityValidator)=>{
|
|
|
142
147
|
}
|
|
143
148
|
async function discardDraftEntry(entry, params = {}) {
|
|
144
149
|
clearTransformDataRequestCache();
|
|
145
|
-
return async.pipe(omit(
|
|
150
|
+
return async.pipe((value)=>omit(value, 'id'), (value)=>({
|
|
151
|
+
...value,
|
|
152
|
+
publishedAt: null
|
|
153
|
+
}), (entry)=>{
|
|
146
154
|
const opts = {
|
|
147
155
|
uid,
|
|
148
156
|
locale: entry.locale,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entries.mjs","sources":["../../../src/services/document-service/entries.ts"],"sourcesContent":["import type { UID, Modules } from '@strapi/types';\nimport { async, errors } from '@strapi/utils';\nimport { assoc, omit } from 'lodash/fp';\n\nimport * as components from './components';\n\nimport { transformParamsDocumentId } from './transform/id-transform';\nimport { transformParamsToQuery } from './transform/query';\nimport { pickSelectionParams } from './params';\nimport { applyTransforms } from './attributes';\nimport { clearTransformDataRequestCache, transformData } from './transform/data';\n\n/**\n * Reads and validates the `api.documents.strictRelations` flag.\n * false/undefined => legacy behaviour (relational required constraints not enforced),\n * true => enforce required media and relations on non-draft writes.\n * Mirrors the validation of `api.documents.strictParams` (see repository.ts).\n */\nconst isStrictRelationsEnabled = (): boolean => {\n const rawStrictRelations: unknown = strapi.config.get('api.documents.strictRelations', undefined);\n\n if (\n rawStrictRelations !== undefined &&\n rawStrictRelations !== false &&\n rawStrictRelations !== true\n ) {\n throw new errors.ValidationError(\n `Invalid config.api.documents.strictRelations value: \"${rawStrictRelations}\". Expected boolean (true or false).`\n );\n }\n\n return rawStrictRelations === true;\n};\n\nconst createEntriesService = (\n uid: UID.ContentType,\n entityValidator: Modules.EntityValidator.EntityValidator\n) => {\n const contentType = strapi.contentType(uid);\n\n async function createEntry(params = {} as any) {\n const { data, ...restParams } = await transformParamsDocumentId(uid, params);\n const query = transformParamsToQuery(uid, pickSelectionParams(restParams) as any); // select / populate\n\n // Validation\n if (!data) {\n throw new Error('Create requires data attribute');\n }\n\n // Check for uniqueness based on documentId and locale (if localized)\n if (data.documentId) {\n const i18nService = strapi.plugin('i18n')?.service('content-types');\n const isLocalized = i18nService?.isLocalizedContentType(contentType) ?? false;\n const hasDraftAndPublish = contentType.options?.draftAndPublish === true;\n\n const whereClause: Record<string, unknown> = { documentId: data.documentId };\n\n if (isLocalized) {\n whereClause.locale = data.locale;\n }\n\n let publishedStateDescription = '';\n\n if (hasDraftAndPublish) {\n if (data.publishedAt) {\n // Current entry is published, check for existing published entry\n whereClause.publishedAt = { $notNull: true };\n publishedStateDescription = 'published';\n } else {\n // Current entry is a draft, check for existing draft entry\n whereClause.publishedAt = { $null: true };\n publishedStateDescription = 'draft';\n }\n }\n\n const existingEntry = await strapi.db.query(uid).findOne({\n select: ['id'],\n where: whereClause,\n });\n\n if (existingEntry) {\n let errorMsg = `A ${publishedStateDescription} entry with documentId \"${data.documentId}\"`;\n if (isLocalized && data.locale) {\n errorMsg += ` and locale \"${data.locale}\"`;\n }\n errorMsg += ` already exists for UID \"${uid}\". This combination must be unique.`;\n throw new errors.ApplicationError(errorMsg);\n }\n }\n\n const validData = await entityValidator.validateEntityCreation(contentType, data, {\n // Note: publishedAt value will always be set when DP is disabled\n isDraft: !params?.data?.publishedAt,\n locale: params?.locale,\n strictRelations: isStrictRelationsEnabled(),\n });\n\n // Component handling\n const componentData = await components.createComponents(uid, validData);\n const dataWithComponents = components.assignComponentData(\n contentType,\n componentData,\n validData\n );\n\n const entryData = applyTransforms(contentType, dataWithComponents);\n\n const doc = await strapi.db.query(uid).create({ ...query, data: entryData });\n\n return doc;\n }\n\n async function deleteEntry(id: number, query = {} as any) {\n const componentsToDelete = await components.getComponents(uid, { id });\n\n const deletedEntry = await strapi.db.query(uid).delete({ ...query, where: { id } });\n\n await components.deleteComponents(uid, componentsToDelete as any, { loadComponents: false });\n\n return deletedEntry;\n }\n\n async function updateEntry(entryToUpdate: any, params = {} as any) {\n const { data, ...restParams } = await transformParamsDocumentId(uid, params);\n const query = transformParamsToQuery(uid, pickSelectionParams(restParams) as any); // select / populate\n\n const validData = await entityValidator.validateEntityUpdate(\n contentType,\n data,\n {\n isDraft: !params?.data?.publishedAt, // Always update the draft version\n locale: params?.locale,\n strictRelations: isStrictRelationsEnabled(),\n },\n entryToUpdate\n );\n // Component handling\n const componentData = await components.updateComponents(uid, entryToUpdate, validData as any);\n const dataWithComponents = components.assignComponentData(\n contentType,\n componentData,\n validData\n );\n\n const entryData = applyTransforms(contentType, dataWithComponents);\n\n return strapi.db\n .query(uid)\n .update({ ...query, where: { id: entryToUpdate.id }, data: entryData });\n }\n\n async function publishEntry(entry: any, params = {} as any) {\n clearTransformDataRequestCache();\n\n return async.pipe(\n omit('id'),\n assoc('publishedAt', new Date()),\n (draft) => {\n const opts = {\n uid,\n locale: draft.locale,\n status: 'published',\n allowMissingId: true,\n useRequestCache: false,\n };\n return transformData(draft, opts);\n },\n // Create the published entry\n (draft) => createEntry({ ...params, data: draft, locale: draft.locale, status: 'published' })\n )(entry);\n }\n\n async function discardDraftEntry(entry: any, params = {} as any) {\n clearTransformDataRequestCache();\n\n return async.pipe(\n omit('id'),\n assoc('publishedAt', null),\n (entry) => {\n const opts = {\n uid,\n locale: entry.locale,\n status: 'draft',\n allowMissingId: true,\n useRequestCache: false,\n };\n return transformData(entry, opts);\n },\n // Create the draft entry\n (data) => createEntry({ ...params, locale: data.locale, data, status: 'draft' })\n )(entry);\n }\n\n return {\n create: createEntry,\n delete: deleteEntry,\n update: updateEntry,\n publish: publishEntry,\n discardDraft: discardDraftEntry,\n };\n};\n\nexport { createEntriesService };\n"],"names":["isStrictRelationsEnabled","rawStrictRelations","strapi","config","get","undefined","errors","ValidationError","createEntriesService","uid","entityValidator","contentType","createEntry","params","data","restParams","transformParamsDocumentId","query","transformParamsToQuery","pickSelectionParams","Error","documentId","i18nService","plugin","service","isLocalized","isLocalizedContentType","hasDraftAndPublish","options","draftAndPublish","whereClause","locale","publishedStateDescription","publishedAt","$notNull","$null","existingEntry","db","findOne","select","where","errorMsg","ApplicationError","validData","validateEntityCreation","isDraft","strictRelations","componentData","components","dataWithComponents","entryData","applyTransforms","doc","create","deleteEntry","id","componentsToDelete","deletedEntry","delete","loadComponents","updateEntry","entryToUpdate","validateEntityUpdate","update","publishEntry","entry","clearTransformDataRequestCache","async","pipe","omit","assoc","Date","draft","opts","status","allowMissingId","useRequestCache","transformData","discardDraftEntry","publish","discardDraft"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"entries.mjs","sources":["../../../src/services/document-service/entries.ts"],"sourcesContent":["import type { UID, Modules } from '@strapi/types';\nimport { async, errors } from '@strapi/utils';\nimport { omit } from 'lodash';\n\nimport * as components from './components';\n\nimport { transformParamsDocumentId } from './transform/id-transform';\nimport { transformParamsToQuery } from './transform/query';\nimport { isParamEmpty, pickSelectionParams } from './params';\nimport { applyTransforms } from './attributes';\nimport { clearTransformDataRequestCache, transformData } from './transform/data';\n\n/**\n * Reads and validates the `api.documents.strictRelations` flag.\n * false/undefined => legacy behaviour (relational required constraints not enforced),\n * true => enforce required media and relations on non-draft writes.\n * Mirrors the validation of `api.documents.strictParams` (see repository.ts).\n */\nconst isStrictRelationsEnabled = (): boolean => {\n const rawStrictRelations: unknown = strapi.config.get('api.documents.strictRelations', undefined);\n\n if (\n rawStrictRelations !== undefined &&\n rawStrictRelations !== false &&\n rawStrictRelations !== true\n ) {\n throw new errors.ValidationError(\n `Invalid config.api.documents.strictRelations value: \"${rawStrictRelations}\". Expected boolean (true or false).`\n );\n }\n\n return rawStrictRelations === true;\n};\n\nconst createEntriesService = (\n uid: UID.ContentType,\n entityValidator: Modules.EntityValidator.EntityValidator\n) => {\n const contentType = strapi.contentType(uid);\n\n async function createEntry(params = {} as any) {\n const { data: inputData, ...restParams } = await transformParamsDocumentId(uid, params);\n const query = transformParamsToQuery(uid, pickSelectionParams(restParams) as any); // select / populate\n\n // Validation\n if (!inputData) {\n throw new Error('Create requires data attribute');\n }\n\n const data = isParamEmpty(inputData.documentId) ? omit(inputData, 'documentId') : inputData;\n\n // Check for uniqueness based on documentId and locale (if localized)\n if (data.documentId) {\n const isLocalized = strapi.localization.isLocalizedContentType(contentType);\n const hasDraftAndPublish = contentType.options?.draftAndPublish === true;\n\n const whereClause: Record<string, unknown> = { documentId: data.documentId };\n\n if (isLocalized) {\n whereClause.locale = data.locale;\n }\n\n let publishedStateDescription = '';\n\n if (hasDraftAndPublish) {\n if (data.publishedAt) {\n // Current entry is published, check for existing published entry\n whereClause.publishedAt = { $notNull: true };\n publishedStateDescription = 'published';\n } else {\n // Current entry is a draft, check for existing draft entry\n whereClause.publishedAt = { $null: true };\n publishedStateDescription = 'draft';\n }\n }\n\n const existingEntry = await strapi.db.query(uid).findOne({\n select: ['id'],\n where: whereClause,\n });\n\n if (existingEntry) {\n let errorMsg = `A ${publishedStateDescription} entry with documentId \"${data.documentId}\"`;\n if (isLocalized && data.locale) {\n errorMsg += ` and locale \"${data.locale}\"`;\n }\n errorMsg += ` already exists for UID \"${uid}\". This combination must be unique.`;\n throw new errors.ApplicationError(errorMsg);\n }\n }\n\n const validData = await entityValidator.validateEntityCreation(contentType, data, {\n // Note: publishedAt value will always be set when DP is disabled\n isDraft: !params?.data?.publishedAt,\n locale: params?.locale,\n strictRelations: isStrictRelationsEnabled(),\n });\n\n // Component handling\n const componentData = await components.createComponents(uid, validData);\n const dataWithComponents = components.assignComponentData(\n contentType,\n componentData,\n validData\n );\n\n const entryData = applyTransforms(contentType, dataWithComponents);\n\n const doc = await strapi.db.query(uid).create({ ...query, data: entryData });\n\n return doc;\n }\n\n async function deleteEntry(id: number, query = {} as any) {\n const componentsToDelete = await components.getComponents(uid, { id });\n\n const deletedEntry = await strapi.db.query(uid).delete({ ...query, where: { id } });\n\n await components.deleteComponents(uid, componentsToDelete as any, { loadComponents: false });\n\n return deletedEntry;\n }\n\n async function updateEntry(entryToUpdate: any, params = {} as any) {\n const { data: inputData, ...restParams } = await transformParamsDocumentId(uid, params);\n const query = transformParamsToQuery(uid, pickSelectionParams(restParams) as any); // select / populate\n\n const data = inputData ? omit(inputData, 'documentId') : inputData;\n\n const validData = await entityValidator.validateEntityUpdate(\n contentType,\n data,\n {\n isDraft: !params?.data?.publishedAt, // Always update the draft version\n locale: params?.locale,\n strictRelations: isStrictRelationsEnabled(),\n },\n entryToUpdate\n );\n // Component handling\n const componentData = await components.updateComponents(uid, entryToUpdate, validData as any);\n const dataWithComponents = components.assignComponentData(\n contentType,\n componentData,\n validData\n );\n\n const entryData = applyTransforms(contentType, dataWithComponents);\n\n return strapi.db\n .query(uid)\n .update({ ...query, where: { id: entryToUpdate.id }, data: entryData });\n }\n\n async function publishEntry(entry: any, params = {} as any) {\n clearTransformDataRequestCache();\n const publishedAt = new Date();\n\n return async.pipe(\n (value) => omit(value, 'id'),\n (value) => ({ ...value, publishedAt }),\n (draft) => {\n const opts = {\n uid,\n locale: draft.locale,\n status: 'published',\n allowMissingId: true,\n useRequestCache: false,\n };\n return transformData(draft, opts);\n },\n // Create the published entry\n (draft) => createEntry({ ...params, data: draft, locale: draft.locale, status: 'published' })\n )(entry);\n }\n\n async function discardDraftEntry(entry: any, params = {} as any) {\n clearTransformDataRequestCache();\n\n return async.pipe(\n (value) => omit(value, 'id'),\n (value) => ({ ...value, publishedAt: null }),\n (entry) => {\n const opts = {\n uid,\n locale: entry.locale,\n status: 'draft',\n allowMissingId: true,\n useRequestCache: false,\n };\n return transformData(entry, opts);\n },\n // Create the draft entry\n (data) => createEntry({ ...params, locale: data.locale, data, status: 'draft' })\n )(entry);\n }\n\n return {\n create: createEntry,\n delete: deleteEntry,\n update: updateEntry,\n publish: publishEntry,\n discardDraft: discardDraftEntry,\n };\n};\n\nexport { createEntriesService };\n"],"names":["isStrictRelationsEnabled","rawStrictRelations","strapi","config","get","undefined","errors","ValidationError","createEntriesService","uid","entityValidator","contentType","createEntry","params","data","inputData","restParams","transformParamsDocumentId","query","transformParamsToQuery","pickSelectionParams","Error","isParamEmpty","documentId","omit","isLocalized","localization","isLocalizedContentType","hasDraftAndPublish","options","draftAndPublish","whereClause","locale","publishedStateDescription","publishedAt","$notNull","$null","existingEntry","db","findOne","select","where","errorMsg","ApplicationError","validData","validateEntityCreation","isDraft","strictRelations","componentData","components","dataWithComponents","entryData","applyTransforms","doc","create","deleteEntry","id","componentsToDelete","deletedEntry","delete","loadComponents","updateEntry","entryToUpdate","validateEntityUpdate","update","publishEntry","entry","clearTransformDataRequestCache","Date","async","pipe","value","draft","opts","status","allowMissingId","useRequestCache","transformData","discardDraftEntry","publish","discardDraft"],"mappings":"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"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var strapiUtils = require('@strapi/utils');
|
|
4
|
-
var fp = require('lodash/fp');
|
|
5
4
|
|
|
6
5
|
const addFirstPublishedAtToDraft = async (draft, update, contentType)=>{
|
|
7
6
|
if (!strapiUtils.contentTypes.hasFirstPublishedAtField(contentType)) {
|
|
@@ -35,10 +34,13 @@ const addFirstPublishedAtToDraft = async (draft, update, contentType)=>{
|
|
|
35
34
|
};
|
|
36
35
|
const filterDataFirstPublishedAt = (params)=>{
|
|
37
36
|
if (params?.data?.firstPublishedAt) {
|
|
38
|
-
return
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
37
|
+
return {
|
|
38
|
+
...params,
|
|
39
|
+
data: {
|
|
40
|
+
...params.data,
|
|
41
|
+
firstPublishedAt: null
|
|
42
|
+
}
|
|
43
|
+
};
|
|
42
44
|
}
|
|
43
45
|
return params;
|
|
44
46
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"first-published-at.js","sources":["../../../src/services/document-service/first-published-at.ts"],"sourcesContent":["import { contentTypes } from '@strapi/utils';\nimport
|
|
1
|
+
{"version":3,"file":"first-published-at.js","sources":["../../../src/services/document-service/first-published-at.ts"],"sourcesContent":["import { contentTypes } from '@strapi/utils';\n\nimport type { Modules, Schema } from '@strapi/types';\n\ntype EntriesUpdate = (entryToUpdate: any, param?: any) => Promise<any>;\ntype ParamsTransform = (params: Modules.Documents.Params.All) => Modules.Documents.Params.All;\n\nconst addFirstPublishedAtToDraft = async (\n draft: any,\n update: EntriesUpdate,\n contentType: Schema.ContentType\n) => {\n if (!contentTypes.hasFirstPublishedAtField(contentType)) {\n return draft;\n }\n\n if (draft.firstPublishedAt) {\n return draft;\n }\n\n const now = new Date();\n\n // Persist to the draft DB row, but discard the return value: entries.update\n // returns an unpopulated findOne (no populate is passed through), which would\n // strip media, components, dynamic zones and relations from the draft that\n // downstream publishEntry relies on. Instead we carry forward the already\n // populated draft from repository.publish's findMany with the field merged in.\n const updatedDraft = await update(draft, {\n data: { firstPublishedAt: now },\n });\n\n return {\n ...draft,\n firstPublishedAt: now,\n // Propagate the server-side updatedAt so the entry's updatedAt is not\n // earlier than firstPublishedAt. Without this the entry will appear\n // \"modified\" after its first publish (updatedAt < firstPublishedAt),\n // even though the only change was stamping firstPublishedAt.\n ...(updatedDraft.updatedAt && { updatedAt: updatedDraft.updatedAt }),\n };\n};\n\nconst filterDataFirstPublishedAt: ParamsTransform = (params) => {\n if (params?.data?.firstPublishedAt) {\n return { ...params, data: { ...params.data, firstPublishedAt: null } };\n }\n\n return params;\n};\n\nexport { addFirstPublishedAtToDraft, filterDataFirstPublishedAt };\n"],"names":["addFirstPublishedAtToDraft","draft","update","contentType","contentTypes","hasFirstPublishedAtField","firstPublishedAt","now","Date","updatedDraft","data","updatedAt","filterDataFirstPublishedAt","params"],"mappings":";;;;AAOA,MAAMA,0BAAAA,GAA6B,OACjCC,KAAAA,EACAC,MAAAA,EACAC,WAAAA,GAAAA;AAEA,IAAA,IAAI,CAACC,wBAAAA,CAAaC,wBAAwB,CAACF,WAAAA,CAAAA,EAAc;QACvD,OAAOF,KAAAA;AACT,IAAA;IAEA,IAAIA,KAAAA,CAAMK,gBAAgB,EAAE;QAC1B,OAAOL,KAAAA;AACT,IAAA;AAEA,IAAA,MAAMM,MAAM,IAAIC,IAAAA,EAAAA;;;;;;IAOhB,MAAMC,YAAAA,GAAe,MAAMP,MAAAA,CAAOD,KAAAA,EAAO;QACvCS,IAAAA,EAAM;YAAEJ,gBAAAA,EAAkBC;AAAI;AAChC,KAAA,CAAA;IAEA,OAAO;AACL,QAAA,GAAGN,KAAK;QACRK,gBAAAA,EAAkBC,GAAAA;;;;;QAKlB,GAAIE,YAAAA,CAAaE,SAAS,IAAI;AAAEA,YAAAA,SAAAA,EAAWF,aAAaE;;AAC1D,KAAA;AACF;AAEA,MAAMC,6BAA8C,CAACC,MAAAA,GAAAA;IACnD,IAAIA,MAAAA,EAAQH,MAAMJ,gBAAAA,EAAkB;QAClC,OAAO;AAAE,YAAA,GAAGO,MAAM;YAAEH,IAAAA,EAAM;AAAE,gBAAA,GAAGG,OAAOH,IAAI;gBAAEJ,gBAAAA,EAAkB;AAAK;AAAE,SAAA;AACvE,IAAA;IAEA,OAAOO,MAAAA;AACT;;;;;"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { contentTypes } from '@strapi/utils';
|
|
2
|
-
import { assoc } from 'lodash/fp';
|
|
3
2
|
|
|
4
3
|
const addFirstPublishedAtToDraft = async (draft, update, contentType)=>{
|
|
5
4
|
if (!contentTypes.hasFirstPublishedAtField(contentType)) {
|
|
@@ -33,10 +32,13 @@ const addFirstPublishedAtToDraft = async (draft, update, contentType)=>{
|
|
|
33
32
|
};
|
|
34
33
|
const filterDataFirstPublishedAt = (params)=>{
|
|
35
34
|
if (params?.data?.firstPublishedAt) {
|
|
36
|
-
return
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
35
|
+
return {
|
|
36
|
+
...params,
|
|
37
|
+
data: {
|
|
38
|
+
...params.data,
|
|
39
|
+
firstPublishedAt: null
|
|
40
|
+
}
|
|
41
|
+
};
|
|
40
42
|
}
|
|
41
43
|
return params;
|
|
42
44
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"first-published-at.mjs","sources":["../../../src/services/document-service/first-published-at.ts"],"sourcesContent":["import { contentTypes } from '@strapi/utils';\nimport
|
|
1
|
+
{"version":3,"file":"first-published-at.mjs","sources":["../../../src/services/document-service/first-published-at.ts"],"sourcesContent":["import { contentTypes } from '@strapi/utils';\n\nimport type { Modules, Schema } from '@strapi/types';\n\ntype EntriesUpdate = (entryToUpdate: any, param?: any) => Promise<any>;\ntype ParamsTransform = (params: Modules.Documents.Params.All) => Modules.Documents.Params.All;\n\nconst addFirstPublishedAtToDraft = async (\n draft: any,\n update: EntriesUpdate,\n contentType: Schema.ContentType\n) => {\n if (!contentTypes.hasFirstPublishedAtField(contentType)) {\n return draft;\n }\n\n if (draft.firstPublishedAt) {\n return draft;\n }\n\n const now = new Date();\n\n // Persist to the draft DB row, but discard the return value: entries.update\n // returns an unpopulated findOne (no populate is passed through), which would\n // strip media, components, dynamic zones and relations from the draft that\n // downstream publishEntry relies on. Instead we carry forward the already\n // populated draft from repository.publish's findMany with the field merged in.\n const updatedDraft = await update(draft, {\n data: { firstPublishedAt: now },\n });\n\n return {\n ...draft,\n firstPublishedAt: now,\n // Propagate the server-side updatedAt so the entry's updatedAt is not\n // earlier than firstPublishedAt. Without this the entry will appear\n // \"modified\" after its first publish (updatedAt < firstPublishedAt),\n // even though the only change was stamping firstPublishedAt.\n ...(updatedDraft.updatedAt && { updatedAt: updatedDraft.updatedAt }),\n };\n};\n\nconst filterDataFirstPublishedAt: ParamsTransform = (params) => {\n if (params?.data?.firstPublishedAt) {\n return { ...params, data: { ...params.data, firstPublishedAt: null } };\n }\n\n return params;\n};\n\nexport { addFirstPublishedAtToDraft, filterDataFirstPublishedAt };\n"],"names":["addFirstPublishedAtToDraft","draft","update","contentType","contentTypes","hasFirstPublishedAtField","firstPublishedAt","now","Date","updatedDraft","data","updatedAt","filterDataFirstPublishedAt","params"],"mappings":";;AAOA,MAAMA,0BAAAA,GAA6B,OACjCC,KAAAA,EACAC,MAAAA,EACAC,WAAAA,GAAAA;AAEA,IAAA,IAAI,CAACC,YAAAA,CAAaC,wBAAwB,CAACF,WAAAA,CAAAA,EAAc;QACvD,OAAOF,KAAAA;AACT,IAAA;IAEA,IAAIA,KAAAA,CAAMK,gBAAgB,EAAE;QAC1B,OAAOL,KAAAA;AACT,IAAA;AAEA,IAAA,MAAMM,MAAM,IAAIC,IAAAA,EAAAA;;;;;;IAOhB,MAAMC,YAAAA,GAAe,MAAMP,MAAAA,CAAOD,KAAAA,EAAO;QACvCS,IAAAA,EAAM;YAAEJ,gBAAAA,EAAkBC;AAAI;AAChC,KAAA,CAAA;IAEA,OAAO;AACL,QAAA,GAAGN,KAAK;QACRK,gBAAAA,EAAkBC,GAAAA;;;;;QAKlB,GAAIE,YAAAA,CAAaE,SAAS,IAAI;AAAEA,YAAAA,SAAAA,EAAWF,aAAaE;;AAC1D,KAAA;AACF;AAEA,MAAMC,6BAA8C,CAACC,MAAAA,GAAAA;IACnD,IAAIA,MAAAA,EAAQH,MAAMJ,gBAAAA,EAAkB;QAClC,OAAO;AAAE,YAAA,GAAGO,MAAM;YAAEH,IAAAA,EAAM;AAAE,gBAAA,GAAGG,OAAOH,IAAI;gBAAEJ,gBAAAA,EAAkB;AAAK;AAAE,SAAA;AACvE,IAAA;IAEA,OAAOO,MAAAA;AACT;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"internationalization.d.ts","sourceRoot":"","sources":["../../../src/services/document-service/internationalization.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAU,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"internationalization.d.ts","sourceRoot":"","sources":["../../../src/services/document-service/internationalization.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAU,MAAM,eAAe,CAAC;AAsJ7D;;;GAGG;AACH,QAAA,MAAM,sBAAsB,GAC1B,aAAa,MAAM,CAAC,gBAAgB,GAAG,MAAM,CAAC,oBAAoB,EAClE,YAAY,MAAM,EAClB,cAAc,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAChC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CA0B7B,CAAC;AAEF,QAAA,MAAM,kBAAkB,+JAAuB,CAAC;AAChD,QAAA,MAAM,mBAAmB,sJAAwB,CAAC;AAClD,QAAA,MAAM,wBAAwB,sJAA6B,CAAC;AAC5D,QAAA,MAAM,iBAAiB,sJAAsB,CAAC;AAE9C,OAAO,EACL,kBAAkB,IAAI,aAAa,EACnC,mBAAmB,IAAI,cAAc,EACrC,iBAAiB,IAAI,YAAY,EACjC,wBAAwB,IAAI,mBAAmB,EAC/C,sBAAsB,GACvB,CAAC"}
|
|
@@ -1,24 +1,26 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var strapiUtils = require('@strapi/utils');
|
|
4
|
-
var
|
|
4
|
+
var _ = require('lodash');
|
|
5
5
|
|
|
6
6
|
const getDefaultLocale = async ()=>{
|
|
7
|
-
return strapi.
|
|
7
|
+
return strapi.localization.getDefaultLocale();
|
|
8
8
|
};
|
|
9
9
|
const defaultLocale = async (contentType, params)=>{
|
|
10
|
-
if (!strapi.
|
|
10
|
+
if (!strapi.localization.isLocalizedContentType(contentType)) {
|
|
11
11
|
return params;
|
|
12
12
|
}
|
|
13
13
|
if (!params.locale) {
|
|
14
|
-
return
|
|
14
|
+
return _.assign({}, params, {
|
|
15
|
+
locale: await getDefaultLocale()
|
|
16
|
+
});
|
|
15
17
|
}
|
|
16
18
|
return params;
|
|
17
19
|
};
|
|
18
20
|
/**
|
|
19
21
|
* Add locale lookup query to the params
|
|
20
22
|
*/ const localeToLookup = (contentType, params)=>{
|
|
21
|
-
if (!params.locale || !strapi.
|
|
23
|
+
if (!params.locale || !strapi.localization.isLocalizedContentType(contentType)) {
|
|
22
24
|
return params;
|
|
23
25
|
}
|
|
24
26
|
if (typeof params.locale !== 'string') {
|
|
@@ -27,41 +29,50 @@ const defaultLocale = async (contentType, params)=>{
|
|
|
27
29
|
// to return all locales.
|
|
28
30
|
throw new strapiUtils.errors.ValidationError(`Invalid locale param ${String(params.locale)} provided. Document locales must be strings.`);
|
|
29
31
|
}
|
|
30
|
-
return
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
return {
|
|
33
|
+
...params,
|
|
34
|
+
lookup: {
|
|
35
|
+
...params.lookup,
|
|
36
|
+
locale: params.locale
|
|
37
|
+
}
|
|
38
|
+
};
|
|
34
39
|
};
|
|
35
40
|
/**
|
|
36
41
|
* Add locale lookup query to the params
|
|
37
42
|
*/ const multiLocaleToLookup = (contentType, params)=>{
|
|
38
|
-
if (!strapi.
|
|
43
|
+
if (!strapi.localization.isLocalizedContentType(contentType)) {
|
|
39
44
|
return params;
|
|
40
45
|
}
|
|
41
46
|
if (params.locale) {
|
|
42
47
|
if (params.locale === '*') {
|
|
43
48
|
return params;
|
|
44
49
|
}
|
|
45
|
-
return
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
50
|
+
return {
|
|
51
|
+
...params,
|
|
52
|
+
lookup: {
|
|
53
|
+
...params.lookup,
|
|
54
|
+
locale: params.locale
|
|
55
|
+
}
|
|
56
|
+
};
|
|
49
57
|
}
|
|
50
58
|
return params;
|
|
51
59
|
};
|
|
52
60
|
/**
|
|
53
61
|
* Translate locale status parameter into the data that will be saved
|
|
54
62
|
*/ const localeToData = (contentType, params)=>{
|
|
55
|
-
if (!strapi.
|
|
63
|
+
if (!strapi.localization.isLocalizedContentType(contentType)) {
|
|
56
64
|
return params;
|
|
57
65
|
}
|
|
58
66
|
if (params.locale) {
|
|
59
67
|
const isValidLocale = typeof params.locale === 'string' && params.locale !== '*';
|
|
60
68
|
if (isValidLocale) {
|
|
61
|
-
return
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
69
|
+
return {
|
|
70
|
+
...params,
|
|
71
|
+
data: {
|
|
72
|
+
...params.data,
|
|
73
|
+
locale: params.locale
|
|
74
|
+
}
|
|
75
|
+
};
|
|
65
76
|
}
|
|
66
77
|
throw new strapiUtils.errors.ValidationError(`Invalid locale param ${params.locale} provided. Document locales must be strings.`);
|
|
67
78
|
}
|
|
@@ -110,13 +121,11 @@ const defaultLocale = async (contentType, params)=>{
|
|
|
110
121
|
* Copy non-localized fields from an existing entry to a new entry being created
|
|
111
122
|
* for a different locale of the same document. Returns a new object with the merged data.
|
|
112
123
|
*/ const copyNonLocalizedFields = async (contentType, documentId, dataToCreate)=>{
|
|
113
|
-
|
|
114
|
-
const i18nService = strapi.plugin('i18n')?.service('content-types');
|
|
115
|
-
if (!i18nService?.isLocalizedContentType(contentType)) {
|
|
124
|
+
if (!strapi.localization.isLocalizedContentType(contentType)) {
|
|
116
125
|
return dataToCreate;
|
|
117
126
|
}
|
|
118
127
|
// Find an existing entry for the same document to copy unlocalized fields from
|
|
119
|
-
const attributesToPopulate =
|
|
128
|
+
const attributesToPopulate = strapi.localization.getNestedPopulateOfNonLocalizedAttributes(contentType.uid);
|
|
120
129
|
const existingEntry = await strapi.db.query(contentType.uid).findOne({
|
|
121
130
|
where: {
|
|
122
131
|
documentId
|
|
@@ -132,17 +141,17 @@ const defaultLocale = async (contentType, params)=>{
|
|
|
132
141
|
const mergedData = {
|
|
133
142
|
...dataToCreate
|
|
134
143
|
};
|
|
135
|
-
|
|
144
|
+
strapi.localization.fillNonLocalizedAttributes(mergedData, existingEntry, {
|
|
136
145
|
model: contentType.uid
|
|
137
146
|
});
|
|
138
147
|
return normalizeMediaIds(contentType, mergedData);
|
|
139
148
|
}
|
|
140
149
|
return dataToCreate;
|
|
141
150
|
};
|
|
142
|
-
const defaultLocaleCurry =
|
|
143
|
-
const localeToLookupCurry =
|
|
144
|
-
const multiLocaleToLookupCurry =
|
|
145
|
-
const localeToDataCurry =
|
|
151
|
+
const defaultLocaleCurry = _.curry(defaultLocale);
|
|
152
|
+
const localeToLookupCurry = _.curry(localeToLookup);
|
|
153
|
+
const multiLocaleToLookupCurry = _.curry(multiLocaleToLookup);
|
|
154
|
+
const localeToDataCurry = _.curry(localeToData);
|
|
146
155
|
|
|
147
156
|
exports.copyNonLocalizedFields = copyNonLocalizedFields;
|
|
148
157
|
exports.defaultLocale = defaultLocaleCurry;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"internationalization.js","sources":["../../../src/services/document-service/internationalization.ts"],"sourcesContent":["import type { Struct, Modules, Schema } from '@strapi/types';\nimport { errors } from '@strapi/utils';\nimport { curry, assoc } from 'lodash/fp';\n\ntype Transform = (\n contentType: Struct.SingleTypeSchema | Struct.CollectionTypeSchema,\n params: Modules.Documents.Params.All\n) => Modules.Documents.Params.All;\n\ntype AsyncTransform = (\n contentType: Struct.SingleTypeSchema | Struct.CollectionTypeSchema,\n params: Modules.Documents.Params.All\n) => Promise<Modules.Documents.Params.All>;\n\nconst getDefaultLocale = async (): Promise<string> => {\n return strapi.plugin('i18n').service('locales').getDefaultLocale();\n};\n\nconst defaultLocale: AsyncTransform = async (contentType, params) => {\n if (!strapi.plugin('i18n').service('content-types').isLocalizedContentType(contentType)) {\n return params;\n }\n\n if (!params.locale) {\n return assoc('locale', await getDefaultLocale(), params);\n }\n\n return params;\n};\n\n/**\n * Add locale lookup query to the params\n */\nconst localeToLookup: Transform = (contentType, params) => {\n if (\n !params.locale ||\n !strapi.plugin('i18n').service('content-types').isLocalizedContentType(contentType)\n ) {\n return params;\n }\n\n if (typeof params.locale !== 'string') {\n // localeToLookup accepts locales of '*'. This is because the document\n // service functions that use this transform work with the '*' locale\n // to return all locales.\n throw new errors.ValidationError(\n `Invalid locale param ${String(params.locale)} provided. Document locales must be strings.`\n );\n }\n\n return assoc(['lookup', 'locale'], params.locale, params);\n};\n\n/**\n * Add locale lookup query to the params\n */\nconst multiLocaleToLookup: Transform = (contentType, params) => {\n if (!strapi.plugin('i18n').service('content-types').isLocalizedContentType(contentType)) {\n return params;\n }\n\n if (params.locale) {\n if (params.locale === '*') {\n return params;\n }\n\n return assoc(['lookup', 'locale'], params.locale, params);\n }\n\n return params;\n};\n\n/**\n * Translate locale status parameter into the data that will be saved\n */\nconst localeToData: Transform = (contentType, params) => {\n if (!strapi.plugin('i18n').service('content-types').isLocalizedContentType(contentType)) {\n return params;\n }\n\n if (params.locale) {\n const isValidLocale = typeof params.locale === 'string' && params.locale !== '*';\n if (isValidLocale) {\n return assoc(['data', 'locale'], params.locale, params);\n }\n\n throw new errors.ValidationError(\n `Invalid locale param ${params.locale} provided. Document locales must be strings.`\n );\n }\n\n return params;\n};\n\n/**\n * Mutates the provided data object in place and returns the same reference\n * with populated media values replaced by their upload file IDs.\n */\nconst normalizeMediaIds = (\n schema: Schema.ContentType | Schema.Component,\n data: Record<string, any>\n): Record<string, any> => {\n if (!schema?.attributes || !data || typeof data !== 'object') {\n return data;\n }\n\n Object.entries(schema.attributes).forEach(([attributeName, attribute]) => {\n const value = data[attributeName];\n\n if (value == null) {\n return;\n }\n\n if (attribute.type === 'media') {\n if (attribute.multiple) {\n data[attributeName] = Array.isArray(value)\n ? value.map((file: unknown) =>\n file && typeof file === 'object' && 'id' in file ? file.id : file\n )\n : value;\n } else {\n data[attributeName] =\n value && typeof value === 'object' && 'id' in value ? value.id : value;\n }\n\n return;\n }\n\n if (attribute.type === 'component') {\n const componentSchema = strapi.getModel(attribute.component);\n\n if (attribute.repeatable && Array.isArray(value)) {\n value.forEach((componentValue: Record<string, any>) =>\n normalizeMediaIds(componentSchema, componentValue)\n );\n } else {\n normalizeMediaIds(componentSchema, value);\n }\n\n return;\n }\n\n if (attribute.type === 'dynamiczone' && Array.isArray(value)) {\n value.forEach((componentValue: Record<string, any>) => {\n if (componentValue?.__component) {\n normalizeMediaIds(strapi.getModel(componentValue.__component), componentValue);\n }\n });\n }\n });\n\n return data;\n};\n/**\n * Copy non-localized fields from an existing entry to a new entry being created\n * for a different locale of the same document. Returns a new object with the merged data.\n */\nconst copyNonLocalizedFields = async (\n contentType: Struct.SingleTypeSchema | Struct.CollectionTypeSchema,\n documentId: string,\n dataToCreate: Record<string, any>\n): Promise<Record<string, any>> => {\n // Check if this is a localized content type and if i18n plugin is available\n const i18nService = strapi.plugin('i18n')?.service('content-types');\n if (!i18nService?.isLocalizedContentType(contentType)) {\n return dataToCreate;\n }\n\n // Find an existing entry for the same document to copy unlocalized fields from\n const attributesToPopulate = i18nService.getNestedPopulateOfNonLocalizedAttributes(\n contentType.uid\n );\n const existingEntry = await strapi.db.query(contentType.uid).findOne({\n where: { documentId },\n // Prefer published entry, but fall back to any entry\n orderBy: { publishedAt: 'desc' },\n populate: attributesToPopulate,\n });\n\n // If an entry exists in another locale, copy its non-localized fields\n if (existingEntry) {\n const mergedData = { ...dataToCreate };\n i18nService.fillNonLocalizedAttributes(mergedData, existingEntry, {\n model: contentType.uid,\n });\n return normalizeMediaIds(contentType, mergedData);\n }\n\n return dataToCreate;\n};\n\nconst defaultLocaleCurry = curry(defaultLocale);\nconst localeToLookupCurry = curry(localeToLookup);\nconst multiLocaleToLookupCurry = curry(multiLocaleToLookup);\nconst localeToDataCurry = curry(localeToData);\n\nexport {\n defaultLocaleCurry as defaultLocale,\n localeToLookupCurry as localeToLookup,\n localeToDataCurry as localeToData,\n multiLocaleToLookupCurry as multiLocaleToLookup,\n copyNonLocalizedFields,\n};\n"],"names":["getDefaultLocale","strapi","plugin","service","defaultLocale","contentType","params","isLocalizedContentType","locale","assoc","localeToLookup","errors","ValidationError","String","multiLocaleToLookup","localeToData","isValidLocale","normalizeMediaIds","schema","data","attributes","Object","entries","forEach","attributeName","attribute","value","type","multiple","Array","isArray","map","file","id","componentSchema","getModel","component","repeatable","componentValue","__component","copyNonLocalizedFields","documentId","dataToCreate","i18nService","attributesToPopulate","getNestedPopulateOfNonLocalizedAttributes","uid","existingEntry","db","query","findOne","where","orderBy","publishedAt","populate","mergedData","fillNonLocalizedAttributes","model","defaultLocaleCurry","curry","localeToLookupCurry","multiLocaleToLookupCurry","localeToDataCurry"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"internationalization.js","sources":["../../../src/services/document-service/internationalization.ts"],"sourcesContent":["import type { Struct, Modules, Schema } from '@strapi/types';\nimport { errors } from '@strapi/utils';\nimport { assign, curry } from 'lodash';\n\ntype Transform = (\n contentType: Struct.SingleTypeSchema | Struct.CollectionTypeSchema,\n params: Modules.Documents.Params.All\n) => Modules.Documents.Params.All;\n\ntype AsyncTransform = (\n contentType: Struct.SingleTypeSchema | Struct.CollectionTypeSchema,\n params: Modules.Documents.Params.All\n) => Promise<Modules.Documents.Params.All>;\n\nconst getDefaultLocale = async (): Promise<string | null> => {\n return strapi.localization.getDefaultLocale();\n};\n\nconst defaultLocale: AsyncTransform = async (contentType, params) => {\n if (!strapi.localization.isLocalizedContentType(contentType)) {\n return params;\n }\n\n if (!params.locale) {\n return assign({}, params, { locale: await getDefaultLocale() });\n }\n\n return params;\n};\n\n/**\n * Add locale lookup query to the params\n */\nconst localeToLookup: Transform = (contentType, params) => {\n if (!params.locale || !strapi.localization.isLocalizedContentType(contentType)) {\n return params;\n }\n\n if (typeof params.locale !== 'string') {\n // localeToLookup accepts locales of '*'. This is because the document\n // service functions that use this transform work with the '*' locale\n // to return all locales.\n throw new errors.ValidationError(\n `Invalid locale param ${String(params.locale)} provided. Document locales must be strings.`\n );\n }\n\n return { ...params, lookup: { ...params.lookup, locale: params.locale } };\n};\n\n/**\n * Add locale lookup query to the params\n */\nconst multiLocaleToLookup: Transform = (contentType, params) => {\n if (!strapi.localization.isLocalizedContentType(contentType)) {\n return params;\n }\n\n if (params.locale) {\n if (params.locale === '*') {\n return params;\n }\n\n return { ...params, lookup: { ...params.lookup, locale: params.locale } };\n }\n\n return params;\n};\n\n/**\n * Translate locale status parameter into the data that will be saved\n */\nconst localeToData: Transform = (contentType, params) => {\n if (!strapi.localization.isLocalizedContentType(contentType)) {\n return params;\n }\n\n if (params.locale) {\n const isValidLocale = typeof params.locale === 'string' && params.locale !== '*';\n if (isValidLocale) {\n return { ...params, data: { ...params.data, locale: params.locale } };\n }\n\n throw new errors.ValidationError(\n `Invalid locale param ${params.locale} provided. Document locales must be strings.`\n );\n }\n\n return params;\n};\n\n/**\n * Mutates the provided data object in place and returns the same reference\n * with populated media values replaced by their upload file IDs.\n */\nconst normalizeMediaIds = (\n schema: Schema.ContentType | Schema.Component,\n data: Record<string, any>\n): Record<string, any> => {\n if (!schema?.attributes || !data || typeof data !== 'object') {\n return data;\n }\n\n Object.entries(schema.attributes).forEach(([attributeName, attribute]) => {\n const value = data[attributeName];\n\n if (value == null) {\n return;\n }\n\n if (attribute.type === 'media') {\n if (attribute.multiple) {\n data[attributeName] = Array.isArray(value)\n ? value.map((file: unknown) =>\n file && typeof file === 'object' && 'id' in file ? file.id : file\n )\n : value;\n } else {\n data[attributeName] =\n value && typeof value === 'object' && 'id' in value ? value.id : value;\n }\n\n return;\n }\n\n if (attribute.type === 'component') {\n const componentSchema = strapi.getModel(attribute.component);\n\n if (attribute.repeatable && Array.isArray(value)) {\n value.forEach((componentValue: Record<string, any>) =>\n normalizeMediaIds(componentSchema, componentValue)\n );\n } else {\n normalizeMediaIds(componentSchema, value);\n }\n\n return;\n }\n\n if (attribute.type === 'dynamiczone' && Array.isArray(value)) {\n value.forEach((componentValue: Record<string, any>) => {\n if (componentValue?.__component) {\n normalizeMediaIds(strapi.getModel(componentValue.__component), componentValue);\n }\n });\n }\n });\n\n return data;\n};\n/**\n * Copy non-localized fields from an existing entry to a new entry being created\n * for a different locale of the same document. Returns a new object with the merged data.\n */\nconst copyNonLocalizedFields = async (\n contentType: Struct.SingleTypeSchema | Struct.CollectionTypeSchema,\n documentId: string,\n dataToCreate: Record<string, any>\n): Promise<Record<string, any>> => {\n if (!strapi.localization.isLocalizedContentType(contentType)) {\n return dataToCreate;\n }\n\n // Find an existing entry for the same document to copy unlocalized fields from\n const attributesToPopulate = strapi.localization.getNestedPopulateOfNonLocalizedAttributes(\n contentType.uid\n );\n const existingEntry = await strapi.db.query(contentType.uid).findOne({\n where: { documentId },\n // Prefer published entry, but fall back to any entry\n orderBy: { publishedAt: 'desc' },\n populate: attributesToPopulate,\n });\n\n // If an entry exists in another locale, copy its non-localized fields\n if (existingEntry) {\n const mergedData = { ...dataToCreate };\n strapi.localization.fillNonLocalizedAttributes(mergedData, existingEntry, {\n model: contentType.uid,\n });\n return normalizeMediaIds(contentType, mergedData);\n }\n\n return dataToCreate;\n};\n\nconst defaultLocaleCurry = curry(defaultLocale);\nconst localeToLookupCurry = curry(localeToLookup);\nconst multiLocaleToLookupCurry = curry(multiLocaleToLookup);\nconst localeToDataCurry = curry(localeToData);\n\nexport {\n defaultLocaleCurry as defaultLocale,\n localeToLookupCurry as localeToLookup,\n localeToDataCurry as localeToData,\n multiLocaleToLookupCurry as multiLocaleToLookup,\n copyNonLocalizedFields,\n};\n"],"names":["getDefaultLocale","strapi","localization","defaultLocale","contentType","params","isLocalizedContentType","locale","assign","localeToLookup","errors","ValidationError","String","lookup","multiLocaleToLookup","localeToData","isValidLocale","data","normalizeMediaIds","schema","attributes","Object","entries","forEach","attributeName","attribute","value","type","multiple","Array","isArray","map","file","id","componentSchema","getModel","component","repeatable","componentValue","__component","copyNonLocalizedFields","documentId","dataToCreate","attributesToPopulate","getNestedPopulateOfNonLocalizedAttributes","uid","existingEntry","db","query","findOne","where","orderBy","publishedAt","populate","mergedData","fillNonLocalizedAttributes","model","defaultLocaleCurry","curry","localeToLookupCurry","multiLocaleToLookupCurry","localeToDataCurry"],"mappings":"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"}
|