payload 3.0.0-alpha.65 → 3.0.0-alpha.67

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 (207) hide show
  1. package/dist/admin/RichText.d.ts +3 -0
  2. package/dist/admin/RichText.d.ts.map +1 -1
  3. package/dist/admin/RichText.js.map +1 -1
  4. package/dist/admin/elements/Tab.d.ts +3 -0
  5. package/dist/admin/elements/Tab.d.ts.map +1 -1
  6. package/dist/admin/elements/Tab.js.map +1 -1
  7. package/dist/admin/types.d.ts +1 -1
  8. package/dist/admin/types.d.ts.map +1 -1
  9. package/dist/admin/types.js.map +1 -1
  10. package/dist/auth/getAccessResults.js +1 -1
  11. package/dist/auth/getAccessResults.js.map +1 -1
  12. package/dist/auth/operations/forgotPassword.js +3 -2
  13. package/dist/auth/operations/forgotPassword.js.map +1 -1
  14. package/dist/auth/operations/login.d.ts.map +1 -1
  15. package/dist/auth/operations/login.js +3 -0
  16. package/dist/auth/operations/login.js.map +1 -1
  17. package/dist/auth/sendVerificationEmail.js +3 -2
  18. package/dist/auth/sendVerificationEmail.js.map +1 -1
  19. package/dist/bin/loader/index.d.ts.map +1 -1
  20. package/dist/bin/loader/index.js +2 -1
  21. package/dist/bin/loader/index.js.map +1 -1
  22. package/dist/bin/loader/resolveOriginalPath.d.ts +10 -0
  23. package/dist/bin/loader/resolveOriginalPath.d.ts.map +1 -0
  24. package/dist/bin/loader/resolveOriginalPath.js +32 -0
  25. package/dist/bin/loader/resolveOriginalPath.js.map +1 -0
  26. package/dist/collections/config/sanitize.d.ts +2 -3
  27. package/dist/collections/config/sanitize.d.ts.map +1 -1
  28. package/dist/collections/config/sanitize.js +7 -4
  29. package/dist/collections/config/sanitize.js.map +1 -1
  30. package/dist/collections/config/schema.d.ts.map +1 -1
  31. package/dist/collections/config/schema.js +1 -0
  32. package/dist/collections/config/schema.js.map +1 -1
  33. package/dist/config/build.d.ts.map +1 -1
  34. package/dist/config/build.js +3 -4
  35. package/dist/config/build.js.map +1 -1
  36. package/dist/config/sanitize.d.ts +1 -1
  37. package/dist/config/sanitize.d.ts.map +1 -1
  38. package/dist/config/sanitize.js +28 -7
  39. package/dist/config/sanitize.js.map +1 -1
  40. package/dist/config/schema.js +1 -1
  41. package/dist/config/schema.js.map +1 -1
  42. package/dist/config/types.d.ts +11 -2
  43. package/dist/config/types.d.ts.map +1 -1
  44. package/dist/config/types.js.map +1 -1
  45. package/dist/database/queryValidation/validateQueryPaths.js +1 -1
  46. package/dist/database/queryValidation/validateQueryPaths.js.map +1 -1
  47. package/dist/email/consoleEmailAdapter.d.ts.map +1 -1
  48. package/dist/email/consoleEmailAdapter.js +1 -0
  49. package/dist/email/consoleEmailAdapter.js.map +1 -1
  50. package/dist/email/types.d.ts +1 -0
  51. package/dist/email/types.d.ts.map +1 -1
  52. package/dist/email/types.js.map +1 -1
  53. package/dist/errors/APIError.d.ts +2 -2
  54. package/dist/errors/APIError.d.ts.map +1 -1
  55. package/dist/errors/APIError.js +1 -2
  56. package/dist/errors/APIError.js.map +1 -1
  57. package/dist/errors/AuthenticationError.d.ts +2 -3
  58. package/dist/errors/AuthenticationError.d.ts.map +1 -1
  59. package/dist/errors/AuthenticationError.js +2 -3
  60. package/dist/errors/AuthenticationError.js.map +1 -1
  61. package/dist/errors/DuplicateCollection.d.ts +2 -3
  62. package/dist/errors/DuplicateCollection.d.ts.map +1 -1
  63. package/dist/errors/DuplicateCollection.js +2 -3
  64. package/dist/errors/DuplicateCollection.js.map +1 -1
  65. package/dist/errors/DuplicateFieldName.d.ts +2 -3
  66. package/dist/errors/DuplicateFieldName.d.ts.map +1 -1
  67. package/dist/errors/DuplicateFieldName.js +2 -3
  68. package/dist/errors/DuplicateFieldName.js.map +1 -1
  69. package/dist/errors/DuplicateGlobal.d.ts +2 -3
  70. package/dist/errors/DuplicateGlobal.d.ts.map +1 -1
  71. package/dist/errors/DuplicateGlobal.js +2 -3
  72. package/dist/errors/DuplicateGlobal.js.map +1 -1
  73. package/dist/errors/ErrorDeletingFile.d.ts +2 -3
  74. package/dist/errors/ErrorDeletingFile.d.ts.map +1 -1
  75. package/dist/errors/ErrorDeletingFile.js +2 -3
  76. package/dist/errors/ErrorDeletingFile.js.map +1 -1
  77. package/dist/errors/FileRetrievalError.d.ts +6 -0
  78. package/dist/errors/FileRetrievalError.d.ts.map +1 -0
  79. package/dist/errors/FileRetrievalError.js +13 -0
  80. package/dist/errors/FileRetrievalError.js.map +1 -0
  81. package/dist/errors/FileUploadError.d.ts +2 -3
  82. package/dist/errors/FileUploadError.d.ts.map +1 -1
  83. package/dist/errors/FileUploadError.js +2 -3
  84. package/dist/errors/FileUploadError.js.map +1 -1
  85. package/dist/errors/Forbidden.d.ts +2 -3
  86. package/dist/errors/Forbidden.d.ts.map +1 -1
  87. package/dist/errors/Forbidden.js +2 -3
  88. package/dist/errors/Forbidden.js.map +1 -1
  89. package/dist/errors/InvalidConfiguration.d.ts +2 -3
  90. package/dist/errors/InvalidConfiguration.d.ts.map +1 -1
  91. package/dist/errors/InvalidConfiguration.js +2 -3
  92. package/dist/errors/InvalidConfiguration.js.map +1 -1
  93. package/dist/errors/InvalidFieldName.d.ts +2 -3
  94. package/dist/errors/InvalidFieldName.d.ts.map +1 -1
  95. package/dist/errors/InvalidFieldName.js +2 -3
  96. package/dist/errors/InvalidFieldName.js.map +1 -1
  97. package/dist/errors/InvalidFieldRelationship.d.ts +2 -3
  98. package/dist/errors/InvalidFieldRelationship.d.ts.map +1 -1
  99. package/dist/errors/InvalidFieldRelationship.js +2 -3
  100. package/dist/errors/InvalidFieldRelationship.js.map +1 -1
  101. package/dist/errors/InvalidSchema.d.ts +2 -3
  102. package/dist/errors/InvalidSchema.d.ts.map +1 -1
  103. package/dist/errors/InvalidSchema.js +2 -3
  104. package/dist/errors/InvalidSchema.js.map +1 -1
  105. package/dist/errors/LockedAuth.d.ts +2 -3
  106. package/dist/errors/LockedAuth.d.ts.map +1 -1
  107. package/dist/errors/LockedAuth.js +2 -3
  108. package/dist/errors/LockedAuth.js.map +1 -1
  109. package/dist/errors/MissingCollectionLabel.d.ts +2 -3
  110. package/dist/errors/MissingCollectionLabel.d.ts.map +1 -1
  111. package/dist/errors/MissingCollectionLabel.js +2 -3
  112. package/dist/errors/MissingCollectionLabel.js.map +1 -1
  113. package/dist/errors/MissingEditorProp.d.ts +2 -3
  114. package/dist/errors/MissingEditorProp.d.ts.map +1 -1
  115. package/dist/errors/MissingEditorProp.js +2 -3
  116. package/dist/errors/MissingEditorProp.js.map +1 -1
  117. package/dist/errors/MissingFieldInputOptions.d.ts +2 -3
  118. package/dist/errors/MissingFieldInputOptions.d.ts.map +1 -1
  119. package/dist/errors/MissingFieldInputOptions.js +2 -3
  120. package/dist/errors/MissingFieldInputOptions.js.map +1 -1
  121. package/dist/errors/MissingFieldType.d.ts +2 -3
  122. package/dist/errors/MissingFieldType.d.ts.map +1 -1
  123. package/dist/errors/MissingFieldType.js +2 -3
  124. package/dist/errors/MissingFieldType.js.map +1 -1
  125. package/dist/errors/MissingFile.d.ts +2 -3
  126. package/dist/errors/MissingFile.d.ts.map +1 -1
  127. package/dist/errors/MissingFile.js +2 -3
  128. package/dist/errors/MissingFile.js.map +1 -1
  129. package/dist/errors/NotFound.d.ts +2 -3
  130. package/dist/errors/NotFound.d.ts.map +1 -1
  131. package/dist/errors/NotFound.js +2 -3
  132. package/dist/errors/NotFound.js.map +1 -1
  133. package/dist/errors/QueryError.d.ts +2 -3
  134. package/dist/errors/QueryError.d.ts.map +1 -1
  135. package/dist/errors/QueryError.js +2 -3
  136. package/dist/errors/QueryError.js.map +1 -1
  137. package/dist/errors/TimestampsRequired.d.ts +2 -3
  138. package/dist/errors/TimestampsRequired.d.ts.map +1 -1
  139. package/dist/errors/TimestampsRequired.js +2 -3
  140. package/dist/errors/TimestampsRequired.js.map +1 -1
  141. package/dist/errors/UnathorizedError.d.ts +2 -3
  142. package/dist/errors/UnathorizedError.d.ts.map +1 -1
  143. package/dist/errors/UnathorizedError.js +2 -3
  144. package/dist/errors/UnathorizedError.js.map +1 -1
  145. package/dist/errors/ValidationError.d.ts +2 -3
  146. package/dist/errors/ValidationError.d.ts.map +1 -1
  147. package/dist/errors/ValidationError.js +2 -3
  148. package/dist/errors/ValidationError.js.map +1 -1
  149. package/dist/errors/index.d.ts +20 -19
  150. package/dist/errors/index.d.ts.map +1 -1
  151. package/dist/errors/index.js +20 -19
  152. package/dist/errors/index.js.map +1 -1
  153. package/dist/exports/i18n.d.ts +2 -0
  154. package/dist/exports/i18n.d.ts.map +1 -0
  155. package/dist/exports/i18n.js +3 -0
  156. package/dist/exports/i18n.js.map +1 -0
  157. package/dist/fields/config/client.d.ts +1 -1
  158. package/dist/fields/config/sanitize.d.ts +7 -2
  159. package/dist/fields/config/sanitize.d.ts.map +1 -1
  160. package/dist/fields/config/sanitize.js +56 -45
  161. package/dist/fields/config/sanitize.js.map +1 -1
  162. package/dist/fields/config/sanitize.spec.js +76 -85
  163. package/dist/fields/config/sanitize.spec.js.map +1 -1
  164. package/dist/fields/config/types.d.ts +4 -3
  165. package/dist/fields/config/types.d.ts.map +1 -1
  166. package/dist/fields/config/types.js.map +1 -1
  167. package/dist/fields/hooks/afterRead/promise.d.ts.map +1 -1
  168. package/dist/fields/hooks/afterRead/promise.js +3 -0
  169. package/dist/fields/hooks/afterRead/promise.js.map +1 -1
  170. package/dist/fields/validations.d.ts.map +1 -1
  171. package/dist/fields/validations.js +3 -0
  172. package/dist/fields/validations.js.map +1 -1
  173. package/dist/globals/config/sanitize.d.ts +2 -3
  174. package/dist/globals/config/sanitize.d.ts.map +1 -1
  175. package/dist/globals/config/sanitize.js +36 -35
  176. package/dist/globals/config/sanitize.js.map +1 -1
  177. package/dist/preferences/operations/delete.js +2 -2
  178. package/dist/preferences/operations/delete.js.map +1 -1
  179. package/dist/preferences/operations/update.js +1 -1
  180. package/dist/preferences/operations/update.js.map +1 -1
  181. package/dist/uploads/generateFileData.js +2 -2
  182. package/dist/uploads/generateFileData.js.map +1 -1
  183. package/dist/uploads/getExternalFile.d.ts.map +1 -1
  184. package/dist/uploads/getExternalFile.js +5 -2
  185. package/dist/uploads/getExternalFile.js.map +1 -1
  186. package/dist/uploads/types.d.ts +4 -0
  187. package/dist/uploads/types.d.ts.map +1 -1
  188. package/dist/uploads/types.js.map +1 -1
  189. package/dist/utilities/checkDuplicateCollections.js +1 -1
  190. package/dist/utilities/checkDuplicateCollections.js.map +1 -1
  191. package/dist/utilities/configToJSONSchema.d.ts.map +1 -1
  192. package/dist/utilities/configToJSONSchema.js +3 -0
  193. package/dist/utilities/configToJSONSchema.js.map +1 -1
  194. package/dist/utilities/configToJSONSchema.spec.js +2 -2
  195. package/dist/utilities/configToJSONSchema.spec.js.map +1 -1
  196. package/dist/utilities/createLocalReq.d.ts.map +1 -1
  197. package/dist/utilities/createLocalReq.js +4 -2
  198. package/dist/utilities/createLocalReq.js.map +1 -1
  199. package/dist/utilities/importWithoutClientFiles.js +1 -1
  200. package/dist/utilities/importWithoutClientFiles.js.map +1 -1
  201. package/dist/utilities/parseCookies.js +1 -1
  202. package/dist/utilities/parseCookies.js.map +1 -1
  203. package/dist/utilities/telemetry/index.d.ts +7 -1
  204. package/dist/utilities/telemetry/index.d.ts.map +1 -1
  205. package/dist/utilities/telemetry/index.js +41 -19
  206. package/dist/utilities/telemetry/index.js.map +1 -1
  207. package/package.json +67 -70
