payload 3.0.0-beta.127 → 3.0.0-beta.129

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 (294) hide show
  1. package/dist/admin/RichText.d.ts +8 -21
  2. package/dist/admin/RichText.d.ts.map +1 -1
  3. package/dist/admin/RichText.js.map +1 -1
  4. package/dist/admin/elements/Cell.d.ts +7 -9
  5. package/dist/admin/elements/Cell.d.ts.map +1 -1
  6. package/dist/admin/elements/Cell.js.map +1 -1
  7. package/dist/admin/fields/Array.d.ts +3 -3
  8. package/dist/admin/fields/Array.d.ts.map +1 -1
  9. package/dist/admin/fields/Array.js.map +1 -1
  10. package/dist/admin/fields/Blocks.d.ts +2 -1
  11. package/dist/admin/fields/Blocks.d.ts.map +1 -1
  12. package/dist/admin/fields/Blocks.js.map +1 -1
  13. package/dist/admin/fields/Checkbox.d.ts +1 -0
  14. package/dist/admin/fields/Checkbox.d.ts.map +1 -1
  15. package/dist/admin/fields/Checkbox.js.map +1 -1
  16. package/dist/admin/fields/Code.d.ts +2 -1
  17. package/dist/admin/fields/Code.d.ts.map +1 -1
  18. package/dist/admin/fields/Code.js.map +1 -1
  19. package/dist/admin/fields/Collapsible.d.ts +5 -2
  20. package/dist/admin/fields/Collapsible.d.ts.map +1 -1
  21. package/dist/admin/fields/Collapsible.js.map +1 -1
  22. package/dist/admin/fields/Date.d.ts +1 -0
  23. package/dist/admin/fields/Date.d.ts.map +1 -1
  24. package/dist/admin/fields/Date.js.map +1 -1
  25. package/dist/admin/fields/Email.d.ts +1 -1
  26. package/dist/admin/fields/Email.d.ts.map +1 -1
  27. package/dist/admin/fields/Email.js.map +1 -1
  28. package/dist/admin/fields/Group.d.ts +5 -2
  29. package/dist/admin/fields/Group.d.ts.map +1 -1
  30. package/dist/admin/fields/Group.js.map +1 -1
  31. package/dist/admin/fields/Hidden.d.ts +7 -6
  32. package/dist/admin/fields/Hidden.d.ts.map +1 -1
  33. package/dist/admin/fields/Hidden.js.map +1 -1
  34. package/dist/admin/fields/JSON.d.ts +1 -0
  35. package/dist/admin/fields/JSON.d.ts.map +1 -1
  36. package/dist/admin/fields/JSON.js.map +1 -1
  37. package/dist/admin/fields/Join.d.ts +3 -1
  38. package/dist/admin/fields/Join.d.ts.map +1 -1
  39. package/dist/admin/fields/Join.js.map +1 -1
  40. package/dist/admin/fields/Number.d.ts +1 -0
  41. package/dist/admin/fields/Number.d.ts.map +1 -1
  42. package/dist/admin/fields/Number.js.map +1 -1
  43. package/dist/admin/fields/Point.d.ts +1 -0
  44. package/dist/admin/fields/Point.d.ts.map +1 -1
  45. package/dist/admin/fields/Point.js.map +1 -1
  46. package/dist/admin/fields/Radio.d.ts +1 -0
  47. package/dist/admin/fields/Radio.d.ts.map +1 -1
  48. package/dist/admin/fields/Radio.js.map +1 -1
  49. package/dist/admin/fields/Relationship.d.ts +1 -0
  50. package/dist/admin/fields/Relationship.d.ts.map +1 -1
  51. package/dist/admin/fields/Relationship.js.map +1 -1
  52. package/dist/admin/fields/RichText.d.ts +3 -2
  53. package/dist/admin/fields/RichText.d.ts.map +1 -1
  54. package/dist/admin/fields/RichText.js.map +1 -1
  55. package/dist/admin/fields/Row.d.ts +1 -2
  56. package/dist/admin/fields/Row.d.ts.map +1 -1
  57. package/dist/admin/fields/Row.js.map +1 -1
  58. package/dist/admin/fields/Select.d.ts +1 -0
  59. package/dist/admin/fields/Select.d.ts.map +1 -1
  60. package/dist/admin/fields/Select.js.map +1 -1
  61. package/dist/admin/fields/Tabs.d.ts +4 -2
  62. package/dist/admin/fields/Tabs.d.ts.map +1 -1
  63. package/dist/admin/fields/Tabs.js.map +1 -1
  64. package/dist/admin/fields/Text.d.ts +1 -0
  65. package/dist/admin/fields/Text.d.ts.map +1 -1
  66. package/dist/admin/fields/Text.js.map +1 -1
  67. package/dist/admin/fields/Textarea.d.ts +1 -0
  68. package/dist/admin/fields/Textarea.d.ts.map +1 -1
  69. package/dist/admin/fields/Textarea.js.map +1 -1
  70. package/dist/admin/fields/UI.d.ts +8 -0
  71. package/dist/admin/fields/UI.d.ts.map +1 -0
  72. package/dist/admin/fields/UI.js +3 -0
  73. package/dist/admin/fields/UI.js.map +1 -0
  74. package/dist/admin/fields/Upload.d.ts +1 -0
  75. package/dist/admin/fields/Upload.d.ts.map +1 -1
  76. package/dist/admin/fields/Upload.js.map +1 -1
  77. package/dist/admin/forms/Description.d.ts +1 -2
  78. package/dist/admin/forms/Description.d.ts.map +1 -1
  79. package/dist/admin/forms/Description.js.map +1 -1
  80. package/dist/admin/forms/Error.d.ts +0 -2
  81. package/dist/admin/forms/Error.d.ts.map +1 -1
  82. package/dist/admin/forms/Error.js.map +1 -1
  83. package/dist/admin/forms/Field.d.ts +53 -29
  84. package/dist/admin/forms/Field.d.ts.map +1 -1
  85. package/dist/admin/forms/Field.js.map +1 -1
  86. package/dist/admin/forms/Form.d.ts +46 -3
  87. package/dist/admin/forms/Form.d.ts.map +1 -1
  88. package/dist/admin/forms/Form.js.map +1 -1
  89. package/dist/admin/forms/Label.d.ts +1 -2
  90. package/dist/admin/forms/Label.d.ts.map +1 -1
  91. package/dist/admin/forms/Label.js.map +1 -1
  92. package/dist/admin/functions/index.d.ts +44 -0
  93. package/dist/admin/functions/index.d.ts.map +1 -0
  94. package/dist/admin/functions/index.js +3 -0
  95. package/dist/admin/functions/index.js.map +1 -0
  96. package/dist/admin/types.d.ts +63 -20
  97. package/dist/admin/types.d.ts.map +1 -1
  98. package/dist/admin/types.js +4 -1
  99. package/dist/admin/types.js.map +1 -1
  100. package/dist/admin/views/types.d.ts +9 -6
  101. package/dist/admin/views/types.d.ts.map +1 -1
  102. package/dist/admin/views/types.js.map +1 -1
  103. package/dist/assets/images/github-banner-nextjs-native.jpg +0 -0
  104. package/dist/auth/ensureUsernameOrEmail.js +4 -4
  105. package/dist/auth/ensureUsernameOrEmail.js.map +1 -1
  106. package/dist/auth/getFieldsToSign.js +13 -13
  107. package/dist/auth/getFieldsToSign.js.map +1 -1
  108. package/dist/auth/operations/local/auth.d.ts.map +1 -1
  109. package/dist/auth/operations/local/auth.js +2 -2
  110. package/dist/auth/operations/local/auth.js.map +1 -1
  111. package/dist/auth/operations/login.js +10 -10
  112. package/dist/auth/operations/login.js.map +1 -1
  113. package/dist/auth/strategies/local/generatePasswordSaltHash.js +2 -2
  114. package/dist/auth/strategies/local/generatePasswordSaltHash.js.map +1 -1
  115. package/dist/auth/strategies/local/register.js +4 -4
  116. package/dist/auth/strategies/local/register.js.map +1 -1
  117. package/dist/bin/generateImportMap/index.d.ts.map +1 -1
  118. package/dist/bin/generateImportMap/index.js +32 -5
  119. package/dist/bin/generateImportMap/index.js.map +1 -1
  120. package/dist/bin/generateImportMap/parsePayloadComponent.d.ts +1 -1
  121. package/dist/bin/generateImportMap/parsePayloadComponent.js +5 -5
  122. package/dist/bin/generateImportMap/parsePayloadComponent.js.map +1 -1
  123. package/dist/bin/migrate.js +17 -17
  124. package/dist/bin/migrate.js.map +1 -1
  125. package/dist/collections/config/client.d.ts +23 -35
  126. package/dist/collections/config/client.d.ts.map +1 -1
  127. package/dist/collections/config/client.js +104 -1
  128. package/dist/collections/config/client.js.map +1 -1
  129. package/dist/collections/config/sanitize.d.ts.map +1 -1
  130. package/dist/collections/config/sanitize.js +4 -2
  131. package/dist/collections/config/sanitize.js.map +1 -1
  132. package/dist/collections/config/types.d.ts +3 -3
  133. package/dist/collections/config/types.d.ts.map +1 -1
  134. package/dist/collections/config/types.js.map +1 -1
  135. package/dist/collections/operations/countVersions.d.ts +14 -0
  136. package/dist/collections/operations/countVersions.d.ts.map +1 -0
  137. package/dist/collections/operations/countVersions.js +74 -0
  138. package/dist/collections/operations/countVersions.js.map +1 -0
  139. package/dist/collections/operations/local/count.d.ts.map +1 -1
  140. package/dist/collections/operations/local/count.js +1 -0
  141. package/dist/collections/operations/local/count.js.map +1 -1
  142. package/dist/collections/operations/local/countVersions.d.ts +20 -0
  143. package/dist/collections/operations/local/countVersions.d.ts.map +1 -0
  144. package/dist/collections/operations/local/countVersions.js +20 -0
  145. package/dist/collections/operations/local/countVersions.js.map +1 -0
  146. package/dist/collections/operations/local/index.d.ts +2 -0
  147. package/dist/collections/operations/local/index.d.ts.map +1 -1
  148. package/dist/collections/operations/local/index.js +2 -0
  149. package/dist/collections/operations/local/index.js.map +1 -1
  150. package/dist/collections/operations/utils.d.ts +6 -0
  151. package/dist/collections/operations/utils.d.ts.map +1 -1
  152. package/dist/collections/operations/utils.js.map +1 -1
  153. package/dist/config/client.d.ts +10 -13
  154. package/dist/config/client.d.ts.map +1 -1
  155. package/dist/config/client.js +36 -0
  156. package/dist/config/client.js.map +1 -1
  157. package/dist/config/types.d.ts +20 -15
  158. package/dist/config/types.d.ts.map +1 -1
  159. package/dist/config/types.js.map +1 -1
  160. package/dist/database/getLocalizedPaths.js +1 -1
  161. package/dist/database/getLocalizedPaths.js.map +1 -1
  162. package/dist/database/sanitizeJoinQuery.js +6 -6
  163. package/dist/database/sanitizeJoinQuery.js.map +1 -1
  164. package/dist/database/types.d.ts +14 -0
  165. package/dist/database/types.d.ts.map +1 -1
  166. package/dist/database/types.js.map +1 -1
  167. package/dist/errors/ValidationError.d.ts +1 -1
  168. package/dist/errors/ValidationError.d.ts.map +1 -1
  169. package/dist/errors/ValidationError.js +1 -1
  170. package/dist/errors/ValidationError.js.map +1 -1
  171. package/dist/exports/shared.d.ts +3 -1
  172. package/dist/exports/shared.d.ts.map +1 -1
  173. package/dist/exports/shared.js +3 -1
  174. package/dist/exports/shared.js.map +1 -1
  175. package/dist/fields/config/client.d.ts +16 -1
  176. package/dist/fields/config/client.d.ts.map +1 -1
  177. package/dist/fields/config/client.js +229 -1
  178. package/dist/fields/config/client.js.map +1 -1
  179. package/dist/fields/config/sanitize.d.ts +2 -2
  180. package/dist/fields/config/sanitize.d.ts.map +1 -1
  181. package/dist/fields/config/sanitize.js +7 -21
  182. package/dist/fields/config/sanitize.js.map +1 -1
  183. package/dist/fields/config/sanitizeJoinField.d.ts +2 -2
  184. package/dist/fields/config/sanitizeJoinField.d.ts.map +1 -1
  185. package/dist/fields/config/sanitizeJoinField.js +2 -2
  186. package/dist/fields/config/sanitizeJoinField.js.map +1 -1
  187. package/dist/fields/config/types.d.ts +28 -171
  188. package/dist/fields/config/types.d.ts.map +1 -1
  189. package/dist/fields/config/types.js.map +1 -1
  190. package/dist/fields/getFieldPaths.d.ts +25 -8
  191. package/dist/fields/getFieldPaths.d.ts.map +1 -1
  192. package/dist/fields/getFieldPaths.js +9 -37
  193. package/dist/fields/getFieldPaths.js.map +1 -1
  194. package/dist/fields/hooks/afterChange/promise.d.ts +2 -1
  195. package/dist/fields/hooks/afterChange/promise.d.ts.map +1 -1
  196. package/dist/fields/hooks/afterChange/promise.js +66 -62
  197. package/dist/fields/hooks/afterChange/promise.js.map +1 -1
  198. package/dist/fields/hooks/afterChange/traverseFields.d.ts.map +1 -1
  199. package/dist/fields/hooks/afterChange/traverseFields.js +2 -1
  200. package/dist/fields/hooks/afterChange/traverseFields.js.map +1 -1
  201. package/dist/fields/hooks/afterRead/promise.d.ts +2 -1
  202. package/dist/fields/hooks/afterRead/promise.d.ts.map +1 -1
  203. package/dist/fields/hooks/afterRead/promise.js +107 -103
  204. package/dist/fields/hooks/afterRead/promise.js.map +1 -1
  205. package/dist/fields/hooks/afterRead/traverseFields.d.ts.map +1 -1
  206. package/dist/fields/hooks/afterRead/traverseFields.js +2 -1
  207. package/dist/fields/hooks/afterRead/traverseFields.js.map +1 -1
  208. package/dist/fields/hooks/beforeChange/index.d.ts.map +1 -1
  209. package/dist/fields/hooks/beforeChange/index.js.map +1 -1
  210. package/dist/fields/hooks/beforeChange/promise.d.ts +8 -5
  211. package/dist/fields/hooks/beforeChange/promise.d.ts.map +1 -1
  212. package/dist/fields/hooks/beforeChange/promise.js +99 -110
  213. package/dist/fields/hooks/beforeChange/promise.js.map +1 -1
  214. package/dist/fields/hooks/beforeChange/traverseFields.d.ts +2 -4
  215. package/dist/fields/hooks/beforeChange/traverseFields.d.ts.map +1 -1
  216. package/dist/fields/hooks/beforeChange/traverseFields.js +2 -1
  217. package/dist/fields/hooks/beforeChange/traverseFields.js.map +1 -1
  218. package/dist/fields/hooks/beforeDuplicate/promise.d.ts +2 -1
  219. package/dist/fields/hooks/beforeDuplicate/promise.d.ts.map +1 -1
  220. package/dist/fields/hooks/beforeDuplicate/promise.js +47 -43
  221. package/dist/fields/hooks/beforeDuplicate/promise.js.map +1 -1
  222. package/dist/fields/hooks/beforeDuplicate/traverseFields.d.ts.map +1 -1
  223. package/dist/fields/hooks/beforeDuplicate/traverseFields.js +2 -1
  224. package/dist/fields/hooks/beforeDuplicate/traverseFields.js.map +1 -1
  225. package/dist/fields/hooks/beforeValidate/promise.d.ts +2 -1
  226. package/dist/fields/hooks/beforeValidate/promise.d.ts.map +1 -1
  227. package/dist/fields/hooks/beforeValidate/promise.js +105 -101
  228. package/dist/fields/hooks/beforeValidate/promise.js.map +1 -1
  229. package/dist/fields/hooks/beforeValidate/traverseFields.d.ts.map +1 -1
  230. package/dist/fields/hooks/beforeValidate/traverseFields.js +2 -1
  231. package/dist/fields/hooks/beforeValidate/traverseFields.js.map +1 -1
  232. package/dist/globals/config/client.d.ts +18 -25
  233. package/dist/globals/config/client.d.ts.map +1 -1
  234. package/dist/globals/config/client.js +53 -1
  235. package/dist/globals/config/client.js.map +1 -1
  236. package/dist/globals/config/sanitize.d.ts.map +1 -1
  237. package/dist/globals/config/sanitize.js +3 -1
  238. package/dist/globals/config/sanitize.js.map +1 -1
  239. package/dist/globals/operations/countGlobalVersions.d.ts +13 -0
  240. package/dist/globals/operations/countGlobalVersions.d.ts.map +1 -0
  241. package/dist/globals/operations/countGlobalVersions.js +49 -0
  242. package/dist/globals/operations/countGlobalVersions.js.map +1 -0
  243. package/dist/globals/operations/local/countGlobalVersions.d.ts +20 -0
  244. package/dist/globals/operations/local/countGlobalVersions.d.ts.map +1 -0
  245. package/dist/globals/operations/local/countGlobalVersions.js +20 -0
  246. package/dist/globals/operations/local/countGlobalVersions.js.map +1 -0
  247. package/dist/globals/operations/local/index.d.ts +2 -0
  248. package/dist/globals/operations/local/index.d.ts.map +1 -1
  249. package/dist/globals/operations/local/index.js +2 -0
  250. package/dist/globals/operations/local/index.js.map +1 -1
  251. package/dist/index.d.ts +28 -12
  252. package/dist/index.d.ts.map +1 -1
  253. package/dist/index.js +21 -2
  254. package/dist/index.js.map +1 -1
  255. package/dist/queues/config/jobsCollection.d.ts.map +1 -1
  256. package/dist/queues/config/jobsCollection.js +2 -11
  257. package/dist/queues/config/jobsCollection.js.map +1 -1
  258. package/dist/queues/config/types/workflowTypes.d.ts +2 -1
  259. package/dist/queues/config/types/workflowTypes.d.ts.map +1 -1
  260. package/dist/queues/config/types/workflowTypes.js.map +1 -1
  261. package/dist/queues/localAPI.d.ts +2 -0
  262. package/dist/queues/localAPI.d.ts.map +1 -1
  263. package/dist/queues/localAPI.js +13 -0
  264. package/dist/queues/localAPI.js.map +1 -1
  265. package/dist/utilities/configToJSONSchema.js +232 -232
  266. package/dist/utilities/configToJSONSchema.js.map +1 -1
  267. package/dist/utilities/createLocalReq.d.ts +1 -1
  268. package/dist/utilities/createLocalReq.d.ts.map +1 -1
  269. package/dist/utilities/createLocalReq.js +4 -4
  270. package/dist/utilities/createLocalReq.js.map +1 -1
  271. package/dist/utilities/deepCopyObject.d.ts +1 -0
  272. package/dist/utilities/deepCopyObject.d.ts.map +1 -1
  273. package/dist/utilities/deepCopyObject.js +23 -0
  274. package/dist/utilities/deepCopyObject.js.map +1 -1
  275. package/dist/utilities/fieldSchemaToJSON.js +17 -17
  276. package/dist/utilities/fieldSchemaToJSON.js.map +1 -1
  277. package/dist/utilities/formatErrors.d.ts +6 -0
  278. package/dist/utilities/formatErrors.d.ts.map +1 -0
  279. package/dist/utilities/formatErrors.js +56 -0
  280. package/dist/utilities/formatErrors.js.map +1 -0
  281. package/dist/utilities/telemetry/conf/index.js +2 -2
  282. package/dist/utilities/telemetry/conf/index.js.map +1 -1
  283. package/dist/versions/saveVersion.d.ts.map +1 -1
  284. package/dist/versions/saveVersion.js +1 -7
  285. package/dist/versions/saveVersion.js.map +1 -1
  286. package/dist/versions/types.d.ts +1 -1
  287. package/dist/versions/types.d.ts.map +1 -1
  288. package/dist/versions/types.js.map +1 -1
  289. package/license.md +22 -0
  290. package/package.json +3 -3
  291. package/dist/utilities/mergeListSearchAndWhere.d.ts +0 -12
  292. package/dist/utilities/mergeListSearchAndWhere.d.ts.map +0 -1
  293. package/dist/utilities/mergeListSearchAndWhere.js +0 -57
  294. package/dist/utilities/mergeListSearchAndWhere.js.map +0 -1
