payload 3.0.0-beta.111 → 3.0.0-beta.113

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 (51) hide show
  1. package/dist/admin/views/types.d.ts +1 -0
  2. package/dist/admin/views/types.d.ts.map +1 -1
  3. package/dist/admin/views/types.js.map +1 -1
  4. package/dist/auth/cookies.d.ts +4 -5
  5. package/dist/auth/cookies.d.ts.map +1 -1
  6. package/dist/auth/cookies.js +11 -11
  7. package/dist/auth/cookies.js.map +1 -1
  8. package/dist/auth/operations/resetPassword.js +1 -1
  9. package/dist/auth/operations/resetPassword.js.map +1 -1
  10. package/dist/auth/operations/verifyEmail.d.ts.map +1 -1
  11. package/dist/auth/operations/verifyEmail.js +0 -3
  12. package/dist/auth/operations/verifyEmail.js.map +1 -1
  13. package/dist/collections/config/sanitize.d.ts.map +1 -1
  14. package/dist/collections/config/sanitize.js +1 -3
  15. package/dist/collections/config/sanitize.js.map +1 -1
  16. package/dist/collections/config/types.d.ts +2 -1
  17. package/dist/collections/config/types.d.ts.map +1 -1
  18. package/dist/collections/config/types.js.map +1 -1
  19. package/dist/collections/config/useAsTitle.d.ts.map +1 -1
  20. package/dist/collections/config/useAsTitle.js +4 -1
  21. package/dist/collections/config/useAsTitle.js.map +1 -1
  22. package/dist/collections/operations/duplicate.d.ts.map +1 -1
  23. package/dist/collections/operations/duplicate.js +19 -1
  24. package/dist/collections/operations/duplicate.js.map +1 -1
  25. package/dist/collections/operations/local/duplicate.js +1 -1
  26. package/dist/collections/operations/local/duplicate.js.map +1 -1
  27. package/dist/exports/i18n/sl.d.ts +2 -0
  28. package/dist/exports/i18n/sl.d.ts.map +1 -0
  29. package/dist/exports/i18n/sl.js +3 -0
  30. package/dist/exports/i18n/sl.js.map +1 -0
  31. package/dist/exports/shared.d.ts +1 -0
  32. package/dist/exports/shared.d.ts.map +1 -1
  33. package/dist/exports/shared.js +1 -0
  34. package/dist/exports/shared.js.map +1 -1
  35. package/dist/fields/config/sanitizeJoinField.d.ts.map +1 -1
  36. package/dist/fields/config/sanitizeJoinField.js +7 -3
  37. package/dist/fields/config/sanitizeJoinField.js.map +1 -1
  38. package/dist/fields/config/types.d.ts +5 -0
  39. package/dist/fields/config/types.d.ts.map +1 -1
  40. package/dist/fields/config/types.js.map +1 -1
  41. package/dist/index.d.ts +1 -1
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js.map +1 -1
  44. package/dist/uploads/generateFileData.d.ts +2 -1
  45. package/dist/uploads/generateFileData.d.ts.map +1 -1
  46. package/dist/uploads/generateFileData.js +53 -17
  47. package/dist/uploads/generateFileData.js.map +1 -1
  48. package/dist/uploads/imageResizer.d.ts.map +1 -1
  49. package/dist/uploads/imageResizer.js +18 -1
  50. package/dist/uploads/imageResizer.js.map +1 -1
  51. package/package.json +3 -3
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 { Request as graphQLRequest, OperationArgs } from 'graphql-http'\nimport type { Logger } from 'pino'\n\nimport { spawn } from 'child_process'\nimport crypto from 'crypto'\nimport { fileURLToPath } from 'node:url'\nimport path from 'path'\n\nimport type { AuthArgs } from './auth/operations/auth.js'\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, User } from './auth/types.js'\nimport type { ImportMap } from './bin/generateImportMap/index.js'\nimport type {\n BulkOperationResult,\n Collection,\n DataFromCollectionSlug,\n TypeWithID,\n} from './collections/config/types.js'\nexport type * from './admin/types.js'\nimport type { Options as CountOptions } from './collections/operations/local/count.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'\nexport type { MappedView } from './admin/views/types.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 { InitOptions, SanitizedConfig } from './config/types.js'\nimport type { BaseDatabaseAdapter, PaginatedDocs } from './database/types.js'\nimport type { InitializedEmailAdapter } from './email/types.js'\nimport type { DataFromGlobalSlug, 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 { JsonObject } from './types/index.js'\nimport type { TraverseFieldsCallback } from './utilities/traverseFields.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 { checkPayloadDependencies } from './checkPayloadDependencies.js'\nimport localOperations from './collections/operations/local/index.js'\nimport { consoleEmailAdapter } from './email/consoleEmailAdapter.js'\nimport { fieldAffectsData } from './fields/config/types.js'\nimport localGlobalOperations from './globals/operations/local/index.js'\nimport { getLogger } from './utilities/logger.js'\nimport { serverInit as serverInitTelemetry } from './utilities/telemetry/events/serverInit.js'\nimport { traverseFields } from './utilities/traverseFields.js'\n\nexport interface GeneratedTypes {\n authUntyped: {\n [slug: string]: {\n forgotPassword: {\n email: string\n }\n login: {\n email: string\n password: string\n }\n registerFirstUser: {\n email: string\n password: string\n }\n unlock: {\n email: string\n }\n }\n }\n collectionsUntyped: {\n [slug: string]: JsonObject & TypeWithID\n }\n dbUntyped: {\n defaultIDType: number | string\n }\n globalsUntyped: {\n [slug: string]: JsonObject\n }\n localeUntyped: null | string\n userUntyped: User\n}\n\n// Helper type to resolve the correct type using conditional types\ntype ResolveCollectionType<T> = 'collections' extends keyof T\n ? T['collections']\n : // @ts-expect-error\n T['collectionsUntyped']\n// @ts-expect-error\ntype ResolveGlobalType<T> = 'globals' extends keyof T ? T['globals'] : T['globalsUntyped']\n\n// Applying helper types to GeneratedTypes\nexport type TypedCollection = ResolveCollectionType<GeneratedTypes>\nexport type TypedGlobal = ResolveGlobalType<GeneratedTypes>\n\n// Extract string keys from the type\ntype StringKeyOf<T> = Extract<keyof T, string>\n\n// Define the types for slugs using the appropriate collections and globals\nexport type CollectionSlug = StringKeyOf<TypedCollection>\n\ntype ResolveDbType<T> = 'db' extends keyof T\n ? T['db']\n : // @ts-expect-error\n T['dbUntyped']\n\nexport type DefaultDocumentIDType = ResolveDbType<GeneratedTypes>['defaultIDType']\nexport type GlobalSlug = StringKeyOf<TypedGlobal>\n\n// now for locale and user\n\n// @ts-expect-error\ntype ResolveLocaleType<T> = 'locale' extends keyof T ? T['locale'] : T['localeUntyped']\n// @ts-expect-error\ntype ResolveUserType<T> = 'user' extends keyof T ? T['user'] : T['userUntyped']\n\nexport type TypedLocale = ResolveLocaleType<GeneratedTypes>\nexport type TypedUser = ResolveUserType<GeneratedTypes>\n\n// @ts-expect-error\ntype ResolveAuthOperationsType<T> = 'auth' extends keyof T ? T['auth'] : T['authUntyped']\nexport type TypedAuthOperations = ResolveAuthOperationsType<GeneratedTypes>\n\nconst filename = fileURLToPath(import.meta.url)\nconst dirname = path.dirname(filename)\n\nlet checkedDependencies = false\n\n/**\n * @description Payload\n */\nexport class BasePayload {\n /**\n * @description Authorization and Authentication using headers and cookies to run auth user strategies\n * @returns permissions: Permissions\n * @returns user: User\n */\n auth = async (options: AuthArgs) => {\n const { auth } = localOperations.auth\n return auth(this, options)\n }\n\n authStrategies: AuthStrategy[]\n\n collections: {\n [slug: string]: Collection\n } = {}\n\n config: SanitizedConfig\n /**\n * @description Performs count operation\n * @param options\n * @returns count of documents satisfying query\n */\n count = async <T extends CollectionSlug>(\n options: CountOptions<T>,\n ): Promise<{ totalDocs: number }> => {\n const { count } = localOperations\n return count(this, options)\n }\n\n /**\n * @description Performs create operation\n * @param options\n * @returns created document\n */\n create = async <TSlug extends CollectionSlug>(\n options: CreateOptions<TSlug>,\n ): Promise<DataFromCollectionSlug<TSlug>> => {\n const { create } = localOperations\n return create<TSlug>(this, options)\n }\n\n db: DatabaseAdapter\n decrypt = decrypt\n\n duplicate = async <TSlug extends CollectionSlug>(\n options: DuplicateOptions<TSlug>,\n ): Promise<DataFromCollectionSlug<TSlug>> => {\n const { duplicate } = localOperations\n return duplicate<TSlug>(this, options)\n }\n\n email: InitializedEmailAdapter\n\n encrypt = encrypt\n\n // TODO: re-implement or remove?\n // errorHandler: ErrorHandler\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 <TSlug extends CollectionSlug>(\n options: FindOptions<TSlug>,\n ): Promise<PaginatedDocs<DataFromCollectionSlug<TSlug>>> => {\n const { find } = localOperations\n return find<TSlug>(this, options)\n }\n\n /**\n * @description Find document by ID\n * @param options\n * @returns document with specified ID\n */\n findByID = async <TOptions extends FindByIDOptions>(\n options: TOptions,\n ): Promise<\n TOptions['disableErrors'] extends true\n ? DataFromCollectionSlug<TOptions['collection']> | null\n : DataFromCollectionSlug<TOptions['collection']>\n > => {\n const { findByID } = localOperations\n return findByID<TOptions>(this, options)\n }\n\n findGlobal = async <TSlug extends GlobalSlug>(\n options: FindGlobalOptions<TSlug>,\n ): Promise<DataFromGlobalSlug<TSlug>> => {\n const { findOne } = localGlobalOperations\n return findOne<TSlug>(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 <TSlug extends GlobalSlug>(\n options: FindGlobalVersionByIDOptions<TSlug>,\n ): Promise<TypeWithVersion<DataFromGlobalSlug<TSlug>>> => {\n const { findVersionByID } = localGlobalOperations\n return findVersionByID<TSlug>(this, options)\n }\n\n /**\n * @description Find global versions with criteria\n * @param options\n * @returns versions satisfying query\n */\n findGlobalVersions = async <TSlug extends GlobalSlug>(\n options: FindGlobalVersionsOptions<TSlug>,\n ): Promise<PaginatedDocs<TypeWithVersion<DataFromGlobalSlug<TSlug>>>> => {\n const { findVersions } = localGlobalOperations\n return findVersions<TSlug>(this, options)\n }\n\n /**\n * @description Find version by ID\n * @param options\n * @returns version with specified ID\n */\n findVersionByID = async <TSlug extends CollectionSlug>(\n options: FindVersionByIDOptions<TSlug>,\n ): Promise<TypeWithVersion<DataFromCollectionSlug<TSlug>>> => {\n const { findVersionByID } = localOperations\n return findVersionByID<TSlug>(this, options)\n }\n\n /**\n * @description Find versions with criteria\n * @param options\n * @returns versions satisfying query\n */\n findVersions = async <TSlug extends CollectionSlug>(\n options: FindVersionsOptions<TSlug>,\n ): Promise<PaginatedDocs<TypeWithVersion<DataFromCollectionSlug<TSlug>>>> => {\n const { findVersions } = localOperations\n return findVersions<TSlug>(this, options)\n }\n\n forgotPassword = async <TSlug extends CollectionSlug>(\n options: ForgotPasswordOptions<TSlug>,\n ): Promise<ForgotPasswordResult> => {\n const { forgotPassword } = localOperations.auth\n return forgotPassword<TSlug>(this, options)\n }\n\n getAdminURL = (): string => `${this.config.serverURL}${this.config.routes.admin}`\n\n getAPIURL = (): string => `${this.config.serverURL}${this.config.routes.api}`\n\n globals: Globals\n\n importMap: ImportMap\n\n logger: Logger\n\n login = async <TSlug extends CollectionSlug>(\n options: LoginOptions<TSlug>,\n ): Promise<{ user: DataFromCollectionSlug<TSlug> } & LoginResult> => {\n const { login } = localOperations.auth\n return login<TSlug>(this, options)\n }\n\n resetPassword = async <TSlug extends CollectionSlug>(\n options: ResetPasswordOptions<TSlug>,\n ): Promise<ResetPasswordResult> => {\n const { resetPassword } = localOperations.auth\n return resetPassword<TSlug>(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 <TSlug extends GlobalSlug>(\n options: RestoreGlobalVersionOptions<TSlug>,\n ): Promise<DataFromGlobalSlug<TSlug>> => {\n const { restoreVersion } = localGlobalOperations\n return restoreVersion<TSlug>(this, options)\n }\n\n /**\n * @description Restore version by ID\n * @param options\n * @returns version with specified ID\n */\n restoreVersion = async <TSlug extends CollectionSlug>(\n options: RestoreVersionOptions<TSlug>,\n ): Promise<DataFromCollectionSlug<TSlug>> => {\n const { restoreVersion } = localOperations\n return restoreVersion<TSlug>(this, options)\n }\n\n schema: GraphQLSchema\n\n secret: string\n\n sendEmail: InitializedEmailAdapter['sendEmail']\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 <TSlug extends CollectionSlug>(\n options: UnlockOptions<TSlug>,\n ): Promise<boolean> => {\n const { unlock } = localOperations.auth\n return unlock<TSlug>(this, options)\n }\n\n updateGlobal = async <TSlug extends GlobalSlug>(\n options: UpdateGlobalOptions<TSlug>,\n ): Promise<DataFromGlobalSlug<TSlug>> => {\n const { update } = localGlobalOperations\n return update<TSlug>(this, options)\n }\n\n validationRules: (args: OperationArgs<any>) => ValidationRule[]\n\n verifyEmail = async <TSlug extends CollectionSlug>(\n options: VerifyEmailOptions<TSlug>,\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 async bin({\n args,\n cwd,\n log,\n }: {\n args: string[]\n cwd?: string\n log?: boolean\n }): Promise<{ code: number }> {\n return new Promise((resolve, reject) => {\n const spawned = spawn('node', [path.resolve(dirname, '../bin.js'), ...args], {\n cwd,\n stdio: log || log === undefined ? 'inherit' : 'ignore',\n })\n\n spawned.on('exit', (code) => {\n resolve({ code })\n })\n\n spawned.on('error', (error) => {\n reject(error)\n })\n })\n }\n\n /**\n * @description delete one or more documents\n * @param options\n * @returns Updated document(s)\n */\n delete<TSlug extends CollectionSlug>(\n options: DeleteByIDOptions<TSlug>,\n ): Promise<DataFromCollectionSlug<TSlug>>\n\n delete<TSlug extends CollectionSlug>(\n options: DeleteManyOptions<TSlug>,\n ): Promise<BulkOperationResult<TSlug>>\n\n delete<TSlug extends CollectionSlug>(\n options: DeleteOptions<TSlug>,\n ): Promise<BulkOperationResult<TSlug> | DataFromCollectionSlug<TSlug>> {\n const { deleteLocal } = localOperations\n return deleteLocal<TSlug>(this, options)\n }\n\n /**\n * @description Initializes Payload\n * @param options\n */\n async init(options: InitOptions): Promise<Payload> {\n if (\n process.env.NODE_ENV !== 'production' &&\n process.env.PAYLOAD_DISABLE_DEPENDENCY_CHECKER !== 'true' &&\n !checkedDependencies\n ) {\n checkedDependencies = true\n await checkPayloadDependencies()\n }\n\n this.importMap = options.importMap\n\n if (!options?.config) {\n throw new Error('Error: the payload config is required to initialize payload.')\n }\n\n this.config = await options.config\n this.logger = getLogger('payload', this.config.logger)\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 let customIDType = undefined\n const findCustomID: TraverseFieldsCallback = ({ field, next }) => {\n if (['array', 'blocks'].includes(field.type)) {\n next()\n return\n }\n if (!fieldAffectsData(field)) {\n return\n }\n if (field.name === 'id') {\n customIDType = field.type\n return true\n }\n }\n\n traverseFields({ callback: findCustomID, fields: collection.fields })\n\n this.collections[collection.slug] = {\n config: collection,\n customIDType,\n }\n })\n\n // Generate types on startup\n if (process.env.NODE_ENV !== 'production' && this.config.typescript.autoGenerate !== false) {\n // We cannot run it directly here, as generate-types imports json-schema-to-typescript, which breaks on turbopack.\n // see: https://github.com/vercel/next.js/issues/66723\n void this.bin({\n args: ['generate:types'],\n log: false,\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 // Load email adapter\n if (this.config.email instanceof Promise) {\n const awaitedAdapter = await this.config.email\n this.email = awaitedAdapter({ payload: this })\n } else if (this.config.email) {\n this.email = this.config.email({ payload: this })\n } else {\n if (process.env.NEXT_PHASE !== 'phase-production-build') {\n this.logger.warn(\n `No email adapter provided. Email will be written to console. More info at https://payloadcms.com/docs/email/overview.`,\n )\n }\n\n this.email = consoleEmailAdapter({ payload: this })\n }\n\n // Warn if image resizing is enabled but sharp is not installed\n if (\n !this.config.sharp &&\n this.config.collections.some((c) => c.upload.imageSizes || c.upload.formatOptions)\n ) {\n this.logger.warn(\n `Image resizing is enabled for one or more collections, but sharp not installed. Please install 'sharp' and pass into the config.`,\n )\n }\n\n this.sendEmail = this.email['sendEmail']\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') {\n await options.onInit(this)\n }\n if (typeof this.config.onInit === 'function') {\n await this.config.onInit(this)\n }\n }\n\n return this\n }\n\n update<TSlug extends CollectionSlug>(\n options: UpdateManyOptions<TSlug>,\n ): Promise<BulkOperationResult<TSlug>>\n\n /**\n * @description Update one or more documents\n * @param options\n * @returns Updated document(s)\n */\n update<TSlug extends CollectionSlug>(\n options: UpdateByIDOptions<TSlug>,\n ): Promise<DataFromCollectionSlug<TSlug>>\n\n update<TSlug extends CollectionSlug>(\n options: UpdateOptions<TSlug>,\n ): Promise<BulkOperationResult<TSlug> | DataFromCollectionSlug<TSlug>> {\n const { update } = localOperations\n return update<TSlug>(this, options)\n }\n}\n\nconst initialized = new BasePayload()\n\nexport default initialized\n\nlet cached = global._payload\n\nif (!cached) {\n cached = global._payload = { payload: null, promise: null }\n}\n\nexport const getPayload = async (options: InitOptions): Promise<BasePayload> => {\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().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 Payload = BasePayload\n\ninterface RequestContext {\n [key: string]: unknown\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport interface DatabaseAdapter extends BaseDatabaseAdapter {}\nexport type { Payload, RequestContext }\nexport { default as executeAccess } from './auth/executeAccess.js'\nexport { executeAuthStrategies } from './auth/executeAuthStrategies.js'\nexport { getAccessResults } from './auth/getAccessResults.js'\nexport { getFieldsToSign } from './auth/getFieldsToSign.js'\nexport * from './auth/index.js'\nexport { accessOperation } from './auth/operations/access.js'\nexport { forgotPasswordOperation } from './auth/operations/forgotPassword.js'\nexport { initOperation } from './auth/operations/init.js'\nexport { loginOperation } from './auth/operations/login.js'\nexport { logoutOperation } from './auth/operations/logout.js'\nexport type { MeOperationResult } from './auth/operations/me.js'\nexport { meOperation } from './auth/operations/me.js'\nexport { refreshOperation } from './auth/operations/refresh.js'\nexport { registerFirstUserOperation } from './auth/operations/registerFirstUser.js'\nexport { resetPasswordOperation } from './auth/operations/resetPassword.js'\nexport { unlockOperation } from './auth/operations/unlock.js'\nexport { verifyEmailOperation } from './auth/operations/verifyEmail.js'\nexport type {\n AuthStrategyFunction,\n AuthStrategyFunctionArgs,\n CollectionPermission,\n DocumentPermissions,\n FieldPermissions,\n GlobalPermission,\n IncomingAuthType,\n Permission,\n Permissions,\n User,\n VerifyConfig,\n} from './auth/types.js'\nexport { generateImportMap } from './bin/generateImportMap/index.js'\nexport type { ImportMap } from './bin/generateImportMap/index.js'\nexport { genImportMapIterateFields } from './bin/generateImportMap/iterateFields.js'\nexport type { ClientCollectionConfig } from './collections/config/client.js'\nexport type {\n ServerOnlyCollectionAdminProperties,\n ServerOnlyCollectionProperties,\n ServerOnlyUploadProperties,\n} from './collections/config/client.js'\nexport type {\n AfterChangeHook as CollectionAfterChangeHook,\n AfterDeleteHook as CollectionAfterDeleteHook,\n AfterErrorHook as CollectionAfterErrorHook,\n AfterForgotPasswordHook as CollectionAfterForgotPasswordHook,\n AfterLoginHook as CollectionAfterLoginHook,\n AfterLogoutHook as CollectionAfterLogoutHook,\n AfterMeHook as CollectionAfterMeHook,\n AfterOperationHook as CollectionAfterOperationHook,\n AfterReadHook as CollectionAfterReadHook,\n AfterRefreshHook as CollectionAfterRefreshHook,\n AuthCollection,\n AuthOperationsFromCollectionSlug,\n BeforeChangeHook as CollectionBeforeChangeHook,\n BeforeDeleteHook as CollectionBeforeDeleteHook,\n BeforeLoginHook as CollectionBeforeLoginHook,\n BeforeOperationHook as CollectionBeforeOperationHook,\n BeforeReadHook as CollectionBeforeReadHook,\n BeforeValidateHook as CollectionBeforeValidateHook,\n BulkOperationResult,\n Collection,\n CollectionAdminOptions,\n CollectionConfig,\n DataFromCollectionSlug,\n HookOperationType,\n MeHook as CollectionMeHook,\n RefreshHook as CollectionRefreshHook,\n RequiredDataFromCollection,\n RequiredDataFromCollectionSlug,\n SanitizedCollectionConfig,\n TypeWithID,\n TypeWithTimestamps,\n} from './collections/config/types.js'\nexport { createDataloaderCacheKey, getDataLoader } from './collections/dataloader.js'\nexport { countOperation } from './collections/operations/count.js'\nexport { createOperation } from './collections/operations/create.js'\nexport { deleteOperation } from './collections/operations/delete.js'\nexport { deleteByIDOperation } from './collections/operations/deleteByID.js'\nexport { docAccessOperation } from './collections/operations/docAccess.js'\nexport { duplicateOperation } from './collections/operations/duplicate.js'\nexport { findOperation } from './collections/operations/find.js'\nexport { findByIDOperation } from './collections/operations/findByID.js'\nexport { findVersionByIDOperation } from './collections/operations/findVersionByID.js'\nexport { findVersionsOperation } from './collections/operations/findVersions.js'\nexport { restoreVersionOperation } from './collections/operations/restoreVersion.js'\nexport { updateOperation } from './collections/operations/update.js'\nexport { updateByIDOperation } from './collections/operations/updateByID.js'\nexport { buildConfig } from './config/build.js'\nexport type { ClientConfig } from './config/client.js'\n\nexport { serverOnlyConfigProperties } from './config/client.js'\nexport { defaults } from './config/defaults.js'\nexport { sanitizeConfig } from './config/sanitize.js'\nexport type * from './config/types.js'\nexport { combineQueries } from './database/combineQueries.js'\nexport { createDatabaseAdapter } from './database/createDatabaseAdapter.js'\nexport { defaultBeginTransaction } from './database/defaultBeginTransaction.js'\nexport { default as flattenWhereToOperators } from './database/flattenWhereToOperators.js'\nexport { getLocalizedPaths } from './database/getLocalizedPaths.js'\nexport { createMigration } from './database/migrations/createMigration.js'\nexport { getMigrations } from './database/migrations/getMigrations.js'\nexport { getPredefinedMigration } from './database/migrations/getPredefinedMigration.js'\nexport { migrate } from './database/migrations/migrate.js'\nexport { migrateDown } from './database/migrations/migrateDown.js'\nexport { migrateRefresh } from './database/migrations/migrateRefresh.js'\nexport { migrateReset } from './database/migrations/migrateReset.js'\nexport { migrateStatus } from './database/migrations/migrateStatus.js'\nexport { migrationsCollection } from './database/migrations/migrationsCollection.js'\nexport { migrationTemplate } from './database/migrations/migrationTemplate.js'\nexport { readMigrationFiles } from './database/migrations/readMigrationFiles.js'\nexport { writeMigrationIndex } from './database/migrations/writeMigrationIndex.js'\nexport type * from './database/queryValidation/types.js'\nexport type { EntityPolicies, PathToQuery } from './database/queryValidation/types.js'\nexport { validateQueryPaths } from './database/queryValidation/validateQueryPaths.js'\nexport { validateSearchParam } from './database/queryValidation/validateSearchParams.js'\nexport type {\n BaseDatabaseAdapter,\n BeginTransaction,\n CommitTransaction,\n Connect,\n Count,\n CountArgs,\n Create,\n CreateArgs,\n CreateGlobal,\n CreateGlobalArgs,\n CreateGlobalVersion,\n CreateGlobalVersionArgs,\n CreateMigration,\n CreateVersion,\n CreateVersionArgs,\n DatabaseAdapterResult as DatabaseAdapterObj,\n DBIdentifierName,\n DeleteMany,\n DeleteManyArgs,\n DeleteOne,\n DeleteOneArgs,\n DeleteVersions,\n DeleteVersionsArgs,\n Destroy,\n Find,\n FindArgs,\n FindGlobal,\n FindGlobalArgs,\n FindGlobalVersions,\n FindGlobalVersionsArgs,\n FindOne,\n FindOneArgs,\n FindVersions,\n FindVersionsArgs,\n Init,\n Migration,\n MigrationData,\n MigrationTemplateArgs,\n PaginatedDocs,\n QueryDrafts,\n QueryDraftsArgs,\n RollbackTransaction,\n Transaction,\n UpdateGlobal,\n UpdateGlobalArgs,\n UpdateGlobalVersion,\n UpdateGlobalVersionArgs,\n UpdateOne,\n UpdateOneArgs,\n UpdateVersion,\n UpdateVersionArgs,\n Upsert,\n} from './database/types.js'\nexport type { EmailAdapter as PayloadEmailAdapter, SendEmailOptions } from './email/types.js'\nexport {\n APIError,\n APIErrorName,\n AuthenticationError,\n DuplicateCollection,\n DuplicateFieldName,\n DuplicateGlobal,\n ErrorDeletingFile,\n FileRetrievalError,\n FileUploadError,\n Forbidden,\n InvalidConfiguration,\n InvalidFieldName,\n InvalidFieldRelationship,\n Locked,\n LockedAuth,\n MissingCollectionLabel,\n MissingEditorProp,\n MissingFieldInputOptions,\n MissingFieldType,\n MissingFile,\n NotFound,\n QueryError,\n ValidationError,\n ValidationErrorName,\n} from './errors/index.js'\nexport { baseBlockFields } from './fields/baseFields/baseBlockFields.js'\nexport { baseIDField } from './fields/baseFields/baseIDField.js'\nexport type { ServerOnlyFieldProperties } from './fields/config/client.js'\nexport type { ServerOnlyFieldAdminProperties } from './fields/config/client.js'\nexport { sanitizeFields } from './fields/config/sanitize.js'\nexport type {\n AdminClient,\n ArrayField,\n ArrayFieldClient,\n BaseValidateOptions,\n Block,\n BlocksField,\n BlocksFieldClient,\n CheckboxField,\n CheckboxFieldClient,\n ClientBlock,\n ClientField,\n CodeField,\n CodeFieldClient,\n CollapsibleField,\n CollapsibleFieldClient,\n Condition,\n DateField,\n DateFieldClient,\n EmailField,\n EmailFieldClient,\n Field,\n FieldAccess,\n FieldAffectingData,\n FieldAffectingDataClient,\n FieldBase,\n FieldBaseClient,\n FieldHook,\n FieldHookArgs,\n FieldPresentationalOnly,\n FieldPresentationalOnlyClient,\n FieldTypes,\n FieldWithMany,\n FieldWithManyClient,\n FieldWithMaxDepth,\n FieldWithMaxDepthClient,\n FieldWithPath,\n FieldWithPathClient,\n FieldWithSubFields,\n FieldWithSubFieldsClient,\n FilterOptions,\n FilterOptionsProps,\n GroupField,\n GroupFieldClient,\n HookName,\n JoinField,\n JoinFieldClient,\n JSONField,\n JSONFieldClient,\n Labels,\n LabelsClient,\n NamedTab,\n NonPresentationalField,\n NonPresentationalFieldClient,\n NumberField,\n NumberFieldClient,\n Option,\n OptionObject,\n PointField,\n PointFieldClient,\n PolymorphicRelationshipField,\n PolymorphicRelationshipFieldClient,\n RadioField,\n RadioFieldClient,\n RelationshipField,\n RelationshipFieldClient,\n RelationshipValue,\n RichTextField,\n RichTextFieldClient,\n RowField,\n RowFieldClient,\n SelectField,\n SelectFieldClient,\n SingleRelationshipField,\n SingleRelationshipFieldClient,\n Tab,\n TabAsField,\n TabAsFieldClient,\n TabsField,\n TabsFieldClient,\n TextareaField,\n TextareaFieldClient,\n TextField,\n TextFieldClient,\n UIField,\n UIFieldClient,\n UnnamedTab,\n UploadField,\n UploadFieldClient,\n Validate,\n ValidateOptions,\n ValueWithRelation,\n} from './fields/config/types.js'\n\nexport { getDefaultValue } from './fields/getDefaultValue.js'\nexport { traverseFields as afterChangeTraverseFields } from './fields/hooks/afterChange/traverseFields.js'\nexport { promise as afterReadPromise } from './fields/hooks/afterRead/promise.js'\nexport { traverseFields as afterReadTraverseFields } from './fields/hooks/afterRead/traverseFields.js'\nexport { traverseFields as beforeChangeTraverseFields } from './fields/hooks/beforeChange/traverseFields.js'\nexport { traverseFields as beforeValidateTraverseFields } from './fields/hooks/beforeValidate/traverseFields.js'\nexport { default as sortableFieldTypes } from './fields/sortableFieldTypes.js'\nexport type {\n ArrayFieldValidation,\n BlocksFieldValidation,\n CheckboxFieldValidation,\n CodeFieldValidation,\n ConfirmPasswordFieldValidation,\n DateFieldValidation,\n EmailFieldValidation,\n JSONFieldValidation,\n NumberFieldManyValidation,\n NumberFieldSingleValidation,\n NumberFieldValidation,\n PasswordFieldValidation,\n PointFieldValidation,\n RadioFieldValidation,\n RelationshipFieldManyValidation,\n RelationshipFieldSingleValidation,\n RelationshipFieldValidation,\n RichTextFieldValidation,\n SelectFieldManyValidation,\n SelectFieldSingleValidation,\n SelectFieldValidation,\n TextareaFieldValidation,\n TextFieldManyValidation,\n TextFieldSingleValidation,\n TextFieldValidation,\n UploadFieldManyValidation,\n UploadFieldSingleValidation,\n UploadFieldValidation,\n UsernameFieldValidation,\n} from './fields/validations.js'\nexport type { ClientGlobalConfig } from './globals/config/client.js'\nexport type {\n ServerOnlyGlobalAdminProperties,\n ServerOnlyGlobalProperties,\n} from './globals/config/client.js'\nexport type {\n AfterChangeHook as GlobalAfterChangeHook,\n AfterReadHook as GlobalAfterReadHook,\n BeforeChangeHook as GlobalBeforeChangeHook,\n BeforeReadHook as GlobalBeforeReadHook,\n BeforeValidateHook as GlobalBeforeValidateHook,\n DataFromGlobalSlug,\n GlobalAdminOptions,\n GlobalConfig,\n SanitizedGlobalConfig,\n} from './globals/config/types.js'\nexport { docAccessOperation as docAccessOperationGlobal } from './globals/operations/docAccess.js'\nexport { findOneOperation } from './globals/operations/findOne.js'\nexport { findVersionByIDOperation as findVersionByIDOperationGlobal } from './globals/operations/findVersionByID.js'\nexport { findVersionsOperation as findVersionsOperationGlobal } from './globals/operations/findVersions.js'\nexport { restoreVersionOperation as restoreVersionOperationGlobal } from './globals/operations/restoreVersion.js'\nexport { updateOperation as updateOperationGlobal } from './globals/operations/update.js'\nexport type {\n CollapsedPreferences,\n DocumentPreferences,\n FieldsPreferences,\n InsideFieldsPreferences,\n PreferenceRequest,\n PreferenceUpdateRequest,\n TabsPreferences,\n} from './preferences/types.js'\nexport { getLocalI18n } from './translations/getLocalI18n.js'\nexport * from './types/index.js'\nexport { getFileByPath } from './uploads/getFileByPath.js'\nexport type * from './uploads/types.js'\nexport { commitTransaction } from './utilities/commitTransaction.js'\nexport {\n configToJSONSchema,\n entityToJSONSchema,\n fieldsToJSONSchema,\n withNullableJSONSchemaType,\n} from './utilities/configToJSONSchema.js'\nexport { createArrayFromCommaDelineated } from './utilities/createArrayFromCommaDelineated.js'\nexport { createLocalReq } from './utilities/createLocalReq.js'\nexport {\n deepCopyObject,\n deepCopyObjectComplex,\n deepCopyObjectSimple,\n} from './utilities/deepCopyObject.js'\nexport {\n deepMerge,\n deepMergeWithCombinedArrays,\n deepMergeWithReactComponents,\n deepMergeWithSourceArrays,\n} from './utilities/deepMerge.js'\nexport {\n checkDependencies,\n type CustomVersionParser,\n} from './utilities/dependencies/dependencyChecker.js'\nexport { getDependencies } from './utilities/dependencies/getDependencies.js'\nexport {\n findUp,\n findUpSync,\n pathExistsAndIsAccessible,\n pathExistsAndIsAccessibleSync,\n} from './utilities/findUp.js'\nexport { default as flattenTopLevelFields } from './utilities/flattenTopLevelFields.js'\nexport { formatLabels, formatNames, toWords } from './utilities/formatLabels.js'\nexport { getCollectionIDFieldTypes } from './utilities/getCollectionIDFieldTypes.js'\nexport { getObjectDotNotation } from './utilities/getObjectDotNotation.js'\nexport { initTransaction } from './utilities/initTransaction.js'\nexport { isEntityHidden } from './utilities/isEntityHidden.js'\nexport { default as isolateObjectProperty } from './utilities/isolateObjectProperty.js'\nexport { isPlainObject } from './utilities/isPlainObject.js'\nexport { isValidID } from './utilities/isValidID.js'\nexport { killTransaction } from './utilities/killTransaction.js'\nexport { mapAsync } from './utilities/mapAsync.js'\nexport { mergeListSearchAndWhere } from './utilities/mergeListSearchAndWhere.js'\nexport { traverseFields } from './utilities/traverseFields.js'\nexport type { TraverseFieldsCallback } from './utilities/traverseFields.js'\nexport { buildVersionCollectionFields } from './versions/buildCollectionFields.js'\nexport { buildVersionGlobalFields } from './versions/buildGlobalFields.js'\nexport { versionDefaults } from './versions/defaults.js'\nexport { deleteCollectionVersions } from './versions/deleteCollectionVersions.js'\nexport { enforceMaxVersions } from './versions/enforceMaxVersions.js'\nexport { getLatestCollectionVersion } from './versions/getLatestCollectionVersion.js'\nexport { getLatestGlobalVersion } from './versions/getLatestGlobalVersion.js'\nexport { saveVersion } from './versions/saveVersion.js'\n\nexport type { TypeWithVersion } from './versions/types.js'\nexport { deepMergeSimple } from '@payloadcms/translations/utilities'\n"],"names":["spawn","crypto","fileURLToPath","path","decrypt","encrypt","APIKeyAuthentication","JWTAuthentication","checkPayloadDependencies","localOperations","consoleEmailAdapter","fieldAffectsData","localGlobalOperations","getLogger","serverInit","serverInitTelemetry","traverseFields","filename","url","dirname","checkedDependencies","BasePayload","auth","options","authStrategies","collections","config","count","create","db","duplicate","email","extensions","find","findByID","findGlobal","findOne","findGlobalVersionByID","findVersionByID","findGlobalVersions","findVersions","forgotPassword","getAdminURL","serverURL","routes","admin","getAPIURL","api","globals","importMap","logger","login","resetPassword","restoreGlobalVersion","restoreVersion","schema","secret","sendEmail","types","unlock","updateGlobal","update","validationRules","verifyEmail","versions","bin","args","cwd","log","Promise","resolve","reject","spawned","stdio","undefined","on","code","error","delete","deleteLocal","init","process","env","NODE_ENV","PAYLOAD_DISABLE_DEPENDENCY_CHECKER","Error","createHash","digest","slice","forEach","collection","customIDType","findCustomID","field","next","includes","type","name","callback","fields","slug","typescript","autoGenerate","payload","disableDBConnect","connect","awaitedAdapter","NEXT_PHASE","warn","sharp","some","c","upload","imageSizes","formatOptions","jwtStrategyEnabled","reduce","strategies","length","push","useAPIKey","authenticate","disableLocalStrategy","disableOnInit","onInit","initialized","cached","global","_payload","promise","getPayload","e","default","executeAccess","executeAuthStrategies","getAccessResults","getFieldsToSign","accessOperation","forgotPasswordOperation","initOperation","loginOperation","logoutOperation","meOperation","refreshOperation","registerFirstUserOperation","resetPasswordOperation","unlockOperation","verifyEmailOperation","generateImportMap","genImportMapIterateFields","createDataloaderCacheKey","getDataLoader","countOperation","createOperation","deleteOperation","deleteByIDOperation","docAccessOperation","duplicateOperation","findOperation","findByIDOperation","findVersionByIDOperation","findVersionsOperation","restoreVersionOperation","updateOperation","updateByIDOperation","buildConfig","serverOnlyConfigProperties","defaults","sanitizeConfig","combineQueries","createDatabaseAdapter","defaultBeginTransaction","flattenWhereToOperators","getLocalizedPaths","createMigration","getMigrations","getPredefinedMigration","migrate","migrateDown","migrateRefresh","migrateReset","migrateStatus","migrationsCollection","migrationTemplate","readMigrationFiles","writeMigrationIndex","validateQueryPaths","validateSearchParam","APIError","APIErrorName","AuthenticationError","DuplicateCollection","DuplicateFieldName","DuplicateGlobal","ErrorDeletingFile","FileRetrievalError","FileUploadError","Forbidden","InvalidConfiguration","InvalidFieldName","InvalidFieldRelationship","Locked","LockedAuth","MissingCollectionLabel","MissingEditorProp","MissingFieldInputOptions","MissingFieldType","MissingFile","NotFound","QueryError","ValidationError","ValidationErrorName","baseBlockFields","baseIDField","sanitizeFields","getDefaultValue","afterChangeTraverseFields","afterReadPromise","afterReadTraverseFields","beforeChangeTraverseFields","beforeValidateTraverseFields","sortableFieldTypes","docAccessOperationGlobal","findOneOperation","findVersionByIDOperationGlobal","findVersionsOperationGlobal","restoreVersionOperationGlobal","updateOperationGlobal","getLocalI18n","getFileByPath","commitTransaction","configToJSONSchema","entityToJSONSchema","fieldsToJSONSchema","withNullableJSONSchemaType","createArrayFromCommaDelineated","createLocalReq","deepCopyObject","deepCopyObjectComplex","deepCopyObjectSimple","deepMerge","deepMergeWithCombinedArrays","deepMergeWithReactComponents","deepMergeWithSourceArrays","checkDependencies","getDependencies","findUp","findUpSync","pathExistsAndIsAccessible","pathExistsAndIsAccessibleSync","flattenTopLevelFields","formatLabels","formatNames","toWords","getCollectionIDFieldTypes","getObjectDotNotation","initTransaction","isEntityHidden","isolateObjectProperty","isPlainObject","isValidID","killTransaction","mapAsync","mergeListSearchAndWhere","buildVersionCollectionFields","buildVersionGlobalFields","versionDefaults","deleteCollectionVersions","enforceMaxVersions","getLatestCollectionVersion","getLatestGlobalVersion","saveVersion","deepMergeSimple"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type { ExecutionResult, GraphQLSchema, ValidationRule } from 'graphql'\nimport type { Request as graphQLRequest, OperationArgs } from 'graphql-http'\nimport type { Logger } from 'pino'\n\nimport { spawn } from 'child_process'\nimport crypto from 'crypto'\nimport { fileURLToPath } from 'node:url'\nimport path from 'path'\n\nimport type { AuthArgs } from './auth/operations/auth.js'\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, User } from './auth/types.js'\nimport type { ImportMap } from './bin/generateImportMap/index.js'\nimport type {\n BulkOperationResult,\n Collection,\n DataFromCollectionSlug,\n TypeWithID,\n} from './collections/config/types.js'\nexport type * from './admin/types.js'\nimport type { Options as CountOptions } from './collections/operations/local/count.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'\nexport type { MappedView } from './admin/views/types.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 { InitOptions, SanitizedConfig } from './config/types.js'\nimport type { BaseDatabaseAdapter, PaginatedDocs } from './database/types.js'\nimport type { InitializedEmailAdapter } from './email/types.js'\nimport type { DataFromGlobalSlug, 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 { JsonObject } from './types/index.js'\nimport type { TraverseFieldsCallback } from './utilities/traverseFields.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 { checkPayloadDependencies } from './checkPayloadDependencies.js'\nimport localOperations from './collections/operations/local/index.js'\nimport { consoleEmailAdapter } from './email/consoleEmailAdapter.js'\nimport { fieldAffectsData } from './fields/config/types.js'\nimport localGlobalOperations from './globals/operations/local/index.js'\nimport { getLogger } from './utilities/logger.js'\nimport { serverInit as serverInitTelemetry } from './utilities/telemetry/events/serverInit.js'\nimport { traverseFields } from './utilities/traverseFields.js'\n\nexport interface GeneratedTypes {\n authUntyped: {\n [slug: string]: {\n forgotPassword: {\n email: string\n }\n login: {\n email: string\n password: string\n }\n registerFirstUser: {\n email: string\n password: string\n }\n unlock: {\n email: string\n }\n }\n }\n collectionsUntyped: {\n [slug: string]: JsonObject & TypeWithID\n }\n dbUntyped: {\n defaultIDType: number | string\n }\n globalsUntyped: {\n [slug: string]: JsonObject\n }\n localeUntyped: null | string\n userUntyped: User\n}\n\n// Helper type to resolve the correct type using conditional types\ntype ResolveCollectionType<T> = 'collections' extends keyof T\n ? T['collections']\n : // @ts-expect-error\n T['collectionsUntyped']\n// @ts-expect-error\ntype ResolveGlobalType<T> = 'globals' extends keyof T ? T['globals'] : T['globalsUntyped']\n\n// Applying helper types to GeneratedTypes\nexport type TypedCollection = ResolveCollectionType<GeneratedTypes>\nexport type TypedGlobal = ResolveGlobalType<GeneratedTypes>\n\n// Extract string keys from the type\ntype StringKeyOf<T> = Extract<keyof T, string>\n\n// Define the types for slugs using the appropriate collections and globals\nexport type CollectionSlug = StringKeyOf<TypedCollection>\n\ntype ResolveDbType<T> = 'db' extends keyof T\n ? T['db']\n : // @ts-expect-error\n T['dbUntyped']\n\nexport type DefaultDocumentIDType = ResolveDbType<GeneratedTypes>['defaultIDType']\nexport type GlobalSlug = StringKeyOf<TypedGlobal>\n\n// now for locale and user\n\n// @ts-expect-error\ntype ResolveLocaleType<T> = 'locale' extends keyof T ? T['locale'] : T['localeUntyped']\n// @ts-expect-error\ntype ResolveUserType<T> = 'user' extends keyof T ? T['user'] : T['userUntyped']\n\nexport type TypedLocale = ResolveLocaleType<GeneratedTypes>\nexport type TypedUser = ResolveUserType<GeneratedTypes>\n\n// @ts-expect-error\ntype ResolveAuthOperationsType<T> = 'auth' extends keyof T ? T['auth'] : T['authUntyped']\nexport type TypedAuthOperations = ResolveAuthOperationsType<GeneratedTypes>\n\nconst filename = fileURLToPath(import.meta.url)\nconst dirname = path.dirname(filename)\n\nlet checkedDependencies = false\n\n/**\n * @description Payload\n */\nexport class BasePayload {\n /**\n * @description Authorization and Authentication using headers and cookies to run auth user strategies\n * @returns permissions: Permissions\n * @returns user: User\n */\n auth = async (options: AuthArgs) => {\n const { auth } = localOperations.auth\n return auth(this, options)\n }\n\n authStrategies: AuthStrategy[]\n\n collections: {\n [slug: string]: Collection\n } = {}\n\n config: SanitizedConfig\n /**\n * @description Performs count operation\n * @param options\n * @returns count of documents satisfying query\n */\n count = async <T extends CollectionSlug>(\n options: CountOptions<T>,\n ): Promise<{ totalDocs: number }> => {\n const { count } = localOperations\n return count(this, options)\n }\n\n /**\n * @description Performs create operation\n * @param options\n * @returns created document\n */\n create = async <TSlug extends CollectionSlug>(\n options: CreateOptions<TSlug>,\n ): Promise<DataFromCollectionSlug<TSlug>> => {\n const { create } = localOperations\n return create<TSlug>(this, options)\n }\n\n db: DatabaseAdapter\n decrypt = decrypt\n\n duplicate = async <TSlug extends CollectionSlug>(\n options: DuplicateOptions<TSlug>,\n ): Promise<DataFromCollectionSlug<TSlug>> => {\n const { duplicate } = localOperations\n return duplicate<TSlug>(this, options)\n }\n\n email: InitializedEmailAdapter\n\n encrypt = encrypt\n\n // TODO: re-implement or remove?\n // errorHandler: ErrorHandler\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 <TSlug extends CollectionSlug>(\n options: FindOptions<TSlug>,\n ): Promise<PaginatedDocs<DataFromCollectionSlug<TSlug>>> => {\n const { find } = localOperations\n return find<TSlug>(this, options)\n }\n\n /**\n * @description Find document by ID\n * @param options\n * @returns document with specified ID\n */\n findByID = async <TOptions extends FindByIDOptions>(\n options: TOptions,\n ): Promise<\n TOptions['disableErrors'] extends true\n ? DataFromCollectionSlug<TOptions['collection']> | null\n : DataFromCollectionSlug<TOptions['collection']>\n > => {\n const { findByID } = localOperations\n return findByID<TOptions>(this, options)\n }\n\n findGlobal = async <TSlug extends GlobalSlug>(\n options: FindGlobalOptions<TSlug>,\n ): Promise<DataFromGlobalSlug<TSlug>> => {\n const { findOne } = localGlobalOperations\n return findOne<TSlug>(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 <TSlug extends GlobalSlug>(\n options: FindGlobalVersionByIDOptions<TSlug>,\n ): Promise<TypeWithVersion<DataFromGlobalSlug<TSlug>>> => {\n const { findVersionByID } = localGlobalOperations\n return findVersionByID<TSlug>(this, options)\n }\n\n /**\n * @description Find global versions with criteria\n * @param options\n * @returns versions satisfying query\n */\n findGlobalVersions = async <TSlug extends GlobalSlug>(\n options: FindGlobalVersionsOptions<TSlug>,\n ): Promise<PaginatedDocs<TypeWithVersion<DataFromGlobalSlug<TSlug>>>> => {\n const { findVersions } = localGlobalOperations\n return findVersions<TSlug>(this, options)\n }\n\n /**\n * @description Find version by ID\n * @param options\n * @returns version with specified ID\n */\n findVersionByID = async <TSlug extends CollectionSlug>(\n options: FindVersionByIDOptions<TSlug>,\n ): Promise<TypeWithVersion<DataFromCollectionSlug<TSlug>>> => {\n const { findVersionByID } = localOperations\n return findVersionByID<TSlug>(this, options)\n }\n\n /**\n * @description Find versions with criteria\n * @param options\n * @returns versions satisfying query\n */\n findVersions = async <TSlug extends CollectionSlug>(\n options: FindVersionsOptions<TSlug>,\n ): Promise<PaginatedDocs<TypeWithVersion<DataFromCollectionSlug<TSlug>>>> => {\n const { findVersions } = localOperations\n return findVersions<TSlug>(this, options)\n }\n\n forgotPassword = async <TSlug extends CollectionSlug>(\n options: ForgotPasswordOptions<TSlug>,\n ): Promise<ForgotPasswordResult> => {\n const { forgotPassword } = localOperations.auth\n return forgotPassword<TSlug>(this, options)\n }\n\n getAdminURL = (): string => `${this.config.serverURL}${this.config.routes.admin}`\n\n getAPIURL = (): string => `${this.config.serverURL}${this.config.routes.api}`\n\n globals: Globals\n\n importMap: ImportMap\n\n logger: Logger\n\n login = async <TSlug extends CollectionSlug>(\n options: LoginOptions<TSlug>,\n ): Promise<{ user: DataFromCollectionSlug<TSlug> } & LoginResult> => {\n const { login } = localOperations.auth\n return login<TSlug>(this, options)\n }\n\n resetPassword = async <TSlug extends CollectionSlug>(\n options: ResetPasswordOptions<TSlug>,\n ): Promise<ResetPasswordResult> => {\n const { resetPassword } = localOperations.auth\n return resetPassword<TSlug>(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 <TSlug extends GlobalSlug>(\n options: RestoreGlobalVersionOptions<TSlug>,\n ): Promise<DataFromGlobalSlug<TSlug>> => {\n const { restoreVersion } = localGlobalOperations\n return restoreVersion<TSlug>(this, options)\n }\n\n /**\n * @description Restore version by ID\n * @param options\n * @returns version with specified ID\n */\n restoreVersion = async <TSlug extends CollectionSlug>(\n options: RestoreVersionOptions<TSlug>,\n ): Promise<DataFromCollectionSlug<TSlug>> => {\n const { restoreVersion } = localOperations\n return restoreVersion<TSlug>(this, options)\n }\n\n schema: GraphQLSchema\n\n secret: string\n\n sendEmail: InitializedEmailAdapter['sendEmail']\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 <TSlug extends CollectionSlug>(\n options: UnlockOptions<TSlug>,\n ): Promise<boolean> => {\n const { unlock } = localOperations.auth\n return unlock<TSlug>(this, options)\n }\n\n updateGlobal = async <TSlug extends GlobalSlug>(\n options: UpdateGlobalOptions<TSlug>,\n ): Promise<DataFromGlobalSlug<TSlug>> => {\n const { update } = localGlobalOperations\n return update<TSlug>(this, options)\n }\n\n validationRules: (args: OperationArgs<any>) => ValidationRule[]\n\n verifyEmail = async <TSlug extends CollectionSlug>(\n options: VerifyEmailOptions<TSlug>,\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 async bin({\n args,\n cwd,\n log,\n }: {\n args: string[]\n cwd?: string\n log?: boolean\n }): Promise<{ code: number }> {\n return new Promise((resolve, reject) => {\n const spawned = spawn('node', [path.resolve(dirname, '../bin.js'), ...args], {\n cwd,\n stdio: log || log === undefined ? 'inherit' : 'ignore',\n })\n\n spawned.on('exit', (code) => {\n resolve({ code })\n })\n\n spawned.on('error', (error) => {\n reject(error)\n })\n })\n }\n\n /**\n * @description delete one or more documents\n * @param options\n * @returns Updated document(s)\n */\n delete<TSlug extends CollectionSlug>(\n options: DeleteByIDOptions<TSlug>,\n ): Promise<DataFromCollectionSlug<TSlug>>\n\n delete<TSlug extends CollectionSlug>(\n options: DeleteManyOptions<TSlug>,\n ): Promise<BulkOperationResult<TSlug>>\n\n delete<TSlug extends CollectionSlug>(\n options: DeleteOptions<TSlug>,\n ): Promise<BulkOperationResult<TSlug> | DataFromCollectionSlug<TSlug>> {\n const { deleteLocal } = localOperations\n return deleteLocal<TSlug>(this, options)\n }\n\n /**\n * @description Initializes Payload\n * @param options\n */\n async init(options: InitOptions): Promise<Payload> {\n if (\n process.env.NODE_ENV !== 'production' &&\n process.env.PAYLOAD_DISABLE_DEPENDENCY_CHECKER !== 'true' &&\n !checkedDependencies\n ) {\n checkedDependencies = true\n await checkPayloadDependencies()\n }\n\n this.importMap = options.importMap\n\n if (!options?.config) {\n throw new Error('Error: the payload config is required to initialize payload.')\n }\n\n this.config = await options.config\n this.logger = getLogger('payload', this.config.logger)\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 let customIDType = undefined\n const findCustomID: TraverseFieldsCallback = ({ field, next }) => {\n if (['array', 'blocks'].includes(field.type)) {\n next()\n return\n }\n if (!fieldAffectsData(field)) {\n return\n }\n if (field.name === 'id') {\n customIDType = field.type\n return true\n }\n }\n\n traverseFields({ callback: findCustomID, fields: collection.fields })\n\n this.collections[collection.slug] = {\n config: collection,\n customIDType,\n }\n })\n\n // Generate types on startup\n if (process.env.NODE_ENV !== 'production' && this.config.typescript.autoGenerate !== false) {\n // We cannot run it directly here, as generate-types imports json-schema-to-typescript, which breaks on turbopack.\n // see: https://github.com/vercel/next.js/issues/66723\n void this.bin({\n args: ['generate:types'],\n log: false,\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 // Load email adapter\n if (this.config.email instanceof Promise) {\n const awaitedAdapter = await this.config.email\n this.email = awaitedAdapter({ payload: this })\n } else if (this.config.email) {\n this.email = this.config.email({ payload: this })\n } else {\n if (process.env.NEXT_PHASE !== 'phase-production-build') {\n this.logger.warn(\n `No email adapter provided. Email will be written to console. More info at https://payloadcms.com/docs/email/overview.`,\n )\n }\n\n this.email = consoleEmailAdapter({ payload: this })\n }\n\n // Warn if image resizing is enabled but sharp is not installed\n if (\n !this.config.sharp &&\n this.config.collections.some((c) => c.upload.imageSizes || c.upload.formatOptions)\n ) {\n this.logger.warn(\n `Image resizing is enabled for one or more collections, but sharp not installed. Please install 'sharp' and pass into the config.`,\n )\n }\n\n this.sendEmail = this.email['sendEmail']\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') {\n await options.onInit(this)\n }\n if (typeof this.config.onInit === 'function') {\n await this.config.onInit(this)\n }\n }\n\n return this\n }\n\n update<TSlug extends CollectionSlug>(\n options: UpdateManyOptions<TSlug>,\n ): Promise<BulkOperationResult<TSlug>>\n\n /**\n * @description Update one or more documents\n * @param options\n * @returns Updated document(s)\n */\n update<TSlug extends CollectionSlug>(\n options: UpdateByIDOptions<TSlug>,\n ): Promise<DataFromCollectionSlug<TSlug>>\n\n update<TSlug extends CollectionSlug>(\n options: UpdateOptions<TSlug>,\n ): Promise<BulkOperationResult<TSlug> | DataFromCollectionSlug<TSlug>> {\n const { update } = localOperations\n return update<TSlug>(this, options)\n }\n}\n\nconst initialized = new BasePayload()\n\nexport default initialized\n\nlet cached = global._payload\n\nif (!cached) {\n cached = global._payload = { payload: null, promise: null }\n}\n\nexport const getPayload = async (options: InitOptions): Promise<BasePayload> => {\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().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 Payload = BasePayload\n\ninterface RequestContext {\n [key: string]: unknown\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport interface DatabaseAdapter extends BaseDatabaseAdapter {}\nexport type { Payload, RequestContext }\nexport { default as executeAccess } from './auth/executeAccess.js'\nexport { executeAuthStrategies } from './auth/executeAuthStrategies.js'\nexport { getAccessResults } from './auth/getAccessResults.js'\nexport { getFieldsToSign } from './auth/getFieldsToSign.js'\nexport * from './auth/index.js'\nexport { accessOperation } from './auth/operations/access.js'\nexport { forgotPasswordOperation } from './auth/operations/forgotPassword.js'\nexport { initOperation } from './auth/operations/init.js'\nexport { loginOperation } from './auth/operations/login.js'\nexport { logoutOperation } from './auth/operations/logout.js'\nexport type { MeOperationResult } from './auth/operations/me.js'\nexport { meOperation } from './auth/operations/me.js'\nexport { refreshOperation } from './auth/operations/refresh.js'\nexport { registerFirstUserOperation } from './auth/operations/registerFirstUser.js'\nexport { resetPasswordOperation } from './auth/operations/resetPassword.js'\nexport { unlockOperation } from './auth/operations/unlock.js'\nexport { verifyEmailOperation } from './auth/operations/verifyEmail.js'\nexport type {\n AuthStrategyFunction,\n AuthStrategyFunctionArgs,\n CollectionPermission,\n DocumentPermissions,\n FieldPermissions,\n GlobalPermission,\n IncomingAuthType,\n Permission,\n Permissions,\n User,\n VerifyConfig,\n} from './auth/types.js'\nexport { generateImportMap } from './bin/generateImportMap/index.js'\nexport type { ImportMap } from './bin/generateImportMap/index.js'\nexport { genImportMapIterateFields } from './bin/generateImportMap/iterateFields.js'\nexport type { ClientCollectionConfig } from './collections/config/client.js'\nexport type {\n ServerOnlyCollectionAdminProperties,\n ServerOnlyCollectionProperties,\n ServerOnlyUploadProperties,\n} from './collections/config/client.js'\nexport type {\n AfterChangeHook as CollectionAfterChangeHook,\n AfterDeleteHook as CollectionAfterDeleteHook,\n AfterErrorHook as CollectionAfterErrorHook,\n AfterForgotPasswordHook as CollectionAfterForgotPasswordHook,\n AfterLoginHook as CollectionAfterLoginHook,\n AfterLogoutHook as CollectionAfterLogoutHook,\n AfterMeHook as CollectionAfterMeHook,\n AfterOperationHook as CollectionAfterOperationHook,\n AfterReadHook as CollectionAfterReadHook,\n AfterRefreshHook as CollectionAfterRefreshHook,\n AuthCollection,\n AuthOperationsFromCollectionSlug,\n BeforeChangeHook as CollectionBeforeChangeHook,\n BeforeDeleteHook as CollectionBeforeDeleteHook,\n BeforeLoginHook as CollectionBeforeLoginHook,\n BeforeOperationHook as CollectionBeforeOperationHook,\n BeforeReadHook as CollectionBeforeReadHook,\n BeforeValidateHook as CollectionBeforeValidateHook,\n BulkOperationResult,\n Collection,\n CollectionAdminOptions,\n CollectionConfig,\n DataFromCollectionSlug,\n HookOperationType,\n MeHook as CollectionMeHook,\n RefreshHook as CollectionRefreshHook,\n RequiredDataFromCollection,\n RequiredDataFromCollectionSlug,\n SanitizedCollectionConfig,\n SanitizedJoins,\n TypeWithID,\n TypeWithTimestamps,\n} from './collections/config/types.js'\nexport { createDataloaderCacheKey, getDataLoader } from './collections/dataloader.js'\nexport { countOperation } from './collections/operations/count.js'\nexport { createOperation } from './collections/operations/create.js'\nexport { deleteOperation } from './collections/operations/delete.js'\nexport { deleteByIDOperation } from './collections/operations/deleteByID.js'\nexport { docAccessOperation } from './collections/operations/docAccess.js'\nexport { duplicateOperation } from './collections/operations/duplicate.js'\nexport { findOperation } from './collections/operations/find.js'\nexport { findByIDOperation } from './collections/operations/findByID.js'\nexport { findVersionByIDOperation } from './collections/operations/findVersionByID.js'\nexport { findVersionsOperation } from './collections/operations/findVersions.js'\nexport { restoreVersionOperation } from './collections/operations/restoreVersion.js'\nexport { updateOperation } from './collections/operations/update.js'\nexport { updateByIDOperation } from './collections/operations/updateByID.js'\nexport { buildConfig } from './config/build.js'\nexport type { ClientConfig } from './config/client.js'\n\nexport { serverOnlyConfigProperties } from './config/client.js'\nexport { defaults } from './config/defaults.js'\nexport { sanitizeConfig } from './config/sanitize.js'\nexport type * from './config/types.js'\nexport { combineQueries } from './database/combineQueries.js'\nexport { createDatabaseAdapter } from './database/createDatabaseAdapter.js'\nexport { defaultBeginTransaction } from './database/defaultBeginTransaction.js'\nexport { default as flattenWhereToOperators } from './database/flattenWhereToOperators.js'\nexport { getLocalizedPaths } from './database/getLocalizedPaths.js'\nexport { createMigration } from './database/migrations/createMigration.js'\nexport { getMigrations } from './database/migrations/getMigrations.js'\nexport { getPredefinedMigration } from './database/migrations/getPredefinedMigration.js'\nexport { migrate } from './database/migrations/migrate.js'\nexport { migrateDown } from './database/migrations/migrateDown.js'\nexport { migrateRefresh } from './database/migrations/migrateRefresh.js'\nexport { migrateReset } from './database/migrations/migrateReset.js'\nexport { migrateStatus } from './database/migrations/migrateStatus.js'\nexport { migrationsCollection } from './database/migrations/migrationsCollection.js'\nexport { migrationTemplate } from './database/migrations/migrationTemplate.js'\nexport { readMigrationFiles } from './database/migrations/readMigrationFiles.js'\nexport { writeMigrationIndex } from './database/migrations/writeMigrationIndex.js'\nexport type * from './database/queryValidation/types.js'\nexport type { EntityPolicies, PathToQuery } from './database/queryValidation/types.js'\nexport { validateQueryPaths } from './database/queryValidation/validateQueryPaths.js'\nexport { validateSearchParam } from './database/queryValidation/validateSearchParams.js'\nexport type {\n BaseDatabaseAdapter,\n BeginTransaction,\n CommitTransaction,\n Connect,\n Count,\n CountArgs,\n Create,\n CreateArgs,\n CreateGlobal,\n CreateGlobalArgs,\n CreateGlobalVersion,\n CreateGlobalVersionArgs,\n CreateMigration,\n CreateVersion,\n CreateVersionArgs,\n DatabaseAdapterResult as DatabaseAdapterObj,\n DBIdentifierName,\n DeleteMany,\n DeleteManyArgs,\n DeleteOne,\n DeleteOneArgs,\n DeleteVersions,\n DeleteVersionsArgs,\n Destroy,\n Find,\n FindArgs,\n FindGlobal,\n FindGlobalArgs,\n FindGlobalVersions,\n FindGlobalVersionsArgs,\n FindOne,\n FindOneArgs,\n FindVersions,\n FindVersionsArgs,\n Init,\n Migration,\n MigrationData,\n MigrationTemplateArgs,\n PaginatedDocs,\n QueryDrafts,\n QueryDraftsArgs,\n RollbackTransaction,\n Transaction,\n UpdateGlobal,\n UpdateGlobalArgs,\n UpdateGlobalVersion,\n UpdateGlobalVersionArgs,\n UpdateOne,\n UpdateOneArgs,\n UpdateVersion,\n UpdateVersionArgs,\n Upsert,\n} from './database/types.js'\nexport type { EmailAdapter as PayloadEmailAdapter, SendEmailOptions } from './email/types.js'\nexport {\n APIError,\n APIErrorName,\n AuthenticationError,\n DuplicateCollection,\n DuplicateFieldName,\n DuplicateGlobal,\n ErrorDeletingFile,\n FileRetrievalError,\n FileUploadError,\n Forbidden,\n InvalidConfiguration,\n InvalidFieldName,\n InvalidFieldRelationship,\n Locked,\n LockedAuth,\n MissingCollectionLabel,\n MissingEditorProp,\n MissingFieldInputOptions,\n MissingFieldType,\n MissingFile,\n NotFound,\n QueryError,\n ValidationError,\n ValidationErrorName,\n} from './errors/index.js'\nexport { baseBlockFields } from './fields/baseFields/baseBlockFields.js'\nexport { baseIDField } from './fields/baseFields/baseIDField.js'\nexport type { ServerOnlyFieldProperties } from './fields/config/client.js'\nexport type { ServerOnlyFieldAdminProperties } from './fields/config/client.js'\nexport { sanitizeFields } from './fields/config/sanitize.js'\nexport type {\n AdminClient,\n ArrayField,\n ArrayFieldClient,\n BaseValidateOptions,\n Block,\n BlocksField,\n BlocksFieldClient,\n CheckboxField,\n CheckboxFieldClient,\n ClientBlock,\n ClientField,\n CodeField,\n CodeFieldClient,\n CollapsibleField,\n CollapsibleFieldClient,\n Condition,\n DateField,\n DateFieldClient,\n EmailField,\n EmailFieldClient,\n Field,\n FieldAccess,\n FieldAffectingData,\n FieldAffectingDataClient,\n FieldBase,\n FieldBaseClient,\n FieldHook,\n FieldHookArgs,\n FieldPresentationalOnly,\n FieldPresentationalOnlyClient,\n FieldTypes,\n FieldWithMany,\n FieldWithManyClient,\n FieldWithMaxDepth,\n FieldWithMaxDepthClient,\n FieldWithPath,\n FieldWithPathClient,\n FieldWithSubFields,\n FieldWithSubFieldsClient,\n FilterOptions,\n FilterOptionsProps,\n GroupField,\n GroupFieldClient,\n HookName,\n JoinField,\n JoinFieldClient,\n JSONField,\n JSONFieldClient,\n Labels,\n LabelsClient,\n NamedTab,\n NonPresentationalField,\n NonPresentationalFieldClient,\n NumberField,\n NumberFieldClient,\n Option,\n OptionObject,\n PointField,\n PointFieldClient,\n PolymorphicRelationshipField,\n PolymorphicRelationshipFieldClient,\n RadioField,\n RadioFieldClient,\n RelationshipField,\n RelationshipFieldClient,\n RelationshipValue,\n RichTextField,\n RichTextFieldClient,\n RowField,\n RowFieldClient,\n SelectField,\n SelectFieldClient,\n SingleRelationshipField,\n SingleRelationshipFieldClient,\n Tab,\n TabAsField,\n TabAsFieldClient,\n TabsField,\n TabsFieldClient,\n TextareaField,\n TextareaFieldClient,\n TextField,\n TextFieldClient,\n UIField,\n UIFieldClient,\n UnnamedTab,\n UploadField,\n UploadFieldClient,\n Validate,\n ValidateOptions,\n ValueWithRelation,\n} from './fields/config/types.js'\n\nexport { getDefaultValue } from './fields/getDefaultValue.js'\nexport { traverseFields as afterChangeTraverseFields } from './fields/hooks/afterChange/traverseFields.js'\nexport { promise as afterReadPromise } from './fields/hooks/afterRead/promise.js'\nexport { traverseFields as afterReadTraverseFields } from './fields/hooks/afterRead/traverseFields.js'\nexport { traverseFields as beforeChangeTraverseFields } from './fields/hooks/beforeChange/traverseFields.js'\nexport { traverseFields as beforeValidateTraverseFields } from './fields/hooks/beforeValidate/traverseFields.js'\nexport { default as sortableFieldTypes } from './fields/sortableFieldTypes.js'\nexport type {\n ArrayFieldValidation,\n BlocksFieldValidation,\n CheckboxFieldValidation,\n CodeFieldValidation,\n ConfirmPasswordFieldValidation,\n DateFieldValidation,\n EmailFieldValidation,\n JSONFieldValidation,\n NumberFieldManyValidation,\n NumberFieldSingleValidation,\n NumberFieldValidation,\n PasswordFieldValidation,\n PointFieldValidation,\n RadioFieldValidation,\n RelationshipFieldManyValidation,\n RelationshipFieldSingleValidation,\n RelationshipFieldValidation,\n RichTextFieldValidation,\n SelectFieldManyValidation,\n SelectFieldSingleValidation,\n SelectFieldValidation,\n TextareaFieldValidation,\n TextFieldManyValidation,\n TextFieldSingleValidation,\n TextFieldValidation,\n UploadFieldManyValidation,\n UploadFieldSingleValidation,\n UploadFieldValidation,\n UsernameFieldValidation,\n} from './fields/validations.js'\nexport type { ClientGlobalConfig } from './globals/config/client.js'\nexport type {\n ServerOnlyGlobalAdminProperties,\n ServerOnlyGlobalProperties,\n} from './globals/config/client.js'\nexport type {\n AfterChangeHook as GlobalAfterChangeHook,\n AfterReadHook as GlobalAfterReadHook,\n BeforeChangeHook as GlobalBeforeChangeHook,\n BeforeReadHook as GlobalBeforeReadHook,\n BeforeValidateHook as GlobalBeforeValidateHook,\n DataFromGlobalSlug,\n GlobalAdminOptions,\n GlobalConfig,\n SanitizedGlobalConfig,\n} from './globals/config/types.js'\nexport { docAccessOperation as docAccessOperationGlobal } from './globals/operations/docAccess.js'\nexport { findOneOperation } from './globals/operations/findOne.js'\nexport { findVersionByIDOperation as findVersionByIDOperationGlobal } from './globals/operations/findVersionByID.js'\nexport { findVersionsOperation as findVersionsOperationGlobal } from './globals/operations/findVersions.js'\nexport { restoreVersionOperation as restoreVersionOperationGlobal } from './globals/operations/restoreVersion.js'\nexport { updateOperation as updateOperationGlobal } from './globals/operations/update.js'\nexport type {\n CollapsedPreferences,\n DocumentPreferences,\n FieldsPreferences,\n InsideFieldsPreferences,\n PreferenceRequest,\n PreferenceUpdateRequest,\n TabsPreferences,\n} from './preferences/types.js'\nexport { getLocalI18n } from './translations/getLocalI18n.js'\nexport * from './types/index.js'\nexport { getFileByPath } from './uploads/getFileByPath.js'\nexport type * from './uploads/types.js'\nexport { commitTransaction } from './utilities/commitTransaction.js'\nexport {\n configToJSONSchema,\n entityToJSONSchema,\n fieldsToJSONSchema,\n withNullableJSONSchemaType,\n} from './utilities/configToJSONSchema.js'\nexport { createArrayFromCommaDelineated } from './utilities/createArrayFromCommaDelineated.js'\nexport { createLocalReq } from './utilities/createLocalReq.js'\nexport {\n deepCopyObject,\n deepCopyObjectComplex,\n deepCopyObjectSimple,\n} from './utilities/deepCopyObject.js'\nexport {\n deepMerge,\n deepMergeWithCombinedArrays,\n deepMergeWithReactComponents,\n deepMergeWithSourceArrays,\n} from './utilities/deepMerge.js'\nexport {\n checkDependencies,\n type CustomVersionParser,\n} from './utilities/dependencies/dependencyChecker.js'\nexport { getDependencies } from './utilities/dependencies/getDependencies.js'\nexport {\n findUp,\n findUpSync,\n pathExistsAndIsAccessible,\n pathExistsAndIsAccessibleSync,\n} from './utilities/findUp.js'\nexport { default as flattenTopLevelFields } from './utilities/flattenTopLevelFields.js'\nexport { formatLabels, formatNames, toWords } from './utilities/formatLabels.js'\nexport { getCollectionIDFieldTypes } from './utilities/getCollectionIDFieldTypes.js'\nexport { getObjectDotNotation } from './utilities/getObjectDotNotation.js'\nexport { initTransaction } from './utilities/initTransaction.js'\nexport { isEntityHidden } from './utilities/isEntityHidden.js'\nexport { default as isolateObjectProperty } from './utilities/isolateObjectProperty.js'\nexport { isPlainObject } from './utilities/isPlainObject.js'\nexport { isValidID } from './utilities/isValidID.js'\nexport { killTransaction } from './utilities/killTransaction.js'\nexport { mapAsync } from './utilities/mapAsync.js'\nexport { mergeListSearchAndWhere } from './utilities/mergeListSearchAndWhere.js'\nexport { traverseFields } from './utilities/traverseFields.js'\nexport type { TraverseFieldsCallback } from './utilities/traverseFields.js'\nexport { buildVersionCollectionFields } from './versions/buildCollectionFields.js'\nexport { buildVersionGlobalFields } from './versions/buildGlobalFields.js'\nexport { versionDefaults } from './versions/defaults.js'\nexport { deleteCollectionVersions } from './versions/deleteCollectionVersions.js'\nexport { enforceMaxVersions } from './versions/enforceMaxVersions.js'\nexport { getLatestCollectionVersion } from './versions/getLatestCollectionVersion.js'\nexport { getLatestGlobalVersion } from './versions/getLatestGlobalVersion.js'\nexport { saveVersion } from './versions/saveVersion.js'\n\nexport type { TypeWithVersion } from './versions/types.js'\nexport { deepMergeSimple } from '@payloadcms/translations/utilities'\n"],"names":["spawn","crypto","fileURLToPath","path","decrypt","encrypt","APIKeyAuthentication","JWTAuthentication","checkPayloadDependencies","localOperations","consoleEmailAdapter","fieldAffectsData","localGlobalOperations","getLogger","serverInit","serverInitTelemetry","traverseFields","filename","url","dirname","checkedDependencies","BasePayload","auth","options","authStrategies","collections","config","count","create","db","duplicate","email","extensions","find","findByID","findGlobal","findOne","findGlobalVersionByID","findVersionByID","findGlobalVersions","findVersions","forgotPassword","getAdminURL","serverURL","routes","admin","getAPIURL","api","globals","importMap","logger","login","resetPassword","restoreGlobalVersion","restoreVersion","schema","secret","sendEmail","types","unlock","updateGlobal","update","validationRules","verifyEmail","versions","bin","args","cwd","log","Promise","resolve","reject","spawned","stdio","undefined","on","code","error","delete","deleteLocal","init","process","env","NODE_ENV","PAYLOAD_DISABLE_DEPENDENCY_CHECKER","Error","createHash","digest","slice","forEach","collection","customIDType","findCustomID","field","next","includes","type","name","callback","fields","slug","typescript","autoGenerate","payload","disableDBConnect","connect","awaitedAdapter","NEXT_PHASE","warn","sharp","some","c","upload","imageSizes","formatOptions","jwtStrategyEnabled","reduce","strategies","length","push","useAPIKey","authenticate","disableLocalStrategy","disableOnInit","onInit","initialized","cached","global","_payload","promise","getPayload","e","default","executeAccess","executeAuthStrategies","getAccessResults","getFieldsToSign","accessOperation","forgotPasswordOperation","initOperation","loginOperation","logoutOperation","meOperation","refreshOperation","registerFirstUserOperation","resetPasswordOperation","unlockOperation","verifyEmailOperation","generateImportMap","genImportMapIterateFields","createDataloaderCacheKey","getDataLoader","countOperation","createOperation","deleteOperation","deleteByIDOperation","docAccessOperation","duplicateOperation","findOperation","findByIDOperation","findVersionByIDOperation","findVersionsOperation","restoreVersionOperation","updateOperation","updateByIDOperation","buildConfig","serverOnlyConfigProperties","defaults","sanitizeConfig","combineQueries","createDatabaseAdapter","defaultBeginTransaction","flattenWhereToOperators","getLocalizedPaths","createMigration","getMigrations","getPredefinedMigration","migrate","migrateDown","migrateRefresh","migrateReset","migrateStatus","migrationsCollection","migrationTemplate","readMigrationFiles","writeMigrationIndex","validateQueryPaths","validateSearchParam","APIError","APIErrorName","AuthenticationError","DuplicateCollection","DuplicateFieldName","DuplicateGlobal","ErrorDeletingFile","FileRetrievalError","FileUploadError","Forbidden","InvalidConfiguration","InvalidFieldName","InvalidFieldRelationship","Locked","LockedAuth","MissingCollectionLabel","MissingEditorProp","MissingFieldInputOptions","MissingFieldType","MissingFile","NotFound","QueryError","ValidationError","ValidationErrorName","baseBlockFields","baseIDField","sanitizeFields","getDefaultValue","afterChangeTraverseFields","afterReadPromise","afterReadTraverseFields","beforeChangeTraverseFields","beforeValidateTraverseFields","sortableFieldTypes","docAccessOperationGlobal","findOneOperation","findVersionByIDOperationGlobal","findVersionsOperationGlobal","restoreVersionOperationGlobal","updateOperationGlobal","getLocalI18n","getFileByPath","commitTransaction","configToJSONSchema","entityToJSONSchema","fieldsToJSONSchema","withNullableJSONSchemaType","createArrayFromCommaDelineated","createLocalReq","deepCopyObject","deepCopyObjectComplex","deepCopyObjectSimple","deepMerge","deepMergeWithCombinedArrays","deepMergeWithReactComponents","deepMergeWithSourceArrays","checkDependencies","getDependencies","findUp","findUpSync","pathExistsAndIsAccessible","pathExistsAndIsAccessibleSync","flattenTopLevelFields","formatLabels","formatNames","toWords","getCollectionIDFieldTypes","getObjectDotNotation","initTransaction","isEntityHidden","isolateObjectProperty","isPlainObject","isValidID","killTransaction","mapAsync","mergeListSearchAndWhere","buildVersionCollectionFields","buildVersionGlobalFields","versionDefaults","deleteCollectionVersions","enforceMaxVersions","getLatestCollectionVersion","getLatestGlobalVersion","saveVersion","deepMergeSimple"],"mappings":"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"}
@@ -8,7 +8,8 @@ type Args<T> = {
8
8
  data: T;
9
9
  operation: 'create' | 'update';
10
10
  originalDoc?: T;
11
- overwriteExistingFiles?: boolean;
11
+ /** pass forceDisable to not overwrite existing files even if they already exist in `data` */
12
+ overwriteExistingFiles?: 'forceDisable' | boolean;
12
13
  req: PayloadRequest;
13
14
  throwOnMissingFile?: boolean;
14
15
  };
