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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (188) hide show
  1. package/components.d.ts +14 -0
  2. package/components.js +71 -0
  3. package/dist/admin/elements/Cell.d.ts +6 -6
  4. package/dist/admin/elements/Cell.d.ts.map +1 -1
  5. package/dist/admin/elements/Cell.js.map +1 -1
  6. package/dist/admin/elements/PreviewButton.d.ts +1 -8
  7. package/dist/admin/elements/PreviewButton.d.ts.map +1 -1
  8. package/dist/admin/elements/PreviewButton.js.map +1 -1
  9. package/dist/admin/elements/PublishButton.d.ts +1 -10
  10. package/dist/admin/elements/PublishButton.d.ts.map +1 -1
  11. package/dist/admin/elements/PublishButton.js.map +1 -1
  12. package/dist/admin/elements/SaveButton.d.ts +1 -7
  13. package/dist/admin/elements/SaveButton.d.ts.map +1 -1
  14. package/dist/admin/elements/SaveButton.js.map +1 -1
  15. package/dist/admin/elements/SaveDraftButton.d.ts +1 -8
  16. package/dist/admin/elements/SaveDraftButton.d.ts.map +1 -1
  17. package/dist/admin/elements/SaveDraftButton.js.map +1 -1
  18. package/dist/admin/forms/FieldDescription.d.ts +9 -6
  19. package/dist/admin/forms/FieldDescription.d.ts.map +1 -1
  20. package/dist/admin/forms/FieldDescription.js.map +1 -1
  21. package/dist/admin/forms/Form.d.ts +1 -2
  22. package/dist/admin/forms/Form.d.ts.map +1 -1
  23. package/dist/admin/forms/Form.js.map +1 -1
  24. package/dist/admin/forms/Label.d.ts +2 -0
  25. package/dist/admin/forms/Label.d.ts.map +1 -1
  26. package/dist/admin/forms/Label.js.map +1 -1
  27. package/dist/admin/types.d.ts +7 -11
  28. package/dist/admin/types.d.ts.map +1 -1
  29. package/dist/admin/types.js.map +1 -1
  30. package/dist/admin/views/types.d.ts +8 -0
  31. package/dist/admin/views/types.d.ts.map +1 -1
  32. package/dist/admin/views/types.js.map +1 -1
  33. package/dist/auth/executeAccess.d.ts +1 -1
  34. package/dist/auth/executeAccess.d.ts.map +1 -1
  35. package/dist/auth/executeAccess.js.map +1 -1
  36. package/dist/auth/getAccessResults.d.ts.map +1 -1
  37. package/dist/auth/getAccessResults.js +7 -2
  38. package/dist/auth/getAccessResults.js.map +1 -1
  39. package/dist/auth/strategies/apiKey.js.map +1 -1
  40. package/dist/bin/migrate.d.ts +1 -1
  41. package/dist/bin/migrate.d.ts.map +1 -1
  42. package/dist/bin/migrate.js.map +1 -1
  43. package/dist/collections/config/client.d.ts +42 -42
  44. package/dist/collections/config/client.d.ts.map +1 -1
  45. package/dist/collections/config/client.js +1 -0
  46. package/dist/collections/config/client.js.map +1 -1
  47. package/dist/collections/config/sanitize.js +1 -1
  48. package/dist/collections/config/sanitize.js.map +1 -1
  49. package/dist/collections/config/types.d.ts +6 -6
  50. package/dist/collections/config/types.d.ts.map +1 -1
  51. package/dist/collections/config/types.js.map +1 -1
  52. package/dist/collections/operations/duplicate.d.ts.map +1 -1
  53. package/dist/collections/operations/duplicate.js +82 -100
  54. package/dist/collections/operations/duplicate.js.map +1 -1
  55. package/dist/collections/operations/local/create.d.ts +1 -1
  56. package/dist/collections/operations/local/create.d.ts.map +1 -1
  57. package/dist/collections/operations/local/create.js.map +1 -1
  58. package/dist/collections/operations/utils.d.ts +1 -1
  59. package/dist/collections/operations/utils.d.ts.map +1 -1
  60. package/dist/collections/operations/utils.js.map +1 -1
  61. package/dist/config/client.d.ts.map +1 -1
  62. package/dist/config/client.js.map +1 -1
  63. package/dist/config/types.d.ts +3 -1
  64. package/dist/config/types.d.ts.map +1 -1
  65. package/dist/config/types.js.map +1 -1
  66. package/dist/database/queryValidation/validateSearchParams.d.ts.map +1 -1
  67. package/dist/database/queryValidation/validateSearchParams.js +2 -1
  68. package/dist/database/queryValidation/validateSearchParams.js.map +1 -1
  69. package/dist/exports/types.d.ts +1 -1
  70. package/dist/exports/types.d.ts.map +1 -1
  71. package/dist/exports/types.js.map +1 -1
  72. package/dist/exports/utilities.d.ts +1 -0
  73. package/dist/exports/utilities.d.ts.map +1 -1
  74. package/dist/exports/utilities.js +1 -0
  75. package/dist/exports/utilities.js.map +1 -1
  76. package/dist/fields/baseFields/baseIDField.d.ts.map +1 -1
  77. package/dist/fields/baseFields/baseIDField.js +11 -3
  78. package/dist/fields/baseFields/baseIDField.js.map +1 -1
  79. package/dist/fields/config/client.d.ts +5 -0
  80. package/dist/fields/config/client.d.ts.map +1 -1
  81. package/dist/fields/config/schema.d.ts.map +1 -1
  82. package/dist/fields/config/schema.js +10 -2
  83. package/dist/fields/config/schema.js.map +1 -1
  84. package/dist/fields/config/types.d.ts +14 -2
  85. package/dist/fields/config/types.d.ts.map +1 -1
  86. package/dist/fields/config/types.js.map +1 -1
  87. package/dist/fields/getDefaultValue.d.ts +1 -1
  88. package/dist/fields/getDefaultValue.d.ts.map +1 -1
  89. package/dist/fields/getDefaultValue.js +6 -1
  90. package/dist/fields/getDefaultValue.js.map +1 -1
  91. package/dist/fields/hooks/afterChange/index.d.ts +4 -0
  92. package/dist/fields/hooks/afterChange/index.d.ts.map +1 -1
  93. package/dist/fields/hooks/afterChange/index.js +4 -1
  94. package/dist/fields/hooks/afterChange/index.js.map +1 -1
  95. package/dist/fields/hooks/afterRead/index.d.ts +9 -0
  96. package/dist/fields/hooks/afterRead/index.d.ts.map +1 -1
  97. package/dist/fields/hooks/afterRead/index.js +9 -1
  98. package/dist/fields/hooks/afterRead/index.js.map +1 -1
  99. package/dist/fields/hooks/beforeChange/beforeDuplicate.d.ts +3 -0
  100. package/dist/fields/hooks/beforeChange/beforeDuplicate.d.ts.map +1 -0
  101. package/dist/fields/hooks/beforeChange/beforeDuplicate.js +6 -0
  102. package/dist/fields/hooks/beforeChange/beforeDuplicate.js.map +1 -0
  103. package/dist/fields/hooks/beforeChange/index.d.ts +11 -1
  104. package/dist/fields/hooks/beforeChange/index.d.ts.map +1 -1
  105. package/dist/fields/hooks/beforeChange/index.js +14 -2
  106. package/dist/fields/hooks/beforeChange/index.js.map +1 -1
  107. package/dist/fields/hooks/beforeChange/promise.d.ts +3 -2
  108. package/dist/fields/hooks/beforeChange/promise.d.ts.map +1 -1
  109. package/dist/fields/hooks/beforeChange/promise.js +46 -20
  110. package/dist/fields/hooks/beforeChange/promise.js.map +1 -1
  111. package/dist/fields/hooks/beforeChange/traverseFields.d.ts +11 -2
  112. package/dist/fields/hooks/beforeChange/traverseFields.d.ts.map +1 -1
  113. package/dist/fields/hooks/beforeChange/traverseFields.js +9 -1
  114. package/dist/fields/hooks/beforeChange/traverseFields.js.map +1 -1
  115. package/dist/fields/hooks/beforeValidate/index.d.ts +9 -1
  116. package/dist/fields/hooks/beforeValidate/index.d.ts.map +1 -1
  117. package/dist/fields/hooks/beforeValidate/index.js +8 -2
  118. package/dist/fields/hooks/beforeValidate/index.js.map +1 -1
  119. package/dist/fields/hooks/beforeValidate/promise.d.ts +1 -2
  120. package/dist/fields/hooks/beforeValidate/promise.d.ts.map +1 -1
  121. package/dist/fields/hooks/beforeValidate/promise.js +1 -30
  122. package/dist/fields/hooks/beforeValidate/promise.js.map +1 -1
  123. package/dist/fields/hooks/beforeValidate/traverseFields.d.ts +1 -2
  124. package/dist/fields/hooks/beforeValidate/traverseFields.d.ts.map +1 -1
  125. package/dist/fields/hooks/beforeValidate/traverseFields.js +1 -2
  126. package/dist/fields/hooks/beforeValidate/traverseFields.js.map +1 -1
  127. package/dist/fields/setDefaultBeforeDuplicate.d.ts.map +1 -1
  128. package/dist/fields/setDefaultBeforeDuplicate.js +1 -0
  129. package/dist/fields/setDefaultBeforeDuplicate.js.map +1 -1
  130. package/dist/fields/validations.d.ts.map +1 -1
  131. package/dist/fields/validations.js +5 -4
  132. package/dist/fields/validations.js.map +1 -1
  133. package/dist/globals/config/types.d.ts +6 -6
  134. package/dist/globals/config/types.d.ts.map +1 -1
  135. package/dist/globals/config/types.js.map +1 -1
  136. package/dist/index.d.ts +5 -5
  137. package/dist/index.d.ts.map +1 -1
  138. package/dist/index.js +6 -6
  139. package/dist/index.js.map +1 -1
  140. package/dist/preferences/operations/delete.d.ts.map +1 -1
  141. package/dist/preferences/operations/delete.js +4 -5
  142. package/dist/preferences/operations/delete.js.map +1 -1
  143. package/dist/preferences/requestHandlers/delete.d.ts +1 -1
  144. package/dist/preferences/requestHandlers/delete.d.ts.map +1 -1
  145. package/dist/preferences/requestHandlers/delete.js.map +1 -1
  146. package/dist/preferences/requestHandlers/findOne.d.ts +1 -1
  147. package/dist/preferences/requestHandlers/findOne.d.ts.map +1 -1
  148. package/dist/preferences/requestHandlers/findOne.js.map +1 -1
  149. package/dist/preferences/requestHandlers/update.d.ts +1 -1
  150. package/dist/preferences/requestHandlers/update.d.ts.map +1 -1
  151. package/dist/preferences/requestHandlers/update.js.map +1 -1
  152. package/dist/translations/getLocalI18n.d.ts +2 -2
  153. package/dist/translations/getLocalI18n.d.ts.map +1 -1
  154. package/dist/translations/getLocalI18n.js +1 -1
  155. package/dist/translations/getLocalI18n.js.map +1 -1
  156. package/dist/uploads/canResizeImage.js +2 -1
  157. package/dist/uploads/canResizeImage.js.map +1 -1
  158. package/dist/uploads/generateFileData.js +2 -2
  159. package/dist/uploads/generateFileData.js.map +1 -1
  160. package/dist/uploads/getBaseFields.d.ts +2 -2
  161. package/dist/uploads/getBaseFields.d.ts.map +1 -1
  162. package/dist/uploads/getBaseFields.js +51 -8
  163. package/dist/uploads/getBaseFields.js.map +1 -1
  164. package/dist/uploads/getImageSize.d.ts.map +1 -1
  165. package/dist/uploads/getImageSize.js +5 -12
  166. package/dist/uploads/getImageSize.js.map +1 -1
  167. package/dist/uploads/types.d.ts +1 -1
  168. package/dist/uploads/types.d.ts.map +1 -1
  169. package/dist/uploads/types.js.map +1 -1
  170. package/dist/utilities/createLocalReq.d.ts +1 -1
  171. package/dist/utilities/createLocalReq.d.ts.map +1 -1
  172. package/dist/utilities/createLocalReq.js +2 -2
  173. package/dist/utilities/createLocalReq.js.map +1 -1
  174. package/dist/utilities/fieldSchemaToJSON.d.ts +1 -1
  175. package/dist/utilities/fieldSchemaToJSON.d.ts.map +1 -1
  176. package/dist/utilities/fieldSchemaToJSON.js.map +1 -1
  177. package/dist/utilities/isReactComponent.d.ts +4 -0
  178. package/dist/utilities/isReactComponent.d.ts.map +1 -0
  179. package/dist/utilities/isReactComponent.js +11 -0
  180. package/dist/utilities/isReactComponent.js.map +1 -0
  181. package/graphql.d.ts +3 -0
  182. package/graphql.js +27 -0
  183. package/package.json +6 -10
  184. package/src/index.ts +474 -0
  185. package/types.d.ts +1 -1
  186. package/utilities.d.ts +1 -0
  187. package/utilities.js +1 -0
  188. package/.release-it.js +0 -51
