@strapi/core 5.0.0-rc.2 → 5.0.0-rc.4

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.
Files changed (127) hide show
  1. package/dist/Strapi.js +2 -2
  2. package/dist/Strapi.js.map +1 -1
  3. package/dist/configuration/get-dirs.js +2 -2
  4. package/dist/configuration/get-dirs.js.map +1 -1
  5. package/dist/configuration/index.js +2 -2
  6. package/dist/configuration/index.js.map +1 -1
  7. package/dist/core-api/controller/collection-type.js +3 -3
  8. package/dist/core-api/controller/collection-type.js.map +1 -1
  9. package/dist/core-api/controller/index.js +2 -2
  10. package/dist/core-api/controller/index.js.map +1 -1
  11. package/dist/core-api/controller/single-type.js +2 -2
  12. package/dist/core-api/controller/single-type.js.map +1 -1
  13. package/dist/core-api/controller/transform.js +8 -8
  14. package/dist/core-api/controller/transform.js.map +1 -1
  15. package/dist/core-api/service/pagination.js +8 -8
  16. package/dist/core-api/service/pagination.js.map +1 -1
  17. package/dist/domain/content-type/index.js +4 -4
  18. package/dist/domain/content-type/index.js.map +1 -1
  19. package/dist/ee/index.js +3 -3
  20. package/dist/ee/index.js.map +1 -1
  21. package/dist/factories.js +4 -4
  22. package/dist/factories.js.map +1 -1
  23. package/dist/loaders/apis.js +2 -2
  24. package/dist/loaders/apis.js.map +1 -1
  25. package/dist/loaders/plugins/get-enabled-plugins.js +8 -8
  26. package/dist/loaders/plugins/get-enabled-plugins.js.map +1 -1
  27. package/dist/loaders/plugins/get-user-plugins-config.js +2 -2
  28. package/dist/loaders/plugins/get-user-plugins-config.js.map +1 -1
  29. package/dist/loaders/plugins/index.js +6 -6
  30. package/dist/loaders/plugins/index.js.map +1 -1
  31. package/dist/middlewares/body.js +2 -2
  32. package/dist/middlewares/body.js.map +1 -1
  33. package/dist/middlewares/public.js +2 -2
  34. package/dist/middlewares/public.js.map +1 -1
  35. package/dist/middlewares/responses.js +2 -2
  36. package/dist/middlewares/responses.js.map +1 -1
  37. package/dist/middlewares/security.js +3 -3
  38. package/dist/middlewares/security.js.map +1 -1
  39. package/dist/middlewares/session.js +2 -2
  40. package/dist/middlewares/session.js.map +1 -1
  41. package/dist/registries/apis.js +2 -2
  42. package/dist/registries/apis.js.map +1 -1
  43. package/dist/registries/components.js +2 -2
  44. package/dist/registries/components.js.map +1 -1
  45. package/dist/registries/content-types.js +3 -3
  46. package/dist/registries/content-types.js.map +1 -1
  47. package/dist/registries/controllers.js +3 -3
  48. package/dist/registries/controllers.js.map +1 -1
  49. package/dist/registries/custom-fields.js +4 -4
  50. package/dist/registries/custom-fields.js.map +1 -1
  51. package/dist/registries/hooks.js +2 -2
  52. package/dist/registries/hooks.js.map +1 -1
  53. package/dist/registries/middlewares.js +3 -3
  54. package/dist/registries/middlewares.js.map +1 -1
  55. package/dist/registries/modules.js +3 -3
  56. package/dist/registries/modules.js.map +1 -1
  57. package/dist/registries/plugins.js +2 -2
  58. package/dist/registries/plugins.js.map +1 -1
  59. package/dist/registries/policies.js +4 -4
  60. package/dist/registries/policies.js.map +1 -1
  61. package/dist/registries/services.js +3 -3
  62. package/dist/registries/services.js.map +1 -1
  63. package/dist/services/auth/index.js +3 -3
  64. package/dist/services/auth/index.js.map +1 -1
  65. package/dist/services/core-store.js +3 -3
  66. package/dist/services/core-store.js.map +1 -1
  67. package/dist/services/cron.js +3 -3
  68. package/dist/services/cron.js.map +1 -1
  69. package/dist/services/document-service/attributes/index.js +2 -2
  70. package/dist/services/document-service/attributes/index.js.map +1 -1
  71. package/dist/services/document-service/attributes/transforms.js +3 -3
  72. package/dist/services/document-service/attributes/transforms.js.map +1 -1
  73. package/dist/services/document-service/components.js +15 -15
  74. package/dist/services/document-service/components.js.map +1 -1
  75. package/dist/services/document-service/draft-and-publish.js +16 -16
  76. package/dist/services/document-service/draft-and-publish.js.map +1 -1
  77. package/dist/services/document-service/entries.js +5 -5
  78. package/dist/services/document-service/entries.js.map +1 -1
  79. package/dist/services/document-service/internationalization.js +9 -9
  80. package/dist/services/document-service/internationalization.js.map +1 -1
  81. package/dist/services/document-service/params.js +2 -2
  82. package/dist/services/document-service/params.js.map +1 -1
  83. package/dist/services/document-service/repository.js +9 -9
  84. package/dist/services/document-service/repository.js.map +1 -1
  85. package/dist/services/document-service/transform/id-transform.js +2 -2
  86. package/dist/services/document-service/transform/id-transform.js.map +1 -1
  87. package/dist/services/document-service/transform/query.js +3 -3
  88. package/dist/services/document-service/transform/query.js.map +1 -1
  89. package/dist/services/document-service/transform/relations/extract/data-ids.js +2 -2
  90. package/dist/services/document-service/transform/relations/extract/data-ids.js.map +1 -1
  91. package/dist/services/document-service/transform/relations/transform/data-ids.js +2 -2
  92. package/dist/services/document-service/transform/relations/transform/data-ids.js.map +1 -1
  93. package/dist/services/document-service/transform/relations/utils/dp.js +2 -2
  94. package/dist/services/document-service/transform/relations/utils/dp.js.map +1 -1
  95. package/dist/services/document-service/transform/relations/utils/map-relation.js +6 -6
  96. package/dist/services/document-service/transform/relations/utils/map-relation.js.map +1 -1
  97. package/dist/services/entity-validator/index.js +19 -19
  98. package/dist/services/entity-validator/index.js.map +1 -1
  99. package/dist/services/server/compose-endpoint.js +7 -7
  100. package/dist/services/server/compose-endpoint.js.map +1 -1
  101. package/dist/services/server/koa.js +3 -3
  102. package/dist/services/server/koa.js.map +1 -1
  103. package/dist/services/server/middleware.js +3 -3
  104. package/dist/services/server/middleware.js.map +1 -1
  105. package/dist/services/server/routing.js +2 -2
  106. package/dist/services/server/routing.js.map +1 -1
  107. package/dist/services/utils/dynamic-zones.js +5 -5
  108. package/dist/services/utils/dynamic-zones.js.map +1 -1
  109. package/dist/utils/cron.js +3 -3
  110. package/dist/utils/cron.js.map +1 -1
  111. package/dist/utils/filepath-to-prop-path.d.ts +1 -1
  112. package/dist/utils/filepath-to-prop-path.d.ts.map +1 -1
  113. package/dist/utils/filepath-to-prop-path.js +27 -6
  114. package/dist/utils/filepath-to-prop-path.js.map +1 -1
  115. package/dist/utils/filepath-to-prop-path.mjs +25 -5
  116. package/dist/utils/filepath-to-prop-path.mjs.map +1 -1
  117. package/dist/utils/is-initialized.js +3 -3
  118. package/dist/utils/is-initialized.js.map +1 -1
  119. package/dist/utils/startup-logger.js +4 -4
  120. package/dist/utils/startup-logger.js.map +1 -1
  121. package/dist/utils/startup-logger.mjs +3 -3
  122. package/dist/utils/startup-logger.mjs.map +1 -1
  123. package/dist/utils/transform-content-types-to-models.js +4 -4
  124. package/dist/utils/transform-content-types-to-models.js.map +1 -1
  125. package/dist/utils/transform-content-types-to-models.mjs +3 -3
  126. package/dist/utils/transform-content-types-to-models.mjs.map +1 -1
  127. package/package.json +13 -13
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- const _ = require("lodash/fp");
2
+ const fp = require("lodash/fp");
3
3
  const strapiUtils = require("@strapi/utils");
4
4
  const compose = require("koa-compose");
5
5
  const middleware = require("./middleware.js");
@@ -7,9 +7,9 @@ const policy = require("./policy.js");
7
7
  const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
8
8
  const compose__default = /* @__PURE__ */ _interopDefault(compose);
9
9
  const getMethod = (route) => {
10
- return _.trim(_.toLower(route.method));
10
+ return fp.trim(fp.toLower(route.method));
11
11
  };
