payload 3.0.0-alpha.49 → 3.0.0-alpha.50

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 (188) hide show
  1. package/components.d.ts +14 -0
  2. package/components.js +71 -0
  3. package/dist/admin/elements/Cell.d.ts +6 -6
  4. package/dist/admin/elements/Cell.d.ts.map +1 -1
  5. package/dist/admin/elements/Cell.js.map +1 -1
  6. package/dist/admin/elements/PreviewButton.d.ts +1 -8
  7. package/dist/admin/elements/PreviewButton.d.ts.map +1 -1
  8. package/dist/admin/elements/PreviewButton.js.map +1 -1
  9. package/dist/admin/elements/PublishButton.d.ts +1 -10
  10. package/dist/admin/elements/PublishButton.d.ts.map +1 -1
  11. package/dist/admin/elements/PublishButton.js.map +1 -1
  12. package/dist/admin/elements/SaveButton.d.ts +1 -7
  13. package/dist/admin/elements/SaveButton.d.ts.map +1 -1
  14. package/dist/admin/elements/SaveButton.js.map +1 -1
  15. package/dist/admin/elements/SaveDraftButton.d.ts +1 -8
  16. package/dist/admin/elements/SaveDraftButton.d.ts.map +1 -1
  17. package/dist/admin/elements/SaveDraftButton.js.map +1 -1
  18. package/dist/admin/forms/FieldDescription.d.ts +9 -6
  19. package/dist/admin/forms/FieldDescription.d.ts.map +1 -1
  20. package/dist/admin/forms/FieldDescription.js.map +1 -1
  21. package/dist/admin/forms/Form.d.ts +1 -2
  22. package/dist/admin/forms/Form.d.ts.map +1 -1
  23. package/dist/admin/forms/Form.js.map +1 -1
  24. package/dist/admin/forms/Label.d.ts +2 -0
  25. package/dist/admin/forms/Label.d.ts.map +1 -1
  26. package/dist/admin/forms/Label.js.map +1 -1
  27. package/dist/admin/types.d.ts +7 -11
  28. package/dist/admin/types.d.ts.map +1 -1
  29. package/dist/admin/types.js.map +1 -1
  30. package/dist/admin/views/types.d.ts +8 -0
  31. package/dist/admin/views/types.d.ts.map +1 -1
  32. package/dist/admin/views/types.js.map +1 -1
  33. package/dist/auth/executeAccess.d.ts +1 -1
  34. package/dist/auth/executeAccess.d.ts.map +1 -1
  35. package/dist/auth/executeAccess.js.map +1 -1
  36. package/dist/auth/getAccessResults.d.ts.map +1 -1
  37. package/dist/auth/getAccessResults.js +7 -2
  38. package/dist/auth/getAccessResults.js.map +1 -1
  39. package/dist/auth/strategies/apiKey.js.map +1 -1
  40. package/dist/bin/migrate.d.ts +1 -1
  41. package/dist/bin/migrate.d.ts.map +1 -1
  42. package/dist/bin/migrate.js.map +1 -1
  43. package/dist/collections/config/client.d.ts +42 -42
  44. package/dist/collections/config/client.d.ts.map +1 -1
  45. package/dist/collections/config/client.js +1 -0
  46. package/dist/collections/config/client.js.map +1 -1
  47. package/dist/collections/config/sanitize.js +1 -1
  48. package/dist/collections/config/sanitize.js.map +1 -1
  49. package/dist/collections/config/types.d.ts +6 -6
  50. package/dist/collections/config/types.d.ts.map +1 -1
  51. package/dist/collections/config/types.js.map +1 -1
  52. package/dist/collections/operations/duplicate.d.ts.map +1 -1
  53. package/dist/collections/operations/duplicate.js +82 -100
  54. package/dist/collections/operations/duplicate.js.map +1 -1
  55. package/dist/collections/operations/local/create.d.ts +1 -1
  56. package/dist/collections/operations/local/create.d.ts.map +1 -1
  57. package/dist/collections/operations/local/create.js.map +1 -1
  58. package/dist/collections/operations/utils.d.ts +1 -1
  59. package/dist/collections/operations/utils.d.ts.map +1 -1
  60. package/dist/collections/operations/utils.js.map +1 -1
  61. package/dist/config/client.d.ts.map +1 -1
  62. package/dist/config/client.js.map +1 -1
  63. package/dist/config/types.d.ts +3 -1
  64. package/dist/config/types.d.ts.map +1 -1
  65. package/dist/config/types.js.map +1 -1
  66. package/dist/database/queryValidation/validateSearchParams.d.ts.map +1 -1
  67. package/dist/database/queryValidation/validateSearchParams.js +2 -1
  68. package/dist/database/queryValidation/validateSearchParams.js.map +1 -1
  69. package/dist/exports/types.d.ts +1 -1
  70. package/dist/exports/types.d.ts.map +1 -1
  71. package/dist/exports/types.js.map +1 -1
  72. package/dist/exports/utilities.d.ts +1 -0
  73. package/dist/exports/utilities.d.ts.map +1 -1
  74. package/dist/exports/utilities.js +1 -0
  75. package/dist/exports/utilities.js.map +1 -1
  76. package/dist/fields/baseFields/baseIDField.d.ts.map +1 -1
  77. package/dist/fields/baseFields/baseIDField.js +11 -3
  78. package/dist/fields/baseFields/baseIDField.js.map +1 -1
  79. package/dist/fields/config/client.d.ts +5 -0
  80. package/dist/fields/config/client.d.ts.map +1 -1
  81. package/dist/fields/config/schema.d.ts.map +1 -1
  82. package/dist/fields/config/schema.js +10 -2
  83. package/dist/fields/config/schema.js.map +1 -1
  84. package/dist/fields/config/types.d.ts +14 -2
  85. package/dist/fields/config/types.d.ts.map +1 -1
  86. package/dist/fields/config/types.js.map +1 -1
  87. package/dist/fields/getDefaultValue.d.ts +1 -1
  88. package/dist/fields/getDefaultValue.d.ts.map +1 -1
  89. package/dist/fields/getDefaultValue.js +6 -1
  90. package/dist/fields/getDefaultValue.js.map +1 -1
  91. package/dist/fields/hooks/afterChange/index.d.ts +4 -0
  92. package/dist/fields/hooks/afterChange/index.d.ts.map +1 -1
  93. package/dist/fields/hooks/afterChange/index.js +4 -1
  94. package/dist/fields/hooks/afterChange/index.js.map +1 -1
  95. package/dist/fields/hooks/afterRead/index.d.ts +9 -0
  96. package/dist/fields/hooks/afterRead/index.d.ts.map +1 -1
  97. package/dist/fields/hooks/afterRead/index.js +9 -1
  98. package/dist/fields/hooks/afterRead/index.js.map +1 -1
  99. package/dist/fields/hooks/beforeChange/beforeDuplicate.d.ts +3 -0
  100. package/dist/fields/hooks/beforeChange/beforeDuplicate.d.ts.map +1 -0
  101. package/dist/fields/hooks/beforeChange/beforeDuplicate.js +6 -0
  102. package/dist/fields/hooks/beforeChange/beforeDuplicate.js.map +1 -0
  103. package/dist/fields/hooks/beforeChange/index.d.ts +11 -1
  104. package/dist/fields/hooks/beforeChange/index.d.ts.map +1 -1
  105. package/dist/fields/hooks/beforeChange/index.js +14 -2
  106. package/dist/fields/hooks/beforeChange/index.js.map +1 -1
  107. package/dist/fields/hooks/beforeChange/promise.d.ts +3 -2
  108. package/dist/fields/hooks/beforeChange/promise.d.ts.map +1 -1
  109. package/dist/fields/hooks/beforeChange/promise.js +46 -20
  110. package/dist/fields/hooks/beforeChange/promise.js.map +1 -1
  111. package/dist/fields/hooks/beforeChange/traverseFields.d.ts +11 -2
  112. package/dist/fields/hooks/beforeChange/traverseFields.d.ts.map +1 -1
  113. package/dist/fields/hooks/beforeChange/traverseFields.js +9 -1
  114. package/dist/fields/hooks/beforeChange/traverseFields.js.map +1 -1
  115. package/dist/fields/hooks/beforeValidate/index.d.ts +9 -1
  116. package/dist/fields/hooks/beforeValidate/index.d.ts.map +1 -1
  117. package/dist/fields/hooks/beforeValidate/index.js +8 -2
  118. package/dist/fields/hooks/beforeValidate/index.js.map +1 -1
  119. package/dist/fields/hooks/beforeValidate/promise.d.ts +1 -2
  120. package/dist/fields/hooks/beforeValidate/promise.d.ts.map +1 -1
  121. package/dist/fields/hooks/beforeValidate/promise.js +1 -30
  122. package/dist/fields/hooks/beforeValidate/promise.js.map +1 -1
  123. package/dist/fields/hooks/beforeValidate/traverseFields.d.ts +1 -2
  124. package/dist/fields/hooks/beforeValidate/traverseFields.d.ts.map +1 -1
  125. package/dist/fields/hooks/beforeValidate/traverseFields.js +1 -2
  126. package/dist/fields/hooks/beforeValidate/traverseFields.js.map +1 -1
  127. package/dist/fields/setDefaultBeforeDuplicate.d.ts.map +1 -1
  128. package/dist/fields/setDefaultBeforeDuplicate.js +1 -0
  129. package/dist/fields/setDefaultBeforeDuplicate.js.map +1 -1
  130. package/dist/fields/validations.d.ts.map +1 -1
  131. package/dist/fields/validations.js +5 -4
  132. package/dist/fields/validations.js.map +1 -1
  133. package/dist/globals/config/types.d.ts +6 -6
  134. package/dist/globals/config/types.d.ts.map +1 -1
  135. package/dist/globals/config/types.js.map +1 -1
  136. package/dist/index.d.ts +5 -5
  137. package/dist/index.d.ts.map +1 -1
  138. package/dist/index.js +6 -6
  139. package/dist/index.js.map +1 -1
  140. package/dist/preferences/operations/delete.d.ts.map +1 -1
  141. package/dist/preferences/operations/delete.js +4 -5
  142. package/dist/preferences/operations/delete.js.map +1 -1
  143. package/dist/preferences/requestHandlers/delete.d.ts +1 -1
  144. package/dist/preferences/requestHandlers/delete.d.ts.map +1 -1
  145. package/dist/preferences/requestHandlers/delete.js.map +1 -1
  146. package/dist/preferences/requestHandlers/findOne.d.ts +1 -1
  147. package/dist/preferences/requestHandlers/findOne.d.ts.map +1 -1
  148. package/dist/preferences/requestHandlers/findOne.js.map +1 -1
  149. package/dist/preferences/requestHandlers/update.d.ts +1 -1
  150. package/dist/preferences/requestHandlers/update.d.ts.map +1 -1
  151. package/dist/preferences/requestHandlers/update.js.map +1 -1
  152. package/dist/translations/getLocalI18n.d.ts +2 -2
  153. package/dist/translations/getLocalI18n.d.ts.map +1 -1
  154. package/dist/translations/getLocalI18n.js +1 -1
  155. package/dist/translations/getLocalI18n.js.map +1 -1
  156. package/dist/uploads/canResizeImage.js +2 -1
  157. package/dist/uploads/canResizeImage.js.map +1 -1
  158. package/dist/uploads/generateFileData.js +2 -2
  159. package/dist/uploads/generateFileData.js.map +1 -1
  160. package/dist/uploads/getBaseFields.d.ts +2 -2
  161. package/dist/uploads/getBaseFields.d.ts.map +1 -1
  162. package/dist/uploads/getBaseFields.js +51 -8
  163. package/dist/uploads/getBaseFields.js.map +1 -1
  164. package/dist/uploads/getImageSize.d.ts.map +1 -1
  165. package/dist/uploads/getImageSize.js +5 -12
  166. package/dist/uploads/getImageSize.js.map +1 -1
  167. package/dist/uploads/types.d.ts +1 -1
  168. package/dist/uploads/types.d.ts.map +1 -1
  169. package/dist/uploads/types.js.map +1 -1
  170. package/dist/utilities/createLocalReq.d.ts +1 -1
  171. package/dist/utilities/createLocalReq.d.ts.map +1 -1
  172. package/dist/utilities/createLocalReq.js +2 -2
  173. package/dist/utilities/createLocalReq.js.map +1 -1
  174. package/dist/utilities/fieldSchemaToJSON.d.ts +1 -1
  175. package/dist/utilities/fieldSchemaToJSON.d.ts.map +1 -1
  176. package/dist/utilities/fieldSchemaToJSON.js.map +1 -1
  177. package/dist/utilities/isReactComponent.d.ts +4 -0
  178. package/dist/utilities/isReactComponent.d.ts.map +1 -0
  179. package/dist/utilities/isReactComponent.js +11 -0
  180. package/dist/utilities/isReactComponent.js.map +1 -0
  181. package/graphql.d.ts +3 -0
  182. package/graphql.js +27 -0
  183. package/package.json +6 -10
  184. package/src/index.ts +474 -0
  185. package/types.d.ts +1 -1
  186. package/utilities.d.ts +1 -0
  187. package/utilities.js +1 -0
  188. package/.release-it.js +0 -51