package/src/index.ts ADDED
@@ -0,0 +1,474 @@
1
+ import type { ExecutionResult, GraphQLSchema, ValidationRule } from 'graphql'
2
+ import type { OperationArgs, Request as graphQLRequest } from 'graphql-http'
3
+ import type { SendMailOptions } from 'nodemailer'
4
+ import type pino from 'pino'
5
+
6
+ import crypto from 'crypto'
7
+
8
+ import type { Result as ForgotPasswordResult } from './auth/operations/forgotPassword.js'
9
+ import type { Options as ForgotPasswordOptions } from './auth/operations/local/forgotPassword.js'
10
+ import type { Options as LoginOptions } from './auth/operations/local/login.js'
11
+ import type { Options as ResetPasswordOptions } from './auth/operations/local/resetPassword.js'
12
+ import type { Options as UnlockOptions } from './auth/operations/local/unlock.js'
13
+ import type { Options as VerifyEmailOptions } from './auth/operations/local/verifyEmail.js'
14
+ import type { Result as LoginResult } from './auth/operations/login.js'
15
+ import type { Result as ResetPasswordResult } from './auth/operations/resetPassword.js'
16
+ import type { AuthStrategy } from './auth/types.js'
17
+ import type { BulkOperationResult, Collection, TypeWithID } from './collections/config/types.js'
18
+ import type { Options as CreateOptions } from './collections/operations/local/create.js'
19
+ import type {
20
+ ByIDOptions as DeleteByIDOptions,
21
+ ManyOptions as DeleteManyOptions,
22
+ Options as DeleteOptions,
23
+ } from './collections/operations/local/delete.js'
24
+ import type { Options as DuplicateOptions } from './collections/operations/local/duplicate.js'
25
+ import type { Options as FindOptions } from './collections/operations/local/find.js'
26
+ import type { Options as FindByIDOptions } from './collections/operations/local/findByID.js'
27
+ import type { Options as FindVersionByIDOptions } from './collections/operations/local/findVersionByID.js'
28
+ import type { Options as FindVersionsOptions } from './collections/operations/local/findVersions.js'
29
+ import type { Options as RestoreVersionOptions } from './collections/operations/local/restoreVersion.js'
30
+ import type {
31
+ ByIDOptions as UpdateByIDOptions,
32
+ ManyOptions as UpdateManyOptions,
33
+ Options as UpdateOptions,
34
+ } from './collections/operations/local/update.js'
35
+ import type { EmailOptions, InitOptions, SanitizedConfig } from './config/types.js'
36
+ import type { BaseDatabaseAdapter, PaginatedDocs } from './database/types.js'
37
+ import type { BuildEmailResult } from './email/types.js'
38
+ import type { TypeWithID as GlobalTypeWithID, Globals } from './globals/config/types.js'
39
+ import type { Options as FindGlobalOptions } from './globals/operations/local/findOne.js'
40
+ import type { Options as FindGlobalVersionByIDOptions } from './globals/operations/local/findVersionByID.js'
41
+ import type { Options as FindGlobalVersionsOptions } from './globals/operations/local/findVersions.js'
42
+ import type { Options as RestoreGlobalVersionOptions } from './globals/operations/local/restoreVersion.js'
43
+ import type { Options as UpdateGlobalOptions } from './globals/operations/local/update.js'
44
+ import type { TypeWithVersion } from './versions/types.js'
45
+
46
+ import { decrypt, encrypt } from './auth/crypto.js'
47
+ import { APIKeyAuthentication } from './auth/strategies/apiKey.js'
48
+ import { JWTAuthentication } from './auth/strategies/jwt.js'
49
+ import localOperations from './collections/operations/local/index.js'
50
+ import { validateSchema } from './config/validate.js'
51
+ import buildEmail from './email/build.js'
52
+ import { defaults as emailDefaults } from './email/defaults.js'
53
+ import sendEmail from './email/sendEmail.js'
54
+ import localGlobalOperations from './globals/operations/local/index.js'
55
+ import Logger from './utilities/logger.js'
56
+ import { serverInit as serverInitTelemetry } from './utilities/telemetry/events/serverInit.js'
57
+
58
+ /**
59
+ * @description Payload
60
+ */
61
+ export class BasePayload<TGeneratedTypes extends GeneratedTypes> {
62
+ authStrategies: AuthStrategy[]
63
+
64
+ collections: {
65
+ [slug: number | string | symbol]: Collection
66
+ } = {}
67
+
68
+ config: SanitizedConfig
69
+
70
+ /**
71
+ * @description Performs create operation
72
+ * @param options
73
+ * @returns created document
74
+ */
75
+ create = async <T extends keyof TGeneratedTypes['collections']>(
76
+ options: CreateOptions<T>,
77
+ ): Promise<TGeneratedTypes['collections'][T]> => {
78
+ const { create } = localOperations
79
+ return create<T>(this, options)
80
+ }
81
+
82
+ db: BaseDatabaseAdapter
83
+
84
+ decrypt = decrypt
85
+
86
+ duplicate = async <T extends keyof TGeneratedTypes['collections']>(
87
+ options: DuplicateOptions<T>,
88
+ ): Promise<TGeneratedTypes['collections'][T]> => {
89
+ const { duplicate } = localOperations
90
+ return duplicate<T>(this, options)
91
+ }
92
+
93
+ email: BuildEmailResult
94
+
95
+ emailOptions: EmailOptions
96
+
97
+ // TODO: re-implement or remove?
98
+ // errorHandler: ErrorHandler
99
+
100
+ encrypt = encrypt
101
+
102
+ extensions: (args: {
103
+ args: OperationArgs<any>
104
+ req: graphQLRequest<unknown, unknown>
105
+ result: ExecutionResult
106
+ }) => Promise<any>
107
+
108
+ /**
109
+ * @description Find documents with criteria
110
+ * @param options
111
+ * @returns documents satisfying query
112
+ */
113
+ find = async <T extends keyof TGeneratedTypes['collections']>(
114
+ options: FindOptions<T>,
115
+ ): Promise<PaginatedDocs<TGeneratedTypes['collections'][T]>> => {
116
+ const { find } = localOperations
117
+ return find<T>(this, options)
118
+ }
119
+
120
+ /**
121
+ * @description Find document by ID
122
+ * @param options
123
+ * @returns document with specified ID
124
+ */
125
+ findByID = async <T extends keyof TGeneratedTypes['collections']>(
126
+ options: FindByIDOptions<T>,
127
+ ): Promise<TGeneratedTypes['collections'][T]> => {
128
+ const { findByID } = localOperations
129
+ return findByID<T>(this, options)
130
+ }
131
+
132
+ findGlobal = async <T extends keyof TGeneratedTypes['globals']>(
133
+ options: FindGlobalOptions<T>,
134
+ ): Promise<TGeneratedTypes['globals'][T]> => {
135
+ const { findOne } = localGlobalOperations
136
+ return findOne<T>(this, options)
137
+ }
138
+
139
+ /**
140
+ * @description Find global version by ID
141
+ * @param options
142
+ * @returns global version with specified ID
143
+ */
144
+ findGlobalVersionByID = async <T extends keyof TGeneratedTypes['globals']>(
145
+ options: FindGlobalVersionByIDOptions<T>,
146
+ ): Promise<TypeWithVersion<TGeneratedTypes['globals'][T]>> => {
147
+ const { findVersionByID } = localGlobalOperations
148
+ return findVersionByID<T>(this, options)
149
+ }
150
+
151
+ /**
152
+ * @description Find global versions with criteria
153
+ * @param options
154
+ * @returns versions satisfying query
155
+ */
156
+ findGlobalVersions = async <T extends keyof TGeneratedTypes['globals']>(
157
+ options: FindGlobalVersionsOptions<T>,
158
+ ): Promise<PaginatedDocs<TypeWithVersion<TGeneratedTypes['globals'][T]>>> => {
159
+ const { findVersions } = localGlobalOperations
160
+ return findVersions<T>(this, options)
161
+ }
162
+
163
+ /**
164
+ * @description Find version by ID
165
+ * @param options
166
+ * @returns version with specified ID
167
+ */
168
+ findVersionByID = async <T extends keyof TGeneratedTypes['collections']>(
169
+ options: FindVersionByIDOptions<T>,
170
+ ): Promise<TypeWithVersion<TGeneratedTypes['collections'][T]>> => {
171
+ const { findVersionByID } = localOperations
172
+ return findVersionByID<T>(this, options)
173
+ }
174
+
175
+ /**
176
+ * @description Find versions with criteria
177
+ * @param options
178
+ * @returns versions satisfying query
179
+ */
180
+ findVersions = async <T extends keyof TGeneratedTypes['collections']>(
181
+ options: FindVersionsOptions<T>,
182
+ ): Promise<PaginatedDocs<TypeWithVersion<TGeneratedTypes['collections'][T]>>> => {
183
+ const { findVersions } = localOperations
184
+ return findVersions<T>(this, options)
185
+ }
186
+
187
+ forgotPassword = async <T extends keyof TGeneratedTypes['collections']>(
188
+ options: ForgotPasswordOptions<T>,
189
+ ): Promise<ForgotPasswordResult> => {
190
+ const { forgotPassword } = localOperations.auth
191
+ return forgotPassword<T>(this, options)
192
+ }
193
+
194
+ getAPIURL = (): string => `${this.config.serverURL}${this.config.routes.api}`
195
+
196
+ getAdminURL = (): string => `${this.config.serverURL}${this.config.routes.admin}`
197
+
198
+ globals: Globals
199
+
200
+ logger: pino.Logger
201
+
202
+ login = async <T extends keyof TGeneratedTypes['collections']>(
203
+ options: LoginOptions<T>,
204
+ ): Promise<LoginResult & { user: TGeneratedTypes['collections'][T] }> => {
205
+ const { login } = localOperations.auth
206
+ return login<T>(this, options)
207
+ }
208
+
209
+ resetPassword = async <T extends keyof TGeneratedTypes['collections']>(
210
+ options: ResetPasswordOptions<T>,
211
+ ): Promise<ResetPasswordResult> => {
212
+ const { resetPassword } = localOperations.auth
213
+ return resetPassword<T>(this, options)
214
+ }
215
+
216
+ /**
217
+ * @description Restore global version by ID
218
+ * @param options
219
+ * @returns version with specified ID
220
+ */
221
+ restoreGlobalVersion = async <T extends keyof TGeneratedTypes['globals']>(
222
+ options: RestoreGlobalVersionOptions<T>,
223
+ ): Promise<TGeneratedTypes['globals'][T]> => {
224
+ const { restoreVersion } = localGlobalOperations
225
+ return restoreVersion<T>(this, options)
226
+ }
227
+
228
+ /**
229
+ * @description Restore version by ID
230
+ * @param options
231
+ * @returns version with specified ID
232
+ */
233
+ restoreVersion = async <T extends keyof TGeneratedTypes['collections']>(
234
+ options: RestoreVersionOptions<T>,
235
+ ): Promise<TGeneratedTypes['collections'][T]> => {
236
+ const { restoreVersion } = localOperations
237
+ return restoreVersion<T>(this, options)
238
+ }
239
+
240
+ schema: GraphQLSchema
241
+
242
+ secret: string
243
+
244
+ sendEmail: (message: SendMailOptions) => Promise<unknown>
245
+
246
+ types: {
247
+ arrayTypes: any
248
+ blockInputTypes: any
249
+ blockTypes: any
250
+ fallbackLocaleInputType?: any
251
+ groupTypes: any
252
+ localeInputType?: any
253
+ tabTypes: any
254
+ }
255
+
256
+ unlock = async <T extends keyof TGeneratedTypes['collections']>(
257
+ options: UnlockOptions<T>,
258
+ ): Promise<boolean> => {
259
+ const { unlock } = localOperations.auth
260
+ return unlock(this, options)
261
+ }
262
+
263
+ updateGlobal = async <T extends keyof TGeneratedTypes['globals']>(
264
+ options: UpdateGlobalOptions<T>,
265
+ ): Promise<TGeneratedTypes['globals'][T]> => {
266
+ const { update } = localGlobalOperations
267
+ return update<T>(this, options)
268
+ }
269
+
270
+ validationRules: (args: OperationArgs<any>) => ValidationRule[]
271
+
272
+ verifyEmail = async <T extends keyof TGeneratedTypes['collections']>(
273
+ options: VerifyEmailOptions<T>,
274
+ ): Promise<boolean> => {
275
+ const { verifyEmail } = localOperations.auth
276
+ return verifyEmail(this, options)
277
+ }
278
+
279
+ versions: {
280
+ [slug: string]: any // TODO: Type this
281
+ } = {}
282
+
283
+ /**
284
+ * @description delete one or more documents
285
+ * @param options
286
+ * @returns Updated document(s)
287
+ */
288
+ delete<T extends keyof TGeneratedTypes['collections']>(
289
+ options: DeleteByIDOptions<T>,
290
+ ): Promise<TGeneratedTypes['collections'][T]>
291
+
292
+ delete<T extends keyof TGeneratedTypes['collections']>(
293
+ options: DeleteManyOptions<T>,
294
+ ): Promise<BulkOperationResult<T>>
295
+
296
+ delete<T extends keyof TGeneratedTypes['collections']>(
297
+ options: DeleteOptions<T>,
298
+ ): Promise<BulkOperationResult<T> | TGeneratedTypes['collections'][T]> {
299
+ const { deleteLocal } = localOperations
300
+ return deleteLocal<T>(this, options)
301
+ }
302
+
303
+ /**
304
+ * @description Initializes Payload
305
+ * @param options
306
+ */
307
+ async init(options: InitOptions): Promise<Payload> {
308
+ if (!options?.config) {
309
+ throw new Error('Error: the payload config is required to initialize payload.')
310
+ }
311
+
312
+ this.logger = Logger('payload', options.loggerOptions, options.loggerDestination)
313
+
314
+ this.config = await options.config
315
+
316
+ if (process.env.NODE_ENV !== 'production') {
317
+ validateSchema(this.config, this.logger)
318
+ }
319
+
320
+ if (!this.config.secret) {
321
+ throw new Error('Error: missing secret key. A secret key is needed to secure Payload.')
322
+ }
323
+
324
+ this.secret = crypto.createHash('sha256').update(this.config.secret).digest('hex').slice(0, 32)
325
+
326
+ this.globals = {
327
+ config: this.config.globals,
328
+ }
329
+
330
+ this.config.collections.forEach((collection) => {
331
+ this.collections[collection.slug] = {
332
+ config: collection,
333
+ }
334
+ })
335
+
336
+ this.db = this.config.db.init({ payload: this })
337
+ this.db.payload = this
338
+
339
+ if (this.db?.init) {
340
+ await this.db.init()
341
+ }
342
+
343
+ if (!options.disableDBConnect && this.db.connect) {
344
+ await this.db.connect()
345
+ }
346
+
347
+ // Configure email service
348
+ const emailOptions = options.email ? { ...options.email } : this.config.email
349
+ if (options.email && this.config.email) {
350
+ this.logger.warn(
351
+ 'Email options provided in both init options and config. Using init options.',
352
+ )
353
+ }
354
+
355
+ this.emailOptions = emailOptions ?? emailDefaults
356
+ this.email = buildEmail(this.emailOptions, this.logger)
357
+ this.sendEmail = sendEmail.bind(this)
358
+
359
+ serverInitTelemetry(this)
360
+
361
+ // 1. loop over collections, if collection has auth strategy, initialize and push to array
362
+ let jwtStrategyEnabled = false
363
+ this.authStrategies = this.config.collections.reduce((authStrategies, collection) => {
364
+ if (collection?.auth) {
365
+ if (collection.auth.strategies.length > 0) {
366
+ authStrategies.push(...collection.auth.strategies)
367
+ }
368
+
369
+ // 2. if api key enabled, push api key strategy into the array
370
+ if (collection.auth?.useAPIKey) {
371
+ authStrategies.push({
372
+ name: `${collection.slug}-api-key`,
373
+ authenticate: APIKeyAuthentication(collection),
374
+ })
375
+ }
376
+
377
+ // 3. if localStrategy flag is true
378
+ if (!collection.auth.disableLocalStrategy && !jwtStrategyEnabled) {
379
+ jwtStrategyEnabled = true
380
+ }
381
+ }
382
+
383
+ return authStrategies
384
+ }, [] as AuthStrategy[])
385
+
386
+ // 4. if enabled, push jwt strategy into authStrategies last
387
+ if (jwtStrategyEnabled) {
388
+ this.authStrategies.push({
389
+ name: 'local-jwt',
390
+ authenticate: JWTAuthentication,
391
+ })
392
+ }
393
+
394
+ if (!options.disableOnInit) {
395
+ if (typeof options.onInit === 'function') await options.onInit(this)
396
+ if (typeof this.config.onInit === 'function') await this.config.onInit(this)
397
+ }
398
+
399
+ return this
400
+ }
401
+
402
+ update<T extends keyof TGeneratedTypes['collections']>(
403
+ options: UpdateManyOptions<T>,
404
+ ): Promise<BulkOperationResult<T>>
405
+
406
+ /**
407
+ * @description Update one or more documents
408
+ * @param options
409
+ * @returns Updated document(s)
410
+ */
411
+ update<T extends keyof TGeneratedTypes['collections']>(
412
+ options: UpdateByIDOptions<T>,
413
+ ): Promise<TGeneratedTypes['collections'][T]>
414
+
415
+ update<T extends keyof TGeneratedTypes['collections']>(
416
+ options: UpdateOptions<T>,
417
+ ): Promise<BulkOperationResult<T> | TGeneratedTypes['collections'][T]> {
418
+ const { update } = localOperations
419
+ return update<T>(this, options)
420
+ }
421
+ }
422
+
423
+ const initialized = new BasePayload()
424
+
425
+ export default initialized
426
+
427
+ let cached = global._payload
428
+
429
+ if (!cached) {
430
+ // eslint-disable-next-line no-multi-assign
431
+ cached = global._payload = { payload: null, promise: null }
432
+ }
433
+
434
+ export const getPayload = async (options: InitOptions): Promise<BasePayload<GeneratedTypes>> => {
435
+ if (!options?.config) {
436
+ throw new Error('Error: the payload config is required for getPayload to work.')
437
+ }
438
+
439
+ if (cached.payload) {
440
+ return cached.payload
441
+ }
442
+
443
+ if (!cached.promise) {
444
+ cached.promise = new BasePayload<GeneratedTypes>().init(options)
445
+ }
446
+
447
+ try {
448
+ cached.payload = await cached.promise
449
+ } catch (e) {
450
+ cached.promise = null
451
+ throw e
452
+ }
453
+
454
+ return cached.payload
455
+ }
456
+
457
+ type GeneratedTypes = {
458
+ collections: {
459
+ [slug: number | string | symbol]: TypeWithID & Record<string, unknown>
460
+ }
461
+ globals: {
462
+ [slug: number | string | symbol]: GlobalTypeWithID & Record<string, unknown>
463
+ }
464
+ }
465
+
466
+ type Payload = BasePayload<GeneratedTypes>
467
+
468
+ interface RequestContext {
469
+ [key: string]: unknown
470
+ }
471
+
472
+ // type DatabaseAdapter = BaseDatabaseAdapter
473
+
474
+ export type { GeneratedTypes, Payload, RequestContext }
package/types.d.ts CHANGED
@@ -7,7 +7,7 @@ export type { CollapsedPreferences, DocumentPreferences, FieldsPreferences, Insi
7
7
  export type { ClientCollectionConfig } from './dist/collections/config/client.js';
8
8
  export type { AfterChangeHook as CollectionAfterChangeHook, AfterDeleteHook as CollectionAfterDeleteHook, AfterErrorHook as CollectionAfterErrorHook, AfterForgotPasswordHook as CollectionAfterForgotPasswordHook, AfterLoginHook as CollectionAfterLoginHook, AfterOperationHook as CollectionAfterOperationHook, AfterReadHook as CollectionAfterReadHook, BeforeChangeHook as CollectionBeforeChangeHook, BeforeDeleteHook as CollectionBeforeDeleteHook, BeforeLoginHook as CollectionBeforeLoginHook, BeforeOperationHook as CollectionBeforeOperationHook, BeforeReadHook as CollectionBeforeReadHook, BeforeValidateHook as CollectionBeforeValidateHook, Collection, CollectionConfig, SanitizedCollectionConfig, TypeWithID, TypeWithTimestamps, } from './dist/collections/config/types.js';
9
9
  export type { ClientConfig } from './dist/config/client.js';
10
- export type { Access, AccessArgs, EditViewComponent, SanitizedConfig } from './dist/config/types.js';
10
+ export type { Access, AccessArgs, EditViewComponent, EntityDescription, EntityDescriptionComponent, EntityDescriptionFunction, SanitizedConfig, } from './dist/config/types.js';
11
11
  export type { ClientFieldConfig } from './dist/fields/config/client.js';
12
12
  export type { ArrayField, Block, BlockField, CheckboxField, ClientValidate, CodeField, CollapsibleField, Condition, DateField, EmailField, Field, FieldAccess, FieldAffectingData, FieldBase, FieldHook, FieldHookArgs, FieldPresentationalOnly, FieldWithMany, FieldWithMaxDepth, FieldWithPath, FieldWithSubFields, FilterOptions, FilterOptionsProps, GroupField, HookName, JSONField, Labels, NamedTab, NonPresentationalField, NumberField, Option, OptionObject, PointField, PolymorphicRelationshipField, RadioField, RelationshipField, RelationshipValue, RichTextField, RowAdmin, RowField, SelectField, SingleRelationshipField, Tab, TabAsField, TabsAdmin, TabsField, TextField, TextareaField, UIField, UnnamedTab, UploadField, Validate, ValidateOptions, ValueWithRelation, } from './dist/fields/config/types.js';
13
13
  export { fieldAffectsData, fieldHasMaxDepth, fieldHasSubFields, fieldIsArrayType, fieldIsBlockType, fieldIsGroupType, fieldIsLocalized, fieldIsPresentationalOnly, fieldSupportsMany, optionIsObject, optionIsValue, optionsAreObjects, tabHasName, valueIsValueWithRelation, } from './dist/fields/config/types.js';
package/utilities.d.ts CHANGED
@@ -21,6 +21,7 @@ export { default as getUniqueListBy } from './dist/utilities/getUniqueListBy.js'
21
21
  export { isEntityHidden } from './dist/utilities/isEntityHidden.js';
22
22
  export { isNumber } from './dist/utilities/isNumber.js';
23
23
  export { isPlainObject } from './dist/utilities/isPlainObject.js';
24
+ export { isPlainFunction, isReactComponent } from './dist/utilities/isReactComponent.js';
24
25
  export { isValidID } from './dist/utilities/isValidID.js';
25
26
  export { default as isolateObjectProperty } from './dist/utilities/isolateObjectProperty.js';
26
27
  export { mapAsync } from './dist/utilities/mapAsync.js';
package/utilities.js CHANGED
@@ -21,6 +21,7 @@ export { default as getUniqueListBy } from './dist/utilities/getUniqueListBy.js'
21
21
  export { isEntityHidden } from './dist/utilities/isEntityHidden.js';
22
22
  export { isNumber } from './dist/utilities/isNumber.js';
23
23
  export { isPlainObject } from './dist/utilities/isPlainObject.js';
24
+ export { isPlainFunction, isReactComponent } from './dist/utilities/isReactComponent.js';
24
25
  export { isValidID } from './dist/utilities/isValidID.js';
25
26
  export { default as isolateObjectProperty } from './dist/utilities/isolateObjectProperty.js';
26
27
  export { mapAsync } from './dist/utilities/mapAsync.js';
package/.release-it.js DELETED
@@ -1,51 +0,0 @@
1
- module.exports = {
2
- verbose: true,
3
- git: {
4
- commitMessage: 'chore(release): v${version}',
5
- requireCleanWorkingDir: false,
6
- tagMatch: 'v*', // payload is tagged normally, other packages are tagged with a prefix
7
- },
8
- github: {
9
- release: true,
10
- },
11
- npm: {
12
- skipChecks: true,
13
- },
14
- hooks: {
15
- 'before:init': ['pnpm install', 'pnpm clean', 'pnpm build'], // Assume tests have already been run
16
- },
17
- plugins: {
18
- '@release-it/conventional-changelog': {
19
- infile: '../../CHANGELOG.md',
20
- preset: {
21
- name: 'conventionalcommits',
22
- types: [
23
- { type: 'feat', section: 'Features' },
24
- { type: 'feature', section: 'Features' },
25
- { type: 'fix', section: 'Bug Fixes' },
26
- { type: 'docs', section: 'Documentation' },
27
- ],
28
- },
29
- writerOpts: {
30
- commitGroupsSort: (a, b) => {
31
- const groupOrder = ['Features', 'Bug Fixes', 'Documentation']
32
- return groupOrder.indexOf(a.title) - groupOrder.indexOf(b.title)
33
- },
34
-
35
- // Scoped commits at the end, alphabetical sort
36
- commitsSort: (a, b) => {
37
- if (a.scope || b.scope) {
38
- if (!a.scope) return -1
39
- if (!b.scope) return 1
40
- return a.scope === b.scope
41
- ? a.subject.localeCompare(b.subject)
42
- : a.scope.localeCompare(b.scope)
43
- }
44
-
45
- // Alphabetical sort
46
- return a.subject.localeCompare(b.subject)
47
- },
48
- },
49
- },
50
- },
51
- }