payload 4.0.0-internal.293e026 → 4.0.0-internal.2fddfc0

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 (205) hide show
  1. package/dist/admin/fields/Row.d.ts +2 -2
  2. package/dist/admin/fields/Row.d.ts.map +1 -1
  3. package/dist/admin/fields/Row.js.map +1 -1
  4. package/dist/admin/forms/Description.d.ts +2 -2
  5. package/dist/admin/forms/Description.d.ts.map +1 -1
  6. package/dist/admin/forms/Description.js.map +1 -1
  7. package/dist/admin/forms/Field.d.ts +1 -3
  8. package/dist/admin/forms/Field.d.ts.map +1 -1
  9. package/dist/admin/forms/Field.js.map +1 -1
  10. package/dist/admin/types.d.ts +1 -1
  11. package/dist/admin/types.d.ts.map +1 -1
  12. package/dist/admin/types.js.map +1 -1
  13. package/dist/admin/views/document.d.ts +0 -4
  14. package/dist/admin/views/document.d.ts.map +1 -1
  15. package/dist/admin/views/document.js.map +1 -1
  16. package/dist/admin/views/list.d.ts +5 -0
  17. package/dist/admin/views/list.d.ts.map +1 -1
  18. package/dist/admin/views/list.js.map +1 -1
  19. package/dist/auth/baseFields/apiKey.d.ts +10 -2
  20. package/dist/auth/baseFields/apiKey.d.ts.map +1 -1
  21. package/dist/auth/baseFields/apiKey.js +35 -24
  22. package/dist/auth/baseFields/apiKey.js.map +1 -1
  23. package/dist/auth/getAuthFields.js +2 -2
  24. package/dist/auth/getAuthFields.js.map +1 -1
  25. package/dist/bin/generateImportMap/iterateCollections.d.ts.map +1 -1
  26. package/dist/bin/generateImportMap/iterateCollections.js +1 -0
  27. package/dist/bin/generateImportMap/iterateCollections.js.map +1 -1
  28. package/dist/bin/generateImportMap/iterateConfig.d.ts.map +1 -1
  29. package/dist/bin/generateImportMap/iterateConfig.js +12 -0
  30. package/dist/bin/generateImportMap/iterateConfig.js.map +1 -1
  31. package/dist/collections/config/sanitize.d.ts.map +1 -1
  32. package/dist/collections/config/sanitize.js +1 -11
  33. package/dist/collections/config/sanitize.js.map +1 -1
  34. package/dist/collections/config/types.d.ts +1 -0
  35. package/dist/collections/config/types.d.ts.map +1 -1
  36. package/dist/collections/config/types.js.map +1 -1
  37. package/dist/collections/endpoints/create.d.ts.map +1 -1
  38. package/dist/collections/endpoints/create.js +0 -2
  39. package/dist/collections/endpoints/create.js.map +1 -1
  40. package/dist/collections/endpoints/updateByID.d.ts.map +1 -1
  41. package/dist/collections/endpoints/updateByID.js +1 -2
  42. package/dist/collections/endpoints/updateByID.js.map +1 -1
  43. package/dist/collections/operations/count.d.ts.map +1 -1
  44. package/dist/collections/operations/count.js +1 -0
  45. package/dist/collections/operations/count.js.map +1 -1
  46. package/dist/collections/operations/create.d.ts +0 -1
  47. package/dist/collections/operations/create.d.ts.map +1 -1
  48. package/dist/collections/operations/create.js +14 -6
  49. package/dist/collections/operations/create.js.map +1 -1
  50. package/dist/collections/operations/local/update.d.ts +4 -8
  51. package/dist/collections/operations/local/update.d.ts.map +1 -1
  52. package/dist/collections/operations/local/update.js +1 -2
  53. package/dist/collections/operations/local/update.js.map +1 -1
  54. package/dist/collections/operations/update.d.ts +0 -1
  55. package/dist/collections/operations/update.d.ts.map +1 -1
  56. package/dist/collections/operations/update.js +8 -4
  57. package/dist/collections/operations/update.js.map +1 -1
  58. package/dist/collections/operations/updateByID.d.ts +0 -1
  59. package/dist/collections/operations/updateByID.d.ts.map +1 -1
  60. package/dist/collections/operations/updateByID.js +1 -5
  61. package/dist/collections/operations/updateByID.js.map +1 -1
  62. package/dist/collections/operations/utilities/copyDataWithFreshRowIDs.d.ts +9 -0
  63. package/dist/collections/operations/utilities/copyDataWithFreshRowIDs.d.ts.map +1 -0
  64. package/dist/collections/operations/utilities/copyDataWithFreshRowIDs.js +170 -0
  65. package/dist/collections/operations/utilities/copyDataWithFreshRowIDs.js.map +1 -0
  66. package/dist/collections/operations/utilities/update.d.ts +1 -2
  67. package/dist/collections/operations/utilities/update.d.ts.map +1 -1
  68. package/dist/collections/operations/utilities/update.js +48 -57
  69. package/dist/collections/operations/utilities/update.js.map +1 -1
  70. package/dist/config/orderable/index.d.ts.map +1 -1
  71. package/dist/config/orderable/index.js +23 -0
  72. package/dist/config/orderable/index.js.map +1 -1
  73. package/dist/config/types.d.ts +14 -17
  74. package/dist/config/types.d.ts.map +1 -1
  75. package/dist/config/types.js +1 -0
  76. package/dist/config/types.js.map +1 -1
  77. package/dist/errors/ValidationError.d.ts +1 -0
  78. package/dist/errors/ValidationError.d.ts.map +1 -1
  79. package/dist/errors/ValidationError.js.map +1 -1
  80. package/dist/exports/migrations.d.ts +5 -13
  81. package/dist/exports/migrations.d.ts.map +1 -1
  82. package/dist/exports/migrations.js +5 -13
  83. package/dist/exports/migrations.js.map +1 -1
  84. package/dist/exports/shared.d.ts +1 -1
  85. package/dist/exports/shared.d.ts.map +1 -1
  86. package/dist/exports/shared.js +1 -1
  87. package/dist/exports/shared.js.map +1 -1
  88. package/dist/fields/config/client.d.ts.map +1 -1
  89. package/dist/fields/config/client.js +10 -3
  90. package/dist/fields/config/client.js.map +1 -1
  91. package/dist/fields/hooks/beforeChange/promise.d.ts.map +1 -1
  92. package/dist/fields/hooks/beforeChange/promise.js.map +1 -1
  93. package/dist/globals/config/sanitize.d.ts.map +1 -1
  94. package/dist/globals/config/sanitize.js +1 -6
  95. package/dist/globals/config/sanitize.js.map +1 -1
  96. package/dist/globals/endpoints/update.d.ts.map +1 -1
  97. package/dist/globals/endpoints/update.js +0 -2
  98. package/dist/globals/endpoints/update.js.map +1 -1
  99. package/dist/globals/operations/local/update.d.ts +4 -6
  100. package/dist/globals/operations/local/update.d.ts.map +1 -1
  101. package/dist/globals/operations/local/update.js +1 -2
  102. package/dist/globals/operations/local/update.js.map +1 -1
  103. package/dist/globals/operations/update.d.ts +0 -1
  104. package/dist/globals/operations/update.d.ts.map +1 -1
  105. package/dist/globals/operations/update.js +52 -58
  106. package/dist/globals/operations/update.js.map +1 -1
  107. package/dist/index.bundled.d.ts +123 -107
  108. package/dist/index.d.ts +5 -3
  109. package/dist/index.d.ts.map +1 -1
  110. package/dist/index.js +3 -2
  111. package/dist/index.js.map +1 -1
  112. package/dist/query-presets/config.d.ts.map +1 -1
  113. package/dist/query-presets/config.js +73 -34
  114. package/dist/query-presets/config.js.map +1 -1
  115. package/dist/query-presets/constraints.d.ts.map +1 -1
  116. package/dist/query-presets/constraints.js +2 -1
  117. package/dist/query-presets/constraints.js.map +1 -1
  118. package/dist/utilities/deepCopyObject.d.ts.map +1 -1
  119. package/dist/utilities/deepCopyObject.js +8 -0
  120. package/dist/utilities/deepCopyObject.js.map +1 -1
  121. package/dist/utilities/getFieldByPath.d.ts.map +1 -1
  122. package/dist/utilities/getFieldByPath.js.map +1 -1
  123. package/dist/utilities/getVersionsConfig.js.map +1 -1
  124. package/dist/utilities/mergeLocalizedData.d.ts +14 -4
  125. package/dist/utilities/mergeLocalizedData.d.ts.map +1 -1
  126. package/dist/utilities/mergeLocalizedData.js +49 -34
  127. package/dist/utilities/mergeLocalizedData.js.map +1 -1
  128. package/dist/utilities/mergeLocalizedData.spec.js +23 -23
  129. package/dist/utilities/mergeLocalizedData.spec.js.map +1 -1
  130. package/dist/utilities/parseParams/index.d.ts +2 -5
  131. package/dist/utilities/parseParams/index.d.ts.map +1 -1
  132. package/dist/utilities/parseParams/index.js.map +1 -1
  133. package/dist/utilities/parseParams/index.spec.js +0 -9
  134. package/dist/utilities/parseParams/index.spec.js.map +1 -1
  135. package/dist/utilities/traverseFields.d.ts.map +1 -1
  136. package/dist/utilities/traverseFields.js.map +1 -1
  137. package/dist/versions/baseFields.d.ts +1 -2
  138. package/dist/versions/baseFields.d.ts.map +1 -1
  139. package/dist/versions/baseFields.js +0 -13
  140. package/dist/versions/baseFields.js.map +1 -1
  141. package/dist/versions/buildCollectionFields.d.ts.map +1 -1
  142. package/dist/versions/buildCollectionFields.js +0 -2
  143. package/dist/versions/buildCollectionFields.js.map +1 -1
  144. package/dist/versions/buildGlobalFields.d.ts.map +1 -1
  145. package/dist/versions/buildGlobalFields.js +0 -2
  146. package/dist/versions/buildGlobalFields.js.map +1 -1
  147. package/dist/versions/buildSingleLocalePublishData.d.ts +32 -0
  148. package/dist/versions/buildSingleLocalePublishData.d.ts.map +1 -0
  149. package/dist/versions/buildSingleLocalePublishData.js +37 -0
  150. package/dist/versions/buildSingleLocalePublishData.js.map +1 -0
  151. package/dist/versions/saveVersion.d.ts +0 -2
  152. package/dist/versions/saveVersion.d.ts.map +1 -1
  153. package/dist/versions/saveVersion.js +12 -17
  154. package/dist/versions/saveVersion.js.map +1 -1
  155. package/dist/versions/schedule/job.d.ts.map +1 -1
  156. package/dist/versions/schedule/job.js +2 -9
  157. package/dist/versions/schedule/job.js.map +1 -1
  158. package/dist/versions/types.d.ts +2 -15
  159. package/dist/versions/types.d.ts.map +1 -1
  160. package/dist/versions/types.js.map +1 -1
  161. package/package.json +2 -2
  162. package/dist/database/migrations/templates/localizeStatus.d.ts +0 -10
  163. package/dist/database/migrations/templates/localizeStatus.d.ts.map +0 -1
  164. package/dist/database/migrations/templates/localizeStatus.js +0 -54
  165. package/dist/database/migrations/templates/localizeStatus.js.map +0 -1
  166. package/dist/versions/migrations/localizeStatus/index.d.ts +0 -12
  167. package/dist/versions/migrations/localizeStatus/index.d.ts.map +0 -1
  168. package/dist/versions/migrations/localizeStatus/index.js +0 -33
  169. package/dist/versions/migrations/localizeStatus/index.js.map +0 -1
  170. package/dist/versions/migrations/localizeStatus/mongo/down.d.ts +0 -9
  171. package/dist/versions/migrations/localizeStatus/mongo/down.d.ts.map +0 -1
  172. package/dist/versions/migrations/localizeStatus/mongo/down.js +0 -112
  173. package/dist/versions/migrations/localizeStatus/mongo/down.js.map +0 -1
  174. package/dist/versions/migrations/localizeStatus/mongo/index.d.ts +0 -8
  175. package/dist/versions/migrations/localizeStatus/mongo/index.d.ts.map +0 -1
  176. package/dist/versions/migrations/localizeStatus/mongo/index.js +0 -8
  177. package/dist/versions/migrations/localizeStatus/mongo/index.js.map +0 -1
  178. package/dist/versions/migrations/localizeStatus/mongo/up.d.ts +0 -9
  179. package/dist/versions/migrations/localizeStatus/mongo/up.d.ts.map +0 -1
  180. package/dist/versions/migrations/localizeStatus/mongo/up.js +0 -220
  181. package/dist/versions/migrations/localizeStatus/mongo/up.js.map +0 -1
  182. package/dist/versions/migrations/localizeStatus/sql/down.d.ts +0 -11
  183. package/dist/versions/migrations/localizeStatus/sql/down.d.ts.map +0 -1
  184. package/dist/versions/migrations/localizeStatus/sql/down.js +0 -213
  185. package/dist/versions/migrations/localizeStatus/sql/down.js.map +0 -1
  186. package/dist/versions/migrations/localizeStatus/sql/index.d.ts +0 -8
  187. package/dist/versions/migrations/localizeStatus/sql/index.d.ts.map +0 -1
  188. package/dist/versions/migrations/localizeStatus/sql/index.js +0 -8
  189. package/dist/versions/migrations/localizeStatus/sql/index.js.map +0 -1
  190. package/dist/versions/migrations/localizeStatus/sql/migrateMainCollection.d.ts +0 -13
  191. package/dist/versions/migrations/localizeStatus/sql/migrateMainCollection.d.ts.map +0 -1
  192. package/dist/versions/migrations/localizeStatus/sql/migrateMainCollection.js +0 -51
  193. package/dist/versions/migrations/localizeStatus/sql/migrateMainCollection.js.map +0 -1
  194. package/dist/versions/migrations/localizeStatus/sql/migrateMainGlobal.d.ts +0 -13
  195. package/dist/versions/migrations/localizeStatus/sql/migrateMainGlobal.d.ts.map +0 -1
  196. package/dist/versions/migrations/localizeStatus/sql/migrateMainGlobal.js +0 -54
  197. package/dist/versions/migrations/localizeStatus/sql/migrateMainGlobal.js.map +0 -1
  198. package/dist/versions/migrations/localizeStatus/sql/up.d.ts +0 -11
  199. package/dist/versions/migrations/localizeStatus/sql/up.d.ts.map +0 -1
  200. package/dist/versions/migrations/localizeStatus/sql/up.js +0 -277
  201. package/dist/versions/migrations/localizeStatus/sql/up.js.map +0 -1
  202. package/dist/versions/saveSnapshot.d.ts +0 -18
  203. package/dist/versions/saveSnapshot.d.ts.map +0 -1
  204. package/dist/versions/saveSnapshot.js +0 -38
  205. package/dist/versions/saveSnapshot.js.map +0 -1
