payload 3.66.0 → 3.67.0-internal.1ea538b

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/dist/auth/operations/forgotPassword.d.ts.map +1 -1
  2. package/dist/auth/operations/forgotPassword.js +7 -12
  3. package/dist/auth/operations/forgotPassword.js.map +1 -1
  4. package/dist/auth/operations/login.d.ts.map +1 -1
  5. package/dist/auth/operations/login.js +7 -12
  6. package/dist/auth/operations/login.js.map +1 -1
  7. package/dist/auth/operations/refresh.d.ts.map +1 -1
  8. package/dist/auth/operations/refresh.js +7 -12
  9. package/dist/auth/operations/refresh.js.map +1 -1
  10. package/dist/auth/operations/resetPassword.d.ts.map +1 -1
  11. package/dist/auth/operations/resetPassword.js +7 -12
  12. package/dist/auth/operations/resetPassword.js.map +1 -1
  13. package/dist/auth/operations/unlock.d.ts.map +1 -1
  14. package/dist/auth/operations/unlock.js +14 -1
  15. package/dist/auth/operations/unlock.js.map +1 -1
  16. package/dist/collections/config/sanitize.d.ts.map +1 -1
  17. package/dist/collections/config/sanitize.js +2 -0
  18. package/dist/collections/config/sanitize.js.map +1 -1
  19. package/dist/collections/config/types.d.ts +7 -19
  20. package/dist/collections/config/types.d.ts.map +1 -1
  21. package/dist/collections/config/types.js.map +1 -1
  22. package/dist/collections/operations/count.d.ts.map +1 -1
  23. package/dist/collections/operations/count.js +7 -12
  24. package/dist/collections/operations/count.js.map +1 -1
  25. package/dist/collections/operations/countVersions.d.ts.map +1 -1
  26. package/dist/collections/operations/countVersions.js +7 -12
  27. package/dist/collections/operations/countVersions.js.map +1 -1
  28. package/dist/collections/operations/create.d.ts.map +1 -1
  29. package/dist/collections/operations/create.js +10 -14
  30. package/dist/collections/operations/create.js.map +1 -1
  31. package/dist/collections/operations/delete.d.ts.map +1 -1
  32. package/dist/collections/operations/delete.js +9 -13
  33. package/dist/collections/operations/delete.js.map +1 -1
  34. package/dist/collections/operations/deleteByID.d.ts.map +1 -1
  35. package/dist/collections/operations/deleteByID.js +9 -13
  36. package/dist/collections/operations/deleteByID.js.map +1 -1
  37. package/dist/collections/operations/find.d.ts.map +1 -1
  38. package/dist/collections/operations/find.js +9 -13
  39. package/dist/collections/operations/find.js.map +1 -1
  40. package/dist/collections/operations/findByID.d.ts.map +1 -1
  41. package/dist/collections/operations/findByID.js +22 -26
  42. package/dist/collections/operations/findByID.js.map +1 -1
  43. package/dist/collections/operations/findDistinct.d.ts.map +1 -1
  44. package/dist/collections/operations/findDistinct.js +7 -12
  45. package/dist/collections/operations/findDistinct.js.map +1 -1
  46. package/dist/collections/operations/findVersionByID.d.ts.map +1 -1
  47. package/dist/collections/operations/findVersionByID.js +20 -1
  48. package/dist/collections/operations/findVersionByID.js.map +1 -1
  49. package/dist/collections/operations/findVersions.d.ts.map +1 -1
  50. package/dist/collections/operations/findVersions.js +24 -5
  51. package/dist/collections/operations/findVersions.js.map +1 -1
  52. package/dist/collections/operations/restoreVersion.d.ts.map +1 -1
  53. package/dist/collections/operations/restoreVersion.js +9 -13
  54. package/dist/collections/operations/restoreVersion.js.map +1 -1
  55. package/dist/collections/operations/update.d.ts.map +1 -1
  56. package/dist/collections/operations/update.js +9 -13
  57. package/dist/collections/operations/update.js.map +1 -1
  58. package/dist/collections/operations/updateByID.d.ts.map +1 -1
  59. package/dist/collections/operations/updateByID.js +7 -12
  60. package/dist/collections/operations/updateByID.js.map +1 -1
  61. package/dist/collections/operations/utilities/buildAfterOperation.d.ts +6 -0
  62. package/dist/collections/operations/utilities/buildAfterOperation.d.ts.map +1 -0
  63. package/dist/collections/operations/{utils.js → utilities/buildAfterOperation.js} +1 -1
  64. package/dist/collections/operations/utilities/buildAfterOperation.js.map +1 -0
  65. package/dist/collections/operations/utilities/buildBeforeOperation.d.ts +47 -0
  66. package/dist/collections/operations/utilities/buildBeforeOperation.d.ts.map +1 -0
  67. package/dist/collections/operations/utilities/buildBeforeOperation.js +25 -0
  68. package/dist/collections/operations/utilities/buildBeforeOperation.js.map +1 -0
  69. package/dist/collections/operations/utilities/types.d.ts +216 -0
  70. package/dist/collections/operations/utilities/types.d.ts.map +1 -0
  71. package/dist/collections/operations/utilities/types.js +23 -0
  72. package/dist/collections/operations/utilities/types.js.map +1 -0
  73. package/dist/collections/operations/utilities/update.d.ts.map +1 -1
  74. package/dist/collections/operations/utilities/update.js +4 -2
  75. package/dist/collections/operations/utilities/update.js.map +1 -1
  76. package/dist/config/sanitize.d.ts.map +1 -1
  77. package/dist/config/sanitize.js +2 -2
  78. package/dist/config/sanitize.js.map +1 -1
  79. package/dist/exports/shared.d.ts +1 -0
  80. package/dist/exports/shared.d.ts.map +1 -1
  81. package/dist/exports/shared.js +1 -0
  82. package/dist/exports/shared.js.map +1 -1
  83. package/dist/fields/baseFields/slug/generateSlug.d.ts.map +1 -1
  84. package/dist/fields/baseFields/slug/generateSlug.js +2 -2
  85. package/dist/fields/baseFields/slug/generateSlug.js.map +1 -1
  86. package/dist/fields/config/types.d.ts +2 -0
  87. package/dist/fields/config/types.d.ts.map +1 -1
  88. package/dist/fields/config/types.js.map +1 -1
  89. package/dist/globals/config/types.d.ts +1 -1
  90. package/dist/globals/config/types.d.ts.map +1 -1
  91. package/dist/globals/config/types.js.map +1 -1
  92. package/dist/globals/operations/findOne.d.ts.map +1 -1
  93. package/dist/globals/operations/findOne.js +4 -3
  94. package/dist/globals/operations/findOne.js.map +1 -1
  95. package/dist/globals/operations/update.d.ts.map +1 -1
  96. package/dist/globals/operations/update.js +3 -2
  97. package/dist/globals/operations/update.js.map +1 -1
  98. package/dist/index.bundled.d.ts +200 -119
  99. package/dist/utilities/getVersionsConfig.d.ts +37 -0
  100. package/dist/utilities/getVersionsConfig.d.ts.map +1 -0
  101. package/dist/utilities/getVersionsConfig.js +44 -0
  102. package/dist/utilities/getVersionsConfig.js.map +1 -0
  103. package/dist/versions/buildCollectionFields.d.ts.map +1 -1
  104. package/dist/versions/buildCollectionFields.js +3 -2
  105. package/dist/versions/buildCollectionFields.js.map +1 -1
  106. package/dist/versions/buildGlobalFields.d.ts.map +1 -1
  107. package/dist/versions/buildGlobalFields.js +3 -2
  108. package/dist/versions/buildGlobalFields.js.map +1 -1
  109. package/dist/versions/getLatestCollectionVersion.d.ts.map +1 -1
  110. package/dist/versions/getLatestCollectionVersion.js +3 -1
  111. package/dist/versions/getLatestCollectionVersion.js.map +1 -1
  112. package/dist/versions/getLatestGlobalVersion.d.ts.map +1 -1
  113. package/dist/versions/getLatestGlobalVersion.js +3 -2
  114. package/dist/versions/getLatestGlobalVersion.js.map +1 -1
  115. package/dist/versions/saveVersion.d.ts.map +1 -1
  116. package/dist/versions/saveVersion.js +2 -1
  117. package/dist/versions/saveVersion.js.map +1 -1
  118. package/package.json +2 -2
  119. package/dist/collections/operations/utils.d.ts +0 -105
  120. package/dist/collections/operations/utils.d.ts.map +0 -1
  121. package/dist/collections/operations/utils.js.map +0 -1
@@ -9,11 +9,21 @@ import { sanitizeInternalFields } from '../../utilities/sanitizeInternalFields.j
9
9
  import { sanitizeSelect } from '../../utilities/sanitizeSelect.js';
10
10
  import { buildVersionCollectionFields } from '../../versions/buildCollectionFields.js';
11
11
  import { getQueryDraftsSelect } from '../../versions/drafts/getQueryDraftsSelect.js';
