@strapi/content-type-builder 5.54.0 → 5.55.1

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 (208) hide show
  1. package/dist/admin/components/AIChat/hooks/useAIFetch.js +6 -2
  2. package/dist/admin/components/AIChat/hooks/useAIFetch.js.map +1 -1
  3. package/dist/admin/components/AIChat/hooks/useAIFetch.mjs +7 -3
  4. package/dist/admin/components/AIChat/hooks/useAIFetch.mjs.map +1 -1
  5. package/dist/admin/components/AIChat/hooks/usePrefetchAIToken.js +20 -0
  6. package/dist/admin/components/AIChat/hooks/usePrefetchAIToken.js.map +1 -0
  7. package/dist/admin/components/AIChat/hooks/usePrefetchAIToken.mjs +18 -0
  8. package/dist/admin/components/AIChat/hooks/usePrefetchAIToken.mjs.map +1 -0
  9. package/dist/admin/components/ContentTypeBuilderNav/ContentTypeBuilderNav.js +83 -59
  10. package/dist/admin/components/ContentTypeBuilderNav/ContentTypeBuilderNav.js.map +1 -1
  11. package/dist/admin/components/ContentTypeBuilderNav/ContentTypeBuilderNav.mjs +86 -62
  12. package/dist/admin/components/ContentTypeBuilderNav/ContentTypeBuilderNav.mjs.map +1 -1
  13. package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/DeleteFolderDialog.js +112 -0
  14. package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/DeleteFolderDialog.js.map +1 -0
  15. package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/DeleteFolderDialog.mjs +110 -0
  16. package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/DeleteFolderDialog.mjs.map +1 -0
  17. package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/FolderNameField.js +159 -0
  18. package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/FolderNameField.js.map +1 -0
  19. package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/FolderNameField.mjs +157 -0
  20. package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/FolderNameField.mjs.map +1 -0
  21. package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/FolderNavSection.js +311 -0
  22. package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/FolderNavSection.js.map +1 -0
  23. package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/FolderNavSection.mjs +309 -0
  24. package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/FolderNavSection.mjs.map +1 -0
  25. package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/SortableTreeRow.js +379 -0
  26. package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/SortableTreeRow.js.map +1 -0
  27. package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/SortableTreeRow.mjs +376 -0
  28. package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/SortableTreeRow.mjs.map +1 -0
  29. package/dist/admin/components/ContentTypeBuilderNav/hooks/useContentTypeBuilderMenu.js +172 -0
  30. package/dist/admin/components/ContentTypeBuilderNav/hooks/useContentTypeBuilderMenu.js.map +1 -0
  31. package/dist/admin/components/ContentTypeBuilderNav/hooks/useContentTypeBuilderMenu.mjs +166 -0
  32. package/dist/admin/components/ContentTypeBuilderNav/hooks/useContentTypeBuilderMenu.mjs.map +1 -0
  33. package/dist/admin/components/ContentTypeBuilderNav/hooks/useFolderActions.js +62 -0
  34. package/dist/admin/components/ContentTypeBuilderNav/hooks/useFolderActions.js.map +1 -0
  35. package/dist/admin/components/ContentTypeBuilderNav/hooks/useFolderActions.mjs +60 -0
  36. package/dist/admin/components/ContentTypeBuilderNav/hooks/useFolderActions.mjs.map +1 -0
  37. package/dist/admin/components/ContentTypeBuilderNav/hooks/useSortableTree.js +145 -0
  38. package/dist/admin/components/ContentTypeBuilderNav/hooks/useSortableTree.js.map +1 -0
  39. package/dist/admin/components/ContentTypeBuilderNav/hooks/useSortableTree.mjs +143 -0
  40. package/dist/admin/components/ContentTypeBuilderNav/hooks/useSortableTree.mjs.map +1 -0
  41. package/dist/admin/components/ContentTypeBuilderNav/lib/buildFolderTree.js +176 -0
  42. package/dist/admin/components/ContentTypeBuilderNav/lib/buildFolderTree.js.map +1 -0
  43. package/dist/admin/components/ContentTypeBuilderNav/lib/buildFolderTree.mjs +169 -0
  44. package/dist/admin/components/ContentTypeBuilderNav/lib/buildFolderTree.mjs.map +1 -0
  45. package/dist/admin/components/ContentTypeBuilderNav/lib/dropProjection.js +277 -0
  46. package/dist/admin/components/ContentTypeBuilderNav/lib/dropProjection.js.map +1 -0
  47. package/dist/admin/components/ContentTypeBuilderNav/lib/dropProjection.mjs +273 -0
  48. package/dist/admin/components/ContentTypeBuilderNav/lib/dropProjection.mjs.map +1 -0
  49. package/dist/admin/components/ContentTypeBuilderNav/lib/flatModel.js +62 -0
  50. package/dist/admin/components/ContentTypeBuilderNav/lib/flatModel.js.map +1 -0
  51. package/dist/admin/components/ContentTypeBuilderNav/lib/flatModel.mjs +58 -0
  52. package/dist/admin/components/ContentTypeBuilderNav/lib/flatModel.mjs.map +1 -0
  53. package/dist/admin/components/DataManager/DataManagerContext.js.map +1 -1
  54. package/dist/admin/components/DataManager/DataManagerContext.mjs.map +1 -1
  55. package/dist/admin/components/DataManager/DataManagerProvider.js +70 -8
  56. package/dist/admin/components/DataManager/DataManagerProvider.js.map +1 -1
  57. package/dist/admin/components/DataManager/DataManagerProvider.mjs +70 -8
  58. package/dist/admin/components/DataManager/DataManagerProvider.mjs.map +1 -1
  59. package/dist/admin/components/DataManager/reducer.js +411 -33
  60. package/dist/admin/components/DataManager/reducer.js.map +1 -1
  61. package/dist/admin/components/DataManager/reducer.mjs +411 -33
  62. package/dist/admin/components/DataManager/reducer.mjs.map +1 -1
  63. package/dist/admin/components/DataManager/utils/cleanData.js +11 -2
  64. package/dist/admin/components/DataManager/utils/cleanData.js.map +1 -1
  65. package/dist/admin/components/DataManager/utils/cleanData.mjs +11 -2
  66. package/dist/admin/components/DataManager/utils/cleanData.mjs.map +1 -1
  67. package/dist/admin/components/DataManager/utils/contentStructure.js +150 -0
  68. package/dist/admin/components/DataManager/utils/contentStructure.js.map +1 -0
  69. package/dist/admin/components/DataManager/utils/contentStructure.mjs +133 -0
  70. package/dist/admin/components/DataManager/utils/contentStructure.mjs.map +1 -0
  71. package/dist/admin/components/FolderSelect.js +200 -0
  72. package/dist/admin/components/FolderSelect.js.map +1 -0
  73. package/dist/admin/components/FolderSelect.mjs +198 -0
  74. package/dist/admin/components/FolderSelect.mjs.map +1 -0
  75. package/dist/admin/components/FormModal/FormModal.js +23 -2
  76. package/dist/admin/components/FormModal/FormModal.js.map +1 -1
  77. package/dist/admin/components/FormModal/FormModal.mjs +23 -2
  78. package/dist/admin/components/FormModal/FormModal.mjs.map +1 -1
  79. package/dist/admin/components/FormModal/contentType/contentTypeForm.js +15 -18
  80. package/dist/admin/components/FormModal/contentType/contentTypeForm.js.map +1 -1
  81. package/dist/admin/components/FormModal/contentType/contentTypeForm.mjs +15 -18
  82. package/dist/admin/components/FormModal/contentType/contentTypeForm.mjs.map +1 -1
  83. package/dist/admin/components/FormModal/reducer.js +6 -0
  84. package/dist/admin/components/FormModal/reducer.js.map +1 -1
  85. package/dist/admin/components/FormModal/reducer.mjs +6 -0
  86. package/dist/admin/components/FormModal/reducer.mjs.map +1 -1
  87. package/dist/admin/pages/App/index.js +2 -5
  88. package/dist/admin/pages/App/index.js.map +1 -1
  89. package/dist/admin/pages/App/index.mjs +2 -5
  90. package/dist/admin/pages/App/index.mjs.map +1 -1
  91. package/dist/admin/src/components/AIChat/hooks/usePrefetchAIToken.d.ts +1 -0
  92. package/dist/admin/src/components/ContentTypeBuilderNav/components/FolderNav/DeleteFolderDialog.d.ts +16 -0
  93. package/dist/admin/src/components/ContentTypeBuilderNav/components/FolderNav/FolderNameField.d.ts +12 -0
  94. package/dist/admin/src/components/ContentTypeBuilderNav/components/FolderNav/FolderNavSection.d.ts +14 -0
  95. package/dist/admin/src/components/ContentTypeBuilderNav/components/FolderNav/SortableTreeRow.d.ts +38 -0
  96. package/dist/admin/src/components/ContentTypeBuilderNav/{useContentTypeBuilderMenu.d.ts → hooks/useContentTypeBuilderMenu.d.ts} +17 -7
  97. package/dist/admin/src/components/ContentTypeBuilderNav/hooks/useFolderActions.d.ts +42 -0
  98. package/dist/admin/src/components/ContentTypeBuilderNav/hooks/useSortableTree.d.ts +53 -0
  99. package/dist/admin/src/components/ContentTypeBuilderNav/lib/buildFolderTree.d.ts +42 -0
  100. package/dist/admin/src/components/ContentTypeBuilderNav/lib/dropProjection.d.ts +58 -0
  101. package/dist/admin/src/components/ContentTypeBuilderNav/lib/flatModel.d.ts +18 -0
  102. package/dist/admin/src/components/DataManager/DataManagerContext.d.ts +41 -0
  103. package/dist/admin/src/components/DataManager/reducer.d.ts +105 -1
  104. package/dist/admin/src/components/DataManager/utils/cleanData.d.ts +5 -1
  105. package/dist/admin/src/components/DataManager/utils/contentStructure.d.ts +68 -0
  106. package/dist/admin/src/components/FolderSelect.d.ts +18 -0
  107. package/dist/admin/src/components/FormModal/contentType/contentTypeForm.d.ts +0 -21
  108. package/dist/admin/src/components/FormModal/forms/forms.d.ts +0 -10
  109. package/dist/admin/src/components/FormModal/reducer.d.ts +7 -0
  110. package/dist/admin/src/utils/folderTelemetry.d.ts +5 -0
  111. package/dist/admin/translations/en.json.js +23 -0
  112. package/dist/admin/translations/en.json.js.map +1 -1
  113. package/dist/admin/translations/en.json.mjs +23 -0
  114. package/dist/admin/translations/en.json.mjs.map +1 -1
  115. package/dist/admin/utils/folderTelemetry.js +19 -0
  116. package/dist/admin/utils/folderTelemetry.js.map +1 -0
  117. package/dist/admin/utils/folderTelemetry.mjs +16 -0
  118. package/dist/admin/utils/folderTelemetry.mjs.map +1 -0
  119. package/dist/server/controllers/schema.js +1 -1
  120. package/dist/server/controllers/schema.js.map +1 -1
  121. package/dist/server/controllers/schema.mjs +1 -1
  122. package/dist/server/controllers/schema.mjs.map +1 -1
  123. package/dist/server/controllers/validation/common.js +3 -0
  124. package/dist/server/controllers/validation/common.js.map +1 -1
  125. package/dist/server/controllers/validation/common.mjs +3 -1
  126. package/dist/server/controllers/validation/common.mjs.map +1 -1
  127. package/dist/server/controllers/validation/content-structure.js +177 -0
  128. package/dist/server/controllers/validation/content-structure.js.map +1 -0
  129. package/dist/server/controllers/validation/content-structure.mjs +173 -0
  130. package/dist/server/controllers/validation/content-structure.mjs.map +1 -0
  131. package/dist/server/controllers/validation/schema.js +3 -1
  132. package/dist/server/controllers/validation/schema.js.map +1 -1
  133. package/dist/server/controllers/validation/schema.mjs +3 -1
  134. package/dist/server/controllers/validation/schema.mjs.map +1 -1
  135. package/dist/server/register.js +1 -1
  136. package/dist/server/register.js.map +1 -1
  137. package/dist/server/register.mjs +1 -1
  138. package/dist/server/register.mjs.map +1 -1
  139. package/dist/server/routes/content-api.js +4 -4
  140. package/dist/server/routes/content-api.js.map +1 -1
  141. package/dist/server/routes/content-api.mjs +4 -4
  142. package/dist/server/routes/content-api.mjs.map +1 -1
  143. package/dist/server/services/api-handler.js +37 -4
  144. package/dist/server/services/api-handler.js.map +1 -1
  145. package/dist/server/services/api-handler.mjs +36 -5
  146. package/dist/server/services/api-handler.mjs.map +1 -1
  147. package/dist/server/services/content-structure.js +174 -0
  148. package/dist/server/services/content-structure.js.map +1 -0
  149. package/dist/server/services/content-structure.mjs +172 -0
  150. package/dist/server/services/content-structure.mjs.map +1 -0
  151. package/dist/server/services/content-types.js +196 -44
  152. package/dist/server/services/content-types.js.map +1 -1
  153. package/dist/server/services/content-types.mjs +195 -45
  154. package/dist/server/services/content-types.mjs.map +1 -1
  155. package/dist/server/services/index.js +3 -1
  156. package/dist/server/services/index.js.map +1 -1
  157. package/dist/server/services/index.mjs +3 -1
  158. package/dist/server/services/index.mjs.map +1 -1
  159. package/dist/server/services/schema-builder/index.js +4 -2
  160. package/dist/server/services/schema-builder/index.js.map +1 -1
  161. package/dist/server/services/schema-builder/index.mjs +4 -2
  162. package/dist/server/services/schema-builder/index.mjs.map +1 -1
  163. package/dist/server/services/schema-builder/schema-handler.js +16 -16
  164. package/dist/server/services/schema-builder/schema-handler.js.map +1 -1
  165. package/dist/server/services/schema-builder/schema-handler.mjs +16 -16
  166. package/dist/server/services/schema-builder/schema-handler.mjs.map +1 -1
  167. package/dist/server/services/schema-mutation.js +46 -0
  168. package/dist/server/services/schema-mutation.js.map +1 -0
  169. package/dist/server/services/schema-mutation.mjs +43 -0
  170. package/dist/server/services/schema-mutation.mjs.map +1 -0
  171. package/dist/server/services/schema.js +134 -79
  172. package/dist/server/services/schema.js.map +1 -1
  173. package/dist/server/services/schema.mjs +135 -80
  174. package/dist/server/services/schema.mjs.map +1 -1
  175. package/dist/server/src/controllers/schema.d.ts.map +1 -1
  176. package/dist/server/src/controllers/validation/common.d.ts +1 -0
  177. package/dist/server/src/controllers/validation/common.d.ts.map +1 -1
  178. package/dist/server/src/controllers/validation/content-structure.d.ts +56 -0
  179. package/dist/server/src/controllers/validation/content-structure.d.ts.map +1 -0
  180. package/dist/server/src/controllers/validation/schema.d.ts +35 -0
  181. package/dist/server/src/controllers/validation/schema.d.ts.map +1 -1
  182. package/dist/server/src/index.d.ts +3 -0
  183. package/dist/server/src/index.d.ts.map +1 -1
  184. package/dist/server/src/routes/content-api.d.ts.map +1 -1
  185. package/dist/server/src/services/api-handler.d.ts +13 -1
  186. package/dist/server/src/services/api-handler.d.ts.map +1 -1
  187. package/dist/server/src/services/content-structure.d.ts +37 -0
  188. package/dist/server/src/services/content-structure.d.ts.map +1 -0
  189. package/dist/server/src/services/content-types.d.ts +4 -0
  190. package/dist/server/src/services/content-types.d.ts.map +1 -1
  191. package/dist/server/src/services/index.d.ts +4 -0
  192. package/dist/server/src/services/index.d.ts.map +1 -1
  193. package/dist/server/src/services/schema-builder/index.d.ts +3 -1
  194. package/dist/server/src/services/schema-builder/index.d.ts.map +1 -1
  195. package/dist/server/src/services/schema-builder/schema-handler.d.ts.map +1 -1
  196. package/dist/server/src/services/schema-mutation.d.ts +26 -0
  197. package/dist/server/src/services/schema-mutation.d.ts.map +1 -0
  198. package/dist/server/src/services/schema.d.ts +1 -0
  199. package/dist/server/src/services/schema.d.ts.map +1 -1
  200. package/dist/server/src/utils/index.d.ts +2 -0
  201. package/dist/server/src/utils/index.d.ts.map +1 -1
  202. package/dist/server/utils/index.js.map +1 -1
  203. package/dist/server/utils/index.mjs.map +1 -1
  204. package/package.json +6 -6
  205. package/dist/admin/components/ContentTypeBuilderNav/useContentTypeBuilderMenu.js +0 -157
  206. package/dist/admin/components/ContentTypeBuilderNav/useContentTypeBuilderMenu.js.map +0 -1
  207. package/dist/admin/components/ContentTypeBuilderNav/useContentTypeBuilderMenu.mjs +0 -151
  208. package/dist/admin/components/ContentTypeBuilderNav/useContentTypeBuilderMenu.mjs.map +0 -1
