payload 3.60.0-internal.8e20fed → 3.60.0-internal.c130254

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.
@@ -1 +1 @@
1
- {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../../src/collections/operations/utilities/update.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAGhD,OAAO,KAAK,EACV,OAAO,EACP,cAAc,EACd,YAAY,EACZ,UAAU,EACV,6BAA6B,EAC9B,MAAM,yBAAyB,CAAA;AAChC,OAAO,KAAK,EACV,sBAAsB,EACtB,yBAAyB,EACzB,wBAAwB,EACzB,MAAM,uBAAuB,CAAA;AAS9B,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,cAAc,EAEnB,KAAK,UAAU,EACf,KAAK,eAAe,EACrB,MAAM,mBAAmB,CAAA;AAO1B,MAAM,MAAM,wBAAwB,CAAC,KAAK,SAAS,cAAc,IAAI;IACnE,aAAa,EAAE,YAAY,CAAA;IAC3B,QAAQ,EAAE,OAAO,CAAA;IACjB,gBAAgB,EAAE,yBAAyB,CAAA;IAC3C,MAAM,EAAE,eAAe,CAAA;IACvB,IAAI,EAAE,WAAW,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAA;IAChD,KAAK,EAAE,MAAM,CAAA;IACb,cAAc,EAAE,GAAG,CAAA;IACnB,QAAQ,EAAE,OAAO,CAAA;IACjB,cAAc,EAAE,MAAM,CAAA;IACtB,aAAa,EAAE,UAAU,EAAE,CAAA;IAC3B,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,cAAc,EAAE,OAAO,CAAA;IACvB,YAAY,EAAE,OAAO,CAAA;IACrB,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,CAAC,EAAE,YAAY,CAAA;IACvB,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,GAAG,EAAE,cAAc,CAAA;IACnB,MAAM,EAAE,UAAU,CAAA;IAClB,gBAAgB,EAAE,OAAO,CAAA;CAC1B,CAAA;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,cAAc,GACzB,KAAK,SAAS,cAAc,EAC5B,OAAO,SAAS,wBAAwB,CAAC,KAAK,CAAC,gQAsB9C,wBAAwB,CAAC,KAAK,CAAC,KAAG,OAAO,CAAC,6BAA6B,CAAC,KAAK,EAAE,OAAO,CAAC,CA8SzF,CAAA"}
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../../src/collections/operations/utilities/update.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAGhD,OAAO,KAAK,EACV,OAAO,EACP,cAAc,EACd,YAAY,EACZ,UAAU,EACV,6BAA6B,EAC9B,MAAM,yBAAyB,CAAA;AAChC,OAAO,KAAK,EACV,sBAAsB,EACtB,yBAAyB,EACzB,wBAAwB,EACzB,MAAM,uBAAuB,CAAA;AAS9B,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,cAAc,EAEnB,KAAK,UAAU,EACf,KAAK,eAAe,EACrB,MAAM,mBAAmB,CAAA;AAO1B,MAAM,MAAM,wBAAwB,CAAC,KAAK,SAAS,cAAc,IAAI;IACnE,aAAa,EAAE,YAAY,CAAA;IAC3B,QAAQ,EAAE,OAAO,CAAA;IACjB,gBAAgB,EAAE,yBAAyB,CAAA;IAC3C,MAAM,EAAE,eAAe,CAAA;IACvB,IAAI,EAAE,WAAW,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAA;IAChD,KAAK,EAAE,MAAM,CAAA;IACb,cAAc,EAAE,GAAG,CAAA;IACnB,QAAQ,EAAE,OAAO,CAAA;IACjB,cAAc,EAAE,MAAM,CAAA;IACtB,aAAa,EAAE,UAAU,EAAE,CAAA;IAC3B,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,cAAc,EAAE,OAAO,CAAA;IACvB,YAAY,EAAE,OAAO,CAAA;IACrB,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,CAAC,EAAE,YAAY,CAAA;IACvB,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,GAAG,EAAE,cAAc,CAAA;IACnB,MAAM,EAAE,UAAU,CAAA;IAClB,gBAAgB,EAAE,OAAO,CAAA;CAC1B,CAAA;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,cAAc,GACzB,KAAK,SAAS,cAAc,EAC5B,OAAO,SAAS,wBAAwB,CAAC,KAAK,CAAC,gQAsB9C,wBAAwB,CAAC,KAAK,CAAC,KAAG,OAAO,CAAC,6BAA6B,CAAC,KAAK,EAAE,OAAO,CAAC,CAkTzF,CAAA"}
@@ -142,7 +142,9 @@ import { saveVersion } from '../../../versions/saveVersion.js';
142
142
  overrideAccess,
143
143
  req,
144
144
  skipValidation: shouldSaveDraft && collectionConfig.versions.drafts && !collectionConfig.versions.drafts.validate || // Skip validation for trash operations since they're just metadata updates
145
- Boolean(data?.deletedAt)
145
+ collectionConfig.trash && (Boolean(data?.deletedAt) || // Skip validation when restoring from trash, but only if not publishing
146
+ // (if publishing, we need full validation)
147
+ Boolean(originalDoc?.deletedAt) && data?._status !== 'published')
146
148
  };