@@ -1,20 +1,21 @@
1
- export { default as APIError } from './APIError.js';
2
- export { default as AuthenticationError } from './AuthenticationError.js';
3
- export { default as DuplicateCollection } from './DuplicateCollection.js';
4
- export { default as DuplicateFieldName } from './DuplicateFieldName.js';
5
- export { default as DuplicateGlobal } from './DuplicateGlobal.js';
6
- export { default as ErrorDeletingFile } from './ErrorDeletingFile.js';
7
- export { default as FileUploadError } from './FileUploadError.js';
8
- export { default as Forbidden } from './Forbidden.js';
9
- export { default as InvalidConfiguration } from './InvalidConfiguration.js';
10
- export { default as InvalidFieldName } from './InvalidFieldName.js';
11
- export { default as InvalidFieldRelationship } from './InvalidFieldRelationship.js';
12
- export { default as LockedAuth } from './LockedAuth.js';
13
- export { default as MissingCollectionLabel } from './MissingCollectionLabel.js';
14
- export { default as MissingFieldInputOptions } from './MissingFieldInputOptions.js';
15
- export { default as MissingFieldType } from './MissingFieldType.js';
16
- export { default as MissingFile } from './MissingFile.js';
17
- export { default as NotFound } from './NotFound.js';
18
- export { default as QueryError } from './QueryError.js';
19
- export { default as ValidationError } from './ValidationError.js';
1
+ export { APIError } from './APIError.js';
2
+ export { AuthenticationError } from './AuthenticationError.js';
3
+ export { DuplicateCollection } from './DuplicateCollection.js';
4
+ export { DuplicateFieldName } from './DuplicateFieldName.js';
5
+ export { DuplicateGlobal } from './DuplicateGlobal.js';
6
+ export { ErrorDeletingFile } from './ErrorDeletingFile.js';
7
+ export { FileRetrievalError } from './FileRetrievalError.js';
8
+ export { FileUploadError } from './FileUploadError.js';
9
+ export { Forbidden } from './Forbidden.js';
10
+ export { InvalidConfiguration } from './InvalidConfiguration.js';
11
+ export { InvalidFieldName } from './InvalidFieldName.js';
12
+ export { InvalidFieldRelationship } from './InvalidFieldRelationship.js';
13
+ export { LockedAuth } from './LockedAuth.js';
14
+ export { MissingCollectionLabel } from './MissingCollectionLabel.js';
15
+ export { MissingFieldInputOptions } from './MissingFieldInputOptions.js';
16
+ export { MissingFieldType } from './MissingFieldType.js';
17
+ export { MissingFile } from './MissingFile.js';
18
+ export { NotFound } from './NotFound.js';
19
+ export { QueryError } from './QueryError.js';
20
+ export { ValidationError } from './ValidationError.js';
20
21
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,eAAe,CAAA;AACnD,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AACzE,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AACzE,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AACvE,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACjE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AACrE,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACjE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAC3E,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACnE,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM,+BAA+B,CAAA;AACnF,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACvD,OAAO,EAAE,OAAO,IAAI,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AAC/E,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM,+BAA+B,CAAA;AACnF,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACnE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,eAAe,CAAA;AACnD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACvD,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,sBAAsB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAA;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AACpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAA;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA"}
@@ -1,21 +1,22 @@
1
- export { default as APIError } from './APIError.js';
2
- export { default as AuthenticationError } from './AuthenticationError.js';
3
- export { default as DuplicateCollection } from './DuplicateCollection.js';
4
- export { default as DuplicateFieldName } from './DuplicateFieldName.js';
5
- export { default as DuplicateGlobal } from './DuplicateGlobal.js';
6
- export { default as ErrorDeletingFile } from './ErrorDeletingFile.js';
7
- export { default as FileUploadError } from './FileUploadError.js';
8
- export { default as Forbidden } from './Forbidden.js';
9
- export { default as InvalidConfiguration } from './InvalidConfiguration.js';
10
- export { default as InvalidFieldName } from './InvalidFieldName.js';
11
- export { default as InvalidFieldRelationship } from './InvalidFieldRelationship.js';
12
- export { default as LockedAuth } from './LockedAuth.js';
13
- export { default as MissingCollectionLabel } from './MissingCollectionLabel.js';
14
- export { default as MissingFieldInputOptions } from './MissingFieldInputOptions.js';
15
- export { default as MissingFieldType } from './MissingFieldType.js';
16
- export { default as MissingFile } from './MissingFile.js';
17
- export { default as NotFound } from './NotFound.js';
18
- export { default as QueryError } from './QueryError.js';
19
- export { default as ValidationError } from './ValidationError.js';
1
+ export { APIError } from './APIError.js';
2
+ export { AuthenticationError } from './AuthenticationError.js';
3
+ export { DuplicateCollection } from './DuplicateCollection.js';
4
+ export { DuplicateFieldName } from './DuplicateFieldName.js';
5
+ export { DuplicateGlobal } from './DuplicateGlobal.js';
6
+ export { ErrorDeletingFile } from './ErrorDeletingFile.js';
7
+ export { FileRetrievalError } from './FileRetrievalError.js';
8
+ export { FileUploadError } from './FileUploadError.js';
9
+ export { Forbidden } from './Forbidden.js';
10
+ export { InvalidConfiguration } from './InvalidConfiguration.js';
11
+ export { InvalidFieldName } from './InvalidFieldName.js';
12
+ export { InvalidFieldRelationship } from './InvalidFieldRelationship.js';
13
+ export { LockedAuth } from './LockedAuth.js';
14
+ export { MissingCollectionLabel } from './MissingCollectionLabel.js';
15
+ export { MissingFieldInputOptions } from './MissingFieldInputOptions.js';
16
+ export { MissingFieldType } from './MissingFieldType.js';
17
+ export { MissingFile } from './MissingFile.js';
18
+ export { NotFound } from './NotFound.js';
19
+ export { QueryError } from './QueryError.js';
20
+ export { ValidationError } from './ValidationError.js';
20
21
 