@@ -0,0 +1,173 @@
1
+ import { z } from 'zod';
2
+ import { CONTENT_TYPE_UID_REGEX } from './common.mjs';
3
+
4
+ // eslint-disable-next-line no-control-regex
5
+ const CONTROL_CHARS_REGEX = /[\x00-\x1F\x7F-\x9F]/;
6
+ // eslint-disable-next-line no-control-regex
7
+ const ANSI_ESCAPE_REGEX = /\x1B\[[0-9;]*[A-Za-z]/;
8
+ const GROUP_NAME_MAX_LENGTH = 255;
9
+ const groupIdSchema = z.string().min(1, 'Group id must not be empty');
10
+ const groupNameSchema = z.string().min(1, 'Group name must not be empty').max(GROUP_NAME_MAX_LENGTH, `Group name must be at most ${GROUP_NAME_MAX_LENGTH} characters`).refine((value)=>value.trim().length > 0, 'Group name must not be empty').refine((value)=>value === value.trim(), 'Group name must not have leading or trailing whitespace').refine((value)=>!CONTROL_CHARS_REGEX.test(value), 'Group name must not contain control characters').refine((value)=>!ANSI_ESCAPE_REGEX.test(value), 'Group name must not contain ANSI escape characters');
11
+ const contentStructureChildSchema = z.discriminatedUnion('type', [
12
+ z.object({
13
+ uid: z.string().regex(CONTENT_TYPE_UID_REGEX, 'Invalid content type uid'),
14
+ type: z.literal('contentType')
15
+ }),
16
+ z.object({
17
+ type: z.literal('group'),
18
+ id: groupIdSchema
19
+ })
20
+ ]);
21
+ /** Zod schema for a group record */ const contentStructureGroupSchema = z.object({
22
+ children: z.array(contentStructureChildSchema),
23
+ parent: groupIdSchema.nullable(),
24
+ name: groupNameSchema,
25
+ id: groupIdSchema
26
+ });
27
+ const contentStructureSectionSchema = z.object({
28
+ groups: z.array(contentStructureGroupSchema)
29
+ });
30
+ const contentStructureFileObjectSchema = z.object({
31
+ version: z.literal(1),
32
+ sections: z.object({
33
+ collectionTypes: contentStructureSectionSchema,
34
+ singleTypes: contentStructureSectionSchema
35
+ })
36
+ });
37
+ const MAX_FOLDER_DEPTH = 3;
38
+ /**
39
+ * File-wide group-id uniqueness across singleTypes and collectionTypes
40
+ */ const uniqueGroupIdsAcrossFile = (file, ctx)=>{
41
+ const seen = new Set();
42
+ for (const section of [
43
+ file.sections.collectionTypes,
44
+ file.sections.singleTypes
45
+ ]){
46
+ for (const group of section.groups){
47
+ if (seen.has(group.id)) {
48
+ ctx.addIssue({
49
+ message: `Duplicate group id "${group.id}"`,
50
+ code: z.ZodIssueCode.custom,
51
+ path: [
52
+ 'sections'
53
+ ]
54
+ });
55
+ }
56
+ seen.add(group.id);
57
+ }
58
+ }
59
+ };
60
+ /**
61
+ * File-internal graph resolution/validation.
62
+ * This performs all context-UNAWARE validation of the structure. Context-aware validation is performed at the CTB service layer.
63
+ */ const validateSectionGraph = (groups, sectionKey, ctx)=>{
64
+ const path = [
65
+ 'sections',
66
+ sectionKey,
67
+ 'groups'
68
+ ];
69
+ const byId = new Map(groups.map((group)=>[
70
+ group.id,
71
+ group
72
+ ]));
73
+ const report = (message)=>{
74
+ ctx.addIssue({
75
+ code: z.ZodIssueCode.custom,
76
+ path,
77
+ message
78
+ });
79
+ };
80
+ // Sibling group names must be unique within the same parent (case-insensitive).
81
+ const siblingNames = new Map();
82
+ for (const group of groups){
83
+ const name = group.name.trim().toLowerCase();
84
+ const seen = siblingNames.get(group.parent) ?? new Set();
85
+ if (seen.has(name)) {
86
+ const where = group.parent ? `group "${group.parent}"` : 'the section root';
87
+ report(`Sibling groups under ${where} in section "${sectionKey}" share the name "${group.name.trim()}"`);
88
+ }
89
+ seen.add(name);
90
+ siblingNames.set(group.parent, seen);
91
+ }
92
+ // Parent references a group in the SAME section.
93
+ // No cycles
94
+ // Depth <= 3
95
+ for (const group of groups){
96
+ if (group.parent !== null && !byId.has(group.parent)) {
97
+ report(`Group "${group.id}" references parent "${group.parent}" which is not a group in section "${sectionKey}"`);
98
+ continue;
99
+ }
100
+ const chain = new Set([
101
+ group.id
102
+ ]);
103
+ let current = group;
104
+ let depth = 1;
105
+ let broken = false;
106
+ while(current && current.parent !== null){
107
+ if (chain.has(current.parent)) {
108
+ report(`Group "${group.id}" is part of a parent cycle`);
109
+ broken = true;
110
+ break;
111
+ }
112
+ const parent = byId.get(current.parent);
113
+ if (!parent) {
114
+ broken = true;
115
+ break;
116
+ }
117
+ chain.add(current.parent);
118
+ current = parent;
119
+ depth += 1;
120
+ }
121
+ if (!broken && depth > MAX_FOLDER_DEPTH) {
122
+ report(`Group "${group.id}" exceeds the maximum nesting depth of ${MAX_FOLDER_DEPTH} in section "${sectionKey}"`);
123
+ }
124
+ }
125
+ // Group children reference an existing group in the same section whose parent points back at the containing group.
126
+ // Also, each content type appears in at most ONE group.
127
+ const groupChildCount = new Map();
128
+ const seenUids = new Set();
129
+ for (const group of groups){
130
+ for (const child of group.children){
131
+ if (child.type === 'group') {
132
+ const target = byId.get(child.id);
133
+ if (!target) {
134
+ report(`Group "${group.id}" has a group child "${child.id}" that does not exist in section "${sectionKey}"`);
135
+ continue;
136
+ }
137
+ if (target.parent !== group.id) {
138
+ report(`Group child "${child.id}" of "${group.id}" does not list "${group.id}" as its parent`);
139
+ }
140
+ groupChildCount.set(child.id, (groupChildCount.get(child.id) ?? 0) + 1);
141
+ continue;
142
+ }
143
+ if (seenUids.has(child.uid)) {
144
+ report(`Content type "${child.uid}" appears in more than one group in section "${sectionKey}"`);
145
+ } else {
146
+ seenUids.add(child.uid);
147
+ }
148
+ }
149
+ }
150
+ // Every non-root group should appear exactly once as a group child.
151
+ for (const group of groups){
152
+ const count = groupChildCount.get(group.id) ?? 0;
153
+ if (group.parent === null) {
154
+ if (count > 0) {
155
+ report(`Root group "${group.id}" is listed as a group child of another group in section "${sectionKey}"`);
156
+ }
157
+ continue;
158
+ }
159
+ if (count === 0) {
160
+ report(`Group "${group.id}" is not listed in the children of its parent "${group.parent}"`);
161
+ } else if (count > 1) {
162
+ report(`Group "${group.id}" is listed ${count} times as a group child in section "${sectionKey}"`);
163
+ }
164
+ }
165
+ };
166
+ const validateGraphRules = (file, ctx)=>{
167
+ validateSectionGraph(file.sections.collectionTypes.groups, 'collectionTypes', ctx);
168
+ validateSectionGraph(file.sections.singleTypes.groups, 'singleTypes', ctx);
169
+ };
170
+ const contentStructureFileSchema = contentStructureFileObjectSchema.superRefine(uniqueGroupIdsAcrossFile).superRefine(validateGraphRules);
171
+
172
+ export { contentStructureChildSchema, contentStructureFileSchema, contentStructureGroupSchema };
173
+ //# sourceMappingURL=content-structure.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-structure.mjs","sources":["../../../../server/src/controllers/validation/content-structure.ts"],"sourcesContent":["import { z } from 'zod';\n\nimport { CONTENT_TYPE_UID_REGEX } from './common';\n\n// eslint-disable-next-line no-control-regex\nconst CONTROL_CHARS_REGEX = /[\\x00-\\x1F\\x7F-\\x9F]/;\n// eslint-disable-next-line no-control-regex\nconst ANSI_ESCAPE_REGEX = /\\x1B\\[[0-9;]*[A-Za-z]/;\n\nconst GROUP_NAME_MAX_LENGTH = 255;\n\nconst groupIdSchema = z.string().min(1, 'Group id must not be empty');\n\nconst groupNameSchema = z\n .string()\n .min(1, 'Group name must not be empty')\n .max(GROUP_NAME_MAX_LENGTH, `Group name must be at most ${GROUP_NAME_MAX_LENGTH} characters`)\n .refine((value) => value.trim().length > 0, 'Group name must not be empty')\n .refine(\n (value) => value === value.trim(),\n 'Group name must not have leading or trailing whitespace'\n )\n .refine(\n (value) => !CONTROL_CHARS_REGEX.test(value),\n 'Group name must not contain control characters'\n )\n .refine(\n (value) => !ANSI_ESCAPE_REGEX.test(value),\n 'Group name must not contain ANSI escape characters'\n );\n\nexport const contentStructureChildSchema = z.discriminatedUnion('type', [\n z.object({\n uid: z.string().regex(CONTENT_TYPE_UID_REGEX, 'Invalid content type uid'),\n type: z.literal('contentType'),\n }),\n z.object({\n type: z.literal('group'),\n id: groupIdSchema,\n }),\n]);\n\n/** Zod schema for a group record */\nexport const contentStructureGroupSchema = z.object({\n children: z.array(contentStructureChildSchema),\n parent: groupIdSchema.nullable(),\n name: groupNameSchema,\n id: groupIdSchema,\n});\n\nconst contentStructureSectionSchema = z.object({\n groups: z.array(contentStructureGroupSchema),\n});\n\nconst contentStructureFileObjectSchema = z.object({\n version: z.literal(1),\n sections: z.object({\n collectionTypes: contentStructureSectionSchema,\n singleTypes: contentStructureSectionSchema,\n }),\n});\n\ntype ContentStructureFileObject = z.infer<typeof contentStructureFileObjectSchema>;\ntype ContentStructureGroupInput = z.infer<typeof contentStructureGroupSchema>;\ntype SuperRefinement<T> = (value: T, ctx: z.RefinementCtx) => void | Promise<void>;\n\nconst MAX_FOLDER_DEPTH = 3;\n\n/**\n * File-wide group-id uniqueness across singleTypes and collectionTypes\n */\nconst uniqueGroupIdsAcrossFile: SuperRefinement<ContentStructureFileObject> = (file, ctx) => {\n const seen = new Set<string>();\n\n for (const section of [file.sections.collectionTypes, file.sections.singleTypes]) {\n for (const group of section.groups) {\n if (seen.has(group.id)) {\n ctx.addIssue({\n message: `Duplicate group id \"${group.id}\"`,\n code: z.ZodIssueCode.custom,\n path: ['sections'],\n });\n }\n\n seen.add(group.id);\n }\n }\n};\n\n/**\n * File-internal graph resolution/validation.\n * This performs all context-UNAWARE validation of the structure. Context-aware validation is performed at the CTB service layer.\n */\nconst validateSectionGraph = (\n groups: ContentStructureGroupInput[],\n sectionKey: 'collectionTypes' | 'singleTypes',\n ctx: z.RefinementCtx\n) => {\n const path: (string | number)[] = ['sections', sectionKey, 'groups'];\n const byId = new Map(groups.map((group) => [group.id, group]));\n\n const report = (message: string) => {\n ctx.addIssue({ code: z.ZodIssueCode.custom, path, message });\n };\n\n // Sibling group names must be unique within the same parent (case-insensitive).\n const siblingNames = new Map<string | null, Set<string>>();\n\n for (const group of groups) {\n const name = group.name.trim().toLowerCase();\n const seen = siblingNames.get(group.parent) ?? new Set<string>();\n\n if (seen.has(name)) {\n const where = group.parent ? `group \"${group.parent}\"` : 'the section root';\n report(\n `Sibling groups under ${where} in section \"${sectionKey}\" share the name \"${group.name.trim()}\"`\n );\n }\n\n seen.add(name);\n siblingNames.set(group.parent, seen);\n }\n\n // Parent references a group in the SAME section.\n // No cycles\n // Depth <= 3\n for (const group of groups) {\n if (group.parent !== null && !byId.has(group.parent)) {\n report(\n `Group \"${group.id}\" references parent \"${group.parent}\" which is not a group in section \"${sectionKey}\"`\n );\n continue;\n }\n\n const chain = new Set<string>([group.id]);\n\n let current: ContentStructureGroupInput | undefined = group;\n let depth = 1;\n let broken = false;\n\n while (current && current.parent !== null) {\n if (chain.has(current.parent)) {\n report(`Group \"${group.id}\" is part of a parent cycle`);\n broken = true;\n break;\n }\n\n const parent = byId.get(current.parent);\n\n if (!parent) {\n broken = true;\n break;\n }\n\n chain.add(current.parent);\n current = parent;\n depth += 1;\n }\n\n if (!broken && depth > MAX_FOLDER_DEPTH) {\n report(\n `Group \"${group.id}\" exceeds the maximum nesting depth of ${MAX_FOLDER_DEPTH} in section \"${sectionKey}\"`\n );\n }\n }\n\n // Group children reference an existing group in the same section whose parent points back at the containing group.\n // Also, each content type appears in at most ONE group.\n const groupChildCount = new Map<string, number>();\n const seenUids = new Set<string>();\n\n for (const group of groups) {\n for (const child of group.children) {\n if (child.type === 'group') {\n const target = byId.get(child.id);\n\n if (!target) {\n report(\n `Group \"${group.id}\" has a group child \"${child.id}\" that does not exist in section \"${sectionKey}\"`\n );\n continue;\n }\n\n if (target.parent !== group.id) {\n report(\n `Group child \"${child.id}\" of \"${group.id}\" does not list \"${group.id}\" as its parent`\n );\n }\n\n groupChildCount.set(child.id, (groupChildCount.get(child.id) ?? 0) + 1);\n continue;\n }\n\n if (seenUids.has(child.uid)) {\n report(\n `Content type \"${child.uid}\" appears in more than one group in section \"${sectionKey}\"`\n );\n } else {\n seenUids.add(child.uid);\n }\n }\n }\n\n // Every non-root group should appear exactly once as a group child.\n for (const group of groups) {\n const count = groupChildCount.get(group.id) ?? 0;\n\n if (group.parent === null) {\n if (count > 0) {\n report(\n `Root group \"${group.id}\" is listed as a group child of another group in section \"${sectionKey}\"`\n );\n }\n continue;\n }\n\n if (count === 0) {\n report(`Group \"${group.id}\" is not listed in the children of its parent \"${group.parent}\"`);\n } else if (count > 1) {\n report(\n `Group \"${group.id}\" is listed ${count} times as a group child in section \"${sectionKey}\"`\n );\n }\n }\n};\n\nconst validateGraphRules: SuperRefinement<ContentStructureFileObject> = (file, ctx) => {\n validateSectionGraph(file.sections.collectionTypes.groups, 'collectionTypes', ctx);\n validateSectionGraph(file.sections.singleTypes.groups, 'singleTypes', ctx);\n};\n\nexport const contentStructureFileSchema = contentStructureFileObjectSchema\n .superRefine(uniqueGroupIdsAcrossFile)\n .superRefine(validateGraphRules);\n\nexport type ContentStructureFileInput = z.infer<typeof contentStructureFileSchema>;\n"],"names":["CONTROL_CHARS_REGEX","ANSI_ESCAPE_REGEX","GROUP_NAME_MAX_LENGTH","groupIdSchema","z","string","min","groupNameSchema","max","refine","value","trim","length","test","contentStructureChildSchema","discriminatedUnion","object","uid","regex","CONTENT_TYPE_UID_REGEX","type","literal","id","contentStructureGroupSchema","children","array","parent","nullable","name","contentStructureSectionSchema","groups","contentStructureFileObjectSchema","version","sections","collectionTypes","singleTypes","MAX_FOLDER_DEPTH","uniqueGroupIdsAcrossFile","file","ctx","seen","Set","section","group","has","addIssue","message","code","ZodIssueCode","custom","path","add","validateSectionGraph","sectionKey","byId","Map","map","report","siblingNames","toLowerCase","get","where","set","chain","current","depth","broken","groupChildCount","seenUids","child","target","count","validateGraphRules","contentStructureFileSchema","superRefine"],"mappings":"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"}
@@ -6,6 +6,7 @@ var fp = require('lodash/fp');
6
6
  var builder = require('../../services/builder.js');
7
7
  var constants = require('../../services/constants.js');
8
8
  var common = require('./common.js');
9
+ var contentStructure = require('./content-structure.js');
9
10
 
10
11
  function _interopNamespace(e) {
11
12
  if (e && e.__esModule) return e;
@@ -670,7 +671,8 @@ const schemaSchema = z__namespace.object({
670
671
  updateSingleTypeSchema,
671
672
  updateCollectionTypeSchema,
672
673
  deleteContentTypeSchema
673
- ]).superRefine(verifySingularAndPluralNames).superRefine(verifyDraftAndPublishReservedAttributes)).optional().default([])
674
+ ]).superRefine(verifySingularAndPluralNames).superRefine(verifyDraftAndPublishReservedAttributes)).optional().default([]),
675
+ contentStructure: contentStructure.contentStructureFileSchema.optional()
674
676
  });
