@strapi/core 5.51.1 → 5.52.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/dist/Strapi.d.ts.map +1 -1
  2. package/dist/Strapi.js +12 -6
  3. package/dist/Strapi.js.map +1 -1
  4. package/dist/Strapi.mjs +12 -6
  5. package/dist/Strapi.mjs.map +1 -1
  6. package/dist/compile.js +1 -1
  7. package/dist/compile.js.map +1 -1
  8. package/dist/compile.mjs +1 -1
  9. package/dist/compile.mjs.map +1 -1
  10. package/dist/configuration/urls.js +2 -2
  11. package/dist/configuration/urls.js.map +1 -1
  12. package/dist/configuration/urls.mjs +2 -2
  13. package/dist/configuration/urls.mjs.map +1 -1
  14. package/dist/ee/index.js +2 -2
  15. package/dist/ee/index.js.map +1 -1
  16. package/dist/ee/index.mjs +2 -2
  17. package/dist/ee/index.mjs.map +1 -1
  18. package/dist/index.d.ts +0 -3
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js.map +1 -1
  21. package/dist/index.mjs.map +1 -1
  22. package/dist/loaders/apis.d.ts.map +1 -1
  23. package/dist/loaders/apis.js +3 -1
  24. package/dist/loaders/apis.js.map +1 -1
  25. package/dist/loaders/apis.mjs +3 -1
  26. package/dist/loaders/apis.mjs.map +1 -1
  27. package/dist/loaders/plugins/get-enabled-plugins.js +1 -1
  28. package/dist/loaders/plugins/get-enabled-plugins.js.map +1 -1
  29. package/dist/loaders/plugins/get-enabled-plugins.mjs +1 -1
  30. package/dist/loaders/plugins/get-enabled-plugins.mjs.map +1 -1
  31. package/dist/loaders/plugins/index.js +2 -2
  32. package/dist/loaders/plugins/index.js.map +1 -1
  33. package/dist/loaders/plugins/index.mjs +2 -2
  34. package/dist/loaders/plugins/index.mjs.map +1 -1
  35. package/dist/migrations/database/5.0.0-discard-drafts.js +9 -9
  36. package/dist/migrations/database/5.0.0-discard-drafts.js.map +1 -1
  37. package/dist/migrations/database/5.0.0-discard-drafts.mjs +9 -9
  38. package/dist/migrations/database/5.0.0-discard-drafts.mjs.map +1 -1
  39. package/dist/package.json.js +15 -15
  40. package/dist/package.json.mjs +15 -15
  41. package/dist/services/content-api/index.js +1 -1
  42. package/dist/services/content-api/index.js.map +1 -1
  43. package/dist/services/content-api/index.mjs +1 -1
  44. package/dist/services/content-api/index.mjs.map +1 -1
  45. package/dist/services/content-api/permissions/engine.d.ts +3 -3
  46. package/dist/services/content-api/permissions/engine.d.ts.map +1 -1
  47. package/dist/services/content-api/permissions/engine.js +1 -5
  48. package/dist/services/content-api/permissions/engine.js.map +1 -1
  49. package/dist/services/content-api/permissions/engine.mjs +2 -2
  50. package/dist/services/content-api/permissions/engine.mjs.map +1 -1
  51. package/dist/services/core-store.js +1 -1
  52. package/dist/services/core-store.js.map +1 -1
  53. package/dist/services/core-store.mjs +1 -1
  54. package/dist/services/core-store.mjs.map +1 -1
  55. package/dist/services/document-service/repository.js +2 -2
  56. package/dist/services/document-service/repository.js.map +1 -1
  57. package/dist/services/document-service/repository.mjs +2 -2
  58. package/dist/services/document-service/repository.mjs.map +1 -1
  59. package/dist/services/document-service/utils/clean-component-join-table.js +2 -2
  60. package/dist/services/document-service/utils/clean-component-join-table.js.map +1 -1
  61. package/dist/services/document-service/utils/clean-component-join-table.mjs +2 -2
  62. package/dist/services/document-service/utils/clean-component-join-table.mjs.map +1 -1
  63. package/dist/services/document-service/utils/clone-relations.js +1 -1
  64. package/dist/services/document-service/utils/clone-relations.js.map +1 -1
  65. package/dist/services/document-service/utils/clone-relations.mjs +1 -1
  66. package/dist/services/document-service/utils/clone-relations.mjs.map +1 -1
  67. package/dist/services/entity-validator/blocks-validator.js +1 -1
  68. package/dist/services/entity-validator/blocks-validator.js.map +1 -1
  69. package/dist/services/entity-validator/blocks-validator.mjs +1 -1
  70. package/dist/services/entity-validator/blocks-validator.mjs.map +1 -1
  71. package/dist/services/entity-validator/index.js +23 -5
  72. package/dist/services/entity-validator/index.js.map +1 -1
  73. package/dist/services/entity-validator/index.mjs +1 -1
  74. package/dist/services/entity-validator/index.mjs.map +1 -1
  75. package/dist/services/mcp/handlers/handlePost.d.ts.map +1 -1
  76. package/dist/services/mcp/handlers/handlePost.js +3 -0
  77. package/dist/services/mcp/handlers/handlePost.js.map +1 -1
  78. package/dist/services/mcp/handlers/handlePost.mjs +3 -0
  79. package/dist/services/mcp/handlers/handlePost.mjs.map +1 -1
  80. package/dist/services/metrics/sender.js +1 -1
  81. package/dist/services/metrics/sender.js.map +1 -1
  82. package/dist/services/metrics/sender.mjs +1 -1
  83. package/dist/services/metrics/sender.mjs.map +1 -1
  84. package/dist/services/server/index.d.ts.map +1 -1
  85. package/dist/services/server/index.js +2 -0
  86. package/dist/services/server/index.js.map +1 -1
  87. package/dist/services/server/index.mjs +2 -0
  88. package/dist/services/server/index.mjs.map +1 -1
  89. package/dist/services/server/koa-methods.d.ts +6 -0
  90. package/dist/services/server/koa-methods.d.ts.map +1 -1
  91. package/dist/services/server/koa-methods.js.map +1 -1
  92. package/dist/services/server/koa-methods.mjs.map +1 -1
  93. package/dist/services/server/koa.d.ts +3 -1
  94. package/dist/services/server/koa.d.ts.map +1 -1
  95. package/dist/services/server/koa.js +3 -1
  96. package/dist/services/server/koa.js.map +1 -1
  97. package/dist/services/server/koa.mjs +3 -1
  98. package/dist/services/server/koa.mjs.map +1 -1
  99. package/dist/services/server/middleware.js +1 -1
  100. package/dist/services/server/middleware.js.map +1 -1
  101. package/dist/services/server/middleware.mjs +1 -1
  102. package/dist/services/server/middleware.mjs.map +1 -1
  103. package/dist/services/server/register-middlewares.js +1 -1
  104. package/dist/services/server/register-middlewares.js.map +1 -1
  105. package/dist/services/server/register-middlewares.mjs +1 -1
  106. package/dist/services/server/register-middlewares.mjs.map +1 -1
  107. package/dist/services/server/routing.js +1 -1
  108. package/dist/services/server/routing.js.map +1 -1
  109. package/dist/services/server/routing.mjs +1 -1
  110. package/dist/services/server/routing.mjs.map +1 -1
  111. package/dist/services/session-manager.d.ts.map +1 -1
  112. package/dist/services/session-manager.js +5 -5
  113. package/dist/services/session-manager.js.map +1 -1
  114. package/dist/services/session-manager.mjs +5 -5
  115. package/dist/services/session-manager.mjs.map +1 -1
  116. package/package.json +15 -15
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var name = "@strapi/core";
6
- var version = "5.51.1";
6
+ var version = "5.52.0";
7
7
  var description = "Core of Strapi";
8
8
  var homepage = "https://strapi.io";