12
- const getPath = (route) => _.trim(route.path);
12
+ const getPath = (route) => fp.trim(route.path);
13
13
  const createRouteInfoMiddleware = (routeInfo) => (ctx, next) => {
14
14
  const route = {
15
15
  ...routeInfo,
@@ -18,7 +18,7 @@ const createRouteInfoMiddleware = (routeInfo) => (ctx, next) => {
18
18
  ctx.state.route = route;
19
19
  return next();
20
20
  };
21
- const getAuthConfig = _.prop("config.auth");
21
+ const getAuthConfig = fp.prop("config.auth");
22
22
  const createAuthorizeMiddleware = (strapi) => async (ctx, next) => {
23
23
  const { auth, route } = ctx.state;
24
24
  const authService = strapi.get("auth");
@@ -43,7 +43,7 @@ const createAuthenticateMiddleware = (strapi) => async (ctx, next) => {
43
43
  };
44
44
  const returnBodyMiddleware = async (ctx, next) => {
45
45
  const values = await next();
46
- if (_.isNil(ctx.body) && !_.isNil(values)) {
46
+ if (fp.isNil(ctx.body) && !fp.isNil(values)) {
47
47
  ctx.body = values;
48
48
  }
49
49
  };
@@ -63,7 +63,7 @@ const createEndpointComposer = (strapi) => {
63
63
  policy.createPolicicesMiddleware(route, strapi),
64
64
  ...middlewares,
65
65
  returnBodyMiddleware,
66
- ..._.castArray(action)
66
+ ...fp.castArray(action)
67
67
  ]);
68
68
  router[method](path, routeHandler);
69
69
  } catch (error) {
@@ -101,7 +101,7 @@ const getAction = (route, strapi) => {
101
101
  if (Array.isArray(handler) || typeof handler === "function") {
102
102
  return handler;
103
103
  }
104
- const { controllerName, actionName } = extractHandlerParts(_.trim(handler));
104
+ const { controllerName, actionName } = extractHandlerParts(fp.trim(handler));
105
105
  const controller = getController(controllerName, { pluginName, apiName, type }, strapi);
106
106
  if (typeof controller[actionName] !== "function") {
107
107
  throw new Error(`Handler not found "${handler}"`);
@@ -1 +1 @@
1
- {"version":3,"file":"compose-endpoint.js","sources":["../../../src/services/server/compose-endpoint.ts"],"sourcesContent":["import { toLower, castArray, trim, prop, isNil } from 'lodash/fp';\nimport type { Core, UID } from '@strapi/types';\nimport { errors } from '@strapi/utils';\nimport Router from '@koa/router';\n\nimport compose from 'koa-compose';\nimport { resolveRouteMiddlewares } from './middleware';\nimport { createPolicicesMiddleware } from './policy';\n\nconst getMethod = (route: Core.Route) => {\n return trim(toLower(route.method)) as Lowercase<Core.Route['method']>;\n};\n\nconst getPath = (route: Core.Route) => trim(route.path);\n\nconst createRouteInfoMiddleware =\n (routeInfo: Core.Route): Core.MiddlewareHandler =>\n (ctx, next) => {\n const route = {\n ...routeInfo,\n config: routeInfo.config || {},\n };\n\n ctx.state.route = route;\n return next();\n };\n\nconst getAuthConfig = prop('config.auth');\n\nconst createAuthorizeMiddleware =\n (strapi: Core.Strapi): Core.MiddlewareHandler =>\n async (ctx, next) => {\n const { auth, route } = ctx.state;\n\n const authService = strapi.get('auth');\n\n try {\n await authService.verify(auth, getAuthConfig(route));\n\n return await next();\n } catch (error) {\n if (error instanceof errors.UnauthorizedError) {\n return ctx.unauthorized();\n }\n\n if (error instanceof errors.ForbiddenError) {\n // allow PolicyError as an exception to throw a publicly visible message in the API\n if (error instanceof errors.PolicyError) {\n throw error;\n }\n return ctx.forbidden();\n }\n\n throw error;\n }\n };\n\nconst createAuthenticateMiddleware =\n (strapi: Core.Strapi): Core.MiddlewareHandler =>\n async (ctx, next) => {\n return strapi.get('auth').authenticate(ctx, next);\n };\n\nconst returnBodyMiddleware: Core.MiddlewareHandler = async (ctx, next) => {\n const values = await next();\n\n if (isNil(ctx.body) && !isNil(values)) {\n ctx.body = values;\n }\n};\n\nexport default (strapi: Core.Strapi) => {\n const authenticate = createAuthenticateMiddleware(strapi);\n const authorize = createAuthorizeMiddleware(strapi);\n\n return (route: Core.Route, { router }: { router: Router }) => {\n try {\n const method = getMethod(route);\n const path = getPath(route);\n\n const middlewares = resolveRouteMiddlewares(route, strapi);\n\n const action = getAction(route, strapi);\n\n const routeHandler = compose([\n createRouteInfoMiddleware(route),\n authenticate,\n authorize,\n createPolicicesMiddleware(route, strapi),\n ...middlewares,\n returnBodyMiddleware,\n ...castArray(action),\n ]);\n\n router[method](path, routeHandler);\n } catch (error) {\n if (error instanceof Error) {\n error.message = `Error creating endpoint ${route.method} ${route.path}: ${error.message}`;\n }\n\n throw error;\n }\n };\n};\n\nconst getController = (\n name: string,\n { pluginName, apiName }: Core.RouteInfo,\n strapi: Core.Strapi\n) => {\n let ctrl: Core.Controller | undefined;\n\n if (pluginName) {\n if (pluginName === 'admin') {\n ctrl = strapi.controller(`admin::${name}`);\n } else {\n ctrl = strapi.plugin(pluginName).controller(name);\n }\n } else if (apiName) {\n ctrl = strapi.controller(`api::${apiName}.${name}`);\n }\n\n if (!ctrl) {\n return strapi.controller(name as UID.Controller);\n }\n\n return ctrl;\n};\n\nconst extractHandlerParts = (name: string) => {\n const controllerName = name.slice(0, name.lastIndexOf('.'));\n const actionName = name.slice(name.lastIndexOf('.') + 1);\n\n return { controllerName, actionName };\n};\n\nconst getAction = (route: Core.Route, strapi: Core.Strapi) => {\n const { handler, info } = route;\n const { pluginName, apiName, type } = info ?? {};\n\n if (Array.isArray(handler) || typeof handler === 'function') {\n return handler;\n }\n\n const { controllerName, actionName } = extractHandlerParts(trim(handler));\n\n const controller = getController(controllerName, { pluginName, apiName, type }, strapi);\n\n if (typeof controller[actionName] !== 'function') {\n throw new Error(`Handler not found \"${handler}\"`);\n }\n\n if (Symbol.for('__type__') in controller[actionName]) {\n (controller[actionName] as any)[Symbol.for('__type__')].push(type);\n } else {\n (controller[actionName] as any)[Symbol.for('__type__')] = [type];\n }\n\n return controller[actionName].bind(controller);\n};\n"],"names":["trim","toLower","prop","errors","isNil","resolveRouteMiddlewares","compose","createPolicicesMiddleware","castArray"],"mappings":"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"}
1
+ {"version":3,"file":"compose-endpoint.js","sources":["../../../src/services/server/compose-endpoint.ts"],"sourcesContent":["import { toLower, castArray, trim, prop, isNil } from 'lodash/fp';\nimport type { Core, UID } from '@strapi/types';\nimport { errors } from '@strapi/utils';\nimport Router from '@koa/router';\n\nimport compose from 'koa-compose';\nimport { resolveRouteMiddlewares } from './middleware';\nimport { createPolicicesMiddleware } from './policy';\n\nconst getMethod = (route: Core.Route) => {\n return trim(toLower(route.method)) as Lowercase<Core.Route['method']>;\n};\n\nconst getPath = (route: Core.Route) => trim(route.path);\n\nconst createRouteInfoMiddleware =\n (routeInfo: Core.Route): Core.MiddlewareHandler =>\n (ctx, next) => {\n const route = {\n ...routeInfo,\n config: routeInfo.config || {},\n };\n\n ctx.state.route = route;\n return next();\n };\n\nconst getAuthConfig = prop('config.auth');\n\nconst createAuthorizeMiddleware =\n (strapi: Core.Strapi): Core.MiddlewareHandler =>\n async (ctx, next) => {\n const { auth, route } = ctx.state;\n\n const authService = strapi.get('auth');\n\n try {\n await authService.verify(auth, getAuthConfig(route));\n\n return await next();\n } catch (error) {\n if (error instanceof errors.UnauthorizedError) {\n return ctx.unauthorized();\n }\n\n if (error instanceof errors.ForbiddenError) {\n // allow PolicyError as an exception to throw a publicly visible message in the API\n if (error instanceof errors.PolicyError) {\n throw error;\n }\n return ctx.forbidden();\n }\n\n throw error;\n }\n };\n\nconst createAuthenticateMiddleware =\n (strapi: Core.Strapi): Core.MiddlewareHandler =>\n async (ctx, next) => {\n return strapi.get('auth').authenticate(ctx, next);\n };\n\nconst returnBodyMiddleware: Core.MiddlewareHandler = async (ctx, next) => {\n const values = await next();\n\n if (isNil(ctx.body) && !isNil(values)) {\n ctx.body = values;\n }\n};\n\nexport default (strapi: Core.Strapi) => {\n const authenticate = createAuthenticateMiddleware(strapi);\n const authorize = createAuthorizeMiddleware(strapi);\n\n return (route: Core.Route, { router }: { router: Router }) => {\n try {\n const method = getMethod(route);\n const path = getPath(route);\n\n const middlewares = resolveRouteMiddlewares(route, strapi);\n\n const action = getAction(route, strapi);\n\n const routeHandler = compose([\n createRouteInfoMiddleware(route),\n authenticate,\n authorize,\n createPolicicesMiddleware(route, strapi),\n ...middlewares,\n returnBodyMiddleware,\n ...castArray(action),\n ]);\n\n router[method](path, routeHandler);\n } catch (error) {\n if (error instanceof Error) {\n error.message = `Error creating endpoint ${route.method} ${route.path}: ${error.message}`;\n }\n\n throw error;\n }\n };\n};\n\nconst getController = (\n name: string,\n { pluginName, apiName }: Core.RouteInfo,\n strapi: Core.Strapi\n) => {\n let ctrl: Core.Controller | undefined;\n\n if (pluginName) {\n if (pluginName === 'admin') {\n ctrl = strapi.controller(`admin::${name}`);\n } else {\n ctrl = strapi.plugin(pluginName).controller(name);\n }\n } else if (apiName) {\n ctrl = strapi.controller(`api::${apiName}.${name}`);\n }\n\n if (!ctrl) {\n return strapi.controller(name as UID.Controller);\n }\n\n return ctrl;\n};\n\nconst extractHandlerParts = (name: string) => {\n const controllerName = name.slice(0, name.lastIndexOf('.'));\n const actionName = name.slice(name.lastIndexOf('.') + 1);\n\n return { controllerName, actionName };\n};\n\nconst getAction = (route: Core.Route, strapi: Core.Strapi) => {\n const { handler, info } = route;\n const { pluginName, apiName, type } = info ?? {};\n\n if (Array.isArray(handler) || typeof handler === 'function') {\n return handler;\n }\n\n const { controllerName, actionName } = extractHandlerParts(trim(handler));\n\n const controller = getController(controllerName, { pluginName, apiName, type }, strapi);\n\n if (typeof controller[actionName] !== 'function') {\n throw new Error(`Handler not found \"${handler}\"`);\n }\n\n if (Symbol.for('__type__') in controller[actionName]) {\n (controller[actionName] as any)[Symbol.for('__type__')].push(type);\n } else {\n (controller[actionName] as any)[Symbol.for('__type__')] = [type];\n }\n\n return controller[actionName].bind(controller);\n};\n"],"names":["trim","toLower","prop","errors","isNil","resolveRouteMiddlewares","compose","createPolicicesMiddleware","castArray"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- const _ = require("lodash/fp");
2
+ const fp = require("lodash/fp");
3
3
  const Koa = require("koa");
4
4
  const createError = require("http-errors");
5
5
  const delegate = require("delegates");
@@ -14,7 +14,7 @@ const addCustomMethods = (app) => {
14
14
  const delegator = delegate__default.default(app.context, "response");
15
15
  statuses__default.default.codes.filter((code) => code >= 400 && code < 600).forEach((code) => {
16
16
  const name = statuses__default.default(code);
17
- const camelCasedName = _.camelCase(name);
17
+ const camelCasedName = fp.camelCase(name);
18
18
  app.response[camelCasedName] = function responseCode(message = name, details = {}) {
19
19
  const httpError = createError__default.default(code, message, { details });
20
20
  const { status, body } = errors.formatHttpError(httpError);
@@ -32,7 +32,7 @@ const addCustomMethods = (app) => {
32
32
  this.body = data;
33
33
  };
34
34
  app.response.deleted = function deleted(data) {
35
- if (_.isNil(data)) {
35
+ if (fp.isNil(data)) {
36
36
  this.status = 204;
37
37
  } else {
38
38
  this.status = 200;
@@ -1 +1 @@
1
- {"version":3,"file":"koa.js","sources":["../../../src/services/server/koa.ts"],"sourcesContent":["import { isNil, camelCase } from 'lodash/fp';\nimport Koa from 'koa';\nimport createError from 'http-errors';\nimport delegate from 'delegates';\nimport statuses from 'statuses';\nimport { formatHttpError } from '../errors';\n\ndeclare module 'koa' {\n interface BaseResponse {\n send: (data: any, status?: number) => void;\n created: (data: any) => void;\n deleted: (data: any) => void;\n _explicitStatus: boolean;\n [key: string]: (message: string, details?: unknown) => void;\n }\n}\n\nconst addCustomMethods = (app: Koa) => {\n const delegator = delegate(app.context, 'response');\n\n /* errors */\n statuses.codes\n .filter((code) => code >= 400 && code < 600)\n .forEach((code) => {\n const name = statuses(code);\n\n const camelCasedName = camelCase(name);\n app.response[camelCasedName] = function responseCode(message = name, details = {}) {\n const httpError = createError(code, message, { details });\n const { status, body } = formatHttpError(httpError);\n this.status = status;\n this.body = body;\n };\n delegator.method(camelCasedName);\n });\n\n /* send, created, deleted */\n app.response.send = function send(data, status = 200) {\n this.status = status;\n this.body = data;\n };\n\n app.response.created = function created(data) {\n this.status = 201;\n this.body = data;\n };\n\n app.response.deleted = function deleted(data) {\n if (isNil(data)) {\n this.status = 204;\n } else {\n this.status = 200;\n this.body = data;\n }\n };\n\n delegator.method('send').method('created').method('deleted');\n\n return app;\n};\n\nconst createKoaApp = ({ proxy, keys }: { proxy: boolean; keys: string[] }) => {\n const app = new Koa({ proxy });\n app.keys = keys;\n\n addCustomMethods(app);\n\n return app;\n};\n\nexport default createKoaApp;\n"],"names":["delegate","statuses","camelCase","createError","formatHttpError","isNil","Koa"],"mappings":";;;;;;;;;;;;AAiBA,MAAM,mBAAmB,CAAC,QAAa;AACrC,QAAM,YAAYA,kBAAA,QAAS,IAAI,SAAS,UAAU;AAGzCC,oBAAAA,QAAA,MACN,OAAO,CAAC,SAAS,QAAQ,OAAO,OAAO,GAAG,EAC1C,QAAQ,CAAC,SAAS;AACX,UAAA,OAAOA,0BAAS,IAAI;AAEpB,UAAA,iBAAiBC,YAAU,IAAI;AACjC,QAAA,SAAS,cAAc,IAAI,SAAS,aAAa,UAAU,MAAM,UAAU,IAAI;AACjF,YAAM,YAAYC,qBAAAA,QAAY,MAAM,SAAS,EAAE,SAAS;AACxD,YAAM,EAAE,QAAQ,KAAK,IAAIC,uBAAgB,SAAS;AAClD,WAAK,SAAS;AACd,WAAK,OAAO;AAAA,IAAA;AAEd,cAAU,OAAO,cAAc;AAAA,EAAA,CAChC;AAGH,MAAI,SAAS,OAAO,SAAS,KAAK,MAAM,SAAS,KAAK;AACpD,SAAK,SAAS;AACd,SAAK,OAAO;AAAA,EAAA;AAGd,MAAI,SAAS,UAAU,SAAS,QAAQ,MAAM;AAC5C,SAAK,SAAS;AACd,SAAK,OAAO;AAAA,EAAA;AAGd,MAAI,SAAS,UAAU,SAAS,QAAQ,MAAM;AACxC,QAAAC,EAAAA,MAAM,IAAI,GAAG;AACf,WAAK,SAAS;AAAA,IAAA,OACT;AACL,WAAK,SAAS;AACd,WAAK,OAAO;AAAA,IACd;AAAA,EAAA;AAGF,YAAU,OAAO,MAAM,EAAE,OAAO,SAAS,EAAE,OAAO,SAAS;AAEpD,SAAA;AACT;AAEA,MAAM,eAAe,CAAC,EAAE,OAAO,WAA+C;AAC5E,QAAM,MAAM,IAAIC,aAAAA,QAAI,EAAE,MAAO,CAAA;AAC7B,MAAI,OAAO;AAEX,mBAAiB,GAAG;AAEb,SAAA;AACT;;"}
1
+ {"version":3,"file":"koa.js","sources":["../../../src/services/server/koa.ts"],"sourcesContent":["import { isNil, camelCase } from 'lodash/fp';\nimport Koa from 'koa';\nimport createError from 'http-errors';\nimport delegate from 'delegates';\nimport statuses from 'statuses';\nimport { formatHttpError } from '../errors';\n\ndeclare module 'koa' {\n interface BaseResponse {\n send: (data: any, status?: number) => void;\n created: (data: any) => void;\n deleted: (data: any) => void;\n _explicitStatus: boolean;\n [key: string]: (message: string, details?: unknown) => void;\n }\n}\n\nconst addCustomMethods = (app: Koa) => {\n const delegator = delegate(app.context, 'response');\n\n /* errors */\n statuses.codes\n .filter((code) => code >= 400 && code < 600)\n .forEach((code) => {\n const name = statuses(code);\n\n const camelCasedName = camelCase(name);\n app.response[camelCasedName] = function responseCode(message = name, details = {}) {\n const httpError = createError(code, message, { details });\n const { status, body } = formatHttpError(httpError);\n this.status = status;\n this.body = body;\n };\n delegator.method(camelCasedName);\n });\n\n /* send, created, deleted */\n app.response.send = function send(data, status = 200) {\n this.status = status;\n this.body = data;\n };\n\n app.response.created = function created(data) {\n this.status = 201;\n this.body = data;\n };\n\n app.response.deleted = function deleted(data) {\n if (isNil(data)) {\n this.status = 204;\n } else {\n this.status = 200;\n this.body = data;\n }\n };\n\n delegator.method('send').method('created').method('deleted');\n\n return app;\n};\n\nconst createKoaApp = ({ proxy, keys }: { proxy: boolean; keys: string[] }) => {\n const app = new Koa({ proxy });\n app.keys = keys;\n\n addCustomMethods(app);\n\n return app;\n};\n\nexport default createKoaApp;\n"],"names":["delegate","statuses","camelCase","createError","formatHttpError","isNil","Koa"],"mappings":";;;;;;;;;;;;AAiBA,MAAM,mBAAmB,CAAC,QAAa;AACrC,QAAM,YAAYA,kBAAA,QAAS,IAAI,SAAS,UAAU;AAGzCC,oBAAAA,QAAA,MACN,OAAO,CAAC,SAAS,QAAQ,OAAO,OAAO,GAAG,EAC1C,QAAQ,CAAC,SAAS;AACX,UAAA,OAAOA,0BAAS,IAAI;AAEpB,UAAA,iBAAiBC,aAAU,IAAI;AACjC,QAAA,SAAS,cAAc,IAAI,SAAS,aAAa,UAAU,MAAM,UAAU,IAAI;AACjF,YAAM,YAAYC,qBAAAA,QAAY,MAAM,SAAS,EAAE,SAAS;AACxD,YAAM,EAAE,QAAQ,KAAK,IAAIC,uBAAgB,SAAS;AAClD,WAAK,SAAS;AACd,WAAK,OAAO;AAAA,IAAA;AAEd,cAAU,OAAO,cAAc;AAAA,EAAA,CAChC;AAGH,MAAI,SAAS,OAAO,SAAS,KAAK,MAAM,SAAS,KAAK;AACpD,SAAK,SAAS;AACd,SAAK,OAAO;AAAA,EAAA;AAGd,MAAI,SAAS,UAAU,SAAS,QAAQ,MAAM;AAC5C,SAAK,SAAS;AACd,SAAK,OAAO;AAAA,EAAA;AAGd,MAAI,SAAS,UAAU,SAAS,QAAQ,MAAM;AACxC,QAAAC,GAAAA,MAAM,IAAI,GAAG;AACf,WAAK,SAAS;AAAA,IAAA,OACT;AACL,WAAK,SAAS;AACd,WAAK,OAAO;AAAA,IACd;AAAA,EAAA;AAGF,YAAU,OAAO,MAAM,EAAE,OAAO,SAAS,EAAE,OAAO,SAAS;AAEpD,SAAA;AACT;AAEA,MAAM,eAAe,CAAC,EAAE,OAAO,WAA+C;AAC5E,QAAM,MAAM,IAAIC,aAAAA,QAAI,EAAE,MAAO,CAAA;AAC7B,MAAI,OAAO;AAEX,mBAAiB,GAAG;AAEb,SAAA;AACT;;"}
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const path = require("path");
4
- const _ = require("lodash/fp");
4
+ const fp = require("lodash/fp");
5
5
  const strapiUtils = require("@strapi/utils");
6
6
  const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
7
7
  const path__default = /* @__PURE__ */ _interopDefault(path);
@@ -16,13 +16,13 @@ const instantiateMiddleware = (middlewareFactory, name, config, strapi) => {
16
16
  };
17
17
  const resolveRouteMiddlewares = (route, strapi) => {
18
18
  const middlewaresConfig = route?.config?.middlewares ?? [];
19
- if (!_.isArray(middlewaresConfig)) {
19
+ if (!fp.isArray(middlewaresConfig)) {
20
20
  throw new Error("Route middlewares config must be an array");
21
21
  }
22
22
  const middlewares = resolveMiddlewares(middlewaresConfig, strapi);
23
23
  return middlewares.map(({ handler }) => handler);
24
24
  };
25
- const dummyMiddleware = (_2, next) => next();
25
+ const dummyMiddleware = (_, next) => next();
26
26
  const resolveMiddlewares = (config, strapi) => {
27
27
  const middlewares = [];
28
28
  for (const item of config) {
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.js","sources":["../../../src/services/server/middleware.ts"],"sourcesContent":["import path from 'path';\nimport { isArray } from 'lodash/fp';\nimport { importDefault } from '@strapi/utils';\nimport type { Core } from '@strapi/types';\n\nconst instantiateMiddleware = (\n middlewareFactory: Core.MiddlewareFactory,\n name: string,\n config: unknown,\n strapi: Core.Strapi\n) => {\n try {\n return middlewareFactory(config, { strapi });\n } catch (e) {\n if (e instanceof Error) {\n throw new Error(`Middleware \"${name}\": ${e.message}`);\n }\n }\n};\n\nconst resolveRouteMiddlewares = (route: Core.Route, strapi: Core.Strapi) => {\n const middlewaresConfig = route?.config?.middlewares ?? [];\n\n if (!isArray(middlewaresConfig)) {\n throw new Error('Route middlewares config must be an array');\n }\n\n const middlewares = resolveMiddlewares(middlewaresConfig, strapi);\n\n return middlewares.map(({ handler }) => handler);\n};\n\nconst dummyMiddleware: Core.MiddlewareHandler = (_, next) => next();\n\n/**\n * Initialize every configured middlewares\n */\nconst resolveMiddlewares = (\n config: Array<Core.MiddlewareName | Core.MiddlewareConfig | Core.MiddlewareHandler>,\n strapi: Core.Strapi\n) => {\n const middlewares: {\n name: string | null;\n handler: Core.MiddlewareHandler;\n }[] = [];\n\n for (const item of config) {\n if (typeof item === 'function') {\n middlewares.push({\n name: null,\n handler: item,\n });\n\n continue;\n }\n\n if (typeof item === 'string') {\n const middlewareFactory = strapi.middleware(item);\n\n if (!middlewareFactory) {\n throw new Error(`Middleware ${item} not found.`);\n }\n\n middlewares.push({\n name: item,\n handler: instantiateMiddleware(middlewareFactory, item, {}, strapi) ?? dummyMiddleware,\n });\n\n continue;\n }\n\n if (typeof item === 'object' && item !== null) {\n const { name, resolve, config = {} } = item;\n\n if (name) {\n const middlewareFactory = strapi.middleware(name);\n middlewares.push({\n name,\n handler:\n instantiateMiddleware(middlewareFactory, name, config, strapi) ?? dummyMiddleware,\n });\n\n continue;\n }\n\n if (resolve) {\n const resolvedMiddlewareFactory = resolveCustomMiddleware(resolve, strapi);\n middlewares.push({\n name: resolve,\n handler:\n instantiateMiddleware(resolvedMiddlewareFactory, resolve, config, strapi) ??\n dummyMiddleware,\n });\n\n continue;\n }\n\n throw new Error('Invalid middleware configuration. Missing name or resolve properties.');\n }\n\n throw new Error(\n 'Middleware config must either be a string or an object {name?: string, resolve?: string, config: any}.'\n );\n }\n\n return middlewares;\n};\n\n/**\n * Resolve middleware from package name or path\n */\nconst resolveCustomMiddleware = (resolve: string, strapi: Core.Strapi) => {\n let modulePath;\n\n try {\n modulePath = require.resolve(resolve);\n } catch (error) {\n if (error instanceof Error && 'code' in error && error.code === 'MODULE_NOT_FOUND') {\n modulePath = path.resolve(strapi.dirs.dist.root, resolve);\n } else {\n throw error;\n }\n }\n\n try {\n return importDefault(modulePath);\n } catch (err) {\n throw new Error(`Could not load middleware \"${modulePath}\".`);\n }\n};\n\nexport { resolveRouteMiddlewares, resolveMiddlewares };\n"],"names":["isArray","_","config","path","importDefault"],"mappings":";;;;;;;AAKA,MAAM,wBAAwB,CAC5B,mBACA,MACA,QACA,WACG;AACC,MAAA;AACF,WAAO,kBAAkB,QAAQ,EAAE,OAAQ,CAAA;AAAA,WACpC,GAAG;AACV,QAAI,aAAa,OAAO;AACtB,YAAM,IAAI,MAAM,eAAe,IAAI,MAAM,EAAE,OAAO,EAAE;AAAA,IACtD;AAAA,EACF;AACF;AAEM,MAAA,0BAA0B,CAAC,OAAmB,WAAwB;AAC1E,QAAM,oBAAoB,OAAO,QAAQ,eAAe,CAAA;AAEpD,MAAA,CAACA,EAAAA,QAAQ,iBAAiB,GAAG;AACzB,UAAA,IAAI,MAAM,2CAA2C;AAAA,EAC7D;AAEM,QAAA,cAAc,mBAAmB,mBAAmB,MAAM;AAEhE,SAAO,YAAY,IAAI,CAAC,EAAE,cAAc,OAAO;AACjD;AAEA,MAAM,kBAA0C,CAACC,IAAG,SAAS,KAAK;AAK5D,MAAA,qBAAqB,CACzB,QACA,WACG;AACH,QAAM,cAGA,CAAA;AAEN,aAAW,QAAQ,QAAQ;AACrB,QAAA,OAAO,SAAS,YAAY;AAC9B,kBAAY,KAAK;AAAA,QACf,MAAM;AAAA,QACN,SAAS;AAAA,MAAA,CACV;AAED;AAAA,IACF;AAEI,QAAA,OAAO,SAAS,UAAU;AACtB,YAAA,oBAAoB,OAAO,WAAW,IAAI;AAEhD,UAAI,CAAC,mBAAmB;AACtB,cAAM,IAAI,MAAM,cAAc,IAAI,aAAa;AAAA,MACjD;AAEA,kBAAY,KAAK;AAAA,QACf,MAAM;AAAA,QACN,SAAS,sBAAsB,mBAAmB,MAAM,CAAC,GAAG,MAAM,KAAK;AAAA,MAAA,CACxE;AAED;AAAA,IACF;AAEA,QAAI,OAAO,SAAS,YAAY,SAAS,MAAM;AAC7C,YAAM,EAAE,MAAM,SAAS,QAAAC,UAAS,CAAA,EAAO,IAAA;AAEvC,UAAI,MAAM;AACF,cAAA,oBAAoB,OAAO,WAAW,IAAI;AAChD,oBAAY,KAAK;AAAA,UACf;AAAA,UACA,SACE,sBAAsB,mBAAmB,MAAMA,SAAQ,MAAM,KAAK;AAAA,QAAA,CACrE;AAED;AAAA,MACF;AAEA,UAAI,SAAS;AACL,cAAA,4BAA4B,wBAAwB,SAAS,MAAM;AACzE,oBAAY,KAAK;AAAA,UACf,MAAM;AAAA,UACN,SACE,sBAAsB,2BAA2B,SAASA,SAAQ,MAAM,KACxE;AAAA,QAAA,CACH;AAED;AAAA,MACF;AAEM,YAAA,IAAI,MAAM,uEAAuE;AAAA,IACzF;AAEA,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAAA,EAEJ;AAEO,SAAA;AACT;AAKA,MAAM,0BAA0B,CAAC,SAAiB,WAAwB;AACpE,MAAA;AAEA,MAAA;AACW,iBAAA,QAAQ,QAAQ,OAAO;AAAA,WAC7B,OAAO;AACd,QAAI,iBAAiB,SAAS,UAAU,SAAS,MAAM,SAAS,oBAAoB;AAClF,mBAAaC,cAAAA,QAAK,QAAQ,OAAO,KAAK,KAAK,MAAM,OAAO;AAAA,IAAA,OACnD;AACC,YAAA;AAAA,IACR;AAAA,EACF;AAEI,MAAA;AACF,WAAOC,YAAAA,cAAc,UAAU;AAAA,WACxB,KAAK;AACZ,UAAM,IAAI,MAAM,8BAA8B,UAAU,IAAI;AAAA,EAC9D;AACF;;;"}
1
+ {"version":3,"file":"middleware.js","sources":["../../../src/services/server/middleware.ts"],"sourcesContent":["import path from 'path';\nimport { isArray } from 'lodash/fp';\nimport { importDefault } from '@strapi/utils';\nimport type { Core } from '@strapi/types';\n\nconst instantiateMiddleware = (\n middlewareFactory: Core.MiddlewareFactory,\n name: string,\n config: unknown,\n strapi: Core.Strapi\n) => {\n try {\n return middlewareFactory(config, { strapi });\n } catch (e) {\n if (e instanceof Error) {\n throw new Error(`Middleware \"${name}\": ${e.message}`);\n }\n }\n};\n\nconst resolveRouteMiddlewares = (route: Core.Route, strapi: Core.Strapi) => {\n const middlewaresConfig = route?.config?.middlewares ?? [];\n\n if (!isArray(middlewaresConfig)) {\n throw new Error('Route middlewares config must be an array');\n }\n\n const middlewares = resolveMiddlewares(middlewaresConfig, strapi);\n\n return middlewares.map(({ handler }) => handler);\n};\n\nconst dummyMiddleware: Core.MiddlewareHandler = (_, next) => next();\n\n/**\n * Initialize every configured middlewares\n */\nconst resolveMiddlewares = (\n config: Array<Core.MiddlewareName | Core.MiddlewareConfig | Core.MiddlewareHandler>,\n strapi: Core.Strapi\n) => {\n const middlewares: {\n name: string | null;\n handler: Core.MiddlewareHandler;\n }[] = [];\n\n for (const item of config) {\n if (typeof item === 'function') {\n middlewares.push({\n name: null,\n handler: item,\n });\n\n continue;\n }\n\n if (typeof item === 'string') {\n const middlewareFactory = strapi.middleware(item);\n\n if (!middlewareFactory) {\n throw new Error(`Middleware ${item} not found.`);\n }\n\n middlewares.push({\n name: item,\n handler: instantiateMiddleware(middlewareFactory, item, {}, strapi) ?? dummyMiddleware,\n });\n\n continue;\n }\n\n if (typeof item === 'object' && item !== null) {\n const { name, resolve, config = {} } = item;\n\n if (name) {\n const middlewareFactory = strapi.middleware(name);\n middlewares.push({\n name,\n handler:\n instantiateMiddleware(middlewareFactory, name, config, strapi) ?? dummyMiddleware,\n });\n\n continue;\n }\n\n if (resolve) {\n const resolvedMiddlewareFactory = resolveCustomMiddleware(resolve, strapi);\n middlewares.push({\n name: resolve,\n handler:\n instantiateMiddleware(resolvedMiddlewareFactory, resolve, config, strapi) ??\n dummyMiddleware,\n });\n\n continue;\n }\n\n throw new Error('Invalid middleware configuration. Missing name or resolve properties.');\n }\n\n throw new Error(\n 'Middleware config must either be a string or an object {name?: string, resolve?: string, config: any}.'\n );\n }\n\n return middlewares;\n};\n\n/**\n * Resolve middleware from package name or path\n */\nconst resolveCustomMiddleware = (resolve: string, strapi: Core.Strapi) => {\n let modulePath;\n\n try {\n modulePath = require.resolve(resolve);\n } catch (error) {\n if (error instanceof Error && 'code' in error && error.code === 'MODULE_NOT_FOUND') {\n modulePath = path.resolve(strapi.dirs.dist.root, resolve);\n } else {\n throw error;\n }\n }\n\n try {\n return importDefault(modulePath);\n } catch (err) {\n throw new Error(`Could not load middleware \"${modulePath}\".`);\n }\n};\n\nexport { resolveRouteMiddlewares, resolveMiddlewares };\n"],"names":["isArray","config","path","importDefault"],"mappings":";;;;;;;AAKA,MAAM,wBAAwB,CAC5B,mBACA,MACA,QACA,WACG;AACC,MAAA;AACF,WAAO,kBAAkB,QAAQ,EAAE,OAAQ,CAAA;AAAA,WACpC,GAAG;AACV,QAAI,aAAa,OAAO;AACtB,YAAM,IAAI,MAAM,eAAe,IAAI,MAAM,EAAE,OAAO,EAAE;AAAA,IACtD;AAAA,EACF;AACF;AAEM,MAAA,0BAA0B,CAAC,OAAmB,WAAwB;AAC1E,QAAM,oBAAoB,OAAO,QAAQ,eAAe,CAAA;AAEpD,MAAA,CAACA,GAAAA,QAAQ,iBAAiB,GAAG;AACzB,UAAA,IAAI,MAAM,2CAA2C;AAAA,EAC7D;AAEM,QAAA,cAAc,mBAAmB,mBAAmB,MAAM;AAEhE,SAAO,YAAY,IAAI,CAAC,EAAE,cAAc,OAAO;AACjD;AAEA,MAAM,kBAA0C,CAAC,GAAG,SAAS,KAAK;AAK5D,MAAA,qBAAqB,CACzB,QACA,WACG;AACH,QAAM,cAGA,CAAA;AAEN,aAAW,QAAQ,QAAQ;AACrB,QAAA,OAAO,SAAS,YAAY;AAC9B,kBAAY,KAAK;AAAA,QACf,MAAM;AAAA,QACN,SAAS;AAAA,MAAA,CACV;AAED;AAAA,IACF;AAEI,QAAA,OAAO,SAAS,UAAU;AACtB,YAAA,oBAAoB,OAAO,WAAW,IAAI;AAEhD,UAAI,CAAC,mBAAmB;AACtB,cAAM,IAAI,MAAM,cAAc,IAAI,aAAa;AAAA,MACjD;AAEA,kBAAY,KAAK;AAAA,QACf,MAAM;AAAA,QACN,SAAS,sBAAsB,mBAAmB,MAAM,CAAC,GAAG,MAAM,KAAK;AAAA,MAAA,CACxE;AAED;AAAA,IACF;AAEA,QAAI,OAAO,SAAS,YAAY,SAAS,MAAM;AAC7C,YAAM,EAAE,MAAM,SAAS,QAAAC,UAAS,CAAA,EAAO,IAAA;AAEvC,UAAI,MAAM;AACF,cAAA,oBAAoB,OAAO,WAAW,IAAI;AAChD,oBAAY,KAAK;AAAA,UACf;AAAA,UACA,SACE,sBAAsB,mBAAmB,MAAMA,SAAQ,MAAM,KAAK;AAAA,QAAA,CACrE;AAED;AAAA,MACF;AAEA,UAAI,SAAS;AACL,cAAA,4BAA4B,wBAAwB,SAAS,MAAM;AACzE,oBAAY,KAAK;AAAA,UACf,MAAM;AAAA,UACN,SACE,sBAAsB,2BAA2B,SAASA,SAAQ,MAAM,KACxE;AAAA,QAAA,CACH;AAED;AAAA,MACF;AAEM,YAAA,IAAI,MAAM,uEAAuE;AAAA,IACzF;AAEA,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAAA,EAEJ;AAEO,SAAA;AACT;AAKA,MAAM,0BAA0B,CAAC,SAAiB,WAAwB;AACpE,MAAA;AAEA,MAAA;AACW,iBAAA,QAAQ,QAAQ,OAAO;AAAA,WAC7B,OAAO;AACd,QAAI,iBAAiB,SAAS,UAAU,SAAS,MAAM,SAAS,oBAAoB;AAClF,mBAAaC,cAAAA,QAAK,QAAQ,OAAO,KAAK,KAAK,MAAM,OAAO;AAAA,IAAA,OACnD;AACC,YAAA;AAAA,IACR;AAAA,EACF;AAEI,MAAA;AACF,WAAOC,YAAAA,cAAc,UAAU;AAAA,WACxB,KAAK;AACZ,UAAM,IAAI,MAAM,8BAA8B,UAAU,IAAI;AAAA,EAC9D;AACF;;;"}
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const Router = require("@koa/router");
4
- const _ = require("lodash/fp");
4
+ const fp = require("lodash/fp");
5
5
  const strapiUtils = require("@strapi/utils");
6
6
  const composeEndpoint = require("./compose-endpoint.js");
7
7
  const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
@@ -76,7 +76,7 @@ const createRouteManager = (strapi, opts = {}) => {
76
76
  } else if (routes.routes) {
77
77
  const subRouter = new Router__default.default({ prefix: routes.prefix });
78
78
  routes.routes.forEach((route) => {
79
- const hasPrefix = _.has("prefix", route.config);
79
+ const hasPrefix = fp.has("prefix", route.config);
80
80
  createRoute(route, hasPrefix ? router : subRouter);
81
81
  });
82
82
  return router.use(subRouter.routes(), subRouter.allowedMethods());
@@ -1 +1 @@
1
- {"version":3,"file":"routing.js","sources":["../../../src/services/server/routing.ts"],"sourcesContent":["import Router from '@koa/router';\nimport { has } from 'lodash/fp';\nimport { yup } from '@strapi/utils';\nimport type { Core } from '@strapi/types';\n\nimport createEndpointComposer from './compose-endpoint';\n\nconst policyOrMiddlewareSchema = yup.lazy((value) => {\n if (typeof value === 'string') {\n return yup.string().required();\n }\n\n if (typeof value === 'function') {\n return yup.mixed().isFunction();\n }\n\n return yup.object({\n name: yup.string().required(),\n options: yup.object().notRequired(), // any options\n });\n});\n\nconst routeSchema = yup.object({\n method: yup.string().oneOf(['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'ALL']).required(),\n path: yup.string().required(),\n handler: yup.lazy((value) => {\n if (typeof value === 'string') {\n return yup.string().required();\n }\n\n if (Array.isArray(value)) {\n return yup.array().required();\n }\n\n return yup.mixed().isFunction().required();\n }),\n config: yup\n .object({\n auth: yup.lazy((value) => {\n if (value === false) {\n return yup.boolean().required();\n }\n\n return yup.object({\n scope: yup.array().of(yup.string()).required(),\n });\n }),\n policies: yup\n .array()\n // FIXME: fixed in yup v1\n .of(policyOrMiddlewareSchema as any)\n .notRequired(),\n middlewares: yup\n .array()\n // FIXME: fixed in yup v1\n .of(policyOrMiddlewareSchema as any)\n .notRequired(),\n })\n .notRequired(),\n});\n\nconst validateRouteConfig = (routeConfig: Core.RouteInput) => {\n try {\n return routeSchema.validateSync(routeConfig, {\n strict: true,\n abortEarly: false,\n stripUnknown: true,\n });\n } catch (error) {\n if (error instanceof yup.ValidationError) {\n throw new Error(`Invalid route config ${error.message}`);\n }\n }\n};\n\nconst createRouteManager = (strapi: Core.Strapi, opts: { type?: string } = {}) => {\n const { type } = opts;\n\n const composeEndpoint = createEndpointComposer(strapi);\n\n const createRoute = (route: Core.RouteInput, router: Router) => {\n validateRouteConfig(route);\n\n // NOTE: the router type is used to tag controller actions and for authentication / authorization so we need to pass this info down to the route level\n const routeWithInfo = Object.assign(route, {\n info: {\n ...(route.info ?? {}),\n type: type || 'api',\n },\n });\n\n composeEndpoint(routeWithInfo, { router });\n };\n\n const addRoutes = (routes: Core.Router | Core.RouteInput[], router: Router) => {\n if (Array.isArray(routes)) {\n routes.forEach((route) => createRoute(route, router));\n } else if (routes.routes) {\n const subRouter = new Router({ prefix: routes.prefix });\n\n routes.routes.forEach((route) => {\n const hasPrefix = has('prefix', route.config);\n createRoute(route, hasPrefix ? router : subRouter);\n });\n\n return router.use(subRouter.routes(), subRouter.allowedMethods());\n }\n };\n\n return {\n addRoutes,\n };\n};\n\nexport { validateRouteConfig, createRouteManager };\n"],"names":["yup","composeEndpoint","createEndpointComposer","Router","has"],"mappings":";;;;;;;;AAOA,MAAM,2BAA2BA,YAAA,IAAI,KAAK,CAAC,UAAU;AAC/C,MAAA,OAAO,UAAU,UAAU;AACtB,WAAAA,gBAAI,SAAS;EACtB;AAEI,MAAA,OAAO,UAAU,YAAY;AACxB,WAAAA,gBAAI,QAAQ;EACrB;AAEA,SAAOA,YAAAA,IAAI,OAAO;AAAA,IAChB,MAAMA,YAAA,IAAI,OAAO,EAAE,SAAS;AAAA,IAC5B,SAASA,YAAA,IAAI,OAAO,EAAE,YAAY;AAAA;AAAA,EAAA,CACnC;AACH,CAAC;AAED,MAAM,cAAcA,gBAAI,OAAO;AAAA,EAC7B,QAAQA,YAAAA,IAAI,SAAS,MAAM,CAAC,OAAO,QAAQ,OAAO,SAAS,UAAU,KAAK,CAAC,EAAE,SAAS;AAAA,EACtF,MAAMA,YAAA,IAAI,OAAO,EAAE,SAAS;AAAA,EAC5B,SAASA,YAAA,IAAI,KAAK,CAAC,UAAU;AACvB,QAAA,OAAO,UAAU,UAAU;AACtB,aAAAA,gBAAI,SAAS;IACtB;AAEI,QAAA,MAAM,QAAQ,KAAK,GAAG;AACjB,aAAAA,gBAAI,QAAQ;IACrB;AAEA,WAAOA,YAAI,IAAA,MAAA,EAAQ,aAAa,SAAS;AAAA,EAAA,CAC1C;AAAA,EACD,QAAQA,gBACL,OAAO;AAAA,IACN,MAAMA,YAAA,IAAI,KAAK,CAAC,UAAU;AACxB,UAAI,UAAU,OAAO;AACZ,eAAAA,gBAAI,UAAU;MACvB;AAEA,aAAOA,YAAAA,IAAI,OAAO;AAAA,QAChB,OAAOA,YAAAA,IAAI,QAAQ,GAAGA,YAAAA,IAAI,OAAA,CAAQ,EAAE,SAAS;AAAA,MAAA,CAC9C;AAAA,IAAA,CACF;AAAA,IACD,UAAUA,YACP,IAAA,MAAA,EAEA,GAAG,wBAA+B,EAClC,YAAY;AAAA,IACf,aAAaA,YACV,IAAA,MAAA,EAEA,GAAG,wBAA+B,EAClC,YAAY;AAAA,EAChB,CAAA,EACA,YAAY;AACjB,CAAC;AAEK,MAAA,sBAAsB,CAAC,gBAAiC;AACxD,MAAA;AACK,WAAA,YAAY,aAAa,aAAa;AAAA,MAC3C,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,cAAc;AAAA,IAAA,CACf;AAAA,WACM,OAAO;AACV,QAAA,iBAAiBA,gBAAI,iBAAiB;AACxC,YAAM,IAAI,MAAM,wBAAwB,MAAM,OAAO,EAAE;AAAA,IACzD;AAAA,EACF;AACF;AAEA,MAAM,qBAAqB,CAAC,QAAqB,OAA0B,OAAO;AAC1E,QAAA,EAAE,KAAS,IAAA;AAEX,QAAAC,oBAAkBC,gBAAuB,MAAM;AAE/C,QAAA,cAAc,CAAC,OAAwB,WAAmB;AAC9D,wBAAoB,KAAK;AAGnB,UAAA,gBAAgB,OAAO,OAAO,OAAO;AAAA,MACzC,MAAM;AAAA,QACJ,GAAI,MAAM,QAAQ,CAAC;AAAA,QACnB,MAAM,QAAQ;AAAA,MAChB;AAAA,IAAA,CACD;AAEeD,sBAAA,eAAe,EAAE,OAAA,CAAQ;AAAA,EAAA;AAGrC,QAAA,YAAY,CAAC,QAAyC,WAAmB;AACzE,QAAA,MAAM,QAAQ,MAAM,GAAG;AACzB,aAAO,QAAQ,CAAC,UAAU,YAAY,OAAO,MAAM,CAAC;AAAA,IAAA,WAC3C,OAAO,QAAQ;AACxB,YAAM,YAAY,IAAIE,wBAAO,EAAE,QAAQ,OAAO,QAAQ;AAE/C,aAAA,OAAO,QAAQ,CAAC,UAAU;AAC/B,cAAM,YAAYC,EAAA,IAAI,UAAU,MAAM,MAAM;AAChC,oBAAA,OAAO,YAAY,SAAS,SAAS;AAAA,MAAA,CAClD;AAED,aAAO,OAAO,IAAI,UAAU,UAAU,UAAU,gBAAgB;AAAA,IAClE;AAAA,EAAA;AAGK,SAAA;AAAA,IACL;AAAA,EAAA;AAEJ;;;"}
1
+ {"version":3,"file":"routing.js","sources":["../../../src/services/server/routing.ts"],"sourcesContent":["import Router from '@koa/router';\nimport { has } from 'lodash/fp';\nimport { yup } from '@strapi/utils';\nimport type { Core } from '@strapi/types';\n\nimport createEndpointComposer from './compose-endpoint';\n\nconst policyOrMiddlewareSchema = yup.lazy((value) => {\n if (typeof value === 'string') {\n return yup.string().required();\n }\n\n if (typeof value === 'function') {\n return yup.mixed().isFunction();\n }\n\n return yup.object({\n name: yup.string().required(),\n options: yup.object().notRequired(), // any options\n });\n});\n\nconst routeSchema = yup.object({\n method: yup.string().oneOf(['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'ALL']).required(),\n path: yup.string().required(),\n handler: yup.lazy((value) => {\n if (typeof value === 'string') {\n return yup.string().required();\n }\n\n if (Array.isArray(value)) {\n return yup.array().required();\n }\n\n return yup.mixed().isFunction().required();\n }),\n config: yup\n .object({\n auth: yup.lazy((value) => {\n if (value === false) {\n return yup.boolean().required();\n }\n\n return yup.object({\n scope: yup.array().of(yup.string()).required(),\n });\n }),\n policies: yup\n .array()\n // FIXME: fixed in yup v1\n .of(policyOrMiddlewareSchema as any)\n .notRequired(),\n middlewares: yup\n .array()\n // FIXME: fixed in yup v1\n .of(policyOrMiddlewareSchema as any)\n .notRequired(),\n })\n .notRequired(),\n});\n\nconst validateRouteConfig = (routeConfig: Core.RouteInput) => {\n try {\n return routeSchema.validateSync(routeConfig, {\n strict: true,\n abortEarly: false,\n stripUnknown: true,\n });\n } catch (error) {\n if (error instanceof yup.ValidationError) {\n throw new Error(`Invalid route config ${error.message}`);\n }\n }\n};\n\nconst createRouteManager = (strapi: Core.Strapi, opts: { type?: string } = {}) => {\n const { type } = opts;\n\n const composeEndpoint = createEndpointComposer(strapi);\n\n const createRoute = (route: Core.RouteInput, router: Router) => {\n validateRouteConfig(route);\n\n // NOTE: the router type is used to tag controller actions and for authentication / authorization so we need to pass this info down to the route level\n const routeWithInfo = Object.assign(route, {\n info: {\n ...(route.info ?? {}),\n type: type || 'api',\n },\n });\n\n composeEndpoint(routeWithInfo, { router });\n };\n\n const addRoutes = (routes: Core.Router | Core.RouteInput[], router: Router) => {\n if (Array.isArray(routes)) {\n routes.forEach((route) => createRoute(route, router));\n } else if (routes.routes) {\n const subRouter = new Router({ prefix: routes.prefix });\n\n routes.routes.forEach((route) => {\n const hasPrefix = has('prefix', route.config);\n createRoute(route, hasPrefix ? router : subRouter);\n });\n\n return router.use(subRouter.routes(), subRouter.allowedMethods());\n }\n };\n\n return {\n addRoutes,\n };\n};\n\nexport { validateRouteConfig, createRouteManager };\n"],"names":["yup","composeEndpoint","createEndpointComposer","Router","has"],"mappings":"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"}
@@ -1,11 +1,11 @@
1
1
  "use strict";
2
- const _ = require("lodash/fp");
2
+ const fp = require("lodash/fp");
3
3
  const getNumberOfDynamicZones = () => {
4
4
  const contentTypes = strapi.contentTypes;
5
- return _.pipe(
6
- _.map("attributes"),
7
- _.flatMap(_.values),
8
- _.sumBy((item) => {
5
+ return fp.pipe(
6
+ fp.map("attributes"),
7
+ fp.flatMap(fp.values),
8
+ fp.sumBy((item) => {
9
9
  if (item.type === "dynamiczone") {
10
10
  return 1;
11
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"dynamic-zones.js","sources":["../../../src/services/utils/dynamic-zones.ts"],"sourcesContent":["import { map, values, sumBy, pipe, flatMap } from 'lodash/fp';\nimport type { Schema, UID } from '@strapi/types';\n\nconst getNumberOfDynamicZones = () => {\n const contentTypes: Record<UID.ContentType, Schema.ContentType> = strapi.contentTypes;\n\n return pipe(\n map('attributes'),\n flatMap(values),\n sumBy((item) => {\n if (item.type === 'dynamiczone') {\n return 1;\n }\n return 0;\n })\n )(contentTypes);\n};\n\nexport default getNumberOfDynamicZones;\n"],"names":["pipe","map","flatMap","values","sumBy"],"mappings":";;AAGA,MAAM,0BAA0B,MAAM;AACpC,QAAM,eAA4D,OAAO;AAElE,SAAAA,EAAA;AAAA,IACLC,EAAAA,IAAI,YAAY;AAAA,IAChBC,EAAAA,QAAQC,EAAAA,MAAM;AAAA,IACdC,EAAA,MAAM,CAAC,SAAS;AACV,UAAA,KAAK,SAAS,eAAe;AACxB,eAAA;AAAA,MACT;AACO,aAAA;AAAA,IAAA,CACR;AAAA,IACD,YAAY;AAChB;;"}
1
+ {"version":3,"file":"dynamic-zones.js","sources":["../../../src/services/utils/dynamic-zones.ts"],"sourcesContent":["import { map, values, sumBy, pipe, flatMap } from 'lodash/fp';\nimport type { Schema, UID } from '@strapi/types';\n\nconst getNumberOfDynamicZones = () => {\n const contentTypes: Record<UID.ContentType, Schema.ContentType> = strapi.contentTypes;\n\n return pipe(\n map('attributes'),\n flatMap(values),\n sumBy((item) => {\n if (item.type === 'dynamiczone') {\n return 1;\n }\n return 0;\n })\n )(contentTypes);\n};\n\nexport default getNumberOfDynamicZones;\n"],"names":["pipe","map","flatMap","values","sumBy"],"mappings":";;AAGA,MAAM,0BAA0B,MAAM;AACpC,QAAM,eAA4D,OAAO;AAElE,SAAAA,GAAA;AAAA,IACLC,GAAAA,IAAI,YAAY;AAAA,IAChBC,GAAAA,QAAQC,GAAAA,MAAM;AAAA,IACdC,GAAA,MAAM,CAAC,SAAS;AACV,UAAA,KAAK,SAAS,eAAe;AACxB,eAAA;AAAA,MACT;AACO,aAAA;AAAA,IAAA,CACR;AAAA,IACD,YAAY;AAChB;;"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const _ = require("lodash/fp");
3
+ const fp = require("lodash/fp");
4
4
  const INTEGER_REGEX = /^\d+$/;
5
5
  const STEP_REGEX = /^\*\/\d+$/;
6
6
  const COMPONENTS = [
@@ -24,13 +24,13 @@ const shift = (component, index, date) => {
24
24
  if (STEP_REGEX.test(component)) {
25
25
  const [, step] = component.split("/");
26
26
  const frequency = Math.floor(limit / Number(step));
27
- const list = Array.from({ length: frequency }, (_2, index2) => index2 * Number(step));
27
+ const list = Array.from({ length: frequency }, (_, index2) => index2 * Number(step));
28
28
  return list.map((value) => (value + currentValue) % limit + offset).sort((a, b) => a - b);
29
29
  }
30
30
  return component;
31
31
  };
32
32
  const shiftCronExpression = (rule, date = /* @__PURE__ */ new Date()) => {
33
- const components = rule.trim().split(" ").filter(_.negate(_.isEmpty));
33
+ const components = rule.trim().split(" ").filter(fp.negate(fp.isEmpty));
34
34
  const secondsIncluded = components.length === 6;
35
35
  return components.map((component, index) => shift(component, secondsIncluded ? index : index + 1, date)).join(" ");
36
36
  };
@@ -1 +1 @@
1
- {"version":3,"file":"cron.js","sources":["../../src/utils/cron.ts"],"sourcesContent":["import { isEmpty, negate } from 'lodash/fp';\n\nconst DATE_FUNCTIONS = [\n 'getSeconds',\n 'getMinutes',\n 'getHours',\n 'getDate',\n 'getMonth',\n 'getDay',\n] as const;\n\nconst INTEGER_REGEX = /^\\d+$/;\nconst STEP_REGEX = /^\\*\\/\\d+$/;\nconst COMPONENTS: {\n limit: number;\n zeroBasedIndices: boolean;\n functionName: (typeof DATE_FUNCTIONS)[number];\n}[] = [\n { limit: 60, zeroBasedIndices: true, functionName: 'getSeconds' },\n { limit: 60, zeroBasedIndices: true, functionName: 'getMinutes' },\n { limit: 24, zeroBasedIndices: true, functionName: 'getHours' },\n { limit: 31, zeroBasedIndices: false, functionName: 'getDate' },\n { limit: 12, zeroBasedIndices: false, functionName: 'getMonth' },\n { limit: 7, zeroBasedIndices: true, functionName: 'getDay' },\n];\n\nconst shift = (component: string, index: number, date: Date) => {\n if (component === '*') {\n return '*';\n }\n\n const { limit, zeroBasedIndices, functionName } = COMPONENTS[index];\n const offset = +!zeroBasedIndices;\n const currentValue = date[functionName]();\n\n if (INTEGER_REGEX.test(component)) {\n return ((Number.parseInt(component, 10) + currentValue) % limit) + offset;\n }\n\n if (STEP_REGEX.test(component)) {\n const [, step] = component.split('/');\n const frequency = Math.floor(limit / Number(step));\n const list = Array.from({ length: frequency }, (_, index) => index * Number(step));\n return list.map((value) => ((value + currentValue) % limit) + offset).sort((a, b) => a - b);\n }\n\n // Unsupported syntax\n return component;\n};\n\n/**\n * Simulate an interval by shifting a cron expression using the specified date.\n * @param {string} rule A cron expression you want to shift.\n * @param {Date} date The date that's gonna be used as the start of the \"interval\", it defaults to now.\n * @returns The shifted cron expression.\n */\nexport const shiftCronExpression = (rule: string, date = new Date()) => {\n const components = rule.trim().split(' ').filter(negate(isEmpty));\n const secondsIncluded = components.length === 6;\n return components\n .map((component, index) => shift(component, secondsIncluded ? index : index + 1, date))\n .join(' ');\n};\n"],"names":["_","index","negate","isEmpty"],"mappings":";;;AAWA,MAAM,gBAAgB;AACtB,MAAM,aAAa;AACnB,MAAM,aAIA;AAAA,EACJ,EAAE,OAAO,IAAI,kBAAkB,MAAM,cAAc,aAAa;AAAA,EAChE,EAAE,OAAO,IAAI,kBAAkB,MAAM,cAAc,aAAa;AAAA,EAChE,EAAE,OAAO,IAAI,kBAAkB,MAAM,cAAc,WAAW;AAAA,EAC9D,EAAE,OAAO,IAAI,kBAAkB,OAAO,cAAc,UAAU;AAAA,EAC9D,EAAE,OAAO,IAAI,kBAAkB,OAAO,cAAc,WAAW;AAAA,EAC/D,EAAE,OAAO,GAAG,kBAAkB,MAAM,cAAc,SAAS;AAC7D;AAEA,MAAM,QAAQ,CAAC,WAAmB,OAAe,SAAe;AAC9D,MAAI,cAAc,KAAK;AACd,WAAA;AAAA,EACT;AAEA,QAAM,EAAE,OAAO,kBAAkB,aAAa,IAAI,WAAW,KAAK;AAC5D,QAAA,SAAS,CAAC,CAAC;AACX,QAAA,eAAe,KAAK,YAAY;AAElC,MAAA,cAAc,KAAK,SAAS,GAAG;AACjC,YAAS,OAAO,SAAS,WAAW,EAAE,IAAI,gBAAgB,QAAS;AAAA,EACrE;AAEI,MAAA,WAAW,KAAK,SAAS,GAAG;AAC9B,UAAM,CAAG,EAAA,IAAI,IAAI,UAAU,MAAM,GAAG;AACpC,UAAM,YAAY,KAAK,MAAM,QAAQ,OAAO,IAAI,CAAC;AACjD,UAAM,OAAO,MAAM,KAAK,EAAE,QAAQ,UAAA,GAAa,CAACA,IAAGC,WAAUA,SAAQ,OAAO,IAAI,CAAC;AACjF,WAAO,KAAK,IAAI,CAAC,WAAY,QAAQ,gBAAgB,QAAS,MAAM,EAAE,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC;AAAA,EAC5F;AAGO,SAAA;AACT;AAQO,MAAM,sBAAsB,CAAC,MAAc,OAAO,oBAAI,WAAW;AAChE,QAAA,aAAa,KAAK,KAAA,EAAO,MAAM,GAAG,EAAE,OAAOC,EAAAA,OAAOC,EAAO,OAAA,CAAC;AAC1D,QAAA,kBAAkB,WAAW,WAAW;AAC9C,SAAO,WACJ,IAAI,CAAC,WAAW,UAAU,MAAM,WAAW,kBAAkB,QAAQ,QAAQ,GAAG,IAAI,CAAC,EACrF,KAAK,GAAG;AACb;;"}
1
+ {"version":3,"file":"cron.js","sources":["../../src/utils/cron.ts"],"sourcesContent":["import { isEmpty, negate } from 'lodash/fp';\n\nconst DATE_FUNCTIONS = [\n 'getSeconds',\n 'getMinutes',\n 'getHours',\n 'getDate',\n 'getMonth',\n 'getDay',\n] as const;\n\nconst INTEGER_REGEX = /^\\d+$/;\nconst STEP_REGEX = /^\\*\\/\\d+$/;\nconst COMPONENTS: {\n limit: number;\n zeroBasedIndices: boolean;\n functionName: (typeof DATE_FUNCTIONS)[number];\n}[] = [\n { limit: 60, zeroBasedIndices: true, functionName: 'getSeconds' },\n { limit: 60, zeroBasedIndices: true, functionName: 'getMinutes' },\n { limit: 24, zeroBasedIndices: true, functionName: 'getHours' },\n { limit: 31, zeroBasedIndices: false, functionName: 'getDate' },\n { limit: 12, zeroBasedIndices: false, functionName: 'getMonth' },\n { limit: 7, zeroBasedIndices: true, functionName: 'getDay' },\n];\n\nconst shift = (component: string, index: number, date: Date) => {\n if (component === '*') {\n return '*';\n }\n\n const { limit, zeroBasedIndices, functionName } = COMPONENTS[index];\n const offset = +!zeroBasedIndices;\n const currentValue = date[functionName]();\n\n if (INTEGER_REGEX.test(component)) {\n return ((Number.parseInt(component, 10) + currentValue) % limit) + offset;\n }\n\n if (STEP_REGEX.test(component)) {\n const [, step] = component.split('/');\n const frequency = Math.floor(limit / Number(step));\n const list = Array.from({ length: frequency }, (_, index) => index * Number(step));\n return list.map((value) => ((value + currentValue) % limit) + offset).sort((a, b) => a - b);\n }\n\n // Unsupported syntax\n return component;\n};\n\n/**\n * Simulate an interval by shifting a cron expression using the specified date.\n * @param {string} rule A cron expression you want to shift.\n * @param {Date} date The date that's gonna be used as the start of the \"interval\", it defaults to now.\n * @returns The shifted cron expression.\n */\nexport const shiftCronExpression = (rule: string, date = new Date()) => {\n const components = rule.trim().split(' ').filter(negate(isEmpty));\n const secondsIncluded = components.length === 6;\n return components\n .map((component, index) => shift(component, secondsIncluded ? index : index + 1, date))\n .join(' ');\n};\n"],"names":["index","negate","isEmpty"],"mappings":";;;AAWA,MAAM,gBAAgB;AACtB,MAAM,aAAa;AACnB,MAAM,aAIA;AAAA,EACJ,EAAE,OAAO,IAAI,kBAAkB,MAAM,cAAc,aAAa;AAAA,EAChE,EAAE,OAAO,IAAI,kBAAkB,MAAM,cAAc,aAAa;AAAA,EAChE,EAAE,OAAO,IAAI,kBAAkB,MAAM,cAAc,WAAW;AAAA,EAC9D,EAAE,OAAO,IAAI,kBAAkB,OAAO,cAAc,UAAU;AAAA,EAC9D,EAAE,OAAO,IAAI,kBAAkB,OAAO,cAAc,WAAW;AAAA,EAC/D,EAAE,OAAO,GAAG,kBAAkB,MAAM,cAAc,SAAS;AAC7D;AAEA,MAAM,QAAQ,CAAC,WAAmB,OAAe,SAAe;AAC9D,MAAI,cAAc,KAAK;AACd,WAAA;AAAA,EACT;AAEA,QAAM,EAAE,OAAO,kBAAkB,aAAa,IAAI,WAAW,KAAK;AAC5D,QAAA,SAAS,CAAC,CAAC;AACX,QAAA,eAAe,KAAK,YAAY;AAElC,MAAA,cAAc,KAAK,SAAS,GAAG;AACjC,YAAS,OAAO,SAAS,WAAW,EAAE,IAAI,gBAAgB,QAAS;AAAA,EACrE;AAEI,MAAA,WAAW,KAAK,SAAS,GAAG;AAC9B,UAAM,CAAG,EAAA,IAAI,IAAI,UAAU,MAAM,GAAG;AACpC,UAAM,YAAY,KAAK,MAAM,QAAQ,OAAO,IAAI,CAAC;AACjD,UAAM,OAAO,MAAM,KAAK,EAAE,QAAQ,UAAA,GAAa,CAAC,GAAGA,WAAUA,SAAQ,OAAO,IAAI,CAAC;AACjF,WAAO,KAAK,IAAI,CAAC,WAAY,QAAQ,gBAAgB,QAAS,MAAM,EAAE,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC;AAAA,EAC5F;AAGO,SAAA;AACT;AAQO,MAAM,sBAAsB,CAAC,MAAc,OAAO,oBAAI,WAAW;AAChE,QAAA,aAAa,KAAK,KAAA,EAAO,MAAM,GAAG,EAAE,OAAOC,GAAAA,OAAOC,GAAO,OAAA,CAAC;AAC1D,QAAA,kBAAkB,WAAW,WAAW;AAC9C,SAAO,WACJ,IAAI,CAAC,WAAW,UAAU,MAAM,WAAW,kBAAkB,QAAQ,QAAQ,GAAG,IAAI,CAAC,EACrF,KAAK,GAAG;AACb;;"}
@@ -1,5 +1,5 @@
1
1
  /**
2
2
  * Returns a path (as an array) from a file path
3
3
  */
4
- export declare const filePathToPropPath: (filePath: string, useFileNameAsKey?: boolean) => string[];
4
+ export declare const filePathToPropPath: (entryPath: string, useFileNameAsKey?: boolean) => string[];
5
5
  //# sourceMappingURL=filepath-to-prop-path.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"filepath-to-prop-path.d.ts","sourceRoot":"","sources":["../../src/utils/filepath-to-prop-path.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,eAAO,MAAM,kBAAkB,aAAc,MAAM,yCAYlD,CAAC"}
1
+ {"version":3,"file":"filepath-to-prop-path.d.ts","sourceRoot":"","sources":["../../src/utils/filepath-to-prop-path.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,eAAO,MAAM,kBAAkB,cAClB,MAAM,qBACC,OAAO,KACxB,MAAM,EAqBR,CAAC"}
@@ -1,12 +1,33 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const _ = require("lodash");
3
+ const path = require("node:path");
4
+ const fp = require("lodash/fp");
4
5
  const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
5
- const ___default = /* @__PURE__ */ _interopDefault(_);
6
- const filePathToPropPath = (filePath, useFileNameAsKey = true) => {
7
- const cleanPath = filePath.startsWith("./") ? filePath.slice(2) : filePath;
8
- const prop = cleanPath.replace(/(\.settings|\.json|\.js)/g, "").toLowerCase().split("/").map((p) => ___default.default.trimStart(p, ".")).join(".").split(".");
9
- return useFileNameAsKey === true ? prop : prop.slice(0, -1);
6
+ const path__default = /* @__PURE__ */ _interopDefault(path);
7
+ const fp__default = /* @__PURE__ */ _interopDefault(fp);
8
+ const filePathToPropPath = (entryPath, useFileNameAsKey = true) => {
9
+ const transform = fp__default.default.pipe(
10
+ // Remove the relative path prefixes: './' for posix (and some win32) and ".\" for win32
11
+ removeRelativePrefix,
12
+ // Remove the path metadata and extensions
13
+ fp__default.default.replace(/(\.settings|\.json|\.js)/g, ""),
14
+ // Transform to lowercase
15
+ // Note: We're using fp.toLower instead of fp.lowercase as the latest removes special characters such as "/"
16
+ fp__default.default.toLower,
17
+ // Split the cleaned path by matching every possible separator (either "/" or "\" depending on the OS)
18
+ fp__default.default.split(new RegExp(`[\\${path__default.default.win32.sep}|${path__default.default.posix.sep}]`, "g")),
19
+ // Make sure to remove leading '.' from the different path parts
20
+ fp__default.default.map(fp__default.default.trimCharsStart(".")),
21
+ // join + split in case some '.' characters are still present in different parts of the path
22
+ fp__default.default.join("."),
23
+ fp__default.default.split("."),
24
+ // Remove the last portion of the path array if the file name shouldn't be used as a key
25
+ useFileNameAsKey ? fp__default.default.identity : fp__default.default.slice(0, -1)
26
+ );
27
+ return transform(entryPath);
28
+ };
29
+ const removeRelativePrefix = (filePath) => {
30
+ return filePath.startsWith(`.${path__default.default.win32.sep}`) || filePath.startsWith(`.${path__default.default.posix.sep}`) ? filePath.slice(2) : filePath;
10
31
  };
11
32
  exports.filePathToPropPath = filePathToPropPath;
12
33
  //# sourceMappingURL=filepath-to-prop-path.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"filepath-to-prop-path.js","sources":["../../src/utils/filepath-to-prop-path.ts"],"sourcesContent":["import _ from 'lodash';\n\n/**\n * Returns a path (as an array) from a file path\n */\nexport const filePathToPropPath = (filePath: string, useFileNameAsKey = true) => {\n const cleanPath = filePath.startsWith('./') ? filePath.slice(2) : filePath;\n\n const prop = cleanPath\n .replace(/(\\.settings|\\.json|\\.js)/g, '')\n .toLowerCase()\n .split('/')\n .map((p) => _.trimStart(p, '.'))\n .join('.')\n .split('.');\n\n return useFileNameAsKey === true ? prop : prop.slice(0, -1);\n};\n"],"names":["_"],"mappings":";;;;;AAKO,MAAM,qBAAqB,CAAC,UAAkB,mBAAmB,SAAS;AACzE,QAAA,YAAY,SAAS,WAAW,IAAI,IAAI,SAAS,MAAM,CAAC,IAAI;AAE5D,QAAA,OAAO,UACV,QAAQ,6BAA6B,EAAE,EACvC,cACA,MAAM,GAAG,EACT,IAAI,CAAC,MAAMA,mBAAE,UAAU,GAAG,GAAG,CAAC,EAC9B,KAAK,GAAG,EACR,MAAM,GAAG;AAEZ,SAAO,qBAAqB,OAAO,OAAO,KAAK,MAAM,GAAG,EAAE;AAC5D;;"}
1
+ {"version":3,"file":"filepath-to-prop-path.js","sources":["../../src/utils/filepath-to-prop-path.ts"],"sourcesContent":["import path from 'node:path';\nimport fp from 'lodash/fp';\n\n/**\n * Returns a path (as an array) from a file path\n */\nexport const filePathToPropPath = (\n entryPath: string,\n useFileNameAsKey: boolean = true\n): string[] => {\n const transform = fp.pipe(\n // Remove the relative path prefixes: './' for posix (and some win32) and \".\\\" for win32\n removeRelativePrefix,\n // Remove the path metadata and extensions\n fp.replace(/(\\.settings|\\.json|\\.js)/g, ''),\n // Transform to lowercase\n // Note: We're using fp.toLower instead of fp.lowercase as the latest removes special characters such as \"/\"\n fp.toLower,\n // Split the cleaned path by matching every possible separator (either \"/\" or \"\\\" depending on the OS)\n fp.split(new RegExp(`[\\\\${path.win32.sep}|${path.posix.sep}]`, 'g')),\n // Make sure to remove leading '.' from the different path parts\n fp.map(fp.trimCharsStart('.')),\n // join + split in case some '.' characters are still present in different parts of the path\n fp.join('.'),\n fp.split('.'),\n // Remove the last portion of the path array if the file name shouldn't be used as a key\n useFileNameAsKey ? fp.identity : fp.slice(0, -1)\n );\n\n return transform(entryPath) as string[];\n};\n\nconst removeRelativePrefix = (filePath: string) => {\n return filePath.startsWith(`.${path.win32.sep}`) || filePath.startsWith(`.${path.posix.sep}`)\n ? filePath.slice(2)\n : filePath;\n};\n"],"names":["fp","path"],"mappings":";;;;;;;AAMO,MAAM,qBAAqB,CAChC,WACA,mBAA4B,SACf;AACb,QAAM,YAAYA,YAAAA,QAAG;AAAA;AAAA,IAEnB;AAAA;AAAA,IAEAA,oBAAG,QAAQ,6BAA6B,EAAE;AAAA;AAAA;AAAA,IAG1CA,YAAAA,QAAG;AAAA;AAAA,IAEHA,YAAG,QAAA,MAAM,IAAI,OAAO,MAAMC,cAAK,QAAA,MAAM,GAAG,IAAIA,cAAK,QAAA,MAAM,GAAG,KAAK,GAAG,CAAC;AAAA;AAAA,IAEnED,YAAAA,QAAG,IAAIA,YAAAA,QAAG,eAAe,GAAG,CAAC;AAAA;AAAA,IAE7BA,YAAA,QAAG,KAAK,GAAG;AAAA,IACXA,YAAA,QAAG,MAAM,GAAG;AAAA;AAAA,IAEZ,mBAAmBA,YAAG,QAAA,WAAWA,YAAAA,QAAG,MAAM,GAAG,EAAE;AAAA,EAAA;AAGjD,SAAO,UAAU,SAAS;AAC5B;AAEA,MAAM,uBAAuB,CAAC,aAAqB;AACjD,SAAO,SAAS,WAAW,IAAIC,cAAAA,QAAK,MAAM,GAAG,EAAE,KAAK,SAAS,WAAW,IAAIA,cAAAA,QAAK,MAAM,GAAG,EAAE,IACxF,SAAS,MAAM,CAAC,IAChB;AACN;;"}
@@ -1,8 +1,28 @@
1
- import _ from "lodash";
2
- const filePathToPropPath = (filePath, useFileNameAsKey = true) => {
3
- const cleanPath = filePath.startsWith("./") ? filePath.slice(2) : filePath;
4
- const prop = cleanPath.replace(/(\.settings|\.json|\.js)/g, "").toLowerCase().split("/").map((p) => _.trimStart(p, ".")).join(".").split(".");
5
- return useFileNameAsKey === true ? prop : prop.slice(0, -1);
1
+ import path from "node:path";
2
+ import fp from "lodash/fp";
3
+ const filePathToPropPath = (entryPath, useFileNameAsKey = true) => {
4
+ const transform = fp.pipe(
5
+ // Remove the relative path prefixes: './' for posix (and some win32) and ".\" for win32
6
+ removeRelativePrefix,
7
+ // Remove the path metadata and extensions
8
+ fp.replace(/(\.settings|\.json|\.js)/g, ""),
9
+ // Transform to lowercase
10
+ // Note: We're using fp.toLower instead of fp.lowercase as the latest removes special characters such as "/"
11
+ fp.toLower,
12
+ // Split the cleaned path by matching every possible separator (either "/" or "\" depending on the OS)
13
+ fp.split(new RegExp(`[\\${path.win32.sep}|${path.posix.sep}]`, "g")),
14
+ // Make sure to remove leading '.' from the different path parts
15
+ fp.map(fp.trimCharsStart(".")),
16
+ // join + split in case some '.' characters are still present in different parts of the path
17
+ fp.join("."),
18
+ fp.split("."),
19
+ // Remove the last portion of the path array if the file name shouldn't be used as a key
20
+ useFileNameAsKey ? fp.identity : fp.slice(0, -1)
21
+ );
22
+ return transform(entryPath);
23
+ };
24
+ const removeRelativePrefix = (filePath) => {
25
+ return filePath.startsWith(`.${path.win32.sep}`) || filePath.startsWith(`.${path.posix.sep}`) ? filePath.slice(2) : filePath;
6
26
  };
7
27
  export {
8
28
  filePathToPropPath
@@ -1 +1 @@
1
- {"version":3,"file":"filepath-to-prop-path.mjs","sources":["../../src/utils/filepath-to-prop-path.ts"],"sourcesContent":["import _ from 'lodash';\n\n/**\n * Returns a path (as an array) from a file path\n */\nexport const filePathToPropPath = (filePath: string, useFileNameAsKey = true) => {\n const cleanPath = filePath.startsWith('./') ? filePath.slice(2) : filePath;\n\n const prop = cleanPath\n .replace(/(\\.settings|\\.json|\\.js)/g, '')\n .toLowerCase()\n .split('/')\n .map((p) => _.trimStart(p, '.'))\n .join('.')\n .split('.');\n\n return useFileNameAsKey === true ? prop : prop.slice(0, -1);\n};\n"],"names":[],"mappings":";AAKO,MAAM,qBAAqB,CAAC,UAAkB,mBAAmB,SAAS;AACzE,QAAA,YAAY,SAAS,WAAW,IAAI,IAAI,SAAS,MAAM,CAAC,IAAI;AAE5D,QAAA,OAAO,UACV,QAAQ,6BAA6B,EAAE,EACvC,cACA,MAAM,GAAG,EACT,IAAI,CAAC,MAAM,EAAE,UAAU,GAAG,GAAG,CAAC,EAC9B,KAAK,GAAG,EACR,MAAM,GAAG;AAEZ,SAAO,qBAAqB,OAAO,OAAO,KAAK,MAAM,GAAG,EAAE;AAC5D;"}
1
+ {"version":3,"file":"filepath-to-prop-path.mjs","sources":["../../src/utils/filepath-to-prop-path.ts"],"sourcesContent":["import path from 'node:path';\nimport fp from 'lodash/fp';\n\n/**\n * Returns a path (as an array) from a file path\n */\nexport const filePathToPropPath = (\n entryPath: string,\n useFileNameAsKey: boolean = true\n): string[] => {\n const transform = fp.pipe(\n // Remove the relative path prefixes: './' for posix (and some win32) and \".\\\" for win32\n removeRelativePrefix,\n // Remove the path metadata and extensions\n fp.replace(/(\\.settings|\\.json|\\.js)/g, ''),\n // Transform to lowercase\n // Note: We're using fp.toLower instead of fp.lowercase as the latest removes special characters such as \"/\"\n fp.toLower,\n // Split the cleaned path by matching every possible separator (either \"/\" or \"\\\" depending on the OS)\n fp.split(new RegExp(`[\\\\${path.win32.sep}|${path.posix.sep}]`, 'g')),\n // Make sure to remove leading '.' from the different path parts\n fp.map(fp.trimCharsStart('.')),\n // join + split in case some '.' characters are still present in different parts of the path\n fp.join('.'),\n fp.split('.'),\n // Remove the last portion of the path array if the file name shouldn't be used as a key\n useFileNameAsKey ? fp.identity : fp.slice(0, -1)\n );\n\n return transform(entryPath) as string[];\n};\n\nconst removeRelativePrefix = (filePath: string) => {\n return filePath.startsWith(`.${path.win32.sep}`) || filePath.startsWith(`.${path.posix.sep}`)\n ? filePath.slice(2)\n : filePath;\n};\n"],"names":[],"mappings":";;AAMO,MAAM,qBAAqB,CAChC,WACA,mBAA4B,SACf;AACb,QAAM,YAAY,GAAG;AAAA;AAAA,IAEnB;AAAA;AAAA,IAEA,GAAG,QAAQ,6BAA6B,EAAE;AAAA;AAAA;AAAA,IAG1C,GAAG;AAAA;AAAA,IAEH,GAAG,MAAM,IAAI,OAAO,MAAM,KAAK,MAAM,GAAG,IAAI,KAAK,MAAM,GAAG,KAAK,GAAG,CAAC;AAAA;AAAA,IAEnE,GAAG,IAAI,GAAG,eAAe,GAAG,CAAC;AAAA;AAAA,IAE7B,GAAG,KAAK,GAAG;AAAA,IACX,GAAG,MAAM,GAAG;AAAA;AAAA,IAEZ,mBAAmB,GAAG,WAAW,GAAG,MAAM,GAAG,EAAE;AAAA,EAAA;AAGjD,SAAO,UAAU,SAAS;AAC5B;AAEA,MAAM,uBAAuB,CAAC,aAAqB;AACjD,SAAO,SAAS,WAAW,IAAI,KAAK,MAAM,GAAG,EAAE,KAAK,SAAS,WAAW,IAAI,KAAK,MAAM,GAAG,EAAE,IACxF,SAAS,MAAM,CAAC,IAChB;AACN;"}
@@ -1,13 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const _ = require("lodash/fp");
3
+ const fp = require("lodash/fp");
4
4
  const isInitialized = async (strapi) => {
5
5
  try {
6
- if (_.isEmpty(strapi.admin)) {
6
+ if (fp.isEmpty(strapi.admin)) {
7
7
  return true;
8
8
  }
9
9
  const anyAdministrator = await strapi.db.query("admin::user").findOne({ select: ["id"] });
10
- return !_.isNil(anyAdministrator);
10
+ return !fp.isNil(anyAdministrator);
11
11
  } catch (err) {
12
12
  strapi.stopWithError(err);
13
13
  }
@@ -1 +1 @@
1
- {"version":3,"file":"is-initialized.js","sources":["../../src/utils/is-initialized.ts"],"sourcesContent":["import { isEmpty, isNil } from 'lodash/fp';\n\nimport type { Core } from '@strapi/types';\n\n/**\n * Test if the strapi application is considered as initialized (1st user has been created)\n */\nexport const isInitialized = async (strapi: Core.Strapi): Promise<boolean> => {\n try {\n if (isEmpty(strapi.admin)) {\n return true;\n }\n\n // test if there is at least one admin\n const anyAdministrator = await strapi.db.query('admin::user').findOne({ select: ['id'] });\n\n return !isNil(anyAdministrator);\n } catch (err) {\n strapi.stopWithError(err);\n }\n};\n"],"names":["isEmpty","isNil"],"mappings":";;;AAOa,MAAA,gBAAgB,OAAO,WAA0C;AACxE,MAAA;AACE,QAAAA,EAAA,QAAQ,OAAO,KAAK,GAAG;AAClB,aAAA;AAAA,IACT;AAGA,UAAM,mBAAmB,MAAM,OAAO,GAAG,MAAM,aAAa,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAG,CAAA;AAEjF,WAAA,CAACC,EAAAA,MAAM,gBAAgB;AAAA,WACvB,KAAK;AACZ,WAAO,cAAc,GAAG;AAAA,EAC1B;AACF;;"}
1
+ {"version":3,"file":"is-initialized.js","sources":["../../src/utils/is-initialized.ts"],"sourcesContent":["import { isEmpty, isNil } from 'lodash/fp';\n\nimport type { Core } from '@strapi/types';\n\n/**\n * Test if the strapi application is considered as initialized (1st user has been created)\n */\nexport const isInitialized = async (strapi: Core.Strapi): Promise<boolean> => {\n try {\n if (isEmpty(strapi.admin)) {\n return true;\n }\n\n // test if there is at least one admin\n const anyAdministrator = await strapi.db.query('admin::user').findOne({ select: ['id'] });\n\n return !isNil(anyAdministrator);\n } catch (err) {\n strapi.stopWithError(err);\n }\n};\n"],"names":["isEmpty","isNil"],"mappings":";;;AAOa,MAAA,gBAAgB,OAAO,WAA0C;AACxE,MAAA;AACE,QAAAA,GAAA,QAAQ,OAAO,KAAK,GAAG;AAClB,aAAA;AAAA,IACT;AAGA,UAAM,mBAAmB,MAAM,OAAO,GAAG,MAAM,aAAa,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAG,CAAA;AAEjF,WAAA,CAACC,GAAAA,MAAM,gBAAgB;AAAA,WACvB,KAAK;AACZ,WAAO,cAAc,GAAG;AAAA,EAC1B;AACF;;"}
@@ -2,17 +2,17 @@
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const chalk = require("chalk");
4
4
  const CLITable = require("cli-table3");
5
- const _ = require("lodash/fp");
5
+ const fp = require("lodash/fp");
6
6
  const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
7
7
  const chalk__default = /* @__PURE__ */ _interopDefault(chalk);
8
8
  const CLITable__default = /* @__PURE__ */ _interopDefault(CLITable);
9
- const ___default = /* @__PURE__ */ _interopDefault(_);
9
+ const fp__default = /* @__PURE__ */ _interopDefault(fp);
10
10
  const createStartupLogger = (app) => {
11
11
  return {
12
12
  logStats() {
13
13
  const columns = Math.min(process.stderr.columns, 80) - 2;
14
14
  console.log();
15
- console.log(chalk__default.default.black.bgWhite(___default.default.padEnd(columns, " Project information")));
15
+ console.log(chalk__default.default.black.bgWhite(fp__default.default.padEnd(columns, " Project information")));
16
16
  console.log();
17
17
  const infoTable = new CLITable__default.default({
18
18
  colWidths: [20, 50],
@@ -29,7 +29,7 @@ const createStartupLogger = (app) => {
29
29
  );
30
30
  console.log(infoTable.toString());
31
31
  console.log();
32
- console.log(chalk__default.default.black.bgWhite(___default.default.padEnd(columns, " Actions available")));
32
+ console.log(chalk__default.default.black.bgWhite(fp__default.default.padEnd(columns, " Actions available")));
33
33
  console.log();
34
34
  },
35
35
  logFirstStartupMessage() {
@@ -1 +1 @@
1
- {"version":3,"file":"startup-logger.js","sources":["../../src/utils/startup-logger.ts"],"sourcesContent":["import chalk from 'chalk';\nimport CLITable from 'cli-table3';\nimport _ from 'lodash/fp';\n\nimport type { Core } from '@strapi/types';\n\nexport const createStartupLogger = (app: Core.Strapi) => {\n return {\n logStats() {\n const columns = Math.min(process.stderr.columns, 80) - 2;\n console.log();\n console.log(chalk.black.bgWhite(_.padEnd(columns, ' Project information')));\n console.log();\n\n const infoTable = new CLITable({\n colWidths: [20, 50],\n chars: { mid: '', 'left-mid': '', 'mid-mid': '', 'right-mid': '' },\n });\n\n infoTable.push(\n [chalk.blue('Time'), `${new Date()}`],\n [chalk.blue('Launched in'), `${Date.now() - app.config.launchedAt} ms`],\n [chalk.blue('Environment'), app.config.environment],\n [chalk.blue('Process PID'), process.pid],\n [chalk.blue('Version'), `${app.config.info.strapi} (node ${process.version})`],\n [chalk.blue('Edition'), app.EE ? 'Enterprise' : 'Community'],\n [chalk.blue('Database'), app.db?.dialect.client]\n );\n\n console.log(infoTable.toString());\n console.log();\n console.log(chalk.black.bgWhite(_.padEnd(columns, ' Actions available')));\n console.log();\n },\n\n logFirstStartupMessage() {\n if (!strapi.config.get('server.logger.startup.enabled')) {\n return;\n }\n\n this.logStats();\n\n console.log(chalk.bold('One more thing...'));\n console.log(\n chalk.grey('Create your first administrator 💻 by going to the administration panel at:')\n );\n console.log();\n\n const addressTable = new CLITable();\n\n const adminUrl = strapi.config.get('admin.absoluteUrl');\n addressTable.push([chalk.bold(adminUrl)]);\n\n console.log(`${addressTable.toString()}`);\n console.log();\n },\n\n logDefaultStartupMessage() {\n if (!strapi.config.get('server.logger.startup.enabled')) {\n return;\n }\n this.logStats();\n\n console.log(chalk.bold('Welcome back!'));\n\n if (app.config.get('admin.serveAdminPanel') === true) {\n console.log(chalk.grey('To manage your project 🚀, go to the administration panel at:'));\n const adminUrl = strapi.config.get('admin.absoluteUrl');\n console.log(chalk.bold(adminUrl));\n console.log();\n }\n\n console.log(chalk.grey('To access the server ⚡️, go to:'));\n const serverUrl = strapi.config.get('server.absoluteUrl');\n console.log(chalk.bold(serverUrl));\n console.log();\n },\n\n logStartupMessage({ isInitialized }: { isInitialized: boolean }) {\n if (!strapi.config.get('server.logger.startup.enabled')) {\n return;\n }\n if (!isInitialized) {\n this.logFirstStartupMessage();\n } else {\n this.logDefaultStartupMessage();\n }\n },\n };\n};\n"],"names":["chalk","_","CLITable"],"mappings":"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"}
1
+ {"version":3,"file":"startup-logger.js","sources":["../../src/utils/startup-logger.ts"],"sourcesContent":["import chalk from 'chalk';\nimport CLITable from 'cli-table3';\nimport _ from 'lodash/fp';\n\nimport type { Core } from '@strapi/types';\n\nexport const createStartupLogger = (app: Core.Strapi) => {\n return {\n logStats() {\n const columns = Math.min(process.stderr.columns, 80) - 2;\n console.log();\n console.log(chalk.black.bgWhite(_.padEnd(columns, ' Project information')));\n console.log();\n\n const infoTable = new CLITable({\n colWidths: [20, 50],\n chars: { mid: '', 'left-mid': '', 'mid-mid': '', 'right-mid': '' },\n });\n\n infoTable.push(\n [chalk.blue('Time'), `${new Date()}`],\n [chalk.blue('Launched in'), `${Date.now() - app.config.launchedAt} ms`],\n [chalk.blue('Environment'), app.config.environment],\n [chalk.blue('Process PID'), process.pid],\n [chalk.blue('Version'), `${app.config.info.strapi} (node ${process.version})`],\n [chalk.blue('Edition'), app.EE ? 'Enterprise' : 'Community'],\n [chalk.blue('Database'), app.db?.dialect.client]\n );\n\n console.log(infoTable.toString());\n console.log();\n console.log(chalk.black.bgWhite(_.padEnd(columns, ' Actions available')));\n console.log();\n },\n\n logFirstStartupMessage() {\n if (!strapi.config.get('server.logger.startup.enabled')) {\n return;\n }\n\n this.logStats();\n\n console.log(chalk.bold('One more thing...'));\n console.log(\n chalk.grey('Create your first administrator 💻 by going to the administration panel at:')\n );\n console.log();\n\n const addressTable = new CLITable();\n\n const adminUrl = strapi.config.get('admin.absoluteUrl');\n addressTable.push([chalk.bold(adminUrl)]);\n\n console.log(`${addressTable.toString()}`);\n console.log();\n },\n\n logDefaultStartupMessage() {\n if (!strapi.config.get('server.logger.startup.enabled')) {\n return;\n }\n this.logStats();\n\n console.log(chalk.bold('Welcome back!'));\n\n if (app.config.get('admin.serveAdminPanel') === true) {\n console.log(chalk.grey('To manage your project 🚀, go to the administration panel at:'));\n const adminUrl = strapi.config.get('admin.absoluteUrl');\n console.log(chalk.bold(adminUrl));\n console.log();\n }\n\n console.log(chalk.grey('To access the server ⚡️, go to:'));\n const serverUrl = strapi.config.get('server.absoluteUrl');\n console.log(chalk.bold(serverUrl));\n console.log();\n },\n\n logStartupMessage({ isInitialized }: { isInitialized: boolean }) {\n if (!strapi.config.get('server.logger.startup.enabled')) {\n return;\n }\n if (!isInitialized) {\n this.logFirstStartupMessage();\n } else {\n this.logDefaultStartupMessage();\n }\n },\n };\n};\n"],"names":["chalk","_","CLITable"],"mappings":"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"}
@@ -1,12 +1,12 @@
1
1
  import chalk from "chalk";
2
2
  import CLITable from "cli-table3";
3
- import _ from "lodash/fp";
3
+ import fp from "lodash/fp";
4
4
  const createStartupLogger = (app) => {
5
5
  return {
6
6
  logStats() {
7
7
  const columns = Math.min(process.stderr.columns, 80) - 2;
8
8
  console.log();
9
- console.log(chalk.black.bgWhite(_.padEnd(columns, " Project information")));
9
+ console.log(chalk.black.bgWhite(fp.padEnd(columns, " Project information")));
10
10
  console.log();
11
11
  const infoTable = new CLITable({
12
12
  colWidths: [20, 50],
@@ -23,7 +23,7 @@ const createStartupLogger = (app) => {
23
23
  );
24
24
  console.log(infoTable.toString());
25
25
  console.log();
26
- console.log(chalk.black.bgWhite(_.padEnd(columns, " Actions available")));
26
+ console.log(chalk.black.bgWhite(fp.padEnd(columns, " Actions available")));
27
27
  console.log();
28
28
  },
29
29
  logFirstStartupMessage() {
@@ -1 +1 @@
1
- {"version":3,"file":"startup-logger.mjs","sources":["../../src/utils/startup-logger.ts"],"sourcesContent":["import chalk from 'chalk';\nimport CLITable from 'cli-table3';\nimport _ from 'lodash/fp';\n\nimport type { Core } from '@strapi/types';\n\nexport const createStartupLogger = (app: Core.Strapi) => {\n return {\n logStats() {\n const columns = Math.min(process.stderr.columns, 80) - 2;\n console.log();\n console.log(chalk.black.bgWhite(_.padEnd(columns, ' Project information')));\n console.log();\n\n const infoTable = new CLITable({\n colWidths: [20, 50],\n chars: { mid: '', 'left-mid': '', 'mid-mid': '', 'right-mid': '' },\n });\n\n infoTable.push(\n [chalk.blue('Time'), `${new Date()}`],\n [chalk.blue('Launched in'), `${Date.now() - app.config.launchedAt} ms`],\n [chalk.blue('Environment'), app.config.environment],\n [chalk.blue('Process PID'), process.pid],\n [chalk.blue('Version'), `${app.config.info.strapi} (node ${process.version})`],\n [chalk.blue('Edition'), app.EE ? 'Enterprise' : 'Community'],\n [chalk.blue('Database'), app.db?.dialect.client]\n );\n\n console.log(infoTable.toString());\n console.log();\n console.log(chalk.black.bgWhite(_.padEnd(columns, ' Actions available')));\n console.log();\n },\n\n logFirstStartupMessage() {\n if (!strapi.config.get('server.logger.startup.enabled')) {\n return;\n }\n\n this.logStats();\n\n console.log(chalk.bold('One more thing...'));\n console.log(\n chalk.grey('Create your first administrator 💻 by going to the administration panel at:')\n );\n console.log();\n\n const addressTable = new CLITable();\n\n const adminUrl = strapi.config.get('admin.absoluteUrl');\n addressTable.push([chalk.bold(adminUrl)]);\n\n console.log(`${addressTable.toString()}`);\n console.log();\n },\n\n logDefaultStartupMessage() {\n if (!strapi.config.get('server.logger.startup.enabled')) {\n return;\n }\n this.logStats();\n\n console.log(chalk.bold('Welcome back!'));\n\n if (app.config.get('admin.serveAdminPanel') === true) {\n console.log(chalk.grey('To manage your project 🚀, go to the administration panel at:'));\n const adminUrl = strapi.config.get('admin.absoluteUrl');\n console.log(chalk.bold(adminUrl));\n console.log();\n }\n\n console.log(chalk.grey('To access the server ⚡️, go to:'));\n const serverUrl = strapi.config.get('server.absoluteUrl');\n console.log(chalk.bold(serverUrl));\n console.log();\n },\n\n logStartupMessage({ isInitialized }: { isInitialized: boolean }) {\n if (!strapi.config.get('server.logger.startup.enabled')) {\n return;\n }\n if (!isInitialized) {\n this.logFirstStartupMessage();\n } else {\n this.logDefaultStartupMessage();\n }\n },\n };\n};\n"],"names":[],"mappings":";;;AAMa,MAAA,sBAAsB,CAAC,QAAqB;AAChD,SAAA;AAAA,IACL,WAAW;AACT,YAAM,UAAU,KAAK,IAAI,QAAQ,OAAO,SAAS,EAAE,IAAI;AACvD,cAAQ,IAAI;AACJ,cAAA,IAAI,MAAM,MAAM,QAAQ,EAAE,OAAO,SAAS,sBAAsB,CAAC,CAAC;AAC1E,cAAQ,IAAI;AAEN,YAAA,YAAY,IAAI,SAAS;AAAA,QAC7B,WAAW,CAAC,IAAI,EAAE;AAAA,QAClB,OAAO,EAAE,KAAK,IAAI,YAAY,IAAI,WAAW,IAAI,aAAa,GAAG;AAAA,MAAA,CAClE;AAES,gBAAA;AAAA,QACR,CAAC,MAAM,KAAK,MAAM,GAAG,GAAG,oBAAI,KAAM,CAAA,EAAE;AAAA,QACpC,CAAC,MAAM,KAAK,aAAa,GAAG,GAAG,KAAK,IAAA,IAAQ,IAAI,OAAO,UAAU,KAAK;AAAA,QACtE,CAAC,MAAM,KAAK,aAAa,GAAG,IAAI,OAAO,WAAW;AAAA,QAClD,CAAC,MAAM,KAAK,aAAa,GAAG,QAAQ,GAAG;AAAA,QACvC,CAAC,MAAM,KAAK,SAAS,GAAG,GAAG,IAAI,OAAO,KAAK,MAAM,UAAU,QAAQ,OAAO,GAAG;AAAA,QAC7E,CAAC,MAAM,KAAK,SAAS,GAAG,IAAI,KAAK,eAAe,WAAW;AAAA,QAC3D,CAAC,MAAM,KAAK,UAAU,GAAG,IAAI,IAAI,QAAQ,MAAM;AAAA,MAAA;AAGzC,cAAA,IAAI,UAAU,SAAU,CAAA;AAChC,cAAQ,IAAI;AACJ,cAAA,IAAI,MAAM,MAAM,QAAQ,EAAE,OAAO,SAAS,oBAAoB,CAAC,CAAC;AACxE,cAAQ,IAAI;AAAA,IACd;AAAA,IAEA,yBAAyB;AACvB,UAAI,CAAC,OAAO,OAAO,IAAI,+BAA+B,GAAG;AACvD;AAAA,MACF;AAEA,WAAK,SAAS;AAEd,cAAQ,IAAI,MAAM,KAAK,mBAAmB,CAAC;AACnC,cAAA;AAAA,QACN,MAAM,KAAK,6EAA6E;AAAA,MAAA;AAE1F,cAAQ,IAAI;AAEN,YAAA,eAAe,IAAI;AAEzB,YAAM,WAAW,OAAO,OAAO,IAAI,mBAAmB;AACtD,mBAAa,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC;AAExC,cAAQ,IAAI,GAAG,aAAa,SAAA,CAAU,EAAE;AACxC,cAAQ,IAAI;AAAA,IACd;AAAA,IAEA,2BAA2B;AACzB,UAAI,CAAC,OAAO,OAAO,IAAI,+BAA+B,GAAG;AACvD;AAAA,MACF;AACA,WAAK,SAAS;AAEd,cAAQ,IAAI,MAAM,KAAK,eAAe,CAAC;AAEvC,UAAI,IAAI,OAAO,IAAI,uBAAuB,MAAM,MAAM;AACpD,gBAAQ,IAAI,MAAM,KAAK,+DAA+D,CAAC;AACvF,cAAM,WAAW,OAAO,OAAO,IAAI,mBAAmB;AACtD,gBAAQ,IAAI,MAAM,KAAK,QAAQ,CAAC;AAChC,gBAAQ,IAAI;AAAA,MACd;AAEA,cAAQ,IAAI,MAAM,KAAK,iCAAiC,CAAC;AACzD,YAAM,YAAY,OAAO,OAAO,IAAI,oBAAoB;AACxD,cAAQ,IAAI,MAAM,KAAK,SAAS,CAAC;AACjC,cAAQ,IAAI;AAAA,IACd;AAAA,IAEA,kBAAkB,EAAE,iBAA6C;AAC/D,UAAI,CAAC,OAAO,OAAO,IAAI,+BAA+B,GAAG;AACvD;AAAA,MACF;AACA,UAAI,CAAC,eAAe;AAClB,aAAK,uBAAuB;AAAA,MAAA,OACvB;AACL,aAAK,yBAAyB;AAAA,MAChC;AAAA,IACF;AAAA,EAAA;AAEJ;"}
1
+ {"version":3,"file":"startup-logger.mjs","sources":["../../src/utils/startup-logger.ts"],"sourcesContent":["import chalk from 'chalk';\nimport CLITable from 'cli-table3';\nimport _ from 'lodash/fp';\n\nimport type { Core } from '@strapi/types';\n\nexport const createStartupLogger = (app: Core.Strapi) => {\n return {\n logStats() {\n const columns = Math.min(process.stderr.columns, 80) - 2;\n console.log();\n console.log(chalk.black.bgWhite(_.padEnd(columns, ' Project information')));\n console.log();\n\n const infoTable = new CLITable({\n colWidths: [20, 50],\n chars: { mid: '', 'left-mid': '', 'mid-mid': '', 'right-mid': '' },\n });\n\n infoTable.push(\n [chalk.blue('Time'), `${new Date()}`],\n [chalk.blue('Launched in'), `${Date.now() - app.config.launchedAt} ms`],\n [chalk.blue('Environment'), app.config.environment],\n [chalk.blue('Process PID'), process.pid],\n [chalk.blue('Version'), `${app.config.info.strapi} (node ${process.version})`],\n [chalk.blue('Edition'), app.EE ? 'Enterprise' : 'Community'],\n [chalk.blue('Database'), app.db?.dialect.client]\n );\n\n console.log(infoTable.toString());\n console.log();\n console.log(chalk.black.bgWhite(_.padEnd(columns, ' Actions available')));\n console.log();\n },\n\n logFirstStartupMessage() {\n if (!strapi.config.get('server.logger.startup.enabled')) {\n return;\n }\n\n this.logStats();\n\n console.log(chalk.bold('One more thing...'));\n console.log(\n chalk.grey('Create your first administrator 💻 by going to the administration panel at:')\n );\n console.log();\n\n const addressTable = new CLITable();\n\n const adminUrl = strapi.config.get('admin.absoluteUrl');\n addressTable.push([chalk.bold(adminUrl)]);\n\n console.log(`${addressTable.toString()}`);\n console.log();\n },\n\n logDefaultStartupMessage() {\n if (!strapi.config.get('server.logger.startup.enabled')) {\n return;\n }\n this.logStats();\n\n console.log(chalk.bold('Welcome back!'));\n\n if (app.config.get('admin.serveAdminPanel') === true) {\n console.log(chalk.grey('To manage your project 🚀, go to the administration panel at:'));\n const adminUrl = strapi.config.get('admin.absoluteUrl');\n console.log(chalk.bold(adminUrl));\n console.log();\n }\n\n console.log(chalk.grey('To access the server ⚡️, go to:'));\n const serverUrl = strapi.config.get('server.absoluteUrl');\n console.log(chalk.bold(serverUrl));\n console.log();\n },\n\n logStartupMessage({ isInitialized }: { isInitialized: boolean }) {\n if (!strapi.config.get('server.logger.startup.enabled')) {\n return;\n }\n if (!isInitialized) {\n this.logFirstStartupMessage();\n } else {\n this.logDefaultStartupMessage();\n }\n },\n };\n};\n"],"names":["_"],"mappings":";;;AAMa,MAAA,sBAAsB,CAAC,QAAqB;AAChD,SAAA;AAAA,IACL,WAAW;AACT,YAAM,UAAU,KAAK,IAAI,QAAQ,OAAO,SAAS,EAAE,IAAI;AACvD,cAAQ,IAAI;AACJ,cAAA,IAAI,MAAM,MAAM,QAAQA,GAAE,OAAO,SAAS,sBAAsB,CAAC,CAAC;AAC1E,cAAQ,IAAI;AAEN,YAAA,YAAY,IAAI,SAAS;AAAA,QAC7B,WAAW,CAAC,IAAI,EAAE;AAAA,QAClB,OAAO,EAAE,KAAK,IAAI,YAAY,IAAI,WAAW,IAAI,aAAa,GAAG;AAAA,MAAA,CAClE;AAES,gBAAA;AAAA,QACR,CAAC,MAAM,KAAK,MAAM,GAAG,GAAG,oBAAI,KAAM,CAAA,EAAE;AAAA,QACpC,CAAC,MAAM,KAAK,aAAa,GAAG,GAAG,KAAK,IAAA,IAAQ,IAAI,OAAO,UAAU,KAAK;AAAA,QACtE,CAAC,MAAM,KAAK,aAAa,GAAG,IAAI,OAAO,WAAW;AAAA,QAClD,CAAC,MAAM,KAAK,aAAa,GAAG,QAAQ,GAAG;AAAA,QACvC,CAAC,MAAM,KAAK,SAAS,GAAG,GAAG,IAAI,OAAO,KAAK,MAAM,UAAU,QAAQ,OAAO,GAAG;AAAA,QAC7E,CAAC,MAAM,KAAK,SAAS,GAAG,IAAI,KAAK,eAAe,WAAW;AAAA,QAC3D,CAAC,MAAM,KAAK,UAAU,GAAG,IAAI,IAAI,QAAQ,MAAM;AAAA,MAAA;AAGzC,cAAA,IAAI,UAAU,SAAU,CAAA;AAChC,cAAQ,IAAI;AACJ,cAAA,IAAI,MAAM,MAAM,QAAQA,GAAE,OAAO,SAAS,oBAAoB,CAAC,CAAC;AACxE,cAAQ,IAAI;AAAA,IACd;AAAA,IAEA,yBAAyB;AACvB,UAAI,CAAC,OAAO,OAAO,IAAI,+BAA+B,GAAG;AACvD;AAAA,MACF;AAEA,WAAK,SAAS;AAEd,cAAQ,IAAI,MAAM,KAAK,mBAAmB,CAAC;AACnC,cAAA;AAAA,QACN,MAAM,KAAK,6EAA6E;AAAA,MAAA;AAE1F,cAAQ,IAAI;AAEN,YAAA,eAAe,IAAI;AAEzB,YAAM,WAAW,OAAO,OAAO,IAAI,mBAAmB;AACtD,mBAAa,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC;AAExC,cAAQ,IAAI,GAAG,aAAa,SAAA,CAAU,EAAE;AACxC,cAAQ,IAAI;AAAA,IACd;AAAA,IAEA,2BAA2B;AACzB,UAAI,CAAC,OAAO,OAAO,IAAI,+BAA+B,GAAG;AACvD;AAAA,MACF;AACA,WAAK,SAAS;AAEd,cAAQ,IAAI,MAAM,KAAK,eAAe,CAAC;AAEvC,UAAI,IAAI,OAAO,IAAI,uBAAuB,MAAM,MAAM;AACpD,gBAAQ,IAAI,MAAM,KAAK,+DAA+D,CAAC;AACvF,cAAM,WAAW,OAAO,OAAO,IAAI,mBAAmB;AACtD,gBAAQ,IAAI,MAAM,KAAK,QAAQ,CAAC;AAChC,gBAAQ,IAAI;AAAA,MACd;AAEA,cAAQ,IAAI,MAAM,KAAK,iCAAiC,CAAC;AACzD,YAAM,YAAY,OAAO,OAAO,IAAI,oBAAoB;AACxD,cAAQ,IAAI,MAAM,KAAK,SAAS,CAAC;AACjC,cAAQ,IAAI;AAAA,IACd;AAAA,IAEA,kBAAkB,EAAE,iBAA6C;AAC/D,UAAI,CAAC,OAAO,OAAO,IAAI,+BAA+B,GAAG;AACvD;AAAA,MACF;AACA,UAAI,CAAC,eAAe;AAClB,aAAK,uBAAuB;AAAA,MAAA,OACvB;AACL,aAAK,yBAAyB;AAAA,MAChC;AAAA,IACF;AAAA,EAAA;AAEJ;"}
@@ -2,10 +2,10 @@
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const cuid2 = require("@paralleldrive/cuid2");
4
4
  const assert = require("node:assert");
5
- const _ = require("lodash/fp");
5
+ const fp = require("lodash/fp");
6
6
  const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
7
7
  const assert__default = /* @__PURE__ */ _interopDefault(assert);
8
- const ___default = /* @__PURE__ */ _interopDefault(_);
8
+ const fp__default = /* @__PURE__ */ _interopDefault(fp);
9
9
  const getComponentJoinTableName = (collectionName, identifiers) => {
10
10
  return identifiers.getNameFromTokens([
11
11
  { name: collectionName, compressible: true },
@@ -233,7 +233,7 @@ const transformContentTypesToModels = (contentTypes, identifiers) => {
233
233
  const documentIdAttribute = contentType.modelType === "contentType" ? { documentId: { type: "string", default: createDocumentId } } : {};
234
234
  const reservedAttributeNames = ["document_id", identifiers.ID_COLUMN];
235
235
  Object.keys(contentType.attributes || {}).forEach((attributeName) => {
236
- const snakeCasedAttributeName = ___default.default.snakeCase(attributeName);
236
+ const snakeCasedAttributeName = fp__default.default.snakeCase(attributeName);
237
237
  if (reservedAttributeNames.includes(snakeCasedAttributeName)) {
238
238
  throw new Error(
239
239
  `The attribute "${attributeName}" is reserved and cannot be used in a model. Please rename "${contentType.modelName}" attribute "${attributeName}" to something else.`
@@ -265,7 +265,7 @@ const transformContentTypesToModels = (contentTypes, identifiers) => {
265
265
  {
266
266
  name: identifiers.getIndexName([contentType.collectionName, "documents"]),
267
267
  // Filter attributes that are not in the schema
268
- columns: ["documentId", "locale", "publishedAt"].filter((n) => model.attributes[n]).map((name) => identifiers.getColumnName(___default.default.snakeCase(name)))
268
+ columns: ["documentId", "locale", "publishedAt"].filter((n) => model.attributes[n]).map((name) => identifiers.getColumnName(fp__default.default.snakeCase(name)))
269
269
  }
270
270
  ];
271
271
  }