payload 3.0.0-beta.107 → 3.0.0-beta.108

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 (206) hide show
  1. package/dist/admin/fields/Join.d.ts +18 -0
  2. package/dist/admin/fields/Join.d.ts.map +1 -0
  3. package/dist/admin/fields/Join.js +3 -0
  4. package/dist/admin/fields/Join.js.map +1 -0
  5. package/dist/admin/types.d.ts +1 -0
  6. package/dist/admin/types.d.ts.map +1 -1
  7. package/dist/admin/types.js.map +1 -1
  8. package/dist/auth/operations/login.d.ts.map +1 -1
  9. package/dist/auth/operations/login.js +1 -0
  10. package/dist/auth/operations/login.js.map +1 -1
  11. package/dist/auth/operations/me.d.ts.map +1 -1
  12. package/dist/auth/operations/me.js +1 -1
  13. package/dist/auth/operations/me.js.map +1 -1
  14. package/dist/auth/operations/refresh.d.ts.map +1 -1
  15. package/dist/auth/operations/refresh.js +1 -0
  16. package/dist/auth/operations/refresh.js.map +1 -1
  17. package/dist/auth/types.d.ts +7 -3
  18. package/dist/auth/types.d.ts.map +1 -1
  19. package/dist/auth/types.js.map +1 -1
  20. package/dist/checkPayloadDependencies.d.ts.map +1 -1
  21. package/dist/checkPayloadDependencies.js +1 -44
  22. package/dist/checkPayloadDependencies.js.map +1 -1
  23. package/dist/collections/config/client.d.ts +2 -2
  24. package/dist/collections/config/client.d.ts.map +1 -1
  25. package/dist/collections/config/client.js.map +1 -1
  26. package/dist/collections/config/sanitize.d.ts.map +1 -1
  27. package/dist/collections/config/sanitize.js +6 -1
  28. package/dist/collections/config/sanitize.js.map +1 -1
  29. package/dist/collections/config/types.d.ts +26 -1
  30. package/dist/collections/config/types.d.ts.map +1 -1
  31. package/dist/collections/config/types.js.map +1 -1
  32. package/dist/collections/operations/delete.d.ts +1 -0
  33. package/dist/collections/operations/delete.d.ts.map +1 -1
  34. package/dist/collections/operations/delete.js +12 -1
  35. package/dist/collections/operations/delete.js.map +1 -1
  36. package/dist/collections/operations/deleteByID.d.ts +1 -0
  37. package/dist/collections/operations/deleteByID.d.ts.map +1 -1
  38. package/dist/collections/operations/deleteByID.js +12 -1
  39. package/dist/collections/operations/deleteByID.js.map +1 -1
  40. package/dist/collections/operations/find.d.ts +3 -1
  41. package/dist/collections/operations/find.d.ts.map +1 -1
  42. package/dist/collections/operations/find.js +43 -2
  43. package/dist/collections/operations/find.js.map +1 -1
  44. package/dist/collections/operations/findByID.d.ts +3 -1
  45. package/dist/collections/operations/findByID.d.ts.map +1 -1
  46. package/dist/collections/operations/findByID.js +38 -1
  47. package/dist/collections/operations/findByID.js.map +1 -1
  48. package/dist/collections/operations/findVersions.js +1 -1
  49. package/dist/collections/operations/findVersions.js.map +1 -1
  50. package/dist/collections/operations/local/delete.d.ts +1 -0
  51. package/dist/collections/operations/local/delete.d.ts.map +1 -1
  52. package/dist/collections/operations/local/delete.js +2 -1
  53. package/dist/collections/operations/local/delete.js.map +1 -1
  54. package/dist/collections/operations/local/find.d.ts +3 -1
  55. package/dist/collections/operations/local/find.d.ts.map +1 -1
  56. package/dist/collections/operations/local/find.js +3 -1
  57. package/dist/collections/operations/local/find.js.map +1 -1
  58. package/dist/collections/operations/local/findByID.d.ts +5 -3
  59. package/dist/collections/operations/local/findByID.d.ts.map +1 -1
  60. package/dist/collections/operations/local/findByID.js +3 -1
  61. package/dist/collections/operations/local/findByID.js.map +1 -1
  62. package/dist/collections/operations/local/update.d.ts +2 -0
  63. package/dist/collections/operations/local/update.d.ts.map +1 -1
  64. package/dist/collections/operations/local/update.js +3 -1
  65. package/dist/collections/operations/local/update.js.map +1 -1
  66. package/dist/collections/operations/update.d.ts +1 -0
  67. package/dist/collections/operations/update.d.ts.map +1 -1
  68. package/dist/collections/operations/update.js +13 -2
  69. package/dist/collections/operations/update.js.map +1 -1
  70. package/dist/collections/operations/updateByID.d.ts +2 -0
  71. package/dist/collections/operations/updateByID.d.ts.map +1 -1
  72. package/dist/collections/operations/updateByID.js +44 -5
  73. package/dist/collections/operations/updateByID.js.map +1 -1
  74. package/dist/config/client.d.ts +1 -1
  75. package/dist/config/client.d.ts.map +1 -1
  76. package/dist/config/client.js +2 -1
  77. package/dist/config/client.js.map +1 -1
  78. package/dist/config/sanitize.d.ts.map +1 -1
  79. package/dist/config/sanitize.js +2 -0
  80. package/dist/config/sanitize.js.map +1 -1
  81. package/dist/database/queryValidation/validateSearchParams.d.ts.map +1 -1
  82. package/dist/database/queryValidation/validateSearchParams.js +6 -1
  83. package/dist/database/queryValidation/validateSearchParams.js.map +1 -1
  84. package/dist/database/types.d.ts +12 -2
  85. package/dist/database/types.d.ts.map +1 -1
  86. package/dist/database/types.js.map +1 -1
  87. package/dist/errors/InvalidFieldJoin.d.ts +6 -0
  88. package/dist/errors/InvalidFieldJoin.d.ts.map +1 -0
  89. package/dist/errors/InvalidFieldJoin.js +8 -0
  90. package/dist/errors/InvalidFieldJoin.js.map +1 -0
  91. package/dist/errors/Locked.d.ts +5 -0
  92. package/dist/errors/Locked.d.ts.map +1 -0
  93. package/dist/errors/Locked.js +9 -0
  94. package/dist/errors/Locked.js.map +1 -0
  95. package/dist/errors/index.d.ts +1 -0
  96. package/dist/errors/index.d.ts.map +1 -1
  97. package/dist/errors/index.js +1 -0
  98. package/dist/errors/index.js.map +1 -1
  99. package/dist/exports/shared.d.ts +1 -1
  100. package/dist/exports/shared.d.ts.map +1 -1
  101. package/dist/exports/shared.js +1 -1
  102. package/dist/exports/shared.js.map +1 -1
  103. package/dist/fields/config/client.d.ts +1 -1
  104. package/dist/fields/config/client.d.ts.map +1 -1
  105. package/dist/fields/config/client.js.map +1 -1
  106. package/dist/fields/config/sanitize.d.ts +7 -2
  107. package/dist/fields/config/sanitize.d.ts.map +1 -1
  108. package/dist/fields/config/sanitize.js +27 -5
  109. package/dist/fields/config/sanitize.js.map +1 -1
  110. package/dist/fields/config/sanitizeJoinField.d.ts +10 -0
  111. package/dist/fields/config/sanitizeJoinField.d.ts.map +1 -0
  112. package/dist/fields/config/sanitizeJoinField.js +65 -0
  113. package/dist/fields/config/sanitizeJoinField.js.map +1 -0
  114. package/dist/fields/config/types.d.ts +107 -47
  115. package/dist/fields/config/types.d.ts.map +1 -1
  116. package/dist/fields/config/types.js +4 -1
  117. package/dist/fields/config/types.js.map +1 -1
  118. package/dist/fields/hooks/afterRead/promise.js +1 -1
  119. package/dist/fields/hooks/afterRead/promise.js.map +1 -1
  120. package/dist/fields/hooks/afterRead/relationshipPopulationPromise.d.ts +2 -2
  121. package/dist/fields/hooks/afterRead/relationshipPopulationPromise.d.ts.map +1 -1
  122. package/dist/fields/hooks/afterRead/relationshipPopulationPromise.js +16 -9
  123. package/dist/fields/hooks/afterRead/relationshipPopulationPromise.js.map +1 -1
  124. package/dist/fields/hooks/beforeChange/index.d.ts +1 -2
  125. package/dist/fields/hooks/beforeChange/index.d.ts.map +1 -1
  126. package/dist/fields/hooks/beforeChange/index.js.map +1 -1
  127. package/dist/fields/hooks/beforeChange/promise.d.ts.map +1 -1
  128. package/dist/fields/hooks/beforeChange/promise.js +1 -1
  129. package/dist/fields/hooks/beforeChange/promise.js.map +1 -1
  130. package/dist/fields/validations.d.ts +11 -1
  131. package/dist/fields/validations.d.ts.map +1 -1
  132. package/dist/fields/validations.js.map +1 -1
  133. package/dist/globals/config/types.d.ts +7 -0
  134. package/dist/globals/config/types.d.ts.map +1 -1
  135. package/dist/globals/config/types.js.map +1 -1
  136. package/dist/globals/operations/findOne.d.ts +1 -0
  137. package/dist/globals/operations/findOne.d.ts.map +1 -1
  138. package/dist/globals/operations/findOne.js +28 -1
  139. package/dist/globals/operations/findOne.js.map +1 -1
  140. package/dist/globals/operations/findVersions.js +1 -1
  141. package/dist/globals/operations/findVersions.js.map +1 -1
  142. package/dist/globals/operations/local/findOne.d.ts +1 -0
  143. package/dist/globals/operations/local/findOne.d.ts.map +1 -1
  144. package/dist/globals/operations/local/findOne.js +2 -1
  145. package/dist/globals/operations/local/findOne.js.map +1 -1
  146. package/dist/globals/operations/local/update.d.ts +2 -0
  147. package/dist/globals/operations/local/update.d.ts.map +1 -1
  148. package/dist/globals/operations/local/update.js +3 -1
  149. package/dist/globals/operations/local/update.js.map +1 -1
  150. package/dist/globals/operations/update.d.ts +2 -0
  151. package/dist/globals/operations/update.d.ts.map +1 -1
  152. package/dist/globals/operations/update.js +47 -7
  153. package/dist/globals/operations/update.js.map +1 -1
  154. package/dist/index.d.ts +12 -6
  155. package/dist/index.d.ts.map +1 -1
  156. package/dist/index.js +28 -10
  157. package/dist/index.js.map +1 -1
  158. package/dist/lockedDocuments/lockedDocumentsCollection.d.ts +4 -0
  159. package/dist/lockedDocuments/lockedDocumentsCollection.d.ts.map +1 -0
  160. package/dist/lockedDocuments/lockedDocumentsCollection.js +31 -0
  161. package/dist/lockedDocuments/lockedDocumentsCollection.js.map +1 -0
  162. package/dist/types/index.d.ts +11 -2
  163. package/dist/types/index.d.ts.map +1 -1
  164. package/dist/types/index.js.map +1 -1
  165. package/dist/utilities/checkDocumentLockStatus.d.ts +13 -0
  166. package/dist/utilities/checkDocumentLockStatus.d.ts.map +1 -0
  167. package/dist/utilities/checkDocumentLockStatus.js +66 -0
  168. package/dist/utilities/checkDocumentLockStatus.js.map +1 -0
  169. package/dist/utilities/configToJSONSchema.d.ts.map +1 -1
  170. package/dist/utilities/configToJSONSchema.js +26 -0
  171. package/dist/utilities/configToJSONSchema.js.map +1 -1
  172. package/dist/utilities/traverseFields.d.ts +36 -0
  173. package/dist/utilities/traverseFields.d.ts.map +1 -0
  174. package/dist/utilities/traverseFields.js +81 -0
  175. package/dist/utilities/traverseFields.js.map +1 -0
  176. package/dist/versions/baseFields.d.ts +1 -0
  177. package/dist/versions/baseFields.d.ts.map +1 -1
  178. package/dist/versions/baseFields.js +14 -0
  179. package/dist/versions/baseFields.js.map +1 -1
  180. package/dist/versions/buildCollectionFields.d.ts +2 -1
  181. package/dist/versions/buildCollectionFields.d.ts.map +1 -1
  182. package/dist/versions/buildCollectionFields.js +27 -8
  183. package/dist/versions/buildCollectionFields.js.map +1 -1
  184. package/dist/versions/buildGlobalFields.d.ts +2 -1
  185. package/dist/versions/buildGlobalFields.d.ts.map +1 -1
  186. package/dist/versions/buildGlobalFields.js +27 -8
  187. package/dist/versions/buildGlobalFields.js.map +1 -1
  188. package/dist/versions/drafts/replaceWithDraftIfAvailable.d.ts.map +1 -1
  189. package/dist/versions/drafts/replaceWithDraftIfAvailable.js +12 -3
  190. package/dist/versions/drafts/replaceWithDraftIfAvailable.js.map +1 -1
  191. package/dist/versions/getLatestCollectionVersion.d.ts +2 -1
  192. package/dist/versions/getLatestCollectionVersion.d.ts.map +1 -1
  193. package/dist/versions/getLatestCollectionVersion.js +38 -13
  194. package/dist/versions/getLatestCollectionVersion.js.map +1 -1
  195. package/dist/versions/getLatestGlobalVersion.d.ts +2 -1
  196. package/dist/versions/getLatestGlobalVersion.d.ts.map +1 -1
  197. package/dist/versions/getLatestGlobalVersion.js +12 -4
  198. package/dist/versions/getLatestGlobalVersion.js.map +1 -1
  199. package/dist/versions/saveVersion.d.ts +3 -1
  200. package/dist/versions/saveVersion.d.ts.map +1 -1
  201. package/dist/versions/saveVersion.js +44 -20
  202. package/dist/versions/saveVersion.js.map +1 -1
  203. package/dist/versions/types.d.ts +1 -0
  204. package/dist/versions/types.d.ts.map +1 -1
  205. package/dist/versions/types.js.map +1 -1
  206. package/package.json +3 -3
