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/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type { ExecutionResult, GraphQLSchema, ValidationRule } from 'graphql'\nimport type { OperationArgs, Request as graphQLRequest } from 'graphql-http'\nimport type { SendMailOptions } from 'nodemailer'\nimport type pino from 'pino'\n\nimport crypto from 'crypto'\n\nimport type { Result as ForgotPasswordResult } from './auth/operations/forgotPassword.js'\nimport type { Options as ForgotPasswordOptions } from './auth/operations/local/forgotPassword.js'\nimport type { Options as LoginOptions } from './auth/operations/local/login.js'\nimport type { Options as ResetPasswordOptions } from './auth/operations/local/resetPassword.js'\nimport type { Options as UnlockOptions } from './auth/operations/local/unlock.js'\nimport type { Options as VerifyEmailOptions } from './auth/operations/local/verifyEmail.js'\nimport type { Result as LoginResult } from './auth/operations/login.js'\nimport type { Result as ResetPasswordResult } from './auth/operations/resetPassword.js'\nimport type { AuthStrategy } from './auth/types.js'\nimport type { BulkOperationResult, Collection, TypeWithID } from './collections/config/types.js'\nimport type { Options as CreateOptions } from './collections/operations/local/create.js'\nimport type {\n ByIDOptions as DeleteByIDOptions,\n ManyOptions as DeleteManyOptions,\n Options as DeleteOptions,\n} from './collections/operations/local/delete.js'\nimport type { Options as DuplicateOptions } from './collections/operations/local/duplicate.js'\nimport type { Options as FindOptions } from './collections/operations/local/find.js'\nimport type { Options as FindByIDOptions } from './collections/operations/local/findByID.js'\nimport type { Options as FindVersionByIDOptions } from './collections/operations/local/findVersionByID.js'\nimport type { Options as FindVersionsOptions } from './collections/operations/local/findVersions.js'\nimport type { Options as RestoreVersionOptions } from './collections/operations/local/restoreVersion.js'\nimport type {\n ByIDOptions as UpdateByIDOptions,\n ManyOptions as UpdateManyOptions,\n Options as UpdateOptions,\n} from './collections/operations/local/update.js'\nimport type { EmailOptions, InitOptions, SanitizedConfig } from './config/types.js'\nimport type { BaseDatabaseAdapter, PaginatedDocs } from './database/types.js'\nimport type { BuildEmailResult } from './email/types.js'\nimport type { TypeWithID as GlobalTypeWithID, Globals } from './globals/config/types.js'\nimport type { Options as FindGlobalOptions } from './globals/operations/local/findOne.js'\nimport type { Options as FindGlobalVersionByIDOptions } from './globals/operations/local/findVersionByID.js'\nimport type { Options as FindGlobalVersionsOptions } from './globals/operations/local/findVersions.js'\nimport type { Options as RestoreGlobalVersionOptions } from './globals/operations/local/restoreVersion.js'\nimport type { Options as UpdateGlobalOptions } from './globals/operations/local/update.js'\nimport type { TypeWithVersion } from './versions/types.js'\n\nimport { decrypt, encrypt } from './auth/crypto.js'\nimport { APIKeyAuthentication } from './auth/strategies/apiKey.js'\nimport { JWTAuthentication } from './auth/strategies/jwt.js'\nimport localOperations from './collections/operations/local/index.js'\nimport { validateSchema } from './config/validate.js'\nimport buildEmail from './email/build.js'\nimport { defaults as emailDefaults } from './email/defaults.js'\nimport sendEmail from './email/sendEmail.js'\nimport localGlobalOperations from './globals/operations/local/index.js'\nimport Logger from './utilities/logger.js'\nimport { serverInit as serverInitTelemetry } from './utilities/telemetry/events/serverInit.js'\n\n/**\n * @description Payload\n */\nexport class BasePayload<TGeneratedTypes extends GeneratedTypes> {\n authStrategies: AuthStrategy[]\n\n collections: {\n [slug: number | string | symbol]: Collection\n } = {}\n\n config: SanitizedConfig\n\n /**\n * @description Performs create operation\n * @param options\n * @returns created document\n */\n create = async <T extends keyof TGeneratedTypes['collections']>(\n options: CreateOptions<T>,\n ): Promise<TGeneratedTypes['collections'][T]> => {\n const { create } = localOperations\n return create<T>(this, options)\n }\n\n db: BaseDatabaseAdapter\n\n decrypt = decrypt\n\n duplicate = async <T extends keyof TGeneratedTypes['collections']>(\n options: DuplicateOptions<T>,\n ): Promise<TGeneratedTypes['collections'][T]> => {\n const { duplicate } = localOperations\n return duplicate<T>(this, options)\n }\n\n email: BuildEmailResult\n\n emailOptions: EmailOptions\n\n // TODO: re-implement or remove?\n // errorHandler: ErrorHandler\n\n encrypt = encrypt\n\n extensions: (args: {\n args: OperationArgs<any>\n req: graphQLRequest<unknown, unknown>\n result: ExecutionResult\n }) => Promise<any>\n\n /**\n * @description Find documents with criteria\n * @param options\n * @returns documents satisfying query\n */\n find = async <T extends keyof TGeneratedTypes['collections']>(\n options: FindOptions<T>,\n ): Promise<PaginatedDocs<TGeneratedTypes['collections'][T]>> => {\n const { find } = localOperations\n return find<T>(this, options)\n }\n\n findByID = async <T extends keyof TGeneratedTypes['collections']>(\n options: FindByIDOptions<T>,\n ): Promise<TGeneratedTypes['collections'][T]> => {\n const { findByID } = localOperations\n return findByID<T>(this, options)\n }\n\n findGlobal = async <T extends keyof TGeneratedTypes['globals']>(\n options: FindGlobalOptions<T>,\n ): Promise<TGeneratedTypes['globals'][T]> => {\n const { findOne } = localGlobalOperations\n return findOne<T>(this, options)\n }\n\n /**\n * @description Find global version by ID\n * @param options\n * @returns global version with specified ID\n */\n findGlobalVersionByID = async <T extends keyof TGeneratedTypes['globals']>(\n options: FindGlobalVersionByIDOptions<T>,\n ): Promise<TypeWithVersion<TGeneratedTypes['globals'][T]>> => {\n const { findVersionByID } = localGlobalOperations\n return findVersionByID<T>(this, options)\n }\n\n /**\n * @description Find global versions with criteria\n * @param options\n * @returns versions satisfying query\n */\n findGlobalVersions = async <T extends keyof TGeneratedTypes['globals']>(\n options: FindGlobalVersionsOptions<T>,\n ): Promise<PaginatedDocs<TypeWithVersion<TGeneratedTypes['globals'][T]>>> => {\n const { findVersions } = localGlobalOperations\n return findVersions<T>(this, options)\n }\n\n /**\n * @description Find version by ID\n * @param options\n * @returns version with specified ID\n */\n findVersionByID = async <T extends keyof TGeneratedTypes['collections']>(\n options: FindVersionByIDOptions<T>,\n ): Promise<TypeWithVersion<TGeneratedTypes['collections'][T]>> => {\n const { findVersionByID } = localOperations\n return findVersionByID<T>(this, options)\n }\n\n /**\n * @description Find versions with criteria\n * @param options\n * @returns versions satisfying query\n */\n findVersions = async <T extends keyof TGeneratedTypes['collections']>(\n options: FindVersionsOptions<T>,\n ): Promise<PaginatedDocs<TypeWithVersion<TGeneratedTypes['collections'][T]>>> => {\n const { findVersions } = localOperations\n return findVersions<T>(this, options)\n }\n\n forgotPassword = async <T extends keyof TGeneratedTypes['collections']>(\n options: ForgotPasswordOptions<T>,\n ): Promise<ForgotPasswordResult> => {\n const { forgotPassword } = localOperations.auth\n return forgotPassword<T>(this, options)\n }\n\n getAPIURL = (): string => `${this.config.serverURL}${this.config.routes.api}`\n\n getAdminURL = (): string => `${this.config.serverURL}${this.config.routes.admin}`\n\n globals: Globals\n\n logger: pino.Logger\n\n /**\n * @description Find document by ID\n * @param options\n * @returns document with specified ID\n */\n\n login = async <T extends keyof TGeneratedTypes['collections']>(\n options: LoginOptions<T>,\n ): Promise<LoginResult & { user: TGeneratedTypes['collections'][T] }> => {\n const { login } = localOperations.auth\n return login<T>(this, options)\n }\n\n resetPassword = async <T extends keyof TGeneratedTypes['collections']>(\n options: ResetPasswordOptions<T>,\n ): Promise<ResetPasswordResult> => {\n const { resetPassword } = localOperations.auth\n return resetPassword<T>(this, options)\n }\n\n /**\n * @description Restore global version by ID\n * @param options\n * @returns version with specified ID\n */\n restoreGlobalVersion = async <T extends keyof TGeneratedTypes['globals']>(\n options: RestoreGlobalVersionOptions<T>,\n ): Promise<TGeneratedTypes['globals'][T]> => {\n const { restoreVersion } = localGlobalOperations\n return restoreVersion<T>(this, options)\n }\n\n /**\n * @description Restore version by ID\n * @param options\n * @returns version with specified ID\n */\n restoreVersion = async <T extends keyof TGeneratedTypes['collections']>(\n options: RestoreVersionOptions<T>,\n ): Promise<TGeneratedTypes['collections'][T]> => {\n const { restoreVersion } = localOperations\n return restoreVersion<T>(this, options)\n }\n\n schema: GraphQLSchema\n\n secret: string\n\n sendEmail: (message: SendMailOptions) => Promise<unknown>\n\n types: {\n arrayTypes: any\n blockInputTypes: any\n blockTypes: any\n fallbackLocaleInputType?: any\n groupTypes: any\n localeInputType?: any\n tabTypes: any\n }\n\n unlock = async <T extends keyof TGeneratedTypes['collections']>(\n options: UnlockOptions<T>,\n ): Promise<boolean> => {\n const { unlock } = localOperations.auth\n return unlock(this, options)\n }\n\n updateGlobal = async <T extends keyof TGeneratedTypes['globals']>(\n options: UpdateGlobalOptions<T>,\n ): Promise<TGeneratedTypes['globals'][T]> => {\n const { update } = localGlobalOperations\n return update<T>(this, options)\n }\n\n validationRules: (args: OperationArgs<any>) => ValidationRule[]\n\n verifyEmail = async <T extends keyof TGeneratedTypes['collections']>(\n options: VerifyEmailOptions<T>,\n ): Promise<boolean> => {\n const { verifyEmail } = localOperations.auth\n return verifyEmail(this, options)\n }\n\n versions: {\n [slug: string]: any // TODO: Type this\n } = {}\n\n /**\n * @description delete one or more documents\n * @param options\n * @returns Updated document(s)\n */\n delete<T extends keyof TGeneratedTypes['collections']>(\n options: DeleteByIDOptions<T>,\n ): Promise<TGeneratedTypes['collections'][T]>\n\n delete<T extends keyof TGeneratedTypes['collections']>(\n options: DeleteManyOptions<T>,\n ): Promise<BulkOperationResult<T>>\n\n delete<T extends keyof TGeneratedTypes['collections']>(\n options: DeleteOptions<T>,\n ): Promise<BulkOperationResult<T> | TGeneratedTypes['collections'][T]> {\n const { deleteLocal } = localOperations\n return deleteLocal<T>(this, options)\n }\n\n /**\n * @description Initializes Payload\n * @param options\n */\n async init(options: InitOptions): Promise<Payload> {\n if (!options?.config) {\n throw new Error('Error: the payload config is required to initialize payload.')\n }\n\n this.logger = Logger('payload', options.loggerOptions, options.loggerDestination)\n\n this.config = await options.config\n\n if (process.env.NODE_ENV !== 'production') {\n validateSchema(this.config, this.logger)\n }\n\n if (!this.config.secret) {\n throw new Error('Error: missing secret key. A secret key is needed to secure Payload.')\n }\n\n this.secret = crypto.createHash('sha256').update(this.config.secret).digest('hex').slice(0, 32)\n\n this.globals = {\n config: this.config.globals,\n }\n\n this.config.collections.forEach((collection) => {\n this.collections[collection.slug] = {\n config: collection,\n }\n })\n\n this.db = this.config.db.init({ payload: this })\n this.db.payload = this\n\n if (this.db?.init) {\n await this.db.init()\n }\n\n if (!options.disableDBConnect && this.db.connect) {\n await this.db.connect()\n }\n\n // Configure email service\n const emailOptions = options.email ? { ...options.email } : this.config.email\n if (options.email && this.config.email) {\n this.logger.warn(\n 'Email options provided in both init options and config. Using init options.',\n )\n }\n\n this.emailOptions = emailOptions ?? emailDefaults\n this.email = buildEmail(this.emailOptions, this.logger)\n this.sendEmail = sendEmail.bind(this)\n\n serverInitTelemetry(this)\n\n // 1. loop over collections, if collection has auth strategy, initialize and push to array\n let jwtStrategyEnabled = false\n this.authStrategies = this.config.collections.reduce((authStrategies, collection) => {\n if (collection?.auth) {\n if (collection.auth.strategies.length > 0) {\n authStrategies.push(...collection.auth.strategies)\n }\n\n // 2. if api key enabled, push api key strategy into the array\n if (collection.auth?.useAPIKey) {\n authStrategies.push({\n name: `${collection.slug}-api-key`,\n authenticate: APIKeyAuthentication(collection),\n })\n }\n\n // 3. if localStrategy flag is true\n if (!collection.auth.disableLocalStrategy && !jwtStrategyEnabled) {\n jwtStrategyEnabled = true\n }\n }\n\n return authStrategies\n }, [] as AuthStrategy[])\n\n // 4. if enabled, push jwt strategy into authStrategies last\n if (jwtStrategyEnabled) {\n this.authStrategies.push({\n name: 'local-jwt',\n authenticate: JWTAuthentication,\n })\n }\n\n if (!options.disableOnInit) {\n if (typeof options.onInit === 'function') await options.onInit(this)\n if (typeof this.config.onInit === 'function') await this.config.onInit(this)\n }\n\n return this\n }\n\n update<T extends keyof TGeneratedTypes['collections']>(\n options: UpdateManyOptions<T>,\n ): Promise<BulkOperationResult<T>>\n\n /**\n * @description Update one or more documents\n * @param options\n * @returns Updated document(s)\n */\n update<T extends keyof TGeneratedTypes['collections']>(\n options: UpdateByIDOptions<T>,\n ): Promise<TGeneratedTypes['collections'][T]>\n\n update<T extends keyof TGeneratedTypes['collections']>(\n options: UpdateOptions<T>,\n ): Promise<BulkOperationResult<T> | TGeneratedTypes['collections'][T]> {\n const { update } = localOperations\n return update<T>(this, options)\n }\n}\n\nconst initialized = new BasePayload()\n\nexport default initialized\n\nlet cached = global._payload\n\nif (!cached) {\n // eslint-disable-next-line no-multi-assign\n cached = global._payload = { payload: null, promise: null }\n}\n\nexport const getPayload = async (options: InitOptions): Promise<BasePayload<GeneratedTypes>> => {\n if (!options?.config) {\n throw new Error('Error: the payload config is required for getPayload to work.')\n }\n\n if (cached.payload) {\n return cached.payload\n }\n\n if (!cached.promise) {\n cached.promise = new BasePayload<GeneratedTypes>().init(options)\n }\n\n try {\n cached.payload = await cached.promise\n } catch (e) {\n cached.promise = null\n throw e\n }\n\n return cached.payload\n}\n\ntype GeneratedTypes = {\n collections: {\n [slug: number | string | symbol]: TypeWithID & Record<string, unknown>\n }\n globals: {\n [slug: number | string | symbol]: GlobalTypeWithID & Record<string, unknown>\n }\n}\n\ntype Payload = BasePayload<GeneratedTypes>\n\ninterface RequestContext {\n [key: string]: unknown\n}\n\n// type DatabaseAdapter = BaseDatabaseAdapter\n\nexport type { GeneratedTypes, Payload, RequestContext }\n"],"names":["crypto","decrypt","encrypt","APIKeyAuthentication","JWTAuthentication","localOperations","validateSchema","buildEmail","defaults","emailDefaults","sendEmail","localGlobalOperations","Logger","serverInit","serverInitTelemetry","BasePayload","authStrategies","collections","config","create","options","db","duplicate","email","emailOptions","extensions","find","findByID","findGlobal","findOne","findGlobalVersionByID","findVersionByID","findGlobalVersions","findVersions","forgotPassword","auth","getAPIURL","serverURL","routes","api","getAdminURL","admin","globals","logger","login","resetPassword","restoreGlobalVersion","restoreVersion","schema","secret","types","unlock","updateGlobal","update","validationRules","verifyEmail","versions","delete","deleteLocal","init","Error","loggerOptions","loggerDestination","process","env","NODE_ENV","createHash","digest","slice","forEach","collection","slug","payload","disableDBConnect","connect","warn","bind","jwtStrategyEnabled","reduce","strategies","length","push","useAPIKey","name","authenticate","disableLocalStrategy","disableOnInit","onInit","initialized","cached","global","_payload","promise","getPayload","e"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type { ExecutionResult, GraphQLSchema, ValidationRule } from 'graphql'\nimport type { OperationArgs, Request as graphQLRequest } from 'graphql-http'\nimport type { SendMailOptions } from 'nodemailer'\nimport type pino from 'pino'\n\nimport crypto from 'crypto'\n\nimport type { Result as ForgotPasswordResult } from './auth/operations/forgotPassword.js'\nimport type { Options as ForgotPasswordOptions } from './auth/operations/local/forgotPassword.js'\nimport type { Options as LoginOptions } from './auth/operations/local/login.js'\nimport type { Options as ResetPasswordOptions } from './auth/operations/local/resetPassword.js'\nimport type { Options as UnlockOptions } from './auth/operations/local/unlock.js'\nimport type { Options as VerifyEmailOptions } from './auth/operations/local/verifyEmail.js'\nimport type { Result as LoginResult } from './auth/operations/login.js'\nimport type { Result as ResetPasswordResult } from './auth/operations/resetPassword.js'\nimport type { AuthStrategy } from './auth/types.js'\nimport type { BulkOperationResult, Collection, TypeWithID } from './collections/config/types.js'\nimport type { Options as CreateOptions } from './collections/operations/local/create.js'\nimport type {\n ByIDOptions as DeleteByIDOptions,\n ManyOptions as DeleteManyOptions,\n Options as DeleteOptions,\n} from './collections/operations/local/delete.js'\nimport type { Options as DuplicateOptions } from './collections/operations/local/duplicate.js'\nimport type { Options as FindOptions } from './collections/operations/local/find.js'\nimport type { Options as FindByIDOptions } from './collections/operations/local/findByID.js'\nimport type { Options as FindVersionByIDOptions } from './collections/operations/local/findVersionByID.js'\nimport type { Options as FindVersionsOptions } from './collections/operations/local/findVersions.js'\nimport type { Options as RestoreVersionOptions } from './collections/operations/local/restoreVersion.js'\nimport type {\n ByIDOptions as UpdateByIDOptions,\n ManyOptions as UpdateManyOptions,\n Options as UpdateOptions,\n} from './collections/operations/local/update.js'\nimport type { EmailOptions, InitOptions, SanitizedConfig } from './config/types.js'\nimport type { BaseDatabaseAdapter, PaginatedDocs } from './database/types.js'\nimport type { BuildEmailResult } from './email/types.js'\nimport type { TypeWithID as GlobalTypeWithID, Globals } from './globals/config/types.js'\nimport type { Options as FindGlobalOptions } from './globals/operations/local/findOne.js'\nimport type { Options as FindGlobalVersionByIDOptions } from './globals/operations/local/findVersionByID.js'\nimport type { Options as FindGlobalVersionsOptions } from './globals/operations/local/findVersions.js'\nimport type { Options as RestoreGlobalVersionOptions } from './globals/operations/local/restoreVersion.js'\nimport type { Options as UpdateGlobalOptions } from './globals/operations/local/update.js'\nimport type { TypeWithVersion } from './versions/types.js'\n\nimport { decrypt, encrypt } from './auth/crypto.js'\nimport { APIKeyAuthentication } from './auth/strategies/apiKey.js'\nimport { JWTAuthentication } from './auth/strategies/jwt.js'\nimport localOperations from './collections/operations/local/index.js'\nimport { validateSchema } from './config/validate.js'\nimport buildEmail from './email/build.js'\nimport { defaults as emailDefaults } from './email/defaults.js'\nimport sendEmail from './email/sendEmail.js'\nimport localGlobalOperations from './globals/operations/local/index.js'\nimport Logger from './utilities/logger.js'\nimport { serverInit as serverInitTelemetry } from './utilities/telemetry/events/serverInit.js'\n\n/**\n * @description Payload\n */\nexport class BasePayload<TGeneratedTypes extends GeneratedTypes> {\n authStrategies: AuthStrategy[]\n\n collections: {\n [slug: number | string | symbol]: Collection\n } = {}\n\n config: SanitizedConfig\n\n /**\n * @description Performs create operation\n * @param options\n * @returns created document\n */\n create = async <T extends keyof TGeneratedTypes['collections']>(\n options: CreateOptions<T>,\n ): Promise<TGeneratedTypes['collections'][T]> => {\n const { create } = localOperations\n return create<T>(this, options)\n }\n\n db: BaseDatabaseAdapter\n\n decrypt = decrypt\n\n duplicate = async <T extends keyof TGeneratedTypes['collections']>(\n options: DuplicateOptions<T>,\n ): Promise<TGeneratedTypes['collections'][T]> => {\n const { duplicate } = localOperations\n return duplicate<T>(this, options)\n }\n\n email: BuildEmailResult\n\n emailOptions: EmailOptions\n\n // TODO: re-implement or remove?\n // errorHandler: ErrorHandler\n\n encrypt = encrypt\n\n extensions: (args: {\n args: OperationArgs<any>\n req: graphQLRequest<unknown, unknown>\n result: ExecutionResult\n }) => Promise<any>\n\n /**\n * @description Find documents with criteria\n * @param options\n * @returns documents satisfying query\n */\n find = async <T extends keyof TGeneratedTypes['collections']>(\n options: FindOptions<T>,\n ): Promise<PaginatedDocs<TGeneratedTypes['collections'][T]>> => {\n const { find } = localOperations\n return find<T>(this, options)\n }\n\n /**\n * @description Find document by ID\n * @param options\n * @returns document with specified ID\n */\n findByID = async <T extends keyof TGeneratedTypes['collections']>(\n options: FindByIDOptions<T>,\n ): Promise<TGeneratedTypes['collections'][T]> => {\n const { findByID } = localOperations\n return findByID<T>(this, options)\n }\n\n findGlobal = async <T extends keyof TGeneratedTypes['globals']>(\n options: FindGlobalOptions<T>,\n ): Promise<TGeneratedTypes['globals'][T]> => {\n const { findOne } = localGlobalOperations\n return findOne<T>(this, options)\n }\n\n /**\n * @description Find global version by ID\n * @param options\n * @returns global version with specified ID\n */\n findGlobalVersionByID = async <T extends keyof TGeneratedTypes['globals']>(\n options: FindGlobalVersionByIDOptions<T>,\n ): Promise<TypeWithVersion<TGeneratedTypes['globals'][T]>> => {\n const { findVersionByID } = localGlobalOperations\n return findVersionByID<T>(this, options)\n }\n\n /**\n * @description Find global versions with criteria\n * @param options\n * @returns versions satisfying query\n */\n findGlobalVersions = async <T extends keyof TGeneratedTypes['globals']>(\n options: FindGlobalVersionsOptions<T>,\n ): Promise<PaginatedDocs<TypeWithVersion<TGeneratedTypes['globals'][T]>>> => {\n const { findVersions } = localGlobalOperations\n return findVersions<T>(this, options)\n }\n\n /**\n * @description Find version by ID\n * @param options\n * @returns version with specified ID\n */\n findVersionByID = async <T extends keyof TGeneratedTypes['collections']>(\n options: FindVersionByIDOptions<T>,\n ): Promise<TypeWithVersion<TGeneratedTypes['collections'][T]>> => {\n const { findVersionByID } = localOperations\n return findVersionByID<T>(this, options)\n }\n\n /**\n * @description Find versions with criteria\n * @param options\n * @returns versions satisfying query\n */\n findVersions = async <T extends keyof TGeneratedTypes['collections']>(\n options: FindVersionsOptions<T>,\n ): Promise<PaginatedDocs<TypeWithVersion<TGeneratedTypes['collections'][T]>>> => {\n const { findVersions } = localOperations\n return findVersions<T>(this, options)\n }\n\n forgotPassword = async <T extends keyof TGeneratedTypes['collections']>(\n options: ForgotPasswordOptions<T>,\n ): Promise<ForgotPasswordResult> => {\n const { forgotPassword } = localOperations.auth\n return forgotPassword<T>(this, options)\n }\n\n getAPIURL = (): string => `${this.config.serverURL}${this.config.routes.api}`\n\n getAdminURL = (): string => `${this.config.serverURL}${this.config.routes.admin}`\n\n globals: Globals\n\n logger: pino.Logger\n\n login = async <T extends keyof TGeneratedTypes['collections']>(\n options: LoginOptions<T>,\n ): Promise<LoginResult & { user: TGeneratedTypes['collections'][T] }> => {\n const { login } = localOperations.auth\n return login<T>(this, options)\n }\n\n resetPassword = async <T extends keyof TGeneratedTypes['collections']>(\n options: ResetPasswordOptions<T>,\n ): Promise<ResetPasswordResult> => {\n const { resetPassword } = localOperations.auth\n return resetPassword<T>(this, options)\n }\n\n /**\n * @description Restore global version by ID\n * @param options\n * @returns version with specified ID\n */\n restoreGlobalVersion = async <T extends keyof TGeneratedTypes['globals']>(\n options: RestoreGlobalVersionOptions<T>,\n ): Promise<TGeneratedTypes['globals'][T]> => {\n const { restoreVersion } = localGlobalOperations\n return restoreVersion<T>(this, options)\n }\n\n /**\n * @description Restore version by ID\n * @param options\n * @returns version with specified ID\n */\n restoreVersion = async <T extends keyof TGeneratedTypes['collections']>(\n options: RestoreVersionOptions<T>,\n ): Promise<TGeneratedTypes['collections'][T]> => {\n const { restoreVersion } = localOperations\n return restoreVersion<T>(this, options)\n }\n\n schema: GraphQLSchema\n\n secret: string\n\n sendEmail: (message: SendMailOptions) => Promise<unknown>\n\n types: {\n arrayTypes: any\n blockInputTypes: any\n blockTypes: any\n fallbackLocaleInputType?: any\n groupTypes: any\n localeInputType?: any\n tabTypes: any\n }\n\n unlock = async <T extends keyof TGeneratedTypes['collections']>(\n options: UnlockOptions<T>,\n ): Promise<boolean> => {\n const { unlock } = localOperations.auth\n return unlock(this, options)\n }\n\n updateGlobal = async <T extends keyof TGeneratedTypes['globals']>(\n options: UpdateGlobalOptions<T>,\n ): Promise<TGeneratedTypes['globals'][T]> => {\n const { update } = localGlobalOperations\n return update<T>(this, options)\n }\n\n validationRules: (args: OperationArgs<any>) => ValidationRule[]\n\n verifyEmail = async <T extends keyof TGeneratedTypes['collections']>(\n options: VerifyEmailOptions<T>,\n ): Promise<boolean> => {\n const { verifyEmail } = localOperations.auth\n return verifyEmail(this, options)\n }\n\n versions: {\n [slug: string]: any // TODO: Type this\n } = {}\n\n /**\n * @description delete one or more documents\n * @param options\n * @returns Updated document(s)\n */\n delete<T extends keyof TGeneratedTypes['collections']>(\n options: DeleteByIDOptions<T>,\n ): Promise<TGeneratedTypes['collections'][T]>\n\n delete<T extends keyof TGeneratedTypes['collections']>(\n options: DeleteManyOptions<T>,\n ): Promise<BulkOperationResult<T>>\n\n delete<T extends keyof TGeneratedTypes['collections']>(\n options: DeleteOptions<T>,\n ): Promise<BulkOperationResult<T> | TGeneratedTypes['collections'][T]> {\n const { deleteLocal } = localOperations\n return deleteLocal<T>(this, options)\n }\n\n /**\n * @description Initializes Payload\n * @param options\n */\n async init(options: InitOptions): Promise<Payload> {\n if (!options?.config) {\n throw new Error('Error: the payload config is required to initialize payload.')\n }\n\n this.logger = Logger('payload', options.loggerOptions, options.loggerDestination)\n\n this.config = await options.config\n\n if (process.env.NODE_ENV !== 'production') {\n validateSchema(this.config, this.logger)\n }\n\n if (!this.config.secret) {\n throw new Error('Error: missing secret key. A secret key is needed to secure Payload.')\n }\n\n this.secret = crypto.createHash('sha256').update(this.config.secret).digest('hex').slice(0, 32)\n\n this.globals = {\n config: this.config.globals,\n }\n\n this.config.collections.forEach((collection) => {\n this.collections[collection.slug] = {\n config: collection,\n }\n })\n\n this.db = this.config.db.init({ payload: this })\n this.db.payload = this\n\n if (this.db?.init) {\n await this.db.init()\n }\n\n if (!options.disableDBConnect && this.db.connect) {\n await this.db.connect()\n }\n\n // Configure email service\n const emailOptions = options.email ? { ...options.email } : this.config.email\n if (options.email && this.config.email) {\n this.logger.warn(\n 'Email options provided in both init options and config. Using init options.',\n )\n }\n\n this.emailOptions = emailOptions ?? emailDefaults\n this.email = buildEmail(this.emailOptions, this.logger)\n this.sendEmail = sendEmail.bind(this)\n\n serverInitTelemetry(this)\n\n // 1. loop over collections, if collection has auth strategy, initialize and push to array\n let jwtStrategyEnabled = false\n this.authStrategies = this.config.collections.reduce((authStrategies, collection) => {\n if (collection?.auth) {\n if (collection.auth.strategies.length > 0) {\n authStrategies.push(...collection.auth.strategies)\n }\n\n // 2. if api key enabled, push api key strategy into the array\n if (collection.auth?.useAPIKey) {\n authStrategies.push({\n name: `${collection.slug}-api-key`,\n authenticate: APIKeyAuthentication(collection),\n })\n }\n\n // 3. if localStrategy flag is true\n if (!collection.auth.disableLocalStrategy && !jwtStrategyEnabled) {\n jwtStrategyEnabled = true\n }\n }\n\n return authStrategies\n }, [] as AuthStrategy[])\n\n // 4. if enabled, push jwt strategy into authStrategies last\n if (jwtStrategyEnabled) {\n this.authStrategies.push({\n name: 'local-jwt',\n authenticate: JWTAuthentication,\n })\n }\n\n if (!options.disableOnInit) {\n if (typeof options.onInit === 'function') await options.onInit(this)\n if (typeof this.config.onInit === 'function') await this.config.onInit(this)\n }\n\n return this\n }\n\n update<T extends keyof TGeneratedTypes['collections']>(\n options: UpdateManyOptions<T>,\n ): Promise<BulkOperationResult<T>>\n\n /**\n * @description Update one or more documents\n * @param options\n * @returns Updated document(s)\n */\n update<T extends keyof TGeneratedTypes['collections']>(\n options: UpdateByIDOptions<T>,\n ): Promise<TGeneratedTypes['collections'][T]>\n\n update<T extends keyof TGeneratedTypes['collections']>(\n options: UpdateOptions<T>,\n ): Promise<BulkOperationResult<T> | TGeneratedTypes['collections'][T]> {\n const { update } = localOperations\n return update<T>(this, options)\n }\n}\n\nconst initialized = new BasePayload()\n\nexport default initialized\n\nlet cached = global._payload\n\nif (!cached) {\n // eslint-disable-next-line no-multi-assign\n cached = global._payload = { payload: null, promise: null }\n}\n\nexport const getPayload = async (options: InitOptions): Promise<BasePayload<GeneratedTypes>> => {\n if (!options?.config) {\n throw new Error('Error: the payload config is required for getPayload to work.')\n }\n\n if (cached.payload) {\n return cached.payload\n }\n\n if (!cached.promise) {\n cached.promise = new BasePayload<GeneratedTypes>().init(options)\n }\n\n try {\n cached.payload = await cached.promise\n } catch (e) {\n cached.promise = null\n throw e\n }\n\n return cached.payload\n}\n\ntype GeneratedTypes = {\n collections: {\n [slug: number | string | symbol]: TypeWithID & Record<string, unknown>\n }\n globals: {\n [slug: number | string | symbol]: GlobalTypeWithID & Record<string, unknown>\n }\n}\n\ntype Payload = BasePayload<GeneratedTypes>\n\ninterface RequestContext {\n [key: string]: unknown\n}\n\n// type DatabaseAdapter = BaseDatabaseAdapter\n\nexport type { GeneratedTypes, Payload, RequestContext }\n"],"names":["crypto","decrypt","encrypt","APIKeyAuthentication","JWTAuthentication","localOperations","validateSchema","buildEmail","defaults","emailDefaults","sendEmail","localGlobalOperations","Logger","serverInit","serverInitTelemetry","BasePayload","authStrategies","collections","config","create","options","db","duplicate","email","emailOptions","extensions","find","findByID","findGlobal","findOne","findGlobalVersionByID","findVersionByID","findGlobalVersions","findVersions","forgotPassword","auth","getAPIURL","serverURL","routes","api","getAdminURL","admin","globals","logger","login","resetPassword","restoreGlobalVersion","restoreVersion","schema","secret","types","unlock","updateGlobal","update","validationRules","verifyEmail","versions","delete","deleteLocal","init","Error","loggerOptions","loggerDestination","process","env","NODE_ENV","createHash","digest","slice","forEach","collection","slug","payload","disableDBConnect","connect","warn","bind","jwtStrategyEnabled","reduce","strategies","length","push","useAPIKey","name","authenticate","disableLocalStrategy","disableOnInit","onInit","initialized","cached","global","_payload","promise","getPayload","e"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/preferences/operations/delete.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAS,MAAM,sBAAsB,CAAA;AAC3D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAOpD,iBAAe,eAAe,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAoCzE;AAED,eAAe,eAAe,CAAA"}
1
+ {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/preferences/operations/delete.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAS,MAAM,sBAAsB,CAAA;AAC3D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAOpD,iBAAe,eAAe,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAmCzE;AAED,eAAe,eAAe,CAAA"}
@@ -31,14 +31,13 @@ async function deleteOperation(args) {
31
31
  }
32
32
  ]
33
33
  };
