@strapi/core 5.55.1 → 5.57.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 +1 -0
- package/dist/Strapi.d.ts.map +1 -1
- package/dist/Strapi.js +6 -3
- package/dist/Strapi.js.map +1 -1
- package/dist/Strapi.mjs +6 -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/index.js +4 -4
- package/dist/ee/index.js.map +1 -1
- package/dist/ee/index.mjs +3 -3
- package/dist/ee/index.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 +15 -15
- package/dist/package.json.mjs +15 -15
- 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/content-structure/index.js +1 -1
- package/dist/services/content-structure/index.js.map +1 -1
- package/dist/services/content-structure/index.mjs +1 -1
- package/dist/services/content-structure/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/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/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.js +6 -6
- 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 +3 -3
- 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/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 +15 -15
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core-store.js","sources":["../../src/services/core-store.ts"],"sourcesContent":["import { toString } from 'lodash
|
|
1
|
+
{"version":3,"file":"core-store.js","sources":["../../src/services/core-store.ts"],"sourcesContent":["import { toString } from 'lodash';\nimport type { Database, Model } from '@strapi/database';\n\nconst coreStoreModel: Model = {\n uid: 'strapi::core-store',\n singularName: 'strapi_core_store_settings',\n tableName: 'strapi_core_store_settings',\n attributes: {\n id: {\n type: 'increments',\n },\n key: {\n type: 'string',\n },\n value: {\n type: 'text',\n },\n type: {\n type: 'string',\n },\n environment: {\n type: 'string',\n },\n tag: {\n type: 'string',\n },\n },\n};\n\ntype SetParams = {\n key: string;\n value: unknown;\n type?: string;\n environment?: string;\n name?: string;\n tag?: string;\n};\n\ntype GetParams = {\n key: string;\n type?: string;\n environment?: string;\n name?: string;\n tag?: string;\n};\n\ntype Params = SetParams & GetParams;\n\ninterface CoreStore {\n (defaultParams: Partial<Params>): {\n get<T = unknown>(params: Partial<GetParams>): Promise<T>;\n set(params: Partial<SetParams>): Promise<void>;\n delete(params: Partial<GetParams>): Promise<void>;\n };\n get<T = unknown>(params: GetParams): Promise<T>;\n set(params: SetParams): Promise<void>;\n delete(params: GetParams): Promise<void>;\n}\n\nconst createCoreStore = ({ db }: { db: Database }) => {\n const mergeParams = (defaultParams: Partial<Params>, params: Params): Params => {\n return {\n ...defaultParams,\n ...params,\n };\n };\n\n const store: CoreStore = function createScopedCoreStore(defaultParams: Partial<Params>) {\n return {\n get: (params: Params) => store.get(mergeParams(defaultParams, params)),\n set: (params: Params) => store.set(mergeParams(defaultParams, params)),\n delete: (params: Params) => store.delete(mergeParams(defaultParams, params)),\n };\n };\n\n /**\n * Get value from the core store\n */\n store.get = async (params) => {\n const { key, type = 'core', environment, name, tag } = params;\n\n const prefix = `${type}${name ? `_${name}` : ''}`;\n\n const where = {\n key: `${prefix}_${key}`,\n environment: environment || null,\n tag: tag || null,\n };\n\n const data = await db.query('strapi::core-store').findOne({ where });\n\n if (!data) {\n return null;\n }\n\n if (\n data.type === 'object' ||\n data.type === 'array' ||\n data.type === 'boolean' ||\n data.type === 'string'\n ) {\n try {\n return JSON.parse(data.value);\n } catch {\n return new Date(data.value);\n }\n } else if (data.type === 'number') {\n return Number(data.value);\n } else {\n return null;\n }\n };\n\n /**\n * Set value in the core store\n * @param {Object} params\n * @returns {*}\n */\n store.set = async (params) => {\n const { key, value, type, environment, name, tag } = params;\n\n const prefix = `${type}${name ? `_${name}` : ''}`;\n\n const where = {\n key: `${prefix}_${key}`,\n environment: environment || null,\n tag: tag || null,\n };\n\n const data = await db.query('strapi::core-store').findOne({ where });\n\n if (data) {\n return db.query('strapi::core-store').update({\n where: { id: data.id },\n data: {\n value: JSON.stringify(value) || toString(value),\n type: typeof value,\n },\n });\n }\n\n return db.query('strapi::core-store').create({\n data: {\n ...where,\n value: JSON.stringify(value) || toString(value),\n type: typeof value,\n },\n });\n };\n\n /**\n * Deletes a value from the core store\n * @param {Object} params\n * @returns {*}\n */\n store.delete = async (params) => {\n const { key, environment, type, name, tag } = params;\n\n const prefix = `${type}${name ? `_${name}` : ''}`;\n\n const where = {\n key: `${prefix}_${key}`,\n environment: environment || null,\n tag: tag || null,\n };\n\n return db.query('strapi::core-store').delete({ where });\n };\n\n return store;\n};\n\nexport { coreStoreModel, createCoreStore };\n"],"names":["coreStoreModel","uid","singularName","tableName","attributes","id","type","key","value","environment","tag","createCoreStore","db","mergeParams","defaultParams","params","store","createScopedCoreStore","get","set","delete","name","prefix","where","data","query","findOne","JSON","parse","Date","Number","update","stringify","toString","create"],"mappings":";;;;AAGA,MAAMA,cAAAA,GAAwB;IAC5BC,GAAAA,EAAK,oBAAA;IACLC,YAAAA,EAAc,4BAAA;IACdC,SAAAA,EAAW,4BAAA;IACXC,UAAAA,EAAY;QACVC,EAAAA,EAAI;YACFC,IAAAA,EAAM;AACR,SAAA;QACAC,GAAAA,EAAK;YACHD,IAAAA,EAAM;AACR,SAAA;QACAE,KAAAA,EAAO;YACLF,IAAAA,EAAM;AACR,SAAA;QACAA,IAAAA,EAAM;YACJA,IAAAA,EAAM;AACR,SAAA;QACAG,WAAAA,EAAa;YACXH,IAAAA,EAAM;AACR,SAAA;QACAI,GAAAA,EAAK;YACHJ,IAAAA,EAAM;AACR;AACF;AACF;AAgCA,MAAMK,eAAAA,GAAkB,CAAC,EAAEC,EAAE,EAAoB,GAAA;IAC/C,MAAMC,WAAAA,GAAc,CAACC,aAAAA,EAAgCC,MAAAA,GAAAA;QACnD,OAAO;AACL,YAAA,GAAGD,aAAa;AAChB,YAAA,GAAGC;AACL,SAAA;AACF,IAAA,CAAA;IAEA,MAAMC,KAAAA,GAAmB,SAASC,qBAAAA,CAAsBH,aAA8B,EAAA;QACpF,OAAO;AACLI,YAAAA,GAAAA,EAAK,CAACH,MAAAA,GAAmBC,KAAAA,CAAME,GAAG,CAACL,YAAYC,aAAAA,EAAeC,MAAAA,CAAAA,CAAAA;AAC9DI,YAAAA,GAAAA,EAAK,CAACJ,MAAAA,GAAmBC,KAAAA,CAAMG,GAAG,CAACN,YAAYC,aAAAA,EAAeC,MAAAA,CAAAA,CAAAA;AAC9DK,YAAAA,MAAAA,EAAQ,CAACL,MAAAA,GAAmBC,KAAAA,CAAMI,MAAM,CAACP,YAAYC,aAAAA,EAAeC,MAAAA,CAAAA;AACtE,SAAA;AACF,IAAA,CAAA;AAEA;;MAGAC,KAAAA,CAAME,GAAG,GAAG,OAAOH,MAAAA,GAAAA;AACjB,QAAA,MAAM,EAAER,GAAG,EAAED,IAAAA,GAAO,MAAM,EAAEG,WAAW,EAAEY,IAAI,EAAEX,GAAG,EAAE,GAAGK,MAAAA;QAEvD,MAAMO,MAAAA,GAAS,GAAGhB,IAAAA,CAAAA,EAAOe,IAAAA,GAAO,CAAC,CAAC,EAAEA,IAAAA,CAAAA,CAAM,GAAG,EAAA,CAAA,CAAI;AAEjD,QAAA,MAAME,KAAAA,GAAQ;AACZhB,YAAAA,GAAAA,EAAK,CAAA,EAAGe,MAAAA,CAAO,CAAC,EAAEf,GAAAA,CAAAA,CAAK;AACvBE,YAAAA,WAAAA,EAAaA,WAAAA,IAAe,IAAA;AAC5BC,YAAAA,GAAAA,EAAKA,GAAAA,IAAO;AACd,SAAA;AAEA,QAAA,MAAMc,OAAO,MAAMZ,EAAAA,CAAGa,KAAK,CAAC,oBAAA,CAAA,CAAsBC,OAAO,CAAC;AAAEH,YAAAA;AAAM,SAAA,CAAA;AAElE,QAAA,IAAI,CAACC,IAAAA,EAAM;YACT,OAAO,IAAA;AACT,QAAA;AAEA,QAAA,IACEA,IAAAA,CAAKlB,IAAI,KAAK,QAAA,IACdkB,KAAKlB,IAAI,KAAK,OAAA,IACdkB,IAAAA,CAAKlB,IAAI,KAAK,SAAA,IACdkB,IAAAA,CAAKlB,IAAI,KAAK,QAAA,EACd;YACA,IAAI;AACF,gBAAA,OAAOqB,IAAAA,CAAKC,KAAK,CAACJ,IAAAA,CAAKhB,KAAK,CAAA;AAC9B,YAAA,CAAA,CAAE,OAAM;gBACN,OAAO,IAAIqB,IAAAA,CAAKL,IAAAA,CAAKhB,KAAK,CAAA;AAC5B,YAAA;AACF,QAAA,CAAA,MAAO,IAAIgB,IAAAA,CAAKlB,IAAI,KAAK,QAAA,EAAU;YACjC,OAAOwB,MAAAA,CAAON,KAAKhB,KAAK,CAAA;QAC1B,CAAA,MAAO;YACL,OAAO,IAAA;AACT,QAAA;AACF,IAAA,CAAA;AAEA;;;;MAKAQ,KAAAA,CAAMG,GAAG,GAAG,OAAOJ,MAAAA,GAAAA;AACjB,QAAA,MAAM,EAAER,GAAG,EAAEC,KAAK,EAAEF,IAAI,EAAEG,WAAW,EAAEY,IAAI,EAAEX,GAAG,EAAE,GAAGK,MAAAA;QAErD,MAAMO,MAAAA,GAAS,GAAGhB,IAAAA,CAAAA,EAAOe,IAAAA,GAAO,CAAC,CAAC,EAAEA,IAAAA,CAAAA,CAAM,GAAG,EAAA,CAAA,CAAI;AAEjD,QAAA,MAAME,KAAAA,GAAQ;AACZhB,YAAAA,GAAAA,EAAK,CAAA,EAAGe,MAAAA,CAAO,CAAC,EAAEf,GAAAA,CAAAA,CAAK;AACvBE,YAAAA,WAAAA,EAAaA,WAAAA,IAAe,IAAA;AAC5BC,YAAAA,GAAAA,EAAKA,GAAAA,IAAO;AACd,SAAA;AAEA,QAAA,MAAMc,OAAO,MAAMZ,EAAAA,CAAGa,KAAK,CAAC,oBAAA,CAAA,CAAsBC,OAAO,CAAC;AAAEH,YAAAA;AAAM,SAAA,CAAA;AAElE,QAAA,IAAIC,IAAAA,EAAM;AACR,YAAA,OAAOZ,EAAAA,CAAGa,KAAK,CAAC,oBAAA,CAAA,CAAsBM,MAAM,CAAC;gBAC3CR,KAAAA,EAAO;AAAElB,oBAAAA,EAAAA,EAAImB,KAAKnB;AAAG,iBAAA;gBACrBmB,IAAAA,EAAM;AACJhB,oBAAAA,KAAAA,EAAOmB,IAAAA,CAAKK,SAAS,CAACxB,KAAAA,CAAAA,IAAUyB,UAAAA,CAASzB,KAAAA,CAAAA;AACzCF,oBAAAA,IAAAA,EAAM,OAAOE;AACf;AACF,aAAA,CAAA;AACF,QAAA;AAEA,QAAA,OAAOI,EAAAA,CAAGa,KAAK,CAAC,oBAAA,CAAA,CAAsBS,MAAM,CAAC;YAC3CV,IAAAA,EAAM;AACJ,gBAAA,GAAGD,KAAK;AACRf,gBAAAA,KAAAA,EAAOmB,IAAAA,CAAKK,SAAS,CAACxB,KAAAA,CAAAA,IAAUyB,UAAAA,CAASzB,KAAAA,CAAAA;AACzCF,gBAAAA,IAAAA,EAAM,OAAOE;AACf;AACF,SAAA,CAAA;AACF,IAAA,CAAA;AAEA;;;;MAKAQ,KAAAA,CAAMI,MAAM,GAAG,OAAOL,MAAAA,GAAAA;QACpB,MAAM,EAAER,GAAG,EAAEE,WAAW,EAAEH,IAAI,EAAEe,IAAI,EAAEX,GAAG,EAAE,GAAGK,MAAAA;QAE9C,MAAMO,MAAAA,GAAS,GAAGhB,IAAAA,CAAAA,EAAOe,IAAAA,GAAO,CAAC,CAAC,EAAEA,IAAAA,CAAAA,CAAM,GAAG,EAAA,CAAA,CAAI;AAEjD,QAAA,MAAME,KAAAA,GAAQ;AACZhB,YAAAA,GAAAA,EAAK,CAAA,EAAGe,MAAAA,CAAO,CAAC,EAAEf,GAAAA,CAAAA,CAAK;AACvBE,YAAAA,WAAAA,EAAaA,WAAAA,IAAe,IAAA;AAC5BC,YAAAA,GAAAA,EAAKA,GAAAA,IAAO;AACd,SAAA;AAEA,QAAA,OAAOE,EAAAA,CAAGa,KAAK,CAAC,oBAAA,CAAA,CAAsBL,MAAM,CAAC;AAAEG,YAAAA;AAAM,SAAA,CAAA;AACvD,IAAA,CAAA;IAEA,OAAOP,KAAAA;AACT;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core-store.mjs","sources":["../../src/services/core-store.ts"],"sourcesContent":["import { toString } from 'lodash
|
|
1
|
+
{"version":3,"file":"core-store.mjs","sources":["../../src/services/core-store.ts"],"sourcesContent":["import { toString } from 'lodash';\nimport type { Database, Model } from '@strapi/database';\n\nconst coreStoreModel: Model = {\n uid: 'strapi::core-store',\n singularName: 'strapi_core_store_settings',\n tableName: 'strapi_core_store_settings',\n attributes: {\n id: {\n type: 'increments',\n },\n key: {\n type: 'string',\n },\n value: {\n type: 'text',\n },\n type: {\n type: 'string',\n },\n environment: {\n type: 'string',\n },\n tag: {\n type: 'string',\n },\n },\n};\n\ntype SetParams = {\n key: string;\n value: unknown;\n type?: string;\n environment?: string;\n name?: string;\n tag?: string;\n};\n\ntype GetParams = {\n key: string;\n type?: string;\n environment?: string;\n name?: string;\n tag?: string;\n};\n\ntype Params = SetParams & GetParams;\n\ninterface CoreStore {\n (defaultParams: Partial<Params>): {\n get<T = unknown>(params: Partial<GetParams>): Promise<T>;\n set(params: Partial<SetParams>): Promise<void>;\n delete(params: Partial<GetParams>): Promise<void>;\n };\n get<T = unknown>(params: GetParams): Promise<T>;\n set(params: SetParams): Promise<void>;\n delete(params: GetParams): Promise<void>;\n}\n\nconst createCoreStore = ({ db }: { db: Database }) => {\n const mergeParams = (defaultParams: Partial<Params>, params: Params): Params => {\n return {\n ...defaultParams,\n ...params,\n };\n };\n\n const store: CoreStore = function createScopedCoreStore(defaultParams: Partial<Params>) {\n return {\n get: (params: Params) => store.get(mergeParams(defaultParams, params)),\n set: (params: Params) => store.set(mergeParams(defaultParams, params)),\n delete: (params: Params) => store.delete(mergeParams(defaultParams, params)),\n };\n };\n\n /**\n * Get value from the core store\n */\n store.get = async (params) => {\n const { key, type = 'core', environment, name, tag } = params;\n\n const prefix = `${type}${name ? `_${name}` : ''}`;\n\n const where = {\n key: `${prefix}_${key}`,\n environment: environment || null,\n tag: tag || null,\n };\n\n const data = await db.query('strapi::core-store').findOne({ where });\n\n if (!data) {\n return null;\n }\n\n if (\n data.type === 'object' ||\n data.type === 'array' ||\n data.type === 'boolean' ||\n data.type === 'string'\n ) {\n try {\n return JSON.parse(data.value);\n } catch {\n return new Date(data.value);\n }\n } else if (data.type === 'number') {\n return Number(data.value);\n } else {\n return null;\n }\n };\n\n /**\n * Set value in the core store\n * @param {Object} params\n * @returns {*}\n */\n store.set = async (params) => {\n const { key, value, type, environment, name, tag } = params;\n\n const prefix = `${type}${name ? `_${name}` : ''}`;\n\n const where = {\n key: `${prefix}_${key}`,\n environment: environment || null,\n tag: tag || null,\n };\n\n const data = await db.query('strapi::core-store').findOne({ where });\n\n if (data) {\n return db.query('strapi::core-store').update({\n where: { id: data.id },\n data: {\n value: JSON.stringify(value) || toString(value),\n type: typeof value,\n },\n });\n }\n\n return db.query('strapi::core-store').create({\n data: {\n ...where,\n value: JSON.stringify(value) || toString(value),\n type: typeof value,\n },\n });\n };\n\n /**\n * Deletes a value from the core store\n * @param {Object} params\n * @returns {*}\n */\n store.delete = async (params) => {\n const { key, environment, type, name, tag } = params;\n\n const prefix = `${type}${name ? `_${name}` : ''}`;\n\n const where = {\n key: `${prefix}_${key}`,\n environment: environment || null,\n tag: tag || null,\n };\n\n return db.query('strapi::core-store').delete({ where });\n };\n\n return store;\n};\n\nexport { coreStoreModel, createCoreStore };\n"],"names":["coreStoreModel","uid","singularName","tableName","attributes","id","type","key","value","environment","tag","createCoreStore","db","mergeParams","defaultParams","params","store","createScopedCoreStore","get","set","delete","name","prefix","where","data","query","findOne","JSON","parse","Date","Number","update","stringify","toString","create"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cron.d.ts","sourceRoot":"","sources":["../../src/services/cron.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cron.d.ts","sourceRoot":"","sources":["../../src/services/cron.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAS7C,KAAK,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;AA2JpC,QAAA,MAAM,iBAAiB;gBAoGR,KAAK;iBAuCH,MAAM;;;;;CAqCtB,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
|
package/dist/services/cron.js
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var fp = require('lodash/fp');
|
|
4
|
-
|
|
5
3
|
let lazyCroner;
|
|
6
4
|
const getCroner = ()=>{
|
|
7
5
|
if (!lazyCroner) {
|
|
@@ -231,11 +229,11 @@ const createCronService = ()=>{
|
|
|
231
229
|
let fn;
|
|
232
230
|
let options;
|
|
233
231
|
let taskName;
|
|
234
|
-
if (
|
|
232
|
+
if (typeof taskValue === 'function') {
|
|
235
233
|
taskName = null;
|
|
236
234
|
fn = taskValue.bind(tasks);
|
|
237
235
|
options = taskExpression;
|
|
238
|
-
} else if (
|
|
236
|
+
} else if (typeof taskValue.task === 'function') {
|
|
239
237
|
taskName = taskExpression;
|
|
240
238
|
fn = taskValue.task.bind(taskValue);
|
|
241
239
|
options = taskValue.options;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cron.js","sources":["../../src/services/cron.ts"],"sourcesContent":["import { isFunction } from 'lodash/fp';\nimport type { Modules } from '@strapi/types';\nimport type { Cron } from 'croner';\n\ntype RecurrenceSpecObjLit = Modules.Cron.RecurrenceSpecObjLit;\ntype CronRuleOptions = Modules.Cron.CronRuleOptions;\ntype CronSchedule = Modules.Cron.CronSchedule;\ntype CronJob = Modules.Cron.CronJob;\ntype JobSpec = Modules.Cron.JobSpec;\ntype TaskFn = Modules.Cron.CronTaskFn;\ntype Tasks = Modules.Cron.CronTasks;\n\nlet lazyCroner: typeof import('croner') | undefined;\nconst getCroner = (): typeof import('croner') => {\n if (!lazyCroner) {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n lazyCroner = require('croner');\n }\n return lazyCroner as typeof import('croner');\n};\n\nconst RECURRENCE_KEYS = [\n 'date',\n 'dayOfWeek',\n 'hour',\n 'minute',\n 'month',\n 'second',\n 'year',\n 'recurs',\n] as const;\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !(value instanceof Date);\n\nconst isRuleOptions = (value: unknown): value is CronRuleOptions =>\n isPlainObject(value) && 'rule' in value;\n\nconst isRecurrenceSpec = (value: unknown): value is RecurrenceSpecObjLit =>\n isPlainObject(value) && !('rule' in value) && RECURRENCE_KEYS.some((key) => key in value);\n\nconst toDate = (value: Date | number | string): Date =>\n value instanceof Date ? value : new Date(value);\n\nconst toSegmentPart = (value: unknown, offset = 0): string | null => {\n if (typeof value === 'number') {\n return String(value + offset);\n }\n return typeof value === 'string' ? value : null;\n};\n\nconst segmentToField = (segment: unknown, fallback = '*', offset = 0): string => {\n if (segment == null) {\n return fallback;\n }\n\n const part = toSegmentPart(segment, offset);\n if (part !== null) {\n return part;\n }\n\n if (Array.isArray(segment)) {\n return segment.map((item) => segmentToField(item, fallback, offset)).join(',');\n }\n\n if (isPlainObject(segment)) {\n const start = toSegmentPart(segment.start ?? segment.from, offset);\n const end = toSegmentPart(segment.end ?? segment.to, offset);\n if (start !== null && end !== null) {\n const range = `${start}-${end}`;\n const step = toSegmentPart(segment.step);\n return step === null ? range : `${range}/${step}`;\n }\n }\n\n return fallback;\n};\n\nconst recurrenceToCron = (spec: RecurrenceSpecObjLit): string => {\n const second = segmentToField(spec.second, '0');\n const minute = segmentToField(spec.minute);\n const hour = segmentToField(spec.hour);\n const date = segmentToField(spec.date);\n const month = segmentToField(spec.month, '*', 1);\n const dayOfWeek = segmentToField(spec.dayOfWeek);\n const fields = `${second} ${minute} ${hour} ${date} ${month} ${dayOfWeek}`;\n\n return spec.year == null ? fields : `${fields} ${segmentToField(spec.year)}`;\n};\n\ntype ScheduleWindow = {\n tz?: string;\n start?: Date | number | string;\n end?: Date | number | string;\n};\n\nconst toCronerOptions = ({ tz, start, end }: ScheduleWindow): Record<string, unknown> => {\n const cronerOptions: Record<string, unknown> = {};\n\n if (tz) {\n cronerOptions.timezone = tz;\n }\n if (start != null) {\n cronerOptions.startAt = toDate(start);\n }\n if (end != null) {\n cronerOptions.stopAt = toDate(end);\n }\n\n return cronerOptions;\n};\n\nconst ruleToPattern = (\n rule: CronRuleOptions['rule']\n): { pattern: string | Date; oneShot: boolean } => {\n if (typeof rule === 'number') {\n return { pattern: new Date(rule), oneShot: true };\n }\n if (rule instanceof Date) {\n return { pattern: rule, oneShot: true };\n }\n if (typeof rule === 'string') {\n return { pattern: rule, oneShot: false };\n }\n if (isRecurrenceSpec(rule)) {\n return { pattern: recurrenceToCron(rule), oneShot: false };\n }\n throw new Error('Unsupported cron rule');\n};\n\nconst toCronerArgs = (\n options: CronSchedule\n): { pattern: string | Date; cronerOptions: Record<string, unknown> } => {\n if (typeof options === 'number') {\n return { pattern: new Date(options), cronerOptions: { maxRuns: 1 } };\n }\n\n if (options instanceof Date) {\n return { pattern: options, cronerOptions: { maxRuns: 1 } };\n }\n\n if (typeof options === 'string') {\n return { pattern: options, cronerOptions: {} };\n }\n\n if (isRecurrenceSpec(options)) {\n return {\n pattern: recurrenceToCron(options),\n cronerOptions: toCronerOptions(options),\n };\n }\n\n if (isRuleOptions(options)) {\n const cronerOptions = toCronerOptions(options);\n const { pattern, oneShot } = ruleToPattern(options.rule);\n if (oneShot) {\n cronerOptions.maxRuns = 1;\n }\n\n return { pattern, cronerOptions };\n }\n\n throw new Error('Unsupported cron schedule');\n};\n\nconst createCronService = () => {\n let jobsSpecs: JobSpec[] = [];\n let running = false;\n\n const createRunner = (fn: TaskFn) => {\n let nextFireDate: Date | null = null;\n\n return {\n async run(self?: Cron): Promise<void> {\n const fireDate = nextFireDate ?? self?.currentRun() ?? new Date();\n nextFireDate = self?.nextRun(fireDate) ?? null;\n await fn({ strapi }, fireDate);\n },\n setNextRun(date: Date | null) {\n nextFireDate = date;\n },\n };\n };\n\n const createCronJob = (\n pattern: string | Date,\n cronerOptions: Record<string, unknown>,\n fn: TaskFn,\n jobLabel: string\n ) => {\n const { Cron: CronCtor } = getCroner();\n const runner = createRunner(fn);\n const job = new CronCtor(\n pattern,\n {\n paused: !running,\n // cron-parser (via node-schedule) accepted numeric-prefix stepping\n // like `5/15` as `5-59/15`. Croner 10 rejects it unless this is set.\n sloppyRanges: true,\n ...cronerOptions,\n catch(error: unknown) {\n strapi.log.error(`Cron job \"${jobLabel}\" failed`, error);\n },\n },\n runner.run\n );\n runner.setNextRun(job.nextRun());\n return job;\n };\n\n const attachHandle = (job: Cron, fn: TaskFn, jobLabel: string): CronJob => {\n let current = job;\n let handle: CronJob;\n\n const invoke = async () => {\n const fireDate = current.currentRun() ?? new Date();\n return fn({ strapi }, fireDate);\n };\n\n const cancel = () => {\n current.stop();\n return true;\n };\n\n const nextInvocation = () => current.nextRun();\n\n const reschedule = (spec: CronSchedule) => {\n try {\n const idx = jobsSpecs.findIndex((jobSpec) => jobSpec.job === handle);\n if (idx === -1) {\n return false;\n }\n\n const { pattern, cronerOptions } = toCronerArgs(spec);\n const next = createCronJob(pattern, cronerOptions, fn, jobLabel);\n\n current.stop();\n current = next;\n jobsSpecs[idx] = {\n ...jobsSpecs[idx],\n options: spec,\n };\n return true;\n } catch (error) {\n strapi.log.error(`Could not reschedule cron job \"${jobLabel}\"`, error);\n return false;\n }\n };\n\n handle = new Proxy(job as CronJob, {\n get(_target, property) {\n if (property === 'invoke') return invoke;\n if (property === 'cancel') return cancel;\n if (property === 'nextInvocation') return nextInvocation;\n if (property === 'reschedule') return reschedule;\n\n const value = Reflect.get(current, property, current);\n return typeof value === 'function' ? value.bind(current) : value;\n },\n });\n\n return handle;\n };\n\n return {\n add(tasks: Tasks = {}) {\n for (const taskExpression of Object.keys(tasks)) {\n const taskValue = tasks[taskExpression];\n\n let fn: TaskFn;\n let options: CronSchedule;\n let taskName: string | null;\n if (isFunction(taskValue)) {\n taskName = null;\n fn = taskValue.bind(tasks);\n options = taskExpression;\n } else if (isFunction(taskValue.task)) {\n taskName = taskExpression;\n fn = taskValue.task.bind(taskValue);\n options = taskValue.options;\n } else {\n throw new Error(\n `Could not schedule a cron job for \"${taskExpression}\": no function found.`\n );\n }\n\n const jobLabel = taskName ?? taskExpression;\n\n try {\n const { pattern, cronerOptions } = toCronerArgs(options);\n const job = createCronJob(pattern, cronerOptions, fn, jobLabel);\n\n jobsSpecs.push({\n job: attachHandle(job, fn, jobLabel),\n options,\n name: taskName,\n });\n } catch (error) {\n strapi.log.error(`Could not schedule cron job \"${jobLabel}\": invalid schedule`, error);\n }\n }\n return this;\n },\n\n remove(name: string) {\n if (!name) throw new Error('You must provide a name to remove a cron job.');\n const remaining: JobSpec[] = [];\n for (const jobSpec of jobsSpecs) {\n if (jobSpec.name === name) {\n jobSpec.job.stop();\n } else {\n remaining.push(jobSpec);\n }\n }\n jobsSpecs = remaining;\n return this;\n },\n\n start() {\n jobsSpecs.forEach(({ job }) => job.resume());\n running = true;\n return this;\n },\n\n stop() {\n jobsSpecs.forEach(({ job }) => job.pause());\n running = false;\n return this;\n },\n\n destroy() {\n this.stop();\n jobsSpecs.forEach(({ job }) => job.stop());\n jobsSpecs = [];\n return this;\n },\n\n get jobs() {\n return jobsSpecs;\n },\n };\n};\n\nexport default createCronService;\n"],"names":["lazyCroner","getCroner","require","RECURRENCE_KEYS","isPlainObject","value","Date","isRuleOptions","isRecurrenceSpec","some","key","toDate","toSegmentPart","offset","String","segmentToField","segment","fallback","part","Array","isArray","map","item","join","start","from","end","to","range","step","recurrenceToCron","spec","second","minute","hour","date","month","dayOfWeek","fields","year","toCronerOptions","tz","cronerOptions","timezone","startAt","stopAt","ruleToPattern","rule","pattern","oneShot","Error","toCronerArgs","options","maxRuns","createCronService","jobsSpecs","running","createRunner","fn","nextFireDate","run","self","fireDate","currentRun","nextRun","strapi","setNextRun","createCronJob","jobLabel","Cron","CronCtor","runner","job","paused","sloppyRanges","catch","error","log","attachHandle","current","handle","invoke","cancel","stop","nextInvocation","reschedule","idx","findIndex","jobSpec","next","Proxy","get","_target","property","Reflect","bind","add","tasks","taskExpression","Object","keys","taskValue","taskName","isFunction","task","push","name","remove","remaining","forEach","resume","pause","destroy","jobs"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cron.js","sources":["../../src/services/cron.ts"],"sourcesContent":["import type { Modules } from '@strapi/types';\nimport type { Cron } from 'croner';\n\ntype RecurrenceSpecObjLit = Modules.Cron.RecurrenceSpecObjLit;\ntype CronRuleOptions = Modules.Cron.CronRuleOptions;\ntype CronSchedule = Modules.Cron.CronSchedule;\ntype CronJob = Modules.Cron.CronJob;\ntype JobSpec = Modules.Cron.JobSpec;\ntype TaskFn = Modules.Cron.CronTaskFn;\ntype Tasks = Modules.Cron.CronTasks;\n\nlet lazyCroner: typeof import('croner') | undefined;\nconst getCroner = (): typeof import('croner') => {\n if (!lazyCroner) {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n lazyCroner = require('croner');\n }\n return lazyCroner as typeof import('croner');\n};\n\nconst RECURRENCE_KEYS = [\n 'date',\n 'dayOfWeek',\n 'hour',\n 'minute',\n 'month',\n 'second',\n 'year',\n 'recurs',\n] as const;\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !(value instanceof Date);\n\nconst isRuleOptions = (value: unknown): value is CronRuleOptions =>\n isPlainObject(value) && 'rule' in value;\n\nconst isRecurrenceSpec = (value: unknown): value is RecurrenceSpecObjLit =>\n isPlainObject(value) && !('rule' in value) && RECURRENCE_KEYS.some((key) => key in value);\n\nconst toDate = (value: Date | number | string): Date =>\n value instanceof Date ? value : new Date(value);\n\nconst toSegmentPart = (value: unknown, offset = 0): string | null => {\n if (typeof value === 'number') {\n return String(value + offset);\n }\n return typeof value === 'string' ? value : null;\n};\n\nconst segmentToField = (segment: unknown, fallback = '*', offset = 0): string => {\n if (segment == null) {\n return fallback;\n }\n\n const part = toSegmentPart(segment, offset);\n if (part !== null) {\n return part;\n }\n\n if (Array.isArray(segment)) {\n return segment.map((item) => segmentToField(item, fallback, offset)).join(',');\n }\n\n if (isPlainObject(segment)) {\n const start = toSegmentPart(segment.start ?? segment.from, offset);\n const end = toSegmentPart(segment.end ?? segment.to, offset);\n if (start !== null && end !== null) {\n const range = `${start}-${end}`;\n const step = toSegmentPart(segment.step);\n return step === null ? range : `${range}/${step}`;\n }\n }\n\n return fallback;\n};\n\nconst recurrenceToCron = (spec: RecurrenceSpecObjLit): string => {\n const second = segmentToField(spec.second, '0');\n const minute = segmentToField(spec.minute);\n const hour = segmentToField(spec.hour);\n const date = segmentToField(spec.date);\n const month = segmentToField(spec.month, '*', 1);\n const dayOfWeek = segmentToField(spec.dayOfWeek);\n const fields = `${second} ${minute} ${hour} ${date} ${month} ${dayOfWeek}`;\n\n return spec.year == null ? fields : `${fields} ${segmentToField(spec.year)}`;\n};\n\ntype ScheduleWindow = {\n tz?: string;\n start?: Date | number | string;\n end?: Date | number | string;\n};\n\nconst toCronerOptions = ({ tz, start, end }: ScheduleWindow): Record<string, unknown> => {\n const cronerOptions: Record<string, unknown> = {};\n\n if (tz) {\n cronerOptions.timezone = tz;\n }\n if (start != null) {\n cronerOptions.startAt = toDate(start);\n }\n if (end != null) {\n cronerOptions.stopAt = toDate(end);\n }\n\n return cronerOptions;\n};\n\nconst ruleToPattern = (\n rule: CronRuleOptions['rule']\n): { pattern: string | Date; oneShot: boolean } => {\n if (typeof rule === 'number') {\n return { pattern: new Date(rule), oneShot: true };\n }\n if (rule instanceof Date) {\n return { pattern: rule, oneShot: true };\n }\n if (typeof rule === 'string') {\n return { pattern: rule, oneShot: false };\n }\n if (isRecurrenceSpec(rule)) {\n return { pattern: recurrenceToCron(rule), oneShot: false };\n }\n throw new Error('Unsupported cron rule');\n};\n\nconst toCronerArgs = (\n options: CronSchedule\n): { pattern: string | Date; cronerOptions: Record<string, unknown> } => {\n if (typeof options === 'number') {\n return { pattern: new Date(options), cronerOptions: { maxRuns: 1 } };\n }\n\n if (options instanceof Date) {\n return { pattern: options, cronerOptions: { maxRuns: 1 } };\n }\n\n if (typeof options === 'string') {\n return { pattern: options, cronerOptions: {} };\n }\n\n if (isRecurrenceSpec(options)) {\n return {\n pattern: recurrenceToCron(options),\n cronerOptions: toCronerOptions(options),\n };\n }\n\n if (isRuleOptions(options)) {\n const cronerOptions = toCronerOptions(options);\n const { pattern, oneShot } = ruleToPattern(options.rule);\n if (oneShot) {\n cronerOptions.maxRuns = 1;\n }\n\n return { pattern, cronerOptions };\n }\n\n throw new Error('Unsupported cron schedule');\n};\n\nconst createCronService = () => {\n let jobsSpecs: JobSpec[] = [];\n let running = false;\n\n const createRunner = (fn: TaskFn) => {\n let nextFireDate: Date | null = null;\n\n return {\n async run(self?: Cron): Promise<void> {\n const fireDate = nextFireDate ?? self?.currentRun() ?? new Date();\n nextFireDate = self?.nextRun(fireDate) ?? null;\n await fn({ strapi }, fireDate);\n },\n setNextRun(date: Date | null) {\n nextFireDate = date;\n },\n };\n };\n\n const createCronJob = (\n pattern: string | Date,\n cronerOptions: Record<string, unknown>,\n fn: TaskFn,\n jobLabel: string\n ) => {\n const { Cron: CronCtor } = getCroner();\n const runner = createRunner(fn);\n const job = new CronCtor(\n pattern,\n {\n paused: !running,\n // cron-parser (via node-schedule) accepted numeric-prefix stepping\n // like `5/15` as `5-59/15`. Croner 10 rejects it unless this is set.\n sloppyRanges: true,\n ...cronerOptions,\n catch(error: unknown) {\n strapi.log.error(`Cron job \"${jobLabel}\" failed`, error);\n },\n },\n runner.run\n );\n runner.setNextRun(job.nextRun());\n return job;\n };\n\n const attachHandle = (job: Cron, fn: TaskFn, jobLabel: string): CronJob => {\n let current = job;\n let handle: CronJob;\n\n const invoke = async () => {\n const fireDate = current.currentRun() ?? new Date();\n return fn({ strapi }, fireDate);\n };\n\n const cancel = () => {\n current.stop();\n return true;\n };\n\n const nextInvocation = () => current.nextRun();\n\n const reschedule = (spec: CronSchedule) => {\n try {\n const idx = jobsSpecs.findIndex((jobSpec) => jobSpec.job === handle);\n if (idx === -1) {\n return false;\n }\n\n const { pattern, cronerOptions } = toCronerArgs(spec);\n const next = createCronJob(pattern, cronerOptions, fn, jobLabel);\n\n current.stop();\n current = next;\n jobsSpecs[idx] = {\n ...jobsSpecs[idx],\n options: spec,\n };\n return true;\n } catch (error) {\n strapi.log.error(`Could not reschedule cron job \"${jobLabel}\"`, error);\n return false;\n }\n };\n\n handle = new Proxy(job as CronJob, {\n get(_target, property) {\n if (property === 'invoke') return invoke;\n if (property === 'cancel') return cancel;\n if (property === 'nextInvocation') return nextInvocation;\n if (property === 'reschedule') return reschedule;\n\n const value = Reflect.get(current, property, current);\n return typeof value === 'function' ? value.bind(current) : value;\n },\n });\n\n return handle;\n };\n\n return {\n add(tasks: Tasks = {}) {\n for (const taskExpression of Object.keys(tasks)) {\n const taskValue = tasks[taskExpression];\n\n let fn: TaskFn;\n let options: CronSchedule;\n let taskName: string | null;\n if (typeof taskValue === 'function') {\n taskName = null;\n fn = taskValue.bind(tasks);\n options = taskExpression;\n } else if (typeof taskValue.task === 'function') {\n taskName = taskExpression;\n fn = taskValue.task.bind(taskValue);\n options = taskValue.options;\n } else {\n throw new Error(\n `Could not schedule a cron job for \"${taskExpression}\": no function found.`\n );\n }\n\n const jobLabel = taskName ?? taskExpression;\n\n try {\n const { pattern, cronerOptions } = toCronerArgs(options);\n const job = createCronJob(pattern, cronerOptions, fn, jobLabel);\n\n jobsSpecs.push({\n job: attachHandle(job, fn, jobLabel),\n options,\n name: taskName,\n });\n } catch (error) {\n strapi.log.error(`Could not schedule cron job \"${jobLabel}\": invalid schedule`, error);\n }\n }\n return this;\n },\n\n remove(name: string) {\n if (!name) throw new Error('You must provide a name to remove a cron job.');\n const remaining: JobSpec[] = [];\n for (const jobSpec of jobsSpecs) {\n if (jobSpec.name === name) {\n jobSpec.job.stop();\n } else {\n remaining.push(jobSpec);\n }\n }\n jobsSpecs = remaining;\n return this;\n },\n\n start() {\n jobsSpecs.forEach(({ job }) => job.resume());\n running = true;\n return this;\n },\n\n stop() {\n jobsSpecs.forEach(({ job }) => job.pause());\n running = false;\n return this;\n },\n\n destroy() {\n this.stop();\n jobsSpecs.forEach(({ job }) => job.stop());\n jobsSpecs = [];\n return this;\n },\n\n get jobs() {\n return jobsSpecs;\n },\n };\n};\n\nexport default createCronService;\n"],"names":["lazyCroner","getCroner","require","RECURRENCE_KEYS","isPlainObject","value","Date","isRuleOptions","isRecurrenceSpec","some","key","toDate","toSegmentPart","offset","String","segmentToField","segment","fallback","part","Array","isArray","map","item","join","start","from","end","to","range","step","recurrenceToCron","spec","second","minute","hour","date","month","dayOfWeek","fields","year","toCronerOptions","tz","cronerOptions","timezone","startAt","stopAt","ruleToPattern","rule","pattern","oneShot","Error","toCronerArgs","options","maxRuns","createCronService","jobsSpecs","running","createRunner","fn","nextFireDate","run","self","fireDate","currentRun","nextRun","strapi","setNextRun","createCronJob","jobLabel","Cron","CronCtor","runner","job","paused","sloppyRanges","catch","error","log","attachHandle","current","handle","invoke","cancel","stop","nextInvocation","reschedule","idx","findIndex","jobSpec","next","Proxy","get","_target","property","Reflect","bind","add","tasks","taskExpression","Object","keys","taskValue","taskName","task","push","name","remove","remaining","forEach","resume","pause","destroy","jobs"],"mappings":"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"}
|
package/dist/services/cron.mjs
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import { isFunction } from 'lodash/fp';
|
|
2
|
-
|
|
3
1
|
let lazyCroner;
|
|
4
2
|
const getCroner = ()=>{
|
|
5
3
|
if (!lazyCroner) {
|
|
@@ -229,11 +227,11 @@ const createCronService = ()=>{
|
|
|
229
227
|
let fn;
|
|
230
228
|
let options;
|
|
231
229
|
let taskName;
|
|
232
|
-
if (
|
|
230
|
+
if (typeof taskValue === 'function') {
|
|
233
231
|
taskName = null;
|
|
234
232
|
fn = taskValue.bind(tasks);
|
|
235
233
|
options = taskExpression;
|
|
236
|
-
} else if (
|
|
234
|
+
} else if (typeof taskValue.task === 'function') {
|
|
237
235
|
taskName = taskExpression;
|
|
238
236
|
fn = taskValue.task.bind(taskValue);
|
|
239
237
|
options = taskValue.options;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cron.mjs","sources":["../../src/services/cron.ts"],"sourcesContent":["import { isFunction } from 'lodash/fp';\nimport type { Modules } from '@strapi/types';\nimport type { Cron } from 'croner';\n\ntype RecurrenceSpecObjLit = Modules.Cron.RecurrenceSpecObjLit;\ntype CronRuleOptions = Modules.Cron.CronRuleOptions;\ntype CronSchedule = Modules.Cron.CronSchedule;\ntype CronJob = Modules.Cron.CronJob;\ntype JobSpec = Modules.Cron.JobSpec;\ntype TaskFn = Modules.Cron.CronTaskFn;\ntype Tasks = Modules.Cron.CronTasks;\n\nlet lazyCroner: typeof import('croner') | undefined;\nconst getCroner = (): typeof import('croner') => {\n if (!lazyCroner) {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n lazyCroner = require('croner');\n }\n return lazyCroner as typeof import('croner');\n};\n\nconst RECURRENCE_KEYS = [\n 'date',\n 'dayOfWeek',\n 'hour',\n 'minute',\n 'month',\n 'second',\n 'year',\n 'recurs',\n] as const;\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !(value instanceof Date);\n\nconst isRuleOptions = (value: unknown): value is CronRuleOptions =>\n isPlainObject(value) && 'rule' in value;\n\nconst isRecurrenceSpec = (value: unknown): value is RecurrenceSpecObjLit =>\n isPlainObject(value) && !('rule' in value) && RECURRENCE_KEYS.some((key) => key in value);\n\nconst toDate = (value: Date | number | string): Date =>\n value instanceof Date ? value : new Date(value);\n\nconst toSegmentPart = (value: unknown, offset = 0): string | null => {\n if (typeof value === 'number') {\n return String(value + offset);\n }\n return typeof value === 'string' ? value : null;\n};\n\nconst segmentToField = (segment: unknown, fallback = '*', offset = 0): string => {\n if (segment == null) {\n return fallback;\n }\n\n const part = toSegmentPart(segment, offset);\n if (part !== null) {\n return part;\n }\n\n if (Array.isArray(segment)) {\n return segment.map((item) => segmentToField(item, fallback, offset)).join(',');\n }\n\n if (isPlainObject(segment)) {\n const start = toSegmentPart(segment.start ?? segment.from, offset);\n const end = toSegmentPart(segment.end ?? segment.to, offset);\n if (start !== null && end !== null) {\n const range = `${start}-${end}`;\n const step = toSegmentPart(segment.step);\n return step === null ? range : `${range}/${step}`;\n }\n }\n\n return fallback;\n};\n\nconst recurrenceToCron = (spec: RecurrenceSpecObjLit): string => {\n const second = segmentToField(spec.second, '0');\n const minute = segmentToField(spec.minute);\n const hour = segmentToField(spec.hour);\n const date = segmentToField(spec.date);\n const month = segmentToField(spec.month, '*', 1);\n const dayOfWeek = segmentToField(spec.dayOfWeek);\n const fields = `${second} ${minute} ${hour} ${date} ${month} ${dayOfWeek}`;\n\n return spec.year == null ? fields : `${fields} ${segmentToField(spec.year)}`;\n};\n\ntype ScheduleWindow = {\n tz?: string;\n start?: Date | number | string;\n end?: Date | number | string;\n};\n\nconst toCronerOptions = ({ tz, start, end }: ScheduleWindow): Record<string, unknown> => {\n const cronerOptions: Record<string, unknown> = {};\n\n if (tz) {\n cronerOptions.timezone = tz;\n }\n if (start != null) {\n cronerOptions.startAt = toDate(start);\n }\n if (end != null) {\n cronerOptions.stopAt = toDate(end);\n }\n\n return cronerOptions;\n};\n\nconst ruleToPattern = (\n rule: CronRuleOptions['rule']\n): { pattern: string | Date; oneShot: boolean } => {\n if (typeof rule === 'number') {\n return { pattern: new Date(rule), oneShot: true };\n }\n if (rule instanceof Date) {\n return { pattern: rule, oneShot: true };\n }\n if (typeof rule === 'string') {\n return { pattern: rule, oneShot: false };\n }\n if (isRecurrenceSpec(rule)) {\n return { pattern: recurrenceToCron(rule), oneShot: false };\n }\n throw new Error('Unsupported cron rule');\n};\n\nconst toCronerArgs = (\n options: CronSchedule\n): { pattern: string | Date; cronerOptions: Record<string, unknown> } => {\n if (typeof options === 'number') {\n return { pattern: new Date(options), cronerOptions: { maxRuns: 1 } };\n }\n\n if (options instanceof Date) {\n return { pattern: options, cronerOptions: { maxRuns: 1 } };\n }\n\n if (typeof options === 'string') {\n return { pattern: options, cronerOptions: {} };\n }\n\n if (isRecurrenceSpec(options)) {\n return {\n pattern: recurrenceToCron(options),\n cronerOptions: toCronerOptions(options),\n };\n }\n\n if (isRuleOptions(options)) {\n const cronerOptions = toCronerOptions(options);\n const { pattern, oneShot } = ruleToPattern(options.rule);\n if (oneShot) {\n cronerOptions.maxRuns = 1;\n }\n\n return { pattern, cronerOptions };\n }\n\n throw new Error('Unsupported cron schedule');\n};\n\nconst createCronService = () => {\n let jobsSpecs: JobSpec[] = [];\n let running = false;\n\n const createRunner = (fn: TaskFn) => {\n let nextFireDate: Date | null = null;\n\n return {\n async run(self?: Cron): Promise<void> {\n const fireDate = nextFireDate ?? self?.currentRun() ?? new Date();\n nextFireDate = self?.nextRun(fireDate) ?? null;\n await fn({ strapi }, fireDate);\n },\n setNextRun(date: Date | null) {\n nextFireDate = date;\n },\n };\n };\n\n const createCronJob = (\n pattern: string | Date,\n cronerOptions: Record<string, unknown>,\n fn: TaskFn,\n jobLabel: string\n ) => {\n const { Cron: CronCtor } = getCroner();\n const runner = createRunner(fn);\n const job = new CronCtor(\n pattern,\n {\n paused: !running,\n // cron-parser (via node-schedule) accepted numeric-prefix stepping\n // like `5/15` as `5-59/15`. Croner 10 rejects it unless this is set.\n sloppyRanges: true,\n ...cronerOptions,\n catch(error: unknown) {\n strapi.log.error(`Cron job \"${jobLabel}\" failed`, error);\n },\n },\n runner.run\n );\n runner.setNextRun(job.nextRun());\n return job;\n };\n\n const attachHandle = (job: Cron, fn: TaskFn, jobLabel: string): CronJob => {\n let current = job;\n let handle: CronJob;\n\n const invoke = async () => {\n const fireDate = current.currentRun() ?? new Date();\n return fn({ strapi }, fireDate);\n };\n\n const cancel = () => {\n current.stop();\n return true;\n };\n\n const nextInvocation = () => current.nextRun();\n\n const reschedule = (spec: CronSchedule) => {\n try {\n const idx = jobsSpecs.findIndex((jobSpec) => jobSpec.job === handle);\n if (idx === -1) {\n return false;\n }\n\n const { pattern, cronerOptions } = toCronerArgs(spec);\n const next = createCronJob(pattern, cronerOptions, fn, jobLabel);\n\n current.stop();\n current = next;\n jobsSpecs[idx] = {\n ...jobsSpecs[idx],\n options: spec,\n };\n return true;\n } catch (error) {\n strapi.log.error(`Could not reschedule cron job \"${jobLabel}\"`, error);\n return false;\n }\n };\n\n handle = new Proxy(job as CronJob, {\n get(_target, property) {\n if (property === 'invoke') return invoke;\n if (property === 'cancel') return cancel;\n if (property === 'nextInvocation') return nextInvocation;\n if (property === 'reschedule') return reschedule;\n\n const value = Reflect.get(current, property, current);\n return typeof value === 'function' ? value.bind(current) : value;\n },\n });\n\n return handle;\n };\n\n return {\n add(tasks: Tasks = {}) {\n for (const taskExpression of Object.keys(tasks)) {\n const taskValue = tasks[taskExpression];\n\n let fn: TaskFn;\n let options: CronSchedule;\n let taskName: string | null;\n if (isFunction(taskValue)) {\n taskName = null;\n fn = taskValue.bind(tasks);\n options = taskExpression;\n } else if (isFunction(taskValue.task)) {\n taskName = taskExpression;\n fn = taskValue.task.bind(taskValue);\n options = taskValue.options;\n } else {\n throw new Error(\n `Could not schedule a cron job for \"${taskExpression}\": no function found.`\n );\n }\n\n const jobLabel = taskName ?? taskExpression;\n\n try {\n const { pattern, cronerOptions } = toCronerArgs(options);\n const job = createCronJob(pattern, cronerOptions, fn, jobLabel);\n\n jobsSpecs.push({\n job: attachHandle(job, fn, jobLabel),\n options,\n name: taskName,\n });\n } catch (error) {\n strapi.log.error(`Could not schedule cron job \"${jobLabel}\": invalid schedule`, error);\n }\n }\n return this;\n },\n\n remove(name: string) {\n if (!name) throw new Error('You must provide a name to remove a cron job.');\n const remaining: JobSpec[] = [];\n for (const jobSpec of jobsSpecs) {\n if (jobSpec.name === name) {\n jobSpec.job.stop();\n } else {\n remaining.push(jobSpec);\n }\n }\n jobsSpecs = remaining;\n return this;\n },\n\n start() {\n jobsSpecs.forEach(({ job }) => job.resume());\n running = true;\n return this;\n },\n\n stop() {\n jobsSpecs.forEach(({ job }) => job.pause());\n running = false;\n return this;\n },\n\n destroy() {\n this.stop();\n jobsSpecs.forEach(({ job }) => job.stop());\n jobsSpecs = [];\n return this;\n },\n\n get jobs() {\n return jobsSpecs;\n },\n };\n};\n\nexport default createCronService;\n"],"names":["lazyCroner","getCroner","require","RECURRENCE_KEYS","isPlainObject","value","Date","isRuleOptions","isRecurrenceSpec","some","key","toDate","toSegmentPart","offset","String","segmentToField","segment","fallback","part","Array","isArray","map","item","join","start","from","end","to","range","step","recurrenceToCron","spec","second","minute","hour","date","month","dayOfWeek","fields","year","toCronerOptions","tz","cronerOptions","timezone","startAt","stopAt","ruleToPattern","rule","pattern","oneShot","Error","toCronerArgs","options","maxRuns","createCronService","jobsSpecs","running","createRunner","fn","nextFireDate","run","self","fireDate","currentRun","nextRun","strapi","setNextRun","createCronJob","jobLabel","Cron","CronCtor","runner","job","paused","sloppyRanges","catch","error","log","attachHandle","current","handle","invoke","cancel","stop","nextInvocation","reschedule","idx","findIndex","jobSpec","next","Proxy","get","_target","property","Reflect","bind","add","tasks","taskExpression","Object","keys","taskValue","taskName","isFunction","task","push","name","remove","remaining","forEach","resume","pause","destroy","jobs"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cron.mjs","sources":["../../src/services/cron.ts"],"sourcesContent":["import type { Modules } from '@strapi/types';\nimport type { Cron } from 'croner';\n\ntype RecurrenceSpecObjLit = Modules.Cron.RecurrenceSpecObjLit;\ntype CronRuleOptions = Modules.Cron.CronRuleOptions;\ntype CronSchedule = Modules.Cron.CronSchedule;\ntype CronJob = Modules.Cron.CronJob;\ntype JobSpec = Modules.Cron.JobSpec;\ntype TaskFn = Modules.Cron.CronTaskFn;\ntype Tasks = Modules.Cron.CronTasks;\n\nlet lazyCroner: typeof import('croner') | undefined;\nconst getCroner = (): typeof import('croner') => {\n if (!lazyCroner) {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n lazyCroner = require('croner');\n }\n return lazyCroner as typeof import('croner');\n};\n\nconst RECURRENCE_KEYS = [\n 'date',\n 'dayOfWeek',\n 'hour',\n 'minute',\n 'month',\n 'second',\n 'year',\n 'recurs',\n] as const;\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !(value instanceof Date);\n\nconst isRuleOptions = (value: unknown): value is CronRuleOptions =>\n isPlainObject(value) && 'rule' in value;\n\nconst isRecurrenceSpec = (value: unknown): value is RecurrenceSpecObjLit =>\n isPlainObject(value) && !('rule' in value) && RECURRENCE_KEYS.some((key) => key in value);\n\nconst toDate = (value: Date | number | string): Date =>\n value instanceof Date ? value : new Date(value);\n\nconst toSegmentPart = (value: unknown, offset = 0): string | null => {\n if (typeof value === 'number') {\n return String(value + offset);\n }\n return typeof value === 'string' ? value : null;\n};\n\nconst segmentToField = (segment: unknown, fallback = '*', offset = 0): string => {\n if (segment == null) {\n return fallback;\n }\n\n const part = toSegmentPart(segment, offset);\n if (part !== null) {\n return part;\n }\n\n if (Array.isArray(segment)) {\n return segment.map((item) => segmentToField(item, fallback, offset)).join(',');\n }\n\n if (isPlainObject(segment)) {\n const start = toSegmentPart(segment.start ?? segment.from, offset);\n const end = toSegmentPart(segment.end ?? segment.to, offset);\n if (start !== null && end !== null) {\n const range = `${start}-${end}`;\n const step = toSegmentPart(segment.step);\n return step === null ? range : `${range}/${step}`;\n }\n }\n\n return fallback;\n};\n\nconst recurrenceToCron = (spec: RecurrenceSpecObjLit): string => {\n const second = segmentToField(spec.second, '0');\n const minute = segmentToField(spec.minute);\n const hour = segmentToField(spec.hour);\n const date = segmentToField(spec.date);\n const month = segmentToField(spec.month, '*', 1);\n const dayOfWeek = segmentToField(spec.dayOfWeek);\n const fields = `${second} ${minute} ${hour} ${date} ${month} ${dayOfWeek}`;\n\n return spec.year == null ? fields : `${fields} ${segmentToField(spec.year)}`;\n};\n\ntype ScheduleWindow = {\n tz?: string;\n start?: Date | number | string;\n end?: Date | number | string;\n};\n\nconst toCronerOptions = ({ tz, start, end }: ScheduleWindow): Record<string, unknown> => {\n const cronerOptions: Record<string, unknown> = {};\n\n if (tz) {\n cronerOptions.timezone = tz;\n }\n if (start != null) {\n cronerOptions.startAt = toDate(start);\n }\n if (end != null) {\n cronerOptions.stopAt = toDate(end);\n }\n\n return cronerOptions;\n};\n\nconst ruleToPattern = (\n rule: CronRuleOptions['rule']\n): { pattern: string | Date; oneShot: boolean } => {\n if (typeof rule === 'number') {\n return { pattern: new Date(rule), oneShot: true };\n }\n if (rule instanceof Date) {\n return { pattern: rule, oneShot: true };\n }\n if (typeof rule === 'string') {\n return { pattern: rule, oneShot: false };\n }\n if (isRecurrenceSpec(rule)) {\n return { pattern: recurrenceToCron(rule), oneShot: false };\n }\n throw new Error('Unsupported cron rule');\n};\n\nconst toCronerArgs = (\n options: CronSchedule\n): { pattern: string | Date; cronerOptions: Record<string, unknown> } => {\n if (typeof options === 'number') {\n return { pattern: new Date(options), cronerOptions: { maxRuns: 1 } };\n }\n\n if (options instanceof Date) {\n return { pattern: options, cronerOptions: { maxRuns: 1 } };\n }\n\n if (typeof options === 'string') {\n return { pattern: options, cronerOptions: {} };\n }\n\n if (isRecurrenceSpec(options)) {\n return {\n pattern: recurrenceToCron(options),\n cronerOptions: toCronerOptions(options),\n };\n }\n\n if (isRuleOptions(options)) {\n const cronerOptions = toCronerOptions(options);\n const { pattern, oneShot } = ruleToPattern(options.rule);\n if (oneShot) {\n cronerOptions.maxRuns = 1;\n }\n\n return { pattern, cronerOptions };\n }\n\n throw new Error('Unsupported cron schedule');\n};\n\nconst createCronService = () => {\n let jobsSpecs: JobSpec[] = [];\n let running = false;\n\n const createRunner = (fn: TaskFn) => {\n let nextFireDate: Date | null = null;\n\n return {\n async run(self?: Cron): Promise<void> {\n const fireDate = nextFireDate ?? self?.currentRun() ?? new Date();\n nextFireDate = self?.nextRun(fireDate) ?? null;\n await fn({ strapi }, fireDate);\n },\n setNextRun(date: Date | null) {\n nextFireDate = date;\n },\n };\n };\n\n const createCronJob = (\n pattern: string | Date,\n cronerOptions: Record<string, unknown>,\n fn: TaskFn,\n jobLabel: string\n ) => {\n const { Cron: CronCtor } = getCroner();\n const runner = createRunner(fn);\n const job = new CronCtor(\n pattern,\n {\n paused: !running,\n // cron-parser (via node-schedule) accepted numeric-prefix stepping\n // like `5/15` as `5-59/15`. Croner 10 rejects it unless this is set.\n sloppyRanges: true,\n ...cronerOptions,\n catch(error: unknown) {\n strapi.log.error(`Cron job \"${jobLabel}\" failed`, error);\n },\n },\n runner.run\n );\n runner.setNextRun(job.nextRun());\n return job;\n };\n\n const attachHandle = (job: Cron, fn: TaskFn, jobLabel: string): CronJob => {\n let current = job;\n let handle: CronJob;\n\n const invoke = async () => {\n const fireDate = current.currentRun() ?? new Date();\n return fn({ strapi }, fireDate);\n };\n\n const cancel = () => {\n current.stop();\n return true;\n };\n\n const nextInvocation = () => current.nextRun();\n\n const reschedule = (spec: CronSchedule) => {\n try {\n const idx = jobsSpecs.findIndex((jobSpec) => jobSpec.job === handle);\n if (idx === -1) {\n return false;\n }\n\n const { pattern, cronerOptions } = toCronerArgs(spec);\n const next = createCronJob(pattern, cronerOptions, fn, jobLabel);\n\n current.stop();\n current = next;\n jobsSpecs[idx] = {\n ...jobsSpecs[idx],\n options: spec,\n };\n return true;\n } catch (error) {\n strapi.log.error(`Could not reschedule cron job \"${jobLabel}\"`, error);\n return false;\n }\n };\n\n handle = new Proxy(job as CronJob, {\n get(_target, property) {\n if (property === 'invoke') return invoke;\n if (property === 'cancel') return cancel;\n if (property === 'nextInvocation') return nextInvocation;\n if (property === 'reschedule') return reschedule;\n\n const value = Reflect.get(current, property, current);\n return typeof value === 'function' ? value.bind(current) : value;\n },\n });\n\n return handle;\n };\n\n return {\n add(tasks: Tasks = {}) {\n for (const taskExpression of Object.keys(tasks)) {\n const taskValue = tasks[taskExpression];\n\n let fn: TaskFn;\n let options: CronSchedule;\n let taskName: string | null;\n if (typeof taskValue === 'function') {\n taskName = null;\n fn = taskValue.bind(tasks);\n options = taskExpression;\n } else if (typeof taskValue.task === 'function') {\n taskName = taskExpression;\n fn = taskValue.task.bind(taskValue);\n options = taskValue.options;\n } else {\n throw new Error(\n `Could not schedule a cron job for \"${taskExpression}\": no function found.`\n );\n }\n\n const jobLabel = taskName ?? taskExpression;\n\n try {\n const { pattern, cronerOptions } = toCronerArgs(options);\n const job = createCronJob(pattern, cronerOptions, fn, jobLabel);\n\n jobsSpecs.push({\n job: attachHandle(job, fn, jobLabel),\n options,\n name: taskName,\n });\n } catch (error) {\n strapi.log.error(`Could not schedule cron job \"${jobLabel}\": invalid schedule`, error);\n }\n }\n return this;\n },\n\n remove(name: string) {\n if (!name) throw new Error('You must provide a name to remove a cron job.');\n const remaining: JobSpec[] = [];\n for (const jobSpec of jobsSpecs) {\n if (jobSpec.name === name) {\n jobSpec.job.stop();\n } else {\n remaining.push(jobSpec);\n }\n }\n jobsSpecs = remaining;\n return this;\n },\n\n start() {\n jobsSpecs.forEach(({ job }) => job.resume());\n running = true;\n return this;\n },\n\n stop() {\n jobsSpecs.forEach(({ job }) => job.pause());\n running = false;\n return this;\n },\n\n destroy() {\n this.stop();\n jobsSpecs.forEach(({ job }) => job.stop());\n jobsSpecs = [];\n return this;\n },\n\n get jobs() {\n return jobsSpecs;\n },\n };\n};\n\nexport default createCronService;\n"],"names":["lazyCroner","getCroner","require","RECURRENCE_KEYS","isPlainObject","value","Date","isRuleOptions","isRecurrenceSpec","some","key","toDate","toSegmentPart","offset","String","segmentToField","segment","fallback","part","Array","isArray","map","item","join","start","from","end","to","range","step","recurrenceToCron","spec","second","minute","hour","date","month","dayOfWeek","fields","year","toCronerOptions","tz","cronerOptions","timezone","startAt","stopAt","ruleToPattern","rule","pattern","oneShot","Error","toCronerArgs","options","maxRuns","createCronService","jobsSpecs","running","createRunner","fn","nextFireDate","run","self","fireDate","currentRun","nextRun","strapi","setNextRun","createCronJob","jobLabel","Cron","CronCtor","runner","job","paused","sloppyRanges","catch","error","log","attachHandle","current","handle","invoke","cancel","stop","nextInvocation","reschedule","idx","findIndex","jobSpec","next","Proxy","get","_target","property","Reflect","bind","add","tasks","taskExpression","Object","keys","taskValue","taskName","task","push","name","remove","remaining","forEach","resume","pause","destroy","jobs"],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _ = require('lodash');
|
|
4
4
|
var transforms = require('./transforms.js');
|
|
5
5
|
|
|
6
|
-
const applyTransforms =
|
|
6
|
+
const applyTransforms = _.curry((schema, data)=>{
|
|
7
7
|
const attributeNames = Object.keys(data);
|
|
8
8
|
for (const attributeName of attributeNames){
|
|
9
9
|
const value = data[attributeName];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/services/document-service/attributes/index.ts"],"sourcesContent":["import { curry } from 'lodash
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/services/document-service/attributes/index.ts"],"sourcesContent":["import { curry } from 'lodash';\n\nimport type { UID, Modules, Schema } from '@strapi/types';\n\nimport transforms from './transforms';\n\n// aliasing the type to make it easier to read\ntype Data = Modules.Documents.Params.Data.Input<UID.Schema>;\n\nconst applyTransforms = curry((schema: Schema.Schema, data: Data) => {\n const attributeNames = Object.keys(data) as Array<keyof typeof data & string>;\n\n for (const attributeName of attributeNames) {\n const value = data[attributeName];\n\n const attribute = schema.attributes[attributeName];\n\n if (!attribute) {\n continue;\n }\n\n const transform = transforms[attribute.type];\n\n if (transform) {\n const attributeContext = { attributeName, attribute };\n\n data[attributeName] = transform(value, attributeContext);\n }\n }\n\n return data;\n});\n\nexport { applyTransforms };\n"],"names":["applyTransforms","curry","schema","data","attributeNames","Object","keys","attributeName","value","attribute","attributes","transform","transforms","type","attributeContext"],"mappings":";;;;;AASA,MAAMA,eAAAA,GAAkBC,OAAAA,CAAM,CAACC,MAAAA,EAAuBC,IAAAA,GAAAA;IACpD,MAAMC,cAAAA,GAAiBC,MAAAA,CAAOC,IAAI,CAACH,IAAAA,CAAAA;IAEnC,KAAK,MAAMI,iBAAiBH,cAAAA,CAAgB;QAC1C,MAAMI,KAAAA,GAAQL,IAAI,CAACI,aAAAA,CAAc;AAEjC,QAAA,MAAME,SAAAA,GAAYP,MAAAA,CAAOQ,UAAU,CAACH,aAAAA,CAAc;AAElD,QAAA,IAAI,CAACE,SAAAA,EAAW;AACd,YAAA;AACF,QAAA;AAEA,QAAA,MAAME,SAAAA,GAAYC,UAAU,CAACH,SAAAA,CAAUI,IAAI,CAAC;AAE5C,QAAA,IAAIF,SAAAA,EAAW;AACb,YAAA,MAAMG,gBAAAA,GAAmB;AAAEP,gBAAAA,aAAAA;AAAeE,gBAAAA;AAAU,aAAA;AAEpDN,YAAAA,IAAI,CAACI,aAAAA,CAAc,GAAGI,SAAAA,CAAUH,KAAAA,EAAOM,gBAAAA,CAAAA;AACzC,QAAA;AACF,IAAA;IAEA,OAAOX,IAAAA;AACT,CAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../../src/services/document-service/attributes/index.ts"],"sourcesContent":["import { curry } from 'lodash
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../../src/services/document-service/attributes/index.ts"],"sourcesContent":["import { curry } from 'lodash';\n\nimport type { UID, Modules, Schema } from '@strapi/types';\n\nimport transforms from './transforms';\n\n// aliasing the type to make it easier to read\ntype Data = Modules.Documents.Params.Data.Input<UID.Schema>;\n\nconst applyTransforms = curry((schema: Schema.Schema, data: Data) => {\n const attributeNames = Object.keys(data) as Array<keyof typeof data & string>;\n\n for (const attributeName of attributeNames) {\n const value = data[attributeName];\n\n const attribute = schema.attributes[attributeName];\n\n if (!attribute) {\n continue;\n }\n\n const transform = transforms[attribute.type];\n\n if (transform) {\n const attributeContext = { attributeName, attribute };\n\n data[attributeName] = transform(value, attributeContext);\n }\n }\n\n return data;\n});\n\nexport { applyTransforms };\n"],"names":["applyTransforms","curry","schema","data","attributeNames","Object","keys","attributeName","value","attribute","attributes","transform","transforms","type","attributeContext"],"mappings":";;;AASA,MAAMA,eAAAA,GAAkBC,KAAAA,CAAM,CAACC,MAAAA,EAAuBC,IAAAA,GAAAA;IACpD,MAAMC,cAAAA,GAAiBC,MAAAA,CAAOC,IAAI,CAACH,IAAAA,CAAAA;IAEnC,KAAK,MAAMI,iBAAiBH,cAAAA,CAAgB;QAC1C,MAAMI,KAAAA,GAAQL,IAAI,CAACI,aAAAA,CAAc;AAEjC,QAAA,MAAME,SAAAA,GAAYP,MAAAA,CAAOQ,UAAU,CAACH,aAAAA,CAAc;AAElD,QAAA,IAAI,CAACE,SAAAA,EAAW;AACd,YAAA;AACF,QAAA;AAEA,QAAA,MAAME,SAAAA,GAAYC,UAAU,CAACH,SAAAA,CAAUI,IAAI,CAAC;AAE5C,QAAA,IAAIF,SAAAA,EAAW;AACb,YAAA,MAAMG,gBAAAA,GAAmB;AAAEP,gBAAAA,aAAAA;AAAeE,gBAAAA;AAAU,aAAA;AAEpDN,YAAAA,IAAI,CAACI,aAAAA,CAAc,GAAGI,SAAAA,CAAUH,KAAAA,EAAOM,gBAAAA,CAAAA;AACzC,QAAA;AACF,IAAA;IAEA,OAAOX,IAAAA;AACT,CAAA;;;;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _ = require('lodash');
|
|
4
4
|
var bcrypt = require('bcryptjs');
|
|
5
5
|
|
|
6
6
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
@@ -13,10 +13,10 @@ const transforms = {
|
|
|
13
13
|
if (attribute.type !== 'password') {
|
|
14
14
|
throw new Error('Invalid attribute type');
|
|
15
15
|
}
|
|
16
|
-
if (!
|
|
16
|
+
if (!_.isString(value) && !(value instanceof Buffer)) {
|
|
17
17
|
return value;
|
|
18
18
|
}
|
|
19
|
-
const rounds =
|
|
19
|
+
const rounds = _.toNumber(_.get(attribute, 'encryption.rounds', 10));
|
|
20
20
|
return bcrypt__default.default.hashSync(value.toString(), rounds);
|
|
21
21
|
}
|
|
22
22
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transforms.js","sources":["../../../../src/services/document-service/attributes/transforms.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"transforms.js","sources":["../../../../src/services/document-service/attributes/transforms.ts"],"sourcesContent":["import { get, isString, toNumber } from 'lodash';\nimport type { Schema } from '@strapi/types';\nimport bcrypt from 'bcryptjs';\n\ntype Transforms = {\n [TKind in Schema.Attribute.Kind]?: (\n value: unknown,\n context: {\n attribute: Schema.Attribute.AnyAttribute;\n attributeName: string;\n }\n ) => any;\n};\n\nconst transforms: Transforms = {\n password(value, context) {\n const { attribute } = context;\n\n if (attribute.type !== 'password') {\n throw new Error('Invalid attribute type');\n }\n\n if (!isString(value) && !(value instanceof Buffer)) {\n return value;\n }\n\n const rounds = toNumber(get(attribute, 'encryption.rounds', 10));\n\n return bcrypt.hashSync(value.toString(), rounds);\n },\n};\n\nexport default transforms;\n"],"names":["transforms","password","value","context","attribute","type","Error","isString","Buffer","rounds","toNumber","get","bcrypt","hashSync","toString"],"mappings":";;;;;;;;;AAcA,MAAMA,UAAAA,GAAyB;IAC7BC,QAAAA,CAAAA,CAASC,KAAK,EAAEC,OAAO,EAAA;QACrB,MAAM,EAAEC,SAAS,EAAE,GAAGD,OAAAA;QAEtB,IAAIC,SAAAA,CAAUC,IAAI,KAAK,UAAA,EAAY;AACjC,YAAA,MAAM,IAAIC,KAAAA,CAAM,wBAAA,CAAA;AAClB,QAAA;AAEA,QAAA,IAAI,CAACC,UAAAA,CAASL,KAAAA,CAAAA,IAAU,EAAEA,KAAAA,YAAiBM,MAAK,CAAA,EAAI;YAClD,OAAON,KAAAA;AACT,QAAA;AAEA,QAAA,MAAMO,MAAAA,GAASC,UAAAA,CAASC,KAAAA,CAAIP,SAAAA,EAAW,mBAAA,EAAqB,EAAA,CAAA,CAAA;AAE5D,QAAA,OAAOQ,uBAAAA,CAAOC,QAAQ,CAACX,KAAAA,CAAMY,QAAQ,EAAA,EAAIL,MAAAA,CAAAA;AAC3C,IAAA;AACF;;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { isString, toNumber,
|
|
1
|
+
import { isString, toNumber, get } from 'lodash';
|
|
2
2
|
import bcrypt from 'bcryptjs';
|
|
3
3
|
|
|
4
4
|
const transforms = {
|
|
@@ -10,7 +10,7 @@ const transforms = {
|
|
|
10
10
|
if (!isString(value) && !(value instanceof Buffer)) {
|
|
11
11
|
return value;
|
|
12
12
|
}
|
|
13
|
-
const rounds = toNumber(
|
|
13
|
+
const rounds = toNumber(get(attribute, 'encryption.rounds', 10));
|
|
14
14
|
return bcrypt.hashSync(value.toString(), rounds);
|
|
15
15
|
}
|
|
16
16
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transforms.mjs","sources":["../../../../src/services/document-service/attributes/transforms.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"transforms.mjs","sources":["../../../../src/services/document-service/attributes/transforms.ts"],"sourcesContent":["import { get, isString, toNumber } from 'lodash';\nimport type { Schema } from '@strapi/types';\nimport bcrypt from 'bcryptjs';\n\ntype Transforms = {\n [TKind in Schema.Attribute.Kind]?: (\n value: unknown,\n context: {\n attribute: Schema.Attribute.AnyAttribute;\n attributeName: string;\n }\n ) => any;\n};\n\nconst transforms: Transforms = {\n password(value, context) {\n const { attribute } = context;\n\n if (attribute.type !== 'password') {\n throw new Error('Invalid attribute type');\n }\n\n if (!isString(value) && !(value instanceof Buffer)) {\n return value;\n }\n\n const rounds = toNumber(get(attribute, 'encryption.rounds', 10));\n\n return bcrypt.hashSync(value.toString(), rounds);\n },\n};\n\nexport default transforms;\n"],"names":["transforms","password","value","context","attribute","type","Error","isString","Buffer","rounds","toNumber","get","bcrypt","hashSync","toString"],"mappings":";;;AAcA,MAAMA,UAAAA,GAAyB;IAC7BC,QAAAA,CAAAA,CAASC,KAAK,EAAEC,OAAO,EAAA;QACrB,MAAM,EAAEC,SAAS,EAAE,GAAGD,OAAAA;QAEtB,IAAIC,SAAAA,CAAUC,IAAI,KAAK,UAAA,EAAY;AACjC,YAAA,MAAM,IAAIC,KAAAA,CAAM,wBAAA,CAAA;AAClB,QAAA;AAEA,QAAA,IAAI,CAACC,QAAAA,CAASL,KAAAA,CAAAA,IAAU,EAAEA,KAAAA,YAAiBM,MAAK,CAAA,EAAI;YAClD,OAAON,KAAAA;AACT,QAAA;AAEA,QAAA,MAAMO,MAAAA,GAASC,QAAAA,CAASC,GAAAA,CAAIP,SAAAA,EAAW,mBAAA,EAAqB,EAAA,CAAA,CAAA;AAE5D,QAAA,OAAOQ,MAAAA,CAAOC,QAAQ,CAACX,KAAAA,CAAMY,QAAQ,EAAA,EAAIL,MAAAA,CAAAA;AAC3C,IAAA;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../../src/services/document-service/components.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../../src/services/document-service/components.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var _ = require('lodash');
|
|
4
|
-
var fp = require('lodash/fp');
|
|
5
4
|
var strapiUtils = require('@strapi/utils');
|
|
6
5
|
var transformContentTypesToModels = require('../../utils/transform-content-types-to-models.js');
|
|
7
6
|
|
|
@@ -9,10 +8,10 @@ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
|
9
8
|
|
|
10
9
|
var ___default = /*#__PURE__*/_interopDefault(_);
|
|
11
10
|
|
|
12
|
-
const omitComponentData =
|
|
11
|
+
const omitComponentData = _.curry((schema, data)=>{
|
|
13
12
|
const { attributes } = schema;
|
|
14
13
|
const componentAttributes = Object.keys(attributes).filter((attributeName)=>strapiUtils.contentTypes.isComponentAttribute(attributes[attributeName]));
|
|
15
|
-
return
|
|
14
|
+
return _.omit(data, componentAttributes);
|
|
16
15
|
});
|
|
17
16
|
// NOTE: we could generalize the logic to allow CRUD of relation directly in the DB layer
|
|
18
17
|
const createComponents = async (uid, data)=>{
|
|
@@ -21,7 +20,7 @@ const createComponents = async (uid, data)=>{
|
|
|
21
20
|
const attributeNames = Object.keys(attributes);
|
|
22
21
|
for (const attributeName of attributeNames){
|
|
23
22
|
const attribute = attributes[attributeName];
|
|
24
|
-
if (!
|
|
23
|
+
if (!_.has(data, attributeName) || !strapiUtils.contentTypes.isComponentAttribute(attribute)) {
|
|
25
24
|
continue;
|
|
26
25
|
}
|
|
27
26
|
if (attribute.type === 'component') {
|
|
@@ -93,7 +92,7 @@ const getComponents = async (uid, entity)=>{
|
|
|
93
92
|
const componentBody = {};
|
|
94
93
|
for (const attributeName of Object.keys(attributes)){
|
|
95
94
|
const attribute = attributes[attributeName];
|
|
96
|
-
if (!
|
|
95
|
+
if (!_.has(data, attributeName)) {
|
|
97
96
|
continue;
|
|
98
97
|
}
|
|
99
98
|
if (attribute.type === 'component') {
|
|
@@ -154,8 +153,8 @@ const pickStringifiedId = ({ id })=>{
|
|
|
154
153
|
};
|
|
155
154
|
const deleteOldComponents = async (uid, componentUID, entityToUpdate, attributeName, componentValue)=>{
|
|
156
155
|
const previousValue = await strapi.db.query(uid).load(entityToUpdate, attributeName);
|
|
157
|
-
const idsToKeep = ___default.default.castArray(componentValue).filter(
|
|
158
|
-
const allIds = ___default.default.castArray(previousValue).filter(
|
|
156
|
+
const idsToKeep = ___default.default.castArray(componentValue).filter((value)=>_.has(value, 'id')).map(pickStringifiedId);
|
|
157
|
+
const allIds = ___default.default.castArray(previousValue).filter((value)=>_.has(value, 'id')).map(pickStringifiedId);
|
|
159
158
|
idsToKeep.forEach((id)=>{
|
|
160
159
|
if (!allIds.includes(id)) {
|
|
161
160
|
throw new strapiUtils.errors.ApplicationError(`Some of the provided components in ${attributeName} are not related to the entity`);
|
|
@@ -172,11 +171,11 @@ const deleteOldComponents = async (uid, componentUID, entityToUpdate, attributeN
|
|
|
172
171
|
};
|
|
173
172
|
const deleteOldDZComponents = async (uid, entityToUpdate, attributeName, dynamiczoneValues)=>{
|
|
174
173
|
const previousValue = await strapi.db.query(uid).load(entityToUpdate, attributeName);
|
|
175
|
-
const idsToKeep = ___default.default.castArray(dynamiczoneValues).filter(
|
|
174
|
+
const idsToKeep = ___default.default.castArray(dynamiczoneValues).filter((value)=>_.has(value, 'id')).map((v)=>({
|
|
176
175
|
id: pickStringifiedId(v),
|
|
177
176
|
__component: v.__component
|
|
178
177
|
}));
|
|
179
|
-
const allIds = ___default.default.castArray(previousValue).filter(
|
|
178
|
+
const allIds = ___default.default.castArray(previousValue).filter((value)=>_.has(value, 'id')).map((v)=>({
|
|
180
179
|
id: pickStringifiedId(v),
|
|
181
180
|
__component: v.__component
|
|
182
181
|
}));
|
|
@@ -238,10 +237,10 @@ const deleteComponents = async (uid, entityToDelete, { loadComponents = true } =
|
|
|
238
237
|
const createComponent = async (uid, data)=>{
|
|
239
238
|
const schema = strapi.getModel(uid);
|
|
240
239
|
const componentData = await createComponents(uid, data);
|
|
241
|
-
|
|
242
|
-
|
|
240
|
+
// Make sure we don't save the component with a pre-defined ID.
|
|
241
|
+
const entryData = assignComponentData(schema, componentData, _.omit(data, 'id'));
|
|
243
242
|
return strapi.db.query(uid).create({
|
|
244
|
-
data:
|
|
243
|
+
data: entryData
|
|
245
244
|
});
|
|
246
245
|
};
|
|
247
246
|
// components can have nested compos so this must be recursive
|
|
@@ -277,8 +276,8 @@ const deleteComponent = async (uid, componentToDelete)=>{
|
|
|
277
276
|
}
|
|
278
277
|
});
|
|
279
278
|
};
|
|
280
|
-
const assignComponentData =
|
|
281
|
-
return
|
|
279
|
+
const assignComponentData = _.curry((schema, componentData, data)=>{
|
|
280
|
+
return _.assign({}, componentData, omitComponentData(schema, data));
|
|
282
281
|
});
|
|
283
282
|
/** *************************
|
|
284
283
|
Component relation handling for document operations
|