@strapi/core 0.0.0-experimental.1e4c115f717b021ca11c139584d4519db28ba786 → 0.0.0-experimental.1f56e9319665c8cc385eb5e4178ceb6741c6d490

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of @strapi/core might be problematic. Click here for more details.

Files changed (230) hide show
  1. package/dist/Strapi.d.ts +1 -0
  2. package/dist/Strapi.d.ts.map +1 -1
  3. package/dist/Strapi.js +23 -2
  4. package/dist/Strapi.js.map +1 -1
  5. package/dist/Strapi.mjs +23 -2
  6. package/dist/Strapi.mjs.map +1 -1
  7. package/dist/constants.d.ts +3 -0
  8. package/dist/constants.d.ts.map +1 -0
  9. package/dist/constants.js +6 -0
  10. package/dist/constants.js.map +1 -0
  11. package/dist/constants.mjs +4 -0
  12. package/dist/constants.mjs.map +1 -0
  13. package/dist/core-api/controller/index.d.ts.map +1 -1
  14. package/dist/core-api/controller/index.js +2 -1
  15. package/dist/core-api/controller/index.js.map +1 -1
  16. package/dist/core-api/controller/index.mjs +2 -1
  17. package/dist/core-api/controller/index.mjs.map +1 -1
  18. package/dist/core-api/controller/transform.d.ts +3 -2
  19. package/dist/core-api/controller/transform.d.ts.map +1 -1
  20. package/dist/core-api/controller/transform.js +13 -3
  21. package/dist/core-api/controller/transform.js.map +1 -1
  22. package/dist/core-api/controller/transform.mjs +13 -3
  23. package/dist/core-api/controller/transform.mjs.map +1 -1
  24. package/dist/core-api/routes/index.d.ts.map +1 -1
  25. package/dist/core-api/routes/index.js +28 -9
  26. package/dist/core-api/routes/index.js.map +1 -1
  27. package/dist/core-api/routes/index.mjs +1 -1
  28. package/dist/core-api/routes/index.mjs.map +1 -1
  29. package/dist/core-api/routes/validation/attributes.d.ts +243 -90
  30. package/dist/core-api/routes/validation/attributes.d.ts.map +1 -1
  31. package/dist/core-api/routes/validation/attributes.js +541 -564
  32. package/dist/core-api/routes/validation/attributes.js.map +1 -1
  33. package/dist/core-api/routes/validation/attributes.mjs +505 -564
  34. package/dist/core-api/routes/validation/attributes.mjs.map +1 -1
  35. package/dist/core-api/routes/validation/common.d.ts +7 -5
  36. package/dist/core-api/routes/validation/common.d.ts.map +1 -1
  37. package/dist/core-api/routes/validation/common.js +29 -8
  38. package/dist/core-api/routes/validation/common.js.map +1 -1
  39. package/dist/core-api/routes/validation/common.mjs +6 -4
  40. package/dist/core-api/routes/validation/common.mjs.map +1 -1
  41. package/dist/core-api/routes/validation/component.d.ts +2 -10
  42. package/dist/core-api/routes/validation/component.d.ts.map +1 -1
  43. package/dist/core-api/routes/validation/component.js +3 -17
  44. package/dist/core-api/routes/validation/component.js.map +1 -1
  45. package/dist/core-api/routes/validation/component.mjs +3 -17
  46. package/dist/core-api/routes/validation/component.mjs.map +1 -1
  47. package/dist/core-api/routes/validation/constants.d.ts +6 -0
  48. package/dist/core-api/routes/validation/constants.d.ts.map +1 -1
  49. package/dist/core-api/routes/validation/constants.js +6 -1
  50. package/dist/core-api/routes/validation/constants.js.map +1 -1
  51. package/dist/core-api/routes/validation/constants.mjs +6 -1
  52. package/dist/core-api/routes/validation/constants.mjs.map +1 -1
  53. package/dist/core-api/routes/validation/content-type.d.ts +28 -71
  54. package/dist/core-api/routes/validation/content-type.d.ts.map +1 -1
  55. package/dist/core-api/routes/validation/content-type.js +67 -112
  56. package/dist/core-api/routes/validation/content-type.js.map +1 -1
  57. package/dist/core-api/routes/validation/content-type.mjs +36 -100
  58. package/dist/core-api/routes/validation/content-type.mjs.map +1 -1
  59. package/dist/core-api/routes/validation/index.d.ts +1 -1
  60. package/dist/core-api/routes/validation/index.d.ts.map +1 -1
  61. package/dist/core-api/routes/validation/mappers.d.ts +105 -0
  62. package/dist/core-api/routes/validation/mappers.d.ts.map +1 -0
  63. package/dist/core-api/routes/validation/mappers.js +273 -0
  64. package/dist/core-api/routes/validation/mappers.js.map +1 -0
  65. package/dist/core-api/routes/validation/mappers.mjs +249 -0
  66. package/dist/core-api/routes/validation/mappers.mjs.map +1 -0
  67. package/dist/core-api/routes/validation/utils.d.ts +47 -0
  68. package/dist/core-api/routes/validation/utils.d.ts.map +1 -0
  69. package/dist/core-api/routes/validation/utils.js +128 -0
  70. package/dist/core-api/routes/validation/utils.js.map +1 -0
  71. package/dist/core-api/routes/validation/utils.mjs +106 -0
  72. package/dist/core-api/routes/validation/utils.mjs.map +1 -0
  73. package/dist/domain/content-type/index.d.ts.map +1 -1
  74. package/dist/domain/content-type/index.js +17 -1
  75. package/dist/domain/content-type/index.js.map +1 -1
  76. package/dist/domain/content-type/index.mjs +17 -1
  77. package/dist/domain/content-type/index.mjs.map +1 -1
  78. package/dist/ee/index.d.ts +6 -0
  79. package/dist/ee/index.d.ts.map +1 -1
  80. package/dist/ee/index.js +29 -3
  81. package/dist/ee/index.js.map +1 -1
  82. package/dist/ee/index.mjs +30 -4
  83. package/dist/ee/index.mjs.map +1 -1
  84. package/dist/ee/license.d.ts +3 -1
  85. package/dist/ee/license.d.ts.map +1 -1
  86. package/dist/ee/license.js +6 -1
  87. package/dist/ee/license.js.map +1 -1
  88. package/dist/ee/license.mjs +6 -2
  89. package/dist/ee/license.mjs.map +1 -1
  90. package/dist/factories.js +1 -1
  91. package/dist/factories.mjs +1 -1
  92. package/dist/index.js +1 -1
  93. package/dist/index.mjs +1 -1
  94. package/dist/loaders/plugins/index.js +1 -1
  95. package/dist/loaders/plugins/index.js.map +1 -1
  96. package/dist/loaders/plugins/index.mjs +1 -1
  97. package/dist/loaders/plugins/index.mjs.map +1 -1
  98. package/dist/middlewares/cors.d.ts +9 -1
  99. package/dist/middlewares/cors.d.ts.map +1 -1
  100. package/dist/middlewares/cors.js +39 -17
  101. package/dist/middlewares/cors.js.map +1 -1
  102. package/dist/middlewares/cors.mjs +39 -18
  103. package/dist/middlewares/cors.mjs.map +1 -1
  104. package/dist/migrations/first-published-at.d.ts +4 -0
  105. package/dist/migrations/first-published-at.d.ts.map +1 -0
  106. package/dist/migrations/first-published-at.js +51 -0
  107. package/dist/migrations/first-published-at.js.map +1 -0
  108. package/dist/migrations/first-published-at.mjs +49 -0
  109. package/dist/migrations/first-published-at.mjs.map +1 -0
  110. package/dist/migrations/index.d.ts.map +1 -1
  111. package/dist/migrations/index.js +5 -0
  112. package/dist/migrations/index.js.map +1 -1
  113. package/dist/migrations/index.mjs +5 -0
  114. package/dist/migrations/index.mjs.map +1 -1
  115. package/dist/package.json.js +17 -13
  116. package/dist/package.json.js.map +1 -1
  117. package/dist/package.json.mjs +17 -13
  118. package/dist/package.json.mjs.map +1 -1
  119. package/dist/providers/index.d.ts.map +1 -1
  120. package/dist/providers/index.js +2 -0
  121. package/dist/providers/index.js.map +1 -1
  122. package/dist/providers/index.mjs +2 -0
  123. package/dist/providers/index.mjs.map +1 -1
  124. package/dist/providers/session-manager.d.ts +3 -0
  125. package/dist/providers/session-manager.d.ts.map +1 -0
  126. package/dist/providers/session-manager.js +23 -0
  127. package/dist/providers/session-manager.js.map +1 -0
  128. package/dist/providers/session-manager.mjs +21 -0
  129. package/dist/providers/session-manager.mjs.map +1 -0
  130. package/dist/services/content-api/index.d.ts +1 -1
  131. package/dist/services/content-api/index.d.ts.map +1 -1
  132. package/dist/services/content-api/index.js +1 -1
  133. package/dist/services/content-api/index.js.map +1 -1
  134. package/dist/services/content-api/index.mjs +2 -2
  135. package/dist/services/content-api/index.mjs.map +1 -1
  136. package/dist/services/content-source-maps.d.ts +13 -0
  137. package/dist/services/content-source-maps.d.ts.map +1 -0
  138. package/dist/services/content-source-maps.js +108 -0
  139. package/dist/services/content-source-maps.js.map +1 -0
  140. package/dist/services/content-source-maps.mjs +106 -0
  141. package/dist/services/content-source-maps.mjs.map +1 -0
  142. package/dist/services/core-store.d.ts +2 -2
  143. package/dist/services/core-store.d.ts.map +1 -1
  144. package/dist/services/core-store.js.map +1 -1
  145. package/dist/services/core-store.mjs.map +1 -1
  146. package/dist/services/document-service/components.d.ts +31 -1
  147. package/dist/services/document-service/components.d.ts.map +1 -1
  148. package/dist/services/document-service/components.js +109 -0
  149. package/dist/services/document-service/components.js.map +1 -1
  150. package/dist/services/document-service/components.mjs +107 -1
  151. package/dist/services/document-service/components.mjs.map +1 -1
  152. package/dist/services/document-service/entries.d.ts.map +1 -1
  153. package/dist/services/document-service/entries.js +42 -0
  154. package/dist/services/document-service/entries.js.map +1 -1
  155. package/dist/services/document-service/entries.mjs +43 -1
  156. package/dist/services/document-service/entries.mjs.map +1 -1
  157. package/dist/services/document-service/first-published-at.d.ts +7 -0
  158. package/dist/services/document-service/first-published-at.d.ts.map +1 -0
  159. package/dist/services/document-service/first-published-at.js +31 -0
  160. package/dist/services/document-service/first-published-at.js.map +1 -0
  161. package/dist/services/document-service/first-published-at.mjs +28 -0
  162. package/dist/services/document-service/first-published-at.mjs.map +1 -0
  163. package/dist/services/document-service/internationalization.d.ts +6 -1
  164. package/dist/services/document-service/internationalization.d.ts.map +1 -1
  165. package/dist/services/document-service/internationalization.js +32 -0
  166. package/dist/services/document-service/internationalization.js.map +1 -1
  167. package/dist/services/document-service/internationalization.mjs +32 -1
  168. package/dist/services/document-service/internationalization.mjs.map +1 -1
  169. package/dist/services/document-service/repository.d.ts.map +1 -1
  170. package/dist/services/document-service/repository.js +16 -8
  171. package/dist/services/document-service/repository.js.map +1 -1
  172. package/dist/services/document-service/repository.mjs +18 -10
  173. package/dist/services/document-service/repository.mjs.map +1 -1
  174. package/dist/services/document-service/utils/clean-component-join-table.d.ts +7 -0
  175. package/dist/services/document-service/utils/clean-component-join-table.d.ts.map +1 -0
  176. package/dist/services/document-service/utils/unidirectional-relations.d.ts +19 -2
  177. package/dist/services/document-service/utils/unidirectional-relations.d.ts.map +1 -1
  178. package/dist/services/document-service/utils/unidirectional-relations.js +21 -6
  179. package/dist/services/document-service/utils/unidirectional-relations.js.map +1 -1
  180. package/dist/services/document-service/utils/unidirectional-relations.mjs +21 -6
  181. package/dist/services/document-service/utils/unidirectional-relations.mjs.map +1 -1
  182. package/dist/services/entity-validator/index.d.ts.map +1 -1
  183. package/dist/services/entity-validator/index.js +9 -0
  184. package/dist/services/entity-validator/index.js.map +1 -1
  185. package/dist/services/entity-validator/index.mjs +9 -0
  186. package/dist/services/entity-validator/index.mjs.map +1 -1
  187. package/dist/services/entity-validator/validators.d.ts +1 -0
  188. package/dist/services/entity-validator/validators.d.ts.map +1 -1
  189. package/dist/services/entity-validator/validators.js +3 -0
  190. package/dist/services/entity-validator/validators.js.map +1 -1
  191. package/dist/services/entity-validator/validators.mjs +3 -0
  192. package/dist/services/entity-validator/validators.mjs.map +1 -1
  193. package/dist/services/metrics/index.d.ts +1 -1
  194. package/dist/services/metrics/index.d.ts.map +1 -1
  195. package/dist/services/metrics/index.js +11 -9
  196. package/dist/services/metrics/index.js.map +1 -1
  197. package/dist/services/metrics/index.mjs +11 -9
  198. package/dist/services/metrics/index.mjs.map +1 -1
  199. package/dist/services/metrics/middleware.d.ts +2 -1
  200. package/dist/services/metrics/middleware.d.ts.map +1 -1
  201. package/dist/services/metrics/middleware.js +2 -2
  202. package/dist/services/metrics/middleware.js.map +1 -1
  203. package/dist/services/metrics/middleware.mjs +2 -2
  204. package/dist/services/metrics/middleware.mjs.map +1 -1
  205. package/dist/services/metrics/sender.d.ts.map +1 -1
  206. package/dist/services/metrics/sender.js +4 -3
  207. package/dist/services/metrics/sender.js.map +1 -1
  208. package/dist/services/metrics/sender.mjs +4 -3
  209. package/dist/services/metrics/sender.mjs.map +1 -1
  210. package/dist/services/session-manager.d.ts +167 -0
  211. package/dist/services/session-manager.d.ts.map +1 -0
  212. package/dist/services/session-manager.js +529 -0
  213. package/dist/services/session-manager.js.map +1 -0
  214. package/dist/services/session-manager.mjs +526 -0
  215. package/dist/services/session-manager.mjs.map +1 -0
  216. package/dist/services/utils/conditional-fields.d.ts +3 -0
  217. package/dist/services/utils/conditional-fields.d.ts.map +1 -0
  218. package/dist/services/utils/conditional-fields.js +22 -0
  219. package/dist/services/utils/conditional-fields.js.map +1 -0
  220. package/dist/services/utils/conditional-fields.mjs +20 -0
  221. package/dist/services/utils/conditional-fields.mjs.map +1 -0
  222. package/dist/utils/fetch.d.ts +5 -1
  223. package/dist/utils/fetch.d.ts.map +1 -1
  224. package/dist/utils/fetch.js +8 -4
  225. package/dist/utils/fetch.js.map +1 -1
  226. package/dist/utils/fetch.mjs +8 -4
  227. package/dist/utils/fetch.mjs.map +1 -1
  228. package/dist/utils/transform-content-types-to-models.d.ts +197 -0
  229. package/dist/utils/transform-content-types-to-models.d.ts.map +1 -1
  230. package/package.json +17 -13