21
22
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/errors/index.ts"],"sourcesContent":["export { default as APIError } from './APIError.js'\nexport { default as AuthenticationError } from './AuthenticationError.js'\nexport { default as DuplicateCollection } from './DuplicateCollection.js'\nexport { default as DuplicateFieldName } from './DuplicateFieldName.js'\nexport { default as DuplicateGlobal } from './DuplicateGlobal.js'\nexport { default as ErrorDeletingFile } from './ErrorDeletingFile.js'\nexport { default as FileUploadError } from './FileUploadError.js'\nexport { default as Forbidden } from './Forbidden.js'\nexport { default as InvalidConfiguration } from './InvalidConfiguration.js'\nexport { default as InvalidFieldName } from './InvalidFieldName.js'\nexport { default as InvalidFieldRelationship } from './InvalidFieldRelationship.js'\nexport { default as LockedAuth } from './LockedAuth.js'\nexport { default as MissingCollectionLabel } from './MissingCollectionLabel.js'\nexport { default as MissingFieldInputOptions } from './MissingFieldInputOptions.js'\nexport { default as MissingFieldType } from './MissingFieldType.js'\nexport { default as MissingFile } from './MissingFile.js'\nexport { default as NotFound } from './NotFound.js'\nexport { default as QueryError } from './QueryError.js'\nexport { default as ValidationError } from './ValidationError.js'\n"],"names":["default","APIError","AuthenticationError","DuplicateCollection","DuplicateFieldName","DuplicateGlobal","ErrorDeletingFile","FileUploadError","Forbidden","InvalidConfiguration","InvalidFieldName","InvalidFieldRelationship","LockedAuth","MissingCollectionLabel","MissingFieldInputOptions","MissingFieldType","MissingFile","NotFound","QueryError","ValidationError"],"rangeMappings":";;;;;;;;;;;;;;;;;;","mappings":"AAAA,SAASA,WAAWC,QAAQ,QAAQ,gBAAe;AACnD,SAASD,WAAWE,mBAAmB,QAAQ,2BAA0B;AACzE,SAASF,WAAWG,mBAAmB,QAAQ,2BAA0B;AACzE,SAASH,WAAWI,kBAAkB,QAAQ,0BAAyB;AACvE,SAASJ,WAAWK,eAAe,QAAQ,uBAAsB;AACjE,SAASL,WAAWM,iBAAiB,QAAQ,yBAAwB;AACrE,SAASN,WAAWO,eAAe,QAAQ,uBAAsB;AACjE,SAASP,WAAWQ,SAAS,QAAQ,iBAAgB;AACrD,SAASR,WAAWS,oBAAoB,QAAQ,4BAA2B;AAC3E,SAAST,WAAWU,gBAAgB,QAAQ,wBAAuB;AACnE,SAASV,WAAWW,wBAAwB,QAAQ,gCAA+B;AACnF,SAASX,WAAWY,UAAU,QAAQ,kBAAiB;AACvD,SAASZ,WAAWa,sBAAsB,QAAQ,8BAA6B;AAC/E,SAASb,WAAWc,wBAAwB,QAAQ,gCAA+B;AACnF,SAASd,WAAWe,gBAAgB,QAAQ,wBAAuB;AACnE,SAASf,WAAWgB,WAAW,QAAQ,mBAAkB;AACzD,SAAShB,WAAWiB,QAAQ,QAAQ,gBAAe;AACnD,SAASjB,WAAWkB,UAAU,QAAQ,kBAAiB;AACvD,SAASlB,WAAWmB,eAAe,QAAQ,uBAAsB"}
1
+ {"version":3,"sources":["../../src/errors/index.ts"],"sourcesContent":["export { APIError } from './APIError.js'\nexport { AuthenticationError } from './AuthenticationError.js'\nexport { DuplicateCollection } from './DuplicateCollection.js'\nexport { DuplicateFieldName } from './DuplicateFieldName.js'\nexport { DuplicateGlobal } from './DuplicateGlobal.js'\nexport { ErrorDeletingFile } from './ErrorDeletingFile.js'\nexport { FileRetrievalError } from './FileRetrievalError.js'\nexport { FileUploadError } from './FileUploadError.js'\nexport { Forbidden } from './Forbidden.js'\nexport { InvalidConfiguration } from './InvalidConfiguration.js'\nexport { InvalidFieldName } from './InvalidFieldName.js'\nexport { InvalidFieldRelationship } from './InvalidFieldRelationship.js'\nexport { LockedAuth } from './LockedAuth.js'\nexport { MissingCollectionLabel } from './MissingCollectionLabel.js'\nexport { MissingFieldInputOptions } from './MissingFieldInputOptions.js'\nexport { MissingFieldType } from './MissingFieldType.js'\nexport { MissingFile } from './MissingFile.js'\nexport { NotFound } from './NotFound.js'\nexport { QueryError } from './QueryError.js'\nexport { ValidationError } from './ValidationError.js'\n"],"names":["APIError","AuthenticationError","DuplicateCollection","DuplicateFieldName","DuplicateGlobal","ErrorDeletingFile","FileRetrievalError","FileUploadError","Forbidden","InvalidConfiguration","InvalidFieldName","InvalidFieldRelationship","LockedAuth","MissingCollectionLabel","MissingFieldInputOptions","MissingFieldType","MissingFile","NotFound","QueryError","ValidationError"],"rangeMappings":";;;;;;;;;;;;;;;;;;;","mappings":"AAAA,SAASA,QAAQ,QAAQ,gBAAe;AACxC,SAASC,mBAAmB,QAAQ,2BAA0B;AAC9D,SAASC,mBAAmB,QAAQ,2BAA0B;AAC9D,SAASC,kBAAkB,QAAQ,0BAAyB;AAC5D,SAASC,eAAe,QAAQ,uBAAsB;AACtD,SAASC,iBAAiB,QAAQ,yBAAwB;AAC1D,SAASC,kBAAkB,QAAQ,0BAAyB;AAC5D,SAASC,eAAe,QAAQ,uBAAsB;AACtD,SAASC,SAAS,QAAQ,iBAAgB;AAC1C,SAASC,oBAAoB,QAAQ,4BAA2B;AAChE,SAASC,gBAAgB,QAAQ,wBAAuB;AACxD,SAASC,wBAAwB,QAAQ,gCAA+B;AACxE,SAASC,UAAU,QAAQ,kBAAiB;AAC5C,SAASC,sBAAsB,QAAQ,8BAA6B;AACpE,SAASC,wBAAwB,QAAQ,gCAA+B;AACxE,SAASC,gBAAgB,QAAQ,wBAAuB;AACxD,SAASC,WAAW,QAAQ,mBAAkB;AAC9C,SAASC,QAAQ,QAAQ,gBAAe;AACxC,SAASC,UAAU,QAAQ,kBAAiB;AAC5C,SAASC,eAAe,QAAQ,uBAAsB"}
@@ -0,0 +1,2 @@
1
+ export { getLocalI18n } from '../translations/getLocalI18n.js';
2
+ //# sourceMappingURL=i18n.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/exports/i18n.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA"}
@@ -0,0 +1,3 @@
1
+ export { getLocalI18n } from '../translations/getLocalI18n.js';
2
+
3
+ //# sourceMappingURL=i18n.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/exports/i18n.ts"],"sourcesContent":["export { getLocalI18n } from '../translations/getLocalI18n.js'\n"],"names":["getLocalI18n"],"rangeMappings":"","mappings":"AAAA,SAASA,YAAY,QAAQ,kCAAiC"}
@@ -962,7 +962,7 @@ export declare const createClientFieldConfig: ({ field: incomingField, t, }: {
962
962
  saveToJWT?: string | boolean;
963
963
  unique?: boolean;
964
964
  validate?: import("../../fields/config/types.js").Validate<any, any, any, object>;
965
- editor?: import("../../admin/RichText.js").RichTextAdapter<any, any, any>;
965
+ editor?: import("../../admin/RichText.js").RichTextAdapter<any, any, any> | import("../../admin/RichText.js").RichTextAdapterProvider<any, any, any>;
966
966
  type: "richText";
967
967
  } | {
968
968
  custom?: Record<string, any>;
@@ -1,4 +1,4 @@
1
- import type { Config } from '../../config/types.js';
1
+ import type { Config, SanitizedConfig } from '../../config/types.js';
2
2
  import type { Field } from './types.js';
3
3
  type Args = {
4
4
  config: Config;
@@ -10,12 +10,17 @@ type Args = {
10
10
  * @default false
11
11
  */
12
12
  requireFieldLevelRichTextEditor?: boolean;
13
+ /**
14
+ * If this property is set, RichText fields won't be sanitized immediately. Instead, they will be added to this array as promises
15
+ * so that you can sanitize them together, after the config has been sanitized.
16
+ */
17
+ richTextSanitizationPromises?: Array<(config: SanitizedConfig) => Promise<void>>;
13
18
  /**
14
19
  * If not null, will validate that upload and relationship fields do not relate to a collection that is not in this array.
15
20
  * This validation will be skipped if validRelationships is null.
16
21
  */
17
22
  validRelationships: null | string[];
18
23
  };
19
- export declare const sanitizeFields: ({ config, existingFieldNames, fields, requireFieldLevelRichTextEditor, validRelationships, }: Args) => Field[];
24
+ export declare const sanitizeFields: ({ config, existingFieldNames, fields, requireFieldLevelRichTextEditor, richTextSanitizationPromises, validRelationships, }: Args) => Promise<Field[]>;
20
25
  export {};
21
26
  //# sourceMappingURL=sanitize.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sanitize.d.ts","sourceRoot":"","sources":["../../../src/fields/config/sanitize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AACnD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAgBvC,KAAK,IAAI,GAAG;IACV,MAAM,EAAE,MAAM,CAAA;IACd,kBAAkB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAChC,MAAM,EAAE,KAAK,EAAE,CAAA;IACf;;;;OAIG;IACH,+BAA+B,CAAC,EAAE,OAAO,CAAA;IACzC;;;OAGG;IACH,kBAAkB,EAAE,IAAI,GAAG,MAAM,EAAE,CAAA;CACpC,CAAA;AAED,eAAO,MAAM,cAAc,iGAMxB,IAAI,KAAG,KAAK,EA6Ld,CAAA"}
1
+ {"version":3,"file":"sanitize.d.ts","sourceRoot":"","sources":["../../../src/fields/config/sanitize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACpE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAgBvC,KAAK,IAAI,GAAG;IACV,MAAM,EAAE,MAAM,CAAA;IACd,kBAAkB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAChC,MAAM,EAAE,KAAK,EAAE,CAAA;IACf;;;;OAIG;IACH,+BAA+B,CAAC,EAAE,OAAO,CAAA;IACzC;;;OAGG;IACH,4BAA4B,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;IAEhF;;;OAGG;IACH,kBAAkB,EAAE,IAAI,GAAG,MAAM,EAAE,CAAA;CACpC,CAAA;AAED,eAAO,MAAM,cAAc,+HAOxB,IAAI,KAAG,QAAQ,KAAK,EAAE,CAoMxB,CAAA"}
@@ -1,4 +1,4 @@
1
- import MissingEditorProp from '../../errors/MissingEditorProp.js';
1
+ import { MissingEditorProp } from '../../errors/MissingEditorProp.js';
2
2
  import { DuplicateFieldName, InvalidFieldName, InvalidFieldRelationship, MissingFieldType } from '../../errors/index.js';
3
3
  import { formatLabels, toWords } from '../../utilities/formatLabels.js';
4
4
  import { baseBlockFields } from '../baseFields/baseBlockFields.js';
@@ -6,12 +6,10 @@ import { baseIDField } from '../baseFields/baseIDField.js';
6
6
  import { setDefaultBeforeDuplicate } from '../setDefaultBeforeDuplicate.js';
7
7
  import validations from '../validations.js';
8
8
  import { fieldAffectsData, tabHasName } from './types.js';
9
- export const sanitizeFields = ({ config, existingFieldNames = new Set(), fields, requireFieldLevelRichTextEditor = false, validRelationships })=>{
9
+ export const sanitizeFields = async ({ config, existingFieldNames = new Set(), fields, requireFieldLevelRichTextEditor = false, richTextSanitizationPromises, validRelationships })=>{
10
10
  if (!fields) return [];
11
- return fields.map((unsanitizedField)=>{
12
- const field = {
13
- ...unsanitizedField
14
- };
11
+ for(let i = 0; i < fields.length; i++){
12
+ const field = fields[i];
15
13
  if (!field.type) throw new MissingFieldType(field);
16
14
  // assert that field names do not contain forbidden characters
17
15
  if (fieldAffectsData(field) && field.name.includes('.')) {
@@ -88,74 +86,87 @@ export const sanitizeFields = ({ config, existingFieldNames = new Set(), fields,
88
86
  }
89
87
  // Make sure that the richText field has an editor
90
88
  if (field.type === 'richText') {
91
- if (!field.editor) {
92
- if (config.editor && !requireFieldLevelRichTextEditor) {
93
- field.editor = config.editor;
94
- } else {
95
- throw new MissingEditorProp(field);
89
+ const sanitizeRichText = async (_config)=>{
90
+ if (!field.editor) {
91
+ if (_config.editor && !requireFieldLevelRichTextEditor) {
92
+ // config.editor should be sanitized at this point
93
+ field.editor = _config.editor;
94
+ } else {
95
+ throw new MissingEditorProp(field);
96
+ }
96
97
  }
97
- }
98
- // Add editor adapter hooks to field hooks
99
- if (!field.hooks) field.hooks = {};
100
- if (field?.editor?.hooks?.afterRead?.length) {
101
- field.hooks.afterRead = field.hooks.afterRead ? field.hooks.afterRead.concat(field.editor.hooks.afterRead) : field.editor.hooks.afterRead;
102
- }
103
- if (field?.editor?.hooks?.beforeChange?.length) {
104
- field.hooks.beforeChange = field.hooks.beforeChange ? field.hooks.beforeChange.concat(field.editor.hooks.beforeChange) : field.editor.hooks.beforeChange;
105
- }
106
- if (field?.editor?.hooks?.beforeValidate?.length) {
107
- field.hooks.beforeValidate = field.hooks.beforeValidate ? field.hooks.beforeValidate.concat(field.editor.hooks.beforeValidate) : field.editor.hooks.beforeValidate;
108
- }
109
- if (field?.editor?.hooks?.beforeChange?.length) {
110
- field.hooks.beforeChange = field.hooks.beforeChange ? field.hooks.beforeChange.concat(field.editor.hooks.beforeChange) : field.editor.hooks.beforeChange;
98
+ if (typeof field.editor === 'function') {
99
+ field.editor = await field.editor({
100
+ config: _config
101
+ });
102
+ }
103
+ // Add editor adapter hooks to field hooks
104
+ if (!field.hooks) field.hooks = {};
105
+ const mergeHooks = (hookName)=>{
106
+ if (typeof field.editor === 'function') return;
107
+ if (field.editor?.hooks?.[hookName]?.length) {
108
+ field.hooks[hookName] = field.hooks[hookName] ? field.hooks[hookName].concat(field.editor.hooks[hookName]) : [
109
+ ...field.editor.hooks[hookName]
110
+ ];
111
+ }
112
+ };
113
+ mergeHooks('afterRead');
114
+ mergeHooks('afterChange');
115
+ mergeHooks('beforeChange');
116
+ mergeHooks('beforeValidate');
117
+ mergeHooks('beforeDuplicate');
118
+ };
119
+ if (richTextSanitizationPromises) {
120
+ richTextSanitizationPromises.push(sanitizeRichText);
121
+ } else {
122
+ await sanitizeRichText(config);
111
123
  }
112
124
  }
113
- // TODO: Handle sanitization for any lexical sub-fields here as well
114
125
  if ('fields' in field && field.fields) {
115
- field.fields = sanitizeFields({
126
+ field.fields = await sanitizeFields({
116
127
  config,
117
128
  existingFieldNames: fieldAffectsData(field) ? new Set() : existingFieldNames,
118
129
  fields: field.fields,
119
130
  requireFieldLevelRichTextEditor,
131
+ richTextSanitizationPromises,
120
132
  validRelationships
121
133
  });
122
134
  }
123
135
  if (field.type === 'tabs') {
124
- field.tabs = field.tabs.map((tab)=>{
125
- const unsanitizedTab = {
126
- ...tab
127
- };
136
+ for(let j = 0; j < field.tabs.length; j++){
137
+ const tab = field.tabs[j];
128
138
  if (tabHasName(tab) && typeof tab.label === 'undefined') {
129
- unsanitizedTab.label = toWords(tab.name);
139
+ tab.label = toWords(tab.name);
130
140
  }
131
- unsanitizedTab.fields = sanitizeFields({
141
+ tab.fields = await sanitizeFields({
132
142
  config,
133
143
  existingFieldNames: tabHasName(tab) ? new Set() : existingFieldNames,
134
144
  fields: tab.fields,
135
145
  requireFieldLevelRichTextEditor,
146
+ richTextSanitizationPromises,
136
147
  validRelationships
137
148
  });
138
- return unsanitizedTab;
139
- });
149
+ field.tabs[j] = tab;
150
+ }
140
151
  }
141
152
  if ('blocks' in field && field.blocks) {
142
- field.blocks = field.blocks.map((block)=>{
143
- const unsanitizedBlock = {
144
- ...block
145
- };
146
- unsanitizedBlock.labels = !unsanitizedBlock.labels ? formatLabels(unsanitizedBlock.slug) : unsanitizedBlock.labels;
147
- unsanitizedBlock.fields = sanitizeFields({
153
+ for(let j = 0; j < field.blocks.length; j++){
154
+ const block = field.blocks[j];
155
+ block.labels = !block.labels ? formatLabels(block.slug) : block.labels;
156
+ block.fields = await sanitizeFields({
148
157
  config,
149
158
  existingFieldNames: new Set(),
150
159
  fields: block.fields,
151
160
  requireFieldLevelRichTextEditor,
161
+ richTextSanitizationPromises,
152
162
  validRelationships
153
163
  });
154
- return unsanitizedBlock;
155
- });
164
+ field.blocks[j] = block;
165
+ }
156
166
  }
157
- return field;
158
- });
167
+ fields[i] = field;
168
+ }
169
+ return fields;
159
170
  };
160
171
 
161
172
  //# sourceMappingURL=sanitize.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/fields/config/sanitize.ts"],"sourcesContent":["import type { Config } from '../../config/types.js'\nimport type { Field } from './types.js'\n\nimport MissingEditorProp from '../../errors/MissingEditorProp.js'\nimport {\n DuplicateFieldName,\n InvalidFieldName,\n InvalidFieldRelationship,\n MissingFieldType,\n} from '../../errors/index.js'\nimport { formatLabels, toWords } from '../../utilities/formatLabels.js'\nimport { baseBlockFields } from '../baseFields/baseBlockFields.js'\nimport { baseIDField } from '../baseFields/baseIDField.js'\nimport { setDefaultBeforeDuplicate } from '../setDefaultBeforeDuplicate.js'\nimport validations from '../validations.js'\nimport { fieldAffectsData, tabHasName } from './types.js'\n\ntype Args = {\n config: Config\n existingFieldNames?: Set<string>\n fields: Field[]\n /**\n * If true, a richText field will require an editor property to be set, as the sanitizeFields function will not add it from the payload config if not present.\n *\n * @default false\n */\n requireFieldLevelRichTextEditor?: boolean\n /**\n * If not null, will validate that upload and relationship fields do not relate to a collection that is not in this array.\n * This validation will be skipped if validRelationships is null.\n */\n validRelationships: null | string[]\n}\n\nexport const sanitizeFields = ({\n config,\n existingFieldNames = new Set(),\n fields,\n requireFieldLevelRichTextEditor = false,\n validRelationships,\n}: Args): Field[] => {\n if (!fields) return []\n\n return fields.map((unsanitizedField) => {\n const field: Field = { ...unsanitizedField }\n\n if (!field.type) throw new MissingFieldType(field)\n\n // assert that field names do not contain forbidden characters\n if (fieldAffectsData(field) && field.name.includes('.')) {\n throw new InvalidFieldName(field, field.name)\n }\n\n // Auto-label\n if (\n 'name' in field &&\n field.name &&\n typeof field.label !== 'object' &&\n typeof field.label !== 'string' &&\n field.label !== false\n ) {\n field.label = toWords(field.name)\n }\n\n if (\n field.type === 'checkbox' &&\n typeof field.defaultValue === 'undefined' &&\n field.required === true\n ) {\n field.defaultValue = false\n }\n\n if (field.type === 'relationship' || field.type === 'upload') {\n if (validRelationships) {\n const relationships = Array.isArray(field.relationTo)\n ? field.relationTo\n : [field.relationTo]\n relationships.forEach((relationship: string) => {\n if (!validRelationships.includes(relationship)) {\n throw new InvalidFieldRelationship(field, relationship)\n }\n })\n }\n\n if (field.type === 'relationship') {\n if (field.min && !field.minRows) {\n console.warn(\n `(payload): The \"min\" property is deprecated for the Relationship field \"${field.name}\" and will be removed in a future version. Please use \"minRows\" instead.`,\n )\n }\n if (field.max && !field.maxRows) {\n console.warn(\n `(payload): The \"max\" property is deprecated for the Relationship field \"${field.name}\" and will be removed in a future version. Please use \"maxRows\" instead.`,\n )\n }\n field.minRows = field.minRows || field.min\n field.maxRows = field.maxRows || field.max\n }\n }\n\n if (field.type === 'blocks' && field.blocks) {\n field.blocks = field.blocks.map((block) => ({\n ...block,\n fields: block.fields.concat(baseBlockFields),\n }))\n }\n\n if (field.type === 'array' && field.fields) {\n field.fields.push(baseIDField)\n }\n\n if ((field.type === 'blocks' || field.type === 'array') && field.label) {\n field.labels = field.labels || formatLabels(field.name)\n }\n\n if (fieldAffectsData(field)) {\n if (existingFieldNames.has(field.name)) {\n throw new DuplicateFieldName(field.name)\n } else if (!['blockName', 'id'].includes(field.name)) {\n existingFieldNames.add(field.name)\n }\n\n if (field.localized && !config.localization) delete field.localized\n\n if (typeof field.validate === 'undefined') {\n const defaultValidate = validations[field.type]\n if (defaultValidate) {\n field.validate = (val, options) => defaultValidate(val, { ...field, ...options })\n } else {\n field.validate = () => true\n }\n }\n\n if (!field.hooks) field.hooks = {}\n if (!field.access) field.access = {}\n\n setDefaultBeforeDuplicate(field)\n }\n\n if (!field.admin) {\n field.admin = {}\n }\n\n // Make sure that the richText field has an editor\n if (field.type === 'richText') {\n if (!field.editor) {\n if (config.editor && !requireFieldLevelRichTextEditor) {\n field.editor = config.editor\n } else {\n throw new MissingEditorProp(field)\n }\n }\n\n // Add editor adapter hooks to field hooks\n if (!field.hooks) field.hooks = {}\n\n if (field?.editor?.hooks?.afterRead?.length) {\n field.hooks.afterRead = field.hooks.afterRead\n ? field.hooks.afterRead.concat(field.editor.hooks.afterRead)\n : field.editor.hooks.afterRead\n }\n if (field?.editor?.hooks?.beforeChange?.length) {\n field.hooks.beforeChange = field.hooks.beforeChange\n ? field.hooks.beforeChange.concat(field.editor.hooks.beforeChange)\n : field.editor.hooks.beforeChange\n }\n if (field?.editor?.hooks?.beforeValidate?.length) {\n field.hooks.beforeValidate = field.hooks.beforeValidate\n ? field.hooks.beforeValidate.concat(field.editor.hooks.beforeValidate)\n : field.editor.hooks.beforeValidate\n }\n if (field?.editor?.hooks?.beforeChange?.length) {\n field.hooks.beforeChange = field.hooks.beforeChange\n ? field.hooks.beforeChange.concat(field.editor.hooks.beforeChange)\n : field.editor.hooks.beforeChange\n }\n }\n\n // TODO: Handle sanitization for any lexical sub-fields here as well\n if ('fields' in field && field.fields) {\n field.fields = sanitizeFields({\n config,\n existingFieldNames: fieldAffectsData(field) ? new Set() : existingFieldNames,\n fields: field.fields,\n requireFieldLevelRichTextEditor,\n validRelationships,\n })\n }\n\n if (field.type === 'tabs') {\n field.tabs = field.tabs.map((tab) => {\n const unsanitizedTab = { ...tab }\n if (tabHasName(tab) && typeof tab.label === 'undefined') {\n unsanitizedTab.label = toWords(tab.name)\n }\n\n unsanitizedTab.fields = sanitizeFields({\n config,\n existingFieldNames: tabHasName(tab) ? new Set() : existingFieldNames,\n fields: tab.fields,\n requireFieldLevelRichTextEditor,\n validRelationships,\n })\n\n return unsanitizedTab\n })\n }\n\n if ('blocks' in field && field.blocks) {\n field.blocks = field.blocks.map((block) => {\n const unsanitizedBlock = { ...block }\n unsanitizedBlock.labels = !unsanitizedBlock.labels\n ? formatLabels(unsanitizedBlock.slug)\n : unsanitizedBlock.labels\n\n unsanitizedBlock.fields = sanitizeFields({\n config,\n existingFieldNames: new Set(),\n fields: block.fields,\n requireFieldLevelRichTextEditor,\n validRelationships,\n })\n\n return unsanitizedBlock\n })\n }\n\n return field\n })\n}\n"],"names":["MissingEditorProp","DuplicateFieldName","InvalidFieldName","InvalidFieldRelationship","MissingFieldType","formatLabels","toWords","baseBlockFields","baseIDField","setDefaultBeforeDuplicate","validations","fieldAffectsData","tabHasName","sanitizeFields","config","existingFieldNames","Set","fields","requireFieldLevelRichTextEditor","validRelationships","map","unsanitizedField","field","type","name","includes","label","defaultValue","required","relationships","Array","isArray","relationTo","forEach","relationship","min","minRows","console","warn","max","maxRows","blocks","block","concat","push","labels","has","add","localized","localization","validate","defaultValidate","val","options","hooks","access","admin","editor","afterRead","length","beforeChange","beforeValidate","tabs","tab","unsanitizedTab","unsanitizedBlock","slug"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
1
+ {"version":3,"sources":["../../../src/fields/config/sanitize.ts"],"sourcesContent":["import type { Config, SanitizedConfig } from '../../config/types.js'\nimport type { Field } from './types.js'\n\nimport { MissingEditorProp } from '../../errors/MissingEditorProp.js'\nimport {\n DuplicateFieldName,\n InvalidFieldName,\n InvalidFieldRelationship,\n MissingFieldType,\n} from '../../errors/index.js'\nimport { formatLabels, toWords } from '../../utilities/formatLabels.js'\nimport { baseBlockFields } from '../baseFields/baseBlockFields.js'\nimport { baseIDField } from '../baseFields/baseIDField.js'\nimport { setDefaultBeforeDuplicate } from '../setDefaultBeforeDuplicate.js'\nimport validations from '../validations.js'\nimport { fieldAffectsData, tabHasName } from './types.js'\n\ntype Args = {\n config: Config\n existingFieldNames?: Set<string>\n fields: Field[]\n /**\n * If true, a richText field will require an editor property to be set, as the sanitizeFields function will not add it from the payload config if not present.\n *\n * @default false\n */\n requireFieldLevelRichTextEditor?: boolean\n /**\n * If this property is set, RichText fields won't be sanitized immediately. Instead, they will be added to this array as promises\n * so that you can sanitize them together, after the config has been sanitized.\n */\n richTextSanitizationPromises?: Array<(config: SanitizedConfig) => Promise<void>>\n\n /**\n * If not null, will validate that upload and relationship fields do not relate to a collection that is not in this array.\n * This validation will be skipped if validRelationships is null.\n */\n validRelationships: null | string[]\n}\n\nexport const sanitizeFields = async ({\n config,\n existingFieldNames = new Set(),\n fields,\n requireFieldLevelRichTextEditor = false,\n richTextSanitizationPromises,\n validRelationships,\n}: Args): Promise<Field[]> => {\n if (!fields) return []\n\n for (let i = 0; i < fields.length; i++) {\n const field = fields[i]\n\n if (!field.type) throw new MissingFieldType(field)\n\n // assert that field names do not contain forbidden characters\n if (fieldAffectsData(field) && field.name.includes('.')) {\n throw new InvalidFieldName(field, field.name)\n }\n\n // Auto-label\n if (\n 'name' in field &&\n field.name &&\n typeof field.label !== 'object' &&\n typeof field.label !== 'string' &&\n field.label !== false\n ) {\n field.label = toWords(field.name)\n }\n\n if (\n field.type === 'checkbox' &&\n typeof field.defaultValue === 'undefined' &&\n field.required === true\n ) {\n field.defaultValue = false\n }\n\n if (field.type === 'relationship' || field.type === 'upload') {\n if (validRelationships) {\n const relationships = Array.isArray(field.relationTo)\n ? field.relationTo\n : [field.relationTo]\n relationships.forEach((relationship: string) => {\n if (!validRelationships.includes(relationship)) {\n throw new InvalidFieldRelationship(field, relationship)\n }\n })\n }\n\n if (field.type === 'relationship') {\n if (field.min && !field.minRows) {\n console.warn(\n `(payload): The \"min\" property is deprecated for the Relationship field \"${field.name}\" and will be removed in a future version. Please use \"minRows\" instead.`,\n )\n }\n if (field.max && !field.maxRows) {\n console.warn(\n `(payload): The \"max\" property is deprecated for the Relationship field \"${field.name}\" and will be removed in a future version. Please use \"maxRows\" instead.`,\n )\n }\n field.minRows = field.minRows || field.min\n field.maxRows = field.maxRows || field.max\n }\n }\n\n if (field.type === 'blocks' && field.blocks) {\n field.blocks = field.blocks.map((block) => ({\n ...block,\n fields: block.fields.concat(baseBlockFields),\n }))\n }\n\n if (field.type === 'array' && field.fields) {\n field.fields.push(baseIDField)\n }\n\n if ((field.type === 'blocks' || field.type === 'array') && field.label) {\n field.labels = field.labels || formatLabels(field.name)\n }\n\n if (fieldAffectsData(field)) {\n if (existingFieldNames.has(field.name)) {\n throw new DuplicateFieldName(field.name)\n } else if (!['blockName', 'id'].includes(field.name)) {\n existingFieldNames.add(field.name)\n }\n\n if (field.localized && !config.localization) delete field.localized\n\n if (typeof field.validate === 'undefined') {\n const defaultValidate = validations[field.type]\n if (defaultValidate) {\n field.validate = (val, options) => defaultValidate(val, { ...field, ...options })\n } else {\n field.validate = () => true\n }\n }\n\n if (!field.hooks) field.hooks = {}\n if (!field.access) field.access = {}\n\n setDefaultBeforeDuplicate(field)\n }\n\n if (!field.admin) {\n field.admin = {}\n }\n\n // Make sure that the richText field has an editor\n if (field.type === 'richText') {\n const sanitizeRichText = async (_config: SanitizedConfig) => {\n if (!field.editor) {\n if (_config.editor && !requireFieldLevelRichTextEditor) {\n // config.editor should be sanitized at this point\n field.editor = _config.editor\n } else {\n throw new MissingEditorProp(field)\n }\n }\n\n if (typeof field.editor === 'function') {\n field.editor = await field.editor({ config: _config })\n }\n\n // Add editor adapter hooks to field hooks\n if (!field.hooks) field.hooks = {}\n\n const mergeHooks = (hookName: keyof typeof field.editor.hooks) => {\n if (typeof field.editor === 'function') return\n\n if (field.editor?.hooks?.[hookName]?.length) {\n field.hooks[hookName] = field.hooks[hookName]\n ? field.hooks[hookName].concat(field.editor.hooks[hookName])\n : [...field.editor.hooks[hookName]]\n }\n }\n\n mergeHooks('afterRead')\n mergeHooks('afterChange')\n mergeHooks('beforeChange')\n mergeHooks('beforeValidate')\n mergeHooks('beforeDuplicate')\n }\n if (richTextSanitizationPromises) {\n richTextSanitizationPromises.push(sanitizeRichText)\n } else {\n await sanitizeRichText(config as unknown as SanitizedConfig)\n }\n }\n\n if ('fields' in field && field.fields) {\n field.fields = await sanitizeFields({\n config,\n existingFieldNames: fieldAffectsData(field) ? new Set() : existingFieldNames,\n fields: field.fields,\n requireFieldLevelRichTextEditor,\n richTextSanitizationPromises,\n validRelationships,\n })\n }\n\n if (field.type === 'tabs') {\n for (let j = 0; j < field.tabs.length; j++) {\n const tab = field.tabs[j]\n if (tabHasName(tab) && typeof tab.label === 'undefined') {\n tab.label = toWords(tab.name)\n }\n\n tab.fields = await sanitizeFields({\n config,\n existingFieldNames: tabHasName(tab) ? new Set() : existingFieldNames,\n fields: tab.fields,\n requireFieldLevelRichTextEditor,\n richTextSanitizationPromises,\n validRelationships,\n })\n field.tabs[j] = tab\n }\n }\n\n if ('blocks' in field && field.blocks) {\n for (let j = 0; j < field.blocks.length; j++) {\n const block = field.blocks[j]\n block.labels = !block.labels ? formatLabels(block.slug) : block.labels\n\n block.fields = await sanitizeFields({\n config,\n existingFieldNames: new Set(),\n fields: block.fields,\n requireFieldLevelRichTextEditor,\n richTextSanitizationPromises,\n validRelationships,\n })\n field.blocks[j] = block\n }\n }\n\n fields[i] = field\n }\n\n return fields\n}\n"],"names":["MissingEditorProp","DuplicateFieldName","InvalidFieldName","InvalidFieldRelationship","MissingFieldType","formatLabels","toWords","baseBlockFields","baseIDField","setDefaultBeforeDuplicate","validations","fieldAffectsData","tabHasName","sanitizeFields","config","existingFieldNames","Set","fields","requireFieldLevelRichTextEditor","richTextSanitizationPromises","validRelationships","i","length","field","type","name","includes","label","defaultValue","required","relationships","Array","isArray","relationTo","forEach","relationship","min","minRows","console","warn","max","maxRows","blocks","map","block","concat","push","labels","has","add","localized","localization","validate","defaultValidate","val","options","hooks","access","admin","sanitizeRichText","_config","editor","mergeHooks","hookName","j","tabs","tab","slug"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}