@@ -1,7 +1,7 @@
1
1
  import type { SanitizedCollectionConfig } from '../../../collections/config/types.js';
2
2
  import type { SanitizedGlobalConfig } from '../../../globals/config/types.js';
3
3
  import type { JsonObject, Operation, PayloadRequest, RequestContext } from '../../../types/index.js';
4
- type Args<T extends JsonObject> = {
4
+ export type Args<T extends JsonObject> = {
5
5
  collection: null | SanitizedCollectionConfig;
6
6
  context: RequestContext;
7
7
  data: T;
@@ -22,5 +22,4 @@ type Args<T extends JsonObject> = {
22
22
  * - Unflatten locales. The input `data` is the normal document for one locale. The output result will become the document with locales.
23
23
  */
24
24
  export declare const beforeChange: <T extends JsonObject>({ id, collection, context, data: incomingData, doc, docWithLocales, global, operation, req, skipValidation, }: Args<T>) => Promise<T>;
25
- export {};
26
25
  //# 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,UAAU,EAAE,SAAS,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAMpG,KAAK,IAAI,CAAC,CAAC,SAAS,UAAU,IAAI;IAChC,UAAU,EAAE,IAAI,GAAG,yBAAyB,CAAA;IAC5C,OAAO,EAAE,cAAc,CAAA;IACvB,IAAI,EAAE,CAAC,CAAA;IACP,GAAG,EAAE,CAAC,CAAA;IACN,cAAc,EAAE,UAAU,CAAA;IAC1B,MAAM,EAAE,IAAI,GAAG,qBAAqB,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;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,GAAU,CAAC,SAAS,UAAU,iHAWpD,IAAI,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,CAAC,CA4CrB,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,UAAU,EAAE,SAAS,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAKpG,MAAM,MAAM,IAAI,CAAC,CAAC,SAAS,UAAU,IAAI;IACvC,UAAU,EAAE,IAAI,GAAG,yBAAyB,CAAA;IAC5C,OAAO,EAAE,cAAc,CAAA;IACvB,IAAI,EAAE,CAAC,CAAA;IACP,GAAG,EAAE,CAAC,CAAA;IACN,cAAc,EAAE,UAAU,CAAA;IAC1B,MAAM,EAAE,IAAI,GAAG,qBAAqB,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;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,GAAU,CAAC,SAAS,UAAU,iHAWpD,IAAI,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,CAAC,CA4CrB,CAAA"}
@@ -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 { JsonObject, Operation, PayloadRequest, RequestContext } from '../../../types/index.js'\n\nimport { ValidationError } from '../../../errors/index.js'\nimport { deepCopyObjectSimple } from '../../../utilities/deepCopyObject.js'\nimport { traverseFields } from './traverseFields.js'\n\ntype Args<T extends JsonObject> = {\n collection: null | SanitizedCollectionConfig\n context: RequestContext\n data: T\n doc: T\n docWithLocales: JsonObject\n global: null | SanitizedGlobalConfig\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 * - Unflatten locales. The input `data` is the normal document for one locale. The output result will become the document with locales.\n */\nexport const beforeChange = async <T extends JsonObject>({\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 = deepCopyObjectSimple(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 schemaPath: [],\n siblingData: data,\n siblingDoc: doc,\n siblingDocWithLocales: docWithLocales,\n skipValidation,\n })\n\n if (errors.length > 0) {\n throw new ValidationError(\n {\n id,\n collection: collection?.slug,\n errors,\n global: global?.slug,\n },\n req.t,\n )\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","deepCopyObjectSimple","traverseFields","beforeChange","id","collection","context","data","incomingData","doc","docWithLocales","global","operation","req","skipValidation","mergeLocaleActions","errors","fields","path","schemaPath","siblingData","siblingDoc","siblingDocWithLocales","length","slug","t","reduce","priorAction","action","Promise","resolve"],"mappings":"AAIA,SAASA,eAAe,QAAQ,2BAA0B;AAC1D,SAASC,oBAAoB,QAAQ,uCAAsC;AAC3E,SAASC,cAAc,QAAQ,sBAAqB;AAepD;;;;;;;CAOC,GACD,OAAO,MAAMC,eAAe,OAA6B,EACvDC,EAAE,EACFC,UAAU,EACVC,OAAO,EACPC,MAAMC,YAAY,EAClBC,GAAG,EACHC,cAAc,EACdC,MAAM,EACNC,SAAS,EACTC,GAAG,EACHC,cAAc,EACN;IACR,MAAMP,OAAON,qBAAqBO;IAClC,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,EAAE;QACRL;QACAM,YAAY,EAAE;QACdC,aAAab;QACbc,YAAYZ;QACZa,uBAAuBZ;QACvBI;IACF;IAEA,IAAIE,OAAOO,MAAM,GAAG,GAAG;QACrB,MAAM,IAAIvB,gBACR;YACEI;YACAC,YAAYA,YAAYmB;YACxBR;YACAL,QAAQA,QAAQa;QAClB,GACAX,IAAIY,CAAC;IAET;IAEA,MAAMV,mBAAmBW,MAAM,CAAC,OAAOC,aAAaC;QAClD,MAAMD;QACN,MAAMC;IACR,GAAGC,QAAQC,OAAO;IAElB,OAAOvB;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 { JsonObject, Operation, PayloadRequest, RequestContext } from '../../../types/index.js'\n\nimport { ValidationError } from '../../../errors/index.js'\nimport { deepCopyObjectSimple } from '../../../utilities/deepCopyObject.js'\nimport { traverseFields } from './traverseFields.js'\nexport type Args<T extends JsonObject> = {\n collection: null | SanitizedCollectionConfig\n context: RequestContext\n data: T\n doc: T\n docWithLocales: JsonObject\n global: null | SanitizedGlobalConfig\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 * - Unflatten locales. The input `data` is the normal document for one locale. The output result will become the document with locales.\n */\nexport const beforeChange = async <T extends JsonObject>({\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 = deepCopyObjectSimple(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 schemaPath: [],\n siblingData: data,\n siblingDoc: doc,\n siblingDocWithLocales: docWithLocales,\n skipValidation,\n })\n\n if (errors.length > 0) {\n throw new ValidationError(\n {\n id,\n collection: collection?.slug,\n errors,\n global: global?.slug,\n },\n req.t,\n )\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","deepCopyObjectSimple","traverseFields","beforeChange","id","collection","context","data","incomingData","doc","docWithLocales","global","operation","req","skipValidation","mergeLocaleActions","errors","fields","path","schemaPath","siblingData","siblingDoc","siblingDocWithLocales","length","slug","t","reduce","priorAction","action","Promise","resolve"],"mappings":"AAIA,SAASA,eAAe,QAAQ,2BAA0B;AAC1D,SAASC,oBAAoB,QAAQ,uCAAsC;AAC3E,SAASC,cAAc,QAAQ,sBAAqB;AAcpD;;;;;;;CAOC,GACD,OAAO,MAAMC,eAAe,OAA6B,EACvDC,EAAE,EACFC,UAAU,EACVC,OAAO,EACPC,MAAMC,YAAY,EAClBC,GAAG,EACHC,cAAc,EACdC,MAAM,EACNC,SAAS,EACTC,GAAG,EACHC,cAAc,EACN;IACR,MAAMP,OAAON,qBAAqBO;IAClC,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,EAAE;QACRL;QACAM,YAAY,EAAE;QACdC,aAAab;QACbc,YAAYZ;QACZa,uBAAuBZ;QACvBI;IACF;IAEA,IAAIE,OAAOO,MAAM,GAAG,GAAG;QACrB,MAAM,IAAIvB,gBACR;YACEI;YACAC,YAAYA,YAAYmB;YACxBR;YACAL,QAAQA,QAAQa;QAClB,GACAX,IAAIY,CAAC;IAET;IAEA,MAAMV,mBAAmBW,MAAM,CAAC,OAAOC,aAAaC;QAClD,MAAMD;QACN,MAAMC;IACR,GAAGC,QAAQC,OAAO;IAElB,OAAOvB;AACT,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"promise.d.ts","sourceRoot":"","sources":["../../../../src/fields/hooks/beforeChange/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,UAAU,EAAE,SAAS,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACpG,OAAO,KAAK,EAAE,KAAK,EAAiB,UAAU,EAAmB,MAAM,uBAAuB,CAAA;AAS9F,KAAK,IAAI,GAAG;IACV,UAAU,EAAE,IAAI,GAAG,yBAAyB,CAAA;IAC5C,OAAO,EAAE,cAAc,CAAA;IACvB,IAAI,EAAE,UAAU,CAAA;IAChB,GAAG,EAAE,UAAU,CAAA;IACf,cAAc,EAAE,UAAU,CAAA;IAC1B,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,IAAI,GAAG,qBAAqB,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;;OAEG;IACH,UAAU,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;IAC/B;;OAEG;IACH,gBAAgB,EAAE,MAAM,EAAE,CAAA;IAC1B,GAAG,EAAE,cAAc,CAAA;IACnB,WAAW,EAAE,UAAU,CAAA;IACvB,UAAU,EAAE,UAAU,CAAA;IACtB,qBAAqB,CAAC,EAAE,UAAU,CAAA;IAClC,cAAc,EAAE,OAAO,CAAA;CACxB,CAAA;AAUD,eAAO,MAAM,OAAO,qNAmBjB,IAAI,KAAG,OAAO,CAAC,IAAI,CAqarB,CAAA"}
1
+ {"version":3,"file":"promise.d.ts","sourceRoot":"","sources":["../../../../src/fields/hooks/beforeChange/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,UAAU,EAAE,SAAS,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACpG,OAAO,KAAK,EAAE,KAAK,EAAiB,UAAU,EAAmB,MAAM,uBAAuB,CAAA;AAS9F,KAAK,IAAI,GAAG;IACV,UAAU,EAAE,IAAI,GAAG,yBAAyB,CAAA;IAC5C,OAAO,EAAE,cAAc,CAAA;IACvB,IAAI,EAAE,UAAU,CAAA;IAChB,GAAG,EAAE,UAAU,CAAA;IACf,cAAc,EAAE,UAAU,CAAA;IAC1B,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,IAAI,GAAG,qBAAqB,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;;OAEG;IACH,UAAU,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;IAC/B;;OAEG;IACH,gBAAgB,EAAE,MAAM,EAAE,CAAA;IAC1B,GAAG,EAAE,cAAc,CAAA;IACnB,WAAW,EAAE,UAAU,CAAA;IACvB,UAAU,EAAE,UAAU,CAAA;IACtB,qBAAqB,CAAC,EAAE,UAAU,CAAA;IAClC,cAAc,EAAE,OAAO,CAAA;CACxB,CAAA;AAUD,eAAO,MAAM,OAAO,qNAmBjB,IAAI,KAAG,OAAO,CAAC,IAAI,CAuarB,CAAA"}
@@ -219,7 +219,7 @@ export const promise = async ({ id, collection, context, data, doc, docWithLocal
219
219
  const promises = [];
220
220
  rows.forEach((row, i)=>{
221
221
  const rowSiblingDoc = getExistingRowDoc(row, siblingDoc[field.name]);
222
- const rowSiblingDocWithLocales = getExistingRowDoc(row, siblingDocWithLocales[field.name]);
222
+ const rowSiblingDocWithLocales = getExistingRowDoc(row, siblingDocWithLocales ? siblingDocWithLocales[field.name] : {});
223
223
  const blockTypeToMatch = row.blockType || rowSiblingDoc.blockType;
224
224
  const block = field.blocks.find((blockType)=>blockType.slug === blockTypeToMatch);
225
225
  if (block) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/fields/hooks/beforeChange/promise.ts"],"sourcesContent":["import type { RichTextAdapter } from '../../../admin/RichText.js'\nimport type { SanitizedCollectionConfig } from '../../../collections/config/types.js'\nimport type { SanitizedGlobalConfig } from '../../../globals/config/types.js'\nimport type { JsonObject, Operation, PayloadRequest, RequestContext } from '../../../types/index.js'\nimport type { Field, FieldHookArgs, TabAsField, ValidateOptions } from '../../config/types.js'\n\nimport { MissingEditorProp } from '../../../errors/index.js'\nimport { deepMergeWithSourceArrays } from '../../../utilities/deepMerge.js'\nimport { fieldAffectsData, tabHasName } from '../../config/types.js'\nimport { getFieldPaths } from '../../getFieldPaths.js'\nimport { getExistingRowDoc } from './getExistingRowDoc.js'\nimport { traverseFields } from './traverseFields.js'\n\ntype Args = {\n collection: null | SanitizedCollectionConfig\n context: RequestContext\n data: JsonObject\n doc: JsonObject\n docWithLocales: JsonObject\n errors: { field: string; message: string }[]\n field: Field | TabAsField\n global: null | SanitizedGlobalConfig\n id?: number | string\n mergeLocaleActions: (() => Promise<void>)[]\n operation: Operation\n /**\n * The parent's path.\n */\n parentPath: (number | string)[]\n /**\n * The parent's schemaPath (path without indexes).\n */\n parentSchemaPath: string[]\n req: PayloadRequest\n siblingData: JsonObject\n siblingDoc: JsonObject\n siblingDocWithLocales?: JsonObject\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 errors,\n field,\n global,\n mergeLocaleActions,\n operation,\n parentPath,\n parentSchemaPath,\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 const { path: fieldPath, schemaPath: fieldSchemaPath } = getFieldPaths({\n field,\n parentPath,\n parentSchemaPath,\n })\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 path: fieldPath,\n previousSiblingDoc: siblingDoc,\n previousValue: siblingDoc[field.name],\n req,\n schemaPath: parentSchemaPath,\n siblingData,\n siblingDocWithLocales,\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 && 'validate' in field && field.validate) {\n const valueToValidate = siblingData[field.name]\n let jsonError: object\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 collectionSlug: collection?.slug,\n data: deepMergeWithSourceArrays(doc, data),\n jsonError,\n operation,\n preferences: { fields: {} },\n previousValue: siblingDoc[field.name],\n req,\n siblingData: deepMergeWithSourceArrays(siblingDoc, siblingData),\n } as ValidateOptions<any, any, { jsonError: object }, any>)\n\n if (typeof validationResult === 'string') {\n errors.push({\n field: fieldPath.join('.'),\n message: validationResult,\n })\n }\n }\n\n const beforeDuplicateArgs: FieldHookArgs = {\n collection,\n context,\n data,\n field,\n global: undefined,\n path: fieldPath,\n previousSiblingDoc: siblingDoc,\n previousValue: siblingDoc[field.name],\n req,\n schemaPath: parentSchemaPath,\n siblingData,\n siblingDocWithLocales,\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<JsonObject>, locale) => {\n const localizedValues = await localizedValuesPromise\n const fieldValue =\n locale === req.locale\n ? siblingData[field.name]\n : siblingDocWithLocales?.[field.name]?.[locale]\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 }\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') {\n siblingData[field.name] = {}\n }\n if (typeof siblingDoc[field.name] !== 'object') {\n siblingDoc[field.name] = {}\n }\n if (typeof siblingDocWithLocales[field.name] !== 'object') {\n siblingDocWithLocales[field.name] = {}\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: fieldPath,\n req,\n schemaPath: fieldSchemaPath,\n siblingData: siblingData[field.name] as JsonObject,\n siblingDoc: siblingDoc[field.name] as JsonObject,\n siblingDocWithLocales: siblingDocWithLocales[field.name] as JsonObject,\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: [...fieldPath, i],\n req,\n schemaPath: fieldSchemaPath,\n siblingData: row as JsonObject,\n siblingDoc: getExistingRowDoc(row as JsonObject, siblingDoc[field.name]),\n siblingDocWithLocales: getExistingRowDoc(\n row as JsonObject,\n siblingDocWithLocales[field.name],\n ),\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 as JsonObject, siblingDoc[field.name])\n const rowSiblingDocWithLocales = getExistingRowDoc(\n row as JsonObject,\n siblingDocWithLocales[field.name],\n )\n\n const blockTypeToMatch = (row as JsonObject).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: [...fieldPath, i],\n req,\n schemaPath: fieldSchemaPath,\n siblingData: row as JsonObject,\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: fieldPath,\n req,\n schemaPath: fieldSchemaPath,\n siblingData,\n siblingDoc,\n siblingDocWithLocales,\n skipValidation: skipValidationFromHere,\n })\n\n break\n }\n\n case 'tab': {\n let tabSiblingData = siblingData\n let tabSiblingDoc = siblingDoc\n let tabSiblingDocWithLocales = siblingDocWithLocales\n\n if (tabHasName(field)) {\n if (typeof siblingData[field.name] !== 'object') {\n siblingData[field.name] = {}\n }\n if (typeof siblingDoc[field.name] !== 'object') {\n siblingDoc[field.name] = {}\n }\n if (typeof siblingDocWithLocales[field.name] !== 'object') {\n siblingDocWithLocales[field.name] = {}\n }\n\n tabSiblingData = siblingData[field.name] as JsonObject\n tabSiblingDoc = siblingDoc[field.name] as JsonObject\n tabSiblingDocWithLocales = siblingDocWithLocales[field.name] as JsonObject\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: fieldPath,\n req,\n schemaPath: fieldSchemaPath,\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: fieldPath,\n req,\n schemaPath: fieldSchemaPath,\n siblingData,\n siblingDoc,\n siblingDocWithLocales,\n skipValidation: skipValidationFromHere,\n })\n\n break\n }\n\n case 'richText': {\n if (!field?.editor) {\n 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\n }\n if (typeof field?.editor === 'function') {\n throw new Error('Attempted to access unsanitized rich text editor.')\n }\n\n const editor: RichTextAdapter = field?.editor\n\n if (editor?.hooks?.beforeChange?.length) {\n await editor.hooks.beforeChange.reduce(async (priorHook, currentHook) => {\n await priorHook\n\n const hookedValue = await currentHook({\n collection,\n context,\n data,\n docWithLocales,\n errors,\n field,\n global,\n mergeLocaleActions,\n operation,\n originalDoc: doc,\n path: fieldPath,\n previousSiblingDoc: siblingDoc,\n previousValue: siblingDoc[field.name],\n req,\n schemaPath: parentSchemaPath,\n siblingData,\n siblingDocWithLocales,\n skipValidation,\n value: siblingData[field.name],\n })\n\n if (hookedValue !== undefined) {\n siblingData[field.name] = hookedValue\n }\n }, Promise.resolve())\n }\n\n break\n }\n\n default: {\n break\n }\n }\n}\n"],"names":["MissingEditorProp","deepMergeWithSourceArrays","fieldAffectsData","tabHasName","getFieldPaths","getExistingRowDoc","traverseFields","promise","id","collection","context","data","doc","docWithLocales","errors","field","global","mergeLocaleActions","operation","parentPath","parentSchemaPath","req","siblingData","siblingDoc","siblingDocWithLocales","skipValidation","passesCondition","admin","condition","Boolean","user","skipValidationFromHere","localization","payload","config","defaultLocale","operationLocale","locale","path","fieldPath","schemaPath","fieldSchemaPath","localized","includes","type","name","hooks","beforeChange","reduce","priorHook","currentHook","hookedValue","originalDoc","previousSiblingDoc","previousValue","value","undefined","Promise","resolve","validate","valueToValidate","jsonError","JSON","parse","e","validationResult","collectionSlug","slug","preferences","fields","push","join","message","beforeDuplicateArgs","localeData","localeCodes","localizedValuesPromise","localizedValues","fieldValue","Object","keys","length","Array","isArray","coordinates","parseFloat","rows","promises","forEach","row","i","all","rowSiblingDoc","rowSiblingDocWithLocales","blockTypeToMatch","blockType","block","blocks","find","tabSiblingData","tabSiblingDoc","tabSiblingDocWithLocales","tabs","map","tab","editor","Error"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/fields/hooks/beforeChange/promise.ts"],"sourcesContent":["import type { RichTextAdapter } from '../../../admin/RichText.js'\nimport type { SanitizedCollectionConfig } from '../../../collections/config/types.js'\nimport type { SanitizedGlobalConfig } from '../../../globals/config/types.js'\nimport type { JsonObject, Operation, PayloadRequest, RequestContext } from '../../../types/index.js'\nimport type { Field, FieldHookArgs, TabAsField, ValidateOptions } from '../../config/types.js'\n\nimport { MissingEditorProp } from '../../../errors/index.js'\nimport { deepMergeWithSourceArrays } from '../../../utilities/deepMerge.js'\nimport { fieldAffectsData, tabHasName } from '../../config/types.js'\nimport { getFieldPaths } from '../../getFieldPaths.js'\nimport { getExistingRowDoc } from './getExistingRowDoc.js'\nimport { traverseFields } from './traverseFields.js'\n\ntype Args = {\n collection: null | SanitizedCollectionConfig\n context: RequestContext\n data: JsonObject\n doc: JsonObject\n docWithLocales: JsonObject\n errors: { field: string; message: string }[]\n field: Field | TabAsField\n global: null | SanitizedGlobalConfig\n id?: number | string\n mergeLocaleActions: (() => Promise<void>)[]\n operation: Operation\n /**\n * The parent's path.\n */\n parentPath: (number | string)[]\n /**\n * The parent's schemaPath (path without indexes).\n */\n parentSchemaPath: string[]\n req: PayloadRequest\n siblingData: JsonObject\n siblingDoc: JsonObject\n siblingDocWithLocales?: JsonObject\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 errors,\n field,\n global,\n mergeLocaleActions,\n operation,\n parentPath,\n parentSchemaPath,\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 const { path: fieldPath, schemaPath: fieldSchemaPath } = getFieldPaths({\n field,\n parentPath,\n parentSchemaPath,\n })\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 path: fieldPath,\n previousSiblingDoc: siblingDoc,\n previousValue: siblingDoc[field.name],\n req,\n schemaPath: parentSchemaPath,\n siblingData,\n siblingDocWithLocales,\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 && 'validate' in field && field.validate) {\n const valueToValidate = siblingData[field.name]\n let jsonError: object\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(\n valueToValidate as never,\n {\n ...field,\n id,\n collectionSlug: collection?.slug,\n data: deepMergeWithSourceArrays(doc, data),\n jsonError,\n operation,\n preferences: { fields: {} },\n previousValue: siblingDoc[field.name],\n req,\n siblingData: deepMergeWithSourceArrays(siblingDoc, siblingData),\n } as any,\n )\n\n if (typeof validationResult === 'string') {\n errors.push({\n field: fieldPath.join('.'),\n message: validationResult,\n })\n }\n }\n\n const beforeDuplicateArgs: FieldHookArgs = {\n collection,\n context,\n data,\n field,\n global: undefined,\n path: fieldPath,\n previousSiblingDoc: siblingDoc,\n previousValue: siblingDoc[field.name],\n req,\n schemaPath: parentSchemaPath,\n siblingData,\n siblingDocWithLocales,\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<JsonObject>, locale) => {\n const localizedValues = await localizedValuesPromise\n const fieldValue =\n locale === req.locale\n ? siblingData[field.name]\n : siblingDocWithLocales?.[field.name]?.[locale]\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 }\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') {\n siblingData[field.name] = {}\n }\n if (typeof siblingDoc[field.name] !== 'object') {\n siblingDoc[field.name] = {}\n }\n if (typeof siblingDocWithLocales[field.name] !== 'object') {\n siblingDocWithLocales[field.name] = {}\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: fieldPath,\n req,\n schemaPath: fieldSchemaPath,\n siblingData: siblingData[field.name] as JsonObject,\n siblingDoc: siblingDoc[field.name] as JsonObject,\n siblingDocWithLocales: siblingDocWithLocales[field.name] as JsonObject,\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: [...fieldPath, i],\n req,\n schemaPath: fieldSchemaPath,\n siblingData: row as JsonObject,\n siblingDoc: getExistingRowDoc(row as JsonObject, siblingDoc[field.name]),\n siblingDocWithLocales: getExistingRowDoc(\n row as JsonObject,\n siblingDocWithLocales[field.name],\n ),\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 if (Array.isArray(rows)) {\n const promises = []\n rows.forEach((row, i) => {\n const rowSiblingDoc = getExistingRowDoc(row as JsonObject, siblingDoc[field.name])\n const rowSiblingDocWithLocales = getExistingRowDoc(\n row as JsonObject,\n siblingDocWithLocales ? siblingDocWithLocales[field.name] : {},\n )\n\n const blockTypeToMatch = (row as JsonObject).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: [...fieldPath, i],\n req,\n schemaPath: fieldSchemaPath,\n siblingData: row as JsonObject,\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: fieldPath,\n req,\n schemaPath: fieldSchemaPath,\n siblingData,\n siblingDoc,\n siblingDocWithLocales,\n skipValidation: skipValidationFromHere,\n })\n\n break\n }\n\n case 'tab': {\n let tabSiblingData = siblingData\n let tabSiblingDoc = siblingDoc\n let tabSiblingDocWithLocales = siblingDocWithLocales\n\n if (tabHasName(field)) {\n if (typeof siblingData[field.name] !== 'object') {\n siblingData[field.name] = {}\n }\n if (typeof siblingDoc[field.name] !== 'object') {\n siblingDoc[field.name] = {}\n }\n if (typeof siblingDocWithLocales[field.name] !== 'object') {\n siblingDocWithLocales[field.name] = {}\n }\n\n tabSiblingData = siblingData[field.name] as JsonObject\n tabSiblingDoc = siblingDoc[field.name] as JsonObject\n tabSiblingDocWithLocales = siblingDocWithLocales[field.name] as JsonObject\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: fieldPath,\n req,\n schemaPath: fieldSchemaPath,\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: fieldPath,\n req,\n schemaPath: fieldSchemaPath,\n siblingData,\n siblingDoc,\n siblingDocWithLocales,\n skipValidation: skipValidationFromHere,\n })\n\n break\n }\n\n case 'richText': {\n if (!field?.editor) {\n 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\n }\n if (typeof field?.editor === 'function') {\n throw new Error('Attempted to access unsanitized rich text editor.')\n }\n\n const editor: RichTextAdapter = field?.editor\n\n if (editor?.hooks?.beforeChange?.length) {\n await editor.hooks.beforeChange.reduce(async (priorHook, currentHook) => {\n await priorHook\n\n const hookedValue = await currentHook({\n collection,\n context,\n data,\n docWithLocales,\n errors,\n field,\n global,\n mergeLocaleActions,\n operation,\n originalDoc: doc,\n path: fieldPath,\n previousSiblingDoc: siblingDoc,\n previousValue: siblingDoc[field.name],\n req,\n schemaPath: parentSchemaPath,\n siblingData,\n siblingDocWithLocales,\n skipValidation,\n value: siblingData[field.name],\n })\n\n if (hookedValue !== undefined) {\n siblingData[field.name] = hookedValue\n }\n }, Promise.resolve())\n }\n\n break\n }\n\n default: {\n break\n }\n }\n}\n"],"names":["MissingEditorProp","deepMergeWithSourceArrays","fieldAffectsData","tabHasName","getFieldPaths","getExistingRowDoc","traverseFields","promise","id","collection","context","data","doc","docWithLocales","errors","field","global","mergeLocaleActions","operation","parentPath","parentSchemaPath","req","siblingData","siblingDoc","siblingDocWithLocales","skipValidation","passesCondition","admin","condition","Boolean","user","skipValidationFromHere","localization","payload","config","defaultLocale","operationLocale","locale","path","fieldPath","schemaPath","fieldSchemaPath","localized","includes","type","name","hooks","beforeChange","reduce","priorHook","currentHook","hookedValue","originalDoc","previousSiblingDoc","previousValue","value","undefined","Promise","resolve","validate","valueToValidate","jsonError","JSON","parse","e","validationResult","collectionSlug","slug","preferences","fields","push","join","message","beforeDuplicateArgs","localeData","localeCodes","localizedValuesPromise","localizedValues","fieldValue","Object","keys","length","Array","isArray","coordinates","parseFloat","rows","promises","forEach","row","i","all","rowSiblingDoc","rowSiblingDocWithLocales","blockTypeToMatch","blockType","block","blocks","find","tabSiblingData","tabSiblingDoc","tabSiblingDocWithLocales","tabs","map","tab","editor","Error"],"mappings":"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"}
@@ -1,5 +1,7 @@
1
- import type { ArrayField, BlocksField, CheckboxField, CodeField, DateField, EmailField, JSONField, NumberField, PointField, RadioField, RelationshipField, RelationshipValue, RichTextField, SelectField, TextareaField, TextField, UploadField, Validate } from './config/types.js';
1
+ import type { ArrayField, BlocksField, CheckboxField, CodeField, DateField, EmailField, JSONField, NumberField, PointField, RadioField, RelationshipField, RelationshipValue, RelationshipValueMany, RelationshipValueSingle, RichTextField, SelectField, TextareaField, TextField, UploadField, Validate } from './config/types.js';
2
2
  export type TextFieldValidation = Validate<string, unknown, unknown, TextField>;
3
+ export type TextFieldManyValidation = Validate<string[], unknown, unknown, TextField>;
4
+ export type TextFieldSingleValidation = Validate<string, unknown, unknown, TextField>;
3
5
  export declare const text: TextFieldValidation;
4
6
  export type PasswordFieldValidation = Validate<string, unknown, unknown, TextField>;
5
7
  export declare const password: PasswordFieldValidation;
@@ -30,16 +32,24 @@ export declare const date: DateFieldValidation;
30
32
  export type RichTextFieldValidation = Validate<object, unknown, unknown, RichTextField>;
31
33
  export declare const richText: RichTextFieldValidation;
32
34
  export type NumberFieldValidation = Validate<number | number[], unknown, unknown, NumberField>;
35
+ export type NumberFieldManyValidation = Validate<number[], unknown, unknown, NumberField>;
36
+ export type NumberFieldSingleValidation = Validate<number, unknown, unknown, NumberField>;
33
37
  export declare const number: NumberFieldValidation;
34
38
  export type ArrayFieldValidation = Validate<unknown[], unknown, unknown, ArrayField>;
35
39
  export declare const array: ArrayFieldValidation;
36
40
  export type BlocksFieldValidation = Validate<unknown, unknown, unknown, BlocksField>;
37
41
  export declare const blocks: BlocksFieldValidation;
38
42
  export type UploadFieldValidation = Validate<unknown, unknown, unknown, UploadField>;
43
+ export type UploadFieldManyValidation = Validate<unknown[], unknown, unknown, UploadField>;
44
+ export type UploadFieldSingleValidation = Validate<unknown, unknown, unknown, UploadField>;
39
45
  export declare const upload: UploadFieldValidation;
40
46
  export type RelationshipFieldValidation = Validate<RelationshipValue, unknown, unknown, RelationshipField>;
47
+ export type RelationshipFieldManyValidation = Validate<RelationshipValueMany, unknown, unknown, RelationshipField>;
48
+ export type RelationshipFieldSingleValidation = Validate<RelationshipValueSingle, unknown, unknown, RelationshipField>;
41
49
  export declare const relationship: RelationshipFieldValidation;
42
50
  export type SelectFieldValidation = Validate<string | string[], unknown, unknown, SelectField>;
51
+ export type SelectFieldManyValidation = Validate<string[], unknown, unknown, SelectField>;
52
+ export type SelectFieldSingleValidation = Validate<string, unknown, unknown, SelectField>;
43
53
  export declare const select: SelectFieldValidation;
44
54
  export type RadioFieldValidation = Validate<unknown, unknown, unknown, RadioField>;
45
55
  export declare const radio: RadioFieldValidation;
@@ -1 +1 @@
1
- {"version":3,"file":"validations.d.ts","sourceRoot":"","sources":["../../src/fields/validations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validations.d.ts","sourceRoot":"","sources":["../../src/fields/validations.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/fields/validations.ts"],"sourcesContent":["import Ajv from 'ajv'\nimport ObjectIdImport from 'bson-objectid'\n\nconst ObjectId = (ObjectIdImport.default ||\n ObjectIdImport) as unknown as typeof ObjectIdImport.default\n\nimport type { RichTextAdapter } from '../admin/types.js'\nimport type { CollectionSlug } from '../index.js'\nimport type { Where } from '../types/index.js'\nimport type {\n ArrayField,\n BlocksField,\n CheckboxField,\n CodeField,\n DateField,\n EmailField,\n JSONField,\n NumberField,\n PointField,\n RadioField,\n RelationshipField,\n RelationshipValue,\n RichTextField,\n SelectField,\n TextareaField,\n TextField,\n UploadField,\n Validate,\n} from './config/types.js'\n\nimport { isNumber } from '../utilities/isNumber.js'\nimport { isValidID } from '../utilities/isValidID.js'\n\nexport type TextFieldValidation = Validate<string, unknown, unknown, TextField>\nexport const text: TextFieldValidation = (\n value,\n {\n hasMany,\n maxLength: fieldMaxLength,\n maxRows,\n minLength,\n minRows,\n req: {\n payload: { config },\n t,\n },\n required,\n },\n) => {\n let maxLength: number\n\n if (!required) {\n if (!value) {\n return true\n }\n }\n\n if (hasMany === true) {\n const lengthValidationResult = validateArrayLength(value, { maxRows, minRows, required, t })\n if (typeof lengthValidationResult === 'string') {\n return lengthValidationResult\n }\n }\n\n if (typeof config?.defaultMaxTextLength === 'number') {\n maxLength = config.defaultMaxTextLength\n }\n if (typeof fieldMaxLength === 'number') {\n maxLength = fieldMaxLength\n }\n\n const stringsToValidate: string[] = Array.isArray(value) ? value : [value]\n\n for (const stringValue of stringsToValidate) {\n const length = stringValue?.length || 0\n\n if (typeof maxLength === 'number' && length > maxLength) {\n return t('validation:shorterThanMax', { label: t('general:value'), maxLength, stringValue })\n }\n\n if (typeof minLength === 'number' && length < minLength) {\n return t('validation:longerThanMin', { label: t('general:value'), minLength, stringValue })\n }\n }\n\n if (required) {\n if (!(typeof value === 'string' || Array.isArray(value)) || value?.length === 0) {\n return t('validation:required')\n }\n }\n\n return true\n}\n\nexport type PasswordFieldValidation = Validate<string, unknown, unknown, TextField>\nexport const password: PasswordFieldValidation = (\n value,\n {\n maxLength: fieldMaxLength,\n minLength = 3,\n req: {\n payload: { config },\n t,\n },\n required,\n },\n) => {\n let maxLength: number\n\n if (typeof config?.defaultMaxTextLength === 'number') {\n maxLength = config.defaultMaxTextLength\n }\n if (typeof fieldMaxLength === 'number') {\n maxLength = fieldMaxLength\n }\n\n if (value && maxLength && value.length > maxLength) {\n return t('validation:shorterThanMax', { maxLength })\n }\n\n if (value && minLength && value.length < minLength) {\n return t('validation:longerThanMin', { minLength })\n }\n\n if (required && !value) {\n return t('validation:required')\n }\n\n return true\n}\n\nexport type ConfirmPasswordFieldValidation = Validate<\n string,\n unknown,\n { password: string },\n TextField\n>\nexport const confirmPassword: ConfirmPasswordFieldValidation = (\n value,\n { req: { t }, required, siblingData },\n) => {\n if (required && !value) {\n return t('validation:required')\n }\n\n if (value && value !== siblingData.password) {\n return t('fields:passwordsDoNotMatch')\n }\n\n return true\n}\n\nexport type EmailFieldValidation = Validate<string, unknown, { username?: string }, EmailField>\nexport const email: EmailFieldValidation = (\n value,\n {\n collectionSlug,\n req: {\n payload: { config },\n t,\n },\n required,\n siblingData,\n },\n) => {\n if (collectionSlug) {\n const collection = config.collections.find(({ slug }) => slug === collectionSlug)\n\n if (\n collection.auth.loginWithUsername &&\n !collection.auth.loginWithUsername?.requireUsername &&\n !collection.auth.loginWithUsername?.requireEmail\n ) {\n if (!value && !siblingData?.username) {\n return t('validation:required')\n }\n }\n }\n\n if ((value && !/\\S[^\\s@]*@\\S+\\.\\S+/.test(value)) || (!value && required)) {\n return t('validation:emailAddress')\n }\n\n return true\n}\n\nexport type UsernameFieldValidation = Validate<string, unknown, { email?: string }, TextField>\nexport const username: UsernameFieldValidation = (\n value,\n {\n collectionSlug,\n req: {\n payload: { config },\n t,\n },\n required,\n siblingData,\n },\n) => {\n let maxLength: number\n\n if (collectionSlug) {\n const collection = config.collections.find(({ slug }) => slug === collectionSlug)\n\n if (\n collection.auth.loginWithUsername &&\n !collection.auth.loginWithUsername?.requireUsername &&\n !collection.auth.loginWithUsername?.requireEmail\n ) {\n if (!value && !siblingData?.email) {\n return t('validation:required')\n }\n }\n }\n\n if (typeof config?.defaultMaxTextLength === 'number') {\n maxLength = config.defaultMaxTextLength\n }\n\n if (value && maxLength && value.length > maxLength) {\n return t('validation:shorterThanMax', { maxLength })\n }\n\n if ((value && !/^[\\w.-]+$/.test(value)) || (!value && required)) {\n return t('validation:username')\n }\n\n return true\n}\n\nexport type TextareaFieldValidation = Validate<string, unknown, unknown, TextareaField>\nexport const textarea: TextareaFieldValidation = (\n value,\n {\n maxLength: fieldMaxLength,\n minLength,\n req: {\n payload: { config },\n t,\n },\n required,\n },\n) => {\n let maxLength: number\n\n if (typeof config?.defaultMaxTextLength === 'number') {\n maxLength = config.defaultMaxTextLength\n }\n if (typeof fieldMaxLength === 'number') {\n maxLength = fieldMaxLength\n }\n if (value && maxLength && value.length > maxLength) {\n return t('validation:shorterThanMax', { maxLength })\n }\n\n if (value && minLength && value.length < minLength) {\n return t('validation:longerThanMin', { minLength })\n }\n\n if (required && !value) {\n return t('validation:required')\n }\n\n return true\n}\n\nexport type CodeFieldValidation = Validate<string, unknown, unknown, CodeField>\nexport const code: CodeFieldValidation = (value, { req: { t }, required }) => {\n if (required && value === undefined) {\n return t('validation:required')\n }\n\n return true\n}\n\nexport type JSONFieldValidation = Validate<\n string,\n unknown,\n unknown,\n { jsonError?: string } & JSONField\n>\nexport const json: JSONFieldValidation = async (\n value,\n { jsonError, jsonSchema, req: { t }, required },\n) => {\n const isNotEmpty = (value) => {\n if (value === undefined || value === null) {\n return false\n }\n\n if (Array.isArray(value) && value.length === 0) {\n return false\n }\n\n if (typeof value === 'object' && Object.keys(value).length === 0) {\n return false\n }\n\n return true\n }\n\n const fetchSchema = ({ schema, uri }: Record<string, unknown>) => {\n if (uri && schema) {\n return schema\n }\n // @ts-expect-error\n return fetch(uri)\n .then((response) => {\n if (!response.ok) {\n throw new Error('Network response was not ok')\n }\n return response.json()\n })\n .then((json) => {\n const jsonSchemaSanitizations = {\n id: undefined,\n $id: json.id,\n $schema: 'http://json-schema.org/draft-07/schema#',\n }\n\n return Object.assign(json, jsonSchemaSanitizations)\n })\n }\n\n if (required && !value) {\n return t('validation:required')\n }\n\n if (jsonError !== undefined) {\n return t('validation:invalidInput')\n }\n\n if (jsonSchema && isNotEmpty(value)) {\n try {\n jsonSchema.schema = await fetchSchema(jsonSchema)\n const { schema } = jsonSchema\n // @ts-expect-error\n const ajv = new Ajv()\n\n if (!ajv.validate(schema, value)) {\n return t(ajv.errorsText())\n }\n } catch (error) {\n return t(error.message)\n }\n }\n return true\n}\n\nexport type CheckboxFieldValidation = Validate<boolean, unknown, unknown, CheckboxField>\nexport const checkbox: CheckboxFieldValidation = (value, { req: { t }, required }) => {\n if ((value && typeof value !== 'boolean') || (required && typeof value !== 'boolean')) {\n return t('validation:trueOrFalse')\n }\n\n return true\n}\n\nexport type DateFieldValidation = Validate<Date, unknown, unknown, DateField>\nexport const date: DateFieldValidation = (value, { req: { t }, required }) => {\n if (value && !isNaN(Date.parse(value.toString()))) {\n return true\n }\n\n if (value) {\n return t('validation:notValidDate', { value })\n }\n\n if (required) {\n return t('validation:required')\n }\n\n return true\n}\n\nexport type RichTextFieldValidation = Validate<object, unknown, unknown, RichTextField>\nexport const richText: RichTextFieldValidation = async (value, options) => {\n if (!options?.editor) {\n throw new Error('richText field has no editor property.')\n }\n if (typeof options?.editor === 'function') {\n throw new Error('Attempted to access unsanitized rich text editor.')\n }\n\n const editor: RichTextAdapter = options?.editor\n\n return editor.validate(value, options)\n}\n\nconst validateArrayLength = (\n value,\n options: {\n maxRows?: number\n minRows?: number\n required?: boolean\n t: (key: string, options?: { [key: string]: number | string }) => string\n },\n) => {\n const { maxRows, minRows, required, t } = options\n\n const arrayLength = Array.isArray(value) ? value.length : value || 0\n\n if (!required && arrayLength === 0) {\n return true\n }\n\n if (minRows && arrayLength < minRows) {\n return t('validation:requiresAtLeast', { count: minRows, label: t('general:rows') })\n }\n\n if (maxRows && arrayLength > maxRows) {\n return t('validation:requiresNoMoreThan', { count: maxRows, label: t('general:rows') })\n }\n\n if (required && !arrayLength) {\n return t('validation:requiresAtLeast', { count: 1, label: t('general:row') })\n }\n\n return true\n}\n\nexport type NumberFieldValidation = Validate<number | number[], unknown, unknown, NumberField>\nexport const number: NumberFieldValidation = (\n value,\n { hasMany, max, maxRows, min, minRows, req: { t }, required },\n) => {\n if (hasMany === true) {\n const lengthValidationResult = validateArrayLength(value, { maxRows, minRows, required, t })\n if (typeof lengthValidationResult === 'string') {\n return lengthValidationResult\n }\n }\n\n if (!value && !isNumber(value)) {\n // if no value is present, validate based on required\n if (required) {\n return t('validation:required')\n }\n if (!required) {\n return true\n }\n }\n\n const numbersToValidate: number[] = Array.isArray(value) ? value : [value]\n\n for (const number of numbersToValidate) {\n if (!isNumber(number)) {\n return t('validation:enterNumber')\n }\n\n const numberValue = parseFloat(number as unknown as string)\n\n if (typeof max === 'number' && numberValue > max) {\n return t('validation:greaterThanMax', { label: t('general:value'), max, value })\n }\n\n if (typeof min === 'number' && numberValue < min) {\n return t('validation:lessThanMin', { label: t('general:value'), min, value })\n }\n }\n\n return true\n}\n\nexport type ArrayFieldValidation = Validate<unknown[], unknown, unknown, ArrayField>\n\nexport const array: ArrayFieldValidation = (value, { maxRows, minRows, req: { t }, required }) => {\n return validateArrayLength(value, { maxRows, minRows, required, t })\n}\n\nexport type BlocksFieldValidation = Validate<unknown, unknown, unknown, BlocksField>\n\nexport const blocks: BlocksFieldValidation = (\n value,\n { maxRows, minRows, req: { t }, required },\n) => {\n return validateArrayLength(value, { maxRows, minRows, required, t })\n}\n\nconst validateFilterOptions: Validate<\n unknown,\n unknown,\n unknown,\n RelationshipField | UploadField\n> = async (\n value,\n { id, data, filterOptions, relationTo, req, req: { payload, t, user }, siblingData },\n) => {\n if (typeof filterOptions !== 'undefined' && value) {\n const options: {\n [collection: string]: (number | string)[]\n } = {}\n\n const falseCollections: CollectionSlug[] = []\n const collections = !Array.isArray(relationTo) ? [relationTo] : relationTo\n const values = Array.isArray(value) ? value : [value]\n\n for (const collection of collections) {\n try {\n let optionFilter =\n typeof filterOptions === 'function'\n ? await filterOptions({\n id,\n data,\n relationTo: collection,\n siblingData,\n user,\n })\n : filterOptions\n\n if (optionFilter === true) {\n optionFilter = null\n }\n\n const valueIDs: (number | string)[] = []\n\n values.forEach((val) => {\n if (typeof val === 'object') {\n if (val?.value) {\n valueIDs.push(val.value)\n } else if (ObjectId.isValid(val)) {\n valueIDs.push(new ObjectId(val).toHexString())\n }\n }\n\n if (typeof val === 'string' || typeof val === 'number') {\n valueIDs.push(val)\n }\n })\n\n if (valueIDs.length > 0) {\n const findWhere: Where = {\n and: [{ id: { in: valueIDs } }],\n }\n\n if (optionFilter && optionFilter !== true) {\n findWhere.and.push(optionFilter)\n }\n\n if (optionFilter === false) {\n falseCollections.push(collection)\n }\n\n const result = await payload.find({\n collection,\n depth: 0,\n limit: 0,\n pagination: false,\n req,\n where: findWhere,\n })\n\n options[collection] = result.docs.map((doc) => doc.id)\n } else {\n options[collection] = []\n }\n } catch (err) {\n req.payload.logger.error({\n err,\n msg: `Error validating filter options for collection ${collection}`,\n })\n options[collection] = []\n }\n }\n\n const invalidRelationships = values.filter((val) => {\n let collection: string\n let requestedID: number | string\n\n if (typeof relationTo === 'string') {\n collection = relationTo\n\n if (typeof val === 'string' || typeof val === 'number') {\n requestedID = val\n }\n\n if (typeof val === 'object' && ObjectId.isValid(val)) {\n requestedID = new ObjectId(val).toHexString()\n }\n }\n\n if (Array.isArray(relationTo) && typeof val === 'object' && val?.relationTo) {\n collection = val.relationTo\n requestedID = val.value\n }\n\n if (falseCollections.find((slug) => relationTo === slug)) {\n return true\n }\n\n if (!options[collection]) {\n return true\n }\n\n return options[collection].indexOf(requestedID) === -1\n })\n\n if (invalidRelationships.length > 0) {\n return invalidRelationships.reduce((err, invalid, i) => {\n return `${err} ${JSON.stringify(invalid)}${\n invalidRelationships.length === i + 1 ? ',' : ''\n } `\n }, t('validation:invalidSelections')) as string\n }\n\n return true\n }\n\n return true\n}\n\nexport type UploadFieldValidation = Validate<unknown, unknown, unknown, UploadField>\n\nexport const upload: UploadFieldValidation = async (value, options) => {\n const {\n maxRows,\n minRows,\n relationTo,\n req: { payload, t },\n required,\n } = options\n\n if (\n ((!value && typeof value !== 'number') || (Array.isArray(value) && value.length === 0)) &&\n required\n ) {\n return t('validation:required')\n }\n\n if (Array.isArray(value) && value.length > 0) {\n if (minRows && value.length < minRows) {\n return t('validation:lessThanMin', {\n label: t('general:rows'),\n min: minRows,\n value: value.length,\n })\n }\n\n if (maxRows && value.length > maxRows) {\n return t('validation:greaterThanMax', {\n label: t('general:rows'),\n max: maxRows,\n value: value.length,\n })\n }\n }\n\n if (typeof value !== 'undefined' && value !== null) {\n const values = Array.isArray(value) ? value : [value]\n\n const invalidRelationships = values.filter((val) => {\n let collectionSlug: string\n let requestedID\n\n if (typeof relationTo === 'string') {\n collectionSlug = relationTo\n\n // custom id\n if (val || typeof val === 'number') {\n requestedID = val\n }\n }\n\n if (Array.isArray(relationTo) && typeof val === 'object' && val?.relationTo) {\n collectionSlug = val.relationTo\n requestedID = val.value\n }\n\n if (requestedID === null) {\n return false\n }\n\n const idType =\n payload.collections[collectionSlug]?.customIDType || payload?.db?.defaultIDType || 'text'\n\n return !isValidID(requestedID, idType)\n })\n\n if (invalidRelationships.length > 0) {\n return `This relationship field has the following invalid relationships: ${invalidRelationships\n .map((err, invalid) => {\n return `${err} ${JSON.stringify(invalid)}`\n })\n .join(', ')}`\n }\n }\n\n return validateFilterOptions(value, options)\n}\n\nexport type RelationshipFieldValidation = Validate<\n RelationshipValue,\n unknown,\n unknown,\n RelationshipField\n>\nexport const relationship: RelationshipFieldValidation = async (value, options) => {\n const {\n maxRows,\n minRows,\n relationTo,\n req: { payload, t },\n required,\n } = options\n\n if (\n ((!value && typeof value !== 'number') || (Array.isArray(value) && value.length === 0)) &&\n required\n ) {\n return t('validation:required')\n }\n\n if (Array.isArray(value) && value.length > 0) {\n if (minRows && value.length < minRows) {\n return t('validation:lessThanMin', {\n label: t('general:rows'),\n min: minRows,\n value: value.length,\n })\n }\n\n if (maxRows && value.length > maxRows) {\n return t('validation:greaterThanMax', {\n label: t('general:rows'),\n max: maxRows,\n value: value.length,\n })\n }\n }\n\n if (typeof value !== 'undefined' && value !== null) {\n const values = Array.isArray(value) ? value : [value]\n\n const invalidRelationships = values.filter((val) => {\n let collectionSlug: string\n let requestedID\n\n if (typeof relationTo === 'string') {\n collectionSlug = relationTo\n\n // custom id\n if (val || typeof val === 'number') {\n requestedID = val\n }\n }\n\n if (Array.isArray(relationTo) && typeof val === 'object' && val?.relationTo) {\n collectionSlug = val.relationTo\n requestedID = val.value\n }\n\n if (requestedID === null) {\n return false\n }\n\n const idType =\n payload.collections[collectionSlug]?.customIDType || payload?.db?.defaultIDType || 'text'\n\n return !isValidID(requestedID, idType)\n })\n\n if (invalidRelationships.length > 0) {\n return `This relationship field has the following invalid relationships: ${invalidRelationships\n .map((err, invalid) => {\n return `${err} ${JSON.stringify(invalid)}`\n })\n .join(', ')}`\n }\n }\n\n return validateFilterOptions(value, options)\n}\n\nexport type SelectFieldValidation = Validate<string | string[], unknown, unknown, SelectField>\nexport const select: SelectFieldValidation = (\n value,\n { hasMany, options, req: { t }, required },\n) => {\n if (\n Array.isArray(value) &&\n value.some(\n (input) =>\n !options.some(\n (option) => option === input || (typeof option !== 'string' && option?.value === input),\n ),\n )\n ) {\n return t('validation:invalidSelection')\n }\n\n if (\n typeof value === 'string' &&\n !options.some(\n (option) => option === value || (typeof option !== 'string' && option.value === value),\n )\n ) {\n return t('validation:invalidSelection')\n }\n\n if (\n required &&\n (typeof value === 'undefined' ||\n value === null ||\n (hasMany && Array.isArray(value) && (value as [])?.length === 0))\n ) {\n return t('validation:required')\n }\n\n return true\n}\n\nexport type RadioFieldValidation = Validate<unknown, unknown, unknown, RadioField>\nexport const radio: RadioFieldValidation = (value, { options, req: { t }, required }) => {\n if (value) {\n const valueMatchesOption = options.some(\n (option) => option === value || (typeof option !== 'string' && option.value === value),\n )\n return valueMatchesOption || t('validation:invalidSelection')\n }\n\n return required ? t('validation:required') : true\n}\n\nexport type PointFieldValidation = Validate<\n [number | string, number | string],\n unknown,\n unknown,\n PointField\n>\nexport const point: PointFieldValidation = (value = ['', ''], { req: { t }, required }) => {\n const lng = parseFloat(String(value[0]))\n const lat = parseFloat(String(value[1]))\n if (\n required &&\n ((value[0] && value[1] && typeof lng !== 'number' && typeof lat !== 'number') ||\n Number.isNaN(lng) ||\n Number.isNaN(lat) ||\n (Array.isArray(value) && value.length !== 2))\n ) {\n return t('validation:requiresTwoNumbers')\n }\n\n if ((value[1] && Number.isNaN(lng)) || (value[0] && Number.isNaN(lat))) {\n return t('validation:invalidInput')\n }\n\n return true\n}\n\nexport default {\n array,\n blocks,\n checkbox,\n code,\n confirmPassword,\n date,\n email,\n json,\n number,\n password,\n point,\n radio,\n relationship,\n richText,\n select,\n text,\n textarea,\n upload,\n}\n"],"names":["Ajv","ObjectIdImport","ObjectId","default","isNumber","isValidID","text","value","hasMany","maxLength","fieldMaxLength","maxRows","minLength","minRows","req","payload","config","t","required","lengthValidationResult","validateArrayLength","defaultMaxTextLength","stringsToValidate","Array","isArray","stringValue","length","label","password","confirmPassword","siblingData","email","collectionSlug","collection","collections","find","slug","auth","loginWithUsername","requireUsername","requireEmail","username","test","textarea","code","undefined","json","jsonError","jsonSchema","isNotEmpty","Object","keys","fetchSchema","schema","uri","fetch","then","response","ok","Error","jsonSchemaSanitizations","id","$id","$schema","assign","ajv","validate","errorsText","error","message","checkbox","date","isNaN","Date","parse","toString","richText","options","editor","arrayLength","count","number","max","min","numbersToValidate","numberValue","parseFloat","array","blocks","validateFilterOptions","data","filterOptions","relationTo","user","falseCollections","values","optionFilter","valueIDs","forEach","val","push","isValid","toHexString","findWhere","and","in","result","depth","limit","pagination","where","docs","map","doc","err","logger","msg","invalidRelationships","filter","requestedID","indexOf","reduce","invalid","i","JSON","stringify","upload","idType","customIDType","db","defaultIDType","join","relationship","select","some","input","option","radio","valueMatchesOption","point","lng","String","lat","Number"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/fields/validations.ts"],"sourcesContent":["import Ajv from 'ajv'\nimport ObjectIdImport from 'bson-objectid'\n\nconst ObjectId = (ObjectIdImport.default ||\n ObjectIdImport) as unknown as typeof ObjectIdImport.default\n\nimport type { RichTextAdapter } from '../admin/types.js'\nimport type { CollectionSlug } from '../index.js'\nimport type { Where } from '../types/index.js'\nimport type {\n ArrayField,\n BlocksField,\n CheckboxField,\n CodeField,\n DateField,\n EmailField,\n JSONField,\n NumberField,\n PointField,\n RadioField,\n RelationshipField,\n RelationshipValue,\n RelationshipValueMany,\n RelationshipValueSingle,\n RichTextField,\n SelectField,\n TextareaField,\n TextField,\n UploadField,\n Validate,\n} from './config/types.js'\n\nimport { isNumber } from '../utilities/isNumber.js'\nimport { isValidID } from '../utilities/isValidID.js'\n\nexport type TextFieldValidation = Validate<string, unknown, unknown, TextField>\n\nexport type TextFieldManyValidation = Validate<string[], unknown, unknown, TextField>\n\nexport type TextFieldSingleValidation = Validate<string, unknown, unknown, TextField>\n\nexport const text: TextFieldValidation = (\n value,\n {\n hasMany,\n maxLength: fieldMaxLength,\n maxRows,\n minLength,\n minRows,\n req: {\n payload: { config },\n t,\n },\n required,\n },\n) => {\n let maxLength: number\n\n if (!required) {\n if (!value) {\n return true\n }\n }\n\n if (hasMany === true) {\n const lengthValidationResult = validateArrayLength(value, { maxRows, minRows, required, t })\n if (typeof lengthValidationResult === 'string') {\n return lengthValidationResult\n }\n }\n\n if (typeof config?.defaultMaxTextLength === 'number') {\n maxLength = config.defaultMaxTextLength\n }\n if (typeof fieldMaxLength === 'number') {\n maxLength = fieldMaxLength\n }\n\n const stringsToValidate: string[] = Array.isArray(value) ? value : [value]\n\n for (const stringValue of stringsToValidate) {\n const length = stringValue?.length || 0\n\n if (typeof maxLength === 'number' && length > maxLength) {\n return t('validation:shorterThanMax', { label: t('general:value'), maxLength, stringValue })\n }\n\n if (typeof minLength === 'number' && length < minLength) {\n return t('validation:longerThanMin', { label: t('general:value'), minLength, stringValue })\n }\n }\n\n if (required) {\n if (!(typeof value === 'string' || Array.isArray(value)) || value?.length === 0) {\n return t('validation:required')\n }\n }\n\n return true\n}\n\nexport type PasswordFieldValidation = Validate<string, unknown, unknown, TextField>\n\nexport const password: PasswordFieldValidation = (\n value,\n {\n maxLength: fieldMaxLength,\n minLength = 3,\n req: {\n payload: { config },\n t,\n },\n required,\n },\n) => {\n let maxLength: number\n\n if (typeof config?.defaultMaxTextLength === 'number') {\n maxLength = config.defaultMaxTextLength\n }\n if (typeof fieldMaxLength === 'number') {\n maxLength = fieldMaxLength\n }\n\n if (value && maxLength && value.length > maxLength) {\n return t('validation:shorterThanMax', { maxLength })\n }\n\n if (value && minLength && value.length < minLength) {\n return t('validation:longerThanMin', { minLength })\n }\n\n if (required && !value) {\n return t('validation:required')\n }\n\n return true\n}\n\nexport type ConfirmPasswordFieldValidation = Validate<\n string,\n unknown,\n { password: string },\n TextField\n>\n\nexport const confirmPassword: ConfirmPasswordFieldValidation = (\n value,\n { req: { t }, required, siblingData },\n) => {\n if (required && !value) {\n return t('validation:required')\n }\n\n if (value && value !== siblingData.password) {\n return t('fields:passwordsDoNotMatch')\n }\n\n return true\n}\n\nexport type EmailFieldValidation = Validate<string, unknown, { username?: string }, EmailField>\n\nexport const email: EmailFieldValidation = (\n value,\n {\n collectionSlug,\n req: {\n payload: { config },\n t,\n },\n required,\n siblingData,\n },\n) => {\n if (collectionSlug) {\n const collection = config.collections.find(({ slug }) => slug === collectionSlug)\n\n if (\n collection.auth.loginWithUsername &&\n !collection.auth.loginWithUsername?.requireUsername &&\n !collection.auth.loginWithUsername?.requireEmail\n ) {\n if (!value && !siblingData?.username) {\n return t('validation:required')\n }\n }\n }\n\n if ((value && !/\\S[^\\s@]*@\\S+\\.\\S+/.test(value)) || (!value && required)) {\n return t('validation:emailAddress')\n }\n\n return true\n}\n\nexport type UsernameFieldValidation = Validate<string, unknown, { email?: string }, TextField>\n\nexport const username: UsernameFieldValidation = (\n value,\n {\n collectionSlug,\n req: {\n payload: { config },\n t,\n },\n required,\n siblingData,\n },\n) => {\n let maxLength: number\n\n if (collectionSlug) {\n const collection = config.collections.find(({ slug }) => slug === collectionSlug)\n\n if (\n collection.auth.loginWithUsername &&\n !collection.auth.loginWithUsername?.requireUsername &&\n !collection.auth.loginWithUsername?.requireEmail\n ) {\n if (!value && !siblingData?.email) {\n return t('validation:required')\n }\n }\n }\n\n if (typeof config?.defaultMaxTextLength === 'number') {\n maxLength = config.defaultMaxTextLength\n }\n\n if (value && maxLength && value.length > maxLength) {\n return t('validation:shorterThanMax', { maxLength })\n }\n\n if ((value && !/^[\\w.-]+$/.test(value)) || (!value && required)) {\n return t('validation:username')\n }\n\n return true\n}\n\nexport type TextareaFieldValidation = Validate<string, unknown, unknown, TextareaField>\n\nexport const textarea: TextareaFieldValidation = (\n value,\n {\n maxLength: fieldMaxLength,\n minLength,\n req: {\n payload: { config },\n t,\n },\n required,\n },\n) => {\n let maxLength: number\n\n if (typeof config?.defaultMaxTextLength === 'number') {\n maxLength = config.defaultMaxTextLength\n }\n if (typeof fieldMaxLength === 'number') {\n maxLength = fieldMaxLength\n }\n if (value && maxLength && value.length > maxLength) {\n return t('validation:shorterThanMax', { maxLength })\n }\n\n if (value && minLength && value.length < minLength) {\n return t('validation:longerThanMin', { minLength })\n }\n\n if (required && !value) {\n return t('validation:required')\n }\n\n return true\n}\n\nexport type CodeFieldValidation = Validate<string, unknown, unknown, CodeField>\n\nexport const code: CodeFieldValidation = (value, { req: { t }, required }) => {\n if (required && value === undefined) {\n return t('validation:required')\n }\n\n return true\n}\n\nexport type JSONFieldValidation = Validate<\n string,\n unknown,\n unknown,\n { jsonError?: string } & JSONField\n>\n\nexport const json: JSONFieldValidation = async (\n value,\n { jsonError, jsonSchema, req: { t }, required },\n) => {\n const isNotEmpty = (value) => {\n if (value === undefined || value === null) {\n return false\n }\n\n if (Array.isArray(value) && value.length === 0) {\n return false\n }\n\n if (typeof value === 'object' && Object.keys(value).length === 0) {\n return false\n }\n\n return true\n }\n\n const fetchSchema = ({ schema, uri }: Record<string, unknown>) => {\n if (uri && schema) {\n return schema\n }\n // @ts-expect-error\n return fetch(uri)\n .then((response) => {\n if (!response.ok) {\n throw new Error('Network response was not ok')\n }\n return response.json()\n })\n .then((json) => {\n const jsonSchemaSanitizations = {\n id: undefined,\n $id: json.id,\n $schema: 'http://json-schema.org/draft-07/schema#',\n }\n\n return Object.assign(json, jsonSchemaSanitizations)\n })\n }\n\n if (required && !value) {\n return t('validation:required')\n }\n\n if (jsonError !== undefined) {\n return t('validation:invalidInput')\n }\n\n if (jsonSchema && isNotEmpty(value)) {\n try {\n jsonSchema.schema = await fetchSchema(jsonSchema)\n const { schema } = jsonSchema\n // @ts-expect-error\n const ajv = new Ajv()\n\n if (!ajv.validate(schema, value)) {\n return t(ajv.errorsText())\n }\n } catch (error) {\n return t(error.message)\n }\n }\n return true\n}\n\nexport type CheckboxFieldValidation = Validate<boolean, unknown, unknown, CheckboxField>\n\nexport const checkbox: CheckboxFieldValidation = (value, { req: { t }, required }) => {\n if ((value && typeof value !== 'boolean') || (required && typeof value !== 'boolean')) {\n return t('validation:trueOrFalse')\n }\n\n return true\n}\n\nexport type DateFieldValidation = Validate<Date, unknown, unknown, DateField>\n\nexport const date: DateFieldValidation = (value, { req: { t }, required }) => {\n if (value && !isNaN(Date.parse(value.toString()))) {\n return true\n }\n\n if (value) {\n return t('validation:notValidDate', { value })\n }\n\n if (required) {\n return t('validation:required')\n }\n\n return true\n}\n\nexport type RichTextFieldValidation = Validate<object, unknown, unknown, RichTextField>\n\nexport const richText: RichTextFieldValidation = async (value, options) => {\n if (!options?.editor) {\n throw new Error('richText field has no editor property.')\n }\n if (typeof options?.editor === 'function') {\n throw new Error('Attempted to access unsanitized rich text editor.')\n }\n\n const editor: RichTextAdapter = options?.editor\n\n return editor.validate(value, options)\n}\n\nconst validateArrayLength = (\n value,\n options: {\n maxRows?: number\n minRows?: number\n required?: boolean\n t: (key: string, options?: { [key: string]: number | string }) => string\n },\n) => {\n const { maxRows, minRows, required, t } = options\n\n const arrayLength = Array.isArray(value) ? value.length : value || 0\n\n if (!required && arrayLength === 0) {\n return true\n }\n\n if (minRows && arrayLength < minRows) {\n return t('validation:requiresAtLeast', { count: minRows, label: t('general:rows') })\n }\n\n if (maxRows && arrayLength > maxRows) {\n return t('validation:requiresNoMoreThan', { count: maxRows, label: t('general:rows') })\n }\n\n if (required && !arrayLength) {\n return t('validation:requiresAtLeast', { count: 1, label: t('general:row') })\n }\n\n return true\n}\n\nexport type NumberFieldValidation = Validate<number | number[], unknown, unknown, NumberField>\n\nexport type NumberFieldManyValidation = Validate<number[], unknown, unknown, NumberField>\n\nexport type NumberFieldSingleValidation = Validate<number, unknown, unknown, NumberField>\n\nexport const number: NumberFieldValidation = (\n value,\n { hasMany, max, maxRows, min, minRows, req: { t }, required },\n) => {\n if (hasMany === true) {\n const lengthValidationResult = validateArrayLength(value, { maxRows, minRows, required, t })\n if (typeof lengthValidationResult === 'string') {\n return lengthValidationResult\n }\n }\n\n if (!value && !isNumber(value)) {\n // if no value is present, validate based on required\n if (required) {\n return t('validation:required')\n }\n if (!required) {\n return true\n }\n }\n\n const numbersToValidate: number[] = Array.isArray(value) ? value : [value]\n\n for (const number of numbersToValidate) {\n if (!isNumber(number)) {\n return t('validation:enterNumber')\n }\n\n const numberValue = parseFloat(number as unknown as string)\n\n if (typeof max === 'number' && numberValue > max) {\n return t('validation:greaterThanMax', { label: t('general:value'), max, value })\n }\n\n if (typeof min === 'number' && numberValue < min) {\n return t('validation:lessThanMin', { label: t('general:value'), min, value })\n }\n }\n\n return true\n}\n\nexport type ArrayFieldValidation = Validate<unknown[], unknown, unknown, ArrayField>\n\nexport const array: ArrayFieldValidation = (value, { maxRows, minRows, req: { t }, required }) => {\n return validateArrayLength(value, { maxRows, minRows, required, t })\n}\n\nexport type BlocksFieldValidation = Validate<unknown, unknown, unknown, BlocksField>\n\nexport const blocks: BlocksFieldValidation = (\n value,\n { maxRows, minRows, req: { t }, required },\n) => {\n return validateArrayLength(value, { maxRows, minRows, required, t })\n}\n\nconst validateFilterOptions: Validate<\n unknown,\n unknown,\n unknown,\n RelationshipField | UploadField\n> = async (\n value,\n { id, data, filterOptions, relationTo, req, req: { payload, t, user }, siblingData },\n) => {\n if (typeof filterOptions !== 'undefined' && value) {\n const options: {\n [collection: string]: (number | string)[]\n } = {}\n\n const falseCollections: CollectionSlug[] = []\n const collections = !Array.isArray(relationTo) ? [relationTo] : relationTo\n const values = Array.isArray(value) ? value : [value]\n\n for (const collection of collections) {\n try {\n let optionFilter =\n typeof filterOptions === 'function'\n ? await filterOptions({\n id,\n data,\n relationTo: collection,\n siblingData,\n user,\n })\n : filterOptions\n\n if (optionFilter === true) {\n optionFilter = null\n }\n\n const valueIDs: (number | string)[] = []\n\n values.forEach((val) => {\n if (typeof val === 'object') {\n if (val?.value) {\n valueIDs.push(val.value)\n } else if (ObjectId.isValid(val)) {\n valueIDs.push(new ObjectId(val).toHexString())\n }\n }\n\n if (typeof val === 'string' || typeof val === 'number') {\n valueIDs.push(val)\n }\n })\n\n if (valueIDs.length > 0) {\n const findWhere: Where = {\n and: [{ id: { in: valueIDs } }],\n }\n\n if (optionFilter && optionFilter !== true) {\n findWhere.and.push(optionFilter)\n }\n\n if (optionFilter === false) {\n falseCollections.push(collection)\n }\n\n const result = await payload.find({\n collection,\n depth: 0,\n limit: 0,\n pagination: false,\n req,\n where: findWhere,\n })\n\n options[collection] = result.docs.map((doc) => doc.id)\n } else {\n options[collection] = []\n }\n } catch (err) {\n req.payload.logger.error({\n err,\n msg: `Error validating filter options for collection ${collection}`,\n })\n options[collection] = []\n }\n }\n\n const invalidRelationships = values.filter((val) => {\n let collection: string\n let requestedID: number | string\n\n if (typeof relationTo === 'string') {\n collection = relationTo\n\n if (typeof val === 'string' || typeof val === 'number') {\n requestedID = val\n }\n\n if (typeof val === 'object' && ObjectId.isValid(val)) {\n requestedID = new ObjectId(val).toHexString()\n }\n }\n\n if (Array.isArray(relationTo) && typeof val === 'object' && val?.relationTo) {\n collection = val.relationTo\n requestedID = val.value\n }\n\n if (falseCollections.find((slug) => relationTo === slug)) {\n return true\n }\n\n if (!options[collection]) {\n return true\n }\n\n return options[collection].indexOf(requestedID) === -1\n })\n\n if (invalidRelationships.length > 0) {\n return invalidRelationships.reduce((err, invalid, i) => {\n return `${err} ${JSON.stringify(invalid)}${\n invalidRelationships.length === i + 1 ? ',' : ''\n } `\n }, t('validation:invalidSelections')) as string\n }\n\n return true\n }\n\n return true\n}\n\nexport type UploadFieldValidation = Validate<unknown, unknown, unknown, UploadField>\n\nexport type UploadFieldManyValidation = Validate<unknown[], unknown, unknown, UploadField>\n\nexport type UploadFieldSingleValidation = Validate<unknown, unknown, unknown, UploadField>\n\nexport const upload: UploadFieldValidation = async (value, options) => {\n const {\n maxRows,\n minRows,\n relationTo,\n req: { payload, t },\n required,\n } = options\n\n if (\n ((!value && typeof value !== 'number') || (Array.isArray(value) && value.length === 0)) &&\n required\n ) {\n return t('validation:required')\n }\n\n if (Array.isArray(value) && value.length > 0) {\n if (minRows && value.length < minRows) {\n return t('validation:lessThanMin', {\n label: t('general:rows'),\n min: minRows,\n value: value.length,\n })\n }\n\n if (maxRows && value.length > maxRows) {\n return t('validation:greaterThanMax', {\n label: t('general:rows'),\n max: maxRows,\n value: value.length,\n })\n }\n }\n\n if (typeof value !== 'undefined' && value !== null) {\n const values = Array.isArray(value) ? value : [value]\n\n const invalidRelationships = values.filter((val) => {\n let collectionSlug: string\n let requestedID\n\n if (typeof relationTo === 'string') {\n collectionSlug = relationTo\n\n // custom id\n if (val || typeof val === 'number') {\n requestedID = val\n }\n }\n\n if (Array.isArray(relationTo) && typeof val === 'object' && val?.relationTo) {\n collectionSlug = val.relationTo\n requestedID = val.value\n }\n\n if (requestedID === null) {\n return false\n }\n\n const idType =\n payload.collections[collectionSlug]?.customIDType || payload?.db?.defaultIDType || 'text'\n\n return !isValidID(requestedID, idType)\n })\n\n if (invalidRelationships.length > 0) {\n return `This relationship field has the following invalid relationships: ${invalidRelationships\n .map((err, invalid) => {\n return `${err} ${JSON.stringify(invalid)}`\n })\n .join(', ')}`\n }\n }\n\n return validateFilterOptions(value, options)\n}\n\nexport type RelationshipFieldValidation = Validate<\n RelationshipValue,\n unknown,\n unknown,\n RelationshipField\n>\n\nexport type RelationshipFieldManyValidation = Validate<\n RelationshipValueMany,\n unknown,\n unknown,\n RelationshipField\n>\n\nexport type RelationshipFieldSingleValidation = Validate<\n RelationshipValueSingle,\n unknown,\n unknown,\n RelationshipField\n>\n\nexport const relationship: RelationshipFieldValidation = async (value, options) => {\n const {\n maxRows,\n minRows,\n relationTo,\n req: { payload, t },\n required,\n } = options\n\n if (\n ((!value && typeof value !== 'number') || (Array.isArray(value) && value.length === 0)) &&\n required\n ) {\n return t('validation:required')\n }\n\n if (Array.isArray(value) && value.length > 0) {\n if (minRows && value.length < minRows) {\n return t('validation:lessThanMin', {\n label: t('general:rows'),\n min: minRows,\n value: value.length,\n })\n }\n\n if (maxRows && value.length > maxRows) {\n return t('validation:greaterThanMax', {\n label: t('general:rows'),\n max: maxRows,\n value: value.length,\n })\n }\n }\n\n if (typeof value !== 'undefined' && value !== null) {\n const values = Array.isArray(value) ? value : [value]\n\n const invalidRelationships = values.filter((val) => {\n let collectionSlug: string\n let requestedID\n\n if (typeof relationTo === 'string') {\n collectionSlug = relationTo\n\n // custom id\n if (val || typeof val === 'number') {\n requestedID = val\n }\n }\n\n if (Array.isArray(relationTo) && typeof val === 'object' && val?.relationTo) {\n collectionSlug = val.relationTo\n requestedID = val.value\n }\n\n if (requestedID === null) {\n return false\n }\n\n const idType =\n payload.collections[collectionSlug]?.customIDType || payload?.db?.defaultIDType || 'text'\n\n return !isValidID(requestedID, idType)\n })\n\n if (invalidRelationships.length > 0) {\n return `This relationship field has the following invalid relationships: ${invalidRelationships\n .map((err, invalid) => {\n return `${err} ${JSON.stringify(invalid)}`\n })\n .join(', ')}`\n }\n }\n\n return validateFilterOptions(value, options)\n}\n\nexport type SelectFieldValidation = Validate<string | string[], unknown, unknown, SelectField>\n\nexport type SelectFieldManyValidation = Validate<string[], unknown, unknown, SelectField>\n\nexport type SelectFieldSingleValidation = Validate<string, unknown, unknown, SelectField>\n\nexport const select: SelectFieldValidation = (\n value,\n { hasMany, options, req: { t }, required },\n) => {\n if (\n Array.isArray(value) &&\n value.some(\n (input) =>\n !options.some(\n (option) => option === input || (typeof option !== 'string' && option?.value === input),\n ),\n )\n ) {\n return t('validation:invalidSelection')\n }\n\n if (\n typeof value === 'string' &&\n !options.some(\n (option) => option === value || (typeof option !== 'string' && option.value === value),\n )\n ) {\n return t('validation:invalidSelection')\n }\n\n if (\n required &&\n (typeof value === 'undefined' ||\n value === null ||\n (hasMany && Array.isArray(value) && (value as [])?.length === 0))\n ) {\n return t('validation:required')\n }\n\n return true\n}\n\nexport type RadioFieldValidation = Validate<unknown, unknown, unknown, RadioField>\n\nexport const radio: RadioFieldValidation = (value, { options, req: { t }, required }) => {\n if (value) {\n const valueMatchesOption = options.some(\n (option) => option === value || (typeof option !== 'string' && option.value === value),\n )\n return valueMatchesOption || t('validation:invalidSelection')\n }\n\n return required ? t('validation:required') : true\n}\n\nexport type PointFieldValidation = Validate<\n [number | string, number | string],\n unknown,\n unknown,\n PointField\n>\n\nexport const point: PointFieldValidation = (value = ['', ''], { req: { t }, required }) => {\n const lng = parseFloat(String(value[0]))\n const lat = parseFloat(String(value[1]))\n if (\n required &&\n ((value[0] && value[1] && typeof lng !== 'number' && typeof lat !== 'number') ||\n Number.isNaN(lng) ||\n Number.isNaN(lat) ||\n (Array.isArray(value) && value.length !== 2))\n ) {\n return t('validation:requiresTwoNumbers')\n }\n\n if ((value[1] && Number.isNaN(lng)) || (value[0] && Number.isNaN(lat))) {\n return t('validation:invalidInput')\n }\n\n return true\n}\n\nexport default {\n array,\n blocks,\n checkbox,\n code,\n confirmPassword,\n date,\n email,\n json,\n number,\n password,\n point,\n radio,\n relationship,\n richText,\n select,\n text,\n textarea,\n upload,\n}\n"],"names":["Ajv","ObjectIdImport","ObjectId","default","isNumber","isValidID","text","value","hasMany","maxLength","fieldMaxLength","maxRows","minLength","minRows","req","payload","config","t","required","lengthValidationResult","validateArrayLength","defaultMaxTextLength","stringsToValidate","Array","isArray","stringValue","length","label","password","confirmPassword","siblingData","email","collectionSlug","collection","collections","find","slug","auth","loginWithUsername","requireUsername","requireEmail","username","test","textarea","code","undefined","json","jsonError","jsonSchema","isNotEmpty","Object","keys","fetchSchema","schema","uri","fetch","then","response","ok","Error","jsonSchemaSanitizations","id","$id","$schema","assign","ajv","validate","errorsText","error","message","checkbox","date","isNaN","Date","parse","toString","richText","options","editor","arrayLength","count","number","max","min","numbersToValidate","numberValue","parseFloat","array","blocks","validateFilterOptions","data","filterOptions","relationTo","user","falseCollections","values","optionFilter","valueIDs","forEach","val","push","isValid","toHexString","findWhere","and","in","result","depth","limit","pagination","where","docs","map","doc","err","logger","msg","invalidRelationships","filter","requestedID","indexOf","reduce","invalid","i","JSON","stringify","upload","idType","customIDType","db","defaultIDType","join","relationship","select","some","input","option","radio","valueMatchesOption","point","lng","String","lat","Number"],"mappings":"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"}
@@ -141,6 +141,13 @@ export type GlobalConfig = {
141
141
  beforeValidate?: BeforeValidateHook[];
142
142
  };
143
143
  label?: Record<string, string> | string;
144
+ /**
145
+ * Enables / Disables the ability to lock documents while editing
146
+ * @default true
147
+ */
148
+ lockDocuments?: {
149
+ duration: number;
150
+ } | false;
144
151
  slug: string;
145
152
  /**
146
153
  * Options used in typescript generation
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/globals/config/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/globals/config/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/globals/config/types.ts"],"sourcesContent":["import type { GraphQLNonNull, GraphQLObjectType } from 'graphql'\nimport type { DeepRequired } from 'ts-essentials'\n\nimport type {\n CustomPreviewButton,\n CustomPublishButton,\n CustomSaveButton,\n CustomSaveDraftButton,\n} from '../../admin/types.js'\nimport type {\n Access,\n EditConfig,\n Endpoint,\n EntityDescription,\n EntityDescriptionComponent,\n GeneratePreviewURL,\n LivePreviewConfig,\n MetaConfig,\n} from '../../config/types.js'\nimport type { DBIdentifierName } from '../../database/types.js'\nimport type { Field } from '../../fields/config/types.js'\nimport type { GlobalSlug, TypedGlobal } from '../../index.js'\nimport type { PayloadRequest, RequestContext, Where } from '../../types/index.js'\nimport type { IncomingGlobalVersions, SanitizedGlobalVersions } from '../../versions/types.js'\n\nexport type DataFromGlobalSlug<TSlug extends GlobalSlug> = TypedGlobal[TSlug]\n\nexport type BeforeValidateHook = (args: {\n context: RequestContext\n data?: any\n /** The global which this hook is being run on */\n global: SanitizedGlobalConfig\n originalDoc?: any\n req: PayloadRequest\n}) => any\n\nexport type BeforeChangeHook = (args: {\n context: RequestContext\n data: any\n /** The global which this hook is being run on */\n global: SanitizedGlobalConfig\n originalDoc?: any\n req: PayloadRequest\n}) => any\n\nexport type AfterChangeHook = (args: {\n context: RequestContext\n doc: any\n /** The global which this hook is being run on */\n global: SanitizedGlobalConfig\n previousDoc: any\n req: PayloadRequest\n}) => any\n\nexport type BeforeReadHook = (args: {\n context: RequestContext\n doc: any\n /** The global which this hook is being run on */\n global: SanitizedGlobalConfig\n req: PayloadRequest\n}) => any\n\nexport type AfterReadHook = (args: {\n context: RequestContext\n doc: any\n findMany?: boolean\n /** The global which this hook is being run on */\n global: SanitizedGlobalConfig\n query?: Where\n req: PayloadRequest\n}) => any\n\nexport type GlobalAdminOptions = {\n /**\n * Custom admin components\n */\n components?: {\n elements?: {\n Description?: EntityDescriptionComponent\n /**\n * Replaces the \"Preview\" button\n */\n PreviewButton?: CustomPreviewButton\n /**\n * Replaces the \"Publish\" button\n * + drafts must be enabled\n */\n PublishButton?: CustomPublishButton\n /**\n * Replaces the \"Save\" button\n * + drafts must be disabled\n */\n SaveButton?: CustomSaveButton\n /**\n * Replaces the \"Save Draft\" button\n * + drafts must be enabled\n * + autosave must be disabled\n */\n SaveDraftButton?: CustomSaveDraftButton\n }\n views?: {\n /**\n * Set to a React component to replace the entire Edit View, including all nested routes.\n * Set to an object to replace or modify individual nested routes, or to add new ones.\n */\n edit?: EditConfig\n }\n }\n /** Extension point to add your custom data. Available in server and client. */\n custom?: Record<string, any>\n /**\n * Custom description for collection\n */\n description?: EntityDescription\n /**\n * Place globals into a navigational group\n * */\n group?: Record<string, string> | string\n /**\n * Exclude the global from the admin nav and routes\n */\n hidden?: ((args: { user: PayloadRequest['user'] }) => boolean) | boolean\n /**\n * Hide the API URL within the Edit View\n */\n hideAPIURL?: boolean\n /**\n * Live preview options\n */\n livePreview?: LivePreviewConfig\n meta?: MetaConfig\n /**\n * Function to generate custom preview URL\n */\n preview?: GeneratePreviewURL\n}\n\nexport type GlobalConfig = {\n access?: {\n read?: Access\n readDrafts?: Access\n readVersions?: Access\n update?: Access\n }\n admin?: GlobalAdminOptions\n /** Extension point to add your custom data. Server only. */\n custom?: Record<string, any>\n /**\n * Customize the SQL table name\n */\n dbName?: DBIdentifierName\n endpoints?: false | Omit<Endpoint, 'root'>[]\n fields: Field[]\n graphQL?:\n | {\n name?: string\n }\n | false\n hooks?: {\n afterChange?: AfterChangeHook[]\n afterRead?: AfterReadHook[]\n beforeChange?: BeforeChangeHook[]\n beforeRead?: BeforeReadHook[]\n beforeValidate?: BeforeValidateHook[]\n }\n label?: Record<string, string> | string\n slug: string\n /**\n * Options used in typescript generation\n */\n typescript?: {\n /**\n * Typescript generation name given to the interface type\n */\n interface?: string\n }\n versions?: boolean | IncomingGlobalVersions\n}\n\nexport interface SanitizedGlobalConfig\n extends Omit<DeepRequired<GlobalConfig>, 'endpoints' | 'fields' | 'versions'> {\n endpoints: Endpoint[] | false\n fields: Field[]\n versions: SanitizedGlobalVersions\n}\n\nexport type Globals = {\n config: SanitizedGlobalConfig[]\n graphQL?:\n | {\n [slug: string]: {\n mutationInputType: GraphQLNonNull<any>\n type: GraphQLObjectType\n versionType?: GraphQLObjectType\n }\n }\n | false\n}\n"],"names":[],"mappings":"AA0LA,WAWC"}
1
+ {"version":3,"sources":["../../../src/globals/config/types.ts"],"sourcesContent":["import type { GraphQLNonNull, GraphQLObjectType } from 'graphql'\nimport type { DeepRequired } from 'ts-essentials'\n\nimport type {\n CustomPreviewButton,\n CustomPublishButton,\n CustomSaveButton,\n CustomSaveDraftButton,\n} from '../../admin/types.js'\nimport type {\n Access,\n EditConfig,\n Endpoint,\n EntityDescription,\n EntityDescriptionComponent,\n GeneratePreviewURL,\n LivePreviewConfig,\n MetaConfig,\n} from '../../config/types.js'\nimport type { DBIdentifierName } from '../../database/types.js'\nimport type { Field } from '../../fields/config/types.js'\nimport type { GlobalSlug, TypedGlobal } from '../../index.js'\nimport type { PayloadRequest, RequestContext, Where } from '../../types/index.js'\nimport type { IncomingGlobalVersions, SanitizedGlobalVersions } from '../../versions/types.js'\n\nexport type DataFromGlobalSlug<TSlug extends GlobalSlug> = TypedGlobal[TSlug]\n\nexport type BeforeValidateHook = (args: {\n context: RequestContext\n data?: any\n /** The global which this hook is being run on */\n global: SanitizedGlobalConfig\n originalDoc?: any\n req: PayloadRequest\n}) => any\n\nexport type BeforeChangeHook = (args: {\n context: RequestContext\n data: any\n /** The global which this hook is being run on */\n global: SanitizedGlobalConfig\n originalDoc?: any\n req: PayloadRequest\n}) => any\n\nexport type AfterChangeHook = (args: {\n context: RequestContext\n doc: any\n /** The global which this hook is being run on */\n global: SanitizedGlobalConfig\n previousDoc: any\n req: PayloadRequest\n}) => any\n\nexport type BeforeReadHook = (args: {\n context: RequestContext\n doc: any\n /** The global which this hook is being run on */\n global: SanitizedGlobalConfig\n req: PayloadRequest\n}) => any\n\nexport type AfterReadHook = (args: {\n context: RequestContext\n doc: any\n findMany?: boolean\n /** The global which this hook is being run on */\n global: SanitizedGlobalConfig\n query?: Where\n req: PayloadRequest\n}) => any\n\nexport type GlobalAdminOptions = {\n /**\n * Custom admin components\n */\n components?: {\n elements?: {\n Description?: EntityDescriptionComponent\n /**\n * Replaces the \"Preview\" button\n */\n PreviewButton?: CustomPreviewButton\n /**\n * Replaces the \"Publish\" button\n * + drafts must be enabled\n */\n PublishButton?: CustomPublishButton\n /**\n * Replaces the \"Save\" button\n * + drafts must be disabled\n */\n SaveButton?: CustomSaveButton\n /**\n * Replaces the \"Save Draft\" button\n * + drafts must be enabled\n * + autosave must be disabled\n */\n SaveDraftButton?: CustomSaveDraftButton\n }\n views?: {\n /**\n * Set to a React component to replace the entire Edit View, including all nested routes.\n * Set to an object to replace or modify individual nested routes, or to add new ones.\n */\n edit?: EditConfig\n }\n }\n /** Extension point to add your custom data. Available in server and client. */\n custom?: Record<string, any>\n /**\n * Custom description for collection\n */\n description?: EntityDescription\n /**\n * Place globals into a navigational group\n * */\n group?: Record<string, string> | string\n /**\n * Exclude the global from the admin nav and routes\n */\n hidden?: ((args: { user: PayloadRequest['user'] }) => boolean) | boolean\n /**\n * Hide the API URL within the Edit View\n */\n hideAPIURL?: boolean\n /**\n * Live preview options\n */\n livePreview?: LivePreviewConfig\n meta?: MetaConfig\n /**\n * Function to generate custom preview URL\n */\n preview?: GeneratePreviewURL\n}\n\nexport type GlobalConfig = {\n access?: {\n read?: Access\n readDrafts?: Access\n readVersions?: Access\n update?: Access\n }\n admin?: GlobalAdminOptions\n /** Extension point to add your custom data. Server only. */\n custom?: Record<string, any>\n /**\n * Customize the SQL table name\n */\n dbName?: DBIdentifierName\n endpoints?: false | Omit<Endpoint, 'root'>[]\n fields: Field[]\n graphQL?:\n | {\n name?: string\n }\n | false\n hooks?: {\n afterChange?: AfterChangeHook[]\n afterRead?: AfterReadHook[]\n beforeChange?: BeforeChangeHook[]\n beforeRead?: BeforeReadHook[]\n beforeValidate?: BeforeValidateHook[]\n }\n label?: Record<string, string> | string\n /**\n * Enables / Disables the ability to lock documents while editing\n * @default true\n */\n lockDocuments?:\n | {\n duration: number\n }\n | false\n slug: string\n /**\n * Options used in typescript generation\n */\n typescript?: {\n /**\n * Typescript generation name given to the interface type\n */\n interface?: string\n }\n versions?: boolean | IncomingGlobalVersions\n}\n\nexport interface SanitizedGlobalConfig\n extends Omit<DeepRequired<GlobalConfig>, 'endpoints' | 'fields' | 'versions'> {\n endpoints: Endpoint[] | false\n fields: Field[]\n versions: SanitizedGlobalVersions\n}\n\nexport type Globals = {\n config: SanitizedGlobalConfig[]\n graphQL?:\n | {\n [slug: string]: {\n mutationInputType: GraphQLNonNull<any>\n type: GraphQLObjectType\n versionType?: GraphQLObjectType\n }\n }\n | false\n}\n"],"names":[],"mappings":"AAmMA,WAWC"}
@@ -4,6 +4,7 @@ type Args = {
4
4
  depth?: number;
5
5
  draft?: boolean;
6
6
  globalConfig: SanitizedGlobalConfig;
7
+ includeLockStatus?: boolean;
7
8
  overrideAccess?: boolean;
8
9
  req: PayloadRequest;
9
10
  showHiddenFields?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"findOne.d.ts","sourceRoot":"","sources":["../../../src/globals/operations/findOne.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAS,MAAM,sBAAsB,CAAA;AACjE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAO/D,KAAK,IAAI,GAAG;IACV,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,YAAY,EAAE,qBAAqB,CAAA;IACnC,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,GAAG,EAAE,cAAc,CAAA;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAU,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,QAChE,IAAI,KACT,OAAO,CAAC,CAAC,CA+GX,CAAA"}
1
+ {"version":3,"file":"findOne.d.ts","sourceRoot":"","sources":["../../../src/globals/operations/findOne.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAS,MAAM,sBAAsB,CAAA;AACjE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAO/D,KAAK,IAAI,GAAG;IACV,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,YAAY,EAAE,qBAAqB,CAAA;IACnC,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,GAAG,EAAE,cAAc,CAAA;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAU,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,QAChE,IAAI,KACT,OAAO,CAAC,CAAC,CAgJX,CAAA"}
@@ -3,7 +3,7 @@ import { afterRead } from '../../fields/hooks/afterRead/index.js';
3
3
  import { killTransaction } from '../../utilities/killTransaction.js';
4
4
  import replaceWithDraftIfAvailable from '../../versions/drafts/replaceWithDraftIfAvailable.js';
5
5
  export const findOneOperation = async (args)=>{
6
- const { slug, depth, draft: draftEnabled = false, globalConfig, overrideAccess = false, req: { fallbackLocale, locale }, req, showHiddenFields } = args;
6
+ const { slug, depth, draft: draftEnabled = false, globalConfig, includeLockStatus, overrideAccess = false, req: { fallbackLocale, locale }, req, showHiddenFields } = args;
7
7
  try {
8
8
  // /////////////////////////////////////
9
9
  // Retrieve and execute access
@@ -27,6 +27,33 @@ export const findOneOperation = async (args)=>{
27
27
  doc = {};
28
28
  }
29
29
  // /////////////////////////////////////
30
+ // Include Lock Status if required
31
+ // /////////////////////////////////////
32
+ if (includeLockStatus && slug) {
33
+ let lockStatus = null;
34
+ try {
35
+ const lockedDocument = await req.payload.find({
36
+ collection: 'payload-locked-documents',
37
+ depth: 1,
38
+ limit: 1,
39
+ pagination: false,
40
+ req,
41
+ where: {
42
+ globalSlug: {
43
+ equals: slug
44
+ }
45
+ }
46
+ });
47
+ if (lockedDocument && lockedDocument.docs.length > 0) {
48
+ lockStatus = lockedDocument.docs[0];
49
+ }
50
+ } catch {
51
+ // swallow error
52
+ }
53
+ doc._isLocked = !!lockStatus;
54
+ doc._userEditing = lockStatus?.user?.value ?? null;
55
+ }
56
+ // /////////////////////////////////////
30
57
  // Replace document with draft if available
31
58
  // /////////////////////////////////////
32
59
  if (globalConfig.versions?.drafts && draftEnabled) {