34
- const result = await payload.delete({
34
+ const result = await payload.db.deleteOne({
35
35
  collection: 'payload-preferences',
36
- depth: 0,
37
- user,
36
+ req,
38
37
  where
39
38
  });
40
- if (result.docs.length === 1) {
41
- return result.docs[0];
39
+ if (result) {
40
+ return result;
42
41
  }
43
42
  throw new NotFound(req.t);
44
43
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/preferences/operations/delete.ts"],"sourcesContent":["import type { Document, Where } from '../../types/index.js'\nimport type { PreferenceRequest } from '../types.js'\n\nimport defaultAccess from '../../auth/defaultAccess.js'\nimport executeAccess from '../../auth/executeAccess.js'\nimport NotFound from '../../errors/NotFound.js'\nimport UnauthorizedError from '../../errors/UnathorizedError.js'\n\nasync function deleteOperation(args: PreferenceRequest): Promise<Document> {\n const {\n key,\n overrideAccess,\n req: { payload },\n req,\n user,\n } = args\n\n if (!user) {\n throw new UnauthorizedError(req.t)\n }\n\n if (!overrideAccess) {\n await executeAccess({ req }, defaultAccess)\n }\n\n const where: Where = {\n and: [\n { key: { equals: key } },\n { 'user.value': { equals: user.id } },\n { 'user.relationTo': { equals: user.collection } },\n ],\n }\n\n const result = await payload.delete({\n collection: 'payload-preferences',\n depth: 0,\n user,\n where,\n })\n\n if (result.docs.length === 1) {\n return result.docs[0]\n }\n throw new NotFound(req.t)\n}\n\nexport default deleteOperation\n"],"names":["defaultAccess","executeAccess","NotFound","UnauthorizedError","deleteOperation","args","key","overrideAccess","req","payload","user","t","where","and","equals","id","collection","result","delete","depth","docs","length"],"mappings":"AAGA,OAAOA,mBAAmB,8BAA6B;AACvD,OAAOC,mBAAmB,8BAA6B;AACvD,OAAOC,cAAc,2BAA0B;AAC/C,OAAOC,uBAAuB,mCAAkC;AAEhE,eAAeC,gBAAgBC,IAAuB;IACpD,MAAM,EACJC,GAAG,EACHC,cAAc,EACdC,KAAK,EAAEC,OAAO,EAAE,EAChBD,GAAG,EACHE,IAAI,EACL,GAAGL;IAEJ,IAAI,CAACK,MAAM;QACT,MAAM,IAAIP,kBAAkBK,IAAIG,CAAC;IACnC;IAEA,IAAI,CAACJ,gBAAgB;QACnB,MAAMN,cAAc;YAAEO;QAAI,GAAGR;IAC/B;IAEA,MAAMY,QAAe;QACnBC,KAAK;YACH;gBAAEP,KAAK;oBAAEQ,QAAQR;gBAAI;YAAE;YACvB;gBAAE,cAAc;oBAAEQ,QAAQJ,KAAKK,EAAE;gBAAC;YAAE;YACpC;gBAAE,mBAAmB;oBAAED,QAAQJ,KAAKM,UAAU;gBAAC;YAAE;SAClD;IACH;IAEA,MAAMC,SAAS,MAAMR,QAAQS,MAAM,CAAC;QAClCF,YAAY;QACZG,OAAO;QACPT;QACAE;IACF;IAEA,IAAIK,OAAOG,IAAI,CAACC,MAAM,KAAK,GAAG;QAC5B,OAAOJ,OAAOG,IAAI,CAAC,EAAE;IACvB;IACA,MAAM,IAAIlB,SAASM,IAAIG,CAAC;AAC1B;AAEA,eAAeP,gBAAe"}
1
+ {"version":3,"sources":["../../../src/preferences/operations/delete.ts"],"sourcesContent":["import type { Document, Where } from '../../types/index.js'\nimport type { PreferenceRequest } from '../types.js'\n\nimport defaultAccess from '../../auth/defaultAccess.js'\nimport executeAccess from '../../auth/executeAccess.js'\nimport NotFound from '../../errors/NotFound.js'\nimport UnauthorizedError from '../../errors/UnathorizedError.js'\n\nasync function deleteOperation(args: PreferenceRequest): Promise<Document> {\n const {\n key,\n overrideAccess,\n req: { payload },\n req,\n user,\n } = args\n\n if (!user) {\n throw new UnauthorizedError(req.t)\n }\n\n if (!overrideAccess) {\n await executeAccess({ req }, defaultAccess)\n }\n\n const where: Where = {\n and: [\n { key: { equals: key } },\n { 'user.value': { equals: user.id } },\n { 'user.relationTo': { equals: user.collection } },\n ],\n }\n\n const result = await payload.db.deleteOne({\n collection: 'payload-preferences',\n req,\n where,\n })\n\n if (result) {\n return result\n }\n throw new NotFound(req.t)\n}\n\nexport default deleteOperation\n"],"names":["defaultAccess","executeAccess","NotFound","UnauthorizedError","deleteOperation","args","key","overrideAccess","req","payload","user","t","where","and","equals","id","collection","result","db","deleteOne"],"mappings":"AAGA,OAAOA,mBAAmB,8BAA6B;AACvD,OAAOC,mBAAmB,8BAA6B;AACvD,OAAOC,cAAc,2BAA0B;AAC/C,OAAOC,uBAAuB,mCAAkC;AAEhE,eAAeC,gBAAgBC,IAAuB;IACpD,MAAM,EACJC,GAAG,EACHC,cAAc,EACdC,KAAK,EAAEC,OAAO,EAAE,EAChBD,GAAG,EACHE,IAAI,EACL,GAAGL;IAEJ,IAAI,CAACK,MAAM;QACT,MAAM,IAAIP,kBAAkBK,IAAIG,CAAC;IACnC;IAEA,IAAI,CAACJ,gBAAgB;QACnB,MAAMN,cAAc;YAAEO;QAAI,GAAGR;IAC/B;IAEA,MAAMY,QAAe;QACnBC,KAAK;YACH;gBAAEP,KAAK;oBAAEQ,QAAQR;gBAAI;YAAE;YACvB;gBAAE,cAAc;oBAAEQ,QAAQJ,KAAKK,EAAE;gBAAC;YAAE;YACpC;gBAAE,mBAAmB;oBAAED,QAAQJ,KAAKM,UAAU;gBAAC;YAAE;SAClD;IACH;IAEA,MAAMC,SAAS,MAAMR,QAAQS,EAAE,CAACC,SAAS,CAAC;QACxCH,YAAY;QACZR;QACAI;IACF;IAEA,IAAIK,QAAQ;QACV,OAAOA;IACT;IACA,MAAM,IAAIf,SAASM,IAAIG,CAAC;AAC1B;AAEA,eAAeP,gBAAe"}
@@ -1,3 +1,3 @@
1
- import type { PayloadHandler } from '../../exports/config.js';
1
+ import type { PayloadHandler } from '../../config/types.js';
2
2
  export declare const deleteHandler: PayloadHandler;
3
3
  //# sourceMappingURL=delete.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/preferences/requestHandlers/delete.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAI7D,eAAO,MAAM,aAAa,EAAE,cAgB3B,CAAA"}
1
+ {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/preferences/requestHandlers/delete.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAI3D,eAAO,MAAM,aAAa,EAAE,cAgB3B,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/preferences/requestHandlers/delete.ts"],"sourcesContent":["import httpStatus from 'http-status'\n\nimport type { PayloadHandler } from '../../exports/config.js'\n\nimport deleteOperation from '../operations/delete.js'\n\nexport const deleteHandler: PayloadHandler = async (req): Promise<Response> => {\n const result = await deleteOperation({\n key: req.routeParams?.key as string,\n req,\n user: req.user,\n })\n\n return Response.json(\n {\n ...result,\n message: req.t('general:deletedSuccessfully'),\n },\n {\n status: httpStatus.OK,\n },\n )\n}\n"],"names":["httpStatus","deleteOperation","deleteHandler","req","result","key","routeParams","user","Response","json","message","t","status","OK"],"mappings":"AAAA,OAAOA,gBAAgB,cAAa;AAIpC,OAAOC,qBAAqB,0BAAyB;AAErD,OAAO,MAAMC,gBAAgC,OAAOC;IAClD,MAAMC,SAAS,MAAMH,gBAAgB;QACnCI,KAAKF,IAAIG,WAAW,EAAED;QACtBF;QACAI,MAAMJ,IAAII,IAAI;IAChB;IAEA,OAAOC,SAASC,IAAI,CAClB;QACE,GAAGL,MAAM;QACTM,SAASP,IAAIQ,CAAC,CAAC;IACjB,GACA;QACEC,QAAQZ,WAAWa,EAAE;IACvB;AAEJ,EAAC"}
1
+ {"version":3,"sources":["../../../src/preferences/requestHandlers/delete.ts"],"sourcesContent":["import httpStatus from 'http-status'\n\nimport type { PayloadHandler } from '../../config/types.js'\n\nimport deleteOperation from '../operations/delete.js'\n\nexport const deleteHandler: PayloadHandler = async (req): Promise<Response> => {\n const result = await deleteOperation({\n key: req.routeParams?.key as string,\n req,\n user: req.user,\n })\n\n return Response.json(\n {\n ...result,\n message: req.t('general:deletedSuccessfully'),\n },\n {\n status: httpStatus.OK,\n },\n )\n}\n"],"names":["httpStatus","deleteOperation","deleteHandler","req","result","key","routeParams","user","Response","json","message","t","status","OK"],"mappings":"AAAA,OAAOA,gBAAgB,cAAa;AAIpC,OAAOC,qBAAqB,0BAAyB;AAErD,OAAO,MAAMC,gBAAgC,OAAOC;IAClD,MAAMC,SAAS,MAAMH,gBAAgB;QACnCI,KAAKF,IAAIG,WAAW,EAAED;QACtBF;QACAI,MAAMJ,IAAII,IAAI;IAChB;IAEA,OAAOC,SAASC,IAAI,CAClB;QACE,GAAGL,MAAM;QACTM,SAASP,IAAIQ,CAAC,CAAC;IACjB,GACA;QACEC,QAAQZ,WAAWa,EAAE;IACvB;AAEJ,EAAC"}
@@ -1,3 +1,3 @@
1
- import type { PayloadHandler } from '../../exports/config.js';
1
+ import type { PayloadHandler } from '../../config/types.js';
2
2
  export declare const findByIDHandler: PayloadHandler;
3
3
  //# sourceMappingURL=findOne.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"findOne.d.ts","sourceRoot":"","sources":["../../../src/preferences/requestHandlers/findOne.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAI7D,eAAO,MAAM,eAAe,EAAE,cAoB7B,CAAA"}
1
+ {"version":3,"file":"findOne.d.ts","sourceRoot":"","sources":["../../../src/preferences/requestHandlers/findOne.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAI3D,eAAO,MAAM,eAAe,EAAE,cAoB7B,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/preferences/requestHandlers/findOne.ts"],"sourcesContent":["import httpStatus from 'http-status'\n\nimport type { PayloadHandler } from '../../exports/config.js'\n\nimport findOne from '../operations/findOne.js'\n\nexport const findByIDHandler: PayloadHandler = async (req): Promise<Response> => {\n const result = await findOne({\n key: req.routeParams?.key as string,\n req,\n user: req.user,\n })\n\n return Response.json(\n {\n ...(result\n ? result\n : {\n message: req.t('general:notFound'),\n value: null,\n }),\n },\n {\n status: httpStatus.OK,\n },\n )\n}\n"],"names":["httpStatus","findOne","findByIDHandler","req","result","key","routeParams","user","Response","json","message","t","value","status","OK"],"mappings":"AAAA,OAAOA,gBAAgB,cAAa;AAIpC,OAAOC,aAAa,2BAA0B;AAE9C,OAAO,MAAMC,kBAAkC,OAAOC;IACpD,MAAMC,SAAS,MAAMH,QAAQ;QAC3BI,KAAKF,IAAIG,WAAW,EAAED;QACtBF;QACAI,MAAMJ,IAAII,IAAI;IAChB;IAEA,OAAOC,SAASC,IAAI,CAClB;QACE,GAAIL,SACAA,SACA;YACEM,SAASP,IAAIQ,CAAC,CAAC;YACfC,OAAO;QACT,CAAC;IACP,GACA;QACEC,QAAQb,WAAWc,EAAE;IACvB;AAEJ,EAAC"}
1
+ {"version":3,"sources":["../../../src/preferences/requestHandlers/findOne.ts"],"sourcesContent":["import httpStatus from 'http-status'\n\nimport type { PayloadHandler } from '../../config/types.js'\n\nimport findOne from '../operations/findOne.js'\n\nexport const findByIDHandler: PayloadHandler = async (req): Promise<Response> => {\n const result = await findOne({\n key: req.routeParams?.key as string,\n req,\n user: req.user,\n })\n\n return Response.json(\n {\n ...(result\n ? result\n : {\n message: req.t('general:notFound'),\n value: null,\n }),\n },\n {\n status: httpStatus.OK,\n },\n )\n}\n"],"names":["httpStatus","findOne","findByIDHandler","req","result","key","routeParams","user","Response","json","message","t","value","status","OK"],"mappings":"AAAA,OAAOA,gBAAgB,cAAa;AAIpC,OAAOC,aAAa,2BAA0B;AAE9C,OAAO,MAAMC,kBAAkC,OAAOC;IACpD,MAAMC,SAAS,MAAMH,QAAQ;QAC3BI,KAAKF,IAAIG,WAAW,EAAED;QACtBF;QACAI,MAAMJ,IAAII,IAAI;IAChB;IAEA,OAAOC,SAASC,IAAI,CAClB;QACE,GAAIL,SACAA,SACA;YACEM,SAASP,IAAIQ,CAAC,CAAC;YACfC,OAAO;QACT,CAAC;IACP,GACA;QACEC,QAAQb,WAAWc,EAAE;IACvB;AAEJ,EAAC"}
@@ -1,3 +1,3 @@
1
- import type { PayloadHandler } from '../../exports/config.js';
1
+ import type { PayloadHandler } from '../../config/types.js';
2
2
  export declare const updateHandler: PayloadHandler;
3
3
  //# sourceMappingURL=update.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/preferences/requestHandlers/update.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAI7D,eAAO,MAAM,aAAa,EAAE,cAmB3B,CAAA"}
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/preferences/requestHandlers/update.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAI3D,eAAO,MAAM,aAAa,EAAE,cAmB3B,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/preferences/requestHandlers/update.ts"],"sourcesContent":["import httpStatus from 'http-status'\n\nimport type { PayloadHandler } from '../../exports/config.js'\n\nimport update from '../operations/update.js'\n\nexport const updateHandler: PayloadHandler = async (req) => {\n const payloadRequest = req\n\n const doc = await update({\n key: req.routeParams?.key as string,\n req: payloadRequest,\n user: payloadRequest?.user,\n value: payloadRequest.data.value || payloadRequest.data,\n })\n\n return Response.json(\n {\n doc,\n message: payloadRequest.t('general:updatedSuccessfully'),\n },\n {\n status: httpStatus.OK,\n },\n )\n}\n"],"names":["httpStatus","update","updateHandler","req","payloadRequest","doc","key","routeParams","user","value","data","Response","json","message","t","status","OK"],"mappings":"AAAA,OAAOA,gBAAgB,cAAa;AAIpC,OAAOC,YAAY,0BAAyB;AAE5C,OAAO,MAAMC,gBAAgC,OAAOC;IAClD,MAAMC,iBAAiBD;IAEvB,MAAME,MAAM,MAAMJ,OAAO;QACvBK,KAAKH,IAAII,WAAW,EAAED;QACtBH,KAAKC;QACLI,MAAMJ,gBAAgBI;QACtBC,OAAOL,eAAeM,IAAI,CAACD,KAAK,IAAIL,eAAeM,IAAI;IACzD;IAEA,OAAOC,SAASC,IAAI,CAClB;QACEP;QACAQ,SAAST,eAAeU,CAAC,CAAC;IAC5B,GACA;QACEC,QAAQf,WAAWgB,EAAE;IACvB;AAEJ,EAAC"}
1
+ {"version":3,"sources":["../../../src/preferences/requestHandlers/update.ts"],"sourcesContent":["import httpStatus from 'http-status'\n\nimport type { PayloadHandler } from '../../config/types.js'\n\nimport update from '../operations/update.js'\n\nexport const updateHandler: PayloadHandler = async (req) => {\n const payloadRequest = req\n\n const doc = await update({\n key: req.routeParams?.key as string,\n req: payloadRequest,\n user: payloadRequest?.user,\n value: payloadRequest.data.value || payloadRequest.data,\n })\n\n return Response.json(\n {\n doc,\n message: payloadRequest.t('general:updatedSuccessfully'),\n },\n {\n status: httpStatus.OK,\n },\n )\n}\n"],"names":["httpStatus","update","updateHandler","req","payloadRequest","doc","key","routeParams","user","value","data","Response","json","message","t","status","OK"],"mappings":"AAAA,OAAOA,gBAAgB,cAAa;AAIpC,OAAOC,YAAY,0BAAyB;AAE5C,OAAO,MAAMC,gBAAgC,OAAOC;IAClD,MAAMC,iBAAiBD;IAEvB,MAAME,MAAM,MAAMJ,OAAO;QACvBK,KAAKH,IAAII,WAAW,EAAED;QACtBH,KAAKC;QACLI,MAAMJ,gBAAgBI;QACtBC,OAAOL,eAAeM,IAAI,CAACD,KAAK,IAAIL,eAAeM,IAAI;IACzD;IAEA,OAAOC,SAASC,IAAI,CAClB;QACEP;QACAQ,SAAST,eAAeU,CAAC,CAAC;IAC5B,GACA;QACEC,QAAQf,WAAWgB,EAAE;IACvB;AAEJ,EAAC"}
@@ -1,6 +1,6 @@
1
- import type { SanitizedConfig } from '../exports/types.js';
1
+ import type { SanitizedConfig } from '../config/types.js';
2
2
  export declare const getLocalI18n: ({ config, language, }: {
3
3
  config: SanitizedConfig;
4
4
  language?: string;
5
- }) => Promise<import("@payloadcms/translations").I18n>;
5
+ }) => import("@payloadcms/translations").I18n;
6
6
  //# sourceMappingURL=getLocalI18n.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getLocalI18n.d.ts","sourceRoot":"","sources":["../../src/translations/getLocalI18n.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAE1D,eAAO,MAAM,YAAY;YAIf,eAAe;eACZ,MAAM;sDAOf,CAAA"}
1
+ {"version":3,"file":"getLocalI18n.d.ts","sourceRoot":"","sources":["../../src/translations/getLocalI18n.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAEzD,eAAO,MAAM,YAAY;YAIf,eAAe;eACZ,MAAM;6CAOf,CAAA"}
@@ -1,6 +1,6 @@
1
1
  import { initI18n } from '@payloadcms/translations';
2
2
  import { translations } from '@payloadcms/translations/api';
3
- export const getLocalI18n = async ({ config, language = 'en' })=>initI18n({
3
+ export const getLocalI18n = ({ config, language = 'en' })=>initI18n({
4
4
  config: config.i18n,
5
5
  context: 'api',
6
6
  language,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/translations/getLocalI18n.ts"],"sourcesContent":["import { initI18n } from '@payloadcms/translations'\nimport { translations } from '@payloadcms/translations/api'\n\nimport type { SanitizedConfig } from '../exports/types.js'\n\nexport const getLocalI18n = async ({\n config,\n language = 'en',\n}: {\n config: SanitizedConfig\n language?: string\n}) =>\n initI18n({\n config: config.i18n,\n context: 'api',\n language,\n translations,\n })\n"],"names":["initI18n","translations","getLocalI18n","config","language","i18n","context"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,2BAA0B;AACnD,SAASC,YAAY,QAAQ,+BAA8B;AAI3D,OAAO,MAAMC,eAAe,OAAO,EACjCC,MAAM,EACNC,WAAW,IAAI,EAIhB,GACCJ,SAAS;QACPG,QAAQA,OAAOE,IAAI;QACnBC,SAAS;QACTF;QACAH;IACF,GAAE"}
1
+ {"version":3,"sources":["../../src/translations/getLocalI18n.ts"],"sourcesContent":["import { initI18n } from '@payloadcms/translations'\nimport { translations } from '@payloadcms/translations/api'\n\nimport type { SanitizedConfig } from '../config/types.js'\n\nexport const getLocalI18n = ({\n config,\n language = 'en',\n}: {\n config: SanitizedConfig\n language?: string\n}) =>\n initI18n({\n config: config.i18n,\n context: 'api',\n language,\n translations,\n })\n"],"names":["initI18n","translations","getLocalI18n","config","language","i18n","context"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,2BAA0B;AACnD,SAASC,YAAY,QAAQ,+BAA8B;AAI3D,OAAO,MAAMC,eAAe,CAAC,EAC3BC,MAAM,EACNC,WAAW,IAAI,EAIhB,GACCJ,SAAS;QACPG,QAAQA,OAAOE,IAAI;QACnBC,SAAS;QACTF;QACAH;IACF,GAAE"}
@@ -3,7 +3,8 @@ export default function canResizeImage(mimeType) {
3
3
  'image/jpeg',
4
4
  'image/png',
5
5
  'image/gif',
6
- 'image/webp'
6
+ 'image/webp',
7
+ 'image/tiff'
7
8
  ].indexOf(mimeType) > -1;
8
9
  }
9
10
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/uploads/canResizeImage.ts"],"sourcesContent":["export default function canResizeImage(mimeType: string): boolean {\n return ['image/jpeg', 'image/png', 'image/gif', 'image/webp'].indexOf(mimeType) > -1\n}\n"],"names":["canResizeImage","mimeType","indexOf"],"mappings":"AAAA,eAAe,SAASA,eAAeC,QAAgB;IACrD,OAAO;QAAC;QAAc;QAAa;QAAa;KAAa,CAACC,OAAO,CAACD,YAAY,CAAC;AACrF"}
1
+ {"version":3,"sources":["../../src/uploads/canResizeImage.ts"],"sourcesContent":["export default function canResizeImage(mimeType: string): boolean {\n return ['image/jpeg', 'image/png', 'image/gif', 'image/webp', 'image/tiff'].indexOf(mimeType) > -1\n}\n"],"names":["canResizeImage","mimeType","indexOf"],"mappings":"AAAA,eAAe,SAASA,eAAeC,QAAgB;IACrD,OAAO;QAAC;QAAc;QAAa;QAAa;QAAc;KAAa,CAACC,OAAO,CAACD,YAAY,CAAC;AACnG"}
@@ -21,7 +21,7 @@ export const generateFileData = async ({ collection: { config: collectionConfig
21
21
  }
22
22
  const { sharp } = req.payload.config;
23
23
  let file = req.file;
24
- const uploadEdits = req.query['upload.js'] || {};
24
+ const uploadEdits = req.query['uploadEdits'] || {};
25
25
  const { disableLocalStorage, formatOptions, imageSizes, resizeOptions, staticDir, trimOptions } = collectionConfig.upload;
26
26
  const staticPath = staticDir;
27
27
  if (!file && uploadEdits && data) {
@@ -87,7 +87,7 @@ export const generateFileData = async ({ collection: { config: collectionConfig
87
87
  sharpFile = sharpFile.trim(trimOptions);
88
88
  }
89
89
  }
90
- if (isImage(file.mimetype)) {
90
+ if (fileSupportsResize || isImage(file.mimetype)) {
91
91
  dimensions = getImageSize(file);
92
92
  fileData.width = dimensions.width;
93
93
  fileData.height = dimensions.height;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/uploads/generateFileData.ts"],"sourcesContent":["import type { OutputInfo, Sharp, SharpOptions } from 'sharp'\n\nimport fileType from 'file-type'\nconst { fromBuffer } = fileType\nimport fs from 'fs'\nimport mkdirp from 'mkdirp'\nimport sanitize from 'sanitize-filename'\n\nimport type { Collection } from '../collections/config/types.js'\nimport type { SanitizedConfig } from '../config/types.js'\nimport type { PayloadRequest } from '../types/index.js'\nimport type { FileData, FileToSave, ProbedImageSize } from './types.js'\n\nimport { FileUploadError, MissingFile } from '../errors/index.js'\nimport canResizeImage from './canResizeImage.js'\nimport cropImage from './cropImage.js'\nimport { getExternalFile } from './getExternalFile.js'\nimport { getFileByPath } from './getFileByPath.js'\nimport { getImageSize } from './getImageSize.js'\nimport getSafeFileName from './getSafeFilename.js'\nimport resizeAndTransformImageSizes from './imageResizer.js'\nimport isImage from './isImage.js'\n\ntype Args<T> = {\n collection: Collection\n config: SanitizedConfig\n data: T\n overwriteExistingFiles?: boolean\n req: PayloadRequest\n throwOnMissingFile?: boolean\n}\n\ntype Result<T> = Promise<{\n data: T\n files: FileToSave[]\n}>\n\nexport const generateFileData = async <T>({\n collection: { config: collectionConfig },\n data,\n overwriteExistingFiles,\n req,\n throwOnMissingFile,\n}: Args<T>): Result<T> => {\n if (!collectionConfig.upload) {\n return {\n data,\n files: [],\n }\n }\n\n const { sharp } = req.payload.config\n\n let file = req.file\n\n const uploadEdits = req.query['upload.js'] || {}\n\n const { disableLocalStorage, formatOptions, imageSizes, resizeOptions, staticDir, trimOptions } =\n collectionConfig.upload\n\n const staticPath = staticDir\n\n if (!file && uploadEdits && data) {\n const { filename, url } = data as FileData\n\n try {\n if (url && url.startsWith('/') && !disableLocalStorage) {\n const filePath = `${staticPath}/${filename}`\n const response = await getFileByPath(filePath)\n file = response\n overwriteExistingFiles = true\n } else if (filename && url) {\n file = await getExternalFile({ data: data as FileData, req })\n overwriteExistingFiles = true\n }\n } catch (err) {\n throw new FileUploadError(req.t)\n }\n }\n\n if (!file) {\n if (throwOnMissingFile) throw new MissingFile(req.t)\n\n return {\n data,\n files: [],\n }\n }\n\n if (!disableLocalStorage) {\n mkdirp.sync(staticPath)\n }\n\n let newData = data\n const filesToSave: FileToSave[] = []\n const fileData: Partial<FileData> = {}\n const fileIsAnimated = file.mimetype === 'image/gif' || file.mimetype === 'image/webp'\n const cropData =\n typeof uploadEdits === 'object' && 'crop' in uploadEdits ? uploadEdits.crop : undefined\n\n try {\n const fileSupportsResize = canResizeImage(file.mimetype)\n let fsSafeName: string\n let sharpFile: Sharp | undefined\n let dimensions: ProbedImageSize | undefined\n let fileBuffer: { data: Buffer; info: OutputInfo }\n let ext\n let mime: string\n const fileHasAdjustments =\n fileSupportsResize &&\n Boolean(resizeOptions || formatOptions || trimOptions || file.tempFilePath)\n\n const sharpOptions: SharpOptions = {}\n\n if (fileIsAnimated) sharpOptions.animated = true\n\n if (fileHasAdjustments && sharp) {\n if (file.tempFilePath) {\n sharpFile = sharp(file.tempFilePath, sharpOptions).rotate() // pass rotate() to auto-rotate based on EXIF data. https://github.com/payloadcms/payload/pull/3081\n } else {\n sharpFile = sharp(file.data, sharpOptions).rotate() // pass rotate() to auto-rotate based on EXIF data. https://github.com/payloadcms/payload/pull/3081\n }\n\n if (resizeOptions) {\n sharpFile = sharpFile.resize(resizeOptions)\n }\n if (formatOptions) {\n sharpFile = sharpFile.toFormat(formatOptions.format, formatOptions.options)\n }\n if (trimOptions) {\n sharpFile = sharpFile.trim(trimOptions)\n }\n }\n\n if (isImage(file.mimetype)) {\n dimensions = getImageSize(file)\n fileData.width = dimensions.width\n fileData.height = dimensions.height\n }\n\n if (sharpFile) {\n const metadata = await sharpFile.metadata()\n fileBuffer = await sharpFile.toBuffer({ resolveWithObject: true })\n ;({ ext, mime } = await fromBuffer(fileBuffer.data)) // This is getting an incorrect gif height back.\n fileData.width = fileBuffer.info.width\n fileData.height = fileBuffer.info.height\n fileData.filesize = fileBuffer.info.size\n\n // Animated GIFs + WebP aggregate the height from every frame, so we need to use divide by number of pages\n if (metadata.pages) {\n fileData.height = fileBuffer.info.height / metadata.pages\n fileData.filesize = fileBuffer.data.length\n }\n } else {\n mime = file.mimetype\n fileData.filesize = file.size\n\n if (file.name.includes('.')) {\n ext = file.name.split('.').pop()\n } else {\n ext = ''\n }\n }\n\n // Adust SVG mime type. fromBuffer modifies it.\n if (mime === 'application/xml' && ext === 'svg') mime = 'image/svg+xml'\n fileData.mimeType = mime\n\n const baseFilename = sanitize(file.name.substring(0, file.name.lastIndexOf('.')) || file.name)\n fsSafeName = `${baseFilename}${ext ? `.${ext}` : ''}`\n\n if (!overwriteExistingFiles) {\n fsSafeName = await getSafeFileName({\n collectionSlug: collectionConfig.slug,\n desiredFilename: fsSafeName,\n req,\n staticPath,\n })\n }\n\n fileData.filename = fsSafeName\n let fileForResize = file\n\n if (cropData && sharp) {\n const { data: croppedImage, info } = await cropImage({ cropData, dimensions, file, sharp })\n\n filesToSave.push({\n buffer: croppedImage,\n path: `${staticPath}/${fsSafeName}`,\n })\n\n fileForResize = {\n ...file,\n data: croppedImage,\n size: info.size,\n }\n fileData.width = info.width\n fileData.height = info.height\n fileData.filesize = info.size\n\n if (file.tempFilePath) {\n await fs.promises.writeFile(file.tempFilePath, croppedImage) // write fileBuffer to the temp path\n } else {\n req.file = fileForResize\n }\n } else {\n filesToSave.push({\n buffer: fileBuffer?.data || file.data,\n path: `${staticPath}/${fsSafeName}`,\n })\n\n // If using temp files and the image is being resized, write the file to the temp path\n if (fileBuffer?.data || file.data.length > 0) {\n if (file.tempFilePath) {\n await fs.promises.writeFile(file.tempFilePath, fileBuffer?.data || file.data) // write fileBuffer to the temp path\n } else {\n // Assign the _possibly modified_ file to the request object\n req.file = {\n ...file,\n data: fileBuffer?.data || file.data,\n size: fileBuffer?.info.size,\n }\n }\n }\n }\n\n if (Array.isArray(imageSizes) && fileSupportsResize && sharp) {\n req.payloadUploadSizes = {}\n const { sizeData, sizesToSave } = await resizeAndTransformImageSizes({\n config: collectionConfig,\n dimensions: !cropData\n ? dimensions\n : {\n ...dimensions,\n height: fileData.height,\n width: fileData.width,\n },\n file: fileForResize,\n mimeType: fileData.mimeType,\n req,\n savedFilename: fsSafeName || file.name,\n sharp,\n staticPath,\n })\n\n fileData.sizes = sizeData\n filesToSave.push(...sizesToSave)\n }\n } catch (err) {\n console.error(err)\n throw new FileUploadError(req.t)\n }\n\n newData = {\n ...newData,\n ...fileData,\n }\n\n return {\n data: newData,\n files: filesToSave,\n }\n}\n"],"names":["fileType","fromBuffer","fs","mkdirp","sanitize","FileUploadError","MissingFile","canResizeImage","cropImage","getExternalFile","getFileByPath","getImageSize","getSafeFileName","resizeAndTransformImageSizes","isImage","generateFileData","collection","config","collectionConfig","data","overwriteExistingFiles","req","throwOnMissingFile","upload","files","sharp","payload","file","uploadEdits","query","disableLocalStorage","formatOptions","imageSizes","resizeOptions","staticDir","trimOptions","staticPath","filename","url","startsWith","filePath","response","err","t","sync","newData","filesToSave","fileData","fileIsAnimated","mimetype","cropData","crop","undefined","fileSupportsResize","fsSafeName","sharpFile","dimensions","fileBuffer","ext","mime","fileHasAdjustments","Boolean","tempFilePath","sharpOptions","animated","rotate","resize","toFormat","format","options","trim","width","height","metadata","toBuffer","resolveWithObject","info","filesize","size","pages","length","name","includes","split","pop","mimeType","baseFilename","substring","lastIndexOf","collectionSlug","slug","desiredFilename","fileForResize","croppedImage","push","buffer","path","promises","writeFile","Array","isArray","payloadUploadSizes","sizeData","sizesToSave","savedFilename","sizes","console","error"],"mappings":"AAEA,OAAOA,cAAc,YAAW;AAChC,MAAM,EAAEC,UAAU,EAAE,GAAGD;AACvB,OAAOE,QAAQ,KAAI;AACnB,OAAOC,YAAY,SAAQ;AAC3B,OAAOC,cAAc,oBAAmB;AAOxC,SAASC,eAAe,EAAEC,WAAW,QAAQ,qBAAoB;AACjE,OAAOC,oBAAoB,sBAAqB;AAChD,OAAOC,eAAe,iBAAgB;AACtC,SAASC,eAAe,QAAQ,uBAAsB;AACtD,SAASC,aAAa,QAAQ,qBAAoB;AAClD,SAASC,YAAY,QAAQ,oBAAmB;AAChD,OAAOC,qBAAqB,uBAAsB;AAClD,OAAOC,kCAAkC,oBAAmB;AAC5D,OAAOC,aAAa,eAAc;AAgBlC,OAAO,MAAMC,mBAAmB,OAAU,EACxCC,YAAY,EAAEC,QAAQC,gBAAgB,EAAE,EACxCC,IAAI,EACJC,sBAAsB,EACtBC,GAAG,EACHC,kBAAkB,EACV;IACR,IAAI,CAACJ,iBAAiBK,MAAM,EAAE;QAC5B,OAAO;YACLJ;YACAK,OAAO,EAAE;QACX;IACF;IAEA,MAAM,EAAEC,KAAK,EAAE,GAAGJ,IAAIK,OAAO,CAACT,MAAM;IAEpC,IAAIU,OAAON,IAAIM,IAAI;IAEnB,MAAMC,cAAcP,IAAIQ,KAAK,CAAC,YAAY,IAAI,CAAC;IAE/C,MAAM,EAAEC,mBAAmB,EAAEC,aAAa,EAAEC,UAAU,EAAEC,aAAa,EAAEC,SAAS,EAAEC,WAAW,EAAE,GAC7FjB,iBAAiBK,MAAM;IAEzB,MAAMa,aAAaF;IAEnB,IAAI,CAACP,QAAQC,eAAeT,MAAM;QAChC,MAAM,EAAEkB,QAAQ,EAAEC,GAAG,EAAE,GAAGnB;QAE1B,IAAI;YACF,IAAImB,OAAOA,IAAIC,UAAU,CAAC,QAAQ,CAACT,qBAAqB;gBACtD,MAAMU,WAAW,CAAC,EAAEJ,WAAW,CAAC,EAAEC,SAAS,CAAC;gBAC5C,MAAMI,WAAW,MAAM/B,cAAc8B;gBACrCb,OAAOc;gBACPrB,yBAAyB;YAC3B,OAAO,IAAIiB,YAAYC,KAAK;gBAC1BX,OAAO,MAAMlB,gBAAgB;oBAAEU,MAAMA;oBAAkBE;gBAAI;gBAC3DD,yBAAyB;YAC3B;QACF,EAAE,OAAOsB,KAAK;YACZ,MAAM,IAAIrC,gBAAgBgB,IAAIsB,CAAC;QACjC;IACF;IAEA,IAAI,CAAChB,MAAM;QACT,IAAIL,oBAAoB,MAAM,IAAIhB,YAAYe,IAAIsB,CAAC;QAEnD,OAAO;YACLxB;YACAK,OAAO,EAAE;QACX;IACF;IAEA,IAAI,CAACM,qBAAqB;QACxB3B,OAAOyC,IAAI,CAACR;IACd;IAEA,IAAIS,UAAU1B;IACd,MAAM2B,cAA4B,EAAE;IACpC,MAAMC,WAA8B,CAAC;IACrC,MAAMC,iBAAiBrB,KAAKsB,QAAQ,KAAK,eAAetB,KAAKsB,QAAQ,KAAK;IAC1E,MAAMC,WACJ,OAAOtB,gBAAgB,YAAY,UAAUA,cAAcA,YAAYuB,IAAI,GAAGC;IAEhF,IAAI;QACF,MAAMC,qBAAqB9C,eAAeoB,KAAKsB,QAAQ;QACvD,IAAIK;QACJ,IAAIC;QACJ,IAAIC;QACJ,IAAIC;QACJ,IAAIC;QACJ,IAAIC;QACJ,MAAMC,qBACJP,sBACAQ,QAAQ5B,iBAAiBF,iBAAiBI,eAAeR,KAAKmC,YAAY;QAE5E,MAAMC,eAA6B,CAAC;QAEpC,IAAIf,gBAAgBe,aAAaC,QAAQ,GAAG;QAE5C,IAAIJ,sBAAsBnC,OAAO;YAC/B,IAAIE,KAAKmC,YAAY,EAAE;gBACrBP,YAAY9B,MAAME,KAAKmC,YAAY,EAAEC,cAAcE,MAAM,GAAG,mGAAmG;;YACjK,OAAO;gBACLV,YAAY9B,MAAME,KAAKR,IAAI,EAAE4C,cAAcE,MAAM,GAAG,mGAAmG;;YACzJ;YAEA,IAAIhC,eAAe;gBACjBsB,YAAYA,UAAUW,MAAM,CAACjC;YAC/B;YACA,IAAIF,eAAe;gBACjBwB,YAAYA,UAAUY,QAAQ,CAACpC,cAAcqC,MAAM,EAAErC,cAAcsC,OAAO;YAC5E;YACA,IAAIlC,aAAa;gBACfoB,YAAYA,UAAUe,IAAI,CAACnC;YAC7B;QACF;QAEA,IAAIrB,QAAQa,KAAKsB,QAAQ,GAAG;YAC1BO,aAAa7C,aAAagB;YAC1BoB,SAASwB,KAAK,GAAGf,WAAWe,KAAK;YACjCxB,SAASyB,MAAM,GAAGhB,WAAWgB,MAAM;QACrC;QAEA,IAAIjB,WAAW;YACb,MAAMkB,WAAW,MAAMlB,UAAUkB,QAAQ;YACzChB,aAAa,MAAMF,UAAUmB,QAAQ,CAAC;gBAAEC,mBAAmB;YAAK;YAC9D,CAAA,EAAEjB,GAAG,EAAEC,IAAI,EAAE,GAAG,MAAM1D,WAAWwD,WAAWtC,IAAI,EAAG,gDAAgD;YAAnD;YAClD4B,SAASwB,KAAK,GAAGd,WAAWmB,IAAI,CAACL,KAAK;YACtCxB,SAASyB,MAAM,GAAGf,WAAWmB,IAAI,CAACJ,MAAM;YACxCzB,SAAS8B,QAAQ,GAAGpB,WAAWmB,IAAI,CAACE,IAAI;YAExC,0GAA0G;YAC1G,IAAIL,SAASM,KAAK,EAAE;gBAClBhC,SAASyB,MAAM,GAAGf,WAAWmB,IAAI,CAACJ,MAAM,GAAGC,SAASM,KAAK;gBACzDhC,SAAS8B,QAAQ,GAAGpB,WAAWtC,IAAI,CAAC6D,MAAM;YAC5C;QACF,OAAO;YACLrB,OAAOhC,KAAKsB,QAAQ;YACpBF,SAAS8B,QAAQ,GAAGlD,KAAKmD,IAAI;YAE7B,IAAInD,KAAKsD,IAAI,CAACC,QAAQ,CAAC,MAAM;gBAC3BxB,MAAM/B,KAAKsD,IAAI,CAACE,KAAK,CAAC,KAAKC,GAAG;YAChC,OAAO;gBACL1B,MAAM;YACR;QACF;QAEA,+CAA+C;QAC/C,IAAIC,SAAS,qBAAqBD,QAAQ,OAAOC,OAAO;QACxDZ,SAASsC,QAAQ,GAAG1B;QAEpB,MAAM2B,eAAelF,SAASuB,KAAKsD,IAAI,CAACM,SAAS,CAAC,GAAG5D,KAAKsD,IAAI,CAACO,WAAW,CAAC,SAAS7D,KAAKsD,IAAI;QAC7F3B,aAAa,CAAC,EAAEgC,aAAa,EAAE5B,MAAM,CAAC,CAAC,EAAEA,IAAI,CAAC,GAAG,GAAG,CAAC;QAErD,IAAI,CAACtC,wBAAwB;YAC3BkC,aAAa,MAAM1C,gBAAgB;gBACjC6E,gBAAgBvE,iBAAiBwE,IAAI;gBACrCC,iBAAiBrC;gBACjBjC;gBACAe;YACF;QACF;QAEAW,SAASV,QAAQ,GAAGiB;QACpB,IAAIsC,gBAAgBjE;QAEpB,IAAIuB,YAAYzB,OAAO;YACrB,MAAM,EAAEN,MAAM0E,YAAY,EAAEjB,IAAI,EAAE,GAAG,MAAMpE,UAAU;gBAAE0C;gBAAUM;gBAAY7B;gBAAMF;YAAM;YAEzFqB,YAAYgD,IAAI,CAAC;gBACfC,QAAQF;gBACRG,MAAM,CAAC,EAAE5D,WAAW,CAAC,EAAEkB,WAAW,CAAC;YACrC;YAEAsC,gBAAgB;gBACd,GAAGjE,IAAI;gBACPR,MAAM0E;gBACNf,MAAMF,KAAKE,IAAI;YACjB;YACA/B,SAASwB,KAAK,GAAGK,KAAKL,KAAK;YAC3BxB,SAASyB,MAAM,GAAGI,KAAKJ,MAAM;YAC7BzB,SAAS8B,QAAQ,GAAGD,KAAKE,IAAI;YAE7B,IAAInD,KAAKmC,YAAY,EAAE;gBACrB,MAAM5D,GAAG+F,QAAQ,CAACC,SAAS,CAACvE,KAAKmC,YAAY,EAAE+B,cAAc,oCAAoC;;YACnG,OAAO;gBACLxE,IAAIM,IAAI,GAAGiE;YACb;QACF,OAAO;YACL9C,YAAYgD,IAAI,CAAC;gBACfC,QAAQtC,YAAYtC,QAAQQ,KAAKR,IAAI;gBACrC6E,MAAM,CAAC,EAAE5D,WAAW,CAAC,EAAEkB,WAAW,CAAC;YACrC;YAEA,sFAAsF;YACtF,IAAIG,YAAYtC,QAAQQ,KAAKR,IAAI,CAAC6D,MAAM,GAAG,GAAG;gBAC5C,IAAIrD,KAAKmC,YAAY,EAAE;oBACrB,MAAM5D,GAAG+F,QAAQ,CAACC,SAAS,CAACvE,KAAKmC,YAAY,EAAEL,YAAYtC,QAAQQ,KAAKR,IAAI,EAAE,oCAAoC;;gBACpH,OAAO;oBACL,4DAA4D;oBAC5DE,IAAIM,IAAI,GAAG;wBACT,GAAGA,IAAI;wBACPR,MAAMsC,YAAYtC,QAAQQ,KAAKR,IAAI;wBACnC2D,MAAMrB,YAAYmB,KAAKE;oBACzB;gBACF;YACF;QACF;QAEA,IAAIqB,MAAMC,OAAO,CAACpE,eAAeqB,sBAAsB5B,OAAO;YAC5DJ,IAAIgF,kBAAkB,GAAG,CAAC;YAC1B,MAAM,EAAEC,QAAQ,EAAEC,WAAW,EAAE,GAAG,MAAM1F,6BAA6B;gBACnEI,QAAQC;gBACRsC,YAAY,CAACN,WACTM,aACA;oBACE,GAAGA,UAAU;oBACbgB,QAAQzB,SAASyB,MAAM;oBACvBD,OAAOxB,SAASwB,KAAK;gBACvB;gBACJ5C,MAAMiE;gBACNP,UAAUtC,SAASsC,QAAQ;gBAC3BhE;gBACAmF,eAAelD,cAAc3B,KAAKsD,IAAI;gBACtCxD;gBACAW;YACF;YAEAW,SAAS0D,KAAK,GAAGH;YACjBxD,YAAYgD,IAAI,IAAIS;QACtB;IACF,EAAE,OAAO7D,KAAK;QACZgE,QAAQC,KAAK,CAACjE;QACd,MAAM,IAAIrC,gBAAgBgB,IAAIsB,CAAC;IACjC;IAEAE,UAAU;QACR,GAAGA,OAAO;QACV,GAAGE,QAAQ;IACb;IAEA,OAAO;QACL5B,MAAM0B;QACNrB,OAAOsB;IACT;AACF,EAAC"}
1
+ {"version":3,"sources":["../../src/uploads/generateFileData.ts"],"sourcesContent":["import type { OutputInfo, Sharp, SharpOptions } from 'sharp'\n\nimport fileType from 'file-type'\nconst { fromBuffer } = fileType\nimport fs from 'fs'\nimport mkdirp from 'mkdirp'\nimport sanitize from 'sanitize-filename'\n\nimport type { Collection } from '../collections/config/types.js'\nimport type { SanitizedConfig } from '../config/types.js'\nimport type { PayloadRequest } from '../types/index.js'\nimport type { FileData, FileToSave, ProbedImageSize } from './types.js'\n\nimport { FileUploadError, MissingFile } from '../errors/index.js'\nimport canResizeImage from './canResizeImage.js'\nimport cropImage from './cropImage.js'\nimport { getExternalFile } from './getExternalFile.js'\nimport { getFileByPath } from './getFileByPath.js'\nimport { getImageSize } from './getImageSize.js'\nimport getSafeFileName from './getSafeFilename.js'\nimport resizeAndTransformImageSizes from './imageResizer.js'\nimport isImage from './isImage.js'\n\ntype Args<T> = {\n collection: Collection\n config: SanitizedConfig\n data: T\n overwriteExistingFiles?: boolean\n req: PayloadRequest\n throwOnMissingFile?: boolean\n}\n\ntype Result<T> = Promise<{\n data: T\n files: FileToSave[]\n}>\n\nexport const generateFileData = async <T>({\n collection: { config: collectionConfig },\n data,\n overwriteExistingFiles,\n req,\n throwOnMissingFile,\n}: Args<T>): Result<T> => {\n if (!collectionConfig.upload) {\n return {\n data,\n files: [],\n }\n }\n\n const { sharp } = req.payload.config\n\n let file = req.file\n\n const uploadEdits = req.query['uploadEdits'] || {}\n\n const { disableLocalStorage, formatOptions, imageSizes, resizeOptions, staticDir, trimOptions } =\n collectionConfig.upload\n\n const staticPath = staticDir\n\n if (!file && uploadEdits && data) {\n const { filename, url } = data as FileData\n\n try {\n if (url && url.startsWith('/') && !disableLocalStorage) {\n const filePath = `${staticPath}/${filename}`\n const response = await getFileByPath(filePath)\n file = response\n overwriteExistingFiles = true\n } else if (filename && url) {\n file = await getExternalFile({ data: data as FileData, req })\n overwriteExistingFiles = true\n }\n } catch (err) {\n throw new FileUploadError(req.t)\n }\n }\n\n if (!file) {\n if (throwOnMissingFile) throw new MissingFile(req.t)\n\n return {\n data,\n files: [],\n }\n }\n\n if (!disableLocalStorage) {\n mkdirp.sync(staticPath)\n }\n\n let newData = data\n const filesToSave: FileToSave[] = []\n const fileData: Partial<FileData> = {}\n const fileIsAnimated = file.mimetype === 'image/gif' || file.mimetype === 'image/webp'\n const cropData =\n typeof uploadEdits === 'object' && 'crop' in uploadEdits ? uploadEdits.crop : undefined\n\n try {\n const fileSupportsResize = canResizeImage(file.mimetype)\n let fsSafeName: string\n let sharpFile: Sharp | undefined\n let dimensions: ProbedImageSize | undefined\n let fileBuffer: { data: Buffer; info: OutputInfo }\n let ext\n let mime: string\n const fileHasAdjustments =\n fileSupportsResize &&\n Boolean(resizeOptions || formatOptions || trimOptions || file.tempFilePath)\n\n const sharpOptions: SharpOptions = {}\n\n if (fileIsAnimated) sharpOptions.animated = true\n\n if (fileHasAdjustments && sharp) {\n if (file.tempFilePath) {\n sharpFile = sharp(file.tempFilePath, sharpOptions).rotate() // pass rotate() to auto-rotate based on EXIF data. https://github.com/payloadcms/payload/pull/3081\n } else {\n sharpFile = sharp(file.data, sharpOptions).rotate() // pass rotate() to auto-rotate based on EXIF data. https://github.com/payloadcms/payload/pull/3081\n }\n\n if (resizeOptions) {\n sharpFile = sharpFile.resize(resizeOptions)\n }\n if (formatOptions) {\n sharpFile = sharpFile.toFormat(formatOptions.format, formatOptions.options)\n }\n if (trimOptions) {\n sharpFile = sharpFile.trim(trimOptions)\n }\n }\n\n if (fileSupportsResize || isImage(file.mimetype)) {\n dimensions = getImageSize(file)\n fileData.width = dimensions.width\n fileData.height = dimensions.height\n }\n\n if (sharpFile) {\n const metadata = await sharpFile.metadata()\n fileBuffer = await sharpFile.toBuffer({ resolveWithObject: true })\n ;({ ext, mime } = await fromBuffer(fileBuffer.data)) // This is getting an incorrect gif height back.\n fileData.width = fileBuffer.info.width\n fileData.height = fileBuffer.info.height\n fileData.filesize = fileBuffer.info.size\n\n // Animated GIFs + WebP aggregate the height from every frame, so we need to use divide by number of pages\n if (metadata.pages) {\n fileData.height = fileBuffer.info.height / metadata.pages\n fileData.filesize = fileBuffer.data.length\n }\n } else {\n mime = file.mimetype\n fileData.filesize = file.size\n\n if (file.name.includes('.')) {\n ext = file.name.split('.').pop()\n } else {\n ext = ''\n }\n }\n\n // Adust SVG mime type. fromBuffer modifies it.\n if (mime === 'application/xml' && ext === 'svg') mime = 'image/svg+xml'\n fileData.mimeType = mime\n\n const baseFilename = sanitize(file.name.substring(0, file.name.lastIndexOf('.')) || file.name)\n fsSafeName = `${baseFilename}${ext ? `.${ext}` : ''}`\n\n if (!overwriteExistingFiles) {\n fsSafeName = await getSafeFileName({\n collectionSlug: collectionConfig.slug,\n desiredFilename: fsSafeName,\n req,\n staticPath,\n })\n }\n\n fileData.filename = fsSafeName\n let fileForResize = file\n\n if (cropData && sharp) {\n const { data: croppedImage, info } = await cropImage({ cropData, dimensions, file, sharp })\n\n filesToSave.push({\n buffer: croppedImage,\n path: `${staticPath}/${fsSafeName}`,\n })\n\n fileForResize = {\n ...file,\n data: croppedImage,\n size: info.size,\n }\n fileData.width = info.width\n fileData.height = info.height\n fileData.filesize = info.size\n\n if (file.tempFilePath) {\n await fs.promises.writeFile(file.tempFilePath, croppedImage) // write fileBuffer to the temp path\n } else {\n req.file = fileForResize\n }\n } else {\n filesToSave.push({\n buffer: fileBuffer?.data || file.data,\n path: `${staticPath}/${fsSafeName}`,\n })\n\n // If using temp files and the image is being resized, write the file to the temp path\n if (fileBuffer?.data || file.data.length > 0) {\n if (file.tempFilePath) {\n await fs.promises.writeFile(file.tempFilePath, fileBuffer?.data || file.data) // write fileBuffer to the temp path\n } else {\n // Assign the _possibly modified_ file to the request object\n req.file = {\n ...file,\n data: fileBuffer?.data || file.data,\n size: fileBuffer?.info.size,\n }\n }\n }\n }\n\n if (Array.isArray(imageSizes) && fileSupportsResize && sharp) {\n req.payloadUploadSizes = {}\n const { sizeData, sizesToSave } = await resizeAndTransformImageSizes({\n config: collectionConfig,\n dimensions: !cropData\n ? dimensions\n : {\n ...dimensions,\n height: fileData.height,\n width: fileData.width,\n },\n file: fileForResize,\n mimeType: fileData.mimeType,\n req,\n savedFilename: fsSafeName || file.name,\n sharp,\n staticPath,\n })\n\n fileData.sizes = sizeData\n filesToSave.push(...sizesToSave)\n }\n } catch (err) {\n console.error(err)\n throw new FileUploadError(req.t)\n }\n\n newData = {\n ...newData,\n ...fileData,\n }\n\n return {\n data: newData,\n files: filesToSave,\n }\n}\n"],"names":["fileType","fromBuffer","fs","mkdirp","sanitize","FileUploadError","MissingFile","canResizeImage","cropImage","getExternalFile","getFileByPath","getImageSize","getSafeFileName","resizeAndTransformImageSizes","isImage","generateFileData","collection","config","collectionConfig","data","overwriteExistingFiles","req","throwOnMissingFile","upload","files","sharp","payload","file","uploadEdits","query","disableLocalStorage","formatOptions","imageSizes","resizeOptions","staticDir","trimOptions","staticPath","filename","url","startsWith","filePath","response","err","t","sync","newData","filesToSave","fileData","fileIsAnimated","mimetype","cropData","crop","undefined","fileSupportsResize","fsSafeName","sharpFile","dimensions","fileBuffer","ext","mime","fileHasAdjustments","Boolean","tempFilePath","sharpOptions","animated","rotate","resize","toFormat","format","options","trim","width","height","metadata","toBuffer","resolveWithObject","info","filesize","size","pages","length","name","includes","split","pop","mimeType","baseFilename","substring","lastIndexOf","collectionSlug","slug","desiredFilename","fileForResize","croppedImage","push","buffer","path","promises","writeFile","Array","isArray","payloadUploadSizes","sizeData","sizesToSave","savedFilename","sizes","console","error"],"mappings":"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"}
@@ -5,6 +5,6 @@ type Options = {
5
5
  collection: CollectionConfig;
6
6
  config: Config;
7
7
  };
8
- declare const getBaseUploadFields: ({ collection, config }: Options) => Field[];
9
- export default getBaseUploadFields;
8
+ export declare const getBaseUploadFields: ({ collection, config }: Options) => Field[];
9
+ export {};
10
10
  //# sourceMappingURL=getBaseFields.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getBaseFields.d.ts","sourceRoot":"","sources":["../../src/uploads/getBaseFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACtE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAA;AActD,KAAK,OAAO,GAAG;IACb,UAAU,EAAE,gBAAgB,CAAA;IAC5B,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,QAAA,MAAM,mBAAmB,2BAA4B,OAAO,KAAG,KAAK,EA2InE,CAAA;AAED,eAAe,mBAAmB,CAAA"}
1
+ {"version":3,"file":"getBaseFields.d.ts","sourceRoot":"","sources":["../../src/uploads/getBaseFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACtE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAA;AAwDtD,KAAK,OAAO,GAAG;IACb,UAAU,EAAE,gBAAgB,CAAA;IAC5B,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,eAAO,MAAM,mBAAmB,2BAA4B,OAAO,KAAG,KAAK,EA+J1E,CAAA"}
@@ -7,7 +7,33 @@ const labels = extractTranslations([
7
7
  'upload:fileName',
8
8
  'upload:sizes'
9
9
  ]);
10
- const getBaseUploadFields = ({ collection, config })=>{
10
+ const generateURL = ({ collectionSlug, config, filename })=>{
11
+ if (filename) {
12
+ return `${config.serverURL || ''}${config.routes.api || ''}/${collectionSlug}/file/${filename}`;
13
+ }
14
+ return undefined;
15
+ };
16
+ const generateAdminThumbnails = ({ collectionConfig, config, doc })=>{
17
+ const adminThumbnail = typeof collectionConfig.upload !== 'boolean' ? collectionConfig.upload?.adminThumbnail : undefined;
18
+ if (typeof adminThumbnail === 'function') {
19
+ return adminThumbnail({
20
+ doc
21
+ });
22
+ }
23
+ if ('sizes' in doc && doc.sizes?.[adminThumbnail]?.filename) {
24
+ return generateURL({
25
+ collectionSlug: collectionConfig.slug,
26
+ config,
27
+ filename: doc.sizes?.[adminThumbnail].filename
28
+ });
29
+ }
30
+ return generateURL({
31
+ collectionSlug: collectionConfig.slug,
32
+ config,
33
+ filename: doc.filename
34
+ });
35
+ };
36
+ export const getBaseUploadFields = ({ collection, config })=>{
11
37
  const uploadOptions = typeof collection.upload === 'object' ? collection.upload : {};
12
38
  const mimeType = {
13
39
  name: 'mimeType',
@@ -27,6 +53,24 @@ const getBaseUploadFields = ({ collection, config })=>{
27
53
  },
28
54
  label: 'URL'
29
55
  };
56
+ const thumbnailURL = {
57
+ name: 'thumbnailURL',
58
+ type: 'text',
59
+ admin: {
60
+ hidden: true,
61
+ readOnly: true
62
+ },
63
+ hooks: {
64
+ afterRead: [
65
+ ({ data })=>generateAdminThumbnails({
66
+ collectionConfig: collection,
67
+ config,
68
+ doc: data
69
+ })
70
+ ]
71
+ },
72
+ label: 'Thumbnail URL'
73
+ };
30
74
  const width = {
31
75
  name: 'width',
32
76
  type: 'number',
@@ -71,15 +115,15 @@ const getBaseUploadFields = ({ collection, config })=>{
71
115
  ...url,
72
116
  hooks: {
73
117
  afterRead: [
74
- ({ data })=>{
75
- if (data?.filename) {
76
- return `${config.serverURL}${config.routes.api}/${collection.slug}/file/${data.filename}`;
77
- }
78
- return undefined;
79
- }
118
+ ({ data })=>generateURL({
119
+ collectionSlug: collection.slug,
120
+ config,
121
+ filename: data?.filename
122
+ })
80
123
  ]
81
124
  }
82
125
  },
126
+ thumbnailURL,
83
127
  filename,
84
128
  mimeType,
85
129
  filesize,
@@ -135,6 +179,5 @@ const getBaseUploadFields = ({ collection, config })=>{
135
179
  }
136
180
  return uploadFields;
137
181
  };
138
- export default getBaseUploadFields;
139
182
 
140
183
  //# sourceMappingURL=getBaseFields.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/uploads/getBaseFields.ts"],"sourcesContent":["import type { CollectionConfig } from '../collections/config/types.js'\nimport type { Config } from '../config/types.js'\nimport type { Field } from '../fields/config/types.js'\nimport type { UploadConfig } from './types.js'\n\nimport { extractTranslations } from '../translations/extractTranslations.js'\nimport { mimeTypeValidator } from './mimeTypeValidator.js'\n\nconst labels = extractTranslations([\n 'upload:width',\n 'upload:height',\n 'upload:fileSize',\n 'upload:fileName',\n 'upload:sizes',\n])\n\ntype Options = {\n collection: CollectionConfig\n config: Config\n}\n\nconst getBaseUploadFields = ({ collection, config }: Options): Field[] => {\n const uploadOptions: UploadConfig = typeof collection.upload === 'object' ? collection.upload : {}\n\n const mimeType: Field = {\n name: 'mimeType',\n type: 'text',\n admin: {\n hidden: true,\n readOnly: true,\n },\n label: 'MIME Type',\n }\n\n const url: Field = {\n name: 'url',\n type: 'text',\n admin: {\n hidden: true,\n readOnly: true,\n },\n label: 'URL',\n }\n\n const width: Field = {\n name: 'width',\n type: 'number',\n admin: {\n hidden: true,\n readOnly: true,\n },\n label: labels['upload:width'],\n }\n\n const height: Field = {\n name: 'height',\n type: 'number',\n admin: {\n hidden: true,\n readOnly: true,\n },\n label: labels['upload:height'],\n }\n\n const filesize: Field = {\n name: 'filesize',\n type: 'number',\n admin: {\n hidden: true,\n readOnly: true,\n },\n label: labels['upload:fileSize'],\n }\n\n const filename: Field = {\n name: 'filename',\n type: 'text',\n admin: {\n disableBulkEdit: true,\n hidden: true,\n readOnly: true,\n },\n index: true,\n label: labels['upload:fileName'],\n unique: true,\n }\n\n let uploadFields: Field[] = [\n {\n ...url,\n hooks: {\n afterRead: [\n ({ data }) => {\n if (data?.filename) {\n return `${config.serverURL}${config.routes.api}/${collection.slug}/file/${data.filename}`\n }\n\n return undefined\n },\n ],\n },\n },\n filename,\n mimeType,\n filesize,\n width,\n height,\n ]\n\n if (uploadOptions.mimeTypes) {\n mimeType.validate = mimeTypeValidator(uploadOptions.mimeTypes)\n }\n\n if (uploadOptions.imageSizes) {\n uploadFields = uploadFields.concat([\n {\n name: 'sizes',\n type: 'group',\n admin: {\n hidden: true,\n },\n fields: uploadOptions.imageSizes.map((size) => ({\n name: size.name,\n type: 'group',\n admin: {\n hidden: true,\n },\n fields: [\n {\n ...url,\n hooks: {\n afterRead: [\n ({ data }) => {\n const sizeFilename = data?.sizes?.[size.name]?.filename\n\n if (sizeFilename) {\n return `${config.serverURL}${config.routes.api}/${collection.slug}/file/${sizeFilename}`\n }\n\n return null\n },\n ],\n },\n },\n width,\n height,\n mimeType,\n filesize,\n {\n ...filename,\n unique: false,\n },\n ],\n label: size.name,\n })),\n label: labels['upload:Sizes'],\n },\n ])\n }\n return uploadFields\n}\n\nexport default getBaseUploadFields\n"],"names":["extractTranslations","mimeTypeValidator","labels","getBaseUploadFields","collection","config","uploadOptions","upload","mimeType","name","type","admin","hidden","readOnly","label","url","width","height","filesize","filename","disableBulkEdit","index","unique","uploadFields","hooks","afterRead","data","serverURL","routes","api","slug","undefined","mimeTypes","validate","imageSizes","concat","fields","map","size","sizeFilename","sizes"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/uploads/getBaseFields.ts"],"sourcesContent":["import type { CollectionConfig } from '../collections/config/types.js'\nimport type { Config } from '../config/types.js'\nimport type { Field } from '../fields/config/types.js'\nimport type { UploadConfig } from './types.js'\n\nimport { extractTranslations } from '../translations/extractTranslations.js'\nimport { mimeTypeValidator } from './mimeTypeValidator.js'\n\nconst labels = extractTranslations([\n 'upload:width',\n 'upload:height',\n 'upload:fileSize',\n 'upload:fileName',\n 'upload:sizes',\n])\n\ntype GenerateURLArgs = {\n collectionSlug: string\n config: Config\n filename?: string\n}\nconst generateURL = ({ collectionSlug, config, filename }: GenerateURLArgs) => {\n if (filename) {\n return `${config.serverURL || ''}${config.routes.api || ''}/${collectionSlug}/file/${filename}`\n }\n return undefined\n}\n\ntype Args = {\n collectionConfig?: CollectionConfig\n config: Config\n doc: Record<string, unknown>\n}\nconst generateAdminThumbnails = ({ collectionConfig, config, doc }: Args) => {\n const adminThumbnail =\n typeof collectionConfig.upload !== 'boolean'\n ? collectionConfig.upload?.adminThumbnail\n : undefined\n\n if (typeof adminThumbnail === 'function') {\n return adminThumbnail({ doc })\n }\n\n if ('sizes' in doc && doc.sizes?.[adminThumbnail]?.filename) {\n return generateURL({\n collectionSlug: collectionConfig.slug,\n config,\n filename: doc.sizes?.[adminThumbnail].filename as string,\n })\n }\n\n return generateURL({\n collectionSlug: collectionConfig.slug,\n config,\n filename: doc.filename as string,\n })\n}\n\ntype Options = {\n collection: CollectionConfig\n config: Config\n}\n\nexport const getBaseUploadFields = ({ collection, config }: Options): Field[] => {\n const uploadOptions: UploadConfig = typeof collection.upload === 'object' ? collection.upload : {}\n\n const mimeType: Field = {\n name: 'mimeType',\n type: 'text',\n admin: {\n hidden: true,\n readOnly: true,\n },\n label: 'MIME Type',\n }\n\n const url: Field = {\n name: 'url',\n type: 'text',\n admin: {\n hidden: true,\n readOnly: true,\n },\n label: 'URL',\n }\n\n const thumbnailURL: Field = {\n name: 'thumbnailURL',\n type: 'text',\n admin: {\n hidden: true,\n readOnly: true,\n },\n hooks: {\n afterRead: [\n ({ data }) =>\n generateAdminThumbnails({\n collectionConfig: collection,\n config,\n doc: data,\n }),\n ],\n },\n label: 'Thumbnail URL',\n }\n\n const width: Field = {\n name: 'width',\n type: 'number',\n admin: {\n hidden: true,\n readOnly: true,\n },\n label: labels['upload:width'],\n }\n\n const height: Field = {\n name: 'height',\n type: 'number',\n admin: {\n hidden: true,\n readOnly: true,\n },\n label: labels['upload:height'],\n }\n\n const filesize: Field = {\n name: 'filesize',\n type: 'number',\n admin: {\n hidden: true,\n readOnly: true,\n },\n label: labels['upload:fileSize'],\n }\n\n const filename: Field = {\n name: 'filename',\n type: 'text',\n admin: {\n disableBulkEdit: true,\n hidden: true,\n readOnly: true,\n },\n index: true,\n label: labels['upload:fileName'],\n unique: true,\n }\n\n let uploadFields: Field[] = [\n {\n ...url,\n hooks: {\n afterRead: [\n ({ data }) =>\n generateURL({\n collectionSlug: collection.slug,\n config,\n filename: data?.filename,\n }),\n ],\n },\n },\n thumbnailURL,\n filename,\n mimeType,\n filesize,\n width,\n height,\n ]\n\n if (uploadOptions.mimeTypes) {\n mimeType.validate = mimeTypeValidator(uploadOptions.mimeTypes)\n }\n\n if (uploadOptions.imageSizes) {\n uploadFields = uploadFields.concat([\n {\n name: 'sizes',\n type: 'group',\n admin: {\n hidden: true,\n },\n fields: uploadOptions.imageSizes.map((size) => ({\n name: size.name,\n type: 'group',\n admin: {\n hidden: true,\n },\n fields: [\n {\n ...url,\n hooks: {\n afterRead: [\n ({ data }) => {\n const sizeFilename = data?.sizes?.[size.name]?.filename\n\n if (sizeFilename) {\n return `${config.serverURL}${config.routes.api}/${collection.slug}/file/${sizeFilename}`\n }\n\n return null\n },\n ],\n },\n },\n width,\n height,\n mimeType,\n filesize,\n {\n ...filename,\n unique: false,\n },\n ],\n label: size.name,\n })),\n label: labels['upload:Sizes'],\n },\n ])\n }\n return uploadFields\n}\n"],"names":["extractTranslations","mimeTypeValidator","labels","generateURL","collectionSlug","config","filename","serverURL","routes","api","undefined","generateAdminThumbnails","collectionConfig","doc","adminThumbnail","upload","sizes","slug","getBaseUploadFields","collection","uploadOptions","mimeType","name","type","admin","hidden","readOnly","label","url","thumbnailURL","hooks","afterRead","data","width","height","filesize","disableBulkEdit","index","unique","uploadFields","mimeTypes","validate","imageSizes","concat","fields","map","size","sizeFilename"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"getImageSize.d.ts","sourceRoot":"","sources":["../../src/uploads/getImageSize.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEjD,wBAAgB,YAAY,CAAC,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,eAAe,CAS1E"}
1
+ {"version":3,"file":"getImageSize.d.ts","sourceRoot":"","sources":["../../src/uploads/getImageSize.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEjD,wBAAgB,YAAY,CAAC,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,eAAe,CAO1E"}
@@ -1,18 +1,11 @@
1
- import { imageSize } from 'image-size';
1
+ import fs from 'fs';
2
+ import probeImageSize from 'probe-image-size';
2
3
  export function getImageSize(file) {
3
4
  if (file.tempFilePath) {
4
- const dimensions = imageSize(file.tempFilePath);
5
- return {
6
- height: dimensions.height,
7
- width: dimensions.width
8
- };
5
+ const data = fs.readFileSync(file.tempFilePath);
6
+ return probeImageSize.sync(data);
9
7
  }
10
- const buffer = Buffer.from(file.data);
11
- const dimensions = imageSize(buffer);
12
- return {
13
- height: dimensions.height,
14
- width: dimensions.width
15
- };
8
+ return probeImageSize.sync(file.data);
16
9
  }
17
10
 
18
11
  //# sourceMappingURL=getImageSize.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/uploads/getImageSize.ts"],"sourcesContent":["import { imageSize } from 'image-size'\n\nimport type { PayloadRequest } from '../types/index.js'\nimport type { ProbedImageSize } from './types.js'\n\nexport function getImageSize(file: PayloadRequest['file']): ProbedImageSize {\n if (file.tempFilePath) {\n const dimensions = imageSize(file.tempFilePath)\n return { height: dimensions.height, width: dimensions.width }\n }\n\n const buffer = Buffer.from(file.data)\n const dimensions = imageSize(buffer)\n return { height: dimensions.height, width: dimensions.width }\n}\n"],"names":["imageSize","getImageSize","file","tempFilePath","dimensions","height","width","buffer","Buffer","from","data"],"mappings":"AAAA,SAASA,SAAS,QAAQ,aAAY;AAKtC,OAAO,SAASC,aAAaC,IAA4B;IACvD,IAAIA,KAAKC,YAAY,EAAE;QACrB,MAAMC,aAAaJ,UAAUE,KAAKC,YAAY;QAC9C,OAAO;YAAEE,QAAQD,WAAWC,MAAM;YAAEC,OAAOF,WAAWE,KAAK;QAAC;IAC9D;IAEA,MAAMC,SAASC,OAAOC,IAAI,CAACP,KAAKQ,IAAI;IACpC,MAAMN,aAAaJ,UAAUO;IAC7B,OAAO;QAAEF,QAAQD,WAAWC,MAAM;QAAEC,OAAOF,WAAWE,KAAK;IAAC;AAC9D"}
1
+ {"version":3,"sources":["../../src/uploads/getImageSize.ts"],"sourcesContent":["import fs from 'fs'\nimport probeImageSize from 'probe-image-size'\n\nimport type { PayloadRequest } from '../types/index.js'\nimport type { ProbedImageSize } from './types.js'\n\nexport function getImageSize(file: PayloadRequest['file']): ProbedImageSize {\n if (file.tempFilePath) {\n const data = fs.readFileSync(file.tempFilePath)\n return probeImageSize.sync(data)\n }\n\n return probeImageSize.sync(file.data)\n}\n"],"names":["fs","probeImageSize","getImageSize","file","tempFilePath","data","readFileSync","sync"],"mappings":"AAAA,OAAOA,QAAQ,KAAI;AACnB,OAAOC,oBAAoB,mBAAkB;AAK7C,OAAO,SAASC,aAAaC,IAA4B;IACvD,IAAIA,KAAKC,YAAY,EAAE;QACrB,MAAMC,OAAOL,GAAGM,YAAY,CAACH,KAAKC,YAAY;QAC9C,OAAOH,eAAeM,IAAI,CAACF;IAC7B;IAEA,OAAOJ,eAAeM,IAAI,CAACJ,KAAKE,IAAI;AACtC"}
@@ -68,7 +68,7 @@ export type UploadConfig = {
68
68
  * - If a string, it should be one of the image size names.
69
69
  * - If a React component, register a function that generates the thumbnail URL using the `useAdminThumbnail` hook.
70
70
  **/
71
- adminThumbnail?: React.ComponentType | string;
71
+ adminThumbnail?: GetAdminThumbnail | string;
72
72
  crop?: boolean;
73
73
  disableLocalStorage?: boolean;
74
74
  filesRequiredOnCreate?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/uploads/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/uploads/types.ts"],"names":[],"mappings":"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"}