@@ -16,7 +16,6 @@ export type Arguments<TSlug extends CollectionSlug> = {
16
16
  overwriteExistingFiles?: boolean;
17
17
  populate?: PopulateType;
18
18
  publishAllLocales?: boolean;
19
- publishSpecificLocale?: string;
20
19
  req: PayloadRequest;
21
20
  showHiddenFields?: boolean;
22
21
  trash?: boolean;
@@ -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,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAc5F,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,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,GAAG,EAAE,cAAc,CAAA;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAC9B,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE,QAAQ,CAAC,CAAA;AAElD,eAAO,MAAM,mBAAmB,GAC9B,KAAK,SAAS,cAAc,EAC5B,OAAO,SAAS,wBAAwB,CAAC,KAAK,CAAC,GAAG,UAAU,EAE5D,cAAc,SAAS,CAAC,KAAK,CAAC,KAC7B,OAAO,CAAC,6BAA6B,CAAC,KAAK,EAAE,OAAO,CAAC,CAgNvD,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,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAc5F,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,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,GAAG,EAAE,cAAc,CAAA;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAC9B,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE,QAAQ,CAAC,CAAA;AAElD,eAAO,MAAM,mBAAmB,GAC9B,KAAK,SAAS,cAAc,EAC5B,OAAO,SAAS,wBAAwB,CAAC,KAAK,CAAC,GAAG,UAAU,EAE5D,cAAc,SAAS,CAAC,KAAK,CAAC,KAC7B,OAAO,CAAC,6BAA6B,CAAC,KAAK,EAAE,OAAO,CAAC,CA0MvD,CAAA"}
@@ -29,10 +29,7 @@ export const updateByIDOperation = async (incomingArgs)=>{
29
29
  operation: 'update',
30
30
  overrideAccess: args.overrideAccess
31
31
  });