675
677
  const updateSchemaInput = z__namespace.object({
676
678
  data: schemaSchema
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sources":["../../../../server/src/controllers/validation/schema.ts"],"sourcesContent":["import * as z from 'zod/v4';\nimport { strings, validateZodSchema, contentTypes } from '@strapi/utils';\nimport type { Struct, UID } from '@strapi/types';\nimport { isArray, isNil, isNull, isNumber, isObject, isUndefined, snakeCase } from 'lodash/fp';\n\nimport { isReservedAttributeName, isReservedModelName } from '../../services/builder';\nimport { coreUids, typeKinds, VALID_UID_TARGETS } from '../../services/constants';\n\nimport {\n CATEGORY_NAME_REGEX,\n ICON_REGEX,\n COLLECTION_NAME_REGEX,\n KEBAB_BASE_REGEX,\n NAME_REGEX,\n} from './common';\n\ntype SchemaMeta =\n | {\n modelType: 'contentType';\n kind?: Struct.ContentTypeKind;\n }\n | {\n modelType: 'component';\n };\n\ntype SuperRefinement<T> = (value: T, ctx: z.RefinementCtx) => void | Promise<void>;\n\nconst uniqueAttributeName: SuperRefinement<{ name: string }[]> = (attributes, ctx) => {\n const names = new Set(attributes.map((attribute) => snakeCase(attribute.name)));\n if (names.size !== attributes.length) {\n ctx.addIssue({\n code: 'custom',\n message: 'Attributes must have unique names',\n });\n }\n};\n\nconst verifyUidTargetField: SuperRefinement<\n {\n action: 'create' | 'update' | 'delete';\n name: string;\n properties?: {\n type: unknown;\n targetField?: string | null;\n };\n }[]\n> = (attributes, ctx) => {\n attributes.forEach((attribute) => {\n if (!attribute.properties) {\n return;\n }\n\n const { properties, action } = attribute;\n\n if (properties.type === 'uid' && properties.targetField) {\n const targetAttr = attributes.find((attr) => attr.name === properties.targetField);\n\n if (!targetAttr) {\n // NOTE: on update we are setting it to undefined later in the process instead to handle renames\n if (action === 'create') {\n ctx.addIssue({\n code: 'custom',\n message: 'Target does not exist',\n });\n }\n } else if (\n !VALID_UID_TARGETS.some((validUIdTarget) => validUIdTarget === targetAttr.properties?.type)\n ) {\n ctx.addIssue({\n code: 'custom',\n message: 'Invalid target type',\n });\n }\n }\n });\n};\n\nconst verifySingularAndPluralNames: SuperRefinement<Record<string, unknown>> = (obj, ctx) => {\n // singular and plural can only be provided on creation\n if (obj.action !== 'create') {\n return;\n }\n\n if (obj.singularName === obj.pluralName) {\n ctx.addIssue({\n code: 'custom',\n message: 'Singular and plural names must be different',\n path: ['singularName'],\n });\n }\n};\n\ntype ContentTypeSchemaAction = {\n action: 'create' | 'update' | 'delete';\n draftAndPublish?: boolean;\n uid?: UID.ContentType;\n attributes?: Array<{ action: 'create' | 'update' | 'delete'; name: string }>;\n};\n\nconst getEffectiveAttributeNames = (contentType: ContentTypeSchemaAction): string[] => {\n if (contentType.action === 'create') {\n return (contentType.attributes ?? [])\n .filter((attribute) => attribute.action !== 'delete')\n .map((attribute) => attribute.name);\n }\n\n if (contentType.action !== 'update' || !contentType.uid) {\n return [];\n }\n\n const existingContentType = strapi.contentTypes[contentType.uid];\n const names = new Set(existingContentType ? Object.keys(existingContentType.attributes) : []);\n\n for (const attribute of contentType.attributes ?? []) {\n if (attribute.action === 'delete') {\n names.delete(attribute.name);\n } else if (attribute.action === 'create') {\n names.add(attribute.name);\n }\n }\n\n return [...names];\n};\n\nexport const verifyDraftAndPublishReservedAttributes: SuperRefinement<ContentTypeSchemaAction> = (\n contentType,\n ctx\n) => {\n if (contentType.action === 'delete' || !contentType.draftAndPublish) {\n return;\n }\n\n const reservedAttributeNames = contentTypes.findDraftAndPublishReservedAttributeNames(\n getEffectiveAttributeNames(contentType)\n );\n\n if (reservedAttributeNames.length > 0) {\n ctx.addIssue({\n code: 'custom',\n message: contentTypes.getDraftAndPublishEnableBlockedMessage(reservedAttributeNames),\n path: ['draftAndPublish'],\n });\n }\n};\n\nexport const maxLengthGreaterThanMinLength: SuperRefinement<Record<string, unknown>> = (\n value,\n ctx\n) => {\n if (\n !isNil(value.maxLength) &&\n !isNil(value.minLength) &&\n isNumber(value.maxLength) &&\n isNumber(value.minLength)\n ) {\n if (value.maxLength < value.minLength) {\n ctx.addIssue({\n code: 'custom',\n message: 'maxLength must be greater or equal to minLength',\n path: ['maxLength'],\n });\n }\n }\n};\n\nexport const maxGreaterThanMin: SuperRefinement<Record<string, unknown>> = (value, ctx) => {\n if (!isNil(value.max) && !isNil(value.min) && isNumber(value.max) && isNumber(value.min)) {\n if (value.max < value.min) {\n ctx.addIssue({\n code: 'custom',\n message: 'max must be greater or equal to min',\n path: ['max'],\n });\n }\n }\n};\n\nconst checkUserTarget: SuperRefinement<{\n type: string;\n target?: string;\n relation?: string;\n targetAttribute?: string | null;\n}> = (value, ctx) => {\n if (value.type !== 'relation') {\n return;\n }\n\n if (isUndefined(value.target) || isUndefined(value.relation)) {\n return;\n }\n\n const { target, relation, targetAttribute } = value;\n\n if (\n target === coreUids.STRAPI_USER &&\n (!STRAPI_USER_RELATIONS.includes(relation) || !isUndefined(targetAttribute))\n ) {\n ctx.addIssue({\n code: 'custom',\n path: ['relation'],\n message: `Relations to ${coreUids.STRAPI_USER} must be one of the following values: ${STRAPI_USER_RELATIONS.join(', ')} without targetAttribute`,\n });\n }\n};\n\nconst uidRefinement: SuperRefinement<{\n type: string;\n default?: unknown;\n targetField?: string | null;\n}> = (value, ctx) => {\n if (!isNil(value.targetField) && !isNil(value.default)) {\n ctx.addIssue({\n code: 'custom',\n message: 'Cannot define a default UID if the targetField is set',\n path: ['default'],\n });\n }\n};\n\nconst enumRefinement: SuperRefinement<{\n type: string;\n default?: unknown;\n enum?: string[];\n}> = (value, ctx) => {\n if (value.type === 'enumeration' && !isNil(value.default) && !isNil(value.enum)) {\n if (value.default === '' || !value.enum.some((v) => v === value.default)) {\n ctx.addIssue({\n code: 'custom',\n message: 'Default value must be one of the enum values',\n path: ['default'],\n });\n }\n }\n};\n\nconst conditionSchema = z.object({\n visible: z.record(z.string(), z.array(z.any())),\n});\n\nconst basePropertiesSchema = z.object({\n type: z.enum([\n 'string',\n 'text',\n 'richtext',\n 'blocks',\n 'json',\n 'enumeration',\n 'password',\n 'email',\n 'integer',\n 'biginteger',\n 'float',\n 'decimal',\n 'time',\n 'datetime',\n 'date',\n 'timestamp',\n 'boolean',\n 'component',\n 'uid',\n 'customField',\n 'media',\n 'relation',\n 'dynamiczone',\n ]),\n configurable: z.boolean().nullish(),\n private: z.boolean().nullish(),\n // Keep null invalid so searchability is always an explicit boolean when provided.\n searchable: z.boolean().optional(),\n pluginOptions: z.record(z.string(), z.unknown()).optional(),\n conditions: z.preprocess((val) => {\n return val;\n }, conditionSchema.optional()),\n});\n\nconst maxLengthSchema = z.number().int().positive().optional();\nconst minLengthSchema = z.number().int().positive().optional();\n\nconst requiredSchema = z.boolean().optional();\nconst uniqueSchema = z.boolean().optional();\n\nconst STRAPI_USER_RELATIONS = ['oneToOne', 'oneToMany'];\n\nconst baseRelationSchema = z.object({\n type: z.literal('relation'),\n relation: z.enum([\n 'oneToOne',\n 'oneToMany',\n 'manyToOne',\n 'manyToMany',\n 'morphOne',\n 'morphMany',\n 'morphToOne',\n 'morphToMany',\n ]),\n configurable: z.boolean().nullish(),\n required: requiredSchema,\n private: z.boolean().nullish(),\n pluginOptions: z.record(z.string(), z.unknown()).optional(),\n conditions: z.preprocess((val) => {\n return val;\n }, conditionSchema.optional()),\n});\n\nconst oneToOneSchema = baseRelationSchema.extend({\n relation: z.literal('oneToOne'),\n target: z.string(),\n targetAttribute: z.string().nullish(),\n});\n\nconst oneWaySchema = baseRelationSchema.extend({\n relation: z.literal('oneToOne'),\n target: z.string(),\n});\n\nconst oneToManySchema = baseRelationSchema.extend({\n relation: z.literal('oneToMany'),\n target: z.string(),\n targetAttribute: z.string().nullish(),\n});\n\nconst manyWaySchema = baseRelationSchema.extend({\n relation: z.literal('oneToMany'),\n target: z.string(),\n});\n\nconst manyToOneSchema = baseRelationSchema.extend({\n relation: z.literal('manyToOne'),\n target: z.string(),\n targetAttribute: z.string().nullish(),\n});\n\nconst manyToManySchema = baseRelationSchema.extend({\n relation: z.literal('manyToMany'),\n target: z.string(),\n targetAttribute: z.string().nullish(),\n});\n\nconst morphOneSchema = baseRelationSchema.extend({\n relation: z.literal('morphOne'),\n target: z.string(),\n targetAttribute: z.string().nullish(),\n});\n\nconst morphManySchema = baseRelationSchema.extend({\n relation: z.literal('morphMany'),\n target: z.string(),\n targetAttribute: z.string().nullish(),\n});\n\nconst morphToOneSchema = baseRelationSchema.extend({\n relation: z.literal('morphToOne'),\n});\n\nconst morphToManySchema = baseRelationSchema.extend({\n relation: z.literal('morphToMany'),\n});\n\nconst createRelationSchema = (meta: SchemaMeta) => {\n switch (meta.modelType) {\n case 'contentType': {\n switch (meta.kind) {\n case 'singleType':\n return z.discriminatedUnion('relation', [\n oneToOneSchema,\n oneToManySchema,\n morphOneSchema,\n morphManySchema,\n morphToOneSchema,\n morphToManySchema,\n ]);\n\n case 'collectionType':\n return z.discriminatedUnion('relation', [\n oneToOneSchema,\n oneToManySchema,\n manyToOneSchema,\n manyToManySchema,\n morphOneSchema,\n morphManySchema,\n morphToOneSchema,\n morphToManySchema,\n ]);\n default:\n throw new Error('Invalid content type kind');\n }\n }\n\n case 'component': {\n return z.discriminatedUnion('relation', [oneWaySchema, manyWaySchema]);\n }\n default:\n throw new Error('Invalid model type');\n }\n};\n\nconst richTextSchema = basePropertiesSchema.extend({\n type: z.literal('richtext'),\n required: requiredSchema,\n minLength: minLengthSchema,\n maxLength: maxLengthSchema,\n default: z.string().optional(),\n});\n\nconst blocksSchema = basePropertiesSchema.extend({\n type: z.literal('blocks'),\n required: requiredSchema,\n});\n\nconst jsonSchema = basePropertiesSchema.extend({\n type: z.literal('json'),\n required: requiredSchema,\n default: z\n .unknown()\n .optional()\n .refine((value) => {\n if (value === undefined) {\n return true;\n }\n\n if (isNumber(value) || isNull(value) || isObject(value) || isArray(value)) {\n return true;\n }\n\n try {\n JSON.parse(value as string);\n\n return true;\n } catch {\n return false;\n }\n }),\n});\n\nconst enumerationSchema = basePropertiesSchema.extend({\n type: z.literal('enumeration'),\n required: requiredSchema,\n default: z.string().optional(),\n enumName: z\n .string()\n .optional()\n .refine((value) => {\n return value === '' || NAME_REGEX.test(value as string);\n }, 'Invalid enum name'),\n enum: z\n .array(\n z.string().refine((value) => {\n return value === '' || !strings.startsWithANumber(value as string);\n })\n )\n .min(1)\n .refine((values) => {\n const filtered = [...new Set(values)];\n return filtered.length === values.length;\n }),\n});\n\nconst textSchema = basePropertiesSchema.extend({\n type: z.literal('text'),\n default: z.string().nullish(),\n minLength: minLengthSchema,\n maxLength: maxLengthSchema,\n required: requiredSchema,\n unique: uniqueSchema,\n regex: z\n .string()\n .optional()\n .refine((value) => {\n return value === '' || !!new RegExp(value as string);\n }, 'Invalid regular expression pattern'),\n});\n\nconst stringSchema = textSchema.extend({\n type: z.literal('string'),\n});\n\nconst passwordSchema = basePropertiesSchema.extend({\n type: z.literal('password'),\n required: requiredSchema,\n minLength: minLengthSchema,\n maxLength: maxLengthSchema,\n});\n\nconst emailSchema = basePropertiesSchema.extend({\n type: z.literal('email'),\n required: requiredSchema,\n minLength: minLengthSchema,\n maxLength: maxLengthSchema,\n default: z.string().email().optional(),\n unique: uniqueSchema,\n});\n\nconst integerSchema = basePropertiesSchema.extend({\n type: z.literal('integer'),\n required: requiredSchema,\n default: z.number().int().optional(),\n unique: uniqueSchema,\n min: z.number().int().optional(),\n max: z.number().int().optional(),\n});\n\nconst bigIntegerSchema = basePropertiesSchema.extend({\n type: z.literal('biginteger'),\n required: requiredSchema,\n unique: uniqueSchema,\n default: z.string().regex(/^\\d*$/).nullish(),\n min: z.string().regex(/^\\d*$/).nullish(),\n max: z.string().regex(/^\\d*$/).nullish(),\n});\n\nconst floatSchema = basePropertiesSchema.extend({\n type: z.literal('float'),\n required: requiredSchema,\n unique: uniqueSchema,\n default: z.number().optional(),\n min: z.number().optional(),\n max: z.number().optional(),\n});\n\nconst decimalSchema = basePropertiesSchema.extend({\n type: z.literal('decimal'),\n required: requiredSchema,\n unique: uniqueSchema,\n default: z.number().optional(),\n min: z.number().optional(),\n max: z.number().optional(),\n});\n\nconst timeSchema = basePropertiesSchema.extend({\n type: z.literal('time'),\n required: requiredSchema,\n unique: uniqueSchema,\n default: z.string().optional(),\n});\n\nconst dateSchema = timeSchema.extend({\n type: z.literal('date'),\n});\n\nconst dateTimeSchema = timeSchema.extend({\n type: z.literal('datetime'),\n});\n\nconst timeStampSchema = basePropertiesSchema.extend({\n type: z.literal('timestamp'),\n});\n\nconst booleanSchema = basePropertiesSchema.extend({\n type: z.literal('boolean'),\n required: requiredSchema,\n default: z.boolean().optional(),\n});\n\nconst componentSchema = basePropertiesSchema.extend({\n type: z.literal('component'),\n component: z.string(),\n repeatable: z.boolean().optional(),\n required: requiredSchema,\n min: z.number().optional(),\n max: z.number().optional(),\n});\n\nconst dynamicZoneSchema = basePropertiesSchema.extend({\n type: z.literal('dynamiczone'),\n components: z.array(z.string()).nonempty(),\n required: requiredSchema,\n min: z.number().optional(),\n max: z.number().optional(),\n});\n\nconst mediaSchema = basePropertiesSchema.extend({\n type: z.literal('media'),\n multiple: z.boolean().optional(),\n required: requiredSchema,\n allowedTypes: z\n .array(z.enum(['images', 'videos', 'files', 'audios']))\n .nonempty()\n .optional(),\n});\n\nconst uidSchema = basePropertiesSchema.extend({\n type: z.literal('uid'),\n targetField: z.string().nullish(),\n required: requiredSchema,\n default: z.string().nullish(),\n minLength: minLengthSchema,\n maxLength: maxLengthSchema,\n options: z\n .object({\n separator: z.string().optional(),\n lowercase: z.boolean().optional(),\n decamelize: z.boolean().optional(),\n customReplacements: z.array(z.array(z.string()).length(2)).optional(),\n preserveLeadingUnderscore: z.boolean().optional(),\n })\n .optional(),\n regex: z\n .string()\n .optional()\n .refine((value) => {\n return value === '' || !!new RegExp(value as string);\n }, 'Invalid regular expression pattern'),\n});\n\nconst customFieldSchema = basePropertiesSchema.extend({\n type: z.literal('customField'),\n customField: z.string(),\n});\n\nconst attributePropertiesSchema = (meta: SchemaMeta) => {\n const relationSchema = createRelationSchema(meta);\n\n const base = z.union([\n mediaSchema,\n textSchema,\n stringSchema,\n richTextSchema,\n blocksSchema,\n jsonSchema,\n enumerationSchema,\n passwordSchema,\n emailSchema,\n integerSchema,\n bigIntegerSchema,\n floatSchema,\n decimalSchema,\n timeSchema,\n dateSchema,\n dateTimeSchema,\n timeStampSchema,\n booleanSchema,\n componentSchema,\n customFieldSchema.passthrough(),\n\n relationSchema,\n ]);\n\n if (meta.modelType === 'component') {\n return base\n .superRefine(enumRefinement)\n .superRefine(checkUserTarget)\n .superRefine(maxGreaterThanMin)\n .superRefine(maxLengthGreaterThanMinLength);\n }\n\n return z\n .union([...base.options, uidSchema, dynamicZoneSchema])\n .superRefine(enumRefinement)\n .superRefine(checkUserTarget)\n .superRefine(uidRefinement)\n .superRefine(maxGreaterThanMin)\n .superRefine(maxLengthGreaterThanMinLength);\n};\n\nconst createAttributeSchema = (meta: SchemaMeta) =>\n z.object({\n action: z.literal('create'),\n name: z\n .string()\n .regex(NAME_REGEX)\n .refine((value) => !isReservedAttributeName(value), 'Attribute name is reserved'),\n properties: attributePropertiesSchema(meta),\n });\n\nconst updateAttributeSchema = (meta: SchemaMeta) =>\n z.object({\n action: z.literal('update'),\n name: z.string(),\n properties: attributePropertiesSchema(meta),\n });\n\nconst deleteAttributeSchema = z.object({\n action: z.literal('delete'),\n name: z.string(),\n});\n\nconst contentTypeUIDSchema = z.custom<UID.ContentType>((value) => {\n return typeof value === 'string' && value.length > 0;\n});\n\nconst componentUIDSchema = z.custom<UID.Component>((value) => {\n return typeof value === 'string' && value.length > 0;\n});\n\nconst categorySchema = z.string().min(1).regex(CATEGORY_NAME_REGEX);\n\nconst baseComponentSchema = z.object({\n uid: componentUIDSchema,\n displayName: z.string().min(1),\n icon: z.string().regex(ICON_REGEX).optional(),\n description: z.string().optional(),\n category: categorySchema,\n pluginOptions: z.record(z.string(), z.unknown()).optional(),\n});\n\nconst createComponentSchema = baseComponentSchema.extend({\n action: z.literal('create'),\n config: z.record(z.string(), z.unknown()).optional().default({}),\n attributes: z\n .array(\n createAttributeSchema({\n modelType: 'component',\n })\n )\n .superRefine(uniqueAttributeName),\n});\n\nconst updateComponentSchema = baseComponentSchema.extend({\n action: z.literal('update'),\n category: categorySchema.optional(),\n attributes: z\n .array(\n z.discriminatedUnion('action', [\n createAttributeSchema({\n modelType: 'component',\n }),\n updateAttributeSchema({\n modelType: 'component',\n }),\n deleteAttributeSchema,\n ])\n )\n .superRefine(uniqueAttributeName),\n});\n\nconst deleteComponentSchema = z.object({\n action: z.literal('delete'),\n uid: componentUIDSchema,\n});\n\nconst baseContentTypeSchema = z.object({\n uid: contentTypeUIDSchema,\n displayName: z.string().min(1),\n description: z.string().optional(),\n draftAndPublish: z.boolean(),\n options: z.record(z.string(), z.unknown()).optional().default({}),\n pluginOptions: z.record(z.string(), z.unknown()).optional().default({}),\n kind: z.enum([typeKinds.SINGLE_TYPE, typeKinds.COLLECTION_TYPE]).optional(),\n});\n\nconst baseCreateContentTypeSchema = baseContentTypeSchema.extend({\n action: z.literal('create'),\n plugin: z.string().min(1).optional(),\n collectionName: z.string().regex(COLLECTION_NAME_REGEX).optional(),\n singularName: z\n .string()\n .min(1)\n .regex(KEBAB_BASE_REGEX, 'Must be kebab case')\n .refine((value) => !isReservedModelName(value), 'Model name is reserved'),\n pluralName: z\n .string()\n .min(1)\n .regex(KEBAB_BASE_REGEX, 'Must be kebab case')\n .refine((value) => !isReservedModelName(value), 'Model name is reserved'),\n config: z.record(z.string(), z.unknown()).optional(),\n});\n\nconst createSingleTypeSchema = baseCreateContentTypeSchema.extend({\n kind: z.literal(typeKinds.SINGLE_TYPE),\n attributes: z\n .array(\n createAttributeSchema({\n modelType: 'contentType',\n kind: 'singleType',\n })\n )\n .superRefine(uniqueAttributeName)\n .superRefine(verifyUidTargetField),\n});\n\nconst createCollectionTypeSchema = baseCreateContentTypeSchema.extend({\n kind: z.literal(typeKinds.COLLECTION_TYPE),\n attributes: z\n .array(\n createAttributeSchema({\n modelType: 'contentType',\n kind: 'collectionType',\n })\n )\n .superRefine(uniqueAttributeName)\n .superRefine(verifyUidTargetField),\n});\n\nconst baseUpdateContentTypeSchema = baseContentTypeSchema.extend({\n action: z.literal('update'),\n});\n\nconst updateSingleTypeSchema = baseUpdateContentTypeSchema.extend({\n kind: z.literal(typeKinds.SINGLE_TYPE).optional(),\n attributes: z\n .array(\n z.discriminatedUnion('action', [\n createAttributeSchema({\n modelType: 'contentType',\n kind: 'singleType',\n }),\n updateAttributeSchema({\n modelType: 'contentType',\n kind: 'singleType',\n }),\n deleteAttributeSchema,\n ])\n )\n .superRefine(uniqueAttributeName)\n .superRefine(verifyUidTargetField),\n});\n\nconst updateCollectionTypeSchema = baseUpdateContentTypeSchema.extend({\n kind: z.literal(typeKinds.COLLECTION_TYPE).optional(),\n attributes: z\n .array(\n z.union([\n createAttributeSchema({\n modelType: 'contentType',\n kind: 'collectionType',\n }),\n updateAttributeSchema({\n modelType: 'contentType',\n kind: 'collectionType',\n }),\n deleteAttributeSchema,\n ])\n )\n .superRefine(uniqueAttributeName)\n .superRefine(verifyUidTargetField),\n});\n\nconst deleteContentTypeSchema = z.object({\n action: z.literal('delete'),\n uid: contentTypeUIDSchema,\n});\n\nconst schemaSchema = z.object({\n components: z\n .array(z.union([createComponentSchema, updateComponentSchema, deleteComponentSchema]))\n .optional()\n .default([]),\n contentTypes: z\n .array(\n z\n .union([\n createSingleTypeSchema,\n createCollectionTypeSchema,\n updateSingleTypeSchema,\n updateCollectionTypeSchema,\n deleteContentTypeSchema,\n ])\n .superRefine(verifySingularAndPluralNames)\n .superRefine(verifyDraftAndPublishReservedAttributes)\n )\n .optional()\n .default([]),\n});\n\ntype CreateComponentType = z.infer<typeof createComponentSchema>;\ntype UpdateComponentType = z.infer<typeof updateComponentSchema>;\ntype DeleteComponentType = z.infer<typeof deleteComponentSchema>;\ntype CreateCollectionType = z.infer<typeof createCollectionTypeSchema>;\ntype CreateSingleType = z.infer<typeof createSingleTypeSchema>;\ntype UpdateSingleType = z.infer<typeof updateSingleTypeSchema>;\ntype UpdateCollectionType = z.infer<typeof updateCollectionTypeSchema>;\ntype DeleteContentType = z.infer<typeof deleteContentTypeSchema>;\n\nexport type Schema = {\n components: Array<CreateComponentType | UpdateComponentType | DeleteComponentType>;\n contentTypes: Array<\n | CreateSingleType\n | CreateCollectionType\n | UpdateSingleType\n | UpdateCollectionType\n | DeleteContentType\n >;\n};\n\nconst updateSchemaInput = z.object(\n {\n data: schemaSchema,\n },\n {\n error: (issue) =>\n issue.input === undefined\n ? 'Schema is required'\n : 'Invalid schema, expected an object with a data property',\n }\n);\n\nexport const validateUpdateSchema = validateZodSchema(updateSchemaInput);\n"],"names":["uniqueAttributeName","attributes","ctx","names","Set","map","attribute","snakeCase","name","size","length","addIssue","code","message","verifyUidTargetField","forEach","properties","action","type","targetField","targetAttr","find","attr","VALID_UID_TARGETS","some","validUIdTarget","verifySingularAndPluralNames","obj","singularName","pluralName","path","getEffectiveAttributeNames","contentType","filter","uid","existingContentType","strapi","contentTypes","Object","keys","delete","add","verifyDraftAndPublishReservedAttributes","draftAndPublish","reservedAttributeNames","findDraftAndPublishReservedAttributeNames","getDraftAndPublishEnableBlockedMessage","maxLengthGreaterThanMinLength","value","isNil","maxLength","minLength","isNumber","maxGreaterThanMin","max","min","checkUserTarget","isUndefined","target","relation","targetAttribute","coreUids","STRAPI_USER","STRAPI_USER_RELATIONS","includes","join","uidRefinement","default","enumRefinement","enum","v","conditionSchema","z","object","visible","record","string","array","any","basePropertiesSchema","configurable","boolean","nullish","private","searchable","optional","pluginOptions","unknown","conditions","preprocess","val","maxLengthSchema","number","int","positive","minLengthSchema","requiredSchema","uniqueSchema","baseRelationSchema","literal","required","oneToOneSchema","extend","oneWaySchema","oneToManySchema","manyWaySchema","manyToOneSchema","manyToManySchema","morphOneSchema","morphManySchema","morphToOneSchema","morphToManySchema","createRelationSchema","meta","modelType","kind","discriminatedUnion","Error","richTextSchema","blocksSchema","jsonSchema","refine","undefined","isNull","isObject","isArray","JSON","parse","enumerationSchema","enumName","NAME_REGEX","test","strings","startsWithANumber","values","filtered","textSchema","unique","regex","RegExp","stringSchema","passwordSchema","emailSchema","email","integerSchema","bigIntegerSchema","floatSchema","decimalSchema","timeSchema","dateSchema","dateTimeSchema","timeStampSchema","booleanSchema","componentSchema","component","repeatable","dynamicZoneSchema","components","nonempty","mediaSchema","multiple","allowedTypes","uidSchema","options","separator","lowercase","decamelize","customReplacements","preserveLeadingUnderscore","customFieldSchema","customField","attributePropertiesSchema","relationSchema","base","union","passthrough","superRefine","createAttributeSchema","isReservedAttributeName","updateAttributeSchema","deleteAttributeSchema","contentTypeUIDSchema","custom","componentUIDSchema","categorySchema","CATEGORY_NAME_REGEX","baseComponentSchema","displayName","icon","ICON_REGEX","description","category","createComponentSchema","config","updateComponentSchema","deleteComponentSchema","baseContentTypeSchema","typeKinds","SINGLE_TYPE","COLLECTION_TYPE","baseCreateContentTypeSchema","plugin","collectionName","COLLECTION_NAME_REGEX","KEBAB_BASE_REGEX","isReservedModelName","createSingleTypeSchema","createCollectionTypeSchema","baseUpdateContentTypeSchema","updateSingleTypeSchema","updateCollectionTypeSchema","deleteContentTypeSchema","schemaSchema","updateSchemaInput","data","error","issue","input","validateUpdateSchema","validateZodSchema"],"mappings":"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"}
1
+ {"version":3,"file":"schema.js","sources":["../../../../server/src/controllers/validation/schema.ts"],"sourcesContent":["import * as z from 'zod/v4';\nimport { strings, validateZodSchema, contentTypes } from '@strapi/utils';\nimport type { Struct, UID } from '@strapi/types';\nimport { isArray, isNil, isNull, isNumber, isObject, isUndefined, snakeCase } from 'lodash/fp';\n\nimport { isReservedAttributeName, isReservedModelName } from '../../services/builder';\nimport { coreUids, typeKinds, VALID_UID_TARGETS } from '../../services/constants';\n\nimport {\n CATEGORY_NAME_REGEX,\n ICON_REGEX,\n COLLECTION_NAME_REGEX,\n KEBAB_BASE_REGEX,\n NAME_REGEX,\n} from './common';\nimport { contentStructureFileSchema, type ContentStructureFileInput } from './content-structure';\n\ntype SchemaMeta =\n | {\n modelType: 'contentType';\n kind?: Struct.ContentTypeKind;\n }\n | {\n modelType: 'component';\n };\n\ntype SuperRefinement<T> = (value: T, ctx: z.RefinementCtx) => void | Promise<void>;\n\nconst uniqueAttributeName: SuperRefinement<{ name: string }[]> = (attributes, ctx) => {\n const names = new Set(attributes.map((attribute) => snakeCase(attribute.name)));\n if (names.size !== attributes.length) {\n ctx.addIssue({\n code: 'custom',\n message: 'Attributes must have unique names',\n });\n }\n};\n\nconst verifyUidTargetField: SuperRefinement<\n {\n action: 'create' | 'update' | 'delete';\n name: string;\n properties?: {\n type: unknown;\n targetField?: string | null;\n };\n }[]\n> = (attributes, ctx) => {\n attributes.forEach((attribute) => {\n if (!attribute.properties) {\n return;\n }\n\n const { properties, action } = attribute;\n\n if (properties.type === 'uid' && properties.targetField) {\n const targetAttr = attributes.find((attr) => attr.name === properties.targetField);\n\n if (!targetAttr) {\n // NOTE: on update we are setting it to undefined later in the process instead to handle renames\n if (action === 'create') {\n ctx.addIssue({\n code: 'custom',\n message: 'Target does not exist',\n });\n }\n } else if (\n !VALID_UID_TARGETS.some((validUIdTarget) => validUIdTarget === targetAttr.properties?.type)\n ) {\n ctx.addIssue({\n code: 'custom',\n message: 'Invalid target type',\n });\n }\n }\n });\n};\n\nconst verifySingularAndPluralNames: SuperRefinement<Record<string, unknown>> = (obj, ctx) => {\n // singular and plural can only be provided on creation\n if (obj.action !== 'create') {\n return;\n }\n\n if (obj.singularName === obj.pluralName) {\n ctx.addIssue({\n code: 'custom',\n message: 'Singular and plural names must be different',\n path: ['singularName'],\n });\n }\n};\n\ntype ContentTypeSchemaAction = {\n action: 'create' | 'update' | 'delete';\n draftAndPublish?: boolean;\n uid?: UID.ContentType;\n attributes?: Array<{ action: 'create' | 'update' | 'delete'; name: string }>;\n};\n\nconst getEffectiveAttributeNames = (contentType: ContentTypeSchemaAction): string[] => {\n if (contentType.action === 'create') {\n return (contentType.attributes ?? [])\n .filter((attribute) => attribute.action !== 'delete')\n .map((attribute) => attribute.name);\n }\n\n if (contentType.action !== 'update' || !contentType.uid) {\n return [];\n }\n\n const existingContentType = strapi.contentTypes[contentType.uid];\n const names = new Set(existingContentType ? Object.keys(existingContentType.attributes) : []);\n\n for (const attribute of contentType.attributes ?? []) {\n if (attribute.action === 'delete') {\n names.delete(attribute.name);\n } else if (attribute.action === 'create') {\n names.add(attribute.name);\n }\n }\n\n return [...names];\n};\n\nexport const verifyDraftAndPublishReservedAttributes: SuperRefinement<ContentTypeSchemaAction> = (\n contentType,\n ctx\n) => {\n if (contentType.action === 'delete' || !contentType.draftAndPublish) {\n return;\n }\n\n const reservedAttributeNames = contentTypes.findDraftAndPublishReservedAttributeNames(\n getEffectiveAttributeNames(contentType)\n );\n\n if (reservedAttributeNames.length > 0) {\n ctx.addIssue({\n code: 'custom',\n message: contentTypes.getDraftAndPublishEnableBlockedMessage(reservedAttributeNames),\n path: ['draftAndPublish'],\n });\n }\n};\n\nexport const maxLengthGreaterThanMinLength: SuperRefinement<Record<string, unknown>> = (\n value,\n ctx\n) => {\n if (\n !isNil(value.maxLength) &&\n !isNil(value.minLength) &&\n isNumber(value.maxLength) &&\n isNumber(value.minLength)\n ) {\n if (value.maxLength < value.minLength) {\n ctx.addIssue({\n code: 'custom',\n message: 'maxLength must be greater or equal to minLength',\n path: ['maxLength'],\n });\n }\n }\n};\n\nexport const maxGreaterThanMin: SuperRefinement<Record<string, unknown>> = (value, ctx) => {\n if (!isNil(value.max) && !isNil(value.min) && isNumber(value.max) && isNumber(value.min)) {\n if (value.max < value.min) {\n ctx.addIssue({\n code: 'custom',\n message: 'max must be greater or equal to min',\n path: ['max'],\n });\n }\n }\n};\n\nconst checkUserTarget: SuperRefinement<{\n type: string;\n target?: string;\n relation?: string;\n targetAttribute?: string | null;\n}> = (value, ctx) => {\n if (value.type !== 'relation') {\n return;\n }\n\n if (isUndefined(value.target) || isUndefined(value.relation)) {\n return;\n }\n\n const { target, relation, targetAttribute } = value;\n\n if (\n target === coreUids.STRAPI_USER &&\n (!STRAPI_USER_RELATIONS.includes(relation) || !isUndefined(targetAttribute))\n ) {\n ctx.addIssue({\n code: 'custom',\n path: ['relation'],\n message: `Relations to ${coreUids.STRAPI_USER} must be one of the following values: ${STRAPI_USER_RELATIONS.join(', ')} without targetAttribute`,\n });\n }\n};\n\nconst uidRefinement: SuperRefinement<{\n type: string;\n default?: unknown;\n targetField?: string | null;\n}> = (value, ctx) => {\n if (!isNil(value.targetField) && !isNil(value.default)) {\n ctx.addIssue({\n code: 'custom',\n message: 'Cannot define a default UID if the targetField is set',\n path: ['default'],\n });\n }\n};\n\nconst enumRefinement: SuperRefinement<{\n type: string;\n default?: unknown;\n enum?: string[];\n}> = (value, ctx) => {\n if (value.type === 'enumeration' && !isNil(value.default) && !isNil(value.enum)) {\n if (value.default === '' || !value.enum.some((v) => v === value.default)) {\n ctx.addIssue({\n code: 'custom',\n message: 'Default value must be one of the enum values',\n path: ['default'],\n });\n }\n }\n};\n\nconst conditionSchema = z.object({\n visible: z.record(z.string(), z.array(z.any())),\n});\n\nconst basePropertiesSchema = z.object({\n type: z.enum([\n 'string',\n 'text',\n 'richtext',\n 'blocks',\n 'json',\n 'enumeration',\n 'password',\n 'email',\n 'integer',\n 'biginteger',\n 'float',\n 'decimal',\n 'time',\n 'datetime',\n 'date',\n 'timestamp',\n 'boolean',\n 'component',\n 'uid',\n 'customField',\n 'media',\n 'relation',\n 'dynamiczone',\n ]),\n configurable: z.boolean().nullish(),\n private: z.boolean().nullish(),\n // Keep null invalid so searchability is always an explicit boolean when provided.\n searchable: z.boolean().optional(),\n pluginOptions: z.record(z.string(), z.unknown()).optional(),\n conditions: z.preprocess((val) => {\n return val;\n }, conditionSchema.optional()),\n});\n\nconst maxLengthSchema = z.number().int().positive().optional();\nconst minLengthSchema = z.number().int().positive().optional();\n\nconst requiredSchema = z.boolean().optional();\nconst uniqueSchema = z.boolean().optional();\n\nconst STRAPI_USER_RELATIONS = ['oneToOne', 'oneToMany'];\n\nconst baseRelationSchema = z.object({\n type: z.literal('relation'),\n relation: z.enum([\n 'oneToOne',\n 'oneToMany',\n 'manyToOne',\n 'manyToMany',\n 'morphOne',\n 'morphMany',\n 'morphToOne',\n 'morphToMany',\n ]),\n configurable: z.boolean().nullish(),\n required: requiredSchema,\n private: z.boolean().nullish(),\n pluginOptions: z.record(z.string(), z.unknown()).optional(),\n conditions: z.preprocess((val) => {\n return val;\n }, conditionSchema.optional()),\n});\n\nconst oneToOneSchema = baseRelationSchema.extend({\n relation: z.literal('oneToOne'),\n target: z.string(),\n targetAttribute: z.string().nullish(),\n});\n\nconst oneWaySchema = baseRelationSchema.extend({\n relation: z.literal('oneToOne'),\n target: z.string(),\n});\n\nconst oneToManySchema = baseRelationSchema.extend({\n relation: z.literal('oneToMany'),\n target: z.string(),\n targetAttribute: z.string().nullish(),\n});\n\nconst manyWaySchema = baseRelationSchema.extend({\n relation: z.literal('oneToMany'),\n target: z.string(),\n});\n\nconst manyToOneSchema = baseRelationSchema.extend({\n relation: z.literal('manyToOne'),\n target: z.string(),\n targetAttribute: z.string().nullish(),\n});\n\nconst manyToManySchema = baseRelationSchema.extend({\n relation: z.literal('manyToMany'),\n target: z.string(),\n targetAttribute: z.string().nullish(),\n});\n\nconst morphOneSchema = baseRelationSchema.extend({\n relation: z.literal('morphOne'),\n target: z.string(),\n targetAttribute: z.string().nullish(),\n});\n\nconst morphManySchema = baseRelationSchema.extend({\n relation: z.literal('morphMany'),\n target: z.string(),\n targetAttribute: z.string().nullish(),\n});\n\nconst morphToOneSchema = baseRelationSchema.extend({\n relation: z.literal('morphToOne'),\n});\n\nconst morphToManySchema = baseRelationSchema.extend({\n relation: z.literal('morphToMany'),\n});\n\nconst createRelationSchema = (meta: SchemaMeta) => {\n switch (meta.modelType) {\n case 'contentType': {\n switch (meta.kind) {\n case 'singleType':\n return z.discriminatedUnion('relation', [\n oneToOneSchema,\n oneToManySchema,\n morphOneSchema,\n morphManySchema,\n morphToOneSchema,\n morphToManySchema,\n ]);\n\n case 'collectionType':\n return z.discriminatedUnion('relation', [\n oneToOneSchema,\n oneToManySchema,\n manyToOneSchema,\n manyToManySchema,\n morphOneSchema,\n morphManySchema,\n morphToOneSchema,\n morphToManySchema,\n ]);\n default:\n throw new Error('Invalid content type kind');\n }\n }\n\n case 'component': {\n return z.discriminatedUnion('relation', [oneWaySchema, manyWaySchema]);\n }\n default:\n throw new Error('Invalid model type');\n }\n};\n\nconst richTextSchema = basePropertiesSchema.extend({\n type: z.literal('richtext'),\n required: requiredSchema,\n minLength: minLengthSchema,\n maxLength: maxLengthSchema,\n default: z.string().optional(),\n});\n\nconst blocksSchema = basePropertiesSchema.extend({\n type: z.literal('blocks'),\n required: requiredSchema,\n});\n\nconst jsonSchema = basePropertiesSchema.extend({\n type: z.literal('json'),\n required: requiredSchema,\n default: z\n .unknown()\n .optional()\n .refine((value) => {\n if (value === undefined) {\n return true;\n }\n\n if (isNumber(value) || isNull(value) || isObject(value) || isArray(value)) {\n return true;\n }\n\n try {\n JSON.parse(value as string);\n\n return true;\n } catch {\n return false;\n }\n }),\n});\n\nconst enumerationSchema = basePropertiesSchema.extend({\n type: z.literal('enumeration'),\n required: requiredSchema,\n default: z.string().optional(),\n enumName: z\n .string()\n .optional()\n .refine((value) => {\n return value === '' || NAME_REGEX.test(value as string);\n }, 'Invalid enum name'),\n enum: z\n .array(\n z.string().refine((value) => {\n return value === '' || !strings.startsWithANumber(value as string);\n })\n )\n .min(1)\n .refine((values) => {\n const filtered = [...new Set(values)];\n return filtered.length === values.length;\n }),\n});\n\nconst textSchema = basePropertiesSchema.extend({\n type: z.literal('text'),\n default: z.string().nullish(),\n minLength: minLengthSchema,\n maxLength: maxLengthSchema,\n required: requiredSchema,\n unique: uniqueSchema,\n regex: z\n .string()\n .optional()\n .refine((value) => {\n return value === '' || !!new RegExp(value as string);\n }, 'Invalid regular expression pattern'),\n});\n\nconst stringSchema = textSchema.extend({\n type: z.literal('string'),\n});\n\nconst passwordSchema = basePropertiesSchema.extend({\n type: z.literal('password'),\n required: requiredSchema,\n minLength: minLengthSchema,\n maxLength: maxLengthSchema,\n});\n\nconst emailSchema = basePropertiesSchema.extend({\n type: z.literal('email'),\n required: requiredSchema,\n minLength: minLengthSchema,\n maxLength: maxLengthSchema,\n default: z.string().email().optional(),\n unique: uniqueSchema,\n});\n\nconst integerSchema = basePropertiesSchema.extend({\n type: z.literal('integer'),\n required: requiredSchema,\n default: z.number().int().optional(),\n unique: uniqueSchema,\n min: z.number().int().optional(),\n max: z.number().int().optional(),\n});\n\nconst bigIntegerSchema = basePropertiesSchema.extend({\n type: z.literal('biginteger'),\n required: requiredSchema,\n unique: uniqueSchema,\n default: z.string().regex(/^\\d*$/).nullish(),\n min: z.string().regex(/^\\d*$/).nullish(),\n max: z.string().regex(/^\\d*$/).nullish(),\n});\n\nconst floatSchema = basePropertiesSchema.extend({\n type: z.literal('float'),\n required: requiredSchema,\n unique: uniqueSchema,\n default: z.number().optional(),\n min: z.number().optional(),\n max: z.number().optional(),\n});\n\nconst decimalSchema = basePropertiesSchema.extend({\n type: z.literal('decimal'),\n required: requiredSchema,\n unique: uniqueSchema,\n default: z.number().optional(),\n min: z.number().optional(),\n max: z.number().optional(),\n});\n\nconst timeSchema = basePropertiesSchema.extend({\n type: z.literal('time'),\n required: requiredSchema,\n unique: uniqueSchema,\n default: z.string().optional(),\n});\n\nconst dateSchema = timeSchema.extend({\n type: z.literal('date'),\n});\n\nconst dateTimeSchema = timeSchema.extend({\n type: z.literal('datetime'),\n});\n\nconst timeStampSchema = basePropertiesSchema.extend({\n type: z.literal('timestamp'),\n});\n\nconst booleanSchema = basePropertiesSchema.extend({\n type: z.literal('boolean'),\n required: requiredSchema,\n default: z.boolean().optional(),\n});\n\nconst componentSchema = basePropertiesSchema.extend({\n type: z.literal('component'),\n component: z.string(),\n repeatable: z.boolean().optional(),\n required: requiredSchema,\n min: z.number().optional(),\n max: z.number().optional(),\n});\n\nconst dynamicZoneSchema = basePropertiesSchema.extend({\n type: z.literal('dynamiczone'),\n components: z.array(z.string()).nonempty(),\n required: requiredSchema,\n min: z.number().optional(),\n max: z.number().optional(),\n});\n\nconst mediaSchema = basePropertiesSchema.extend({\n type: z.literal('media'),\n multiple: z.boolean().optional(),\n required: requiredSchema,\n allowedTypes: z\n .array(z.enum(['images', 'videos', 'files', 'audios']))\n .nonempty()\n .optional(),\n});\n\nconst uidSchema = basePropertiesSchema.extend({\n type: z.literal('uid'),\n targetField: z.string().nullish(),\n required: requiredSchema,\n default: z.string().nullish(),\n minLength: minLengthSchema,\n maxLength: maxLengthSchema,\n options: z\n .object({\n separator: z.string().optional(),\n lowercase: z.boolean().optional(),\n decamelize: z.boolean().optional(),\n customReplacements: z.array(z.array(z.string()).length(2)).optional(),\n preserveLeadingUnderscore: z.boolean().optional(),\n })\n .optional(),\n regex: z\n .string()\n .optional()\n .refine((value) => {\n return value === '' || !!new RegExp(value as string);\n }, 'Invalid regular expression pattern'),\n});\n\nconst customFieldSchema = basePropertiesSchema.extend({\n type: z.literal('customField'),\n customField: z.string(),\n});\n\nconst attributePropertiesSchema = (meta: SchemaMeta) => {\n const relationSchema = createRelationSchema(meta);\n\n const base = z.union([\n mediaSchema,\n textSchema,\n stringSchema,\n richTextSchema,\n blocksSchema,\n jsonSchema,\n enumerationSchema,\n passwordSchema,\n emailSchema,\n integerSchema,\n bigIntegerSchema,\n floatSchema,\n decimalSchema,\n timeSchema,\n dateSchema,\n dateTimeSchema,\n timeStampSchema,\n booleanSchema,\n componentSchema,\n customFieldSchema.passthrough(),\n\n relationSchema,\n ]);\n\n if (meta.modelType === 'component') {\n return base\n .superRefine(enumRefinement)\n .superRefine(checkUserTarget)\n .superRefine(maxGreaterThanMin)\n .superRefine(maxLengthGreaterThanMinLength);\n }\n\n return z\n .union([...base.options, uidSchema, dynamicZoneSchema])\n .superRefine(enumRefinement)\n .superRefine(checkUserTarget)\n .superRefine(uidRefinement)\n .superRefine(maxGreaterThanMin)\n .superRefine(maxLengthGreaterThanMinLength);\n};\n\nconst createAttributeSchema = (meta: SchemaMeta) =>\n z.object({\n action: z.literal('create'),\n name: z\n .string()\n .regex(NAME_REGEX)\n .refine((value) => !isReservedAttributeName(value), 'Attribute name is reserved'),\n properties: attributePropertiesSchema(meta),\n });\n\nconst updateAttributeSchema = (meta: SchemaMeta) =>\n z.object({\n action: z.literal('update'),\n name: z.string(),\n properties: attributePropertiesSchema(meta),\n });\n\nconst deleteAttributeSchema = z.object({\n action: z.literal('delete'),\n name: z.string(),\n});\n\nconst contentTypeUIDSchema = z.custom<UID.ContentType>((value) => {\n return typeof value === 'string' && value.length > 0;\n});\n\nconst componentUIDSchema = z.custom<UID.Component>((value) => {\n return typeof value === 'string' && value.length > 0;\n});\n\nconst categorySchema = z.string().min(1).regex(CATEGORY_NAME_REGEX);\n\nconst baseComponentSchema = z.object({\n uid: componentUIDSchema,\n displayName: z.string().min(1),\n icon: z.string().regex(ICON_REGEX).optional(),\n description: z.string().optional(),\n category: categorySchema,\n pluginOptions: z.record(z.string(), z.unknown()).optional(),\n});\n\nconst createComponentSchema = baseComponentSchema.extend({\n action: z.literal('create'),\n config: z.record(z.string(), z.unknown()).optional().default({}),\n attributes: z\n .array(\n createAttributeSchema({\n modelType: 'component',\n })\n )\n .superRefine(uniqueAttributeName),\n});\n\nconst updateComponentSchema = baseComponentSchema.extend({\n action: z.literal('update'),\n category: categorySchema.optional(),\n attributes: z\n .array(\n z.discriminatedUnion('action', [\n createAttributeSchema({\n modelType: 'component',\n }),\n updateAttributeSchema({\n modelType: 'component',\n }),\n deleteAttributeSchema,\n ])\n )\n .superRefine(uniqueAttributeName),\n});\n\nconst deleteComponentSchema = z.object({\n action: z.literal('delete'),\n uid: componentUIDSchema,\n});\n\nconst baseContentTypeSchema = z.object({\n uid: contentTypeUIDSchema,\n displayName: z.string().min(1),\n description: z.string().optional(),\n draftAndPublish: z.boolean(),\n options: z.record(z.string(), z.unknown()).optional().default({}),\n pluginOptions: z.record(z.string(), z.unknown()).optional().default({}),\n kind: z.enum([typeKinds.SINGLE_TYPE, typeKinds.COLLECTION_TYPE]).optional(),\n});\n\nconst baseCreateContentTypeSchema = baseContentTypeSchema.extend({\n action: z.literal('create'),\n plugin: z.string().min(1).optional(),\n collectionName: z.string().regex(COLLECTION_NAME_REGEX).optional(),\n singularName: z\n .string()\n .min(1)\n .regex(KEBAB_BASE_REGEX, 'Must be kebab case')\n .refine((value) => !isReservedModelName(value), 'Model name is reserved'),\n pluralName: z\n .string()\n .min(1)\n .regex(KEBAB_BASE_REGEX, 'Must be kebab case')\n .refine((value) => !isReservedModelName(value), 'Model name is reserved'),\n config: z.record(z.string(), z.unknown()).optional(),\n});\n\nconst createSingleTypeSchema = baseCreateContentTypeSchema.extend({\n kind: z.literal(typeKinds.SINGLE_TYPE),\n attributes: z\n .array(\n createAttributeSchema({\n modelType: 'contentType',\n kind: 'singleType',\n })\n )\n .superRefine(uniqueAttributeName)\n .superRefine(verifyUidTargetField),\n});\n\nconst createCollectionTypeSchema = baseCreateContentTypeSchema.extend({\n kind: z.literal(typeKinds.COLLECTION_TYPE),\n attributes: z\n .array(\n createAttributeSchema({\n modelType: 'contentType',\n kind: 'collectionType',\n })\n )\n .superRefine(uniqueAttributeName)\n .superRefine(verifyUidTargetField),\n});\n\nconst baseUpdateContentTypeSchema = baseContentTypeSchema.extend({\n action: z.literal('update'),\n});\n\nconst updateSingleTypeSchema = baseUpdateContentTypeSchema.extend({\n kind: z.literal(typeKinds.SINGLE_TYPE).optional(),\n attributes: z\n .array(\n z.discriminatedUnion('action', [\n createAttributeSchema({\n modelType: 'contentType',\n kind: 'singleType',\n }),\n updateAttributeSchema({\n modelType: 'contentType',\n kind: 'singleType',\n }),\n deleteAttributeSchema,\n ])\n )\n .superRefine(uniqueAttributeName)\n .superRefine(verifyUidTargetField),\n});\n\nconst updateCollectionTypeSchema = baseUpdateContentTypeSchema.extend({\n kind: z.literal(typeKinds.COLLECTION_TYPE).optional(),\n attributes: z\n .array(\n z.union([\n createAttributeSchema({\n modelType: 'contentType',\n kind: 'collectionType',\n }),\n updateAttributeSchema({\n modelType: 'contentType',\n kind: 'collectionType',\n }),\n deleteAttributeSchema,\n ])\n )\n .superRefine(uniqueAttributeName)\n .superRefine(verifyUidTargetField),\n});\n\nconst deleteContentTypeSchema = z.object({\n action: z.literal('delete'),\n uid: contentTypeUIDSchema,\n});\n\nconst schemaSchema = z.object({\n components: z\n .array(z.union([createComponentSchema, updateComponentSchema, deleteComponentSchema]))\n .optional()\n .default([]),\n contentTypes: z\n .array(\n z\n .union([\n createSingleTypeSchema,\n createCollectionTypeSchema,\n updateSingleTypeSchema,\n updateCollectionTypeSchema,\n deleteContentTypeSchema,\n ])\n .superRefine(verifySingularAndPluralNames)\n .superRefine(verifyDraftAndPublishReservedAttributes)\n )\n .optional()\n .default([]),\n contentStructure: contentStructureFileSchema.optional(),\n});\n\ntype CreateComponentType = z.infer<typeof createComponentSchema>;\ntype UpdateComponentType = z.infer<typeof updateComponentSchema>;\ntype DeleteComponentType = z.infer<typeof deleteComponentSchema>;\ntype CreateCollectionType = z.infer<typeof createCollectionTypeSchema>;\ntype CreateSingleType = z.infer<typeof createSingleTypeSchema>;\ntype UpdateSingleType = z.infer<typeof updateSingleTypeSchema>;\ntype UpdateCollectionType = z.infer<typeof updateCollectionTypeSchema>;\ntype DeleteContentType = z.infer<typeof deleteContentTypeSchema>;\n\nexport type Schema = {\n components: Array<CreateComponentType | UpdateComponentType | DeleteComponentType>;\n contentTypes: Array<\n | CreateSingleType\n | CreateCollectionType\n | UpdateSingleType\n | UpdateCollectionType\n | DeleteContentType\n >;\n contentStructure?: ContentStructureFileInput;\n};\n\nconst updateSchemaInput = z.object(\n {\n data: schemaSchema,\n },\n {\n error: (issue) =>\n issue.input === undefined\n ? 'Schema is required'\n : 'Invalid schema, expected an object with a data property',\n }\n);\n\nexport const validateUpdateSchema = validateZodSchema(updateSchemaInput);\n"],"names":["uniqueAttributeName","attributes","ctx","names","Set","map","attribute","snakeCase","name","size","length","addIssue","code","message","verifyUidTargetField","forEach","properties","action","type","targetField","targetAttr","find","attr","VALID_UID_TARGETS","some","validUIdTarget","verifySingularAndPluralNames","obj","singularName","pluralName","path","getEffectiveAttributeNames","contentType","filter","uid","existingContentType","strapi","contentTypes","Object","keys","delete","add","verifyDraftAndPublishReservedAttributes","draftAndPublish","reservedAttributeNames","findDraftAndPublishReservedAttributeNames","getDraftAndPublishEnableBlockedMessage","maxLengthGreaterThanMinLength","value","isNil","maxLength","minLength","isNumber","maxGreaterThanMin","max","min","checkUserTarget","isUndefined","target","relation","targetAttribute","coreUids","STRAPI_USER","STRAPI_USER_RELATIONS","includes","join","uidRefinement","default","enumRefinement","enum","v","conditionSchema","z","object","visible","record","string","array","any","basePropertiesSchema","configurable","boolean","nullish","private","searchable","optional","pluginOptions","unknown","conditions","preprocess","val","maxLengthSchema","number","int","positive","minLengthSchema","requiredSchema","uniqueSchema","baseRelationSchema","literal","required","oneToOneSchema","extend","oneWaySchema","oneToManySchema","manyWaySchema","manyToOneSchema","manyToManySchema","morphOneSchema","morphManySchema","morphToOneSchema","morphToManySchema","createRelationSchema","meta","modelType","kind","discriminatedUnion","Error","richTextSchema","blocksSchema","jsonSchema","refine","undefined","isNull","isObject","isArray","JSON","parse","enumerationSchema","enumName","NAME_REGEX","test","strings","startsWithANumber","values","filtered","textSchema","unique","regex","RegExp","stringSchema","passwordSchema","emailSchema","email","integerSchema","bigIntegerSchema","floatSchema","decimalSchema","timeSchema","dateSchema","dateTimeSchema","timeStampSchema","booleanSchema","componentSchema","component","repeatable","dynamicZoneSchema","components","nonempty","mediaSchema","multiple","allowedTypes","uidSchema","options","separator","lowercase","decamelize","customReplacements","preserveLeadingUnderscore","customFieldSchema","customField","attributePropertiesSchema","relationSchema","base","union","passthrough","superRefine","createAttributeSchema","isReservedAttributeName","updateAttributeSchema","deleteAttributeSchema","contentTypeUIDSchema","custom","componentUIDSchema","categorySchema","CATEGORY_NAME_REGEX","baseComponentSchema","displayName","icon","ICON_REGEX","description","category","createComponentSchema","config","updateComponentSchema","deleteComponentSchema","baseContentTypeSchema","typeKinds","SINGLE_TYPE","COLLECTION_TYPE","baseCreateContentTypeSchema","plugin","collectionName","COLLECTION_NAME_REGEX","KEBAB_BASE_REGEX","isReservedModelName","createSingleTypeSchema","createCollectionTypeSchema","baseUpdateContentTypeSchema","updateSingleTypeSchema","updateCollectionTypeSchema","deleteContentTypeSchema","schemaSchema","contentStructure","contentStructureFileSchema","updateSchemaInput","data","error","issue","input","validateUpdateSchema","validateZodSchema"],"mappings":"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"}
@@ -4,6 +4,7 @@ import { isNumber, isNull, isObject, isArray, snakeCase, isNil, isUndefined } fr
4
4
  import { isReservedModelName, isReservedAttributeName } from '../../services/builder.mjs';
5
5
  import { typeKinds, VALID_UID_TARGETS, coreUids } from '../../services/constants.mjs';
6
6
  import { NAME_REGEX, CATEGORY_NAME_REGEX, ICON_REGEX, KEBAB_BASE_REGEX, COLLECTION_NAME_REGEX } from './common.mjs';
7
+ import { contentStructureFileSchema } from './content-structure.mjs';
7
8
 
8
9
  const uniqueAttributeName = (attributes, ctx)=>{
9
10
  const names = new Set(attributes.map((attribute)=>snakeCase(attribute.name)));
@@ -648,7 +649,8 @@ const schemaSchema = z.object({
648
649
  updateSingleTypeSchema,
649
650
  updateCollectionTypeSchema,
650
651
  deleteContentTypeSchema
651
- ]).superRefine(verifySingularAndPluralNames).superRefine(verifyDraftAndPublishReservedAttributes)).optional().default([])
652
+ ]).superRefine(verifySingularAndPluralNames).superRefine(verifyDraftAndPublishReservedAttributes)).optional().default([]),
653
+ contentStructure: contentStructureFileSchema.optional()
652
654
  });
653
655
  const updateSchemaInput = z.object({
654
656
  data: schemaSchema