@strapi/strapi 4.26.0 → 4.26.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Strapi.js.map +1 -1
- package/dist/Strapi.mjs.map +1 -1
- package/dist/admin.js.map +1 -1
- package/dist/admin.mjs.map +1 -1
- package/dist/commands/actions/admin/create-user/action.js.map +1 -1
- package/dist/commands/actions/admin/reset-user-password/action.js.map +1 -1
- package/dist/commands/actions/admin/reset-user-password/command.js.map +1 -1
- package/dist/commands/actions/components/list/action.js.map +1 -1
- package/dist/commands/actions/components/list/command.js.map +1 -1
- package/dist/commands/actions/configuration/dump/action.js.map +1 -1
- package/dist/commands/actions/configuration/dump/command.js.map +1 -1
- package/dist/commands/actions/configuration/restore/action.js +1 -2
- package/dist/commands/actions/configuration/restore/action.js.map +1 -1
- package/dist/commands/actions/configuration/restore/command.js.map +1 -1
- package/dist/commands/actions/console/action.js.map +1 -1
- package/dist/commands/actions/console/command.js.map +1 -1
- package/dist/commands/actions/content-types/list/action.js.map +1 -1
- package/dist/commands/actions/content-types/list/command.js.map +1 -1
- package/dist/commands/actions/controllers/list/action.js.map +1 -1
- package/dist/commands/actions/controllers/list/command.js.map +1 -1
- package/dist/commands/actions/generate/command.js.map +1 -1
- package/dist/commands/actions/hooks/list/action.js.map +1 -1
- package/dist/commands/actions/hooks/list/command.js.map +1 -1
- package/dist/commands/actions/install/action.js.map +1 -1
- package/dist/commands/actions/install/command.js.map +1 -1
- package/dist/commands/actions/middlewares/list/action.js.map +1 -1
- package/dist/commands/actions/middlewares/list/command.js.map +1 -1
- package/dist/commands/actions/new/action.js.map +1 -1
- package/dist/commands/actions/new/command.js.map +1 -1
- package/dist/commands/actions/plugin/build-command/action.js.map +1 -1
- package/dist/commands/actions/plugin/build-command/command.js.map +1 -1
- package/dist/commands/actions/plugin/init/action.js.map +1 -1
- package/dist/commands/actions/plugin/init/command.js.map +1 -1
- package/dist/commands/actions/plugin/init/files/admin.js.map +1 -1
- package/dist/commands/actions/plugin/init/files/server.js.map +1 -1
- package/dist/commands/actions/plugin/init/files/typescript.js.map +1 -1
- package/dist/commands/actions/plugin/link-watch/action.js.map +1 -1
- package/dist/commands/actions/plugin/verify/action.js.map +1 -1
- package/dist/commands/actions/plugin/watch/action.js.map +1 -1
- package/dist/commands/actions/policies/list/action.js.map +1 -1
- package/dist/commands/actions/policies/list/command.js.map +1 -1
- package/dist/commands/actions/report/action.js.map +1 -1
- package/dist/commands/actions/report/command.js.map +1 -1
- package/dist/commands/actions/routes/list/action.js.map +1 -1
- package/dist/commands/actions/routes/list/command.js.map +1 -1
- package/dist/commands/actions/services/list/action.js.map +1 -1
- package/dist/commands/actions/services/list/command.js.map +1 -1
- package/dist/commands/actions/start/action.js.map +1 -1
- package/dist/commands/actions/start/command.js.map +1 -1
- package/dist/commands/actions/telemetry/disable/action.js.map +1 -1
- package/dist/commands/actions/telemetry/disable/command.js.map +1 -1
- package/dist/commands/actions/telemetry/enable/action.js.map +1 -1
- package/dist/commands/actions/telemetry/enable/command.js.map +1 -1
- package/dist/commands/actions/templates/generate/action.js.map +1 -1
- package/dist/commands/actions/templates/generate/command.js.map +1 -1
- package/dist/commands/actions/ts/generate-types/action.js.map +1 -1
- package/dist/commands/actions/ts/generate-types/command.js.map +1 -1
- package/dist/commands/actions/uninstall/action.js.map +1 -1
- package/dist/commands/actions/uninstall/command.js.map +1 -1
- package/dist/commands/actions/version/command.js.map +1 -1
- package/dist/commands/actions/watch-admin/action.js.map +1 -1
- package/dist/commands/actions/watch-admin/command.js.map +1 -1
- package/dist/commands/index.js +60 -60
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/utils/commander.js.map +1 -1
- package/dist/commands/utils/helpers.js.map +1 -1
- package/dist/commands/utils/logger.js +1 -2
- package/dist/commands/utils/logger.js.map +1 -1
- package/dist/commands/utils/pkg.js +1 -2
- package/dist/commands/utils/pkg.js.map +1 -1
- package/dist/commands/utils/tsconfig.js.map +1 -1
- package/dist/compile.js.map +1 -1
- package/dist/compile.mjs.map +1 -1
- package/dist/container.js.map +1 -1
- package/dist/container.mjs.map +1 -1
- package/dist/core/app-configuration/config-loader.js +1 -2
- package/dist/core/app-configuration/config-loader.js.map +1 -1
- package/dist/core/app-configuration/config-loader.mjs +1 -2
- package/dist/core/app-configuration/config-loader.mjs.map +1 -1
- package/dist/core/app-configuration/index.js.map +1 -1
- package/dist/core/app-configuration/index.mjs.map +1 -1
- package/dist/core/app-configuration/load-config-file.js.map +1 -1
- package/dist/core/app-configuration/load-config-file.mjs +1 -1
- package/dist/core/app-configuration/load-config-file.mjs.map +1 -1
- package/dist/core/bootstrap.js.map +1 -1
- package/dist/core/bootstrap.mjs.map +1 -1
- package/dist/core/domain/content-type/index.js.map +1 -1
- package/dist/core/domain/content-type/index.mjs.map +1 -1
- package/dist/core/domain/content-type/validator.js.map +1 -1
- package/dist/core/domain/content-type/validator.mjs.map +1 -1
- package/dist/core/domain/module/index.js.map +1 -1
- package/dist/core/domain/module/index.mjs.map +1 -1
- package/dist/core/domain/module/validation.js.map +1 -1
- package/dist/core/domain/module/validation.mjs.map +1 -1
- package/dist/core/loaders/admin.js.map +1 -1
- package/dist/core/loaders/admin.mjs.map +1 -1
- package/dist/core/loaders/apis.js.map +1 -1
- package/dist/core/loaders/apis.mjs.map +1 -1
- package/dist/core/loaders/components.js.map +1 -1
- package/dist/core/loaders/components.mjs.map +1 -1
- package/dist/core/loaders/index.js.map +1 -1
- package/dist/core/loaders/index.mjs.map +1 -1
- package/dist/core/loaders/middlewares.js.map +1 -1
- package/dist/core/loaders/middlewares.mjs.map +1 -1
- package/dist/core/loaders/plugins/get-enabled-plugins.js.map +1 -1
- package/dist/core/loaders/plugins/get-enabled-plugins.mjs.map +1 -1
- package/dist/core/loaders/plugins/get-user-plugins-config.js.map +1 -1
- package/dist/core/loaders/plugins/get-user-plugins-config.mjs.map +1 -1
- package/dist/core/loaders/plugins/index.js.map +1 -1
- package/dist/core/loaders/plugins/index.mjs +1 -1
- package/dist/core/loaders/plugins/index.mjs.map +1 -1
- package/dist/core/loaders/policies.js.map +1 -1
- package/dist/core/loaders/policies.mjs.map +1 -1
- package/dist/core/loaders/sanitizers.js.map +1 -1
- package/dist/core/loaders/sanitizers.mjs.map +1 -1
- package/dist/core/loaders/src-index.js.map +1 -1
- package/dist/core/loaders/src-index.mjs.map +1 -1
- package/dist/core/loaders/validators.js.map +1 -1
- package/dist/core/loaders/validators.mjs.map +1 -1
- package/dist/core/registries/apis.js.map +1 -1
- package/dist/core/registries/apis.mjs.map +1 -1
- package/dist/core/registries/config.js.map +1 -1
- package/dist/core/registries/config.mjs.map +1 -1
- package/dist/core/registries/content-types.js.map +1 -1
- package/dist/core/registries/content-types.mjs +2 -2
- package/dist/core/registries/content-types.mjs.map +1 -1
- package/dist/core/registries/controllers.js.map +1 -1
- package/dist/core/registries/controllers.mjs +2 -2
- package/dist/core/registries/controllers.mjs.map +1 -1
- package/dist/core/registries/custom-fields.js.map +1 -1
- package/dist/core/registries/custom-fields.mjs.map +1 -1
- package/dist/core/registries/hooks.js.map +1 -1
- package/dist/core/registries/hooks.mjs +1 -1
- package/dist/core/registries/hooks.mjs.map +1 -1
- package/dist/core/registries/middlewares.js.map +1 -1
- package/dist/core/registries/middlewares.mjs +2 -2
- package/dist/core/registries/middlewares.mjs.map +1 -1
- package/dist/core/registries/modules.js.map +1 -1
- package/dist/core/registries/modules.mjs +1 -1
- package/dist/core/registries/modules.mjs.map +1 -1
- package/dist/core/registries/plugins.js.map +1 -1
- package/dist/core/registries/plugins.mjs.map +1 -1
- package/dist/core/registries/policies.js.map +1 -1
- package/dist/core/registries/policies.mjs +2 -2
- package/dist/core/registries/policies.mjs.map +1 -1
- package/dist/core/registries/sanitizers.js.map +1 -1
- package/dist/core/registries/sanitizers.mjs.map +1 -1
- package/dist/core/registries/services.js.map +1 -1
- package/dist/core/registries/services.mjs +2 -2
- package/dist/core/registries/services.mjs.map +1 -1
- package/dist/core/registries/validators.js.map +1 -1
- package/dist/core/registries/validators.mjs.map +1 -1
- package/dist/core/utils.js.map +1 -1
- package/dist/core/utils.mjs.map +1 -1
- package/dist/core-api/controller/collection-type.js.map +1 -1
- package/dist/core-api/controller/collection-type.mjs.map +1 -1
- package/dist/core-api/controller/index.js.map +1 -1
- package/dist/core-api/controller/index.mjs +1 -1
- package/dist/core-api/controller/index.mjs.map +1 -1
- package/dist/core-api/controller/single-type.js.map +1 -1
- package/dist/core-api/controller/single-type.mjs.map +1 -1
- package/dist/core-api/controller/transform.js.map +1 -1
- package/dist/core-api/controller/transform.mjs.map +1 -1
- package/dist/core-api/routes/index.js.map +1 -1
- package/dist/core-api/routes/index.mjs.map +1 -1
- package/dist/core-api/service/collection-type.js.map +1 -1
- package/dist/core-api/service/collection-type.mjs.map +1 -1
- package/dist/core-api/service/get-fetch-params.js.map +1 -1
- package/dist/core-api/service/get-fetch-params.mjs.map +1 -1
- package/dist/core-api/service/index.js.map +1 -1
- package/dist/core-api/service/index.mjs.map +1 -1
- package/dist/core-api/service/pagination.js.map +1 -1
- package/dist/core-api/service/pagination.mjs +1 -1
- package/dist/core-api/service/pagination.mjs.map +1 -1
- package/dist/core-api/service/single-type.js +1 -2
- package/dist/core-api/service/single-type.js.map +1 -1
- package/dist/core-api/service/single-type.mjs +2 -3
- package/dist/core-api/service/single-type.mjs.map +1 -1
- package/dist/ee/index.js.map +1 -1
- package/dist/ee/index.mjs +1 -1
- package/dist/ee/index.mjs.map +1 -1
- package/dist/ee/license.js.map +1 -1
- package/dist/ee/license.mjs.map +1 -1
- package/dist/factories.js +4 -4
- package/dist/factories.js.map +1 -1
- package/dist/factories.mjs.map +1 -1
- package/dist/load/filepath-to-prop-path.js.map +1 -1
- package/dist/load/load-files.js +1 -2
- package/dist/load/load-files.js.map +1 -1
- package/dist/load/load-files.mjs +1 -2
- package/dist/load/load-files.mjs.map +1 -1
- package/dist/middlewares/body.js.map +1 -1
- package/dist/middlewares/body.mjs.map +1 -1
- package/dist/middlewares/cors.js.map +1 -1
- package/dist/middlewares/cors.mjs.map +1 -1
- package/dist/middlewares/errors.js.map +1 -1
- package/dist/middlewares/errors.mjs.map +1 -1
- package/dist/middlewares/favicon.js.map +1 -1
- package/dist/middlewares/favicon.mjs.map +1 -1
- package/dist/middlewares/index.js.map +1 -1
- package/dist/middlewares/logger.js.map +1 -1
- package/dist/middlewares/logger.mjs.map +1 -1
- package/dist/middlewares/powered-by.js.map +1 -1
- package/dist/middlewares/powered-by.mjs.map +1 -1
- package/dist/middlewares/public/index.js +1 -2
- package/dist/middlewares/public/index.js.map +1 -1
- package/dist/middlewares/public/index.mjs +1 -2
- package/dist/middlewares/public/index.mjs.map +1 -1
- package/dist/middlewares/public/serve-static.js.map +1 -1
- package/dist/middlewares/public/serve-static.mjs.map +1 -1
- package/dist/middlewares/query.js.map +1 -1
- package/dist/middlewares/query.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/responses.js.map +1 -1
- package/dist/middlewares/responses.mjs.map +1 -1
- package/dist/middlewares/security.js.map +1 -1
- package/dist/middlewares/security.mjs.map +1 -1
- package/dist/middlewares/session.js.map +1 -1
- package/dist/middlewares/session.mjs.map +1 -1
- package/dist/migrations/draft-publish.js.map +1 -1
- package/dist/migrations/draft-publish.mjs.map +1 -1
- package/dist/services/auth/index.js.map +1 -1
- package/dist/services/auth/index.mjs.map +1 -1
- package/dist/services/content-api/index.js.map +1 -1
- package/dist/services/content-api/index.mjs.map +1 -1
- package/dist/services/content-api/permissions/engine.js.map +1 -1
- package/dist/services/content-api/permissions/engine.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-api/permissions/providers/action.js.map +1 -1
- package/dist/services/content-api/permissions/providers/action.mjs.map +1 -1
- package/dist/services/content-api/permissions/providers/condition.js.map +1 -1
- package/dist/services/content-api/permissions/providers/condition.mjs.map +1 -1
- package/dist/services/core-store.js.map +1 -1
- package/dist/services/core-store.mjs.map +1 -1
- package/dist/services/cron.js +1 -2
- package/dist/services/cron.js.map +1 -1
- package/dist/services/cron.mjs +1 -2
- package/dist/services/cron.mjs.map +1 -1
- package/dist/services/custom-fields.js.map +1 -1
- package/dist/services/custom-fields.mjs.map +1 -1
- package/dist/services/entity-service/attributes/index.js.map +1 -1
- package/dist/services/entity-service/attributes/index.mjs.map +1 -1
- package/dist/services/entity-service/attributes/transforms.js.map +1 -1
- package/dist/services/entity-service/attributes/transforms.mjs.map +1 -1
- package/dist/services/entity-service/components.js.map +1 -1
- package/dist/services/entity-service/components.mjs +1 -1
- package/dist/services/entity-service/components.mjs.map +1 -1
- package/dist/services/entity-service/index.js.map +1 -1
- package/dist/services/entity-service/index.mjs +2 -2
- package/dist/services/entity-service/index.mjs.map +1 -1
- package/dist/services/entity-service/params.js.map +1 -1
- package/dist/services/entity-service/params.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.js.map +1 -1
- package/dist/services/entity-validator/index.mjs +1 -1
- package/dist/services/entity-validator/index.mjs.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/errors.js.map +1 -1
- package/dist/services/errors.mjs.map +1 -1
- package/dist/services/event-hub.js.map +1 -1
- package/dist/services/event-hub.mjs.map +1 -1
- package/dist/services/features.js.map +1 -1
- package/dist/services/features.mjs.map +1 -1
- package/dist/services/fs.js.map +1 -1
- package/dist/services/fs.mjs.map +1 -1
- package/dist/services/metrics/admin-user-hash.js.map +1 -1
- package/dist/services/metrics/admin-user-hash.mjs.map +1 -1
- package/dist/services/metrics/index.js +1 -2
- package/dist/services/metrics/index.js.map +1 -1
- package/dist/services/metrics/index.mjs +1 -2
- package/dist/services/metrics/index.mjs.map +1 -1
- package/dist/services/metrics/is-truthy.js.map +1 -1
- package/dist/services/metrics/is-truthy.mjs.map +1 -1
- package/dist/services/metrics/middleware.js.map +1 -1
- package/dist/services/metrics/middleware.mjs.map +1 -1
- package/dist/services/metrics/rate-limiter.js.map +1 -1
- package/dist/services/metrics/rate-limiter.mjs.map +1 -1
- package/dist/services/metrics/sender.js.map +1 -1
- package/dist/services/metrics/sender.mjs.map +1 -1
- package/dist/services/request-context.js.map +1 -1
- package/dist/services/request-context.mjs.map +1 -1
- package/dist/services/server/admin-api.js.map +1 -1
- package/dist/services/server/admin-api.mjs.map +1 -1
- package/dist/services/server/api.js.map +1 -1
- package/dist/services/server/api.mjs.map +1 -1
- package/dist/services/server/compose-endpoint.js +1 -1
- package/dist/services/server/compose-endpoint.js.map +1 -1
- package/dist/services/server/compose-endpoint.mjs +1 -1
- package/dist/services/server/compose-endpoint.mjs.map +1 -1
- package/dist/services/server/content-api.js.map +1 -1
- package/dist/services/server/content-api.mjs.map +1 -1
- package/dist/services/server/http-server.js.map +1 -1
- package/dist/services/server/http-server.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/koa.js.map +1 -1
- package/dist/services/server/koa.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/policy.js.map +1 -1
- package/dist/services/server/policy.mjs.map +1 -1
- package/dist/services/server/register-middlewares.js.map +1 -1
- package/dist/services/server/register-middlewares.mjs.map +1 -1
- package/dist/services/server/register-routes.js.map +1 -1
- package/dist/services/server/register-routes.mjs.map +1 -1
- package/dist/services/server/routing.js.map +1 -1
- package/dist/services/server/routing.mjs.map +1 -1
- package/dist/services/utils/dynamic-zones.js.map +1 -1
- package/dist/services/utils/dynamic-zones.mjs.map +1 -1
- package/dist/services/utils/upload-files.js +2 -4
- package/dist/services/utils/upload-files.js.map +1 -1
- package/dist/services/utils/upload-files.mjs +2 -4
- package/dist/services/utils/upload-files.mjs.map +1 -1
- package/dist/services/webhook-runner.js.map +1 -1
- package/dist/services/webhook-runner.mjs.map +1 -1
- package/dist/services/webhook-store.js.map +1 -1
- package/dist/services/webhook-store.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/convert-custom-field-type.js.map +1 -1
- package/dist/utils/convert-custom-field-type.mjs.map +1 -1
- package/dist/utils/cron.js.map +1 -1
- package/dist/utils/cron.mjs.map +1 -1
- package/dist/utils/fetch.js.map +1 -1
- package/dist/utils/fetch.mjs.map +1 -1
- package/dist/utils/get-dirs.js.map +1 -1
- package/dist/utils/get-dirs.mjs +1 -1
- package/dist/utils/get-dirs.mjs.map +1 -1
- package/dist/utils/is-initialized.js.map +1 -1
- package/dist/utils/is-initialized.mjs.map +1 -1
- package/dist/utils/machine-id.js.map +1 -1
- package/dist/utils/machine-id.mjs.map +1 -1
- package/dist/utils/open-browser.js.map +1 -1
- package/dist/utils/open-browser.mjs.map +1 -1
- package/dist/utils/signals.js.map +1 -1
- package/dist/utils/signals.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/update-notifier/index.js.map +1 -1
- package/dist/utils/update-notifier/index.mjs.map +1 -1
- package/package.json +26 -26
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-loader.js","sources":["../../../src/core/app-configuration/config-loader.ts"],"sourcesContent":["import path from 'path';\nimport fs from 'fs';\nimport { loadFile } from './load-config-file';\n\nconst VALID_EXTENSIONS = ['.js', '.json'];\n\nexport default (dir: string) => {\n if (!fs.existsSync(dir)) return {};\n\n return fs\n .readdirSync(dir, { withFileTypes: true })\n .filter((file) => file.isFile() && VALID_EXTENSIONS.includes(path.extname(file.name)))\n .reduce((acc, file) => {\n const key = path.basename(file.name, path.extname(file.name));\n\n acc[key] = loadFile(path.resolve(dir, file.name));\n\n return acc;\n }, {} as Record<string, unknown>);\n};\n"],"names":["fs","path","loadFile"],"mappings":";;;;;;;AAIA,MAAM,mBAAmB,CAAC,OAAO,OAAO;AAExC,
|
|
1
|
+
{"version":3,"file":"config-loader.js","sources":["../../../src/core/app-configuration/config-loader.ts"],"sourcesContent":["import path from 'path';\nimport fs from 'fs';\nimport { loadFile } from './load-config-file';\n\nconst VALID_EXTENSIONS = ['.js', '.json'];\n\nexport default (dir: string) => {\n if (!fs.existsSync(dir)) return {};\n\n return fs\n .readdirSync(dir, { withFileTypes: true })\n .filter((file) => file.isFile() && VALID_EXTENSIONS.includes(path.extname(file.name)))\n .reduce((acc, file) => {\n const key = path.basename(file.name, path.extname(file.name));\n\n acc[key] = loadFile(path.resolve(dir, file.name));\n\n return acc;\n }, {} as Record<string, unknown>);\n};\n"],"names":["fs","path","loadFile"],"mappings":";;;;;;;AAIA,MAAM,mBAAmB,CAAC,OAAO,OAAO;AAExC,MAAA,gBAAe,CAAC,QAAgB;AAC9B,MAAI,CAACA,YAAAA,QAAG,WAAW,GAAG,UAAU,CAAA;AAEhC,SAAOA,oBACJ,YAAY,KAAK,EAAE,eAAe,KAAA,CAAM,EACxC,OAAO,CAAC,SAAS,KAAK,YAAY,iBAAiB,SAASC,sBAAK,QAAQ,KAAK,IAAI,CAAC,CAAC,EACpF,OAAO,CAAC,KAAK,SAAS;AACrB,UAAM,MAAMA,sBAAK,SAAS,KAAK,MAAMA,cAAAA,QAAK,QAAQ,KAAK,IAAI,CAAC;AAE5D,QAAI,GAAG,IAAIC,wBAASD,cAAAA,QAAK,QAAQ,KAAK,KAAK,IAAI,CAAC;AAEhD,WAAO;AAAA,EACT,GAAG,CAAA,CAA6B;AACpC;;"}
|
|
@@ -3,8 +3,7 @@ import fs from "fs";
|
|
|
3
3
|
import { loadFile } from "./load-config-file.mjs";
|
|
4
4
|
const VALID_EXTENSIONS = [".js", ".json"];
|
|
5
5
|
const loadConfigDir = (dir) => {
|
|
6
|
-
if (!fs.existsSync(dir))
|
|
7
|
-
return {};
|
|
6
|
+
if (!fs.existsSync(dir)) return {};
|
|
8
7
|
return fs.readdirSync(dir, { withFileTypes: true }).filter((file) => file.isFile() && VALID_EXTENSIONS.includes(path.extname(file.name))).reduce((acc, file) => {
|
|
9
8
|
const key = path.basename(file.name, path.extname(file.name));
|
|
10
9
|
acc[key] = loadFile(path.resolve(dir, file.name));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-loader.mjs","sources":["../../../src/core/app-configuration/config-loader.ts"],"sourcesContent":["import path from 'path';\nimport fs from 'fs';\nimport { loadFile } from './load-config-file';\n\nconst VALID_EXTENSIONS = ['.js', '.json'];\n\nexport default (dir: string) => {\n if (!fs.existsSync(dir)) return {};\n\n return fs\n .readdirSync(dir, { withFileTypes: true })\n .filter((file) => file.isFile() && VALID_EXTENSIONS.includes(path.extname(file.name)))\n .reduce((acc, file) => {\n const key = path.basename(file.name, path.extname(file.name));\n\n acc[key] = loadFile(path.resolve(dir, file.name));\n\n return acc;\n }, {} as Record<string, unknown>);\n};\n"],"names":[],"mappings":";;;AAIA,MAAM,mBAAmB,CAAC,OAAO,OAAO;AAExC,
|
|
1
|
+
{"version":3,"file":"config-loader.mjs","sources":["../../../src/core/app-configuration/config-loader.ts"],"sourcesContent":["import path from 'path';\nimport fs from 'fs';\nimport { loadFile } from './load-config-file';\n\nconst VALID_EXTENSIONS = ['.js', '.json'];\n\nexport default (dir: string) => {\n if (!fs.existsSync(dir)) return {};\n\n return fs\n .readdirSync(dir, { withFileTypes: true })\n .filter((file) => file.isFile() && VALID_EXTENSIONS.includes(path.extname(file.name)))\n .reduce((acc, file) => {\n const key = path.basename(file.name, path.extname(file.name));\n\n acc[key] = loadFile(path.resolve(dir, file.name));\n\n return acc;\n }, {} as Record<string, unknown>);\n};\n"],"names":[],"mappings":";;;AAIA,MAAM,mBAAmB,CAAC,OAAO,OAAO;AAExC,MAAA,gBAAe,CAAC,QAAgB;AAC9B,MAAI,CAAC,GAAG,WAAW,GAAG,UAAU,CAAA;AAEhC,SAAO,GACJ,YAAY,KAAK,EAAE,eAAe,KAAA,CAAM,EACxC,OAAO,CAAC,SAAS,KAAK,YAAY,iBAAiB,SAAS,KAAK,QAAQ,KAAK,IAAI,CAAC,CAAC,EACpF,OAAO,CAAC,KAAK,SAAS;AACrB,UAAM,MAAM,KAAK,SAAS,KAAK,MAAM,KAAK,QAAQ,KAAK,IAAI,CAAC;AAE5D,QAAI,GAAG,IAAI,SAAS,KAAK,QAAQ,KAAK,KAAK,IAAI,CAAC;AAEhD,WAAO;AAAA,EACT,GAAG,CAAA,CAA6B;AACpC;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/core/app-configuration/index.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-var-requires */\nimport os from 'os';\nimport path from 'path';\nimport _ from 'lodash';\nimport { omit } from 'lodash/fp';\nimport dotenv from 'dotenv';\n\nimport loadConfigDir from './config-loader';\n\ndotenv.config({ path: process.env.ENV_PATH });\n\nprocess.env.NODE_ENV = process.env.NODE_ENV || 'development';\n\nconst { version: strapiVersion } = require(path.join(__dirname, '../../../package.json'));\n\nconst defaultConfig = {\n server: {\n host: process.env.HOST || os.hostname() || 'localhost',\n port: process.env.PORT || 1337,\n proxy: false,\n cron: { enabled: false },\n admin: { autoOpen: false },\n dirs: { public: './public' },\n },\n admin: {},\n api: {\n rest: {\n prefix: '/api',\n },\n },\n};\n\nexport default (dirs: { app: string; dist: string }, initialConfig: any = {}) => {\n const { app: appDir, dist: distDir } = dirs;\n const { autoReload = false, serveAdminPanel = true } = initialConfig;\n\n const pkgJSON = require(path.resolve(appDir, 'package.json'));\n\n const configDir = path.resolve(distDir || process.cwd(), 'config');\n\n const rootConfig = {\n launchedAt: Date.now(),\n serveAdminPanel,\n autoReload,\n environment: process.env.NODE_ENV,\n uuid: _.get(pkgJSON, 'strapi.uuid'),\n packageJsonStrapi: _.omit(_.get(pkgJSON, 'strapi', {}), 'uuid'),\n info: {\n ...pkgJSON,\n strapi: strapiVersion,\n },\n };\n\n const baseConfig = omit('plugins', loadConfigDir(configDir)); // plugin config will be loaded later\n\n const envDir = path.resolve(configDir, 'env', process.env.NODE_ENV as string);\n const envConfig = loadConfigDir(envDir);\n\n return _.merge(rootConfig, defaultConfig, baseConfig, envConfig);\n};\n"],"names":["dotenv","path","os","_","omit","loadConfigDir"],"mappings":";;;;;;;;;;;;AASAA,gBAAAA,QAAO,OAAO,EAAE,MAAM,QAAQ,IAAI,UAAU;AAE5C,QAAQ,IAAI,WAAW,QAAQ,IAAI,YAAY;AAE/C,MAAM,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/core/app-configuration/index.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-var-requires */\nimport os from 'os';\nimport path from 'path';\nimport _ from 'lodash';\nimport { omit } from 'lodash/fp';\nimport dotenv from 'dotenv';\n\nimport loadConfigDir from './config-loader';\n\ndotenv.config({ path: process.env.ENV_PATH });\n\nprocess.env.NODE_ENV = process.env.NODE_ENV || 'development';\n\nconst { version: strapiVersion } = require(path.join(__dirname, '../../../package.json'));\n\nconst defaultConfig = {\n server: {\n host: process.env.HOST || os.hostname() || 'localhost',\n port: process.env.PORT || 1337,\n proxy: false,\n cron: { enabled: false },\n admin: { autoOpen: false },\n dirs: { public: './public' },\n },\n admin: {},\n api: {\n rest: {\n prefix: '/api',\n },\n },\n};\n\nexport default (dirs: { app: string; dist: string }, initialConfig: any = {}) => {\n const { app: appDir, dist: distDir } = dirs;\n const { autoReload = false, serveAdminPanel = true } = initialConfig;\n\n const pkgJSON = require(path.resolve(appDir, 'package.json'));\n\n const configDir = path.resolve(distDir || process.cwd(), 'config');\n\n const rootConfig = {\n launchedAt: Date.now(),\n serveAdminPanel,\n autoReload,\n environment: process.env.NODE_ENV,\n uuid: _.get(pkgJSON, 'strapi.uuid'),\n packageJsonStrapi: _.omit(_.get(pkgJSON, 'strapi', {}), 'uuid'),\n info: {\n ...pkgJSON,\n strapi: strapiVersion,\n },\n };\n\n const baseConfig = omit('plugins', loadConfigDir(configDir)); // plugin config will be loaded later\n\n const envDir = path.resolve(configDir, 'env', process.env.NODE_ENV as string);\n const envConfig = loadConfigDir(envDir);\n\n return _.merge(rootConfig, defaultConfig, baseConfig, envConfig);\n};\n"],"names":["dotenv","path","os","_","omit","loadConfigDir"],"mappings":";;;;;;;;;;;;AASAA,gBAAAA,QAAO,OAAO,EAAE,MAAM,QAAQ,IAAI,UAAU;AAE5C,QAAQ,IAAI,WAAW,QAAQ,IAAI,YAAY;AAE/C,MAAM,EAAE,SAAS,cAAA,IAAkB,QAAQC,cAAAA,QAAK,KAAK,WAAW,uBAAuB,CAAC;AAExF,MAAM,gBAAgB;AAAA,EACpB,QAAQ;AAAA,IACN,MAAM,QAAQ,IAAI,QAAQC,YAAAA,QAAG,cAAc;AAAA,IAC3C,MAAM,QAAQ,IAAI,QAAQ;AAAA,IAC1B,OAAO;AAAA,IACP,MAAM,EAAE,SAAS,MAAA;AAAA,IACjB,OAAO,EAAE,UAAU,MAAA;AAAA,IACnB,MAAM,EAAE,QAAQ,WAAA;AAAA,EAAW;AAAA,EAE7B,OAAO,CAAA;AAAA,EACP,KAAK;AAAA,IACH,MAAM;AAAA,MACJ,QAAQ;AAAA,IAAA;AAAA,EACV;AAEJ;AAEA,MAAA,oBAAe,CAAC,MAAqC,gBAAqB,OAAO;AAC/E,QAAM,EAAE,KAAK,QAAQ,MAAM,YAAY;AACvC,QAAM,EAAE,aAAa,OAAO,kBAAkB,SAAS;AAEvD,QAAM,UAAU,QAAQD,cAAAA,QAAK,QAAQ,QAAQ,cAAc,CAAC;AAE5D,QAAM,YAAYA,cAAAA,QAAK,QAAQ,WAAW,QAAQ,IAAA,GAAO,QAAQ;AAEjE,QAAM,aAAa;AAAA,IACjB,YAAY,KAAK,IAAA;AAAA,IACjB;AAAA,IACA;AAAA,IACA,aAAa,QAAQ,IAAI;AAAA,IACzB,MAAME,WAAAA,QAAE,IAAI,SAAS,aAAa;AAAA,IAClC,mBAAmBA,WAAAA,QAAE,KAAKA,mBAAE,IAAI,SAAS,UAAU,EAAE,GAAG,MAAM;AAAA,IAC9D,MAAM;AAAA,MACJ,GAAG;AAAA,MACH,QAAQ;AAAA,IAAA;AAAA,EACV;AAGF,QAAM,aAAaC,GAAAA,KAAK,WAAWC,aAAc,SAAS,CAAC;AAE3D,QAAM,SAASJ,cAAAA,QAAK,QAAQ,WAAW,OAAO,QAAQ,IAAI,QAAkB;AAC5E,QAAM,YAAYI,aAAc,MAAM;AAEtC,SAAOF,WAAAA,QAAE,MAAM,YAAY,eAAe,YAAY,SAAS;AACjE;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../src/core/app-configuration/index.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-var-requires */\nimport os from 'os';\nimport path from 'path';\nimport _ from 'lodash';\nimport { omit } from 'lodash/fp';\nimport dotenv from 'dotenv';\n\nimport loadConfigDir from './config-loader';\n\ndotenv.config({ path: process.env.ENV_PATH });\n\nprocess.env.NODE_ENV = process.env.NODE_ENV || 'development';\n\nconst { version: strapiVersion } = require(path.join(__dirname, '../../../package.json'));\n\nconst defaultConfig = {\n server: {\n host: process.env.HOST || os.hostname() || 'localhost',\n port: process.env.PORT || 1337,\n proxy: false,\n cron: { enabled: false },\n admin: { autoOpen: false },\n dirs: { public: './public' },\n },\n admin: {},\n api: {\n rest: {\n prefix: '/api',\n },\n },\n};\n\nexport default (dirs: { app: string; dist: string }, initialConfig: any = {}) => {\n const { app: appDir, dist: distDir } = dirs;\n const { autoReload = false, serveAdminPanel = true } = initialConfig;\n\n const pkgJSON = require(path.resolve(appDir, 'package.json'));\n\n const configDir = path.resolve(distDir || process.cwd(), 'config');\n\n const rootConfig = {\n launchedAt: Date.now(),\n serveAdminPanel,\n autoReload,\n environment: process.env.NODE_ENV,\n uuid: _.get(pkgJSON, 'strapi.uuid'),\n packageJsonStrapi: _.omit(_.get(pkgJSON, 'strapi', {}), 'uuid'),\n info: {\n ...pkgJSON,\n strapi: strapiVersion,\n },\n };\n\n const baseConfig = omit('plugins', loadConfigDir(configDir)); // plugin config will be loaded later\n\n const envDir = path.resolve(configDir, 'env', process.env.NODE_ENV as string);\n const envConfig = loadConfigDir(envDir);\n\n return _.merge(rootConfig, defaultConfig, baseConfig, envConfig);\n};\n"],"names":[],"mappings":";;;;;;AASA,OAAO,OAAO,EAAE,MAAM,QAAQ,IAAI,UAAU;AAE5C,QAAQ,IAAI,WAAW,QAAQ,IAAI,YAAY;AAE/C,MAAM,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../src/core/app-configuration/index.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-var-requires */\nimport os from 'os';\nimport path from 'path';\nimport _ from 'lodash';\nimport { omit } from 'lodash/fp';\nimport dotenv from 'dotenv';\n\nimport loadConfigDir from './config-loader';\n\ndotenv.config({ path: process.env.ENV_PATH });\n\nprocess.env.NODE_ENV = process.env.NODE_ENV || 'development';\n\nconst { version: strapiVersion } = require(path.join(__dirname, '../../../package.json'));\n\nconst defaultConfig = {\n server: {\n host: process.env.HOST || os.hostname() || 'localhost',\n port: process.env.PORT || 1337,\n proxy: false,\n cron: { enabled: false },\n admin: { autoOpen: false },\n dirs: { public: './public' },\n },\n admin: {},\n api: {\n rest: {\n prefix: '/api',\n },\n },\n};\n\nexport default (dirs: { app: string; dist: string }, initialConfig: any = {}) => {\n const { app: appDir, dist: distDir } = dirs;\n const { autoReload = false, serveAdminPanel = true } = initialConfig;\n\n const pkgJSON = require(path.resolve(appDir, 'package.json'));\n\n const configDir = path.resolve(distDir || process.cwd(), 'config');\n\n const rootConfig = {\n launchedAt: Date.now(),\n serveAdminPanel,\n autoReload,\n environment: process.env.NODE_ENV,\n uuid: _.get(pkgJSON, 'strapi.uuid'),\n packageJsonStrapi: _.omit(_.get(pkgJSON, 'strapi', {}), 'uuid'),\n info: {\n ...pkgJSON,\n strapi: strapiVersion,\n },\n };\n\n const baseConfig = omit('plugins', loadConfigDir(configDir)); // plugin config will be loaded later\n\n const envDir = path.resolve(configDir, 'env', process.env.NODE_ENV as string);\n const envConfig = loadConfigDir(envDir);\n\n return _.merge(rootConfig, defaultConfig, baseConfig, envConfig);\n};\n"],"names":[],"mappings":";;;;;;AASA,OAAO,OAAO,EAAE,MAAM,QAAQ,IAAI,UAAU;AAE5C,QAAQ,IAAI,WAAW,QAAQ,IAAI,YAAY;AAE/C,MAAM,EAAE,SAAS,cAAA,IAAkB,QAAQ,KAAK,KAAK,WAAW,uBAAuB,CAAC;AAExF,MAAM,gBAAgB;AAAA,EACpB,QAAQ;AAAA,IACN,MAAM,QAAQ,IAAI,QAAQ,GAAG,cAAc;AAAA,IAC3C,MAAM,QAAQ,IAAI,QAAQ;AAAA,IAC1B,OAAO;AAAA,IACP,MAAM,EAAE,SAAS,MAAA;AAAA,IACjB,OAAO,EAAE,UAAU,MAAA;AAAA,IACnB,MAAM,EAAE,QAAQ,WAAA;AAAA,EAAW;AAAA,EAE7B,OAAO,CAAA;AAAA,EACP,KAAK;AAAA,IACH,MAAM;AAAA,MACJ,QAAQ;AAAA,IAAA;AAAA,EACV;AAEJ;AAEA,MAAA,oBAAe,CAAC,MAAqC,gBAAqB,OAAO;AAC/E,QAAM,EAAE,KAAK,QAAQ,MAAM,YAAY;AACvC,QAAM,EAAE,aAAa,OAAO,kBAAkB,SAAS;AAEvD,QAAM,UAAU,QAAQ,KAAK,QAAQ,QAAQ,cAAc,CAAC;AAE5D,QAAM,YAAY,KAAK,QAAQ,WAAW,QAAQ,IAAA,GAAO,QAAQ;AAEjE,QAAM,aAAa;AAAA,IACjB,YAAY,KAAK,IAAA;AAAA,IACjB;AAAA,IACA;AAAA,IACA,aAAa,QAAQ,IAAI;AAAA,IACzB,MAAM,EAAE,IAAI,SAAS,aAAa;AAAA,IAClC,mBAAmB,EAAE,KAAK,EAAE,IAAI,SAAS,UAAU,EAAE,GAAG,MAAM;AAAA,IAC9D,MAAM;AAAA,MACJ,GAAG;AAAA,MACH,QAAQ;AAAA,IAAA;AAAA,EACV;AAGF,QAAM,aAAa,KAAK,WAAW,cAAc,SAAS,CAAC;AAE3D,QAAM,SAAS,KAAK,QAAQ,WAAW,OAAO,QAAQ,IAAI,QAAkB;AAC5E,QAAM,YAAY,cAAc,MAAM;AAEtC,SAAO,EAAE,MAAM,YAAY,eAAe,YAAY,SAAS;AACjE;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load-config-file.js","sources":["../../../src/core/app-configuration/load-config-file.ts"],"sourcesContent":["import path from 'path';\nimport fs from 'fs';\nimport { templateConfiguration, 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 templateConfiguration(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 loadFile = (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":["importDefault","env","templateConfiguration","fs","path"],"mappings":";;;;;;;;AAIA,MAAM,aAAa,CAAC,SAAiB;
|
|
1
|
+
{"version":3,"file":"load-config-file.js","sources":["../../../src/core/app-configuration/load-config-file.ts"],"sourcesContent":["import path from 'path';\nimport fs from 'fs';\nimport { templateConfiguration, 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 templateConfiguration(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 loadFile = (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":["importDefault","env","templateConfiguration","fs","path"],"mappings":";;;;;;;;AAIA,MAAM,aAAa,CAAC,SAAiB;AACnC,MAAI;AACF,UAAM,WAAWA,YAAAA,cAAc,IAAI;AAGnC,QAAI,OAAO,aAAa,YAAY;AAClC,aAAO,SAAS,EAAA,KAAEC,YAAAA,KAAK;AAAA,IACzB;AAEA,WAAO;AAAA,EACT,SAAS,OAAO;AACd,QAAI,iBAAiB,OAAO;AAC1B,YAAM,IAAI,MAAM,iCAAiC,IAAI,KAAK,MAAM,OAAO,EAAE;AAAA,IAC3E;AAEA,UAAM,IAAI,MAAM,eAAe;AAAA,EACjC;AACF;AAEA,MAAM,eAAe,CAAC,SAAiB;AACrC,MAAI;AACF,WAAOC,YAAAA,sBAAsB,KAAK,MAAMC,YAAAA,QAAG,aAAa,IAAI,EAAE,SAAA,CAAU,CAAC;AAAA,EAC3E,SAAS,OAAO;AACd,QAAI,iBAAiB,OAAO;AAC1B,YAAM,IAAI,MAAM,mCAAmC,IAAI,KAAK,MAAM,OAAO,EAAE;AAAA,IAC7E;AAEA,UAAM,IAAI,MAAM,eAAe;AAAA,EACjC;AACF;AAEO,MAAM,WAAW,CAAC,SAAiB;AACxC,QAAM,MAAMC,cAAAA,QAAK,QAAQ,IAAI;AAE7B,UAAQ,KAAA;AAAA,IACN,KAAK;AACH,aAAO,WAAW,IAAI;AAAA,IACxB,KAAK;AACH,aAAO,aAAa,IAAI;AAAA,IAC1B;AACE,aAAO,CAAA;AAAA,EAAC;AAEd;;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import path from "path";
|
|
2
2
|
import fs from "fs";
|
|
3
|
-
import { importDefault, env
|
|
3
|
+
import { templateConfiguration, importDefault, env } from "@strapi/utils";
|
|
4
4
|
const loadJsFile = (file) => {
|
|
5
5
|
try {
|
|
6
6
|
const jsModule = importDefault(file);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load-config-file.mjs","sources":["../../../src/core/app-configuration/load-config-file.ts"],"sourcesContent":["import path from 'path';\nimport fs from 'fs';\nimport { templateConfiguration, 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 templateConfiguration(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 loadFile = (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":[],"mappings":";;;AAIA,MAAM,aAAa,CAAC,SAAiB;
|
|
1
|
+
{"version":3,"file":"load-config-file.mjs","sources":["../../../src/core/app-configuration/load-config-file.ts"],"sourcesContent":["import path from 'path';\nimport fs from 'fs';\nimport { templateConfiguration, 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 templateConfiguration(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 loadFile = (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":[],"mappings":";;;AAIA,MAAM,aAAa,CAAC,SAAiB;AACnC,MAAI;AACF,UAAM,WAAW,cAAc,IAAI;AAGnC,QAAI,OAAO,aAAa,YAAY;AAClC,aAAO,SAAS,EAAE,KAAK;AAAA,IACzB;AAEA,WAAO;AAAA,EACT,SAAS,OAAO;AACd,QAAI,iBAAiB,OAAO;AAC1B,YAAM,IAAI,MAAM,iCAAiC,IAAI,KAAK,MAAM,OAAO,EAAE;AAAA,IAC3E;AAEA,UAAM,IAAI,MAAM,eAAe;AAAA,EACjC;AACF;AAEA,MAAM,eAAe,CAAC,SAAiB;AACrC,MAAI;AACF,WAAO,sBAAsB,KAAK,MAAM,GAAG,aAAa,IAAI,EAAE,SAAA,CAAU,CAAC;AAAA,EAC3E,SAAS,OAAO;AACd,QAAI,iBAAiB,OAAO;AAC1B,YAAM,IAAI,MAAM,mCAAmC,IAAI,KAAK,MAAM,OAAO,EAAE;AAAA,IAC7E;AAEA,UAAM,IAAI,MAAM,eAAe;AAAA,EACjC;AACF;AAEO,MAAM,WAAW,CAAC,SAAiB;AACxC,QAAM,MAAM,KAAK,QAAQ,IAAI;AAE7B,UAAQ,KAAA;AAAA,IACN,KAAK;AACH,aAAO,WAAW,IAAI;AAAA,IACxB,KAAK;AACH,aAAO,aAAa,IAAI;AAAA,IAC1B;AACE,aAAO,CAAA;AAAA,EAAC;AAEd;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.js","sources":["../../src/core/bootstrap.ts"],"sourcesContent":["import { getConfigUrls } from '@strapi/utils';\nimport fse from 'fs-extra';\nimport type { Strapi } from '@strapi/types';\n\nexport default async function bootstrap({ strapi }: { strapi: Strapi }) {\n strapi.config.port = strapi.config.get('server.port') || strapi.config.port;\n strapi.config.host = strapi.config.get('server.host') || strapi.config.host;\n\n const { serverUrl, adminUrl, adminPath } = getConfigUrls(strapi.config);\n\n strapi.config.server = strapi.config.server || {};\n strapi.config.server.url = serverUrl;\n strapi.config.admin.url = adminUrl;\n strapi.config.admin.path = adminPath;\n\n // check if we should serve admin panel\n const shouldServeAdmin = strapi.config.get(\n 'admin.serveAdminPanel',\n strapi.config.get('serveAdminPanel')\n );\n\n if (!shouldServeAdmin) {\n strapi.config.serveAdminPanel = false;\n }\n\n // ensure public repository exists\n if (!(await fse.pathExists(strapi.dirs.static.public))) {\n throw new Error(\n `The public folder (${strapi.dirs.static.public}) doesn't exist or is not accessible. Please make sure it exists.`\n );\n }\n}\n"],"names":["getConfigUrls","fse"],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"bootstrap.js","sources":["../../src/core/bootstrap.ts"],"sourcesContent":["import { getConfigUrls } from '@strapi/utils';\nimport fse from 'fs-extra';\nimport type { Strapi } from '@strapi/types';\n\nexport default async function bootstrap({ strapi }: { strapi: Strapi }) {\n strapi.config.port = strapi.config.get('server.port') || strapi.config.port;\n strapi.config.host = strapi.config.get('server.host') || strapi.config.host;\n\n const { serverUrl, adminUrl, adminPath } = getConfigUrls(strapi.config);\n\n strapi.config.server = strapi.config.server || {};\n strapi.config.server.url = serverUrl;\n strapi.config.admin.url = adminUrl;\n strapi.config.admin.path = adminPath;\n\n // check if we should serve admin panel\n const shouldServeAdmin = strapi.config.get(\n 'admin.serveAdminPanel',\n strapi.config.get('serveAdminPanel')\n );\n\n if (!shouldServeAdmin) {\n strapi.config.serveAdminPanel = false;\n }\n\n // ensure public repository exists\n if (!(await fse.pathExists(strapi.dirs.static.public))) {\n throw new Error(\n `The public folder (${strapi.dirs.static.public}) doesn't exist or is not accessible. Please make sure it exists.`\n );\n }\n}\n"],"names":["getConfigUrls","fse"],"mappings":";;;;;AAIA,eAA8B,UAAU,EAAE,UAA8B;AACtE,SAAO,OAAO,OAAO,OAAO,OAAO,IAAI,aAAa,KAAK,OAAO,OAAO;AACvE,SAAO,OAAO,OAAO,OAAO,OAAO,IAAI,aAAa,KAAK,OAAO,OAAO;AAEvE,QAAM,EAAE,WAAW,UAAU,cAAcA,YAAAA,cAAc,OAAO,MAAM;AAEtE,SAAO,OAAO,SAAS,OAAO,OAAO,UAAU,CAAA;AAC/C,SAAO,OAAO,OAAO,MAAM;AAC3B,SAAO,OAAO,MAAM,MAAM;AAC1B,SAAO,OAAO,MAAM,OAAO;AAG3B,QAAM,mBAAmB,OAAO,OAAO;AAAA,IACrC;AAAA,IACA,OAAO,OAAO,IAAI,iBAAiB;AAAA,EAAA;AAGrC,MAAI,CAAC,kBAAkB;AACrB,WAAO,OAAO,kBAAkB;AAAA,EAClC;AAGA,MAAI,CAAE,MAAMC,aAAAA,QAAI,WAAW,OAAO,KAAK,OAAO,MAAM,GAAI;AACtD,UAAM,IAAI;AAAA,MACR,sBAAsB,OAAO,KAAK,OAAO,MAAM;AAAA,IAAA;AAAA,EAEnD;AACF;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.mjs","sources":["../../src/core/bootstrap.ts"],"sourcesContent":["import { getConfigUrls } from '@strapi/utils';\nimport fse from 'fs-extra';\nimport type { Strapi } from '@strapi/types';\n\nexport default async function bootstrap({ strapi }: { strapi: Strapi }) {\n strapi.config.port = strapi.config.get('server.port') || strapi.config.port;\n strapi.config.host = strapi.config.get('server.host') || strapi.config.host;\n\n const { serverUrl, adminUrl, adminPath } = getConfigUrls(strapi.config);\n\n strapi.config.server = strapi.config.server || {};\n strapi.config.server.url = serverUrl;\n strapi.config.admin.url = adminUrl;\n strapi.config.admin.path = adminPath;\n\n // check if we should serve admin panel\n const shouldServeAdmin = strapi.config.get(\n 'admin.serveAdminPanel',\n strapi.config.get('serveAdminPanel')\n );\n\n if (!shouldServeAdmin) {\n strapi.config.serveAdminPanel = false;\n }\n\n // ensure public repository exists\n if (!(await fse.pathExists(strapi.dirs.static.public))) {\n throw new Error(\n `The public folder (${strapi.dirs.static.public}) doesn't exist or is not accessible. Please make sure it exists.`\n );\n }\n}\n"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"bootstrap.mjs","sources":["../../src/core/bootstrap.ts"],"sourcesContent":["import { getConfigUrls } from '@strapi/utils';\nimport fse from 'fs-extra';\nimport type { Strapi } from '@strapi/types';\n\nexport default async function bootstrap({ strapi }: { strapi: Strapi }) {\n strapi.config.port = strapi.config.get('server.port') || strapi.config.port;\n strapi.config.host = strapi.config.get('server.host') || strapi.config.host;\n\n const { serverUrl, adminUrl, adminPath } = getConfigUrls(strapi.config);\n\n strapi.config.server = strapi.config.server || {};\n strapi.config.server.url = serverUrl;\n strapi.config.admin.url = adminUrl;\n strapi.config.admin.path = adminPath;\n\n // check if we should serve admin panel\n const shouldServeAdmin = strapi.config.get(\n 'admin.serveAdminPanel',\n strapi.config.get('serveAdminPanel')\n );\n\n if (!shouldServeAdmin) {\n strapi.config.serveAdminPanel = false;\n }\n\n // ensure public repository exists\n if (!(await fse.pathExists(strapi.dirs.static.public))) {\n throw new Error(\n `The public folder (${strapi.dirs.static.public}) doesn't exist or is not accessible. Please make sure it exists.`\n );\n }\n}\n"],"names":[],"mappings":";;AAIA,eAA8B,UAAU,EAAE,UAA8B;AACtE,SAAO,OAAO,OAAO,OAAO,OAAO,IAAI,aAAa,KAAK,OAAO,OAAO;AACvE,SAAO,OAAO,OAAO,OAAO,OAAO,IAAI,aAAa,KAAK,OAAO,OAAO;AAEvE,QAAM,EAAE,WAAW,UAAU,cAAc,cAAc,OAAO,MAAM;AAEtE,SAAO,OAAO,SAAS,OAAO,OAAO,UAAU,CAAA;AAC/C,SAAO,OAAO,OAAO,MAAM;AAC3B,SAAO,OAAO,MAAM,MAAM;AAC1B,SAAO,OAAO,MAAM,OAAO;AAG3B,QAAM,mBAAmB,OAAO,OAAO;AAAA,IACrC;AAAA,IACA,OAAO,OAAO,IAAI,iBAAiB;AAAA,EAAA;AAGrC,MAAI,CAAC,kBAAkB;AACrB,WAAO,OAAO,kBAAkB;AAAA,EAClC;AAGA,MAAI,CAAE,MAAM,IAAI,WAAW,OAAO,KAAK,OAAO,MAAM,GAAI;AACtD,UAAM,IAAI;AAAA,MACR,sBAAsB,OAAO,KAAK,OAAO,MAAM;AAAA,IAAA;AAAA,EAEnD;AACF;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/core/domain/content-type/index.ts"],"sourcesContent":["import { cloneDeep } from 'lodash/fp';\nimport _ from 'lodash';\nimport { yup, contentTypes as contentTypesUtils } from '@strapi/utils';\nimport type { Schema } from '@strapi/types';\nimport { validateContentTypeDefinition } from './validator';\n\nexport type ContentTypeDefinition = {\n schema: Schema.ContentType;\n actions: Record<string, unknown>;\n lifecycles: Record<string, unknown>;\n};\n\nconst {\n CREATED_AT_ATTRIBUTE,\n UPDATED_AT_ATTRIBUTE,\n PUBLISHED_AT_ATTRIBUTE,\n CREATED_BY_ATTRIBUTE,\n UPDATED_BY_ATTRIBUTE,\n} = contentTypesUtils.constants;\n\nconst createContentType = (uid: string, definition: ContentTypeDefinition) => {\n try {\n validateContentTypeDefinition(definition);\n } catch (e) {\n if (e instanceof yup.ValidationError) {\n throw new Error(`Content Type Definition is invalid for ${uid}'.\\n${e.errors}`);\n }\n\n throw e;\n }\n\n const { schema, actions, lifecycles } = cloneDeep(definition);\n\n // general info\n Object.assign(schema, {\n kind: schema.kind || 'collectionType',\n __schema__: pickSchema(definition.schema),\n modelType: 'contentType',\n modelName: definition.schema.info.singularName,\n connection: 'default',\n });\n\n if (uid.startsWith('api::')) {\n Object.assign(schema, {\n uid,\n apiName: uid.split('::')[1].split('.')[0],\n collectionName: schema.collectionName || schema.info.singularName,\n globalId: getGlobalId(schema, schema.info.singularName),\n });\n } else if (uid.startsWith('plugin::')) {\n const pluginName = uid.split('::')[1].split('.')[0];\n Object.assign(schema, {\n uid,\n plugin: pluginName, // TODO: to be set in load-plugins.js\n collectionName:\n schema.collectionName || `${pluginName}_${schema.info.singularName}`.toLowerCase(),\n globalId: getGlobalId(schema, schema.info.singularName, pluginName),\n });\n } else if (uid.startsWith('admin::')) {\n Object.assign(schema, {\n uid,\n plugin: 'admin',\n globalId: getGlobalId(schema, schema.info.singularName, 'admin'),\n });\n } else {\n throw new Error(\n `Incorrect Content Type UID \"${uid}\". The UID should start with api::, plugin:: or admin::.`\n );\n }\n\n // attributes\n Object.assign(schema.attributes, {\n [CREATED_AT_ATTRIBUTE]: {\n type: 'datetime',\n },\n // TODO: handle on edit set to new date\n [UPDATED_AT_ATTRIBUTE]: {\n type: 'datetime',\n },\n });\n\n if (contentTypesUtils.hasDraftAndPublish(schema as any)) {\n schema.attributes[PUBLISHED_AT_ATTRIBUTE] = {\n type: 'datetime',\n configurable: false,\n writable: true,\n visible: false,\n };\n }\n\n const isPrivate = !_.get(schema, 'options.populateCreatorFields', false);\n\n schema.attributes[CREATED_BY_ATTRIBUTE] = {\n type: 'relation',\n relation: 'oneToOne',\n target: 'admin::user',\n configurable: false,\n writable: false,\n visible: false,\n useJoinTable: false,\n private: isPrivate,\n };\n\n schema.attributes[UPDATED_BY_ATTRIBUTE] = {\n type: 'relation',\n relation: 'oneToOne',\n target: 'admin::user',\n configurable: false,\n writable: false,\n visible: false,\n useJoinTable: false,\n private: isPrivate,\n };\n\n Object.assign(schema, { actions, lifecycles });\n\n return schema;\n};\n\nconst getGlobalId = (model: any, modelName: string, prefix?: string) => {\n const globalId = prefix ? `${prefix}-${modelName}` : modelName;\n\n return model.globalId || _.upperFirst(_.camelCase(globalId));\n};\n\nconst pickSchema = (model: Schema.ContentType) => {\n const schema = _.cloneDeep(\n _.pick(model, [\n 'connection',\n 'collectionName',\n 'info',\n 'options',\n 'pluginOptions',\n 'attributes',\n ])\n );\n\n schema.kind = model.kind || 'collectionType';\n return schema;\n};\n\nexport { createContentType };\n"],"names":["contentTypesUtils","validateContentTypeDefinition","yup","cloneDeep","_"],"mappings":";;;;;;;;AAYA,MAAM;AAAA,EACJ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,IAAIA,YAAAA,aAAkB;
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/core/domain/content-type/index.ts"],"sourcesContent":["import { cloneDeep } from 'lodash/fp';\nimport _ from 'lodash';\nimport { yup, contentTypes as contentTypesUtils } from '@strapi/utils';\nimport type { Schema } from '@strapi/types';\nimport { validateContentTypeDefinition } from './validator';\n\nexport type ContentTypeDefinition = {\n schema: Schema.ContentType;\n actions: Record<string, unknown>;\n lifecycles: Record<string, unknown>;\n};\n\nconst {\n CREATED_AT_ATTRIBUTE,\n UPDATED_AT_ATTRIBUTE,\n PUBLISHED_AT_ATTRIBUTE,\n CREATED_BY_ATTRIBUTE,\n UPDATED_BY_ATTRIBUTE,\n} = contentTypesUtils.constants;\n\nconst createContentType = (uid: string, definition: ContentTypeDefinition) => {\n try {\n validateContentTypeDefinition(definition);\n } catch (e) {\n if (e instanceof yup.ValidationError) {\n throw new Error(`Content Type Definition is invalid for ${uid}'.\\n${e.errors}`);\n }\n\n throw e;\n }\n\n const { schema, actions, lifecycles } = cloneDeep(definition);\n\n // general info\n Object.assign(schema, {\n kind: schema.kind || 'collectionType',\n __schema__: pickSchema(definition.schema),\n modelType: 'contentType',\n modelName: definition.schema.info.singularName,\n connection: 'default',\n });\n\n if (uid.startsWith('api::')) {\n Object.assign(schema, {\n uid,\n apiName: uid.split('::')[1].split('.')[0],\n collectionName: schema.collectionName || schema.info.singularName,\n globalId: getGlobalId(schema, schema.info.singularName),\n });\n } else if (uid.startsWith('plugin::')) {\n const pluginName = uid.split('::')[1].split('.')[0];\n Object.assign(schema, {\n uid,\n plugin: pluginName, // TODO: to be set in load-plugins.js\n collectionName:\n schema.collectionName || `${pluginName}_${schema.info.singularName}`.toLowerCase(),\n globalId: getGlobalId(schema, schema.info.singularName, pluginName),\n });\n } else if (uid.startsWith('admin::')) {\n Object.assign(schema, {\n uid,\n plugin: 'admin',\n globalId: getGlobalId(schema, schema.info.singularName, 'admin'),\n });\n } else {\n throw new Error(\n `Incorrect Content Type UID \"${uid}\". The UID should start with api::, plugin:: or admin::.`\n );\n }\n\n // attributes\n Object.assign(schema.attributes, {\n [CREATED_AT_ATTRIBUTE]: {\n type: 'datetime',\n },\n // TODO: handle on edit set to new date\n [UPDATED_AT_ATTRIBUTE]: {\n type: 'datetime',\n },\n });\n\n if (contentTypesUtils.hasDraftAndPublish(schema as any)) {\n schema.attributes[PUBLISHED_AT_ATTRIBUTE] = {\n type: 'datetime',\n configurable: false,\n writable: true,\n visible: false,\n };\n }\n\n const isPrivate = !_.get(schema, 'options.populateCreatorFields', false);\n\n schema.attributes[CREATED_BY_ATTRIBUTE] = {\n type: 'relation',\n relation: 'oneToOne',\n target: 'admin::user',\n configurable: false,\n writable: false,\n visible: false,\n useJoinTable: false,\n private: isPrivate,\n };\n\n schema.attributes[UPDATED_BY_ATTRIBUTE] = {\n type: 'relation',\n relation: 'oneToOne',\n target: 'admin::user',\n configurable: false,\n writable: false,\n visible: false,\n useJoinTable: false,\n private: isPrivate,\n };\n\n Object.assign(schema, { actions, lifecycles });\n\n return schema;\n};\n\nconst getGlobalId = (model: any, modelName: string, prefix?: string) => {\n const globalId = prefix ? `${prefix}-${modelName}` : modelName;\n\n return model.globalId || _.upperFirst(_.camelCase(globalId));\n};\n\nconst pickSchema = (model: Schema.ContentType) => {\n const schema = _.cloneDeep(\n _.pick(model, [\n 'connection',\n 'collectionName',\n 'info',\n 'options',\n 'pluginOptions',\n 'attributes',\n ])\n );\n\n schema.kind = model.kind || 'collectionType';\n return schema;\n};\n\nexport { createContentType };\n"],"names":["contentTypesUtils","validateContentTypeDefinition","yup","cloneDeep","_"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../../src/core/domain/content-type/index.ts"],"sourcesContent":["import { cloneDeep } from 'lodash/fp';\nimport _ from 'lodash';\nimport { yup, contentTypes as contentTypesUtils } from '@strapi/utils';\nimport type { Schema } from '@strapi/types';\nimport { validateContentTypeDefinition } from './validator';\n\nexport type ContentTypeDefinition = {\n schema: Schema.ContentType;\n actions: Record<string, unknown>;\n lifecycles: Record<string, unknown>;\n};\n\nconst {\n CREATED_AT_ATTRIBUTE,\n UPDATED_AT_ATTRIBUTE,\n PUBLISHED_AT_ATTRIBUTE,\n CREATED_BY_ATTRIBUTE,\n UPDATED_BY_ATTRIBUTE,\n} = contentTypesUtils.constants;\n\nconst createContentType = (uid: string, definition: ContentTypeDefinition) => {\n try {\n validateContentTypeDefinition(definition);\n } catch (e) {\n if (e instanceof yup.ValidationError) {\n throw new Error(`Content Type Definition is invalid for ${uid}'.\\n${e.errors}`);\n }\n\n throw e;\n }\n\n const { schema, actions, lifecycles } = cloneDeep(definition);\n\n // general info\n Object.assign(schema, {\n kind: schema.kind || 'collectionType',\n __schema__: pickSchema(definition.schema),\n modelType: 'contentType',\n modelName: definition.schema.info.singularName,\n connection: 'default',\n });\n\n if (uid.startsWith('api::')) {\n Object.assign(schema, {\n uid,\n apiName: uid.split('::')[1].split('.')[0],\n collectionName: schema.collectionName || schema.info.singularName,\n globalId: getGlobalId(schema, schema.info.singularName),\n });\n } else if (uid.startsWith('plugin::')) {\n const pluginName = uid.split('::')[1].split('.')[0];\n Object.assign(schema, {\n uid,\n plugin: pluginName, // TODO: to be set in load-plugins.js\n collectionName:\n schema.collectionName || `${pluginName}_${schema.info.singularName}`.toLowerCase(),\n globalId: getGlobalId(schema, schema.info.singularName, pluginName),\n });\n } else if (uid.startsWith('admin::')) {\n Object.assign(schema, {\n uid,\n plugin: 'admin',\n globalId: getGlobalId(schema, schema.info.singularName, 'admin'),\n });\n } else {\n throw new Error(\n `Incorrect Content Type UID \"${uid}\". The UID should start with api::, plugin:: or admin::.`\n );\n }\n\n // attributes\n Object.assign(schema.attributes, {\n [CREATED_AT_ATTRIBUTE]: {\n type: 'datetime',\n },\n // TODO: handle on edit set to new date\n [UPDATED_AT_ATTRIBUTE]: {\n type: 'datetime',\n },\n });\n\n if (contentTypesUtils.hasDraftAndPublish(schema as any)) {\n schema.attributes[PUBLISHED_AT_ATTRIBUTE] = {\n type: 'datetime',\n configurable: false,\n writable: true,\n visible: false,\n };\n }\n\n const isPrivate = !_.get(schema, 'options.populateCreatorFields', false);\n\n schema.attributes[CREATED_BY_ATTRIBUTE] = {\n type: 'relation',\n relation: 'oneToOne',\n target: 'admin::user',\n configurable: false,\n writable: false,\n visible: false,\n useJoinTable: false,\n private: isPrivate,\n };\n\n schema.attributes[UPDATED_BY_ATTRIBUTE] = {\n type: 'relation',\n relation: 'oneToOne',\n target: 'admin::user',\n configurable: false,\n writable: false,\n visible: false,\n useJoinTable: false,\n private: isPrivate,\n };\n\n Object.assign(schema, { actions, lifecycles });\n\n return schema;\n};\n\nconst getGlobalId = (model: any, modelName: string, prefix?: string) => {\n const globalId = prefix ? `${prefix}-${modelName}` : modelName;\n\n return model.globalId || _.upperFirst(_.camelCase(globalId));\n};\n\nconst pickSchema = (model: Schema.ContentType) => {\n const schema = _.cloneDeep(\n _.pick(model, [\n 'connection',\n 'collectionName',\n 'info',\n 'options',\n 'pluginOptions',\n 'attributes',\n ])\n );\n\n schema.kind = model.kind || 'collectionType';\n return schema;\n};\n\nexport { createContentType };\n"],"names":["contentTypesUtils"],"mappings":";;;;AAYA,MAAM;AAAA,EACJ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,IAAIA,aAAkB;
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../../src/core/domain/content-type/index.ts"],"sourcesContent":["import { cloneDeep } from 'lodash/fp';\nimport _ from 'lodash';\nimport { yup, contentTypes as contentTypesUtils } from '@strapi/utils';\nimport type { Schema } from '@strapi/types';\nimport { validateContentTypeDefinition } from './validator';\n\nexport type ContentTypeDefinition = {\n schema: Schema.ContentType;\n actions: Record<string, unknown>;\n lifecycles: Record<string, unknown>;\n};\n\nconst {\n CREATED_AT_ATTRIBUTE,\n UPDATED_AT_ATTRIBUTE,\n PUBLISHED_AT_ATTRIBUTE,\n CREATED_BY_ATTRIBUTE,\n UPDATED_BY_ATTRIBUTE,\n} = contentTypesUtils.constants;\n\nconst createContentType = (uid: string, definition: ContentTypeDefinition) => {\n try {\n validateContentTypeDefinition(definition);\n } catch (e) {\n if (e instanceof yup.ValidationError) {\n throw new Error(`Content Type Definition is invalid for ${uid}'.\\n${e.errors}`);\n }\n\n throw e;\n }\n\n const { schema, actions, lifecycles } = cloneDeep(definition);\n\n // general info\n Object.assign(schema, {\n kind: schema.kind || 'collectionType',\n __schema__: pickSchema(definition.schema),\n modelType: 'contentType',\n modelName: definition.schema.info.singularName,\n connection: 'default',\n });\n\n if (uid.startsWith('api::')) {\n Object.assign(schema, {\n uid,\n apiName: uid.split('::')[1].split('.')[0],\n collectionName: schema.collectionName || schema.info.singularName,\n globalId: getGlobalId(schema, schema.info.singularName),\n });\n } else if (uid.startsWith('plugin::')) {\n const pluginName = uid.split('::')[1].split('.')[0];\n Object.assign(schema, {\n uid,\n plugin: pluginName, // TODO: to be set in load-plugins.js\n collectionName:\n schema.collectionName || `${pluginName}_${schema.info.singularName}`.toLowerCase(),\n globalId: getGlobalId(schema, schema.info.singularName, pluginName),\n });\n } else if (uid.startsWith('admin::')) {\n Object.assign(schema, {\n uid,\n plugin: 'admin',\n globalId: getGlobalId(schema, schema.info.singularName, 'admin'),\n });\n } else {\n throw new Error(\n `Incorrect Content Type UID \"${uid}\". The UID should start with api::, plugin:: or admin::.`\n );\n }\n\n // attributes\n Object.assign(schema.attributes, {\n [CREATED_AT_ATTRIBUTE]: {\n type: 'datetime',\n },\n // TODO: handle on edit set to new date\n [UPDATED_AT_ATTRIBUTE]: {\n type: 'datetime',\n },\n });\n\n if (contentTypesUtils.hasDraftAndPublish(schema as any)) {\n schema.attributes[PUBLISHED_AT_ATTRIBUTE] = {\n type: 'datetime',\n configurable: false,\n writable: true,\n visible: false,\n };\n }\n\n const isPrivate = !_.get(schema, 'options.populateCreatorFields', false);\n\n schema.attributes[CREATED_BY_ATTRIBUTE] = {\n type: 'relation',\n relation: 'oneToOne',\n target: 'admin::user',\n configurable: false,\n writable: false,\n visible: false,\n useJoinTable: false,\n private: isPrivate,\n };\n\n schema.attributes[UPDATED_BY_ATTRIBUTE] = {\n type: 'relation',\n relation: 'oneToOne',\n target: 'admin::user',\n configurable: false,\n writable: false,\n visible: false,\n useJoinTable: false,\n private: isPrivate,\n };\n\n Object.assign(schema, { actions, lifecycles });\n\n return schema;\n};\n\nconst getGlobalId = (model: any, modelName: string, prefix?: string) => {\n const globalId = prefix ? `${prefix}-${modelName}` : modelName;\n\n return model.globalId || _.upperFirst(_.camelCase(globalId));\n};\n\nconst pickSchema = (model: Schema.ContentType) => {\n const schema = _.cloneDeep(\n _.pick(model, [\n 'connection',\n 'collectionName',\n 'info',\n 'options',\n 'pluginOptions',\n 'attributes',\n ])\n );\n\n schema.kind = model.kind || 'collectionType';\n return schema;\n};\n\nexport { createContentType };\n"],"names":["contentTypesUtils"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validator.js","sources":["../../../../src/core/domain/content-type/validator.ts"],"sourcesContent":["import _ from 'lodash';\nimport { yup, toRegressedEnumValue } from '@strapi/utils';\nimport type { Schema } from '@strapi/types';\n\nconst LIFECYCLES = [\n 'beforeCreate',\n 'afterCreate',\n 'beforeFindOne',\n 'afterFindOne',\n 'beforeFindMany',\n 'afterFindMany',\n 'beforeCount',\n 'afterCount',\n 'beforeCreateMany',\n 'afterCreateMany',\n 'beforeUpdate',\n 'afterUpdate',\n 'beforeUpdateMany',\n 'afterUpdateMany',\n 'beforeDelete',\n 'afterDelete',\n 'beforeDeleteMany',\n 'afterDeleteMany',\n] as const;\n\n/**\n * For enumerations the least common denomiator is GraphQL, where\n * values needs to match the secure name regex:\n * GraphQL Spec https://spec.graphql.org/June2018/#sec-Names\n *\n * Therefore we need to make sure our users only use values, which\n * can be returned by GraphQL, by checking the regressed values\n * agains the GraphQL regex.\n *\n * TODO V5: check if we can avoid this coupling by moving this logic\n * into the GraphQL plugin.\n */\nconst GRAPHQL_ENUM_REGEX = /^[_A-Za-z][_0-9A-Za-z]*$/;\n\nconst lifecyclesShape = _.mapValues(_.keyBy(LIFECYCLES), () => yup.mixed().nullable().isFunction());\n\nconst contentTypeSchemaValidator = yup.object().shape({\n schema: yup.object().shape({\n info: yup\n .object()\n .shape({\n displayName: yup.string().required(),\n singularName: yup.string().isKebabCase().required(),\n pluralName: yup.string().isKebabCase().required(),\n })\n .required(),\n attributes: yup.object().test({\n name: 'valuesCollide',\n message: 'Some values collide when normalized',\n test(attributes: Schema.ContentType['attributes']) {\n for (const attrName of Object.keys(attributes)) {\n const attr = attributes[attrName];\n if (attr.type === 'enumeration') {\n const regressedValues = attr.enum.map(toRegressedEnumValue);\n\n // should match the GraphQL regex\n if (!regressedValues.every((value: string) => GRAPHQL_ENUM_REGEX.test(value))) {\n const message = `Invalid enumeration value. Values should have at least one alphabetical character preceding the first occurence of a number. Update your enumeration '${attrName}'.`;\n\n return this.createError({ message });\n }\n\n // should not contain empty values\n if (regressedValues.some((value: string) => value === '')) {\n return this.createError({\n message: `At least one value of the enumeration '${attrName}' appears to be empty. Only alphanumerical characters are taken into account.`,\n });\n }\n\n // should not collide\n const duplicates = _.uniq(\n regressedValues.filter(\n (value: string, index: number, values: string[]) => values.indexOf(value) !== index\n )\n );\n\n if (duplicates.length) {\n const message = `Some enumeration values of the field '${attrName}' collide when normalized: ${duplicates.join(\n ', '\n )}. Please modify your enumeration.`;\n\n return this.createError({ message });\n }\n }\n }\n\n return true;\n },\n }),\n }),\n actions: yup.object().onlyContainsFunctions(),\n lifecycles: yup.object().shape(lifecyclesShape).noUnknown(),\n});\n\nconst validateContentTypeDefinition = (data: unknown) => {\n return contentTypeSchemaValidator.validateSync(data, { strict: true, abortEarly: false });\n};\n\nexport { validateContentTypeDefinition };\n"],"names":["_","yup","toRegressedEnumValue"],"mappings":";;;;;;AAIA,MAAM,aAAa;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAcA,MAAM,qBAAqB;AAE3B,MAAM,kBAAkBA,WAAAA,QAAE,UAAUA,
|
|
1
|
+
{"version":3,"file":"validator.js","sources":["../../../../src/core/domain/content-type/validator.ts"],"sourcesContent":["import _ from 'lodash';\nimport { yup, toRegressedEnumValue } from '@strapi/utils';\nimport type { Schema } from '@strapi/types';\n\nconst LIFECYCLES = [\n 'beforeCreate',\n 'afterCreate',\n 'beforeFindOne',\n 'afterFindOne',\n 'beforeFindMany',\n 'afterFindMany',\n 'beforeCount',\n 'afterCount',\n 'beforeCreateMany',\n 'afterCreateMany',\n 'beforeUpdate',\n 'afterUpdate',\n 'beforeUpdateMany',\n 'afterUpdateMany',\n 'beforeDelete',\n 'afterDelete',\n 'beforeDeleteMany',\n 'afterDeleteMany',\n] as const;\n\n/**\n * For enumerations the least common denomiator is GraphQL, where\n * values needs to match the secure name regex:\n * GraphQL Spec https://spec.graphql.org/June2018/#sec-Names\n *\n * Therefore we need to make sure our users only use values, which\n * can be returned by GraphQL, by checking the regressed values\n * agains the GraphQL regex.\n *\n * TODO V5: check if we can avoid this coupling by moving this logic\n * into the GraphQL plugin.\n */\nconst GRAPHQL_ENUM_REGEX = /^[_A-Za-z][_0-9A-Za-z]*$/;\n\nconst lifecyclesShape = _.mapValues(_.keyBy(LIFECYCLES), () => yup.mixed().nullable().isFunction());\n\nconst contentTypeSchemaValidator = yup.object().shape({\n schema: yup.object().shape({\n info: yup\n .object()\n .shape({\n displayName: yup.string().required(),\n singularName: yup.string().isKebabCase().required(),\n pluralName: yup.string().isKebabCase().required(),\n })\n .required(),\n attributes: yup.object().test({\n name: 'valuesCollide',\n message: 'Some values collide when normalized',\n test(attributes: Schema.ContentType['attributes']) {\n for (const attrName of Object.keys(attributes)) {\n const attr = attributes[attrName];\n if (attr.type === 'enumeration') {\n const regressedValues = attr.enum.map(toRegressedEnumValue);\n\n // should match the GraphQL regex\n if (!regressedValues.every((value: string) => GRAPHQL_ENUM_REGEX.test(value))) {\n const message = `Invalid enumeration value. Values should have at least one alphabetical character preceding the first occurence of a number. Update your enumeration '${attrName}'.`;\n\n return this.createError({ message });\n }\n\n // should not contain empty values\n if (regressedValues.some((value: string) => value === '')) {\n return this.createError({\n message: `At least one value of the enumeration '${attrName}' appears to be empty. Only alphanumerical characters are taken into account.`,\n });\n }\n\n // should not collide\n const duplicates = _.uniq(\n regressedValues.filter(\n (value: string, index: number, values: string[]) => values.indexOf(value) !== index\n )\n );\n\n if (duplicates.length) {\n const message = `Some enumeration values of the field '${attrName}' collide when normalized: ${duplicates.join(\n ', '\n )}. Please modify your enumeration.`;\n\n return this.createError({ message });\n }\n }\n }\n\n return true;\n },\n }),\n }),\n actions: yup.object().onlyContainsFunctions(),\n lifecycles: yup.object().shape(lifecyclesShape).noUnknown(),\n});\n\nconst validateContentTypeDefinition = (data: unknown) => {\n return contentTypeSchemaValidator.validateSync(data, { strict: true, abortEarly: false });\n};\n\nexport { validateContentTypeDefinition };\n"],"names":["_","yup","toRegressedEnumValue"],"mappings":";;;;;;AAIA,MAAM,aAAa;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAcA,MAAM,qBAAqB;AAE3B,MAAM,kBAAkBA,WAAAA,QAAE,UAAUA,WAAAA,QAAE,MAAM,UAAU,GAAG,MAAMC,YAAAA,IAAI,MAAA,EAAQ,SAAA,EAAW,YAAY;AAElG,MAAM,6BAA6BA,YAAAA,IAAI,OAAA,EAAS,MAAM;AAAA,EACpD,QAAQA,YAAAA,IAAI,OAAA,EAAS,MAAM;AAAA,IACzB,MAAMA,YAAAA,IACH,OAAA,EACA,MAAM;AAAA,MACL,aAAaA,YAAAA,IAAI,OAAA,EAAS,SAAA;AAAA,MAC1B,cAAcA,YAAAA,IAAI,OAAA,EAAS,YAAA,EAAc,SAAA;AAAA,MACzC,YAAYA,YAAAA,IAAI,SAAS,YAAA,EAAc,SAAA;AAAA,IAAS,CACjD,EACA,SAAA;AAAA,IACH,YAAYA,YAAAA,IAAI,OAAA,EAAS,KAAK;AAAA,MAC5B,MAAM;AAAA,MACN,SAAS;AAAA,MACT,KAAK,YAA8C;AACjD,mBAAW,YAAY,OAAO,KAAK,UAAU,GAAG;AAC9C,gBAAM,OAAO,WAAW,QAAQ;AAChC,cAAI,KAAK,SAAS,eAAe;AAC/B,kBAAM,kBAAkB,KAAK,KAAK,IAAIC,YAAAA,oBAAoB;AAG1D,gBAAI,CAAC,gBAAgB,MAAM,CAAC,UAAkB,mBAAmB,KAAK,KAAK,CAAC,GAAG;AAC7E,oBAAM,UAAU,yJAAyJ,QAAQ;AAEjL,qBAAO,KAAK,YAAY,EAAE,SAAS;AAAA,YACrC;AAGA,gBAAI,gBAAgB,KAAK,CAAC,UAAkB,UAAU,EAAE,GAAG;AACzD,qBAAO,KAAK,YAAY;AAAA,gBACtB,SAAS,0CAA0C,QAAQ;AAAA,cAAA,CAC5D;AAAA,YACH;AAGA,kBAAM,aAAaF,WAAAA,QAAE;AAAA,cACnB,gBAAgB;AAAA,gBACd,CAAC,OAAe,OAAe,WAAqB,OAAO,QAAQ,KAAK,MAAM;AAAA,cAAA;AAAA,YAChF;AAGF,gBAAI,WAAW,QAAQ;AACrB,oBAAM,UAAU,yCAAyC,QAAQ,8BAA8B,WAAW;AAAA,gBACxG;AAAA,cAAA,CACD;AAED,qBAAO,KAAK,YAAY,EAAE,SAAS;AAAA,YACrC;AAAA,UACF;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAAA,IAAA,CACD;AAAA,EAAA,CACF;AAAA,EACD,SAASC,YAAAA,IAAI,OAAA,EAAS,sBAAA;AAAA,EACtB,YAAYA,YAAAA,IAAI,OAAA,EAAS,MAAM,eAAe,EAAE,UAAA;AAClD,CAAC;AAED,MAAM,gCAAgC,CAAC,SAAkB;AACvD,SAAO,2BAA2B,aAAa,MAAM,EAAE,QAAQ,MAAM,YAAY,OAAO;AAC1F;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validator.mjs","sources":["../../../../src/core/domain/content-type/validator.ts"],"sourcesContent":["import _ from 'lodash';\nimport { yup, toRegressedEnumValue } from '@strapi/utils';\nimport type { Schema } from '@strapi/types';\n\nconst LIFECYCLES = [\n 'beforeCreate',\n 'afterCreate',\n 'beforeFindOne',\n 'afterFindOne',\n 'beforeFindMany',\n 'afterFindMany',\n 'beforeCount',\n 'afterCount',\n 'beforeCreateMany',\n 'afterCreateMany',\n 'beforeUpdate',\n 'afterUpdate',\n 'beforeUpdateMany',\n 'afterUpdateMany',\n 'beforeDelete',\n 'afterDelete',\n 'beforeDeleteMany',\n 'afterDeleteMany',\n] as const;\n\n/**\n * For enumerations the least common denomiator is GraphQL, where\n * values needs to match the secure name regex:\n * GraphQL Spec https://spec.graphql.org/June2018/#sec-Names\n *\n * Therefore we need to make sure our users only use values, which\n * can be returned by GraphQL, by checking the regressed values\n * agains the GraphQL regex.\n *\n * TODO V5: check if we can avoid this coupling by moving this logic\n * into the GraphQL plugin.\n */\nconst GRAPHQL_ENUM_REGEX = /^[_A-Za-z][_0-9A-Za-z]*$/;\n\nconst lifecyclesShape = _.mapValues(_.keyBy(LIFECYCLES), () => yup.mixed().nullable().isFunction());\n\nconst contentTypeSchemaValidator = yup.object().shape({\n schema: yup.object().shape({\n info: yup\n .object()\n .shape({\n displayName: yup.string().required(),\n singularName: yup.string().isKebabCase().required(),\n pluralName: yup.string().isKebabCase().required(),\n })\n .required(),\n attributes: yup.object().test({\n name: 'valuesCollide',\n message: 'Some values collide when normalized',\n test(attributes: Schema.ContentType['attributes']) {\n for (const attrName of Object.keys(attributes)) {\n const attr = attributes[attrName];\n if (attr.type === 'enumeration') {\n const regressedValues = attr.enum.map(toRegressedEnumValue);\n\n // should match the GraphQL regex\n if (!regressedValues.every((value: string) => GRAPHQL_ENUM_REGEX.test(value))) {\n const message = `Invalid enumeration value. Values should have at least one alphabetical character preceding the first occurence of a number. Update your enumeration '${attrName}'.`;\n\n return this.createError({ message });\n }\n\n // should not contain empty values\n if (regressedValues.some((value: string) => value === '')) {\n return this.createError({\n message: `At least one value of the enumeration '${attrName}' appears to be empty. Only alphanumerical characters are taken into account.`,\n });\n }\n\n // should not collide\n const duplicates = _.uniq(\n regressedValues.filter(\n (value: string, index: number, values: string[]) => values.indexOf(value) !== index\n )\n );\n\n if (duplicates.length) {\n const message = `Some enumeration values of the field '${attrName}' collide when normalized: ${duplicates.join(\n ', '\n )}. Please modify your enumeration.`;\n\n return this.createError({ message });\n }\n }\n }\n\n return true;\n },\n }),\n }),\n actions: yup.object().onlyContainsFunctions(),\n lifecycles: yup.object().shape(lifecyclesShape).noUnknown(),\n});\n\nconst validateContentTypeDefinition = (data: unknown) => {\n return contentTypeSchemaValidator.validateSync(data, { strict: true, abortEarly: false });\n};\n\nexport { validateContentTypeDefinition };\n"],"names":[],"mappings":";;AAIA,MAAM,aAAa;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAcA,MAAM,qBAAqB;AAE3B,MAAM,kBAAkB,EAAE,UAAU,EAAE,MAAM,UAAU,GAAG,MAAM,IAAI,
|
|
1
|
+
{"version":3,"file":"validator.mjs","sources":["../../../../src/core/domain/content-type/validator.ts"],"sourcesContent":["import _ from 'lodash';\nimport { yup, toRegressedEnumValue } from '@strapi/utils';\nimport type { Schema } from '@strapi/types';\n\nconst LIFECYCLES = [\n 'beforeCreate',\n 'afterCreate',\n 'beforeFindOne',\n 'afterFindOne',\n 'beforeFindMany',\n 'afterFindMany',\n 'beforeCount',\n 'afterCount',\n 'beforeCreateMany',\n 'afterCreateMany',\n 'beforeUpdate',\n 'afterUpdate',\n 'beforeUpdateMany',\n 'afterUpdateMany',\n 'beforeDelete',\n 'afterDelete',\n 'beforeDeleteMany',\n 'afterDeleteMany',\n] as const;\n\n/**\n * For enumerations the least common denomiator is GraphQL, where\n * values needs to match the secure name regex:\n * GraphQL Spec https://spec.graphql.org/June2018/#sec-Names\n *\n * Therefore we need to make sure our users only use values, which\n * can be returned by GraphQL, by checking the regressed values\n * agains the GraphQL regex.\n *\n * TODO V5: check if we can avoid this coupling by moving this logic\n * into the GraphQL plugin.\n */\nconst GRAPHQL_ENUM_REGEX = /^[_A-Za-z][_0-9A-Za-z]*$/;\n\nconst lifecyclesShape = _.mapValues(_.keyBy(LIFECYCLES), () => yup.mixed().nullable().isFunction());\n\nconst contentTypeSchemaValidator = yup.object().shape({\n schema: yup.object().shape({\n info: yup\n .object()\n .shape({\n displayName: yup.string().required(),\n singularName: yup.string().isKebabCase().required(),\n pluralName: yup.string().isKebabCase().required(),\n })\n .required(),\n attributes: yup.object().test({\n name: 'valuesCollide',\n message: 'Some values collide when normalized',\n test(attributes: Schema.ContentType['attributes']) {\n for (const attrName of Object.keys(attributes)) {\n const attr = attributes[attrName];\n if (attr.type === 'enumeration') {\n const regressedValues = attr.enum.map(toRegressedEnumValue);\n\n // should match the GraphQL regex\n if (!regressedValues.every((value: string) => GRAPHQL_ENUM_REGEX.test(value))) {\n const message = `Invalid enumeration value. Values should have at least one alphabetical character preceding the first occurence of a number. Update your enumeration '${attrName}'.`;\n\n return this.createError({ message });\n }\n\n // should not contain empty values\n if (regressedValues.some((value: string) => value === '')) {\n return this.createError({\n message: `At least one value of the enumeration '${attrName}' appears to be empty. Only alphanumerical characters are taken into account.`,\n });\n }\n\n // should not collide\n const duplicates = _.uniq(\n regressedValues.filter(\n (value: string, index: number, values: string[]) => values.indexOf(value) !== index\n )\n );\n\n if (duplicates.length) {\n const message = `Some enumeration values of the field '${attrName}' collide when normalized: ${duplicates.join(\n ', '\n )}. Please modify your enumeration.`;\n\n return this.createError({ message });\n }\n }\n }\n\n return true;\n },\n }),\n }),\n actions: yup.object().onlyContainsFunctions(),\n lifecycles: yup.object().shape(lifecyclesShape).noUnknown(),\n});\n\nconst validateContentTypeDefinition = (data: unknown) => {\n return contentTypeSchemaValidator.validateSync(data, { strict: true, abortEarly: false });\n};\n\nexport { validateContentTypeDefinition };\n"],"names":[],"mappings":";;AAIA,MAAM,aAAa;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAcA,MAAM,qBAAqB;AAE3B,MAAM,kBAAkB,EAAE,UAAU,EAAE,MAAM,UAAU,GAAG,MAAM,IAAI,MAAA,EAAQ,SAAA,EAAW,YAAY;AAElG,MAAM,6BAA6B,IAAI,OAAA,EAAS,MAAM;AAAA,EACpD,QAAQ,IAAI,OAAA,EAAS,MAAM;AAAA,IACzB,MAAM,IACH,OAAA,EACA,MAAM;AAAA,MACL,aAAa,IAAI,OAAA,EAAS,SAAA;AAAA,MAC1B,cAAc,IAAI,OAAA,EAAS,YAAA,EAAc,SAAA;AAAA,MACzC,YAAY,IAAI,SAAS,YAAA,EAAc,SAAA;AAAA,IAAS,CACjD,EACA,SAAA;AAAA,IACH,YAAY,IAAI,OAAA,EAAS,KAAK;AAAA,MAC5B,MAAM;AAAA,MACN,SAAS;AAAA,MACT,KAAK,YAA8C;AACjD,mBAAW,YAAY,OAAO,KAAK,UAAU,GAAG;AAC9C,gBAAM,OAAO,WAAW,QAAQ;AAChC,cAAI,KAAK,SAAS,eAAe;AAC/B,kBAAM,kBAAkB,KAAK,KAAK,IAAI,oBAAoB;AAG1D,gBAAI,CAAC,gBAAgB,MAAM,CAAC,UAAkB,mBAAmB,KAAK,KAAK,CAAC,GAAG;AAC7E,oBAAM,UAAU,yJAAyJ,QAAQ;AAEjL,qBAAO,KAAK,YAAY,EAAE,SAAS;AAAA,YACrC;AAGA,gBAAI,gBAAgB,KAAK,CAAC,UAAkB,UAAU,EAAE,GAAG;AACzD,qBAAO,KAAK,YAAY;AAAA,gBACtB,SAAS,0CAA0C,QAAQ;AAAA,cAAA,CAC5D;AAAA,YACH;AAGA,kBAAM,aAAa,EAAE;AAAA,cACnB,gBAAgB;AAAA,gBACd,CAAC,OAAe,OAAe,WAAqB,OAAO,QAAQ,KAAK,MAAM;AAAA,cAAA;AAAA,YAChF;AAGF,gBAAI,WAAW,QAAQ;AACrB,oBAAM,UAAU,yCAAyC,QAAQ,8BAA8B,WAAW;AAAA,gBACxG;AAAA,cAAA,CACD;AAED,qBAAO,KAAK,YAAY,EAAE,SAAS;AAAA,YACrC;AAAA,UACF;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAAA,IAAA,CACD;AAAA,EAAA,CACF;AAAA,EACD,SAAS,IAAI,OAAA,EAAS,sBAAA;AAAA,EACtB,YAAY,IAAI,OAAA,EAAS,MAAM,eAAe,EAAE,UAAA;AAClD,CAAC;AAED,MAAM,gCAAgC,CAAC,SAAkB;AACvD,SAAO,2BAA2B,aAAa,MAAM,EAAE,QAAQ,MAAM,YAAY,OAAO;AAC1F;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/core/domain/module/index.ts"],"sourcesContent":["import _ from 'lodash';\nimport { yup } from '@strapi/utils';\nimport type { Strapi, Common, Schema } from '@strapi/types';\n\nimport { removeNamespace } from '../../utils';\nimport { validateModule } from './validation';\n\ninterface LifecyclesState {\n bootstrap?: boolean;\n register?: boolean;\n destroy?: boolean;\n}\n\nexport interface RawModule {\n config?: Record<string, unknown>;\n routes?: Common.Module['routes'];\n controllers?: Common.Module['controllers'];\n services?: Common.Module['services'];\n contentTypes?: Common.Module['contentTypes'];\n policies?: Common.Module['policies'];\n middlewares?: Common.Module['middlewares'];\n bootstrap?: (params: { strapi: Strapi }) => Promise<void>;\n register?: (params: { strapi: Strapi }) => Promise<void>;\n destroy?: (params: { strapi: Strapi }) => Promise<void>;\n}\n\nexport interface Module {\n bootstrap: () => Promise<void>;\n register: () => Promise<void>;\n destroy: () => Promise<void>;\n load: () => void;\n routes: Common.Module['routes'];\n config: (path: string, defaultValue?: unknown) => unknown;\n contentType: (ctName: Common.UID.ContentType) => Schema.ContentType;\n contentTypes: Record<string, Schema.ContentType>;\n service: (serviceName: Common.UID.Service) => Common.Service;\n services: Record<string, Common.Service>;\n policy: (policyName: Common.UID.Policy) => Common.Policy;\n policies: Record<string, Common.Policy>;\n middleware: (middlewareName: Common.UID.Middleware) => Common.Middleware;\n middlewares: Record<string, Common.Middleware>;\n controller: (controllerName: Common.UID.Controller) => Common.Controller;\n controllers: Record<string, Common.Controller>;\n}\n\nconst uidToPath = (uid: string) => uid.replace('::', '.');\n\n// Removes the namespace from a map with keys prefixed with a namespace\nconst removeNamespacedKeys = <T extends Record<string, unknown>>(map: T, namespace: string) => {\n return _.mapKeys(map, (value, key) => removeNamespace(key, namespace));\n};\n\nconst defaultModule = {\n config: {},\n routes: [],\n controllers: {},\n services: {},\n contentTypes: {},\n policies: {},\n middlewares: {},\n};\n\nexport const createModule = (namespace: string, rawModule: RawModule, strapi: Strapi): Module => {\n _.defaults(rawModule, defaultModule);\n\n try {\n validateModule(rawModule);\n } catch (e) {\n if (e instanceof yup.ValidationError) {\n throw new Error(`strapi-server.js is invalid for '${namespace}'.\\n${e.errors.join('\\n')}`);\n }\n }\n\n const called: LifecyclesState = {};\n return {\n async bootstrap() {\n if (called.bootstrap) {\n throw new Error(`Bootstrap for ${namespace} has already been called`);\n }\n called.bootstrap = true;\n await (rawModule.bootstrap && rawModule.bootstrap({ strapi }));\n },\n async register() {\n if (called.register) {\n throw new Error(`Register for ${namespace} has already been called`);\n }\n called.register = true;\n await (rawModule.register && rawModule.register({ strapi }));\n },\n async destroy() {\n if (called.destroy) {\n throw new Error(`Destroy for ${namespace} has already been called`);\n }\n called.destroy = true;\n await (rawModule.destroy && rawModule.destroy({ strapi }));\n },\n load() {\n strapi.container.get('content-types').add(namespace, rawModule.contentTypes);\n strapi.container.get('services').add(namespace, rawModule.services);\n strapi.container.get('policies').add(namespace, rawModule.policies);\n strapi.container.get('middlewares').add(namespace, rawModule.middlewares);\n strapi.container.get('controllers').add(namespace, rawModule.controllers);\n strapi.container.get('config').set(uidToPath(namespace), rawModule.config);\n },\n get routes() {\n return rawModule.routes ?? {};\n },\n config(path: string, defaultValue: unknown) {\n return strapi.container.get('config').get(`${uidToPath(namespace)}.${path}`, defaultValue);\n },\n contentType(ctName: Common.UID.ContentType) {\n return strapi.container.get('content-types').get(`${namespace}.${ctName}`);\n },\n get contentTypes() {\n const contentTypes = strapi.container.get('content-types').getAll(namespace);\n return removeNamespacedKeys(contentTypes, namespace);\n },\n service(serviceName: Common.UID.Service) {\n return strapi.container.get('services').get(`${namespace}.${serviceName}`);\n },\n get services() {\n const services = strapi.container.get('services').getAll(namespace);\n return removeNamespacedKeys(services, namespace);\n },\n policy(policyName: Common.UID.Policy) {\n return strapi.container.get('policies').get(`${namespace}.${policyName}`);\n },\n get policies() {\n const policies = strapi.container.get('policies').getAll(namespace);\n return removeNamespacedKeys(policies, namespace);\n },\n middleware(middlewareName: Common.UID.Middleware) {\n return strapi.container.get('middlewares').get(`${namespace}.${middlewareName}`);\n },\n get middlewares() {\n const middlewares = strapi.container.get('middlewares').getAll(namespace);\n return removeNamespacedKeys(middlewares, namespace);\n },\n controller(controllerName: Common.UID.Controller) {\n return strapi.container.get('controllers').get(`${namespace}.${controllerName}`);\n },\n get controllers() {\n const controllers = strapi.container.get('controllers').getAll(namespace);\n return removeNamespacedKeys(controllers, namespace);\n },\n };\n};\n"],"names":["_","removeNamespace","validateModule","yup"],"mappings":";;;;;;;;AA6CA,MAAM,YAAY,CAAC,QAAgB,IAAI,QAAQ,MAAM,GAAG;AAGxD,MAAM,uBAAuB,CAAoC,KAAQ,cAAsB;
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/core/domain/module/index.ts"],"sourcesContent":["import _ from 'lodash';\nimport { yup } from '@strapi/utils';\nimport type { Strapi, Common, Schema } from '@strapi/types';\n\nimport { removeNamespace } from '../../utils';\nimport { validateModule } from './validation';\n\ninterface LifecyclesState {\n bootstrap?: boolean;\n register?: boolean;\n destroy?: boolean;\n}\n\nexport interface RawModule {\n config?: Record<string, unknown>;\n routes?: Common.Module['routes'];\n controllers?: Common.Module['controllers'];\n services?: Common.Module['services'];\n contentTypes?: Common.Module['contentTypes'];\n policies?: Common.Module['policies'];\n middlewares?: Common.Module['middlewares'];\n bootstrap?: (params: { strapi: Strapi }) => Promise<void>;\n register?: (params: { strapi: Strapi }) => Promise<void>;\n destroy?: (params: { strapi: Strapi }) => Promise<void>;\n}\n\nexport interface Module {\n bootstrap: () => Promise<void>;\n register: () => Promise<void>;\n destroy: () => Promise<void>;\n load: () => void;\n routes: Common.Module['routes'];\n config: (path: string, defaultValue?: unknown) => unknown;\n contentType: (ctName: Common.UID.ContentType) => Schema.ContentType;\n contentTypes: Record<string, Schema.ContentType>;\n service: (serviceName: Common.UID.Service) => Common.Service;\n services: Record<string, Common.Service>;\n policy: (policyName: Common.UID.Policy) => Common.Policy;\n policies: Record<string, Common.Policy>;\n middleware: (middlewareName: Common.UID.Middleware) => Common.Middleware;\n middlewares: Record<string, Common.Middleware>;\n controller: (controllerName: Common.UID.Controller) => Common.Controller;\n controllers: Record<string, Common.Controller>;\n}\n\nconst uidToPath = (uid: string) => uid.replace('::', '.');\n\n// Removes the namespace from a map with keys prefixed with a namespace\nconst removeNamespacedKeys = <T extends Record<string, unknown>>(map: T, namespace: string) => {\n return _.mapKeys(map, (value, key) => removeNamespace(key, namespace));\n};\n\nconst defaultModule = {\n config: {},\n routes: [],\n controllers: {},\n services: {},\n contentTypes: {},\n policies: {},\n middlewares: {},\n};\n\nexport const createModule = (namespace: string, rawModule: RawModule, strapi: Strapi): Module => {\n _.defaults(rawModule, defaultModule);\n\n try {\n validateModule(rawModule);\n } catch (e) {\n if (e instanceof yup.ValidationError) {\n throw new Error(`strapi-server.js is invalid for '${namespace}'.\\n${e.errors.join('\\n')}`);\n }\n }\n\n const called: LifecyclesState = {};\n return {\n async bootstrap() {\n if (called.bootstrap) {\n throw new Error(`Bootstrap for ${namespace} has already been called`);\n }\n called.bootstrap = true;\n await (rawModule.bootstrap && rawModule.bootstrap({ strapi }));\n },\n async register() {\n if (called.register) {\n throw new Error(`Register for ${namespace} has already been called`);\n }\n called.register = true;\n await (rawModule.register && rawModule.register({ strapi }));\n },\n async destroy() {\n if (called.destroy) {\n throw new Error(`Destroy for ${namespace} has already been called`);\n }\n called.destroy = true;\n await (rawModule.destroy && rawModule.destroy({ strapi }));\n },\n load() {\n strapi.container.get('content-types').add(namespace, rawModule.contentTypes);\n strapi.container.get('services').add(namespace, rawModule.services);\n strapi.container.get('policies').add(namespace, rawModule.policies);\n strapi.container.get('middlewares').add(namespace, rawModule.middlewares);\n strapi.container.get('controllers').add(namespace, rawModule.controllers);\n strapi.container.get('config').set(uidToPath(namespace), rawModule.config);\n },\n get routes() {\n return rawModule.routes ?? {};\n },\n config(path: string, defaultValue: unknown) {\n return strapi.container.get('config').get(`${uidToPath(namespace)}.${path}`, defaultValue);\n },\n contentType(ctName: Common.UID.ContentType) {\n return strapi.container.get('content-types').get(`${namespace}.${ctName}`);\n },\n get contentTypes() {\n const contentTypes = strapi.container.get('content-types').getAll(namespace);\n return removeNamespacedKeys(contentTypes, namespace);\n },\n service(serviceName: Common.UID.Service) {\n return strapi.container.get('services').get(`${namespace}.${serviceName}`);\n },\n get services() {\n const services = strapi.container.get('services').getAll(namespace);\n return removeNamespacedKeys(services, namespace);\n },\n policy(policyName: Common.UID.Policy) {\n return strapi.container.get('policies').get(`${namespace}.${policyName}`);\n },\n get policies() {\n const policies = strapi.container.get('policies').getAll(namespace);\n return removeNamespacedKeys(policies, namespace);\n },\n middleware(middlewareName: Common.UID.Middleware) {\n return strapi.container.get('middlewares').get(`${namespace}.${middlewareName}`);\n },\n get middlewares() {\n const middlewares = strapi.container.get('middlewares').getAll(namespace);\n return removeNamespacedKeys(middlewares, namespace);\n },\n controller(controllerName: Common.UID.Controller) {\n return strapi.container.get('controllers').get(`${namespace}.${controllerName}`);\n },\n get controllers() {\n const controllers = strapi.container.get('controllers').getAll(namespace);\n return removeNamespacedKeys(controllers, namespace);\n },\n };\n};\n"],"names":["_","removeNamespace","validateModule","yup"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../../src/core/domain/module/index.ts"],"sourcesContent":["import _ from 'lodash';\nimport { yup } from '@strapi/utils';\nimport type { Strapi, Common, Schema } from '@strapi/types';\n\nimport { removeNamespace } from '../../utils';\nimport { validateModule } from './validation';\n\ninterface LifecyclesState {\n bootstrap?: boolean;\n register?: boolean;\n destroy?: boolean;\n}\n\nexport interface RawModule {\n config?: Record<string, unknown>;\n routes?: Common.Module['routes'];\n controllers?: Common.Module['controllers'];\n services?: Common.Module['services'];\n contentTypes?: Common.Module['contentTypes'];\n policies?: Common.Module['policies'];\n middlewares?: Common.Module['middlewares'];\n bootstrap?: (params: { strapi: Strapi }) => Promise<void>;\n register?: (params: { strapi: Strapi }) => Promise<void>;\n destroy?: (params: { strapi: Strapi }) => Promise<void>;\n}\n\nexport interface Module {\n bootstrap: () => Promise<void>;\n register: () => Promise<void>;\n destroy: () => Promise<void>;\n load: () => void;\n routes: Common.Module['routes'];\n config: (path: string, defaultValue?: unknown) => unknown;\n contentType: (ctName: Common.UID.ContentType) => Schema.ContentType;\n contentTypes: Record<string, Schema.ContentType>;\n service: (serviceName: Common.UID.Service) => Common.Service;\n services: Record<string, Common.Service>;\n policy: (policyName: Common.UID.Policy) => Common.Policy;\n policies: Record<string, Common.Policy>;\n middleware: (middlewareName: Common.UID.Middleware) => Common.Middleware;\n middlewares: Record<string, Common.Middleware>;\n controller: (controllerName: Common.UID.Controller) => Common.Controller;\n controllers: Record<string, Common.Controller>;\n}\n\nconst uidToPath = (uid: string) => uid.replace('::', '.');\n\n// Removes the namespace from a map with keys prefixed with a namespace\nconst removeNamespacedKeys = <T extends Record<string, unknown>>(map: T, namespace: string) => {\n return _.mapKeys(map, (value, key) => removeNamespace(key, namespace));\n};\n\nconst defaultModule = {\n config: {},\n routes: [],\n controllers: {},\n services: {},\n contentTypes: {},\n policies: {},\n middlewares: {},\n};\n\nexport const createModule = (namespace: string, rawModule: RawModule, strapi: Strapi): Module => {\n _.defaults(rawModule, defaultModule);\n\n try {\n validateModule(rawModule);\n } catch (e) {\n if (e instanceof yup.ValidationError) {\n throw new Error(`strapi-server.js is invalid for '${namespace}'.\\n${e.errors.join('\\n')}`);\n }\n }\n\n const called: LifecyclesState = {};\n return {\n async bootstrap() {\n if (called.bootstrap) {\n throw new Error(`Bootstrap for ${namespace} has already been called`);\n }\n called.bootstrap = true;\n await (rawModule.bootstrap && rawModule.bootstrap({ strapi }));\n },\n async register() {\n if (called.register) {\n throw new Error(`Register for ${namespace} has already been called`);\n }\n called.register = true;\n await (rawModule.register && rawModule.register({ strapi }));\n },\n async destroy() {\n if (called.destroy) {\n throw new Error(`Destroy for ${namespace} has already been called`);\n }\n called.destroy = true;\n await (rawModule.destroy && rawModule.destroy({ strapi }));\n },\n load() {\n strapi.container.get('content-types').add(namespace, rawModule.contentTypes);\n strapi.container.get('services').add(namespace, rawModule.services);\n strapi.container.get('policies').add(namespace, rawModule.policies);\n strapi.container.get('middlewares').add(namespace, rawModule.middlewares);\n strapi.container.get('controllers').add(namespace, rawModule.controllers);\n strapi.container.get('config').set(uidToPath(namespace), rawModule.config);\n },\n get routes() {\n return rawModule.routes ?? {};\n },\n config(path: string, defaultValue: unknown) {\n return strapi.container.get('config').get(`${uidToPath(namespace)}.${path}`, defaultValue);\n },\n contentType(ctName: Common.UID.ContentType) {\n return strapi.container.get('content-types').get(`${namespace}.${ctName}`);\n },\n get contentTypes() {\n const contentTypes = strapi.container.get('content-types').getAll(namespace);\n return removeNamespacedKeys(contentTypes, namespace);\n },\n service(serviceName: Common.UID.Service) {\n return strapi.container.get('services').get(`${namespace}.${serviceName}`);\n },\n get services() {\n const services = strapi.container.get('services').getAll(namespace);\n return removeNamespacedKeys(services, namespace);\n },\n policy(policyName: Common.UID.Policy) {\n return strapi.container.get('policies').get(`${namespace}.${policyName}`);\n },\n get policies() {\n const policies = strapi.container.get('policies').getAll(namespace);\n return removeNamespacedKeys(policies, namespace);\n },\n middleware(middlewareName: Common.UID.Middleware) {\n return strapi.container.get('middlewares').get(`${namespace}.${middlewareName}`);\n },\n get middlewares() {\n const middlewares = strapi.container.get('middlewares').getAll(namespace);\n return removeNamespacedKeys(middlewares, namespace);\n },\n controller(controllerName: Common.UID.Controller) {\n return strapi.container.get('controllers').get(`${namespace}.${controllerName}`);\n },\n get controllers() {\n const controllers = strapi.container.get('controllers').getAll(namespace);\n return removeNamespacedKeys(controllers, namespace);\n },\n };\n};\n"],"names":[],"mappings":";;;;AA6CA,MAAM,YAAY,CAAC,QAAgB,IAAI,QAAQ,MAAM,GAAG;AAGxD,MAAM,uBAAuB,CAAoC,KAAQ,cAAsB;
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../../src/core/domain/module/index.ts"],"sourcesContent":["import _ from 'lodash';\nimport { yup } from '@strapi/utils';\nimport type { Strapi, Common, Schema } from '@strapi/types';\n\nimport { removeNamespace } from '../../utils';\nimport { validateModule } from './validation';\n\ninterface LifecyclesState {\n bootstrap?: boolean;\n register?: boolean;\n destroy?: boolean;\n}\n\nexport interface RawModule {\n config?: Record<string, unknown>;\n routes?: Common.Module['routes'];\n controllers?: Common.Module['controllers'];\n services?: Common.Module['services'];\n contentTypes?: Common.Module['contentTypes'];\n policies?: Common.Module['policies'];\n middlewares?: Common.Module['middlewares'];\n bootstrap?: (params: { strapi: Strapi }) => Promise<void>;\n register?: (params: { strapi: Strapi }) => Promise<void>;\n destroy?: (params: { strapi: Strapi }) => Promise<void>;\n}\n\nexport interface Module {\n bootstrap: () => Promise<void>;\n register: () => Promise<void>;\n destroy: () => Promise<void>;\n load: () => void;\n routes: Common.Module['routes'];\n config: (path: string, defaultValue?: unknown) => unknown;\n contentType: (ctName: Common.UID.ContentType) => Schema.ContentType;\n contentTypes: Record<string, Schema.ContentType>;\n service: (serviceName: Common.UID.Service) => Common.Service;\n services: Record<string, Common.Service>;\n policy: (policyName: Common.UID.Policy) => Common.Policy;\n policies: Record<string, Common.Policy>;\n middleware: (middlewareName: Common.UID.Middleware) => Common.Middleware;\n middlewares: Record<string, Common.Middleware>;\n controller: (controllerName: Common.UID.Controller) => Common.Controller;\n controllers: Record<string, Common.Controller>;\n}\n\nconst uidToPath = (uid: string) => uid.replace('::', '.');\n\n// Removes the namespace from a map with keys prefixed with a namespace\nconst removeNamespacedKeys = <T extends Record<string, unknown>>(map: T, namespace: string) => {\n return _.mapKeys(map, (value, key) => removeNamespace(key, namespace));\n};\n\nconst defaultModule = {\n config: {},\n routes: [],\n controllers: {},\n services: {},\n contentTypes: {},\n policies: {},\n middlewares: {},\n};\n\nexport const createModule = (namespace: string, rawModule: RawModule, strapi: Strapi): Module => {\n _.defaults(rawModule, defaultModule);\n\n try {\n validateModule(rawModule);\n } catch (e) {\n if (e instanceof yup.ValidationError) {\n throw new Error(`strapi-server.js is invalid for '${namespace}'.\\n${e.errors.join('\\n')}`);\n }\n }\n\n const called: LifecyclesState = {};\n return {\n async bootstrap() {\n if (called.bootstrap) {\n throw new Error(`Bootstrap for ${namespace} has already been called`);\n }\n called.bootstrap = true;\n await (rawModule.bootstrap && rawModule.bootstrap({ strapi }));\n },\n async register() {\n if (called.register) {\n throw new Error(`Register for ${namespace} has already been called`);\n }\n called.register = true;\n await (rawModule.register && rawModule.register({ strapi }));\n },\n async destroy() {\n if (called.destroy) {\n throw new Error(`Destroy for ${namespace} has already been called`);\n }\n called.destroy = true;\n await (rawModule.destroy && rawModule.destroy({ strapi }));\n },\n load() {\n strapi.container.get('content-types').add(namespace, rawModule.contentTypes);\n strapi.container.get('services').add(namespace, rawModule.services);\n strapi.container.get('policies').add(namespace, rawModule.policies);\n strapi.container.get('middlewares').add(namespace, rawModule.middlewares);\n strapi.container.get('controllers').add(namespace, rawModule.controllers);\n strapi.container.get('config').set(uidToPath(namespace), rawModule.config);\n },\n get routes() {\n return rawModule.routes ?? {};\n },\n config(path: string, defaultValue: unknown) {\n return strapi.container.get('config').get(`${uidToPath(namespace)}.${path}`, defaultValue);\n },\n contentType(ctName: Common.UID.ContentType) {\n return strapi.container.get('content-types').get(`${namespace}.${ctName}`);\n },\n get contentTypes() {\n const contentTypes = strapi.container.get('content-types').getAll(namespace);\n return removeNamespacedKeys(contentTypes, namespace);\n },\n service(serviceName: Common.UID.Service) {\n return strapi.container.get('services').get(`${namespace}.${serviceName}`);\n },\n get services() {\n const services = strapi.container.get('services').getAll(namespace);\n return removeNamespacedKeys(services, namespace);\n },\n policy(policyName: Common.UID.Policy) {\n return strapi.container.get('policies').get(`${namespace}.${policyName}`);\n },\n get policies() {\n const policies = strapi.container.get('policies').getAll(namespace);\n return removeNamespacedKeys(policies, namespace);\n },\n middleware(middlewareName: Common.UID.Middleware) {\n return strapi.container.get('middlewares').get(`${namespace}.${middlewareName}`);\n },\n get middlewares() {\n const middlewares = strapi.container.get('middlewares').getAll(namespace);\n return removeNamespacedKeys(middlewares, namespace);\n },\n controller(controllerName: Common.UID.Controller) {\n return strapi.container.get('controllers').get(`${namespace}.${controllerName}`);\n },\n get controllers() {\n const controllers = strapi.container.get('controllers').getAll(namespace);\n return removeNamespacedKeys(controllers, namespace);\n },\n };\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sources":["../../../../src/core/domain/module/validation.ts"],"sourcesContent":["import { yup } from '@strapi/utils';\n\nconst strapiServerSchema = yup\n .object()\n .shape({\n bootstrap: yup.mixed().isFunction(),\n destroy: yup.mixed().isFunction(),\n register: yup.mixed().isFunction(),\n config: yup.object(),\n routes: yup.lazy((value) => {\n if (Array.isArray(value)) {\n return yup.array();\n }\n return yup.object();\n }),\n controllers: yup.object(),\n services: yup.object(),\n policies: yup.object(),\n middlewares: yup.object(),\n contentTypes: yup.object(),\n })\n .noUnknown();\n\nconst validateModule = (data: unknown) => {\n return strapiServerSchema.validateSync(data, { strict: true, abortEarly: false });\n};\n\nexport { validateModule };\n"],"names":["yup"],"mappings":";;;AAEA,MAAM,qBAAqBA,
|
|
1
|
+
{"version":3,"file":"validation.js","sources":["../../../../src/core/domain/module/validation.ts"],"sourcesContent":["import { yup } from '@strapi/utils';\n\nconst strapiServerSchema = yup\n .object()\n .shape({\n bootstrap: yup.mixed().isFunction(),\n destroy: yup.mixed().isFunction(),\n register: yup.mixed().isFunction(),\n config: yup.object(),\n routes: yup.lazy((value) => {\n if (Array.isArray(value)) {\n return yup.array();\n }\n return yup.object();\n }),\n controllers: yup.object(),\n services: yup.object(),\n policies: yup.object(),\n middlewares: yup.object(),\n contentTypes: yup.object(),\n })\n .noUnknown();\n\nconst validateModule = (data: unknown) => {\n return strapiServerSchema.validateSync(data, { strict: true, abortEarly: false });\n};\n\nexport { validateModule };\n"],"names":["yup"],"mappings":";;;AAEA,MAAM,qBAAqBA,YAAAA,IACxB,OAAA,EACA,MAAM;AAAA,EACL,WAAWA,YAAAA,IAAI,MAAA,EAAQ,WAAA;AAAA,EACvB,SAASA,YAAAA,IAAI,MAAA,EAAQ,WAAA;AAAA,EACrB,UAAUA,YAAAA,IAAI,MAAA,EAAQ,WAAA;AAAA,EACtB,QAAQA,YAAAA,IAAI,OAAA;AAAA,EACZ,QAAQA,YAAAA,IAAI,KAAK,CAAC,UAAU;AAC1B,QAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,aAAOA,YAAAA,IAAI,MAAA;AAAA,IACb;AACA,WAAOA,YAAAA,IAAI,OAAA;AAAA,EACb,CAAC;AAAA,EACD,aAAaA,YAAAA,IAAI,OAAA;AAAA,EACjB,UAAUA,YAAAA,IAAI,OAAA;AAAA,EACd,UAAUA,YAAAA,IAAI,OAAA;AAAA,EACd,aAAaA,YAAAA,IAAI,OAAA;AAAA,EACjB,cAAcA,YAAAA,IAAI,OAAA;AACpB,CAAC,EACA,UAAA;AAEH,MAAM,iBAAiB,CAAC,SAAkB;AACxC,SAAO,mBAAmB,aAAa,MAAM,EAAE,QAAQ,MAAM,YAAY,OAAO;AAClF;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.mjs","sources":["../../../../src/core/domain/module/validation.ts"],"sourcesContent":["import { yup } from '@strapi/utils';\n\nconst strapiServerSchema = yup\n .object()\n .shape({\n bootstrap: yup.mixed().isFunction(),\n destroy: yup.mixed().isFunction(),\n register: yup.mixed().isFunction(),\n config: yup.object(),\n routes: yup.lazy((value) => {\n if (Array.isArray(value)) {\n return yup.array();\n }\n return yup.object();\n }),\n controllers: yup.object(),\n services: yup.object(),\n policies: yup.object(),\n middlewares: yup.object(),\n contentTypes: yup.object(),\n })\n .noUnknown();\n\nconst validateModule = (data: unknown) => {\n return strapiServerSchema.validateSync(data, { strict: true, abortEarly: false });\n};\n\nexport { validateModule };\n"],"names":[],"mappings":";AAEA,MAAM,qBAAqB,IACxB,
|
|
1
|
+
{"version":3,"file":"validation.mjs","sources":["../../../../src/core/domain/module/validation.ts"],"sourcesContent":["import { yup } from '@strapi/utils';\n\nconst strapiServerSchema = yup\n .object()\n .shape({\n bootstrap: yup.mixed().isFunction(),\n destroy: yup.mixed().isFunction(),\n register: yup.mixed().isFunction(),\n config: yup.object(),\n routes: yup.lazy((value) => {\n if (Array.isArray(value)) {\n return yup.array();\n }\n return yup.object();\n }),\n controllers: yup.object(),\n services: yup.object(),\n policies: yup.object(),\n middlewares: yup.object(),\n contentTypes: yup.object(),\n })\n .noUnknown();\n\nconst validateModule = (data: unknown) => {\n return strapiServerSchema.validateSync(data, { strict: true, abortEarly: false });\n};\n\nexport { validateModule };\n"],"names":[],"mappings":";AAEA,MAAM,qBAAqB,IACxB,OAAA,EACA,MAAM;AAAA,EACL,WAAW,IAAI,MAAA,EAAQ,WAAA;AAAA,EACvB,SAAS,IAAI,MAAA,EAAQ,WAAA;AAAA,EACrB,UAAU,IAAI,MAAA,EAAQ,WAAA;AAAA,EACtB,QAAQ,IAAI,OAAA;AAAA,EACZ,QAAQ,IAAI,KAAK,CAAC,UAAU;AAC1B,QAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,aAAO,IAAI,MAAA;AAAA,IACb;AACA,WAAO,IAAI,OAAA;AAAA,EACb,CAAC;AAAA,EACD,aAAa,IAAI,OAAA;AAAA,EACjB,UAAU,IAAI,OAAA;AAAA,EACd,UAAU,IAAI,OAAA;AAAA,EACd,aAAa,IAAI,OAAA;AAAA,EACjB,cAAc,IAAI,OAAA;AACpB,CAAC,EACA,UAAA;AAEH,MAAM,iBAAiB,CAAC,SAAkB;AACxC,SAAO,mBAAmB,aAAa,MAAM,EAAE,QAAQ,MAAM,YAAY,OAAO;AAClF;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin.js","sources":["../../../src/core/loaders/admin.ts"],"sourcesContent":["import _ from 'lodash';\nimport type { Strapi } from '@strapi/types';\n\nexport default async function loadAdmin(strapi: Strapi) {\n strapi.admin = require('@strapi/admin/strapi-server');\n\n strapi.container.get('services').add(`admin::`, strapi.admin?.services);\n strapi.container.get('controllers').add(`admin::`, strapi.admin?.controllers);\n strapi.container.get('content-types').add(`admin::`, strapi.admin?.contentTypes);\n strapi.container.get('policies').add(`admin::`, strapi.admin?.policies);\n strapi.container.get('middlewares').add(`admin::`, strapi.admin?.middlewares);\n\n const userAdminConfig = strapi.config.get('admin');\n strapi.container.get('config').set('admin', _.merge(strapi.admin?.config, userAdminConfig));\n}\n"],"names":["_"],"mappings":";;;;AAGA,eAA8B,UAAU,QAAgB;
|
|
1
|
+
{"version":3,"file":"admin.js","sources":["../../../src/core/loaders/admin.ts"],"sourcesContent":["import _ from 'lodash';\nimport type { Strapi } from '@strapi/types';\n\nexport default async function loadAdmin(strapi: Strapi) {\n strapi.admin = require('@strapi/admin/strapi-server');\n\n strapi.container.get('services').add(`admin::`, strapi.admin?.services);\n strapi.container.get('controllers').add(`admin::`, strapi.admin?.controllers);\n strapi.container.get('content-types').add(`admin::`, strapi.admin?.contentTypes);\n strapi.container.get('policies').add(`admin::`, strapi.admin?.policies);\n strapi.container.get('middlewares').add(`admin::`, strapi.admin?.middlewares);\n\n const userAdminConfig = strapi.config.get('admin');\n strapi.container.get('config').set('admin', _.merge(strapi.admin?.config, userAdminConfig));\n}\n"],"names":["_"],"mappings":";;;;AAGA,eAA8B,UAAU,QAAgB;AACtD,SAAO,QAAQ,QAAQ,6BAA6B;AAEpD,SAAO,UAAU,IAAI,UAAU,EAAE,IAAI,WAAW,OAAO,OAAO,QAAQ;AACtE,SAAO,UAAU,IAAI,aAAa,EAAE,IAAI,WAAW,OAAO,OAAO,WAAW;AAC5E,SAAO,UAAU,IAAI,eAAe,EAAE,IAAI,WAAW,OAAO,OAAO,YAAY;AAC/E,SAAO,UAAU,IAAI,UAAU,EAAE,IAAI,WAAW,OAAO,OAAO,QAAQ;AACtE,SAAO,UAAU,IAAI,aAAa,EAAE,IAAI,WAAW,OAAO,OAAO,WAAW;AAE5E,QAAM,kBAAkB,OAAO,OAAO,IAAI,OAAO;AACjD,SAAO,UAAU,IAAI,QAAQ,EAAE,IAAI,SAASA,WAAAA,QAAE,MAAM,OAAO,OAAO,QAAQ,eAAe,CAAC;AAC5F;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin.mjs","sources":["../../../src/core/loaders/admin.ts"],"sourcesContent":["import _ from 'lodash';\nimport type { Strapi } from '@strapi/types';\n\nexport default async function loadAdmin(strapi: Strapi) {\n strapi.admin = require('@strapi/admin/strapi-server');\n\n strapi.container.get('services').add(`admin::`, strapi.admin?.services);\n strapi.container.get('controllers').add(`admin::`, strapi.admin?.controllers);\n strapi.container.get('content-types').add(`admin::`, strapi.admin?.contentTypes);\n strapi.container.get('policies').add(`admin::`, strapi.admin?.policies);\n strapi.container.get('middlewares').add(`admin::`, strapi.admin?.middlewares);\n\n const userAdminConfig = strapi.config.get('admin');\n strapi.container.get('config').set('admin', _.merge(strapi.admin?.config, userAdminConfig));\n}\n"],"names":[],"mappings":";AAGA,eAA8B,UAAU,QAAgB;
|
|
1
|
+
{"version":3,"file":"admin.mjs","sources":["../../../src/core/loaders/admin.ts"],"sourcesContent":["import _ from 'lodash';\nimport type { Strapi } from '@strapi/types';\n\nexport default async function loadAdmin(strapi: Strapi) {\n strapi.admin = require('@strapi/admin/strapi-server');\n\n strapi.container.get('services').add(`admin::`, strapi.admin?.services);\n strapi.container.get('controllers').add(`admin::`, strapi.admin?.controllers);\n strapi.container.get('content-types').add(`admin::`, strapi.admin?.contentTypes);\n strapi.container.get('policies').add(`admin::`, strapi.admin?.policies);\n strapi.container.get('middlewares').add(`admin::`, strapi.admin?.middlewares);\n\n const userAdminConfig = strapi.config.get('admin');\n strapi.container.get('config').set('admin', _.merge(strapi.admin?.config, userAdminConfig));\n}\n"],"names":[],"mappings":";AAGA,eAA8B,UAAU,QAAgB;AACtD,SAAO,QAAQ,QAAQ,6BAA6B;AAEpD,SAAO,UAAU,IAAI,UAAU,EAAE,IAAI,WAAW,OAAO,OAAO,QAAQ;AACtE,SAAO,UAAU,IAAI,aAAa,EAAE,IAAI,WAAW,OAAO,OAAO,WAAW;AAC5E,SAAO,UAAU,IAAI,eAAe,EAAE,IAAI,WAAW,OAAO,OAAO,YAAY;AAC/E,SAAO,UAAU,IAAI,UAAU,EAAE,IAAI,WAAW,OAAO,OAAO,QAAQ;AACtE,SAAO,UAAU,IAAI,aAAa,EAAE,IAAI,WAAW,OAAO,OAAO,WAAW;AAE5E,QAAM,kBAAkB,OAAO,OAAO,IAAI,OAAO;AACjD,SAAO,UAAU,IAAI,QAAQ,EAAE,IAAI,SAAS,EAAE,MAAM,OAAO,OAAO,QAAQ,eAAe,CAAC;AAC5F;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apis.js","sources":["../../../src/core/loaders/apis.ts"],"sourcesContent":["import { join, extname, basename } from 'path';\nimport fse, { existsSync } from 'fs-extra';\nimport _ from 'lodash';\nimport { isKebabCase, importDefault } from '@strapi/utils';\nimport { isEmpty } from 'lodash/fp';\nimport type { Strapi, Common, Schema } from '@strapi/types';\n\ninterface API {\n bootstrap: () => void | Promise<void>;\n destroy: () => void | Promise<void>;\n register: () => void | Promise<void>;\n config: Record<string, unknown>;\n routes: Record<string, Common.Router>;\n controllers: Record<string, Common.Controller>;\n services: Record<string, Common.Service>;\n policies: Record<string, Common.Policy>;\n middlewares: Record<string, Common.Middleware>;\n contentTypes: Record<string, { schema: Schema.ContentType }>;\n}\n\ninterface APIs {\n [key: string]: API;\n}\n\nconst DEFAULT_CONTENT_TYPE = {\n schema: {},\n actions: {},\n lifecycles: {},\n};\n\n// to handle names with numbers in it we first check if it is already in kebabCase\nconst normalizeName = (name: string) => (isKebabCase(name) ? name : _.kebabCase(name));\n\nconst isDirectory = (fd: fse.Dirent) => fd.isDirectory();\nconst isDotFile = (fd: fse.Dirent) => fd.name.startsWith('.');\n\nexport default async function loadAPIs(strapi: Strapi) {\n if (!existsSync(strapi.dirs.dist.api)) {\n return;\n }\n\n const apisFDs = await (await fse.readdir(strapi.dirs.dist.api, { withFileTypes: true }))\n .filter(isDirectory)\n .filter(_.negate(isDotFile));\n\n const apis: APIs = {};\n\n // only load folders\n for (const apiFD of apisFDs) {\n const apiName = normalizeName(apiFD.name);\n const api = await loadAPI(join(strapi.dirs.dist.api, apiFD.name));\n\n apis[apiName] = api;\n }\n\n validateContentTypesUnicity(apis);\n\n for (const apiName of Object.keys(apis)) {\n strapi.container.get('apis').add(apiName, apis[apiName]);\n }\n}\n\nconst validateContentTypesUnicity = (apis: APIs) => {\n const allApisSchemas = Object.values(apis).flatMap((api) => Object.values(api.contentTypes));\n\n const names: string[] = [];\n allApisSchemas.forEach(({ schema }) => {\n if (schema.info.singularName) {\n const singularName = _.kebabCase(schema.info.singularName);\n if (names.includes(singularName)) {\n throw new Error(`The singular name \"${schema.info.singularName}\" should be unique`);\n }\n names.push(singularName);\n }\n\n if (schema.info.pluralName) {\n const pluralName = _.kebabCase(schema.info.pluralName);\n if (names.includes(pluralName)) {\n throw new Error(`The plural name \"${schema.info.pluralName}\" should be unique`);\n }\n names.push(pluralName);\n }\n });\n};\n\nconst loadAPI = async (dir: string) => {\n const [index, config, routes, controllers, services, policies, middlewares, contentTypes] =\n await Promise.all([\n loadIndex(dir),\n loadDir(join(dir, 'config')),\n loadDir(join(dir, 'routes')),\n loadDir(join(dir, 'controllers')),\n loadDir(join(dir, 'services')),\n loadDir(join(dir, 'policies')),\n loadDir(join(dir, 'middlewares')),\n loadContentTypes(join(dir, 'content-types')),\n ]);\n\n return {\n ...(index || {}),\n config: config || {},\n routes: routes || [],\n controllers: controllers || {},\n services: services || {},\n policies: policies || {},\n middlewares: middlewares || {},\n contentTypes: contentTypes || {},\n };\n};\n\nconst loadIndex = async (dir: string) => {\n if (await fse.pathExists(join(dir, 'index.js'))) {\n return loadFile(join(dir, 'index.js'));\n }\n};\n\nconst loadContentTypes = async (dir: string) => {\n if (!(await fse.pathExists(dir))) {\n return;\n }\n\n const fds = await fse.readdir(dir, { withFileTypes: true });\n const contentTypes: API['contentTypes'] = {};\n\n // only load folders\n for (const fd of fds) {\n if (fd.isFile()) {\n continue;\n }\n\n const contentTypeName = normalizeName(fd.name);\n const contentType = await loadDir(join(dir, fd.name));\n\n if (isEmpty(contentType) || isEmpty(contentType.schema)) {\n throw new Error(`Could not load content type found at ${dir}`);\n }\n\n contentTypes[normalizeName(contentTypeName)] = _.defaults(\n contentType as { schema: Schema.ContentType },\n DEFAULT_CONTENT_TYPE\n );\n }\n\n return contentTypes;\n};\n\nconst loadDir = async (dir: string) => {\n if (!(await fse.pathExists(dir))) {\n return;\n }\n\n const fds = await fse.readdir(dir, { withFileTypes: true });\n\n const root: Record<string, unknown> = {};\n for (const fd of fds) {\n if (!fd.isFile() || extname(fd.name) === '.map') {\n continue;\n }\n\n const key = basename(fd.name, extname(fd.name));\n\n root[normalizeName(key)] = await loadFile(join(dir, fd.name));\n }\n\n return root;\n};\n\nconst loadFile = (file: string) => {\n const ext = extname(file);\n\n switch (ext) {\n case '.js':\n return importDefault(file);\n case '.json':\n return fse.readJSON(file);\n default:\n return {};\n }\n};\n"],"names":["isKebabCase","_","existsSync","fse","join","isEmpty","extname","basename","importDefault"],"mappings":";;;;;;;;;AAwBA,MAAM,uBAAuB;AAAA,EAC3B,QAAQ,
|
|
1
|
+
{"version":3,"file":"apis.js","sources":["../../../src/core/loaders/apis.ts"],"sourcesContent":["import { join, extname, basename } from 'path';\nimport fse, { existsSync } from 'fs-extra';\nimport _ from 'lodash';\nimport { isKebabCase, importDefault } from '@strapi/utils';\nimport { isEmpty } from 'lodash/fp';\nimport type { Strapi, Common, Schema } from '@strapi/types';\n\ninterface API {\n bootstrap: () => void | Promise<void>;\n destroy: () => void | Promise<void>;\n register: () => void | Promise<void>;\n config: Record<string, unknown>;\n routes: Record<string, Common.Router>;\n controllers: Record<string, Common.Controller>;\n services: Record<string, Common.Service>;\n policies: Record<string, Common.Policy>;\n middlewares: Record<string, Common.Middleware>;\n contentTypes: Record<string, { schema: Schema.ContentType }>;\n}\n\ninterface APIs {\n [key: string]: API;\n}\n\nconst DEFAULT_CONTENT_TYPE = {\n schema: {},\n actions: {},\n lifecycles: {},\n};\n\n// to handle names with numbers in it we first check if it is already in kebabCase\nconst normalizeName = (name: string) => (isKebabCase(name) ? name : _.kebabCase(name));\n\nconst isDirectory = (fd: fse.Dirent) => fd.isDirectory();\nconst isDotFile = (fd: fse.Dirent) => fd.name.startsWith('.');\n\nexport default async function loadAPIs(strapi: Strapi) {\n if (!existsSync(strapi.dirs.dist.api)) {\n return;\n }\n\n const apisFDs = await (await fse.readdir(strapi.dirs.dist.api, { withFileTypes: true }))\n .filter(isDirectory)\n .filter(_.negate(isDotFile));\n\n const apis: APIs = {};\n\n // only load folders\n for (const apiFD of apisFDs) {\n const apiName = normalizeName(apiFD.name);\n const api = await loadAPI(join(strapi.dirs.dist.api, apiFD.name));\n\n apis[apiName] = api;\n }\n\n validateContentTypesUnicity(apis);\n\n for (const apiName of Object.keys(apis)) {\n strapi.container.get('apis').add(apiName, apis[apiName]);\n }\n}\n\nconst validateContentTypesUnicity = (apis: APIs) => {\n const allApisSchemas = Object.values(apis).flatMap((api) => Object.values(api.contentTypes));\n\n const names: string[] = [];\n allApisSchemas.forEach(({ schema }) => {\n if (schema.info.singularName) {\n const singularName = _.kebabCase(schema.info.singularName);\n if (names.includes(singularName)) {\n throw new Error(`The singular name \"${schema.info.singularName}\" should be unique`);\n }\n names.push(singularName);\n }\n\n if (schema.info.pluralName) {\n const pluralName = _.kebabCase(schema.info.pluralName);\n if (names.includes(pluralName)) {\n throw new Error(`The plural name \"${schema.info.pluralName}\" should be unique`);\n }\n names.push(pluralName);\n }\n });\n};\n\nconst loadAPI = async (dir: string) => {\n const [index, config, routes, controllers, services, policies, middlewares, contentTypes] =\n await Promise.all([\n loadIndex(dir),\n loadDir(join(dir, 'config')),\n loadDir(join(dir, 'routes')),\n loadDir(join(dir, 'controllers')),\n loadDir(join(dir, 'services')),\n loadDir(join(dir, 'policies')),\n loadDir(join(dir, 'middlewares')),\n loadContentTypes(join(dir, 'content-types')),\n ]);\n\n return {\n ...(index || {}),\n config: config || {},\n routes: routes || [],\n controllers: controllers || {},\n services: services || {},\n policies: policies || {},\n middlewares: middlewares || {},\n contentTypes: contentTypes || {},\n };\n};\n\nconst loadIndex = async (dir: string) => {\n if (await fse.pathExists(join(dir, 'index.js'))) {\n return loadFile(join(dir, 'index.js'));\n }\n};\n\nconst loadContentTypes = async (dir: string) => {\n if (!(await fse.pathExists(dir))) {\n return;\n }\n\n const fds = await fse.readdir(dir, { withFileTypes: true });\n const contentTypes: API['contentTypes'] = {};\n\n // only load folders\n for (const fd of fds) {\n if (fd.isFile()) {\n continue;\n }\n\n const contentTypeName = normalizeName(fd.name);\n const contentType = await loadDir(join(dir, fd.name));\n\n if (isEmpty(contentType) || isEmpty(contentType.schema)) {\n throw new Error(`Could not load content type found at ${dir}`);\n }\n\n contentTypes[normalizeName(contentTypeName)] = _.defaults(\n contentType as { schema: Schema.ContentType },\n DEFAULT_CONTENT_TYPE\n );\n }\n\n return contentTypes;\n};\n\nconst loadDir = async (dir: string) => {\n if (!(await fse.pathExists(dir))) {\n return;\n }\n\n const fds = await fse.readdir(dir, { withFileTypes: true });\n\n const root: Record<string, unknown> = {};\n for (const fd of fds) {\n if (!fd.isFile() || extname(fd.name) === '.map') {\n continue;\n }\n\n const key = basename(fd.name, extname(fd.name));\n\n root[normalizeName(key)] = await loadFile(join(dir, fd.name));\n }\n\n return root;\n};\n\nconst loadFile = (file: string) => {\n const ext = extname(file);\n\n switch (ext) {\n case '.js':\n return importDefault(file);\n case '.json':\n return fse.readJSON(file);\n default:\n return {};\n }\n};\n"],"names":["isKebabCase","_","existsSync","fse","join","isEmpty","extname","basename","importDefault"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apis.mjs","sources":["../../../src/core/loaders/apis.ts"],"sourcesContent":["import { join, extname, basename } from 'path';\nimport fse, { existsSync } from 'fs-extra';\nimport _ from 'lodash';\nimport { isKebabCase, importDefault } from '@strapi/utils';\nimport { isEmpty } from 'lodash/fp';\nimport type { Strapi, Common, Schema } from '@strapi/types';\n\ninterface API {\n bootstrap: () => void | Promise<void>;\n destroy: () => void | Promise<void>;\n register: () => void | Promise<void>;\n config: Record<string, unknown>;\n routes: Record<string, Common.Router>;\n controllers: Record<string, Common.Controller>;\n services: Record<string, Common.Service>;\n policies: Record<string, Common.Policy>;\n middlewares: Record<string, Common.Middleware>;\n contentTypes: Record<string, { schema: Schema.ContentType }>;\n}\n\ninterface APIs {\n [key: string]: API;\n}\n\nconst DEFAULT_CONTENT_TYPE = {\n schema: {},\n actions: {},\n lifecycles: {},\n};\n\n// to handle names with numbers in it we first check if it is already in kebabCase\nconst normalizeName = (name: string) => (isKebabCase(name) ? name : _.kebabCase(name));\n\nconst isDirectory = (fd: fse.Dirent) => fd.isDirectory();\nconst isDotFile = (fd: fse.Dirent) => fd.name.startsWith('.');\n\nexport default async function loadAPIs(strapi: Strapi) {\n if (!existsSync(strapi.dirs.dist.api)) {\n return;\n }\n\n const apisFDs = await (await fse.readdir(strapi.dirs.dist.api, { withFileTypes: true }))\n .filter(isDirectory)\n .filter(_.negate(isDotFile));\n\n const apis: APIs = {};\n\n // only load folders\n for (const apiFD of apisFDs) {\n const apiName = normalizeName(apiFD.name);\n const api = await loadAPI(join(strapi.dirs.dist.api, apiFD.name));\n\n apis[apiName] = api;\n }\n\n validateContentTypesUnicity(apis);\n\n for (const apiName of Object.keys(apis)) {\n strapi.container.get('apis').add(apiName, apis[apiName]);\n }\n}\n\nconst validateContentTypesUnicity = (apis: APIs) => {\n const allApisSchemas = Object.values(apis).flatMap((api) => Object.values(api.contentTypes));\n\n const names: string[] = [];\n allApisSchemas.forEach(({ schema }) => {\n if (schema.info.singularName) {\n const singularName = _.kebabCase(schema.info.singularName);\n if (names.includes(singularName)) {\n throw new Error(`The singular name \"${schema.info.singularName}\" should be unique`);\n }\n names.push(singularName);\n }\n\n if (schema.info.pluralName) {\n const pluralName = _.kebabCase(schema.info.pluralName);\n if (names.includes(pluralName)) {\n throw new Error(`The plural name \"${schema.info.pluralName}\" should be unique`);\n }\n names.push(pluralName);\n }\n });\n};\n\nconst loadAPI = async (dir: string) => {\n const [index, config, routes, controllers, services, policies, middlewares, contentTypes] =\n await Promise.all([\n loadIndex(dir),\n loadDir(join(dir, 'config')),\n loadDir(join(dir, 'routes')),\n loadDir(join(dir, 'controllers')),\n loadDir(join(dir, 'services')),\n loadDir(join(dir, 'policies')),\n loadDir(join(dir, 'middlewares')),\n loadContentTypes(join(dir, 'content-types')),\n ]);\n\n return {\n ...(index || {}),\n config: config || {},\n routes: routes || [],\n controllers: controllers || {},\n services: services || {},\n policies: policies || {},\n middlewares: middlewares || {},\n contentTypes: contentTypes || {},\n };\n};\n\nconst loadIndex = async (dir: string) => {\n if (await fse.pathExists(join(dir, 'index.js'))) {\n return loadFile(join(dir, 'index.js'));\n }\n};\n\nconst loadContentTypes = async (dir: string) => {\n if (!(await fse.pathExists(dir))) {\n return;\n }\n\n const fds = await fse.readdir(dir, { withFileTypes: true });\n const contentTypes: API['contentTypes'] = {};\n\n // only load folders\n for (const fd of fds) {\n if (fd.isFile()) {\n continue;\n }\n\n const contentTypeName = normalizeName(fd.name);\n const contentType = await loadDir(join(dir, fd.name));\n\n if (isEmpty(contentType) || isEmpty(contentType.schema)) {\n throw new Error(`Could not load content type found at ${dir}`);\n }\n\n contentTypes[normalizeName(contentTypeName)] = _.defaults(\n contentType as { schema: Schema.ContentType },\n DEFAULT_CONTENT_TYPE\n );\n }\n\n return contentTypes;\n};\n\nconst loadDir = async (dir: string) => {\n if (!(await fse.pathExists(dir))) {\n return;\n }\n\n const fds = await fse.readdir(dir, { withFileTypes: true });\n\n const root: Record<string, unknown> = {};\n for (const fd of fds) {\n if (!fd.isFile() || extname(fd.name) === '.map') {\n continue;\n }\n\n const key = basename(fd.name, extname(fd.name));\n\n root[normalizeName(key)] = await loadFile(join(dir, fd.name));\n }\n\n return root;\n};\n\nconst loadFile = (file: string) => {\n const ext = extname(file);\n\n switch (ext) {\n case '.js':\n return importDefault(file);\n case '.json':\n return fse.readJSON(file);\n default:\n return {};\n }\n};\n"],"names":[],"mappings":";;;;;AAwBA,MAAM,uBAAuB;AAAA,EAC3B,QAAQ,
|
|
1
|
+
{"version":3,"file":"apis.mjs","sources":["../../../src/core/loaders/apis.ts"],"sourcesContent":["import { join, extname, basename } from 'path';\nimport fse, { existsSync } from 'fs-extra';\nimport _ from 'lodash';\nimport { isKebabCase, importDefault } from '@strapi/utils';\nimport { isEmpty } from 'lodash/fp';\nimport type { Strapi, Common, Schema } from '@strapi/types';\n\ninterface API {\n bootstrap: () => void | Promise<void>;\n destroy: () => void | Promise<void>;\n register: () => void | Promise<void>;\n config: Record<string, unknown>;\n routes: Record<string, Common.Router>;\n controllers: Record<string, Common.Controller>;\n services: Record<string, Common.Service>;\n policies: Record<string, Common.Policy>;\n middlewares: Record<string, Common.Middleware>;\n contentTypes: Record<string, { schema: Schema.ContentType }>;\n}\n\ninterface APIs {\n [key: string]: API;\n}\n\nconst DEFAULT_CONTENT_TYPE = {\n schema: {},\n actions: {},\n lifecycles: {},\n};\n\n// to handle names with numbers in it we first check if it is already in kebabCase\nconst normalizeName = (name: string) => (isKebabCase(name) ? name : _.kebabCase(name));\n\nconst isDirectory = (fd: fse.Dirent) => fd.isDirectory();\nconst isDotFile = (fd: fse.Dirent) => fd.name.startsWith('.');\n\nexport default async function loadAPIs(strapi: Strapi) {\n if (!existsSync(strapi.dirs.dist.api)) {\n return;\n }\n\n const apisFDs = await (await fse.readdir(strapi.dirs.dist.api, { withFileTypes: true }))\n .filter(isDirectory)\n .filter(_.negate(isDotFile));\n\n const apis: APIs = {};\n\n // only load folders\n for (const apiFD of apisFDs) {\n const apiName = normalizeName(apiFD.name);\n const api = await loadAPI(join(strapi.dirs.dist.api, apiFD.name));\n\n apis[apiName] = api;\n }\n\n validateContentTypesUnicity(apis);\n\n for (const apiName of Object.keys(apis)) {\n strapi.container.get('apis').add(apiName, apis[apiName]);\n }\n}\n\nconst validateContentTypesUnicity = (apis: APIs) => {\n const allApisSchemas = Object.values(apis).flatMap((api) => Object.values(api.contentTypes));\n\n const names: string[] = [];\n allApisSchemas.forEach(({ schema }) => {\n if (schema.info.singularName) {\n const singularName = _.kebabCase(schema.info.singularName);\n if (names.includes(singularName)) {\n throw new Error(`The singular name \"${schema.info.singularName}\" should be unique`);\n }\n names.push(singularName);\n }\n\n if (schema.info.pluralName) {\n const pluralName = _.kebabCase(schema.info.pluralName);\n if (names.includes(pluralName)) {\n throw new Error(`The plural name \"${schema.info.pluralName}\" should be unique`);\n }\n names.push(pluralName);\n }\n });\n};\n\nconst loadAPI = async (dir: string) => {\n const [index, config, routes, controllers, services, policies, middlewares, contentTypes] =\n await Promise.all([\n loadIndex(dir),\n loadDir(join(dir, 'config')),\n loadDir(join(dir, 'routes')),\n loadDir(join(dir, 'controllers')),\n loadDir(join(dir, 'services')),\n loadDir(join(dir, 'policies')),\n loadDir(join(dir, 'middlewares')),\n loadContentTypes(join(dir, 'content-types')),\n ]);\n\n return {\n ...(index || {}),\n config: config || {},\n routes: routes || [],\n controllers: controllers || {},\n services: services || {},\n policies: policies || {},\n middlewares: middlewares || {},\n contentTypes: contentTypes || {},\n };\n};\n\nconst loadIndex = async (dir: string) => {\n if (await fse.pathExists(join(dir, 'index.js'))) {\n return loadFile(join(dir, 'index.js'));\n }\n};\n\nconst loadContentTypes = async (dir: string) => {\n if (!(await fse.pathExists(dir))) {\n return;\n }\n\n const fds = await fse.readdir(dir, { withFileTypes: true });\n const contentTypes: API['contentTypes'] = {};\n\n // only load folders\n for (const fd of fds) {\n if (fd.isFile()) {\n continue;\n }\n\n const contentTypeName = normalizeName(fd.name);\n const contentType = await loadDir(join(dir, fd.name));\n\n if (isEmpty(contentType) || isEmpty(contentType.schema)) {\n throw new Error(`Could not load content type found at ${dir}`);\n }\n\n contentTypes[normalizeName(contentTypeName)] = _.defaults(\n contentType as { schema: Schema.ContentType },\n DEFAULT_CONTENT_TYPE\n );\n }\n\n return contentTypes;\n};\n\nconst loadDir = async (dir: string) => {\n if (!(await fse.pathExists(dir))) {\n return;\n }\n\n const fds = await fse.readdir(dir, { withFileTypes: true });\n\n const root: Record<string, unknown> = {};\n for (const fd of fds) {\n if (!fd.isFile() || extname(fd.name) === '.map') {\n continue;\n }\n\n const key = basename(fd.name, extname(fd.name));\n\n root[normalizeName(key)] = await loadFile(join(dir, fd.name));\n }\n\n return root;\n};\n\nconst loadFile = (file: string) => {\n const ext = extname(file);\n\n switch (ext) {\n case '.js':\n return importDefault(file);\n case '.json':\n return fse.readJSON(file);\n default:\n return {};\n }\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components.js","sources":["../../../src/core/loaders/components.ts"],"sourcesContent":["import { join } from 'path';\nimport _ from 'lodash';\nimport { pathExists } from 'fs-extra';\nimport type { Strapi, Common, Schema } from '@strapi/types';\nimport loadFiles from '../../load/load-files';\n\ntype LoadedComponent = {\n collectionName: string;\n __filename__: string;\n __schema__: LoadedComponent;\n uid: string;\n category: string;\n modelName: string;\n globalId: string;\n info: any;\n attributes: any;\n};\n\ntype LoadedComponents = {\n [category: string]: {\n [key: string]: LoadedComponent;\n };\n};\n\ntype ComponentMap = {\n [uid in Common.UID.Component]: Schema.Component;\n};\n\nexport default async function loadComponents(strapi: Strapi) {\n if (!(await pathExists(strapi.dirs.dist.components))) {\n return {};\n }\n\n const map = await loadFiles<LoadedComponents>(strapi.dirs.dist.components, '*/*.*(js|json)');\n\n return Object.keys(map).reduce((acc, category) => {\n Object.keys(map[category]).forEach((key) => {\n const schema = map[category][key];\n\n if (!schema.collectionName) {\n // NOTE: We're using the filepath from the app directory instead of the dist for information purpose\n const filePath = join(strapi.dirs.app.components, category, schema.__filename__);\n\n return strapi.stopWithError(\n `Component ${key} is missing a \"collectionName\" property.\\nVerify file ${filePath}.`\n );\n }\n\n const uid: Common.UID.Component = `${category}.${key}`;\n\n acc[uid] = Object.assign(schema, {\n __schema__: _.cloneDeep(schema),\n uid,\n category,\n modelType: 'component' as const,\n modelName: key,\n globalId: schema.globalId || _.upperFirst(_.camelCase(`component_${uid}`)),\n });\n });\n\n return acc;\n }, {} as ComponentMap);\n}\n"],"names":["pathExists","join","_"],"mappings":";;;;;;;AA4BA,eAA8B,eAAe,QAAgB;AAC3D,MAAI,CAAE,MAAMA,IAAAA,WAAW,OAAO,KAAK,KAAK,UAAU,GAAI;AACpD,WAAO;EACT;AAEA,QAAM,MAAM,MAAM,UAA4B,OAAO,KAAK,KAAK,YAAY,gBAAgB;AAE3F,SAAO,OAAO,KAAK,GAAG,EAAE,OAAO,CAAC,KAAK,aAAa;AAChD,WAAO,KAAK,IAAI,QAAQ,CAAC,EAAE,QAAQ,CAAC,QAAQ;AAC1C,YAAM,SAAS,IAAI,QAAQ,EAAE,GAAG;
|
|
1
|
+
{"version":3,"file":"components.js","sources":["../../../src/core/loaders/components.ts"],"sourcesContent":["import { join } from 'path';\nimport _ from 'lodash';\nimport { pathExists } from 'fs-extra';\nimport type { Strapi, Common, Schema } from '@strapi/types';\nimport loadFiles from '../../load/load-files';\n\ntype LoadedComponent = {\n collectionName: string;\n __filename__: string;\n __schema__: LoadedComponent;\n uid: string;\n category: string;\n modelName: string;\n globalId: string;\n info: any;\n attributes: any;\n};\n\ntype LoadedComponents = {\n [category: string]: {\n [key: string]: LoadedComponent;\n };\n};\n\ntype ComponentMap = {\n [uid in Common.UID.Component]: Schema.Component;\n};\n\nexport default async function loadComponents(strapi: Strapi) {\n if (!(await pathExists(strapi.dirs.dist.components))) {\n return {};\n }\n\n const map = await loadFiles<LoadedComponents>(strapi.dirs.dist.components, '*/*.*(js|json)');\n\n return Object.keys(map).reduce((acc, category) => {\n Object.keys(map[category]).forEach((key) => {\n const schema = map[category][key];\n\n if (!schema.collectionName) {\n // NOTE: We're using the filepath from the app directory instead of the dist for information purpose\n const filePath = join(strapi.dirs.app.components, category, schema.__filename__);\n\n return strapi.stopWithError(\n `Component ${key} is missing a \"collectionName\" property.\\nVerify file ${filePath}.`\n );\n }\n\n const uid: Common.UID.Component = `${category}.${key}`;\n\n acc[uid] = Object.assign(schema, {\n __schema__: _.cloneDeep(schema),\n uid,\n category,\n modelType: 'component' as const,\n modelName: key,\n globalId: schema.globalId || _.upperFirst(_.camelCase(`component_${uid}`)),\n });\n });\n\n return acc;\n }, {} as ComponentMap);\n}\n"],"names":["pathExists","join","_"],"mappings":";;;;;;;AA4BA,eAA8B,eAAe,QAAgB;AAC3D,MAAI,CAAE,MAAMA,IAAAA,WAAW,OAAO,KAAK,KAAK,UAAU,GAAI;AACpD,WAAO,CAAA;AAAA,EACT;AAEA,QAAM,MAAM,MAAM,UAA4B,OAAO,KAAK,KAAK,YAAY,gBAAgB;AAE3F,SAAO,OAAO,KAAK,GAAG,EAAE,OAAO,CAAC,KAAK,aAAa;AAChD,WAAO,KAAK,IAAI,QAAQ,CAAC,EAAE,QAAQ,CAAC,QAAQ;AAC1C,YAAM,SAAS,IAAI,QAAQ,EAAE,GAAG;AAEhC,UAAI,CAAC,OAAO,gBAAgB;AAE1B,cAAM,WAAWC,UAAK,OAAO,KAAK,IAAI,YAAY,UAAU,OAAO,YAAY;AAE/E,eAAO,OAAO;AAAA,UACZ,aAAa,GAAG;AAAA,cAAyD,QAAQ;AAAA,QAAA;AAAA,MAErF;AAEA,YAAM,MAA4B,GAAG,QAAQ,IAAI,GAAG;AAEpD,UAAI,GAAG,IAAI,OAAO,OAAO,QAAQ;AAAA,QAC/B,YAAYC,WAAAA,QAAE,UAAU,MAAM;AAAA,QAC9B;AAAA,QACA;AAAA,QACA,WAAW;AAAA,QACX,WAAW;AAAA,QACX,UAAU,OAAO,YAAYA,WAAAA,QAAE,WAAWA,mBAAE,UAAU,aAAa,GAAG,EAAE,CAAC;AAAA,MAAA,CAC1E;AAAA,IACH,CAAC;AAED,WAAO;AAAA,EACT,GAAG,CAAA,CAAkB;AACvB;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components.mjs","sources":["../../../src/core/loaders/components.ts"],"sourcesContent":["import { join } from 'path';\nimport _ from 'lodash';\nimport { pathExists } from 'fs-extra';\nimport type { Strapi, Common, Schema } from '@strapi/types';\nimport loadFiles from '../../load/load-files';\n\ntype LoadedComponent = {\n collectionName: string;\n __filename__: string;\n __schema__: LoadedComponent;\n uid: string;\n category: string;\n modelName: string;\n globalId: string;\n info: any;\n attributes: any;\n};\n\ntype LoadedComponents = {\n [category: string]: {\n [key: string]: LoadedComponent;\n };\n};\n\ntype ComponentMap = {\n [uid in Common.UID.Component]: Schema.Component;\n};\n\nexport default async function loadComponents(strapi: Strapi) {\n if (!(await pathExists(strapi.dirs.dist.components))) {\n return {};\n }\n\n const map = await loadFiles<LoadedComponents>(strapi.dirs.dist.components, '*/*.*(js|json)');\n\n return Object.keys(map).reduce((acc, category) => {\n Object.keys(map[category]).forEach((key) => {\n const schema = map[category][key];\n\n if (!schema.collectionName) {\n // NOTE: We're using the filepath from the app directory instead of the dist for information purpose\n const filePath = join(strapi.dirs.app.components, category, schema.__filename__);\n\n return strapi.stopWithError(\n `Component ${key} is missing a \"collectionName\" property.\\nVerify file ${filePath}.`\n );\n }\n\n const uid: Common.UID.Component = `${category}.${key}`;\n\n acc[uid] = Object.assign(schema, {\n __schema__: _.cloneDeep(schema),\n uid,\n category,\n modelType: 'component' as const,\n modelName: key,\n globalId: schema.globalId || _.upperFirst(_.camelCase(`component_${uid}`)),\n });\n });\n\n return acc;\n }, {} as ComponentMap);\n}\n"],"names":[],"mappings":";;;;AA4BA,eAA8B,eAAe,QAAgB;AAC3D,MAAI,CAAE,MAAM,WAAW,OAAO,KAAK,KAAK,UAAU,GAAI;AACpD,WAAO;EACT;AAEA,QAAM,MAAM,MAAM,UAA4B,OAAO,KAAK,KAAK,YAAY,gBAAgB;AAE3F,SAAO,OAAO,KAAK,GAAG,EAAE,OAAO,CAAC,KAAK,aAAa;AAChD,WAAO,KAAK,IAAI,QAAQ,CAAC,EAAE,QAAQ,CAAC,QAAQ;AAC1C,YAAM,SAAS,IAAI,QAAQ,EAAE,GAAG;
|
|
1
|
+
{"version":3,"file":"components.mjs","sources":["../../../src/core/loaders/components.ts"],"sourcesContent":["import { join } from 'path';\nimport _ from 'lodash';\nimport { pathExists } from 'fs-extra';\nimport type { Strapi, Common, Schema } from '@strapi/types';\nimport loadFiles from '../../load/load-files';\n\ntype LoadedComponent = {\n collectionName: string;\n __filename__: string;\n __schema__: LoadedComponent;\n uid: string;\n category: string;\n modelName: string;\n globalId: string;\n info: any;\n attributes: any;\n};\n\ntype LoadedComponents = {\n [category: string]: {\n [key: string]: LoadedComponent;\n };\n};\n\ntype ComponentMap = {\n [uid in Common.UID.Component]: Schema.Component;\n};\n\nexport default async function loadComponents(strapi: Strapi) {\n if (!(await pathExists(strapi.dirs.dist.components))) {\n return {};\n }\n\n const map = await loadFiles<LoadedComponents>(strapi.dirs.dist.components, '*/*.*(js|json)');\n\n return Object.keys(map).reduce((acc, category) => {\n Object.keys(map[category]).forEach((key) => {\n const schema = map[category][key];\n\n if (!schema.collectionName) {\n // NOTE: We're using the filepath from the app directory instead of the dist for information purpose\n const filePath = join(strapi.dirs.app.components, category, schema.__filename__);\n\n return strapi.stopWithError(\n `Component ${key} is missing a \"collectionName\" property.\\nVerify file ${filePath}.`\n );\n }\n\n const uid: Common.UID.Component = `${category}.${key}`;\n\n acc[uid] = Object.assign(schema, {\n __schema__: _.cloneDeep(schema),\n uid,\n category,\n modelType: 'component' as const,\n modelName: key,\n globalId: schema.globalId || _.upperFirst(_.camelCase(`component_${uid}`)),\n });\n });\n\n return acc;\n }, {} as ComponentMap);\n}\n"],"names":[],"mappings":";;;;AA4BA,eAA8B,eAAe,QAAgB;AAC3D,MAAI,CAAE,MAAM,WAAW,OAAO,KAAK,KAAK,UAAU,GAAI;AACpD,WAAO,CAAA;AAAA,EACT;AAEA,QAAM,MAAM,MAAM,UAA4B,OAAO,KAAK,KAAK,YAAY,gBAAgB;AAE3F,SAAO,OAAO,KAAK,GAAG,EAAE,OAAO,CAAC,KAAK,aAAa;AAChD,WAAO,KAAK,IAAI,QAAQ,CAAC,EAAE,QAAQ,CAAC,QAAQ;AAC1C,YAAM,SAAS,IAAI,QAAQ,EAAE,GAAG;AAEhC,UAAI,CAAC,OAAO,gBAAgB;AAE1B,cAAM,WAAW,KAAK,OAAO,KAAK,IAAI,YAAY,UAAU,OAAO,YAAY;AAE/E,eAAO,OAAO;AAAA,UACZ,aAAa,GAAG;AAAA,cAAyD,QAAQ;AAAA,QAAA;AAAA,MAErF;AAEA,YAAM,MAA4B,GAAG,QAAQ,IAAI,GAAG;AAEpD,UAAI,GAAG,IAAI,OAAO,OAAO,QAAQ;AAAA,QAC/B,YAAY,EAAE,UAAU,MAAM;AAAA,QAC9B;AAAA,QACA;AAAA,QACA,WAAW;AAAA,QACX,WAAW;AAAA,QACX,UAAU,OAAO,YAAY,EAAE,WAAW,EAAE,UAAU,aAAa,GAAG,EAAE,CAAC;AAAA,MAAA,CAC1E;AAAA,IACH,CAAC;AAED,WAAO;AAAA,EACT,GAAG,CAAA,CAAkB;AACvB;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/core/loaders/index.ts"],"sourcesContent":["import loadSrcIndex from './src-index';\nimport loadAPIs from './apis';\nimport loadMiddlewares from './middlewares';\nimport loadComponents from './components';\nimport loadPolicies from './policies';\nimport loadPlugins from './plugins';\nimport loadAdmin from './admin';\nimport loadSanitizers from './sanitizers';\nimport loadValidators from './validators';\n\nexport default {\n loadSrcIndex,\n loadAPIs,\n loadMiddlewares,\n loadComponents,\n loadPolicies,\n loadPlugins,\n loadAdmin,\n loadSanitizers,\n loadValidators,\n};\n"],"names":["loadSrcIndex","loadAPIs","loadMiddlewares","loadComponents","loadPolicies","loadPlugins","loadAdmin","loadSanitizers","loadValidators"],"mappings":";;;;;;;;;;AAUA,
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/core/loaders/index.ts"],"sourcesContent":["import loadSrcIndex from './src-index';\nimport loadAPIs from './apis';\nimport loadMiddlewares from './middlewares';\nimport loadComponents from './components';\nimport loadPolicies from './policies';\nimport loadPlugins from './plugins';\nimport loadAdmin from './admin';\nimport loadSanitizers from './sanitizers';\nimport loadValidators from './validators';\n\nexport default {\n loadSrcIndex,\n loadAPIs,\n loadMiddlewares,\n loadComponents,\n loadPolicies,\n loadPlugins,\n loadAdmin,\n loadSanitizers,\n loadValidators,\n};\n"],"names":["loadSrcIndex","loadAPIs","loadMiddlewares","loadComponents","loadPolicies","loadPlugins","loadAdmin","loadSanitizers","loadValidators"],"mappings":";;;;;;;;;;AAUA,MAAA,UAAe;AAAA,EAAA,cACbA;AAAAA,EAAA,UACAC;AAAAA,EAAA,iBACAC;AAAAA,EAAA,gBACAC;AAAAA,EAAA,cACAC;AAAAA,EAAA,aACAC;AAAAA,EAAA,WACAC;AAAAA,EAAA,gBACAC;AAAAA,EAAA,gBACAC;AACF;;"}
|