@strapi/core 0.0.0-next.26bde6ef6bf3081acd31bd0e9dac0d9357028b9c → 0.0.0-next.29273b8e8a9a5aa635e5680190eda01f861431aa
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 +1 -0
- package/dist/Strapi.d.ts.map +1 -1
- package/dist/Strapi.js +24 -5
- package/dist/Strapi.js.map +1 -1
- package/dist/Strapi.mjs +24 -5
- package/dist/Strapi.mjs.map +1 -1
- package/dist/configuration/config-loader.js.map +1 -1
- package/dist/configuration/config-loader.mjs.map +1 -1
- package/dist/configuration/urls.js.map +1 -1
- package/dist/configuration/urls.mjs.map +1 -1
- package/dist/constants.d.ts +3 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +6 -0
- package/dist/constants.js.map +1 -0
- package/dist/constants.mjs +4 -0
- package/dist/constants.mjs.map +1 -0
- package/dist/container.js.map +1 -1
- package/dist/container.mjs.map +1 -1
- package/dist/core-api/controller/index.d.ts.map +1 -1
- package/dist/core-api/controller/index.js +2 -1
- package/dist/core-api/controller/index.js.map +1 -1
- package/dist/core-api/controller/index.mjs +2 -1
- package/dist/core-api/controller/index.mjs.map +1 -1
- package/dist/core-api/controller/transform.d.ts +3 -2
- package/dist/core-api/controller/transform.d.ts.map +1 -1
- package/dist/core-api/controller/transform.js +13 -3
- package/dist/core-api/controller/transform.js.map +1 -1
- package/dist/core-api/controller/transform.mjs +13 -3
- package/dist/core-api/controller/transform.mjs.map +1 -1
- package/dist/core-api/routes/index.d.ts +4 -22
- package/dist/core-api/routes/index.d.ts.map +1 -1
- package/dist/core-api/routes/index.js +150 -8
- package/dist/core-api/routes/index.js.map +1 -1
- package/dist/core-api/routes/index.mjs +131 -8
- package/dist/core-api/routes/index.mjs.map +1 -1
- package/dist/core-api/routes/validation/attributes.d.ts +244 -0
- package/dist/core-api/routes/validation/attributes.d.ts.map +1 -0
- package/dist/core-api/routes/validation/attributes.js +560 -0
- package/dist/core-api/routes/validation/attributes.js.map +1 -0
- package/dist/core-api/routes/validation/attributes.mjs +521 -0
- package/dist/core-api/routes/validation/attributes.mjs.map +1 -0
- package/dist/core-api/routes/validation/common.d.ts +105 -0
- package/dist/core-api/routes/validation/common.d.ts.map +1 -0
- package/dist/core-api/routes/validation/common.js +116 -0
- package/dist/core-api/routes/validation/common.js.map +1 -0
- package/dist/core-api/routes/validation/common.mjs +95 -0
- package/dist/core-api/routes/validation/common.mjs.map +1 -0
- package/dist/core-api/routes/validation/component.d.ts +34 -0
- package/dist/core-api/routes/validation/component.d.ts.map +1 -0
- package/dist/core-api/routes/validation/component.js +45 -0
- package/dist/core-api/routes/validation/component.js.map +1 -0
- package/dist/core-api/routes/validation/component.mjs +43 -0
- package/dist/core-api/routes/validation/component.mjs.map +1 -0
- package/dist/core-api/routes/validation/constants.d.ts +8 -0
- package/dist/core-api/routes/validation/constants.d.ts.map +1 -0
- package/dist/core-api/routes/validation/constants.js +18 -0
- package/dist/core-api/routes/validation/constants.js.map +1 -0
- package/dist/core-api/routes/validation/constants.mjs +16 -0
- package/dist/core-api/routes/validation/constants.mjs.map +1 -0
- package/dist/core-api/routes/validation/content-type.d.ts +128 -0
- package/dist/core-api/routes/validation/content-type.d.ts.map +1 -0
- package/dist/core-api/routes/validation/content-type.js +201 -0
- package/dist/core-api/routes/validation/content-type.js.map +1 -0
- package/dist/core-api/routes/validation/content-type.mjs +180 -0
- package/dist/core-api/routes/validation/content-type.mjs.map +1 -0
- package/dist/core-api/routes/validation/index.d.ts +5 -0
- package/dist/core-api/routes/validation/index.d.ts.map +1 -0
- package/dist/core-api/routes/validation/mappers.d.ts +105 -0
- package/dist/core-api/routes/validation/mappers.d.ts.map +1 -0
- package/dist/core-api/routes/validation/mappers.js +273 -0
- package/dist/core-api/routes/validation/mappers.js.map +1 -0
- package/dist/core-api/routes/validation/mappers.mjs +249 -0
- package/dist/core-api/routes/validation/mappers.mjs.map +1 -0
- package/dist/core-api/routes/validation/utils.d.ts +47 -0
- package/dist/core-api/routes/validation/utils.d.ts.map +1 -0
- package/dist/core-api/routes/validation/utils.js +128 -0
- package/dist/core-api/routes/validation/utils.js.map +1 -0
- package/dist/core-api/routes/validation/utils.mjs +106 -0
- package/dist/core-api/routes/validation/utils.mjs.map +1 -0
- 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/single-type.js.map +1 -1
- package/dist/core-api/service/single-type.mjs.map +1 -1
- package/dist/domain/content-type/index.d.ts.map +1 -1
- package/dist/domain/content-type/index.js +17 -1
- package/dist/domain/content-type/index.js.map +1 -1
- package/dist/domain/content-type/index.mjs +17 -1
- package/dist/domain/content-type/index.mjs.map +1 -1
- package/dist/domain/module/index.d.ts.map +1 -1
- package/dist/domain/module/index.js +3 -0
- package/dist/domain/module/index.js.map +1 -1
- package/dist/domain/module/index.mjs +3 -0
- package/dist/domain/module/index.mjs.map +1 -1
- package/dist/ee/index.js.map +1 -1
- package/dist/ee/index.mjs.map +1 -1
- package/dist/ee/license.js +1 -2
- package/dist/ee/license.js.map +1 -1
- package/dist/ee/license.mjs +1 -2
- package/dist/ee/license.mjs.map +1 -1
- package/dist/factories.d.ts +3 -1
- package/dist/factories.d.ts.map +1 -1
- package/dist/factories.js +10 -2
- package/dist/factories.js.map +1 -1
- package/dist/factories.mjs +10 -3
- package/dist/factories.mjs.map +1 -1
- package/dist/loaders/apis.js.map +1 -1
- package/dist/loaders/apis.mjs.map +1 -1
- package/dist/loaders/components.js.map +1 -1
- package/dist/loaders/components.mjs.map +1 -1
- package/dist/loaders/plugins/get-enabled-plugins.js.map +1 -1
- package/dist/loaders/plugins/get-enabled-plugins.mjs.map +1 -1
- package/dist/loaders/plugins/index.js +1 -1
- package/dist/loaders/plugins/index.js.map +1 -1
- package/dist/loaders/plugins/index.mjs +1 -1
- package/dist/loaders/plugins/index.mjs.map +1 -1
- package/dist/loaders/src-index.js.map +1 -1
- package/dist/loaders/src-index.mjs.map +1 -1
- package/dist/middlewares/cors.d.ts +9 -1
- package/dist/middlewares/cors.d.ts.map +1 -1
- package/dist/middlewares/cors.js +39 -17
- package/dist/middlewares/cors.js.map +1 -1
- package/dist/middlewares/cors.mjs +39 -18
- package/dist/middlewares/cors.mjs.map +1 -1
- package/dist/middlewares/logger.js.map +1 -1
- package/dist/middlewares/logger.mjs.map +1 -1
- package/dist/middlewares/response-time.js.map +1 -1
- package/dist/middlewares/response-time.mjs.map +1 -1
- package/dist/middlewares/security.d.ts.map +1 -1
- package/dist/middlewares/security.js +2 -15
- package/dist/middlewares/security.js.map +1 -1
- package/dist/middlewares/security.mjs +2 -15
- package/dist/middlewares/security.mjs.map +1 -1
- package/dist/migrations/database/5.0.0-discard-drafts.js +1 -1
- package/dist/migrations/database/5.0.0-discard-drafts.js.map +1 -1
- package/dist/migrations/database/5.0.0-discard-drafts.mjs +1 -1
- package/dist/migrations/database/5.0.0-discard-drafts.mjs.map +1 -1
- package/dist/migrations/first-published-at.d.ts +4 -0
- package/dist/migrations/first-published-at.d.ts.map +1 -0
- package/dist/migrations/first-published-at.js +51 -0
- package/dist/migrations/first-published-at.js.map +1 -0
- package/dist/migrations/first-published-at.mjs +49 -0
- package/dist/migrations/first-published-at.mjs.map +1 -0
- package/dist/migrations/index.d.ts.map +1 -1
- package/dist/migrations/index.js +5 -0
- package/dist/migrations/index.js.map +1 -1
- package/dist/migrations/index.mjs +5 -0
- package/dist/migrations/index.mjs.map +1 -1
- package/dist/package.json.js +20 -15
- package/dist/package.json.js.map +1 -1
- package/dist/package.json.mjs +20 -15
- package/dist/package.json.mjs.map +1 -1
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +2 -0
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/index.mjs +2 -0
- package/dist/providers/index.mjs.map +1 -1
- package/dist/providers/session-manager.d.ts +3 -0
- package/dist/providers/session-manager.d.ts.map +1 -0
- package/dist/providers/session-manager.js +23 -0
- package/dist/providers/session-manager.js.map +1 -0
- package/dist/providers/session-manager.mjs +21 -0
- package/dist/providers/session-manager.mjs.map +1 -0
- package/dist/registries/apis.js.map +1 -1
- package/dist/registries/apis.mjs.map +1 -1
- package/dist/registries/custom-fields.js.map +1 -1
- package/dist/registries/custom-fields.mjs.map +1 -1
- package/dist/registries/namespace.js.map +1 -1
- package/dist/registries/namespace.mjs.map +1 -1
- package/dist/registries/plugins.js.map +1 -1
- package/dist/registries/plugins.mjs.map +1 -1
- package/dist/registries/policies.js.map +1 -1
- package/dist/registries/policies.mjs.map +1 -1
- package/dist/services/config.js.map +1 -1
- package/dist/services/config.mjs.map +1 -1
- package/dist/services/content-api/index.d.ts +1 -1
- package/dist/services/content-api/index.d.ts.map +1 -1
- package/dist/services/content-api/index.js +1 -1
- package/dist/services/content-api/index.js.map +1 -1
- package/dist/services/content-api/index.mjs +2 -2
- package/dist/services/content-api/index.mjs.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/content-source-maps.d.ts +13 -0
- package/dist/services/content-source-maps.d.ts.map +1 -0
- package/dist/services/content-source-maps.js +108 -0
- package/dist/services/content-source-maps.js.map +1 -0
- package/dist/services/content-source-maps.mjs +106 -0
- package/dist/services/content-source-maps.mjs.map +1 -0
- package/dist/services/core-store.js.map +1 -1
- package/dist/services/core-store.mjs.map +1 -1
- package/dist/services/document-service/components.d.ts +31 -1
- package/dist/services/document-service/components.d.ts.map +1 -1
- package/dist/services/document-service/components.js +109 -0
- package/dist/services/document-service/components.js.map +1 -1
- package/dist/services/document-service/components.mjs +107 -1
- package/dist/services/document-service/components.mjs.map +1 -1
- package/dist/services/document-service/entries.d.ts.map +1 -1
- package/dist/services/document-service/entries.js.map +1 -1
- package/dist/services/document-service/entries.mjs.map +1 -1
- package/dist/services/document-service/first-published-at.d.ts +7 -0
- package/dist/services/document-service/first-published-at.d.ts.map +1 -0
- package/dist/services/document-service/first-published-at.js +31 -0
- package/dist/services/document-service/first-published-at.js.map +1 -0
- package/dist/services/document-service/first-published-at.mjs +28 -0
- package/dist/services/document-service/first-published-at.mjs.map +1 -0
- package/dist/services/document-service/internationalization.d.ts +6 -1
- package/dist/services/document-service/internationalization.d.ts.map +1 -1
- package/dist/services/document-service/internationalization.js +32 -0
- package/dist/services/document-service/internationalization.js.map +1 -1
- package/dist/services/document-service/internationalization.mjs +32 -1
- package/dist/services/document-service/internationalization.mjs.map +1 -1
- package/dist/services/document-service/repository.d.ts.map +1 -1
- package/dist/services/document-service/repository.js +17 -9
- package/dist/services/document-service/repository.js.map +1 -1
- package/dist/services/document-service/repository.mjs +19 -11
- package/dist/services/document-service/repository.mjs.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.js.map +1 -1
- package/dist/services/document-service/transform/id-map.mjs.map +1 -1
- package/dist/services/document-service/utils/clean-component-join-table.d.ts +7 -0
- package/dist/services/document-service/utils/clean-component-join-table.d.ts.map +1 -0
- package/dist/services/document-service/utils/clean-component-join-table.js +145 -0
- package/dist/services/document-service/utils/clean-component-join-table.js.map +1 -0
- package/dist/services/document-service/utils/clean-component-join-table.mjs +143 -0
- package/dist/services/document-service/utils/clean-component-join-table.mjs.map +1 -0
- package/dist/services/document-service/utils/unidirectional-relations.d.ts +19 -2
- package/dist/services/document-service/utils/unidirectional-relations.d.ts.map +1 -1
- package/dist/services/document-service/utils/unidirectional-relations.js +21 -6
- package/dist/services/document-service/utils/unidirectional-relations.js.map +1 -1
- package/dist/services/document-service/utils/unidirectional-relations.mjs +21 -6
- package/dist/services/document-service/utils/unidirectional-relations.mjs.map +1 -1
- package/dist/services/entity-service/index.js.map +1 -1
- package/dist/services/entity-service/index.mjs.map +1 -1
- package/dist/services/entity-validator/blocks-validator.js.map +1 -1
- package/dist/services/entity-validator/blocks-validator.mjs.map +1 -1
- package/dist/services/entity-validator/index.d.ts.map +1 -1
- package/dist/services/entity-validator/index.js +9 -0
- package/dist/services/entity-validator/index.js.map +1 -1
- package/dist/services/entity-validator/index.mjs +9 -0
- package/dist/services/entity-validator/index.mjs.map +1 -1
- package/dist/services/entity-validator/validators.d.ts +1 -0
- package/dist/services/entity-validator/validators.d.ts.map +1 -1
- package/dist/services/entity-validator/validators.js.map +1 -1
- package/dist/services/entity-validator/validators.mjs.map +1 -1
- package/dist/services/metrics/index.d.ts +1 -1
- package/dist/services/metrics/index.d.ts.map +1 -1
- package/dist/services/metrics/index.js +11 -9
- package/dist/services/metrics/index.js.map +1 -1
- package/dist/services/metrics/index.mjs +11 -9
- package/dist/services/metrics/index.mjs.map +1 -1
- package/dist/services/metrics/middleware.d.ts +2 -1
- package/dist/services/metrics/middleware.d.ts.map +1 -1
- package/dist/services/metrics/middleware.js +2 -2
- package/dist/services/metrics/middleware.js.map +1 -1
- package/dist/services/metrics/middleware.mjs +2 -2
- package/dist/services/metrics/middleware.mjs.map +1 -1
- package/dist/services/metrics/sender.d.ts.map +1 -1
- package/dist/services/metrics/sender.js +4 -3
- package/dist/services/metrics/sender.js.map +1 -1
- package/dist/services/metrics/sender.mjs +4 -3
- package/dist/services/metrics/sender.mjs.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/index.js.map +1 -1
- package/dist/services/server/index.mjs.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/register-routes.js +22 -2
- package/dist/services/server/register-routes.js.map +1 -1
- package/dist/services/server/register-routes.mjs +22 -2
- package/dist/services/server/register-routes.mjs.map +1 -1
- package/dist/services/server/routing.d.ts +10 -0
- package/dist/services/server/routing.d.ts.map +1 -1
- package/dist/services/server/routing.js +7 -1
- package/dist/services/server/routing.js.map +1 -1
- package/dist/services/server/routing.mjs +7 -1
- package/dist/services/server/routing.mjs.map +1 -1
- package/dist/services/session-manager.d.ts +167 -0
- package/dist/services/session-manager.d.ts.map +1 -0
- package/dist/services/session-manager.js +529 -0
- package/dist/services/session-manager.js.map +1 -0
- package/dist/services/session-manager.mjs +526 -0
- package/dist/services/session-manager.mjs.map +1 -0
- package/dist/services/utils/conditional-fields.d.ts +3 -0
- package/dist/services/utils/conditional-fields.d.ts.map +1 -0
- package/dist/services/utils/conditional-fields.js +22 -0
- package/dist/services/utils/conditional-fields.js.map +1 -0
- package/dist/services/utils/conditional-fields.mjs +20 -0
- package/dist/services/utils/conditional-fields.mjs.map +1 -0
- package/dist/services/webhook-runner.js.map +1 -1
- package/dist/services/webhook-runner.mjs.map +1 -1
- package/dist/services/worker-queue.js.map +1 -1
- package/dist/services/worker-queue.mjs.map +1 -1
- package/dist/utils/fetch.js.map +1 -1
- package/dist/utils/fetch.mjs.map +1 -1
- package/dist/utils/filepath-to-prop-path.js.map +1 -1
- package/dist/utils/filepath-to-prop-path.mjs.map +1 -1
- package/dist/utils/load-config-file.js.map +1 -1
- package/dist/utils/load-config-file.mjs.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 +196 -0
- package/dist/utils/transform-content-types-to-models.d.ts.map +1 -1
- package/package.json +20 -15
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { pipe, map, flatMap, values, sumBy } from 'lodash/fp';
|
|
2
|
+
|
|
3
|
+
const getNumberOfConditionalFields = ()=>{
|
|
4
|
+
const contentTypes = strapi.contentTypes;
|
|
5
|
+
const components = strapi.components;
|
|
6
|
+
const countConditionalFieldsInSchema = (schema)=>{
|
|
7
|
+
return pipe(map('attributes'), flatMap(values), sumBy((attribute)=>{
|
|
8
|
+
if (attribute.conditions && typeof attribute.conditions === 'object') {
|
|
9
|
+
return 1;
|
|
10
|
+
}
|
|
11
|
+
return 0;
|
|
12
|
+
}))(schema);
|
|
13
|
+
};
|
|
14
|
+
const contentTypeCount = countConditionalFieldsInSchema(contentTypes);
|
|
15
|
+
const componentCount = countConditionalFieldsInSchema(components);
|
|
16
|
+
return contentTypeCount + componentCount;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export { getNumberOfConditionalFields as default };
|
|
20
|
+
//# sourceMappingURL=conditional-fields.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conditional-fields.mjs","sources":["../../../src/services/utils/conditional-fields.ts"],"sourcesContent":["import { map, values, sumBy, pipe, flatMap } from 'lodash/fp';\nimport type { Schema, UID } from '@strapi/types';\n\nconst getNumberOfConditionalFields = () => {\n const contentTypes: Record<UID.ContentType, Schema.ContentType> = strapi.contentTypes;\n const components: Record<UID.Component, Schema.Component> = strapi.components;\n\n const countConditionalFieldsInSchema = (\n schema: Record<string, Schema.ContentType | Schema.Component>\n ) => {\n return pipe(\n map('attributes'),\n flatMap(values),\n sumBy((attribute: Schema.Attribute.AnyAttribute) => {\n if (attribute.conditions && typeof attribute.conditions === 'object') {\n return 1;\n }\n return 0;\n })\n )(schema);\n };\n\n const contentTypeCount = countConditionalFieldsInSchema(contentTypes);\n const componentCount = countConditionalFieldsInSchema(components);\n\n return contentTypeCount + componentCount;\n};\n\nexport default getNumberOfConditionalFields;\n"],"names":["getNumberOfConditionalFields","contentTypes","strapi","components","countConditionalFieldsInSchema","schema","pipe","map","flatMap","values","sumBy","attribute","conditions","contentTypeCount","componentCount"],"mappings":";;AAGA,MAAMA,4BAA+B,GAAA,IAAA;IACnC,MAAMC,YAAAA,GAA4DC,OAAOD,YAAY;IACrF,MAAME,UAAAA,GAAsDD,OAAOC,UAAU;AAE7E,IAAA,MAAMC,iCAAiC,CACrCC,MAAAA,GAAAA;AAEA,QAAA,OAAOC,KACLC,GAAI,CAAA,YAAA,CAAA,EACJC,OAAQC,CAAAA,MAAAA,CAAAA,EACRC,MAAM,CAACC,SAAAA,GAAAA;AACL,YAAA,IAAIA,UAAUC,UAAU,IAAI,OAAOD,SAAUC,CAAAA,UAAU,KAAK,QAAU,EAAA;gBACpE,OAAO,CAAA;AACT;YACA,OAAO,CAAA;SAETP,CAAAA,CAAAA,CAAAA,MAAAA,CAAAA;AACJ,KAAA;AAEA,IAAA,MAAMQ,mBAAmBT,8BAA+BH,CAAAA,YAAAA,CAAAA;AACxD,IAAA,MAAMa,iBAAiBV,8BAA+BD,CAAAA,UAAAA,CAAAA;AAEtD,IAAA,OAAOU,gBAAmBC,GAAAA,cAAAA;AAC5B;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhook-runner.js","sources":["../../src/services/webhook-runner.ts"],"sourcesContent":["/**\n * The event hub is Strapi's event control center.\n */\n\nimport createdDebugger from 'debug';\nimport _ from 'lodash';\nimport type { Logger } from '@strapi/logger';\n\nimport type { Modules } from '@strapi/types';\nimport WorkerQueue from './worker-queue';\nimport type { EventHub } from './event-hub';\nimport type { Fetch } from '../utils/fetch';\n\ntype Webhook = Modules.WebhookStore.Webhook;\n\ninterface Config {\n defaultHeaders: Record<string, string>;\n}\n\ninterface ConstructorParameters {\n eventHub: EventHub;\n logger: Logger;\n configuration?: Record<string, unknown>;\n fetch: Fetch;\n}\n\ninterface Event {\n event: string;\n info: Record<string, unknown>;\n}\n\ntype Listener = (info: Record<string, unknown>) => Promise<void>;\n\nconst debug = createdDebugger('strapi:webhook');\n\nconst defaultConfiguration: Config = {\n defaultHeaders: {},\n};\n\nclass WebhookRunner {\n private eventHub: EventHub;\n\n private logger: Logger;\n\n private config: Config;\n\n private webhooksMap: Map<string, Webhook[]> = new Map();\n\n private listeners: Map<string, Listener> = new Map();\n\n private queue: WorkerQueue<Event, void>;\n\n private fetch: Fetch;\n\n constructor({ eventHub, logger, configuration = {}, fetch }: ConstructorParameters) {\n debug('Initialized webhook runner');\n this.eventHub = eventHub;\n this.logger = logger;\n this.fetch = fetch;\n\n if (typeof configuration !== 'object') {\n throw new Error(\n 'Invalid configuration provided to the webhookRunner.\\nCheck your server.json -> webhooks configuration'\n );\n }\n\n this.config = _.merge(defaultConfiguration, configuration);\n\n this.queue = new WorkerQueue({ logger, concurrency: 5 });\n\n this.queue.subscribe(this.executeListener.bind(this));\n }\n\n deleteListener(event: string) {\n debug(`Deleting listener for event '${event}'`);\n\n const fn = this.listeners.get(event);\n\n if (fn !== undefined) {\n this.eventHub.off(event, fn);\n this.listeners.delete(event);\n }\n }\n\n createListener(event: string) {\n debug(`Creating listener for event '${event}'`);\n if (this.listeners.has(event)) {\n this.logger.error(\n `The webhook runner is already listening for the event '${event}'. Did you mean to call .register() ?`\n );\n }\n\n const listen = async (info: Event['info']) => {\n this.queue.enqueue({ event, info });\n };\n\n this.listeners.set(event, listen);\n this.eventHub.on(event, listen);\n }\n\n async executeListener({ event, info }: Event) {\n debug(`Executing webhook for event '${event}'`);\n const webhooks = this.webhooksMap.get(event) || [];\n const activeWebhooks = webhooks.filter((webhook) => webhook.isEnabled === true);\n\n for (const webhook of activeWebhooks) {\n await this.run(webhook, event, info).catch((error: unknown) => {\n this.logger.error('Error running webhook');\n this.logger.error(error);\n });\n }\n }\n\n run(webhook: Webhook, event: string, info = {}) {\n const { url, headers } = webhook;\n\n return this.fetch(url, {\n method: 'post',\n body: JSON.stringify({\n event,\n createdAt: new Date(),\n ...info,\n }),\n headers: {\n ...this.config.defaultHeaders,\n ...headers,\n 'X-Strapi-Event': event,\n 'Content-Type': 'application/json',\n },\n signal: AbortSignal.timeout(10000),\n })\n .then(async (res) => {\n if (res.ok) {\n return {\n statusCode: res.status,\n };\n }\n\n return {\n statusCode: res.status,\n message: await res.text(),\n };\n })\n .catch((err) => {\n return {\n statusCode: 500,\n message: err.message,\n };\n });\n }\n\n add(webhook: Webhook) {\n debug(`Registering webhook '${webhook.id}'`);\n const { events } = webhook;\n\n events.forEach((event) => {\n if (this.webhooksMap.has(event)) {\n this.webhooksMap.get(event)?.push(webhook);\n } else {\n this.webhooksMap.set(event, [webhook]);\n this.createListener(event);\n }\n });\n }\n\n update(webhook: Webhook) {\n debug(`Refreshing webhook '${webhook.id}'`);\n this.remove(webhook);\n this.add(webhook);\n }\n\n remove(webhook: Webhook) {\n debug(`Unregistering webhook '${webhook.id}'`);\n\n this.webhooksMap.forEach((webhooks, event) => {\n const filteredWebhooks = webhooks.filter((value) => value.id !== webhook.id);\n\n // Cleanup hanging listeners\n if (filteredWebhooks.length === 0) {\n this.webhooksMap.delete(event);\n this.deleteListener(event);\n } else {\n this.webhooksMap.set(event, filteredWebhooks);\n }\n });\n }\n}\n\n/**\n * Expose a factory function instead of the class\n */\nexport default function createWebhookRunner(opts: ConstructorParameters): WebhookRunner {\n return new WebhookRunner(opts);\n}\n\nexport type { WebhookRunner };\n"],"names":["debug","createdDebugger","defaultConfiguration","defaultHeaders","WebhookRunner","deleteListener","event","fn","listeners","get","undefined","eventHub","off","delete","createListener","has","logger","error","listen","info","queue","enqueue","set","on","executeListener","webhooks","webhooksMap","activeWebhooks","filter","webhook","isEnabled","run","catch","url","headers","fetch","method","body","JSON","stringify","createdAt","Date","config","signal","AbortSignal","timeout","then","res","ok","statusCode","status","message","text","err","add","id","events","forEach","push","update","remove","filteredWebhooks","value","length","constructor","configuration","Map","Error","_","merge","WorkerQueue","concurrency","subscribe","bind","createWebhookRunner","opts"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"webhook-runner.js","sources":["../../src/services/webhook-runner.ts"],"sourcesContent":["/**\n * The event hub is Strapi's event control center.\n */\n\nimport createdDebugger from 'debug';\nimport _ from 'lodash';\nimport type { Logger } from '@strapi/logger';\n\nimport type { Modules } from '@strapi/types';\nimport WorkerQueue from './worker-queue';\nimport type { EventHub } from './event-hub';\nimport type { Fetch } from '../utils/fetch';\n\ntype Webhook = Modules.WebhookStore.Webhook;\n\ninterface Config {\n defaultHeaders: Record<string, string>;\n}\n\ninterface ConstructorParameters {\n eventHub: EventHub;\n logger: Logger;\n configuration?: Record<string, unknown>;\n fetch: Fetch;\n}\n\ninterface Event {\n event: string;\n info: Record<string, unknown>;\n}\n\ntype Listener = (info: Record<string, unknown>) => Promise<void>;\n\nconst debug = createdDebugger('strapi:webhook');\n\nconst defaultConfiguration: Config = {\n defaultHeaders: {},\n};\n\nclass WebhookRunner {\n private eventHub: EventHub;\n\n private logger: Logger;\n\n private config: Config;\n\n private webhooksMap: Map<string, Webhook[]> = new Map();\n\n private listeners: Map<string, Listener> = new Map();\n\n private queue: WorkerQueue<Event, void>;\n\n private fetch: Fetch;\n\n constructor({ eventHub, logger, configuration = {}, fetch }: ConstructorParameters) {\n debug('Initialized webhook runner');\n this.eventHub = eventHub;\n this.logger = logger;\n this.fetch = fetch;\n\n if (typeof configuration !== 'object') {\n throw new Error(\n 'Invalid configuration provided to the webhookRunner.\\nCheck your server.json -> webhooks configuration'\n );\n }\n\n this.config = _.merge(defaultConfiguration, configuration);\n\n this.queue = new WorkerQueue({ logger, concurrency: 5 });\n\n this.queue.subscribe(this.executeListener.bind(this));\n }\n\n deleteListener(event: string) {\n debug(`Deleting listener for event '${event}'`);\n\n const fn = this.listeners.get(event);\n\n if (fn !== undefined) {\n this.eventHub.off(event, fn);\n this.listeners.delete(event);\n }\n }\n\n createListener(event: string) {\n debug(`Creating listener for event '${event}'`);\n if (this.listeners.has(event)) {\n this.logger.error(\n `The webhook runner is already listening for the event '${event}'. Did you mean to call .register() ?`\n );\n }\n\n const listen = async (info: Event['info']) => {\n this.queue.enqueue({ event, info });\n };\n\n this.listeners.set(event, listen);\n this.eventHub.on(event, listen);\n }\n\n async executeListener({ event, info }: Event) {\n debug(`Executing webhook for event '${event}'`);\n const webhooks = this.webhooksMap.get(event) || [];\n const activeWebhooks = webhooks.filter((webhook) => webhook.isEnabled === true);\n\n for (const webhook of activeWebhooks) {\n await this.run(webhook, event, info).catch((error: unknown) => {\n this.logger.error('Error running webhook');\n this.logger.error(error);\n });\n }\n }\n\n run(webhook: Webhook, event: string, info = {}) {\n const { url, headers } = webhook;\n\n return this.fetch(url, {\n method: 'post',\n body: JSON.stringify({\n event,\n createdAt: new Date(),\n ...info,\n }),\n headers: {\n ...this.config.defaultHeaders,\n ...headers,\n 'X-Strapi-Event': event,\n 'Content-Type': 'application/json',\n },\n signal: AbortSignal.timeout(10000),\n })\n .then(async (res) => {\n if (res.ok) {\n return {\n statusCode: res.status,\n };\n }\n\n return {\n statusCode: res.status,\n message: await res.text(),\n };\n })\n .catch((err) => {\n return {\n statusCode: 500,\n message: err.message,\n };\n });\n }\n\n add(webhook: Webhook) {\n debug(`Registering webhook '${webhook.id}'`);\n const { events } = webhook;\n\n events.forEach((event) => {\n if (this.webhooksMap.has(event)) {\n this.webhooksMap.get(event)?.push(webhook);\n } else {\n this.webhooksMap.set(event, [webhook]);\n this.createListener(event);\n }\n });\n }\n\n update(webhook: Webhook) {\n debug(`Refreshing webhook '${webhook.id}'`);\n this.remove(webhook);\n this.add(webhook);\n }\n\n remove(webhook: Webhook) {\n debug(`Unregistering webhook '${webhook.id}'`);\n\n this.webhooksMap.forEach((webhooks, event) => {\n const filteredWebhooks = webhooks.filter((value) => value.id !== webhook.id);\n\n // Cleanup hanging listeners\n if (filteredWebhooks.length === 0) {\n this.webhooksMap.delete(event);\n this.deleteListener(event);\n } else {\n this.webhooksMap.set(event, filteredWebhooks);\n }\n });\n }\n}\n\n/**\n * Expose a factory function instead of the class\n */\nexport default function createWebhookRunner(opts: ConstructorParameters): WebhookRunner {\n return new WebhookRunner(opts);\n}\n\nexport type { WebhookRunner };\n"],"names":["debug","createdDebugger","defaultConfiguration","defaultHeaders","WebhookRunner","deleteListener","event","fn","listeners","get","undefined","eventHub","off","delete","createListener","has","logger","error","listen","info","queue","enqueue","set","on","executeListener","webhooks","webhooksMap","activeWebhooks","filter","webhook","isEnabled","run","catch","url","headers","fetch","method","body","JSON","stringify","createdAt","Date","config","signal","AbortSignal","timeout","then","res","ok","statusCode","status","message","text","err","add","id","events","forEach","push","update","remove","filteredWebhooks","value","length","configuration","Map","Error","_","merge","WorkerQueue","concurrency","subscribe","bind","createWebhookRunner","opts"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhook-runner.mjs","sources":["../../src/services/webhook-runner.ts"],"sourcesContent":["/**\n * The event hub is Strapi's event control center.\n */\n\nimport createdDebugger from 'debug';\nimport _ from 'lodash';\nimport type { Logger } from '@strapi/logger';\n\nimport type { Modules } from '@strapi/types';\nimport WorkerQueue from './worker-queue';\nimport type { EventHub } from './event-hub';\nimport type { Fetch } from '../utils/fetch';\n\ntype Webhook = Modules.WebhookStore.Webhook;\n\ninterface Config {\n defaultHeaders: Record<string, string>;\n}\n\ninterface ConstructorParameters {\n eventHub: EventHub;\n logger: Logger;\n configuration?: Record<string, unknown>;\n fetch: Fetch;\n}\n\ninterface Event {\n event: string;\n info: Record<string, unknown>;\n}\n\ntype Listener = (info: Record<string, unknown>) => Promise<void>;\n\nconst debug = createdDebugger('strapi:webhook');\n\nconst defaultConfiguration: Config = {\n defaultHeaders: {},\n};\n\nclass WebhookRunner {\n private eventHub: EventHub;\n\n private logger: Logger;\n\n private config: Config;\n\n private webhooksMap: Map<string, Webhook[]> = new Map();\n\n private listeners: Map<string, Listener> = new Map();\n\n private queue: WorkerQueue<Event, void>;\n\n private fetch: Fetch;\n\n constructor({ eventHub, logger, configuration = {}, fetch }: ConstructorParameters) {\n debug('Initialized webhook runner');\n this.eventHub = eventHub;\n this.logger = logger;\n this.fetch = fetch;\n\n if (typeof configuration !== 'object') {\n throw new Error(\n 'Invalid configuration provided to the webhookRunner.\\nCheck your server.json -> webhooks configuration'\n );\n }\n\n this.config = _.merge(defaultConfiguration, configuration);\n\n this.queue = new WorkerQueue({ logger, concurrency: 5 });\n\n this.queue.subscribe(this.executeListener.bind(this));\n }\n\n deleteListener(event: string) {\n debug(`Deleting listener for event '${event}'`);\n\n const fn = this.listeners.get(event);\n\n if (fn !== undefined) {\n this.eventHub.off(event, fn);\n this.listeners.delete(event);\n }\n }\n\n createListener(event: string) {\n debug(`Creating listener for event '${event}'`);\n if (this.listeners.has(event)) {\n this.logger.error(\n `The webhook runner is already listening for the event '${event}'. Did you mean to call .register() ?`\n );\n }\n\n const listen = async (info: Event['info']) => {\n this.queue.enqueue({ event, info });\n };\n\n this.listeners.set(event, listen);\n this.eventHub.on(event, listen);\n }\n\n async executeListener({ event, info }: Event) {\n debug(`Executing webhook for event '${event}'`);\n const webhooks = this.webhooksMap.get(event) || [];\n const activeWebhooks = webhooks.filter((webhook) => webhook.isEnabled === true);\n\n for (const webhook of activeWebhooks) {\n await this.run(webhook, event, info).catch((error: unknown) => {\n this.logger.error('Error running webhook');\n this.logger.error(error);\n });\n }\n }\n\n run(webhook: Webhook, event: string, info = {}) {\n const { url, headers } = webhook;\n\n return this.fetch(url, {\n method: 'post',\n body: JSON.stringify({\n event,\n createdAt: new Date(),\n ...info,\n }),\n headers: {\n ...this.config.defaultHeaders,\n ...headers,\n 'X-Strapi-Event': event,\n 'Content-Type': 'application/json',\n },\n signal: AbortSignal.timeout(10000),\n })\n .then(async (res) => {\n if (res.ok) {\n return {\n statusCode: res.status,\n };\n }\n\n return {\n statusCode: res.status,\n message: await res.text(),\n };\n })\n .catch((err) => {\n return {\n statusCode: 500,\n message: err.message,\n };\n });\n }\n\n add(webhook: Webhook) {\n debug(`Registering webhook '${webhook.id}'`);\n const { events } = webhook;\n\n events.forEach((event) => {\n if (this.webhooksMap.has(event)) {\n this.webhooksMap.get(event)?.push(webhook);\n } else {\n this.webhooksMap.set(event, [webhook]);\n this.createListener(event);\n }\n });\n }\n\n update(webhook: Webhook) {\n debug(`Refreshing webhook '${webhook.id}'`);\n this.remove(webhook);\n this.add(webhook);\n }\n\n remove(webhook: Webhook) {\n debug(`Unregistering webhook '${webhook.id}'`);\n\n this.webhooksMap.forEach((webhooks, event) => {\n const filteredWebhooks = webhooks.filter((value) => value.id !== webhook.id);\n\n // Cleanup hanging listeners\n if (filteredWebhooks.length === 0) {\n this.webhooksMap.delete(event);\n this.deleteListener(event);\n } else {\n this.webhooksMap.set(event, filteredWebhooks);\n }\n });\n }\n}\n\n/**\n * Expose a factory function instead of the class\n */\nexport default function createWebhookRunner(opts: ConstructorParameters): WebhookRunner {\n return new WebhookRunner(opts);\n}\n\nexport type { WebhookRunner };\n"],"names":["debug","createdDebugger","defaultConfiguration","defaultHeaders","WebhookRunner","deleteListener","event","fn","listeners","get","undefined","eventHub","off","delete","createListener","has","logger","error","listen","info","queue","enqueue","set","on","executeListener","webhooks","webhooksMap","activeWebhooks","filter","webhook","isEnabled","run","catch","url","headers","fetch","method","body","JSON","stringify","createdAt","Date","config","signal","AbortSignal","timeout","then","res","ok","statusCode","status","message","text","err","add","id","events","forEach","push","update","remove","filteredWebhooks","value","length","constructor","configuration","Map","Error","_","merge","WorkerQueue","concurrency","subscribe","bind","createWebhookRunner","opts"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"webhook-runner.mjs","sources":["../../src/services/webhook-runner.ts"],"sourcesContent":["/**\n * The event hub is Strapi's event control center.\n */\n\nimport createdDebugger from 'debug';\nimport _ from 'lodash';\nimport type { Logger } from '@strapi/logger';\n\nimport type { Modules } from '@strapi/types';\nimport WorkerQueue from './worker-queue';\nimport type { EventHub } from './event-hub';\nimport type { Fetch } from '../utils/fetch';\n\ntype Webhook = Modules.WebhookStore.Webhook;\n\ninterface Config {\n defaultHeaders: Record<string, string>;\n}\n\ninterface ConstructorParameters {\n eventHub: EventHub;\n logger: Logger;\n configuration?: Record<string, unknown>;\n fetch: Fetch;\n}\n\ninterface Event {\n event: string;\n info: Record<string, unknown>;\n}\n\ntype Listener = (info: Record<string, unknown>) => Promise<void>;\n\nconst debug = createdDebugger('strapi:webhook');\n\nconst defaultConfiguration: Config = {\n defaultHeaders: {},\n};\n\nclass WebhookRunner {\n private eventHub: EventHub;\n\n private logger: Logger;\n\n private config: Config;\n\n private webhooksMap: Map<string, Webhook[]> = new Map();\n\n private listeners: Map<string, Listener> = new Map();\n\n private queue: WorkerQueue<Event, void>;\n\n private fetch: Fetch;\n\n constructor({ eventHub, logger, configuration = {}, fetch }: ConstructorParameters) {\n debug('Initialized webhook runner');\n this.eventHub = eventHub;\n this.logger = logger;\n this.fetch = fetch;\n\n if (typeof configuration !== 'object') {\n throw new Error(\n 'Invalid configuration provided to the webhookRunner.\\nCheck your server.json -> webhooks configuration'\n );\n }\n\n this.config = _.merge(defaultConfiguration, configuration);\n\n this.queue = new WorkerQueue({ logger, concurrency: 5 });\n\n this.queue.subscribe(this.executeListener.bind(this));\n }\n\n deleteListener(event: string) {\n debug(`Deleting listener for event '${event}'`);\n\n const fn = this.listeners.get(event);\n\n if (fn !== undefined) {\n this.eventHub.off(event, fn);\n this.listeners.delete(event);\n }\n }\n\n createListener(event: string) {\n debug(`Creating listener for event '${event}'`);\n if (this.listeners.has(event)) {\n this.logger.error(\n `The webhook runner is already listening for the event '${event}'. Did you mean to call .register() ?`\n );\n }\n\n const listen = async (info: Event['info']) => {\n this.queue.enqueue({ event, info });\n };\n\n this.listeners.set(event, listen);\n this.eventHub.on(event, listen);\n }\n\n async executeListener({ event, info }: Event) {\n debug(`Executing webhook for event '${event}'`);\n const webhooks = this.webhooksMap.get(event) || [];\n const activeWebhooks = webhooks.filter((webhook) => webhook.isEnabled === true);\n\n for (const webhook of activeWebhooks) {\n await this.run(webhook, event, info).catch((error: unknown) => {\n this.logger.error('Error running webhook');\n this.logger.error(error);\n });\n }\n }\n\n run(webhook: Webhook, event: string, info = {}) {\n const { url, headers } = webhook;\n\n return this.fetch(url, {\n method: 'post',\n body: JSON.stringify({\n event,\n createdAt: new Date(),\n ...info,\n }),\n headers: {\n ...this.config.defaultHeaders,\n ...headers,\n 'X-Strapi-Event': event,\n 'Content-Type': 'application/json',\n },\n signal: AbortSignal.timeout(10000),\n })\n .then(async (res) => {\n if (res.ok) {\n return {\n statusCode: res.status,\n };\n }\n\n return {\n statusCode: res.status,\n message: await res.text(),\n };\n })\n .catch((err) => {\n return {\n statusCode: 500,\n message: err.message,\n };\n });\n }\n\n add(webhook: Webhook) {\n debug(`Registering webhook '${webhook.id}'`);\n const { events } = webhook;\n\n events.forEach((event) => {\n if (this.webhooksMap.has(event)) {\n this.webhooksMap.get(event)?.push(webhook);\n } else {\n this.webhooksMap.set(event, [webhook]);\n this.createListener(event);\n }\n });\n }\n\n update(webhook: Webhook) {\n debug(`Refreshing webhook '${webhook.id}'`);\n this.remove(webhook);\n this.add(webhook);\n }\n\n remove(webhook: Webhook) {\n debug(`Unregistering webhook '${webhook.id}'`);\n\n this.webhooksMap.forEach((webhooks, event) => {\n const filteredWebhooks = webhooks.filter((value) => value.id !== webhook.id);\n\n // Cleanup hanging listeners\n if (filteredWebhooks.length === 0) {\n this.webhooksMap.delete(event);\n this.deleteListener(event);\n } else {\n this.webhooksMap.set(event, filteredWebhooks);\n }\n });\n }\n}\n\n/**\n * Expose a factory function instead of the class\n */\nexport default function createWebhookRunner(opts: ConstructorParameters): WebhookRunner {\n return new WebhookRunner(opts);\n}\n\nexport type { WebhookRunner };\n"],"names":["debug","createdDebugger","defaultConfiguration","defaultHeaders","WebhookRunner","deleteListener","event","fn","listeners","get","undefined","eventHub","off","delete","createListener","has","logger","error","listen","info","queue","enqueue","set","on","executeListener","webhooks","webhooksMap","activeWebhooks","filter","webhook","isEnabled","run","catch","url","headers","fetch","method","body","JSON","stringify","createdAt","Date","config","signal","AbortSignal","timeout","then","res","ok","statusCode","status","message","text","err","add","id","events","forEach","push","update","remove","filteredWebhooks","value","length","configuration","Map","Error","_","merge","WorkerQueue","concurrency","subscribe","bind","createWebhookRunner","opts"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-queue.js","sources":["../../src/services/worker-queue.ts"],"sourcesContent":["/**\n * Simple worker queue in memory\n */\nimport createDebugger from 'debug';\nimport type { Logger } from '@strapi/logger';\nimport type { Utils } from '@strapi/types';\n\nconst debug = createDebugger('strapi:worker-queue');\n\ninterface ConstructorParameters {\n logger: Logger;\n concurrency?: number;\n}\n\ntype Worker<TPayload, TReturn> = (payload: TPayload) => Promise<TReturn> | TReturn;\n\nconst noop: Utils.Function.Any = () => {};\n\nexport default class WorkerQueue<TPayload, TReturn> {\n logger: Logger;\n\n worker: Worker<TPayload, TReturn>;\n\n concurrency: number;\n\n running: number;\n\n queue: TPayload[];\n\n constructor({ logger, concurrency = 5 }: ConstructorParameters) {\n debug('Initialize worker queue');\n\n this.logger = logger;\n this.worker = noop;\n\n this.concurrency = concurrency;\n this.running = 0;\n this.queue = [];\n }\n\n subscribe(worker: Worker<TPayload, TReturn>) {\n debug('Subscribe to worker queue');\n this.worker = worker;\n }\n\n enqueue(payload: TPayload) {\n debug('Enqueue event in worker queue');\n if (this.running < this.concurrency) {\n this.running += 1;\n this.execute(payload);\n } else {\n this.queue.unshift(payload);\n }\n }\n\n pop() {\n debug('Pop worker queue and execute');\n const payload = this.queue.pop();\n\n if (payload) {\n this.execute(payload);\n } else {\n this.running -= 1;\n }\n }\n\n async execute(payload: TPayload) {\n debug('Execute worker');\n try {\n await this.worker(payload);\n } catch (error) {\n this.logger.error(error);\n } finally {\n this.pop();\n }\n }\n}\n"],"names":["debug","createDebugger","noop","WorkerQueue","subscribe","worker","enqueue","payload","running","concurrency","execute","queue","unshift","pop","error","logger"
|
|
1
|
+
{"version":3,"file":"worker-queue.js","sources":["../../src/services/worker-queue.ts"],"sourcesContent":["/**\n * Simple worker queue in memory\n */\nimport createDebugger from 'debug';\nimport type { Logger } from '@strapi/logger';\nimport type { Utils } from '@strapi/types';\n\nconst debug = createDebugger('strapi:worker-queue');\n\ninterface ConstructorParameters {\n logger: Logger;\n concurrency?: number;\n}\n\ntype Worker<TPayload, TReturn> = (payload: TPayload) => Promise<TReturn> | TReturn;\n\nconst noop: Utils.Function.Any = () => {};\n\nexport default class WorkerQueue<TPayload, TReturn> {\n logger: Logger;\n\n worker: Worker<TPayload, TReturn>;\n\n concurrency: number;\n\n running: number;\n\n queue: TPayload[];\n\n constructor({ logger, concurrency = 5 }: ConstructorParameters) {\n debug('Initialize worker queue');\n\n this.logger = logger;\n this.worker = noop;\n\n this.concurrency = concurrency;\n this.running = 0;\n this.queue = [];\n }\n\n subscribe(worker: Worker<TPayload, TReturn>) {\n debug('Subscribe to worker queue');\n this.worker = worker;\n }\n\n enqueue(payload: TPayload) {\n debug('Enqueue event in worker queue');\n if (this.running < this.concurrency) {\n this.running += 1;\n this.execute(payload);\n } else {\n this.queue.unshift(payload);\n }\n }\n\n pop() {\n debug('Pop worker queue and execute');\n const payload = this.queue.pop();\n\n if (payload) {\n this.execute(payload);\n } else {\n this.running -= 1;\n }\n }\n\n async execute(payload: TPayload) {\n debug('Execute worker');\n try {\n await this.worker(payload);\n } catch (error) {\n this.logger.error(error);\n } finally {\n this.pop();\n }\n }\n}\n"],"names":["debug","createDebugger","noop","WorkerQueue","subscribe","worker","enqueue","payload","running","concurrency","execute","queue","unshift","pop","error","logger"],"mappings":";;;;AAOA,MAAMA,QAAQC,cAAe,CAAA,qBAAA,CAAA;AAS7B,MAAMC,OAA2B,IAAO,EAAA;AAEzB,MAAMC,WAAAA,CAAAA;AAsBnBC,IAAAA,SAAAA,CAAUC,MAAiC,EAAE;QAC3CL,KAAM,CAAA,2BAAA,CAAA;QACN,IAAI,CAACK,MAAM,GAAGA,MAAAA;AAChB;AAEAC,IAAAA,OAAAA,CAAQC,OAAiB,EAAE;QACzBP,KAAM,CAAA,+BAAA,CAAA;AACN,QAAA,IAAI,IAAI,CAACQ,OAAO,GAAG,IAAI,CAACC,WAAW,EAAE;YACnC,IAAI,CAACD,OAAO,IAAI,CAAA;YAChB,IAAI,CAACE,OAAO,CAACH,OAAAA,CAAAA;SACR,MAAA;AACL,YAAA,IAAI,CAACI,KAAK,CAACC,OAAO,CAACL,OAAAA,CAAAA;AACrB;AACF;IAEAM,GAAM,GAAA;QACJb,KAAM,CAAA,8BAAA,CAAA;AACN,QAAA,MAAMO,OAAU,GAAA,IAAI,CAACI,KAAK,CAACE,GAAG,EAAA;AAE9B,QAAA,IAAIN,OAAS,EAAA;YACX,IAAI,CAACG,OAAO,CAACH,OAAAA,CAAAA;SACR,MAAA;YACL,IAAI,CAACC,OAAO,IAAI,CAAA;AAClB;AACF;IAEA,MAAME,OAAAA,CAAQH,OAAiB,EAAE;QAC/BP,KAAM,CAAA,gBAAA,CAAA;QACN,IAAI;YACF,MAAM,IAAI,CAACK,MAAM,CAACE,OAAAA,CAAAA;AACpB,SAAA,CAAE,OAAOO,KAAO,EAAA;AACd,YAAA,IAAI,CAACC,MAAM,CAACD,KAAK,CAACA,KAAAA,CAAAA;SACV,QAAA;AACR,YAAA,IAAI,CAACD,GAAG,EAAA;AACV;AACF;AA9CA,IAAA,WAAA,CAAY,EAAEE,MAAM,EAAEN,WAAc,GAAA,CAAC,EAAyB,CAAE;QAC9DT,KAAM,CAAA,yBAAA,CAAA;QAEN,IAAI,CAACe,MAAM,GAAGA,MAAAA;QACd,IAAI,CAACV,MAAM,GAAGH,IAAAA;QAEd,IAAI,CAACO,WAAW,GAAGA,WAAAA;QACnB,IAAI,CAACD,OAAO,GAAG,CAAA;QACf,IAAI,CAACG,KAAK,GAAG,EAAE;AACjB;AAsCF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-queue.mjs","sources":["../../src/services/worker-queue.ts"],"sourcesContent":["/**\n * Simple worker queue in memory\n */\nimport createDebugger from 'debug';\nimport type { Logger } from '@strapi/logger';\nimport type { Utils } from '@strapi/types';\n\nconst debug = createDebugger('strapi:worker-queue');\n\ninterface ConstructorParameters {\n logger: Logger;\n concurrency?: number;\n}\n\ntype Worker<TPayload, TReturn> = (payload: TPayload) => Promise<TReturn> | TReturn;\n\nconst noop: Utils.Function.Any = () => {};\n\nexport default class WorkerQueue<TPayload, TReturn> {\n logger: Logger;\n\n worker: Worker<TPayload, TReturn>;\n\n concurrency: number;\n\n running: number;\n\n queue: TPayload[];\n\n constructor({ logger, concurrency = 5 }: ConstructorParameters) {\n debug('Initialize worker queue');\n\n this.logger = logger;\n this.worker = noop;\n\n this.concurrency = concurrency;\n this.running = 0;\n this.queue = [];\n }\n\n subscribe(worker: Worker<TPayload, TReturn>) {\n debug('Subscribe to worker queue');\n this.worker = worker;\n }\n\n enqueue(payload: TPayload) {\n debug('Enqueue event in worker queue');\n if (this.running < this.concurrency) {\n this.running += 1;\n this.execute(payload);\n } else {\n this.queue.unshift(payload);\n }\n }\n\n pop() {\n debug('Pop worker queue and execute');\n const payload = this.queue.pop();\n\n if (payload) {\n this.execute(payload);\n } else {\n this.running -= 1;\n }\n }\n\n async execute(payload: TPayload) {\n debug('Execute worker');\n try {\n await this.worker(payload);\n } catch (error) {\n this.logger.error(error);\n } finally {\n this.pop();\n }\n }\n}\n"],"names":["debug","createDebugger","noop","WorkerQueue","subscribe","worker","enqueue","payload","running","concurrency","execute","queue","unshift","pop","error","logger"
|
|
1
|
+
{"version":3,"file":"worker-queue.mjs","sources":["../../src/services/worker-queue.ts"],"sourcesContent":["/**\n * Simple worker queue in memory\n */\nimport createDebugger from 'debug';\nimport type { Logger } from '@strapi/logger';\nimport type { Utils } from '@strapi/types';\n\nconst debug = createDebugger('strapi:worker-queue');\n\ninterface ConstructorParameters {\n logger: Logger;\n concurrency?: number;\n}\n\ntype Worker<TPayload, TReturn> = (payload: TPayload) => Promise<TReturn> | TReturn;\n\nconst noop: Utils.Function.Any = () => {};\n\nexport default class WorkerQueue<TPayload, TReturn> {\n logger: Logger;\n\n worker: Worker<TPayload, TReturn>;\n\n concurrency: number;\n\n running: number;\n\n queue: TPayload[];\n\n constructor({ logger, concurrency = 5 }: ConstructorParameters) {\n debug('Initialize worker queue');\n\n this.logger = logger;\n this.worker = noop;\n\n this.concurrency = concurrency;\n this.running = 0;\n this.queue = [];\n }\n\n subscribe(worker: Worker<TPayload, TReturn>) {\n debug('Subscribe to worker queue');\n this.worker = worker;\n }\n\n enqueue(payload: TPayload) {\n debug('Enqueue event in worker queue');\n if (this.running < this.concurrency) {\n this.running += 1;\n this.execute(payload);\n } else {\n this.queue.unshift(payload);\n }\n }\n\n pop() {\n debug('Pop worker queue and execute');\n const payload = this.queue.pop();\n\n if (payload) {\n this.execute(payload);\n } else {\n this.running -= 1;\n }\n }\n\n async execute(payload: TPayload) {\n debug('Execute worker');\n try {\n await this.worker(payload);\n } catch (error) {\n this.logger.error(error);\n } finally {\n this.pop();\n }\n }\n}\n"],"names":["debug","createDebugger","noop","WorkerQueue","subscribe","worker","enqueue","payload","running","concurrency","execute","queue","unshift","pop","error","logger"],"mappings":";;AAOA,MAAMA,QAAQC,cAAe,CAAA,qBAAA,CAAA;AAS7B,MAAMC,OAA2B,IAAO,EAAA;AAEzB,MAAMC,WAAAA,CAAAA;AAsBnBC,IAAAA,SAAAA,CAAUC,MAAiC,EAAE;QAC3CL,KAAM,CAAA,2BAAA,CAAA;QACN,IAAI,CAACK,MAAM,GAAGA,MAAAA;AAChB;AAEAC,IAAAA,OAAAA,CAAQC,OAAiB,EAAE;QACzBP,KAAM,CAAA,+BAAA,CAAA;AACN,QAAA,IAAI,IAAI,CAACQ,OAAO,GAAG,IAAI,CAACC,WAAW,EAAE;YACnC,IAAI,CAACD,OAAO,IAAI,CAAA;YAChB,IAAI,CAACE,OAAO,CAACH,OAAAA,CAAAA;SACR,MAAA;AACL,YAAA,IAAI,CAACI,KAAK,CAACC,OAAO,CAACL,OAAAA,CAAAA;AACrB;AACF;IAEAM,GAAM,GAAA;QACJb,KAAM,CAAA,8BAAA,CAAA;AACN,QAAA,MAAMO,OAAU,GAAA,IAAI,CAACI,KAAK,CAACE,GAAG,EAAA;AAE9B,QAAA,IAAIN,OAAS,EAAA;YACX,IAAI,CAACG,OAAO,CAACH,OAAAA,CAAAA;SACR,MAAA;YACL,IAAI,CAACC,OAAO,IAAI,CAAA;AAClB;AACF;IAEA,MAAME,OAAAA,CAAQH,OAAiB,EAAE;QAC/BP,KAAM,CAAA,gBAAA,CAAA;QACN,IAAI;YACF,MAAM,IAAI,CAACK,MAAM,CAACE,OAAAA,CAAAA;AACpB,SAAA,CAAE,OAAOO,KAAO,EAAA;AACd,YAAA,IAAI,CAACC,MAAM,CAACD,KAAK,CAACA,KAAAA,CAAAA;SACV,QAAA;AACR,YAAA,IAAI,CAACD,GAAG,EAAA;AACV;AACF;AA9CA,IAAA,WAAA,CAAY,EAAEE,MAAM,EAAEN,WAAc,GAAA,CAAC,EAAyB,CAAE;QAC9DT,KAAM,CAAA,yBAAA,CAAA;QAEN,IAAI,CAACe,MAAM,GAAGA,MAAAA;QACd,IAAI,CAACV,MAAM,GAAGH,IAAAA;QAEd,IAAI,CAACO,WAAW,GAAGA,WAAAA;QACnB,IAAI,CAACD,OAAO,GAAG,CAAA;QACf,IAAI,CAACG,KAAK,GAAG,EAAE;AACjB;AAsCF;;;;"}
|
package/dist/utils/fetch.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch.js","sources":["../../src/utils/fetch.ts"],"sourcesContent":["import type { Core, Modules } from '@strapi/types';\nimport { ProxyAgent } from 'undici';\n\n// TODO: once core Node exposes a stable way to create a ProxyAgent we will use that instead of undici\n\ninterface StrapiFetchOptions {\n logs?: boolean;\n}\n\n// Create a wrapper for Node's Fetch API that applies a global proxy\nexport const createStrapiFetch = (\n strapi: Core.Strapi,\n options?: StrapiFetchOptions\n): Modules.Fetch.Fetch => {\n const { logs = true } = options ?? {};\n\n function strapiFetch(url: RequestInfo | URL, options?: RequestInit) {\n const fetchOptions = {\n ...(strapiFetch.dispatcher ? { dispatcher: strapiFetch.dispatcher } : {}),\n ...options,\n };\n\n if (logs) {\n strapi.log.debug(`Making request for ${url}`);\n }\n\n return fetch(url, fetchOptions);\n }\n\n const proxy =\n strapi.config.get<ConstructorParameters<typeof ProxyAgent>[0]>('server.proxy.fetch') ||\n strapi.config.get<string>('server.proxy.global');\n\n if (proxy) {\n if (logs) {\n strapi.log.info(`Using proxy for Fetch requests: ${proxy}`);\n }\n strapiFetch.dispatcher = new ProxyAgent(proxy);\n }\n\n return strapiFetch;\n};\n\nexport type Fetch = Modules.Fetch.Fetch;\n"],"names":["createStrapiFetch","strapi","options","logs","strapiFetch","url","fetchOptions","dispatcher","log","debug","fetch","proxy","config","get","info","ProxyAgent"],"mappings":";;;;AASA;AACO,MAAMA,iBAAoB,GAAA,CAC/BC,MACAC,EAAAA,OAAAA,GAAAA;AAEA,IAAA,MAAM,EAAEC,IAAO,GAAA,IAAI,EAAE,GAAGD,WAAW,EAAC;IAEpC,SAASE,WAAAA,CAAYC,GAAsB,EAAEH,OAAqB,EAAA;AAChE,QAAA,MAAMI,YAAe,GAAA;YACnB,GAAIF,WAAAA,CAAYG,UAAU,GAAG;AAAEA,gBAAAA,UAAAA,EAAYH,YAAYG;AAAW,aAAA,GAAI,EAAE;AACxE,YAAA,GAAGL;AACL,SAAA;AAEA,QAAA,IAAIC,IAAM,EAAA;
|
|
1
|
+
{"version":3,"file":"fetch.js","sources":["../../src/utils/fetch.ts"],"sourcesContent":["import type { Core, Modules } from '@strapi/types';\nimport { ProxyAgent } from 'undici';\n\n// TODO: once core Node exposes a stable way to create a ProxyAgent we will use that instead of undici\n\ninterface StrapiFetchOptions {\n logs?: boolean;\n}\n\n// Create a wrapper for Node's Fetch API that applies a global proxy\nexport const createStrapiFetch = (\n strapi: Core.Strapi,\n options?: StrapiFetchOptions\n): Modules.Fetch.Fetch => {\n const { logs = true } = options ?? {};\n\n function strapiFetch(url: RequestInfo | URL, options?: RequestInit) {\n const fetchOptions = {\n ...(strapiFetch.dispatcher ? { dispatcher: strapiFetch.dispatcher } : {}),\n ...options,\n };\n\n if (logs) {\n strapi.log.debug(`Making request for ${url}`);\n }\n\n return fetch(url, fetchOptions);\n }\n\n const proxy =\n strapi.config.get<ConstructorParameters<typeof ProxyAgent>[0]>('server.proxy.fetch') ||\n strapi.config.get<string>('server.proxy.global');\n\n if (proxy) {\n if (logs) {\n strapi.log.info(`Using proxy for Fetch requests: ${proxy}`);\n }\n strapiFetch.dispatcher = new ProxyAgent(proxy);\n }\n\n return strapiFetch;\n};\n\nexport type Fetch = Modules.Fetch.Fetch;\n"],"names":["createStrapiFetch","strapi","options","logs","strapiFetch","url","fetchOptions","dispatcher","log","debug","fetch","proxy","config","get","info","ProxyAgent"],"mappings":";;;;AASA;AACO,MAAMA,iBAAoB,GAAA,CAC/BC,MACAC,EAAAA,OAAAA,GAAAA;AAEA,IAAA,MAAM,EAAEC,IAAO,GAAA,IAAI,EAAE,GAAGD,WAAW,EAAC;IAEpC,SAASE,WAAAA,CAAYC,GAAsB,EAAEH,OAAqB,EAAA;AAChE,QAAA,MAAMI,YAAe,GAAA;YACnB,GAAIF,WAAAA,CAAYG,UAAU,GAAG;AAAEA,gBAAAA,UAAAA,EAAYH,YAAYG;AAAW,aAAA,GAAI,EAAE;AACxE,YAAA,GAAGL;AACL,SAAA;AAEA,QAAA,IAAIC,IAAM,EAAA;AACRF,YAAAA,MAAAA,CAAOO,GAAG,CAACC,KAAK,CAAC,CAAC,mBAAmB,EAAEJ,GAAK,CAAA,CAAA,CAAA;AAC9C;AAEA,QAAA,OAAOK,MAAML,GAAKC,EAAAA,YAAAA,CAAAA;AACpB;IAEA,MAAMK,KAAAA,GACJV,MAAOW,CAAAA,MAAM,CAACC,GAAG,CAA8C,oBAAA,CAAA,IAC/DZ,MAAOW,CAAAA,MAAM,CAACC,GAAG,CAAS,qBAAA,CAAA;AAE5B,IAAA,IAAIF,KAAO,EAAA;AACT,QAAA,IAAIR,IAAM,EAAA;AACRF,YAAAA,MAAAA,CAAOO,GAAG,CAACM,IAAI,CAAC,CAAC,gCAAgC,EAAEH,KAAO,CAAA,CAAA,CAAA;AAC5D;QACAP,WAAYG,CAAAA,UAAU,GAAG,IAAIQ,iBAAWJ,CAAAA,KAAAA,CAAAA;AAC1C;IAEA,OAAOP,WAAAA;AACT;;;;"}
|
package/dist/utils/fetch.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch.mjs","sources":["../../src/utils/fetch.ts"],"sourcesContent":["import type { Core, Modules } from '@strapi/types';\nimport { ProxyAgent } from 'undici';\n\n// TODO: once core Node exposes a stable way to create a ProxyAgent we will use that instead of undici\n\ninterface StrapiFetchOptions {\n logs?: boolean;\n}\n\n// Create a wrapper for Node's Fetch API that applies a global proxy\nexport const createStrapiFetch = (\n strapi: Core.Strapi,\n options?: StrapiFetchOptions\n): Modules.Fetch.Fetch => {\n const { logs = true } = options ?? {};\n\n function strapiFetch(url: RequestInfo | URL, options?: RequestInit) {\n const fetchOptions = {\n ...(strapiFetch.dispatcher ? { dispatcher: strapiFetch.dispatcher } : {}),\n ...options,\n };\n\n if (logs) {\n strapi.log.debug(`Making request for ${url}`);\n }\n\n return fetch(url, fetchOptions);\n }\n\n const proxy =\n strapi.config.get<ConstructorParameters<typeof ProxyAgent>[0]>('server.proxy.fetch') ||\n strapi.config.get<string>('server.proxy.global');\n\n if (proxy) {\n if (logs) {\n strapi.log.info(`Using proxy for Fetch requests: ${proxy}`);\n }\n strapiFetch.dispatcher = new ProxyAgent(proxy);\n }\n\n return strapiFetch;\n};\n\nexport type Fetch = Modules.Fetch.Fetch;\n"],"names":["createStrapiFetch","strapi","options","logs","strapiFetch","url","fetchOptions","dispatcher","log","debug","fetch","proxy","config","get","info","ProxyAgent"],"mappings":";;AASA;AACO,MAAMA,iBAAoB,GAAA,CAC/BC,MACAC,EAAAA,OAAAA,GAAAA;AAEA,IAAA,MAAM,EAAEC,IAAO,GAAA,IAAI,EAAE,GAAGD,WAAW,EAAC;IAEpC,SAASE,WAAAA,CAAYC,GAAsB,EAAEH,OAAqB,EAAA;AAChE,QAAA,MAAMI,YAAe,GAAA;YACnB,GAAIF,WAAAA,CAAYG,UAAU,GAAG;AAAEA,gBAAAA,UAAAA,EAAYH,YAAYG;AAAW,aAAA,GAAI,EAAE;AACxE,YAAA,GAAGL;AACL,SAAA;AAEA,QAAA,IAAIC,IAAM,EAAA;
|
|
1
|
+
{"version":3,"file":"fetch.mjs","sources":["../../src/utils/fetch.ts"],"sourcesContent":["import type { Core, Modules } from '@strapi/types';\nimport { ProxyAgent } from 'undici';\n\n// TODO: once core Node exposes a stable way to create a ProxyAgent we will use that instead of undici\n\ninterface StrapiFetchOptions {\n logs?: boolean;\n}\n\n// Create a wrapper for Node's Fetch API that applies a global proxy\nexport const createStrapiFetch = (\n strapi: Core.Strapi,\n options?: StrapiFetchOptions\n): Modules.Fetch.Fetch => {\n const { logs = true } = options ?? {};\n\n function strapiFetch(url: RequestInfo | URL, options?: RequestInit) {\n const fetchOptions = {\n ...(strapiFetch.dispatcher ? { dispatcher: strapiFetch.dispatcher } : {}),\n ...options,\n };\n\n if (logs) {\n strapi.log.debug(`Making request for ${url}`);\n }\n\n return fetch(url, fetchOptions);\n }\n\n const proxy =\n strapi.config.get<ConstructorParameters<typeof ProxyAgent>[0]>('server.proxy.fetch') ||\n strapi.config.get<string>('server.proxy.global');\n\n if (proxy) {\n if (logs) {\n strapi.log.info(`Using proxy for Fetch requests: ${proxy}`);\n }\n strapiFetch.dispatcher = new ProxyAgent(proxy);\n }\n\n return strapiFetch;\n};\n\nexport type Fetch = Modules.Fetch.Fetch;\n"],"names":["createStrapiFetch","strapi","options","logs","strapiFetch","url","fetchOptions","dispatcher","log","debug","fetch","proxy","config","get","info","ProxyAgent"],"mappings":";;AASA;AACO,MAAMA,iBAAoB,GAAA,CAC/BC,MACAC,EAAAA,OAAAA,GAAAA;AAEA,IAAA,MAAM,EAAEC,IAAO,GAAA,IAAI,EAAE,GAAGD,WAAW,EAAC;IAEpC,SAASE,WAAAA,CAAYC,GAAsB,EAAEH,OAAqB,EAAA;AAChE,QAAA,MAAMI,YAAe,GAAA;YACnB,GAAIF,WAAAA,CAAYG,UAAU,GAAG;AAAEA,gBAAAA,UAAAA,EAAYH,YAAYG;AAAW,aAAA,GAAI,EAAE;AACxE,YAAA,GAAGL;AACL,SAAA;AAEA,QAAA,IAAIC,IAAM,EAAA;AACRF,YAAAA,MAAAA,CAAOO,GAAG,CAACC,KAAK,CAAC,CAAC,mBAAmB,EAAEJ,GAAK,CAAA,CAAA,CAAA;AAC9C;AAEA,QAAA,OAAOK,MAAML,GAAKC,EAAAA,YAAAA,CAAAA;AACpB;IAEA,MAAMK,KAAAA,GACJV,MAAOW,CAAAA,MAAM,CAACC,GAAG,CAA8C,oBAAA,CAAA,IAC/DZ,MAAOW,CAAAA,MAAM,CAACC,GAAG,CAAS,qBAAA,CAAA;AAE5B,IAAA,IAAIF,KAAO,EAAA;AACT,QAAA,IAAIR,IAAM,EAAA;AACRF,YAAAA,MAAAA,CAAOO,GAAG,CAACM,IAAI,CAAC,CAAC,gCAAgC,EAAEH,KAAO,CAAA,CAAA,CAAA;AAC5D;QACAP,WAAYG,CAAAA,UAAU,GAAG,IAAIQ,UAAWJ,CAAAA,KAAAA,CAAAA;AAC1C;IAEA,OAAOP,WAAAA;AACT;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filepath-to-prop-path.js","sources":["../../src/utils/filepath-to-prop-path.ts"],"sourcesContent":["import path from 'node:path';\nimport fp from 'lodash/fp';\n\n/**\n * Returns a path (as an array) from a file path\n */\nexport const filePathToPropPath = (\n entryPath: string,\n useFileNameAsKey: boolean = true\n): string[] => {\n const transform = fp.pipe(\n // Remove the relative path prefixes: './' for posix (and some win32) and \".\\\" for win32\n removeRelativePrefix,\n // Remove the path metadata and extensions\n fp.replace(/(\\.settings|\\.json|\\.js)/g, ''),\n // Transform to lowercase\n // Note: We're using fp.toLower instead of fp.lowercase as the latest removes special characters such as \"/\"\n fp.toLower,\n // Split the cleaned path by matching every possible separator (either \"/\" or \"\\\" depending on the OS)\n fp.split(new RegExp(`[\\\\${path.win32.sep}|${path.posix.sep}]`, 'g')),\n // Make sure to remove leading '.' from the different path parts\n fp.map(fp.trimCharsStart('.')),\n // join + split in case some '.' characters are still present in different parts of the path\n fp.join('.'),\n fp.split('.'),\n // Remove the last portion of the path array if the file name shouldn't be used as a key\n useFileNameAsKey ? fp.identity : fp.slice(0, -1)\n );\n\n return transform(entryPath) as string[];\n};\n\nconst removeRelativePrefix = (filePath: string) => {\n return filePath.startsWith(`.${path.win32.sep}`) || filePath.startsWith(`.${path.posix.sep}`)\n ? filePath.slice(2)\n : filePath;\n};\n"],"names":["filePathToPropPath","entryPath","useFileNameAsKey","transform","fp","pipe","removeRelativePrefix","replace","toLower","split","RegExp","path","win32","sep","posix","map","trimCharsStart","join","identity","slice","filePath","startsWith"],"mappings":";;;;;AAGA;;AAEC,IACYA,MAAAA,kBAAAA,GAAqB,CAChCC,SAAAA,EACAC,mBAA4B,IAAI,GAAA;AAEhC,IAAA,MAAMC,SAAYC,GAAAA,EAAAA,CAAGC,IAAI;AAEvBC,IAAAA,oBAAAA;AAEAF,IAAAA,EAAAA,CAAGG,OAAO,CAAC,2BAA6B,EAAA,EAAA,CAAA;;IAGxCH,EAAGI,CAAAA,OAAO;IAEVJ,EAAGK,CAAAA,KAAK,CAAC,IAAIC,MAAAA,CAAO,CAAC,GAAG,EAAEC,IAAKC,CAAAA,KAAK,CAACC,GAAG,CAAC,CAAC,EAAEF,IAAKG,CAAAA,KAAK,CAACD,GAAG,CAAC,CAAC,CAAC,EAAE,GAAA,CAAA,CAAA;AAE/DT,IAAAA,EAAAA,CAAGW,GAAG,CAACX,EAAAA,CAAGY,cAAc,CAAC;AAEzBZ,IAAAA,EAAAA,CAAGa,IAAI,CAAC,GAAA,CAAA,EACRb,GAAGK,KAAK,CAAC;AAETP,IAAAA,gBAAAA,GAAmBE,GAAGc,QAAQ,GAAGd,GAAGe,KAAK,CAAC,GAAG,CAAC,CAAA,CAAA,CAAA;AAGhD,IAAA,OAAOhB,SAAUF,CAAAA,SAAAA,CAAAA;AACnB;AAEA,MAAMK,uBAAuB,CAACc,QAAAA,GAAAA;
|
|
1
|
+
{"version":3,"file":"filepath-to-prop-path.js","sources":["../../src/utils/filepath-to-prop-path.ts"],"sourcesContent":["import path from 'node:path';\nimport fp from 'lodash/fp';\n\n/**\n * Returns a path (as an array) from a file path\n */\nexport const filePathToPropPath = (\n entryPath: string,\n useFileNameAsKey: boolean = true\n): string[] => {\n const transform = fp.pipe(\n // Remove the relative path prefixes: './' for posix (and some win32) and \".\\\" for win32\n removeRelativePrefix,\n // Remove the path metadata and extensions\n fp.replace(/(\\.settings|\\.json|\\.js)/g, ''),\n // Transform to lowercase\n // Note: We're using fp.toLower instead of fp.lowercase as the latest removes special characters such as \"/\"\n fp.toLower,\n // Split the cleaned path by matching every possible separator (either \"/\" or \"\\\" depending on the OS)\n fp.split(new RegExp(`[\\\\${path.win32.sep}|${path.posix.sep}]`, 'g')),\n // Make sure to remove leading '.' from the different path parts\n fp.map(fp.trimCharsStart('.')),\n // join + split in case some '.' characters are still present in different parts of the path\n fp.join('.'),\n fp.split('.'),\n // Remove the last portion of the path array if the file name shouldn't be used as a key\n useFileNameAsKey ? fp.identity : fp.slice(0, -1)\n );\n\n return transform(entryPath) as string[];\n};\n\nconst removeRelativePrefix = (filePath: string) => {\n return filePath.startsWith(`.${path.win32.sep}`) || filePath.startsWith(`.${path.posix.sep}`)\n ? filePath.slice(2)\n : filePath;\n};\n"],"names":["filePathToPropPath","entryPath","useFileNameAsKey","transform","fp","pipe","removeRelativePrefix","replace","toLower","split","RegExp","path","win32","sep","posix","map","trimCharsStart","join","identity","slice","filePath","startsWith"],"mappings":";;;;;AAGA;;AAEC,IACYA,MAAAA,kBAAAA,GAAqB,CAChCC,SAAAA,EACAC,mBAA4B,IAAI,GAAA;AAEhC,IAAA,MAAMC,SAAYC,GAAAA,EAAAA,CAAGC,IAAI;AAEvBC,IAAAA,oBAAAA;AAEAF,IAAAA,EAAAA,CAAGG,OAAO,CAAC,2BAA6B,EAAA,EAAA,CAAA;;IAGxCH,EAAGI,CAAAA,OAAO;IAEVJ,EAAGK,CAAAA,KAAK,CAAC,IAAIC,MAAAA,CAAO,CAAC,GAAG,EAAEC,IAAKC,CAAAA,KAAK,CAACC,GAAG,CAAC,CAAC,EAAEF,IAAKG,CAAAA,KAAK,CAACD,GAAG,CAAC,CAAC,CAAC,EAAE,GAAA,CAAA,CAAA;AAE/DT,IAAAA,EAAAA,CAAGW,GAAG,CAACX,EAAAA,CAAGY,cAAc,CAAC;AAEzBZ,IAAAA,EAAAA,CAAGa,IAAI,CAAC,GAAA,CAAA,EACRb,GAAGK,KAAK,CAAC;AAETP,IAAAA,gBAAAA,GAAmBE,GAAGc,QAAQ,GAAGd,GAAGe,KAAK,CAAC,GAAG,CAAC,CAAA,CAAA,CAAA;AAGhD,IAAA,OAAOhB,SAAUF,CAAAA,SAAAA,CAAAA;AACnB;AAEA,MAAMK,uBAAuB,CAACc,QAAAA,GAAAA;IAC5B,OAAOA,QAAAA,CAASC,UAAU,CAAC,CAAC,CAAC,EAAEV,IAAAA,CAAKC,KAAK,CAACC,GAAG,CAAA,CAAE,CAAKO,IAAAA,QAAAA,CAASC,UAAU,CAAC,CAAC,CAAC,EAAEV,IAAAA,CAAKG,KAAK,CAACD,GAAG,CAAA,CAAE,CACxFO,GAAAA,QAAAA,CAASD,KAAK,CAAC,CACfC,CAAAA,GAAAA,QAAAA;AACN,CAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filepath-to-prop-path.mjs","sources":["../../src/utils/filepath-to-prop-path.ts"],"sourcesContent":["import path from 'node:path';\nimport fp from 'lodash/fp';\n\n/**\n * Returns a path (as an array) from a file path\n */\nexport const filePathToPropPath = (\n entryPath: string,\n useFileNameAsKey: boolean = true\n): string[] => {\n const transform = fp.pipe(\n // Remove the relative path prefixes: './' for posix (and some win32) and \".\\\" for win32\n removeRelativePrefix,\n // Remove the path metadata and extensions\n fp.replace(/(\\.settings|\\.json|\\.js)/g, ''),\n // Transform to lowercase\n // Note: We're using fp.toLower instead of fp.lowercase as the latest removes special characters such as \"/\"\n fp.toLower,\n // Split the cleaned path by matching every possible separator (either \"/\" or \"\\\" depending on the OS)\n fp.split(new RegExp(`[\\\\${path.win32.sep}|${path.posix.sep}]`, 'g')),\n // Make sure to remove leading '.' from the different path parts\n fp.map(fp.trimCharsStart('.')),\n // join + split in case some '.' characters are still present in different parts of the path\n fp.join('.'),\n fp.split('.'),\n // Remove the last portion of the path array if the file name shouldn't be used as a key\n useFileNameAsKey ? fp.identity : fp.slice(0, -1)\n );\n\n return transform(entryPath) as string[];\n};\n\nconst removeRelativePrefix = (filePath: string) => {\n return filePath.startsWith(`.${path.win32.sep}`) || filePath.startsWith(`.${path.posix.sep}`)\n ? filePath.slice(2)\n : filePath;\n};\n"],"names":["filePathToPropPath","entryPath","useFileNameAsKey","transform","fp","pipe","removeRelativePrefix","replace","toLower","split","RegExp","path","win32","sep","posix","map","trimCharsStart","join","identity","slice","filePath","startsWith"],"mappings":";;;AAGA;;AAEC,IACYA,MAAAA,kBAAAA,GAAqB,CAChCC,SAAAA,EACAC,mBAA4B,IAAI,GAAA;AAEhC,IAAA,MAAMC,SAAYC,GAAAA,EAAAA,CAAGC,IAAI;AAEvBC,IAAAA,oBAAAA;AAEAF,IAAAA,EAAAA,CAAGG,OAAO,CAAC,2BAA6B,EAAA,EAAA,CAAA;;IAGxCH,EAAGI,CAAAA,OAAO;IAEVJ,EAAGK,CAAAA,KAAK,CAAC,IAAIC,MAAAA,CAAO,CAAC,GAAG,EAAEC,IAAKC,CAAAA,KAAK,CAACC,GAAG,CAAC,CAAC,EAAEF,IAAKG,CAAAA,KAAK,CAACD,GAAG,CAAC,CAAC,CAAC,EAAE,GAAA,CAAA,CAAA;AAE/DT,IAAAA,EAAAA,CAAGW,GAAG,CAACX,EAAAA,CAAGY,cAAc,CAAC;AAEzBZ,IAAAA,EAAAA,CAAGa,IAAI,CAAC,GAAA,CAAA,EACRb,GAAGK,KAAK,CAAC;AAETP,IAAAA,gBAAAA,GAAmBE,GAAGc,QAAQ,GAAGd,GAAGe,KAAK,CAAC,GAAG,CAAC,CAAA,CAAA,CAAA;AAGhD,IAAA,OAAOhB,SAAUF,CAAAA,SAAAA,CAAAA;AACnB;AAEA,MAAMK,uBAAuB,CAACc,QAAAA,GAAAA;
|
|
1
|
+
{"version":3,"file":"filepath-to-prop-path.mjs","sources":["../../src/utils/filepath-to-prop-path.ts"],"sourcesContent":["import path from 'node:path';\nimport fp from 'lodash/fp';\n\n/**\n * Returns a path (as an array) from a file path\n */\nexport const filePathToPropPath = (\n entryPath: string,\n useFileNameAsKey: boolean = true\n): string[] => {\n const transform = fp.pipe(\n // Remove the relative path prefixes: './' for posix (and some win32) and \".\\\" for win32\n removeRelativePrefix,\n // Remove the path metadata and extensions\n fp.replace(/(\\.settings|\\.json|\\.js)/g, ''),\n // Transform to lowercase\n // Note: We're using fp.toLower instead of fp.lowercase as the latest removes special characters such as \"/\"\n fp.toLower,\n // Split the cleaned path by matching every possible separator (either \"/\" or \"\\\" depending on the OS)\n fp.split(new RegExp(`[\\\\${path.win32.sep}|${path.posix.sep}]`, 'g')),\n // Make sure to remove leading '.' from the different path parts\n fp.map(fp.trimCharsStart('.')),\n // join + split in case some '.' characters are still present in different parts of the path\n fp.join('.'),\n fp.split('.'),\n // Remove the last portion of the path array if the file name shouldn't be used as a key\n useFileNameAsKey ? fp.identity : fp.slice(0, -1)\n );\n\n return transform(entryPath) as string[];\n};\n\nconst removeRelativePrefix = (filePath: string) => {\n return filePath.startsWith(`.${path.win32.sep}`) || filePath.startsWith(`.${path.posix.sep}`)\n ? filePath.slice(2)\n : filePath;\n};\n"],"names":["filePathToPropPath","entryPath","useFileNameAsKey","transform","fp","pipe","removeRelativePrefix","replace","toLower","split","RegExp","path","win32","sep","posix","map","trimCharsStart","join","identity","slice","filePath","startsWith"],"mappings":";;;AAGA;;AAEC,IACYA,MAAAA,kBAAAA,GAAqB,CAChCC,SAAAA,EACAC,mBAA4B,IAAI,GAAA;AAEhC,IAAA,MAAMC,SAAYC,GAAAA,EAAAA,CAAGC,IAAI;AAEvBC,IAAAA,oBAAAA;AAEAF,IAAAA,EAAAA,CAAGG,OAAO,CAAC,2BAA6B,EAAA,EAAA,CAAA;;IAGxCH,EAAGI,CAAAA,OAAO;IAEVJ,EAAGK,CAAAA,KAAK,CAAC,IAAIC,MAAAA,CAAO,CAAC,GAAG,EAAEC,IAAKC,CAAAA,KAAK,CAACC,GAAG,CAAC,CAAC,EAAEF,IAAKG,CAAAA,KAAK,CAACD,GAAG,CAAC,CAAC,CAAC,EAAE,GAAA,CAAA,CAAA;AAE/DT,IAAAA,EAAAA,CAAGW,GAAG,CAACX,EAAAA,CAAGY,cAAc,CAAC;AAEzBZ,IAAAA,EAAAA,CAAGa,IAAI,CAAC,GAAA,CAAA,EACRb,GAAGK,KAAK,CAAC;AAETP,IAAAA,gBAAAA,GAAmBE,GAAGc,QAAQ,GAAGd,GAAGe,KAAK,CAAC,GAAG,CAAC,CAAA,CAAA,CAAA;AAGhD,IAAA,OAAOhB,SAAUF,CAAAA,SAAAA,CAAAA;AACnB;AAEA,MAAMK,uBAAuB,CAACc,QAAAA,GAAAA;IAC5B,OAAOA,QAAAA,CAASC,UAAU,CAAC,CAAC,CAAC,EAAEV,IAAAA,CAAKC,KAAK,CAACC,GAAG,CAAA,CAAE,CAAKO,IAAAA,QAAAA,CAASC,UAAU,CAAC,CAAC,CAAC,EAAEV,IAAAA,CAAKG,KAAK,CAACD,GAAG,CAAA,CAAE,CACxFO,GAAAA,QAAAA,CAASD,KAAK,CAAC,CACfC,CAAAA,GAAAA,QAAAA;AACN,CAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load-config-file.js","sources":["../../src/utils/load-config-file.ts"],"sourcesContent":["import path from 'path';\nimport fs from 'fs';\nimport { env, importDefault } from '@strapi/utils';\n\nconst loadJsFile = (file: string) => {\n try {\n const jsModule = importDefault(file);\n\n // call if function\n if (typeof jsModule === 'function') {\n return jsModule({ env });\n }\n\n return jsModule;\n } catch (error) {\n if (error instanceof Error) {\n throw new Error(`Could not load js config file ${file}: ${error.message}`);\n }\n\n throw new Error('Unknown error');\n }\n};\n\nconst loadJSONFile = (file: string) => {\n try {\n return JSON.parse(fs.readFileSync(file).toString());\n } catch (error) {\n if (error instanceof Error) {\n throw new Error(`Could not load json config file ${file}: ${error.message}`);\n }\n\n throw new Error('Unknown error');\n }\n};\n\nexport const loadConfigFile = (file: string) => {\n const ext = path.extname(file);\n\n switch (ext) {\n case '.js':\n return loadJsFile(file);\n case '.json':\n return loadJSONFile(file);\n default:\n return {};\n }\n};\n"],"names":["loadJsFile","file","jsModule","importDefault","env","error","Error","message","loadJSONFile","JSON","parse","fs","readFileSync","toString","loadConfigFile","ext","path","extname"],"mappings":";;;;;;AAIA,MAAMA,aAAa,CAACC,IAAAA,GAAAA;IAClB,IAAI;AACF,QAAA,MAAMC,WAAWC,yBAAcF,CAAAA,IAAAA,CAAAA;;QAG/B,IAAI,OAAOC,aAAa,UAAY,EAAA;AAClC,YAAA,OAAOA,QAAS,CAAA;AAAEE,qBAAAA;AAAI,aAAA,CAAA;AACxB;QAEA,OAAOF,QAAAA;AACT,KAAA,CAAE,OAAOG,KAAO,EAAA;AACd,QAAA,IAAIA,iBAAiBC,KAAO,EAAA;YAC1B,MAAM,IAAIA,KAAM,CAAA,CAAC,8BAA8B,EAAEL,
|
|
1
|
+
{"version":3,"file":"load-config-file.js","sources":["../../src/utils/load-config-file.ts"],"sourcesContent":["import path from 'path';\nimport fs from 'fs';\nimport { env, importDefault } from '@strapi/utils';\n\nconst loadJsFile = (file: string) => {\n try {\n const jsModule = importDefault(file);\n\n // call if function\n if (typeof jsModule === 'function') {\n return jsModule({ env });\n }\n\n return jsModule;\n } catch (error) {\n if (error instanceof Error) {\n throw new Error(`Could not load js config file ${file}: ${error.message}`);\n }\n\n throw new Error('Unknown error');\n }\n};\n\nconst loadJSONFile = (file: string) => {\n try {\n return JSON.parse(fs.readFileSync(file).toString());\n } catch (error) {\n if (error instanceof Error) {\n throw new Error(`Could not load json config file ${file}: ${error.message}`);\n }\n\n throw new Error('Unknown error');\n }\n};\n\nexport const loadConfigFile = (file: string) => {\n const ext = path.extname(file);\n\n switch (ext) {\n case '.js':\n return loadJsFile(file);\n case '.json':\n return loadJSONFile(file);\n default:\n return {};\n }\n};\n"],"names":["loadJsFile","file","jsModule","importDefault","env","error","Error","message","loadJSONFile","JSON","parse","fs","readFileSync","toString","loadConfigFile","ext","path","extname"],"mappings":";;;;;;AAIA,MAAMA,aAAa,CAACC,IAAAA,GAAAA;IAClB,IAAI;AACF,QAAA,MAAMC,WAAWC,yBAAcF,CAAAA,IAAAA,CAAAA;;QAG/B,IAAI,OAAOC,aAAa,UAAY,EAAA;AAClC,YAAA,OAAOA,QAAS,CAAA;AAAEE,qBAAAA;AAAI,aAAA,CAAA;AACxB;QAEA,OAAOF,QAAAA;AACT,KAAA,CAAE,OAAOG,KAAO,EAAA;AACd,QAAA,IAAIA,iBAAiBC,KAAO,EAAA;YAC1B,MAAM,IAAIA,KAAM,CAAA,CAAC,8BAA8B,EAAEL,KAAK,EAAE,EAAEI,KAAME,CAAAA,OAAO,CAAE,CAAA,CAAA;AAC3E;AAEA,QAAA,MAAM,IAAID,KAAM,CAAA,eAAA,CAAA;AAClB;AACF,CAAA;AAEA,MAAME,eAAe,CAACP,IAAAA,GAAAA;IACpB,IAAI;AACF,QAAA,OAAOQ,KAAKC,KAAK,CAACC,GAAGC,YAAY,CAACX,MAAMY,QAAQ,EAAA,CAAA;AAClD,KAAA,CAAE,OAAOR,KAAO,EAAA;AACd,QAAA,IAAIA,iBAAiBC,KAAO,EAAA;YAC1B,MAAM,IAAIA,KAAM,CAAA,CAAC,gCAAgC,EAAEL,KAAK,EAAE,EAAEI,KAAME,CAAAA,OAAO,CAAE,CAAA,CAAA;AAC7E;AAEA,QAAA,MAAM,IAAID,KAAM,CAAA,eAAA,CAAA;AAClB;AACF,CAAA;AAEO,MAAMQ,iBAAiB,CAACb,IAAAA,GAAAA;IAC7B,MAAMc,GAAAA,GAAMC,IAAKC,CAAAA,OAAO,CAAChB,IAAAA,CAAAA;IAEzB,OAAQc,GAAAA;QACN,KAAK,KAAA;AACH,YAAA,OAAOf,UAAWC,CAAAA,IAAAA,CAAAA;QACpB,KAAK,OAAA;AACH,YAAA,OAAOO,YAAaP,CAAAA,IAAAA,CAAAA;AACtB,QAAA;AACE,YAAA,OAAO,EAAC;AACZ;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load-config-file.mjs","sources":["../../src/utils/load-config-file.ts"],"sourcesContent":["import path from 'path';\nimport fs from 'fs';\nimport { env, importDefault } from '@strapi/utils';\n\nconst loadJsFile = (file: string) => {\n try {\n const jsModule = importDefault(file);\n\n // call if function\n if (typeof jsModule === 'function') {\n return jsModule({ env });\n }\n\n return jsModule;\n } catch (error) {\n if (error instanceof Error) {\n throw new Error(`Could not load js config file ${file}: ${error.message}`);\n }\n\n throw new Error('Unknown error');\n }\n};\n\nconst loadJSONFile = (file: string) => {\n try {\n return JSON.parse(fs.readFileSync(file).toString());\n } catch (error) {\n if (error instanceof Error) {\n throw new Error(`Could not load json config file ${file}: ${error.message}`);\n }\n\n throw new Error('Unknown error');\n }\n};\n\nexport const loadConfigFile = (file: string) => {\n const ext = path.extname(file);\n\n switch (ext) {\n case '.js':\n return loadJsFile(file);\n case '.json':\n return loadJSONFile(file);\n default:\n return {};\n }\n};\n"],"names":["loadJsFile","file","jsModule","importDefault","env","error","Error","message","loadJSONFile","JSON","parse","fs","readFileSync","toString","loadConfigFile","ext","path","extname"],"mappings":";;;;AAIA,MAAMA,aAAa,CAACC,IAAAA,GAAAA;IAClB,IAAI;AACF,QAAA,MAAMC,WAAWC,aAAcF,CAAAA,IAAAA,CAAAA;;QAG/B,IAAI,OAAOC,aAAa,UAAY,EAAA;AAClC,YAAA,OAAOA,QAAS,CAAA;AAAEE,gBAAAA;AAAI,aAAA,CAAA;AACxB;QAEA,OAAOF,QAAAA;AACT,KAAA,CAAE,OAAOG,KAAO,EAAA;AACd,QAAA,IAAIA,iBAAiBC,KAAO,EAAA;YAC1B,MAAM,IAAIA,KAAM,CAAA,CAAC,8BAA8B,EAAEL,
|
|
1
|
+
{"version":3,"file":"load-config-file.mjs","sources":["../../src/utils/load-config-file.ts"],"sourcesContent":["import path from 'path';\nimport fs from 'fs';\nimport { env, importDefault } from '@strapi/utils';\n\nconst loadJsFile = (file: string) => {\n try {\n const jsModule = importDefault(file);\n\n // call if function\n if (typeof jsModule === 'function') {\n return jsModule({ env });\n }\n\n return jsModule;\n } catch (error) {\n if (error instanceof Error) {\n throw new Error(`Could not load js config file ${file}: ${error.message}`);\n }\n\n throw new Error('Unknown error');\n }\n};\n\nconst loadJSONFile = (file: string) => {\n try {\n return JSON.parse(fs.readFileSync(file).toString());\n } catch (error) {\n if (error instanceof Error) {\n throw new Error(`Could not load json config file ${file}: ${error.message}`);\n }\n\n throw new Error('Unknown error');\n }\n};\n\nexport const loadConfigFile = (file: string) => {\n const ext = path.extname(file);\n\n switch (ext) {\n case '.js':\n return loadJsFile(file);\n case '.json':\n return loadJSONFile(file);\n default:\n return {};\n }\n};\n"],"names":["loadJsFile","file","jsModule","importDefault","env","error","Error","message","loadJSONFile","JSON","parse","fs","readFileSync","toString","loadConfigFile","ext","path","extname"],"mappings":";;;;AAIA,MAAMA,aAAa,CAACC,IAAAA,GAAAA;IAClB,IAAI;AACF,QAAA,MAAMC,WAAWC,aAAcF,CAAAA,IAAAA,CAAAA;;QAG/B,IAAI,OAAOC,aAAa,UAAY,EAAA;AAClC,YAAA,OAAOA,QAAS,CAAA;AAAEE,gBAAAA;AAAI,aAAA,CAAA;AACxB;QAEA,OAAOF,QAAAA;AACT,KAAA,CAAE,OAAOG,KAAO,EAAA;AACd,QAAA,IAAIA,iBAAiBC,KAAO,EAAA;YAC1B,MAAM,IAAIA,KAAM,CAAA,CAAC,8BAA8B,EAAEL,KAAK,EAAE,EAAEI,KAAME,CAAAA,OAAO,CAAE,CAAA,CAAA;AAC3E;AAEA,QAAA,MAAM,IAAID,KAAM,CAAA,eAAA,CAAA;AAClB;AACF,CAAA;AAEA,MAAME,eAAe,CAACP,IAAAA,GAAAA;IACpB,IAAI;AACF,QAAA,OAAOQ,KAAKC,KAAK,CAACC,GAAGC,YAAY,CAACX,MAAMY,QAAQ,EAAA,CAAA;AAClD,KAAA,CAAE,OAAOR,KAAO,EAAA;AACd,QAAA,IAAIA,iBAAiBC,KAAO,EAAA;YAC1B,MAAM,IAAIA,KAAM,CAAA,CAAC,gCAAgC,EAAEL,KAAK,EAAE,EAAEI,KAAME,CAAAA,OAAO,CAAE,CAAA,CAAA;AAC7E;AAEA,QAAA,MAAM,IAAID,KAAM,CAAA,eAAA,CAAA;AAClB;AACF,CAAA;AAEO,MAAMQ,iBAAiB,CAACb,IAAAA,GAAAA;IAC7B,MAAMc,GAAAA,GAAMC,IAAKC,CAAAA,OAAO,CAAChB,IAAAA,CAAAA;IAEzB,OAAQc,GAAAA;QACN,KAAK,KAAA;AACH,YAAA,OAAOf,UAAWC,CAAAA,IAAAA,CAAAA;QACpB,KAAK,OAAA;AACH,YAAA,OAAOO,YAAaP,CAAAA,IAAAA,CAAAA;AACtB,QAAA;AACE,YAAA,OAAO,EAAC;AACZ;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"startup-logger.js","sources":["../../src/utils/startup-logger.ts"],"sourcesContent":["import chalk from 'chalk';\nimport CLITable from 'cli-table3';\nimport _ from 'lodash/fp';\n\nimport type { Core } from '@strapi/types';\n\nexport const createStartupLogger = (app: Core.Strapi) => {\n return {\n logStats() {\n const columns = Math.min(process.stderr.columns, 80) - 2;\n console.log();\n console.log(chalk.black.bgWhite(_.padEnd(columns, ' Project information')));\n console.log();\n\n const infoTable = new CLITable({\n colWidths: [20, 50],\n chars: { mid: '', 'left-mid': '', 'mid-mid': '', 'right-mid': '' },\n });\n\n const dbInfo = app.db?.getInfo();\n\n infoTable.push(\n [chalk.blue('Time'), `${new Date()}`],\n [chalk.blue('Launched in'), `${Date.now() - app.config.launchedAt} ms`],\n [chalk.blue('Environment'), app.config.environment],\n [chalk.blue('Process PID'), process.pid],\n [chalk.blue('Version'), `${app.config.info.strapi} (node ${process.version})`],\n [chalk.blue('Edition'), app.EE ? 'Enterprise' : 'Community'],\n [chalk.blue('Database'), dbInfo?.client],\n [chalk.blue('Database name'), dbInfo?.displayName]\n );\n\n if (dbInfo?.schema) {\n infoTable.push([chalk.blue('Database schema'), dbInfo.schema]);\n }\n\n console.log(infoTable.toString());\n console.log();\n console.log(chalk.black.bgWhite(_.padEnd(columns, ' Actions available')));\n console.log();\n },\n\n logFirstStartupMessage() {\n if (!strapi.config.get('server.logger.startup.enabled')) {\n return;\n }\n\n this.logStats();\n\n console.log(chalk.bold('One more thing...'));\n console.log(\n chalk.grey('Create your first administrator 💻 by going to the administration panel at:')\n );\n console.log();\n\n const addressTable = new CLITable();\n\n const adminUrl = strapi.config.get('admin.absoluteUrl');\n addressTable.push([chalk.bold(adminUrl)]);\n\n console.log(`${addressTable.toString()}`);\n console.log();\n },\n\n logDefaultStartupMessage() {\n if (!strapi.config.get('server.logger.startup.enabled')) {\n return;\n }\n this.logStats();\n\n console.log(chalk.bold('Welcome back!'));\n\n if (app.config.get('admin.serveAdminPanel') === true) {\n console.log(chalk.grey('To manage your project 🚀, go to the administration panel at:'));\n const adminUrl = strapi.config.get('admin.absoluteUrl');\n console.log(chalk.bold(adminUrl));\n console.log();\n }\n\n console.log(chalk.grey('To access the server ⚡️, go to:'));\n const serverUrl = strapi.config.get('server.absoluteUrl');\n console.log(chalk.bold(serverUrl));\n console.log();\n },\n\n logStartupMessage({ isInitialized }: { isInitialized: boolean }) {\n if (!strapi.config.get('server.logger.startup.enabled')) {\n return;\n }\n if (!isInitialized) {\n this.logFirstStartupMessage();\n } else {\n this.logDefaultStartupMessage();\n }\n },\n };\n};\n"],"names":["createStartupLogger","app","logStats","columns","Math","min","process","stderr","console","log","chalk","black","bgWhite","_","padEnd","infoTable","CLITable","colWidths","chars","mid","dbInfo","db","getInfo","push","blue","Date","now","config","launchedAt","environment","pid","info","strapi","version","EE","client","displayName","schema","toString","logFirstStartupMessage","get","bold","grey","addressTable","adminUrl","logDefaultStartupMessage","serverUrl","logStartupMessage","isInitialized"],"mappings":";;;;;;AAMO,MAAMA,sBAAsB,CAACC,GAAAA,GAAAA;IAClC,OAAO;AACLC,QAAAA,QAAAA,CAAAA,GAAAA;YACE,MAAMC,OAAAA,GAAUC,KAAKC,GAAG,CAACC,QAAQC,MAAM,CAACJ,OAAO,EAAE,EAAM,CAAA,GAAA,CAAA;AACvDK,YAAAA,OAAAA,CAAQC,GAAG,EAAA;YACXD,OAAQC,CAAAA,GAAG,CAACC,KAAAA,CAAMC,KAAK,CAACC,OAAO,CAACC,EAAAA,CAAEC,MAAM,CAACX,OAAS,EAAA,sBAAA,CAAA,CAAA,CAAA;AAClDK,YAAAA,OAAAA,CAAQC,GAAG,EAAA;YAEX,MAAMM,SAAAA,GAAY,IAAIC,QAAS,CAAA;gBAC7BC,SAAW,EAAA;AAAC,oBAAA,EAAA;AAAI,oBAAA;AAAG,iBAAA;gBACnBC,KAAO,EAAA;oBAAEC,GAAK,EAAA,EAAA;oBAAI,UAAY,EAAA,EAAA;oBAAI,SAAW,EAAA,EAAA;oBAAI,WAAa,EAAA;AAAG;AACnE,aAAA,CAAA;YAEA,MAAMC,MAAAA,GAASnB,GAAIoB,CAAAA,EAAE,EAAEC,OAAAA,EAAAA;AAEvBP,YAAAA,SAAAA,CAAUQ,IAAI,CACZ;AAACb,gBAAAA,KAAAA,CAAMc,IAAI,CAAC,MAAA,CAAA;
|
|
1
|
+
{"version":3,"file":"startup-logger.js","sources":["../../src/utils/startup-logger.ts"],"sourcesContent":["import chalk from 'chalk';\nimport CLITable from 'cli-table3';\nimport _ from 'lodash/fp';\n\nimport type { Core } from '@strapi/types';\n\nexport const createStartupLogger = (app: Core.Strapi) => {\n return {\n logStats() {\n const columns = Math.min(process.stderr.columns, 80) - 2;\n console.log();\n console.log(chalk.black.bgWhite(_.padEnd(columns, ' Project information')));\n console.log();\n\n const infoTable = new CLITable({\n colWidths: [20, 50],\n chars: { mid: '', 'left-mid': '', 'mid-mid': '', 'right-mid': '' },\n });\n\n const dbInfo = app.db?.getInfo();\n\n infoTable.push(\n [chalk.blue('Time'), `${new Date()}`],\n [chalk.blue('Launched in'), `${Date.now() - app.config.launchedAt} ms`],\n [chalk.blue('Environment'), app.config.environment],\n [chalk.blue('Process PID'), process.pid],\n [chalk.blue('Version'), `${app.config.info.strapi} (node ${process.version})`],\n [chalk.blue('Edition'), app.EE ? 'Enterprise' : 'Community'],\n [chalk.blue('Database'), dbInfo?.client],\n [chalk.blue('Database name'), dbInfo?.displayName]\n );\n\n if (dbInfo?.schema) {\n infoTable.push([chalk.blue('Database schema'), dbInfo.schema]);\n }\n\n console.log(infoTable.toString());\n console.log();\n console.log(chalk.black.bgWhite(_.padEnd(columns, ' Actions available')));\n console.log();\n },\n\n logFirstStartupMessage() {\n if (!strapi.config.get('server.logger.startup.enabled')) {\n return;\n }\n\n this.logStats();\n\n console.log(chalk.bold('One more thing...'));\n console.log(\n chalk.grey('Create your first administrator 💻 by going to the administration panel at:')\n );\n console.log();\n\n const addressTable = new CLITable();\n\n const adminUrl = strapi.config.get('admin.absoluteUrl');\n addressTable.push([chalk.bold(adminUrl)]);\n\n console.log(`${addressTable.toString()}`);\n console.log();\n },\n\n logDefaultStartupMessage() {\n if (!strapi.config.get('server.logger.startup.enabled')) {\n return;\n }\n this.logStats();\n\n console.log(chalk.bold('Welcome back!'));\n\n if (app.config.get('admin.serveAdminPanel') === true) {\n console.log(chalk.grey('To manage your project 🚀, go to the administration panel at:'));\n const adminUrl = strapi.config.get('admin.absoluteUrl');\n console.log(chalk.bold(adminUrl));\n console.log();\n }\n\n console.log(chalk.grey('To access the server ⚡️, go to:'));\n const serverUrl = strapi.config.get('server.absoluteUrl');\n console.log(chalk.bold(serverUrl));\n console.log();\n },\n\n logStartupMessage({ isInitialized }: { isInitialized: boolean }) {\n if (!strapi.config.get('server.logger.startup.enabled')) {\n return;\n }\n if (!isInitialized) {\n this.logFirstStartupMessage();\n } else {\n this.logDefaultStartupMessage();\n }\n },\n };\n};\n"],"names":["createStartupLogger","app","logStats","columns","Math","min","process","stderr","console","log","chalk","black","bgWhite","_","padEnd","infoTable","CLITable","colWidths","chars","mid","dbInfo","db","getInfo","push","blue","Date","now","config","launchedAt","environment","pid","info","strapi","version","EE","client","displayName","schema","toString","logFirstStartupMessage","get","bold","grey","addressTable","adminUrl","logDefaultStartupMessage","serverUrl","logStartupMessage","isInitialized"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"startup-logger.mjs","sources":["../../src/utils/startup-logger.ts"],"sourcesContent":["import chalk from 'chalk';\nimport CLITable from 'cli-table3';\nimport _ from 'lodash/fp';\n\nimport type { Core } from '@strapi/types';\n\nexport const createStartupLogger = (app: Core.Strapi) => {\n return {\n logStats() {\n const columns = Math.min(process.stderr.columns, 80) - 2;\n console.log();\n console.log(chalk.black.bgWhite(_.padEnd(columns, ' Project information')));\n console.log();\n\n const infoTable = new CLITable({\n colWidths: [20, 50],\n chars: { mid: '', 'left-mid': '', 'mid-mid': '', 'right-mid': '' },\n });\n\n const dbInfo = app.db?.getInfo();\n\n infoTable.push(\n [chalk.blue('Time'), `${new Date()}`],\n [chalk.blue('Launched in'), `${Date.now() - app.config.launchedAt} ms`],\n [chalk.blue('Environment'), app.config.environment],\n [chalk.blue('Process PID'), process.pid],\n [chalk.blue('Version'), `${app.config.info.strapi} (node ${process.version})`],\n [chalk.blue('Edition'), app.EE ? 'Enterprise' : 'Community'],\n [chalk.blue('Database'), dbInfo?.client],\n [chalk.blue('Database name'), dbInfo?.displayName]\n );\n\n if (dbInfo?.schema) {\n infoTable.push([chalk.blue('Database schema'), dbInfo.schema]);\n }\n\n console.log(infoTable.toString());\n console.log();\n console.log(chalk.black.bgWhite(_.padEnd(columns, ' Actions available')));\n console.log();\n },\n\n logFirstStartupMessage() {\n if (!strapi.config.get('server.logger.startup.enabled')) {\n return;\n }\n\n this.logStats();\n\n console.log(chalk.bold('One more thing...'));\n console.log(\n chalk.grey('Create your first administrator 💻 by going to the administration panel at:')\n );\n console.log();\n\n const addressTable = new CLITable();\n\n const adminUrl = strapi.config.get('admin.absoluteUrl');\n addressTable.push([chalk.bold(adminUrl)]);\n\n console.log(`${addressTable.toString()}`);\n console.log();\n },\n\n logDefaultStartupMessage() {\n if (!strapi.config.get('server.logger.startup.enabled')) {\n return;\n }\n this.logStats();\n\n console.log(chalk.bold('Welcome back!'));\n\n if (app.config.get('admin.serveAdminPanel') === true) {\n console.log(chalk.grey('To manage your project 🚀, go to the administration panel at:'));\n const adminUrl = strapi.config.get('admin.absoluteUrl');\n console.log(chalk.bold(adminUrl));\n console.log();\n }\n\n console.log(chalk.grey('To access the server ⚡️, go to:'));\n const serverUrl = strapi.config.get('server.absoluteUrl');\n console.log(chalk.bold(serverUrl));\n console.log();\n },\n\n logStartupMessage({ isInitialized }: { isInitialized: boolean }) {\n if (!strapi.config.get('server.logger.startup.enabled')) {\n return;\n }\n if (!isInitialized) {\n this.logFirstStartupMessage();\n } else {\n this.logDefaultStartupMessage();\n }\n },\n };\n};\n"],"names":["createStartupLogger","app","logStats","columns","Math","min","process","stderr","console","log","chalk","black","bgWhite","_","padEnd","infoTable","CLITable","colWidths","chars","mid","dbInfo","db","getInfo","push","blue","Date","now","config","launchedAt","environment","pid","info","strapi","version","EE","client","displayName","schema","toString","logFirstStartupMessage","get","bold","grey","addressTable","adminUrl","logDefaultStartupMessage","serverUrl","logStartupMessage","isInitialized"],"mappings":";;;;AAMO,MAAMA,sBAAsB,CAACC,GAAAA,GAAAA;IAClC,OAAO;AACLC,QAAAA,QAAAA,CAAAA,GAAAA;YACE,MAAMC,OAAAA,GAAUC,KAAKC,GAAG,CAACC,QAAQC,MAAM,CAACJ,OAAO,EAAE,EAAM,CAAA,GAAA,CAAA;AACvDK,YAAAA,OAAAA,CAAQC,GAAG,EAAA;YACXD,OAAQC,CAAAA,GAAG,CAACC,KAAAA,CAAMC,KAAK,CAACC,OAAO,CAACC,EAAAA,CAAEC,MAAM,CAACX,OAAS,EAAA,sBAAA,CAAA,CAAA,CAAA;AAClDK,YAAAA,OAAAA,CAAQC,GAAG,EAAA;YAEX,MAAMM,SAAAA,GAAY,IAAIC,QAAS,CAAA;gBAC7BC,SAAW,EAAA;AAAC,oBAAA,EAAA;AAAI,oBAAA;AAAG,iBAAA;gBACnBC,KAAO,EAAA;oBAAEC,GAAK,EAAA,EAAA;oBAAI,UAAY,EAAA,EAAA;oBAAI,SAAW,EAAA,EAAA;oBAAI,WAAa,EAAA;AAAG;AACnE,aAAA,CAAA;YAEA,MAAMC,MAAAA,GAASnB,GAAIoB,CAAAA,EAAE,EAAEC,OAAAA,EAAAA;AAEvBP,YAAAA,SAAAA,CAAUQ,IAAI,CACZ;AAACb,gBAAAA,KAAAA,CAAMc,IAAI,CAAC,MAAA,CAAA;
|
|
1
|
+
{"version":3,"file":"startup-logger.mjs","sources":["../../src/utils/startup-logger.ts"],"sourcesContent":["import chalk from 'chalk';\nimport CLITable from 'cli-table3';\nimport _ from 'lodash/fp';\n\nimport type { Core } from '@strapi/types';\n\nexport const createStartupLogger = (app: Core.Strapi) => {\n return {\n logStats() {\n const columns = Math.min(process.stderr.columns, 80) - 2;\n console.log();\n console.log(chalk.black.bgWhite(_.padEnd(columns, ' Project information')));\n console.log();\n\n const infoTable = new CLITable({\n colWidths: [20, 50],\n chars: { mid: '', 'left-mid': '', 'mid-mid': '', 'right-mid': '' },\n });\n\n const dbInfo = app.db?.getInfo();\n\n infoTable.push(\n [chalk.blue('Time'), `${new Date()}`],\n [chalk.blue('Launched in'), `${Date.now() - app.config.launchedAt} ms`],\n [chalk.blue('Environment'), app.config.environment],\n [chalk.blue('Process PID'), process.pid],\n [chalk.blue('Version'), `${app.config.info.strapi} (node ${process.version})`],\n [chalk.blue('Edition'), app.EE ? 'Enterprise' : 'Community'],\n [chalk.blue('Database'), dbInfo?.client],\n [chalk.blue('Database name'), dbInfo?.displayName]\n );\n\n if (dbInfo?.schema) {\n infoTable.push([chalk.blue('Database schema'), dbInfo.schema]);\n }\n\n console.log(infoTable.toString());\n console.log();\n console.log(chalk.black.bgWhite(_.padEnd(columns, ' Actions available')));\n console.log();\n },\n\n logFirstStartupMessage() {\n if (!strapi.config.get('server.logger.startup.enabled')) {\n return;\n }\n\n this.logStats();\n\n console.log(chalk.bold('One more thing...'));\n console.log(\n chalk.grey('Create your first administrator 💻 by going to the administration panel at:')\n );\n console.log();\n\n const addressTable = new CLITable();\n\n const adminUrl = strapi.config.get('admin.absoluteUrl');\n addressTable.push([chalk.bold(adminUrl)]);\n\n console.log(`${addressTable.toString()}`);\n console.log();\n },\n\n logDefaultStartupMessage() {\n if (!strapi.config.get('server.logger.startup.enabled')) {\n return;\n }\n this.logStats();\n\n console.log(chalk.bold('Welcome back!'));\n\n if (app.config.get('admin.serveAdminPanel') === true) {\n console.log(chalk.grey('To manage your project 🚀, go to the administration panel at:'));\n const adminUrl = strapi.config.get('admin.absoluteUrl');\n console.log(chalk.bold(adminUrl));\n console.log();\n }\n\n console.log(chalk.grey('To access the server ⚡️, go to:'));\n const serverUrl = strapi.config.get('server.absoluteUrl');\n console.log(chalk.bold(serverUrl));\n console.log();\n },\n\n logStartupMessage({ isInitialized }: { isInitialized: boolean }) {\n if (!strapi.config.get('server.logger.startup.enabled')) {\n return;\n }\n if (!isInitialized) {\n this.logFirstStartupMessage();\n } else {\n this.logDefaultStartupMessage();\n }\n },\n };\n};\n"],"names":["createStartupLogger","app","logStats","columns","Math","min","process","stderr","console","log","chalk","black","bgWhite","_","padEnd","infoTable","CLITable","colWidths","chars","mid","dbInfo","db","getInfo","push","blue","Date","now","config","launchedAt","environment","pid","info","strapi","version","EE","client","displayName","schema","toString","logFirstStartupMessage","get","bold","grey","addressTable","adminUrl","logDefaultStartupMessage","serverUrl","logStartupMessage","isInitialized"],"mappings":"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"}
|