147
149
  if (publishSpecificLocale) {
148
150
  versionSnapshotResult = await beforeChange({
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/collections/operations/utilities/update.ts"],"sourcesContent":["import type { DeepPartial } from 'ts-essentials'\n\nimport type { Args } from '../../../fields/hooks/beforeChange/index.js'\nimport type {\n Payload,\n PayloadRequest,\n PopulateType,\n SelectType,\n TransformCollectionWithSelect,\n} from '../../../types/index.js'\nimport type {\n DataFromCollectionSlug,\n SanitizedCollectionConfig,\n SelectFromCollectionSlug,\n} from '../../config/types.js'\n\nimport { ensureUsernameOrEmail } from '../../../auth/ensureUsernameOrEmail.js'\nimport { generatePasswordSaltHash } from '../../../auth/strategies/local/generatePasswordSaltHash.js'\nimport { combineQueries } from '../../../database/combineQueries.js'\nimport { afterChange } from '../../../fields/hooks/afterChange/index.js'\nimport { afterRead } from '../../../fields/hooks/afterRead/index.js'\nimport { beforeChange } from '../../../fields/hooks/beforeChange/index.js'\nimport { beforeValidate } from '../../../fields/hooks/beforeValidate/index.js'\nimport {\n type AccessResult,\n type CollectionSlug,\n deepCopyObjectSimple,\n type FileToSave,\n type SanitizedConfig,\n} from '../../../index.js'\nimport { deleteAssociatedFiles } from '../../../uploads/deleteAssociatedFiles.js'\nimport { uploadFiles } from '../../../uploads/uploadFiles.js'\nimport { checkDocumentLockStatus } from '../../../utilities/checkDocumentLockStatus.js'\nimport { getLatestCollectionVersion } from '../../../versions/getLatestCollectionVersion.js'\nimport { saveVersion } from '../../../versions/saveVersion.js'\n\nexport type SharedUpdateDocumentArgs<TSlug extends CollectionSlug> = {\n accessResults: AccessResult\n autosave: boolean\n collectionConfig: SanitizedCollectionConfig\n config: SanitizedConfig\n data: DeepPartial<DataFromCollectionSlug<TSlug>>\n depth: number\n docWithLocales: any\n draftArg: boolean\n fallbackLocale: string\n filesToUpload: FileToSave[]\n id: number | string\n locale: string\n overrideAccess: boolean\n overrideLock: boolean\n payload: Payload\n populate?: PopulateType\n publishSpecificLocale?: string\n req: PayloadRequest\n select: SelectType\n showHiddenFields: boolean\n}\n\n/**\n * This function is used to update a document in the DB and return the result.\n *\n * It runs the following hooks in order:\n * - beforeValidate - Fields\n * - beforeValidate - Collection\n * - beforeChange - Collection\n * - beforeChange - Fields\n * - afterRead - Fields\n * - afterRead - Collection\n * - afterChange - Fields\n * - afterChange - Collection\n */\nexport const updateDocument = async <\n TSlug extends CollectionSlug,\n TSelect extends SelectFromCollectionSlug<TSlug> = SelectType,\n>({\n id,\n accessResults,\n autosave,\n collectionConfig,\n config,\n data,\n depth,\n docWithLocales,\n draftArg,\n fallbackLocale,\n filesToUpload,\n locale,\n overrideAccess,\n overrideLock,\n payload,\n populate,\n publishSpecificLocale,\n req,\n select,\n showHiddenFields,\n}: SharedUpdateDocumentArgs<TSlug>): Promise<TransformCollectionWithSelect<TSlug, TSelect>> => {\n const password = data?.password\n const shouldSaveDraft =\n Boolean(draftArg && collectionConfig.versions.drafts) && data._status !== 'published'\n const shouldSavePassword = Boolean(\n password &&\n collectionConfig.auth &&\n (!collectionConfig.auth.disableLocalStrategy ||\n (typeof collectionConfig.auth.disableLocalStrategy === 'object' &&\n collectionConfig.auth.disableLocalStrategy.enableFields)) &&\n !shouldSaveDraft,\n )\n\n // /////////////////////////////////////\n // Handle potentially locked documents\n // /////////////////////////////////////\n\n await checkDocumentLockStatus({\n id,\n collectionSlug: collectionConfig.slug,\n lockErrorMessage: `Document with ID ${id} is currently locked by another user and cannot be updated.`,\n overrideLock,\n req,\n })\n\n const originalDoc = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth: 0,\n doc: deepCopyObjectSimple(docWithLocales),\n draft: draftArg,\n fallbackLocale: id ? null : fallbackLocale,\n global: null,\n locale,\n overrideAccess: true,\n req,\n showHiddenFields: true,\n })\n\n if (collectionConfig.auth) {\n ensureUsernameOrEmail<TSlug>({\n authOptions: collectionConfig.auth,\n collectionSlug: collectionConfig.slug,\n data,\n operation: 'update',\n originalDoc,\n req,\n })\n }\n\n // /////////////////////////////////////\n // Delete any associated files\n // /////////////////////////////////////\n\n await deleteAssociatedFiles({\n collectionConfig,\n config,\n doc: docWithLocales,\n files: filesToUpload,\n overrideDelete: false,\n req,\n })\n\n // /////////////////////////////////////\n // beforeValidate - Fields\n // /////////////////////////////////////\n\n data = await beforeValidate<DeepPartial<DataFromCollectionSlug<TSlug>>>({\n id,\n collection: collectionConfig,\n context: req.context,\n data,\n doc: originalDoc,\n global: null,\n operation: 'update',\n overrideAccess,\n req,\n })\n\n // /////////////////////////////////////\n // beforeValidate - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.beforeValidate?.length) {\n for (const hook of collectionConfig.hooks.beforeValidate) {\n data =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n data,\n operation: 'update',\n originalDoc,\n req,\n })) || data\n }\n }\n\n // /////////////////////////////////////\n // Write files to local storage\n // /////////////////////////////////////\n\n if (!collectionConfig.upload.disableLocalStorage) {\n await uploadFiles(payload, filesToUpload, req)\n }\n\n // /////////////////////////////////////\n // beforeChange - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.beforeChange?.length) {\n for (const hook of collectionConfig.hooks.beforeChange) {\n data =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n data,\n operation: 'update',\n originalDoc,\n req,\n })) || data\n }\n }\n\n // /////////////////////////////////////\n // beforeChange - Fields\n // /////////////////////////////////////\n\n let publishedDocWithLocales = docWithLocales\n let versionSnapshotResult\n\n const beforeChangeArgs: Args<DataFromCollectionSlug<TSlug>> = {\n id,\n collection: collectionConfig,\n context: req.context,\n data: { ...data, id },\n doc: originalDoc,\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n docWithLocales: undefined,\n global: null,\n operation: 'update',\n overrideAccess,\n req,\n skipValidation:\n (shouldSaveDraft &&\n collectionConfig.versions.drafts &&\n !collectionConfig.versions.drafts.validate) ||\n // Skip validation for trash operations since they're just metadata updates\n Boolean(data?.deletedAt),\n }\n\n if (publishSpecificLocale) {\n versionSnapshotResult = await beforeChange({\n ...beforeChangeArgs,\n docWithLocales,\n })\n\n const lastPublished = await getLatestCollectionVersion({\n id,\n config: collectionConfig,\n payload,\n published: true,\n query: {\n collection: collectionConfig.slug,\n locale,\n req,\n where: combineQueries({ id: { equals: id } }, accessResults),\n },\n req,\n })\n\n publishedDocWithLocales = lastPublished ? lastPublished : {}\n }\n\n let result = await beforeChange({\n ...beforeChangeArgs,\n docWithLocales: publishedDocWithLocales,\n })\n\n // /////////////////////////////////////\n // Handle potential password update\n // /////////////////////////////////////\n\n const dataToUpdate: Record<string, unknown> = { ...result }\n\n if (shouldSavePassword && typeof password === 'string') {\n const { hash, salt } = await generatePasswordSaltHash({\n collection: collectionConfig,\n password,\n req,\n })\n dataToUpdate.salt = salt\n dataToUpdate.hash = hash\n delete dataToUpdate.password\n delete data.password\n }\n\n // /////////////////////////////////////\n // Update\n // /////////////////////////////////////\n\n if (!shouldSaveDraft) {\n // Ensure updatedAt date is always updated\n dataToUpdate.updatedAt = new Date().toISOString()\n result = await req.payload.db.updateOne({\n id,\n collection: collectionConfig.slug,\n data: dataToUpdate,\n locale,\n req,\n })\n }\n\n // /////////////////////////////////////\n // Create version\n // /////////////////////////////////////\n\n if (collectionConfig.versions) {\n result = await saveVersion({\n id,\n autosave,\n collection: collectionConfig,\n docWithLocales: result,\n draft: shouldSaveDraft,\n operation: 'update',\n payload,\n publishSpecificLocale,\n req,\n snapshot: versionSnapshotResult,\n })\n }\n\n // /////////////////////////////////////\n // afterRead - Fields\n // /////////////////////////////////////\n\n result = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth,\n doc: result,\n draft: draftArg,\n fallbackLocale,\n global: null,\n locale,\n overrideAccess,\n populate,\n req,\n select,\n showHiddenFields,\n })\n\n // /////////////////////////////////////\n // afterRead - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.afterRead?.length) {\n for (const hook of collectionConfig.hooks.afterRead) {\n result =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: result,\n req,\n })) || result\n }\n }\n\n // /////////////////////////////////////\n // afterChange - Fields\n // /////////////////////////////////////\n\n result = await afterChange({\n collection: collectionConfig,\n context: req.context,\n data,\n doc: result,\n global: null,\n operation: 'update',\n previousDoc: originalDoc,\n req,\n })\n\n // /////////////////////////////////////\n // afterChange - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.afterChange?.length) {\n for (const hook of collectionConfig.hooks.afterChange) {\n result =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n data,\n doc: result,\n operation: 'update',\n previousDoc: originalDoc,\n req,\n })) || result\n }\n }\n\n return result as TransformCollectionWithSelect<TSlug, TSelect>\n}\n"],"names":["ensureUsernameOrEmail","generatePasswordSaltHash","combineQueries","afterChange","afterRead","beforeChange","beforeValidate","deepCopyObjectSimple","deleteAssociatedFiles","uploadFiles","checkDocumentLockStatus","getLatestCollectionVersion","saveVersion","updateDocument","id","accessResults","autosave","collectionConfig","config","data","depth","docWithLocales","draftArg","fallbackLocale","filesToUpload","locale","overrideAccess","overrideLock","payload","populate","publishSpecificLocale","req","select","showHiddenFields","password","shouldSaveDraft","Boolean","versions","drafts","_status","shouldSavePassword","auth","disableLocalStrategy","enableFields","collectionSlug","slug","lockErrorMessage","originalDoc","collection","context","doc","draft","global","authOptions","operation","files","overrideDelete","hooks","length","hook","upload","disableLocalStorage","publishedDocWithLocales","versionSnapshotResult","beforeChangeArgs","undefined","skipValidation","validate","deletedAt","lastPublished","published","query","where","equals","result","dataToUpdate","hash","salt","updatedAt","Date","toISOString","db","updateOne","snapshot","previousDoc"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/collections/operations/utilities/update.ts"],"sourcesContent":["import type { DeepPartial } from 'ts-essentials'\n\nimport type { Args } from '../../../fields/hooks/beforeChange/index.js'\nimport type {\n Payload,\n PayloadRequest,\n PopulateType,\n SelectType,\n TransformCollectionWithSelect,\n} from '../../../types/index.js'\nimport type {\n DataFromCollectionSlug,\n SanitizedCollectionConfig,\n SelectFromCollectionSlug,\n} from '../../config/types.js'\n\nimport { ensureUsernameOrEmail } from '../../../auth/ensureUsernameOrEmail.js'\nimport { generatePasswordSaltHash } from '../../../auth/strategies/local/generatePasswordSaltHash.js'\nimport { combineQueries } from '../../../database/combineQueries.js'\nimport { afterChange } from '../../../fields/hooks/afterChange/index.js'\nimport { afterRead } from '../../../fields/hooks/afterRead/index.js'\nimport { beforeChange } from '../../../fields/hooks/beforeChange/index.js'\nimport { beforeValidate } from '../../../fields/hooks/beforeValidate/index.js'\nimport {\n type AccessResult,\n type CollectionSlug,\n deepCopyObjectSimple,\n type FileToSave,\n type SanitizedConfig,\n} from '../../../index.js'\nimport { deleteAssociatedFiles } from '../../../uploads/deleteAssociatedFiles.js'\nimport { uploadFiles } from '../../../uploads/uploadFiles.js'\nimport { checkDocumentLockStatus } from '../../../utilities/checkDocumentLockStatus.js'\nimport { getLatestCollectionVersion } from '../../../versions/getLatestCollectionVersion.js'\nimport { saveVersion } from '../../../versions/saveVersion.js'\n\nexport type SharedUpdateDocumentArgs<TSlug extends CollectionSlug> = {\n accessResults: AccessResult\n autosave: boolean\n collectionConfig: SanitizedCollectionConfig\n config: SanitizedConfig\n data: DeepPartial<DataFromCollectionSlug<TSlug>>\n depth: number\n docWithLocales: any\n draftArg: boolean\n fallbackLocale: string\n filesToUpload: FileToSave[]\n id: number | string\n locale: string\n overrideAccess: boolean\n overrideLock: boolean\n payload: Payload\n populate?: PopulateType\n publishSpecificLocale?: string\n req: PayloadRequest\n select: SelectType\n showHiddenFields: boolean\n}\n\n/**\n * This function is used to update a document in the DB and return the result.\n *\n * It runs the following hooks in order:\n * - beforeValidate - Fields\n * - beforeValidate - Collection\n * - beforeChange - Collection\n * - beforeChange - Fields\n * - afterRead - Fields\n * - afterRead - Collection\n * - afterChange - Fields\n * - afterChange - Collection\n */\nexport const updateDocument = async <\n TSlug extends CollectionSlug,\n TSelect extends SelectFromCollectionSlug<TSlug> = SelectType,\n>({\n id,\n accessResults,\n autosave,\n collectionConfig,\n config,\n data,\n depth,\n docWithLocales,\n draftArg,\n fallbackLocale,\n filesToUpload,\n locale,\n overrideAccess,\n overrideLock,\n payload,\n populate,\n publishSpecificLocale,\n req,\n select,\n showHiddenFields,\n}: SharedUpdateDocumentArgs<TSlug>): Promise<TransformCollectionWithSelect<TSlug, TSelect>> => {\n const password = data?.password\n const shouldSaveDraft =\n Boolean(draftArg && collectionConfig.versions.drafts) && data._status !== 'published'\n const shouldSavePassword = Boolean(\n password &&\n collectionConfig.auth &&\n (!collectionConfig.auth.disableLocalStrategy ||\n (typeof collectionConfig.auth.disableLocalStrategy === 'object' &&\n collectionConfig.auth.disableLocalStrategy.enableFields)) &&\n !shouldSaveDraft,\n )\n\n // /////////////////////////////////////\n // Handle potentially locked documents\n // /////////////////////////////////////\n\n await checkDocumentLockStatus({\n id,\n collectionSlug: collectionConfig.slug,\n lockErrorMessage: `Document with ID ${id} is currently locked by another user and cannot be updated.`,\n overrideLock,\n req,\n })\n\n const originalDoc = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth: 0,\n doc: deepCopyObjectSimple(docWithLocales),\n draft: draftArg,\n fallbackLocale: id ? null : fallbackLocale,\n global: null,\n locale,\n overrideAccess: true,\n req,\n showHiddenFields: true,\n })\n\n if (collectionConfig.auth) {\n ensureUsernameOrEmail<TSlug>({\n authOptions: collectionConfig.auth,\n collectionSlug: collectionConfig.slug,\n data,\n operation: 'update',\n originalDoc,\n req,\n })\n }\n\n // /////////////////////////////////////\n // Delete any associated files\n // /////////////////////////////////////\n\n await deleteAssociatedFiles({\n collectionConfig,\n config,\n doc: docWithLocales,\n files: filesToUpload,\n overrideDelete: false,\n req,\n })\n\n // /////////////////////////////////////\n // beforeValidate - Fields\n // /////////////////////////////////////\n\n data = await beforeValidate<DeepPartial<DataFromCollectionSlug<TSlug>>>({\n id,\n collection: collectionConfig,\n context: req.context,\n data,\n doc: originalDoc,\n global: null,\n operation: 'update',\n overrideAccess,\n req,\n })\n\n // /////////////////////////////////////\n // beforeValidate - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.beforeValidate?.length) {\n for (const hook of collectionConfig.hooks.beforeValidate) {\n data =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n data,\n operation: 'update',\n originalDoc,\n req,\n })) || data\n }\n }\n\n // /////////////////////////////////////\n // Write files to local storage\n // /////////////////////////////////////\n\n if (!collectionConfig.upload.disableLocalStorage) {\n await uploadFiles(payload, filesToUpload, req)\n }\n\n // /////////////////////////////////////\n // beforeChange - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.beforeChange?.length) {\n for (const hook of collectionConfig.hooks.beforeChange) {\n data =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n data,\n operation: 'update',\n originalDoc,\n req,\n })) || data\n }\n }\n\n // /////////////////////////////////////\n // beforeChange - Fields\n // /////////////////////////////////////\n\n let publishedDocWithLocales = docWithLocales\n let versionSnapshotResult\n\n const beforeChangeArgs: Args<DataFromCollectionSlug<TSlug>> = {\n id,\n collection: collectionConfig,\n context: req.context,\n data: { ...data, id },\n doc: originalDoc,\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n docWithLocales: undefined,\n global: null,\n operation: 'update',\n overrideAccess,\n req,\n skipValidation:\n (shouldSaveDraft &&\n collectionConfig.versions.drafts &&\n !collectionConfig.versions.drafts.validate) ||\n // Skip validation for trash operations since they're just metadata updates\n (collectionConfig.trash &&\n (Boolean(data?.deletedAt) ||\n // Skip validation when restoring from trash, but only if not publishing\n // (if publishing, we need full validation)\n (Boolean(originalDoc?.deletedAt) && data?._status !== 'published'))),\n }\n\n if (publishSpecificLocale) {\n versionSnapshotResult = await beforeChange({\n ...beforeChangeArgs,\n docWithLocales,\n })\n\n const lastPublished = await getLatestCollectionVersion({\n id,\n config: collectionConfig,\n payload,\n published: true,\n query: {\n collection: collectionConfig.slug,\n locale,\n req,\n where: combineQueries({ id: { equals: id } }, accessResults),\n },\n req,\n })\n\n publishedDocWithLocales = lastPublished ? lastPublished : {}\n }\n\n let result = await beforeChange({\n ...beforeChangeArgs,\n docWithLocales: publishedDocWithLocales,\n })\n\n // /////////////////////////////////////\n // Handle potential password update\n // /////////////////////////////////////\n\n const dataToUpdate: Record<string, unknown> = { ...result }\n\n if (shouldSavePassword && typeof password === 'string') {\n const { hash, salt } = await generatePasswordSaltHash({\n collection: collectionConfig,\n password,\n req,\n })\n dataToUpdate.salt = salt\n dataToUpdate.hash = hash\n delete dataToUpdate.password\n delete data.password\n }\n\n // /////////////////////////////////////\n // Update\n // /////////////////////////////////////\n\n if (!shouldSaveDraft) {\n // Ensure updatedAt date is always updated\n dataToUpdate.updatedAt = new Date().toISOString()\n result = await req.payload.db.updateOne({\n id,\n collection: collectionConfig.slug,\n data: dataToUpdate,\n locale,\n req,\n })\n }\n\n // /////////////////////////////////////\n // Create version\n // /////////////////////////////////////\n\n if (collectionConfig.versions) {\n result = await saveVersion({\n id,\n autosave,\n collection: collectionConfig,\n docWithLocales: result,\n draft: shouldSaveDraft,\n operation: 'update',\n payload,\n publishSpecificLocale,\n req,\n snapshot: versionSnapshotResult,\n })\n }\n\n // /////////////////////////////////////\n // afterRead - Fields\n // /////////////////////////////////////\n\n result = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth,\n doc: result,\n draft: draftArg,\n fallbackLocale,\n global: null,\n locale,\n overrideAccess,\n populate,\n req,\n select,\n showHiddenFields,\n })\n\n // /////////////////////////////////////\n // afterRead - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.afterRead?.length) {\n for (const hook of collectionConfig.hooks.afterRead) {\n result =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: result,\n req,\n })) || result\n }\n }\n\n // /////////////////////////////////////\n // afterChange - Fields\n // /////////////////////////////////////\n\n result = await afterChange({\n collection: collectionConfig,\n context: req.context,\n data,\n doc: result,\n global: null,\n operation: 'update',\n previousDoc: originalDoc,\n req,\n })\n\n // /////////////////////////////////////\n // afterChange - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.afterChange?.length) {\n for (const hook of collectionConfig.hooks.afterChange) {\n result =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n data,\n doc: result,\n operation: 'update',\n previousDoc: originalDoc,\n req,\n })) || result\n }\n }\n\n return result as TransformCollectionWithSelect<TSlug, TSelect>\n}\n"],"names":["ensureUsernameOrEmail","generatePasswordSaltHash","combineQueries","afterChange","afterRead","beforeChange","beforeValidate","deepCopyObjectSimple","deleteAssociatedFiles","uploadFiles","checkDocumentLockStatus","getLatestCollectionVersion","saveVersion","updateDocument","id","accessResults","autosave","collectionConfig","config","data","depth","docWithLocales","draftArg","fallbackLocale","filesToUpload","locale","overrideAccess","overrideLock","payload","populate","publishSpecificLocale","req","select","showHiddenFields","password","shouldSaveDraft","Boolean","versions","drafts","_status","shouldSavePassword","auth","disableLocalStrategy","enableFields","collectionSlug","slug","lockErrorMessage","originalDoc","collection","context","doc","draft","global","authOptions","operation","files","overrideDelete","hooks","length","hook","upload","disableLocalStorage","publishedDocWithLocales","versionSnapshotResult","beforeChangeArgs","undefined","skipValidation","validate","trash","deletedAt","lastPublished","published","query","where","equals","result","dataToUpdate","hash","salt","updatedAt","Date","toISOString","db","updateOne","snapshot","previousDoc"],"mappings":"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"}
@@ -191,7 +191,7 @@ export const getBaseUploadFields = ({ collection, config })=>{
191
191
  }
192
192
  const sizeFilename = data?.sizes?.[size.name]?.filename;
193
193
  if (sizeFilename) {
194
- return `${config.serverURL}${config.routes?.api}/${collection.slug}/file/${sizeFilename}`;
194
+ return `${config.serverURL}${config.routes?.api}/${collection.slug}/file/${encodeURIComponent(sizeFilename)}`;
195
195
  }
196
196
  return null;
197
197
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/uploads/getBaseFields.ts"],"sourcesContent":["import type { CollectionConfig } from '../collections/config/types.js'\nimport type { Config } from '../config/types.js'\nimport type { Field } from '../fields/config/types.js'\nimport type { UploadConfig } from './types.js'\n\nimport { mimeTypeValidator } from './mimeTypeValidator.js'\n\ntype GenerateURLArgs = {\n collectionSlug: string\n config: Config\n filename?: string\n}\nconst generateURL = ({ collectionSlug, config, filename }: GenerateURLArgs) => {\n if (filename) {\n return `${config.serverURL || ''}${config.routes?.api || ''}/${collectionSlug}/file/${encodeURIComponent(filename)}`\n }\n return undefined\n}\n\ntype Options = {\n collection: CollectionConfig\n config: Config\n}\n\nexport const getBaseUploadFields = ({ collection, config }: Options): Field[] => {\n const uploadOptions: UploadConfig = typeof collection.upload === 'object' ? collection.upload : {}\n\n const mimeType: Field = {\n name: 'mimeType',\n type: 'text',\n admin: {\n hidden: true,\n readOnly: true,\n },\n label: 'MIME Type',\n }\n\n const thumbnailURL: Field = {\n name: 'thumbnailURL',\n type: 'text',\n admin: {\n hidden: true,\n readOnly: true,\n },\n hooks: {\n afterRead: [\n ({ originalDoc }) => {\n const adminThumbnail =\n typeof collection.upload !== 'boolean' ? collection.upload?.adminThumbnail : undefined\n\n if (typeof adminThumbnail === 'function') {\n return adminThumbnail({ doc: originalDoc })\n }\n\n if (\n typeof adminThumbnail === 'string' &&\n 'sizes' in originalDoc &&\n originalDoc.sizes?.[adminThumbnail]?.filename\n ) {\n return generateURL({\n collectionSlug: collection.slug,\n config,\n filename: originalDoc.sizes?.[adminThumbnail].filename as string,\n })\n }\n\n return null\n },\n ],\n },\n label: 'Thumbnail URL',\n }\n\n const width: Field = {\n name: 'width',\n type: 'number',\n admin: {\n hidden: true,\n readOnly: true,\n },\n label: ({ t }) => t('upload:width'),\n }\n\n const height: Field = {\n name: 'height',\n type: 'number',\n admin: {\n hidden: true,\n readOnly: true,\n },\n label: ({ t }) => t('upload:height'),\n }\n\n const filesize: Field = {\n name: 'filesize',\n type: 'number',\n admin: {\n hidden: true,\n readOnly: true,\n },\n label: ({ t }) => t('upload:fileSize'),\n }\n\n const filename: Field = {\n name: 'filename',\n type: 'text',\n admin: {\n disableBulkEdit: true,\n hidden: true,\n readOnly: true,\n },\n index: true,\n label: ({ t }) => t('upload:fileName'),\n }\n\n // Only set unique: true if the collection does not have a compound index\n if (\n collection.upload === true ||\n (typeof collection.upload === 'object' && !collection.upload.filenameCompoundIndex)\n ) {\n filename.unique = true\n }\n\n const url: Field = {\n name: 'url',\n type: 'text',\n admin: {\n hidden: true,\n readOnly: true,\n },\n label: 'URL',\n }\n\n let uploadFields: Field[] = [\n {\n ...url,\n hooks: {\n afterRead: [\n ({ data, value }) => {\n if (value && !data?.filename) {\n return value\n }\n\n return generateURL({\n collectionSlug: collection.slug,\n config,\n filename: data?.filename,\n })\n },\n ],\n },\n },\n thumbnailURL,\n filename,\n mimeType,\n filesize,\n width,\n height,\n ]\n\n // Add focal point fields if not disabled\n if (\n uploadOptions.focalPoint !== false ||\n uploadOptions.imageSizes ||\n uploadOptions.resizeOptions\n ) {\n uploadFields = uploadFields.concat(\n ['focalX', 'focalY'].map((name) => {\n return {\n name,\n type: 'number',\n admin: {\n disableGroupBy: true,\n disableListColumn: true,\n disableListFilter: true,\n hidden: true,\n },\n }\n }),\n )\n }\n\n if (uploadOptions.mimeTypes) {\n mimeType.validate = mimeTypeValidator(uploadOptions.mimeTypes)\n }\n\n // In Payload v4, image size subfields (`url`, `width`, `height`, etc.) should\n // default to `disableGroupBy: true`, `disableListColumn: true` and `disableListFilter: true`\n // to avoid cluttering the collection list view and filters by default.\n if (uploadOptions.imageSizes) {\n uploadFields = uploadFields.concat([\n {\n name: 'sizes',\n type: 'group',\n admin: {\n hidden: true,\n },\n fields: uploadOptions.imageSizes.map((size) => ({\n name: size.name,\n type: 'group',\n admin: {\n hidden: true,\n ...(size.admin?.disableGroupBy && { disableGroupBy: true }),\n ...(size.admin?.disableListColumn && { disableListColumn: true }),\n ...(size.admin?.disableListFilter && { disableListFilter: true }),\n },\n fields: [\n {\n ...url,\n admin: {\n ...url.admin,\n ...(size.admin?.disableGroupBy && { disableGroupBy: true }),\n ...(size.admin?.disableListColumn && { disableListColumn: true }),\n ...(size.admin?.disableListFilter && { disableListFilter: true }),\n },\n hooks: {\n afterRead: [\n ({ data, value }) => {\n if (value && size.height && size.width && !data?.filename) {\n return value\n }\n\n const sizeFilename = data?.sizes?.[size.name]?.filename\n\n if (sizeFilename) {\n return `${config.serverURL}${config.routes?.api}/${collection.slug}/file/${sizeFilename}`\n }\n\n return null\n },\n ],\n },\n },\n {\n ...width,\n admin: {\n ...width.admin,\n ...(size.admin?.disableGroupBy && { disableGroupBy: true }),\n ...(size.admin?.disableListColumn && { disableListColumn: true }),\n ...(size.admin?.disableListFilter && { disableListFilter: true }),\n },\n },\n {\n ...height,\n admin: {\n ...height.admin,\n ...(size.admin?.disableGroupBy && { disableGroupBy: true }),\n ...(size.admin?.disableListColumn && { disableListColumn: true }),\n ...(size.admin?.disableListFilter && { disableListFilter: true }),\n },\n },\n {\n ...mimeType,\n admin: {\n ...mimeType.admin,\n ...(size.admin?.disableGroupBy && { disableGroupBy: true }),\n ...(size.admin?.disableListColumn && { disableListColumn: true }),\n ...(size.admin?.disableListFilter && { disableListFilter: true }),\n },\n },\n {\n ...filesize,\n admin: {\n ...filesize.admin,\n ...(size.admin?.disableGroupBy && { disableGroupBy: true }),\n ...(size.admin?.disableListColumn && { disableListColumn: true }),\n ...(size.admin?.disableListFilter && { disableListFilter: true }),\n },\n },\n {\n ...filename,\n admin: {\n ...filename.admin,\n ...(size.admin?.disableGroupBy && { disableGroupBy: true }),\n ...(size.admin?.disableListColumn && { disableListColumn: true }),\n ...(size.admin?.disableListFilter && { disableListFilter: true }),\n },\n unique: false,\n },\n ],\n label: size.name,\n })),\n label: ({ t }) => t('upload:sizes'),\n },\n ])\n }\n return uploadFields\n}\n"],"names":["mimeTypeValidator","generateURL","collectionSlug","config","filename","serverURL","routes","api","encodeURIComponent","undefined","getBaseUploadFields","collection","uploadOptions","upload","mimeType","name","type","admin","hidden","readOnly","label","thumbnailURL","hooks","afterRead","originalDoc","adminThumbnail","doc","sizes","slug","width","t","height","filesize","disableBulkEdit","index","filenameCompoundIndex","unique","url","uploadFields","data","value","focalPoint","imageSizes","resizeOptions","concat","map","disableGroupBy","disableListColumn","disableListFilter","mimeTypes","validate","fields","size","sizeFilename"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/uploads/getBaseFields.ts"],"sourcesContent":["import type { CollectionConfig } from '../collections/config/types.js'\nimport type { Config } from '../config/types.js'\nimport type { Field } from '../fields/config/types.js'\nimport type { UploadConfig } from './types.js'\n\nimport { mimeTypeValidator } from './mimeTypeValidator.js'\n\ntype GenerateURLArgs = {\n collectionSlug: string\n config: Config\n filename?: string\n}\nconst generateURL = ({ collectionSlug, config, filename }: GenerateURLArgs) => {\n if (filename) {\n return `${config.serverURL || ''}${config.routes?.api || ''}/${collectionSlug}/file/${encodeURIComponent(filename)}`\n }\n return undefined\n}\n\ntype Options = {\n collection: CollectionConfig\n config: Config\n}\n\nexport const getBaseUploadFields = ({ collection, config }: Options): Field[] => {\n const uploadOptions: UploadConfig = typeof collection.upload === 'object' ? collection.upload : {}\n\n const mimeType: Field = {\n name: 'mimeType',\n type: 'text',\n admin: {\n hidden: true,\n readOnly: true,\n },\n label: 'MIME Type',\n }\n\n const thumbnailURL: Field = {\n name: 'thumbnailURL',\n type: 'text',\n admin: {\n hidden: true,\n readOnly: true,\n },\n hooks: {\n afterRead: [\n ({ originalDoc }) => {\n const adminThumbnail =\n typeof collection.upload !== 'boolean' ? collection.upload?.adminThumbnail : undefined\n\n if (typeof adminThumbnail === 'function') {\n return adminThumbnail({ doc: originalDoc })\n }\n\n if (\n typeof adminThumbnail === 'string' &&\n 'sizes' in originalDoc &&\n originalDoc.sizes?.[adminThumbnail]?.filename\n ) {\n return generateURL({\n collectionSlug: collection.slug,\n config,\n filename: originalDoc.sizes?.[adminThumbnail].filename as string,\n })\n }\n\n return null\n },\n ],\n },\n label: 'Thumbnail URL',\n }\n\n const width: Field = {\n name: 'width',\n type: 'number',\n admin: {\n hidden: true,\n readOnly: true,\n },\n label: ({ t }) => t('upload:width'),\n }\n\n const height: Field = {\n name: 'height',\n type: 'number',\n admin: {\n hidden: true,\n readOnly: true,\n },\n label: ({ t }) => t('upload:height'),\n }\n\n const filesize: Field = {\n name: 'filesize',\n type: 'number',\n admin: {\n hidden: true,\n readOnly: true,\n },\n label: ({ t }) => t('upload:fileSize'),\n }\n\n const filename: Field = {\n name: 'filename',\n type: 'text',\n admin: {\n disableBulkEdit: true,\n hidden: true,\n readOnly: true,\n },\n index: true,\n label: ({ t }) => t('upload:fileName'),\n }\n\n // Only set unique: true if the collection does not have a compound index\n if (\n collection.upload === true ||\n (typeof collection.upload === 'object' && !collection.upload.filenameCompoundIndex)\n ) {\n filename.unique = true\n }\n\n const url: Field = {\n name: 'url',\n type: 'text',\n admin: {\n hidden: true,\n readOnly: true,\n },\n label: 'URL',\n }\n\n let uploadFields: Field[] = [\n {\n ...url,\n hooks: {\n afterRead: [\n ({ data, value }) => {\n if (value && !data?.filename) {\n return value\n }\n\n return generateURL({\n collectionSlug: collection.slug,\n config,\n filename: data?.filename,\n })\n },\n ],\n },\n },\n thumbnailURL,\n filename,\n mimeType,\n filesize,\n width,\n height,\n ]\n\n // Add focal point fields if not disabled\n if (\n uploadOptions.focalPoint !== false ||\n uploadOptions.imageSizes ||\n uploadOptions.resizeOptions\n ) {\n uploadFields = uploadFields.concat(\n ['focalX', 'focalY'].map((name) => {\n return {\n name,\n type: 'number',\n admin: {\n disableGroupBy: true,\n disableListColumn: true,\n disableListFilter: true,\n hidden: true,\n },\n }\n }),\n )\n }\n\n if (uploadOptions.mimeTypes) {\n mimeType.validate = mimeTypeValidator(uploadOptions.mimeTypes)\n }\n\n // In Payload v4, image size subfields (`url`, `width`, `height`, etc.) should\n // default to `disableGroupBy: true`, `disableListColumn: true` and `disableListFilter: true`\n // to avoid cluttering the collection list view and filters by default.\n if (uploadOptions.imageSizes) {\n uploadFields = uploadFields.concat([\n {\n name: 'sizes',\n type: 'group',\n admin: {\n hidden: true,\n },\n fields: uploadOptions.imageSizes.map((size) => ({\n name: size.name,\n type: 'group',\n admin: {\n hidden: true,\n ...(size.admin?.disableGroupBy && { disableGroupBy: true }),\n ...(size.admin?.disableListColumn && { disableListColumn: true }),\n ...(size.admin?.disableListFilter && { disableListFilter: true }),\n },\n fields: [\n {\n ...url,\n admin: {\n ...url.admin,\n ...(size.admin?.disableGroupBy && { disableGroupBy: true }),\n ...(size.admin?.disableListColumn && { disableListColumn: true }),\n ...(size.admin?.disableListFilter && { disableListFilter: true }),\n },\n hooks: {\n afterRead: [\n ({ data, value }) => {\n if (value && size.height && size.width && !data?.filename) {\n return value\n }\n\n const sizeFilename = data?.sizes?.[size.name]?.filename\n\n if (sizeFilename) {\n return `${config.serverURL}${config.routes?.api}/${collection.slug}/file/${encodeURIComponent(sizeFilename)}`\n }\n\n return null\n },\n ],\n },\n },\n {\n ...width,\n admin: {\n ...width.admin,\n ...(size.admin?.disableGroupBy && { disableGroupBy: true }),\n ...(size.admin?.disableListColumn && { disableListColumn: true }),\n ...(size.admin?.disableListFilter && { disableListFilter: true }),\n },\n },\n {\n ...height,\n admin: {\n ...height.admin,\n ...(size.admin?.disableGroupBy && { disableGroupBy: true }),\n ...(size.admin?.disableListColumn && { disableListColumn: true }),\n ...(size.admin?.disableListFilter && { disableListFilter: true }),\n },\n },\n {\n ...mimeType,\n admin: {\n ...mimeType.admin,\n ...(size.admin?.disableGroupBy && { disableGroupBy: true }),\n ...(size.admin?.disableListColumn && { disableListColumn: true }),\n ...(size.admin?.disableListFilter && { disableListFilter: true }),\n },\n },\n {\n ...filesize,\n admin: {\n ...filesize.admin,\n ...(size.admin?.disableGroupBy && { disableGroupBy: true }),\n ...(size.admin?.disableListColumn && { disableListColumn: true }),\n ...(size.admin?.disableListFilter && { disableListFilter: true }),\n },\n },\n {\n ...filename,\n admin: {\n ...filename.admin,\n ...(size.admin?.disableGroupBy && { disableGroupBy: true }),\n ...(size.admin?.disableListColumn && { disableListColumn: true }),\n ...(size.admin?.disableListFilter && { disableListFilter: true }),\n },\n unique: false,\n },\n ],\n label: size.name,\n })),\n label: ({ t }) => t('upload:sizes'),\n },\n ])\n }\n return uploadFields\n}\n"],"names":["mimeTypeValidator","generateURL","collectionSlug","config","filename","serverURL","routes","api","encodeURIComponent","undefined","getBaseUploadFields","collection","uploadOptions","upload","mimeType","name","type","admin","hidden","readOnly","label","thumbnailURL","hooks","afterRead","originalDoc","adminThumbnail","doc","sizes","slug","width","t","height","filesize","disableBulkEdit","index","filenameCompoundIndex","unique","url","uploadFields","data","value","focalPoint","imageSizes","resizeOptions","concat","map","disableGroupBy","disableListColumn","disableListFilter","mimeTypes","validate","fields","size","sizeFilename"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "payload",
3
- "version": "3.60.0-internal.8e20fed",
3
+ "version": "3.60.0-internal.c130254",
4
4
  "description": "Node, React, Headless CMS and Application Framework built on Next.js",
5
5
  "keywords": [
6
6
  "admin panel",
@@ -101,14 +101,14 @@
101
101
  "undici": "7.10.0",
102
102
  "uuid": "10.0.0",
103
103
  "ws": "^8.16.0",
104
- "@payloadcms/translations": "3.60.0-internal.8e20fed"
104
+ "@payloadcms/translations": "3.60.0-internal.c130254"
105
105
  },
106
106
  "devDependencies": {
107
107
  "@hyrious/esbuild-plugin-commonjs": "0.2.6",
108
108
  "@monaco-editor/react": "4.7.0",
109
109
  "@types/json-schema": "7.0.15",
110
110
  "@types/minimist": "1.2.2",
111
- "@types/nodemailer": "6.4.17",
111
+ "@types/nodemailer": "7.0.2",
112
112
  "@types/pluralize": "0.0.33",
113
113
  "@types/uuid": "10.0.0",
114
114
  "@types/ws": "^8.5.10",