@@ -2,13 +2,17 @@ import { fieldAffectsData, tabHasName } from '../../config/types.js';
2
2
  import { getFieldPaths } from '../../getFieldPaths.js';
3
3
  import { runBeforeDuplicateHooks } from './runHook.js';
4
4
  import { traverseFields } from './traverseFields.js';
5
- export const promise = async ({ id, collection, context, doc, field, overrideAccess, parentPath, parentSchemaPath, req, siblingDoc })=>{
5
+ export const promise = async ({ id, collection, context, doc, field, fieldIndex, overrideAccess, parentPath, parentSchemaPath, req, siblingDoc })=>{
6
6
  const { localization } = req.payload.config;
7
- const { path: fieldPath, schemaPath: fieldSchemaPath } = getFieldPaths({
7
+ const { path: _fieldPath, schemaPath: _fieldSchemaPath } = getFieldPaths({
8
8
  field,
9
- parentPath,
10
- parentSchemaPath
9
+ index: fieldIndex,
10
+ parentIndexPath: '',
11
+ parentPath: parentPath.join('.'),
12
+ parentSchemaPath: parentSchemaPath.join('.')
11
13
  });
14
+ const fieldPath = _fieldPath ? _fieldPath.split('.') : [];
15
+ const fieldSchemaPath = _fieldSchemaPath ? _fieldSchemaPath.split('.') : [];
12
16
  // Handle unnamed tabs
13
17
  if (field.type === 'tab' && !tabHasName(field)) {
14
18
  await traverseFields({
@@ -92,23 +96,6 @@ export const promise = async ({ id, collection, context, doc, field, overrideAcc
92
96
  localization.localeCodes.forEach((locale)=>{
93
97
  if (fieldData[locale]) {
94
98
  switch(field.type){
95
- case 'tab':
96
- case 'group':
97
- {
98
- promises.push(traverseFields({
99
- id,
100
- collection,
101
- context,
102
- doc,
103
- fields: field.fields,
104
- overrideAccess,
105
- path: fieldSchemaPath,
106
- req,
107
- schemaPath: fieldSchemaPath,
108
- siblingDoc: fieldData[locale]
109
- }));
110
- break;
111
- }
112
99
  case 'array':
113
100
  {
114
101
  const rows = fieldData[locale];
@@ -161,6 +148,23 @@ export const promise = async ({ id, collection, context, doc, field, overrideAcc
161
148
  }
162
149
  break;
163
150
  }
151
+ case 'group':
152
+ case 'tab':
153
+ {
154
+ promises.push(traverseFields({
155
+ id,
156
+ collection,
157
+ context,
158
+ doc,
159
+ fields: field.fields,
160
+ overrideAccess,
161
+ path: fieldSchemaPath,
162
+ req,
163
+ schemaPath: fieldSchemaPath,
164
+ siblingDoc: fieldData[locale]
165
+ }));
166
+ break;
167
+ }
164
168
  }
165
169
  }
166
170
  });
@@ -170,27 +174,6 @@ export const promise = async ({ id, collection, context, doc, field, overrideAcc
170
174
  // we need to further traverse its children
171
175
  // so the child fields can run beforeDuplicate hooks
172
176
  switch(field.type){
173
- case 'tab':
174
- case 'group':
175
- {
176
- if (typeof siblingDoc[field.name] !== 'object') {
177
- siblingDoc[field.name] = {};
178
- }
179
- const groupDoc = siblingDoc[field.name];
180
- await traverseFields({
181
- id,
182
- collection,
183
- context,
184
- doc,
185
- fields: field.fields,
186
- overrideAccess,
187
- path: fieldPath,
188
- req,
189
- schemaPath: fieldSchemaPath,
190
- siblingDoc: groupDoc
191
- });
192
- break;
193
- }
194
177
  case 'array':
195
178
  {
196
179
  const rows = siblingDoc[field.name];
@@ -248,13 +231,34 @@ export const promise = async ({ id, collection, context, doc, field, overrideAcc
248
231
  }
249
232
  break;
250
233
  }
234
+ case 'group':
235
+ case 'tab':
236
+ {
237
+ if (typeof siblingDoc[field.name] !== 'object') {
238
+ siblingDoc[field.name] = {};
239
+ }
240
+ const groupDoc = siblingDoc[field.name];
241
+ await traverseFields({
242
+ id,
243
+ collection,
244
+ context,
245
+ doc,
246
+ fields: field.fields,
247
+ overrideAccess,
248
+ path: fieldPath,
249
+ req,
250
+ schemaPath: fieldSchemaPath,
251
+ siblingDoc: groupDoc
252
+ });
253
+ break;
254
+ }
251
255
  }
252
256
  }
253
257
  } else {
254
258
  // Finally, we traverse fields which do not affect data here
255
259
  switch(field.type){
256
- case 'row':
257
260
  case 'collapsible':
261
+ case 'row':
258
262
  {
259
263
  await traverseFields({
260
264
  id,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/fields/hooks/beforeDuplicate/promise.ts"],"sourcesContent":["import type { SanitizedCollectionConfig } from '../../../collections/config/types.js'\nimport type { RequestContext } from '../../../index.js'\nimport type { JsonObject, PayloadRequest } from '../../../types/index.js'\nimport type { Field, FieldHookArgs, TabAsField } from '../../config/types.js'\n\nimport { fieldAffectsData, tabHasName } from '../../config/types.js'\nimport { getFieldPaths } from '../../getFieldPaths.js'\nimport { runBeforeDuplicateHooks } from './runHook.js'\nimport { traverseFields } from './traverseFields.js'\n\ntype Args<T> = {\n collection: null | SanitizedCollectionConfig\n context: RequestContext\n doc: T\n field: Field | TabAsField\n id?: number | string\n overrideAccess: boolean\n parentPath: (number | string)[]\n parentSchemaPath: string[]\n req: PayloadRequest\n siblingDoc: JsonObject\n}\n\nexport const promise = async <T>({\n id,\n collection,\n context,\n doc,\n field,\n overrideAccess,\n parentPath,\n parentSchemaPath,\n req,\n siblingDoc,\n}: Args<T>): Promise<void> => {\n const { localization } = req.payload.config\n\n const { path: fieldPath, schemaPath: fieldSchemaPath } = getFieldPaths({\n field,\n parentPath,\n parentSchemaPath,\n })\n\n // Handle unnamed tabs\n if (field.type === 'tab' && !tabHasName(field)) {\n await traverseFields({\n id,\n collection,\n context,\n doc,\n fields: field.fields,\n overrideAccess,\n path: fieldPath,\n req,\n schemaPath: fieldSchemaPath,\n siblingDoc,\n })\n\n return\n }\n\n if (fieldAffectsData(field)) {\n let fieldData = siblingDoc?.[field.name]\n const fieldIsLocalized = field.localized && localization\n\n // Run field beforeDuplicate hooks\n if (Array.isArray(field.hooks?.beforeDuplicate)) {\n if (fieldIsLocalized) {\n const localeData = await localization.localeCodes.reduce(\n async (localizedValuesPromise: Promise<JsonObject>, locale) => {\n const localizedValues = await localizedValuesPromise\n\n const beforeDuplicateArgs: FieldHookArgs = {\n collection,\n context,\n data: doc,\n field,\n global: undefined,\n path: fieldPath,\n previousSiblingDoc: siblingDoc,\n previousValue: siblingDoc[field.name]?.[locale],\n req,\n schemaPath: parentSchemaPath,\n siblingData: siblingDoc,\n siblingDocWithLocales: siblingDoc,\n value: siblingDoc[field.name]?.[locale],\n }\n\n const hookResult = await runBeforeDuplicateHooks(beforeDuplicateArgs)\n\n if (typeof hookResult !== 'undefined') {\n return {\n ...localizedValues,\n [locale]: hookResult,\n }\n }\n\n return localizedValuesPromise\n },\n Promise.resolve({}),\n )\n\n siblingDoc[field.name] = localeData\n } else {\n const beforeDuplicateArgs: FieldHookArgs = {\n collection,\n context,\n data: doc,\n field,\n global: undefined,\n path: fieldPath,\n previousSiblingDoc: siblingDoc,\n previousValue: siblingDoc[field.name],\n req,\n schemaPath: parentSchemaPath,\n siblingData: siblingDoc,\n siblingDocWithLocales: siblingDoc,\n value: siblingDoc[field.name],\n }\n\n const hookResult = await runBeforeDuplicateHooks(beforeDuplicateArgs)\n if (typeof hookResult !== 'undefined') {\n siblingDoc[field.name] = hookResult\n }\n }\n }\n\n // First, for any localized fields, we will loop over locales\n // and if locale data is present, traverse the sub fields.\n // There are only a few different fields where this is possible.\n if (fieldIsLocalized) {\n if (typeof fieldData !== 'object' || fieldData === null) {\n siblingDoc[field.name] = {}\n fieldData = siblingDoc[field.name]\n }\n\n const promises = []\n\n localization.localeCodes.forEach((locale) => {\n if (fieldData[locale]) {\n switch (field.type) {\n case 'tab':\n case 'group': {\n promises.push(\n traverseFields({\n id,\n collection,\n context,\n doc,\n fields: field.fields,\n overrideAccess,\n path: fieldSchemaPath,\n req,\n schemaPath: fieldSchemaPath,\n siblingDoc: fieldData[locale],\n }),\n )\n\n break\n }\n\n case 'array': {\n const rows = fieldData[locale]\n\n if (Array.isArray(rows)) {\n const promises = []\n rows.forEach((row, i) => {\n promises.push(\n traverseFields({\n id,\n collection,\n context,\n doc,\n fields: field.fields,\n overrideAccess,\n path: [...fieldPath, i],\n req,\n schemaPath: fieldSchemaPath,\n siblingDoc: row,\n }),\n )\n })\n }\n break\n }\n\n case 'blocks': {\n const rows = fieldData[locale]\n\n if (Array.isArray(rows)) {\n const promises = []\n rows.forEach((row, i) => {\n const blockTypeToMatch = row.blockType\n\n const block = field.blocks.find(\n (blockType) => blockType.slug === blockTypeToMatch,\n )\n\n promises.push(\n traverseFields({\n id,\n collection,\n context,\n doc,\n fields: block.fields,\n overrideAccess,\n path: [...fieldPath, i],\n req,\n schemaPath: fieldSchemaPath,\n siblingDoc: row,\n }),\n )\n })\n }\n break\n }\n }\n }\n })\n\n await Promise.all(promises)\n } else {\n // If the field is not localized, but it affects data,\n // we need to further traverse its children\n // so the child fields can run beforeDuplicate hooks\n switch (field.type) {\n case 'tab':\n case 'group': {\n if (typeof siblingDoc[field.name] !== 'object') {\n siblingDoc[field.name] = {}\n }\n\n const groupDoc = siblingDoc[field.name] as Record<string, unknown>\n\n await traverseFields({\n id,\n collection,\n context,\n doc,\n fields: field.fields,\n overrideAccess,\n path: fieldPath,\n req,\n schemaPath: fieldSchemaPath,\n siblingDoc: groupDoc as JsonObject,\n })\n\n break\n }\n\n case 'array': {\n const rows = siblingDoc[field.name]\n\n if (Array.isArray(rows)) {\n const promises = []\n rows.forEach((row, i) => {\n promises.push(\n traverseFields({\n id,\n collection,\n context,\n doc,\n fields: field.fields,\n overrideAccess,\n path: [...fieldPath, i],\n req,\n schemaPath: fieldSchemaPath,\n siblingDoc: row,\n }),\n )\n })\n await Promise.all(promises)\n }\n break\n }\n\n case 'blocks': {\n const rows = siblingDoc[field.name]\n\n if (Array.isArray(rows)) {\n const promises = []\n rows.forEach((row, i) => {\n const blockTypeToMatch = row.blockType\n const block = field.blocks.find((blockType) => blockType.slug === blockTypeToMatch)\n\n if (block) {\n ;(row as JsonObject).blockType = blockTypeToMatch\n\n promises.push(\n traverseFields({\n id,\n collection,\n context,\n doc,\n fields: block.fields,\n overrideAccess,\n path: [...fieldPath, i],\n req,\n schemaPath: fieldSchemaPath,\n siblingDoc: row,\n }),\n )\n }\n })\n await Promise.all(promises)\n }\n\n break\n }\n }\n }\n } else {\n // Finally, we traverse fields which do not affect data here\n switch (field.type) {\n case 'row':\n case 'collapsible': {\n await traverseFields({\n id,\n collection,\n context,\n doc,\n fields: field.fields,\n overrideAccess,\n path: fieldPath,\n req,\n schemaPath: fieldSchemaPath,\n siblingDoc,\n })\n\n break\n }\n\n case 'tabs': {\n await traverseFields({\n id,\n collection,\n context,\n doc,\n fields: field.tabs.map((tab) => ({ ...tab, type: 'tab' })),\n overrideAccess,\n path: fieldPath,\n req,\n schemaPath: fieldSchemaPath,\n siblingDoc,\n })\n\n break\n }\n\n default: {\n break\n }\n }\n }\n}\n"],"names":["fieldAffectsData","tabHasName","getFieldPaths","runBeforeDuplicateHooks","traverseFields","promise","id","collection","context","doc","field","overrideAccess","parentPath","parentSchemaPath","req","siblingDoc","localization","payload","config","path","fieldPath","schemaPath","fieldSchemaPath","type","fields","fieldData","name","fieldIsLocalized","localized","Array","isArray","hooks","beforeDuplicate","localeData","localeCodes","reduce","localizedValuesPromise","locale","localizedValues","beforeDuplicateArgs","data","global","undefined","previousSiblingDoc","previousValue","siblingData","siblingDocWithLocales","value","hookResult","Promise","resolve","promises","forEach","push","rows","row","i","blockTypeToMatch","blockType","block","blocks","find","slug","all","groupDoc","tabs","map","tab"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/fields/hooks/beforeDuplicate/promise.ts"],"sourcesContent":["import type { SanitizedCollectionConfig } from '../../../collections/config/types.js'\nimport type { RequestContext } from '../../../index.js'\nimport type { JsonObject, PayloadRequest } from '../../../types/index.js'\nimport type { Field, FieldHookArgs, TabAsField } from '../../config/types.js'\n\nimport { fieldAffectsData, tabHasName } from '../../config/types.js'\nimport { getFieldPaths } from '../../getFieldPaths.js'\nimport { runBeforeDuplicateHooks } from './runHook.js'\nimport { traverseFields } from './traverseFields.js'\n\ntype Args<T> = {\n collection: null | SanitizedCollectionConfig\n context: RequestContext\n doc: T\n field: Field | TabAsField\n fieldIndex: number\n id?: number | string\n overrideAccess: boolean\n parentPath: (number | string)[]\n parentSchemaPath: string[]\n req: PayloadRequest\n siblingDoc: JsonObject\n}\n\nexport const promise = async <T>({\n id,\n collection,\n context,\n doc,\n field,\n fieldIndex,\n overrideAccess,\n parentPath,\n parentSchemaPath,\n req,\n siblingDoc,\n}: Args<T>): Promise<void> => {\n const { localization } = req.payload.config\n\n const { path: _fieldPath, schemaPath: _fieldSchemaPath } = getFieldPaths({\n field,\n index: fieldIndex,\n parentIndexPath: '', // Doesn't matter, as unnamed fields do not affect data, and hooks are only run on fields that affect data\n parentPath: parentPath.join('.'),\n parentSchemaPath: parentSchemaPath.join('.'),\n })\n const fieldPath = _fieldPath ? _fieldPath.split('.') : []\n const fieldSchemaPath = _fieldSchemaPath ? _fieldSchemaPath.split('.') : []\n\n // Handle unnamed tabs\n if (field.type === 'tab' && !tabHasName(field)) {\n await traverseFields({\n id,\n collection,\n context,\n doc,\n fields: field.fields,\n overrideAccess,\n path: fieldPath,\n req,\n schemaPath: fieldSchemaPath,\n siblingDoc,\n })\n\n return\n }\n\n if (fieldAffectsData(field)) {\n let fieldData = siblingDoc?.[field.name]\n const fieldIsLocalized = field.localized && localization\n\n // Run field beforeDuplicate hooks\n if (Array.isArray(field.hooks?.beforeDuplicate)) {\n if (fieldIsLocalized) {\n const localeData = await localization.localeCodes.reduce(\n async (localizedValuesPromise: Promise<JsonObject>, locale) => {\n const localizedValues = await localizedValuesPromise\n\n const beforeDuplicateArgs: FieldHookArgs = {\n collection,\n context,\n data: doc,\n field,\n global: undefined,\n path: fieldPath,\n previousSiblingDoc: siblingDoc,\n previousValue: siblingDoc[field.name]?.[locale],\n req,\n schemaPath: parentSchemaPath,\n siblingData: siblingDoc,\n siblingDocWithLocales: siblingDoc,\n value: siblingDoc[field.name]?.[locale],\n }\n\n const hookResult = await runBeforeDuplicateHooks(beforeDuplicateArgs)\n\n if (typeof hookResult !== 'undefined') {\n return {\n ...localizedValues,\n [locale]: hookResult,\n }\n }\n\n return localizedValuesPromise\n },\n Promise.resolve({}),\n )\n\n siblingDoc[field.name] = localeData\n } else {\n const beforeDuplicateArgs: FieldHookArgs = {\n collection,\n context,\n data: doc,\n field,\n global: undefined,\n path: fieldPath,\n previousSiblingDoc: siblingDoc,\n previousValue: siblingDoc[field.name],\n req,\n schemaPath: parentSchemaPath,\n siblingData: siblingDoc,\n siblingDocWithLocales: siblingDoc,\n value: siblingDoc[field.name],\n }\n\n const hookResult = await runBeforeDuplicateHooks(beforeDuplicateArgs)\n if (typeof hookResult !== 'undefined') {\n siblingDoc[field.name] = hookResult\n }\n }\n }\n\n // First, for any localized fields, we will loop over locales\n // and if locale data is present, traverse the sub fields.\n // There are only a few different fields where this is possible.\n if (fieldIsLocalized) {\n if (typeof fieldData !== 'object' || fieldData === null) {\n siblingDoc[field.name] = {}\n fieldData = siblingDoc[field.name]\n }\n\n const promises = []\n\n localization.localeCodes.forEach((locale) => {\n if (fieldData[locale]) {\n switch (field.type) {\n case 'array': {\n const rows = fieldData[locale]\n\n if (Array.isArray(rows)) {\n const promises = []\n rows.forEach((row, i) => {\n promises.push(\n traverseFields({\n id,\n collection,\n context,\n doc,\n fields: field.fields,\n overrideAccess,\n path: [...fieldPath, i],\n req,\n schemaPath: fieldSchemaPath,\n siblingDoc: row,\n }),\n )\n })\n }\n break\n }\n case 'blocks': {\n const rows = fieldData[locale]\n\n if (Array.isArray(rows)) {\n const promises = []\n rows.forEach((row, i) => {\n const blockTypeToMatch = row.blockType\n\n const block = field.blocks.find(\n (blockType) => blockType.slug === blockTypeToMatch,\n )\n\n promises.push(\n traverseFields({\n id,\n collection,\n context,\n doc,\n fields: block.fields,\n overrideAccess,\n path: [...fieldPath, i],\n req,\n schemaPath: fieldSchemaPath,\n siblingDoc: row,\n }),\n )\n })\n }\n break\n }\n\n case 'group':\n\n case 'tab': {\n promises.push(\n traverseFields({\n id,\n collection,\n context,\n doc,\n fields: field.fields,\n overrideAccess,\n path: fieldSchemaPath,\n req,\n schemaPath: fieldSchemaPath,\n siblingDoc: fieldData[locale],\n }),\n )\n\n break\n }\n }\n }\n })\n\n await Promise.all(promises)\n } else {\n // If the field is not localized, but it affects data,\n // we need to further traverse its children\n // so the child fields can run beforeDuplicate hooks\n switch (field.type) {\n case 'array': {\n const rows = siblingDoc[field.name]\n\n if (Array.isArray(rows)) {\n const promises = []\n rows.forEach((row, i) => {\n promises.push(\n traverseFields({\n id,\n collection,\n context,\n doc,\n fields: field.fields,\n overrideAccess,\n path: [...fieldPath, i],\n req,\n schemaPath: fieldSchemaPath,\n siblingDoc: row,\n }),\n )\n })\n await Promise.all(promises)\n }\n break\n }\n case 'blocks': {\n const rows = siblingDoc[field.name]\n\n if (Array.isArray(rows)) {\n const promises = []\n rows.forEach((row, i) => {\n const blockTypeToMatch = row.blockType\n const block = field.blocks.find((blockType) => blockType.slug === blockTypeToMatch)\n\n if (block) {\n ;(row as JsonObject).blockType = blockTypeToMatch\n\n promises.push(\n traverseFields({\n id,\n collection,\n context,\n doc,\n fields: block.fields,\n overrideAccess,\n path: [...fieldPath, i],\n req,\n schemaPath: fieldSchemaPath,\n siblingDoc: row,\n }),\n )\n }\n })\n await Promise.all(promises)\n }\n\n break\n }\n\n case 'group':\n\n case 'tab': {\n if (typeof siblingDoc[field.name] !== 'object') {\n siblingDoc[field.name] = {}\n }\n\n const groupDoc = siblingDoc[field.name] as Record<string, unknown>\n\n await traverseFields({\n id,\n collection,\n context,\n doc,\n fields: field.fields,\n overrideAccess,\n path: fieldPath,\n req,\n schemaPath: fieldSchemaPath,\n siblingDoc: groupDoc as JsonObject,\n })\n\n break\n }\n }\n }\n } else {\n // Finally, we traverse fields which do not affect data here\n switch (field.type) {\n case 'collapsible':\n case 'row': {\n await traverseFields({\n id,\n collection,\n context,\n doc,\n fields: field.fields,\n overrideAccess,\n path: fieldPath,\n req,\n schemaPath: fieldSchemaPath,\n siblingDoc,\n })\n\n break\n }\n\n case 'tabs': {\n await traverseFields({\n id,\n collection,\n context,\n doc,\n fields: field.tabs.map((tab) => ({ ...tab, type: 'tab' })),\n overrideAccess,\n path: fieldPath,\n req,\n schemaPath: fieldSchemaPath,\n siblingDoc,\n })\n\n break\n }\n\n default: {\n break\n }\n }\n }\n}\n"],"names":["fieldAffectsData","tabHasName","getFieldPaths","runBeforeDuplicateHooks","traverseFields","promise","id","collection","context","doc","field","fieldIndex","overrideAccess","parentPath","parentSchemaPath","req","siblingDoc","localization","payload","config","path","_fieldPath","schemaPath","_fieldSchemaPath","index","parentIndexPath","join","fieldPath","split","fieldSchemaPath","type","fields","fieldData","name","fieldIsLocalized","localized","Array","isArray","hooks","beforeDuplicate","localeData","localeCodes","reduce","localizedValuesPromise","locale","localizedValues","beforeDuplicateArgs","data","global","undefined","previousSiblingDoc","previousValue","siblingData","siblingDocWithLocales","value","hookResult","Promise","resolve","promises","forEach","rows","row","i","push","blockTypeToMatch","blockType","block","blocks","find","slug","all","groupDoc","tabs","map","tab"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../../../src/fields/hooks/beforeDuplicate/traverseFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAA;AACrF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACzE,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAI9D,KAAK,IAAI,CAAC,CAAC,IAAI;IACb,UAAU,EAAE,IAAI,GAAG,yBAAyB,CAAA;IAC5C,OAAO,EAAE,cAAc,CAAA;IACvB,GAAG,EAAE,CAAC,CAAA;IACN,MAAM,EAAE,CAAC,KAAK,GAAG,UAAU,CAAC,EAAE,CAAA;IAC9B,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,cAAc,EAAE,OAAO,CAAA;IACvB,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;IACzB,GAAG,EAAE,cAAc,CAAA;IACnB,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,UAAU,EAAE,UAAU,CAAA;CACvB,CAAA;AAED,eAAO,MAAM,cAAc,GAAU,CAAC,gGAWnC,IAAI,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,IAAI,CAmBxB,CAAA"}
1
+ {"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../../../src/fields/hooks/beforeDuplicate/traverseFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAA;AACrF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACzE,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAI9D,KAAK,IAAI,CAAC,CAAC,IAAI;IACb,UAAU,EAAE,IAAI,GAAG,yBAAyB,CAAA;IAC5C,OAAO,EAAE,cAAc,CAAA;IACvB,GAAG,EAAE,CAAC,CAAA;IACN,MAAM,EAAE,CAAC,KAAK,GAAG,UAAU,CAAC,EAAE,CAAA;IAC9B,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,cAAc,EAAE,OAAO,CAAA;IACvB,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;IACzB,GAAG,EAAE,cAAc,CAAA;IACnB,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,UAAU,EAAE,UAAU,CAAA;CACvB,CAAA;AAED,eAAO,MAAM,cAAc,GAAU,CAAC,gGAWnC,IAAI,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,IAAI,CAoBxB,CAAA"}
@@ -1,13 +1,14 @@
1
1
  import { promise } from './promise.js';
2
2
  export const traverseFields = async ({ id, collection, context, doc, fields, overrideAccess, path, req, schemaPath, siblingDoc })=>{
3
3
  const promises = [];
4
- fields.forEach((field)=>{
4
+ fields.forEach((field, fieldIndex)=>{
5
5
  promises.push(promise({
6
6
  id,
7
7
  collection,
8
8
  context,
9
9
  doc,
10
10
  field,
11
+ fieldIndex,
11
12
  overrideAccess,
12
13
  parentPath: path,
13
14
  parentSchemaPath: schemaPath,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/fields/hooks/beforeDuplicate/traverseFields.ts"],"sourcesContent":["import type { SanitizedCollectionConfig } from '../../../collections/config/types.js'\nimport type { RequestContext } from '../../../index.js'\nimport type { JsonObject, PayloadRequest } from '../../../types/index.js'\nimport type { Field, TabAsField } from '../../config/types.js'\n\nimport { promise } from './promise.js'\n\ntype Args<T> = {\n collection: null | SanitizedCollectionConfig\n context: RequestContext\n doc: T\n fields: (Field | TabAsField)[]\n id?: number | string\n overrideAccess: boolean\n path: (number | string)[]\n req: PayloadRequest\n schemaPath: string[]\n siblingDoc: JsonObject\n}\n\nexport const traverseFields = async <T>({\n id,\n collection,\n context,\n doc,\n fields,\n overrideAccess,\n path,\n req,\n schemaPath,\n siblingDoc,\n}: Args<T>): Promise<void> => {\n const promises = []\n fields.forEach((field) => {\n promises.push(\n promise({\n id,\n collection,\n context,\n doc,\n field,\n overrideAccess,\n parentPath: path,\n parentSchemaPath: schemaPath,\n req,\n siblingDoc,\n }),\n )\n })\n await Promise.all(promises)\n}\n"],"names":["promise","traverseFields","id","collection","context","doc","fields","overrideAccess","path","req","schemaPath","siblingDoc","promises","forEach","field","push","parentPath","parentSchemaPath","Promise","all"],"mappings":"AAKA,SAASA,OAAO,QAAQ,eAAc;AAetC,OAAO,MAAMC,iBAAiB,OAAU,EACtCC,EAAE,EACFC,UAAU,EACVC,OAAO,EACPC,GAAG,EACHC,MAAM,EACNC,cAAc,EACdC,IAAI,EACJC,GAAG,EACHC,UAAU,EACVC,UAAU,EACF;IACR,MAAMC,WAAW,EAAE;IACnBN,OAAOO,OAAO,CAAC,CAACC;QACdF,SAASG,IAAI,CACXf,QAAQ;YACNE;YACAC;YACAC;YACAC;YACAS;YACAP;YACAS,YAAYR;YACZS,kBAAkBP;YAClBD;YACAE;QACF;IAEJ;IACA,MAAMO,QAAQC,GAAG,CAACP;AACpB,EAAC"}
1
+ {"version":3,"sources":["../../../../src/fields/hooks/beforeDuplicate/traverseFields.ts"],"sourcesContent":["import type { SanitizedCollectionConfig } from '../../../collections/config/types.js'\nimport type { RequestContext } from '../../../index.js'\nimport type { JsonObject, PayloadRequest } from '../../../types/index.js'\nimport type { Field, TabAsField } from '../../config/types.js'\n\nimport { promise } from './promise.js'\n\ntype Args<T> = {\n collection: null | SanitizedCollectionConfig\n context: RequestContext\n doc: T\n fields: (Field | TabAsField)[]\n id?: number | string\n overrideAccess: boolean\n path: (number | string)[]\n req: PayloadRequest\n schemaPath: string[]\n siblingDoc: JsonObject\n}\n\nexport const traverseFields = async <T>({\n id,\n collection,\n context,\n doc,\n fields,\n overrideAccess,\n path,\n req,\n schemaPath,\n siblingDoc,\n}: Args<T>): Promise<void> => {\n const promises = []\n fields.forEach((field, fieldIndex) => {\n promises.push(\n promise({\n id,\n collection,\n context,\n doc,\n field,\n fieldIndex,\n overrideAccess,\n parentPath: path,\n parentSchemaPath: schemaPath,\n req,\n siblingDoc,\n }),\n )\n })\n await Promise.all(promises)\n}\n"],"names":["promise","traverseFields","id","collection","context","doc","fields","overrideAccess","path","req","schemaPath","siblingDoc","promises","forEach","field","fieldIndex","push","parentPath","parentSchemaPath","Promise","all"],"mappings":"AAKA,SAASA,OAAO,QAAQ,eAAc;AAetC,OAAO,MAAMC,iBAAiB,OAAU,EACtCC,EAAE,EACFC,UAAU,EACVC,OAAO,EACPC,GAAG,EACHC,MAAM,EACNC,cAAc,EACdC,IAAI,EACJC,GAAG,EACHC,UAAU,EACVC,UAAU,EACF;IACR,MAAMC,WAAW,EAAE;IACnBN,OAAOO,OAAO,CAAC,CAACC,OAAOC;QACrBH,SAASI,IAAI,CACXhB,QAAQ;YACNE;YACAC;YACAC;YACAC;YACAS;YACAC;YACAR;YACAU,YAAYT;YACZU,kBAAkBR;YAClBD;YACAE;QACF;IAEJ;IACA,MAAMQ,QAAQC,GAAG,CAACR;AACpB,EAAC"}
@@ -12,6 +12,7 @@ type Args<T> = {
12
12
  */
13
13
  doc: T;
14
14
  field: Field | TabAsField;
15
+ fieldIndex: number;
15
16
  global: null | SanitizedGlobalConfig;
16
17
  id?: number | string;
17
18
  operation: 'create' | 'update';
@@ -25,6 +26,6 @@ type Args<T> = {
25
26
  */
26
27
  siblingDoc: JsonObject;
27
28
  };
28
- export declare const promise: <T>({ id, collection, context, data, doc, field, global, operation, overrideAccess, parentPath, parentSchemaPath, req, siblingData, siblingDoc, }: Args<T>) => Promise<void>;
29
+ export declare const promise: <T>({ id, collection, context, data, doc, field, fieldIndex, global, operation, overrideAccess, parentPath, parentSchemaPath, req, siblingData, siblingDoc, }: Args<T>) => Promise<void>;
29
30
  export {};
30
31
  //# sourceMappingURL=promise.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"promise.d.ts","sourceRoot":"","sources":["../../../../src/fields/hooks/beforeValidate/promise.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAA;AACrF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAA;AAC7E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,KAAK,EAAE,UAAU,EAAa,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACpF,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAU9D,KAAK,IAAI,CAAC,CAAC,IAAI;IACb,UAAU,EAAE,IAAI,GAAG,yBAAyB,CAAA;IAC5C,OAAO,EAAE,cAAc,CAAA;IACvB,IAAI,EAAE,CAAC,CAAA;IACP;;OAEG;IACH,GAAG,EAAE,CAAC,CAAA;IACN,KAAK,EAAE,KAAK,GAAG,UAAU,CAAA;IACzB,MAAM,EAAE,IAAI,GAAG,qBAAqB,CAAA;IACpC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,SAAS,EAAE,QAAQ,GAAG,QAAQ,CAAA;IAC9B,cAAc,EAAE,OAAO,CAAA;IACvB,UAAU,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;IAC/B,gBAAgB,EAAE,MAAM,EAAE,CAAA;IAC1B,GAAG,EAAE,cAAc,CAAA;IACnB,WAAW,EAAE,UAAU,CAAA;IACvB;;OAEG;IACH,UAAU,EAAE,UAAU,CAAA;CACvB,CAAA;AASD,eAAO,MAAM,OAAO,GAAU,CAAC,iJAe5B,IAAI,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,IAAI,CAkdxB,CAAA"}
1
+ {"version":3,"file":"promise.d.ts","sourceRoot":"","sources":["../../../../src/fields/hooks/beforeValidate/promise.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAA;AACrF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAA;AAC7E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,KAAK,EAAE,UAAU,EAAa,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACpF,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAU9D,KAAK,IAAI,CAAC,CAAC,IAAI;IACb,UAAU,EAAE,IAAI,GAAG,yBAAyB,CAAA;IAC5C,OAAO,EAAE,cAAc,CAAA;IACvB,IAAI,EAAE,CAAC,CAAA;IACP;;OAEG;IACH,GAAG,EAAE,CAAC,CAAA;IACN,KAAK,EAAE,KAAK,GAAG,UAAU,CAAA;IACzB,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,IAAI,GAAG,qBAAqB,CAAA;IACpC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,SAAS,EAAE,QAAQ,GAAG,QAAQ,CAAA;IAC9B,cAAc,EAAE,OAAO,CAAA;IACvB,UAAU,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;IAC/B,gBAAgB,EAAE,MAAM,EAAE,CAAA;IAC1B,GAAG,EAAE,cAAc,CAAA;IACnB,WAAW,EAAE,UAAU,CAAA;IACvB;;OAEG;IACH,UAAU,EAAE,UAAU,CAAA;CACvB,CAAA;AASD,eAAO,MAAM,OAAO,GAAU,CAAC,6JAgB5B,IAAI,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,IAAI,CAsdxB,CAAA"}
@@ -11,12 +11,16 @@ import { traverseFields } from './traverseFields.js';
11
11
  // - Execute field access control
12
12
  // - Merge original document data into incoming data
13
13
  // - Compute default values for undefined fields
14
- export const promise = async ({ id, collection, context, data, doc, field, global, operation, overrideAccess, parentPath, parentSchemaPath, req, siblingData, siblingDoc })=>{
15
- const { path: fieldPath, schemaPath: fieldSchemaPath } = getFieldPaths({
14
+ export const promise = async ({ id, collection, context, data, doc, field, fieldIndex, global, operation, overrideAccess, parentPath, parentSchemaPath, req, siblingData, siblingDoc })=>{
15
+ const { path: _fieldPath, schemaPath: _fieldSchemaPath } = getFieldPaths({
16
16
  field,
17
- parentPath,
18
- parentSchemaPath
17
+ index: fieldIndex,
18
+ parentIndexPath: '',
19
+ parentPath: parentPath.join('.'),
20
+ parentSchemaPath: parentSchemaPath.join('.')
19
21
  });
22
+ const fieldPath = _fieldPath ? _fieldPath.split('.') : [];
23
+ const fieldSchemaPath = _fieldSchemaPath ? _fieldSchemaPath.split('.') : [];
20
24
  if (fieldAffectsData(field)) {
21
25
  if (field.name === 'id') {
22
26
  if (field.type === 'number' && typeof siblingData[field.name] === 'string') {
@@ -29,6 +33,28 @@ export const promise = async ({ id, collection, context, data, doc, field, globa
29
33
  }
30
34
  // Sanitize incoming data
31
35
  switch(field.type){
36
+ case 'array':
37
+ case 'blocks':
38
+ {
39
+ // Handle cases of arrays being intentionally set to 0
40
+ if (siblingData[field.name] === '0' || siblingData[field.name] === 0) {
41
+ siblingData[field.name] = [];
42
+ }
43
+ break;
44
+ }
45
+ case 'checkbox':
46
+ {
47
+ if (siblingData[field.name] === 'true') {
48
+ siblingData[field.name] = true;
49
+ }
50
+ if (siblingData[field.name] === 'false') {
51
+ siblingData[field.name] = false;
52
+ }
53
+ if (siblingData[field.name] === '') {
54
+ siblingData[field.name] = false;
55
+ }
56
+ break;
57
+ }
32
58
  case 'number':
33
59
  {
34
60
  if (typeof siblingData[field.name] === 'string') {
@@ -52,32 +78,6 @@ export const promise = async ({ id, collection, context, data, doc, field, globa
52
78
  }
53
79
  break;
54
80
  }
55
- case 'checkbox':
56
- {
57
- if (siblingData[field.name] === 'true') {
58
- siblingData[field.name] = true;
59
- }
60
- if (siblingData[field.name] === 'false') {
61
- siblingData[field.name] = false;
62
- }
63
- if (siblingData[field.name] === '') {
64
- siblingData[field.name] = false;
65
- }
66
- break;
67
- }
68
- case 'richText':
69
- {
70
- if (typeof siblingData[field.name] === 'string') {
71
- try {
72
- const richTextJSON = JSON.parse(siblingData[field.name]);
73
- siblingData[field.name] = richTextJSON;
74
- } catch {
75
- // Disregard this data as it is not valid.
76
- // Will be reported to user by field validation
77
- }
78
- }
79
- break;
80
- }
81
81
  case 'relationship':
82
82
  case 'upload':
83
83
  {
@@ -140,12 +140,16 @@ export const promise = async ({ id, collection, context, data, doc, field, globa
140
140
  }
141
141
  break;
142
142
  }
143
- case 'array':
144
- case 'blocks':
143
+ case 'richText':
145
144
  {
146
- // Handle cases of arrays being intentionally set to 0
147
- if (siblingData[field.name] === '0' || siblingData[field.name] === 0) {
148
- siblingData[field.name] = [];
145
+ if (typeof siblingData[field.name] === 'string') {
146
+ try {
147
+ const richTextJSON = JSON.parse(siblingData[field.name]);
148
+ siblingData[field.name] = richTextJSON;
149
+ } catch {
150
+ // Disregard this data as it is not valid.
151
+ // Will be reported to user by field validation
152
+ }
149
153
  }
150
154
  break;
151
155
  }
@@ -210,34 +214,6 @@ export const promise = async ({ id, collection, context, data, doc, field, globa
210
214
  }
211
215
  // Traverse subfields
212
216
  switch(field.type){
213
- case 'group':
214
- {
215
- if (typeof siblingData[field.name] !== 'object') {
216
- siblingData[field.name] = {};
217
- }
218
- if (typeof siblingDoc[field.name] !== 'object') {
219
- siblingDoc[field.name] = {};
220
- }
221
- const groupData = siblingData[field.name];
222
- const groupDoc = siblingDoc[field.name];
223
- await traverseFields({
224
- id,
225
- collection,
226
- context,
227
- data,
228
- doc,
229
- fields: field.fields,
230
- global,
231
- operation,
232
- overrideAccess,
233
- path: fieldPath,
234
- req,
235
- schemaPath: fieldSchemaPath,
236
- siblingData: groupData,
237
- siblingDoc: groupDoc
238
- });
239
- break;
240
- }
241
217
  case 'array':
242
218
  {
243
219
  const rows = siblingData[field.name];
@@ -304,8 +280,8 @@ export const promise = async ({ id, collection, context, data, doc, field, globa
304
280
  }
305
281
  break;
306
282
  }
307
- case 'row':
308
283
  case 'collapsible':
284
+ case 'row':
309
285
  {
310
286
  await traverseFields({
311
287
  id,
@@ -325,6 +301,71 @@ export const promise = async ({ id, collection, context, data, doc, field, globa
325
301
  });
326
302
  break;
327
303
  }
304
+ case 'group':
305
+ {
306
+ if (typeof siblingData[field.name] !== 'object') {
307
+ siblingData[field.name] = {};
308
+ }
309
+ if (typeof siblingDoc[field.name] !== 'object') {
310
+ siblingDoc[field.name] = {};
311
+ }
312
+ const groupData = siblingData[field.name];
313
+ const groupDoc = siblingDoc[field.name];
314
+ await traverseFields({
315
+ id,
316
+ collection,
317
+ context,
318
+ data,
319
+ doc,
320
+ fields: field.fields,
321
+ global,
322
+ operation,
323
+ overrideAccess,
324
+ path: fieldPath,
325
+ req,
326
+ schemaPath: fieldSchemaPath,
327
+ siblingData: groupData,
328
+ siblingDoc: groupDoc
329
+ });
330
+ break;
331
+ }
332
+ case 'richText':
333
+ {
334
+ if (!field?.editor) {
335
+ throw new MissingEditorProp(field) // while we allow disabling editor functionality, you should not have any richText fields defined if you do not have an editor
336
+ ;
337
+ }
338
+ if (typeof field?.editor === 'function') {
339
+ throw new Error('Attempted to access unsanitized rich text editor.');
340
+ }
341
+ const editor = field?.editor;
342
+ if (editor?.hooks?.beforeValidate?.length) {
343
+ await editor.hooks.beforeValidate.reduce(async (priorHook, currentHook)=>{
344
+ await priorHook;
345
+ const hookedValue = await currentHook({
346
+ collection,
347
+ context,
348
+ data,
349
+ field,
350
+ global,
351
+ operation,
352
+ originalDoc: doc,
353
+ overrideAccess,
354
+ path: fieldPath,
355
+ previousSiblingDoc: siblingDoc,
356
+ previousValue: siblingData[field.name],
357
+ req,
358
+ schemaPath: fieldSchemaPath,
359
+ siblingData,
360
+ value: siblingData[field.name]
361
+ });
362
+ if (hookedValue !== undefined) {
363
+ siblingData[field.name] = hookedValue;
364
+ }
365
+ }, Promise.resolve());
366
+ }
367
+ break;
368
+ }
328
369
  case 'tab':
329
370
  {
330
371
  let tabSiblingData;
@@ -383,43 +424,6 @@ export const promise = async ({ id, collection, context, data, doc, field, globa
383
424
  });
384
425
  break;
385
426
  }
386
- case 'richText':
387
- {
388
- if (!field?.editor) {
389
- throw new MissingEditorProp(field) // while we allow disabling editor functionality, you should not have any richText fields defined if you do not have an editor
390
- ;
391
- }
392
- if (typeof field?.editor === 'function') {
393
- throw new Error('Attempted to access unsanitized rich text editor.');
394
- }
395
- const editor = field?.editor;
396
- if (editor?.hooks?.beforeValidate?.length) {
397
- await editor.hooks.beforeValidate.reduce(async (priorHook, currentHook)=>{
398
- await priorHook;
399
- const hookedValue = await currentHook({
400
- collection,
401
- context,
402
- data,
403
- field,
404
- global,
405
- operation,
406
- originalDoc: doc,
407
- overrideAccess,
408
- path: fieldPath,
409
- previousSiblingDoc: siblingDoc,
410
- previousValue: siblingData[field.name],
411
- req,
412
- schemaPath: fieldSchemaPath,
413
- siblingData,
414
- value: siblingData[field.name]
415
- });
416
- if (hookedValue !== undefined) {
417
- siblingData[field.name] = hookedValue;
418
- }
419
- }, Promise.resolve());
420
- }
421
- break;
422
- }
423
427
  default:
424
428
  {
425
429
  break;