@@ -1 +1 @@
1
- {"version":3,"file":"generateFileData.d.ts","sourceRoot":"","sources":["../../src/uploads/generateFileData.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAA;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,KAAK,EAAY,UAAU,EAAgC,MAAM,YAAY,CAAA;AAapF,KAAK,IAAI,CAAC,CAAC,IAAI;IACb,UAAU,EAAE,UAAU,CAAA;IACtB,MAAM,EAAE,eAAe,CAAA;IACvB,IAAI,EAAE,CAAC,CAAA;IACP,SAAS,EAAE,QAAQ,GAAG,QAAQ,CAAA;IAC9B,WAAW,CAAC,EAAE,CAAC,CAAA;IACf,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,GAAG,EAAE,cAAc,CAAA;IACnB,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAC7B,CAAA;AAED,KAAK,MAAM,CAAC,CAAC,IAAI,OAAO,CAAC;IACvB,IAAI,EAAE,CAAC,CAAA;IACP,KAAK,EAAE,UAAU,EAAE,CAAA;CACpB,CAAC,CAAA;AAEF,eAAO,MAAM,gBAAgB,GAAU,CAAC,gIAQrC,IAAI,CAAC,CAAC,CAAC,KAAG,MAAM,CAAC,CAAC,CA0QpB,CAAA"}
1
+ {"version":3,"file":"generateFileData.d.ts","sourceRoot":"","sources":["../../src/uploads/generateFileData.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAA;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,KAAK,EAAY,UAAU,EAAgC,MAAM,YAAY,CAAA;AAapF,KAAK,IAAI,CAAC,CAAC,IAAI;IACb,UAAU,EAAE,UAAU,CAAA;IACtB,MAAM,EAAE,eAAe,CAAA;IACvB,IAAI,EAAE,CAAC,CAAA;IACP,SAAS,EAAE,QAAQ,GAAG,QAAQ,CAAA;IAC9B,WAAW,CAAC,EAAE,CAAC,CAAA;IACf,6FAA6F;IAC7F,sBAAsB,CAAC,EAAE,cAAc,GAAG,OAAO,CAAA;IACjD,GAAG,EAAE,cAAc,CAAA;IACnB,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAC7B,CAAA;AAED,KAAK,MAAM,CAAC,CAAC,IAAI,OAAO,CAAC;IACvB,IAAI,EAAE,CAAC,CAAA;IACP,KAAK,EAAE,UAAU,EAAE,CAAA;CACpB,CAAC,CAAA;AAEF,eAAO,MAAM,gBAAgB,GAAU,CAAC,gIAQrC,IAAI,CAAC,CAAC,CAAC,KAAG,MAAM,CAAC,CAAC,CAqTpB,CAAA"}
@@ -36,19 +36,26 @@ export const generateFileData = async ({ collection: { config: collectionConfig
36
36
  const filePath = `${staticPath}/${filename}`;
37
37
  const response = await getFileByPath(filePath);
38
38
  file = response;
39
- overwriteExistingFiles = true;
39
+ if (overwriteExistingFiles !== 'forceDisable') {
40
+ overwriteExistingFiles = true;
41
+ }
40
42
  } else if (filename && url) {
41
43
  file = await getExternalFile({
42
44
  data: data,
43
45
  req,
44
46
  uploadConfig: collectionConfig.upload
45
47
  });
46
- overwriteExistingFiles = true;
48
+ if (overwriteExistingFiles !== 'forceDisable') {
49
+ overwriteExistingFiles = true;
50
+ }
47
51
  }
48
52
  } catch (err) {
49
53
  throw new FileRetrievalError(req.t, err instanceof Error ? err.message : undefined);
50
54
  }
51
55
  }
56
+ if (overwriteExistingFiles === 'forceDisable') {
57
+ overwriteExistingFiles = false;
58
+ }
52
59
  if (!file) {
53
60
  if (throwOnMissingFile) {
54
61
  throw new MissingFile(req.t);
@@ -167,22 +174,51 @@ export const generateFileData = async ({ collection: { config: collectionConfig
167
174
  widthInPixels: uploadEdits.widthInPixels,
168
175
  withMetadata
169
176
  });
170
- filesToSave.push({
171
- buffer: croppedImage,
172
- path: `${staticPath}/${fsSafeName}`
173
- });
174
- fileForResize = {
175
- ...file,
176
- data: croppedImage,
177
- size: info.size
178
- };
179
- fileData.width = info.width;
180
- fileData.height = info.height;
181
- if (fileIsAnimatedType) {
182
- const metadata = await sharpFile.metadata();
183
- fileData.height = metadata.pages ? info.height / metadata.pages : info.height;
177
+ // Apply resize after cropping to ensure it conforms to resizeOptions
178
+ if (resizeOptions) {
179
+ const resizedAfterCrop = await sharp(croppedImage).resize({
180
+ fit: resizeOptions?.fit || 'cover',
181
+ height: resizeOptions?.height,
182
+ position: resizeOptions?.position || 'center',
183
+ width: resizeOptions?.width
184
+ }).toBuffer({
185
+ resolveWithObject: true
186
+ });
187
+ filesToSave.push({
188
+ buffer: resizedAfterCrop.data,
189
+ path: `${staticPath}/${fsSafeName}`
190
+ });
191
+ fileForResize = {
192
+ ...fileForResize,
193
+ data: resizedAfterCrop.data,
194
+ size: resizedAfterCrop.info.size
195
+ };
196
+ fileData.width = resizedAfterCrop.info.width;
197
+ fileData.height = resizedAfterCrop.info.height;
198
+ if (fileIsAnimatedType) {
199
+ const metadata = await sharpFile.metadata();
200
+ fileData.height = metadata.pages ? resizedAfterCrop.info.height / metadata.pages : resizedAfterCrop.info.height;
201
+ }
202
+ fileData.filesize = resizedAfterCrop.info.size;
203
+ } else {
204
+ // If resizeOptions is not present, just save the cropped image
205
+ filesToSave.push({
206
+ buffer: croppedImage,
207
+ path: `${staticPath}/${fsSafeName}`
208
+ });
209
+ fileForResize = {
210
+ ...file,
211
+ data: croppedImage,
212
+ size: info.size
213
+ };
214
+ fileData.width = info.width;
215
+ fileData.height = info.height;
216
+ if (fileIsAnimatedType) {
217
+ const metadata = await sharpFile.metadata();
218
+ fileData.height = metadata.pages ? info.height / metadata.pages : info.height;
219
+ }
220
+ fileData.filesize = info.size;
184
221
  }
185
- fileData.filesize = info.size;
186
222
  if (file.tempFilePath) {
187
223
  await fs.promises.writeFile(file.tempFilePath, croppedImage) // write fileBuffer to the temp path
188
224
  ;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/uploads/generateFileData.ts"],"sourcesContent":["import type { OutputInfo, Sharp, SharpOptions } from 'sharp'\n\nimport { fileTypeFromBuffer } from 'file-type'\nimport fs from 'fs'\nimport { mkdirSync } from 'node:fs'\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, UploadEdits } from './types.js'\n\nimport { FileRetrievalError, 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'\nimport { optionallyAppendMetadata } from './optionallyAppendMetadata.js'\n\ntype Args<T> = {\n collection: Collection\n config: SanitizedConfig\n data: T\n operation: 'create' | 'update'\n originalDoc?: 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 operation,\n originalDoc,\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 = parseUploadEditsFromReqOrIncomingData({\n data,\n operation,\n originalDoc,\n req,\n })\n\n const {\n disableLocalStorage,\n focalPoint: focalPointEnabled = true,\n formatOptions,\n imageSizes,\n resizeOptions,\n staticDir,\n trimOptions,\n withMetadata,\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({\n data: data as FileData,\n req,\n uploadConfig: collectionConfig.upload,\n })\n overwriteExistingFiles = true\n }\n } catch (err: unknown) {\n throw new FileRetrievalError(req.t, err instanceof Error ? err.message : undefined)\n }\n }\n\n if (!file) {\n if (throwOnMissingFile) {\n throw new MissingFile(req.t)\n }\n\n return {\n data,\n files: [],\n }\n }\n\n if (!disableLocalStorage) {\n mkdirSync(staticPath, { recursive: true })\n }\n\n let newData = data\n const filesToSave: FileToSave[] = []\n const fileData: Partial<FileData> = {}\n const fileIsAnimatedType = ['image/avif', 'image/gif', 'image/webp'].includes(file.mimetype)\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 || imageSizes || trimOptions || file.tempFilePath)\n\n const sharpOptions: SharpOptions = {}\n\n if (fileIsAnimatedType) {\n sharpOptions.animated = true\n }\n\n if (sharp && (fileIsAnimatedType || fileHasAdjustments)) {\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 (fileHasAdjustments) {\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\n if (fileSupportsResize || isImage(file.mimetype)) {\n dimensions = await getImageSize(file)\n fileData.width = dimensions.width\n fileData.height = dimensions.height\n }\n\n if (sharpFile) {\n const metadata = await sharpFile.metadata()\n sharpFile = await optionallyAppendMetadata({\n req,\n sharpFile,\n withMetadata,\n })\n fileBuffer = await sharpFile.toBuffer({ resolveWithObject: true })\n ;({ ext, mime } = await fileTypeFromBuffer(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().split('?')[0]\n } else {\n ext = ''\n }\n }\n\n // Adjust SVG mime type. fromBuffer modifies it.\n if (mime === 'application/xml' && ext === 'svg') {\n mime = 'image/svg+xml'\n }\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({\n cropData,\n dimensions,\n file,\n heightInPixels: uploadEdits.heightInPixels,\n req,\n sharp,\n widthInPixels: uploadEdits.widthInPixels,\n withMetadata,\n })\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 if (fileIsAnimatedType) {\n const metadata = await sharpFile.metadata()\n fileData.height = metadata.pages ? info.height / metadata.pages : info.height\n }\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 (fileSupportsResize && (Array.isArray(imageSizes) || focalPointEnabled !== false)) {\n req.payloadUploadSizes = {}\n const { focalPoint, 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 uploadEdits,\n withMetadata,\n })\n\n fileData.sizes = sizeData\n fileData.focalX = focalPoint?.x\n fileData.focalY = focalPoint?.y\n filesToSave.push(...sizesToSave)\n }\n } catch (err) {\n req.payload.logger.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\n/**\n * Parse upload edits from req or incoming data\n */\nfunction parseUploadEditsFromReqOrIncomingData(args: {\n data: unknown\n operation: 'create' | 'update'\n originalDoc: unknown\n req: PayloadRequest\n}): UploadEdits {\n const { data, operation, originalDoc, req } = args\n\n // Get intended focal point change from query string or incoming data\n const uploadEdits =\n req.query?.uploadEdits && typeof req.query.uploadEdits === 'object'\n ? (req.query.uploadEdits as UploadEdits)\n : {}\n\n if (uploadEdits.focalPoint) {\n return uploadEdits\n }\n\n const incomingData = data as FileData\n const origDoc = originalDoc as FileData\n\n // If no change in focal point, return undefined.\n // This prevents a refocal operation triggered from admin, because it always sends the focal point.\n if (origDoc && incomingData.focalX === origDoc.focalX && incomingData.focalY === origDoc.focalY) {\n return undefined\n }\n\n if (incomingData?.focalX && incomingData?.focalY) {\n uploadEdits.focalPoint = {\n x: incomingData.focalX,\n y: incomingData.focalY,\n }\n return uploadEdits\n }\n\n // If no focal point is set, default to center\n if (operation === 'create') {\n uploadEdits.focalPoint = {\n x: 50,\n y: 50,\n }\n }\n return uploadEdits\n}\n"],"names":["fileTypeFromBuffer","fs","mkdirSync","sanitize","FileRetrievalError","FileUploadError","MissingFile","canResizeImage","cropImage","getExternalFile","getFileByPath","getImageSize","getSafeFileName","resizeAndTransformImageSizes","isImage","optionallyAppendMetadata","generateFileData","collection","config","collectionConfig","data","operation","originalDoc","overwriteExistingFiles","req","throwOnMissingFile","upload","files","sharp","payload","file","uploadEdits","parseUploadEditsFromReqOrIncomingData","disableLocalStorage","focalPoint","focalPointEnabled","formatOptions","imageSizes","resizeOptions","staticDir","trimOptions","withMetadata","staticPath","filename","url","startsWith","filePath","response","uploadConfig","err","t","Error","message","undefined","recursive","newData","filesToSave","fileData","fileIsAnimatedType","includes","mimetype","cropData","crop","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","split","pop","mimeType","baseFilename","substring","lastIndexOf","collectionSlug","slug","desiredFilename","fileForResize","croppedImage","heightInPixels","widthInPixels","push","buffer","path","promises","writeFile","Array","isArray","payloadUploadSizes","sizeData","sizesToSave","savedFilename","sizes","focalX","x","focalY","y","logger","error","args","query","incomingData","origDoc"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/uploads/generateFileData.ts"],"sourcesContent":["import type { OutputInfo, Sharp, SharpOptions } from 'sharp'\n\nimport { fileTypeFromBuffer } from 'file-type'\nimport fs from 'fs'\nimport { mkdirSync } from 'node:fs'\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, UploadEdits } from './types.js'\n\nimport { FileRetrievalError, 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'\nimport { optionallyAppendMetadata } from './optionallyAppendMetadata.js'\n\ntype Args<T> = {\n collection: Collection\n config: SanitizedConfig\n data: T\n operation: 'create' | 'update'\n originalDoc?: T\n /** pass forceDisable to not overwrite existing files even if they already exist in `data` */\n overwriteExistingFiles?: 'forceDisable' | 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 operation,\n originalDoc,\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 = parseUploadEditsFromReqOrIncomingData({\n data,\n operation,\n originalDoc,\n req,\n })\n\n const {\n disableLocalStorage,\n focalPoint: focalPointEnabled = true,\n formatOptions,\n imageSizes,\n resizeOptions,\n staticDir,\n trimOptions,\n withMetadata,\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 if (overwriteExistingFiles !== 'forceDisable') {\n overwriteExistingFiles = true\n }\n } else if (filename && url) {\n file = await getExternalFile({\n data: data as FileData,\n req,\n uploadConfig: collectionConfig.upload,\n })\n if (overwriteExistingFiles !== 'forceDisable') {\n overwriteExistingFiles = true\n }\n }\n } catch (err: unknown) {\n throw new FileRetrievalError(req.t, err instanceof Error ? err.message : undefined)\n }\n }\n\n if (overwriteExistingFiles === 'forceDisable') {\n overwriteExistingFiles = false\n }\n\n if (!file) {\n if (throwOnMissingFile) {\n throw new MissingFile(req.t)\n }\n\n return {\n data,\n files: [],\n }\n }\n\n if (!disableLocalStorage) {\n mkdirSync(staticPath, { recursive: true })\n }\n\n let newData = data\n const filesToSave: FileToSave[] = []\n const fileData: Partial<FileData> = {}\n const fileIsAnimatedType = ['image/avif', 'image/gif', 'image/webp'].includes(file.mimetype)\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 || imageSizes || trimOptions || file.tempFilePath)\n\n const sharpOptions: SharpOptions = {}\n\n if (fileIsAnimatedType) {\n sharpOptions.animated = true\n }\n\n if (sharp && (fileIsAnimatedType || fileHasAdjustments)) {\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 (fileHasAdjustments) {\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\n if (fileSupportsResize || isImage(file.mimetype)) {\n dimensions = await getImageSize(file)\n fileData.width = dimensions.width\n fileData.height = dimensions.height\n }\n\n if (sharpFile) {\n const metadata = await sharpFile.metadata()\n sharpFile = await optionallyAppendMetadata({\n req,\n sharpFile,\n withMetadata,\n })\n fileBuffer = await sharpFile.toBuffer({ resolveWithObject: true })\n ;({ ext, mime } = await fileTypeFromBuffer(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().split('?')[0]\n } else {\n ext = ''\n }\n }\n\n // Adjust SVG mime type. fromBuffer modifies it.\n if (mime === 'application/xml' && ext === 'svg') {\n mime = 'image/svg+xml'\n }\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({\n cropData,\n dimensions,\n file,\n heightInPixels: uploadEdits.heightInPixels,\n req,\n sharp,\n widthInPixels: uploadEdits.widthInPixels,\n withMetadata,\n })\n\n // Apply resize after cropping to ensure it conforms to resizeOptions\n if (resizeOptions) {\n const resizedAfterCrop = await sharp(croppedImage)\n .resize({\n fit: resizeOptions?.fit || 'cover',\n height: resizeOptions?.height,\n position: resizeOptions?.position || 'center',\n width: resizeOptions?.width,\n })\n .toBuffer({ resolveWithObject: true })\n\n filesToSave.push({\n buffer: resizedAfterCrop.data,\n path: `${staticPath}/${fsSafeName}`,\n })\n\n fileForResize = {\n ...fileForResize,\n data: resizedAfterCrop.data,\n size: resizedAfterCrop.info.size,\n }\n\n fileData.width = resizedAfterCrop.info.width\n fileData.height = resizedAfterCrop.info.height\n if (fileIsAnimatedType) {\n const metadata = await sharpFile.metadata()\n fileData.height = metadata.pages\n ? resizedAfterCrop.info.height / metadata.pages\n : resizedAfterCrop.info.height\n }\n fileData.filesize = resizedAfterCrop.info.size\n } else {\n // If resizeOptions is not present, just save the cropped image\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\n fileData.width = info.width\n fileData.height = info.height\n if (fileIsAnimatedType) {\n const metadata = await sharpFile.metadata()\n fileData.height = metadata.pages ? info.height / metadata.pages : info.height\n }\n fileData.filesize = info.size\n }\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 (fileSupportsResize && (Array.isArray(imageSizes) || focalPointEnabled !== false)) {\n req.payloadUploadSizes = {}\n const { focalPoint, 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 uploadEdits,\n withMetadata,\n })\n\n fileData.sizes = sizeData\n fileData.focalX = focalPoint?.x\n fileData.focalY = focalPoint?.y\n filesToSave.push(...sizesToSave)\n }\n } catch (err) {\n req.payload.logger.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\n/**\n * Parse upload edits from req or incoming data\n */\nfunction parseUploadEditsFromReqOrIncomingData(args: {\n data: unknown\n operation: 'create' | 'update'\n originalDoc: unknown\n req: PayloadRequest\n}): UploadEdits {\n const { data, operation, originalDoc, req } = args\n\n // Get intended focal point change from query string or incoming data\n const uploadEdits =\n req.query?.uploadEdits && typeof req.query.uploadEdits === 'object'\n ? (req.query.uploadEdits as UploadEdits)\n : {}\n\n if (uploadEdits.focalPoint) {\n return uploadEdits\n }\n\n const incomingData = data as FileData\n const origDoc = originalDoc as FileData\n\n // If no change in focal point, return undefined.\n // This prevents a refocal operation triggered from admin, because it always sends the focal point.\n if (origDoc && incomingData.focalX === origDoc.focalX && incomingData.focalY === origDoc.focalY) {\n return undefined\n }\n\n if (incomingData?.focalX && incomingData?.focalY) {\n uploadEdits.focalPoint = {\n x: incomingData.focalX,\n y: incomingData.focalY,\n }\n return uploadEdits\n }\n\n // If no focal point is set, default to center\n if (operation === 'create') {\n uploadEdits.focalPoint = {\n x: 50,\n y: 50,\n }\n }\n return uploadEdits\n}\n"],"names":["fileTypeFromBuffer","fs","mkdirSync","sanitize","FileRetrievalError","FileUploadError","MissingFile","canResizeImage","cropImage","getExternalFile","getFileByPath","getImageSize","getSafeFileName","resizeAndTransformImageSizes","isImage","optionallyAppendMetadata","generateFileData","collection","config","collectionConfig","data","operation","originalDoc","overwriteExistingFiles","req","throwOnMissingFile","upload","files","sharp","payload","file","uploadEdits","parseUploadEditsFromReqOrIncomingData","disableLocalStorage","focalPoint","focalPointEnabled","formatOptions","imageSizes","resizeOptions","staticDir","trimOptions","withMetadata","staticPath","filename","url","startsWith","filePath","response","uploadConfig","err","t","Error","message","undefined","recursive","newData","filesToSave","fileData","fileIsAnimatedType","includes","mimetype","cropData","crop","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","split","pop","mimeType","baseFilename","substring","lastIndexOf","collectionSlug","slug","desiredFilename","fileForResize","croppedImage","heightInPixels","widthInPixels","resizedAfterCrop","fit","position","push","buffer","path","promises","writeFile","Array","isArray","payloadUploadSizes","sizeData","sizesToSave","savedFilename","sizes","focalX","x","focalY","y","logger","error","args","query","incomingData","origDoc"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"imageResizer.d.ts","sourceRoot":"","sources":["../../src/uploads/imageResizer.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAC/E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AACjE,OAAO,KAAK,EAEV,SAAS,EACT,UAAU,EAEV,eAAe,EACf,WAAW,EACZ,MAAM,YAAY,CAAA;AAMnB,KAAK,UAAU,GAAG;IAChB,MAAM,EAAE,yBAAyB,CAAA;IACjC,UAAU,EAAE,eAAe,CAAA;IAC3B,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,CAAA;IAC5B,QAAQ,EAAE,MAAM,CAAA;IAChB,GAAG,EAAE,cAAc,CAAA;IACnB,aAAa,EAAE,MAAM,CAAA;IACrB,KAAK,CAAC,EAAE,eAAe,CAAA;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,YAAY,CAAC,EAAE,YAAY,CAAA;CAC5B,CAAA;AAED,sEAAsE;AACtE,KAAK,gBAAgB,GAAG;IACtB,UAAU,CAAC,EAAE,WAAW,CAAC,YAAY,CAAC,CAAA;IACtC,QAAQ,EAAE,SAAS,CAAA;IACnB,WAAW,EAAE,UAAU,EAAE,CAAA;CAC1B,CAAA;AAmMD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,4BAA4B,CAAC,EACjD,MAAM,EACN,UAAU,EACV,IAAI,EACJ,QAAQ,EACR,GAAG,EACH,aAAa,EACb,KAAK,EACL,UAAU,EACV,WAAW,EACX,YAAY,GACb,EAAE,UAAU,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAgOxC"}
1
+ {"version":3,"file":"imageResizer.d.ts","sourceRoot":"","sources":["../../src/uploads/imageResizer.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAC/E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AACjE,OAAO,KAAK,EAEV,SAAS,EACT,UAAU,EAEV,eAAe,EACf,WAAW,EACZ,MAAM,YAAY,CAAA;AAMnB,KAAK,UAAU,GAAG;IAChB,MAAM,EAAE,yBAAyB,CAAA;IACjC,UAAU,EAAE,eAAe,CAAA;IAC3B,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,CAAA;IAC5B,QAAQ,EAAE,MAAM,CAAA;IAChB,GAAG,EAAE,cAAc,CAAA;IACnB,aAAa,EAAE,MAAM,CAAA;IACrB,KAAK,CAAC,EAAE,eAAe,CAAA;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,YAAY,CAAC,EAAE,YAAY,CAAA;CAC5B,CAAA;AAED,sEAAsE;AACtE,KAAK,gBAAgB,GAAG;IACtB,UAAU,CAAC,EAAE,WAAW,CAAC,YAAY,CAAC,CAAA;IACtC,QAAQ,EAAE,SAAS,CAAA;IACnB,WAAW,EAAE,UAAU,EAAE,CAAA;CAC1B,CAAA;AAmMD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,4BAA4B,CAAC,EACjD,MAAM,EACN,UAAU,EACV,IAAI,EACJ,QAAQ,EACR,GAAG,EACH,aAAa,EACb,KAAK,EACL,UAAU,EACV,WAAW,EACX,YAAY,GACb,EAAE,UAAU,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA4OxC"}
@@ -165,6 +165,23 @@ const createImageName = ({ extension, height, outputImageName, width })=>{
165
165
  const sharpBase = sharp(file.tempFilePath || file.data, sharpOptions).rotate() // pass rotate() to auto-rotate based on EXIF data. https://github.com/payloadcms/payload/pull/3081
166
166
  ;
167
167
  const originalImageMeta = await sharpBase.metadata();
168
+ let adjustedDimensions = {
169
+ ...dimensions
170
+ };
171
+ // Images with an exif orientation of 5, 6, 7, or 8 are auto-rotated by sharp
172
+ // Need to adjust the dimensions to match the original image
173
+ if ([
174
+ 5,
175
+ 6,
176
+ 7,
177
+ 8
178
+ ].includes(originalImageMeta.orientation)) {
179
+ adjustedDimensions = {
180
+ ...dimensions,
181
+ height: dimensions.width,
182
+ width: dimensions.height
183
+ };
184
+ }
168
185
  const resizeImageMeta = {
169
186
  height: extractHeightFromImage(originalImageMeta),
170
187
  width: originalImageMeta.width
@@ -185,7 +202,7 @@ const createImageName = ({ extension, height, outputImageName, width })=>{
185
202
  let resized = imageToResize;
186
203
  if (resizeAction === 'resizeWithFocalPoint') {
187
204
  let { height: resizeHeight, width: resizeWidth } = imageResizeConfig;
188
- const originalAspectRatio = dimensions.width / dimensions.height;
205
+ const originalAspectRatio = adjustedDimensions.width / adjustedDimensions.height;
189
206
  // Calculate resizeWidth based on original aspect ratio if it's undefined
190
207
  if (resizeHeight && !resizeWidth) {
191
208
  resizeWidth = Math.round(resizeHeight * originalAspectRatio);