12
+ import { buildAfterOperation } from './utilities/buildAfterOperation.js';
13
+ import { buildBeforeOperation } from './utilities/buildBeforeOperation.js';
12
14
  export const findVersionsOperation = async (args)=>{
13
- const { collection: { config: collectionConfig }, depth, limit, overrideAccess, page, pagination = true, populate, select: incomingSelect, showHiddenFields, sort, trash = false, where } = args;
14
- const req = args.req;
15
- const { fallbackLocale, locale, payload } = req;
16
15
  try {
16
+ // /////////////////////////////////////
17
+ // beforeOperation - Collection
18
+ // /////////////////////////////////////
19
+ args = await buildBeforeOperation({
20
+ args,
21
+ collection: args.collection.config,
22
+ operation: 'findVersions'
23
+ });
24
+ const { collection: { config: collectionConfig }, depth, limit, overrideAccess, page, pagination = true, populate, select: incomingSelect, showHiddenFields, sort, trash = false, where } = args;
25
+ const req = args.req;
26
+ const { fallbackLocale, locale, payload } = req;
17
27
  // /////////////////////////////////////
18
28
  // Access
19
29
  // /////////////////////////////////////
@@ -72,7 +82,7 @@ export const findVersionsOperation = async (args)=>{
72
82
  // /////////////////////////////////////
73
83
  // beforeRead - Collection
74
84
  // /////////////////////////////////////
75
- const result = paginatedDocs;
85
+ let result = paginatedDocs;
76
86
  result.docs = await Promise.all(paginatedDocs.docs.map(async (doc)=>{
77
87
  const docRef = doc;
78
88
  // Fallback if not selected
@@ -139,9 +149,18 @@ export const findVersionsOperation = async (args)=>{
139
149
  // Return results
140
150
  // /////////////////////////////////////
141
151
  result.docs = result.docs.map((doc)=>sanitizeInternalFields(doc));
152
+ // /////////////////////////////////////
153
+ // afterOperation - Collection
154
+ // /////////////////////////////////////
155
+ result = await buildAfterOperation({
156
+ args,
157
+ collection: collectionConfig,
158
+ operation: 'findVersions',
159
+ result
160
+ });
142
161
  return result;
143
162
  } catch (error) {
144
- await killTransaction(req);
163
+ await killTransaction(args.req);
145
164
  throw error;
146
165
  }
147
166
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/collections/operations/findVersions.ts"],"sourcesContent":["import type { AccessResult } from '../../config/types.js'\nimport type { PaginatedDocs } from '../../database/types.js'\nimport type { PayloadRequest, PopulateType, SelectType, Sort, Where } from '../../types/index.js'\nimport type { TypeWithVersion } from '../../versions/types.js'\nimport type { Collection } 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 { afterRead } from '../../fields/hooks/afterRead/index.js'\nimport { appendNonTrashedFilter } from '../../utilities/appendNonTrashedFilter.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport { sanitizeInternalFields } from '../../utilities/sanitizeInternalFields.js'\nimport { sanitizeSelect } from '../../utilities/sanitizeSelect.js'\nimport { buildVersionCollectionFields } from '../../versions/buildCollectionFields.js'\nimport { getQueryDraftsSelect } from '../../versions/drafts/getQueryDraftsSelect.js'\n\nexport type Arguments = {\n collection: Collection\n depth?: number\n limit?: number\n overrideAccess?: boolean\n page?: number\n pagination?: boolean\n populate?: PopulateType\n req?: PayloadRequest\n select?: SelectType\n showHiddenFields?: boolean\n sort?: Sort\n trash?: boolean\n where?: Where\n}\n\nexport const findVersionsOperation = async <TData extends TypeWithVersion<TData>>(\n args: Arguments,\n): Promise<PaginatedDocs<TData>> => {\n const {\n collection: { config: collectionConfig },\n depth,\n limit,\n overrideAccess,\n page,\n pagination = true,\n populate,\n select: incomingSelect,\n showHiddenFields,\n sort,\n trash = false,\n where,\n } = args\n\n const req = args.req!\n const { fallbackLocale, locale, payload } = req\n\n try {\n // /////////////////////////////////////\n // Access\n // /////////////////////////////////////\n\n let accessResults!: AccessResult\n\n if (!overrideAccess) {\n accessResults = await executeAccess({ req }, collectionConfig.access.readVersions)\n }\n\n const versionFields = buildVersionCollectionFields(payload.config, collectionConfig, true)\n\n await validateQueryPaths({\n collectionConfig,\n overrideAccess: overrideAccess!,\n req,\n versionFields,\n where: where!,\n })\n\n let fullWhere = combineQueries(where!, accessResults)\n\n // Exclude trashed documents when trash: false\n fullWhere = appendNonTrashedFilter({\n deletedAtPath: 'version.deletedAt',\n enableTrash: collectionConfig.trash,\n trash,\n where: fullWhere,\n })\n\n sanitizeWhereQuery({ fields: versionFields, payload, where: fullWhere })\n\n const select = sanitizeSelect({\n fields: versionFields,\n forceSelect: getQueryDraftsSelect({ select: collectionConfig.forceSelect }),\n select: incomingSelect,\n versions: true,\n })\n\n // /////////////////////////////////////\n // Find\n // /////////////////////////////////////\n\n const usePagination = pagination && limit !== 0\n const sanitizedLimit = limit ?? (usePagination ? 10 : 0)\n const sanitizedPage = page || 1\n\n const paginatedDocs = await payload.db.findVersions<TData>({\n collection: collectionConfig.slug,\n limit: sanitizedLimit,\n locale: locale!,\n page: sanitizedPage,\n pagination,\n req,\n select,\n sort,\n where: fullWhere,\n })\n\n // /////////////////////////////////////\n // beforeRead - Collection\n // /////////////////////////////////////\n const result: PaginatedDocs<TData> = paginatedDocs as unknown as PaginatedDocs<TData>\n result.docs = (await Promise.all(\n paginatedDocs.docs.map(async (doc) => {\n const docRef = doc\n // Fallback if not selected\n if (!docRef.version) {\n ;(docRef as any).version = {}\n }\n\n if (collectionConfig.hooks?.beforeRead?.length) {\n for (const hook of collectionConfig.hooks.beforeRead) {\n docRef.version =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: docRef.version,\n query: fullWhere,\n req,\n })) || docRef.version\n }\n }\n\n return docRef\n }),\n )) as TData[]\n // /////////////////////////////////////\n // afterRead - Fields\n // /////////////////////////////////////\n\n result.docs = await Promise.all(\n result.docs.map(async (data) => {\n data.version = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth: depth!,\n doc: data.version,\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n draft: undefined,\n fallbackLocale: fallbackLocale!,\n findMany: true,\n global: null,\n locale: locale!,\n overrideAccess: overrideAccess!,\n populate,\n req,\n select: typeof select?.version === 'object' ? select.version : undefined,\n showHiddenFields: showHiddenFields!,\n })\n return data\n }),\n )\n\n // /////////////////////////////////////\n // afterRead - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks.afterRead?.length) {\n result.docs = await Promise.all(\n result.docs.map(async (doc) => {\n const docRef = doc\n\n for (const hook of collectionConfig.hooks.afterRead) {\n docRef.version =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: doc.version,\n findMany: true,\n query: fullWhere,\n req,\n })) || doc.version\n }\n\n return docRef\n }),\n )\n }\n\n // /////////////////////////////////////\n // Return results\n // /////////////////////////////////////\n result.docs = result.docs.map((doc) => sanitizeInternalFields<TData>(doc))\n\n return result\n } catch (error: unknown) {\n await killTransaction(req)\n throw error\n }\n}\n"],"names":["executeAccess","combineQueries","validateQueryPaths","sanitizeWhereQuery","afterRead","appendNonTrashedFilter","killTransaction","sanitizeInternalFields","sanitizeSelect","buildVersionCollectionFields","getQueryDraftsSelect","findVersionsOperation","args","collection","config","collectionConfig","depth","limit","overrideAccess","page","pagination","populate","select","incomingSelect","showHiddenFields","sort","trash","where","req","fallbackLocale","locale","payload","accessResults","access","readVersions","versionFields","fullWhere","deletedAtPath","enableTrash","fields","forceSelect","versions","usePagination","sanitizedLimit","sanitizedPage","paginatedDocs","db","findVersions","slug","result","docs","Promise","all","map","doc","docRef","version","hooks","beforeRead","length","hook","context","query","data","draft","undefined","findMany","global","error"],"mappings":"AAMA,SAASA,aAAa,QAAQ,8BAA6B;AAC3D,SAASC,cAAc,QAAQ,mCAAkC;AACjE,SAASC,kBAAkB,QAAQ,uDAAsD;AACzF,SAASC,kBAAkB,QAAQ,uCAAsC;AACzE,SAASC,SAAS,QAAQ,wCAAuC;AACjE,SAASC,sBAAsB,QAAQ,4CAA2C;AAClF,SAASC,eAAe,QAAQ,qCAAoC;AACpE,SAASC,sBAAsB,QAAQ,4CAA2C;AAClF,SAASC,cAAc,QAAQ,oCAAmC;AAClE,SAASC,4BAA4B,QAAQ,0CAAyC;AACtF,SAASC,oBAAoB,QAAQ,gDAA+C;AAkBpF,OAAO,MAAMC,wBAAwB,OACnCC;IAEA,MAAM,EACJC,YAAY,EAAEC,QAAQC,gBAAgB,EAAE,EACxCC,KAAK,EACLC,KAAK,EACLC,cAAc,EACdC,IAAI,EACJC,aAAa,IAAI,EACjBC,QAAQ,EACRC,QAAQC,cAAc,EACtBC,gBAAgB,EAChBC,IAAI,EACJC,QAAQ,KAAK,EACbC,KAAK,EACN,GAAGf;IAEJ,MAAMgB,MAAMhB,KAAKgB,GAAG;IACpB,MAAM,EAAEC,cAAc,EAAEC,MAAM,EAAEC,OAAO,EAAE,GAAGH;IAE5C,IAAI;QACF,wCAAwC;QACxC,SAAS;QACT,wCAAwC;QAExC,IAAII;QAEJ,IAAI,CAACd,gBAAgB;YACnBc,gBAAgB,MAAMhC,cAAc;gBAAE4B;YAAI,GAAGb,iBAAiBkB,MAAM,CAACC,YAAY;QACnF;QAEA,MAAMC,gBAAgB1B,6BAA6BsB,QAAQjB,MAAM,EAAEC,kBAAkB;QAErF,MAAMb,mBAAmB;YACvBa;YACAG,gBAAgBA;YAChBU;YACAO;YACAR,OAAOA;QACT;QAEA,IAAIS,YAAYnC,eAAe0B,OAAQK;QAEvC,8CAA8C;QAC9CI,YAAY/B,uBAAuB;YACjCgC,eAAe;YACfC,aAAavB,iBAAiBW,KAAK;YACnCA;YACAC,OAAOS;QACT;QAEAjC,mBAAmB;YAAEoC,QAAQJ;YAAeJ;YAASJ,OAAOS;QAAU;QAEtE,MAAMd,SAASd,eAAe;YAC5B+B,QAAQJ;YACRK,aAAa9B,qBAAqB;gBAAEY,QAAQP,iBAAiByB,WAAW;YAAC;YACzElB,QAAQC;YACRkB,UAAU;QACZ;QAEA,wCAAwC;QACxC,OAAO;QACP,wCAAwC;QAExC,MAAMC,gBAAgBtB,cAAcH,UAAU;QAC9C,MAAM0B,iBAAiB1B,SAAUyB,CAAAA,gBAAgB,KAAK,CAAA;QACtD,MAAME,gBAAgBzB,QAAQ;QAE9B,MAAM0B,gBAAgB,MAAMd,QAAQe,EAAE,CAACC,YAAY,CAAQ;YACzDlC,YAAYE,iBAAiBiC,IAAI;YACjC/B,OAAO0B;YACPb,QAAQA;YACRX,MAAMyB;YACNxB;YACAQ;YACAN;YACAG;YACAE,OAAOS;QACT;QAEA,wCAAwC;QACxC,0BAA0B;QAC1B,wCAAwC;QACxC,MAAMa,SAA+BJ;QACrCI,OAAOC,IAAI,GAAI,MAAMC,QAAQC,GAAG,CAC9BP,cAAcK,IAAI,CAACG,GAAG,CAAC,OAAOC;YAC5B,MAAMC,SAASD;YACf,2BAA2B;YAC3B,IAAI,CAACC,OAAOC,OAAO,EAAE;;gBACjBD,OAAeC,OAAO,GAAG,CAAC;YAC9B;YAEA,IAAIzC,iBAAiB0C,KAAK,EAAEC,YAAYC,QAAQ;gBAC9C,KAAK,MAAMC,QAAQ7C,iBAAiB0C,KAAK,CAACC,UAAU,CAAE;oBACpDH,OAAOC,OAAO,GACZ,AAAC,MAAMI,KAAK;wBACV/C,YAAYE;wBACZ8C,SAASjC,IAAIiC,OAAO;wBACpBP,KAAKC,OAAOC,OAAO;wBACnBM,OAAO1B;wBACPR;oBACF,MAAO2B,OAAOC,OAAO;gBACzB;YACF;YAEA,OAAOD;QACT;QAEF,wCAAwC;QACxC,qBAAqB;QACrB,wCAAwC;QAExCN,OAAOC,IAAI,GAAG,MAAMC,QAAQC,GAAG,CAC7BH,OAAOC,IAAI,CAACG,GAAG,CAAC,OAAOU;YACrBA,KAAKP,OAAO,GAAG,MAAMpD,UAAU;gBAC7BS,YAAYE;gBACZ8C,SAASjC,IAAIiC,OAAO;gBACpB7C,OAAOA;gBACPsC,KAAKS,KAAKP,OAAO;gBACjB,oFAAoF;gBACpFQ,OAAOC;gBACPpC,gBAAgBA;gBAChBqC,UAAU;gBACVC,QAAQ;gBACRrC,QAAQA;gBACRZ,gBAAgBA;gBAChBG;gBACAO;gBACAN,QAAQ,OAAOA,QAAQkC,YAAY,WAAWlC,OAAOkC,OAAO,GAAGS;gBAC/DzC,kBAAkBA;YACpB;YACA,OAAOuC;QACT;QAGF,wCAAwC;QACxC,yBAAyB;QACzB,wCAAwC;QAExC,IAAIhD,iBAAiB0C,KAAK,CAACrD,SAAS,EAAEuD,QAAQ;YAC5CV,OAAOC,IAAI,GAAG,MAAMC,QAAQC,GAAG,CAC7BH,OAAOC,IAAI,CAACG,GAAG,CAAC,OAAOC;gBACrB,MAAMC,SAASD;gBAEf,KAAK,MAAMM,QAAQ7C,iBAAiB0C,KAAK,CAACrD,SAAS,CAAE;oBACnDmD,OAAOC,OAAO,GACZ,AAAC,MAAMI,KAAK;wBACV/C,YAAYE;wBACZ8C,SAASjC,IAAIiC,OAAO;wBACpBP,KAAKA,IAAIE,OAAO;wBAChBU,UAAU;wBACVJ,OAAO1B;wBACPR;oBACF,MAAO0B,IAAIE,OAAO;gBACtB;gBAEA,OAAOD;YACT;QAEJ;QAEA,wCAAwC;QACxC,iBAAiB;QACjB,wCAAwC;QACxCN,OAAOC,IAAI,GAAGD,OAAOC,IAAI,CAACG,GAAG,CAAC,CAACC,MAAQ/C,uBAA8B+C;QAErE,OAAOL;IACT,EAAE,OAAOmB,OAAgB;QACvB,MAAM9D,gBAAgBsB;QACtB,MAAMwC;IACR;AACF,EAAC"}
1
+ {"version":3,"sources":["../../../src/collections/operations/findVersions.ts"],"sourcesContent":["import type { AccessResult } from '../../config/types.js'\nimport type { PaginatedDocs } from '../../database/types.js'\nimport type { PayloadRequest, PopulateType, SelectType, Sort, Where } from '../../types/index.js'\nimport type { TypeWithVersion } from '../../versions/types.js'\nimport type { Collection } 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 { afterRead } from '../../fields/hooks/afterRead/index.js'\nimport { appendNonTrashedFilter } from '../../utilities/appendNonTrashedFilter.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport { sanitizeInternalFields } from '../../utilities/sanitizeInternalFields.js'\nimport { sanitizeSelect } from '../../utilities/sanitizeSelect.js'\nimport { buildVersionCollectionFields } from '../../versions/buildCollectionFields.js'\nimport { getQueryDraftsSelect } from '../../versions/drafts/getQueryDraftsSelect.js'\nimport { buildAfterOperation } from './utilities/buildAfterOperation.js'\nimport { buildBeforeOperation } from './utilities/buildBeforeOperation.js'\n\nexport type Arguments = {\n collection: Collection\n depth?: number\n limit?: number\n overrideAccess?: boolean\n page?: number\n pagination?: boolean\n populate?: PopulateType\n req?: PayloadRequest\n select?: SelectType\n showHiddenFields?: boolean\n sort?: Sort\n trash?: boolean\n where?: Where\n}\n\nexport const findVersionsOperation = async <TData extends TypeWithVersion<TData>>(\n args: Arguments,\n): Promise<PaginatedDocs<TData>> => {\n try {\n // /////////////////////////////////////\n // beforeOperation - Collection\n // /////////////////////////////////////\n\n args = await buildBeforeOperation({\n args,\n collection: args.collection.config,\n operation: 'findVersions',\n })\n\n const {\n collection: { config: collectionConfig },\n depth,\n limit,\n overrideAccess,\n page,\n pagination = true,\n populate,\n select: incomingSelect,\n showHiddenFields,\n sort,\n trash = false,\n where,\n } = args\n\n const req = args.req!\n const { fallbackLocale, locale, payload } = req\n\n // /////////////////////////////////////\n // Access\n // /////////////////////////////////////\n\n let accessResults!: AccessResult\n\n if (!overrideAccess) {\n accessResults = await executeAccess({ req }, collectionConfig.access.readVersions)\n }\n\n const versionFields = buildVersionCollectionFields(payload.config, collectionConfig, true)\n\n await validateQueryPaths({\n collectionConfig,\n overrideAccess: overrideAccess!,\n req,\n versionFields,\n where: where!,\n })\n\n let fullWhere = combineQueries(where!, accessResults)\n\n // Exclude trashed documents when trash: false\n fullWhere = appendNonTrashedFilter({\n deletedAtPath: 'version.deletedAt',\n enableTrash: collectionConfig.trash,\n trash,\n where: fullWhere,\n })\n\n sanitizeWhereQuery({ fields: versionFields, payload, where: fullWhere })\n\n const select = sanitizeSelect({\n fields: versionFields,\n forceSelect: getQueryDraftsSelect({ select: collectionConfig.forceSelect }),\n select: incomingSelect,\n versions: true,\n })\n\n // /////////////////////////////////////\n // Find\n // /////////////////////////////////////\n\n const usePagination = pagination && limit !== 0\n const sanitizedLimit = limit ?? (usePagination ? 10 : 0)\n const sanitizedPage = page || 1\n\n const paginatedDocs = await payload.db.findVersions<TData>({\n collection: collectionConfig.slug,\n limit: sanitizedLimit,\n locale: locale!,\n page: sanitizedPage,\n pagination,\n req,\n select,\n sort,\n where: fullWhere,\n })\n\n // /////////////////////////////////////\n // beforeRead - Collection\n // /////////////////////////////////////\n let result: PaginatedDocs<TData> = paginatedDocs as unknown as PaginatedDocs<TData>\n result.docs = (await Promise.all(\n paginatedDocs.docs.map(async (doc) => {\n const docRef = doc\n // Fallback if not selected\n if (!docRef.version) {\n ;(docRef as any).version = {}\n }\n\n if (collectionConfig.hooks?.beforeRead?.length) {\n for (const hook of collectionConfig.hooks.beforeRead) {\n docRef.version =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: docRef.version,\n query: fullWhere,\n req,\n })) || docRef.version\n }\n }\n\n return docRef\n }),\n )) as TData[]\n // /////////////////////////////////////\n // afterRead - Fields\n // /////////////////////////////////////\n\n result.docs = await Promise.all(\n result.docs.map(async (data) => {\n data.version = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth: depth!,\n doc: data.version,\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n draft: undefined,\n fallbackLocale: fallbackLocale!,\n findMany: true,\n global: null,\n locale: locale!,\n overrideAccess: overrideAccess!,\n populate,\n req,\n select: typeof select?.version === 'object' ? select.version : undefined,\n showHiddenFields: showHiddenFields!,\n })\n return data\n }),\n )\n\n // /////////////////////////////////////\n // afterRead - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks.afterRead?.length) {\n result.docs = await Promise.all(\n result.docs.map(async (doc) => {\n const docRef = doc\n\n for (const hook of collectionConfig.hooks.afterRead) {\n docRef.version =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: doc.version,\n findMany: true,\n query: fullWhere,\n req,\n })) || doc.version\n }\n\n return docRef\n }),\n )\n }\n\n // /////////////////////////////////////\n // Return results\n // /////////////////////////////////////\n result.docs = result.docs.map((doc) => sanitizeInternalFields<TData>(doc))\n\n // /////////////////////////////////////\n // afterOperation - Collection\n // /////////////////////////////////////\n\n result = await buildAfterOperation({\n args,\n collection: collectionConfig,\n operation: 'findVersions',\n result,\n })\n\n return result\n } catch (error: unknown) {\n await killTransaction(args.req!)\n throw error\n }\n}\n"],"names":["executeAccess","combineQueries","validateQueryPaths","sanitizeWhereQuery","afterRead","appendNonTrashedFilter","killTransaction","sanitizeInternalFields","sanitizeSelect","buildVersionCollectionFields","getQueryDraftsSelect","buildAfterOperation","buildBeforeOperation","findVersionsOperation","args","collection","config","operation","collectionConfig","depth","limit","overrideAccess","page","pagination","populate","select","incomingSelect","showHiddenFields","sort","trash","where","req","fallbackLocale","locale","payload","accessResults","access","readVersions","versionFields","fullWhere","deletedAtPath","enableTrash","fields","forceSelect","versions","usePagination","sanitizedLimit","sanitizedPage","paginatedDocs","db","findVersions","slug","result","docs","Promise","all","map","doc","docRef","version","hooks","beforeRead","length","hook","context","query","data","draft","undefined","findMany","global","error"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"restoreVersion.d.ts","sourceRoot":"","sources":["../../../src/collections/operations/restoreVersion.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAChG,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAmBhE,MAAM,MAAM,SAAS,GAAG;IACtB,UAAU,EAAE,UAAU,CAAA;IACtB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,EAAE,YAAY,CAAA;IACvB,GAAG,EAAE,cAAc,CAAA;IACnB,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAA;AAED,eAAO,MAAM,uBAAuB,GAClC,KAAK,SAAS,UAAU,GAAG,UAAU,kCAE/B,SAAS,KACd,OAAO,CAAC,KAAK,CAmVf,CAAA"}
1
+ {"version":3,"file":"restoreVersion.d.ts","sourceRoot":"","sources":["../../../src/collections/operations/restoreVersion.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAChG,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAqBhE,MAAM,MAAM,SAAS,GAAG;IACtB,UAAU,EAAE,UAAU,CAAA;IACtB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,EAAE,YAAY,CAAA;IACvB,GAAG,EAAE,cAAc,CAAA;IACnB,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAA;AAED,eAAO,MAAM,uBAAuB,GAClC,KAAK,SAAS,UAAU,GAAG,UAAU,kCAE/B,SAAS,KACd,OAAO,CAAC,KAAK,CA2Uf,CAAA"}
@@ -9,12 +9,14 @@ import { beforeChange } from '../../fields/hooks/beforeChange/index.js';
9
9
  import { beforeValidate } from '../../fields/hooks/beforeValidate/index.js';
10
10
  import { commitTransaction } from '../../utilities/commitTransaction.js';
11
11
  import { deepCopyObjectSimple } from '../../utilities/deepCopyObject.js';
12
+ import { hasDraftValidationEnabled } from '../../utilities/getVersionsConfig.js';
12
13
  import { initTransaction } from '../../utilities/initTransaction.js';
13
14
  import { killTransaction } from '../../utilities/killTransaction.js';
14
15
  import { sanitizeSelect } from '../../utilities/sanitizeSelect.js';
15
16
  import { getLatestCollectionVersion } from '../../versions/getLatestCollectionVersion.js';
16
17
  import { saveVersion } from '../../versions/saveVersion.js';
17
- import { buildAfterOperation } from './utils.js';
18
+ import { buildAfterOperation } from './utilities/buildAfterOperation.js';
19
+ import { buildBeforeOperation } from './utilities/buildBeforeOperation.js';
18
20
  export const restoreVersionOperation = async (args)=>{
19
21
  const { id, collection: { config: collectionConfig }, depth, draft: draftArg = false, overrideAccess = false, populate, req, req: { fallbackLocale, locale, payload }, select: incomingSelect, showHiddenFields } = args;
20
22
  try {
@@ -22,17 +24,11 @@ export const restoreVersionOperation = async (args)=>{
22
24
  // /////////////////////////////////////
23
25
  // beforeOperation - Collection
24
26
  // /////////////////////////////////////
25
- if (args.collection.config.hooks?.beforeOperation?.length) {
26
- for (const hook of args.collection.config.hooks.beforeOperation){
27
- args = await hook({
28
- args,
29
- collection: args.collection.config,
30
- context: args.req.context,
31
- operation: 'restoreVersion',
32
- req: args.req
33
- }) || args;
34
- }
35
- }
27
+ args = await buildBeforeOperation({
28
+ args,
29
+ collection: args.collection.config,
30
+ operation: 'restoreVersion'
31
+ });
36
32
  if (!id) {
37
33
  throw new APIError('Missing ID of version to restore.', httpStatus.BAD_REQUEST);
38
34
  }
@@ -187,7 +183,7 @@ export const restoreVersionOperation = async (args)=>{
187
183
  operation: 'update',
188
184
  overrideAccess,
189
185
  req,
190
- skipValidation: draftArg && collectionConfig.versions.drafts && !collectionConfig.versions.drafts.validate
186
+ skipValidation: draftArg && !hasDraftValidationEnabled(collectionConfig)
191
187
  });
192
188
  // /////////////////////////////////////
193
189
  // Update
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/collections/operations/restoreVersion.ts"],"sourcesContent":["import { status as httpStatus } from 'http-status'\n\nimport type { FindOneArgs } from '../../database/types.js'\nimport type { JsonObject, PayloadRequest, PopulateType, SelectType } from '../../types/index.js'\nimport type { Collection, TypeWithID } from '../config/types.js'\n\nimport { executeAccess } from '../../auth/executeAccess.js'\nimport { hasWhereAccessResult } from '../../auth/types.js'\nimport { combineQueries } from '../../database/combineQueries.js'\nimport { APIError, Forbidden, NotFound } from '../../errors/index.js'\nimport { afterChange } from '../../fields/hooks/afterChange/index.js'\nimport { afterRead } from '../../fields/hooks/afterRead/index.js'\nimport { beforeChange } from '../../fields/hooks/beforeChange/index.js'\nimport { beforeValidate } from '../../fields/hooks/beforeValidate/index.js'\nimport { commitTransaction } from '../../utilities/commitTransaction.js'\nimport { deepCopyObjectSimple } from '../../utilities/deepCopyObject.js'\nimport { initTransaction } from '../../utilities/initTransaction.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport { sanitizeSelect } from '../../utilities/sanitizeSelect.js'\nimport { getLatestCollectionVersion } from '../../versions/getLatestCollectionVersion.js'\nimport { saveVersion } from '../../versions/saveVersion.js'\nimport { buildAfterOperation } from './utils.js'\n\nexport type Arguments = {\n collection: Collection\n currentDepth?: number\n depth?: number\n disableErrors?: boolean\n disableTransaction?: boolean\n draft?: boolean\n id: number | string\n overrideAccess?: boolean\n populate?: PopulateType\n req: PayloadRequest\n select?: SelectType\n showHiddenFields?: boolean\n}\n\nexport const restoreVersionOperation = async <\n TData extends JsonObject & TypeWithID = JsonObject & TypeWithID,\n>(\n args: Arguments,\n): Promise<TData> => {\n const {\n id,\n collection: { config: collectionConfig },\n depth,\n draft: draftArg = false,\n overrideAccess = false,\n populate,\n req,\n req: { fallbackLocale, locale, payload },\n select: incomingSelect,\n showHiddenFields,\n } = args\n\n try {\n const shouldCommit = !args.disableTransaction && (await initTransaction(args.req))\n\n // /////////////////////////////////////\n // beforeOperation - Collection\n // /////////////////////////////////////\n\n if (args.collection.config.hooks?.beforeOperation?.length) {\n for (const hook of args.collection.config.hooks.beforeOperation) {\n args =\n (await hook({\n args,\n collection: args.collection.config,\n context: args.req.context,\n operation: 'restoreVersion',\n req: args.req,\n })) || args\n }\n }\n\n if (!id) {\n throw new APIError('Missing ID of version to restore.', httpStatus.BAD_REQUEST)\n }\n\n // /////////////////////////////////////\n // Retrieve original raw version\n // /////////////////////////////////////\n\n const { docs: versionDocs } = await req.payload.db.findVersions({\n collection: collectionConfig.slug,\n limit: 1,\n locale: locale!,\n pagination: false,\n req,\n where: { id: { equals: id } },\n })\n\n const [rawVersionToRestore] = versionDocs\n\n if (!rawVersionToRestore) {\n throw new NotFound(req.t)\n }\n\n const { parent: parentDocID, version: versionToRestoreWithLocales } = rawVersionToRestore\n\n // /////////////////////////////////////\n // Access\n // /////////////////////////////////////\n\n const accessResults = !overrideAccess\n ? await executeAccess({ id: parentDocID, req }, collectionConfig.access.update)\n : true\n const hasWherePolicy = hasWhereAccessResult(accessResults)\n\n // /////////////////////////////////////\n // Retrieve document\n // /////////////////////////////////////\n\n const findOneArgs: FindOneArgs = {\n collection: collectionConfig.slug,\n locale: locale!,\n req,\n where: combineQueries({ id: { equals: parentDocID } }, accessResults),\n }\n\n // Get the document from the non versioned collection\n const doc = await req.payload.db.findOne<TData>(findOneArgs)\n\n if (!doc && !hasWherePolicy) {\n throw new NotFound(req.t)\n }\n if (!doc && hasWherePolicy) {\n throw new Forbidden(req.t)\n }\n\n if (collectionConfig.trash && doc?.deletedAt) {\n throw new APIError(\n `Cannot restore a version of a trashed document (ID: ${parentDocID}). Restore the document first.`,\n httpStatus.FORBIDDEN,\n )\n }\n\n // /////////////////////////////////////\n // fetch previousDoc\n // /////////////////////////////////////\n const prevDocWithLocales = await getLatestCollectionVersion({\n id: parentDocID,\n config: collectionConfig,\n payload,\n query: findOneArgs,\n req,\n })\n\n // originalDoc with hoisted localized data\n const originalDoc = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth: 0,\n doc: deepCopyObjectSimple(prevDocWithLocales),\n draft: draftArg,\n fallbackLocale: null,\n global: null,\n locale: locale!,\n overrideAccess: true,\n req,\n showHiddenFields: true,\n })\n\n // version data with hoisted localized data\n const prevVersionDoc = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth: 0,\n doc: deepCopyObjectSimple(rawVersionToRestore.version),\n draft: draftArg,\n fallbackLocale: null,\n global: null,\n locale: locale!,\n overrideAccess: true,\n req,\n showHiddenFields: true,\n })\n\n // /////////////////////////////////////\n // beforeValidate - Fields\n // /////////////////////////////////////\n\n let data = await beforeValidate({\n id: parentDocID,\n collection: collectionConfig,\n context: req.context,\n data: deepCopyObjectSimple(prevVersionDoc),\n doc: originalDoc,\n global: null,\n operation: 'update',\n overrideAccess,\n req,\n })\n\n // /////////////////////////////////////\n // beforeValidate - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.beforeValidate?.length) {\n for (const hook of collectionConfig.hooks.beforeValidate) {\n data =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n data,\n operation: 'update',\n originalDoc,\n req,\n })) || data\n }\n }\n\n // /////////////////////////////////////\n // beforeChange - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.beforeChange?.length) {\n for (const hook of collectionConfig.hooks.beforeChange) {\n data =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n data,\n operation: 'update',\n originalDoc,\n req,\n })) || data\n }\n }\n\n // /////////////////////////////////////\n // beforeChange - Fields\n // /////////////////////////////////////\n\n let result = await beforeChange({\n id: parentDocID,\n collection: collectionConfig,\n context: req.context,\n data: { ...data, id: parentDocID },\n doc: originalDoc,\n docWithLocales: versionToRestoreWithLocales,\n global: null,\n operation: 'update',\n overrideAccess,\n req,\n skipValidation:\n draftArg && collectionConfig.versions.drafts && !collectionConfig.versions.drafts.validate,\n })\n\n // /////////////////////////////////////\n // Update\n // /////////////////////////////////////\n\n const select = sanitizeSelect({\n fields: collectionConfig.flattenedFields,\n forceSelect: collectionConfig.forceSelect,\n select: incomingSelect,\n })\n\n // Ensure updatedAt date is always updated\n result.updatedAt = new Date().toISOString()\n // Ensure status respects restoreAsDraft arg\n result._status = draftArg ? 'draft' : result._status\n if (!draftArg) {\n result = await req.payload.db.updateOne({\n id: parentDocID,\n collection: collectionConfig.slug,\n data: result,\n req,\n select,\n })\n }\n\n // /////////////////////////////////////\n // Save restored doc as a new version\n // /////////////////////////////////////\n\n result = await saveVersion({\n id: parentDocID,\n autosave: false,\n collection: collectionConfig,\n docWithLocales: result,\n draft: draftArg,\n operation: 'restoreVersion',\n payload,\n req,\n select,\n })\n\n // /////////////////////////////////////\n // afterRead - Fields\n // /////////////////////////////////////\n\n result = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth: depth!,\n doc: result,\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n draft: undefined,\n fallbackLocale: fallbackLocale!,\n global: null,\n locale: locale!,\n overrideAccess,\n populate,\n req,\n select,\n showHiddenFields: showHiddenFields!,\n })\n\n // /////////////////////////////////////\n // afterRead - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.afterRead?.length) {\n for (const hook of collectionConfig.hooks.afterRead) {\n result =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: result,\n req,\n })) || result\n }\n }\n\n // /////////////////////////////////////\n // afterChange - Fields\n // /////////////////////////////////////\n\n result = await afterChange({\n collection: collectionConfig,\n context: req.context,\n data: result,\n doc: result,\n global: null,\n operation: 'update',\n previousDoc: prevDocWithLocales,\n req,\n })\n\n // /////////////////////////////////////\n // afterChange - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.afterChange?.length) {\n for (const hook of collectionConfig.hooks.afterChange) {\n result =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n data: result,\n doc: result,\n operation: 'update',\n previousDoc: prevDocWithLocales,\n req,\n })) || result\n }\n }\n\n // /////////////////////////////////////\n // afterOperation - Collection\n // /////////////////////////////////////\n\n result = await buildAfterOperation({\n args,\n collection: collectionConfig,\n operation: 'restoreVersion',\n result,\n })\n\n if (shouldCommit) {\n await commitTransaction(req)\n }\n\n return result\n } catch (error: unknown) {\n await killTransaction(req)\n throw error\n }\n}\n"],"names":["status","httpStatus","executeAccess","hasWhereAccessResult","combineQueries","APIError","Forbidden","NotFound","afterChange","afterRead","beforeChange","beforeValidate","commitTransaction","deepCopyObjectSimple","initTransaction","killTransaction","sanitizeSelect","getLatestCollectionVersion","saveVersion","buildAfterOperation","restoreVersionOperation","args","id","collection","config","collectionConfig","depth","draft","draftArg","overrideAccess","populate","req","fallbackLocale","locale","payload","select","incomingSelect","showHiddenFields","shouldCommit","disableTransaction","hooks","beforeOperation","length","hook","context","operation","BAD_REQUEST","docs","versionDocs","db","findVersions","slug","limit","pagination","where","equals","rawVersionToRestore","t","parent","parentDocID","version","versionToRestoreWithLocales","accessResults","access","update","hasWherePolicy","findOneArgs","doc","findOne","trash","deletedAt","FORBIDDEN","prevDocWithLocales","query","originalDoc","global","prevVersionDoc","data","result","docWithLocales","skipValidation","versions","drafts","validate","fields","flattenedFields","forceSelect","updatedAt","Date","toISOString","_status","updateOne","autosave","undefined","previousDoc","error"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/collections/operations/restoreVersion.ts"],"sourcesContent":["import { status as httpStatus } from 'http-status'\n\nimport type { FindOneArgs } from '../../database/types.js'\nimport type { JsonObject, PayloadRequest, PopulateType, SelectType } from '../../types/index.js'\nimport type { Collection, TypeWithID } from '../config/types.js'\n\nimport { executeAccess } from '../../auth/executeAccess.js'\nimport { hasWhereAccessResult } from '../../auth/types.js'\nimport { combineQueries } from '../../database/combineQueries.js'\nimport { APIError, Forbidden, NotFound } from '../../errors/index.js'\nimport { afterChange } from '../../fields/hooks/afterChange/index.js'\nimport { afterRead } from '../../fields/hooks/afterRead/index.js'\nimport { beforeChange } from '../../fields/hooks/beforeChange/index.js'\nimport { beforeValidate } from '../../fields/hooks/beforeValidate/index.js'\nimport { commitTransaction } from '../../utilities/commitTransaction.js'\nimport { deepCopyObjectSimple } from '../../utilities/deepCopyObject.js'\nimport { hasDraftValidationEnabled } from '../../utilities/getVersionsConfig.js'\nimport { initTransaction } from '../../utilities/initTransaction.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport { sanitizeSelect } from '../../utilities/sanitizeSelect.js'\nimport { getLatestCollectionVersion } from '../../versions/getLatestCollectionVersion.js'\nimport { saveVersion } from '../../versions/saveVersion.js'\nimport { buildAfterOperation } from './utilities/buildAfterOperation.js'\nimport { buildBeforeOperation } from './utilities/buildBeforeOperation.js'\n\nexport type Arguments = {\n collection: Collection\n currentDepth?: number\n depth?: number\n disableErrors?: boolean\n disableTransaction?: boolean\n draft?: boolean\n id: number | string\n overrideAccess?: boolean\n populate?: PopulateType\n req: PayloadRequest\n select?: SelectType\n showHiddenFields?: boolean\n}\n\nexport const restoreVersionOperation = async <\n TData extends JsonObject & TypeWithID = JsonObject & TypeWithID,\n>(\n args: Arguments,\n): Promise<TData> => {\n const {\n id,\n collection: { config: collectionConfig },\n depth,\n draft: draftArg = false,\n overrideAccess = false,\n populate,\n req,\n req: { fallbackLocale, locale, payload },\n select: incomingSelect,\n showHiddenFields,\n } = args\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: 'restoreVersion',\n })\n\n if (!id) {\n throw new APIError('Missing ID of version to restore.', httpStatus.BAD_REQUEST)\n }\n\n // /////////////////////////////////////\n // Retrieve original raw version\n // /////////////////////////////////////\n\n const { docs: versionDocs } = await req.payload.db.findVersions({\n collection: collectionConfig.slug,\n limit: 1,\n locale: locale!,\n pagination: false,\n req,\n where: { id: { equals: id } },\n })\n\n const [rawVersionToRestore] = versionDocs\n\n if (!rawVersionToRestore) {\n throw new NotFound(req.t)\n }\n\n const { parent: parentDocID, version: versionToRestoreWithLocales } = rawVersionToRestore\n\n // /////////////////////////////////////\n // Access\n // /////////////////////////////////////\n\n const accessResults = !overrideAccess\n ? await executeAccess({ id: parentDocID, req }, collectionConfig.access.update)\n : true\n const hasWherePolicy = hasWhereAccessResult(accessResults)\n\n // /////////////////////////////////////\n // Retrieve document\n // /////////////////////////////////////\n\n const findOneArgs: FindOneArgs = {\n collection: collectionConfig.slug,\n locale: locale!,\n req,\n where: combineQueries({ id: { equals: parentDocID } }, accessResults),\n }\n\n // Get the document from the non versioned collection\n const doc = await req.payload.db.findOne<TData>(findOneArgs)\n\n if (!doc && !hasWherePolicy) {\n throw new NotFound(req.t)\n }\n if (!doc && hasWherePolicy) {\n throw new Forbidden(req.t)\n }\n\n if (collectionConfig.trash && doc?.deletedAt) {\n throw new APIError(\n `Cannot restore a version of a trashed document (ID: ${parentDocID}). Restore the document first.`,\n httpStatus.FORBIDDEN,\n )\n }\n\n // /////////////////////////////////////\n // fetch previousDoc\n // /////////////////////////////////////\n const prevDocWithLocales = await getLatestCollectionVersion({\n id: parentDocID,\n config: collectionConfig,\n payload,\n query: findOneArgs,\n req,\n })\n\n // originalDoc with hoisted localized data\n const originalDoc = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth: 0,\n doc: deepCopyObjectSimple(prevDocWithLocales),\n draft: draftArg,\n fallbackLocale: null,\n global: null,\n locale: locale!,\n overrideAccess: true,\n req,\n showHiddenFields: true,\n })\n\n // version data with hoisted localized data\n const prevVersionDoc = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth: 0,\n doc: deepCopyObjectSimple(rawVersionToRestore.version),\n draft: draftArg,\n fallbackLocale: null,\n global: null,\n locale: locale!,\n overrideAccess: true,\n req,\n showHiddenFields: true,\n })\n\n // /////////////////////////////////////\n // beforeValidate - Fields\n // /////////////////////////////////////\n\n let data = await beforeValidate({\n id: parentDocID,\n collection: collectionConfig,\n context: req.context,\n data: deepCopyObjectSimple(prevVersionDoc),\n doc: originalDoc,\n global: null,\n operation: 'update',\n overrideAccess,\n req,\n })\n\n // /////////////////////////////////////\n // beforeValidate - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.beforeValidate?.length) {\n for (const hook of collectionConfig.hooks.beforeValidate) {\n data =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n data,\n operation: 'update',\n originalDoc,\n req,\n })) || data\n }\n }\n\n // /////////////////////////////////////\n // beforeChange - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.beforeChange?.length) {\n for (const hook of collectionConfig.hooks.beforeChange) {\n data =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n data,\n operation: 'update',\n originalDoc,\n req,\n })) || data\n }\n }\n\n // /////////////////////////////////////\n // beforeChange - Fields\n // /////////////////////////////////////\n\n let result = await beforeChange({\n id: parentDocID,\n collection: collectionConfig,\n context: req.context,\n data: { ...data, id: parentDocID },\n doc: originalDoc,\n docWithLocales: versionToRestoreWithLocales,\n global: null,\n operation: 'update',\n overrideAccess,\n req,\n skipValidation: draftArg && !hasDraftValidationEnabled(collectionConfig),\n })\n\n // /////////////////////////////////////\n // Update\n // /////////////////////////////////////\n\n const select = sanitizeSelect({\n fields: collectionConfig.flattenedFields,\n forceSelect: collectionConfig.forceSelect,\n select: incomingSelect,\n })\n\n // Ensure updatedAt date is always updated\n result.updatedAt = new Date().toISOString()\n // Ensure status respects restoreAsDraft arg\n result._status = draftArg ? 'draft' : result._status\n if (!draftArg) {\n result = await req.payload.db.updateOne({\n id: parentDocID,\n collection: collectionConfig.slug,\n data: result,\n req,\n select,\n })\n }\n\n // /////////////////////////////////////\n // Save restored doc as a new version\n // /////////////////////////////////////\n\n result = await saveVersion({\n id: parentDocID,\n autosave: false,\n collection: collectionConfig,\n docWithLocales: result,\n draft: draftArg,\n operation: 'restoreVersion',\n payload,\n req,\n select,\n })\n\n // /////////////////////////////////////\n // afterRead - Fields\n // /////////////////////////////////////\n\n result = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth: depth!,\n doc: result,\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n draft: undefined,\n fallbackLocale: fallbackLocale!,\n global: null,\n locale: locale!,\n overrideAccess,\n populate,\n req,\n select,\n showHiddenFields: showHiddenFields!,\n })\n\n // /////////////////////////////////////\n // afterRead - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.afterRead?.length) {\n for (const hook of collectionConfig.hooks.afterRead) {\n result =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: result,\n req,\n })) || result\n }\n }\n\n // /////////////////////////////////////\n // afterChange - Fields\n // /////////////////////////////////////\n\n result = await afterChange({\n collection: collectionConfig,\n context: req.context,\n data: result,\n doc: result,\n global: null,\n operation: 'update',\n previousDoc: prevDocWithLocales,\n req,\n })\n\n // /////////////////////////////////////\n // afterChange - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.afterChange?.length) {\n for (const hook of collectionConfig.hooks.afterChange) {\n result =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n data: result,\n doc: result,\n operation: 'update',\n previousDoc: prevDocWithLocales,\n req,\n })) || result\n }\n }\n\n // /////////////////////////////////////\n // afterOperation - Collection\n // /////////////////////////////////////\n\n result = await buildAfterOperation({\n args,\n collection: collectionConfig,\n operation: 'restoreVersion',\n result,\n })\n\n if (shouldCommit) {\n await commitTransaction(req)\n }\n\n return result\n } catch (error: unknown) {\n await killTransaction(req)\n throw error\n }\n}\n"],"names":["status","httpStatus","executeAccess","hasWhereAccessResult","combineQueries","APIError","Forbidden","NotFound","afterChange","afterRead","beforeChange","beforeValidate","commitTransaction","deepCopyObjectSimple","hasDraftValidationEnabled","initTransaction","killTransaction","sanitizeSelect","getLatestCollectionVersion","saveVersion","buildAfterOperation","buildBeforeOperation","restoreVersionOperation","args","id","collection","config","collectionConfig","depth","draft","draftArg","overrideAccess","populate","req","fallbackLocale","locale","payload","select","incomingSelect","showHiddenFields","shouldCommit","disableTransaction","operation","BAD_REQUEST","docs","versionDocs","db","findVersions","slug","limit","pagination","where","equals","rawVersionToRestore","t","parent","parentDocID","version","versionToRestoreWithLocales","accessResults","access","update","hasWherePolicy","findOneArgs","doc","findOne","trash","deletedAt","FORBIDDEN","prevDocWithLocales","query","originalDoc","context","global","prevVersionDoc","data","hooks","length","hook","result","docWithLocales","skipValidation","fields","flattenedFields","forceSelect","updatedAt","Date","toISOString","_status","updateOne","autosave","undefined","previousDoc","error"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/collections/operations/update.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAKhD,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AACjG,OAAO,KAAK,EACV,mBAAmB,EACnB,UAAU,EAEV,8BAA8B,EAC9B,wBAAwB,EACzB,MAAM,oBAAoB,CAAA;AAO3B,OAAO,EAAE,KAAK,cAAc,EAAwB,MAAM,gBAAgB,CAAA;AAgB1E,MAAM,MAAM,SAAS,CAAC,KAAK,SAAS,cAAc,IAAI;IACpD,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,UAAU,EAAE,UAAU,CAAA;IACtB,IAAI,EAAE,WAAW,CAAC,8BAA8B,CAAC,KAAK,CAAC,CAAC,CAAA;IACxD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,wBAAwB,CAAC,EAAE,OAAO,CAAA;IAClC,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,QAAQ,CAAC,EAAE,YAAY,CAAA;IACvB,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,GAAG,EAAE,cAAc,CAAA;IACnB,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B;;;;OAIG;IACH,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,KAAK,EAAE,KAAK,CAAA;CACb,CAAA;AAED,eAAO,MAAM,eAAe,GAC1B,KAAK,SAAS,cAAc,EAC5B,OAAO,SAAS,wBAAwB,CAAC,KAAK,CAAC,gBAEjC,SAAS,CAAC,KAAK,CAAC,KAC7B,OAAO,CAAC,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,CAuP7C,CAAA"}
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/collections/operations/update.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAKhD,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AACjG,OAAO,KAAK,EACV,mBAAmB,EACnB,UAAU,EAEV,8BAA8B,EAC9B,wBAAwB,EACzB,MAAM,oBAAoB,CAAA;AAO3B,OAAO,EAAE,KAAK,cAAc,EAAwB,MAAM,gBAAgB,CAAA;AAkB1E,MAAM,MAAM,SAAS,CAAC,KAAK,SAAS,cAAc,IAAI;IACpD,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,UAAU,EAAE,UAAU,CAAA;IACtB,IAAI,EAAE,WAAW,CAAC,8BAA8B,CAAC,KAAK,CAAC,CAAC,CAAA;IACxD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,wBAAwB,CAAC,EAAE,OAAO,CAAA;IAClC,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,QAAQ,CAAC,EAAE,YAAY,CAAA;IACvB,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,GAAG,EAAE,cAAc,CAAA;IACnB,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B;;;;OAIG;IACH,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,KAAK,EAAE,KAAK,CAAA;CACb,CAAA;AAED,eAAO,MAAM,eAAe,GAC1B,KAAK,SAAS,cAAc,EAC5B,OAAO,SAAS,wBAAwB,CAAC,KAAK,CAAC,gBAEjC,SAAS,CAAC,KAAK,CAAC,KAC7B,OAAO,CAAC,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,CAgP7C,CAAA"}
@@ -9,6 +9,7 @@ import { generateFileData } from '../../uploads/generateFileData.js';
9
9
  import { unlinkTempFiles } from '../../uploads/unlinkTempFiles.js';
10
10
  import { appendNonTrashedFilter } from '../../utilities/appendNonTrashedFilter.js';
11
11
  import { commitTransaction } from '../../utilities/commitTransaction.js';
12
+ import { hasDraftsEnabled } from '../../utilities/getVersionsConfig.js';
12
13
  import { initTransaction } from '../../utilities/initTransaction.js';
13
14
  import { isErrorPublic } from '../../utilities/isErrorPublic.js';
14
15
  import { killTransaction } from '../../utilities/killTransaction.js';
@@ -16,9 +17,10 @@ import { sanitizeSelect } from '../../utilities/sanitizeSelect.js';
16
17
  import { buildVersionCollectionFields } from '../../versions/buildCollectionFields.js';
17
18
  import { appendVersionToQueryKey } from '../../versions/drafts/appendVersionToQueryKey.js';
18
19
  import { getQueryDraftsSort } from '../../versions/drafts/getQueryDraftsSort.js';
20
+ import { buildAfterOperation } from './utilities/buildAfterOperation.js';
21
+ import { buildBeforeOperation } from './utilities/buildBeforeOperation.js';
19
22
  import { sanitizeSortQuery } from './utilities/sanitizeSortQuery.js';
20
23
  import { updateDocument } from './utilities/update.js';
21
- import { buildAfterOperation } from './utils.js';
22
24
  export const updateOperation = async (incomingArgs)=>{
23
25
  let args = incomingArgs;
24
26
  if (args.collection.config.disableBulkEdit && !args.overrideAccess) {
@@ -29,23 +31,17 @@ export const updateOperation = async (incomingArgs)=>{
29
31
  // /////////////////////////////////////
30
32
  // beforeOperation - Collection
31
33
  // /////////////////////////////////////
32
- if (args.collection.config.hooks?.beforeOperation?.length) {
33
- for (const hook of args.collection.config.hooks.beforeOperation){
34
- args = await hook({
35
- args,
36
- collection: args.collection.config,
37
- context: args.req.context,
38
- operation: 'update',
39
- req: args.req
40
- }) || args;
41
- }
42
- }
34
+ args = await buildBeforeOperation({
35
+ args,
36
+ collection: args.collection.config,
37
+ operation: 'update'
38
+ });
43
39
  const { autosave = false, collection: { config: collectionConfig }, collection, depth, draft: draftArg = false, limit = 0, overrideAccess, overrideLock, overwriteExistingFiles = false, populate, publishSpecificLocale, req: { fallbackLocale, locale, payload: { config }, payload }, req, select: incomingSelect, showHiddenFields, sort: incomingSort, trash = false, where } = args;
44
40
  if (!where) {
45
41
  throw new APIError("Missing 'where' query of documents to update.", httpStatus.BAD_REQUEST);
46
42
  }
47
43
  const { data: bulkUpdateData } = args;
48
- const shouldSaveDraft = Boolean(draftArg && collectionConfig.versions.drafts);
44
+ const shouldSaveDraft = Boolean(draftArg && hasDraftsEnabled(collectionConfig));
49
45
  // /////////////////////////////////////
50
46
  // Access
51
47
  // /////////////////////////////////////
@@ -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 { 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 { sanitizeSortQuery } from './utilities/sanitizeSortQuery.js'\nimport { updateDocument } from './utilities/update.js'\nimport { buildAfterOperation } from './utils.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 if (args.collection.config.hooks?.beforeOperation?.length) {\n for (const hook of args.collection.config.hooks.beforeOperation) {\n args =\n (await hook({\n args,\n collection: args.collection.config,\n context: args.req.context,\n operation: 'update',\n req: args.req,\n })) || args\n }\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 && collectionConfig.versions.drafts)\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","initTransaction","isErrorPublic","killTransaction","sanitizeSelect","buildVersionCollectionFields","appendVersionToQueryKey","getQueryDraftsSort","sanitizeSortQuery","updateDocument","buildAfterOperation","updateOperation","incomingArgs","args","collection","config","disableBulkEdit","overrideAccess","slug","shouldCommit","disableTransaction","req","hooks","beforeOperation","length","hook","context","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","versions","drafts","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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"}
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":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"updateByID.d.ts","sourceRoot":"","sources":["../../../src/collections/operations/updateByID.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAKhD,OAAO,KAAK,EACV,cAAc,EACd,YAAY,EACZ,UAAU,EACV,6BAA6B,EAC9B,MAAM,sBAAsB,CAAA;AAC7B,OAAO,KAAK,EACV,UAAU,EACV,8BAA8B,EAC9B,wBAAwB,EAEzB,MAAM,oBAAoB,CAAA;AAM3B,OAAO,EAAE,KAAK,cAAc,EAAwB,MAAM,gBAAgB,CAAA;AAY1E,MAAM,MAAM,SAAS,CAAC,KAAK,SAAS,cAAc,IAAI;IACpD,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,UAAU,EAAE,UAAU,CAAA;IACtB,IAAI,EAAE,WAAW,CAAC,8BAA8B,CAAC,KAAK,CAAC,CAAC,CAAA;IACxD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,wBAAwB,CAAC,EAAE,OAAO,CAAA;IAClC,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,QAAQ,CAAC,EAAE,YAAY,CAAA;IACvB,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,GAAG,EAAE,cAAc,CAAA;IACnB,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AAED,eAAO,MAAM,mBAAmB,GAC9B,KAAK,SAAS,cAAc,EAC5B,OAAO,SAAS,wBAAwB,CAAC,KAAK,CAAC,6BAEjC,SAAS,CAAC,KAAK,CAAC,KAC7B,OAAO,CAAC,6BAA6B,CAAC,KAAK,EAAE,OAAO,CAAC,CAqMvD,CAAA"}
1
+ {"version":3,"file":"updateByID.d.ts","sourceRoot":"","sources":["../../../src/collections/operations/updateByID.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAKhD,OAAO,KAAK,EACV,cAAc,EACd,YAAY,EACZ,UAAU,EACV,6BAA6B,EAC9B,MAAM,sBAAsB,CAAA;AAC7B,OAAO,KAAK,EACV,UAAU,EACV,8BAA8B,EAC9B,wBAAwB,EAEzB,MAAM,oBAAoB,CAAA;AAM3B,OAAO,EAAE,KAAK,cAAc,EAAwB,MAAM,gBAAgB,CAAA;AAa1E,MAAM,MAAM,SAAS,CAAC,KAAK,SAAS,cAAc,IAAI;IACpD,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,UAAU,EAAE,UAAU,CAAA;IACtB,IAAI,EAAE,WAAW,CAAC,8BAA8B,CAAC,KAAK,CAAC,CAAC,CAAA;IACxD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,wBAAwB,CAAC,EAAE,OAAO,CAAA;IAClC,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,QAAQ,CAAC,EAAE,YAAY,CAAA;IACvB,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,GAAG,EAAE,cAAc,CAAA;IACnB,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AAED,eAAO,MAAM,mBAAmB,GAC9B,KAAK,SAAS,cAAc,EAC5B,OAAO,SAAS,wBAAwB,CAAC,KAAK,CAAC,6BAEjC,SAAS,CAAC,KAAK,CAAC,KAC7B,OAAO,CAAC,6BAA6B,CAAC,KAAK,EAAE,OAAO,CAAC,CA8LvD,CAAA"}
@@ -12,8 +12,9 @@ import { initTransaction } from '../../utilities/initTransaction.js';
12
12
  import { killTransaction } from '../../utilities/killTransaction.js';
13
13
  import { sanitizeSelect } from '../../utilities/sanitizeSelect.js';
14
14
  import { getLatestCollectionVersion } from '../../versions/getLatestCollectionVersion.js';
15
+ import { buildAfterOperation } from './utilities/buildAfterOperation.js';
16
+ import { buildBeforeOperation } from './utilities/buildBeforeOperation.js';
15
17
  import { updateDocument } from './utilities/update.js';
16
- import { buildAfterOperation } from './utils.js';
17
18
  export const updateByIDOperation = async (incomingArgs)=>{
18
19
  let args = incomingArgs;
19
20
  try {
@@ -21,17 +22,11 @@ export const updateByIDOperation = async (incomingArgs)=>{
21
22
  // /////////////////////////////////////
22
23
  // beforeOperation - Collection
23
24
  // /////////////////////////////////////
24
- if (args.collection.config.hooks?.beforeOperation?.length) {
25
- for (const hook of args.collection.config.hooks.beforeOperation){
26
- args = await hook({
27
- args,
28
- collection: args.collection.config,
29
- context: args.req.context,
30
- operation: 'update',
31
- req: args.req
32
- }) || args;
33
- }
34
- }
25
+ args = await buildBeforeOperation({
26
+ args,
27
+ collection: args.collection.config,
28
+ operation: 'update'
29
+ });
35
30
  if (args.publishSpecificLocale) {
36
31
  args.req.locale = args.publishSpecificLocale;
37
32
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/collections/operations/updateByID.ts"],"sourcesContent":["import type { DeepPartial } from 'ts-essentials'\n\nimport { status as httpStatus } from 'http-status'\n\nimport type { FindOneArgs } from '../../database/types.js'\nimport type {\n PayloadRequest,\n PopulateType,\n SelectType,\n TransformCollectionWithSelect,\n} from '../../types/index.js'\nimport type {\n Collection,\n RequiredDataFromCollectionSlug,\n SelectFromCollectionSlug,\n TypeWithID,\n} from '../config/types.js'\n\nimport { executeAccess } from '../../auth/executeAccess.js'\nimport { hasWhereAccessResult } from '../../auth/types.js'\nimport { combineQueries } from '../../database/combineQueries.js'\nimport { APIError, Forbidden, NotFound } 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 { initTransaction } from '../../utilities/initTransaction.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport { sanitizeSelect } from '../../utilities/sanitizeSelect.js'\nimport { getLatestCollectionVersion } from '../../versions/getLatestCollectionVersion.js'\nimport { updateDocument } from './utilities/update.js'\nimport { buildAfterOperation } from './utils.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 id: number | string\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 trash?: boolean\n}\n\nexport const updateByIDOperation = async <\n TSlug extends CollectionSlug,\n TSelect extends SelectFromCollectionSlug<TSlug> = SelectType,\n>(\n incomingArgs: Arguments<TSlug>,\n): Promise<TransformCollectionWithSelect<TSlug, TSelect>> => {\n let args = incomingArgs\n\n try {\n const shouldCommit = !args.disableTransaction && (await initTransaction(args.req))\n\n // /////////////////////////////////////\n // beforeOperation - Collection\n // /////////////////////////////////////\n\n if (args.collection.config.hooks?.beforeOperation?.length) {\n for (const hook of args.collection.config.hooks.beforeOperation) {\n args =\n (await hook({\n args,\n collection: args.collection.config,\n context: args.req.context,\n operation: 'update',\n req: args.req,\n })) || args\n }\n }\n\n if (args.publishSpecificLocale) {\n args.req.locale = args.publishSpecificLocale\n }\n\n const {\n id,\n autosave = false,\n collection: { config: collectionConfig },\n collection,\n depth,\n draft: draftArg = false,\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 trash = false,\n } = args\n\n if (!id) {\n throw new APIError('Missing ID of document to update.', httpStatus.BAD_REQUEST)\n }\n\n const { data } = args\n\n // /////////////////////////////////////\n // Access\n // /////////////////////////////////////\n\n const accessResults = !overrideAccess\n ? await executeAccess({ id, data, req }, collectionConfig.access.update)\n : true\n const hasWherePolicy = hasWhereAccessResult(accessResults)\n\n // /////////////////////////////////////\n // Retrieve document\n // /////////////////////////////////////\n\n const where = { id: { equals: id } }\n\n let fullWhere = combineQueries(where, accessResults)\n\n const isTrashAttempt =\n collectionConfig.trash &&\n typeof data === 'object' &&\n data !== null &&\n 'deletedAt' in data &&\n data.deletedAt != null\n\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 const findOneArgs: FindOneArgs = {\n collection: collectionConfig.slug,\n locale: locale!,\n req,\n where: fullWhere,\n }\n\n const docWithLocales = await getLatestCollectionVersion<\n RequiredDataFromCollectionSlug<TSlug> & TypeWithID\n >({\n id,\n config: collectionConfig,\n payload,\n query: findOneArgs,\n req,\n })\n\n if (!docWithLocales && !hasWherePolicy) {\n throw new NotFound(req.t)\n }\n if (!docWithLocales && hasWherePolicy) {\n throw new Forbidden(req.t)\n }\n if (!docWithLocales) {\n throw new NotFound(req.t)\n }\n\n // /////////////////////////////////////\n // Generate data for all files and sizes\n // /////////////////////////////////////\n\n const { data: newFileData, files: filesToUpload } = await generateFileData({\n collection,\n config,\n data,\n operation: 'update',\n overwriteExistingFiles,\n req,\n throwOnMissingFile: false,\n })\n\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\n let result = await updateDocument<TSlug, TSelect>({\n id,\n accessResults,\n autosave,\n collectionConfig,\n config,\n data: deepCopyObjectSimple(newFileData),\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 await unlinkTempFiles({\n collectionConfig,\n config,\n req,\n })\n\n // /////////////////////////////////////\n // afterOperation - Collection\n // /////////////////////////////////////\n\n result = (await buildAfterOperation({\n args,\n collection: collectionConfig,\n operation: 'updateByID',\n result,\n })) as TransformCollectionWithSelect<TSlug, TSelect>\n\n // /////////////////////////////////////\n // Return results\n // /////////////////////////////////////\n\n if (shouldCommit) {\n await commitTransaction(req)\n }\n\n return result\n } catch (error: unknown) {\n await killTransaction(args.req)\n throw error\n }\n}\n"],"names":["status","httpStatus","executeAccess","hasWhereAccessResult","combineQueries","APIError","Forbidden","NotFound","deepCopyObjectSimple","generateFileData","unlinkTempFiles","appendNonTrashedFilter","commitTransaction","initTransaction","killTransaction","sanitizeSelect","getLatestCollectionVersion","updateDocument","buildAfterOperation","updateByIDOperation","incomingArgs","args","shouldCommit","disableTransaction","req","collection","config","hooks","beforeOperation","length","hook","context","operation","publishSpecificLocale","locale","id","autosave","collectionConfig","depth","draft","draftArg","overrideAccess","overrideLock","overwriteExistingFiles","populate","fallbackLocale","payload","select","incomingSelect","showHiddenFields","trash","BAD_REQUEST","data","accessResults","access","update","hasWherePolicy","where","equals","fullWhere","isTrashAttempt","deletedAt","deleteAccessResult","delete","enableTrash","findOneArgs","slug","docWithLocales","query","t","newFileData","files","filesToUpload","throwOnMissingFile","fields","flattenedFields","forceSelect","result","error"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/collections/operations/updateByID.ts"],"sourcesContent":["import type { DeepPartial } from 'ts-essentials'\n\nimport { status as httpStatus } from 'http-status'\n\nimport type { FindOneArgs } from '../../database/types.js'\nimport type {\n PayloadRequest,\n PopulateType,\n SelectType,\n TransformCollectionWithSelect,\n} from '../../types/index.js'\nimport type {\n Collection,\n RequiredDataFromCollectionSlug,\n SelectFromCollectionSlug,\n TypeWithID,\n} from '../config/types.js'\n\nimport { executeAccess } from '../../auth/executeAccess.js'\nimport { hasWhereAccessResult } from '../../auth/types.js'\nimport { combineQueries } from '../../database/combineQueries.js'\nimport { APIError, Forbidden, NotFound } 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 { initTransaction } from '../../utilities/initTransaction.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport { sanitizeSelect } from '../../utilities/sanitizeSelect.js'\nimport { getLatestCollectionVersion } from '../../versions/getLatestCollectionVersion.js'\nimport { buildAfterOperation } from './utilities/buildAfterOperation.js'\nimport { buildBeforeOperation } from './utilities/buildBeforeOperation.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 id: number | string\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 trash?: boolean\n}\n\nexport const updateByIDOperation = async <\n TSlug extends CollectionSlug,\n TSelect extends SelectFromCollectionSlug<TSlug> = SelectType,\n>(\n incomingArgs: Arguments<TSlug>,\n): Promise<TransformCollectionWithSelect<TSlug, TSelect>> => {\n let args = incomingArgs\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 if (args.publishSpecificLocale) {\n args.req.locale = args.publishSpecificLocale\n }\n\n const {\n id,\n autosave = false,\n collection: { config: collectionConfig },\n collection,\n depth,\n draft: draftArg = false,\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 trash = false,\n } = args\n\n if (!id) {\n throw new APIError('Missing ID of document to update.', httpStatus.BAD_REQUEST)\n }\n\n const { data } = args\n\n // /////////////////////////////////////\n // Access\n // /////////////////////////////////////\n\n const accessResults = !overrideAccess\n ? await executeAccess({ id, data, req }, collectionConfig.access.update)\n : true\n const hasWherePolicy = hasWhereAccessResult(accessResults)\n\n // /////////////////////////////////////\n // Retrieve document\n // /////////////////////////////////////\n\n const where = { id: { equals: id } }\n\n let fullWhere = combineQueries(where, accessResults)\n\n const isTrashAttempt =\n collectionConfig.trash &&\n typeof data === 'object' &&\n data !== null &&\n 'deletedAt' in data &&\n data.deletedAt != null\n\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 const findOneArgs: FindOneArgs = {\n collection: collectionConfig.slug,\n locale: locale!,\n req,\n where: fullWhere,\n }\n\n const docWithLocales = await getLatestCollectionVersion<\n RequiredDataFromCollectionSlug<TSlug> & TypeWithID\n >({\n id,\n config: collectionConfig,\n payload,\n query: findOneArgs,\n req,\n })\n\n if (!docWithLocales && !hasWherePolicy) {\n throw new NotFound(req.t)\n }\n if (!docWithLocales && hasWherePolicy) {\n throw new Forbidden(req.t)\n }\n if (!docWithLocales) {\n throw new NotFound(req.t)\n }\n\n // /////////////////////////////////////\n // Generate data for all files and sizes\n // /////////////////////////////////////\n\n const { data: newFileData, files: filesToUpload } = await generateFileData({\n collection,\n config,\n data,\n operation: 'update',\n overwriteExistingFiles,\n req,\n throwOnMissingFile: false,\n })\n\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\n let result = await updateDocument<TSlug, TSelect>({\n id,\n accessResults,\n autosave,\n collectionConfig,\n config,\n data: deepCopyObjectSimple(newFileData),\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 await unlinkTempFiles({\n collectionConfig,\n config,\n req,\n })\n\n // /////////////////////////////////////\n // afterOperation - Collection\n // /////////////////////////////////////\n\n result = (await buildAfterOperation({\n args,\n collection: collectionConfig,\n operation: 'updateByID',\n result,\n })) as TransformCollectionWithSelect<TSlug, TSelect>\n\n // /////////////////////////////////////\n // Return results\n // /////////////////////////////////////\n\n if (shouldCommit) {\n await commitTransaction(req)\n }\n\n return result\n } catch (error: unknown) {\n await killTransaction(args.req)\n throw error\n }\n}\n"],"names":["status","httpStatus","executeAccess","hasWhereAccessResult","combineQueries","APIError","Forbidden","NotFound","deepCopyObjectSimple","generateFileData","unlinkTempFiles","appendNonTrashedFilter","commitTransaction","initTransaction","killTransaction","sanitizeSelect","getLatestCollectionVersion","buildAfterOperation","buildBeforeOperation","updateDocument","updateByIDOperation","incomingArgs","args","shouldCommit","disableTransaction","req","collection","config","operation","publishSpecificLocale","locale","id","autosave","collectionConfig","depth","draft","draftArg","overrideAccess","overrideLock","overwriteExistingFiles","populate","fallbackLocale","payload","select","incomingSelect","showHiddenFields","trash","BAD_REQUEST","data","accessResults","access","update","hasWherePolicy","where","equals","fullWhere","isTrashAttempt","deletedAt","deleteAccessResult","delete","enableTrash","findOneArgs","slug","docWithLocales","query","t","newFileData","files","filesToUpload","throwOnMissingFile","fields","flattenedFields","forceSelect","result","error"],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { CollectionSlug } from '../../../index.js';
2
+ import type { AfterOperationArg, OperationMap, OperationResult } from './types.js';
3
+ export declare const buildAfterOperation: <TOperationGeneric extends CollectionSlug, O extends keyof OperationMap<TOperationGeneric> = keyof OperationMap<TOperationGeneric>>(operationArgs: {
4
+ operation: O;
5
+ } & Omit<AfterOperationArg<TOperationGeneric>, "req">) => Promise<any | OperationResult<TOperationGeneric, O>>;
6
+ //# sourceMappingURL=buildAfterOperation.d.ts.map