@@ -7,12 +7,22 @@ type Args<T> = {
7
7
  data: Record<string, unknown> | T;
8
8
  doc: Record<string, unknown> | T;
9
9
  docWithLocales: Record<string, unknown>;
10
+ duplicate?: boolean;
10
11
  global: SanitizedGlobalConfig | null;
11
12
  id?: number | string;
12
13
  operation: Operation;
13
14
  req: PayloadRequest;
14
15
  skipValidation?: boolean;
15
16
  };
16
- export declare const beforeChange: <T extends Record<string, unknown>>({ id, collection, context, data: incomingData, doc, docWithLocales, global, operation, req, skipValidation, }: Args<T>) => Promise<T>;
17
+ /**
18
+ * This function is responsible for the following actions, in order:
19
+ * - Run condition
20
+ * - Execute field hooks
21
+ * - Validate data
22
+ * - Transform data for storage
23
+ * - beforeDuplicate hooks (if duplicate)
24
+ * - Unflatten locales
25
+ */
26
+ export declare const beforeChange: <T extends Record<string, unknown>>({ id, collection, context, data: incomingData, doc, docWithLocales, duplicate, global, operation, req, skipValidation, }: Args<T>) => Promise<T>;
17
27
  export {};
18
28
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/fields/hooks/beforeChange/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAA;AACrF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAA;AAC7E,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAMxF,KAAK,IAAI,CAAC,CAAC,IAAI;IACb,UAAU,EAAE,yBAAyB,GAAG,IAAI,CAAA;IAC5C,OAAO,EAAE,cAAc,CAAA;IACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,CAAA;IACjC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,CAAA;IAChC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACvC,MAAM,EAAE,qBAAqB,GAAG,IAAI,CAAA;IACpC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,SAAS,EAAE,SAAS,CAAA;IACpB,GAAG,EAAE,cAAc,CAAA;IACnB,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB,CAAA;AAED,eAAO,MAAM,YAAY,qJAWtB,KAAK,CAAC,CAAC,KAAG,QAAQ,CAAC,CAgCrB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/fields/hooks/beforeChange/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAA;AACrF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAA;AAC7E,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAMxF,KAAK,IAAI,CAAC,CAAC,IAAI;IACb,UAAU,EAAE,yBAAyB,GAAG,IAAI,CAAA;IAC5C,OAAO,EAAE,cAAc,CAAA;IACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,CAAA;IACjC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,CAAA;IAChC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACvC,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,MAAM,EAAE,qBAAqB,GAAG,IAAI,CAAA;IACpC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,SAAS,EAAE,SAAS,CAAA;IACpB,GAAG,EAAE,cAAc,CAAA;IACnB,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB,CAAA;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,YAAY,gKAYtB,KAAK,CAAC,CAAC,KAAG,QAAQ,CAAC,CAoCrB,CAAA"}
@@ -1,7 +1,15 @@
1
1
  import { ValidationError } from '../../../errors/index.js';
2
2
  import { deepCopyObject } from '../../../utilities/deepCopyObject.js';
3
3
  import { traverseFields } from './traverseFields.js';