9
9
  var bugs = {
@@ -63,17 +63,17 @@ var dependencies = {
63
63
  "@casl/ability": "6.7.5",
64
64
  "@koa/cors": "5.0.0",
65
65
  "@koa/router": "12.0.2",
66
- "@modelcontextprotocol/sdk": "1.29.0",
66
+ "@modelcontextprotocol/sdk": "1.30.0",
67
67
  "@paralleldrive/cuid2": "2.2.2",
68
- "@strapi/admin": "5.51.1",
69
- "@strapi/database": "5.51.1",
70
- "@strapi/generators": "5.51.1",
71
- "@strapi/logger": "5.51.1",
72
- "@strapi/openapi": "5.51.1",
73
- "@strapi/permissions": "5.51.1",
74
- "@strapi/types": "5.51.1",
75
- "@strapi/typescript-utils": "5.51.1",
76
- "@strapi/utils": "5.51.1",
68
+ "@strapi/admin": "5.52.0",
69
+ "@strapi/database": "5.52.0",
70
+ "@strapi/generators": "5.52.0",
71
+ "@strapi/logger": "5.52.0",
72
+ "@strapi/openapi": "5.52.0",
73
+ "@strapi/permissions": "5.52.0",
74
+ "@strapi/types": "5.52.0",
75
+ "@strapi/typescript-utils": "5.52.0",
76
+ "@strapi/utils": "5.52.0",
77
77
  "@vercel/stega": "0.1.2",
78
78
  bcryptjs: "2.4.3",
79
79
  boxen: "5.1.2",
@@ -115,7 +115,7 @@ var dependencies = {
115
115
  "resolve.exports": "2.0.2",
116
116
  semver: "7.7.4",
117
117
  typescript: "5.9.3",
118
- undici: "6.27.0",
118
+ undici: "6.28.0",
119
119
  yup: "0.32.9",
120
120
  zod: "3.25.76"
121
121
  };
@@ -137,12 +137,12 @@ var devDependencies = {
137
137
  "@types/mime-types": "2.1.1",
138
138
  "@types/node": "20.19.41",
139
139
  "@types/node-schedule": "2.1.7",
140
- "eslint-config-custom": "5.51.1",
140
+ "eslint-config-custom": "5.52.0",
141
141
  jest: "29.6.0",
142
142
  supertest: "7.2.2",
143
- tsconfig: "5.51.1",
143
+ tsconfig: "5.52.0",
144
144
  vitest: "catalog:",
145
- "vitest-config": "5.51.1"
145
+ "vitest-config": "5.52.0"
146
146
  };
147
147
  var engines = {
148
148
  node: ">=20.0.0 <=26.x.x",
@@ -1,5 +1,5 @@
1
1
  var name = "@strapi/core";
2
- var version = "5.51.1";
2
+ var version = "5.52.0";
3
3
  var description = "Core of Strapi";
4
4
  var homepage = "https://strapi.io";
5
5
  var bugs = {
@@ -59,17 +59,17 @@ var dependencies = {
59
59
  "@casl/ability": "6.7.5",
60
60
  "@koa/cors": "5.0.0",
61
61
  "@koa/router": "12.0.2",
62
- "@modelcontextprotocol/sdk": "1.29.0",
62
+ "@modelcontextprotocol/sdk": "1.30.0",
63
63
  "@paralleldrive/cuid2": "2.2.2",
64
- "@strapi/admin": "5.51.1",
65
- "@strapi/database": "5.51.1",
66
- "@strapi/generators": "5.51.1",
67
- "@strapi/logger": "5.51.1",
68
- "@strapi/openapi": "5.51.1",
69
- "@strapi/permissions": "5.51.1",
70
- "@strapi/types": "5.51.1",
71
- "@strapi/typescript-utils": "5.51.1",
72
- "@strapi/utils": "5.51.1",
64
+ "@strapi/admin": "5.52.0",
65
+ "@strapi/database": "5.52.0",
66
+ "@strapi/generators": "5.52.0",
67
+ "@strapi/logger": "5.52.0",
68
+ "@strapi/openapi": "5.52.0",
69
+ "@strapi/permissions": "5.52.0",
70
+ "@strapi/types": "5.52.0",
71
+ "@strapi/typescript-utils": "5.52.0",
72
+ "@strapi/utils": "5.52.0",
73
73
  "@vercel/stega": "0.1.2",
74
74
  bcryptjs: "2.4.3",
75
75
  boxen: "5.1.2",
@@ -111,7 +111,7 @@ var dependencies = {
111
111
  "resolve.exports": "2.0.2",
112
112
  semver: "7.7.4",
113
113
  typescript: "5.9.3",
114
- undici: "6.27.0",
114
+ undici: "6.28.0",
115
115
  yup: "0.32.9",
116
116
  zod: "3.25.76"
117
117
  };
@@ -133,12 +133,12 @@ var devDependencies = {
133
133
  "@types/mime-types": "2.1.1",
134
134
  "@types/node": "20.19.41",
135
135
  "@types/node-schedule": "2.1.7",
136
- "eslint-config-custom": "5.51.1",
136
+ "eslint-config-custom": "5.52.0",
137
137
  jest: "29.6.0",
138
138
  supertest: "7.2.2",
139
- tsconfig: "5.51.1",
139
+ tsconfig: "5.52.0",
140
140
  vitest: "catalog:",
141
- "vitest-config": "5.51.1"
141
+ "vitest-config": "5.52.0"
142
142
  };
143
143
  var engines = {
144
144
  node: ">=20.0.0 <=26.x.x",
@@ -79,7 +79,7 @@ function resolveSchema(schemaOrFactory) {
79
79
  const mergeOneQueryParamIntoRoute = (route, param, schema, matchRoute)=>{
80
80
  if (matchRoute && !matchRoute(route)) return;
81
81
  const query = {
82
- ...route.request?.query ?? {}
82
+ ...route.request?.query
83
83
  };
84
84
  if (param in query) {
85
85
  throw new Error(`contentAPI.addQueryParams: param "${param}" already exists on route ${route.method} ${route.path}`);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/services/content-api/index.ts"],"sourcesContent":["import _ from 'lodash';\nimport {\n sanitize,\n validate,\n sanitizeRoutesMapForSerialization,\n ALLOWED_QUERY_PARAM_KEYS,\n RESERVED_INPUT_PARAM_KEYS,\n} from '@strapi/utils';\nimport * as z from 'zod/v4';\n\nimport type { Core, Modules, UID } from '@strapi/types';\n\nimport instantiatePermissionsUtilities from './permissions';\n\nconst transformRoutePrefixFor = (pluginName: string) => (route: Core.Route) => {\n const prefix = route.config && route.config.prefix;\n const path = prefix !== undefined ? `${prefix}${route.path}` : `/${pluginName}${route.path}`;\n\n return {\n ...route,\n path,\n };\n};\n\nconst filterContentAPI = (route: Core.Route) => route.info.type === 'content-api';\n\n/**\n * Runtime check for addQueryParams: we only allow scalar or array-of-scalar schemas (no nested objects).\n * We keep this in addition to the ZodQueryParamSchema type because: (1) TypeScript can be bypassed (JS,\n * any, or schema from another Zod instance); (2) it gives a clear, immediate error at registration\n * time instead of a later failure in validate/sanitize. This list is intentionally tied to Zod v4\n * constructor names; if Zod changes internals, this may need updating.\n * Compatibility: Zod 3 and Zod 4 Classic (zod/v4) both use these constructor names and\n * expose ._def with .innerType / .element for Optional/Default/Array. Zod 4 Core/Mini use\n * ._zod.def instead; we only accept schemas from the same zod/v4 instance used here.\n */\nconst ALLOWED_QUERY_SCHEMA_NAMES = new Set([\n 'ZodString',\n 'ZodNumber',\n 'ZodBoolean',\n 'ZodEnum',\n 'ZodOptional',\n 'ZodDefault',\n 'ZodArray',\n]);\n\nfunction assertQueryParamSchema(schema: unknown, param: string): void {\n const name = (schema as { constructor?: { name?: string } })?.constructor?.name ?? '';\n if (!ALLOWED_QUERY_SCHEMA_NAMES.has(name)) {\n throw new Error(\n `contentAPI.addQueryParams: param \"${param}\" schema must be a scalar (string, number, boolean, enum) or array of scalars; got ${name}. Use addInputParams for nested objects.`\n );\n }\n if (name === 'ZodOptional' || name === 'ZodDefault') {\n const inner = (schema as { _def?: { innerType?: unknown } })?._def?.innerType;\n if (inner) assertQueryParamSchema(inner, param);\n return;\n }\n if (name === 'ZodArray') {\n const element = (schema as { _def?: { element?: unknown } })?._def?.element;\n if (element) assertQueryParamSchema(element, param);\n }\n}\n\nfunction resolveSchema<T>(schemaOrFactory: T | ((zInstance: typeof z) => T)): T {\n if (typeof schemaOrFactory === 'function') {\n return (schemaOrFactory as (zInstance: typeof z) => T)(z);\n }\n return schemaOrFactory;\n}\n\nconst mergeOneQueryParamIntoRoute = (\n route: Core.Route,\n param: string,\n schema: z.ZodType,\n matchRoute?: (route: Core.Route) => boolean\n): void => {\n if (matchRoute && !matchRoute(route)) return;\n const query = { ...(route.request?.query ?? {}) };\n if (param in query) {\n throw new Error(\n `contentAPI.addQueryParams: param \"${param}\" already exists on route ${route.method} ${route.path}`\n );\n }\n route.request = { ...route.request, query: { ...query, [param]: schema } };\n};\n\nconst mergeOneInputParamIntoRoute = (\n route: Core.Route,\n param: string,\n schema: z.ZodType,\n matchRoute?: (route: Core.Route) => boolean\n): void => {\n if (matchRoute && !matchRoute(route)) return;\n const jsonKey = 'application/json';\n type RouteBody = NonNullable<NonNullable<Core.Route['request']>['body']>;\n const body: RouteBody = route.request?.body ? { ...route.request.body } : ({} as RouteBody);\n const existing = body[jsonKey];\n const base =\n existing && typeof existing === 'object' && 'shape' in existing\n ? (existing as { shape: Record<string, z.ZodType> }).shape\n : {};\n if (param in base) {\n throw new Error(\n `contentAPI.addInputParams: param \"${param}\" already exists on route ${route.method} ${route.path}`\n );\n }\n body[jsonKey] = z.object({ ...base, [param]: schema }) as RouteBody[keyof RouteBody];\n route.request = { ...route.request, body };\n};\n\n/** Stored options with schema always resolved (never a function). */\ntype ResolvedQueryParamEntry = {\n param: string;\n schema: z.ZodType;\n matchRoute?: (route: Core.Route) => boolean;\n};\ntype ResolvedInputParamEntry = {\n param: string;\n schema: z.ZodType;\n matchRoute?: (route: Core.Route) => boolean;\n};\n\n/**\n * Create a content API container that holds logic, tools and utils. (eg: permissions, ...)\n */\nconst createContentAPI = (strapi: Core.Strapi) => {\n const extraQueryParams: ResolvedQueryParamEntry[] = [];\n const extraInputParams: ResolvedInputParamEntry[] = [];\n\n const addQueryParam = (options: Modules.ContentAPI.QueryParamEntry & { param: string }) => {\n const { param, schema: schemaOrFactory, matchRoute } = options;\n const schema = resolveSchema(schemaOrFactory);\n assertQueryParamSchema(schema, param);\n if ((ALLOWED_QUERY_PARAM_KEYS as readonly string[]).includes(param)) {\n throw new Error(\n `contentAPI.addQueryParams: param \"${param}\" is reserved by Strapi; use a different name`\n );\n }\n if (extraQueryParams.some((o) => o.param === param)) {\n throw new Error(`contentAPI.addQueryParams: param \"${param}\" has already been added`);\n }\n extraQueryParams.push({ param, schema, matchRoute });\n // Params are merged into routes when initRouting() runs (applyExtraParamsToRoutes).\n // We do not merge here: at register() time routes may not exist yet (lazy creation), and\n // merging here would cause double-merge when initRouting runs and 400 \"invalid param\" or\n // \"param already exists\" errors.\n };\n\n const addInputParam = (options: Modules.ContentAPI.InputParamEntry & { param: string }) => {\n const { param, schema: schemaOrFactory, matchRoute } = options;\n const schema = resolveSchema(schemaOrFactory);\n if ((RESERVED_INPUT_PARAM_KEYS as readonly string[]).includes(param)) {\n throw new Error(\n `contentAPI.addInputParams: param \"${param}\" is reserved by Strapi; use a different name`\n );\n }\n if (extraInputParams.some((o) => o.param === param)) {\n throw new Error(`contentAPI.addInputParams: param \"${param}\" has already been added`);\n }\n extraInputParams.push({ param, schema, matchRoute });\n // Params are merged into routes when initRouting() runs (applyExtraParamsToRoutes).\n };\n\n /**\n * Register extra query params. Keys = param names; values = { schema, matchRoute? }.\n * Schemas must be Zod scalar or array-of-scalars (enforced at runtime via assertQueryParamSchema).\n */\n const addQueryParams = (options: Modules.ContentAPI.AddQueryParamsOptions) => {\n Object.entries(options).forEach(([param, rest]) => addQueryParam({ param, ...rest }));\n };\n\n /**\n * Register extra input params (root-level body.data). Keys = param names; values = { schema, matchRoute? }.\n * Any Zod type allowed; enforced at registration time.\n */\n const addInputParams = (options: Modules.ContentAPI.AddInputParamsOptions) => {\n Object.entries(options).forEach(([param, rest]) => addInputParam({ param, ...rest }));\n };\n\n /** Merge all registered extra params into the given routes (mutates in place). Called at route registration. Throws if a param key already exists. */\n const applyExtraParamsToRoutes = (routes: Core.Route[]): void => {\n routes.forEach((route) => {\n for (const { param, schema, matchRoute } of extraQueryParams) {\n mergeOneQueryParamIntoRoute(route, param, schema, matchRoute);\n }\n for (const { param, schema, matchRoute } of extraInputParams) {\n mergeOneInputParamIntoRoute(route, param, schema, matchRoute);\n }\n });\n };\n\n const getRoutesMap = async () => {\n const routesMap: Record<string, Core.Route[]> = {};\n\n _.forEach(strapi.apis, (api, apiName) => {\n const routes = _.flatMap(api.routes, (route) => {\n if ('routes' in route) {\n return route.routes;\n }\n\n return route;\n }).filter(filterContentAPI);\n\n if (routes.length === 0) {\n return;\n }\n\n const apiPrefix = strapi.config.get('api.rest.prefix');\n routesMap[`api::${apiName}`] = routes.map((route) => ({\n ...route,\n path: `${apiPrefix}${route.path}`,\n }));\n });\n\n _.forEach(strapi.plugins, (plugin, pluginName) => {\n const transformPrefix = transformRoutePrefixFor(pluginName);\n\n if (Array.isArray(plugin.routes)) {\n return plugin.routes.map(transformPrefix).filter(filterContentAPI);\n }\n\n const routes = _.flatMap(plugin.routes, (route) => route.routes.map(transformPrefix)).filter(\n filterContentAPI\n );\n\n if (routes.length === 0) {\n return;\n }\n\n const apiPrefix = strapi.config.get('api.rest.prefix');\n routesMap[`plugin::${pluginName}`] = routes.map((route) => ({\n ...route,\n path: `${apiPrefix}${route.path}`,\n }));\n });\n\n return sanitizeRoutesMapForSerialization(routesMap);\n };\n\n const sanitizer = sanitize.createAPISanitizers({\n getModel(uid: string) {\n return strapi.getModel(uid as UID.Schema);\n },\n get sanitizers() {\n return {\n input: strapi.sanitizers.get('content-api.input'),\n output: strapi.sanitizers.get('content-api.output'),\n };\n },\n });\n\n const validator = validate.createAPIValidators({\n getModel(uid: string) {\n return strapi.getModel(uid as UID.Schema);\n },\n get validators() {\n return {\n input: strapi.validators.get('content-api.input'),\n };\n },\n });\n\n return {\n permissions: instantiatePermissionsUtilities(strapi),\n getRoutesMap,\n sanitize: sanitizer,\n validate: validator,\n addQueryParams,\n addInputParams,\n applyExtraParamsToRoutes,\n };\n};\n\nexport default createContentAPI;\n"],"names":["transformRoutePrefixFor","pluginName","route","prefix","config","path","undefined","filterContentAPI","info","type","ALLOWED_QUERY_SCHEMA_NAMES","Set","assertQueryParamSchema","schema","param","name","has","Error","inner","_def","innerType","element","resolveSchema","schemaOrFactory","z","mergeOneQueryParamIntoRoute","matchRoute","query","request","method","mergeOneInputParamIntoRoute","jsonKey","body","existing","base","shape","object","createContentAPI","strapi","extraQueryParams","extraInputParams","addQueryParam","options","ALLOWED_QUERY_PARAM_KEYS","includes","some","o","push","addInputParam","RESERVED_INPUT_PARAM_KEYS","addQueryParams","Object","entries","forEach","rest","addInputParams","applyExtraParamsToRoutes","routes","getRoutesMap","routesMap","_","apis","api","apiName","flatMap","filter","length","apiPrefix","get","map","plugins","plugin","transformPrefix","Array","isArray","sanitizeRoutesMapForSerialization","sanitizer","sanitize","createAPISanitizers","getModel","uid","sanitizers","input","output","validator","validate","createAPIValidators","validators","permissions","instantiatePermissionsUtilities"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/services/content-api/index.ts"],"sourcesContent":["import _ from 'lodash';\nimport {\n sanitize,\n validate,\n sanitizeRoutesMapForSerialization,\n ALLOWED_QUERY_PARAM_KEYS,\n RESERVED_INPUT_PARAM_KEYS,\n} from '@strapi/utils';\nimport * as z from 'zod/v4';\n\nimport type { Core, Modules, UID } from '@strapi/types';\n\nimport instantiatePermissionsUtilities from './permissions';\n\nconst transformRoutePrefixFor = (pluginName: string) => (route: Core.Route) => {\n const prefix = route.config && route.config.prefix;\n const path = prefix !== undefined ? `${prefix}${route.path}` : `/${pluginName}${route.path}`;\n\n return {\n ...route,\n path,\n };\n};\n\nconst filterContentAPI = (route: Core.Route) => route.info.type === 'content-api';\n\n/**\n * Runtime check for addQueryParams: we only allow scalar or array-of-scalar schemas (no nested objects).\n * We keep this in addition to the ZodQueryParamSchema type because: (1) TypeScript can be bypassed (JS,\n * any, or schema from another Zod instance); (2) it gives a clear, immediate error at registration\n * time instead of a later failure in validate/sanitize. This list is intentionally tied to Zod v4\n * constructor names; if Zod changes internals, this may need updating.\n * Compatibility: Zod 3 and Zod 4 Classic (zod/v4) both use these constructor names and\n * expose ._def with .innerType / .element for Optional/Default/Array. Zod 4 Core/Mini use\n * ._zod.def instead; we only accept schemas from the same zod/v4 instance used here.\n */\nconst ALLOWED_QUERY_SCHEMA_NAMES = new Set([\n 'ZodString',\n 'ZodNumber',\n 'ZodBoolean',\n 'ZodEnum',\n 'ZodOptional',\n 'ZodDefault',\n 'ZodArray',\n]);\n\nfunction assertQueryParamSchema(schema: unknown, param: string): void {\n const name = (schema as { constructor?: { name?: string } })?.constructor?.name ?? '';\n if (!ALLOWED_QUERY_SCHEMA_NAMES.has(name)) {\n throw new Error(\n `contentAPI.addQueryParams: param \"${param}\" schema must be a scalar (string, number, boolean, enum) or array of scalars; got ${name}. Use addInputParams for nested objects.`\n );\n }\n if (name === 'ZodOptional' || name === 'ZodDefault') {\n const inner = (schema as { _def?: { innerType?: unknown } })?._def?.innerType;\n if (inner) assertQueryParamSchema(inner, param);\n return;\n }\n if (name === 'ZodArray') {\n const element = (schema as { _def?: { element?: unknown } })?._def?.element;\n if (element) assertQueryParamSchema(element, param);\n }\n}\n\nfunction resolveSchema<T>(schemaOrFactory: T | ((zInstance: typeof z) => T)): T {\n if (typeof schemaOrFactory === 'function') {\n return (schemaOrFactory as (zInstance: typeof z) => T)(z);\n }\n return schemaOrFactory;\n}\n\nconst mergeOneQueryParamIntoRoute = (\n route: Core.Route,\n param: string,\n schema: z.ZodType,\n matchRoute?: (route: Core.Route) => boolean\n): void => {\n if (matchRoute && !matchRoute(route)) return;\n const query = { ...route.request?.query };\n if (param in query) {\n throw new Error(\n `contentAPI.addQueryParams: param \"${param}\" already exists on route ${route.method} ${route.path}`\n );\n }\n route.request = { ...route.request, query: { ...query, [param]: schema } };\n};\n\nconst mergeOneInputParamIntoRoute = (\n route: Core.Route,\n param: string,\n schema: z.ZodType,\n matchRoute?: (route: Core.Route) => boolean\n): void => {\n if (matchRoute && !matchRoute(route)) return;\n const jsonKey = 'application/json';\n type RouteBody = NonNullable<NonNullable<Core.Route['request']>['body']>;\n const body: RouteBody = route.request?.body ? { ...route.request.body } : ({} as RouteBody);\n const existing = body[jsonKey];\n const base =\n existing && typeof existing === 'object' && 'shape' in existing\n ? (existing as { shape: Record<string, z.ZodType> }).shape\n : {};\n if (param in base) {\n throw new Error(\n `contentAPI.addInputParams: param \"${param}\" already exists on route ${route.method} ${route.path}`\n );\n }\n body[jsonKey] = z.object({ ...base, [param]: schema }) as RouteBody[keyof RouteBody];\n route.request = { ...route.request, body };\n};\n\n/** Stored options with schema always resolved (never a function). */\ntype ResolvedQueryParamEntry = {\n param: string;\n schema: z.ZodType;\n matchRoute?: (route: Core.Route) => boolean;\n};\ntype ResolvedInputParamEntry = {\n param: string;\n schema: z.ZodType;\n matchRoute?: (route: Core.Route) => boolean;\n};\n\n/**\n * Create a content API container that holds logic, tools and utils. (eg: permissions, ...)\n */\nconst createContentAPI = (strapi: Core.Strapi) => {\n const extraQueryParams: ResolvedQueryParamEntry[] = [];\n const extraInputParams: ResolvedInputParamEntry[] = [];\n\n const addQueryParam = (options: Modules.ContentAPI.QueryParamEntry & { param: string }) => {\n const { param, schema: schemaOrFactory, matchRoute } = options;\n const schema = resolveSchema(schemaOrFactory);\n assertQueryParamSchema(schema, param);\n if ((ALLOWED_QUERY_PARAM_KEYS as readonly string[]).includes(param)) {\n throw new Error(\n `contentAPI.addQueryParams: param \"${param}\" is reserved by Strapi; use a different name`\n );\n }\n if (extraQueryParams.some((o) => o.param === param)) {\n throw new Error(`contentAPI.addQueryParams: param \"${param}\" has already been added`);\n }\n extraQueryParams.push({ param, schema, matchRoute });\n // Params are merged into routes when initRouting() runs (applyExtraParamsToRoutes).\n // We do not merge here: at register() time routes may not exist yet (lazy creation), and\n // merging here would cause double-merge when initRouting runs and 400 \"invalid param\" or\n // \"param already exists\" errors.\n };\n\n const addInputParam = (options: Modules.ContentAPI.InputParamEntry & { param: string }) => {\n const { param, schema: schemaOrFactory, matchRoute } = options;\n const schema = resolveSchema(schemaOrFactory);\n if ((RESERVED_INPUT_PARAM_KEYS as readonly string[]).includes(param)) {\n throw new Error(\n `contentAPI.addInputParams: param \"${param}\" is reserved by Strapi; use a different name`\n );\n }\n if (extraInputParams.some((o) => o.param === param)) {\n throw new Error(`contentAPI.addInputParams: param \"${param}\" has already been added`);\n }\n extraInputParams.push({ param, schema, matchRoute });\n // Params are merged into routes when initRouting() runs (applyExtraParamsToRoutes).\n };\n\n /**\n * Register extra query params. Keys = param names; values = { schema, matchRoute? }.\n * Schemas must be Zod scalar or array-of-scalars (enforced at runtime via assertQueryParamSchema).\n */\n const addQueryParams = (options: Modules.ContentAPI.AddQueryParamsOptions) => {\n Object.entries(options).forEach(([param, rest]) => addQueryParam({ param, ...rest }));\n };\n\n /**\n * Register extra input params (root-level body.data). Keys = param names; values = { schema, matchRoute? }.\n * Any Zod type allowed; enforced at registration time.\n */\n const addInputParams = (options: Modules.ContentAPI.AddInputParamsOptions) => {\n Object.entries(options).forEach(([param, rest]) => addInputParam({ param, ...rest }));\n };\n\n /** Merge all registered extra params into the given routes (mutates in place). Called at route registration. Throws if a param key already exists. */\n const applyExtraParamsToRoutes = (routes: Core.Route[]): void => {\n routes.forEach((route) => {\n for (const { param, schema, matchRoute } of extraQueryParams) {\n mergeOneQueryParamIntoRoute(route, param, schema, matchRoute);\n }\n for (const { param, schema, matchRoute } of extraInputParams) {\n mergeOneInputParamIntoRoute(route, param, schema, matchRoute);\n }\n });\n };\n\n const getRoutesMap = async () => {\n const routesMap: Record<string, Core.Route[]> = {};\n\n _.forEach(strapi.apis, (api, apiName) => {\n const routes = _.flatMap(api.routes, (route) => {\n if ('routes' in route) {\n return route.routes;\n }\n\n return route;\n }).filter(filterContentAPI);\n\n if (routes.length === 0) {\n return;\n }\n\n const apiPrefix = strapi.config.get('api.rest.prefix');\n routesMap[`api::${apiName}`] = routes.map((route) => ({\n ...route,\n path: `${apiPrefix}${route.path}`,\n }));\n });\n\n _.forEach(strapi.plugins, (plugin, pluginName) => {\n const transformPrefix = transformRoutePrefixFor(pluginName);\n\n if (Array.isArray(plugin.routes)) {\n return plugin.routes.map(transformPrefix).filter(filterContentAPI);\n }\n\n const routes = _.flatMap(plugin.routes, (route) => route.routes.map(transformPrefix)).filter(\n filterContentAPI\n );\n\n if (routes.length === 0) {\n return;\n }\n\n const apiPrefix = strapi.config.get('api.rest.prefix');\n routesMap[`plugin::${pluginName}`] = routes.map((route) => ({\n ...route,\n path: `${apiPrefix}${route.path}`,\n }));\n });\n\n return sanitizeRoutesMapForSerialization(routesMap);\n };\n\n const sanitizer = sanitize.createAPISanitizers({\n getModel(uid: string) {\n return strapi.getModel(uid as UID.Schema);\n },\n get sanitizers() {\n return {\n input: strapi.sanitizers.get('content-api.input'),\n output: strapi.sanitizers.get('content-api.output'),\n };\n },\n });\n\n const validator = validate.createAPIValidators({\n getModel(uid: string) {\n return strapi.getModel(uid as UID.Schema);\n },\n get validators() {\n return {\n input: strapi.validators.get('content-api.input'),\n };\n },\n });\n\n return {\n permissions: instantiatePermissionsUtilities(strapi),\n getRoutesMap,\n sanitize: sanitizer,\n validate: validator,\n addQueryParams,\n addInputParams,\n applyExtraParamsToRoutes,\n };\n};\n\nexport default createContentAPI;\n"],"names":["transformRoutePrefixFor","pluginName","route","prefix","config","path","undefined","filterContentAPI","info","type","ALLOWED_QUERY_SCHEMA_NAMES","Set","assertQueryParamSchema","schema","param","name","has","Error","inner","_def","innerType","element","resolveSchema","schemaOrFactory","z","mergeOneQueryParamIntoRoute","matchRoute","query","request","method","mergeOneInputParamIntoRoute","jsonKey","body","existing","base","shape","object","createContentAPI","strapi","extraQueryParams","extraInputParams","addQueryParam","options","ALLOWED_QUERY_PARAM_KEYS","includes","some","o","push","addInputParam","RESERVED_INPUT_PARAM_KEYS","addQueryParams","Object","entries","forEach","rest","addInputParams","applyExtraParamsToRoutes","routes","getRoutesMap","routesMap","_","apis","api","apiName","flatMap","filter","length","apiPrefix","get","map","plugins","plugin","transformPrefix","Array","isArray","sanitizeRoutesMapForSerialization","sanitizer","sanitize","createAPISanitizers","getModel","uid","sanitizers","input","output","validator","validate","createAPIValidators","validators","permissions","instantiatePermissionsUtilities"],"mappings":"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"}
@@ -54,7 +54,7 @@ function resolveSchema(schemaOrFactory) {
54
54
  const mergeOneQueryParamIntoRoute = (route, param, schema, matchRoute)=>{
55
55
  if (matchRoute && !matchRoute(route)) return;
56
56
  const query = {
57
- ...route.request?.query ?? {}
57
+ ...route.request?.query
58
58
  };
59
59
  if (param in query) {
60
60
  throw new Error(`contentAPI.addQueryParams: param "${param}" already exists on route ${route.method} ${route.path}`);
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../src/services/content-api/index.ts"],"sourcesContent":["import _ from 'lodash';\nimport {\n sanitize,\n validate,\n sanitizeRoutesMapForSerialization,\n ALLOWED_QUERY_PARAM_KEYS,\n RESERVED_INPUT_PARAM_KEYS,\n} from '@strapi/utils';\nimport * as z from 'zod/v4';\n\nimport type { Core, Modules, UID } from '@strapi/types';\n\nimport instantiatePermissionsUtilities from './permissions';\n\nconst transformRoutePrefixFor = (pluginName: string) => (route: Core.Route) => {\n const prefix = route.config && route.config.prefix;\n const path = prefix !== undefined ? `${prefix}${route.path}` : `/${pluginName}${route.path}`;\n\n return {\n ...route,\n path,\n };\n};\n\nconst filterContentAPI = (route: Core.Route) => route.info.type === 'content-api';\n\n/**\n * Runtime check for addQueryParams: we only allow scalar or array-of-scalar schemas (no nested objects).\n * We keep this in addition to the ZodQueryParamSchema type because: (1) TypeScript can be bypassed (JS,\n * any, or schema from another Zod instance); (2) it gives a clear, immediate error at registration\n * time instead of a later failure in validate/sanitize. This list is intentionally tied to Zod v4\n * constructor names; if Zod changes internals, this may need updating.\n * Compatibility: Zod 3 and Zod 4 Classic (zod/v4) both use these constructor names and\n * expose ._def with .innerType / .element for Optional/Default/Array. Zod 4 Core/Mini use\n * ._zod.def instead; we only accept schemas from the same zod/v4 instance used here.\n */\nconst ALLOWED_QUERY_SCHEMA_NAMES = new Set([\n 'ZodString',\n 'ZodNumber',\n 'ZodBoolean',\n 'ZodEnum',\n 'ZodOptional',\n 'ZodDefault',\n 'ZodArray',\n]);\n\nfunction assertQueryParamSchema(schema: unknown, param: string): void {\n const name = (schema as { constructor?: { name?: string } })?.constructor?.name ?? '';\n if (!ALLOWED_QUERY_SCHEMA_NAMES.has(name)) {\n throw new Error(\n `contentAPI.addQueryParams: param \"${param}\" schema must be a scalar (string, number, boolean, enum) or array of scalars; got ${name}. Use addInputParams for nested objects.`\n );\n }\n if (name === 'ZodOptional' || name === 'ZodDefault') {\n const inner = (schema as { _def?: { innerType?: unknown } })?._def?.innerType;\n if (inner) assertQueryParamSchema(inner, param);\n return;\n }\n if (name === 'ZodArray') {\n const element = (schema as { _def?: { element?: unknown } })?._def?.element;\n if (element) assertQueryParamSchema(element, param);\n }\n}\n\nfunction resolveSchema<T>(schemaOrFactory: T | ((zInstance: typeof z) => T)): T {\n if (typeof schemaOrFactory === 'function') {\n return (schemaOrFactory as (zInstance: typeof z) => T)(z);\n }\n return schemaOrFactory;\n}\n\nconst mergeOneQueryParamIntoRoute = (\n route: Core.Route,\n param: string,\n schema: z.ZodType,\n matchRoute?: (route: Core.Route) => boolean\n): void => {\n if (matchRoute && !matchRoute(route)) return;\n const query = { ...(route.request?.query ?? {}) };\n if (param in query) {\n throw new Error(\n `contentAPI.addQueryParams: param \"${param}\" already exists on route ${route.method} ${route.path}`\n );\n }\n route.request = { ...route.request, query: { ...query, [param]: schema } };\n};\n\nconst mergeOneInputParamIntoRoute = (\n route: Core.Route,\n param: string,\n schema: z.ZodType,\n matchRoute?: (route: Core.Route) => boolean\n): void => {\n if (matchRoute && !matchRoute(route)) return;\n const jsonKey = 'application/json';\n type RouteBody = NonNullable<NonNullable<Core.Route['request']>['body']>;\n const body: RouteBody = route.request?.body ? { ...route.request.body } : ({} as RouteBody);\n const existing = body[jsonKey];\n const base =\n existing && typeof existing === 'object' && 'shape' in existing\n ? (existing as { shape: Record<string, z.ZodType> }).shape\n : {};\n if (param in base) {\n throw new Error(\n `contentAPI.addInputParams: param \"${param}\" already exists on route ${route.method} ${route.path}`\n );\n }\n body[jsonKey] = z.object({ ...base, [param]: schema }) as RouteBody[keyof RouteBody];\n route.request = { ...route.request, body };\n};\n\n/** Stored options with schema always resolved (never a function). */\ntype ResolvedQueryParamEntry = {\n param: string;\n schema: z.ZodType;\n matchRoute?: (route: Core.Route) => boolean;\n};\ntype ResolvedInputParamEntry = {\n param: string;\n schema: z.ZodType;\n matchRoute?: (route: Core.Route) => boolean;\n};\n\n/**\n * Create a content API container that holds logic, tools and utils. (eg: permissions, ...)\n */\nconst createContentAPI = (strapi: Core.Strapi) => {\n const extraQueryParams: ResolvedQueryParamEntry[] = [];\n const extraInputParams: ResolvedInputParamEntry[] = [];\n\n const addQueryParam = (options: Modules.ContentAPI.QueryParamEntry & { param: string }) => {\n const { param, schema: schemaOrFactory, matchRoute } = options;\n const schema = resolveSchema(schemaOrFactory);\n assertQueryParamSchema(schema, param);\n if ((ALLOWED_QUERY_PARAM_KEYS as readonly string[]).includes(param)) {\n throw new Error(\n `contentAPI.addQueryParams: param \"${param}\" is reserved by Strapi; use a different name`\n );\n }\n if (extraQueryParams.some((o) => o.param === param)) {\n throw new Error(`contentAPI.addQueryParams: param \"${param}\" has already been added`);\n }\n extraQueryParams.push({ param, schema, matchRoute });\n // Params are merged into routes when initRouting() runs (applyExtraParamsToRoutes).\n // We do not merge here: at register() time routes may not exist yet (lazy creation), and\n // merging here would cause double-merge when initRouting runs and 400 \"invalid param\" or\n // \"param already exists\" errors.\n };\n\n const addInputParam = (options: Modules.ContentAPI.InputParamEntry & { param: string }) => {\n const { param, schema: schemaOrFactory, matchRoute } = options;\n const schema = resolveSchema(schemaOrFactory);\n if ((RESERVED_INPUT_PARAM_KEYS as readonly string[]).includes(param)) {\n throw new Error(\n `contentAPI.addInputParams: param \"${param}\" is reserved by Strapi; use a different name`\n );\n }\n if (extraInputParams.some((o) => o.param === param)) {\n throw new Error(`contentAPI.addInputParams: param \"${param}\" has already been added`);\n }\n extraInputParams.push({ param, schema, matchRoute });\n // Params are merged into routes when initRouting() runs (applyExtraParamsToRoutes).\n };\n\n /**\n * Register extra query params. Keys = param names; values = { schema, matchRoute? }.\n * Schemas must be Zod scalar or array-of-scalars (enforced at runtime via assertQueryParamSchema).\n */\n const addQueryParams = (options: Modules.ContentAPI.AddQueryParamsOptions) => {\n Object.entries(options).forEach(([param, rest]) => addQueryParam({ param, ...rest }));\n };\n\n /**\n * Register extra input params (root-level body.data). Keys = param names; values = { schema, matchRoute? }.\n * Any Zod type allowed; enforced at registration time.\n */\n const addInputParams = (options: Modules.ContentAPI.AddInputParamsOptions) => {\n Object.entries(options).forEach(([param, rest]) => addInputParam({ param, ...rest }));\n };\n\n /** Merge all registered extra params into the given routes (mutates in place). Called at route registration. Throws if a param key already exists. */\n const applyExtraParamsToRoutes = (routes: Core.Route[]): void => {\n routes.forEach((route) => {\n for (const { param, schema, matchRoute } of extraQueryParams) {\n mergeOneQueryParamIntoRoute(route, param, schema, matchRoute);\n }\n for (const { param, schema, matchRoute } of extraInputParams) {\n mergeOneInputParamIntoRoute(route, param, schema, matchRoute);\n }\n });\n };\n\n const getRoutesMap = async () => {\n const routesMap: Record<string, Core.Route[]> = {};\n\n _.forEach(strapi.apis, (api, apiName) => {\n const routes = _.flatMap(api.routes, (route) => {\n if ('routes' in route) {\n return route.routes;\n }\n\n return route;\n }).filter(filterContentAPI);\n\n if (routes.length === 0) {\n return;\n }\n\n const apiPrefix = strapi.config.get('api.rest.prefix');\n routesMap[`api::${apiName}`] = routes.map((route) => ({\n ...route,\n path: `${apiPrefix}${route.path}`,\n }));\n });\n\n _.forEach(strapi.plugins, (plugin, pluginName) => {\n const transformPrefix = transformRoutePrefixFor(pluginName);\n\n if (Array.isArray(plugin.routes)) {\n return plugin.routes.map(transformPrefix).filter(filterContentAPI);\n }\n\n const routes = _.flatMap(plugin.routes, (route) => route.routes.map(transformPrefix)).filter(\n filterContentAPI\n );\n\n if (routes.length === 0) {\n return;\n }\n\n const apiPrefix = strapi.config.get('api.rest.prefix');\n routesMap[`plugin::${pluginName}`] = routes.map((route) => ({\n ...route,\n path: `${apiPrefix}${route.path}`,\n }));\n });\n\n return sanitizeRoutesMapForSerialization(routesMap);\n };\n\n const sanitizer = sanitize.createAPISanitizers({\n getModel(uid: string) {\n return strapi.getModel(uid as UID.Schema);\n },\n get sanitizers() {\n return {\n input: strapi.sanitizers.get('content-api.input'),\n output: strapi.sanitizers.get('content-api.output'),\n };\n },\n });\n\n const validator = validate.createAPIValidators({\n getModel(uid: string) {\n return strapi.getModel(uid as UID.Schema);\n },\n get validators() {\n return {\n input: strapi.validators.get('content-api.input'),\n };\n },\n });\n\n return {\n permissions: instantiatePermissionsUtilities(strapi),\n getRoutesMap,\n sanitize: sanitizer,\n validate: validator,\n addQueryParams,\n addInputParams,\n applyExtraParamsToRoutes,\n };\n};\n\nexport default createContentAPI;\n"],"names":["transformRoutePrefixFor","pluginName","route","prefix","config","path","undefined","filterContentAPI","info","type","ALLOWED_QUERY_SCHEMA_NAMES","Set","assertQueryParamSchema","schema","param","name","has","Error","inner","_def","innerType","element","resolveSchema","schemaOrFactory","z","mergeOneQueryParamIntoRoute","matchRoute","query","request","method","mergeOneInputParamIntoRoute","jsonKey","body","existing","base","shape","object","createContentAPI","strapi","extraQueryParams","extraInputParams","addQueryParam","options","ALLOWED_QUERY_PARAM_KEYS","includes","some","o","push","addInputParam","RESERVED_INPUT_PARAM_KEYS","addQueryParams","Object","entries","forEach","rest","addInputParams","applyExtraParamsToRoutes","routes","getRoutesMap","routesMap","_","apis","api","apiName","flatMap","filter","length","apiPrefix","get","map","plugins","plugin","transformPrefix","Array","isArray","sanitizeRoutesMapForSerialization","sanitizer","sanitize","createAPISanitizers","getModel","uid","sanitizers","input","output","validator","validate","createAPIValidators","validators","permissions","instantiatePermissionsUtilities"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../src/services/content-api/index.ts"],"sourcesContent":["import _ from 'lodash';\nimport {\n sanitize,\n validate,\n sanitizeRoutesMapForSerialization,\n ALLOWED_QUERY_PARAM_KEYS,\n RESERVED_INPUT_PARAM_KEYS,\n} from '@strapi/utils';\nimport * as z from 'zod/v4';\n\nimport type { Core, Modules, UID } from '@strapi/types';\n\nimport instantiatePermissionsUtilities from './permissions';\n\nconst transformRoutePrefixFor = (pluginName: string) => (route: Core.Route) => {\n const prefix = route.config && route.config.prefix;\n const path = prefix !== undefined ? `${prefix}${route.path}` : `/${pluginName}${route.path}`;\n\n return {\n ...route,\n path,\n };\n};\n\nconst filterContentAPI = (route: Core.Route) => route.info.type === 'content-api';\n\n/**\n * Runtime check for addQueryParams: we only allow scalar or array-of-scalar schemas (no nested objects).\n * We keep this in addition to the ZodQueryParamSchema type because: (1) TypeScript can be bypassed (JS,\n * any, or schema from another Zod instance); (2) it gives a clear, immediate error at registration\n * time instead of a later failure in validate/sanitize. This list is intentionally tied to Zod v4\n * constructor names; if Zod changes internals, this may need updating.\n * Compatibility: Zod 3 and Zod 4 Classic (zod/v4) both use these constructor names and\n * expose ._def with .innerType / .element for Optional/Default/Array. Zod 4 Core/Mini use\n * ._zod.def instead; we only accept schemas from the same zod/v4 instance used here.\n */\nconst ALLOWED_QUERY_SCHEMA_NAMES = new Set([\n 'ZodString',\n 'ZodNumber',\n 'ZodBoolean',\n 'ZodEnum',\n 'ZodOptional',\n 'ZodDefault',\n 'ZodArray',\n]);\n\nfunction assertQueryParamSchema(schema: unknown, param: string): void {\n const name = (schema as { constructor?: { name?: string } })?.constructor?.name ?? '';\n if (!ALLOWED_QUERY_SCHEMA_NAMES.has(name)) {\n throw new Error(\n `contentAPI.addQueryParams: param \"${param}\" schema must be a scalar (string, number, boolean, enum) or array of scalars; got ${name}. Use addInputParams for nested objects.`\n );\n }\n if (name === 'ZodOptional' || name === 'ZodDefault') {\n const inner = (schema as { _def?: { innerType?: unknown } })?._def?.innerType;\n if (inner) assertQueryParamSchema(inner, param);\n return;\n }\n if (name === 'ZodArray') {\n const element = (schema as { _def?: { element?: unknown } })?._def?.element;\n if (element) assertQueryParamSchema(element, param);\n }\n}\n\nfunction resolveSchema<T>(schemaOrFactory: T | ((zInstance: typeof z) => T)): T {\n if (typeof schemaOrFactory === 'function') {\n return (schemaOrFactory as (zInstance: typeof z) => T)(z);\n }\n return schemaOrFactory;\n}\n\nconst mergeOneQueryParamIntoRoute = (\n route: Core.Route,\n param: string,\n schema: z.ZodType,\n matchRoute?: (route: Core.Route) => boolean\n): void => {\n if (matchRoute && !matchRoute(route)) return;\n const query = { ...route.request?.query };\n if (param in query) {\n throw new Error(\n `contentAPI.addQueryParams: param \"${param}\" already exists on route ${route.method} ${route.path}`\n );\n }\n route.request = { ...route.request, query: { ...query, [param]: schema } };\n};\n\nconst mergeOneInputParamIntoRoute = (\n route: Core.Route,\n param: string,\n schema: z.ZodType,\n matchRoute?: (route: Core.Route) => boolean\n): void => {\n if (matchRoute && !matchRoute(route)) return;\n const jsonKey = 'application/json';\n type RouteBody = NonNullable<NonNullable<Core.Route['request']>['body']>;\n const body: RouteBody = route.request?.body ? { ...route.request.body } : ({} as RouteBody);\n const existing = body[jsonKey];\n const base =\n existing && typeof existing === 'object' && 'shape' in existing\n ? (existing as { shape: Record<string, z.ZodType> }).shape\n : {};\n if (param in base) {\n throw new Error(\n `contentAPI.addInputParams: param \"${param}\" already exists on route ${route.method} ${route.path}`\n );\n }\n body[jsonKey] = z.object({ ...base, [param]: schema }) as RouteBody[keyof RouteBody];\n route.request = { ...route.request, body };\n};\n\n/** Stored options with schema always resolved (never a function). */\ntype ResolvedQueryParamEntry = {\n param: string;\n schema: z.ZodType;\n matchRoute?: (route: Core.Route) => boolean;\n};\ntype ResolvedInputParamEntry = {\n param: string;\n schema: z.ZodType;\n matchRoute?: (route: Core.Route) => boolean;\n};\n\n/**\n * Create a content API container that holds logic, tools and utils. (eg: permissions, ...)\n */\nconst createContentAPI = (strapi: Core.Strapi) => {\n const extraQueryParams: ResolvedQueryParamEntry[] = [];\n const extraInputParams: ResolvedInputParamEntry[] = [];\n\n const addQueryParam = (options: Modules.ContentAPI.QueryParamEntry & { param: string }) => {\n const { param, schema: schemaOrFactory, matchRoute } = options;\n const schema = resolveSchema(schemaOrFactory);\n assertQueryParamSchema(schema, param);\n if ((ALLOWED_QUERY_PARAM_KEYS as readonly string[]).includes(param)) {\n throw new Error(\n `contentAPI.addQueryParams: param \"${param}\" is reserved by Strapi; use a different name`\n );\n }\n if (extraQueryParams.some((o) => o.param === param)) {\n throw new Error(`contentAPI.addQueryParams: param \"${param}\" has already been added`);\n }\n extraQueryParams.push({ param, schema, matchRoute });\n // Params are merged into routes when initRouting() runs (applyExtraParamsToRoutes).\n // We do not merge here: at register() time routes may not exist yet (lazy creation), and\n // merging here would cause double-merge when initRouting runs and 400 \"invalid param\" or\n // \"param already exists\" errors.\n };\n\n const addInputParam = (options: Modules.ContentAPI.InputParamEntry & { param: string }) => {\n const { param, schema: schemaOrFactory, matchRoute } = options;\n const schema = resolveSchema(schemaOrFactory);\n if ((RESERVED_INPUT_PARAM_KEYS as readonly string[]).includes(param)) {\n throw new Error(\n `contentAPI.addInputParams: param \"${param}\" is reserved by Strapi; use a different name`\n );\n }\n if (extraInputParams.some((o) => o.param === param)) {\n throw new Error(`contentAPI.addInputParams: param \"${param}\" has already been added`);\n }\n extraInputParams.push({ param, schema, matchRoute });\n // Params are merged into routes when initRouting() runs (applyExtraParamsToRoutes).\n };\n\n /**\n * Register extra query params. Keys = param names; values = { schema, matchRoute? }.\n * Schemas must be Zod scalar or array-of-scalars (enforced at runtime via assertQueryParamSchema).\n */\n const addQueryParams = (options: Modules.ContentAPI.AddQueryParamsOptions) => {\n Object.entries(options).forEach(([param, rest]) => addQueryParam({ param, ...rest }));\n };\n\n /**\n * Register extra input params (root-level body.data). Keys = param names; values = { schema, matchRoute? }.\n * Any Zod type allowed; enforced at registration time.\n */\n const addInputParams = (options: Modules.ContentAPI.AddInputParamsOptions) => {\n Object.entries(options).forEach(([param, rest]) => addInputParam({ param, ...rest }));\n };\n\n /** Merge all registered extra params into the given routes (mutates in place). Called at route registration. Throws if a param key already exists. */\n const applyExtraParamsToRoutes = (routes: Core.Route[]): void => {\n routes.forEach((route) => {\n for (const { param, schema, matchRoute } of extraQueryParams) {\n mergeOneQueryParamIntoRoute(route, param, schema, matchRoute);\n }\n for (const { param, schema, matchRoute } of extraInputParams) {\n mergeOneInputParamIntoRoute(route, param, schema, matchRoute);\n }\n });\n };\n\n const getRoutesMap = async () => {\n const routesMap: Record<string, Core.Route[]> = {};\n\n _.forEach(strapi.apis, (api, apiName) => {\n const routes = _.flatMap(api.routes, (route) => {\n if ('routes' in route) {\n return route.routes;\n }\n\n return route;\n }).filter(filterContentAPI);\n\n if (routes.length === 0) {\n return;\n }\n\n const apiPrefix = strapi.config.get('api.rest.prefix');\n routesMap[`api::${apiName}`] = routes.map((route) => ({\n ...route,\n path: `${apiPrefix}${route.path}`,\n }));\n });\n\n _.forEach(strapi.plugins, (plugin, pluginName) => {\n const transformPrefix = transformRoutePrefixFor(pluginName);\n\n if (Array.isArray(plugin.routes)) {\n return plugin.routes.map(transformPrefix).filter(filterContentAPI);\n }\n\n const routes = _.flatMap(plugin.routes, (route) => route.routes.map(transformPrefix)).filter(\n filterContentAPI\n );\n\n if (routes.length === 0) {\n return;\n }\n\n const apiPrefix = strapi.config.get('api.rest.prefix');\n routesMap[`plugin::${pluginName}`] = routes.map((route) => ({\n ...route,\n path: `${apiPrefix}${route.path}`,\n }));\n });\n\n return sanitizeRoutesMapForSerialization(routesMap);\n };\n\n const sanitizer = sanitize.createAPISanitizers({\n getModel(uid: string) {\n return strapi.getModel(uid as UID.Schema);\n },\n get sanitizers() {\n return {\n input: strapi.sanitizers.get('content-api.input'),\n output: strapi.sanitizers.get('content-api.output'),\n };\n },\n });\n\n const validator = validate.createAPIValidators({\n getModel(uid: string) {\n return strapi.getModel(uid as UID.Schema);\n },\n get validators() {\n return {\n input: strapi.validators.get('content-api.input'),\n };\n },\n });\n\n return {\n permissions: instantiatePermissionsUtilities(strapi),\n getRoutesMap,\n sanitize: sanitizer,\n validate: validator,\n addQueryParams,\n addInputParams,\n applyExtraParamsToRoutes,\n };\n};\n\nexport default createContentAPI;\n"],"names":["transformRoutePrefixFor","pluginName","route","prefix","config","path","undefined","filterContentAPI","info","type","ALLOWED_QUERY_SCHEMA_NAMES","Set","assertQueryParamSchema","schema","param","name","has","Error","inner","_def","innerType","element","resolveSchema","schemaOrFactory","z","mergeOneQueryParamIntoRoute","matchRoute","query","request","method","mergeOneInputParamIntoRoute","jsonKey","body","existing","base","shape","object","createContentAPI","strapi","extraQueryParams","extraInputParams","addQueryParam","options","ALLOWED_QUERY_PARAM_KEYS","includes","some","o","push","addInputParam","RESERVED_INPUT_PARAM_KEYS","addQueryParams","Object","entries","forEach","rest","addInputParams","applyExtraParamsToRoutes","routes","getRoutesMap","routesMap","_","apis","api","apiName","flatMap","filter","length","apiPrefix","get","map","plugins","plugin","transformPrefix","Array","isArray","sanitizeRoutesMapForSerialization","sanitizer","sanitize","createAPISanitizers","getModel","uid","sanitizers","input","output","validator","validate","createAPIValidators","validators","permissions","instantiatePermissionsUtilities"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import permissions from '@strapi/permissions';
2
- type Options = Parameters<typeof permissions.engine.new>[0];
3
- declare const _default: ({ providers }: Options) => permissions.engine.Engine;
1
+ import { engine } from '@strapi/permissions';
2
+ type Options = Parameters<typeof engine.new>[0];
3
+ declare const _default: ({ providers }: Options) => engine.Engine;
4
4
  export default _default;
5
5
  //# sourceMappingURL=engine.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../../../src/services/content-api/permissions/engine.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,qBAAqB,CAAC;AAE9C,KAAK,OAAO,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;yBAE5C,eAAe,OAAO;AAAtC,wBAAiF"}
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../../../src/services/content-api/permissions/engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,KAAK,OAAO,GAAG,UAAU,CAAC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;yBAEhC,eAAe,OAAO;AAAtC,wBAAqE"}
@@ -2,11 +2,7 @@
2
2
 
3
3
  var permissions = require('@strapi/permissions');
4
4
 
5
- function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
6
-
7
- var permissions__default = /*#__PURE__*/_interopDefault(permissions);
8
-
9
- var createPermissionEngine = (({ providers })=>permissions__default.default.engine.new({
5
+ var createPermissionEngine = (({ providers })=>permissions.engine.new({
10
6
  providers
11
7
  }));
12
8
 
@@ -1 +1 @@
1
- {"version":3,"file":"engine.js","sources":["../../../../src/services/content-api/permissions/engine.ts"],"sourcesContent":["import permissions from '@strapi/permissions';\n\ntype Options = Parameters<typeof permissions.engine.new>[0];\n\nexport default ({ providers }: Options) => permissions.engine.new({ providers });\n"],"names":["providers","permissions","engine","new"],"mappings":";;;;;;;;AAIA,6BAAe,CAAA,CAAC,EAAEA,SAAS,EAAW,GAAKC,4BAAAA,CAAYC,MAAM,CAACC,GAAG,CAAC;AAAEH,QAAAA;AAAU,KAAA,CAAC;;;;"}
1
+ {"version":3,"file":"engine.js","sources":["../../../../src/services/content-api/permissions/engine.ts"],"sourcesContent":["import { engine } from '@strapi/permissions';\n\ntype Options = Parameters<typeof engine.new>[0];\n\nexport default ({ providers }: Options) => engine.new({ providers });\n"],"names":["providers","engine","new"],"mappings":";;;;AAIA,6BAAe,CAAA,CAAC,EAAEA,SAAS,EAAW,GAAKC,kBAAAA,CAAOC,GAAG,CAAC;AAAEF,QAAAA;AAAU,KAAA,CAAC;;;;"}
@@ -1,6 +1,6 @@
1
- import permissions from '@strapi/permissions';
1
+ import { engine } from '@strapi/permissions';
2
2
 
3
- var createPermissionEngine = (({ providers })=>permissions.engine.new({
3
+ var createPermissionEngine = (({ providers })=>engine.new({
4
4
  providers
5
5
  }));
6
6
 
@@ -1 +1 @@
1
- {"version":3,"file":"engine.mjs","sources":["../../../../src/services/content-api/permissions/engine.ts"],"sourcesContent":["import permissions from '@strapi/permissions';\n\ntype Options = Parameters<typeof permissions.engine.new>[0];\n\nexport default ({ providers }: Options) => permissions.engine.new({ providers });\n"],"names":["providers","permissions","engine","new"],"mappings":";;AAIA,6BAAe,CAAA,CAAC,EAAEA,SAAS,EAAW,GAAKC,WAAAA,CAAYC,MAAM,CAACC,GAAG,CAAC;AAAEH,QAAAA;AAAU,KAAA,CAAC;;;;"}
1
+ {"version":3,"file":"engine.mjs","sources":["../../../../src/services/content-api/permissions/engine.ts"],"sourcesContent":["import { engine } from '@strapi/permissions';\n\ntype Options = Parameters<typeof engine.new>[0];\n\nexport default ({ providers }: Options) => engine.new({ providers });\n"],"names":["providers","engine","new"],"mappings":";;AAIA,6BAAe,CAAA,CAAC,EAAEA,SAAS,EAAW,GAAKC,MAAAA,CAAOC,GAAG,CAAC;AAAEF,QAAAA;AAAU,KAAA,CAAC;;;;"}
@@ -60,7 +60,7 @@ const createCoreStore = ({ db })=>{
60
60
  if (data.type === 'object' || data.type === 'array' || data.type === 'boolean' || data.type === 'string') {
61
61
  try {
62
62
  return JSON.parse(data.value);
63
- } catch (err) {
63
+ } catch {
64
64
  return new Date(data.value);
65
65
  }
66
66
  } else if (data.type === 'number') {
@@ -1 +1 @@
1
- {"version":3,"file":"core-store.js","sources":["../../src/services/core-store.ts"],"sourcesContent":["import { toString } from 'lodash/fp';\nimport type { Database, Model } from '@strapi/database';\n\nconst coreStoreModel: Model = {\n uid: 'strapi::core-store',\n singularName: 'strapi_core_store_settings',\n tableName: 'strapi_core_store_settings',\n attributes: {\n id: {\n type: 'increments',\n },\n key: {\n type: 'string',\n },\n value: {\n type: 'text',\n },\n type: {\n type: 'string',\n },\n environment: {\n type: 'string',\n },\n tag: {\n type: 'string',\n },\n },\n};\n\ntype SetParams = {\n key: string;\n value: unknown;\n type?: string;\n environment?: string;\n name?: string;\n tag?: string;\n};\n\ntype GetParams = {\n key: string;\n type?: string;\n environment?: string;\n name?: string;\n tag?: string;\n};\n\ntype Params = SetParams & GetParams;\n\ninterface CoreStore {\n (defaultParams: Partial<Params>): {\n get<T = unknown>(params: Partial<GetParams>): Promise<T>;\n set(params: Partial<SetParams>): Promise<void>;\n delete(params: Partial<GetParams>): Promise<void>;\n };\n get<T = unknown>(params: GetParams): Promise<T>;\n set(params: SetParams): Promise<void>;\n delete(params: GetParams): Promise<void>;\n}\n\nconst createCoreStore = ({ db }: { db: Database }) => {\n const mergeParams = (defaultParams: Partial<Params>, params: Params): Params => {\n return {\n ...defaultParams,\n ...params,\n };\n };\n\n const store: CoreStore = function createScopedCoreStore(defaultParams: Partial<Params>) {\n return {\n get: (params: Params) => store.get(mergeParams(defaultParams, params)),\n set: (params: Params) => store.set(mergeParams(defaultParams, params)),\n delete: (params: Params) => store.delete(mergeParams(defaultParams, params)),\n };\n };\n\n /**\n * Get value from the core store\n */\n store.get = async (params) => {\n const { key, type = 'core', environment, name, tag } = params;\n\n const prefix = `${type}${name ? `_${name}` : ''}`;\n\n const where = {\n key: `${prefix}_${key}`,\n environment: environment || null,\n tag: tag || null,\n };\n\n const data = await db.query('strapi::core-store').findOne({ where });\n\n if (!data) {\n return null;\n }\n\n if (\n data.type === 'object' ||\n data.type === 'array' ||\n data.type === 'boolean' ||\n data.type === 'string'\n ) {\n try {\n return JSON.parse(data.value);\n } catch (err) {\n return new Date(data.value);\n }\n } else if (data.type === 'number') {\n return Number(data.value);\n } else {\n return null;\n }\n };\n\n /**\n * Set value in the core store\n * @param {Object} params\n * @returns {*}\n */\n store.set = async (params) => {\n const { key, value, type, environment, name, tag } = params;\n\n const prefix = `${type}${name ? `_${name}` : ''}`;\n\n const where = {\n key: `${prefix}_${key}`,\n environment: environment || null,\n tag: tag || null,\n };\n\n const data = await db.query('strapi::core-store').findOne({ where });\n\n if (data) {\n return db.query('strapi::core-store').update({\n where: { id: data.id },\n data: {\n value: JSON.stringify(value) || toString(value),\n type: typeof value,\n },\n });\n }\n\n return db.query('strapi::core-store').create({\n data: {\n ...where,\n value: JSON.stringify(value) || toString(value),\n type: typeof value,\n },\n });\n };\n\n /**\n * Deletes a value from the core store\n * @param {Object} params\n * @returns {*}\n */\n store.delete = async (params) => {\n const { key, environment, type, name, tag } = params;\n\n const prefix = `${type}${name ? `_${name}` : ''}`;\n\n const where = {\n key: `${prefix}_${key}`,\n environment: environment || null,\n tag: tag || null,\n };\n\n return db.query('strapi::core-store').delete({ where });\n };\n\n return store;\n};\n\nexport { coreStoreModel, createCoreStore };\n"],"names":["coreStoreModel","uid","singularName","tableName","attributes","id","type","key","value","environment","tag","createCoreStore","db","mergeParams","defaultParams","params","store","createScopedCoreStore","get","set","delete","name","prefix","where","data","query","findOne","JSON","parse","err","Date","Number","update","stringify","toString","create"],"mappings":"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"}
1
+ {"version":3,"file":"core-store.js","sources":["../../src/services/core-store.ts"],"sourcesContent":["import { toString } from 'lodash/fp';\nimport type { Database, Model } from '@strapi/database';\n\nconst coreStoreModel: Model = {\n uid: 'strapi::core-store',\n singularName: 'strapi_core_store_settings',\n tableName: 'strapi_core_store_settings',\n attributes: {\n id: {\n type: 'increments',\n },\n key: {\n type: 'string',\n },\n value: {\n type: 'text',\n },\n type: {\n type: 'string',\n },\n environment: {\n type: 'string',\n },\n tag: {\n type: 'string',\n },\n },\n};\n\ntype SetParams = {\n key: string;\n value: unknown;\n type?: string;\n environment?: string;\n name?: string;\n tag?: string;\n};\n\ntype GetParams = {\n key: string;\n type?: string;\n environment?: string;\n name?: string;\n tag?: string;\n};\n\ntype Params = SetParams & GetParams;\n\ninterface CoreStore {\n (defaultParams: Partial<Params>): {\n get<T = unknown>(params: Partial<GetParams>): Promise<T>;\n set(params: Partial<SetParams>): Promise<void>;\n delete(params: Partial<GetParams>): Promise<void>;\n };\n get<T = unknown>(params: GetParams): Promise<T>;\n set(params: SetParams): Promise<void>;\n delete(params: GetParams): Promise<void>;\n}\n\nconst createCoreStore = ({ db }: { db: Database }) => {\n const mergeParams = (defaultParams: Partial<Params>, params: Params): Params => {\n return {\n ...defaultParams,\n ...params,\n };\n };\n\n const store: CoreStore = function createScopedCoreStore(defaultParams: Partial<Params>) {\n return {\n get: (params: Params) => store.get(mergeParams(defaultParams, params)),\n set: (params: Params) => store.set(mergeParams(defaultParams, params)),\n delete: (params: Params) => store.delete(mergeParams(defaultParams, params)),\n };\n };\n\n /**\n * Get value from the core store\n */\n store.get = async (params) => {\n const { key, type = 'core', environment, name, tag } = params;\n\n const prefix = `${type}${name ? `_${name}` : ''}`;\n\n const where = {\n key: `${prefix}_${key}`,\n environment: environment || null,\n tag: tag || null,\n };\n\n const data = await db.query('strapi::core-store').findOne({ where });\n\n if (!data) {\n return null;\n }\n\n if (\n data.type === 'object' ||\n data.type === 'array' ||\n data.type === 'boolean' ||\n data.type === 'string'\n ) {\n try {\n return JSON.parse(data.value);\n } catch {\n return new Date(data.value);\n }\n } else if (data.type === 'number') {\n return Number(data.value);\n } else {\n return null;\n }\n };\n\n /**\n * Set value in the core store\n * @param {Object} params\n * @returns {*}\n */\n store.set = async (params) => {\n const { key, value, type, environment, name, tag } = params;\n\n const prefix = `${type}${name ? `_${name}` : ''}`;\n\n const where = {\n key: `${prefix}_${key}`,\n environment: environment || null,\n tag: tag || null,\n };\n\n const data = await db.query('strapi::core-store').findOne({ where });\n\n if (data) {\n return db.query('strapi::core-store').update({\n where: { id: data.id },\n data: {\n value: JSON.stringify(value) || toString(value),\n type: typeof value,\n },\n });\n }\n\n return db.query('strapi::core-store').create({\n data: {\n ...where,\n value: JSON.stringify(value) || toString(value),\n type: typeof value,\n },\n });\n };\n\n /**\n * Deletes a value from the core store\n * @param {Object} params\n * @returns {*}\n */\n store.delete = async (params) => {\n const { key, environment, type, name, tag } = params;\n\n const prefix = `${type}${name ? `_${name}` : ''}`;\n\n const where = {\n key: `${prefix}_${key}`,\n environment: environment || null,\n tag: tag || null,\n };\n\n return db.query('strapi::core-store').delete({ where });\n };\n\n return store;\n};\n\nexport { coreStoreModel, createCoreStore };\n"],"names":["coreStoreModel","uid","singularName","tableName","attributes","id","type","key","value","environment","tag","createCoreStore","db","mergeParams","defaultParams","params","store","createScopedCoreStore","get","set","delete","name","prefix","where","data","query","findOne","JSON","parse","Date","Number","update","stringify","toString","create"],"mappings":"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"}
@@ -58,7 +58,7 @@ const createCoreStore = ({ db })=>{
58
58
  if (data.type === 'object' || data.type === 'array' || data.type === 'boolean' || data.type === 'string') {
59
59
  try {
60
60
  return JSON.parse(data.value);
61
- } catch (err) {
61
+ } catch {
62
62
  return new Date(data.value);
63
63
  }
64
64
  } else if (data.type === 'number') {
@@ -1 +1 @@
1
- {"version":3,"file":"core-store.mjs","sources":["../../src/services/core-store.ts"],"sourcesContent":["import { toString } from 'lodash/fp';\nimport type { Database, Model } from '@strapi/database';\n\nconst coreStoreModel: Model = {\n uid: 'strapi::core-store',\n singularName: 'strapi_core_store_settings',\n tableName: 'strapi_core_store_settings',\n attributes: {\n id: {\n type: 'increments',\n },\n key: {\n type: 'string',\n },\n value: {\n type: 'text',\n },\n type: {\n type: 'string',\n },\n environment: {\n type: 'string',\n },\n tag: {\n type: 'string',\n },\n },\n};\n\ntype SetParams = {\n key: string;\n value: unknown;\n type?: string;\n environment?: string;\n name?: string;\n tag?: string;\n};\n\ntype GetParams = {\n key: string;\n type?: string;\n environment?: string;\n name?: string;\n tag?: string;\n};\n\ntype Params = SetParams & GetParams;\n\ninterface CoreStore {\n (defaultParams: Partial<Params>): {\n get<T = unknown>(params: Partial<GetParams>): Promise<T>;\n set(params: Partial<SetParams>): Promise<void>;\n delete(params: Partial<GetParams>): Promise<void>;\n };\n get<T = unknown>(params: GetParams): Promise<T>;\n set(params: SetParams): Promise<void>;\n delete(params: GetParams): Promise<void>;\n}\n\nconst createCoreStore = ({ db }: { db: Database }) => {\n const mergeParams = (defaultParams: Partial<Params>, params: Params): Params => {\n return {\n ...defaultParams,\n ...params,\n };\n };\n\n const store: CoreStore = function createScopedCoreStore(defaultParams: Partial<Params>) {\n return {\n get: (params: Params) => store.get(mergeParams(defaultParams, params)),\n set: (params: Params) => store.set(mergeParams(defaultParams, params)),\n delete: (params: Params) => store.delete(mergeParams(defaultParams, params)),\n };\n };\n\n /**\n * Get value from the core store\n */\n store.get = async (params) => {\n const { key, type = 'core', environment, name, tag } = params;\n\n const prefix = `${type}${name ? `_${name}` : ''}`;\n\n const where = {\n key: `${prefix}_${key}`,\n environment: environment || null,\n tag: tag || null,\n };\n\n const data = await db.query('strapi::core-store').findOne({ where });\n\n if (!data) {\n return null;\n }\n\n if (\n data.type === 'object' ||\n data.type === 'array' ||\n data.type === 'boolean' ||\n data.type === 'string'\n ) {\n try {\n return JSON.parse(data.value);\n } catch (err) {\n return new Date(data.value);\n }\n } else if (data.type === 'number') {\n return Number(data.value);\n } else {\n return null;\n }\n };\n\n /**\n * Set value in the core store\n * @param {Object} params\n * @returns {*}\n */\n store.set = async (params) => {\n const { key, value, type, environment, name, tag } = params;\n\n const prefix = `${type}${name ? `_${name}` : ''}`;\n\n const where = {\n key: `${prefix}_${key}`,\n environment: environment || null,\n tag: tag || null,\n };\n\n const data = await db.query('strapi::core-store').findOne({ where });\n\n if (data) {\n return db.query('strapi::core-store').update({\n where: { id: data.id },\n data: {\n value: JSON.stringify(value) || toString(value),\n type: typeof value,\n },\n });\n }\n\n return db.query('strapi::core-store').create({\n data: {\n ...where,\n value: JSON.stringify(value) || toString(value),\n type: typeof value,\n },\n });\n };\n\n /**\n * Deletes a value from the core store\n * @param {Object} params\n * @returns {*}\n */\n store.delete = async (params) => {\n const { key, environment, type, name, tag } = params;\n\n const prefix = `${type}${name ? `_${name}` : ''}`;\n\n const where = {\n key: `${prefix}_${key}`,\n environment: environment || null,\n tag: tag || null,\n };\n\n return db.query('strapi::core-store').delete({ where });\n };\n\n return store;\n};\n\nexport { coreStoreModel, createCoreStore };\n"],"names":["coreStoreModel","uid","singularName","tableName","attributes","id","type","key","value","environment","tag","createCoreStore","db","mergeParams","defaultParams","params","store","createScopedCoreStore","get","set","delete","name","prefix","where","data","query","findOne","JSON","parse","err","Date","Number","update","stringify","toString","create"],"mappings":"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"}
1
+ {"version":3,"file":"core-store.mjs","sources":["../../src/services/core-store.ts"],"sourcesContent":["import { toString } from 'lodash/fp';\nimport type { Database, Model } from '@strapi/database';\n\nconst coreStoreModel: Model = {\n uid: 'strapi::core-store',\n singularName: 'strapi_core_store_settings',\n tableName: 'strapi_core_store_settings',\n attributes: {\n id: {\n type: 'increments',\n },\n key: {\n type: 'string',\n },\n value: {\n type: 'text',\n },\n type: {\n type: 'string',\n },\n environment: {\n type: 'string',\n },\n tag: {\n type: 'string',\n },\n },\n};\n\ntype SetParams = {\n key: string;\n value: unknown;\n type?: string;\n environment?: string;\n name?: string;\n tag?: string;\n};\n\ntype GetParams = {\n key: string;\n type?: string;\n environment?: string;\n name?: string;\n tag?: string;\n};\n\ntype Params = SetParams & GetParams;\n\ninterface CoreStore {\n (defaultParams: Partial<Params>): {\n get<T = unknown>(params: Partial<GetParams>): Promise<T>;\n set(params: Partial<SetParams>): Promise<void>;\n delete(params: Partial<GetParams>): Promise<void>;\n };\n get<T = unknown>(params: GetParams): Promise<T>;\n set(params: SetParams): Promise<void>;\n delete(params: GetParams): Promise<void>;\n}\n\nconst createCoreStore = ({ db }: { db: Database }) => {\n const mergeParams = (defaultParams: Partial<Params>, params: Params): Params => {\n return {\n ...defaultParams,\n ...params,\n };\n };\n\n const store: CoreStore = function createScopedCoreStore(defaultParams: Partial<Params>) {\n return {\n get: (params: Params) => store.get(mergeParams(defaultParams, params)),\n set: (params: Params) => store.set(mergeParams(defaultParams, params)),\n delete: (params: Params) => store.delete(mergeParams(defaultParams, params)),\n };\n };\n\n /**\n * Get value from the core store\n */\n store.get = async (params) => {\n const { key, type = 'core', environment, name, tag } = params;\n\n const prefix = `${type}${name ? `_${name}` : ''}`;\n\n const where = {\n key: `${prefix}_${key}`,\n environment: environment || null,\n tag: tag || null,\n };\n\n const data = await db.query('strapi::core-store').findOne({ where });\n\n if (!data) {\n return null;\n }\n\n if (\n data.type === 'object' ||\n data.type === 'array' ||\n data.type === 'boolean' ||\n data.type === 'string'\n ) {\n try {\n return JSON.parse(data.value);\n } catch {\n return new Date(data.value);\n }\n } else if (data.type === 'number') {\n return Number(data.value);\n } else {\n return null;\n }\n };\n\n /**\n * Set value in the core store\n * @param {Object} params\n * @returns {*}\n */\n store.set = async (params) => {\n const { key, value, type, environment, name, tag } = params;\n\n const prefix = `${type}${name ? `_${name}` : ''}`;\n\n const where = {\n key: `${prefix}_${key}`,\n environment: environment || null,\n tag: tag || null,\n };\n\n const data = await db.query('strapi::core-store').findOne({ where });\n\n if (data) {\n return db.query('strapi::core-store').update({\n where: { id: data.id },\n data: {\n value: JSON.stringify(value) || toString(value),\n type: typeof value,\n },\n });\n }\n\n return db.query('strapi::core-store').create({\n data: {\n ...where,\n value: JSON.stringify(value) || toString(value),\n type: typeof value,\n },\n });\n };\n\n /**\n * Deletes a value from the core store\n * @param {Object} params\n * @returns {*}\n */\n store.delete = async (params) => {\n const { key, environment, type, name, tag } = params;\n\n const prefix = `${type}${name ? `_${name}` : ''}`;\n\n const where = {\n key: `${prefix}_${key}`,\n environment: environment || null,\n tag: tag || null,\n };\n\n return db.query('strapi::core-store').delete({ where });\n };\n\n return store;\n};\n\nexport { coreStoreModel, createCoreStore };\n"],"names":["coreStoreModel","uid","singularName","tableName","attributes","id","type","key","value","environment","tag","createCoreStore","db","mergeParams","defaultParams","params","store","createScopedCoreStore","get","set","delete","name","prefix","where","data","query","findOne","JSON","parse","Date","Number","update","stringify","toString","create"],"mappings":"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"}
@@ -281,7 +281,7 @@ const createContentTypeRepository = (uid, validator = index)=>{
281
281
  };
282
282
  }
283
283
  async function create(opts = {}) {
284
- const { documentId, ...params } = opts;
284
+ const { documentId: _documentId, ...params } = opts;
285
285
  const queryParams = await strapiUtils.async.pipe(validateParams, draftAndPublish.filterDataPublishedAt, draftAndPublish.setStatusToDraft(contentType), draftAndPublish.statusToData(contentType), internationalization.defaultLocale(contentType), internationalization.localeToData(contentType))(params);
286
286
  const doc = await entries$1.create(queryParams);
287
287
  emitEvent('entry.create', doc);
@@ -353,7 +353,7 @@ const createContentTypeRepository = (uid, validator = index)=>{
353
353
  const { documentId, ...params$1 } = opts;
354
354
  const queryParams = await strapiUtils.async.pipe(validateParams, draftAndPublish.filterDataPublishedAt, firstPublishedAt.filterDataFirstPublishedAt, draftAndPublish.setStatusToDraft(contentType), draftAndPublish.statusToLookup(contentType), draftAndPublish.statusToData(contentType), // Default locale will be set if not provided
355
355
  internationalization.defaultLocale(contentType), internationalization.localeToLookup(contentType), internationalization.localeToData(contentType))(params$1);
356
- const { data, ...restParams } = await idTransform.transformParamsDocumentId(uid, queryParams || {});
356
+ const { data: _data, ...restParams } = await idTransform.transformParamsDocumentId(uid, queryParams || {});
357
357
  const query$1 = query.transformParamsToQuery(uid, params.pickSelectionParams(restParams || {}));
358
358
  // Validation
359
359
  // Find if document exists