@@ -1,4 +1,9 @@
1
- const BOOLEAN_LITERAL_VALUES = [
1
+ /**
2
+ * Defines the constant literal values for boolean representations.
3
+ *
4
+ * These values can be used to convert string representations of booleans (for example, 'true', 'false', '1', '0')
5
+ * into actual boolean types.
6
+ */ const BOOLEAN_LITERAL_VALUES = [
2
7
  't',
3
8
  '1',
4
9
  'true',
@@ -1 +1 @@
1
- {"version":3,"file":"constants.mjs","sources":["../../../../src/core-api/routes/validation/constants.ts"],"sourcesContent":["export const BOOLEAN_LITERAL_VALUES = ['t', '1', 'true', 'f', '0', 'false'] as const;\n"],"names":["BOOLEAN_LITERAL_VALUES"],"mappings":"MAAaA,sBAAyB,GAAA;AAAC,IAAA,GAAA;AAAK,IAAA,GAAA;AAAK,IAAA,MAAA;AAAQ,IAAA,GAAA;AAAK,IAAA,GAAA;AAAK,IAAA;;;;;"}
1
+ {"version":3,"file":"constants.mjs","sources":["../../../../src/core-api/routes/validation/constants.ts"],"sourcesContent":["/**\n * Defines the constant literal values for boolean representations.\n *\n * These values can be used to convert string representations of booleans (for example, 'true', 'false', '1', '0')\n * into actual boolean types.\n */\n\nexport const BOOLEAN_LITERAL_VALUES = ['t', '1', 'true', 'f', '0', 'false'] as const;\n"],"names":["BOOLEAN_LITERAL_VALUES"],"mappings":"AAAA;;;;;UAOaA,sBAAyB,GAAA;AAAC,IAAA,GAAA;AAAK,IAAA,GAAA;AAAK,IAAA,MAAA;AAAQ,IAAA,GAAA;AAAK,IAAA,GAAA;AAAK,IAAA;;;;;"}
@@ -1,11 +1,12 @@
1
- import type { Core, UID } from '@strapi/types';
2
- import { z } from 'zod';
1
+ import type { UID } from '@strapi/types';
2
+ import * as z from 'zod/v4';
3
3
  import { AbstractCoreRouteValidator } from './common';
4
4
  export type QueryParam = 'fields' | 'populate' | 'sort' | 'status' | 'locale' | 'pagination' | 'filters' | '_q';
5
5
  /**
6
6
  * A validator for core content-type routes.
7
7
  *
8
8
  * Provides validation schemas and utilities for handling content-type-specific route validation.
9
+ * Extends the base AbstractRouteValidator with schema-aware validation for Strapi content types.
9
10
  *
10
11
  * @example
11
12
  * ```ts
@@ -16,18 +17,11 @@ export type QueryParam = 'fields' | 'populate' | 'sort' | 'status' | 'locale' |
16
17
  * // Get validation schema for document
17
18
  * const documentSchema = validator.document;
18
19
  *
19
- * // Validate query parameters
20
- * const querySchema = validator.query(['fields', 'populate', 'sort']);
20
+ * // Validate query parameters with schema awareness
21
+ * const querySchema = validator.queryParams(['fields', 'populate', 'sort']);
21
22
  * ```
22
23
  */
23
24
  export declare class CoreContentTypeRouteValidator extends AbstractCoreRouteValidator<UID.ContentType> {
24
- /**
25
- * Creates a new instance of CoreContentTypeRouteValidator
26
- *
27
- * @param strapi - The Strapi instance
28
- * @param uid - The content-type's unique identifier
29
- */
30
- constructor(strapi: Core.Strapi, uid: UID.ContentType);
31
25
  /**
32
26
  * Generates a validation schema for document IDs
33
27
  *
@@ -56,7 +50,7 @@ export declare class CoreContentTypeRouteValidator extends AbstractCoreRouteVali
56
50
  get document(): z.ZodObject<{
57
51
  documentId: z.ZodUUID;
58
52
  id: z.ZodNumber;
59
- }, {}, {}>;
53
+ }, z.core.$strip>;
60
54
  /**
61
55
  * Generates a validation schema for an array of documents
62
56
  *
@@ -71,89 +65,52 @@ export declare class CoreContentTypeRouteValidator extends AbstractCoreRouteVali
71
65
  get documents(): z.ZodArray<z.ZodObject<{
72
66
  documentId: z.ZodUUID;
73
67
  id: z.ZodNumber;
74
- }, {}, {}>>;
68
+ }, z.core.$strip>>;
75
69
  /**
76
- * Generates a validation schema for field selection in queries
77
- *
78
- * @returns A schema for validating field selection
79
- *
80
- * @example
81
- * ```ts
82
- * const validator = new CoreContentTypeRouteValidator(strapi, uid);
83
- * const fieldsSchema = validator.queryFields;
84
- * ```
70
+ * Schema-aware fields validation that restricts to actual model fields
85
71
  */
86
- get queryFields(): z.ZodReadonly<z.ZodArray<z.ZodEnum<{
72
+ protected get schemaAwareQueryFields(): z.ZodReadonly<z.ZodArray<z.ZodEnum<{
87
73
  [x: string]: string;
88
74
  }>>>;
89
75
  /**
90
- * Generates a validation schema for populate operations.
91
- *
92
- * Allows wildcard (*), single field, and multiple field population.
93
- *
94
- * @returns A schema for validating populate parameters
95
- *
96
- * @example
97
- * ```ts
98
- * const validator = new CoreContentTypeRouteValidator(strapi, uid);
99
- * const populateSchema = validator.queryPopulate;
100
- * ```
76
+ * Schema-aware populate validation that restricts to actual populatable fields
101
77
  */
102
- get queryPopulate(): z.ZodUnion<readonly [z.ZodReadonly<z.ZodLiteral<"*">>, z.ZodReadonly<z.ZodEnum<{
78
+ protected get schemaAwareQueryPopulate(): z.ZodUnion<readonly [z.ZodReadonly<z.ZodLiteral<"*">>, z.ZodReadonly<z.ZodEnum<{
103
79
  [x: string]: string;
104
80
  }>>, z.ZodArray<z.ZodEnum<{
105
81
  [x: string]: string;
106
82
  }>>]>;
107
83
  /**
108
- * Generates a validation schema for sorting parameters.
109
- *
110
- * Allows various sorting formats including single field, multiple fields, and direction specifications
111
- *
112
- * @returns A schema for validating sort parameters
113
- *
114
- * @example
115
- * ```ts
116
- * const validator = new CoreContentTypeRouteValidator(strapi, uid);
117
- * const sortSchema = validator.querySort;
118
- * ```
119
- *
120
- * @remarks
121
- * - Nested sorts are currently not supported
84
+ * Schema-aware sort validation that restricts to actual model fields
122
85
  */
123
- get querySort(): z.ZodUnion<readonly [z.ZodEnum<{
86
+ protected get schemaAwareQuerySort(): z.ZodUnion<readonly [z.ZodEnum<{
124
87
  [x: string]: string;
125
88
  }>, z.ZodArray<z.ZodEnum<{
126
89
  [x: string]: string;
127
90
  }>>, z.ZodRecord<z.ZodEnum<{
128
91
  [x: string]: string;
129
- }>, z.ZodType<unknown, unknown>>, z.ZodArray<z.ZodRecord<z.ZodEnum<{
92
+ }>, z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>, z.ZodArray<z.ZodRecord<z.ZodEnum<{
93
+ [x: string]: string;
94
+ }>, z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>>]>;
95
+ /**
96
+ * Schema-aware filters validation that restricts to actual model fields
97
+ */
98
+ protected get schemaAwareFilters(): z.ZodRecord<z.ZodEnum<{
130
99
  [x: string]: string;
131
- }>, z.ZodType<unknown, unknown>>>]>;
132
- get locale(): z.ZodOptional<z.ZodString>;
100
+ }>, z.ZodAny>;
101
+ get locale(): z.ZodString;
133
102
  get status(): z.ZodEnum<{
134
103
  draft: "draft";
135
104
  published: "published";
136
105
  }>;
137
- get pagination(): z.ZodIntersection<z.ZodObject<{
138
- withCount: z.ZodOptional<z.ZodBoolean>;
139
- }, {}, {}>, z.ZodUnion<readonly [z.ZodObject<{
140
- page: z.ZodNumber;
141
- pageSize: z.ZodNumber;
142
- }, {}, {}>, z.ZodObject<{
143
- start: z.ZodNumber;
144
- limit: z.ZodNumber;
145
- }, {}, {}>]>>;
146
- get filters(): z.ZodRecord<z.ZodEnum<{
147
- [x: string]: string;
148
- }>, z.ZodAny>;
149
- get data(): z.ZodObject<{}, {}, {}>;
106
+ get data(): z.ZodObject<{}, z.core.$strip>;
150
107
  get query(): z.ZodString;
151
108
  get body(): z.ZodObject<{
152
- data: z.ZodObject<{}, {}, {}>;
153
- }, {}, {}>;
109
+ data: z.ZodObject<{}, z.core.$strip>;
110
+ }, z.core.$strip>;
154
111
  get partialBody(): z.ZodObject<{
155
- data: z.ZodObject<{}, {}, {}>;
156
- }, {}, {}>;
112
+ data: z.ZodObject<{}, z.core.$strip>;
113
+ }, z.core.$strip>;
157
114
  /**
158
115
  * Creates validation schemas for query parameters
159
116
  *
@@ -163,7 +120,7 @@ export declare class CoreContentTypeRouteValidator extends AbstractCoreRouteVali
163
120
  * @example
164
121
  * ```ts
165
122
  * const validator = new CoreContentTypeRouteValidator(strapi, uid);
166
- * const querySchemas = validator.query(['fields', 'populate']);
123
+ * const querySchemas = validator.queryParams(['fields', 'populate']);
167
124
  * ```
168
125
  */
169
126
  queryParams(params: QueryParam[]): Partial<Record<QueryParam, z.Schema>>;
@@ -1 +1 @@
1
- {"version":3,"file":"content-type.d.ts","sourceRoot":"","sources":["../../../../src/core-api/routes/validation/content-type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAU,GAAG,EAAE,MAAM,eAAe,CAAC;AAGvD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,0BAA0B,EAAE,MAAM,UAAU,CAAC;AAEtD,MAAM,MAAM,UAAU,GAClB,QAAQ,GACR,UAAU,GACV,MAAM,GACN,QAAQ,GACR,QAAQ,GACR,YAAY,GACZ,SAAS,GACT,IAAI,CAAC;AAET;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,6BAA8B,SAAQ,0BAA0B,CAAC,GAAG,CAAC,WAAW,CAAC;IAC5F;;;;;OAKG;gBACS,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,WAAW;IAIrD;;;;;;;;;;OAUG;IACH,IAAI,UAAU,cAEb;IAED;;;;;;;;;;;;OAYG;IACH,IAAI,QAAQ;;;eAsBX;IAED;;;;;;;;;;OAUG;IACH,IAAI,SAAS;;;gBAEZ;IAED;;;;;;;;;;OAUG;IACH,IAAI,WAAW;;SAMd;IAED;;;;;;;;;;;;OAYG;IACH,IAAI,aAAa;;;;UAiBhB;IAED;;;;;;;;;;;;;;;OAeG;IACH,IAAI,SAAS;;;;;;;;wCAYZ;IAED,IAAI,MAAM,+BAET;IAED,IAAI,MAAM;;;OAIT;IAED,IAAI,UAAU;;;;;;;;kBAcb;IAED,IAAI,OAAO;;kBAEV;IAED,IAAI,IAAI,4BAsBP;IAED,IAAI,KAAK,gBAER;IAED,IAAI,IAAI;;eAEP;IAED,IAAI,WAAW;;eAEd;IAED;;;;;;;;;;;OAWG;IACH,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;CAiBzE"}
1
+ {"version":3,"file":"content-type.d.ts","sourceRoot":"","sources":["../../../../src/core-api/routes/validation/content-type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAU,GAAG,EAAE,MAAM,eAAe,CAAC;AAGjD,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAI5B,OAAO,EAAE,0BAA0B,EAAE,MAAM,UAAU,CAAC;AAEtD,MAAM,MAAM,UAAU,GAClB,QAAQ,GACR,UAAU,GACV,MAAM,GACN,QAAQ,GACR,QAAQ,GACR,YAAY,GACZ,SAAS,GACT,IAAI,CAAC;AAET;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,6BAA8B,SAAQ,0BAA0B,CAAC,GAAG,CAAC,WAAW,CAAC;IAC5F;;;;;;;;;;OAUG;IACH,IAAI,UAAU,cAEb;IAED;;;;;;;;;;;;OAYG;IACH,IAAI,QAAQ;;;sBAgBX;IAED;;;;;;;;;;OAUG;IACH,IAAI,SAAS;;;uBAEZ;IAED;;OAEG;IACH,SAAS,KAAK,sBAAsB;;SAMnC;IAED;;OAEG;IACH,SAAS,KAAK,wBAAwB;;;;UAiBrC;IAED;;OAEG;IACH,SAAS,KAAK,oBAAoB;;;;;;;;oFAYjC;IAED;;OAEG;IACH,SAAS,KAAK,kBAAkB;;kBAE/B;IAED,IAAI,MAAM,gBAET;IAED,IAAI,MAAM;;;OAIT;IAED,IAAI,IAAI,mCAYP;IAED,IAAI,KAAK,gBAER;IAED,IAAI,IAAI;;sBAEP;IAED,IAAI,WAAW;;sBAEd;IAED;;;;;;;;;;;OAWG;IACH,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;CAiBzE"}
@@ -1,14 +1,34 @@
1
1
  'use strict';
2
2
 
3
3
  var strapiUtils = require('@strapi/utils');
4
- var zod = require('zod');
5
- var attributes = require('./attributes.js');
4
+ var z = require('zod/v4');
5
+ var mappers = require('./mappers.js');
6
6
  var common = require('./common.js');
7
7
 
8
+ function _interopNamespaceDefault(e) {
9
+ var n = Object.create(null);
10
+ if (e) {
11
+ Object.keys(e).forEach(function (k) {
12
+ if (k !== 'default') {
13
+ var d = Object.getOwnPropertyDescriptor(e, k);
14
+ Object.defineProperty(n, k, d.get ? d : {
15
+ enumerable: true,
16
+ get: function () { return e[k]; }
17
+ });
18
+ }
19
+ });
20
+ }
21
+ n.default = e;
22
+ return Object.freeze(n);
23
+ }
24
+
25
+ var z__namespace = /*#__PURE__*/_interopNamespaceDefault(z);
26
+
8
27
  /**
9
28
  * A validator for core content-type routes.
10
29
  *
11
30
  * Provides validation schemas and utilities for handling content-type-specific route validation.
31
+ * Extends the base AbstractRouteValidator with schema-aware validation for Strapi content types.
12
32
  *
13
33
  * @example
14
34
  * ```ts
@@ -19,8 +39,8 @@ var common = require('./common.js');
19
39
  * // Get validation schema for document
20
40
  * const documentSchema = validator.document;
21
41
  *
22
- * // Validate query parameters
23
- * const querySchema = validator.query(['fields', 'populate', 'sort']);
42
+ * // Validate query parameters with schema awareness
43
+ * const querySchema = validator.queryParams(['fields', 'populate', 'sort']);
24
44
  * ```
25
45
  */ class CoreContentTypeRouteValidator extends common.AbstractCoreRouteValidator {
26
46
  /**
@@ -34,7 +54,7 @@ var common = require('./common.js');
34
54
  * const idSchema = validator.documentID;
35
55
  * ```
36
56
  */ get documentID() {
37
- return zod.z.uuid().describe('The document ID, represented by a UUID');
57
+ return z__namespace.uuid().describe('The document ID, represented by a UUID');
38
58
  }
39
59
  /**
40
60
  * Generates a comprehensive validation schema for a single document.
@@ -49,27 +69,20 @@ var common = require('./common.js');
49
69
  * const docSchema = validator.document;
50
70
  * ```
51
71
  */ get document() {
52
- const { _scalarFields, _populatableFields } = this;
53
72
  const entries = Object.entries({
54
- ..._scalarFields,
55
- ..._populatableFields
73
+ ...this._scalarFields,
74
+ ...this._populatableFields
56
75
  });
57
- const attributesSchema = entries// Remove passwords from the attribute list
58
- // TODO: Make sure we're not leaking other fields like that
76
+ const sanitizedAttributes = entries// Remove passwords from the attribute list
59
77
  .filter(([, attribute])=>![
60
78
  'password'
61
- ].includes(attribute.type))// Merge all attributes into a single schema
62
- .reduce((acc, [attributeName, attribute])=>{
63
- return acc.extend({
64
- get [attributeName] () {
65
- return attributes.mapAttributeToSchema(attribute);
66
- }
67
- });
68
- }, zod.z.object({}));
69
- return attributesSchema.extend({
79
+ ].includes(attribute.type));
80
+ // Merge all attributes into a single schema
81
+ const attributesSchema = mappers.createAttributesSchema(sanitizedAttributes);
82
+ return z__namespace.object({
70
83
  documentId: this.documentID,
71
- id: zod.z.number()
72
- });
84
+ id: z__namespace.number()
85
+ }).extend(attributesSchema.shape);
73
86
  }
74
87
  /**
75
88
  * Generates a validation schema for an array of documents
@@ -82,126 +95,76 @@ var common = require('./common.js');
82
95
  * const docsSchema = validator.documents;
83
96
  * ```
84
97
  */ get documents() {
85
- return zod.z.array(this.document);
98
+ return z__namespace.array(this.document);
86
99
  }
87
100
  /**
88
- * Generates a validation schema for field selection in queries
89
- *
90
- * @returns A schema for validating field selection
91
- *
92
- * @example
93
- * ```ts
94
- * const validator = new CoreContentTypeRouteValidator(strapi, uid);
95
- * const fieldsSchema = validator.queryFields;
96
- * ```
97
- */ get queryFields() {
101
+ * Schema-aware fields validation that restricts to actual model fields
102
+ */ get schemaAwareQueryFields() {
98
103
  return this.scalarFieldsArray.readonly().describe(`The fields to return, this doesn't include populatable fields like relations, components, files, or dynamic zones`);
99
104
  }
100
105
  /**
101
- * Generates a validation schema for populate operations.
102
- *
103
- * Allows wildcard (*), single field, and multiple field population.
104
- *
105
- * @returns A schema for validating populate parameters
106
- *
107
- * @example
108
- * ```ts
109
- * const validator = new CoreContentTypeRouteValidator(strapi, uid);
110
- * const populateSchema = validator.queryPopulate;
111
- * ```
112
- */ get queryPopulate() {
113
- const wildcardPopulate = zod.z.literal('*').readonly().describe('Populate all the first level relations, components, files, and dynamic zones for the entry');
106
+ * Schema-aware populate validation that restricts to actual populatable fields
107
+ */ get schemaAwareQueryPopulate() {
108
+ const wildcardPopulate = z__namespace.literal('*').readonly().describe('Populate all the first level relations, components, files, and dynamic zones for the entry');
114
109
  const singleFieldPopulate = this.populatableFieldsEnum.readonly().describe('Populate a single relation, component, file, or dynamic zone');
115
110
  const multiPopulate = this.populatableFieldsArray.describe('Populate a selection of multiple relations, components, files, or dynamic zones');
116
- return zod.z.union([
111
+ return z__namespace.union([
117
112
  wildcardPopulate,
118
113
  singleFieldPopulate,
119
114
  multiPopulate
120
115
  ]);
121
116
  }
122
117
  /**
123
- * Generates a validation schema for sorting parameters.
124
- *
125
- * Allows various sorting formats including single field, multiple fields, and direction specifications
126
- *
127
- * @returns A schema for validating sort parameters
128
- *
129
- * @example
130
- * ```ts
131
- * const validator = new CoreContentTypeRouteValidator(strapi, uid);
132
- * const sortSchema = validator.querySort;
133
- * ```
134
- *
135
- * @remarks
136
- * - Nested sorts are currently not supported
137
- */ get querySort() {
138
- const orderDirection = zod.z.enum([
118
+ * Schema-aware sort validation that restricts to actual model fields
119
+ */ get schemaAwareQuerySort() {
120
+ const orderDirection = z__namespace.enum([
139
121
  'asc',
140
122
  'desc'
141
123
  ]);
142
124
  // TODO: Handle nested sorts but very low priority, very little usage
143
- return zod.z.union([
125
+ return z__namespace.union([
144
126
  this.scalarFieldsEnum,
145
127
  this.scalarFieldsArray,
146
128
  this.fieldRecord(orderDirection),
147
- zod.z.array(this.fieldRecord(orderDirection))
129
+ z__namespace.array(this.fieldRecord(orderDirection))
148
130
  ]).describe('Sort the result');
149
131
  }
132
+ /**
133
+ * Schema-aware filters validation that restricts to actual model fields
134
+ */ get schemaAwareFilters() {
135
+ return z__namespace.record(this.scalarFieldsEnum, z__namespace.any()).describe('Filters to apply to the query');
136
+ }
150
137
  get locale() {
151
- return zod.z.string().optional().describe('Select a locale');
138
+ return z__namespace.string().describe('Select a locale');
152
139
  }
153
140
  get status() {
154
- return zod.z.enum([
141
+ return z__namespace.enum([
155
142
  'draft',
156
143
  'published'
157
144
  ]).describe('Fetch documents based on their status. Default to "published" if not specified.');
158
145
  }
159
- get pagination() {
160
- return zod.z.intersection(zod.z.object({
161
- withCount: zod.z.boolean().optional()
162
- }), zod.z.union([
163
- zod.z.object({
164
- page: zod.z.number(),
165
- pageSize: zod.z.number()
166
- }).describe('Specify a page number and the number of entries per page'),
167
- zod.z.object({
168
- start: zod.z.number(),
169
- limit: zod.z.number()
170
- }).describe('Specify how many entries to skip and to return')
171
- ])).describe('Pagination parameters');
172
- }
173
- get filters() {
174
- return zod.z.record(this.scalarFieldsEnum, zod.z.any()).describe('Filters to apply to the query');
175
- }
176
146
  get data() {
177
- const { _scalarFields, _populatableFields, _schema } = this;
178
147
  const isWritableAttribute = ([attributeName])=>{
179
- return strapiUtils.contentTypes.isWritableAttribute(_schema, attributeName);
148
+ return strapiUtils.contentTypes.isWritableAttribute(this._schema, attributeName);
180
149
  };
181
150
  const entries = Object.entries({
182
- ..._scalarFields,
183
- ..._populatableFields
151
+ ...this._scalarFields,
152
+ ...this._populatableFields
184
153
  });
185
- return entries// Remove non-writable attributes
186
- .filter(isWritableAttribute)// Combine schemas
187
- .reduce((acc, [attributeName, attribute])=>{
188
- return acc.extend({
189
- get [attributeName] () {
190
- return attributes.mapAttributeToInputSchema(attribute);
191
- }
192
- });
193
- }, zod.z.object());
154
+ const sanitizedAttributes = entries// Remove non-writable attributes
155
+ .filter(isWritableAttribute);
156
+ return mappers.createAttributesInputSchema(sanitizedAttributes);
194
157
  }
195
158
  get query() {
196
- return zod.z.string();
159
+ return z__namespace.string();
197
160
  }
198
161
  get body() {
199
- return zod.z.object({
162
+ return z__namespace.object({
200
163
  data: this.data
201
164
  });
202
165
  }
203
166
  get partialBody() {
204
- return zod.z.object({
167
+ return z__namespace.object({
205
168
  data: this.data.partial()
206
169
  });
207
170
  }
@@ -214,14 +177,14 @@ var common = require('./common.js');
214
177
  * @example
215
178
  * ```ts
216
179
  * const validator = new CoreContentTypeRouteValidator(strapi, uid);
217
- * const querySchemas = validator.query(['fields', 'populate']);
180
+ * const querySchemas = validator.queryParams(['fields', 'populate']);
218
181
  * ```
219
182
  */ queryParams(params) {
220
183
  const map = {
221
- fields: ()=>this.queryFields.optional(),
222
- populate: ()=>this.queryPopulate.optional(),
223
- sort: ()=>this.querySort.optional(),
224
- filters: ()=>this.filters.optional(),
184
+ fields: ()=>this.schemaAwareQueryFields.optional(),
185
+ populate: ()=>this.schemaAwareQueryPopulate.optional(),
186
+ sort: ()=>this.schemaAwareQuerySort.optional(),
187
+ filters: ()=>this.schemaAwareFilters.optional(),
225
188
  locale: ()=>this.locale.optional(),
226
189
  pagination: ()=>this.pagination.optional(),
227
190
  status: ()=>this.status.optional(),
@@ -232,14 +195,6 @@ var common = require('./common.js');
232
195
  [param]: map[param]()
233
196
  }), {});
234
197
  }
235
- /**
236
- * Creates a new instance of CoreContentTypeRouteValidator
237
- *
238
- * @param strapi - The Strapi instance
239
- * @param uid - The content-type's unique identifier
240
- */ constructor(strapi, uid){
241
- super(strapi, uid);
242
- }
243
198
  }
244
199
 
245
200
  exports.CoreContentTypeRouteValidator = CoreContentTypeRouteValidator;
@@ -1 +1 @@
1
- {"version":3,"file":"content-type.js","sources":["../../../../src/core-api/routes/validation/content-type.ts"],"sourcesContent":["import type { Core, Schema, UID } from '@strapi/types';\n\nimport { contentTypes } from '@strapi/utils';\nimport { z } from 'zod';\n\nimport { mapAttributeToInputSchema, mapAttributeToSchema } from './attributes';\nimport { AbstractCoreRouteValidator } from './common';\n\nexport type QueryParam =\n | 'fields'\n | 'populate'\n | 'sort'\n | 'status'\n | 'locale'\n | 'pagination'\n | 'filters'\n | '_q';\n\n/**\n * A validator for core content-type routes.\n *\n * Provides validation schemas and utilities for handling content-type-specific route validation.\n *\n * @example\n * ```ts\n * const strapi = // ... strapi instance\n * const uid = 'api::article.article'\n * const validator = new CoreContentTypeRouteValidator(strapi, uid);\n *\n * // Get validation schema for document\n * const documentSchema = validator.document;\n *\n * // Validate query parameters\n * const querySchema = validator.query(['fields', 'populate', 'sort']);\n * ```\n */\nexport class CoreContentTypeRouteValidator extends AbstractCoreRouteValidator<UID.ContentType> {\n /**\n * Creates a new instance of CoreContentTypeRouteValidator\n *\n * @param strapi - The Strapi instance\n * @param uid - The content-type's unique identifier\n */\n constructor(strapi: Core.Strapi, uid: UID.ContentType) {\n super(strapi, uid);\n }\n\n /**\n * Generates a validation schema for document IDs\n *\n * @returns A schema that validates UUIDs\n *\n * @example\n * ```ts\n * const validator = new CoreContentTypeRouteValidator(strapi, uid);\n * const idSchema = validator.documentID;\n * ```\n */\n get documentID() {\n return z.uuid().describe('The document ID, represented by a UUID');\n }\n\n /**\n * Generates a comprehensive validation schema for a single document.\n *\n * Combines scalar fields and populatable fields into a single schema.\n *\n * @returns A schema for validating complete documents\n *\n * @example\n * ```ts\n * const validator = new CoreContentTypeRouteValidator(strapi, uid);\n * const docSchema = validator.document;\n * ```\n */\n get document() {\n const { _scalarFields, _populatableFields } = this;\n\n const entries = Object.entries({ ..._scalarFields, ..._populatableFields });\n\n const attributesSchema = entries\n // Remove passwords from the attribute list\n // TODO: Make sure we're not leaking other fields like that\n .filter(([, attribute]) => !['password'].includes(attribute.type))\n // Merge all attributes into a single schema\n .reduce((acc, [attributeName, attribute]) => {\n return acc.extend({\n get [attributeName]() {\n return mapAttributeToSchema(attribute);\n },\n });\n }, z.object({}));\n\n return attributesSchema.extend({\n documentId: this.documentID,\n id: z.number(),\n });\n }\n\n /**\n * Generates a validation schema for an array of documents\n *\n * @returns A schema for validating arrays of documents\n *\n * @example\n * ```ts\n * const validator = new CoreContentTypeRouteValidator(strapi, uid);\n * const docsSchema = validator.documents;\n * ```\n */\n get documents() {\n return z.array(this.document);\n }\n\n /**\n * Generates a validation schema for field selection in queries\n *\n * @returns A schema for validating field selection\n *\n * @example\n * ```ts\n * const validator = new CoreContentTypeRouteValidator(strapi, uid);\n * const fieldsSchema = validator.queryFields;\n * ```\n */\n get queryFields() {\n return this.scalarFieldsArray\n .readonly()\n .describe(\n `The fields to return, this doesn't include populatable fields like relations, components, files, or dynamic zones`\n );\n }\n\n /**\n * Generates a validation schema for populate operations.\n *\n * Allows wildcard (*), single field, and multiple field population.\n *\n * @returns A schema for validating populate parameters\n *\n * @example\n * ```ts\n * const validator = new CoreContentTypeRouteValidator(strapi, uid);\n * const populateSchema = validator.queryPopulate;\n * ```\n */\n get queryPopulate() {\n const wildcardPopulate = z\n .literal('*')\n .readonly()\n .describe(\n 'Populate all the first level relations, components, files, and dynamic zones for the entry'\n );\n\n const singleFieldPopulate = this.populatableFieldsEnum\n .readonly()\n .describe('Populate a single relation, component, file, or dynamic zone');\n\n const multiPopulate = this.populatableFieldsArray.describe(\n 'Populate a selection of multiple relations, components, files, or dynamic zones'\n );\n\n return z.union([wildcardPopulate, singleFieldPopulate, multiPopulate]);\n }\n\n /**\n * Generates a validation schema for sorting parameters.\n *\n * Allows various sorting formats including single field, multiple fields, and direction specifications\n *\n * @returns A schema for validating sort parameters\n *\n * @example\n * ```ts\n * const validator = new CoreContentTypeRouteValidator(strapi, uid);\n * const sortSchema = validator.querySort;\n * ```\n *\n * @remarks\n * - Nested sorts are currently not supported\n */\n get querySort() {\n const orderDirection = z.enum(['asc', 'desc']);\n\n // TODO: Handle nested sorts but very low priority, very little usage\n return z\n .union([\n this.scalarFieldsEnum, // 'name' | 'title'\n this.scalarFieldsArray, // ['name', 'title']\n this.fieldRecord(orderDirection), // { name: 'desc' } | { title: 'asc' }\n z.array(this.fieldRecord(orderDirection)), // [{ name: 'desc'}, { title: 'asc' }]\n ])\n .describe('Sort the result');\n }\n\n get locale() {\n return z.string().optional().describe('Select a locale');\n }\n\n get status() {\n return z\n .enum(['draft', 'published'])\n .describe('Fetch documents based on their status. Default to \"published\" if not specified.');\n }\n\n get pagination() {\n return z\n .intersection(\n z.object({ withCount: z.boolean().optional() }),\n z.union([\n z\n .object({ page: z.number(), pageSize: z.number() })\n .describe('Specify a page number and the number of entries per page'),\n z\n .object({ start: z.number(), limit: z.number() })\n .describe('Specify how many entries to skip and to return'),\n ])\n )\n .describe('Pagination parameters');\n }\n\n get filters() {\n return z.record(this.scalarFieldsEnum, z.any()).describe('Filters to apply to the query');\n }\n\n get data() {\n const { _scalarFields, _populatableFields, _schema } = this;\n\n const isWritableAttribute = ([attributeName]: [string, Schema.Attribute.AnyAttribute]) => {\n return contentTypes.isWritableAttribute(_schema, attributeName);\n };\n\n const entries = Object.entries({ ..._scalarFields, ..._populatableFields });\n\n return (\n entries\n // Remove non-writable attributes\n .filter(isWritableAttribute)\n // Combine schemas\n .reduce((acc, [attributeName, attribute]) => {\n return acc.extend({\n get [attributeName]() {\n return mapAttributeToInputSchema(attribute);\n },\n });\n }, z.object())\n );\n }\n\n get query() {\n return z.string();\n }\n\n get body() {\n return z.object({ data: this.data });\n }\n\n get partialBody() {\n return z.object({ data: this.data.partial() });\n }\n\n /**\n * Creates validation schemas for query parameters\n *\n * @param params - Array of query parameters to validate ('fields', 'populate', 'sort', ...)\n * @returns Object containing validation schemas for requested parameters\n *\n * @example\n * ```ts\n * const validator = new CoreContentTypeRouteValidator(strapi, uid);\n * const querySchemas = validator.query(['fields', 'populate']);\n * ```\n */\n queryParams(params: QueryParam[]): Partial<Record<QueryParam, z.Schema>> {\n const map: Record<QueryParam, () => z.Schema> = {\n fields: () => this.queryFields.optional(),\n populate: () => this.queryPopulate.optional(),\n sort: () => this.querySort.optional(),\n filters: () => this.filters.optional(),\n locale: () => this.locale.optional(),\n pagination: () => this.pagination.optional(),\n status: () => this.status.optional(),\n _q: () => this.query.optional(),\n } as const;\n\n return params.reduce(\n (acc, param) => ({ ...acc, [param]: map[param]() }),\n {} as Partial<Record<QueryParam, z.Schema>>\n );\n }\n}\n"],"names":["CoreContentTypeRouteValidator","AbstractCoreRouteValidator","documentID","z","uuid","describe","document","_scalarFields","_populatableFields","entries","Object","attributesSchema","filter","attribute","includes","type","reduce","acc","attributeName","extend","mapAttributeToSchema","object","documentId","id","number","documents","array","queryFields","scalarFieldsArray","readonly","queryPopulate","wildcardPopulate","literal","singleFieldPopulate","populatableFieldsEnum","multiPopulate","populatableFieldsArray","union","querySort","orderDirection","enum","scalarFieldsEnum","fieldRecord","locale","string","optional","status","pagination","intersection","withCount","boolean","page","pageSize","start","limit","filters","record","any","data","_schema","isWritableAttribute","contentTypes","mapAttributeToInputSchema","query","body","partialBody","partial","queryParams","params","map","fields","populate","sort","_q","param","constructor","strapi","uid"],"mappings":"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"}
1
+ {"version":3,"file":"content-type.js","sources":["../../../../src/core-api/routes/validation/content-type.ts"],"sourcesContent":["import type { Schema, UID } from '@strapi/types';\n\nimport { contentTypes } from '@strapi/utils';\nimport * as z from 'zod/v4';\n\n// eslint-disable-next-line import/no-cycle\nimport { createAttributesInputSchema, createAttributesSchema } from './mappers';\nimport { AbstractCoreRouteValidator } from './common';\n\nexport type QueryParam =\n | 'fields'\n | 'populate'\n | 'sort'\n | 'status'\n | 'locale'\n | 'pagination'\n | 'filters'\n | '_q';\n\n/**\n * A validator for core content-type routes.\n *\n * Provides validation schemas and utilities for handling content-type-specific route validation.\n * Extends the base AbstractRouteValidator with schema-aware validation for Strapi content types.\n *\n * @example\n * ```ts\n * const strapi = // ... strapi instance\n * const uid = 'api::article.article'\n * const validator = new CoreContentTypeRouteValidator(strapi, uid);\n *\n * // Get validation schema for document\n * const documentSchema = validator.document;\n *\n * // Validate query parameters with schema awareness\n * const querySchema = validator.queryParams(['fields', 'populate', 'sort']);\n * ```\n */\nexport class CoreContentTypeRouteValidator extends AbstractCoreRouteValidator<UID.ContentType> {\n /**\n * Generates a validation schema for document IDs\n *\n * @returns A schema that validates UUIDs\n *\n * @example\n * ```ts\n * const validator = new CoreContentTypeRouteValidator(strapi, uid);\n * const idSchema = validator.documentID;\n * ```\n */\n get documentID() {\n return z.uuid().describe('The document ID, represented by a UUID');\n }\n\n /**\n * Generates a comprehensive validation schema for a single document.\n *\n * Combines scalar fields and populatable fields into a single schema.\n *\n * @returns A schema for validating complete documents\n *\n * @example\n * ```ts\n * const validator = new CoreContentTypeRouteValidator(strapi, uid);\n * const docSchema = validator.document;\n * ```\n */\n get document() {\n const entries = Object.entries({ ...this._scalarFields, ...this._populatableFields });\n\n const sanitizedAttributes = entries\n // Remove passwords from the attribute list\n .filter(([, attribute]) => !['password'].includes(attribute.type));\n\n // Merge all attributes into a single schema\n const attributesSchema = createAttributesSchema(sanitizedAttributes);\n\n return z\n .object({\n documentId: this.documentID,\n id: z.number(),\n })\n .extend(attributesSchema.shape);\n }\n\n /**\n * Generates a validation schema for an array of documents\n *\n * @returns A schema for validating arrays of documents\n *\n * @example\n * ```ts\n * const validator = new CoreContentTypeRouteValidator(strapi, uid);\n * const docsSchema = validator.documents;\n * ```\n */\n get documents() {\n return z.array(this.document);\n }\n\n /**\n * Schema-aware fields validation that restricts to actual model fields\n */\n protected get schemaAwareQueryFields() {\n return this.scalarFieldsArray\n .readonly()\n .describe(\n `The fields to return, this doesn't include populatable fields like relations, components, files, or dynamic zones`\n );\n }\n\n /**\n * Schema-aware populate validation that restricts to actual populatable fields\n */\n protected get schemaAwareQueryPopulate() {\n const wildcardPopulate = z\n .literal('*')\n .readonly()\n .describe(\n 'Populate all the first level relations, components, files, and dynamic zones for the entry'\n );\n\n const singleFieldPopulate = this.populatableFieldsEnum\n .readonly()\n .describe('Populate a single relation, component, file, or dynamic zone');\n\n const multiPopulate = this.populatableFieldsArray.describe(\n 'Populate a selection of multiple relations, components, files, or dynamic zones'\n );\n\n return z.union([wildcardPopulate, singleFieldPopulate, multiPopulate]);\n }\n\n /**\n * Schema-aware sort validation that restricts to actual model fields\n */\n protected get schemaAwareQuerySort() {\n const orderDirection = z.enum(['asc', 'desc']);\n\n // TODO: Handle nested sorts but very low priority, very little usage\n return z\n .union([\n this.scalarFieldsEnum, // 'name' | 'title'\n this.scalarFieldsArray, // ['name', 'title']\n this.fieldRecord(orderDirection), // { name: 'desc' } | { title: 'asc' }\n z.array(this.fieldRecord(orderDirection)), // [{ name: 'desc'}, { title: 'asc' }]\n ])\n .describe('Sort the result');\n }\n\n /**\n * Schema-aware filters validation that restricts to actual model fields\n */\n protected get schemaAwareFilters() {\n return z.record(this.scalarFieldsEnum, z.any()).describe('Filters to apply to the query');\n }\n\n get locale() {\n return z.string().describe('Select a locale');\n }\n\n get status() {\n return z\n .enum(['draft', 'published'])\n .describe('Fetch documents based on their status. Default to \"published\" if not specified.');\n }\n\n get data() {\n const isWritableAttribute = ([attributeName]: [string, Schema.Attribute.AnyAttribute]) => {\n return contentTypes.isWritableAttribute(this._schema, attributeName);\n };\n\n const entries = Object.entries({ ...this._scalarFields, ...this._populatableFields });\n\n const sanitizedAttributes = entries\n // Remove non-writable attributes\n .filter(isWritableAttribute);\n\n return createAttributesInputSchema(sanitizedAttributes);\n }\n\n get query() {\n return z.string();\n }\n\n get body() {\n return z.object({ data: this.data });\n }\n\n get partialBody() {\n return z.object({ data: this.data.partial() });\n }\n\n /**\n * Creates validation schemas for query parameters\n *\n * @param params - Array of query parameters to validate ('fields', 'populate', 'sort', ...)\n * @returns Object containing validation schemas for requested parameters\n *\n * @example\n * ```ts\n * const validator = new CoreContentTypeRouteValidator(strapi, uid);\n * const querySchemas = validator.queryParams(['fields', 'populate']);\n * ```\n */\n queryParams(params: QueryParam[]): Partial<Record<QueryParam, z.Schema>> {\n const map: Record<QueryParam, () => z.Schema> = {\n fields: () => this.schemaAwareQueryFields.optional(),\n populate: () => this.schemaAwareQueryPopulate.optional(),\n sort: () => this.schemaAwareQuerySort.optional(),\n filters: () => this.schemaAwareFilters.optional(),\n locale: () => this.locale.optional(),\n pagination: () => this.pagination.optional(),\n status: () => this.status.optional(),\n _q: () => this.query.optional(),\n } as const;\n\n return params.reduce(\n (acc, param) => ({ ...acc, [param]: map[param]() }),\n {} as Partial<Record<QueryParam, z.Schema>>\n );\n }\n}\n"],"names":["CoreContentTypeRouteValidator","AbstractCoreRouteValidator","documentID","z","uuid","describe","document","entries","Object","_scalarFields","_populatableFields","sanitizedAttributes","filter","attribute","includes","type","attributesSchema","createAttributesSchema","object","documentId","id","number","extend","shape","documents","array","schemaAwareQueryFields","scalarFieldsArray","readonly","schemaAwareQueryPopulate","wildcardPopulate","literal","singleFieldPopulate","populatableFieldsEnum","multiPopulate","populatableFieldsArray","union","schemaAwareQuerySort","orderDirection","enum","scalarFieldsEnum","fieldRecord","schemaAwareFilters","record","any","locale","string","status","data","isWritableAttribute","attributeName","contentTypes","_schema","createAttributesInputSchema","query","body","partialBody","partial","queryParams","params","map","fields","optional","populate","sort","filters","pagination","_q","reduce","acc","param"],"mappings":"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"}