4
- export const beforeChange = async ({ id, collection, context, data: incomingData, doc, docWithLocales, global, operation, req, skipValidation })=>{
4
+ /**
5
+ * This function is responsible for the following actions, in order:
6
+ * - Run condition
7
+ * - Execute field hooks
8
+ * - Validate data
9
+ * - Transform data for storage
10
+ * - beforeDuplicate hooks (if duplicate)
11
+ * - Unflatten locales
12
+ */ export const beforeChange = async ({ id, collection, context, data: incomingData, doc, docWithLocales, duplicate = false, global, operation, req, skipValidation })=>{
5
13
  const data = deepCopyObject(incomingData);
6
14
  const mergeLocaleActions = [];
7
15
  const errors = [];
@@ -12,6 +20,7 @@ export const beforeChange = async ({ id, collection, context, data: incomingData
12
20
  data,
13
21
  doc,
14
22
  docWithLocales,
23
+ duplicate,
15
24
  errors,
16
25
  fields: collection?.fields || global?.fields,
17
26
  global,
@@ -27,7 +36,10 @@ export const beforeChange = async ({ id, collection, context, data: incomingData
27
36
  if (errors.length > 0) {
28
37
  throw new ValidationError(errors, req.t);
29
38
  }
30
- mergeLocaleActions.forEach((action)=>action());
39
+ await mergeLocaleActions.reduce(async (priorAction, action)=>{
40
+ await priorAction;
41
+ await action();
42
+ }, Promise.resolve());
31
43
  return data;
32
44
  };
33
45
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/fields/hooks/beforeChange/index.ts"],"sourcesContent":["import type { SanitizedCollectionConfig } from '../../../collections/config/types.js'\nimport type { SanitizedGlobalConfig } from '../../../globals/config/types.js'\nimport type { Operation, PayloadRequest, RequestContext } from '../../../types/index.js'\n\nimport { ValidationError } from '../../../errors/index.js'\nimport { deepCopyObject } from '../../../utilities/deepCopyObject.js'\nimport { traverseFields } from './traverseFields.js'\n\ntype Args<T> = {\n collection: SanitizedCollectionConfig | null\n context: RequestContext\n data: Record<string, unknown> | T\n doc: Record<string, unknown> | T\n docWithLocales: Record<string, unknown>\n global: SanitizedGlobalConfig | null\n id?: number | string\n operation: Operation\n req: PayloadRequest\n skipValidation?: boolean\n}\n\nexport const beforeChange = async <T extends Record<string, unknown>>({\n id,\n collection,\n context,\n data: incomingData,\n doc,\n docWithLocales,\n global,\n operation,\n req,\n skipValidation,\n}: Args<T>): Promise<T> => {\n const data = deepCopyObject(incomingData)\n const mergeLocaleActions = []\n const errors: { field: string; message: string }[] = []\n\n await traverseFields({\n id,\n collection,\n context,\n data,\n doc,\n docWithLocales,\n errors,\n fields: collection?.fields || global?.fields,\n global,\n mergeLocaleActions,\n operation,\n path: '',\n req,\n siblingData: data,\n siblingDoc: doc,\n siblingDocWithLocales: docWithLocales,\n skipValidation,\n })\n\n if (errors.length > 0) {\n throw new ValidationError(errors, req.t)\n }\n\n mergeLocaleActions.forEach((action) => action())\n\n return data\n}\n"],"names":["ValidationError","deepCopyObject","traverseFields","beforeChange","id","collection","context","data","incomingData","doc","docWithLocales","global","operation","req","skipValidation","mergeLocaleActions","errors","fields","path","siblingData","siblingDoc","siblingDocWithLocales","length","t","forEach","action"],"mappings":"AAIA,SAASA,eAAe,QAAQ,2BAA0B;AAC1D,SAASC,cAAc,QAAQ,uCAAsC;AACrE,SAASC,cAAc,QAAQ,sBAAqB;AAepD,OAAO,MAAMC,eAAe,OAA0C,EACpEC,EAAE,EACFC,UAAU,EACVC,OAAO,EACPC,MAAMC,YAAY,EAClBC,GAAG,EACHC,cAAc,EACdC,MAAM,EACNC,SAAS,EACTC,GAAG,EACHC,cAAc,EACN;IACR,MAAMP,OAAON,eAAeO;IAC5B,MAAMO,qBAAqB,EAAE;IAC7B,MAAMC,SAA+C,EAAE;IAEvD,MAAMd,eAAe;QACnBE;QACAC;QACAC;QACAC;QACAE;QACAC;QACAM;QACAC,QAAQZ,YAAYY,UAAUN,QAAQM;QACtCN;QACAI;QACAH;QACAM,MAAM;QACNL;QACAM,aAAaZ;QACba,YAAYX;QACZY,uBAAuBX;QACvBI;IACF;IAEA,IAAIE,OAAOM,MAAM,GAAG,GAAG;QACrB,MAAM,IAAItB,gBAAgBgB,QAAQH,IAAIU,CAAC;IACzC;IAEAR,mBAAmBS,OAAO,CAAC,CAACC,SAAWA;IAEvC,OAAOlB;AACT,EAAC"}
1
+ {"version":3,"sources":["../../../../src/fields/hooks/beforeChange/index.ts"],"sourcesContent":["import type { SanitizedCollectionConfig } from '../../../collections/config/types.js'\nimport type { SanitizedGlobalConfig } from '../../../globals/config/types.js'\nimport type { Operation, PayloadRequest, RequestContext } from '../../../types/index.js'\n\nimport { ValidationError } from '../../../errors/index.js'\nimport { deepCopyObject } from '../../../utilities/deepCopyObject.js'\nimport { traverseFields } from './traverseFields.js'\n\ntype Args<T> = {\n collection: SanitizedCollectionConfig | null\n context: RequestContext\n data: Record<string, unknown> | T\n doc: Record<string, unknown> | T\n docWithLocales: Record<string, unknown>\n duplicate?: boolean\n global: SanitizedGlobalConfig | null\n id?: number | string\n operation: Operation\n req: PayloadRequest\n skipValidation?: boolean\n}\n\n/**\n * This function is responsible for the following actions, in order:\n * - Run condition\n * - Execute field hooks\n * - Validate data\n * - Transform data for storage\n * - beforeDuplicate hooks (if duplicate)\n * - Unflatten locales\n */\nexport const beforeChange = async <T extends Record<string, unknown>>({\n id,\n collection,\n context,\n data: incomingData,\n doc,\n docWithLocales,\n duplicate = false,\n global,\n operation,\n req,\n skipValidation,\n}: Args<T>): Promise<T> => {\n const data = deepCopyObject(incomingData)\n const mergeLocaleActions = []\n const errors: { field: string; message: string }[] = []\n\n await traverseFields({\n id,\n collection,\n context,\n data,\n doc,\n docWithLocales,\n duplicate,\n errors,\n fields: collection?.fields || global?.fields,\n global,\n mergeLocaleActions,\n operation,\n path: '',\n req,\n siblingData: data,\n siblingDoc: doc,\n siblingDocWithLocales: docWithLocales,\n skipValidation,\n })\n\n if (errors.length > 0) {\n throw new ValidationError(errors, req.t)\n }\n\n await mergeLocaleActions.reduce(async (priorAction, action) => {\n await priorAction\n await action()\n }, Promise.resolve())\n\n return data\n}\n"],"names":["ValidationError","deepCopyObject","traverseFields","beforeChange","id","collection","context","data","incomingData","doc","docWithLocales","duplicate","global","operation","req","skipValidation","mergeLocaleActions","errors","fields","path","siblingData","siblingDoc","siblingDocWithLocales","length","t","reduce","priorAction","action","Promise","resolve"],"mappings":"AAIA,SAASA,eAAe,QAAQ,2BAA0B;AAC1D,SAASC,cAAc,QAAQ,uCAAsC;AACrE,SAASC,cAAc,QAAQ,sBAAqB;AAgBpD;;;;;;;;CAQC,GACD,OAAO,MAAMC,eAAe,OAA0C,EACpEC,EAAE,EACFC,UAAU,EACVC,OAAO,EACPC,MAAMC,YAAY,EAClBC,GAAG,EACHC,cAAc,EACdC,YAAY,KAAK,EACjBC,MAAM,EACNC,SAAS,EACTC,GAAG,EACHC,cAAc,EACN;IACR,MAAMR,OAAON,eAAeO;IAC5B,MAAMQ,qBAAqB,EAAE;IAC7B,MAAMC,SAA+C,EAAE;IAEvD,MAAMf,eAAe;QACnBE;QACAC;QACAC;QACAC;QACAE;QACAC;QACAC;QACAM;QACAC,QAAQb,YAAYa,UAAUN,QAAQM;QACtCN;QACAI;QACAH;QACAM,MAAM;QACNL;QACAM,aAAab;QACbc,YAAYZ;QACZa,uBAAuBZ;QACvBK;IACF;IAEA,IAAIE,OAAOM,MAAM,GAAG,GAAG;QACrB,MAAM,IAAIvB,gBAAgBiB,QAAQH,IAAIU,CAAC;IACzC;IAEA,MAAMR,mBAAmBS,MAAM,CAAC,OAAOC,aAAaC;QAClD,MAAMD;QACN,MAAMC;IACR,GAAGC,QAAQC,OAAO;IAElB,OAAOtB;AACT,EAAC"}
@@ -8,6 +8,7 @@ type Args = {
8
8
  data: Record<string, unknown>;
9
9
  doc: Record<string, unknown>;
10
10
  docWithLocales: Record<string, unknown>;
11
+ duplicate: boolean;
11
12
  errors: {
12
13
  field: string;
13
14
  message: string;
@@ -15,7 +16,7 @@ type Args = {
15
16
  field: Field | TabAsField;
16
17
  global: SanitizedGlobalConfig | null;
17
18
  id?: number | string;
18
- mergeLocaleActions: (() => void)[];
19
+ mergeLocaleActions: (() => Promise<void>)[];
19
20
  operation: Operation;
20
21
  path: string;
21
22
  req: PayloadRequest;
@@ -24,6 +25,6 @@ type Args = {
24
25
  siblingDocWithLocales?: Record<string, unknown>;
25
26
  skipValidation: boolean;
26
27
  };
27
- export declare const promise: ({ id, collection, context, data, doc, docWithLocales, errors, field, global, mergeLocaleActions, operation, path, req, siblingData, siblingDoc, siblingDocWithLocales, skipValidation, }: Args) => Promise<void>;
28
+ export declare const promise: ({ id, collection, context, data, doc, docWithLocales, duplicate, errors, field, global, mergeLocaleActions, operation, path, req, siblingData, siblingDoc, siblingDocWithLocales, skipValidation, }: Args) => Promise<void>;
28
29
  export {};
29
30
  //# sourceMappingURL=promise.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"promise.d.ts","sourceRoot":"","sources":["../../../../src/fields/hooks/beforeChange/promise.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAA;AACrF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAA;AAC7E,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxF,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAM9D,KAAK,IAAI,GAAG;IACV,UAAU,EAAE,yBAAyB,GAAG,IAAI,CAAA;IAC5C,OAAO,EAAE,cAAc,CAAA;IACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC5B,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACvC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IAC5C,KAAK,EAAE,KAAK,GAAG,UAAU,CAAA;IACzB,MAAM,EAAE,qBAAqB,GAAG,IAAI,CAAA;IACpC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,kBAAkB,EAAE,CAAC,MAAM,IAAI,CAAC,EAAE,CAAA;IAClC,SAAS,EAAE,SAAS,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,cAAc,CAAA;IACnB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACpC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACnC,qBAAqB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC/C,cAAc,EAAE,OAAO,CAAA;CACxB,CAAA;AASD,eAAO,MAAM,OAAO,6LAkBjB,IAAI,KAAG,QAAQ,IAAI,CAyUrB,CAAA"}
1
+ {"version":3,"file":"promise.d.ts","sourceRoot":"","sources":["../../../../src/fields/hooks/beforeChange/promise.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAA;AACrF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAA;AAC7E,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxF,OAAO,KAAK,EAAE,KAAK,EAAiB,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAO7E,KAAK,IAAI,GAAG;IACV,UAAU,EAAE,yBAAyB,GAAG,IAAI,CAAA;IAC5C,OAAO,EAAE,cAAc,CAAA;IACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC5B,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACvC,SAAS,EAAE,OAAO,CAAA;IAClB,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IAC5C,KAAK,EAAE,KAAK,GAAG,UAAU,CAAA;IACzB,MAAM,EAAE,qBAAqB,GAAG,IAAI,CAAA;IACpC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,kBAAkB,EAAE,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAA;IAC3C,SAAS,EAAE,SAAS,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,cAAc,CAAA;IACnB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACpC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACnC,qBAAqB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC/C,cAAc,EAAE,OAAO,CAAA;CACxB,CAAA;AAUD,eAAO,MAAM,OAAO,wMAmBjB,IAAI,KAAG,QAAQ,IAAI,CAmWrB,CAAA"}
@@ -1,5 +1,6 @@
1
1
  import merge from 'deepmerge';
2
2
  import { fieldAffectsData, tabHasName } from '../../config/types.js';
3
+ import { beforeDuplicate } from './beforeDuplicate.js';
3
4
  import { getExistingRowDoc } from './getExistingRowDoc.js';
4
5
  import { traverseFields } from './traverseFields.js';
5
6
  // This function is responsible for the following actions, in order:
@@ -7,13 +8,15 @@ import { traverseFields } from './traverseFields.js';
7
8
  // - Execute field hooks
8
9
  // - Validate data
9
10
  // - Transform data for storage
11
+ // - beforeDuplicate hooks (if duplicate)
10
12
  // - Unflatten locales
11
- export const promise = async ({ id, collection, context, data, doc, docWithLocales, errors, field, global, mergeLocaleActions, operation, path, req, siblingData, siblingDoc, siblingDocWithLocales, skipValidation })=>{
13
+ export const promise = async ({ id, collection, context, data, doc, docWithLocales, duplicate, errors, field, global, mergeLocaleActions, operation, path, req, siblingData, siblingDoc, siblingDocWithLocales, skipValidation })=>{
12
14
  const passesCondition = field.admin?.condition ? Boolean(field.admin.condition(data, siblingData, {
13
15
  user: req.user
14
16
  })) : true;
15
17
  let skipValidationFromHere = skipValidation || !passesCondition;
16
- const defaultLocale = req.payload.config?.localization ? req.payload.config.localization?.defaultLocale : 'en';
18
+ const { localization } = req.payload.config;
19
+ const defaultLocale = localization ? localization?.defaultLocale : 'en';
17
20
  const operationLocale = req.locale || defaultLocale;
18
21
  if (fieldAffectsData(field)) {
19
22
  // skip validation if the field is localized and the incoming data is null
@@ -80,28 +83,45 @@ export const promise = async ({ id, collection, context, data, doc, docWithLocal
80
83
  });
81
84
  }
82
85
  }
86
+ const beforeDuplicateArgs = {
87
+ collection,
88
+ context,
89
+ data,
90
+ field,
91
+ global: undefined,
92
+ req,
93
+ siblingData,
94
+ value: siblingData[field.name]
95
+ };
83
96
  // Push merge locale action if applicable
84
- if (field.localized) {
85
- mergeLocaleActions.push(()=>{
86
- if (req.payload.config.localization) {
87
- const { localization } = req.payload.config;
88
- const localeData = localization.localeCodes.reduce((localizedValues, locale)=>{
89
- const fieldValue = locale === req.locale ? siblingData[field.name] : siblingDocWithLocales?.[field.name]?.[locale];
90
- // update locale value if it's not undefined
91
- if (typeof fieldValue !== 'undefined') {
92
- return {
93
- ...localizedValues,
94
- [locale]: fieldValue
95
- };
96
- }
97
- return localizedValues;
98
- }, {});
99
- // If there are locales with data, set the data
100
- if (Object.keys(localeData).length > 0) {
101
- siblingData[field.name] = localeData;
97
+ if (localization && field.localized) {
98
+ mergeLocaleActions.push(async ()=>{
99
+ const localeData = await localization.localeCodes.reduce(async (localizedValuesPromise, locale)=>{
100
+ const localizedValues = await localizedValuesPromise;
101
+ let fieldValue = locale === req.locale ? siblingData[field.name] : siblingDocWithLocales?.[field.name]?.[locale];
102
+ if (duplicate && field.hooks?.beforeDuplicate?.length) {
103
+ beforeDuplicateArgs.value = fieldValue;
104
+ fieldValue = await beforeDuplicate(beforeDuplicateArgs);
105
+ }
106
+ // const result = await localizedValues
107
+ // update locale value if it's not undefined
108
+ if (typeof fieldValue !== 'undefined') {
109
+ return {
110
+ ...localizedValues,
111
+ [locale]: fieldValue
112
+ };
102
113
  }
114
+ return localizedValuesPromise;
115
+ }, Promise.resolve({}));
116
+ // If there are locales with data, set the data
117
+ if (Object.keys(localeData).length > 0) {
118
+ siblingData[field.name] = localeData;
103
119
  }
104
120
  });
121
+ } else if (duplicate && field.hooks?.beforeDuplicate?.length) {
122
+ mergeLocaleActions.push(async ()=>{
123
+ siblingData[field.name] = await beforeDuplicate(beforeDuplicateArgs);
124
+ });
105
125
  }
106
126
  }
107
127
  switch(field.type){
@@ -131,6 +151,7 @@ export const promise = async ({ id, collection, context, data, doc, docWithLocal
131
151
  data,
132
152
  doc,
133
153
  docWithLocales,
154
+ duplicate,
134
155
  errors,
135
156
  fields: field.fields,
136
157
  global,
@@ -158,6 +179,7 @@ export const promise = async ({ id, collection, context, data, doc, docWithLocal
158
179
  data,
159
180
  doc,
160
181
  docWithLocales,
182
+ duplicate,
161
183
  errors,
162
184
  fields: field.fields,
163
185
  global,
@@ -193,6 +215,7 @@ export const promise = async ({ id, collection, context, data, doc, docWithLocal
193
215
  data,
194
216
  doc,
195
217
  docWithLocales,
218
+ duplicate,
196
219
  errors,
197
220
  fields: block.fields,
198
221
  global,
@@ -221,6 +244,7 @@ export const promise = async ({ id, collection, context, data, doc, docWithLocal
221
244
  data,
222
245
  doc,
223
246
  docWithLocales,
247
+ duplicate,
224
248
  errors,
225
249
  fields: field.fields,
226
250
  global,
@@ -257,6 +281,7 @@ export const promise = async ({ id, collection, context, data, doc, docWithLocal
257
281
  data,
258
282
  doc,
259
283
  docWithLocales,
284
+ duplicate,
260
285
  errors,
261
286
  fields: field.fields,
262
287
  global,
@@ -280,6 +305,7 @@ export const promise = async ({ id, collection, context, data, doc, docWithLocal
280
305
  data,
281
306
  doc,
282
307
  docWithLocales,
308
+ duplicate,
283
309
  errors,
284
310
  fields: field.tabs.map((tab)=>({
285
311
  ...tab,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/fields/hooks/beforeChange/promise.ts"],"sourcesContent":["import merge from 'deepmerge'\n\nimport type { SanitizedCollectionConfig } from '../../../collections/config/types.js'\nimport type { SanitizedGlobalConfig } from '../../../globals/config/types.js'\nimport type { Operation, PayloadRequest, RequestContext } from '../../../types/index.js'\nimport type { Field, TabAsField } from '../../config/types.js'\n\nimport { fieldAffectsData, tabHasName } from '../../config/types.js'\nimport { getExistingRowDoc } from './getExistingRowDoc.js'\nimport { traverseFields } from './traverseFields.js'\n\ntype Args = {\n collection: SanitizedCollectionConfig | null\n context: RequestContext\n data: Record<string, unknown>\n doc: Record<string, unknown>\n docWithLocales: Record<string, unknown>\n errors: { field: string; message: string }[]\n field: Field | TabAsField\n global: SanitizedGlobalConfig | null\n id?: number | string\n mergeLocaleActions: (() => void)[]\n operation: Operation\n path: string\n req: PayloadRequest\n siblingData: Record<string, unknown>\n siblingDoc: Record<string, unknown>\n siblingDocWithLocales?: Record<string, unknown>\n skipValidation: boolean\n}\n\n// This function is responsible for the following actions, in order:\n// - Run condition\n// - Execute field hooks\n// - Validate data\n// - Transform data for storage\n// - Unflatten locales\n\nexport const promise = async ({\n id,\n collection,\n context,\n data,\n doc,\n docWithLocales,\n errors,\n field,\n global,\n mergeLocaleActions,\n operation,\n path,\n req,\n siblingData,\n siblingDoc,\n siblingDocWithLocales,\n skipValidation,\n}: Args): Promise<void> => {\n const passesCondition = field.admin?.condition\n ? Boolean(field.admin.condition(data, siblingData, { user: req.user }))\n : true\n let skipValidationFromHere = skipValidation || !passesCondition\n\n const defaultLocale = req.payload.config?.localization\n ? req.payload.config.localization?.defaultLocale\n : 'en'\n const operationLocale = req.locale || defaultLocale\n\n if (fieldAffectsData(field)) {\n // skip validation if the field is localized and the incoming data is null\n if (field.localized && operationLocale !== defaultLocale) {\n if (['array', 'blocks'].includes(field.type) && siblingData[field.name] === null) {\n skipValidationFromHere = true\n }\n }\n\n // Execute hooks\n if (field.hooks?.beforeChange) {\n await field.hooks.beforeChange.reduce(async (priorHook, currentHook) => {\n await priorHook\n\n const hookedValue = await currentHook({\n collection,\n context,\n data,\n field,\n global,\n operation,\n originalDoc: doc,\n previousSiblingDoc: siblingDoc,\n previousValue: siblingDoc[field.name],\n req,\n siblingData,\n value: siblingData[field.name],\n })\n\n if (hookedValue !== undefined) {\n siblingData[field.name] = hookedValue\n }\n }, Promise.resolve())\n }\n\n // Validate\n if (!skipValidationFromHere && field.validate) {\n const valueToValidate = siblingData[field.name]\n let jsonError\n\n if (field.type === 'json' && typeof siblingData[field.name] === 'string') {\n try {\n JSON.parse(siblingData[field.name] as string)\n } catch (e) {\n jsonError = e\n }\n }\n\n const validationResult = await field.validate(valueToValidate, {\n ...field,\n id,\n data: merge(doc, data, { arrayMerge: (_, source) => source }),\n // @ts-expect-error-next-line\n jsonError,\n operation,\n req,\n siblingData: merge(siblingDoc, siblingData, { arrayMerge: (_, source) => source }),\n })\n\n if (typeof validationResult === 'string') {\n errors.push({\n field: `${path}${field.name}`,\n message: validationResult,\n })\n }\n }\n\n // Push merge locale action if applicable\n if (field.localized) {\n mergeLocaleActions.push(() => {\n if (req.payload.config.localization) {\n const { localization } = req.payload.config\n const localeData = localization.localeCodes.reduce((localizedValues, locale) => {\n const fieldValue =\n locale === req.locale\n ? siblingData[field.name]\n : siblingDocWithLocales?.[field.name]?.[locale]\n\n // update locale value if it's not undefined\n if (typeof fieldValue !== 'undefined') {\n return {\n ...localizedValues,\n [locale]: fieldValue,\n }\n }\n\n return localizedValues\n }, {})\n\n // If there are locales with data, set the data\n if (Object.keys(localeData).length > 0) {\n siblingData[field.name] = localeData\n }\n }\n })\n }\n }\n\n switch (field.type) {\n case 'point': {\n // Transform point data for storage\n if (\n Array.isArray(siblingData[field.name]) &&\n siblingData[field.name][0] !== null &&\n siblingData[field.name][1] !== null\n ) {\n siblingData[field.name] = {\n type: 'Point',\n coordinates: [\n parseFloat(siblingData[field.name][0]),\n parseFloat(siblingData[field.name][1]),\n ],\n }\n }\n\n break\n }\n\n case 'group': {\n if (typeof siblingData[field.name] !== 'object') siblingData[field.name] = {}\n if (typeof siblingDoc[field.name] !== 'object') siblingDoc[field.name] = {}\n if (typeof siblingDocWithLocales[field.name] !== 'object')\n siblingDocWithLocales[field.name] = {}\n\n await traverseFields({\n id,\n collection,\n context,\n data,\n doc,\n docWithLocales,\n errors,\n fields: field.fields,\n global,\n mergeLocaleActions,\n operation,\n path: `${path}${field.name}.`,\n req,\n siblingData: siblingData[field.name] as Record<string, unknown>,\n siblingDoc: siblingDoc[field.name] as Record<string, unknown>,\n siblingDocWithLocales: siblingDocWithLocales[field.name] as Record<string, unknown>,\n skipValidation: skipValidationFromHere,\n })\n\n break\n }\n\n case 'array': {\n const rows = siblingData[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 data,\n doc,\n docWithLocales,\n errors,\n fields: field.fields,\n global,\n mergeLocaleActions,\n operation,\n path: `${path}${field.name}.${i}.`,\n req,\n siblingData: row,\n siblingDoc: getExistingRowDoc(row, siblingDoc[field.name]),\n siblingDocWithLocales: getExistingRowDoc(row, siblingDocWithLocales[field.name]),\n skipValidation: skipValidationFromHere,\n }),\n )\n })\n\n await Promise.all(promises)\n }\n\n break\n }\n\n case 'blocks': {\n const rows = siblingData[field.name]\n\n if (Array.isArray(rows)) {\n const promises = []\n rows.forEach((row, i) => {\n const rowSiblingDoc = getExistingRowDoc(row, siblingDoc[field.name])\n const rowSiblingDocWithLocales = getExistingRowDoc(row, siblingDocWithLocales[field.name])\n\n const blockTypeToMatch = row.blockType || rowSiblingDoc.blockType\n const block = field.blocks.find((blockType) => blockType.slug === blockTypeToMatch)\n\n if (block) {\n promises.push(\n traverseFields({\n id,\n collection,\n context,\n data,\n doc,\n docWithLocales,\n errors,\n fields: block.fields,\n global,\n mergeLocaleActions,\n operation,\n path: `${path}${field.name}.${i}.`,\n req,\n siblingData: row,\n siblingDoc: rowSiblingDoc,\n siblingDocWithLocales: rowSiblingDocWithLocales,\n skipValidation: skipValidationFromHere,\n }),\n )\n }\n })\n\n await Promise.all(promises)\n }\n\n break\n }\n\n case 'row':\n case 'collapsible': {\n await traverseFields({\n id,\n collection,\n context,\n data,\n doc,\n docWithLocales,\n errors,\n fields: field.fields,\n global,\n mergeLocaleActions,\n operation,\n path,\n req,\n siblingData,\n siblingDoc,\n siblingDocWithLocales,\n skipValidation: skipValidationFromHere,\n })\n\n break\n }\n\n case 'tab': {\n let tabPath = path\n let tabSiblingData = siblingData\n let tabSiblingDoc = siblingDoc\n let tabSiblingDocWithLocales = siblingDocWithLocales\n\n if (tabHasName(field)) {\n tabPath = `${path}${field.name}.`\n if (typeof siblingData[field.name] !== 'object') siblingData[field.name] = {}\n if (typeof siblingDoc[field.name] !== 'object') siblingDoc[field.name] = {}\n if (typeof siblingDocWithLocales[field.name] !== 'object')\n siblingDocWithLocales[field.name] = {}\n\n tabSiblingData = siblingData[field.name] as Record<string, unknown>\n tabSiblingDoc = siblingDoc[field.name] as Record<string, unknown>\n tabSiblingDocWithLocales = siblingDocWithLocales[field.name] as Record<string, unknown>\n }\n\n await traverseFields({\n id,\n collection,\n context,\n data,\n doc,\n docWithLocales,\n errors,\n fields: field.fields,\n global,\n mergeLocaleActions,\n operation,\n path: tabPath,\n req,\n siblingData: tabSiblingData,\n siblingDoc: tabSiblingDoc,\n siblingDocWithLocales: tabSiblingDocWithLocales,\n skipValidation: skipValidationFromHere,\n })\n\n break\n }\n\n case 'tabs': {\n await traverseFields({\n id,\n collection,\n context,\n data,\n doc,\n docWithLocales,\n errors,\n fields: field.tabs.map((tab) => ({ ...tab, type: 'tab' })),\n global,\n mergeLocaleActions,\n operation,\n path,\n req,\n siblingData,\n siblingDoc,\n siblingDocWithLocales,\n skipValidation: skipValidationFromHere,\n })\n\n break\n }\n\n default: {\n break\n }\n }\n}\n"],"names":["merge","fieldAffectsData","tabHasName","getExistingRowDoc","traverseFields","promise","id","collection","context","data","doc","docWithLocales","errors","field","global","mergeLocaleActions","operation","path","req","siblingData","siblingDoc","siblingDocWithLocales","skipValidation","passesCondition","admin","condition","Boolean","user","skipValidationFromHere","defaultLocale","payload","config","localization","operationLocale","locale","localized","includes","type","name","hooks","beforeChange","reduce","priorHook","currentHook","hookedValue","originalDoc","previousSiblingDoc","previousValue","value","undefined","Promise","resolve","validate","valueToValidate","jsonError","JSON","parse","e","validationResult","arrayMerge","_","source","push","message","localeData","localeCodes","localizedValues","fieldValue","Object","keys","length","Array","isArray","coordinates","parseFloat","fields","rows","promises","forEach","row","i","all","rowSiblingDoc","rowSiblingDocWithLocales","blockTypeToMatch","blockType","block","blocks","find","slug","tabPath","tabSiblingData","tabSiblingDoc","tabSiblingDocWithLocales","tabs","map","tab"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/fields/hooks/beforeChange/promise.ts"],"sourcesContent":["import merge from 'deepmerge'\n\nimport type { SanitizedCollectionConfig } from '../../../collections/config/types.js'\nimport type { SanitizedGlobalConfig } from '../../../globals/config/types.js'\nimport type { Operation, PayloadRequest, RequestContext } from '../../../types/index.js'\nimport type { Field, FieldHookArgs, TabAsField } from '../../config/types.js'\n\nimport { fieldAffectsData, tabHasName } from '../../config/types.js'\nimport { beforeDuplicate } from './beforeDuplicate.js'\nimport { getExistingRowDoc } from './getExistingRowDoc.js'\nimport { traverseFields } from './traverseFields.js'\n\ntype Args = {\n collection: SanitizedCollectionConfig | null\n context: RequestContext\n data: Record<string, unknown>\n doc: Record<string, unknown>\n docWithLocales: Record<string, unknown>\n duplicate: boolean\n errors: { field: string; message: string }[]\n field: Field | TabAsField\n global: SanitizedGlobalConfig | null\n id?: number | string\n mergeLocaleActions: (() => Promise<void>)[]\n operation: Operation\n path: string\n req: PayloadRequest\n siblingData: Record<string, unknown>\n siblingDoc: Record<string, unknown>\n siblingDocWithLocales?: Record<string, unknown>\n skipValidation: boolean\n}\n\n// This function is responsible for the following actions, in order:\n// - Run condition\n// - Execute field hooks\n// - Validate data\n// - Transform data for storage\n// - beforeDuplicate hooks (if duplicate)\n// - Unflatten locales\n\nexport const promise = async ({\n id,\n collection,\n context,\n data,\n doc,\n docWithLocales,\n duplicate,\n errors,\n field,\n global,\n mergeLocaleActions,\n operation,\n path,\n req,\n siblingData,\n siblingDoc,\n siblingDocWithLocales,\n skipValidation,\n}: Args): Promise<void> => {\n const passesCondition = field.admin?.condition\n ? Boolean(field.admin.condition(data, siblingData, { user: req.user }))\n : true\n let skipValidationFromHere = skipValidation || !passesCondition\n const { localization } = req.payload.config\n const defaultLocale = localization ? localization?.defaultLocale : 'en'\n const operationLocale = req.locale || defaultLocale\n\n if (fieldAffectsData(field)) {\n // skip validation if the field is localized and the incoming data is null\n if (field.localized && operationLocale !== defaultLocale) {\n if (['array', 'blocks'].includes(field.type) && siblingData[field.name] === null) {\n skipValidationFromHere = true\n }\n }\n\n // Execute hooks\n if (field.hooks?.beforeChange) {\n await field.hooks.beforeChange.reduce(async (priorHook, currentHook) => {\n await priorHook\n\n const hookedValue = await currentHook({\n collection,\n context,\n data,\n field,\n global,\n operation,\n originalDoc: doc,\n previousSiblingDoc: siblingDoc,\n previousValue: siblingDoc[field.name],\n req,\n siblingData,\n value: siblingData[field.name],\n })\n\n if (hookedValue !== undefined) {\n siblingData[field.name] = hookedValue\n }\n }, Promise.resolve())\n }\n\n // Validate\n if (!skipValidationFromHere && field.validate) {\n const valueToValidate = siblingData[field.name]\n let jsonError\n\n if (field.type === 'json' && typeof siblingData[field.name] === 'string') {\n try {\n JSON.parse(siblingData[field.name] as string)\n } catch (e) {\n jsonError = e\n }\n }\n\n const validationResult = await field.validate(valueToValidate, {\n ...field,\n id,\n data: merge(doc, data, { arrayMerge: (_, source) => source }),\n // @ts-expect-error-next-line\n jsonError,\n operation,\n req,\n siblingData: merge(siblingDoc, siblingData, { arrayMerge: (_, source) => source }),\n })\n\n if (typeof validationResult === 'string') {\n errors.push({\n field: `${path}${field.name}`,\n message: validationResult,\n })\n }\n }\n\n const beforeDuplicateArgs: FieldHookArgs = {\n collection,\n context,\n data,\n field,\n global: undefined,\n req,\n siblingData,\n value: siblingData[field.name],\n }\n\n // Push merge locale action if applicable\n if (localization && field.localized) {\n mergeLocaleActions.push(async () => {\n const localeData = await localization.localeCodes.reduce(\n async (localizedValuesPromise: Promise<Record<string, unknown>>, locale) => {\n const localizedValues = await localizedValuesPromise\n let fieldValue =\n locale === req.locale\n ? siblingData[field.name]\n : siblingDocWithLocales?.[field.name]?.[locale]\n\n if (duplicate && field.hooks?.beforeDuplicate?.length) {\n beforeDuplicateArgs.value = fieldValue\n fieldValue = await beforeDuplicate(beforeDuplicateArgs)\n }\n\n // const result = await localizedValues\n // update locale value if it's not undefined\n if (typeof fieldValue !== 'undefined') {\n return {\n ...localizedValues,\n [locale]: fieldValue,\n }\n }\n\n return localizedValuesPromise\n },\n Promise.resolve({}),\n )\n\n // If there are locales with data, set the data\n if (Object.keys(localeData).length > 0) {\n siblingData[field.name] = localeData\n }\n })\n } else if (duplicate && field.hooks?.beforeDuplicate?.length) {\n mergeLocaleActions.push(async () => {\n siblingData[field.name] = await beforeDuplicate(beforeDuplicateArgs)\n })\n }\n }\n\n switch (field.type) {\n case 'point': {\n // Transform point data for storage\n if (\n Array.isArray(siblingData[field.name]) &&\n siblingData[field.name][0] !== null &&\n siblingData[field.name][1] !== null\n ) {\n siblingData[field.name] = {\n type: 'Point',\n coordinates: [\n parseFloat(siblingData[field.name][0]),\n parseFloat(siblingData[field.name][1]),\n ],\n }\n }\n\n break\n }\n\n case 'group': {\n if (typeof siblingData[field.name] !== 'object') siblingData[field.name] = {}\n if (typeof siblingDoc[field.name] !== 'object') siblingDoc[field.name] = {}\n if (typeof siblingDocWithLocales[field.name] !== 'object')\n siblingDocWithLocales[field.name] = {}\n\n await traverseFields({\n id,\n collection,\n context,\n data,\n doc,\n docWithLocales,\n duplicate,\n errors,\n fields: field.fields,\n global,\n mergeLocaleActions,\n operation,\n path: `${path}${field.name}.`,\n req,\n siblingData: siblingData[field.name] as Record<string, unknown>,\n siblingDoc: siblingDoc[field.name] as Record<string, unknown>,\n siblingDocWithLocales: siblingDocWithLocales[field.name] as Record<string, unknown>,\n skipValidation: skipValidationFromHere,\n })\n\n break\n }\n\n case 'array': {\n const rows = siblingData[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 data,\n doc,\n docWithLocales,\n duplicate,\n errors,\n fields: field.fields,\n global,\n mergeLocaleActions,\n operation,\n path: `${path}${field.name}.${i}.`,\n req,\n siblingData: row,\n siblingDoc: getExistingRowDoc(row, siblingDoc[field.name]),\n siblingDocWithLocales: getExistingRowDoc(row, siblingDocWithLocales[field.name]),\n skipValidation: skipValidationFromHere,\n }),\n )\n })\n\n await Promise.all(promises)\n }\n\n break\n }\n\n case 'blocks': {\n const rows = siblingData[field.name]\n\n if (Array.isArray(rows)) {\n const promises = []\n rows.forEach((row, i) => {\n const rowSiblingDoc = getExistingRowDoc(row, siblingDoc[field.name])\n const rowSiblingDocWithLocales = getExistingRowDoc(row, siblingDocWithLocales[field.name])\n\n const blockTypeToMatch = row.blockType || rowSiblingDoc.blockType\n const block = field.blocks.find((blockType) => blockType.slug === blockTypeToMatch)\n\n if (block) {\n promises.push(\n traverseFields({\n id,\n collection,\n context,\n data,\n doc,\n docWithLocales,\n duplicate,\n errors,\n fields: block.fields,\n global,\n mergeLocaleActions,\n operation,\n path: `${path}${field.name}.${i}.`,\n req,\n siblingData: row,\n siblingDoc: rowSiblingDoc,\n siblingDocWithLocales: rowSiblingDocWithLocales,\n skipValidation: skipValidationFromHere,\n }),\n )\n }\n })\n\n await Promise.all(promises)\n }\n\n break\n }\n\n case 'row':\n case 'collapsible': {\n await traverseFields({\n id,\n collection,\n context,\n data,\n doc,\n docWithLocales,\n duplicate,\n errors,\n fields: field.fields,\n global,\n mergeLocaleActions,\n operation,\n path,\n req,\n siblingData,\n siblingDoc,\n siblingDocWithLocales,\n skipValidation: skipValidationFromHere,\n })\n\n break\n }\n\n case 'tab': {\n let tabPath = path\n let tabSiblingData = siblingData\n let tabSiblingDoc = siblingDoc\n let tabSiblingDocWithLocales = siblingDocWithLocales\n\n if (tabHasName(field)) {\n tabPath = `${path}${field.name}.`\n if (typeof siblingData[field.name] !== 'object') siblingData[field.name] = {}\n if (typeof siblingDoc[field.name] !== 'object') siblingDoc[field.name] = {}\n if (typeof siblingDocWithLocales[field.name] !== 'object')\n siblingDocWithLocales[field.name] = {}\n\n tabSiblingData = siblingData[field.name] as Record<string, unknown>\n tabSiblingDoc = siblingDoc[field.name] as Record<string, unknown>\n tabSiblingDocWithLocales = siblingDocWithLocales[field.name] as Record<string, unknown>\n }\n\n await traverseFields({\n id,\n collection,\n context,\n data,\n doc,\n docWithLocales,\n duplicate,\n errors,\n fields: field.fields,\n global,\n mergeLocaleActions,\n operation,\n path: tabPath,\n req,\n siblingData: tabSiblingData,\n siblingDoc: tabSiblingDoc,\n siblingDocWithLocales: tabSiblingDocWithLocales,\n skipValidation: skipValidationFromHere,\n })\n\n break\n }\n\n case 'tabs': {\n await traverseFields({\n id,\n collection,\n context,\n data,\n doc,\n docWithLocales,\n duplicate,\n errors,\n fields: field.tabs.map((tab) => ({ ...tab, type: 'tab' })),\n global,\n mergeLocaleActions,\n operation,\n path,\n req,\n siblingData,\n siblingDoc,\n siblingDocWithLocales,\n skipValidation: skipValidationFromHere,\n })\n\n break\n }\n\n default: {\n break\n }\n }\n}\n"],"names":["merge","fieldAffectsData","tabHasName","beforeDuplicate","getExistingRowDoc","traverseFields","promise","id","collection","context","data","doc","docWithLocales","duplicate","errors","field","global","mergeLocaleActions","operation","path","req","siblingData","siblingDoc","siblingDocWithLocales","skipValidation","passesCondition","admin","condition","Boolean","user","skipValidationFromHere","localization","payload","config","defaultLocale","operationLocale","locale","localized","includes","type","name","hooks","beforeChange","reduce","priorHook","currentHook","hookedValue","originalDoc","previousSiblingDoc","previousValue","value","undefined","Promise","resolve","validate","valueToValidate","jsonError","JSON","parse","e","validationResult","arrayMerge","_","source","push","message","beforeDuplicateArgs","localeData","localeCodes","localizedValuesPromise","localizedValues","fieldValue","length","Object","keys","Array","isArray","coordinates","parseFloat","fields","rows","promises","forEach","row","i","all","rowSiblingDoc","rowSiblingDocWithLocales","blockTypeToMatch","blockType","block","blocks","find","slug","tabPath","tabSiblingData","tabSiblingDoc","tabSiblingDocWithLocales","tabs","map","tab"],"mappings":"AAAA,OAAOA,WAAW,YAAW;AAO7B,SAASC,gBAAgB,EAAEC,UAAU,QAAQ,wBAAuB;AACpE,SAASC,eAAe,QAAQ,uBAAsB;AACtD,SAASC,iBAAiB,QAAQ,yBAAwB;AAC1D,SAASC,cAAc,QAAQ,sBAAqB;AAuBpD,oEAAoE;AACpE,kBAAkB;AAClB,wBAAwB;AACxB,kBAAkB;AAClB,+BAA+B;AAC/B,yCAAyC;AACzC,sBAAsB;AAEtB,OAAO,MAAMC,UAAU,OAAO,EAC5BC,EAAE,EACFC,UAAU,EACVC,OAAO,EACPC,IAAI,EACJC,GAAG,EACHC,cAAc,EACdC,SAAS,EACTC,MAAM,EACNC,KAAK,EACLC,MAAM,EACNC,kBAAkB,EAClBC,SAAS,EACTC,IAAI,EACJC,GAAG,EACHC,WAAW,EACXC,UAAU,EACVC,qBAAqB,EACrBC,cAAc,EACT;IACL,MAAMC,kBAAkBV,MAAMW,KAAK,EAAEC,YACjCC,QAAQb,MAAMW,KAAK,CAACC,SAAS,CAACjB,MAAMW,aAAa;QAAEQ,MAAMT,IAAIS,IAAI;IAAC,MAClE;IACJ,IAAIC,yBAAyBN,kBAAkB,CAACC;IAChD,MAAM,EAAEM,YAAY,EAAE,GAAGX,IAAIY,OAAO,CAACC,MAAM;IAC3C,MAAMC,gBAAgBH,eAAeA,cAAcG,gBAAgB;IACnE,MAAMC,kBAAkBf,IAAIgB,MAAM,IAAIF;IAEtC,IAAIjC,iBAAiBc,QAAQ;QAC3B,0EAA0E;QAC1E,IAAIA,MAAMsB,SAAS,IAAIF,oBAAoBD,eAAe;YACxD,IAAI;gBAAC;gBAAS;aAAS,CAACI,QAAQ,CAACvB,MAAMwB,IAAI,KAAKlB,WAAW,CAACN,MAAMyB,IAAI,CAAC,KAAK,MAAM;gBAChFV,yBAAyB;YAC3B;QACF;QAEA,gBAAgB;QAChB,IAAIf,MAAM0B,KAAK,EAAEC,cAAc;YAC7B,MAAM3B,MAAM0B,KAAK,CAACC,YAAY,CAACC,MAAM,CAAC,OAAOC,WAAWC;gBACtD,MAAMD;gBAEN,MAAME,cAAc,MAAMD,YAAY;oBACpCrC;oBACAC;oBACAC;oBACAK;oBACAC;oBACAE;oBACA6B,aAAapC;oBACbqC,oBAAoB1B;oBACpB2B,eAAe3B,UAAU,CAACP,MAAMyB,IAAI,CAAC;oBACrCpB;oBACAC;oBACA6B,OAAO7B,WAAW,CAACN,MAAMyB,IAAI,CAAC;gBAChC;gBAEA,IAAIM,gBAAgBK,WAAW;oBAC7B9B,WAAW,CAACN,MAAMyB,IAAI,CAAC,GAAGM;gBAC5B;YACF,GAAGM,QAAQC,OAAO;QACpB;QAEA,WAAW;QACX,IAAI,CAACvB,0BAA0Bf,MAAMuC,QAAQ,EAAE;YAC7C,MAAMC,kBAAkBlC,WAAW,CAACN,MAAMyB,IAAI,CAAC;YAC/C,IAAIgB;YAEJ,IAAIzC,MAAMwB,IAAI,KAAK,UAAU,OAAOlB,WAAW,CAACN,MAAMyB,IAAI,CAAC,KAAK,UAAU;gBACxE,IAAI;oBACFiB,KAAKC,KAAK,CAACrC,WAAW,CAACN,MAAMyB,IAAI,CAAC;gBACpC,EAAE,OAAOmB,GAAG;oBACVH,YAAYG;gBACd;YACF;YAEA,MAAMC,mBAAmB,MAAM7C,MAAMuC,QAAQ,CAACC,iBAAiB;gBAC7D,GAAGxC,KAAK;gBACRR;gBACAG,MAAMV,MAAMW,KAAKD,MAAM;oBAAEmD,YAAY,CAACC,GAAGC,SAAWA;gBAAO;gBAC3D,6BAA6B;gBAC7BP;gBACAtC;gBACAE;gBACAC,aAAarB,MAAMsB,YAAYD,aAAa;oBAAEwC,YAAY,CAACC,GAAGC,SAAWA;gBAAO;YAClF;YAEA,IAAI,OAAOH,qBAAqB,UAAU;gBACxC9C,OAAOkD,IAAI,CAAC;oBACVjD,OAAO,CAAC,EAAEI,KAAK,EAAEJ,MAAMyB,IAAI,CAAC,CAAC;oBAC7ByB,SAASL;gBACX;YACF;QACF;QAEA,MAAMM,sBAAqC;YACzC1D;YACAC;YACAC;YACAK;YACAC,QAAQmC;YACR/B;YACAC;YACA6B,OAAO7B,WAAW,CAACN,MAAMyB,IAAI,CAAC;QAChC;QAEA,yCAAyC;QACzC,IAAIT,gBAAgBhB,MAAMsB,SAAS,EAAE;YACnCpB,mBAAmB+C,IAAI,CAAC;gBACtB,MAAMG,aAAa,MAAMpC,aAAaqC,WAAW,CAACzB,MAAM,CACtD,OAAO0B,wBAA0DjC;oBAC/D,MAAMkC,kBAAkB,MAAMD;oBAC9B,IAAIE,aACFnC,WAAWhB,IAAIgB,MAAM,GACjBf,WAAW,CAACN,MAAMyB,IAAI,CAAC,GACvBjB,uBAAuB,CAACR,MAAMyB,IAAI,CAAC,EAAE,CAACJ,OAAO;oBAEnD,IAAIvB,aAAaE,MAAM0B,KAAK,EAAEtC,iBAAiBqE,QAAQ;wBACrDN,oBAAoBhB,KAAK,GAAGqB;wBAC5BA,aAAa,MAAMpE,gBAAgB+D;oBACrC;oBAEA,uCAAuC;oBACvC,4CAA4C;oBAC5C,IAAI,OAAOK,eAAe,aAAa;wBACrC,OAAO;4BACL,GAAGD,eAAe;4BAClB,CAAClC,OAAO,EAAEmC;wBACZ;oBACF;oBAEA,OAAOF;gBACT,GACAjB,QAAQC,OAAO,CAAC,CAAC;gBAGnB,+CAA+C;gBAC/C,IAAIoB,OAAOC,IAAI,CAACP,YAAYK,MAAM,GAAG,GAAG;oBACtCnD,WAAW,CAACN,MAAMyB,IAAI,CAAC,GAAG2B;gBAC5B;YACF;QACF,OAAO,IAAItD,aAAaE,MAAM0B,KAAK,EAAEtC,iBAAiBqE,QAAQ;YAC5DvD,mBAAmB+C,IAAI,CAAC;gBACtB3C,WAAW,CAACN,MAAMyB,IAAI,CAAC,GAAG,MAAMrC,gBAAgB+D;YAClD;QACF;IACF;IAEA,OAAQnD,MAAMwB,IAAI;QAChB,KAAK;YAAS;gBACZ,mCAAmC;gBACnC,IACEoC,MAAMC,OAAO,CAACvD,WAAW,CAACN,MAAMyB,IAAI,CAAC,KACrCnB,WAAW,CAACN,MAAMyB,IAAI,CAAC,CAAC,EAAE,KAAK,QAC/BnB,WAAW,CAACN,MAAMyB,IAAI,CAAC,CAAC,EAAE,KAAK,MAC/B;oBACAnB,WAAW,CAACN,MAAMyB,IAAI,CAAC,GAAG;wBACxBD,MAAM;wBACNsC,aAAa;4BACXC,WAAWzD,WAAW,CAACN,MAAMyB,IAAI,CAAC,CAAC,EAAE;4BACrCsC,WAAWzD,WAAW,CAACN,MAAMyB,IAAI,CAAC,CAAC,EAAE;yBACtC;oBACH;gBACF;gBAEA;YACF;QAEA,KAAK;YAAS;gBACZ,IAAI,OAAOnB,WAAW,CAACN,MAAMyB,IAAI,CAAC,KAAK,UAAUnB,WAAW,CAACN,MAAMyB,IAAI,CAAC,GAAG,CAAC;gBAC5E,IAAI,OAAOlB,UAAU,CAACP,MAAMyB,IAAI,CAAC,KAAK,UAAUlB,UAAU,CAACP,MAAMyB,IAAI,CAAC,GAAG,CAAC;gBAC1E,IAAI,OAAOjB,qBAAqB,CAACR,MAAMyB,IAAI,CAAC,KAAK,UAC/CjB,qBAAqB,CAACR,MAAMyB,IAAI,CAAC,GAAG,CAAC;gBAEvC,MAAMnC,eAAe;oBACnBE;oBACAC;oBACAC;oBACAC;oBACAC;oBACAC;oBACAC;oBACAC;oBACAiE,QAAQhE,MAAMgE,MAAM;oBACpB/D;oBACAC;oBACAC;oBACAC,MAAM,CAAC,EAAEA,KAAK,EAAEJ,MAAMyB,IAAI,CAAC,CAAC,CAAC;oBAC7BpB;oBACAC,aAAaA,WAAW,CAACN,MAAMyB,IAAI,CAAC;oBACpClB,YAAYA,UAAU,CAACP,MAAMyB,IAAI,CAAC;oBAClCjB,uBAAuBA,qBAAqB,CAACR,MAAMyB,IAAI,CAAC;oBACxDhB,gBAAgBM;gBAClB;gBAEA;YACF;QAEA,KAAK;YAAS;gBACZ,MAAMkD,OAAO3D,WAAW,CAACN,MAAMyB,IAAI,CAAC;gBAEpC,IAAImC,MAAMC,OAAO,CAACI,OAAO;oBACvB,MAAMC,WAAW,EAAE;oBACnBD,KAAKE,OAAO,CAAC,CAACC,KAAKC;wBACjBH,SAASjB,IAAI,CACX3D,eAAe;4BACbE;4BACAC;4BACAC;4BACAC;4BACAC;4BACAC;4BACAC;4BACAC;4BACAiE,QAAQhE,MAAMgE,MAAM;4BACpB/D;4BACAC;4BACAC;4BACAC,MAAM,CAAC,EAAEA,KAAK,EAAEJ,MAAMyB,IAAI,CAAC,CAAC,EAAE4C,EAAE,CAAC,CAAC;4BAClChE;4BACAC,aAAa8D;4BACb7D,YAAYlB,kBAAkB+E,KAAK7D,UAAU,CAACP,MAAMyB,IAAI,CAAC;4BACzDjB,uBAAuBnB,kBAAkB+E,KAAK5D,qBAAqB,CAACR,MAAMyB,IAAI,CAAC;4BAC/EhB,gBAAgBM;wBAClB;oBAEJ;oBAEA,MAAMsB,QAAQiC,GAAG,CAACJ;gBACpB;gBAEA;YACF;QAEA,KAAK;YAAU;gBACb,MAAMD,OAAO3D,WAAW,CAACN,MAAMyB,IAAI,CAAC;gBAEpC,IAAImC,MAAMC,OAAO,CAACI,OAAO;oBACvB,MAAMC,WAAW,EAAE;oBACnBD,KAAKE,OAAO,CAAC,CAACC,KAAKC;wBACjB,MAAME,gBAAgBlF,kBAAkB+E,KAAK7D,UAAU,CAACP,MAAMyB,IAAI,CAAC;wBACnE,MAAM+C,2BAA2BnF,kBAAkB+E,KAAK5D,qBAAqB,CAACR,MAAMyB,IAAI,CAAC;wBAEzF,MAAMgD,mBAAmBL,IAAIM,SAAS,IAAIH,cAAcG,SAAS;wBACjE,MAAMC,QAAQ3E,MAAM4E,MAAM,CAACC,IAAI,CAAC,CAACH,YAAcA,UAAUI,IAAI,KAAKL;wBAElE,IAAIE,OAAO;4BACTT,SAASjB,IAAI,CACX3D,eAAe;gCACbE;gCACAC;gCACAC;gCACAC;gCACAC;gCACAC;gCACAC;gCACAC;gCACAiE,QAAQW,MAAMX,MAAM;gCACpB/D;gCACAC;gCACAC;gCACAC,MAAM,CAAC,EAAEA,KAAK,EAAEJ,MAAMyB,IAAI,CAAC,CAAC,EAAE4C,EAAE,CAAC,CAAC;gCAClChE;gCACAC,aAAa8D;gCACb7D,YAAYgE;gCACZ/D,uBAAuBgE;gCACvB/D,gBAAgBM;4BAClB;wBAEJ;oBACF;oBAEA,MAAMsB,QAAQiC,GAAG,CAACJ;gBACpB;gBAEA;YACF;QAEA,KAAK;QACL,KAAK;YAAe;gBAClB,MAAM5E,eAAe;oBACnBE;oBACAC;oBACAC;oBACAC;oBACAC;oBACAC;oBACAC;oBACAC;oBACAiE,QAAQhE,MAAMgE,MAAM;oBACpB/D;oBACAC;oBACAC;oBACAC;oBACAC;oBACAC;oBACAC;oBACAC;oBACAC,gBAAgBM;gBAClB;gBAEA;YACF;QAEA,KAAK;YAAO;gBACV,IAAIgE,UAAU3E;gBACd,IAAI4E,iBAAiB1E;gBACrB,IAAI2E,gBAAgB1E;gBACpB,IAAI2E,2BAA2B1E;gBAE/B,IAAIrB,WAAWa,QAAQ;oBACrB+E,UAAU,CAAC,EAAE3E,KAAK,EAAEJ,MAAMyB,IAAI,CAAC,CAAC,CAAC;oBACjC,IAAI,OAAOnB,WAAW,CAACN,MAAMyB,IAAI,CAAC,KAAK,UAAUnB,WAAW,CAACN,MAAMyB,IAAI,CAAC,GAAG,CAAC;oBAC5E,IAAI,OAAOlB,UAAU,CAACP,MAAMyB,IAAI,CAAC,KAAK,UAAUlB,UAAU,CAACP,MAAMyB,IAAI,CAAC,GAAG,CAAC;oBAC1E,IAAI,OAAOjB,qBAAqB,CAACR,MAAMyB,IAAI,CAAC,KAAK,UAC/CjB,qBAAqB,CAACR,MAAMyB,IAAI,CAAC,GAAG,CAAC;oBAEvCuD,iBAAiB1E,WAAW,CAACN,MAAMyB,IAAI,CAAC;oBACxCwD,gBAAgB1E,UAAU,CAACP,MAAMyB,IAAI,CAAC;oBACtCyD,2BAA2B1E,qBAAqB,CAACR,MAAMyB,IAAI,CAAC;gBAC9D;gBAEA,MAAMnC,eAAe;oBACnBE;oBACAC;oBACAC;oBACAC;oBACAC;oBACAC;oBACAC;oBACAC;oBACAiE,QAAQhE,MAAMgE,MAAM;oBACpB/D;oBACAC;oBACAC;oBACAC,MAAM2E;oBACN1E;oBACAC,aAAa0E;oBACbzE,YAAY0E;oBACZzE,uBAAuB0E;oBACvBzE,gBAAgBM;gBAClB;gBAEA;YACF;QAEA,KAAK;YAAQ;gBACX,MAAMzB,eAAe;oBACnBE;oBACAC;oBACAC;oBACAC;oBACAC;oBACAC;oBACAC;oBACAC;oBACAiE,QAAQhE,MAAMmF,IAAI,CAACC,GAAG,CAAC,CAACC,MAAS,CAAA;4BAAE,GAAGA,GAAG;4BAAE7D,MAAM;wBAAM,CAAA;oBACvDvB;oBACAC;oBACAC;oBACAC;oBACAC;oBACAC;oBACAC;oBACAC;oBACAC,gBAAgBM;gBAClB;gBAEA;YACF;QAEA;YAAS;gBACP;YACF;IACF;AACF,EAAC"}
@@ -8,6 +8,7 @@ type Args = {
8
8
  data: Record<string, unknown>;
9
9
  doc: Record<string, unknown>;
10
10
  docWithLocales: Record<string, unknown>;
11
+ duplicate: boolean;
11
12
  errors: {
12
13
  field: string;
13
14
  message: string;
@@ -15,7 +16,7 @@ type Args = {
15
16
  fields: (Field | TabAsField)[];
16
17
  global: SanitizedGlobalConfig | null;
17
18
  id?: number | string;
18
- mergeLocaleActions: (() => void)[];
19
+ mergeLocaleActions: (() => Promise<void>)[];
19
20
  operation: Operation;
20
21
  path: string;
21
22
  req: PayloadRequest;
@@ -24,6 +25,14 @@ type Args = {
24
25
  siblingDocWithLocales: Record<string, unknown>;
25
26
  skipValidation?: boolean;
26
27
  };
27
- export declare const traverseFields: ({ id, collection, context, data, doc, docWithLocales, errors, fields, global, mergeLocaleActions, operation, path, req, siblingData, siblingDoc, siblingDocWithLocales, skipValidation, }: Args) => Promise<void>;
28
+ /**
29
+ * This function is responsible for the following actions, in order:
30
+ * - Run condition
31
+ * - Execute field hooks
32
+ * - Validate data
33
+ * - Transform data for storage
34
+ * - Unflatten locales
35
+ */
36
+ export declare const traverseFields: ({ id, collection, context, data, doc, docWithLocales, duplicate, errors, fields, global, mergeLocaleActions, operation, path, req, siblingData, siblingDoc, siblingDocWithLocales, skipValidation, }: Args) => Promise<void>;
28
37
  export {};
29
38
  //# sourceMappingURL=traverseFields.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../../../src/fields/hooks/beforeChange/traverseFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAA;AACrF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAA;AAC7E,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxF,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAI9D,KAAK,IAAI,GAAG;IACV,UAAU,EAAE,yBAAyB,GAAG,IAAI,CAAA;IAC5C,OAAO,EAAE,cAAc,CAAA;IACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC5B,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACvC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IAC5C,MAAM,EAAE,CAAC,KAAK,GAAG,UAAU,CAAC,EAAE,CAAA;IAC9B,MAAM,EAAE,qBAAqB,GAAG,IAAI,CAAA;IACpC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,kBAAkB,EAAE,CAAC,MAAM,IAAI,CAAC,EAAE,CAAA;IAClC,SAAS,EAAE,SAAS,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,cAAc,CAAA;IACnB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACpC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACnC,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9C,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB,CAAA;AAED,eAAO,MAAM,cAAc,8LAkBxB,IAAI,KAAG,QAAQ,IAAI,CA4BrB,CAAA"}
1
+ {"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../../../src/fields/hooks/beforeChange/traverseFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAA;AACrF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAA;AAC7E,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxF,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAI9D,KAAK,IAAI,GAAG;IACV,UAAU,EAAE,yBAAyB,GAAG,IAAI,CAAA;IAC5C,OAAO,EAAE,cAAc,CAAA;IACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC5B,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACvC,SAAS,EAAE,OAAO,CAAA;IAClB,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IAC5C,MAAM,EAAE,CAAC,KAAK,GAAG,UAAU,CAAC,EAAE,CAAA;IAC9B,MAAM,EAAE,qBAAqB,GAAG,IAAI,CAAA;IACpC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,kBAAkB,EAAE,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAA;IAC3C,SAAS,EAAE,SAAS,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,cAAc,CAAA;IACnB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACpC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACnC,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9C,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc,yMAmBxB,IAAI,KAAG,QAAQ,IAAI,CA6BrB,CAAA"}
@@ -1,5 +1,12 @@
1
1
  import { promise } from './promise.js';
2
- export const traverseFields = async ({ id, collection, context, data, doc, docWithLocales, errors, fields, global, mergeLocaleActions, operation, path, req, siblingData, siblingDoc, siblingDocWithLocales, skipValidation })=>{
2
+ /**
3
+ * This function is responsible for the following actions, in order:
4
+ * - Run condition
5
+ * - Execute field hooks
6
+ * - Validate data
7
+ * - Transform data for storage
8
+ * - Unflatten locales
9
+ */ export const traverseFields = async ({ id, collection, context, data, doc, docWithLocales, duplicate, errors, fields, global, mergeLocaleActions, operation, path, req, siblingData, siblingDoc, siblingDocWithLocales, skipValidation })=>{
3
10
  const promises = [];
4
11
  fields.forEach((field)=>{
5
12
  promises.push(promise({
@@ -9,6 +16,7 @@ export const traverseFields = async ({ id, collection, context, data, doc, docWi
9
16
  data,
10
17
  doc,
11
18
  docWithLocales,
19
+ duplicate,
12
20
  errors,
13
21
  field,
14
22
  global,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/fields/hooks/beforeChange/traverseFields.ts"],"sourcesContent":["import type { SanitizedCollectionConfig } from '../../../collections/config/types.js'\nimport type { SanitizedGlobalConfig } from '../../../globals/config/types.js'\nimport type { Operation, PayloadRequest, RequestContext } from '../../../types/index.js'\nimport type { Field, TabAsField } from '../../config/types.js'\n\nimport { promise } from './promise.js'\n\ntype Args = {\n collection: SanitizedCollectionConfig | null\n context: RequestContext\n data: Record<string, unknown>\n doc: Record<string, unknown>\n docWithLocales: Record<string, unknown>\n errors: { field: string; message: string }[]\n fields: (Field | TabAsField)[]\n global: SanitizedGlobalConfig | null\n id?: number | string\n mergeLocaleActions: (() => void)[]\n operation: Operation\n path: string\n req: PayloadRequest\n siblingData: Record<string, unknown>\n siblingDoc: Record<string, unknown>\n siblingDocWithLocales: Record<string, unknown>\n skipValidation?: boolean\n}\n\nexport const traverseFields = async ({\n id,\n collection,\n context,\n data,\n doc,\n docWithLocales,\n errors,\n fields,\n global,\n mergeLocaleActions,\n operation,\n path,\n req,\n siblingData,\n siblingDoc,\n siblingDocWithLocales,\n skipValidation,\n}: Args): Promise<void> => {\n const promises = []\n\n fields.forEach((field) => {\n promises.push(\n promise({\n id,\n collection,\n context,\n data,\n doc,\n docWithLocales,\n errors,\n field,\n global,\n mergeLocaleActions,\n operation,\n path,\n req,\n siblingData,\n siblingDoc,\n siblingDocWithLocales,\n skipValidation,\n }),\n )\n })\n\n await Promise.all(promises)\n}\n"],"names":["promise","traverseFields","id","collection","context","data","doc","docWithLocales","errors","fields","global","mergeLocaleActions","operation","path","req","siblingData","siblingDoc","siblingDocWithLocales","skipValidation","promises","forEach","field","push","Promise","all"],"mappings":"AAKA,SAASA,OAAO,QAAQ,eAAc;AAsBtC,OAAO,MAAMC,iBAAiB,OAAO,EACnCC,EAAE,EACFC,UAAU,EACVC,OAAO,EACPC,IAAI,EACJC,GAAG,EACHC,cAAc,EACdC,MAAM,EACNC,MAAM,EACNC,MAAM,EACNC,kBAAkB,EAClBC,SAAS,EACTC,IAAI,EACJC,GAAG,EACHC,WAAW,EACXC,UAAU,EACVC,qBAAqB,EACrBC,cAAc,EACT;IACL,MAAMC,WAAW,EAAE;IAEnBV,OAAOW,OAAO,CAAC,CAACC;QACdF,SAASG,IAAI,CACXtB,QAAQ;YACNE;YACAC;YACAC;YACAC;YACAC;YACAC;YACAC;YACAa;YACAX;YACAC;YACAC;YACAC;YACAC;YACAC;YACAC;YACAC;YACAC;QACF;IAEJ;IAEA,MAAMK,QAAQC,GAAG,CAACL;AACpB,EAAC"}
1
+ {"version":3,"sources":["../../../../src/fields/hooks/beforeChange/traverseFields.ts"],"sourcesContent":["import type { SanitizedCollectionConfig } from '../../../collections/config/types.js'\nimport type { SanitizedGlobalConfig } from '../../../globals/config/types.js'\nimport type { Operation, PayloadRequest, RequestContext } from '../../../types/index.js'\nimport type { Field, TabAsField } from '../../config/types.js'\n\nimport { promise } from './promise.js'\n\ntype Args = {\n collection: SanitizedCollectionConfig | null\n context: RequestContext\n data: Record<string, unknown>\n doc: Record<string, unknown>\n docWithLocales: Record<string, unknown>\n duplicate: boolean\n errors: { field: string; message: string }[]\n fields: (Field | TabAsField)[]\n global: SanitizedGlobalConfig | null\n id?: number | string\n mergeLocaleActions: (() => Promise<void>)[]\n operation: Operation\n path: string\n req: PayloadRequest\n siblingData: Record<string, unknown>\n siblingDoc: Record<string, unknown>\n siblingDocWithLocales: Record<string, unknown>\n skipValidation?: boolean\n}\n\n/**\n * This function is responsible for the following actions, in order:\n * - Run condition\n * - Execute field hooks\n * - Validate data\n * - Transform data for storage\n * - Unflatten locales\n */\nexport const traverseFields = async ({\n id,\n collection,\n context,\n data,\n doc,\n docWithLocales,\n duplicate,\n errors,\n fields,\n global,\n mergeLocaleActions,\n operation,\n path,\n req,\n siblingData,\n siblingDoc,\n siblingDocWithLocales,\n skipValidation,\n}: Args): Promise<void> => {\n const promises = []\n\n fields.forEach((field) => {\n promises.push(\n promise({\n id,\n collection,\n context,\n data,\n doc,\n docWithLocales,\n duplicate,\n errors,\n field,\n global,\n mergeLocaleActions,\n operation,\n path,\n req,\n siblingData,\n siblingDoc,\n siblingDocWithLocales,\n skipValidation,\n }),\n )\n })\n\n await Promise.all(promises)\n}\n"],"names":["promise","traverseFields","id","collection","context","data","doc","docWithLocales","duplicate","errors","fields","global","mergeLocaleActions","operation","path","req","siblingData","siblingDoc","siblingDocWithLocales","skipValidation","promises","forEach","field","push","Promise","all"],"mappings":"AAKA,SAASA,OAAO,QAAQ,eAAc;AAuBtC;;;;;;;CAOC,GACD,OAAO,MAAMC,iBAAiB,OAAO,EACnCC,EAAE,EACFC,UAAU,EACVC,OAAO,EACPC,IAAI,EACJC,GAAG,EACHC,cAAc,EACdC,SAAS,EACTC,MAAM,EACNC,MAAM,EACNC,MAAM,EACNC,kBAAkB,EAClBC,SAAS,EACTC,IAAI,EACJC,GAAG,EACHC,WAAW,EACXC,UAAU,EACVC,qBAAqB,EACrBC,cAAc,EACT;IACL,MAAMC,WAAW,EAAE;IAEnBV,OAAOW,OAAO,CAAC,CAACC;QACdF,SAASG,IAAI,CACXvB,QAAQ;YACNE;YACAC;YACAC;YACAC;YACAC;YACAC;YACAC;YACAC;YACAa;YACAX;YACAC;YACAC;YACAC;YACAC;YACAC;YACAC;YACAC;YACAC;QACF;IAEJ;IAEA,MAAMK,QAAQC,GAAG,CAACL;AACpB,EAAC"}
@@ -13,6 +13,14 @@ type Args<T> = {
13
13
  overrideAccess: boolean;
14
14
  req: PayloadRequest;
15
15
  };
16
- export declare const beforeValidate: <T extends Record<string, unknown>>({ id, collection, context, data: incomingData, doc, duplicate, global, operation, overrideAccess, req, }: Args<T>) => Promise<T>;
16
+ /**
17
+ * This function is responsible for the following actions, in order:
18
+ * - Sanitize incoming data
19
+ * - Execute field hooks
20
+ * - Execute field access control
21
+ * - Merge original document data into incoming data
22
+ * - Compute default values for undefined fields
23
+ */
24
+ export declare const beforeValidate: <T extends Record<string, unknown>>({ id, collection, context, data: incomingData, doc, global, operation, overrideAccess, req, }: Args<T>) => Promise<T>;
17
25
  export {};
18
26
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/fields/hooks/beforeValidate/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAA;AACrF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAA;AAC7E,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAK7E,KAAK,IAAI,CAAC,CAAC,IAAI;IACb,UAAU,EAAE,yBAAyB,GAAG,IAAI,CAAA;IAC5C,OAAO,EAAE,cAAc,CAAA;IACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,CAAA;IACjC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,CAAA;IACjC,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,MAAM,EAAE,qBAAqB,GAAG,IAAI,CAAA;IACpC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,SAAS,EAAE,QAAQ,GAAG,QAAQ,CAAA;IAC9B,cAAc,EAAE,OAAO,CAAA;IACvB,GAAG,EAAE,cAAc,CAAA;CACpB,CAAA;AAED,eAAO,MAAM,cAAc,gJAWxB,KAAK,CAAC,CAAC,KAAG,QAAQ,CAAC,CAoBrB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/fields/hooks/beforeValidate/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAA;AACrF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAA;AAC7E,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAK7E,KAAK,IAAI,CAAC,CAAC,IAAI;IACb,UAAU,EAAE,yBAAyB,GAAG,IAAI,CAAA;IAC5C,OAAO,EAAE,cAAc,CAAA;IACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,CAAA;IACjC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,CAAA;IACjC,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,MAAM,EAAE,qBAAqB,GAAG,IAAI,CAAA;IACpC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,SAAS,EAAE,QAAQ,GAAG,QAAQ,CAAA;IAC9B,cAAc,EAAE,OAAO,CAAA;IACvB,GAAG,EAAE,cAAc,CAAA;CACpB,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc,qIAUxB,KAAK,CAAC,CAAC,KAAG,QAAQ,CAAC,CAmBrB,CAAA"}
@@ -1,6 +1,13 @@
1
1
  import { deepCopyObject } from '../../../utilities/deepCopyObject.js';
2
2
  import { traverseFields } from './traverseFields.js';
3
- export const beforeValidate = async ({ id, collection, context, data: incomingData, doc, duplicate = false, global, operation, overrideAccess, req })=>{
3
+ /**
4
+ * This function is responsible for the following actions, in order:
5
+ * - Sanitize incoming data
6
+ * - Execute field hooks
7
+ * - Execute field access control
8
+ * - Merge original document data into incoming data
9
+ * - Compute default values for undefined fields
10
+ */ export const beforeValidate = async ({ id, collection, context, data: incomingData, doc, global, operation, overrideAccess, req })=>{
4
11
  const data = deepCopyObject(incomingData);
5
12
  await traverseFields({
6
13
  id,
@@ -8,7 +15,6 @@ export const beforeValidate = async ({ id, collection, context, data: incomingDa
8
15
  context,
9
16
  data,
10
17
  doc,
11
- duplicate,
12
18
  fields: collection?.fields || global?.fields,
13
19
  global,
14
20
  operation,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/fields/hooks/beforeValidate/index.ts"],"sourcesContent":["import type { SanitizedCollectionConfig } from '../../../collections/config/types.js'\nimport type { SanitizedGlobalConfig } from '../../../globals/config/types.js'\nimport type { PayloadRequest, RequestContext } from '../../../types/index.js'\n\nimport { deepCopyObject } from '../../../utilities/deepCopyObject.js'\nimport { traverseFields } from './traverseFields.js'\n\ntype Args<T> = {\n collection: SanitizedCollectionConfig | null\n context: RequestContext\n data: Record<string, unknown> | T\n doc?: Record<string, unknown> | T\n duplicate?: boolean\n global: SanitizedGlobalConfig | null\n id?: number | string\n operation: 'create' | 'update'\n overrideAccess: boolean\n req: PayloadRequest\n}\n\nexport const beforeValidate = async <T extends Record<string, unknown>>({\n id,\n collection,\n context,\n data: incomingData,\n doc,\n duplicate = false,\n global,\n operation,\n overrideAccess,\n req,\n}: Args<T>): Promise<T> => {\n const data = deepCopyObject(incomingData)\n\n await traverseFields({\n id,\n collection,\n context,\n data,\n doc,\n duplicate,\n fields: collection?.fields || global?.fields,\n global,\n operation,\n overrideAccess,\n req,\n siblingData: data,\n siblingDoc: doc,\n })\n\n return data\n}\n"],"names":["deepCopyObject","traverseFields","beforeValidate","id","collection","context","data","incomingData","doc","duplicate","global","operation","overrideAccess","req","fields","siblingData","siblingDoc"],"mappings":"AAIA,SAASA,cAAc,QAAQ,uCAAsC;AACrE,SAASC,cAAc,QAAQ,sBAAqB;AAepD,OAAO,MAAMC,iBAAiB,OAA0C,EACtEC,EAAE,EACFC,UAAU,EACVC,OAAO,EACPC,MAAMC,YAAY,EAClBC,GAAG,EACHC,YAAY,KAAK,EACjBC,MAAM,EACNC,SAAS,EACTC,cAAc,EACdC,GAAG,EACK;IACR,MAAMP,OAAON,eAAeO;IAE5B,MAAMN,eAAe;QACnBE;QACAC;QACAC;QACAC;QACAE;QACAC;QACAK,QAAQV,YAAYU,UAAUJ,QAAQI;QACtCJ;QACAC;QACAC;QACAC;QACAE,aAAaT;QACbU,YAAYR;IACd;IAEA,OAAOF;AACT,EAAC"}
1
+ {"version":3,"sources":["../../../../src/fields/hooks/beforeValidate/index.ts"],"sourcesContent":["import type { SanitizedCollectionConfig } from '../../../collections/config/types.js'\nimport type { SanitizedGlobalConfig } from '../../../globals/config/types.js'\nimport type { PayloadRequest, RequestContext } from '../../../types/index.js'\n\nimport { deepCopyObject } from '../../../utilities/deepCopyObject.js'\nimport { traverseFields } from './traverseFields.js'\n\ntype Args<T> = {\n collection: SanitizedCollectionConfig | null\n context: RequestContext\n data: Record<string, unknown> | T\n doc?: Record<string, unknown> | T\n duplicate?: boolean\n global: SanitizedGlobalConfig | null\n id?: number | string\n operation: 'create' | 'update'\n overrideAccess: boolean\n req: PayloadRequest\n}\n\n/**\n * This function is responsible for the following actions, in order:\n * - Sanitize incoming data\n * - Execute field hooks\n * - Execute field access control\n * - Merge original document data into incoming data\n * - Compute default values for undefined fields\n */\nexport const beforeValidate = async <T extends Record<string, unknown>>({\n id,\n collection,\n context,\n data: incomingData,\n doc,\n global,\n operation,\n overrideAccess,\n req,\n}: Args<T>): Promise<T> => {\n const data = deepCopyObject(incomingData)\n\n await traverseFields({\n id,\n collection,\n context,\n data,\n doc,\n fields: collection?.fields || global?.fields,\n global,\n operation,\n overrideAccess,\n req,\n siblingData: data,\n siblingDoc: doc,\n })\n\n return data\n}\n"],"names":["deepCopyObject","traverseFields","beforeValidate","id","collection","context","data","incomingData","doc","global","operation","overrideAccess","req","fields","siblingData","siblingDoc"],"mappings":"AAIA,SAASA,cAAc,QAAQ,uCAAsC;AACrE,SAASC,cAAc,QAAQ,sBAAqB;AAepD;;;;;;;CAOC,GACD,OAAO,MAAMC,iBAAiB,OAA0C,EACtEC,EAAE,EACFC,UAAU,EACVC,OAAO,EACPC,MAAMC,YAAY,EAClBC,GAAG,EACHC,MAAM,EACNC,SAAS,EACTC,cAAc,EACdC,GAAG,EACK;IACR,MAAMN,OAAON,eAAeO;IAE5B,MAAMN,eAAe;QACnBE;QACAC;QACAC;QACAC;QACAE;QACAK,QAAQT,YAAYS,UAAUJ,QAAQI;QACtCJ;QACAC;QACAC;QACAC;QACAE,aAAaR;QACbS,YAAYP;IACd;IAEA,OAAOF;AACT,EAAC"}
@@ -7,7 +7,6 @@ type Args<T> = {
7
7
  context: RequestContext;
8
8
  data: T;
9
9
  doc: T;
10
- duplicate: boolean;
11
10
  field: Field | TabAsField;
12
11
  global: SanitizedGlobalConfig | null;
13
12
  id?: number | string;
@@ -17,6 +16,6 @@ type Args<T> = {
17
16
  siblingData: Record<string, unknown>;
18
17
  siblingDoc: Record<string, unknown>;
19
18
  };
20
- export declare const promise: <T>({ id, collection, context, data, doc, duplicate, field, global, operation, overrideAccess, req, siblingData, siblingDoc, }: Args<T>) => Promise<void>;
19
+ export declare const promise: <T>({ id, collection, context, data, doc, field, global, operation, overrideAccess, req, siblingData, siblingDoc, }: Args<T>) => Promise<void>;
21
20
  export {};
22
21
  //# 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,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAC7E,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAQ9D,KAAK,IAAI,CAAC,CAAC,IAAI;IACb,UAAU,EAAE,yBAAyB,GAAG,IAAI,CAAA;IAC5C,OAAO,EAAE,cAAc,CAAA;IACvB,IAAI,EAAE,CAAC,CAAA;IACP,GAAG,EAAE,CAAC,CAAA;IACN,SAAS,EAAE,OAAO,CAAA;IAClB,KAAK,EAAE,KAAK,GAAG,UAAU,CAAA;IACzB,MAAM,EAAE,qBAAqB,GAAG,IAAI,CAAA;IACpC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,SAAS,EAAE,QAAQ,GAAG,QAAQ,CAAA;IAC9B,cAAc,EAAE,OAAO,CAAA;IACvB,GAAG,EAAE,cAAc,CAAA;IACnB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACpC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACpC,CAAA;AASD,eAAO,MAAM,OAAO,kIAcjB,KAAK,CAAC,CAAC,KAAG,QAAQ,IAAI,CA+ZxB,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,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAC7E,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAQ9D,KAAK,IAAI,CAAC,CAAC,IAAI;IACb,UAAU,EAAE,yBAAyB,GAAG,IAAI,CAAA;IAC5C,OAAO,EAAE,cAAc,CAAA;IACvB,IAAI,EAAE,CAAC,CAAA;IACP,GAAG,EAAE,CAAC,CAAA;IACN,KAAK,EAAE,KAAK,GAAG,UAAU,CAAA;IACzB,MAAM,EAAE,qBAAqB,GAAG,IAAI,CAAA;IACpC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,SAAS,EAAE,QAAQ,GAAG,QAAQ,CAAA;IAC9B,cAAc,EAAE,OAAO,CAAA;IACvB,GAAG,EAAE,cAAc,CAAA;IACnB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACpC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACpC,CAAA;AASD,eAAO,MAAM,OAAO,uHAajB,KAAK,CAAC,CAAC,KAAG,QAAQ,IAAI,CA+XxB,CAAA"}
@@ -9,7 +9,7 @@ import { traverseFields } from './traverseFields.js';
9
9
  // - Execute field access control
10
10
  // - Merge original document data into incoming data
11
11
  // - Compute default values for undefined fields
12
- export const promise = async ({ id, collection, context, data, doc, duplicate, field, global, operation, overrideAccess, req, siblingData, siblingDoc })=>{
12
+ export const promise = async ({ id, collection, context, data, doc, field, global, operation, overrideAccess, req, siblingData, siblingDoc })=>{
13
13
  if (fieldAffectsData(field)) {
14
14
  if (field.name === 'id') {
15
15
  if (field.type === 'number' && typeof siblingData[field.name] === 'string') {
@@ -181,29 +181,6 @@ export const promise = async ({ id, collection, context, data, doc, duplicate, f
181
181
  });
182
182
  }
183
183
  }
184
- // Execute beforeDuplicate hook
185
- if (duplicate && field.hooks?.beforeDuplicate) {
186
- if (field.hooks?.beforeDuplicate) {
187
- await field.hooks.beforeDuplicate.reduce(async (priorHook, currentHook)=>{
188
- await priorHook;
189
- const hookedValue = await currentHook({
190
- collection,
191
- context,
192
- data,
193
- field,
194
- global,
195
- operation,
196
- originalDoc: doc,
197
- req,
198
- siblingData,
199
- value: siblingData[field.name]
200
- });
201
- if (hookedValue !== undefined) {
202
- siblingData[field.name] = hookedValue;
203
- }
204
- }, Promise.resolve());
205
- }
206
- }
207
184
  }
208
185
  // Traverse subfields
209
186
  switch(field.type){
@@ -219,7 +196,6 @@ export const promise = async ({ id, collection, context, data, doc, duplicate, f
219
196
  context,
220
197
  data,
221
198
  doc,
222
- duplicate,
223
199
  fields: field.fields,
224
200
  global,
225
201
  operation,
@@ -242,7 +218,6 @@ export const promise = async ({ id, collection, context, data, doc, duplicate, f
242
218
  context,
243
219
  data,
244
220
  doc,
245
- duplicate,
246
221
  fields: field.fields,
247
222
  global,
248
223
  operation,
@@ -273,7 +248,6 @@ export const promise = async ({ id, collection, context, data, doc, duplicate, f
273
248
  context,
274
249
  data,
275
250
  doc,
276
- duplicate,
277
251
  fields: block.fields,
278
252
  global,
279
253
  operation,
@@ -297,7 +271,6 @@ export const promise = async ({ id, collection, context, data, doc, duplicate, f
297
271
  context,
298
272
  data,
299
273
  doc,
300
- duplicate,
301
274
  fields: field.fields,
302
275
  global,
303
276
  operation,
@@ -327,7 +300,6 @@ export const promise = async ({ id, collection, context, data, doc, duplicate, f
327
300
  context,
328
301
  data,
329
302
  doc,
330
- duplicate,
331
303
  fields: field.fields,
332
304
  global,
333
305
  operation,
@@ -346,7 +318,6 @@ export const promise = async ({ id, collection, context, data, doc, duplicate, f
346
318
  context,
347
319
  data,
348
320
  doc,
349
- duplicate,
350
321
  fields: field.tabs.map((tab)=>({
351
322
  ...tab,
352
323
  type: 'tab'