32
- if (args.publishSpecificLocale) {
33
- args.req.locale = args.publishSpecificLocale;
34
- }
35
- const { id, autosave = false, collection: { config: collectionConfig }, collection, depth, draft: draftArg = false, overrideAccess, overrideLock, overwriteExistingFiles = false, populate, publishAllLocales, publishSpecificLocale, req: { fallbackLocale, locale, payload: { config }, payload }, req, select: incomingSelect, showHiddenFields, trash = false, unpublishAllLocales } = args;
32
+ const { id, autosave = false, collection: { config: collectionConfig }, collection, depth, draft: draftArg = false, overrideAccess, overrideLock, overwriteExistingFiles = false, populate, publishAllLocales, req: { fallbackLocale, locale, payload: { config }, payload }, req, select: incomingSelect, showHiddenFields, trash = false, unpublishAllLocales } = args;
36
33
  if (!id) {
37
34
  throw new APIError('Missing ID of document to update.', httpStatus.BAD_REQUEST);
38
35
  }
@@ -133,7 +130,6 @@ export const updateByIDOperation = async (incomingArgs)=>{
133
130
  payload,
134
131
  populate,
135
132
  publishAllLocales,
136
- publishSpecificLocale,
137
133
  req,
138
134
  select: select,
139
135
  showHiddenFields: showHiddenFields,
@@ -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, type FindOptions } 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 { resolveSelect } from '../../utilities/resolveSelect.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 publishAllLocales?: boolean\n publishSpecificLocale?: string\n req: PayloadRequest\n showHiddenFields?: boolean\n trash?: boolean\n unpublishAllLocales?: boolean\n} & Pick<FindOptions<TSlug, SelectType>, 'select'>\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 overrideAccess: args.overrideAccess!,\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 publishAllLocales,\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 unpublishAllLocales,\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 // Pass data so access function can check data.deletedAt to know it's a trash attempt\n const deleteAccessResult = await executeAccess({ data, 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 select: resolveSelect({\n config: collectionConfig.select,\n operation: 'update',\n req,\n select: incomingSelect,\n }),\n })\n\n // ///////////////////////////////////////////////\n // Update document, runs all document level hooks\n // ///////////////////////////////////////////////\n\n let result = await updateDocument<TSlug, TSelect>({\n id,\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 publishAllLocales,\n publishSpecificLocale,\n req,\n select: select!,\n showHiddenFields: showHiddenFields!,\n unpublishAllLocales,\n })\n\n // /////////////////////////////////////\n // Add collection property for auth collections\n // /////////////////////////////////////\n\n if (collectionConfig.auth) {\n result = { ...result, collection: collectionConfig.slug }\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 overrideAccess,\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","resolveSelect","sanitizeSelect","getLatestCollectionVersion","buildAfterOperation","buildBeforeOperation","updateDocument","updateByIDOperation","incomingArgs","args","shouldCommit","disableTransaction","req","collection","config","operation","overrideAccess","publishSpecificLocale","locale","id","autosave","collectionConfig","depth","draft","draftArg","overrideLock","overwriteExistingFiles","populate","publishAllLocales","fallbackLocale","payload","select","incomingSelect","showHiddenFields","trash","unpublishAllLocales","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","result","auth","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, type FindOptions } 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 { resolveSelect } from '../../utilities/resolveSelect.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 publishAllLocales?: boolean\n req: PayloadRequest\n showHiddenFields?: boolean\n trash?: boolean\n unpublishAllLocales?: boolean\n} & Pick<FindOptions<TSlug, SelectType>, 'select'>\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 overrideAccess: args.overrideAccess!,\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 publishAllLocales,\n req: {\n fallbackLocale,\n locale,\n payload: { config },\n payload,\n },\n req,\n select: incomingSelect,\n showHiddenFields,\n trash = false,\n unpublishAllLocales,\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 // Pass data so access function can check data.deletedAt to know it's a trash attempt\n const deleteAccessResult = await executeAccess({ data, 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 select: resolveSelect({\n config: collectionConfig.select,\n operation: 'update',\n req,\n select: incomingSelect,\n }),\n })\n\n // ///////////////////////////////////////////////\n // Update document, runs all document level hooks\n // ///////////////////////////////////////////////\n\n let result = await updateDocument<TSlug, TSelect>({\n id,\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 publishAllLocales,\n req,\n select: select!,\n showHiddenFields: showHiddenFields!,\n unpublishAllLocales,\n })\n\n // /////////////////////////////////////\n // Add collection property for auth collections\n // /////////////////////////////////////\n\n if (collectionConfig.auth) {\n result = { ...result, collection: collectionConfig.slug }\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 overrideAccess,\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","resolveSelect","sanitizeSelect","getLatestCollectionVersion","buildAfterOperation","buildBeforeOperation","updateDocument","updateByIDOperation","incomingArgs","args","shouldCommit","disableTransaction","req","collection","config","operation","overrideAccess","id","autosave","collectionConfig","depth","draft","draftArg","overrideLock","overwriteExistingFiles","populate","publishAllLocales","fallbackLocale","locale","payload","select","incomingSelect","showHiddenFields","trash","unpublishAllLocales","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","result","auth","error"],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { SanitizedConfig } from '../../../config/types.js';
2
+ import type { Field } from '../../../fields/config/types.js';
3
+ export declare const copyDataWithFreshRowIDs: ({ config, data, existingDoc, fields, }: {
4
+ config: SanitizedConfig;
5
+ data: Record<string, unknown>;
6
+ existingDoc: Record<string, unknown>;
7
+ fields: Field[];
8
+ }) => Record<string, unknown>;
9
+ //# sourceMappingURL=copyDataWithFreshRowIDs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copyDataWithFreshRowIDs.d.ts","sourceRoot":"","sources":["../../../../src/collections/operations/utilities/copyDataWithFreshRowIDs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAC/D,OAAO,KAAK,EAAkC,KAAK,EAAE,MAAM,iCAAiC,CAAA;AAwP5F,eAAO,MAAM,uBAAuB,GAAI,wCAKrC;IACD,MAAM,EAAE,eAAe,CAAA;IACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACpC,MAAM,EAAE,KAAK,EAAE,CAAA;CAChB,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAUzB,CAAA"}
@@ -0,0 +1,170 @@
1
+ import { tabHasName } from '../../../fields/config/types.js';
2
+ import { deepCopyObjectSimple } from '../../../utilities/deepCopyObject.js';
3
+ import { traverseFields } from '../../../utilities/traverseFields.js';
4
+ const buildLevelMap = (fields, map = new Map())=>{
5
+ for (const field of fields){
6
+ if (field.type === 'row' || field.type === 'collapsible') {
7
+ buildLevelMap(field.fields, map);
8
+ } else if (field.type === 'tabs') {
9
+ for (const tab of field.tabs){
10
+ if (tabHasName(tab)) {
11
+ map.set(tab.name, {
12
+ type: 'subfields',
13
+ fields: tab.fields,
14
+ localized: Boolean(tab.localized)
15
+ });
16
+ } else {
17
+ buildLevelMap(tab.fields, map);
18
+ }
19
+ }
20
+ } else if (field.type === 'group') {
21
+ if ('name' in field && field.name) {
22
+ map.set(field.name, {
23
+ type: 'subfields',
24
+ fields: field.fields,
25
+ localized: Boolean(field.localized)
26
+ });
27
+ } else {
28
+ buildLevelMap(field.fields, map);
29
+ }
30
+ } else if ((field.type === 'array' || field.type === 'blocks') && field.name) {
31
+ map.set(field.name, {
32
+ type: 'rows',
33
+ field,
34
+ localized: Boolean(field.localized)
35
+ });
36
+ }
37
+ }
38
+ return map;
39
+ };
40
+ const isLocaleKeyed = (value, config)=>{
41
+ if (Array.isArray(value)) {
42
+ return false;
43
+ }
44
+ const localeCodes = config.localization ? config.localization.localeCodes : [];
45
+ const keys = Object.keys(value);
46
+ return keys.length > 0 && keys.every((key)=>localeCodes.includes(key));
47
+ };
48
+ const resolveBlockFields = (field, blockType, config)=>{
49
+ if (typeof blockType !== 'string') {
50
+ return [];
51
+ }
52
+ const block = config.blocks?.find((b)=>b.slug === blockType) ?? field.blocks.find((b)=>typeof b !== 'string' && b.slug === blockType);
53
+ return block?.fields ?? [];
54
+ };
55
+ const copyRow = ({ config, existingRowIDs, field, parentIsLocalized, row })=>{
56
+ if (!row || typeof row !== 'object') {
57
+ return deepCopyObjectSimple(row);
58
+ }
59
+ const subfields = field.type === 'array' ? field.fields : resolveBlockFields(field, row.blockType, config);
60
+ const newRow = copyObject({
61
+ config,
62
+ data: row,
63
+ existingRowIDs,
64
+ fields: subfields,
65
+ parentIsLocalized
66
+ });
67
+ if (typeof newRow.id === 'string' && !existingRowIDs.has(newRow.id)) {
68
+ delete newRow.id;
69
+ }
70
+ return newRow;
71
+ };
72
+ const copyObject = ({ config, data, existingRowIDs, fields, parentIsLocalized })=>{
73
+ const levelMap = buildLevelMap(fields);
74
+ const result = {};
75
+ for (const key of Object.keys(data)){
76
+ const value = data[key];
77
+ const entry = levelMap.get(key);
78
+ if (!entry || value === null || typeof value !== 'object') {
79
+ result[key] = deepCopyObjectSimple(value);
80
+ continue;
81
+ }
82
+ const childParentIsLocalized = parentIsLocalized || entry.localized;
83
+ if (entry.type === 'subfields') {
84
+ const valueIsLocaleKeyed = entry.localized && !parentIsLocalized && isLocaleKeyed(value, config);
85
+ result[key] = valueIsLocaleKeyed ? mapLocales(value, (localeValue)=>copyObject({
86
+ config,
87
+ data: localeValue,
88
+ existingRowIDs,
89
+ fields: entry.fields,
90
+ parentIsLocalized: true
91
+ })) : copyObject({
92
+ config,
93
+ data: value,
94
+ existingRowIDs,
95
+ fields: entry.fields,
96
+ parentIsLocalized: childParentIsLocalized
97
+ });
98
+ continue;
99
+ }
100
+ const copyRows = (rows)=>Array.isArray(rows) ? rows.map((row)=>copyRow({
101
+ config,
102
+ existingRowIDs,
103
+ field: entry.field,
104
+ parentIsLocalized: childParentIsLocalized,
105
+ row
106
+ })) : deepCopyObjectSimple(rows);
107
+ result[key] = Array.isArray(value) ? copyRows(value) : mapLocales(value, copyRows);
108
+ }
109
+ return result;
110
+ };
111
+ const mapLocales = (value, copyLocaleValue)=>{
112
+ if (Array.isArray(value)) {
113
+ return deepCopyObjectSimple(value);
114
+ }
115
+ const out = {};
116
+ for (const locale of Object.keys(value)){
117
+ const localeValue = value[locale];
118
+ out[locale] = localeValue && typeof localeValue === 'object' ? copyLocaleValue(localeValue) : deepCopyObjectSimple(localeValue);
119
+ }
120
+ return out;
121
+ };
122
+ const collectExistingRowIDs = ({ config, existingDoc, fields })=>{
123
+ const existingRowIDs = new Set();
124
+ traverseFields({
125
+ callback: ({ field, ref })=>{
126
+ if (field.type !== 'array' && field.type !== 'blocks' || !('name' in field) || !field.name || !ref || typeof ref !== 'object') {
127
+ return;
128
+ }
129
+ const value = ref[field.name];
130
+ const visitRows = (rows)=>{
131
+ if (!Array.isArray(rows)) {
132
+ return;
133
+ }
134
+ for (const row of rows){
135
+ if (row && typeof row === 'object' && typeof row.id === 'string') {
136
+ existingRowIDs.add(row.id);
137
+ }
138
+ }
139
+ };
140
+ if (Array.isArray(value)) {
141
+ visitRows(value);
142
+ } else if (value && typeof value === 'object') {
143
+ for (const localeValue of Object.values(value)){
144
+ visitRows(localeValue);
145
+ }
146
+ }
147
+ },
148
+ config,
149
+ fields,
150
+ fillEmpty: false,
151
+ ref: existingDoc
152
+ });
153
+ return existingRowIDs;
154
+ };
155
+ export const copyDataWithFreshRowIDs = ({ config, data, existingDoc, fields })=>{
156
+ const existingRowIDs = collectExistingRowIDs({
157
+ config,
158
+ existingDoc,
159
+ fields
160
+ });
161
+ return copyObject({
162
+ config,
163
+ data,
164
+ existingRowIDs,
165
+ fields,
166
+ parentIsLocalized: false
167
+ });
168
+ };
169
+
170
+ //# sourceMappingURL=copyDataWithFreshRowIDs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/collections/operations/utilities/copyDataWithFreshRowIDs.ts"],"sourcesContent":["import type { SanitizedConfig } from '../../../config/types.js'\nimport type { ArrayField, Block, BlocksField, Field } from '../../../fields/config/types.js'\n\nimport { tabHasName } from '../../../fields/config/types.js'\nimport { deepCopyObjectSimple } from '../../../utilities/deepCopyObject.js'\nimport { traverseFields } from '../../../utilities/traverseFields.js'\n\ntype LevelEntry =\n | { field: ArrayField | BlocksField; localized: boolean; type: 'rows' }\n | { fields: Field[]; localized: boolean; type: 'subfields' }\n\nconst buildLevelMap = (fields: Field[], map: Map<string, LevelEntry> = new Map()) => {\n for (const field of fields) {\n if (field.type === 'row' || field.type === 'collapsible') {\n buildLevelMap(field.fields, map)\n } else if (field.type === 'tabs') {\n for (const tab of field.tabs) {\n if (tabHasName(tab)) {\n map.set(tab.name, {\n type: 'subfields',\n fields: tab.fields,\n localized: Boolean(tab.localized),\n })\n } else {\n buildLevelMap(tab.fields, map)\n }\n }\n } else if (field.type === 'group') {\n if ('name' in field && field.name) {\n map.set(field.name, {\n type: 'subfields',\n fields: field.fields,\n localized: Boolean(field.localized),\n })\n } else {\n buildLevelMap(field.fields, map)\n }\n } else if ((field.type === 'array' || field.type === 'blocks') && field.name) {\n map.set(field.name, { type: 'rows', field, localized: Boolean(field.localized) })\n }\n }\n return map\n}\n\nconst isLocaleKeyed = (value: object, config: SanitizedConfig): boolean => {\n if (Array.isArray(value)) {\n return false\n }\n const localeCodes = config.localization ? config.localization.localeCodes : []\n const keys = Object.keys(value)\n return keys.length > 0 && keys.every((key) => localeCodes.includes(key))\n}\n\nconst resolveBlockFields = (\n field: BlocksField,\n blockType: unknown,\n config: SanitizedConfig,\n): Field[] => {\n if (typeof blockType !== 'string') {\n return []\n }\n const block =\n config.blocks?.find((b) => b.slug === blockType) ??\n field.blocks.find((b): b is Block => typeof b !== 'string' && b.slug === blockType)\n return block?.fields ?? []\n}\n\nconst copyRow = ({\n config,\n existingRowIDs,\n field,\n parentIsLocalized,\n row,\n}: {\n config: SanitizedConfig\n existingRowIDs: Set<string>\n field: ArrayField | BlocksField\n parentIsLocalized: boolean\n row: unknown\n}): unknown => {\n if (!row || typeof row !== 'object') {\n return deepCopyObjectSimple(row as never)\n }\n\n const subfields =\n field.type === 'array'\n ? field.fields\n : resolveBlockFields(field, (row as Record<string, unknown>).blockType, config)\n\n const newRow = copyObject({\n config,\n data: row as Record<string, unknown>,\n existingRowIDs,\n fields: subfields,\n parentIsLocalized,\n })\n\n if (typeof newRow.id === 'string' && !existingRowIDs.has(newRow.id)) {\n delete newRow.id\n }\n\n return newRow\n}\n\nconst copyObject = ({\n config,\n data,\n existingRowIDs,\n fields,\n parentIsLocalized,\n}: {\n config: SanitizedConfig\n data: Record<string, unknown>\n existingRowIDs: Set<string>\n fields: Field[]\n parentIsLocalized: boolean\n}): Record<string, unknown> => {\n const levelMap = buildLevelMap(fields)\n const result: Record<string, unknown> = {}\n\n for (const key of Object.keys(data)) {\n const value = data[key]\n const entry = levelMap.get(key)\n\n if (!entry || value === null || typeof value !== 'object') {\n result[key] = deepCopyObjectSimple(value as never)\n continue\n }\n\n const childParentIsLocalized = parentIsLocalized || entry.localized\n\n if (entry.type === 'subfields') {\n const valueIsLocaleKeyed =\n entry.localized && !parentIsLocalized && isLocaleKeyed(value, config)\n\n result[key] = valueIsLocaleKeyed\n ? mapLocales(value, (localeValue) =>\n copyObject({\n config,\n data: localeValue,\n existingRowIDs,\n fields: entry.fields,\n parentIsLocalized: true,\n }),\n )\n : copyObject({\n config,\n data: value as Record<string, unknown>,\n existingRowIDs,\n fields: entry.fields,\n parentIsLocalized: childParentIsLocalized,\n })\n continue\n }\n\n const copyRows = (rows: unknown) =>\n Array.isArray(rows)\n ? rows.map((row) =>\n copyRow({\n config,\n existingRowIDs,\n field: entry.field,\n parentIsLocalized: childParentIsLocalized,\n row,\n }),\n )\n : deepCopyObjectSimple(rows as never)\n\n result[key] = Array.isArray(value) ? copyRows(value) : mapLocales(value, copyRows)\n }\n\n return result\n}\n\nconst mapLocales = (\n value: object,\n copyLocaleValue: (localeValue: Record<string, unknown>) => unknown,\n): unknown => {\n if (Array.isArray(value)) {\n return deepCopyObjectSimple(value as never)\n }\n const out: Record<string, unknown> = {}\n for (const locale of Object.keys(value)) {\n const localeValue = (value as Record<string, unknown>)[locale]\n out[locale] =\n localeValue && typeof localeValue === 'object'\n ? copyLocaleValue(localeValue as Record<string, unknown>)\n : deepCopyObjectSimple(localeValue as never)\n }\n return out\n}\n\nconst collectExistingRowIDs = ({\n config,\n existingDoc,\n fields,\n}: {\n config: SanitizedConfig\n existingDoc: Record<string, unknown>\n fields: Field[]\n}): Set<string> => {\n const existingRowIDs = new Set<string>()\n\n traverseFields({\n callback: ({ field, ref }) => {\n if (\n (field.type !== 'array' && field.type !== 'blocks') ||\n !('name' in field) ||\n !field.name ||\n !ref ||\n typeof ref !== 'object'\n ) {\n return\n }\n\n const value = (ref as Record<string, unknown>)[field.name]\n\n const visitRows = (rows: unknown) => {\n if (!Array.isArray(rows)) {\n return\n }\n for (const row of rows) {\n if (\n row &&\n typeof row === 'object' &&\n typeof (row as Record<string, unknown>).id === 'string'\n ) {\n existingRowIDs.add((row as Record<string, unknown>).id as string)\n }\n }\n }\n\n if (Array.isArray(value)) {\n visitRows(value)\n } else if (value && typeof value === 'object') {\n for (const localeValue of Object.values(value as Record<string, unknown>)) {\n visitRows(localeValue)\n }\n }\n },\n config,\n fields,\n fillEmpty: false,\n ref: existingDoc,\n })\n\n return existingRowIDs\n}\n\nexport const copyDataWithFreshRowIDs = ({\n config,\n data,\n existingDoc,\n fields,\n}: {\n config: SanitizedConfig\n data: Record<string, unknown>\n existingDoc: Record<string, unknown>\n fields: Field[]\n}): Record<string, unknown> => {\n const existingRowIDs = collectExistingRowIDs({ config, existingDoc, fields })\n\n return copyObject({\n config,\n data,\n existingRowIDs,\n fields,\n parentIsLocalized: false,\n })\n}\n"],"names":["tabHasName","deepCopyObjectSimple","traverseFields","buildLevelMap","fields","map","Map","field","type","tab","tabs","set","name","localized","Boolean","isLocaleKeyed","value","config","Array","isArray","localeCodes","localization","keys","Object","length","every","key","includes","resolveBlockFields","blockType","block","blocks","find","b","slug","copyRow","existingRowIDs","parentIsLocalized","row","subfields","newRow","copyObject","data","id","has","levelMap","result","entry","get","childParentIsLocalized","valueIsLocaleKeyed","mapLocales","localeValue","copyRows","rows","copyLocaleValue","out","locale","collectExistingRowIDs","existingDoc","Set","callback","ref","visitRows","add","values","fillEmpty","copyDataWithFreshRowIDs"],"mappings":"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"}
@@ -19,7 +19,6 @@ export type SharedUpdateDocumentArgs<TSlug extends CollectionSlug> = {
19
19
  payload: Payload;
20
20
  populate?: PopulateType;
21
21
  publishAllLocales?: boolean;
22
- publishSpecificLocale?: string;
23
22
  req: PayloadRequest;
24
23
  select: SelectType;
25
24
  showHiddenFields: boolean;
@@ -38,5 +37,5 @@ export type SharedUpdateDocumentArgs<TSlug extends CollectionSlug> = {
38
37
  * - afterChange - Fields
39
38
  * - afterChange - Collection
40
39
  */
41
- export declare const updateDocument: <TSlug extends CollectionSlug, TSelect extends SelectFromCollectionSlug<TSlug> = SelectType>({ id, autosave, collectionConfig, config, data, depth, docWithLocales, draftArg, fallbackLocale, filesToUpload, locale, overrideAccess, overrideLock, payload, populate, publishAllLocales: publishAllLocalesArg, publishSpecificLocale, req, select, showHiddenFields, unpublishAllLocales: unpublishAllLocalesArg, }: SharedUpdateDocumentArgs<TSlug>) => Promise<TransformCollectionWithSelect<TSlug, TSelect>>;
40
+ export declare const updateDocument: <TSlug extends CollectionSlug, TSelect extends SelectFromCollectionSlug<TSlug> = SelectType>({ id, autosave, collectionConfig, config, data, depth, docWithLocales, draftArg, fallbackLocale, filesToUpload, locale, overrideAccess, overrideLock, payload, populate, publishAllLocales: publishAllLocalesArg, req, select, showHiddenFields, unpublishAllLocales: unpublishAllLocalesArg, }: SharedUpdateDocumentArgs<TSlug>) => Promise<TransformCollectionWithSelect<TSlug, TSelect>>;
42
41
  //# sourceMappingURL=update.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../../src/collections/operations/utilities/update.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAGhD,OAAO,KAAK,EACV,cAAc,EACd,UAAU,EACV,eAAe,EACf,mBAAmB,EACpB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,KAAK,EACV,UAAU,EACV,OAAO,EACP,cAAc,EACd,YAAY,EACZ,UAAU,EACV,6BAA6B,EAC9B,MAAM,yBAAyB,CAAA;AAChC,OAAO,KAAK,EACV,sBAAsB,EACtB,yBAAyB,EACzB,wBAAwB,EACxB,UAAU,EACX,MAAM,uBAAuB,CAAA;AAkB9B,MAAM,MAAM,wBAAwB,CAAC,KAAK,SAAS,cAAc,IAAI;IACnE,QAAQ,EAAE,OAAO,CAAA;IACjB,gBAAgB,EAAE,yBAAyB,CAAA;IAC3C,MAAM,EAAE,eAAe,CAAA;IACvB,IAAI,EAAE,WAAW,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAA;IAChD,KAAK,EAAE,MAAM,CAAA;IACb,cAAc,EAAE,UAAU,GAAG,UAAU,CAAA;IACvC,QAAQ,EAAE,OAAO,CAAA;IACjB,cAAc,EAAE,mBAAmB,CAAA;IACnC,aAAa,EAAE,UAAU,EAAE,CAAA;IAC3B,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,cAAc,EAAE,OAAO,CAAA;IACvB,YAAY,EAAE,OAAO,CAAA;IACrB,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,CAAC,EAAE,YAAY,CAAA;IACvB,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,GAAG,EAAE,cAAc,CAAA;IACnB,MAAM,EAAE,UAAU,CAAA;IAClB,gBAAgB,EAAE,OAAO,CAAA;IACzB,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAC9B,CAAA;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,cAAc,GACzB,KAAK,SAAS,cAAc,EAC5B,OAAO,SAAS,wBAAwB,CAAC,KAAK,CAAC,GAAG,UAAU,EAC5D,wTAsBC,wBAAwB,CAAC,KAAK,CAAC,KAAG,OAAO,CAAC,6BAA6B,CAAC,KAAK,EAAE,OAAO,CAAC,CAuXzF,CAAA"}
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../../src/collections/operations/utilities/update.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAGhD,OAAO,KAAK,EACV,cAAc,EACd,UAAU,EACV,eAAe,EACf,mBAAmB,EACpB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,KAAK,EACV,UAAU,EACV,OAAO,EACP,cAAc,EACd,YAAY,EACZ,UAAU,EACV,6BAA6B,EAC9B,MAAM,yBAAyB,CAAA;AAChC,OAAO,KAAK,EACV,sBAAsB,EACtB,yBAAyB,EACzB,wBAAwB,EACxB,UAAU,EACX,MAAM,uBAAuB,CAAA;AAkB9B,MAAM,MAAM,wBAAwB,CAAC,KAAK,SAAS,cAAc,IAAI;IACnE,QAAQ,EAAE,OAAO,CAAA;IACjB,gBAAgB,EAAE,yBAAyB,CAAA;IAC3C,MAAM,EAAE,eAAe,CAAA;IACvB,IAAI,EAAE,WAAW,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAA;IAChD,KAAK,EAAE,MAAM,CAAA;IACb,cAAc,EAAE,UAAU,GAAG,UAAU,CAAA;IACvC,QAAQ,EAAE,OAAO,CAAA;IACjB,cAAc,EAAE,mBAAmB,CAAA;IACnC,aAAa,EAAE,UAAU,EAAE,CAAA;IAC3B,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,cAAc,EAAE,OAAO,CAAA;IACvB,YAAY,EAAE,OAAO,CAAA;IACrB,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,CAAC,EAAE,YAAY,CAAA;IACvB,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,GAAG,EAAE,cAAc,CAAA;IACnB,MAAM,EAAE,UAAU,CAAA;IAClB,gBAAgB,EAAE,OAAO,CAAA;IACzB,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAC9B,CAAA;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,cAAc,GACzB,KAAK,SAAS,cAAc,EAC5B,OAAO,SAAS,wBAAwB,CAAC,KAAK,CAAC,GAAG,UAAU,EAC5D,iSAqBC,wBAAwB,CAAC,KAAK,CAAC,KAAG,OAAO,CAAC,6BAA6B,CAAC,KAAK,EAAE,OAAO,CAAC,CA2XzF,CAAA"}
@@ -4,12 +4,12 @@ import { afterChange } from '../../../fields/hooks/afterChange/index.js';
4
4
  import { afterRead } from '../../../fields/hooks/afterRead/index.js';
5
5
  import { beforeChange } from '../../../fields/hooks/beforeChange/index.js';
6
6
  import { beforeValidate } from '../../../fields/hooks/beforeValidate/index.js';
7
- import { deepCopyObjectSimple, getLatestCollectionVersion, saveVersion } from '../../../index.js';
7
+ import { deepCopyObjectSimple, saveVersion } from '../../../index.js';
8
8
  import { deleteAssociatedFiles } from '../../../uploads/deleteAssociatedFiles.js';
9
9
  import { uploadFiles } from '../../../uploads/uploadFiles.js';
10
10
  import { checkDocumentLockStatus } from '../../../utilities/checkDocumentLockStatus.js';
11
11
  import { hasDraftsEnabled, hasDraftValidationEnabled, hasLocalizeStatusEnabled } from '../../../utilities/getVersionsConfig.js';
12
- import { mergeLocalizedData } from '../../../utilities/mergeLocalizedData.js';
12
+ import { buildLocalizedPublishData } from '../../../versions/buildSingleLocalePublishData.js';
13
13
  /**
14
14
  * This function is used to update a document in the DB and return the result.
15
15
  *
@@ -22,9 +22,9 @@ import { mergeLocalizedData } from '../../../utilities/mergeLocalizedData.js';
22
22
  * - afterRead - Collection
23
23
  * - afterChange - Fields
24
24
  * - afterChange - Collection
25
- */ export const updateDocument = async ({ id, autosave, collectionConfig, config, data, depth, docWithLocales, draftArg, fallbackLocale, filesToUpload, locale, overrideAccess, overrideLock, payload, populate, publishAllLocales: publishAllLocalesArg, publishSpecificLocale, req, select, showHiddenFields, unpublishAllLocales: unpublishAllLocalesArg })=>{
25
+ */ export const updateDocument = async ({ id, autosave, collectionConfig, config, data, depth, docWithLocales, draftArg, fallbackLocale, filesToUpload, locale, overrideAccess, overrideLock, payload, populate, publishAllLocales: publishAllLocalesArg, req, select, showHiddenFields, unpublishAllLocales: unpublishAllLocalesArg })=>{
26
26
  const password = data?.password;
27
- const publishAllLocales = !draftArg && (publishAllLocalesArg ?? (hasLocalizeStatusEnabled(collectionConfig) ? false : true));
27
+ const publishAllLocales = !draftArg && (publishAllLocalesArg ?? (hasLocalizeStatusEnabled(collectionConfig) && locale !== 'all' ? false : true));
28
28
  const unpublishAllLocales = typeof unpublishAllLocalesArg === 'string' ? unpublishAllLocalesArg === 'true' : !!unpublishAllLocalesArg;
29
29
  const isSavingDraft = Boolean(draftArg && hasDraftsEnabled(collectionConfig)) && data._status !== 'published' && !publishAllLocales;
30
30
  const shouldSavePassword = Boolean(password && collectionConfig.auth && (!collectionConfig.auth.disableLocalStrategy || typeof collectionConfig.auth.disableLocalStrategy === 'object' && collectionConfig.auth.disableLocalStrategy.enableFields) && !isSavingDraft);
@@ -160,11 +160,17 @@ import { mergeLocalizedData } from '../../../utilities/mergeLocalizedData.js';
160
160
  // Handle Localized Data Merging
161
161
  // /////////////////////////////////////
162
162
  let result = await beforeChange(beforeChangeArgs);
163
- let snapshotToSave;
163
+ if (config.localization && hasLocalizeStatusEnabled(collectionConfig) && typeof result._status === 'string') {
164
+ const statusStr = result._status;
165
+ result._status = {};
166
+ for (const localeCode of config.localization.localeCodes){
167
+ ;
168
+ result._status[localeCode] = statusStr;
169
+ }
170
+ }
171
+ let localizedPublishData = null;
164
172
  if (config.localization && collectionConfig.versions) {
165
- let snapshotData;
166
- let currentDoc;
167
- if (collectionConfig.versions.drafts && collectionConfig.versions.drafts.localizeStatus) {
173
+ if (hasLocalizeStatusEnabled(collectionConfig)) {
168
174
  if (publishAllLocales || unpublishAllLocales) {
169
175
  let accessibleLocaleCodes = config.localization.localeCodes;
170
176
  if (config.localization.filterAvailableLocales) {
@@ -180,10 +186,10 @@ import { mergeLocalizedData } from '../../../utilities/mergeLocalizedData.js';
180
186
  for (const localeCode of accessibleLocaleCodes){
181
187
  result._status[localeCode] = unpublishAllLocales ? 'draft' : 'published';
182
188
  }
183
- } else if (!isSavingDraft) {
184
- // publishing a single locale
185
- currentDoc = await payload.db.findOne({
189
+ } else if (!isSavingDraft && result._status && typeof result._status === 'object' && !Array.isArray(result._status) && result._status[locale] === 'published') {
190
+ const currentDoc = await payload.db.findOne({
186
191
  collection: collectionConfig.slug,
192
+ locale: 'all',
187
193
  req,
188
194
  where: {
189
195
  id: {
@@ -191,47 +197,18 @@ import { mergeLocalizedData } from '../../../utilities/mergeLocalizedData.js';
191
197
  }
192
198
  }
193
199
  });
194
- snapshotData = result;
200
+ localizedPublishData = buildLocalizedPublishData({
201
+ config,
202
+ currentDoc: currentDoc,
203
+ fields: collectionConfig.fields,
204
+ locale,
205
+ result
206
+ });
195
207
  }
196
- } else if (publishSpecificLocale) {
197
- // previous way of publishing a single locale
198
- currentDoc = await getLatestCollectionVersion({
199
- id,
200
- config: collectionConfig,
201
- payload,
202
- published: true,
203
- query: {
204
- collection: collectionConfig.slug,
205
- locale: 'all',
206
- req,
207
- where: {
208
- id: {
209
- equals: id
210
- }
211
- }
212
- },
213
- req
214
- });
215
- snapshotData = {
216
- ...result,
217
- _status: 'draft'
218
- };
219
- }
220
- if (snapshotData) {
221
- snapshotToSave = deepCopyObjectSimple(snapshotData || {});
222
- result = mergeLocalizedData({
223
- configBlockReferences: config.blocks,
224
- dataWithLocales: result || {},
225
- docWithLocales: currentDoc || {},
226
- fields: collectionConfig.fields,
227
- selectedLocales: [
228
- locale
229
- ]
230
- });
231
208
  }
232
209
  }
233
210
  const dataToUpdate = {
234
- ...result
211
+ ...localizedPublishData ?? result
235
212
  };
236
213
  // /////////////////////////////////////
237
214
  // Handle potential password update
@@ -254,13 +231,29 @@ import { mergeLocalizedData } from '../../../utilities/mergeLocalizedData.js';
254
231
  if (!isSavingDraft) {
255
232
  // Ensure updatedAt date is always updated
256
233
  dataToUpdate.updatedAt = new Date().toISOString();
257
- resultWithLocales = await req.payload.db.updateOne({
258
- id,
259
- collection: collectionConfig.slug,
260
- data: dataToUpdate,
261
- locale,
262
- req
263
- });
234
+ if (localizedPublishData) {
235
+ // Single-locale publish: save filtered data to main doc but keep full locale data for
236
+ // the version so draft fetches (replaceWithDraftIfAvailable) return complete data.
237
+ await req.payload.db.updateOne({
238
+ id,
239
+ collection: collectionConfig.slug,
240
+ data: dataToUpdate,
241
+ locale,
242
+ req
243
+ });
244
+ resultWithLocales = {
245
+ ...result,
246
+ updatedAt: dataToUpdate.updatedAt
247
+ };
248
+ } else {
249
+ resultWithLocales = await req.payload.db.updateOne({
250
+ id,
251
+ collection: collectionConfig.slug,
252
+ data: dataToUpdate,
253
+ locale,
254
+ req
255
+ });
256
+ }
264
257
  }
265
258
  // /////////////////////////////////////
266
259
  // Create version
@@ -274,9 +267,7 @@ import { mergeLocalizedData } from '../../../utilities/mergeLocalizedData.js';
274
267
  draft: isSavingDraft,
275
268
  operation: 'update',
276
269
  payload,
277
- publishSpecificLocale,
278
270
  req,
279
- snapshot: snapshotToSave,
280
271
  unpublish: unpublishAllLocales
281
272
  });
282
273
  }