@strapi/core 0.0.0-experimental.651a6b8ded3c452fedf2a8598f08c51c214e6cf7 → 0.0.0-experimental.80cf2c74a2003f3c0602abc81888dd9f36dc68a3
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/dist/Strapi.d.ts +38 -36
- package/dist/Strapi.d.ts.map +1 -1
- package/dist/Strapi.js +31 -16
- package/dist/Strapi.js.map +1 -1
- package/dist/Strapi.mjs +31 -16
- package/dist/Strapi.mjs.map +1 -1
- package/dist/configuration/index.d.ts.map +1 -1
- package/dist/configuration/index.js +4 -4
- package/dist/configuration/index.js.map +1 -1
- package/dist/configuration/index.mjs +1 -1
- package/dist/configuration/index.mjs.map +1 -1
- package/dist/configuration/urls.d.ts +8 -0
- package/dist/configuration/urls.d.ts.map +1 -0
- package/dist/configuration/urls.js +68 -0
- package/dist/configuration/urls.js.map +1 -0
- package/dist/configuration/urls.mjs +66 -0
- package/dist/configuration/urls.mjs.map +1 -0
- package/dist/container.d.ts +2 -2
- package/dist/container.d.ts.map +1 -1
- package/dist/container.js.map +1 -1
- package/dist/container.mjs.map +1 -1
- package/dist/core-api/controller/collection-type.d.ts +3 -3
- package/dist/core-api/controller/collection-type.d.ts.map +1 -1
- package/dist/core-api/controller/collection-type.js.map +1 -1
- package/dist/core-api/controller/collection-type.mjs.map +1 -1
- package/dist/core-api/controller/index.d.ts +3 -3
- package/dist/core-api/controller/index.d.ts.map +1 -1
- package/dist/core-api/controller/index.js +6 -1
- package/dist/core-api/controller/index.js.map +1 -1
- package/dist/core-api/controller/index.mjs +6 -1
- package/dist/core-api/controller/index.mjs.map +1 -1
- package/dist/core-api/controller/single-type.d.ts +3 -3
- package/dist/core-api/controller/single-type.d.ts.map +1 -1
- package/dist/core-api/controller/single-type.js.map +1 -1
- package/dist/core-api/controller/single-type.mjs.map +1 -1
- package/dist/core-api/controller/transform.d.ts +10 -9
- package/dist/core-api/controller/transform.d.ts.map +1 -1
- package/dist/core-api/controller/transform.js +19 -13
- package/dist/core-api/controller/transform.js.map +1 -1
- package/dist/core-api/controller/transform.mjs +19 -13
- package/dist/core-api/controller/transform.mjs.map +1 -1
- package/dist/core-api/service/collection-type.d.ts +10 -10
- package/dist/core-api/service/collection-type.d.ts.map +1 -1
- package/dist/core-api/service/collection-type.js.map +1 -1
- package/dist/core-api/service/collection-type.mjs.map +1 -1
- package/dist/core-api/service/index.d.ts +3 -3
- package/dist/core-api/service/index.d.ts.map +1 -1
- package/dist/core-api/service/index.js.map +1 -1
- package/dist/core-api/service/index.mjs.map +1 -1
- package/dist/core-api/service/single-type.d.ts +5 -5
- package/dist/core-api/service/single-type.d.ts.map +1 -1
- package/dist/core-api/service/single-type.js +3 -4
- package/dist/core-api/service/single-type.js.map +1 -1
- package/dist/core-api/service/single-type.mjs +3 -4
- package/dist/core-api/service/single-type.mjs.map +1 -1
- package/dist/domain/content-type/index.d.ts +1 -1
- package/dist/domain/content-type/index.d.ts.map +1 -1
- package/dist/domain/content-type/index.js +3 -0
- package/dist/domain/content-type/index.js.map +1 -1
- package/dist/domain/content-type/index.mjs +3 -0
- package/dist/domain/content-type/index.mjs.map +1 -1
- package/dist/domain/content-type/validator.d.ts.map +1 -1
- package/dist/domain/content-type/validator.js +1 -1
- package/dist/domain/content-type/validator.js.map +1 -1
- package/dist/domain/content-type/validator.mjs +2 -2
- package/dist/domain/content-type/validator.mjs.map +1 -1
- package/dist/domain/module/index.d.ts +24 -23
- package/dist/domain/module/index.d.ts.map +1 -1
- package/dist/domain/module/index.js +3 -3
- package/dist/domain/module/index.js.map +1 -1
- package/dist/domain/module/index.mjs +4 -4
- package/dist/domain/module/index.mjs.map +1 -1
- package/dist/ee/index.d.ts +2 -2
- package/dist/ee/index.d.ts.map +1 -1
- package/dist/ee/index.js.map +1 -1
- package/dist/ee/index.mjs.map +1 -1
- package/dist/ee/license.d.ts +2 -2
- package/dist/ee/license.d.ts.map +1 -1
- package/dist/ee/license.js.map +1 -1
- package/dist/ee/license.mjs.map +1 -1
- package/dist/factories.d.ts +10 -10
- package/dist/factories.d.ts.map +1 -1
- package/dist/factories.js +6 -2
- package/dist/factories.js.map +1 -1
- package/dist/factories.mjs +6 -2
- package/dist/factories.mjs.map +1 -1
- package/dist/loaders/admin.d.ts +2 -2
- package/dist/loaders/admin.d.ts.map +1 -1
- package/dist/loaders/admin.js.map +1 -1
- package/dist/loaders/admin.mjs.map +1 -1
- package/dist/loaders/apis.d.ts +2 -2
- package/dist/loaders/apis.d.ts.map +1 -1
- package/dist/loaders/apis.js +1 -1
- package/dist/loaders/apis.js.map +1 -1
- package/dist/loaders/apis.mjs +2 -2
- package/dist/loaders/apis.mjs.map +1 -1
- package/dist/loaders/components.d.ts +2 -2
- package/dist/loaders/components.d.ts.map +1 -1
- package/dist/loaders/components.js.map +1 -1
- package/dist/loaders/components.mjs.map +1 -1
- package/dist/loaders/index.d.ts +2 -2
- package/dist/loaders/index.d.ts.map +1 -1
- package/dist/loaders/index.js.map +1 -1
- package/dist/loaders/index.mjs.map +1 -1
- package/dist/loaders/middlewares.d.ts +2 -2
- package/dist/loaders/middlewares.d.ts.map +1 -1
- package/dist/loaders/middlewares.js.map +1 -1
- package/dist/loaders/middlewares.mjs.map +1 -1
- package/dist/loaders/plugins/get-enabled-plugins.d.ts +2 -2
- package/dist/loaders/plugins/get-enabled-plugins.d.ts.map +1 -1
- package/dist/loaders/plugins/get-enabled-plugins.js +2 -1
- package/dist/loaders/plugins/get-enabled-plugins.js.map +1 -1
- package/dist/loaders/plugins/get-enabled-plugins.mjs +3 -2
- package/dist/loaders/plugins/get-enabled-plugins.mjs.map +1 -1
- package/dist/loaders/plugins/index.d.ts +2 -2
- package/dist/loaders/plugins/index.d.ts.map +1 -1
- package/dist/loaders/plugins/index.js.map +1 -1
- package/dist/loaders/plugins/index.mjs.map +1 -1
- package/dist/loaders/policies.d.ts +2 -2
- package/dist/loaders/policies.d.ts.map +1 -1
- package/dist/loaders/policies.js.map +1 -1
- package/dist/loaders/policies.mjs.map +1 -1
- package/dist/loaders/sanitizers.d.ts +2 -2
- package/dist/loaders/sanitizers.d.ts.map +1 -1
- package/dist/loaders/sanitizers.js.map +1 -1
- package/dist/loaders/sanitizers.mjs.map +1 -1
- package/dist/loaders/src-index.d.ts +2 -2
- package/dist/loaders/src-index.d.ts.map +1 -1
- package/dist/loaders/src-index.js.map +1 -1
- package/dist/loaders/src-index.mjs.map +1 -1
- package/dist/loaders/validators.d.ts +2 -2
- package/dist/loaders/validators.d.ts.map +1 -1
- package/dist/loaders/validators.js.map +1 -1
- package/dist/loaders/validators.mjs.map +1 -1
- package/dist/middlewares/body.d.ts +2 -2
- package/dist/middlewares/body.d.ts.map +1 -1
- package/dist/middlewares/body.js.map +1 -1
- package/dist/middlewares/body.mjs.map +1 -1
- package/dist/middlewares/compression.d.ts +2 -2
- package/dist/middlewares/compression.d.ts.map +1 -1
- package/dist/middlewares/compression.js.map +1 -1
- package/dist/middlewares/compression.mjs.map +1 -1
- package/dist/middlewares/cors.d.ts +2 -2
- package/dist/middlewares/cors.d.ts.map +1 -1
- package/dist/middlewares/cors.js.map +1 -1
- package/dist/middlewares/cors.mjs.map +1 -1
- package/dist/middlewares/errors.d.ts +2 -2
- package/dist/middlewares/errors.d.ts.map +1 -1
- package/dist/middlewares/errors.js.map +1 -1
- package/dist/middlewares/errors.mjs.map +1 -1
- package/dist/middlewares/favicon.d.ts +2 -2
- package/dist/middlewares/favicon.d.ts.map +1 -1
- package/dist/middlewares/favicon.js.map +1 -1
- package/dist/middlewares/favicon.mjs.map +1 -1
- package/dist/middlewares/index.d.ts +2 -2
- package/dist/middlewares/index.d.ts.map +1 -1
- package/dist/middlewares/index.js.map +1 -1
- package/dist/middlewares/index.mjs.map +1 -1
- package/dist/middlewares/ip.d.ts +2 -2
- package/dist/middlewares/ip.d.ts.map +1 -1
- package/dist/middlewares/ip.js.map +1 -1
- package/dist/middlewares/ip.mjs.map +1 -1
- package/dist/middlewares/logger.d.ts +2 -2
- package/dist/middlewares/logger.d.ts.map +1 -1
- package/dist/middlewares/logger.js.map +1 -1
- package/dist/middlewares/logger.mjs.map +1 -1
- package/dist/middlewares/powered-by.d.ts +2 -2
- package/dist/middlewares/powered-by.d.ts.map +1 -1
- package/dist/middlewares/powered-by.js.map +1 -1
- package/dist/middlewares/powered-by.mjs.map +1 -1
- package/dist/middlewares/public.d.ts +2 -2
- package/dist/middlewares/public.d.ts.map +1 -1
- package/dist/middlewares/public.js.map +1 -1
- package/dist/middlewares/public.mjs.map +1 -1
- package/dist/middlewares/query.d.ts +2 -2
- package/dist/middlewares/query.d.ts.map +1 -1
- package/dist/middlewares/query.js.map +1 -1
- package/dist/middlewares/query.mjs.map +1 -1
- package/dist/middlewares/response-time.d.ts +2 -2
- package/dist/middlewares/response-time.d.ts.map +1 -1
- package/dist/middlewares/response-time.js.map +1 -1
- package/dist/middlewares/response-time.mjs.map +1 -1
- package/dist/middlewares/responses.d.ts +3 -3
- package/dist/middlewares/responses.d.ts.map +1 -1
- package/dist/middlewares/responses.js.map +1 -1
- package/dist/middlewares/responses.mjs.map +1 -1
- package/dist/middlewares/security.d.ts +2 -2
- package/dist/middlewares/security.d.ts.map +1 -1
- package/dist/middlewares/security.js +2 -2
- package/dist/middlewares/security.js.map +1 -1
- package/dist/middlewares/security.mjs +2 -2
- package/dist/middlewares/security.mjs.map +1 -1
- package/dist/middlewares/session.d.ts +2 -2
- package/dist/middlewares/session.d.ts.map +1 -1
- package/dist/middlewares/session.js.map +1 -1
- package/dist/middlewares/session.mjs.map +1 -1
- package/dist/migrations/draft-publish.d.ts +17 -0
- package/dist/migrations/draft-publish.d.ts.map +1 -0
- package/dist/migrations/draft-publish.js +59 -0
- package/dist/migrations/draft-publish.js.map +1 -0
- package/dist/migrations/draft-publish.mjs +59 -0
- package/dist/migrations/draft-publish.mjs.map +1 -0
- package/dist/registries/apis.d.ts +2 -2
- package/dist/registries/apis.d.ts.map +1 -1
- package/dist/registries/apis.js.map +1 -1
- package/dist/registries/apis.mjs.map +1 -1
- package/dist/registries/components.d.ts +6 -6
- package/dist/registries/components.d.ts.map +1 -1
- package/dist/registries/components.js.map +1 -1
- package/dist/registries/components.mjs.map +1 -1
- package/dist/registries/config.d.ts +2 -2
- package/dist/registries/config.d.ts.map +1 -1
- package/dist/registries/config.js +26 -6
- package/dist/registries/config.js.map +1 -1
- package/dist/registries/config.mjs +27 -5
- package/dist/registries/config.mjs.map +1 -1
- package/dist/registries/content-types.d.ts +5 -5
- package/dist/registries/content-types.d.ts.map +1 -1
- package/dist/registries/content-types.js.map +1 -1
- package/dist/registries/content-types.mjs.map +1 -1
- package/dist/registries/controllers.d.ts +10 -10
- package/dist/registries/controllers.d.ts.map +1 -1
- package/dist/registries/controllers.js.map +1 -1
- package/dist/registries/controllers.mjs.map +1 -1
- package/dist/registries/custom-fields.d.ts +3 -3
- package/dist/registries/custom-fields.d.ts.map +1 -1
- package/dist/registries/custom-fields.js.map +1 -1
- package/dist/registries/custom-fields.mjs.map +1 -1
- package/dist/registries/middlewares.d.ts +6 -6
- package/dist/registries/middlewares.d.ts.map +1 -1
- package/dist/registries/middlewares.js.map +1 -1
- package/dist/registries/middlewares.mjs.map +1 -1
- package/dist/registries/modules.d.ts +2 -2
- package/dist/registries/modules.d.ts.map +1 -1
- package/dist/registries/modules.js.map +1 -1
- package/dist/registries/modules.mjs.map +1 -1
- package/dist/registries/plugins.d.ts +5 -5
- package/dist/registries/plugins.d.ts.map +1 -1
- package/dist/registries/plugins.js.map +1 -1
- package/dist/registries/plugins.mjs.map +1 -1
- package/dist/registries/policies.d.ts +6 -6
- package/dist/registries/policies.d.ts.map +1 -1
- package/dist/registries/policies.js.map +1 -1
- package/dist/registries/policies.mjs.map +1 -1
- package/dist/registries/services.d.ts +8 -8
- package/dist/registries/services.d.ts.map +1 -1
- package/dist/registries/services.js.map +1 -1
- package/dist/registries/services.mjs.map +1 -1
- package/dist/services/auth/index.d.ts +4 -4
- package/dist/services/auth/index.d.ts.map +1 -1
- package/dist/services/auth/index.js.map +1 -1
- package/dist/services/auth/index.mjs.map +1 -1
- package/dist/services/content-api/index.d.ts +3 -3
- package/dist/services/content-api/index.d.ts.map +1 -1
- package/dist/services/content-api/index.js.map +1 -1
- package/dist/services/content-api/index.mjs.map +1 -1
- package/dist/services/content-api/permissions/index.d.ts +3 -3
- package/dist/services/content-api/permissions/index.d.ts.map +1 -1
- package/dist/services/content-api/permissions/index.js.map +1 -1
- package/dist/services/content-api/permissions/index.mjs.map +1 -1
- package/dist/services/cron.d.ts +2 -2
- package/dist/services/cron.d.ts.map +1 -1
- package/dist/services/cron.js.map +1 -1
- package/dist/services/cron.mjs.map +1 -1
- package/dist/services/custom-fields.d.ts +2 -2
- package/dist/services/custom-fields.d.ts.map +1 -1
- package/dist/services/custom-fields.js.map +1 -1
- package/dist/services/custom-fields.mjs.map +1 -1
- package/dist/services/document-service/common.d.ts +2 -2
- package/dist/services/document-service/common.d.ts.map +1 -1
- package/dist/services/document-service/common.js.map +1 -1
- package/dist/services/document-service/common.mjs.map +1 -1
- package/dist/services/document-service/document-engine.d.ts +1 -7
- package/dist/services/document-service/document-engine.d.ts.map +1 -1
- package/dist/services/document-service/draft-and-publish.d.ts +9 -23
- package/dist/services/document-service/draft-and-publish.d.ts.map +1 -1
- package/dist/services/document-service/draft-and-publish.js +37 -9
- package/dist/services/document-service/draft-and-publish.js.map +1 -1
- package/dist/services/document-service/draft-and-publish.mjs +38 -10
- package/dist/services/document-service/draft-and-publish.mjs.map +1 -1
- package/dist/services/document-service/index.d.ts +2 -2
- package/dist/services/document-service/index.d.ts.map +1 -1
- package/dist/services/document-service/index.js +10 -8
- package/dist/services/document-service/index.js.map +1 -1
- package/dist/services/document-service/index.mjs +4 -2
- package/dist/services/document-service/index.mjs.map +1 -1
- package/dist/services/document-service/internationalization.d.ts +5 -5
- package/dist/services/document-service/internationalization.d.ts.map +1 -1
- package/dist/services/document-service/internationalization.js.map +1 -1
- package/dist/services/document-service/internationalization.mjs.map +1 -1
- package/dist/services/document-service/middlewares/errors.d.ts +6 -0
- package/dist/services/document-service/middlewares/errors.d.ts.map +1 -0
- package/dist/services/document-service/middlewares/errors.js +25 -0
- package/dist/services/document-service/middlewares/errors.js.map +1 -0
- package/dist/services/document-service/middlewares/errors.mjs +25 -0
- package/dist/services/document-service/middlewares/errors.mjs.map +1 -0
- package/dist/services/document-service/middlewares/index.d.ts +3 -0
- package/dist/services/document-service/middlewares/index.d.ts.map +1 -0
- package/dist/services/document-service/{middlewares.d.ts → middlewares/middleware-manager.d.ts} +3 -4
- package/dist/services/document-service/middlewares/middleware-manager.d.ts.map +1 -0
- package/dist/services/document-service/{middlewares.js → middlewares/middleware-manager.js} +1 -1
- package/dist/services/document-service/middlewares/middleware-manager.js.map +1 -0
- package/dist/services/document-service/{middlewares.mjs → middlewares/middleware-manager.mjs} +1 -1
- package/dist/services/document-service/middlewares/middleware-manager.mjs.map +1 -0
- package/dist/services/document-service/repository.d.ts +3 -0
- package/dist/services/document-service/repository.d.ts.map +1 -0
- package/dist/services/document-service/repository.js +297 -0
- package/dist/services/document-service/repository.js.map +1 -0
- package/dist/services/document-service/repository.mjs +297 -0
- package/dist/services/document-service/repository.mjs.map +1 -0
- package/dist/services/document-service/transform/fields.d.ts +2 -2
- package/dist/services/document-service/transform/fields.d.ts.map +1 -1
- package/dist/services/document-service/transform/fields.js.map +1 -1
- package/dist/services/document-service/transform/fields.mjs.map +1 -1
- package/dist/services/document-service/transform/id-map.d.ts +4 -4
- package/dist/services/document-service/transform/id-map.d.ts.map +1 -1
- package/dist/services/document-service/transform/id-map.js +15 -9
- package/dist/services/document-service/transform/id-map.js.map +1 -1
- package/dist/services/document-service/transform/id-map.mjs +16 -10
- package/dist/services/document-service/transform/id-map.mjs.map +1 -1
- package/dist/services/document-service/transform/id-transform.d.ts +4 -18
- package/dist/services/document-service/transform/id-transform.d.ts.map +1 -1
- package/dist/services/document-service/transform/id-transform.js +18 -12
- package/dist/services/document-service/transform/id-transform.js.map +1 -1
- package/dist/services/document-service/transform/id-transform.mjs +18 -12
- package/dist/services/document-service/transform/id-transform.mjs.map +1 -1
- package/dist/services/document-service/transform/populate.d.ts +5 -2
- package/dist/services/document-service/transform/populate.d.ts.map +1 -1
- package/dist/services/document-service/transform/populate.js.map +1 -1
- package/dist/services/document-service/transform/populate.mjs.map +1 -1
- package/dist/services/document-service/transform/relations/extract/data-ids.d.ts +3 -3
- 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 +23 -12
- 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 +23 -12
- 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 +3 -3
- 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 +61 -37
- 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 +62 -38
- package/dist/services/document-service/transform/relations/transform/data-ids.mjs.map +1 -1
- package/dist/services/document-service/transform/relations/transform/output-ids.d.ts +2 -0
- package/dist/services/document-service/transform/relations/transform/output-ids.d.ts.map +1 -0
- package/dist/services/document-service/transform/relations/utils/dp.d.ts +10 -0
- package/dist/services/document-service/transform/relations/utils/dp.d.ts.map +1 -0
- package/dist/services/document-service/transform/relations/utils/dp.js +30 -0
- package/dist/services/document-service/transform/relations/utils/dp.js.map +1 -0
- package/dist/services/document-service/transform/relations/utils/dp.mjs +30 -0
- package/dist/services/document-service/transform/relations/utils/dp.mjs.map +1 -0
- package/dist/services/document-service/transform/relations/utils/i18n.d.ts +4 -4
- package/dist/services/document-service/transform/relations/utils/i18n.d.ts.map +1 -1
- package/dist/services/document-service/transform/relations/utils/i18n.js.map +1 -1
- package/dist/services/document-service/transform/relations/utils/i18n.mjs.map +1 -1
- package/dist/services/document-service/transform/relations/utils/types.d.ts +4 -1
- package/dist/services/document-service/transform/relations/utils/types.d.ts.map +1 -1
- package/dist/services/document-service/transform/types.d.ts +4 -4
- package/dist/services/document-service/transform/types.d.ts.map +1 -1
- package/dist/services/document-service/utils/populate.d.ts +9 -2
- package/dist/services/document-service/utils/populate.d.ts.map +1 -1
- package/dist/services/document-service/utils/populate.js +5 -5
- package/dist/services/document-service/utils/populate.js.map +1 -1
- package/dist/services/document-service/utils/populate.mjs +5 -5
- package/dist/services/document-service/utils/populate.mjs.map +1 -1
- package/dist/services/entity-service/attributes/index.d.ts +4 -4
- package/dist/services/entity-service/attributes/index.d.ts.map +1 -1
- package/dist/services/entity-service/attributes/index.js.map +1 -1
- package/dist/services/entity-service/attributes/index.mjs.map +1 -1
- package/dist/services/entity-service/attributes/transforms.d.ts +3 -3
- package/dist/services/entity-service/attributes/transforms.d.ts.map +1 -1
- package/dist/services/entity-service/attributes/transforms.js.map +1 -1
- package/dist/services/entity-service/attributes/transforms.mjs.map +1 -1
- package/dist/services/entity-service/components.d.ts +88 -16
- package/dist/services/entity-service/components.d.ts.map +1 -1
- package/dist/services/entity-service/components.js +13 -99
- package/dist/services/entity-service/components.js.map +1 -1
- package/dist/services/entity-service/components.mjs +14 -100
- package/dist/services/entity-service/components.mjs.map +1 -1
- package/dist/services/entity-service/index.d.ts +4 -6
- package/dist/services/entity-service/index.d.ts.map +1 -1
- package/dist/services/entity-service/index.js +34 -199
- package/dist/services/entity-service/index.js.map +1 -1
- package/dist/services/entity-service/index.mjs +27 -192
- package/dist/services/entity-service/index.mjs.map +1 -1
- package/dist/services/entity-service/params.d.ts +5 -5
- package/dist/services/entity-service/params.d.ts.map +1 -1
- package/dist/services/entity-service/params.js +1 -1
- package/dist/services/entity-service/params.js.map +1 -1
- package/dist/services/entity-service/params.mjs +1 -1
- package/dist/services/entity-service/params.mjs.map +1 -1
- package/dist/services/entity-validator/index.d.ts +2 -2
- package/dist/services/entity-validator/index.d.ts.map +1 -1
- package/dist/services/entity-validator/index.js +8 -3
- package/dist/services/entity-validator/index.js.map +1 -1
- package/dist/services/entity-validator/index.mjs +8 -3
- package/dist/services/entity-validator/index.mjs.map +1 -1
- package/dist/services/entity-validator/validators.d.ts +18 -18
- package/dist/services/entity-validator/validators.d.ts.map +1 -1
- package/dist/services/entity-validator/validators.js +6 -1
- package/dist/services/entity-validator/validators.js.map +1 -1
- package/dist/services/entity-validator/validators.mjs +6 -1
- package/dist/services/entity-validator/validators.mjs.map +1 -1
- package/dist/services/features.d.ts +3 -3
- package/dist/services/features.d.ts.map +1 -1
- package/dist/services/features.js.map +1 -1
- package/dist/services/features.mjs.map +1 -1
- package/dist/services/fs.d.ts +2 -2
- package/dist/services/fs.d.ts.map +1 -1
- package/dist/services/fs.js.map +1 -1
- package/dist/services/fs.mjs.map +1 -1
- package/dist/services/metrics/admin-user-hash.d.ts +2 -2
- package/dist/services/metrics/admin-user-hash.d.ts.map +1 -1
- package/dist/services/metrics/admin-user-hash.js.map +1 -1
- package/dist/services/metrics/admin-user-hash.mjs.map +1 -1
- package/dist/services/metrics/index.d.ts +2 -2
- package/dist/services/metrics/index.d.ts.map +1 -1
- package/dist/services/metrics/index.js.map +1 -1
- package/dist/services/metrics/index.mjs.map +1 -1
- package/dist/services/metrics/middleware.d.ts +2 -2
- package/dist/services/metrics/middleware.d.ts.map +1 -1
- package/dist/services/metrics/middleware.js.map +1 -1
- package/dist/services/metrics/middleware.mjs.map +1 -1
- package/dist/services/metrics/sender.d.ts +3 -3
- package/dist/services/metrics/sender.d.ts.map +1 -1
- package/dist/services/metrics/sender.js.map +1 -1
- package/dist/services/metrics/sender.mjs.map +1 -1
- package/dist/services/server/admin-api.d.ts +3 -3
- package/dist/services/server/admin-api.d.ts.map +1 -1
- package/dist/services/server/admin-api.js.map +1 -1
- package/dist/services/server/admin-api.mjs.map +1 -1
- package/dist/services/server/api.d.ts +3 -3
- package/dist/services/server/api.d.ts.map +1 -1
- package/dist/services/server/api.js.map +1 -1
- package/dist/services/server/api.mjs.map +1 -1
- package/dist/services/server/compose-endpoint.d.ts +2 -2
- package/dist/services/server/compose-endpoint.d.ts.map +1 -1
- package/dist/services/server/compose-endpoint.js.map +1 -1
- package/dist/services/server/compose-endpoint.mjs.map +1 -1
- package/dist/services/server/content-api.d.ts +3 -3
- package/dist/services/server/content-api.d.ts.map +1 -1
- package/dist/services/server/content-api.js.map +1 -1
- package/dist/services/server/content-api.mjs.map +1 -1
- package/dist/services/server/http-server.d.ts +2 -2
- package/dist/services/server/http-server.d.ts.map +1 -1
- package/dist/services/server/http-server.js.map +1 -1
- package/dist/services/server/http-server.mjs.map +1 -1
- package/dist/services/server/index.d.ts +2 -2
- package/dist/services/server/index.d.ts.map +1 -1
- package/dist/services/server/index.js +1 -2
- package/dist/services/server/index.js.map +1 -1
- package/dist/services/server/index.mjs +1 -2
- package/dist/services/server/index.mjs.map +1 -1
- package/dist/services/server/middleware.d.ts +4 -4
- package/dist/services/server/middleware.d.ts.map +1 -1
- package/dist/services/server/middleware.js.map +1 -1
- package/dist/services/server/middleware.mjs.map +1 -1
- package/dist/services/server/policy.d.ts +2 -2
- package/dist/services/server/policy.d.ts.map +1 -1
- package/dist/services/server/policy.js.map +1 -1
- package/dist/services/server/policy.mjs.map +1 -1
- package/dist/services/server/register-middlewares.d.ts +2 -2
- package/dist/services/server/register-middlewares.d.ts.map +1 -1
- package/dist/services/server/register-middlewares.js.map +1 -1
- package/dist/services/server/register-middlewares.mjs.map +1 -1
- package/dist/services/server/register-routes.d.ts +2 -2
- package/dist/services/server/register-routes.d.ts.map +1 -1
- package/dist/services/server/register-routes.js.map +1 -1
- package/dist/services/server/register-routes.mjs.map +1 -1
- package/dist/services/server/routing.d.ts +4 -4
- package/dist/services/server/routing.d.ts.map +1 -1
- package/dist/services/server/routing.js.map +1 -1
- package/dist/services/server/routing.mjs.map +1 -1
- package/dist/services/utils/dynamic-zones.d.ts.map +1 -1
- package/dist/services/utils/dynamic-zones.js +2 -1
- package/dist/services/utils/dynamic-zones.js.map +1 -1
- package/dist/services/utils/dynamic-zones.mjs +2 -1
- package/dist/services/utils/dynamic-zones.mjs.map +1 -1
- package/dist/services/webhook-runner.js.map +1 -1
- package/dist/services/webhook-runner.mjs.map +1 -1
- package/dist/utils/convert-custom-field-type.d.ts +2 -2
- package/dist/utils/convert-custom-field-type.d.ts.map +1 -1
- package/dist/utils/convert-custom-field-type.js.map +1 -1
- package/dist/utils/convert-custom-field-type.mjs.map +1 -1
- package/dist/utils/fetch.d.ts +3 -3
- package/dist/utils/fetch.d.ts.map +1 -1
- package/dist/utils/fetch.js.map +1 -1
- package/dist/utils/fetch.mjs.map +1 -1
- package/dist/utils/get-dirs.d.ts +3 -3
- package/dist/utils/get-dirs.d.ts.map +1 -1
- package/dist/utils/get-dirs.js.map +1 -1
- package/dist/utils/get-dirs.mjs.map +1 -1
- package/dist/utils/is-initialized.d.ts +2 -2
- package/dist/utils/is-initialized.d.ts.map +1 -1
- package/dist/utils/is-initialized.js +1 -1
- package/dist/utils/is-initialized.js.map +1 -1
- package/dist/utils/is-initialized.mjs +1 -1
- package/dist/utils/is-initialized.mjs.map +1 -1
- package/dist/utils/load-config-file.js +1 -1
- package/dist/utils/load-config-file.js.map +1 -1
- package/dist/utils/load-config-file.mjs +2 -2
- package/dist/utils/load-config-file.mjs.map +1 -1
- package/dist/utils/open-browser.d.ts +2 -2
- package/dist/utils/open-browser.d.ts.map +1 -1
- package/dist/utils/open-browser.js.map +1 -1
- package/dist/utils/open-browser.mjs.map +1 -1
- package/dist/utils/signals.d.ts +2 -2
- package/dist/utils/signals.d.ts.map +1 -1
- package/dist/utils/signals.js.map +1 -1
- package/dist/utils/signals.mjs.map +1 -1
- package/dist/utils/startup-logger.d.ts +2 -2
- package/dist/utils/startup-logger.d.ts.map +1 -1
- package/dist/utils/startup-logger.js.map +1 -1
- package/dist/utils/startup-logger.mjs.map +1 -1
- package/dist/utils/transform-content-types-to-models.d.ts +49 -94
- package/dist/utils/transform-content-types-to-models.d.ts.map +1 -1
- package/dist/utils/transform-content-types-to-models.js +90 -44
- package/dist/utils/transform-content-types-to-models.js.map +1 -1
- package/dist/utils/transform-content-types-to-models.mjs +90 -44
- package/dist/utils/transform-content-types-to-models.mjs.map +1 -1
- package/dist/utils/update-notifier/index.d.ts +2 -2
- package/dist/utils/update-notifier/index.d.ts.map +1 -1
- package/dist/utils/update-notifier/index.js.map +1 -1
- package/dist/utils/update-notifier/index.mjs.map +1 -1
- package/package.json +15 -15
- package/dist/services/document-service/document-engine.js +0 -241
- package/dist/services/document-service/document-engine.js.map +0 -1
- package/dist/services/document-service/document-engine.mjs +0 -242
- package/dist/services/document-service/document-engine.mjs.map +0 -1
- package/dist/services/document-service/middlewares.d.ts.map +0 -1
- package/dist/services/document-service/middlewares.js.map +0 -1
- package/dist/services/document-service/middlewares.mjs.map +0 -1
- package/dist/services/document-service/repositories/content-type.d.ts +0 -3
- package/dist/services/document-service/repositories/content-type.d.ts.map +0 -1
- package/dist/services/document-service/repositories/content-type.js +0 -139
- package/dist/services/document-service/repositories/content-type.js.map +0 -1
- package/dist/services/document-service/repositories/content-type.mjs +0 -139
- package/dist/services/document-service/repositories/content-type.mjs.map +0 -1
- package/dist/services/utils/upload-files.d.ts +0 -8
- package/dist/services/utils/upload-files.d.ts.map +0 -1
- package/dist/services/utils/upload-files.js +0 -64
- package/dist/services/utils/upload-files.js.map +0 -1
- package/dist/services/utils/upload-files.mjs +0 -63
- package/dist/services/utils/upload-files.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transform-content-types-to-models.js","sources":["../../src/utils/transform-content-types-to-models.ts"],"sourcesContent":["import { type Model, utils } from '@strapi/database';\nimport { Schema, Attribute } from '@strapi/types';\nimport { createId } from '@paralleldrive/cuid2';\nimport assert from 'node:assert';\nimport _ from 'lodash/fp';\n\nconst { identifiers } = utils;\n\n/**\n * Because strapi/database models don't know about things like components or dynamic zones, we use this file to convert them\n * to a relations format that it recognizes\n *\n * Therefore we have to keep an additional set of helpers/extensions to the database naming methods\n */\n\nexport const COMPONENT_JOIN_TABLE_SUFFIX = 'components';\nexport const DZ_JOIN_TABLE_SUFFIX = 'components';\nexport const COMPONENT_INVERSE_COLUMN_NAME = 'component';\nexport const COMPONENT_TYPE_COLUMN = 'component_type';\nexport const ENTITY = 'entity';\n\nexport const getComponentJoinTableName = (collectionName: string) =>\n identifiers.getTableName(collectionName, { suffix: COMPONENT_JOIN_TABLE_SUFFIX });\n\nexport const getDzJoinTableName = (collectionName: string) =>\n identifiers.getTableName(collectionName, { suffix: DZ_JOIN_TABLE_SUFFIX });\n\nconst { ID_COLUMN: id, FIELD_COLUMN: field, ORDER_COLUMN: order } = identifiers;\n\nexport type LoadedContentTypeModel = Schema.ContentType &\n Required<Pick<Schema.ContentType, 'collectionName' | 'uid' | 'modelName'>>;\n\n// Transforms an attribute (particularly for relation types) into the format that strapi/database accepts\nexport const transformAttribute = (\n name: string,\n attribute: Attribute.Any,\n contentType: LoadedContentTypeModel\n) => {\n switch (attribute.type) {\n case 'media': {\n return {\n type: 'relation',\n relation: attribute.multiple === true ? 'morphMany' : 'morphOne',\n target: 'plugin::upload.file',\n morphBy: 'related',\n };\n }\n case 'component': {\n const joinTableName = getComponentJoinTableName(contentType.collectionName);\n const joinColumnEntityName = identifiers.getJoinColumnAttributeIdName(ENTITY);\n const joinColumnInverseName = identifiers.getJoinColumnAttributeIdName(\n COMPONENT_INVERSE_COLUMN_NAME\n );\n\n return {\n type: 'relation',\n relation: attribute.repeatable === true ? 'oneToMany' : 'oneToOne',\n target: attribute.component,\n\n // We need the join table name to be deterministic,\n // We need to allow passing the join table name as an option\n joinTable: {\n name: joinTableName,\n joinColumn: {\n name: joinColumnEntityName,\n referencedColumn: id,\n },\n inverseJoinColumn: {\n name: joinColumnInverseName,\n referencedColumn: id,\n },\n on: {\n field: name,\n },\n orderColumnName: order,\n orderBy: {\n order: 'asc',\n },\n pivotColumns: [joinColumnEntityName, joinColumnInverseName, field, COMPONENT_TYPE_COLUMN],\n },\n };\n }\n case 'dynamiczone': {\n const joinTableName = getDzJoinTableName(contentType.collectionName);\n const joinColumnEntityName = identifiers.getJoinColumnAttributeIdName(ENTITY);\n const joinColumnInverseName = identifiers.getJoinColumnAttributeIdName(\n COMPONENT_INVERSE_COLUMN_NAME\n );\n\n return {\n type: 'relation',\n relation: 'morphToMany',\n // TODO: handle restrictions at some point\n // target: attribute.components,\n joinTable: {\n name: joinTableName,\n joinColumn: {\n name: joinColumnEntityName,\n referencedColumn: id,\n },\n morphColumn: {\n idColumn: {\n name: joinColumnInverseName,\n referencedColumn: id,\n },\n typeColumn: {\n name: COMPONENT_TYPE_COLUMN,\n },\n typeField: '__component',\n },\n on: {\n field: name,\n },\n orderBy: {\n order: 'asc',\n },\n pivotColumns: [joinColumnEntityName, joinColumnInverseName, field, COMPONENT_TYPE_COLUMN],\n },\n };\n }\n default: {\n return attribute;\n }\n }\n};\n\nexport const transformAttributes = (contentType: LoadedContentTypeModel) => {\n return Object.keys(contentType.attributes! || {}).reduce((attrs, attrName) => {\n return {\n ...attrs,\n [attrName]: transformAttribute(attrName, contentType.attributes[attrName]!, contentType),\n };\n }, {});\n};\n\nexport const hasComponentsOrDz = (\n contentType: LoadedContentTypeModel\n): contentType is LoadedContentTypeModel & { type: 'dynamiczone' | 'component' } => {\n return Object.values(contentType.attributes || {}).some(\n ({ type }) => type === 'dynamiczone' || type === 'component'\n );\n};\n\nexport const createDocumentId = createId;\n\n// Creates the\nconst createCompoLinkModel = (contentType: LoadedContentTypeModel): Model => {\n const name = getComponentJoinTableName(contentType.collectionName);\n\n const entityId = identifiers.getJoinColumnAttributeIdName(ENTITY);\n const componentId = identifiers.getJoinColumnAttributeIdName(COMPONENT_INVERSE_COLUMN_NAME);\n const fkIndex = identifiers.getFkIndexName([contentType.collectionName, ENTITY]);\n\n return {\n // TODO: make sure there can't be any conflicts with a prefix\n singularName: name,\n uid: name,\n tableName: name,\n attributes: {\n [id]: {\n type: 'increments',\n },\n [entityId]: {\n type: 'integer',\n column: {\n unsigned: true,\n },\n },\n [componentId]: {\n type: 'integer',\n column: {\n unsigned: true,\n },\n },\n [COMPONENT_TYPE_COLUMN]: {\n type: 'string',\n },\n [field]: {\n type: 'string',\n },\n [order]: {\n type: 'float',\n column: {\n unsigned: true,\n defaultTo: null,\n },\n },\n },\n indexes: [\n {\n name: identifiers.getIndexName([contentType.collectionName, field]),\n columns: [field],\n },\n {\n name: identifiers.getIndexName([contentType.collectionName, COMPONENT_TYPE_COLUMN]),\n columns: [COMPONENT_TYPE_COLUMN],\n },\n {\n name: fkIndex,\n columns: [entityId],\n },\n {\n // NOTE: since we don't include attribute names, we need to be careful not to create another unique index\n name: identifiers.getUniqueIndexName([contentType.collectionName]),\n columns: [entityId, componentId, field, COMPONENT_TYPE_COLUMN],\n type: 'unique',\n },\n ],\n foreignKeys: [\n {\n name: fkIndex,\n columns: [entityId],\n referencedColumns: [id],\n referencedTable: identifiers.getTableName(contentType.collectionName),\n onDelete: 'CASCADE',\n },\n ],\n };\n};\n\nexport const transformContentTypesToModels = (contentTypes: LoadedContentTypeModel[]): Model[] => {\n const models: Model[] = [];\n\n contentTypes.forEach((contentType) => {\n assert(contentType.collectionName, 'Content type \"collectionName\" is required');\n assert(contentType.modelName, 'Content type \"modelName\" is required');\n assert(contentType.uid, 'Content type \"uid\" is required');\n\n // Add document id to content types\n // as it is not documented\n const documentIdAttribute: Record<string, Attribute.Any> =\n contentType.modelType === 'contentType'\n ? { documentId: { type: 'string', default: createDocumentId } }\n : {};\n\n // TODO: this needs to be combined with getReservedNames, we should not be maintaining two lists\n // Prevent user from creating a documentId attribute\n const reservedAttributeNames = ['document_id', id];\n Object.keys(contentType.attributes || {}).forEach((attributeName) => {\n const snakeCasedAttributeName = _.snakeCase(attributeName);\n if (reservedAttributeNames.includes(snakeCasedAttributeName)) {\n throw new Error(\n `The attribute \"${attributeName}\" is reserved and cannot be used in a model. Please rename \"${contentType.modelName}\" attribute \"${attributeName}\" to something else.`\n );\n }\n });\n\n if (hasComponentsOrDz(contentType)) {\n const compoLinkModel = createCompoLinkModel(contentType);\n models.push(compoLinkModel);\n }\n\n const model: Model = {\n uid: contentType.uid,\n singularName: contentType.modelName,\n tableName: identifiers.getTableName(contentType.collectionName),\n attributes: {\n [id]: {\n type: 'increments',\n },\n ...documentIdAttribute,\n ...transformAttributes(contentType),\n },\n };\n\n models.push(model);\n });\n\n return models;\n};\n"],"names":["utils","createId","assert","_"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"transform-content-types-to-models.js","sources":["../../src/utils/transform-content-types-to-models.ts"],"sourcesContent":["import { type Model, utils, type MetadataOptions } from '@strapi/database';\nimport type { Struct, Schema } from '@strapi/types';\nimport { createId } from '@paralleldrive/cuid2';\nimport assert from 'node:assert';\nimport _ from 'lodash/fp';\n\nconst { identifiers } = utils;\n\n/**\n * Because strapi/database models don't know about things like components or dynamic zones, we use this file to convert them\n * to a relations format that it recognizes\n *\n * Therefore we have to keep an additional set of helpers/extensions to the database naming methods\n *\n * IMPORTANT!\n * If we use short versions of anything, we MUST call getNameFromTokens directly; attempting to shorten them ourselves\n * prevents the unshortened name map from being filled properly, so for example it will think that the short name\n * 'collection4f3a_cmps' maps to the unshortened 'collectionname_cmps' rather than 'collectionname_components'\n * Therefore, we only use the identifiers helpers in cases where we do not do any of our own shortening\n */\n\nexport const getComponentJoinTableName = (collectionName: string, options: MetadataOptions) => {\n return identifiers.getNameFromTokens(\n [\n { name: collectionName, compressible: true },\n { name: 'components', shortName: 'cmps', compressible: false },\n ],\n options\n );\n};\n\nexport const getDzJoinTableName = (collectionName: string, options: MetadataOptions) => {\n return identifiers.getNameFromTokens(\n [\n { name: collectionName, compressible: true },\n { name: 'components', shortName: 'cmps', compressible: false },\n ],\n options\n );\n};\n\nexport const getComponentJoinColumnEntityName = (options: MetadataOptions) => {\n return identifiers.getNameFromTokens(\n [\n { name: 'entity', compressible: false },\n { name: 'id', compressible: false },\n ],\n options\n );\n};\n\nexport const getComponentJoinColumnInverseName = (options: MetadataOptions) => {\n return identifiers.getNameFromTokens(\n [\n { name: 'component', shortName: 'cmp', compressible: false },\n { name: 'id', compressible: false },\n ],\n options\n );\n};\n\nexport const getComponentTypeColumn = (options: MetadataOptions) => {\n return identifiers.getNameFromTokens([{ name: 'component_type', compressible: false }], options);\n};\n\nexport const getComponentFkIndexName = (contentType: string, options: MetadataOptions) => {\n return identifiers.getNameFromTokens(\n [\n { name: contentType, compressible: true },\n { name: 'entity', compressible: false },\n { name: 'fk', compressible: false },\n ],\n options\n );\n};\n\nconst { ID_COLUMN: id, FIELD_COLUMN: field, ORDER_COLUMN: order } = identifiers;\n\nexport type LoadedContentTypeModel = Struct.ContentTypeSchema &\n Required<Pick<Struct.ContentTypeSchema, 'collectionName' | 'uid' | 'modelName'>>;\n\n// Transforms an attribute (particularly for relation types) into the format that strapi/database accepts\nexport const transformAttribute = (\n name: string,\n attribute: Schema.Attribute.AnyAttribute,\n contentType: LoadedContentTypeModel,\n options: MetadataOptions\n) => {\n switch (attribute.type) {\n case 'media': {\n return {\n type: 'relation',\n relation: attribute.multiple === true ? 'morphMany' : 'morphOne',\n target: 'plugin::upload.file',\n morphBy: 'related',\n };\n }\n case 'component': {\n const joinTableName = getComponentJoinTableName(contentType.collectionName, options);\n const joinColumnEntityName = getComponentJoinColumnEntityName(options);\n const joinColumnInverseName = getComponentJoinColumnInverseName(options);\n const compTypeColumn = getComponentTypeColumn(options);\n return {\n type: 'relation',\n relation: attribute.repeatable === true ? 'oneToMany' : 'oneToOne',\n target: attribute.component,\n\n // We need the join table name to be deterministic,\n // We need to allow passing the join table name as an option\n joinTable: {\n name: joinTableName,\n joinColumn: {\n name: joinColumnEntityName,\n referencedColumn: id,\n },\n inverseJoinColumn: {\n name: joinColumnInverseName,\n referencedColumn: id,\n },\n on: {\n field: name,\n },\n orderColumnName: order,\n orderBy: {\n order: 'asc',\n },\n pivotColumns: [joinColumnEntityName, joinColumnInverseName, field, compTypeColumn],\n },\n };\n }\n case 'dynamiczone': {\n const joinTableName = getDzJoinTableName(contentType.collectionName, options);\n const joinColumnEntityName = getComponentJoinColumnEntityName(options);\n const joinColumnInverseName = getComponentJoinColumnInverseName(options);\n const compTypeColumn = getComponentTypeColumn(options);\n\n return {\n type: 'relation',\n relation: 'morphToMany',\n // TODO: handle restrictions at some point\n // target: attribute.components,\n joinTable: {\n name: joinTableName,\n joinColumn: {\n name: joinColumnEntityName,\n referencedColumn: id,\n },\n morphColumn: {\n idColumn: {\n name: joinColumnInverseName,\n referencedColumn: id,\n },\n typeColumn: {\n name: compTypeColumn,\n },\n typeField: '__component',\n },\n on: {\n field: name,\n },\n orderBy: {\n order: 'asc',\n },\n pivotColumns: [joinColumnEntityName, joinColumnInverseName, field, compTypeColumn],\n },\n };\n }\n default: {\n return attribute;\n }\n }\n};\n\nexport const transformAttributes = (\n contentType: LoadedContentTypeModel,\n options: MetadataOptions\n) => {\n return Object.keys(contentType.attributes! || {}).reduce((attrs, attrName) => {\n return {\n ...attrs,\n [attrName]: transformAttribute(\n attrName,\n contentType.attributes[attrName]!,\n contentType,\n options\n ),\n };\n }, {});\n};\n\nexport const hasComponentsOrDz = (\n contentType: LoadedContentTypeModel\n): contentType is LoadedContentTypeModel & { type: 'dynamiczone' | 'component' } => {\n return Object.values(contentType.attributes || {}).some(\n (({ type }: { type: string }) => type === 'dynamiczone' || type === 'component') as any\n );\n};\n\nexport const createDocumentId = createId;\n\nconst createCompoLinkModel = (\n contentType: LoadedContentTypeModel,\n options: MetadataOptions\n): Model => {\n const name = getComponentJoinTableName(contentType.collectionName, options);\n\n const entityId = getComponentJoinColumnEntityName(options);\n const componentId = getComponentJoinColumnInverseName(options);\n const compTypeColumn = getComponentTypeColumn(options);\n const fkIndex = getComponentFkIndexName(contentType.collectionName, options);\n\n return {\n // TODO: make sure there can't be any conflicts with a prefix\n singularName: name,\n uid: name,\n tableName: name,\n attributes: {\n [id]: {\n type: 'increments',\n },\n [entityId]: {\n type: 'integer',\n column: {\n unsigned: true,\n },\n },\n [componentId]: {\n type: 'integer',\n column: {\n unsigned: true,\n },\n },\n [compTypeColumn]: {\n type: 'string',\n },\n [field]: {\n type: 'string',\n },\n [order]: {\n type: 'float',\n column: {\n unsigned: true,\n defaultTo: null,\n },\n },\n },\n indexes: [\n {\n name: identifiers.getIndexName([contentType.collectionName, field], options),\n columns: [field],\n },\n {\n name: identifiers.getIndexName([contentType.collectionName, compTypeColumn], options),\n columns: [compTypeColumn],\n },\n {\n name: fkIndex,\n columns: [entityId],\n },\n {\n // NOTE: since we don't include attribute names, we need to be careful not to create another unique index\n name: identifiers.getUniqueIndexName([contentType.collectionName], options),\n columns: [entityId, componentId, field, compTypeColumn],\n type: 'unique',\n },\n ],\n foreignKeys: [\n {\n name: fkIndex,\n columns: [entityId],\n referencedColumns: [id],\n referencedTable: identifiers.getTableName(contentType.collectionName, options),\n onDelete: 'CASCADE',\n },\n ],\n };\n};\n\nexport const transformContentTypesToModels = (\n contentTypes: LoadedContentTypeModel[],\n options: MetadataOptions\n): Model[] => {\n const models: Model[] = [];\n\n contentTypes.forEach((contentType) => {\n assert(contentType.collectionName, 'Content type \"collectionName\" is required');\n assert(contentType.modelName, 'Content type \"modelName\" is required');\n assert(contentType.uid, 'Content type \"uid\" is required');\n\n // Add document id to content types\n // as it is not documented\n const documentIdAttribute: Record<string, Schema.Attribute.AnyAttribute> =\n contentType.modelType === 'contentType'\n ? { documentId: { type: 'string', default: createDocumentId } }\n : {};\n\n // TODO: this needs to be combined with getReservedNames, we should not be maintaining two lists\n // Prevent user from creating a documentId attribute\n const reservedAttributeNames = ['document_id', id];\n Object.keys(contentType.attributes || {}).forEach((attributeName) => {\n const snakeCasedAttributeName = _.snakeCase(attributeName);\n if (reservedAttributeNames.includes(snakeCasedAttributeName)) {\n throw new Error(\n `The attribute \"${attributeName}\" is reserved and cannot be used in a model. Please rename \"${contentType.modelName}\" attribute \"${attributeName}\" to something else.`\n );\n }\n });\n\n if (hasComponentsOrDz(contentType)) {\n const compoLinkModel = createCompoLinkModel(contentType, options);\n models.push(compoLinkModel);\n }\n\n const model: Model = {\n uid: contentType.uid,\n singularName: contentType.modelName,\n tableName: contentType.collectionName, // This gets shortened in metadata.loadModels(), so we don't shorten here or it will happen twice\n attributes: {\n [id]: {\n type: 'increments',\n },\n ...documentIdAttribute,\n ...transformAttributes(contentType, options),\n },\n };\n\n models.push(model);\n });\n\n return models;\n};\n"],"names":["utils","createId","assert","_"],"mappings":"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"}
|
|
@@ -3,15 +3,57 @@ import { createId } from "@paralleldrive/cuid2";
|
|
|
3
3
|
import assert from "node:assert";
|
|
4
4
|
import _ from "lodash/fp";
|
|
5
5
|
const { identifiers } = utils;
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
6
|
+
const getComponentJoinTableName = (collectionName, options) => {
|
|
7
|
+
return identifiers.getNameFromTokens(
|
|
8
|
+
[
|
|
9
|
+
{ name: collectionName, compressible: true },
|
|
10
|
+
{ name: "components", shortName: "cmps", compressible: false }
|
|
11
|
+
],
|
|
12
|
+
options
|
|
13
|
+
);
|
|
14
|
+
};
|
|
15
|
+
const getDzJoinTableName = (collectionName, options) => {
|
|
16
|
+
return identifiers.getNameFromTokens(
|
|
17
|
+
[
|
|
18
|
+
{ name: collectionName, compressible: true },
|
|
19
|
+
{ name: "components", shortName: "cmps", compressible: false }
|
|
20
|
+
],
|
|
21
|
+
options
|
|
22
|
+
);
|
|
23
|
+
};
|
|
24
|
+
const getComponentJoinColumnEntityName = (options) => {
|
|
25
|
+
return identifiers.getNameFromTokens(
|
|
26
|
+
[
|
|
27
|
+
{ name: "entity", compressible: false },
|
|
28
|
+
{ name: "id", compressible: false }
|
|
29
|
+
],
|
|
30
|
+
options
|
|
31
|
+
);
|
|
32
|
+
};
|
|
33
|
+
const getComponentJoinColumnInverseName = (options) => {
|
|
34
|
+
return identifiers.getNameFromTokens(
|
|
35
|
+
[
|
|
36
|
+
{ name: "component", shortName: "cmp", compressible: false },
|
|
37
|
+
{ name: "id", compressible: false }
|
|
38
|
+
],
|
|
39
|
+
options
|
|
40
|
+
);
|
|
41
|
+
};
|
|
42
|
+
const getComponentTypeColumn = (options) => {
|
|
43
|
+
return identifiers.getNameFromTokens([{ name: "component_type", compressible: false }], options);
|
|
44
|
+
};
|
|
45
|
+
const getComponentFkIndexName = (contentType, options) => {
|
|
46
|
+
return identifiers.getNameFromTokens(
|
|
47
|
+
[
|
|
48
|
+
{ name: contentType, compressible: true },
|
|
49
|
+
{ name: "entity", compressible: false },
|
|
50
|
+
{ name: "fk", compressible: false }
|
|
51
|
+
],
|
|
52
|
+
options
|
|
53
|
+
);
|
|
54
|
+
};
|
|
13
55
|
const { ID_COLUMN: id, FIELD_COLUMN: field, ORDER_COLUMN: order } = identifiers;
|
|
14
|
-
const transformAttribute = (name, attribute, contentType) => {
|
|
56
|
+
const transformAttribute = (name, attribute, contentType, options) => {
|
|
15
57
|
switch (attribute.type) {
|
|
16
58
|
case "media": {
|
|
17
59
|
return {
|
|
@@ -22,11 +64,10 @@ const transformAttribute = (name, attribute, contentType) => {
|
|
|
22
64
|
};
|
|
23
65
|
}
|
|
24
66
|
case "component": {
|
|
25
|
-
const joinTableName = getComponentJoinTableName(contentType.collectionName);
|
|
26
|
-
const joinColumnEntityName =
|
|
27
|
-
const joinColumnInverseName =
|
|
28
|
-
|
|
29
|
-
);
|
|
67
|
+
const joinTableName = getComponentJoinTableName(contentType.collectionName, options);
|
|
68
|
+
const joinColumnEntityName = getComponentJoinColumnEntityName(options);
|
|
69
|
+
const joinColumnInverseName = getComponentJoinColumnInverseName(options);
|
|
70
|
+
const compTypeColumn = getComponentTypeColumn(options);
|
|
30
71
|
return {
|
|
31
72
|
type: "relation",
|
|
32
73
|
relation: attribute.repeatable === true ? "oneToMany" : "oneToOne",
|
|
@@ -50,16 +91,15 @@ const transformAttribute = (name, attribute, contentType) => {
|
|
|
50
91
|
orderBy: {
|
|
51
92
|
order: "asc"
|
|
52
93
|
},
|
|
53
|
-
pivotColumns: [joinColumnEntityName, joinColumnInverseName, field,
|
|
94
|
+
pivotColumns: [joinColumnEntityName, joinColumnInverseName, field, compTypeColumn]
|
|
54
95
|
}
|
|
55
96
|
};
|
|
56
97
|
}
|
|
57
98
|
case "dynamiczone": {
|
|
58
|
-
const joinTableName = getDzJoinTableName(contentType.collectionName);
|
|
59
|
-
const joinColumnEntityName =
|
|
60
|
-
const joinColumnInverseName =
|
|
61
|
-
|
|
62
|
-
);
|
|
99
|
+
const joinTableName = getDzJoinTableName(contentType.collectionName, options);
|
|
100
|
+
const joinColumnEntityName = getComponentJoinColumnEntityName(options);
|
|
101
|
+
const joinColumnInverseName = getComponentJoinColumnInverseName(options);
|
|
102
|
+
const compTypeColumn = getComponentTypeColumn(options);
|
|
63
103
|
return {
|
|
64
104
|
type: "relation",
|
|
65
105
|
relation: "morphToMany",
|
|
@@ -77,7 +117,7 @@ const transformAttribute = (name, attribute, contentType) => {
|
|
|
77
117
|
referencedColumn: id
|
|
78
118
|
},
|
|
79
119
|
typeColumn: {
|
|
80
|
-
name:
|
|
120
|
+
name: compTypeColumn
|
|
81
121
|
},
|
|
82
122
|
typeField: "__component"
|
|
83
123
|
},
|
|
@@ -87,7 +127,7 @@ const transformAttribute = (name, attribute, contentType) => {
|
|
|
87
127
|
orderBy: {
|
|
88
128
|
order: "asc"
|
|
89
129
|
},
|
|
90
|
-
pivotColumns: [joinColumnEntityName, joinColumnInverseName, field,
|
|
130
|
+
pivotColumns: [joinColumnEntityName, joinColumnInverseName, field, compTypeColumn]
|
|
91
131
|
}
|
|
92
132
|
};
|
|
93
133
|
}
|
|
@@ -96,11 +136,16 @@ const transformAttribute = (name, attribute, contentType) => {
|
|
|
96
136
|
}
|
|
97
137
|
}
|
|
98
138
|
};
|
|
99
|
-
const transformAttributes = (contentType) => {
|
|
139
|
+
const transformAttributes = (contentType, options) => {
|
|
100
140
|
return Object.keys(contentType.attributes || {}).reduce((attrs, attrName) => {
|
|
101
141
|
return {
|
|
102
142
|
...attrs,
|
|
103
|
-
[attrName]: transformAttribute(
|
|
143
|
+
[attrName]: transformAttribute(
|
|
144
|
+
attrName,
|
|
145
|
+
contentType.attributes[attrName],
|
|
146
|
+
contentType,
|
|
147
|
+
options
|
|
148
|
+
)
|
|
104
149
|
};
|
|
105
150
|
}, {});
|
|
106
151
|
};
|
|
@@ -110,11 +155,12 @@ const hasComponentsOrDz = (contentType) => {
|
|
|
110
155
|
);
|
|
111
156
|
};
|
|
112
157
|
const createDocumentId = createId;
|
|
113
|
-
const createCompoLinkModel = (contentType) => {
|
|
114
|
-
const name = getComponentJoinTableName(contentType.collectionName);
|
|
115
|
-
const entityId =
|
|
116
|
-
const componentId =
|
|
117
|
-
const
|
|
158
|
+
const createCompoLinkModel = (contentType, options) => {
|
|
159
|
+
const name = getComponentJoinTableName(contentType.collectionName, options);
|
|
160
|
+
const entityId = getComponentJoinColumnEntityName(options);
|
|
161
|
+
const componentId = getComponentJoinColumnInverseName(options);
|
|
162
|
+
const compTypeColumn = getComponentTypeColumn(options);
|
|
163
|
+
const fkIndex = getComponentFkIndexName(contentType.collectionName, options);
|
|
118
164
|
return {
|
|
119
165
|
// TODO: make sure there can't be any conflicts with a prefix
|
|
120
166
|
singularName: name,
|
|
@@ -136,7 +182,7 @@ const createCompoLinkModel = (contentType) => {
|
|
|
136
182
|
unsigned: true
|
|
137
183
|
}
|
|
138
184
|
},
|
|
139
|
-
[
|
|
185
|
+
[compTypeColumn]: {
|
|
140
186
|
type: "string"
|
|
141
187
|
},
|
|
142
188
|
[field]: {
|
|
@@ -152,12 +198,12 @@ const createCompoLinkModel = (contentType) => {
|
|
|
152
198
|
},
|
|
153
199
|
indexes: [
|
|
154
200
|
{
|
|
155
|
-
name: identifiers.getIndexName([contentType.collectionName, field]),
|
|
201
|
+
name: identifiers.getIndexName([contentType.collectionName, field], options),
|
|
156
202
|
columns: [field]
|
|
157
203
|
},
|
|
158
204
|
{
|
|
159
|
-
name: identifiers.getIndexName([contentType.collectionName,
|
|
160
|
-
columns: [
|
|
205
|
+
name: identifiers.getIndexName([contentType.collectionName, compTypeColumn], options),
|
|
206
|
+
columns: [compTypeColumn]
|
|
161
207
|
},
|
|
162
208
|
{
|
|
163
209
|
name: fkIndex,
|
|
@@ -165,8 +211,8 @@ const createCompoLinkModel = (contentType) => {
|
|
|
165
211
|
},
|
|
166
212
|
{
|
|
167
213
|
// NOTE: since we don't include attribute names, we need to be careful not to create another unique index
|
|
168
|
-
name: identifiers.getUniqueIndexName([contentType.collectionName]),
|
|
169
|
-
columns: [entityId, componentId, field,
|
|
214
|
+
name: identifiers.getUniqueIndexName([contentType.collectionName], options),
|
|
215
|
+
columns: [entityId, componentId, field, compTypeColumn],
|
|
170
216
|
type: "unique"
|
|
171
217
|
}
|
|
172
218
|
],
|
|
@@ -175,13 +221,13 @@ const createCompoLinkModel = (contentType) => {
|
|
|
175
221
|
name: fkIndex,
|
|
176
222
|
columns: [entityId],
|
|
177
223
|
referencedColumns: [id],
|
|
178
|
-
referencedTable: identifiers.getTableName(contentType.collectionName),
|
|
224
|
+
referencedTable: identifiers.getTableName(contentType.collectionName, options),
|
|
179
225
|
onDelete: "CASCADE"
|
|
180
226
|
}
|
|
181
227
|
]
|
|
182
228
|
};
|
|
183
229
|
};
|
|
184
|
-
const transformContentTypesToModels = (contentTypes) => {
|
|
230
|
+
const transformContentTypesToModels = (contentTypes, options) => {
|
|
185
231
|
const models = [];
|
|
186
232
|
contentTypes.forEach((contentType) => {
|
|
187
233
|
assert(contentType.collectionName, 'Content type "collectionName" is required');
|
|
@@ -198,19 +244,20 @@ const transformContentTypesToModels = (contentTypes) => {
|
|
|
198
244
|
}
|
|
199
245
|
});
|
|
200
246
|
if (hasComponentsOrDz(contentType)) {
|
|
201
|
-
const compoLinkModel = createCompoLinkModel(contentType);
|
|
247
|
+
const compoLinkModel = createCompoLinkModel(contentType, options);
|
|
202
248
|
models.push(compoLinkModel);
|
|
203
249
|
}
|
|
204
250
|
const model = {
|
|
205
251
|
uid: contentType.uid,
|
|
206
252
|
singularName: contentType.modelName,
|
|
207
|
-
tableName:
|
|
253
|
+
tableName: contentType.collectionName,
|
|
254
|
+
// This gets shortened in metadata.loadModels(), so we don't shorten here or it will happen twice
|
|
208
255
|
attributes: {
|
|
209
256
|
[id]: {
|
|
210
257
|
type: "increments"
|
|
211
258
|
},
|
|
212
259
|
...documentIdAttribute,
|
|
213
|
-
...transformAttributes(contentType)
|
|
260
|
+
...transformAttributes(contentType, options)
|
|
214
261
|
}
|
|
215
262
|
};
|
|
216
263
|
models.push(model);
|
|
@@ -218,13 +265,12 @@ const transformContentTypesToModels = (contentTypes) => {
|
|
|
218
265
|
return models;
|
|
219
266
|
};
|
|
220
267
|
export {
|
|
221
|
-
COMPONENT_INVERSE_COLUMN_NAME,
|
|
222
|
-
COMPONENT_JOIN_TABLE_SUFFIX,
|
|
223
|
-
COMPONENT_TYPE_COLUMN,
|
|
224
|
-
DZ_JOIN_TABLE_SUFFIX,
|
|
225
|
-
ENTITY,
|
|
226
268
|
createDocumentId,
|
|
269
|
+
getComponentFkIndexName,
|
|
270
|
+
getComponentJoinColumnEntityName,
|
|
271
|
+
getComponentJoinColumnInverseName,
|
|
227
272
|
getComponentJoinTableName,
|
|
273
|
+
getComponentTypeColumn,
|
|
228
274
|
getDzJoinTableName,
|
|
229
275
|
hasComponentsOrDz,
|
|
230
276
|
transformAttribute,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transform-content-types-to-models.mjs","sources":["../../src/utils/transform-content-types-to-models.ts"],"sourcesContent":["import { type Model, utils } from '@strapi/database';\nimport { Schema, Attribute } from '@strapi/types';\nimport { createId } from '@paralleldrive/cuid2';\nimport assert from 'node:assert';\nimport _ from 'lodash/fp';\n\nconst { identifiers } = utils;\n\n/**\n * Because strapi/database models don't know about things like components or dynamic zones, we use this file to convert them\n * to a relations format that it recognizes\n *\n * Therefore we have to keep an additional set of helpers/extensions to the database naming methods\n */\n\nexport const COMPONENT_JOIN_TABLE_SUFFIX = 'components';\nexport const DZ_JOIN_TABLE_SUFFIX = 'components';\nexport const COMPONENT_INVERSE_COLUMN_NAME = 'component';\nexport const COMPONENT_TYPE_COLUMN = 'component_type';\nexport const ENTITY = 'entity';\n\nexport const getComponentJoinTableName = (collectionName: string) =>\n identifiers.getTableName(collectionName, { suffix: COMPONENT_JOIN_TABLE_SUFFIX });\n\nexport const getDzJoinTableName = (collectionName: string) =>\n identifiers.getTableName(collectionName, { suffix: DZ_JOIN_TABLE_SUFFIX });\n\nconst { ID_COLUMN: id, FIELD_COLUMN: field, ORDER_COLUMN: order } = identifiers;\n\nexport type LoadedContentTypeModel = Schema.ContentType &\n Required<Pick<Schema.ContentType, 'collectionName' | 'uid' | 'modelName'>>;\n\n// Transforms an attribute (particularly for relation types) into the format that strapi/database accepts\nexport const transformAttribute = (\n name: string,\n attribute: Attribute.Any,\n contentType: LoadedContentTypeModel\n) => {\n switch (attribute.type) {\n case 'media': {\n return {\n type: 'relation',\n relation: attribute.multiple === true ? 'morphMany' : 'morphOne',\n target: 'plugin::upload.file',\n morphBy: 'related',\n };\n }\n case 'component': {\n const joinTableName = getComponentJoinTableName(contentType.collectionName);\n const joinColumnEntityName = identifiers.getJoinColumnAttributeIdName(ENTITY);\n const joinColumnInverseName = identifiers.getJoinColumnAttributeIdName(\n COMPONENT_INVERSE_COLUMN_NAME\n );\n\n return {\n type: 'relation',\n relation: attribute.repeatable === true ? 'oneToMany' : 'oneToOne',\n target: attribute.component,\n\n // We need the join table name to be deterministic,\n // We need to allow passing the join table name as an option\n joinTable: {\n name: joinTableName,\n joinColumn: {\n name: joinColumnEntityName,\n referencedColumn: id,\n },\n inverseJoinColumn: {\n name: joinColumnInverseName,\n referencedColumn: id,\n },\n on: {\n field: name,\n },\n orderColumnName: order,\n orderBy: {\n order: 'asc',\n },\n pivotColumns: [joinColumnEntityName, joinColumnInverseName, field, COMPONENT_TYPE_COLUMN],\n },\n };\n }\n case 'dynamiczone': {\n const joinTableName = getDzJoinTableName(contentType.collectionName);\n const joinColumnEntityName = identifiers.getJoinColumnAttributeIdName(ENTITY);\n const joinColumnInverseName = identifiers.getJoinColumnAttributeIdName(\n COMPONENT_INVERSE_COLUMN_NAME\n );\n\n return {\n type: 'relation',\n relation: 'morphToMany',\n // TODO: handle restrictions at some point\n // target: attribute.components,\n joinTable: {\n name: joinTableName,\n joinColumn: {\n name: joinColumnEntityName,\n referencedColumn: id,\n },\n morphColumn: {\n idColumn: {\n name: joinColumnInverseName,\n referencedColumn: id,\n },\n typeColumn: {\n name: COMPONENT_TYPE_COLUMN,\n },\n typeField: '__component',\n },\n on: {\n field: name,\n },\n orderBy: {\n order: 'asc',\n },\n pivotColumns: [joinColumnEntityName, joinColumnInverseName, field, COMPONENT_TYPE_COLUMN],\n },\n };\n }\n default: {\n return attribute;\n }\n }\n};\n\nexport const transformAttributes = (contentType: LoadedContentTypeModel) => {\n return Object.keys(contentType.attributes! || {}).reduce((attrs, attrName) => {\n return {\n ...attrs,\n [attrName]: transformAttribute(attrName, contentType.attributes[attrName]!, contentType),\n };\n }, {});\n};\n\nexport const hasComponentsOrDz = (\n contentType: LoadedContentTypeModel\n): contentType is LoadedContentTypeModel & { type: 'dynamiczone' | 'component' } => {\n return Object.values(contentType.attributes || {}).some(\n ({ type }) => type === 'dynamiczone' || type === 'component'\n );\n};\n\nexport const createDocumentId = createId;\n\n// Creates the\nconst createCompoLinkModel = (contentType: LoadedContentTypeModel): Model => {\n const name = getComponentJoinTableName(contentType.collectionName);\n\n const entityId = identifiers.getJoinColumnAttributeIdName(ENTITY);\n const componentId = identifiers.getJoinColumnAttributeIdName(COMPONENT_INVERSE_COLUMN_NAME);\n const fkIndex = identifiers.getFkIndexName([contentType.collectionName, ENTITY]);\n\n return {\n // TODO: make sure there can't be any conflicts with a prefix\n singularName: name,\n uid: name,\n tableName: name,\n attributes: {\n [id]: {\n type: 'increments',\n },\n [entityId]: {\n type: 'integer',\n column: {\n unsigned: true,\n },\n },\n [componentId]: {\n type: 'integer',\n column: {\n unsigned: true,\n },\n },\n [COMPONENT_TYPE_COLUMN]: {\n type: 'string',\n },\n [field]: {\n type: 'string',\n },\n [order]: {\n type: 'float',\n column: {\n unsigned: true,\n defaultTo: null,\n },\n },\n },\n indexes: [\n {\n name: identifiers.getIndexName([contentType.collectionName, field]),\n columns: [field],\n },\n {\n name: identifiers.getIndexName([contentType.collectionName, COMPONENT_TYPE_COLUMN]),\n columns: [COMPONENT_TYPE_COLUMN],\n },\n {\n name: fkIndex,\n columns: [entityId],\n },\n {\n // NOTE: since we don't include attribute names, we need to be careful not to create another unique index\n name: identifiers.getUniqueIndexName([contentType.collectionName]),\n columns: [entityId, componentId, field, COMPONENT_TYPE_COLUMN],\n type: 'unique',\n },\n ],\n foreignKeys: [\n {\n name: fkIndex,\n columns: [entityId],\n referencedColumns: [id],\n referencedTable: identifiers.getTableName(contentType.collectionName),\n onDelete: 'CASCADE',\n },\n ],\n };\n};\n\nexport const transformContentTypesToModels = (contentTypes: LoadedContentTypeModel[]): Model[] => {\n const models: Model[] = [];\n\n contentTypes.forEach((contentType) => {\n assert(contentType.collectionName, 'Content type \"collectionName\" is required');\n assert(contentType.modelName, 'Content type \"modelName\" is required');\n assert(contentType.uid, 'Content type \"uid\" is required');\n\n // Add document id to content types\n // as it is not documented\n const documentIdAttribute: Record<string, Attribute.Any> =\n contentType.modelType === 'contentType'\n ? { documentId: { type: 'string', default: createDocumentId } }\n : {};\n\n // TODO: this needs to be combined with getReservedNames, we should not be maintaining two lists\n // Prevent user from creating a documentId attribute\n const reservedAttributeNames = ['document_id', id];\n Object.keys(contentType.attributes || {}).forEach((attributeName) => {\n const snakeCasedAttributeName = _.snakeCase(attributeName);\n if (reservedAttributeNames.includes(snakeCasedAttributeName)) {\n throw new Error(\n `The attribute \"${attributeName}\" is reserved and cannot be used in a model. Please rename \"${contentType.modelName}\" attribute \"${attributeName}\" to something else.`\n );\n }\n });\n\n if (hasComponentsOrDz(contentType)) {\n const compoLinkModel = createCompoLinkModel(contentType);\n models.push(compoLinkModel);\n }\n\n const model: Model = {\n uid: contentType.uid,\n singularName: contentType.modelName,\n tableName: identifiers.getTableName(contentType.collectionName),\n attributes: {\n [id]: {\n type: 'increments',\n },\n ...documentIdAttribute,\n ...transformAttributes(contentType),\n },\n };\n\n models.push(model);\n });\n\n return models;\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"transform-content-types-to-models.mjs","sources":["../../src/utils/transform-content-types-to-models.ts"],"sourcesContent":["import { type Model, utils, type MetadataOptions } from '@strapi/database';\nimport type { Struct, Schema } from '@strapi/types';\nimport { createId } from '@paralleldrive/cuid2';\nimport assert from 'node:assert';\nimport _ from 'lodash/fp';\n\nconst { identifiers } = utils;\n\n/**\n * Because strapi/database models don't know about things like components or dynamic zones, we use this file to convert them\n * to a relations format that it recognizes\n *\n * Therefore we have to keep an additional set of helpers/extensions to the database naming methods\n *\n * IMPORTANT!\n * If we use short versions of anything, we MUST call getNameFromTokens directly; attempting to shorten them ourselves\n * prevents the unshortened name map from being filled properly, so for example it will think that the short name\n * 'collection4f3a_cmps' maps to the unshortened 'collectionname_cmps' rather than 'collectionname_components'\n * Therefore, we only use the identifiers helpers in cases where we do not do any of our own shortening\n */\n\nexport const getComponentJoinTableName = (collectionName: string, options: MetadataOptions) => {\n return identifiers.getNameFromTokens(\n [\n { name: collectionName, compressible: true },\n { name: 'components', shortName: 'cmps', compressible: false },\n ],\n options\n );\n};\n\nexport const getDzJoinTableName = (collectionName: string, options: MetadataOptions) => {\n return identifiers.getNameFromTokens(\n [\n { name: collectionName, compressible: true },\n { name: 'components', shortName: 'cmps', compressible: false },\n ],\n options\n );\n};\n\nexport const getComponentJoinColumnEntityName = (options: MetadataOptions) => {\n return identifiers.getNameFromTokens(\n [\n { name: 'entity', compressible: false },\n { name: 'id', compressible: false },\n ],\n options\n );\n};\n\nexport const getComponentJoinColumnInverseName = (options: MetadataOptions) => {\n return identifiers.getNameFromTokens(\n [\n { name: 'component', shortName: 'cmp', compressible: false },\n { name: 'id', compressible: false },\n ],\n options\n );\n};\n\nexport const getComponentTypeColumn = (options: MetadataOptions) => {\n return identifiers.getNameFromTokens([{ name: 'component_type', compressible: false }], options);\n};\n\nexport const getComponentFkIndexName = (contentType: string, options: MetadataOptions) => {\n return identifiers.getNameFromTokens(\n [\n { name: contentType, compressible: true },\n { name: 'entity', compressible: false },\n { name: 'fk', compressible: false },\n ],\n options\n );\n};\n\nconst { ID_COLUMN: id, FIELD_COLUMN: field, ORDER_COLUMN: order } = identifiers;\n\nexport type LoadedContentTypeModel = Struct.ContentTypeSchema &\n Required<Pick<Struct.ContentTypeSchema, 'collectionName' | 'uid' | 'modelName'>>;\n\n// Transforms an attribute (particularly for relation types) into the format that strapi/database accepts\nexport const transformAttribute = (\n name: string,\n attribute: Schema.Attribute.AnyAttribute,\n contentType: LoadedContentTypeModel,\n options: MetadataOptions\n) => {\n switch (attribute.type) {\n case 'media': {\n return {\n type: 'relation',\n relation: attribute.multiple === true ? 'morphMany' : 'morphOne',\n target: 'plugin::upload.file',\n morphBy: 'related',\n };\n }\n case 'component': {\n const joinTableName = getComponentJoinTableName(contentType.collectionName, options);\n const joinColumnEntityName = getComponentJoinColumnEntityName(options);\n const joinColumnInverseName = getComponentJoinColumnInverseName(options);\n const compTypeColumn = getComponentTypeColumn(options);\n return {\n type: 'relation',\n relation: attribute.repeatable === true ? 'oneToMany' : 'oneToOne',\n target: attribute.component,\n\n // We need the join table name to be deterministic,\n // We need to allow passing the join table name as an option\n joinTable: {\n name: joinTableName,\n joinColumn: {\n name: joinColumnEntityName,\n referencedColumn: id,\n },\n inverseJoinColumn: {\n name: joinColumnInverseName,\n referencedColumn: id,\n },\n on: {\n field: name,\n },\n orderColumnName: order,\n orderBy: {\n order: 'asc',\n },\n pivotColumns: [joinColumnEntityName, joinColumnInverseName, field, compTypeColumn],\n },\n };\n }\n case 'dynamiczone': {\n const joinTableName = getDzJoinTableName(contentType.collectionName, options);\n const joinColumnEntityName = getComponentJoinColumnEntityName(options);\n const joinColumnInverseName = getComponentJoinColumnInverseName(options);\n const compTypeColumn = getComponentTypeColumn(options);\n\n return {\n type: 'relation',\n relation: 'morphToMany',\n // TODO: handle restrictions at some point\n // target: attribute.components,\n joinTable: {\n name: joinTableName,\n joinColumn: {\n name: joinColumnEntityName,\n referencedColumn: id,\n },\n morphColumn: {\n idColumn: {\n name: joinColumnInverseName,\n referencedColumn: id,\n },\n typeColumn: {\n name: compTypeColumn,\n },\n typeField: '__component',\n },\n on: {\n field: name,\n },\n orderBy: {\n order: 'asc',\n },\n pivotColumns: [joinColumnEntityName, joinColumnInverseName, field, compTypeColumn],\n },\n };\n }\n default: {\n return attribute;\n }\n }\n};\n\nexport const transformAttributes = (\n contentType: LoadedContentTypeModel,\n options: MetadataOptions\n) => {\n return Object.keys(contentType.attributes! || {}).reduce((attrs, attrName) => {\n return {\n ...attrs,\n [attrName]: transformAttribute(\n attrName,\n contentType.attributes[attrName]!,\n contentType,\n options\n ),\n };\n }, {});\n};\n\nexport const hasComponentsOrDz = (\n contentType: LoadedContentTypeModel\n): contentType is LoadedContentTypeModel & { type: 'dynamiczone' | 'component' } => {\n return Object.values(contentType.attributes || {}).some(\n (({ type }: { type: string }) => type === 'dynamiczone' || type === 'component') as any\n );\n};\n\nexport const createDocumentId = createId;\n\nconst createCompoLinkModel = (\n contentType: LoadedContentTypeModel,\n options: MetadataOptions\n): Model => {\n const name = getComponentJoinTableName(contentType.collectionName, options);\n\n const entityId = getComponentJoinColumnEntityName(options);\n const componentId = getComponentJoinColumnInverseName(options);\n const compTypeColumn = getComponentTypeColumn(options);\n const fkIndex = getComponentFkIndexName(contentType.collectionName, options);\n\n return {\n // TODO: make sure there can't be any conflicts with a prefix\n singularName: name,\n uid: name,\n tableName: name,\n attributes: {\n [id]: {\n type: 'increments',\n },\n [entityId]: {\n type: 'integer',\n column: {\n unsigned: true,\n },\n },\n [componentId]: {\n type: 'integer',\n column: {\n unsigned: true,\n },\n },\n [compTypeColumn]: {\n type: 'string',\n },\n [field]: {\n type: 'string',\n },\n [order]: {\n type: 'float',\n column: {\n unsigned: true,\n defaultTo: null,\n },\n },\n },\n indexes: [\n {\n name: identifiers.getIndexName([contentType.collectionName, field], options),\n columns: [field],\n },\n {\n name: identifiers.getIndexName([contentType.collectionName, compTypeColumn], options),\n columns: [compTypeColumn],\n },\n {\n name: fkIndex,\n columns: [entityId],\n },\n {\n // NOTE: since we don't include attribute names, we need to be careful not to create another unique index\n name: identifiers.getUniqueIndexName([contentType.collectionName], options),\n columns: [entityId, componentId, field, compTypeColumn],\n type: 'unique',\n },\n ],\n foreignKeys: [\n {\n name: fkIndex,\n columns: [entityId],\n referencedColumns: [id],\n referencedTable: identifiers.getTableName(contentType.collectionName, options),\n onDelete: 'CASCADE',\n },\n ],\n };\n};\n\nexport const transformContentTypesToModels = (\n contentTypes: LoadedContentTypeModel[],\n options: MetadataOptions\n): Model[] => {\n const models: Model[] = [];\n\n contentTypes.forEach((contentType) => {\n assert(contentType.collectionName, 'Content type \"collectionName\" is required');\n assert(contentType.modelName, 'Content type \"modelName\" is required');\n assert(contentType.uid, 'Content type \"uid\" is required');\n\n // Add document id to content types\n // as it is not documented\n const documentIdAttribute: Record<string, Schema.Attribute.AnyAttribute> =\n contentType.modelType === 'contentType'\n ? { documentId: { type: 'string', default: createDocumentId } }\n : {};\n\n // TODO: this needs to be combined with getReservedNames, we should not be maintaining two lists\n // Prevent user from creating a documentId attribute\n const reservedAttributeNames = ['document_id', id];\n Object.keys(contentType.attributes || {}).forEach((attributeName) => {\n const snakeCasedAttributeName = _.snakeCase(attributeName);\n if (reservedAttributeNames.includes(snakeCasedAttributeName)) {\n throw new Error(\n `The attribute \"${attributeName}\" is reserved and cannot be used in a model. Please rename \"${contentType.modelName}\" attribute \"${attributeName}\" to something else.`\n );\n }\n });\n\n if (hasComponentsOrDz(contentType)) {\n const compoLinkModel = createCompoLinkModel(contentType, options);\n models.push(compoLinkModel);\n }\n\n const model: Model = {\n uid: contentType.uid,\n singularName: contentType.modelName,\n tableName: contentType.collectionName, // This gets shortened in metadata.loadModels(), so we don't shorten here or it will happen twice\n attributes: {\n [id]: {\n type: 'increments',\n },\n ...documentIdAttribute,\n ...transformAttributes(contentType, options),\n },\n };\n\n models.push(model);\n });\n\n return models;\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export declare const createUpdateNotifier: (strapi: Strapi) => {
|
|
1
|
+
import type { Core } from '@strapi/types';
|
|
2
|
+
export declare const createUpdateNotifier: (strapi: Core.Strapi) => {
|
|
3
3
|
notify({ checkInterval, notifInterval }?: {
|
|
4
4
|
checkInterval?: number | undefined;
|
|
5
5
|
notifInterval?: number | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/update-notifier/index.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/update-notifier/index.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AA0B1C,eAAO,MAAM,oBAAoB,WAAY,KAAK,MAAM;;;;;CAqEvD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/utils/update-notifier/index.ts"],"sourcesContent":["import path from 'path';\nimport packageJson from 'package-json';\nimport Configstore from 'configstore';\nimport semver from 'semver';\nimport boxen from 'boxen';\nimport chalk from 'chalk';\nimport { env } from '@strapi/utils';\nimport type {
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/utils/update-notifier/index.ts"],"sourcesContent":["import path from 'path';\nimport packageJson from 'package-json';\nimport Configstore from 'configstore';\nimport semver from 'semver';\nimport boxen from 'boxen';\nimport chalk from 'chalk';\nimport { env } from '@strapi/utils';\nimport type { Core } from '@strapi/types';\n\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst pkg = require('../../../package.json');\n\nconst CHECK_INTERVAL = 1000 * 60 * 60 * 24 * 1; // 1 day\nconst NOTIF_INTERVAL = 1000 * 60 * 60 * 24 * 7; // 1 week\nconst boxenOptions: boxen.Options = {\n padding: 1,\n margin: 1,\n align: 'center',\n borderColor: 'yellow',\n borderStyle: 'round',\n};\n\nconst getUpdateMessage = (newVersion: string, currentVersion: string) => {\n const currentVersionLog = chalk.dim(currentVersion);\n const newVersionLog = chalk.green(newVersion);\n const releaseLink = chalk.bold('https://github.com/strapi/strapi/releases');\n\n return `\nA new version of Strapi is available ${currentVersionLog} → ${newVersionLog}\nCheck out the new releases at: ${releaseLink}\n`.trim();\n};\n\nexport const createUpdateNotifier = (strapi: Core.Strapi) => {\n let config: InstanceType<typeof Configstore>;\n\n try {\n config = new Configstore(\n pkg.name,\n {},\n { configPath: path.join(strapi.dirs.app.root, '.strapi-updater.json') }\n );\n } catch {\n // we don't have write access to the file system\n // we silence the error\n }\n\n const checkUpdate = async (checkInterval: number) => {\n const now = Date.now();\n const lastUpdateCheck = config.get('lastUpdateCheck') || 0;\n if (lastUpdateCheck + checkInterval > now) {\n return;\n }\n\n try {\n const res = await packageJson(pkg.name);\n if (res.version) {\n config.set('latest', res.version);\n config.set('lastUpdateCheck', now);\n }\n } catch {\n // silence error if offline\n }\n };\n\n const display = (notifInterval: number) => {\n const now = Date.now();\n const latestVersion = config.get('latest');\n const lastNotification = config.get('lastNotification') || 0;\n\n if (\n !process.stdout.isTTY ||\n lastNotification + notifInterval > now ||\n !semver.valid(latestVersion) ||\n !semver.valid(pkg.version) ||\n semver.lte(latestVersion, pkg.version)\n ) {\n return;\n }\n\n const message = boxen(getUpdateMessage(latestVersion, pkg.version), boxenOptions);\n config.set('lastNotification', now);\n console.log(message);\n };\n\n return {\n notify({ checkInterval = CHECK_INTERVAL, notifInterval = NOTIF_INTERVAL } = {}) {\n // TODO v6: Remove this warning\n if (env.bool('STRAPI_DISABLE_UPDATE_NOTIFICATION', false)) {\n strapi.log.warn(\n 'STRAPI_DISABLE_UPDATE_NOTIFICATION is no longer supported. Instead, set logger.updates.enabled to false in your server configuration.'\n );\n }\n\n if (!strapi.config.get('server.logger.updates.enabled') || !config) {\n return;\n }\n\n display(notifInterval);\n checkUpdate(checkInterval); // doesn't need to await\n },\n };\n};\n"],"names":["chalk","Configstore","path","packageJson","semver","boxen","env"],"mappings":";;;;;;;;;;;;;;;;AAUA,MAAM,MAAM,QAAQ,uBAAuB;AAE3C,MAAM,iBAAiB,MAAO,KAAK,KAAK,KAAK;AAC7C,MAAM,iBAAiB,MAAO,KAAK,KAAK,KAAK;AAC7C,MAAM,eAA8B;AAAA,EAClC,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,aAAa;AAAA,EACb,aAAa;AACf;AAEA,MAAM,mBAAmB,CAAC,YAAoB,mBAA2B;AACjE,QAAA,oBAAoBA,eAAAA,QAAM,IAAI,cAAc;AAC5C,QAAA,gBAAgBA,eAAAA,QAAM,MAAM,UAAU;AACtC,QAAA,cAAcA,eAAAA,QAAM,KAAK,2CAA2C;AAEnE,SAAA;AAAA,uCAC8B,iBAAiB,MAAM,aAAa;AAAA,iCAC1C,WAAW;AAAA,EAC1C,KAAK;AACP;AAEa,MAAA,uBAAuB,CAAC,WAAwB;AACvD,MAAA;AAEA,MAAA;AACF,aAAS,IAAIC,qBAAA;AAAA,MACX,IAAI;AAAA,MACJ,CAAC;AAAA,MACD,EAAE,YAAYC,cAAK,QAAA,KAAK,OAAO,KAAK,IAAI,MAAM,sBAAsB,EAAE;AAAA,IAAA;AAAA,EACxE,QACM;AAAA,EAGR;AAEM,QAAA,cAAc,OAAO,kBAA0B;AAC7C,UAAA,MAAM,KAAK;AACjB,UAAM,kBAAkB,OAAO,IAAI,iBAAiB,KAAK;AACrD,QAAA,kBAAkB,gBAAgB,KAAK;AACzC;AAAA,IACF;AAEI,QAAA;AACF,YAAM,MAAM,MAAMC,qBAAAA,QAAY,IAAI,IAAI;AACtC,UAAI,IAAI,SAAS;AACR,eAAA,IAAI,UAAU,IAAI,OAAO;AACzB,eAAA,IAAI,mBAAmB,GAAG;AAAA,MACnC;AAAA,IAAA,QACM;AAAA,IAER;AAAA,EAAA;AAGI,QAAA,UAAU,CAAC,kBAA0B;AACnC,UAAA,MAAM,KAAK;AACX,UAAA,gBAAgB,OAAO,IAAI,QAAQ;AACzC,UAAM,mBAAmB,OAAO,IAAI,kBAAkB,KAAK;AAGzD,QAAA,CAAC,QAAQ,OAAO,SAChB,mBAAmB,gBAAgB,OACnC,CAACC,wBAAO,MAAM,aAAa,KAC3B,CAACA,wBAAO,MAAM,IAAI,OAAO,KACzBA,wBAAO,IAAI,eAAe,IAAI,OAAO,GACrC;AACA;AAAA,IACF;AAEA,UAAM,UAAUC,eAAM,QAAA,iBAAiB,eAAe,IAAI,OAAO,GAAG,YAAY;AACzE,WAAA,IAAI,oBAAoB,GAAG;AAClC,YAAQ,IAAI,OAAO;AAAA,EAAA;AAGd,SAAA;AAAA,IACL,OAAO,EAAE,gBAAgB,gBAAgB,gBAAgB,eAAe,IAAI,IAAI;AAE9E,UAAIC,gBAAI,KAAK,sCAAsC,KAAK,GAAG;AACzD,eAAO,IAAI;AAAA,UACT;AAAA,QAAA;AAAA,MAEJ;AAEA,UAAI,CAAC,OAAO,OAAO,IAAI,+BAA+B,KAAK,CAAC,QAAQ;AAClE;AAAA,MACF;AAEA,cAAQ,aAAa;AACrB,kBAAY,aAAa;AAAA,IAC3B;AAAA,EAAA;AAEJ;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../src/utils/update-notifier/index.ts"],"sourcesContent":["import path from 'path';\nimport packageJson from 'package-json';\nimport Configstore from 'configstore';\nimport semver from 'semver';\nimport boxen from 'boxen';\nimport chalk from 'chalk';\nimport { env } from '@strapi/utils';\nimport type {
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../src/utils/update-notifier/index.ts"],"sourcesContent":["import path from 'path';\nimport packageJson from 'package-json';\nimport Configstore from 'configstore';\nimport semver from 'semver';\nimport boxen from 'boxen';\nimport chalk from 'chalk';\nimport { env } from '@strapi/utils';\nimport type { Core } from '@strapi/types';\n\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst pkg = require('../../../package.json');\n\nconst CHECK_INTERVAL = 1000 * 60 * 60 * 24 * 1; // 1 day\nconst NOTIF_INTERVAL = 1000 * 60 * 60 * 24 * 7; // 1 week\nconst boxenOptions: boxen.Options = {\n padding: 1,\n margin: 1,\n align: 'center',\n borderColor: 'yellow',\n borderStyle: 'round',\n};\n\nconst getUpdateMessage = (newVersion: string, currentVersion: string) => {\n const currentVersionLog = chalk.dim(currentVersion);\n const newVersionLog = chalk.green(newVersion);\n const releaseLink = chalk.bold('https://github.com/strapi/strapi/releases');\n\n return `\nA new version of Strapi is available ${currentVersionLog} → ${newVersionLog}\nCheck out the new releases at: ${releaseLink}\n`.trim();\n};\n\nexport const createUpdateNotifier = (strapi: Core.Strapi) => {\n let config: InstanceType<typeof Configstore>;\n\n try {\n config = new Configstore(\n pkg.name,\n {},\n { configPath: path.join(strapi.dirs.app.root, '.strapi-updater.json') }\n );\n } catch {\n // we don't have write access to the file system\n // we silence the error\n }\n\n const checkUpdate = async (checkInterval: number) => {\n const now = Date.now();\n const lastUpdateCheck = config.get('lastUpdateCheck') || 0;\n if (lastUpdateCheck + checkInterval > now) {\n return;\n }\n\n try {\n const res = await packageJson(pkg.name);\n if (res.version) {\n config.set('latest', res.version);\n config.set('lastUpdateCheck', now);\n }\n } catch {\n // silence error if offline\n }\n };\n\n const display = (notifInterval: number) => {\n const now = Date.now();\n const latestVersion = config.get('latest');\n const lastNotification = config.get('lastNotification') || 0;\n\n if (\n !process.stdout.isTTY ||\n lastNotification + notifInterval > now ||\n !semver.valid(latestVersion) ||\n !semver.valid(pkg.version) ||\n semver.lte(latestVersion, pkg.version)\n ) {\n return;\n }\n\n const message = boxen(getUpdateMessage(latestVersion, pkg.version), boxenOptions);\n config.set('lastNotification', now);\n console.log(message);\n };\n\n return {\n notify({ checkInterval = CHECK_INTERVAL, notifInterval = NOTIF_INTERVAL } = {}) {\n // TODO v6: Remove this warning\n if (env.bool('STRAPI_DISABLE_UPDATE_NOTIFICATION', false)) {\n strapi.log.warn(\n 'STRAPI_DISABLE_UPDATE_NOTIFICATION is no longer supported. Instead, set logger.updates.enabled to false in your server configuration.'\n );\n }\n\n if (!strapi.config.get('server.logger.updates.enabled') || !config) {\n return;\n }\n\n display(notifInterval);\n checkUpdate(checkInterval); // doesn't need to await\n },\n };\n};\n"],"names":[],"mappings":";;;;;;;AAUA,MAAM,MAAM,QAAQ,uBAAuB;AAE3C,MAAM,iBAAiB,MAAO,KAAK,KAAK,KAAK;AAC7C,MAAM,iBAAiB,MAAO,KAAK,KAAK,KAAK;AAC7C,MAAM,eAA8B;AAAA,EAClC,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,aAAa;AAAA,EACb,aAAa;AACf;AAEA,MAAM,mBAAmB,CAAC,YAAoB,mBAA2B;AACjE,QAAA,oBAAoB,MAAM,IAAI,cAAc;AAC5C,QAAA,gBAAgB,MAAM,MAAM,UAAU;AACtC,QAAA,cAAc,MAAM,KAAK,2CAA2C;AAEnE,SAAA;AAAA,uCAC8B,iBAAiB,MAAM,aAAa;AAAA,iCAC1C,WAAW;AAAA,EAC1C,KAAK;AACP;AAEa,MAAA,uBAAuB,CAAC,WAAwB;AACvD,MAAA;AAEA,MAAA;AACF,aAAS,IAAI;AAAA,MACX,IAAI;AAAA,MACJ,CAAC;AAAA,MACD,EAAE,YAAY,KAAK,KAAK,OAAO,KAAK,IAAI,MAAM,sBAAsB,EAAE;AAAA,IAAA;AAAA,EACxE,QACM;AAAA,EAGR;AAEM,QAAA,cAAc,OAAO,kBAA0B;AAC7C,UAAA,MAAM,KAAK;AACjB,UAAM,kBAAkB,OAAO,IAAI,iBAAiB,KAAK;AACrD,QAAA,kBAAkB,gBAAgB,KAAK;AACzC;AAAA,IACF;AAEI,QAAA;AACF,YAAM,MAAM,MAAM,YAAY,IAAI,IAAI;AACtC,UAAI,IAAI,SAAS;AACR,eAAA,IAAI,UAAU,IAAI,OAAO;AACzB,eAAA,IAAI,mBAAmB,GAAG;AAAA,MACnC;AAAA,IAAA,QACM;AAAA,IAER;AAAA,EAAA;AAGI,QAAA,UAAU,CAAC,kBAA0B;AACnC,UAAA,MAAM,KAAK;AACX,UAAA,gBAAgB,OAAO,IAAI,QAAQ;AACzC,UAAM,mBAAmB,OAAO,IAAI,kBAAkB,KAAK;AAGzD,QAAA,CAAC,QAAQ,OAAO,SAChB,mBAAmB,gBAAgB,OACnC,CAAC,OAAO,MAAM,aAAa,KAC3B,CAAC,OAAO,MAAM,IAAI,OAAO,KACzB,OAAO,IAAI,eAAe,IAAI,OAAO,GACrC;AACA;AAAA,IACF;AAEA,UAAM,UAAU,MAAM,iBAAiB,eAAe,IAAI,OAAO,GAAG,YAAY;AACzE,WAAA,IAAI,oBAAoB,GAAG;AAClC,YAAQ,IAAI,OAAO;AAAA,EAAA;AAGd,SAAA;AAAA,IACL,OAAO,EAAE,gBAAgB,gBAAgB,gBAAgB,eAAe,IAAI,IAAI;AAE9E,UAAI,IAAI,KAAK,sCAAsC,KAAK,GAAG;AACzD,eAAO,IAAI;AAAA,UACT;AAAA,QAAA;AAAA,MAEJ;AAEA,UAAI,CAAC,OAAO,OAAO,IAAI,+BAA+B,KAAK,CAAC,QAAQ;AAClE;AAAA,MACF;AAEA,cAAQ,aAAa;AACrB,kBAAY,aAAa;AAAA,IAC3B;AAAA,EAAA;AAEJ;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@strapi/core",
|
|
3
|
-
"version": "0.0.0-experimental.
|
|
3
|
+
"version": "0.0.0-experimental.80cf2c74a2003f3c0602abc81888dd9f36dc68a3",
|
|
4
4
|
"description": "Core of Strapi",
|
|
5
5
|
"homepage": "https://strapi.io",
|
|
6
6
|
"bugs": {
|
|
@@ -55,16 +55,16 @@
|
|
|
55
55
|
"@koa/cors": "3.4.3",
|
|
56
56
|
"@koa/router": "10.1.1",
|
|
57
57
|
"@paralleldrive/cuid2": "2.2.2",
|
|
58
|
-
"@strapi/admin": "0.0.0-experimental.
|
|
59
|
-
"@strapi/database": "0.0.0-experimental.
|
|
60
|
-
"@strapi/generate-new": "0.0.0-experimental.
|
|
61
|
-
"@strapi/generators": "0.0.0-experimental.
|
|
62
|
-
"@strapi/logger": "0.0.0-experimental.
|
|
63
|
-
"@strapi/pack-up": "0.0.0-experimental.
|
|
64
|
-
"@strapi/permissions": "0.0.0-experimental.
|
|
65
|
-
"@strapi/types": "0.0.0-experimental.
|
|
66
|
-
"@strapi/typescript-utils": "0.0.0-experimental.
|
|
67
|
-
"@strapi/utils": "0.0.0-experimental.
|
|
58
|
+
"@strapi/admin": "0.0.0-experimental.80cf2c74a2003f3c0602abc81888dd9f36dc68a3",
|
|
59
|
+
"@strapi/database": "0.0.0-experimental.80cf2c74a2003f3c0602abc81888dd9f36dc68a3",
|
|
60
|
+
"@strapi/generate-new": "0.0.0-experimental.80cf2c74a2003f3c0602abc81888dd9f36dc68a3",
|
|
61
|
+
"@strapi/generators": "0.0.0-experimental.80cf2c74a2003f3c0602abc81888dd9f36dc68a3",
|
|
62
|
+
"@strapi/logger": "0.0.0-experimental.80cf2c74a2003f3c0602abc81888dd9f36dc68a3",
|
|
63
|
+
"@strapi/pack-up": "0.0.0-experimental.80cf2c74a2003f3c0602abc81888dd9f36dc68a3",
|
|
64
|
+
"@strapi/permissions": "0.0.0-experimental.80cf2c74a2003f3c0602abc81888dd9f36dc68a3",
|
|
65
|
+
"@strapi/types": "0.0.0-experimental.80cf2c74a2003f3c0602abc81888dd9f36dc68a3",
|
|
66
|
+
"@strapi/typescript-utils": "0.0.0-experimental.80cf2c74a2003f3c0602abc81888dd9f36dc68a3",
|
|
67
|
+
"@strapi/utils": "0.0.0-experimental.80cf2c74a2003f3c0602abc81888dd9f36dc68a3",
|
|
68
68
|
"bcryptjs": "2.4.3",
|
|
69
69
|
"boxen": "5.1.2",
|
|
70
70
|
"chalk": "4.1.2",
|
|
@@ -119,16 +119,16 @@
|
|
|
119
119
|
"@types/koa__router": "12.0.0",
|
|
120
120
|
"@types/lodash": "^4.14.191",
|
|
121
121
|
"@types/mime-types": "2.1.1",
|
|
122
|
-
"@types/node": "18.
|
|
122
|
+
"@types/node": "18.19.24",
|
|
123
123
|
"@types/node-schedule": "2.1.0",
|
|
124
124
|
"@types/statuses": "2.0.1",
|
|
125
|
-
"eslint-config-custom": "0.0.0-experimental.
|
|
125
|
+
"eslint-config-custom": "0.0.0-experimental.80cf2c74a2003f3c0602abc81888dd9f36dc68a3",
|
|
126
126
|
"supertest": "6.3.3",
|
|
127
|
-
"tsconfig": "0.0.0-experimental.
|
|
127
|
+
"tsconfig": "0.0.0-experimental.80cf2c74a2003f3c0602abc81888dd9f36dc68a3"
|
|
128
128
|
},
|
|
129
129
|
"engines": {
|
|
130
130
|
"node": ">=18.0.0 <=20.x.x",
|
|
131
131
|
"npm": ">=6.0.0"
|
|
132
132
|
},
|
|
133
|
-
"gitHead": "
|
|
133
|
+
"gitHead": "80cf2c74a2003f3c0602abc81888dd9f36dc68a3"
|
|
134
134
|
}
|