payload 3.68.0-internal.d76116c → 3.68.0
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.
- package/dist/collections/operations/update.js +1 -1
- package/dist/collections/operations/update.js.map +1 -1
- package/dist/collections/operations/utilities/buildBeforeOperation.js +1 -0
- package/dist/collections/operations/utilities/buildBeforeOperation.js.map +1 -1
- package/dist/collections/operations/utilities/types.d.ts +13 -2
- package/dist/collections/operations/utilities/types.d.ts.map +1 -1
- package/dist/collections/operations/utilities/types.js +2 -0
- package/dist/collections/operations/utilities/types.js.map +1 -1
- package/dist/globals/config/types.d.ts +1 -1
- package/dist/globals/config/types.d.ts.map +1 -1
- package/dist/globals/config/types.js.map +1 -1
- package/dist/index.bundled.d.ts +12 -3
- package/dist/uploads/docWithFilenameExists.d.ts +2 -1
- package/dist/uploads/docWithFilenameExists.d.ts.map +1 -1
- package/dist/uploads/docWithFilenameExists.js +13 -10
- package/dist/uploads/docWithFilenameExists.js.map +1 -1
- package/dist/uploads/generateFileData.d.ts.map +1 -1
- package/dist/uploads/generateFileData.js +3 -0
- package/dist/uploads/generateFileData.js.map +1 -1
- package/dist/uploads/getSafeFilename.d.ts +2 -1
- package/dist/uploads/getSafeFilename.d.ts.map +1 -1
- package/dist/uploads/getSafeFilename.js +2 -1
- package/dist/uploads/getSafeFilename.js.map +1 -1
- package/dist/utilities/deepCopyObject.d.ts.map +1 -1
- package/dist/utilities/deepCopyObject.js +4 -0
- package/dist/utilities/deepCopyObject.js.map +1 -1
- package/package.json +2 -2
|
@@ -85,7 +85,7 @@ export const updateOperation = async (incomingArgs)=>{
|
|
|
85
85
|
sort: incomingSort
|
|
86
86
|
});
|
|
87
87
|
let docs;
|
|
88
|
-
if (collectionConfig
|
|
88
|
+
if (hasDraftsEnabled(collectionConfig) && shouldSaveDraft) {
|
|
89
89
|
const versionsWhere = appendVersionToQueryKey(fullWhere);
|
|
90
90
|
await validateQueryPaths({
|
|
91
91
|
collectionConfig: collection.config,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/collections/operations/update.ts"],"sourcesContent":["import type { DeepPartial } from 'ts-essentials'\n\nimport { status as httpStatus } from 'http-status'\n\nimport type { AccessResult } from '../../config/types.js'\nimport type { PayloadRequest, PopulateType, SelectType, Sort, Where } from '../../types/index.js'\nimport type {\n BulkOperationResult,\n Collection,\n DataFromCollectionSlug,\n RequiredDataFromCollectionSlug,\n SelectFromCollectionSlug,\n} from '../config/types.js'\n\nimport { executeAccess } from '../../auth/executeAccess.js'\nimport { combineQueries } from '../../database/combineQueries.js'\nimport { validateQueryPaths } from '../../database/queryValidation/validateQueryPaths.js'\nimport { sanitizeWhereQuery } from '../../database/sanitizeWhereQuery.js'\nimport { APIError } from '../../errors/index.js'\nimport { type CollectionSlug, deepCopyObjectSimple } from '../../index.js'\nimport { generateFileData } from '../../uploads/generateFileData.js'\nimport { unlinkTempFiles } from '../../uploads/unlinkTempFiles.js'\nimport { appendNonTrashedFilter } from '../../utilities/appendNonTrashedFilter.js'\nimport { commitTransaction } from '../../utilities/commitTransaction.js'\nimport { hasDraftsEnabled } from '../../utilities/getVersionsConfig.js'\nimport { initTransaction } from '../../utilities/initTransaction.js'\nimport { isErrorPublic } from '../../utilities/isErrorPublic.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport { sanitizeSelect } from '../../utilities/sanitizeSelect.js'\nimport { buildVersionCollectionFields } from '../../versions/buildCollectionFields.js'\nimport { appendVersionToQueryKey } from '../../versions/drafts/appendVersionToQueryKey.js'\nimport { getQueryDraftsSort } from '../../versions/drafts/getQueryDraftsSort.js'\nimport { buildAfterOperation } from './utilities/buildAfterOperation.js'\nimport { buildBeforeOperation } from './utilities/buildBeforeOperation.js'\nimport { sanitizeSortQuery } from './utilities/sanitizeSortQuery.js'\nimport { updateDocument } from './utilities/update.js'\n\nexport type Arguments<TSlug extends CollectionSlug> = {\n autosave?: boolean\n collection: Collection\n data: DeepPartial<RequiredDataFromCollectionSlug<TSlug>>\n depth?: number\n disableTransaction?: boolean\n disableVerificationEmail?: boolean\n draft?: boolean\n limit?: number\n overrideAccess?: boolean\n overrideLock?: boolean\n overwriteExistingFiles?: boolean\n populate?: PopulateType\n publishSpecificLocale?: string\n req: PayloadRequest\n select?: SelectType\n showHiddenFields?: boolean\n /**\n * Sort the documents, can be a string or an array of strings\n * @example '-createdAt' // Sort DESC by createdAt\n * @example ['group', '-createdAt'] // sort by 2 fields, ASC group and DESC createdAt\n */\n sort?: Sort\n trash?: boolean\n where: Where\n}\n\nexport const updateOperation = async <\n TSlug extends CollectionSlug,\n TSelect extends SelectFromCollectionSlug<TSlug>,\n>(\n incomingArgs: Arguments<TSlug>,\n): Promise<BulkOperationResult<TSlug, TSelect>> => {\n let args = incomingArgs\n\n if (args.collection.config.disableBulkEdit && !args.overrideAccess) {\n throw new APIError(`Collection ${args.collection.config.slug} has disabled bulk edit`, 403)\n }\n\n try {\n const shouldCommit = !args.disableTransaction && (await initTransaction(args.req))\n\n // /////////////////////////////////////\n // beforeOperation - Collection\n // /////////////////////////////////////\n\n args = await buildBeforeOperation({\n args,\n collection: args.collection.config,\n operation: 'update',\n })\n\n const {\n autosave = false,\n collection: { config: collectionConfig },\n collection,\n depth,\n draft: draftArg = false,\n limit = 0,\n overrideAccess,\n overrideLock,\n overwriteExistingFiles = false,\n populate,\n publishSpecificLocale,\n req: {\n fallbackLocale,\n locale,\n payload: { config },\n payload,\n },\n req,\n select: incomingSelect,\n showHiddenFields,\n sort: incomingSort,\n trash = false,\n where,\n } = args\n\n if (!where) {\n throw new APIError(\"Missing 'where' query of documents to update.\", httpStatus.BAD_REQUEST)\n }\n\n const { data: bulkUpdateData } = args\n const shouldSaveDraft = Boolean(draftArg && hasDraftsEnabled(collectionConfig))\n\n // /////////////////////////////////////\n // Access\n // /////////////////////////////////////\n\n let accessResult: AccessResult\n if (!overrideAccess) {\n accessResult = await executeAccess({ req }, collectionConfig.access.update)\n }\n\n await validateQueryPaths({\n collectionConfig,\n overrideAccess: overrideAccess!,\n req,\n where,\n })\n\n // /////////////////////////////////////\n // Retrieve documents\n // /////////////////////////////////////\n\n let fullWhere = combineQueries(where, accessResult!)\n\n const isTrashAttempt =\n collectionConfig.trash &&\n typeof bulkUpdateData === 'object' &&\n bulkUpdateData !== null &&\n 'deletedAt' in bulkUpdateData &&\n bulkUpdateData.deletedAt != null\n\n // Enforce delete access if performing a soft-delete (trash)\n if (isTrashAttempt && !overrideAccess) {\n const deleteAccessResult = await executeAccess({ req }, collectionConfig.access.delete)\n fullWhere = combineQueries(fullWhere, deleteAccessResult)\n }\n\n // Exclude trashed documents when trash: false\n fullWhere = appendNonTrashedFilter({\n enableTrash: collectionConfig.trash,\n trash,\n where: fullWhere,\n })\n\n sanitizeWhereQuery({ fields: collectionConfig.flattenedFields, payload, where: fullWhere })\n\n const sort = sanitizeSortQuery({\n fields: collection.config.flattenedFields,\n sort: incomingSort,\n })\n\n let docs\n\n if (collectionConfig.versions?.drafts && shouldSaveDraft) {\n const versionsWhere = appendVersionToQueryKey(fullWhere)\n\n await validateQueryPaths({\n collectionConfig: collection.config,\n overrideAccess: overrideAccess!,\n req,\n versionFields: buildVersionCollectionFields(payload.config, collection.config, true),\n where: appendVersionToQueryKey(where),\n })\n\n const query = await payload.db.queryDrafts<DataFromCollectionSlug<TSlug>>({\n collection: collectionConfig.slug,\n limit,\n locale: locale!,\n pagination: false,\n req,\n sort: getQueryDraftsSort({ collectionConfig, sort }),\n where: versionsWhere,\n })\n\n docs = query.docs\n } else {\n const query = await payload.db.find({\n collection: collectionConfig.slug,\n limit,\n locale: locale!,\n pagination: false,\n req,\n sort,\n where: fullWhere,\n })\n\n docs = query.docs\n }\n\n // /////////////////////////////////////\n // Generate data for all files and sizes\n // /////////////////////////////////////\n\n const { data, files: filesToUpload } = await generateFileData({\n collection,\n config,\n data: bulkUpdateData,\n operation: 'update',\n overwriteExistingFiles,\n req,\n throwOnMissingFile: false,\n })\n\n const errors: BulkOperationResult<TSlug, TSelect>['errors'] = []\n\n const promises = docs.map(async (docWithLocales) => {\n const { id } = docWithLocales\n\n try {\n const select = sanitizeSelect({\n fields: collectionConfig.flattenedFields,\n forceSelect: collectionConfig.forceSelect,\n select: incomingSelect,\n })\n\n // ///////////////////////////////////////////////\n // Update document, runs all document level hooks\n // ///////////////////////////////////////////////\n const updatedDoc = await updateDocument({\n id,\n accessResults: accessResult,\n autosave,\n collectionConfig,\n config,\n data: deepCopyObjectSimple(data),\n depth: depth!,\n docWithLocales,\n draftArg,\n fallbackLocale: fallbackLocale!,\n filesToUpload,\n locale: locale!,\n overrideAccess: overrideAccess!,\n overrideLock: overrideLock!,\n payload,\n populate,\n publishSpecificLocale,\n req,\n select: select!,\n showHiddenFields: showHiddenFields!,\n })\n\n return updatedDoc\n } catch (error) {\n const isPublic = error instanceof Error ? isErrorPublic(error, config) : false\n\n errors.push({\n id,\n isPublic,\n message: error instanceof Error ? error.message : 'Unknown error',\n })\n }\n return null\n })\n\n await unlinkTempFiles({\n collectionConfig,\n config,\n req,\n })\n\n const awaitedDocs = await Promise.all(promises)\n\n let result = {\n docs: awaitedDocs.filter(Boolean),\n errors,\n }\n\n // /////////////////////////////////////\n // afterOperation - Collection\n // /////////////////////////////////////\n\n result = await buildAfterOperation({\n args,\n collection: collectionConfig,\n operation: 'update',\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n result,\n })\n\n if (shouldCommit) {\n await commitTransaction(req)\n }\n\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n return result\n } catch (error: unknown) {\n await killTransaction(args.req)\n throw error\n }\n}\n"],"names":["status","httpStatus","executeAccess","combineQueries","validateQueryPaths","sanitizeWhereQuery","APIError","deepCopyObjectSimple","generateFileData","unlinkTempFiles","appendNonTrashedFilter","commitTransaction","hasDraftsEnabled","initTransaction","isErrorPublic","killTransaction","sanitizeSelect","buildVersionCollectionFields","appendVersionToQueryKey","getQueryDraftsSort","buildAfterOperation","buildBeforeOperation","sanitizeSortQuery","updateDocument","updateOperation","incomingArgs","args","collection","config","disableBulkEdit","overrideAccess","slug","shouldCommit","disableTransaction","req","operation","autosave","collectionConfig","depth","draft","draftArg","limit","overrideLock","overwriteExistingFiles","populate","publishSpecificLocale","fallbackLocale","locale","payload","select","incomingSelect","showHiddenFields","sort","incomingSort","trash","where","BAD_REQUEST","data","bulkUpdateData","shouldSaveDraft","Boolean","accessResult","access","update","fullWhere","isTrashAttempt","deletedAt","deleteAccessResult","delete","enableTrash","fields","flattenedFields","docs","versions","drafts","versionsWhere","versionFields","query","db","queryDrafts","pagination","find","files","filesToUpload","throwOnMissingFile","errors","promises","map","docWithLocales","id","forceSelect","updatedDoc","accessResults","error","isPublic","Error","push","message","awaitedDocs","Promise","all","result","filter"],"mappings":"AAEA,SAASA,UAAUC,UAAU,QAAQ,cAAa;AAYlD,SAASC,aAAa,QAAQ,8BAA6B;AAC3D,SAASC,cAAc,QAAQ,mCAAkC;AACjE,SAASC,kBAAkB,QAAQ,uDAAsD;AACzF,SAASC,kBAAkB,QAAQ,uCAAsC;AACzE,SAASC,QAAQ,QAAQ,wBAAuB;AAChD,SAA8BC,oBAAoB,QAAQ,iBAAgB;AAC1E,SAASC,gBAAgB,QAAQ,oCAAmC;AACpE,SAASC,eAAe,QAAQ,mCAAkC;AAClE,SAASC,sBAAsB,QAAQ,4CAA2C;AAClF,SAASC,iBAAiB,QAAQ,uCAAsC;AACxE,SAASC,gBAAgB,QAAQ,uCAAsC;AACvE,SAASC,eAAe,QAAQ,qCAAoC;AACpE,SAASC,aAAa,QAAQ,mCAAkC;AAChE,SAASC,eAAe,QAAQ,qCAAoC;AACpE,SAASC,cAAc,QAAQ,oCAAmC;AAClE,SAASC,4BAA4B,QAAQ,0CAAyC;AACtF,SAASC,uBAAuB,QAAQ,mDAAkD;AAC1F,SAASC,kBAAkB,QAAQ,8CAA6C;AAChF,SAASC,mBAAmB,QAAQ,qCAAoC;AACxE,SAASC,oBAAoB,QAAQ,sCAAqC;AAC1E,SAASC,iBAAiB,QAAQ,mCAAkC;AACpE,SAASC,cAAc,QAAQ,wBAAuB;AA6BtD,OAAO,MAAMC,kBAAkB,OAI7BC;IAEA,IAAIC,OAAOD;IAEX,IAAIC,KAAKC,UAAU,CAACC,MAAM,CAACC,eAAe,IAAI,CAACH,KAAKI,cAAc,EAAE;QAClE,MAAM,IAAIxB,SAAS,CAAC,WAAW,EAAEoB,KAAKC,UAAU,CAACC,MAAM,CAACG,IAAI,CAAC,uBAAuB,CAAC,EAAE;IACzF;IAEA,IAAI;QACF,MAAMC,eAAe,CAACN,KAAKO,kBAAkB,IAAK,MAAMpB,gBAAgBa,KAAKQ,GAAG;QAEhF,wCAAwC;QACxC,+BAA+B;QAC/B,wCAAwC;QAExCR,OAAO,MAAML,qBAAqB;YAChCK;YACAC,YAAYD,KAAKC,UAAU,CAACC,MAAM;YAClCO,WAAW;QACb;QAEA,MAAM,EACJC,WAAW,KAAK,EAChBT,YAAY,EAAEC,QAAQS,gBAAgB,EAAE,EACxCV,UAAU,EACVW,KAAK,EACLC,OAAOC,WAAW,KAAK,EACvBC,QAAQ,CAAC,EACTX,cAAc,EACdY,YAAY,EACZC,yBAAyB,KAAK,EAC9BC,QAAQ,EACRC,qBAAqB,EACrBX,KAAK,EACHY,cAAc,EACdC,MAAM,EACNC,SAAS,EAAEpB,MAAM,EAAE,EACnBoB,OAAO,EACR,EACDd,GAAG,EACHe,QAAQC,cAAc,EACtBC,gBAAgB,EAChBC,MAAMC,YAAY,EAClBC,QAAQ,KAAK,EACbC,KAAK,EACN,GAAG7B;QAEJ,IAAI,CAAC6B,OAAO;YACV,MAAM,IAAIjD,SAAS,iDAAiDL,WAAWuD,WAAW;QAC5F;QAEA,MAAM,EAAEC,MAAMC,cAAc,EAAE,GAAGhC;QACjC,MAAMiC,kBAAkBC,QAAQpB,YAAY5B,iBAAiByB;QAE7D,wCAAwC;QACxC,SAAS;QACT,wCAAwC;QAExC,IAAIwB;QACJ,IAAI,CAAC/B,gBAAgB;YACnB+B,eAAe,MAAM3D,cAAc;gBAAEgC;YAAI,GAAGG,iBAAiByB,MAAM,CAACC,MAAM;QAC5E;QAEA,MAAM3D,mBAAmB;YACvBiC;YACAP,gBAAgBA;YAChBI;YACAqB;QACF;QAEA,wCAAwC;QACxC,qBAAqB;QACrB,wCAAwC;QAExC,IAAIS,YAAY7D,eAAeoD,OAAOM;QAEtC,MAAMI,iBACJ5B,iBAAiBiB,KAAK,IACtB,OAAOI,mBAAmB,YAC1BA,mBAAmB,QACnB,eAAeA,kBACfA,eAAeQ,SAAS,IAAI;QAE9B,4DAA4D;QAC5D,IAAID,kBAAkB,CAACnC,gBAAgB;YACrC,MAAMqC,qBAAqB,MAAMjE,cAAc;gBAAEgC;YAAI,GAAGG,iBAAiByB,MAAM,CAACM,MAAM;YACtFJ,YAAY7D,eAAe6D,WAAWG;QACxC;QAEA,8CAA8C;QAC9CH,YAAYtD,uBAAuB;YACjC2D,aAAahC,iBAAiBiB,KAAK;YACnCA;YACAC,OAAOS;QACT;QAEA3D,mBAAmB;YAAEiE,QAAQjC,iBAAiBkC,eAAe;YAAEvB;YAASO,OAAOS;QAAU;QAEzF,MAAMZ,OAAO9B,kBAAkB;YAC7BgD,QAAQ3C,WAAWC,MAAM,CAAC2C,eAAe;YACzCnB,MAAMC;QACR;QAEA,IAAImB;QAEJ,IAAInC,iBAAiBoC,QAAQ,EAAEC,UAAUf,iBAAiB;YACxD,MAAMgB,gBAAgBzD,wBAAwB8C;YAE9C,MAAM5D,mBAAmB;gBACvBiC,kBAAkBV,WAAWC,MAAM;gBACnCE,gBAAgBA;gBAChBI;gBACA0C,eAAe3D,6BAA6B+B,QAAQpB,MAAM,EAAED,WAAWC,MAAM,EAAE;gBAC/E2B,OAAOrC,wBAAwBqC;YACjC;YAEA,MAAMsB,QAAQ,MAAM7B,QAAQ8B,EAAE,CAACC,WAAW,CAAgC;gBACxEpD,YAAYU,iBAAiBN,IAAI;gBACjCU;gBACAM,QAAQA;gBACRiC,YAAY;gBACZ9C;gBACAkB,MAAMjC,mBAAmB;oBAAEkB;oBAAkBe;gBAAK;gBAClDG,OAAOoB;YACT;YAEAH,OAAOK,MAAML,IAAI;QACnB,OAAO;YACL,MAAMK,QAAQ,MAAM7B,QAAQ8B,EAAE,CAACG,IAAI,CAAC;gBAClCtD,YAAYU,iBAAiBN,IAAI;gBACjCU;gBACAM,QAAQA;gBACRiC,YAAY;gBACZ9C;gBACAkB;gBACAG,OAAOS;YACT;YAEAQ,OAAOK,MAAML,IAAI;QACnB;QAEA,wCAAwC;QACxC,wCAAwC;QACxC,wCAAwC;QAExC,MAAM,EAAEf,IAAI,EAAEyB,OAAOC,aAAa,EAAE,GAAG,MAAM3E,iBAAiB;YAC5DmB;YACAC;YACA6B,MAAMC;YACNvB,WAAW;YACXQ;YACAT;YACAkD,oBAAoB;QACtB;QAEA,MAAMC,SAAwD,EAAE;QAEhE,MAAMC,WAAWd,KAAKe,GAAG,CAAC,OAAOC;YAC/B,MAAM,EAAEC,EAAE,EAAE,GAAGD;YAEf,IAAI;gBACF,MAAMvC,SAASjC,eAAe;oBAC5BsD,QAAQjC,iBAAiBkC,eAAe;oBACxCmB,aAAarD,iBAAiBqD,WAAW;oBACzCzC,QAAQC;gBACV;gBAEA,kDAAkD;gBAClD,iDAAiD;gBACjD,kDAAkD;gBAClD,MAAMyC,aAAa,MAAMpE,eAAe;oBACtCkE;oBACAG,eAAe/B;oBACfzB;oBACAC;oBACAT;oBACA6B,MAAMlD,qBAAqBkD;oBAC3BnB,OAAOA;oBACPkD;oBACAhD;oBACAM,gBAAgBA;oBAChBqC;oBACApC,QAAQA;oBACRjB,gBAAgBA;oBAChBY,cAAcA;oBACdM;oBACAJ;oBACAC;oBACAX;oBACAe,QAAQA;oBACRE,kBAAkBA;gBACpB;gBAEA,OAAOwC;YACT,EAAE,OAAOE,OAAO;gBACd,MAAMC,WAAWD,iBAAiBE,QAAQjF,cAAc+E,OAAOjE,UAAU;gBAEzEyD,OAAOW,IAAI,CAAC;oBACVP;oBACAK;oBACAG,SAASJ,iBAAiBE,QAAQF,MAAMI,OAAO,GAAG;gBACpD;YACF;YACA,OAAO;QACT;QAEA,MAAMxF,gBAAgB;YACpB4B;YACAT;YACAM;QACF;QAEA,MAAMgE,cAAc,MAAMC,QAAQC,GAAG,CAACd;QAEtC,IAAIe,SAAS;YACX7B,MAAM0B,YAAYI,MAAM,CAAC1C;YACzByB;QACF;QAEA,wCAAwC;QACxC,8BAA8B;QAC9B,wCAAwC;QAExCgB,SAAS,MAAMjF,oBAAoB;YACjCM;YACAC,YAAYU;YACZF,WAAW;YACX,oFAAoF;YACpFkE;QACF;QAEA,IAAIrE,cAAc;YAChB,MAAMrB,kBAAkBuB;QAC1B;QAEA,oFAAoF;QACpF,OAAOmE;IACT,EAAE,OAAOR,OAAgB;QACvB,MAAM9E,gBAAgBW,KAAKQ,GAAG;QAC9B,MAAM2D;IACR;AACF,EAAC"}
|
|
1
|
+
{"version":3,"sources":["../../../src/collections/operations/update.ts"],"sourcesContent":["import type { DeepPartial } from 'ts-essentials'\n\nimport { status as httpStatus } from 'http-status'\n\nimport type { AccessResult } from '../../config/types.js'\nimport type { PayloadRequest, PopulateType, SelectType, Sort, Where } from '../../types/index.js'\nimport type {\n BulkOperationResult,\n Collection,\n DataFromCollectionSlug,\n RequiredDataFromCollectionSlug,\n SelectFromCollectionSlug,\n} from '../config/types.js'\n\nimport { executeAccess } from '../../auth/executeAccess.js'\nimport { combineQueries } from '../../database/combineQueries.js'\nimport { validateQueryPaths } from '../../database/queryValidation/validateQueryPaths.js'\nimport { sanitizeWhereQuery } from '../../database/sanitizeWhereQuery.js'\nimport { APIError } from '../../errors/index.js'\nimport { type CollectionSlug, deepCopyObjectSimple } from '../../index.js'\nimport { generateFileData } from '../../uploads/generateFileData.js'\nimport { unlinkTempFiles } from '../../uploads/unlinkTempFiles.js'\nimport { appendNonTrashedFilter } from '../../utilities/appendNonTrashedFilter.js'\nimport { commitTransaction } from '../../utilities/commitTransaction.js'\nimport { hasDraftsEnabled } from '../../utilities/getVersionsConfig.js'\nimport { initTransaction } from '../../utilities/initTransaction.js'\nimport { isErrorPublic } from '../../utilities/isErrorPublic.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport { sanitizeSelect } from '../../utilities/sanitizeSelect.js'\nimport { buildVersionCollectionFields } from '../../versions/buildCollectionFields.js'\nimport { appendVersionToQueryKey } from '../../versions/drafts/appendVersionToQueryKey.js'\nimport { getQueryDraftsSort } from '../../versions/drafts/getQueryDraftsSort.js'\nimport { buildAfterOperation } from './utilities/buildAfterOperation.js'\nimport { buildBeforeOperation } from './utilities/buildBeforeOperation.js'\nimport { sanitizeSortQuery } from './utilities/sanitizeSortQuery.js'\nimport { updateDocument } from './utilities/update.js'\n\nexport type Arguments<TSlug extends CollectionSlug> = {\n autosave?: boolean\n collection: Collection\n data: DeepPartial<RequiredDataFromCollectionSlug<TSlug>>\n depth?: number\n disableTransaction?: boolean\n disableVerificationEmail?: boolean\n draft?: boolean\n limit?: number\n overrideAccess?: boolean\n overrideLock?: boolean\n overwriteExistingFiles?: boolean\n populate?: PopulateType\n publishSpecificLocale?: string\n req: PayloadRequest\n select?: SelectType\n showHiddenFields?: boolean\n /**\n * Sort the documents, can be a string or an array of strings\n * @example '-createdAt' // Sort DESC by createdAt\n * @example ['group', '-createdAt'] // sort by 2 fields, ASC group and DESC createdAt\n */\n sort?: Sort\n trash?: boolean\n where: Where\n}\n\nexport const updateOperation = async <\n TSlug extends CollectionSlug,\n TSelect extends SelectFromCollectionSlug<TSlug>,\n>(\n incomingArgs: Arguments<TSlug>,\n): Promise<BulkOperationResult<TSlug, TSelect>> => {\n let args = incomingArgs\n\n if (args.collection.config.disableBulkEdit && !args.overrideAccess) {\n throw new APIError(`Collection ${args.collection.config.slug} has disabled bulk edit`, 403)\n }\n\n try {\n const shouldCommit = !args.disableTransaction && (await initTransaction(args.req))\n\n // /////////////////////////////////////\n // beforeOperation - Collection\n // /////////////////////////////////////\n\n args = await buildBeforeOperation({\n args,\n collection: args.collection.config,\n operation: 'update',\n })\n\n const {\n autosave = false,\n collection: { config: collectionConfig },\n collection,\n depth,\n draft: draftArg = false,\n limit = 0,\n overrideAccess,\n overrideLock,\n overwriteExistingFiles = false,\n populate,\n publishSpecificLocale,\n req: {\n fallbackLocale,\n locale,\n payload: { config },\n payload,\n },\n req,\n select: incomingSelect,\n showHiddenFields,\n sort: incomingSort,\n trash = false,\n where,\n } = args\n\n if (!where) {\n throw new APIError(\"Missing 'where' query of documents to update.\", httpStatus.BAD_REQUEST)\n }\n\n const { data: bulkUpdateData } = args\n const shouldSaveDraft = Boolean(draftArg && hasDraftsEnabled(collectionConfig))\n\n // /////////////////////////////////////\n // Access\n // /////////////////////////////////////\n\n let accessResult: AccessResult\n if (!overrideAccess) {\n accessResult = await executeAccess({ req }, collectionConfig.access.update)\n }\n\n await validateQueryPaths({\n collectionConfig,\n overrideAccess: overrideAccess!,\n req,\n where,\n })\n\n // /////////////////////////////////////\n // Retrieve documents\n // /////////////////////////////////////\n\n let fullWhere = combineQueries(where, accessResult!)\n\n const isTrashAttempt =\n collectionConfig.trash &&\n typeof bulkUpdateData === 'object' &&\n bulkUpdateData !== null &&\n 'deletedAt' in bulkUpdateData &&\n bulkUpdateData.deletedAt != null\n\n // Enforce delete access if performing a soft-delete (trash)\n if (isTrashAttempt && !overrideAccess) {\n const deleteAccessResult = await executeAccess({ req }, collectionConfig.access.delete)\n fullWhere = combineQueries(fullWhere, deleteAccessResult)\n }\n\n // Exclude trashed documents when trash: false\n fullWhere = appendNonTrashedFilter({\n enableTrash: collectionConfig.trash,\n trash,\n where: fullWhere,\n })\n\n sanitizeWhereQuery({ fields: collectionConfig.flattenedFields, payload, where: fullWhere })\n\n const sort = sanitizeSortQuery({\n fields: collection.config.flattenedFields,\n sort: incomingSort,\n })\n\n let docs\n\n if (hasDraftsEnabled(collectionConfig) && shouldSaveDraft) {\n const versionsWhere = appendVersionToQueryKey(fullWhere)\n\n await validateQueryPaths({\n collectionConfig: collection.config,\n overrideAccess: overrideAccess!,\n req,\n versionFields: buildVersionCollectionFields(payload.config, collection.config, true),\n where: appendVersionToQueryKey(where),\n })\n\n const query = await payload.db.queryDrafts<DataFromCollectionSlug<TSlug>>({\n collection: collectionConfig.slug,\n limit,\n locale: locale!,\n pagination: false,\n req,\n sort: getQueryDraftsSort({ collectionConfig, sort }),\n where: versionsWhere,\n })\n\n docs = query.docs\n } else {\n const query = await payload.db.find({\n collection: collectionConfig.slug,\n limit,\n locale: locale!,\n pagination: false,\n req,\n sort,\n where: fullWhere,\n })\n\n docs = query.docs\n }\n\n // /////////////////////////////////////\n // Generate data for all files and sizes\n // /////////////////////////////////////\n\n const { data, files: filesToUpload } = await generateFileData({\n collection,\n config,\n data: bulkUpdateData,\n operation: 'update',\n overwriteExistingFiles,\n req,\n throwOnMissingFile: false,\n })\n\n const errors: BulkOperationResult<TSlug, TSelect>['errors'] = []\n\n const promises = docs.map(async (docWithLocales) => {\n const { id } = docWithLocales\n\n try {\n const select = sanitizeSelect({\n fields: collectionConfig.flattenedFields,\n forceSelect: collectionConfig.forceSelect,\n select: incomingSelect,\n })\n\n // ///////////////////////////////////////////////\n // Update document, runs all document level hooks\n // ///////////////////////////////////////////////\n const updatedDoc = await updateDocument({\n id,\n accessResults: accessResult,\n autosave,\n collectionConfig,\n config,\n data: deepCopyObjectSimple(data),\n depth: depth!,\n docWithLocales,\n draftArg,\n fallbackLocale: fallbackLocale!,\n filesToUpload,\n locale: locale!,\n overrideAccess: overrideAccess!,\n overrideLock: overrideLock!,\n payload,\n populate,\n publishSpecificLocale,\n req,\n select: select!,\n showHiddenFields: showHiddenFields!,\n })\n\n return updatedDoc\n } catch (error) {\n const isPublic = error instanceof Error ? isErrorPublic(error, config) : false\n\n errors.push({\n id,\n isPublic,\n message: error instanceof Error ? error.message : 'Unknown error',\n })\n }\n return null\n })\n\n await unlinkTempFiles({\n collectionConfig,\n config,\n req,\n })\n\n const awaitedDocs = await Promise.all(promises)\n\n let result = {\n docs: awaitedDocs.filter(Boolean),\n errors,\n }\n\n // /////////////////////////////////////\n // afterOperation - Collection\n // /////////////////////////////////////\n\n result = await buildAfterOperation({\n args,\n collection: collectionConfig,\n operation: 'update',\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n result,\n })\n\n if (shouldCommit) {\n await commitTransaction(req)\n }\n\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n return result\n } catch (error: unknown) {\n await killTransaction(args.req)\n throw error\n }\n}\n"],"names":["status","httpStatus","executeAccess","combineQueries","validateQueryPaths","sanitizeWhereQuery","APIError","deepCopyObjectSimple","generateFileData","unlinkTempFiles","appendNonTrashedFilter","commitTransaction","hasDraftsEnabled","initTransaction","isErrorPublic","killTransaction","sanitizeSelect","buildVersionCollectionFields","appendVersionToQueryKey","getQueryDraftsSort","buildAfterOperation","buildBeforeOperation","sanitizeSortQuery","updateDocument","updateOperation","incomingArgs","args","collection","config","disableBulkEdit","overrideAccess","slug","shouldCommit","disableTransaction","req","operation","autosave","collectionConfig","depth","draft","draftArg","limit","overrideLock","overwriteExistingFiles","populate","publishSpecificLocale","fallbackLocale","locale","payload","select","incomingSelect","showHiddenFields","sort","incomingSort","trash","where","BAD_REQUEST","data","bulkUpdateData","shouldSaveDraft","Boolean","accessResult","access","update","fullWhere","isTrashAttempt","deletedAt","deleteAccessResult","delete","enableTrash","fields","flattenedFields","docs","versionsWhere","versionFields","query","db","queryDrafts","pagination","find","files","filesToUpload","throwOnMissingFile","errors","promises","map","docWithLocales","id","forceSelect","updatedDoc","accessResults","error","isPublic","Error","push","message","awaitedDocs","Promise","all","result","filter"],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@ export async function buildBeforeOperation(operationArgs) {
|
|
|
4
4
|
const { args, collection, operation } = operationArgs;
|
|
5
5
|
let newArgs = args;
|
|
6
6
|
if (args.collection.config.hooks?.beforeOperation?.length) {
|
|
7
|
+
// TODO: v4 should not need this mapping
|
|
7
8
|
// Map the operation to the hook operation type for backward compatibility
|
|
8
9
|
const hookOperation = operationToHookOperation[operation];
|
|
9
10
|
for (const hook of args.collection.config.hooks.beforeOperation){
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/collections/operations/utilities/buildBeforeOperation.ts"],"sourcesContent":["import type { CollectionSlug } from '../../../index.js'\nimport type { BeforeOperationArg, OperationArgs, OperationMap } from './types.js'\n\nimport { operationToHookOperation } from './types.js'\n// Specific overloads with TArgs (these take priority over the general overload)\n// Overload for 'read' operation (deprecated, backward compatibility)\n\n/**\n * TODO V4: remove overloads and operations should be the literal operation that was called\n *\n * - `read`: replace with `find` and `findByID` in both operations\n * - `delete`: replace with `deleteByID` in deleteByID operation\n * - `update`: replace with `updateByID` in updateByID operation\n */\n\n/**\n * @deprecated\n *\n * Should use `find` or `findByID`\n */\nexport async function buildBeforeOperation<TOperationGeneric extends CollectionSlug, TArgs>(\n operationArgs: {\n args: TArgs\n operation: 'read'\n } & Omit<BeforeOperationArg<TOperationGeneric>, 'args' | 'context' | 'operation' | 'req'>,\n): Promise<TArgs>\n\n/**\n * Overload for 'readDistinct' operation\n *\n * @deprecated - use `findDistinct`\n */\nexport async function buildBeforeOperation<TOperationGeneric extends CollectionSlug, TArgs>(\n operationArgs: {\n args: TArgs\n operation: 'readDistinct'\n } & Omit<BeforeOperationArg<TOperationGeneric>, 'args' | 'context' | 'operation' | 'req'>,\n): Promise<TArgs>\n\n// Overload for 'update' operation (can be called by both update and updateByID)\nexport async function buildBeforeOperation<TOperationGeneric extends CollectionSlug, TArgs>(\n operationArgs: {\n args: TArgs\n operation: 'update'\n } & Omit<BeforeOperationArg<TOperationGeneric>, 'args' | 'context' | 'operation' | 'req'>,\n): Promise<TArgs>\n\n// Overload for 'updateByID' operation\nexport async function buildBeforeOperation<TOperationGeneric extends CollectionSlug, TArgs>(\n operationArgs: {\n args: TArgs\n operation: 'updateByID'\n } & Omit<BeforeOperationArg<TOperationGeneric>, 'args' | 'context' | 'operation' | 'req'>,\n): Promise<TArgs>\n\nexport async function buildBeforeOperation<TOperationGeneric extends CollectionSlug, TArgs>(\n operationArgs: {\n args: TArgs\n operation: 'delete'\n } & Omit<BeforeOperationArg<TOperationGeneric>, 'args' | 'context' | 'operation' | 'req'>,\n): Promise<TArgs>\n\n// Overload for 'deleteByID' operation\nexport async function buildBeforeOperation<TOperationGeneric extends CollectionSlug, TArgs>(\n operationArgs: {\n args: TArgs\n operation: 'deleteByID'\n } & Omit<BeforeOperationArg<TOperationGeneric>, 'args' | 'context' | 'operation' | 'req'>,\n): Promise<TArgs>\n\n// General overload for operations that exist in OperationMap (fallback)\nexport async function buildBeforeOperation<\n TOperationGeneric extends CollectionSlug,\n O extends keyof OperationMap<TOperationGeneric>,\n>(\n operationArgs: { operation: O } & Omit<BeforeOperationArg<TOperationGeneric>, 'context' | 'req'>,\n): Promise<OperationArgs<TOperationGeneric, O>>\n\n// Implementation\nexport async function buildBeforeOperation<TOperationGeneric extends CollectionSlug>(\n operationArgs: Omit<BeforeOperationArg<TOperationGeneric>, 'context' | 'req'>,\n): Promise<unknown> {\n const { args, collection, operation } = operationArgs\n\n let newArgs = args\n\n if (args.collection.config.hooks?.beforeOperation?.length) {\n // Map the operation to the hook operation type for backward compatibility\n const hookOperation
|
|
1
|
+
{"version":3,"sources":["../../../../src/collections/operations/utilities/buildBeforeOperation.ts"],"sourcesContent":["import type { CollectionSlug } from '../../../index.js'\nimport type { BeforeOperationArg, OperationArgs, OperationMap } from './types.js'\n\nimport { operationToHookOperation } from './types.js'\n// Specific overloads with TArgs (these take priority over the general overload)\n// Overload for 'read' operation (deprecated, backward compatibility)\n\n/**\n * TODO V4: remove overloads and operations should be the literal operation that was called\n *\n * - `read`: replace with `find` and `findByID` in both operations\n * - `delete`: replace with `deleteByID` in deleteByID operation\n * - `update`: replace with `updateByID` in updateByID operation\n */\n\n/**\n * @deprecated\n *\n * Should use `find` or `findByID`\n */\nexport async function buildBeforeOperation<TOperationGeneric extends CollectionSlug, TArgs>(\n operationArgs: {\n args: TArgs\n operation: 'read'\n } & Omit<BeforeOperationArg<TOperationGeneric>, 'args' | 'context' | 'operation' | 'req'>,\n): Promise<TArgs>\n\n/**\n * Overload for 'readDistinct' operation\n *\n * @deprecated - use `findDistinct`\n */\nexport async function buildBeforeOperation<TOperationGeneric extends CollectionSlug, TArgs>(\n operationArgs: {\n args: TArgs\n operation: 'readDistinct'\n } & Omit<BeforeOperationArg<TOperationGeneric>, 'args' | 'context' | 'operation' | 'req'>,\n): Promise<TArgs>\n\n// Overload for 'update' operation (can be called by both update and updateByID)\nexport async function buildBeforeOperation<TOperationGeneric extends CollectionSlug, TArgs>(\n operationArgs: {\n args: TArgs\n operation: 'update'\n } & Omit<BeforeOperationArg<TOperationGeneric>, 'args' | 'context' | 'operation' | 'req'>,\n): Promise<TArgs>\n\n// Overload for 'updateByID' operation\nexport async function buildBeforeOperation<TOperationGeneric extends CollectionSlug, TArgs>(\n operationArgs: {\n args: TArgs\n operation: 'updateByID'\n } & Omit<BeforeOperationArg<TOperationGeneric>, 'args' | 'context' | 'operation' | 'req'>,\n): Promise<TArgs>\n\nexport async function buildBeforeOperation<TOperationGeneric extends CollectionSlug, TArgs>(\n operationArgs: {\n args: TArgs\n operation: 'delete'\n } & Omit<BeforeOperationArg<TOperationGeneric>, 'args' | 'context' | 'operation' | 'req'>,\n): Promise<TArgs>\n\n// Overload for 'deleteByID' operation\nexport async function buildBeforeOperation<TOperationGeneric extends CollectionSlug, TArgs>(\n operationArgs: {\n args: TArgs\n operation: 'deleteByID'\n } & Omit<BeforeOperationArg<TOperationGeneric>, 'args' | 'context' | 'operation' | 'req'>,\n): Promise<TArgs>\n\n// General overload for operations that exist in OperationMap (fallback)\nexport async function buildBeforeOperation<\n TOperationGeneric extends CollectionSlug,\n O extends keyof OperationMap<TOperationGeneric>,\n>(\n operationArgs: { operation: O } & Omit<BeforeOperationArg<TOperationGeneric>, 'context' | 'req'>,\n): Promise<OperationArgs<TOperationGeneric, O>>\n\n// Implementation\nexport async function buildBeforeOperation<TOperationGeneric extends CollectionSlug>(\n operationArgs: Omit<BeforeOperationArg<TOperationGeneric>, 'context' | 'req'>,\n): Promise<unknown> {\n const { args, collection, operation } = operationArgs\n\n let newArgs = args\n\n if (args.collection.config.hooks?.beforeOperation?.length) {\n // TODO: v4 should not need this mapping\n // Map the operation to the hook operation type for backward compatibility\n const hookOperation = operationToHookOperation[operation]\n\n for (const hook of args.collection.config.hooks.beforeOperation) {\n const hookResult = await hook({\n args: newArgs,\n collection,\n context: args.req!.context,\n operation: hookOperation,\n req: args.req!,\n } as BeforeOperationArg<TOperationGeneric>)\n\n if (hookResult !== undefined) {\n newArgs = hookResult\n }\n }\n }\n\n return newArgs\n}\n"],"names":["operationToHookOperation","buildBeforeOperation","operationArgs","args","collection","operation","newArgs","config","hooks","beforeOperation","length","hookOperation","hook","hookResult","context","req","undefined"],"mappings":"AAGA,SAASA,wBAAwB,QAAQ,aAAY;AA2ErD,iBAAiB;AACjB,OAAO,eAAeC,qBACpBC,aAA6E;IAE7E,MAAM,EAAEC,IAAI,EAAEC,UAAU,EAAEC,SAAS,EAAE,GAAGH;IAExC,IAAII,UAAUH;IAEd,IAAIA,KAAKC,UAAU,CAACG,MAAM,CAACC,KAAK,EAAEC,iBAAiBC,QAAQ;QACzD,wCAAwC;QACxC,0EAA0E;QAC1E,MAAMC,gBAAgBX,wBAAwB,CAACK,UAAU;QAEzD,KAAK,MAAMO,QAAQT,KAAKC,UAAU,CAACG,MAAM,CAACC,KAAK,CAACC,eAAe,CAAE;YAC/D,MAAMI,aAAa,MAAMD,KAAK;gBAC5BT,MAAMG;gBACNF;gBACAU,SAASX,KAAKY,GAAG,CAAED,OAAO;gBAC1BT,WAAWM;gBACXI,KAAKZ,KAAKY,GAAG;YACf;YAEA,IAAIF,eAAeG,WAAW;gBAC5BV,UAAUO;YACZ;QACF;IACF;IAEA,OAAOP;AACT"}
|
|
@@ -66,6 +66,8 @@ export type AfterOperationArg<TOperationGeneric extends CollectionSlug> = {
|
|
|
66
66
|
args: Parameters<OperationMap<TOperationGeneric>['find']>[0];
|
|
67
67
|
/**
|
|
68
68
|
* @deprecated Use 'find' or 'findByID' operation instead
|
|
69
|
+
*
|
|
70
|
+
* TODO: v4 - remove this union option
|
|
69
71
|
*/
|
|
70
72
|
operation: 'read';
|
|
71
73
|
result: Awaited<ReturnType<OperationMap<TOperationGeneric>['find']>>;
|
|
@@ -137,6 +139,8 @@ export declare const operationToHookOperation: {
|
|
|
137
139
|
readonly findVersions: "read";
|
|
138
140
|
readonly forgotPassword: "forgotPassword";
|
|
139
141
|
readonly login: "login";
|
|
142
|
+
readonly read: "read";
|
|
143
|
+
readonly readDistinct: "readDistinct";
|
|
140
144
|
readonly refresh: "refresh";
|
|
141
145
|
readonly resetPassword: "resetPassword";
|
|
142
146
|
readonly restoreVersion: "restoreVersion";
|
|
@@ -153,6 +157,8 @@ export type BeforeOperationArg<TOperationGeneric extends CollectionSlug> = {
|
|
|
153
157
|
args: Parameters<OperationMap<TOperationGeneric>['find']>[0] | Parameters<OperationMap<TOperationGeneric>['findByID']>[0];
|
|
154
158
|
/**
|
|
155
159
|
* @deprecated Use 'find' or 'findByID' operation instead
|
|
160
|
+
*
|
|
161
|
+
* TODO: v4 - remove this union option
|
|
156
162
|
*/
|
|
157
163
|
operation: 'read';
|
|
158
164
|
} | {
|
|
@@ -178,10 +184,15 @@ export type BeforeOperationArg<TOperationGeneric extends CollectionSlug> = {
|
|
|
178
184
|
operation: 'findByID';
|
|
179
185
|
} | {
|
|
180
186
|
args: Parameters<OperationMap<TOperationGeneric>['findDistinct']>[0];
|
|
181
|
-
|
|
187
|
+
/**
|
|
188
|
+
* @deprecated Use 'findDistinct' operation instead
|
|
189
|
+
*
|
|
190
|
+
* TODO: v4 - remove this union option
|
|
191
|
+
*/
|
|
192
|
+
operation: 'readDistinct';
|
|
182
193
|
} | {
|
|
183
194
|
args: Parameters<OperationMap<TOperationGeneric>['findDistinct']>[0];
|
|
184
|
-
operation: '
|
|
195
|
+
operation: 'findDistinct';
|
|
185
196
|
} | {
|
|
186
197
|
args: Parameters<OperationMap<TOperationGeneric>['findVersionByID']>[0];
|
|
187
198
|
operation: 'findVersionByID';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/collections/operations/utilities/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/collections/operations/utilities/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,4CAA4C,CAAA;AACzF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAA;AACvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAA;AAC3E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2CAA2C,CAAA;AACvF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAA;AACzE,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAA;AAChG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAC7D,OAAO,KAAK,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAA;AAChG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAA;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC/C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AACvD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAC/D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAA;AACrE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAE3D,MAAM,MAAM,YAAY,CAAC,iBAAiB,SAAS,cAAc,IAAI;IACnE,KAAK,EAAE,OAAO,cAAc,CAAC,iBAAiB,CAAC,CAAA;IAC/C,aAAa,EAAE,OAAO,sBAAsB,CAAC,iBAAiB,CAAC,CAAA;IAC/D,MAAM,EAAE,OAAO,eAAe,CAAC,iBAAiB,EAAE,wBAAwB,CAAC,iBAAiB,CAAC,CAAC,CAAA;IAC9F,MAAM,EAAE,OAAO,eAAe,CAAC,iBAAiB,EAAE,wBAAwB,CAAC,iBAAiB,CAAC,CAAC,CAAA;IAC9F,UAAU,EAAE,OAAO,mBAAmB,CACpC,iBAAiB,EACjB,wBAAwB,CAAC,iBAAiB,CAAC,CAC5C,CAAA;IACD,IAAI,EAAE,OAAO,aAAa,CAAC,iBAAiB,EAAE,wBAAwB,CAAC,iBAAiB,CAAC,CAAC,CAAA;IAC1F,QAAQ,EAAE,OAAO,iBAAiB,CAChC,iBAAiB,EACjB,OAAO,EACP,wBAAwB,CAAC,iBAAiB,CAAC,CAC5C,CAAA;IACD,YAAY,EAAE,OAAO,qBAAqB,CAAA;IAC1C,eAAe,EAAE,OAAO,wBAAwB,CAAA;IAChD,YAAY,EAAE,OAAO,qBAAqB,CAAA;IAC1C,cAAc,EAAE,OAAO,uBAAuB,CAAA;IAC9C,KAAK,EAAE,OAAO,cAAc,CAAC,iBAAiB,CAAC,CAAA;IAC/C,OAAO,EAAE,OAAO,gBAAgB,CAAA;IAChC,aAAa,EAAE,OAAO,sBAAsB,CAAC,iBAAiB,CAAC,CAAA;IAC/D,cAAc,EAAE,OAAO,uBAAuB,CAAA;IAC9C,MAAM,EAAE,OAAO,eAAe,CAAC,iBAAiB,CAAC,CAAA;IACjD,MAAM,EAAE,OAAO,eAAe,CAAC,iBAAiB,EAAE,wBAAwB,CAAC,iBAAiB,CAAC,CAAC,CAAA;IAC9F,UAAU,EAAE,OAAO,mBAAmB,CACpC,iBAAiB,EACjB,wBAAwB,CAAC,iBAAiB,CAAC,CAC5C,CAAA;CACF,CAAA;AAED,MAAM,MAAM,iBAAiB,CAAC,iBAAiB,SAAS,cAAc,IAAI;IACxE,qDAAqD;IACrD,UAAU,EAAE,yBAAyB,CAAA;IACrC,GAAG,EAAE,cAAc,CAAA;CACpB,GAAG,CACA;IACE,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC7D,SAAS,EAAE,OAAO,CAAA;IAClB,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;CACtE,GACD;IACE,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACrE,SAAS,EAAE,eAAe,CAAA;IAC1B,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;CAC9E,GACD;IACE,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC9D,SAAS,EAAE,QAAQ,CAAA;IACnB,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;CACvE,GACD;IACE,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC9D,SAAS,EAAE,QAAQ,CAAA;IACnB,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;CACvE,GACD;IACE,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAClE,SAAS,EAAE,YAAY,CAAA;IACvB,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;CAC3E,GACD;IACE,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC5D;;;;OAIG;IACH,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;CACrE,GACD;IACE,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC5D,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;CACrE,GACD;IACE,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAChE,SAAS,EAAE,UAAU,CAAA;IACrB,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;CACzE,GACD;IACE,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACpE,SAAS,EAAE,cAAc,CAAA;IACzB,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAA;CAC7E,GACD;IACE,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACvE,SAAS,EAAE,iBAAiB,CAAA;IAC5B,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAA;CAChF,GACD;IACE,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACpE,SAAS,EAAE,cAAc,CAAA;IACzB,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAA;CAC7E,GACD;IACE,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACtE,SAAS,EAAE,gBAAgB,CAAA;IAC3B,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAA;CAC/E,GACD;IACE,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC7D,SAAS,EAAE,OAAO,CAAA;IAClB,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;CACtE,GACD;IACE,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC/D,SAAS,EAAE,SAAS,CAAA;IACpB,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;CACxE,GACD;IACE,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACrE,SAAS,EAAE,eAAe,CAAA;IAC1B,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;CAC9E,GACD;IACE,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACtE,SAAS,EAAE,gBAAgB,CAAA;IAC3B,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAA;CAC/E,GACD;IACE,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC9D,SAAS,EAAE,QAAQ,CAAA;IACnB,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;CACvE,GACD;IACE,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC9D,SAAS,EAAE,QAAQ,CAAA;IACnB,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;CACvE,GACD;IACE,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAClE,SAAS,EAAE,YAAY,CAAA;IACvB,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;CAC3E,CACJ,CAAA;AAED,MAAM,MAAM,eAAe,CACzB,iBAAiB,SAAS,cAAc,EACxC,CAAC,SAAS,MAAM,YAAY,CAAC,iBAAiB,CAAC,IAC7C,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAE3D,MAAM,MAAM,aAAa,CACvB,iBAAiB,SAAS,cAAc,EACxC,CAAC,SAAS,MAAM,YAAY,CAAC,iBAAiB,CAAC,IAC7C,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAGrD,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;CAqB3B,CAAA;AAEV,MAAM,MAAM,kBAAkB,CAAC,iBAAiB,SAAS,cAAc,IAAI;IACzE,qDAAqD;IACrD,UAAU,EAAE,yBAAyB,CAAA;IACrC,OAAO,EAAE,cAAc,CAAA;IACvB,GAAG,EAAE,cAAc,CAAA;CACpB,GAAG,CACA;IACE,IAAI,EACA,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GACtD,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC9D;;;;OAIG;IACH,SAAS,EAAE,MAAM,CAAA;CAClB,GACD;IACE,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC7D,SAAS,EAAE,OAAO,CAAA;CACnB,GACD;IACE,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACrE,SAAS,EAAE,eAAe,CAAA;CAC3B,GACD;IACE,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC9D,SAAS,EAAE,QAAQ,CAAA;CACpB,GACD;IACE,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC9D,SAAS,EAAE,QAAQ,CAAA;CACpB,GACD;IACE,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAClE,SAAS,EAAE,YAAY,CAAA;CACxB,GACD;IACE,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC5D,SAAS,EAAE,MAAM,CAAA;CAClB,GACD;IACE,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAChE,SAAS,EAAE,UAAU,CAAA;CACtB,GACD;IACE,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACpE;;;;OAIG;IACH,SAAS,EAAE,cAAc,CAAA;CAC1B,GACD;IACE,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACpE,SAAS,EAAE,cAAc,CAAA;CAC1B,GACD;IACE,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACvE,SAAS,EAAE,iBAAiB,CAAA;CAC7B,GACD;IACE,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACpE,SAAS,EAAE,cAAc,CAAA;CAC1B,GACD;IACE,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACtE,SAAS,EAAE,gBAAgB,CAAA;CAC5B,GACD;IACE,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC7D,SAAS,EAAE,OAAO,CAAA;CACnB,GACD;IACE,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC/D,SAAS,EAAE,SAAS,CAAA;CACrB,GACD;IACE,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACrE,SAAS,EAAE,eAAe,CAAA;CAC3B,GACD;IACE,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACtE,SAAS,EAAE,gBAAgB,CAAA;CAC5B,GACD;IACE,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC9D,SAAS,EAAE,QAAQ,CAAA;CACpB,GACD;IACE,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC9D,SAAS,EAAE,QAAQ,CAAA;CACpB,GACD;IACE,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAClE,SAAS,EAAE,YAAY,CAAA;CACxB,CACJ,CAAA"}
|
|
@@ -12,6 +12,8 @@ export const operationToHookOperation = {
|
|
|
12
12
|
findVersions: 'read',
|
|
13
13
|
forgotPassword: 'forgotPassword',
|
|
14
14
|
login: 'login',
|
|
15
|
+
read: 'read',
|
|
16
|
+
readDistinct: 'readDistinct',
|
|
15
17
|
refresh: 'refresh',
|
|
16
18
|
resetPassword: 'resetPassword',
|
|
17
19
|
restoreVersion: 'restoreVersion',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/collections/operations/utilities/types.ts"],"sourcesContent":["import type { forgotPasswordOperation } from '../../../auth/operations/forgotPassword.js'\nimport type { loginOperation } from '../../../auth/operations/login.js'\nimport type { refreshOperation } from '../../../auth/operations/refresh.js'\nimport type { resetPasswordOperation } from '../../../auth/operations/resetPassword.js'\nimport type { unlockOperation } from '../../../auth/operations/unlock.js'\nimport type { CollectionSlug, RequestContext, restoreVersionOperation } from '../../../index.js'\nimport type { PayloadRequest } from '../../../types/index.js'\nimport type { SanitizedCollectionConfig, SelectFromCollectionSlug } from '../../config/types.js'\nimport type { countOperation } from '../count.js'\nimport type { countVersionsOperation } from '../countVersions.js'\nimport type { createOperation } from '../create.js'\nimport type { deleteOperation } from '../delete.js'\nimport type { deleteByIDOperation } from '../deleteByID.js'\nimport type { findOperation } from '../find.js'\nimport type { findByIDOperation } from '../findByID.js'\nimport type { findDistinctOperation } from '../findDistinct.js'\nimport type { findVersionByIDOperation } from '../findVersionByID.js'\nimport type { findVersionsOperation } from '../findVersions.js'\nimport type { updateOperation } from '../update.js'\nimport type { updateByIDOperation } from '../updateByID.js'\n\nexport type OperationMap<TOperationGeneric extends CollectionSlug> = {\n count: typeof countOperation<TOperationGeneric>\n countVersions: typeof countVersionsOperation<TOperationGeneric>\n create: typeof createOperation<TOperationGeneric, SelectFromCollectionSlug<TOperationGeneric>>\n delete: typeof deleteOperation<TOperationGeneric, SelectFromCollectionSlug<TOperationGeneric>>\n deleteByID: typeof deleteByIDOperation<\n TOperationGeneric,\n SelectFromCollectionSlug<TOperationGeneric>\n >\n find: typeof findOperation<TOperationGeneric, SelectFromCollectionSlug<TOperationGeneric>>\n findByID: typeof findByIDOperation<\n TOperationGeneric,\n boolean,\n SelectFromCollectionSlug<TOperationGeneric>\n >\n findDistinct: typeof findDistinctOperation\n findVersionByID: typeof findVersionByIDOperation\n findVersions: typeof findVersionsOperation\n forgotPassword: typeof forgotPasswordOperation\n login: typeof loginOperation<TOperationGeneric>\n refresh: typeof refreshOperation\n resetPassword: typeof resetPasswordOperation<TOperationGeneric>\n restoreVersion: typeof restoreVersionOperation\n unlock: typeof unlockOperation<TOperationGeneric>\n update: typeof updateOperation<TOperationGeneric, SelectFromCollectionSlug<TOperationGeneric>>\n updateByID: typeof updateByIDOperation<\n TOperationGeneric,\n SelectFromCollectionSlug<TOperationGeneric>\n >\n}\n\nexport type AfterOperationArg<TOperationGeneric extends CollectionSlug> = {\n /** The collection which this hook is being run on */\n collection: SanitizedCollectionConfig\n req: PayloadRequest\n} & (\n | {\n args: Parameters<OperationMap<TOperationGeneric>['count']>[0]\n operation: 'count'\n result: Awaited<ReturnType<OperationMap<TOperationGeneric>['count']>>\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['countVersions']>[0]\n operation: 'countVersions'\n result: Awaited<ReturnType<OperationMap<TOperationGeneric>['countVersions']>>\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['create']>[0]\n operation: 'create'\n result: Awaited<ReturnType<OperationMap<TOperationGeneric>['create']>>\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['delete']>[0]\n operation: 'delete'\n result: Awaited<ReturnType<OperationMap<TOperationGeneric>['delete']>>\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['deleteByID']>[0]\n operation: 'deleteByID'\n result: Awaited<ReturnType<OperationMap<TOperationGeneric>['deleteByID']>>\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['find']>[0]\n /**\n * @deprecated Use 'find' or 'findByID' operation instead\n */\n operation: 'read'\n result: Awaited<ReturnType<OperationMap<TOperationGeneric>['find']>>\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['find']>[0]\n operation: 'find'\n result: Awaited<ReturnType<OperationMap<TOperationGeneric>['find']>>\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['findByID']>[0]\n operation: 'findByID'\n result: Awaited<ReturnType<OperationMap<TOperationGeneric>['findByID']>>\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['findDistinct']>[0]\n operation: 'findDistinct'\n result: Awaited<ReturnType<OperationMap<TOperationGeneric>['findDistinct']>>\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['findVersionByID']>[0]\n operation: 'findVersionByID'\n result: Awaited<ReturnType<OperationMap<TOperationGeneric>['findVersionByID']>>\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['findVersions']>[0]\n operation: 'findVersions'\n result: Awaited<ReturnType<OperationMap<TOperationGeneric>['findVersions']>>\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['forgotPassword']>[0]\n operation: 'forgotPassword'\n result: Awaited<ReturnType<OperationMap<TOperationGeneric>['forgotPassword']>>\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['login']>[0]\n operation: 'login'\n result: Awaited<ReturnType<OperationMap<TOperationGeneric>['login']>>\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['refresh']>[0]\n operation: 'refresh'\n result: Awaited<ReturnType<OperationMap<TOperationGeneric>['refresh']>>\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['resetPassword']>[0]\n operation: 'resetPassword'\n result: Awaited<ReturnType<OperationMap<TOperationGeneric>['resetPassword']>>\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['restoreVersion']>[0]\n operation: 'restoreVersion'\n result: Awaited<ReturnType<OperationMap<TOperationGeneric>['restoreVersion']>>\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['unlock']>[0]\n operation: 'unlock'\n result: Awaited<ReturnType<OperationMap<TOperationGeneric>['unlock']>>\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['update']>[0]\n operation: 'update'\n result: Awaited<ReturnType<OperationMap<TOperationGeneric>['update']>>\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['updateByID']>[0]\n operation: 'updateByID'\n result: Awaited<ReturnType<OperationMap<TOperationGeneric>['updateByID']>>\n }\n)\n\nexport type OperationResult<\n TOperationGeneric extends CollectionSlug,\n O extends keyof OperationMap<TOperationGeneric>,\n> = Awaited<ReturnType<OperationMap<TOperationGeneric>[O]>>\n\nexport type OperationArgs<\n TOperationGeneric extends CollectionSlug,\n O extends keyof OperationMap<TOperationGeneric>,\n> = Parameters<OperationMap<TOperationGeneric>[O]>[0]\n\n// Map internal operation names to HookOperationType\nexport const operationToHookOperation = {\n count: 'count',\n countVersions: 'countVersions',\n create: 'create',\n delete: 'delete',\n deleteByID: 'delete',\n find: 'read',\n findByID: 'read',\n findDistinct: 'readDistinct',\n findVersionByID: 'read',\n findVersions: 'read',\n forgotPassword: 'forgotPassword',\n login: 'login',\n refresh: 'refresh',\n resetPassword: 'resetPassword',\n restoreVersion: 'restoreVersion',\n unlock: 'unlock',\n update: 'update',\n updateByID: 'update',\n} as const\n\nexport type BeforeOperationArg<TOperationGeneric extends CollectionSlug> = {\n /** The collection which this hook is being run on */\n collection: SanitizedCollectionConfig\n context: RequestContext\n req: PayloadRequest\n} & (\n | {\n args:\n | Parameters<OperationMap<TOperationGeneric>['find']>[0]\n | Parameters<OperationMap<TOperationGeneric>['findByID']>[0]\n /**\n * @deprecated Use 'find' or 'findByID' operation instead\n */\n operation: 'read'\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['count']>[0]\n operation: 'count'\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['countVersions']>[0]\n operation: 'countVersions'\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['create']>[0]\n operation: 'create'\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['delete']>[0]\n operation: 'delete'\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['deleteByID']>[0]\n operation: 'deleteByID'\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['find']>[0]\n operation: 'find'\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['findByID']>[0]\n operation: 'findByID'\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['findDistinct']>[0]\n operation: 'findDistinct'\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['findDistinct']>[0]\n operation: 'readDistinct'\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['findVersionByID']>[0]\n operation: 'findVersionByID'\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['findVersions']>[0]\n operation: 'findVersions'\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['forgotPassword']>[0]\n operation: 'forgotPassword'\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['login']>[0]\n operation: 'login'\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['refresh']>[0]\n operation: 'refresh'\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['resetPassword']>[0]\n operation: 'resetPassword'\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['restoreVersion']>[0]\n operation: 'restoreVersion'\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['unlock']>[0]\n operation: 'unlock'\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['update']>[0]\n operation: 'update'\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['updateByID']>[0]\n operation: 'updateByID'\n }\n)\n"],"names":["operationToHookOperation","count","countVersions","create","delete","deleteByID","find","findByID","findDistinct","findVersionByID","findVersions","forgotPassword","login","refresh","resetPassword","restoreVersion","unlock","update","updateByID"],"mappings":"AAuKA,oDAAoD;AACpD,OAAO,MAAMA,2BAA2B;IACtCC,OAAO;IACPC,eAAe;IACfC,QAAQ;IACRC,QAAQ;IACRC,YAAY;IACZC,MAAM;IACNC,UAAU;IACVC,cAAc;IACdC,iBAAiB;IACjBC,cAAc;IACdC,gBAAgB;IAChBC,OAAO;IACPC,SAAS;IACTC,eAAe;IACfC,gBAAgB;IAChBC,QAAQ;IACRC,QAAQ;IACRC,YAAY;AACd,EAAU"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/collections/operations/utilities/types.ts"],"sourcesContent":["import type { forgotPasswordOperation } from '../../../auth/operations/forgotPassword.js'\nimport type { loginOperation } from '../../../auth/operations/login.js'\nimport type { refreshOperation } from '../../../auth/operations/refresh.js'\nimport type { resetPasswordOperation } from '../../../auth/operations/resetPassword.js'\nimport type { unlockOperation } from '../../../auth/operations/unlock.js'\nimport type { CollectionSlug, RequestContext, restoreVersionOperation } from '../../../index.js'\nimport type { PayloadRequest } from '../../../types/index.js'\nimport type { SanitizedCollectionConfig, SelectFromCollectionSlug } from '../../config/types.js'\nimport type { countOperation } from '../count.js'\nimport type { countVersionsOperation } from '../countVersions.js'\nimport type { createOperation } from '../create.js'\nimport type { deleteOperation } from '../delete.js'\nimport type { deleteByIDOperation } from '../deleteByID.js'\nimport type { findOperation } from '../find.js'\nimport type { findByIDOperation } from '../findByID.js'\nimport type { findDistinctOperation } from '../findDistinct.js'\nimport type { findVersionByIDOperation } from '../findVersionByID.js'\nimport type { findVersionsOperation } from '../findVersions.js'\nimport type { updateOperation } from '../update.js'\nimport type { updateByIDOperation } from '../updateByID.js'\n\nexport type OperationMap<TOperationGeneric extends CollectionSlug> = {\n count: typeof countOperation<TOperationGeneric>\n countVersions: typeof countVersionsOperation<TOperationGeneric>\n create: typeof createOperation<TOperationGeneric, SelectFromCollectionSlug<TOperationGeneric>>\n delete: typeof deleteOperation<TOperationGeneric, SelectFromCollectionSlug<TOperationGeneric>>\n deleteByID: typeof deleteByIDOperation<\n TOperationGeneric,\n SelectFromCollectionSlug<TOperationGeneric>\n >\n find: typeof findOperation<TOperationGeneric, SelectFromCollectionSlug<TOperationGeneric>>\n findByID: typeof findByIDOperation<\n TOperationGeneric,\n boolean,\n SelectFromCollectionSlug<TOperationGeneric>\n >\n findDistinct: typeof findDistinctOperation\n findVersionByID: typeof findVersionByIDOperation\n findVersions: typeof findVersionsOperation\n forgotPassword: typeof forgotPasswordOperation\n login: typeof loginOperation<TOperationGeneric>\n refresh: typeof refreshOperation\n resetPassword: typeof resetPasswordOperation<TOperationGeneric>\n restoreVersion: typeof restoreVersionOperation\n unlock: typeof unlockOperation<TOperationGeneric>\n update: typeof updateOperation<TOperationGeneric, SelectFromCollectionSlug<TOperationGeneric>>\n updateByID: typeof updateByIDOperation<\n TOperationGeneric,\n SelectFromCollectionSlug<TOperationGeneric>\n >\n}\n\nexport type AfterOperationArg<TOperationGeneric extends CollectionSlug> = {\n /** The collection which this hook is being run on */\n collection: SanitizedCollectionConfig\n req: PayloadRequest\n} & (\n | {\n args: Parameters<OperationMap<TOperationGeneric>['count']>[0]\n operation: 'count'\n result: Awaited<ReturnType<OperationMap<TOperationGeneric>['count']>>\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['countVersions']>[0]\n operation: 'countVersions'\n result: Awaited<ReturnType<OperationMap<TOperationGeneric>['countVersions']>>\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['create']>[0]\n operation: 'create'\n result: Awaited<ReturnType<OperationMap<TOperationGeneric>['create']>>\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['delete']>[0]\n operation: 'delete'\n result: Awaited<ReturnType<OperationMap<TOperationGeneric>['delete']>>\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['deleteByID']>[0]\n operation: 'deleteByID'\n result: Awaited<ReturnType<OperationMap<TOperationGeneric>['deleteByID']>>\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['find']>[0]\n /**\n * @deprecated Use 'find' or 'findByID' operation instead\n *\n * TODO: v4 - remove this union option\n */\n operation: 'read'\n result: Awaited<ReturnType<OperationMap<TOperationGeneric>['find']>>\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['find']>[0]\n operation: 'find'\n result: Awaited<ReturnType<OperationMap<TOperationGeneric>['find']>>\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['findByID']>[0]\n operation: 'findByID'\n result: Awaited<ReturnType<OperationMap<TOperationGeneric>['findByID']>>\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['findDistinct']>[0]\n operation: 'findDistinct'\n result: Awaited<ReturnType<OperationMap<TOperationGeneric>['findDistinct']>>\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['findVersionByID']>[0]\n operation: 'findVersionByID'\n result: Awaited<ReturnType<OperationMap<TOperationGeneric>['findVersionByID']>>\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['findVersions']>[0]\n operation: 'findVersions'\n result: Awaited<ReturnType<OperationMap<TOperationGeneric>['findVersions']>>\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['forgotPassword']>[0]\n operation: 'forgotPassword'\n result: Awaited<ReturnType<OperationMap<TOperationGeneric>['forgotPassword']>>\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['login']>[0]\n operation: 'login'\n result: Awaited<ReturnType<OperationMap<TOperationGeneric>['login']>>\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['refresh']>[0]\n operation: 'refresh'\n result: Awaited<ReturnType<OperationMap<TOperationGeneric>['refresh']>>\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['resetPassword']>[0]\n operation: 'resetPassword'\n result: Awaited<ReturnType<OperationMap<TOperationGeneric>['resetPassword']>>\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['restoreVersion']>[0]\n operation: 'restoreVersion'\n result: Awaited<ReturnType<OperationMap<TOperationGeneric>['restoreVersion']>>\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['unlock']>[0]\n operation: 'unlock'\n result: Awaited<ReturnType<OperationMap<TOperationGeneric>['unlock']>>\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['update']>[0]\n operation: 'update'\n result: Awaited<ReturnType<OperationMap<TOperationGeneric>['update']>>\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['updateByID']>[0]\n operation: 'updateByID'\n result: Awaited<ReturnType<OperationMap<TOperationGeneric>['updateByID']>>\n }\n)\n\nexport type OperationResult<\n TOperationGeneric extends CollectionSlug,\n O extends keyof OperationMap<TOperationGeneric>,\n> = Awaited<ReturnType<OperationMap<TOperationGeneric>[O]>>\n\nexport type OperationArgs<\n TOperationGeneric extends CollectionSlug,\n O extends keyof OperationMap<TOperationGeneric>,\n> = Parameters<OperationMap<TOperationGeneric>[O]>[0]\n\n// Map internal operation names to HookOperationType\nexport const operationToHookOperation = {\n count: 'count',\n countVersions: 'countVersions',\n create: 'create',\n delete: 'delete',\n deleteByID: 'delete',\n find: 'read',\n findByID: 'read',\n findDistinct: 'readDistinct',\n findVersionByID: 'read',\n findVersions: 'read',\n forgotPassword: 'forgotPassword',\n login: 'login',\n read: 'read',\n readDistinct: 'readDistinct',\n refresh: 'refresh',\n resetPassword: 'resetPassword',\n restoreVersion: 'restoreVersion',\n unlock: 'unlock',\n update: 'update',\n updateByID: 'update',\n} as const\n\nexport type BeforeOperationArg<TOperationGeneric extends CollectionSlug> = {\n /** The collection which this hook is being run on */\n collection: SanitizedCollectionConfig\n context: RequestContext\n req: PayloadRequest\n} & (\n | {\n args:\n | Parameters<OperationMap<TOperationGeneric>['find']>[0]\n | Parameters<OperationMap<TOperationGeneric>['findByID']>[0]\n /**\n * @deprecated Use 'find' or 'findByID' operation instead\n *\n * TODO: v4 - remove this union option\n */\n operation: 'read'\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['count']>[0]\n operation: 'count'\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['countVersions']>[0]\n operation: 'countVersions'\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['create']>[0]\n operation: 'create'\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['delete']>[0]\n operation: 'delete'\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['deleteByID']>[0]\n operation: 'deleteByID'\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['find']>[0]\n operation: 'find'\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['findByID']>[0]\n operation: 'findByID'\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['findDistinct']>[0]\n /**\n * @deprecated Use 'findDistinct' operation instead\n *\n * TODO: v4 - remove this union option\n */\n operation: 'readDistinct'\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['findDistinct']>[0]\n operation: 'findDistinct'\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['findVersionByID']>[0]\n operation: 'findVersionByID'\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['findVersions']>[0]\n operation: 'findVersions'\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['forgotPassword']>[0]\n operation: 'forgotPassword'\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['login']>[0]\n operation: 'login'\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['refresh']>[0]\n operation: 'refresh'\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['resetPassword']>[0]\n operation: 'resetPassword'\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['restoreVersion']>[0]\n operation: 'restoreVersion'\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['unlock']>[0]\n operation: 'unlock'\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['update']>[0]\n operation: 'update'\n }\n | {\n args: Parameters<OperationMap<TOperationGeneric>['updateByID']>[0]\n operation: 'updateByID'\n }\n)\n"],"names":["operationToHookOperation","count","countVersions","create","delete","deleteByID","find","findByID","findDistinct","findVersionByID","findVersions","forgotPassword","login","read","readDistinct","refresh","resetPassword","restoreVersion","unlock","update","updateByID"],"mappings":"AAyKA,oDAAoD;AACpD,OAAO,MAAMA,2BAA2B;IACtCC,OAAO;IACPC,eAAe;IACfC,QAAQ;IACRC,QAAQ;IACRC,YAAY;IACZC,MAAM;IACNC,UAAU;IACVC,cAAc;IACdC,iBAAiB;IACjBC,cAAc;IACdC,gBAAgB;IAChBC,OAAO;IACPC,MAAM;IACNC,cAAc;IACdC,SAAS;IACTC,eAAe;IACfC,gBAAgB;IAChBC,QAAQ;IACRC,QAAQ;IACRC,YAAY;AACd,EAAU"}
|
|
@@ -204,7 +204,7 @@ export interface SanitizedGlobalConfig extends Omit<DeepRequired<GlobalConfig>,
|
|
|
204
204
|
*/
|
|
205
205
|
flattenedFields: FlattenedField[];
|
|
206
206
|
slug: GlobalSlug;
|
|
207
|
-
versions
|
|
207
|
+
versions?: SanitizedGlobalVersions;
|
|
208
208
|
}
|
|
209
209
|
export type Globals = {
|
|
210
210
|
config: SanitizedGlobalConfig[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/globals/config/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/globals/config/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/globals/config/types.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { GraphQLNonNull, GraphQLObjectType } from 'graphql'\nimport type { DeepRequired, IsAny } from 'ts-essentials'\n\nimport type {\n CustomPreviewButton,\n CustomPublishButton,\n CustomSaveButton,\n CustomSaveDraftButton,\n} from '../../admin/types.js'\nimport type {\n Access,\n CustomComponent,\n EditConfig,\n Endpoint,\n EntityDescription,\n EntityDescriptionComponent,\n GeneratePreviewURL,\n LabelFunction,\n LivePreviewConfig,\n MetaConfig,\n StaticLabel,\n} from '../../config/types.js'\nimport type { DBIdentifierName } from '../../database/types.js'\nimport type { Field, FlattenedField } from '../../fields/config/types.js'\nimport type {\n GlobalAdminCustom,\n GlobalCustom,\n GlobalSlug,\n RequestContext,\n TypedGlobal,\n TypedGlobalSelect,\n} from '../../index.js'\nimport type { PayloadRequest, SelectIncludeType, Where } from '../../types/index.js'\nimport type { IncomingGlobalVersions, SanitizedGlobalVersions } from '../../versions/types.js'\n\nexport type DataFromGlobalSlug<TSlug extends GlobalSlug> = TypedGlobal[TSlug]\n\nexport type SelectFromGlobalSlug<TSlug extends GlobalSlug> = TypedGlobalSelect[TSlug]\n\nexport type BeforeValidateHook = (args: {\n context: RequestContext\n data?: any\n /** The global which this hook is being run on */\n global: SanitizedGlobalConfig\n originalDoc?: any\n req: PayloadRequest\n}) => any\n\nexport type BeforeChangeHook = (args: {\n context: RequestContext\n data: any\n /** The global which this hook is being run on */\n global: SanitizedGlobalConfig\n originalDoc?: any\n req: PayloadRequest\n}) => any\n\nexport type AfterChangeHook = (args: {\n context: RequestContext\n data: any\n doc: any\n /** The global which this hook is being run on */\n global: SanitizedGlobalConfig\n previousDoc: any\n req: PayloadRequest\n}) => any\n\nexport type BeforeReadHook = (args: {\n context: RequestContext\n doc: any\n /** The global which this hook is being run on */\n global: SanitizedGlobalConfig\n req: PayloadRequest\n}) => any\n\nexport type AfterReadHook = (args: {\n context: RequestContext\n doc: any\n findMany?: boolean\n /** The global which this hook is being run on */\n global: SanitizedGlobalConfig\n query?: Where\n req: PayloadRequest\n}) => any\n\nexport type HookOperationType = 'countVersions' | 'read' | 'restoreVersion' | 'update'\n\nexport type BeforeOperationHook = (args: {\n args?: any\n context: RequestContext\n /**\n * The Global which this hook is being run on\n * */\n global: SanitizedGlobalConfig\n /**\n * Hook operation being performed\n */\n operation: HookOperationType\n req: PayloadRequest\n}) => any\n\nexport type GlobalAdminOptions = {\n /**\n * Custom admin components\n */\n components?: {\n elements?: {\n /**\n * Inject custom components before the document controls\n */\n beforeDocumentControls?: CustomComponent[]\n Description?: EntityDescriptionComponent\n /**\n * Replaces the \"Preview\" button\n */\n PreviewButton?: CustomPreviewButton\n /**\n * Replaces the \"Publish\" button\n * + drafts must be enabled\n */\n PublishButton?: CustomPublishButton\n /**\n * Replaces the \"Save\" button\n * + drafts must be disabled\n */\n SaveButton?: CustomSaveButton\n /**\n * Replaces the \"Save Draft\" button\n * + drafts must be enabled\n * + autosave must be disabled\n */\n SaveDraftButton?: CustomSaveDraftButton\n }\n views?: {\n /**\n * Set to a React component to replace the entire Edit View, including all nested routes.\n * Set to an object to replace or modify individual nested routes, or to add new ones.\n */\n edit?: EditConfig\n }\n }\n /** Extension point to add your custom data. Available in server and client. */\n custom?: GlobalAdminCustom\n /**\n * Custom description for collection\n */\n description?: EntityDescription\n /**\n * Specify a navigational group for globals in the admin sidebar.\n * - Provide a string to place the entity in a custom group.\n * - Provide a record to define localized group names.\n * - Set to `false` to exclude the entity from the sidebar / dashboard without disabling its routes.\n */\n group?: false | Record<string, string> | string\n /**\n * Exclude the global from the admin nav and routes\n */\n hidden?: ((args: { user: PayloadRequest['user'] }) => boolean) | boolean\n /**\n * Hide the API URL within the Edit View\n */\n hideAPIURL?: boolean\n /**\n * Live preview options\n */\n livePreview?: LivePreviewConfig\n meta?: MetaConfig\n /**\n * Function to generate custom preview URL\n */\n preview?: GeneratePreviewURL\n}\n\nexport type GlobalConfig<TSlug extends GlobalSlug = any> = {\n /**\n * Do not set this property manually. This is set to true during sanitization, to avoid\n * sanitizing the same global multiple times.\n */\n _sanitized?: boolean\n access?: {\n read?: Access\n readDrafts?: Access\n readVersions?: Access\n update?: Access\n }\n admin?: GlobalAdminOptions\n /** Extension point to add your custom data. Server only. */\n custom?: GlobalCustom\n /**\n * Customize the SQL table name\n */\n dbName?: DBIdentifierName\n endpoints?: false | Omit<Endpoint, 'root'>[]\n fields: Field[]\n /**\n * Specify which fields should be selected always, regardless of the `select` query which can be useful that the field exists for access control / hooks\n */\n forceSelect?: IsAny<SelectFromGlobalSlug<TSlug>> extends true\n ? SelectIncludeType\n : SelectFromGlobalSlug<TSlug>\n graphQL?:\n | {\n disableMutations?: true\n disableQueries?: true\n name?: string\n }\n | false\n hooks?: {\n afterChange?: AfterChangeHook[]\n afterRead?: AfterReadHook[]\n beforeChange?: BeforeChangeHook[]\n beforeOperation?: BeforeOperationHook[]\n beforeRead?: BeforeReadHook[]\n beforeValidate?: BeforeValidateHook[]\n }\n label?: LabelFunction | StaticLabel\n /**\n * Enables / Disables the ability to lock documents while editing\n * @default true\n */\n lockDocuments?:\n | {\n duration: number\n }\n | false\n slug: string\n /**\n * Options used in typescript generation\n */\n typescript?: {\n /**\n * Typescript generation name given to the interface type\n */\n interface?: string\n }\n versions?: boolean | IncomingGlobalVersions\n}\n\nexport interface SanitizedGlobalConfig\n extends Omit<DeepRequired<GlobalConfig>, 'endpoints' | 'fields' | 'slug' | 'versions'> {\n endpoints: Endpoint[] | false\n fields: Field[]\n /**\n * Fields in the database schema structure\n * Rows / collapsible / tabs w/o name `fields` merged to top, UIs are excluded\n */\n flattenedFields: FlattenedField[]\n slug: GlobalSlug\n versions
|
|
1
|
+
{"version":3,"sources":["../../../src/globals/config/types.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { GraphQLNonNull, GraphQLObjectType } from 'graphql'\nimport type { DeepRequired, IsAny } from 'ts-essentials'\n\nimport type {\n CustomPreviewButton,\n CustomPublishButton,\n CustomSaveButton,\n CustomSaveDraftButton,\n} from '../../admin/types.js'\nimport type {\n Access,\n CustomComponent,\n EditConfig,\n Endpoint,\n EntityDescription,\n EntityDescriptionComponent,\n GeneratePreviewURL,\n LabelFunction,\n LivePreviewConfig,\n MetaConfig,\n StaticLabel,\n} from '../../config/types.js'\nimport type { DBIdentifierName } from '../../database/types.js'\nimport type { Field, FlattenedField } from '../../fields/config/types.js'\nimport type {\n GlobalAdminCustom,\n GlobalCustom,\n GlobalSlug,\n RequestContext,\n TypedGlobal,\n TypedGlobalSelect,\n} from '../../index.js'\nimport type { PayloadRequest, SelectIncludeType, Where } from '../../types/index.js'\nimport type { IncomingGlobalVersions, SanitizedGlobalVersions } from '../../versions/types.js'\n\nexport type DataFromGlobalSlug<TSlug extends GlobalSlug> = TypedGlobal[TSlug]\n\nexport type SelectFromGlobalSlug<TSlug extends GlobalSlug> = TypedGlobalSelect[TSlug]\n\nexport type BeforeValidateHook = (args: {\n context: RequestContext\n data?: any\n /** The global which this hook is being run on */\n global: SanitizedGlobalConfig\n originalDoc?: any\n req: PayloadRequest\n}) => any\n\nexport type BeforeChangeHook = (args: {\n context: RequestContext\n data: any\n /** The global which this hook is being run on */\n global: SanitizedGlobalConfig\n originalDoc?: any\n req: PayloadRequest\n}) => any\n\nexport type AfterChangeHook = (args: {\n context: RequestContext\n data: any\n doc: any\n /** The global which this hook is being run on */\n global: SanitizedGlobalConfig\n previousDoc: any\n req: PayloadRequest\n}) => any\n\nexport type BeforeReadHook = (args: {\n context: RequestContext\n doc: any\n /** The global which this hook is being run on */\n global: SanitizedGlobalConfig\n req: PayloadRequest\n}) => any\n\nexport type AfterReadHook = (args: {\n context: RequestContext\n doc: any\n findMany?: boolean\n /** The global which this hook is being run on */\n global: SanitizedGlobalConfig\n query?: Where\n req: PayloadRequest\n}) => any\n\nexport type HookOperationType = 'countVersions' | 'read' | 'restoreVersion' | 'update'\n\nexport type BeforeOperationHook = (args: {\n args?: any\n context: RequestContext\n /**\n * The Global which this hook is being run on\n * */\n global: SanitizedGlobalConfig\n /**\n * Hook operation being performed\n */\n operation: HookOperationType\n req: PayloadRequest\n}) => any\n\nexport type GlobalAdminOptions = {\n /**\n * Custom admin components\n */\n components?: {\n elements?: {\n /**\n * Inject custom components before the document controls\n */\n beforeDocumentControls?: CustomComponent[]\n Description?: EntityDescriptionComponent\n /**\n * Replaces the \"Preview\" button\n */\n PreviewButton?: CustomPreviewButton\n /**\n * Replaces the \"Publish\" button\n * + drafts must be enabled\n */\n PublishButton?: CustomPublishButton\n /**\n * Replaces the \"Save\" button\n * + drafts must be disabled\n */\n SaveButton?: CustomSaveButton\n /**\n * Replaces the \"Save Draft\" button\n * + drafts must be enabled\n * + autosave must be disabled\n */\n SaveDraftButton?: CustomSaveDraftButton\n }\n views?: {\n /**\n * Set to a React component to replace the entire Edit View, including all nested routes.\n * Set to an object to replace or modify individual nested routes, or to add new ones.\n */\n edit?: EditConfig\n }\n }\n /** Extension point to add your custom data. Available in server and client. */\n custom?: GlobalAdminCustom\n /**\n * Custom description for collection\n */\n description?: EntityDescription\n /**\n * Specify a navigational group for globals in the admin sidebar.\n * - Provide a string to place the entity in a custom group.\n * - Provide a record to define localized group names.\n * - Set to `false` to exclude the entity from the sidebar / dashboard without disabling its routes.\n */\n group?: false | Record<string, string> | string\n /**\n * Exclude the global from the admin nav and routes\n */\n hidden?: ((args: { user: PayloadRequest['user'] }) => boolean) | boolean\n /**\n * Hide the API URL within the Edit View\n */\n hideAPIURL?: boolean\n /**\n * Live preview options\n */\n livePreview?: LivePreviewConfig\n meta?: MetaConfig\n /**\n * Function to generate custom preview URL\n */\n preview?: GeneratePreviewURL\n}\n\nexport type GlobalConfig<TSlug extends GlobalSlug = any> = {\n /**\n * Do not set this property manually. This is set to true during sanitization, to avoid\n * sanitizing the same global multiple times.\n */\n _sanitized?: boolean\n access?: {\n read?: Access\n readDrafts?: Access\n readVersions?: Access\n update?: Access\n }\n admin?: GlobalAdminOptions\n /** Extension point to add your custom data. Server only. */\n custom?: GlobalCustom\n /**\n * Customize the SQL table name\n */\n dbName?: DBIdentifierName\n endpoints?: false | Omit<Endpoint, 'root'>[]\n fields: Field[]\n /**\n * Specify which fields should be selected always, regardless of the `select` query which can be useful that the field exists for access control / hooks\n */\n forceSelect?: IsAny<SelectFromGlobalSlug<TSlug>> extends true\n ? SelectIncludeType\n : SelectFromGlobalSlug<TSlug>\n graphQL?:\n | {\n disableMutations?: true\n disableQueries?: true\n name?: string\n }\n | false\n hooks?: {\n afterChange?: AfterChangeHook[]\n afterRead?: AfterReadHook[]\n beforeChange?: BeforeChangeHook[]\n beforeOperation?: BeforeOperationHook[]\n beforeRead?: BeforeReadHook[]\n beforeValidate?: BeforeValidateHook[]\n }\n label?: LabelFunction | StaticLabel\n /**\n * Enables / Disables the ability to lock documents while editing\n * @default true\n */\n lockDocuments?:\n | {\n duration: number\n }\n | false\n slug: string\n /**\n * Options used in typescript generation\n */\n typescript?: {\n /**\n * Typescript generation name given to the interface type\n */\n interface?: string\n }\n versions?: boolean | IncomingGlobalVersions\n}\n\nexport interface SanitizedGlobalConfig\n extends Omit<DeepRequired<GlobalConfig>, 'endpoints' | 'fields' | 'slug' | 'versions'> {\n endpoints: Endpoint[] | false\n fields: Field[]\n /**\n * Fields in the database schema structure\n * Rows / collapsible / tabs w/o name `fields` merged to top, UIs are excluded\n */\n flattenedFields: FlattenedField[]\n slug: GlobalSlug\n versions?: SanitizedGlobalVersions\n}\n\nexport type Globals = {\n config: SanitizedGlobalConfig[]\n graphQL?:\n | {\n [slug: string]: {\n mutationInputType: GraphQLNonNull<any>\n type: GraphQLObjectType\n versionType?: GraphQLObjectType\n }\n }\n | false\n}\n"],"names":[],"mappings":"AAAA,qDAAqD,GA4PrD,WAWC"}
|
package/dist/index.bundled.d.ts
CHANGED
|
@@ -2094,7 +2094,7 @@ interface SanitizedGlobalConfig extends Omit<DeepRequired<GlobalConfig>, 'endpoi
|
|
|
2094
2094
|
*/
|
|
2095
2095
|
flattenedFields: FlattenedField$1[];
|
|
2096
2096
|
slug: GlobalSlug;
|
|
2097
|
-
versions
|
|
2097
|
+
versions?: SanitizedGlobalVersions;
|
|
2098
2098
|
}
|
|
2099
2099
|
type Globals = {
|
|
2100
2100
|
config: SanitizedGlobalConfig[];
|
|
@@ -8197,6 +8197,8 @@ type AfterOperationArg<TOperationGeneric extends CollectionSlug> = {
|
|
|
8197
8197
|
args: Parameters<OperationMap<TOperationGeneric>['find']>[0];
|
|
8198
8198
|
/**
|
|
8199
8199
|
* @deprecated Use 'find' or 'findByID' operation instead
|
|
8200
|
+
*
|
|
8201
|
+
* TODO: v4 - remove this union option
|
|
8200
8202
|
*/
|
|
8201
8203
|
operation: 'read';
|
|
8202
8204
|
result: Awaited<ReturnType<OperationMap<TOperationGeneric>['find']>>;
|
|
@@ -8262,6 +8264,8 @@ type BeforeOperationArg<TOperationGeneric extends CollectionSlug> = {
|
|
|
8262
8264
|
args: Parameters<OperationMap<TOperationGeneric>['find']>[0] | Parameters<OperationMap<TOperationGeneric>['findByID']>[0];
|
|
8263
8265
|
/**
|
|
8264
8266
|
* @deprecated Use 'find' or 'findByID' operation instead
|
|
8267
|
+
*
|
|
8268
|
+
* TODO: v4 - remove this union option
|
|
8265
8269
|
*/
|
|
8266
8270
|
operation: 'read';
|
|
8267
8271
|
} | {
|
|
@@ -8287,10 +8291,15 @@ type BeforeOperationArg<TOperationGeneric extends CollectionSlug> = {
|
|
|
8287
8291
|
operation: 'findByID';
|
|
8288
8292
|
} | {
|
|
8289
8293
|
args: Parameters<OperationMap<TOperationGeneric>['findDistinct']>[0];
|
|
8290
|
-
|
|
8294
|
+
/**
|
|
8295
|
+
* @deprecated Use 'findDistinct' operation instead
|
|
8296
|
+
*
|
|
8297
|
+
* TODO: v4 - remove this union option
|
|
8298
|
+
*/
|
|
8299
|
+
operation: 'readDistinct';
|
|
8291
8300
|
} | {
|
|
8292
8301
|
args: Parameters<OperationMap<TOperationGeneric>['findDistinct']>[0];
|
|
8293
|
-
operation: '
|
|
8302
|
+
operation: 'findDistinct';
|
|
8294
8303
|
} | {
|
|
8295
8304
|
args: Parameters<OperationMap<TOperationGeneric>['findVersionByID']>[0];
|
|
8296
8305
|
operation: 'findVersionByID';
|
|
@@ -3,8 +3,9 @@ type Args = {
|
|
|
3
3
|
collectionSlug: string;
|
|
4
4
|
filename: string;
|
|
5
5
|
path: string;
|
|
6
|
+
prefix?: string;
|
|
6
7
|
req: PayloadRequest;
|
|
7
8
|
};
|
|
8
|
-
export declare const docWithFilenameExists: ({ collectionSlug, filename, req, }: Args) => Promise<boolean>;
|
|
9
|
+
export declare const docWithFilenameExists: ({ collectionSlug, filename, prefix, req, }: Args) => Promise<boolean>;
|
|
9
10
|
export {};
|
|
10
11
|
//# sourceMappingURL=docWithFilenameExists.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docWithFilenameExists.d.ts","sourceRoot":"","sources":["../../src/uploads/docWithFilenameExists.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"docWithFilenameExists.d.ts","sourceRoot":"","sources":["../../src/uploads/docWithFilenameExists.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAS,MAAM,mBAAmB,CAAA;AAE9D,KAAK,IAAI,GAAG;IACV,cAAc,EAAE,MAAM,CAAA;IACtB,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,GAAG,EAAE,cAAc,CAAA;CACpB,CAAA;AAED,eAAO,MAAM,qBAAqB,+CAK/B,IAAI,KAAG,OAAO,CAAC,OAAO,CAkBxB,CAAA"}
|
|
@@ -1,17 +1,20 @@
|
|
|
1
|
-
export const docWithFilenameExists = async ({ collectionSlug, filename, req })=>{
|
|
1
|
+
export const docWithFilenameExists = async ({ collectionSlug, filename, prefix, req })=>{
|
|
2
|
+
const where = {
|
|
3
|
+
filename: {
|
|
4
|
+
equals: filename
|
|
5
|
+
}
|
|
6
|
+
};
|
|
7
|
+
if (prefix) {
|
|
8
|
+
where.prefix = {
|
|
9
|
+
equals: prefix
|
|
10
|
+
};
|
|
11
|
+
}
|
|
2
12
|
const doc = await req.payload.db.findOne({
|
|
3
13
|
collection: collectionSlug,
|
|
4
14
|
req,
|
|
5
|
-
where
|
|
6
|
-
filename: {
|
|
7
|
-
equals: filename
|
|
8
|
-
}
|
|
9
|
-
}
|
|
15
|
+
where
|
|
10
16
|
});
|
|
11
|
-
|
|
12
|
-
return true;
|
|
13
|
-
}
|
|
14
|
-
return false;
|
|
17
|
+
return !!doc;
|
|
15
18
|
};
|
|
16
19
|
|
|
17
20
|
//# sourceMappingURL=docWithFilenameExists.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/uploads/docWithFilenameExists.ts"],"sourcesContent":["import type { PayloadRequest } from '../types/index.js'\n\ntype Args = {\n collectionSlug: string\n filename: string\n path: string\n req: PayloadRequest\n}\n\nexport const docWithFilenameExists = async ({\n collectionSlug,\n filename,\n req,\n}: Args): Promise<boolean> => {\n const
|
|
1
|
+
{"version":3,"sources":["../../src/uploads/docWithFilenameExists.ts"],"sourcesContent":["import type { PayloadRequest, Where } from '../types/index.js'\n\ntype Args = {\n collectionSlug: string\n filename: string\n path: string\n prefix?: string\n req: PayloadRequest\n}\n\nexport const docWithFilenameExists = async ({\n collectionSlug,\n filename,\n prefix,\n req,\n}: Args): Promise<boolean> => {\n const where: Where = {\n filename: {\n equals: filename,\n },\n }\n\n if (prefix) {\n where.prefix = { equals: prefix }\n }\n\n const doc = await req.payload.db.findOne({\n collection: collectionSlug,\n req,\n where,\n })\n\n return !!doc\n}\n"],"names":["docWithFilenameExists","collectionSlug","filename","prefix","req","where","equals","doc","payload","db","findOne","collection"],"mappings":"AAUA,OAAO,MAAMA,wBAAwB,OAAO,EAC1CC,cAAc,EACdC,QAAQ,EACRC,MAAM,EACNC,GAAG,EACE;IACL,MAAMC,QAAe;QACnBH,UAAU;YACRI,QAAQJ;QACV;IACF;IAEA,IAAIC,QAAQ;QACVE,MAAMF,MAAM,GAAG;YAAEG,QAAQH;QAAO;IAClC;IAEA,MAAMI,MAAM,MAAMH,IAAII,OAAO,CAACC,EAAE,CAACC,OAAO,CAAC;QACvCC,YAAYV;QACZG;QACAC;IACF;IAEA,OAAO,CAAC,CAACE;AACX,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateFileData.d.ts","sourceRoot":"","sources":["../../src/uploads/generateFileData.ts"],"names":[],"mappings":"AAMA,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,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,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;AA6BF,eAAO,MAAM,gBAAgB,GAAU,CAAC,+IASrC,IAAI,CAAC,CAAC,CAAC,KAAG,MAAM,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"generateFileData.d.ts","sourceRoot":"","sources":["../../src/uploads/generateFileData.ts"],"names":[],"mappings":"AAMA,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,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,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;AA6BF,eAAO,MAAM,gBAAgB,GAAU,CAAC,+IASrC,IAAI,CAAC,CAAC,CAAC,KAAG,MAAM,CAAC,CAAC,CAuUpB,CAAA"}
|
|
@@ -178,9 +178,12 @@ export const generateFileData = async ({ collection: { config: collectionConfig
|
|
|
178
178
|
const baseFilename = sanitize(file.name.substring(0, file.name.lastIndexOf('.')) || file.name);
|
|
179
179
|
fsSafeName = `${baseFilename}${ext ? `.${ext}` : ''}`;
|
|
180
180
|
if (!overwriteExistingFiles) {
|
|
181
|
+
// Extract prefix if present (added by plugin-cloud-storage)
|
|
182
|
+
const prefix = data?.prefix;
|
|
181
183
|
fsSafeName = await getSafeFileName({
|
|
182
184
|
collectionSlug: collectionConfig.slug,
|
|
183
185
|
desiredFilename: fsSafeName,
|
|
186
|
+
prefix,
|
|
184
187
|
req,
|
|
185
188
|
staticPath: staticPath
|
|
186
189
|
});
|
|
@@ -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/promises'\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, Forbidden, MissingFile } from '../errors/index.js'\nimport { canResizeImage } from './canResizeImage.js'\nimport { checkFileRestrictions } from './checkFileRestrictions.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'\ntype Args<T> = {\n collection: Collection\n config: SanitizedConfig\n data: T\n isDuplicating?: boolean\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\nconst shouldReupload = (\n uploadEdits: UploadEdits,\n fileData: Record<string, unknown> | undefined,\n) => {\n if (!fileData) {\n return false\n }\n\n if (uploadEdits.crop || uploadEdits.heightInPixels || uploadEdits.widthInPixels) {\n return true\n }\n\n // Since uploadEdits always has focalPoint, compare to the value in the data if it was changed\n if (uploadEdits.focalPoint) {\n const incomingFocalX = uploadEdits.focalPoint.x\n const incomingFocalY = uploadEdits.focalPoint.y\n\n const currentFocalX = 'focalX' in fileData && fileData.focalX\n const currentFocalY = 'focalY' in fileData && fileData.focalY\n\n const isEqual = incomingFocalX === currentFocalX && incomingFocalY === currentFocalY\n return !isEqual\n }\n\n return false\n}\n\nexport const generateFileData = async <T>({\n collection: { config: collectionConfig },\n data,\n isDuplicating,\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 isDuplicating,\n operation,\n originalDoc,\n req,\n })\n\n const {\n constructorOptions,\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 const incomingFileData = isDuplicating ? originalDoc : data\n\n if (\n !file &&\n (isDuplicating || shouldReupload(uploadEdits, incomingFileData as Record<string, unknown>))\n ) {\n const { filename, url } = incomingFileData as unknown as FileData\n\n if (filename && (filename.includes('../') || filename.includes('..\\\\'))) {\n throw new Forbidden(req.t)\n }\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: incomingFileData as unknown 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 (isDuplicating) {\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 await checkFileRestrictions({\n collection: collectionConfig,\n file,\n req,\n })\n\n if (!disableLocalStorage) {\n await fs.mkdir(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(\n resizeOptions || formatOptions || trimOptions || constructorOptions || file.tempFilePath,\n )\n\n const sharpOptions: SharpOptions = { ...constructorOptions }\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: 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: 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: 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 && !resizeOptions.withoutEnlargement) {\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.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.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: 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 isDuplicating?: boolean\n operation: 'create' | 'update'\n originalDoc: unknown\n req: PayloadRequest\n}): UploadEdits {\n const { data, isDuplicating, 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 (origDoc && 'focalX' in origDoc && 'focalY' in origDoc) {\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 (incomingData.focalX === origDoc.focalX && incomingData.focalY === origDoc.focalY) {\n return undefined!\n }\n\n if (isDuplicating) {\n uploadEdits.focalPoint = {\n x: incomingData?.focalX || origDoc.focalX!,\n y: incomingData?.focalY || origDoc.focalX!,\n }\n }\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\n return uploadEdits\n}\n"],"names":["fileTypeFromBuffer","fs","sanitize","FileRetrievalError","FileUploadError","Forbidden","MissingFile","canResizeImage","checkFileRestrictions","cropImage","getExternalFile","getFileByPath","getImageSize","getSafeFileName","resizeAndTransformImageSizes","isImage","optionallyAppendMetadata","shouldReupload","uploadEdits","fileData","crop","heightInPixels","widthInPixels","focalPoint","incomingFocalX","x","incomingFocalY","y","currentFocalX","focalX","currentFocalY","focalY","isEqual","generateFileData","collection","config","collectionConfig","data","isDuplicating","operation","originalDoc","overwriteExistingFiles","req","throwOnMissingFile","upload","files","sharp","payload","file","parseUploadEditsFromReqOrIncomingData","constructorOptions","disableLocalStorage","focalPointEnabled","formatOptions","imageSizes","resizeOptions","staticDir","trimOptions","withMetadata","staticPath","incomingFileData","filename","url","includes","t","startsWith","filePath","response","uploadConfig","err","Error","message","undefined","mkdir","recursive","newData","filesToSave","fileIsAnimatedType","mimetype","cropData","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","withoutEnlargement","resizedAfterCrop","fit","position","push","buffer","path","writeFile","Array","isArray","payloadUploadSizes","sizeData","sizesToSave","savedFilename","sizes","logger","error","args","query","incomingData","origDoc"],"mappings":"AAEA,SAASA,kBAAkB,QAAQ,YAAW;AAC9C,OAAOC,QAAQ,cAAa;AAC5B,OAAOC,cAAc,oBAAmB;AAOxC,SAASC,kBAAkB,EAAEC,eAAe,EAAEC,SAAS,EAAEC,WAAW,QAAQ,qBAAoB;AAChG,SAASC,cAAc,QAAQ,sBAAqB;AACpD,SAASC,qBAAqB,QAAQ,6BAA4B;AAClE,SAASC,SAAS,QAAQ,iBAAgB;AAC1C,SAASC,eAAe,QAAQ,uBAAsB;AACtD,SAASC,aAAa,QAAQ,qBAAoB;AAClD,SAASC,YAAY,QAAQ,oBAAmB;AAChD,SAASC,eAAe,QAAQ,uBAAsB;AACtD,SAASC,4BAA4B,QAAQ,oBAAmB;AAChE,SAASC,OAAO,QAAQ,eAAc;AACtC,SAASC,wBAAwB,QAAQ,gCAA+B;AAkBxE,MAAMC,iBAAiB,CACrBC,aACAC;IAEA,IAAI,CAACA,UAAU;QACb,OAAO;IACT;IAEA,IAAID,YAAYE,IAAI,IAAIF,YAAYG,cAAc,IAAIH,YAAYI,aAAa,EAAE;QAC/E,OAAO;IACT;IAEA,8FAA8F;IAC9F,IAAIJ,YAAYK,UAAU,EAAE;QAC1B,MAAMC,iBAAiBN,YAAYK,UAAU,CAACE,CAAC;QAC/C,MAAMC,iBAAiBR,YAAYK,UAAU,CAACI,CAAC;QAE/C,MAAMC,gBAAgB,YAAYT,YAAYA,SAASU,MAAM;QAC7D,MAAMC,gBAAgB,YAAYX,YAAYA,SAASY,MAAM;QAE7D,MAAMC,UAAUR,mBAAmBI,iBAAiBF,mBAAmBI;QACvE,OAAO,CAACE;IACV;IAEA,OAAO;AACT;AAEA,OAAO,MAAMC,mBAAmB,OAAU,EACxCC,YAAY,EAAEC,QAAQC,gBAAgB,EAAE,EACxCC,IAAI,EACJC,aAAa,EACbC,SAAS,EACTC,WAAW,EACXC,sBAAsB,EACtBC,GAAG,EACHC,kBAAkB,EACV;IACR,IAAI,CAACP,iBAAiBQ,MAAM,EAAE;QAC5B,OAAO;YACLP;YACAQ,OAAO,EAAE;QACX;IACF;IAEA,MAAM,EAAEC,KAAK,EAAE,GAAGJ,IAAIK,OAAO,CAACZ,MAAM;IAEpC,IAAIa,OAAON,IAAIM,IAAI;IAEnB,MAAM9B,cAAc+B,sCAAsC;QACxDZ;QACAC;QACAC;QACAC;QACAE;IACF;IAEA,MAAM,EACJQ,kBAAkB,EAClBC,mBAAmB,EACnB5B,YAAY6B,oBAAoB,IAAI,EACpCC,aAAa,EACbC,UAAU,EACVC,aAAa,EACbC,SAAS,EACTC,WAAW,EACXC,YAAY,EACb,GAAGtB,iBAAiBQ,MAAM;IAE3B,MAAMe,aAAaH;IAEnB,MAAMI,mBAAmBtB,gBAAgBE,cAAcH;IAEvD,IACE,CAACW,QACAV,CAAAA,iBAAiBrB,eAAeC,aAAa0C,iBAA2C,GACzF;QACA,MAAM,EAAEC,QAAQ,EAAEC,GAAG,EAAE,GAAGF;QAE1B,IAAIC,YAAaA,CAAAA,SAASE,QAAQ,CAAC,UAAUF,SAASE,QAAQ,CAAC,OAAM,GAAI;YACvE,MAAM,IAAI1D,UAAUqC,IAAIsB,CAAC;QAC3B;QAEA,IAAI;YACF,IAAIF,OAAOA,IAAIG,UAAU,CAAC,QAAQ,CAACd,qBAAqB;gBACtD,MAAMe,WAAW,GAAGP,WAAW,CAAC,EAAEE,UAAU;gBAC5C,MAAMM,WAAW,MAAMxD,cAAcuD;gBACrClB,OAAOmB;gBACP1B,yBAAyB;YAC3B,OAAO,IAAIoB,YAAYC,KAAK;gBAC1Bd,OAAO,MAAMtC,gBAAgB;oBAC3B2B,MAAMuB;oBACNlB;oBACA0B,cAAchC,iBAAiBQ,MAAM;gBACvC;gBACAH,yBAAyB;YAC3B;QACF,EAAE,OAAO4B,KAAc;YACrB,MAAM,IAAIlE,mBAAmBuC,IAAIsB,CAAC,EAAEK,eAAeC,QAAQD,IAAIE,OAAO,GAAGC;QAC3E;IACF;IAEA,IAAIlC,eAAe;QACjBG,yBAAyB;IAC3B;IAEA,IAAI,CAACO,MAAM;QACT,IAAIL,oBAAoB;YACtB,MAAM,IAAIrC,YAAYoC,IAAIsB,CAAC;QAC7B;QAEA,OAAO;YACL3B;YACAQ,OAAO,EAAE;QACX;IACF;IAEA,MAAMrC,sBAAsB;QAC1B0B,YAAYE;QACZY;QACAN;IACF;IAEA,IAAI,CAACS,qBAAqB;QACxB,MAAMlD,GAAGwE,KAAK,CAACd,YAAa;YAAEe,WAAW;QAAK;IAChD;IAEA,IAAIC,UAAUtC;IACd,MAAMuC,cAA4B,EAAE;IACpC,MAAMzD,WAA8B,CAAC;IACrC,MAAM0D,qBAAqB;QAAC;QAAc;QAAa;KAAa,CAACd,QAAQ,CAACf,KAAK8B,QAAQ;IAC3F,MAAMC,WACJ,OAAO7D,gBAAgB,YAAY,UAAUA,cAAcA,YAAYE,IAAI,GAAGoD;IAEhF,IAAI;QACF,MAAMQ,qBAAqBzE,eAAeyC,KAAK8B,QAAQ;QACvD,IAAIG;QACJ,IAAIC;QACJ,IAAIC;QACJ,IAAIC;QACJ,IAAIC;QACJ,IAAIC;QACJ,MAAMC,qBACJP,sBACAQ,QACEjC,iBAAiBF,iBAAiBI,eAAeP,sBAAsBF,KAAKyC,YAAY;QAG5F,MAAMC,eAA6B;YAAE,GAAGxC,kBAAkB;QAAC;QAE3D,IAAI2B,oBAAoB;YACtBa,aAAaC,QAAQ,GAAG;QAC1B;QAEA,IAAI7C,SAAU+B,CAAAA,sBAAsBU,kBAAiB,GAAI;YACvD,IAAIvC,KAAKyC,YAAY,EAAE;gBACrBP,YAAYpC,MAAME,KAAKyC,YAAY,EAAEC,cAAcE,MAAM,IAAG,mGAAmG;YACjK,OAAO;gBACLV,YAAYpC,MAAME,KAAKX,IAAI,EAAEqD,cAAcE,MAAM,IAAG,mGAAmG;YACzJ;YAEA,IAAIL,oBAAoB;gBACtB,IAAIhC,eAAe;oBACjB2B,YAAYA,UAAUW,MAAM,CAACtC;gBAC/B;gBACA,IAAIF,eAAe;oBACjB6B,YAAYA,UAAUY,QAAQ,CAACzC,cAAc0C,MAAM,EAAE1C,cAAc2C,OAAO;gBAC5E;gBACA,IAAIvC,aAAa;oBACfyB,YAAYA,UAAUe,IAAI,CAACxC;gBAC7B;YACF;QACF;QAEA,IAAIuB,sBAAsBjE,QAAQiC,KAAK8B,QAAQ,GAAG;YAChDK,aAAa,MAAMvE,aAAaoC;YAChC7B,SAAS+E,KAAK,GAAGf,WAAWe,KAAK;YACjC/E,SAASgF,MAAM,GAAGhB,WAAWgB,MAAM;QACrC;QAEA,IAAIjB,WAAW;YACb,MAAMkB,WAAW,MAAMlB,UAAUkB,QAAQ;YACzClB,YAAY,MAAMlE,yBAAyB;gBACzC0B;gBACAwC;gBACAxB,cAAcA;YAChB;YACA0B,aAAa,MAAMF,UAAUmB,QAAQ,CAAC;gBAAEC,mBAAmB;YAAK;YAC9D,CAAA,EAAEjB,GAAG,EAAEC,IAAI,EAAE,GAAI,MAAMtF,mBAAmBoF,WAAW/C,IAAI,EAAK,gDAAgD;YAAnD;YAC7DlB,SAAS+E,KAAK,GAAGd,WAAWmB,IAAI,CAACL,KAAK;YACtC/E,SAASgF,MAAM,GAAGf,WAAWmB,IAAI,CAACJ,MAAM;YACxChF,SAASqF,QAAQ,GAAGpB,WAAWmB,IAAI,CAACE,IAAI;YAExC,0GAA0G;YAC1G,IAAIL,SAASM,KAAK,EAAE;gBAClBvF,SAASgF,MAAM,GAAGf,WAAWmB,IAAI,CAACJ,MAAM,GAAGC,SAASM,KAAK;gBACzDvF,SAASqF,QAAQ,GAAGpB,WAAW/C,IAAI,CAACsE,MAAM;YAC5C;QACF,OAAO;YACLrB,OAAOtC,KAAK8B,QAAQ;YACpB3D,SAASqF,QAAQ,GAAGxD,KAAKyD,IAAI;YAE7B,IAAIzD,KAAK4D,IAAI,CAAC7C,QAAQ,CAAC,MAAM;gBAC3BsB,MAAMrC,KAAK4D,IAAI,CAACC,KAAK,CAAC,KAAKC,GAAG,IAAID,MAAM,IAAI,CAAC,EAAE;YACjD,OAAO;gBACLxB,MAAM;YACR;QACF;QAEA,gDAAgD;QAChD,IAAIC,SAAS,qBAAqBD,QAAQ,OAAO;YAC/CC,OAAO;QACT;QACAnE,SAAS4F,QAAQ,GAAGzB;QAEpB,MAAM0B,eAAe9G,SAAS8C,KAAK4D,IAAI,CAACK,SAAS,CAAC,GAAGjE,KAAK4D,IAAI,CAACM,WAAW,CAAC,SAASlE,KAAK4D,IAAI;QAC7F3B,aAAa,GAAG+B,eAAe3B,MAAM,CAAC,CAAC,EAAEA,KAAK,GAAG,IAAI;QAErD,IAAI,CAAC5C,wBAAwB;YAC3BwC,aAAa,MAAMpE,gBAAgB;gBACjCsG,gBAAgB/E,iBAAiBgF,IAAI;gBACrCC,iBAAiBpC;gBACjBvC;gBACAiB,YAAYA;YACd;QACF;QAEAxC,SAAS0C,QAAQ,GAAGoB;QACpB,IAAIqC,gBAAgBtE;QAEpB,IAAI+B,YAAYjC,OAAO;YACrB,MAAM,EAAET,MAAMkF,YAAY,EAAEhB,IAAI,EAAE,GAAG,MAAM9F,UAAU;gBACnDsE;gBACAI,YAAYA;gBACZnC;gBACA3B,gBAAgBH,YAAYG,cAAc;gBAC1CqB;gBACAI;gBACAxB,eAAeJ,YAAYI,aAAa;gBACxCoC;YACF;YAEA,qEAAqE;YACrE,IAAIH,iBAAiB,CAACA,cAAciE,kBAAkB,EAAE;gBACtD,MAAMC,mBAAmB,MAAM3E,MAAMyE,cAClC1B,MAAM,CAAC;oBACN6B,KAAKnE,eAAemE,OAAO;oBAC3BvB,QAAQ5C,eAAe4C;oBACvBwB,UAAUpE,eAAeoE,YAAY;oBACrCzB,OAAO3C,eAAe2C;gBACxB,GACCG,QAAQ,CAAC;oBAAEC,mBAAmB;gBAAK;gBAEtC1B,YAAYgD,IAAI,CAAC;oBACfC,QAAQJ,iBAAiBpF,IAAI;oBAC7ByF,MAAM,GAAGnE,WAAW,CAAC,EAAEsB,YAAY;gBACrC;gBAEAqC,gBAAgB;oBACd,GAAGA,aAAa;oBAChBjF,MAAMoF,iBAAiBpF,IAAI;oBAC3BoE,MAAMgB,iBAAiBlB,IAAI,CAACE,IAAI;gBAClC;gBAEAtF,SAAS+E,KAAK,GAAGuB,iBAAiBlB,IAAI,CAACL,KAAK;gBAC5C/E,SAASgF,MAAM,GAAGsB,iBAAiBlB,IAAI,CAACJ,MAAM;gBAC9C,IAAItB,oBAAoB;oBACtB,MAAMuB,WAAW,MAAMlB,UAAWkB,QAAQ;oBAC1CjF,SAASgF,MAAM,GAAGC,SAASM,KAAK,GAC5Be,iBAAiBlB,IAAI,CAACJ,MAAM,GAAGC,SAASM,KAAK,GAC7Ce,iBAAiBlB,IAAI,CAACJ,MAAM;gBAClC;gBACAhF,SAASqF,QAAQ,GAAGiB,iBAAiBlB,IAAI,CAACE,IAAI;YAChD,OAAO;gBACL,+DAA+D;gBAC/D7B,YAAYgD,IAAI,CAAC;oBACfC,QAAQN;oBACRO,MAAM,GAAGnE,WAAW,CAAC,EAAEsB,YAAY;gBACrC;gBAEAqC,gBAAgB;oBACd,GAAGtE,IAAI;oBACPX,MAAMkF;oBACNd,MAAMF,KAAKE,IAAI;gBACjB;gBAEAtF,SAAS+E,KAAK,GAAGK,KAAKL,KAAK;gBAC3B/E,SAASgF,MAAM,GAAGI,KAAKJ,MAAM;gBAC7B,IAAItB,oBAAoB;oBACtB,MAAMuB,WAAW,MAAMlB,UAAWkB,QAAQ;oBAC1CjF,SAASgF,MAAM,GAAGC,SAASM,KAAK,GAAGH,KAAKJ,MAAM,GAAGC,SAASM,KAAK,GAAGH,KAAKJ,MAAM;gBAC/E;gBACAhF,SAASqF,QAAQ,GAAGD,KAAKE,IAAI;YAC/B;YAEA,IAAIzD,KAAKyC,YAAY,EAAE;gBACrB,MAAMxF,GAAG8H,SAAS,CAAC/E,KAAKyC,YAAY,EAAE8B,eAAc,oCAAoC;YAC1F,OAAO;gBACL7E,IAAIM,IAAI,GAAGsE;YACb;QACF,OAAO;YACL1C,YAAYgD,IAAI,CAAC;gBACfC,QAAQzC,YAAY/C,QAAQW,KAAKX,IAAI;gBACrCyF,MAAM,GAAGnE,WAAW,CAAC,EAAEsB,YAAY;YACrC;YAEA,sFAAsF;YACtF,IAAIG,YAAY/C,QAAQW,KAAKX,IAAI,CAACsE,MAAM,GAAG,GAAG;gBAC5C,IAAI3D,KAAKyC,YAAY,EAAE;oBACrB,MAAMxF,GAAG8H,SAAS,CAAC/E,KAAKyC,YAAY,EAAEL,YAAY/C,QAAQW,KAAKX,IAAI,GAAE,oCAAoC;gBAC3G,OAAO;oBACL,4DAA4D;oBAC5DK,IAAIM,IAAI,GAAG;wBACT,GAAGA,IAAI;wBACPX,MAAM+C,YAAY/C,QAAQW,KAAKX,IAAI;wBACnCoE,MAAMrB,YAAYmB,KAAKE;oBACzB;gBACF;YACF;QACF;QAEA,IAAIzB,sBAAuBgD,CAAAA,MAAMC,OAAO,CAAC3E,eAAeF,sBAAsB,KAAI,GAAI;YACpFV,IAAIwF,kBAAkB,GAAG,CAAC;YAC1B,MAAM,EAAE3G,UAAU,EAAE4G,QAAQ,EAAEC,WAAW,EAAE,GAAG,MAAMtH,6BAA6B;gBAC/EqB,QAAQC;gBACR+C,YAAY,CAACJ,WACTI,aACA;oBACE,GAAGA,UAAU;oBACbgB,QAAQhF,SAASgF,MAAM;oBACvBD,OAAO/E,SAAS+E,KAAK;gBACvB;gBACJlD,MAAMsE;gBACNP,UAAU5F,SAAS4F,QAAQ;gBAC3BrE;gBACA2F,eAAepD,cAAcjC,KAAK4D,IAAI;gBACtC9D;gBACAa,YAAYA;gBACZzC;gBACAwC;YACF;YAEAvC,SAASmH,KAAK,GAAGH;YACjBhH,SAASU,MAAM,GAAGN,YAAYE;YAC9BN,SAASY,MAAM,GAAGR,YAAYI;YAC9BiD,YAAYgD,IAAI,IAAIQ;QACtB;IACF,EAAE,OAAO/D,KAAK;QACZ3B,IAAIK,OAAO,CAACwF,MAAM,CAACC,KAAK,CAACnE;QACzB,MAAM,IAAIjE,gBAAgBsC,IAAIsB,CAAC;IACjC;IAEAW,UAAU;QACR,GAAGA,OAAO;QACV,GAAGxD,QAAQ;IACb;IAEA,OAAO;QACLkB,MAAMsC;QACN9B,OAAO+B;IACT;AACF,EAAC;AAED;;CAEC,GACD,SAAS3B,sCAAsCwF,IAM9C;IACC,MAAM,EAAEpG,IAAI,EAAEC,aAAa,EAAEC,SAAS,EAAEC,WAAW,EAAEE,GAAG,EAAE,GAAG+F;IAE7D,qEAAqE;IACrE,MAAMvH,cACJwB,IAAIgG,KAAK,EAAExH,eAAe,OAAOwB,IAAIgG,KAAK,CAACxH,WAAW,KAAK,WACtDwB,IAAIgG,KAAK,CAACxH,WAAW,GACtB,CAAC;IAEP,IAAIA,YAAYK,UAAU,EAAE;QAC1B,OAAOL;IACT;IAEA,MAAMyH,eAAetG;IACrB,MAAMuG,UAAUpG;IAEhB,IAAIoG,WAAW,YAAYA,WAAW,YAAYA,SAAS;QACzD,iDAAiD;QACjD,mGAAmG;QACnG,IAAID,aAAa9G,MAAM,KAAK+G,QAAQ/G,MAAM,IAAI8G,aAAa5G,MAAM,KAAK6G,QAAQ7G,MAAM,EAAE;YACpF,OAAOyC;QACT;QAEA,IAAIlC,eAAe;YACjBpB,YAAYK,UAAU,GAAG;gBACvBE,GAAGkH,cAAc9G,UAAU+G,QAAQ/G,MAAM;gBACzCF,GAAGgH,cAAc5G,UAAU6G,QAAQ/G,MAAM;YAC3C;QACF;IACF;IAEA,IAAI8G,cAAc9G,UAAU8G,cAAc5G,QAAQ;QAChDb,YAAYK,UAAU,GAAG;YACvBE,GAAGkH,aAAa9G,MAAM;YACtBF,GAAGgH,aAAa5G,MAAM;QACxB;QACA,OAAOb;IACT;IAEA,8CAA8C;IAC9C,IAAIqB,cAAc,UAAU;QAC1BrB,YAAYK,UAAU,GAAG;YACvBE,GAAG;YACHE,GAAG;QACL;IACF;IAEA,OAAOT;AACT"}
|
|
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/promises'\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, Forbidden, MissingFile } from '../errors/index.js'\nimport { canResizeImage } from './canResizeImage.js'\nimport { checkFileRestrictions } from './checkFileRestrictions.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'\ntype Args<T> = {\n collection: Collection\n config: SanitizedConfig\n data: T\n isDuplicating?: boolean\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\nconst shouldReupload = (\n uploadEdits: UploadEdits,\n fileData: Record<string, unknown> | undefined,\n) => {\n if (!fileData) {\n return false\n }\n\n if (uploadEdits.crop || uploadEdits.heightInPixels || uploadEdits.widthInPixels) {\n return true\n }\n\n // Since uploadEdits always has focalPoint, compare to the value in the data if it was changed\n if (uploadEdits.focalPoint) {\n const incomingFocalX = uploadEdits.focalPoint.x\n const incomingFocalY = uploadEdits.focalPoint.y\n\n const currentFocalX = 'focalX' in fileData && fileData.focalX\n const currentFocalY = 'focalY' in fileData && fileData.focalY\n\n const isEqual = incomingFocalX === currentFocalX && incomingFocalY === currentFocalY\n return !isEqual\n }\n\n return false\n}\n\nexport const generateFileData = async <T>({\n collection: { config: collectionConfig },\n data,\n isDuplicating,\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 isDuplicating,\n operation,\n originalDoc,\n req,\n })\n\n const {\n constructorOptions,\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 const incomingFileData = isDuplicating ? originalDoc : data\n\n if (\n !file &&\n (isDuplicating || shouldReupload(uploadEdits, incomingFileData as Record<string, unknown>))\n ) {\n const { filename, url } = incomingFileData as unknown as FileData\n\n if (filename && (filename.includes('../') || filename.includes('..\\\\'))) {\n throw new Forbidden(req.t)\n }\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: incomingFileData as unknown 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 (isDuplicating) {\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 await checkFileRestrictions({\n collection: collectionConfig,\n file,\n req,\n })\n\n if (!disableLocalStorage) {\n await fs.mkdir(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(\n resizeOptions || formatOptions || trimOptions || constructorOptions || file.tempFilePath,\n )\n\n const sharpOptions: SharpOptions = { ...constructorOptions }\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: 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 // Extract prefix if present (added by plugin-cloud-storage)\n const prefix = (data as Record<string, unknown>)?.prefix as string | undefined\n fsSafeName = await getSafeFileName({\n collectionSlug: collectionConfig.slug,\n desiredFilename: fsSafeName,\n prefix,\n req,\n staticPath: 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: 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 && !resizeOptions.withoutEnlargement) {\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.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.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: 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 isDuplicating?: boolean\n operation: 'create' | 'update'\n originalDoc: unknown\n req: PayloadRequest\n}): UploadEdits {\n const { data, isDuplicating, 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 (origDoc && 'focalX' in origDoc && 'focalY' in origDoc) {\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 (incomingData.focalX === origDoc.focalX && incomingData.focalY === origDoc.focalY) {\n return undefined!\n }\n\n if (isDuplicating) {\n uploadEdits.focalPoint = {\n x: incomingData?.focalX || origDoc.focalX!,\n y: incomingData?.focalY || origDoc.focalX!,\n }\n }\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\n return uploadEdits\n}\n"],"names":["fileTypeFromBuffer","fs","sanitize","FileRetrievalError","FileUploadError","Forbidden","MissingFile","canResizeImage","checkFileRestrictions","cropImage","getExternalFile","getFileByPath","getImageSize","getSafeFileName","resizeAndTransformImageSizes","isImage","optionallyAppendMetadata","shouldReupload","uploadEdits","fileData","crop","heightInPixels","widthInPixels","focalPoint","incomingFocalX","x","incomingFocalY","y","currentFocalX","focalX","currentFocalY","focalY","isEqual","generateFileData","collection","config","collectionConfig","data","isDuplicating","operation","originalDoc","overwriteExistingFiles","req","throwOnMissingFile","upload","files","sharp","payload","file","parseUploadEditsFromReqOrIncomingData","constructorOptions","disableLocalStorage","focalPointEnabled","formatOptions","imageSizes","resizeOptions","staticDir","trimOptions","withMetadata","staticPath","incomingFileData","filename","url","includes","t","startsWith","filePath","response","uploadConfig","err","Error","message","undefined","mkdir","recursive","newData","filesToSave","fileIsAnimatedType","mimetype","cropData","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","prefix","collectionSlug","slug","desiredFilename","fileForResize","croppedImage","withoutEnlargement","resizedAfterCrop","fit","position","push","buffer","path","writeFile","Array","isArray","payloadUploadSizes","sizeData","sizesToSave","savedFilename","sizes","logger","error","args","query","incomingData","origDoc"],"mappings":"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"}
|
|
@@ -2,9 +2,10 @@ import type { PayloadRequest } from '../types/index.js';
|
|
|
2
2
|
type Args = {
|
|
3
3
|
collectionSlug: string;
|
|
4
4
|
desiredFilename: string;
|
|
5
|
+
prefix?: string;
|
|
5
6
|
req: PayloadRequest;
|
|
6
7
|
staticPath: string;
|
|
7
8
|
};
|
|
8
|
-
export declare function getSafeFileName({ collectionSlug, desiredFilename, req, staticPath, }: Args): Promise<string>;
|
|
9
|
+
export declare function getSafeFileName({ collectionSlug, desiredFilename, prefix, req, staticPath, }: Args): Promise<string>;
|
|
9
10
|
export {};
|
|
10
11
|
//# sourceMappingURL=getSafeFilename.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getSafeFilename.d.ts","sourceRoot":"","sources":["../../src/uploads/getSafeFilename.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAsBvD,KAAK,IAAI,GAAG;IACV,cAAc,EAAE,MAAM,CAAA;IACtB,eAAe,EAAE,MAAM,CAAA;IACvB,GAAG,EAAE,cAAc,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,wBAAsB,eAAe,CAAC,EACpC,cAAc,EACd,eAAe,EACf,GAAG,EACH,UAAU,GACX,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"getSafeFilename.d.ts","sourceRoot":"","sources":["../../src/uploads/getSafeFilename.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAsBvD,KAAK,IAAI,GAAG;IACV,cAAc,EAAE,MAAM,CAAA;IACtB,eAAe,EAAE,MAAM,CAAA;IACvB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,GAAG,EAAE,cAAc,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,wBAAsB,eAAe,CAAC,EACpC,cAAc,EACd,eAAe,EACf,MAAM,EACN,GAAG,EACH,UAAU,GACX,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAgBxB"}
|
|
@@ -17,12 +17,13 @@ const incrementName = (name)=>{
|
|
|
17
17
|
}
|
|
18
18
|
return `${incrementedName}.${extension}`;
|
|
19
19
|
};
|
|
20
|
-
export async function getSafeFileName({ collectionSlug, desiredFilename, req, staticPath }) {
|
|
20
|
+
export async function getSafeFileName({ collectionSlug, desiredFilename, prefix, req, staticPath }) {
|
|
21
21
|
let modifiedFilename = desiredFilename;
|
|
22
22
|
while(await docWithFilenameExists({
|
|
23
23
|
collectionSlug,
|
|
24
24
|
filename: modifiedFilename,
|
|
25
25
|
path: staticPath,
|
|
26
|
+
prefix,
|
|
26
27
|
req
|
|
27
28
|
}) || await fileExists(`${staticPath}/${modifiedFilename}`)){
|
|
28
29
|
modifiedFilename = incrementName(modifiedFilename);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/uploads/getSafeFilename.ts"],"sourcesContent":["import sanitize from 'sanitize-filename'\n\nimport type { PayloadRequest } from '../types/index.js'\n\nimport { docWithFilenameExists } from './docWithFilenameExists.js'\nimport { fileExists } from './fileExists.js'\n\nconst incrementName = (name: string) => {\n const extension = name.split('.').pop()\n const baseFilename = sanitize(name.substring(0, name.lastIndexOf('.')) || name)\n let incrementedName = baseFilename\n const regex = /(.*)-(\\d+)$/\n const found = baseFilename.match(regex)\n if (found === null) {\n incrementedName += '-1'\n } else {\n const matchedName = found[1]\n const matchedNumber = found[2]\n const incremented = Number(matchedNumber) + 1\n incrementedName = `${matchedName}-${incremented}`\n }\n return `${incrementedName}.${extension}`\n}\n\ntype Args = {\n collectionSlug: string\n desiredFilename: string\n req: PayloadRequest\n staticPath: string\n}\n\nexport async function getSafeFileName({\n collectionSlug,\n desiredFilename,\n req,\n staticPath,\n}: Args): Promise<string> {\n let modifiedFilename = desiredFilename\n\n while (\n (await docWithFilenameExists({\n collectionSlug,\n filename: modifiedFilename,\n path: staticPath,\n req,\n })) ||\n (await fileExists(`${staticPath}/${modifiedFilename}`))\n ) {\n modifiedFilename = incrementName(modifiedFilename)\n }\n return modifiedFilename\n}\n"],"names":["sanitize","docWithFilenameExists","fileExists","incrementName","name","extension","split","pop","baseFilename","substring","lastIndexOf","incrementedName","regex","found","match","matchedName","matchedNumber","incremented","Number","getSafeFileName","collectionSlug","desiredFilename","req","staticPath","modifiedFilename","filename","path"],"mappings":"AAAA,OAAOA,cAAc,oBAAmB;AAIxC,SAASC,qBAAqB,QAAQ,6BAA4B;AAClE,SAASC,UAAU,QAAQ,kBAAiB;AAE5C,MAAMC,gBAAgB,CAACC;IACrB,MAAMC,YAAYD,KAAKE,KAAK,CAAC,KAAKC,GAAG;IACrC,MAAMC,eAAeR,SAASI,KAAKK,SAAS,CAAC,GAAGL,KAAKM,WAAW,CAAC,SAASN;IAC1E,IAAIO,kBAAkBH;IACtB,MAAMI,QAAQ;IACd,MAAMC,QAAQL,aAAaM,KAAK,CAACF;IACjC,IAAIC,UAAU,MAAM;QAClBF,mBAAmB;IACrB,OAAO;QACL,MAAMI,cAAcF,KAAK,CAAC,EAAE;QAC5B,MAAMG,gBAAgBH,KAAK,CAAC,EAAE;QAC9B,MAAMI,cAAcC,OAAOF,iBAAiB;QAC5CL,kBAAkB,GAAGI,YAAY,CAAC,EAAEE,aAAa;IACnD;IACA,OAAO,GAAGN,gBAAgB,CAAC,EAAEN,WAAW;AAC1C;
|
|
1
|
+
{"version":3,"sources":["../../src/uploads/getSafeFilename.ts"],"sourcesContent":["import sanitize from 'sanitize-filename'\n\nimport type { PayloadRequest } from '../types/index.js'\n\nimport { docWithFilenameExists } from './docWithFilenameExists.js'\nimport { fileExists } from './fileExists.js'\n\nconst incrementName = (name: string) => {\n const extension = name.split('.').pop()\n const baseFilename = sanitize(name.substring(0, name.lastIndexOf('.')) || name)\n let incrementedName = baseFilename\n const regex = /(.*)-(\\d+)$/\n const found = baseFilename.match(regex)\n if (found === null) {\n incrementedName += '-1'\n } else {\n const matchedName = found[1]\n const matchedNumber = found[2]\n const incremented = Number(matchedNumber) + 1\n incrementedName = `${matchedName}-${incremented}`\n }\n return `${incrementedName}.${extension}`\n}\n\ntype Args = {\n collectionSlug: string\n desiredFilename: string\n prefix?: string\n req: PayloadRequest\n staticPath: string\n}\n\nexport async function getSafeFileName({\n collectionSlug,\n desiredFilename,\n prefix,\n req,\n staticPath,\n}: Args): Promise<string> {\n let modifiedFilename = desiredFilename\n\n while (\n (await docWithFilenameExists({\n collectionSlug,\n filename: modifiedFilename,\n path: staticPath,\n prefix,\n req,\n })) ||\n (await fileExists(`${staticPath}/${modifiedFilename}`))\n ) {\n modifiedFilename = incrementName(modifiedFilename)\n }\n return modifiedFilename\n}\n"],"names":["sanitize","docWithFilenameExists","fileExists","incrementName","name","extension","split","pop","baseFilename","substring","lastIndexOf","incrementedName","regex","found","match","matchedName","matchedNumber","incremented","Number","getSafeFileName","collectionSlug","desiredFilename","prefix","req","staticPath","modifiedFilename","filename","path"],"mappings":"AAAA,OAAOA,cAAc,oBAAmB;AAIxC,SAASC,qBAAqB,QAAQ,6BAA4B;AAClE,SAASC,UAAU,QAAQ,kBAAiB;AAE5C,MAAMC,gBAAgB,CAACC;IACrB,MAAMC,YAAYD,KAAKE,KAAK,CAAC,KAAKC,GAAG;IACrC,MAAMC,eAAeR,SAASI,KAAKK,SAAS,CAAC,GAAGL,KAAKM,WAAW,CAAC,SAASN;IAC1E,IAAIO,kBAAkBH;IACtB,MAAMI,QAAQ;IACd,MAAMC,QAAQL,aAAaM,KAAK,CAACF;IACjC,IAAIC,UAAU,MAAM;QAClBF,mBAAmB;IACrB,OAAO;QACL,MAAMI,cAAcF,KAAK,CAAC,EAAE;QAC5B,MAAMG,gBAAgBH,KAAK,CAAC,EAAE;QAC9B,MAAMI,cAAcC,OAAOF,iBAAiB;QAC5CL,kBAAkB,GAAGI,YAAY,CAAC,EAAEE,aAAa;IACnD;IACA,OAAO,GAAGN,gBAAgB,CAAC,EAAEN,WAAW;AAC1C;AAUA,OAAO,eAAec,gBAAgB,EACpCC,cAAc,EACdC,eAAe,EACfC,MAAM,EACNC,GAAG,EACHC,UAAU,EACL;IACL,IAAIC,mBAAmBJ;IAEvB,MACE,AAAC,MAAMpB,sBAAsB;QAC3BmB;QACAM,UAAUD;QACVE,MAAMH;QACNF;QACAC;IACF,MACC,MAAMrB,WAAW,GAAGsB,WAAW,CAAC,EAAEC,kBAAkB,EACrD;QACAA,mBAAmBtB,cAAcsB;IACnC;IACA,OAAOA;AACT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deepCopyObject.d.ts","sourceRoot":"","sources":["../../src/utilities/deepCopyObject.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AA2DlD,eAAO,MAAM,cAAc,GAAI,CAAC,KAAK,CAAC,KAAG,CAiCxC,CAAA;AAQD;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,eAAe,UAAQ,GAAG,CAAC,CAwB9F;AAED,wBAAgB,0CAA0C,CAAC,CAAC,SAAS,SAAS,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"deepCopyObject.d.ts","sourceRoot":"","sources":["../../src/utilities/deepCopyObject.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AA2DlD,eAAO,MAAM,cAAc,GAAI,CAAC,KAAK,CAAC,KAAG,CAiCxC,CAAA;AAQD;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,eAAe,UAAQ,GAAG,CAAC,CAwB9F;AAED,wBAAgB,0CAA0C,CAAC,CAAC,SAAS,SAAS,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAgC3F;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,GAAE,OAAO,CAAC,GAAG,EAAE,GAAG,CAAiB,GAAG,CAAC,CAqE/F"}
|
|
@@ -122,6 +122,10 @@ export function deepCopyObjectSimpleWithoutReactComponents(value) {
|
|
|
122
122
|
} else if (Array.isArray(value)) {
|
|
123
123
|
return value.map((e)=>typeof e !== 'object' || e === null ? e : deepCopyObjectSimpleWithoutReactComponents(e));
|
|
124
124
|
} else {
|
|
125
|
+
// Handle File objects by returning them as-is (don't serialize to plain object)
|
|
126
|
+
if (value instanceof File) {
|
|
127
|
+
return value;
|
|
128
|
+
}
|
|
125
129
|
if (value instanceof Date) {
|
|
126
130
|
return new Date(value);
|
|
127
131
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utilities/deepCopyObject.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { JsonValue } from '../types/index.js'\n\n/*\nMain deepCopyObject handling - from rfdc: https://github.com/davidmarkclements/rfdc/blob/master/index.js\n\nCopyright 2019 \"David Mark Clements <david.mark.clements@gmail.com>\"\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\ndocumentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\nthe rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\nto permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions\nof the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\nTHE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\nCONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\nIN THE SOFTWARE.\n*/\n\nfunction copyBuffer(cur: any) {\n if (cur instanceof Buffer) {\n return Buffer.from(cur)\n }\n\n return new cur.constructor(cur.buffer.slice(), cur.byteOffset, cur.length)\n}\n\nconst constructorHandlers = new Map()\nconstructorHandlers.set(Date, (o: any) => new Date(o))\nconstructorHandlers.set(Map, (o: any, fn: any) => new Map(cloneArray<any>(Array.from(o), fn)))\nconstructorHandlers.set(Set, (o: any, fn: any) => new Set(cloneArray(Array.from(o), fn)))\nconstructorHandlers.set(RegExp, (regex: RegExp) => new RegExp(regex.source, regex.flags))\n\nlet handler: ((o: any, fn: any) => any) | null = null\n\nfunction cloneArray<T extends object>(a: T, fn: (o: any) => any): T {\n const keys = Object.keys(a)\n const a2 = new Array(keys.length) as T\n for (let i = 0; i < keys.length; i++) {\n const k = keys[i] as keyof typeof a\n const cur = a[k] as any\n if (typeof cur !== 'object' || cur === null) {\n a2[k] = cur\n } else if (cur instanceof RegExp) {\n a2[k] = new RegExp(cur.source, cur.flags) as any\n } else if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) {\n a2[k] = handler(cur, fn)\n } else if (ArrayBuffer.isView(cur)) {\n a2[k] = copyBuffer(cur)\n } else {\n a2[k] = fn(cur)\n }\n }\n return a2\n}\n\nexport const deepCopyObject = <T>(o: T): T => {\n if (typeof o !== 'object' || o === null) {\n return o\n }\n if (Array.isArray(o)) {\n return cloneArray(o, deepCopyObject)\n }\n if (o instanceof RegExp) {\n return new RegExp(o.source, o.flags) as T\n }\n\n if (o.constructor !== Object && (handler = constructorHandlers.get(o.constructor))) {\n return handler(o, deepCopyObject)\n }\n const o2 = {} as T\n for (const k in o) {\n if (Object.hasOwnProperty.call(o, k) === false) {\n continue\n }\n const cur = o[k]\n if (typeof cur !== 'object' || cur === null) {\n o2[k] = cur\n } else if (cur instanceof RegExp) {\n o2[k] = new RegExp(cur.source, cur.flags) as any\n } else if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) {\n o2[k] = handler(cur, deepCopyObject)\n } else if (ArrayBuffer.isView(cur)) {\n o2[k] = copyBuffer(cur)\n } else {\n o2[k] = deepCopyObject(cur)\n }\n }\n return o2\n}\n\n/*\nFast deepCopyObjectSimple handling - from fast-json-clone: https://github.com/rhysd/fast-json-clone\n\nBenchmark: https://github.com/AlessioGr/fastest-deep-clone-json/blob/main/test/benchmark.js\n*/\n\n/**\n * A deepCopyObject implementation which only works for JSON objects and arrays, and is faster than\n * JSON.parse(JSON.stringify(obj))\n *\n * @param value The JSON value to be cloned. There are two invariants. 1) It must not contain circles\n * as JSON does not allow it. This function will cause infinite loop for such values by\n * design. 2) It must contain JSON values only. Other values like `Date`, `Regexp`, `Map`,\n * `Set`, `Buffer`, ... are not allowed.\n * @returns The cloned JSON value.\n */\nexport function deepCopyObjectSimple<T extends JsonValue>(value: T, filterUndefined = false): T {\n if (typeof value !== 'object' || value === null) {\n return value\n } else if (Array.isArray(value)) {\n return value.map((e) =>\n typeof e !== 'object' || e === null ? e : deepCopyObjectSimple(e, filterUndefined),\n ) as T\n } else {\n if (value instanceof Date) {\n return new Date(value) as unknown as T\n }\n const ret: { [key: string]: T } = {}\n for (const k in value) {\n const v = value[k]\n if (filterUndefined && v === undefined) {\n continue\n }\n ret[k] =\n typeof v !== 'object' || v === null\n ? v\n : (deepCopyObjectSimple(v as T, filterUndefined) as any)\n }\n return ret as unknown as T\n }\n}\n\nexport function deepCopyObjectSimpleWithoutReactComponents<T extends JsonValue>(value: T): T {\n if (\n typeof value === 'object' &&\n value !== null &&\n '$$typeof' in value &&\n typeof value.$$typeof === 'symbol'\n ) {\n return undefined!\n } else if (typeof value !== 'object' || value === null) {\n return value\n } else if (Array.isArray(value)) {\n return value.map((e) =>\n typeof e !== 'object' || e === null ? e : deepCopyObjectSimpleWithoutReactComponents(e),\n ) as T\n } else {\n if (value instanceof Date) {\n return new Date(value) as unknown as T\n }\n const ret: { [key: string]: T } = {}\n for (const k in value) {\n const v = value[k]\n ret[k] =\n typeof v !== 'object' || v === null\n ? v\n : (deepCopyObjectSimpleWithoutReactComponents(v as T) as any)\n }\n return ret as unknown as T\n }\n}\n\n/**\n * A deepCopyObject implementation which is slower than deepCopyObject, but more correct.\n * Can be used if correctness is more important than speed. Supports circular dependencies\n */\nexport function deepCopyObjectComplex<T>(object: T, cache: WeakMap<any, any> = new WeakMap()): T {\n if (object === null) {\n return null!\n }\n\n if (cache.has(object)) {\n return cache.get(object)\n }\n\n // Handle File\n if (object instanceof File) {\n return object as unknown as T\n }\n\n // Handle Date\n if (object instanceof Date) {\n return new Date(object.getTime()) as unknown as T\n }\n\n // Handle RegExp\n if (object instanceof RegExp) {\n return new RegExp(object.source, object.flags) as unknown as T\n }\n\n // Handle Map\n if (object instanceof Map) {\n const clonedMap = new Map()\n cache.set(object, clonedMap)\n for (const [key, value] of object.entries()) {\n clonedMap.set(key, deepCopyObjectComplex(value, cache))\n }\n return clonedMap as unknown as T\n }\n\n // Handle Set\n if (object instanceof Set) {\n const clonedSet = new Set()\n cache.set(object, clonedSet)\n for (const value of object.values()) {\n clonedSet.add(deepCopyObjectComplex(value, cache))\n }\n return clonedSet as unknown as T\n }\n\n // Handle Array and Object\n if (typeof object === 'object' && object !== null) {\n if ('$$typeof' in object && typeof object.$$typeof === 'symbol') {\n return object\n }\n\n const clonedObject: any = Array.isArray(object)\n ? []\n : Object.create(Object.getPrototypeOf(object))\n cache.set(object, clonedObject)\n\n for (const key in object) {\n if (\n Object.prototype.hasOwnProperty.call(object, key) ||\n Object.getOwnPropertySymbols(object).includes(key as any)\n ) {\n clonedObject[key] = deepCopyObjectComplex(object[key], cache)\n }\n }\n\n return clonedObject as T\n }\n\n // Handle all other cases\n return object\n}\n"],"names":["copyBuffer","cur","Buffer","from","buffer","slice","byteOffset","length","constructorHandlers","Map","set","Date","o","fn","cloneArray","Array","Set","RegExp","regex","source","flags","handler","a","keys","Object","a2","i","k","get","ArrayBuffer","isView","deepCopyObject","isArray","o2","hasOwnProperty","call","deepCopyObjectSimple","value","filterUndefined","map","e","ret","v","undefined","deepCopyObjectSimpleWithoutReactComponents","$$typeof","deepCopyObjectComplex","object","cache","WeakMap","has","File","getTime","clonedMap","key","entries","clonedSet","values","add","clonedObject","create","getPrototypeOf","prototype","getOwnPropertySymbols","includes"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/utilities/deepCopyObject.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { JsonValue } from '../types/index.js'\n\n/*\nMain deepCopyObject handling - from rfdc: https://github.com/davidmarkclements/rfdc/blob/master/index.js\n\nCopyright 2019 \"David Mark Clements <david.mark.clements@gmail.com>\"\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\ndocumentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\nthe rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\nto permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions\nof the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\nTHE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\nCONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\nIN THE SOFTWARE.\n*/\n\nfunction copyBuffer(cur: any) {\n if (cur instanceof Buffer) {\n return Buffer.from(cur)\n }\n\n return new cur.constructor(cur.buffer.slice(), cur.byteOffset, cur.length)\n}\n\nconst constructorHandlers = new Map()\nconstructorHandlers.set(Date, (o: any) => new Date(o))\nconstructorHandlers.set(Map, (o: any, fn: any) => new Map(cloneArray<any>(Array.from(o), fn)))\nconstructorHandlers.set(Set, (o: any, fn: any) => new Set(cloneArray(Array.from(o), fn)))\nconstructorHandlers.set(RegExp, (regex: RegExp) => new RegExp(regex.source, regex.flags))\n\nlet handler: ((o: any, fn: any) => any) | null = null\n\nfunction cloneArray<T extends object>(a: T, fn: (o: any) => any): T {\n const keys = Object.keys(a)\n const a2 = new Array(keys.length) as T\n for (let i = 0; i < keys.length; i++) {\n const k = keys[i] as keyof typeof a\n const cur = a[k] as any\n if (typeof cur !== 'object' || cur === null) {\n a2[k] = cur\n } else if (cur instanceof RegExp) {\n a2[k] = new RegExp(cur.source, cur.flags) as any\n } else if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) {\n a2[k] = handler(cur, fn)\n } else if (ArrayBuffer.isView(cur)) {\n a2[k] = copyBuffer(cur)\n } else {\n a2[k] = fn(cur)\n }\n }\n return a2\n}\n\nexport const deepCopyObject = <T>(o: T): T => {\n if (typeof o !== 'object' || o === null) {\n return o\n }\n if (Array.isArray(o)) {\n return cloneArray(o, deepCopyObject)\n }\n if (o instanceof RegExp) {\n return new RegExp(o.source, o.flags) as T\n }\n\n if (o.constructor !== Object && (handler = constructorHandlers.get(o.constructor))) {\n return handler(o, deepCopyObject)\n }\n const o2 = {} as T\n for (const k in o) {\n if (Object.hasOwnProperty.call(o, k) === false) {\n continue\n }\n const cur = o[k]\n if (typeof cur !== 'object' || cur === null) {\n o2[k] = cur\n } else if (cur instanceof RegExp) {\n o2[k] = new RegExp(cur.source, cur.flags) as any\n } else if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) {\n o2[k] = handler(cur, deepCopyObject)\n } else if (ArrayBuffer.isView(cur)) {\n o2[k] = copyBuffer(cur)\n } else {\n o2[k] = deepCopyObject(cur)\n }\n }\n return o2\n}\n\n/*\nFast deepCopyObjectSimple handling - from fast-json-clone: https://github.com/rhysd/fast-json-clone\n\nBenchmark: https://github.com/AlessioGr/fastest-deep-clone-json/blob/main/test/benchmark.js\n*/\n\n/**\n * A deepCopyObject implementation which only works for JSON objects and arrays, and is faster than\n * JSON.parse(JSON.stringify(obj))\n *\n * @param value The JSON value to be cloned. There are two invariants. 1) It must not contain circles\n * as JSON does not allow it. This function will cause infinite loop for such values by\n * design. 2) It must contain JSON values only. Other values like `Date`, `Regexp`, `Map`,\n * `Set`, `Buffer`, ... are not allowed.\n * @returns The cloned JSON value.\n */\nexport function deepCopyObjectSimple<T extends JsonValue>(value: T, filterUndefined = false): T {\n if (typeof value !== 'object' || value === null) {\n return value\n } else if (Array.isArray(value)) {\n return value.map((e) =>\n typeof e !== 'object' || e === null ? e : deepCopyObjectSimple(e, filterUndefined),\n ) as T\n } else {\n if (value instanceof Date) {\n return new Date(value) as unknown as T\n }\n const ret: { [key: string]: T } = {}\n for (const k in value) {\n const v = value[k]\n if (filterUndefined && v === undefined) {\n continue\n }\n ret[k] =\n typeof v !== 'object' || v === null\n ? v\n : (deepCopyObjectSimple(v as T, filterUndefined) as any)\n }\n return ret as unknown as T\n }\n}\n\nexport function deepCopyObjectSimpleWithoutReactComponents<T extends JsonValue>(value: T): T {\n if (\n typeof value === 'object' &&\n value !== null &&\n '$$typeof' in value &&\n typeof value.$$typeof === 'symbol'\n ) {\n return undefined!\n } else if (typeof value !== 'object' || value === null) {\n return value\n } else if (Array.isArray(value)) {\n return value.map((e) =>\n typeof e !== 'object' || e === null ? e : deepCopyObjectSimpleWithoutReactComponents(e),\n ) as T\n } else {\n // Handle File objects by returning them as-is (don't serialize to plain object)\n if (value instanceof File) {\n return value as unknown as T\n }\n if (value instanceof Date) {\n return new Date(value) as unknown as T\n }\n const ret: { [key: string]: T } = {}\n for (const k in value) {\n const v = value[k]\n ret[k] =\n typeof v !== 'object' || v === null\n ? v\n : (deepCopyObjectSimpleWithoutReactComponents(v as T) as any)\n }\n return ret as unknown as T\n }\n}\n\n/**\n * A deepCopyObject implementation which is slower than deepCopyObject, but more correct.\n * Can be used if correctness is more important than speed. Supports circular dependencies\n */\nexport function deepCopyObjectComplex<T>(object: T, cache: WeakMap<any, any> = new WeakMap()): T {\n if (object === null) {\n return null!\n }\n\n if (cache.has(object)) {\n return cache.get(object)\n }\n\n // Handle File\n if (object instanceof File) {\n return object as unknown as T\n }\n\n // Handle Date\n if (object instanceof Date) {\n return new Date(object.getTime()) as unknown as T\n }\n\n // Handle RegExp\n if (object instanceof RegExp) {\n return new RegExp(object.source, object.flags) as unknown as T\n }\n\n // Handle Map\n if (object instanceof Map) {\n const clonedMap = new Map()\n cache.set(object, clonedMap)\n for (const [key, value] of object.entries()) {\n clonedMap.set(key, deepCopyObjectComplex(value, cache))\n }\n return clonedMap as unknown as T\n }\n\n // Handle Set\n if (object instanceof Set) {\n const clonedSet = new Set()\n cache.set(object, clonedSet)\n for (const value of object.values()) {\n clonedSet.add(deepCopyObjectComplex(value, cache))\n }\n return clonedSet as unknown as T\n }\n\n // Handle Array and Object\n if (typeof object === 'object' && object !== null) {\n if ('$$typeof' in object && typeof object.$$typeof === 'symbol') {\n return object\n }\n\n const clonedObject: any = Array.isArray(object)\n ? []\n : Object.create(Object.getPrototypeOf(object))\n cache.set(object, clonedObject)\n\n for (const key in object) {\n if (\n Object.prototype.hasOwnProperty.call(object, key) ||\n Object.getOwnPropertySymbols(object).includes(key as any)\n ) {\n clonedObject[key] = deepCopyObjectComplex(object[key], cache)\n }\n }\n\n return clonedObject as T\n }\n\n // Handle all other cases\n return object\n}\n"],"names":["copyBuffer","cur","Buffer","from","buffer","slice","byteOffset","length","constructorHandlers","Map","set","Date","o","fn","cloneArray","Array","Set","RegExp","regex","source","flags","handler","a","keys","Object","a2","i","k","get","ArrayBuffer","isView","deepCopyObject","isArray","o2","hasOwnProperty","call","deepCopyObjectSimple","value","filterUndefined","map","e","ret","v","undefined","deepCopyObjectSimpleWithoutReactComponents","$$typeof","File","deepCopyObjectComplex","object","cache","WeakMap","has","getTime","clonedMap","key","entries","clonedSet","values","add","clonedObject","create","getPrototypeOf","prototype","getOwnPropertySymbols","includes"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "payload",
|
|
3
|
-
"version": "3.68.0
|
|
3
|
+
"version": "3.68.0",
|
|
4
4
|
"description": "Node, React, Headless CMS and Application Framework built on Next.js",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"admin panel",
|
|
@@ -106,7 +106,7 @@
|
|
|
106
106
|
"undici": "7.10.0",
|
|
107
107
|
"uuid": "10.0.0",
|
|
108
108
|
"ws": "^8.16.0",
|
|
109
|
-
"@payloadcms/translations": "3.68.0
|
|
109
|
+
"@payloadcms/translations": "3.68.0"
|
|
110
110
|
},
|
|
111
111
|
"devDependencies": {
|
|
112
112
|
"@hyrious/esbuild-plugin-commonjs": "0.2.6",
|