payload 4.0.0-internal.1f9ae9a → 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 (377) hide show
  1. package/dist/admin/RichText.d.ts +22 -10
  2. package/dist/admin/RichText.d.ts.map +1 -1
  3. package/dist/admin/RichText.js.map +1 -1
  4. package/dist/admin/adapters/devReload.d.ts +9 -0
  5. package/dist/admin/adapters/devReload.d.ts.map +1 -0
  6. package/dist/admin/adapters/devReload.js +6 -0
  7. package/dist/admin/adapters/devReload.js.map +1 -0
  8. package/dist/admin/adapters/index.d.ts +3 -0
  9. package/dist/admin/adapters/index.d.ts.map +1 -1
  10. package/dist/admin/adapters/index.js.map +1 -1
  11. package/dist/admin/adapters/render.d.ts +16 -0
  12. package/dist/admin/adapters/render.d.ts.map +1 -0
  13. package/dist/admin/adapters/render.js +7 -0
  14. package/dist/admin/adapters/render.js.map +1 -0
  15. package/dist/admin/adapters/views.d.ts +36 -0
  16. package/dist/admin/adapters/views.d.ts.map +1 -0
  17. package/dist/admin/adapters/views.js +7 -0
  18. package/dist/admin/adapters/views.js.map +1 -0
  19. package/dist/admin/fields/Row.d.ts +2 -2
  20. package/dist/admin/fields/Row.d.ts.map +1 -1
  21. package/dist/admin/fields/Row.js.map +1 -1
  22. package/dist/admin/forms/Description.d.ts +2 -2
  23. package/dist/admin/forms/Description.d.ts.map +1 -1
  24. package/dist/admin/forms/Description.js.map +1 -1
  25. package/dist/admin/forms/Field.d.ts +8 -3
  26. package/dist/admin/forms/Field.d.ts.map +1 -1
  27. package/dist/admin/forms/Field.js.map +1 -1
  28. package/dist/admin/forms/Form.d.ts +29 -0
  29. package/dist/admin/forms/Form.d.ts.map +1 -1
  30. package/dist/admin/forms/Form.js.map +1 -1
  31. package/dist/admin/functions/index.d.ts +9 -0
  32. package/dist/admin/functions/index.d.ts.map +1 -1
  33. package/dist/admin/functions/index.js.map +1 -1
  34. package/dist/admin/types.d.ts +2 -2
  35. package/dist/admin/types.d.ts.map +1 -1
  36. package/dist/admin/types.js.map +1 -1
  37. package/dist/admin/views/dashboard.d.ts +7 -0
  38. package/dist/admin/views/dashboard.d.ts.map +1 -1
  39. package/dist/admin/views/dashboard.js.map +1 -1
  40. package/dist/admin/views/document.d.ts +5 -3
  41. package/dist/admin/views/document.d.ts.map +1 -1
  42. package/dist/admin/views/document.js.map +1 -1
  43. package/dist/admin/views/list.d.ts +5 -0
  44. package/dist/admin/views/list.d.ts.map +1 -1
  45. package/dist/admin/views/list.js.map +1 -1
  46. package/dist/auth/baseFields/apiKey.d.ts +10 -2
  47. package/dist/auth/baseFields/apiKey.d.ts.map +1 -1
  48. package/dist/auth/baseFields/apiKey.js +35 -24
  49. package/dist/auth/baseFields/apiKey.js.map +1 -1
  50. package/dist/auth/defaultAccess.d.ts +1 -1
  51. package/dist/auth/defaultAccess.d.ts.map +1 -1
  52. package/dist/auth/defaultAccess.js +1 -1
  53. package/dist/auth/defaultAccess.js.map +1 -1
  54. package/dist/auth/defaultUser.d.ts.map +1 -1
  55. package/dist/auth/defaultUser.js +2 -1
  56. package/dist/auth/defaultUser.js.map +1 -1
  57. package/dist/auth/getAuthFields.js +2 -2
  58. package/dist/auth/getAuthFields.js.map +1 -1
  59. package/dist/bin/generateImportMap/index.d.ts.map +1 -1
  60. package/dist/bin/generateImportMap/index.js +8 -5
  61. package/dist/bin/generateImportMap/index.js.map +1 -1
  62. package/dist/bin/generateImportMap/iterateCollections.d.ts.map +1 -1
  63. package/dist/bin/generateImportMap/iterateCollections.js +1 -0
  64. package/dist/bin/generateImportMap/iterateCollections.js.map +1 -1
  65. package/dist/bin/generateImportMap/iterateConfig.d.ts.map +1 -1
  66. package/dist/bin/generateImportMap/iterateConfig.js +12 -0
  67. package/dist/bin/generateImportMap/iterateConfig.js.map +1 -1
  68. package/dist/bin/generateImportMap/utilities/resolveImportMapFilePath.d.ts +5 -1
  69. package/dist/bin/generateImportMap/utilities/resolveImportMapFilePath.d.ts.map +1 -1
  70. package/dist/bin/generateImportMap/utilities/resolveImportMapFilePath.js +24 -18
  71. package/dist/bin/generateImportMap/utilities/resolveImportMapFilePath.js.map +1 -1
  72. package/dist/bin/generateTypes.d.ts +3 -2
  73. package/dist/bin/generateTypes.d.ts.map +1 -1
  74. package/dist/bin/generateTypes.js +11 -1
  75. package/dist/bin/generateTypes.js.map +1 -1
  76. package/dist/bin/loadEnv.d.ts +3 -1
  77. package/dist/bin/loadEnv.d.ts.map +1 -1
  78. package/dist/bin/loadEnv.js +40 -10
  79. package/dist/bin/loadEnv.js.map +1 -1
  80. package/dist/collections/config/defaults.js +2 -2
  81. package/dist/collections/config/defaults.js.map +1 -1
  82. package/dist/collections/config/defaults.spec.js +47 -0
  83. package/dist/collections/config/defaults.spec.js.map +1 -0
  84. package/dist/collections/config/sanitize.d.ts.map +1 -1
  85. package/dist/collections/config/sanitize.js +1 -11
  86. package/dist/collections/config/sanitize.js.map +1 -1
  87. package/dist/collections/config/types.d.ts +5 -7
  88. package/dist/collections/config/types.d.ts.map +1 -1
  89. package/dist/collections/config/types.js.map +1 -1
  90. package/dist/collections/endpoints/create.d.ts.map +1 -1
  91. package/dist/collections/endpoints/create.js +0 -2
  92. package/dist/collections/endpoints/create.js.map +1 -1
  93. package/dist/collections/endpoints/updateByID.d.ts.map +1 -1
  94. package/dist/collections/endpoints/updateByID.js +1 -2
  95. package/dist/collections/endpoints/updateByID.js.map +1 -1
  96. package/dist/collections/operations/count.d.ts.map +1 -1
  97. package/dist/collections/operations/count.js +1 -0
  98. package/dist/collections/operations/count.js.map +1 -1
  99. package/dist/collections/operations/create.d.ts +0 -1
  100. package/dist/collections/operations/create.d.ts.map +1 -1
  101. package/dist/collections/operations/create.js +14 -6
  102. package/dist/collections/operations/create.js.map +1 -1
  103. package/dist/collections/operations/delete.d.ts.map +1 -1
  104. package/dist/collections/operations/delete.js +3 -0
  105. package/dist/collections/operations/delete.js.map +1 -1
  106. package/dist/collections/operations/local/duplicate.d.ts.map +1 -1
  107. package/dist/collections/operations/local/duplicate.js.map +1 -1
  108. package/dist/collections/operations/local/find.d.ts.map +1 -1
  109. package/dist/collections/operations/local/find.js.map +1 -1
  110. package/dist/collections/operations/local/findByID.d.ts.map +1 -1
  111. package/dist/collections/operations/local/findByID.js.map +1 -1
  112. package/dist/collections/operations/local/findVersionByID.d.ts.map +1 -1
  113. package/dist/collections/operations/local/findVersionByID.js.map +1 -1
  114. package/dist/collections/operations/local/findVersions.d.ts.map +1 -1
  115. package/dist/collections/operations/local/findVersions.js.map +1 -1
  116. package/dist/collections/operations/local/restoreVersion.d.ts.map +1 -1
  117. package/dist/collections/operations/local/restoreVersion.js.map +1 -1
  118. package/dist/collections/operations/local/update.d.ts +4 -8
  119. package/dist/collections/operations/local/update.d.ts.map +1 -1
  120. package/dist/collections/operations/local/update.js +1 -2
  121. package/dist/collections/operations/local/update.js.map +1 -1
  122. package/dist/collections/operations/update.d.ts +0 -1
  123. package/dist/collections/operations/update.d.ts.map +1 -1
  124. package/dist/collections/operations/update.js +8 -4
  125. package/dist/collections/operations/update.js.map +1 -1
  126. package/dist/collections/operations/updateByID.d.ts +0 -1
  127. package/dist/collections/operations/updateByID.d.ts.map +1 -1
  128. package/dist/collections/operations/updateByID.js +1 -5
  129. package/dist/collections/operations/updateByID.js.map +1 -1
  130. package/dist/collections/operations/utilities/copyDataWithFreshRowIDs.d.ts +9 -0
  131. package/dist/collections/operations/utilities/copyDataWithFreshRowIDs.d.ts.map +1 -0
  132. package/dist/collections/operations/utilities/copyDataWithFreshRowIDs.js +170 -0
  133. package/dist/collections/operations/utilities/copyDataWithFreshRowIDs.js.map +1 -0
  134. package/dist/collections/operations/utilities/update.d.ts +1 -2
  135. package/dist/collections/operations/utilities/update.d.ts.map +1 -1
  136. package/dist/collections/operations/utilities/update.js +48 -57
  137. package/dist/collections/operations/utilities/update.js.map +1 -1
  138. package/dist/config/client.js.map +1 -1
  139. package/dist/config/orderable/index.d.ts.map +1 -1
  140. package/dist/config/orderable/index.js +23 -0
  141. package/dist/config/orderable/index.js.map +1 -1
  142. package/dist/config/types.d.ts +24 -18
  143. package/dist/config/types.d.ts.map +1 -1
  144. package/dist/config/types.js +2 -0
  145. package/dist/config/types.js.map +1 -1
  146. package/dist/database/getLocalizedPaths.d.ts.map +1 -1
  147. package/dist/database/getLocalizedPaths.js +1 -1
  148. package/dist/database/getLocalizedPaths.js.map +1 -1
  149. package/dist/database/migrations/migrationsCollection.d.ts.map +1 -1
  150. package/dist/database/migrations/migrationsCollection.js +2 -1
  151. package/dist/database/migrations/migrationsCollection.js.map +1 -1
  152. package/dist/errors/ValidationError.d.ts +1 -0
  153. package/dist/errors/ValidationError.d.ts.map +1 -1
  154. package/dist/errors/ValidationError.js.map +1 -1
  155. package/dist/exports/migrations.d.ts +5 -13
  156. package/dist/exports/migrations.d.ts.map +1 -1
  157. package/dist/exports/migrations.js +5 -13
  158. package/dist/exports/migrations.js.map +1 -1
  159. package/dist/exports/shared.d.ts +21 -1
  160. package/dist/exports/shared.d.ts.map +1 -1
  161. package/dist/exports/shared.js +21 -1
  162. package/dist/exports/shared.js.map +1 -1
  163. package/dist/fields/config/client.d.ts +2 -2
  164. package/dist/fields/config/client.d.ts.map +1 -1
  165. package/dist/fields/config/client.js +11 -12
  166. package/dist/fields/config/client.js.map +1 -1
  167. package/dist/fields/config/sanitize.d.ts.map +1 -1
  168. package/dist/fields/config/sanitize.js +1 -4
  169. package/dist/fields/config/sanitize.js.map +1 -1
  170. package/dist/fields/config/types.d.ts +9 -24
  171. package/dist/fields/config/types.d.ts.map +1 -1
  172. package/dist/fields/config/types.js.map +1 -1
  173. package/dist/fields/hooks/afterChange/promise.js +1 -1
  174. package/dist/fields/hooks/afterChange/promise.js.map +1 -1
  175. package/dist/fields/hooks/afterRead/promise.js +2 -2
  176. package/dist/fields/hooks/afterRead/promise.js.map +1 -1
  177. package/dist/fields/hooks/beforeChange/promise.d.ts.map +1 -1
  178. package/dist/fields/hooks/beforeChange/promise.js +3 -3
  179. package/dist/fields/hooks/beforeChange/promise.js.map +1 -1
  180. package/dist/fields/hooks/beforeDuplicate/promise.js +2 -2
  181. package/dist/fields/hooks/beforeDuplicate/promise.js.map +1 -1
  182. package/dist/fields/hooks/beforeValidate/promise.js +1 -1
  183. package/dist/fields/hooks/beforeValidate/promise.js.map +1 -1
  184. package/dist/fields/validations.d.ts.map +1 -1
  185. package/dist/fields/validations.js +5 -4
  186. package/dist/fields/validations.js.map +1 -1
  187. package/dist/globals/config/sanitize.d.ts.map +1 -1
  188. package/dist/globals/config/sanitize.js +2 -6
  189. package/dist/globals/config/sanitize.js.map +1 -1
  190. package/dist/globals/config/sanitize.spec.js +43 -0
  191. package/dist/globals/config/sanitize.spec.js.map +1 -0
  192. package/dist/globals/endpoints/update.d.ts.map +1 -1
  193. package/dist/globals/endpoints/update.js +0 -2
  194. package/dist/globals/endpoints/update.js.map +1 -1
  195. package/dist/globals/operations/local/findOne.d.ts.map +1 -1
  196. package/dist/globals/operations/local/findOne.js.map +1 -1
  197. package/dist/globals/operations/local/update.d.ts +4 -6
  198. package/dist/globals/operations/local/update.d.ts.map +1 -1
  199. package/dist/globals/operations/local/update.js +1 -2
  200. package/dist/globals/operations/local/update.js.map +1 -1
  201. package/dist/globals/operations/update.d.ts +0 -1
  202. package/dist/globals/operations/update.d.ts.map +1 -1
  203. package/dist/globals/operations/update.js +52 -58
  204. package/dist/globals/operations/update.js.map +1 -1
  205. package/dist/index.bundled.d.ts +362 -191
  206. package/dist/index.d.ts +13 -12
  207. package/dist/index.d.ts.map +1 -1
  208. package/dist/index.js +53 -35
  209. package/dist/index.js.map +1 -1
  210. package/dist/kv/adapters/DatabaseKVAdapter.d.ts.map +1 -1
  211. package/dist/kv/adapters/DatabaseKVAdapter.js +1 -0
  212. package/dist/kv/adapters/DatabaseKVAdapter.js.map +1 -1
  213. package/dist/locked-documents/config.d.ts.map +1 -1
  214. package/dist/locked-documents/config.js +2 -1
  215. package/dist/locked-documents/config.js.map +1 -1
  216. package/dist/preferences/config.d.ts.map +1 -1
  217. package/dist/preferences/config.js +2 -1
  218. package/dist/preferences/config.js.map +1 -1
  219. package/dist/query-presets/config.d.ts.map +1 -1
  220. package/dist/query-presets/config.js +75 -35
  221. package/dist/query-presets/config.js.map +1 -1
  222. package/dist/query-presets/constraints.d.ts.map +1 -1
  223. package/dist/query-presets/constraints.js +2 -1
  224. package/dist/query-presets/constraints.js.map +1 -1
  225. package/dist/queues/config/collection.d.ts.map +1 -1
  226. package/dist/queues/config/collection.js +2 -1
  227. package/dist/queues/config/collection.js.map +1 -1
  228. package/dist/queues/config/generateJobsJSONSchemas.d.ts +1 -1
  229. package/dist/queues/config/generateJobsJSONSchemas.d.ts.map +1 -1
  230. package/dist/queues/config/generateJobsJSONSchemas.js +33 -12
  231. package/dist/queues/config/generateJobsJSONSchemas.js.map +1 -1
  232. package/dist/queues/config/global.d.ts.map +1 -1
  233. package/dist/queues/config/global.js +2 -1
  234. package/dist/queues/config/global.js.map +1 -1
  235. package/dist/uploads/fetchAPI-multipart/processMultipart.d.ts.map +1 -1
  236. package/dist/uploads/fetchAPI-multipart/processMultipart.js +14 -1
  237. package/dist/uploads/fetchAPI-multipart/processMultipart.js.map +1 -1
  238. package/dist/uploads/safeFetch.d.ts.map +1 -1
  239. package/dist/uploads/safeFetch.js +11 -5
  240. package/dist/uploads/safeFetch.js.map +1 -1
  241. package/dist/utilities/appendDateTimezoneSelectFields.js +2 -2
  242. package/dist/utilities/appendDateTimezoneSelectFields.js.map +1 -1
  243. package/dist/utilities/configToJSONSchema.d.ts +59 -16
  244. package/dist/utilities/configToJSONSchema.d.ts.map +1 -1
  245. package/dist/utilities/configToJSONSchema.js +158 -59
  246. package/dist/utilities/configToJSONSchema.js.map +1 -1
  247. package/dist/utilities/configToJSONSchema.spec.js +225 -39
  248. package/dist/utilities/configToJSONSchema.spec.js.map +1 -1
  249. package/dist/utilities/deepCopyObject.d.ts.map +1 -1
  250. package/dist/utilities/deepCopyObject.js +8 -0
  251. package/dist/utilities/deepCopyObject.js.map +1 -1
  252. package/dist/utilities/dependencies/dependencyChecker.js +1 -1
  253. package/dist/utilities/dependencies/dependencyChecker.js.map +1 -1
  254. package/dist/utilities/dependencies/getDependencies.d.ts.map +1 -1
  255. package/dist/utilities/dependencies/getDependencies.js +5 -5
  256. package/dist/utilities/dependencies/getDependencies.js.map +1 -1
  257. package/dist/utilities/dynamicImport.js +1 -1
  258. package/dist/utilities/dynamicImport.js.map +1 -1
  259. package/dist/utilities/filterDataToSelectedLocales.d.ts.map +1 -1
  260. package/dist/utilities/filterDataToSelectedLocales.js +5 -12
  261. package/dist/utilities/filterDataToSelectedLocales.js.map +1 -1
  262. package/dist/utilities/filterDataToSelectedLocales.spec.js +1 -2
  263. package/dist/utilities/filterDataToSelectedLocales.spec.js.map +1 -1
  264. package/dist/utilities/flattenAllFields.d.ts.map +1 -1
  265. package/dist/utilities/flattenAllFields.js +7 -22
  266. package/dist/utilities/flattenAllFields.js.map +1 -1
  267. package/dist/utilities/formatErrors.d.ts.map +1 -1
  268. package/dist/utilities/formatErrors.js +3 -1
  269. package/dist/utilities/formatErrors.js.map +1 -1
  270. package/dist/utilities/getEntityPermissions/populateFieldPermissions.d.ts.map +1 -1
  271. package/dist/utilities/getEntityPermissions/populateFieldPermissions.js +5 -5
  272. package/dist/utilities/getEntityPermissions/populateFieldPermissions.js.map +1 -1
  273. package/dist/utilities/getFieldByPath.d.ts.map +1 -1
  274. package/dist/utilities/getFieldByPath.js +1 -1
  275. package/dist/utilities/getFieldByPath.js.map +1 -1
  276. package/dist/utilities/getRequestLanguage.d.ts +2 -2
  277. package/dist/utilities/getRequestLanguage.d.ts.map +1 -1
  278. package/dist/utilities/getRequestLanguage.js.map +1 -1
  279. package/dist/utilities/getVersionsConfig.js.map +1 -1
  280. package/dist/utilities/handleEndpoints.d.ts.map +1 -1
  281. package/dist/utilities/handleEndpoints.js +7 -3
  282. package/dist/utilities/handleEndpoints.js.map +1 -1
  283. package/dist/utilities/isRSCEnabled.d.ts +12 -0
  284. package/dist/utilities/isRSCEnabled.d.ts.map +1 -0
  285. package/dist/utilities/isRSCEnabled.js +14 -0
  286. package/dist/utilities/isRSCEnabled.js.map +1 -0
  287. package/dist/utilities/mergeLocalizedData.d.ts +14 -4
  288. package/dist/utilities/mergeLocalizedData.d.ts.map +1 -1
  289. package/dist/utilities/mergeLocalizedData.js +54 -46
  290. package/dist/utilities/mergeLocalizedData.js.map +1 -1
  291. package/dist/utilities/mergeLocalizedData.spec.js +23 -23
  292. package/dist/utilities/mergeLocalizedData.spec.js.map +1 -1
  293. package/dist/utilities/parseParams/index.d.ts +2 -5
  294. package/dist/utilities/parseParams/index.d.ts.map +1 -1
  295. package/dist/utilities/parseParams/index.js.map +1 -1
  296. package/dist/utilities/parseParams/index.spec.js +0 -9
  297. package/dist/utilities/parseParams/index.spec.js.map +1 -1
  298. package/dist/utilities/telemetry/conf/envPaths.d.ts.map +1 -1
  299. package/dist/utilities/telemetry/conf/envPaths.js +31 -40
  300. package/dist/utilities/telemetry/conf/envPaths.js.map +1 -1
  301. package/dist/utilities/transformColumnPreferences.js +4 -2
  302. package/dist/utilities/transformColumnPreferences.js.map +1 -1
  303. package/dist/utilities/traverseFields.d.ts.map +1 -1
  304. package/dist/utilities/traverseFields.js +2 -4
  305. package/dist/utilities/traverseFields.js.map +1 -1
  306. package/dist/utilities/traverseForLocalizedFields.d.ts.map +1 -1
  307. package/dist/utilities/traverseForLocalizedFields.js +3 -0
  308. package/dist/utilities/traverseForLocalizedFields.js.map +1 -1
  309. package/dist/versions/baseFields.d.ts +1 -2
  310. package/dist/versions/baseFields.d.ts.map +1 -1
  311. package/dist/versions/baseFields.js +0 -13
  312. package/dist/versions/baseFields.js.map +1 -1
  313. package/dist/versions/buildCollectionFields.d.ts.map +1 -1
  314. package/dist/versions/buildCollectionFields.js +0 -2
  315. package/dist/versions/buildCollectionFields.js.map +1 -1
  316. package/dist/versions/buildGlobalFields.d.ts.map +1 -1
  317. package/dist/versions/buildGlobalFields.js +0 -2
  318. package/dist/versions/buildGlobalFields.js.map +1 -1
  319. package/dist/versions/buildSingleLocalePublishData.d.ts +32 -0
  320. package/dist/versions/buildSingleLocalePublishData.d.ts.map +1 -0
  321. package/dist/versions/buildSingleLocalePublishData.js +37 -0
  322. package/dist/versions/buildSingleLocalePublishData.js.map +1 -0
  323. package/dist/versions/saveVersion.d.ts +0 -2
  324. package/dist/versions/saveVersion.d.ts.map +1 -1
  325. package/dist/versions/saveVersion.js +12 -17
  326. package/dist/versions/saveVersion.js.map +1 -1
  327. package/dist/versions/schedule/job.d.ts.map +1 -1
  328. package/dist/versions/schedule/job.js +2 -9
  329. package/dist/versions/schedule/job.js.map +1 -1
  330. package/dist/versions/types.d.ts +2 -15
  331. package/dist/versions/types.d.ts.map +1 -1
  332. package/dist/versions/types.js.map +1 -1
  333. package/package.json +7 -4
  334. package/dist/database/migrations/templates/localizeStatus.d.ts +0 -10
  335. package/dist/database/migrations/templates/localizeStatus.d.ts.map +0 -1
  336. package/dist/database/migrations/templates/localizeStatus.js +0 -54
  337. package/dist/database/migrations/templates/localizeStatus.js.map +0 -1
  338. package/dist/versions/migrations/localizeStatus/index.d.ts +0 -12
  339. package/dist/versions/migrations/localizeStatus/index.d.ts.map +0 -1
  340. package/dist/versions/migrations/localizeStatus/index.js +0 -33
  341. package/dist/versions/migrations/localizeStatus/index.js.map +0 -1
  342. package/dist/versions/migrations/localizeStatus/mongo/down.d.ts +0 -9
  343. package/dist/versions/migrations/localizeStatus/mongo/down.d.ts.map +0 -1
  344. package/dist/versions/migrations/localizeStatus/mongo/down.js +0 -112
  345. package/dist/versions/migrations/localizeStatus/mongo/down.js.map +0 -1
  346. package/dist/versions/migrations/localizeStatus/mongo/index.d.ts +0 -8
  347. package/dist/versions/migrations/localizeStatus/mongo/index.d.ts.map +0 -1
  348. package/dist/versions/migrations/localizeStatus/mongo/index.js +0 -8
  349. package/dist/versions/migrations/localizeStatus/mongo/index.js.map +0 -1
  350. package/dist/versions/migrations/localizeStatus/mongo/up.d.ts +0 -9
  351. package/dist/versions/migrations/localizeStatus/mongo/up.d.ts.map +0 -1
  352. package/dist/versions/migrations/localizeStatus/mongo/up.js +0 -220
  353. package/dist/versions/migrations/localizeStatus/mongo/up.js.map +0 -1
  354. package/dist/versions/migrations/localizeStatus/sql/down.d.ts +0 -11
  355. package/dist/versions/migrations/localizeStatus/sql/down.d.ts.map +0 -1
  356. package/dist/versions/migrations/localizeStatus/sql/down.js +0 -213
  357. package/dist/versions/migrations/localizeStatus/sql/down.js.map +0 -1
  358. package/dist/versions/migrations/localizeStatus/sql/index.d.ts +0 -8
  359. package/dist/versions/migrations/localizeStatus/sql/index.d.ts.map +0 -1
  360. package/dist/versions/migrations/localizeStatus/sql/index.js +0 -8
  361. package/dist/versions/migrations/localizeStatus/sql/index.js.map +0 -1
  362. package/dist/versions/migrations/localizeStatus/sql/migrateMainCollection.d.ts +0 -13
  363. package/dist/versions/migrations/localizeStatus/sql/migrateMainCollection.d.ts.map +0 -1
  364. package/dist/versions/migrations/localizeStatus/sql/migrateMainCollection.js +0 -51
  365. package/dist/versions/migrations/localizeStatus/sql/migrateMainCollection.js.map +0 -1
  366. package/dist/versions/migrations/localizeStatus/sql/migrateMainGlobal.d.ts +0 -13
  367. package/dist/versions/migrations/localizeStatus/sql/migrateMainGlobal.d.ts.map +0 -1
  368. package/dist/versions/migrations/localizeStatus/sql/migrateMainGlobal.js +0 -54
  369. package/dist/versions/migrations/localizeStatus/sql/migrateMainGlobal.js.map +0 -1
  370. package/dist/versions/migrations/localizeStatus/sql/up.d.ts +0 -11
  371. package/dist/versions/migrations/localizeStatus/sql/up.d.ts.map +0 -1
  372. package/dist/versions/migrations/localizeStatus/sql/up.js +0 -277
  373. package/dist/versions/migrations/localizeStatus/sql/up.js.map +0 -1
  374. package/dist/versions/saveSnapshot.d.ts +0 -18
  375. package/dist/versions/saveSnapshot.d.ts.map +0 -1
  376. package/dist/versions/saveSnapshot.js +0 -38
  377. package/dist/versions/saveSnapshot.js.map +0 -1
@@ -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
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/collections/operations/utilities/update.ts"],"sourcesContent":["import type { DeepPartial } from 'ts-essentials'\n\nimport type { Args } from '../../../fields/hooks/beforeChange/index.js'\nimport type {\n CollectionSlug,\n FileToSave,\n SanitizedConfig,\n TypedFallbackLocale,\n} from '../../../index.js'\nimport type {\n JsonObject,\n Payload,\n PayloadRequest,\n PopulateType,\n SelectType,\n TransformCollectionWithSelect,\n} from '../../../types/index.js'\nimport type {\n DataFromCollectionSlug,\n SanitizedCollectionConfig,\n SelectFromCollectionSlug,\n TypeWithID,\n} from '../../config/types.js'\n\nimport { ensureUsernameOrEmail } from '../../../auth/ensureUsernameOrEmail.js'\nimport { generatePasswordSaltHash } from '../../../auth/strategies/local/generatePasswordSaltHash.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 { deepCopyObjectSimple, getLatestCollectionVersion, saveVersion } from '../../../index.js'\nimport { deleteAssociatedFiles } from '../../../uploads/deleteAssociatedFiles.js'\nimport { uploadFiles } from '../../../uploads/uploadFiles.js'\nimport { checkDocumentLockStatus } from '../../../utilities/checkDocumentLockStatus.js'\nimport {\n hasDraftsEnabled,\n hasDraftValidationEnabled,\n hasLocalizeStatusEnabled,\n} from '../../../utilities/getVersionsConfig.js'\nimport { mergeLocalizedData } from '../../../utilities/mergeLocalizedData.js'\nexport type SharedUpdateDocumentArgs<TSlug extends CollectionSlug> = {\n autosave: boolean\n collectionConfig: SanitizedCollectionConfig\n config: SanitizedConfig\n data: DeepPartial<DataFromCollectionSlug<TSlug>>\n depth: number\n docWithLocales: JsonObject & TypeWithID\n draftArg: boolean\n fallbackLocale: TypedFallbackLocale\n filesToUpload: FileToSave[]\n id: number | string\n locale: string\n overrideAccess: boolean\n overrideLock: boolean\n payload: Payload\n populate?: PopulateType\n publishAllLocales?: boolean\n publishSpecificLocale?: string\n req: PayloadRequest\n select: SelectType\n showHiddenFields: boolean\n unpublishAllLocales?: boolean\n}\n\n/**\n * This function is used to update a document in the DB and return the result.\n *\n * It runs the following hooks in order:\n * - beforeValidate - Fields\n * - beforeValidate - Collection\n * - beforeChange - Collection\n * - beforeChange - Fields\n * - afterRead - Fields\n * - afterRead - Collection\n * - afterChange - Fields\n * - afterChange - Collection\n */\nexport const updateDocument = async <\n TSlug extends CollectionSlug,\n TSelect extends SelectFromCollectionSlug<TSlug> = SelectType,\n>({\n id,\n autosave,\n collectionConfig,\n config,\n data,\n depth,\n docWithLocales,\n draftArg,\n fallbackLocale,\n filesToUpload,\n locale,\n overrideAccess,\n overrideLock,\n payload,\n populate,\n publishAllLocales: publishAllLocalesArg,\n publishSpecificLocale,\n req,\n select,\n showHiddenFields,\n unpublishAllLocales: unpublishAllLocalesArg,\n}: SharedUpdateDocumentArgs<TSlug>): Promise<TransformCollectionWithSelect<TSlug, TSelect>> => {\n const password = data?.password\n const publishAllLocales =\n !draftArg &&\n (publishAllLocalesArg ?? (hasLocalizeStatusEnabled(collectionConfig) ? false : true))\n const unpublishAllLocales =\n typeof unpublishAllLocalesArg === 'string'\n ? unpublishAllLocalesArg === 'true'\n : !!unpublishAllLocalesArg\n const isSavingDraft =\n Boolean(draftArg && hasDraftsEnabled(collectionConfig)) &&\n data._status !== 'published' &&\n !publishAllLocales\n const shouldSavePassword = Boolean(\n password &&\n collectionConfig.auth &&\n (!collectionConfig.auth.disableLocalStrategy ||\n (typeof collectionConfig.auth.disableLocalStrategy === 'object' &&\n collectionConfig.auth.disableLocalStrategy.enableFields)) &&\n !isSavingDraft,\n )\n\n if (isSavingDraft) {\n data._status = 'draft'\n }\n\n // /////////////////////////////////////\n // Handle potentially locked documents\n // /////////////////////////////////////\n\n await checkDocumentLockStatus({\n id,\n collectionSlug: collectionConfig.slug,\n lockErrorMessage: `Document with ID ${id} is currently locked by another user and cannot be updated.`,\n overrideLock,\n req,\n })\n\n const originalDoc = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth: 0,\n doc: deepCopyObjectSimple(docWithLocales),\n draft: draftArg,\n fallbackLocale: id ? null : fallbackLocale,\n global: null,\n locale,\n overrideAccess: true,\n req,\n showHiddenFields: true,\n })\n\n const isRestoringDraftFromTrash = Boolean(originalDoc?.deletedAt) && data?._status !== 'published'\n\n if (collectionConfig.auth) {\n ensureUsernameOrEmail<TSlug>({\n authOptions: collectionConfig.auth,\n collectionSlug: collectionConfig.slug,\n data,\n operation: 'update',\n originalDoc,\n req,\n })\n }\n\n // /////////////////////////////////////\n // Delete any associated files\n // /////////////////////////////////////\n\n // When saving a draft on a document whose latest version is published, the file\n // referenced by docWithLocales is still actively used by the published main document.\n // Deleting it here would break the published document's file even though no publish\n // is happening. Only skip deletion in this case; when the latest version is already a\n // draft, it is safe to delete the old draft file as it is being replaced.\n const isDraftOverPublished = isSavingDraft && docWithLocales._status === 'published'\n\n if (!isDraftOverPublished) {\n await deleteAssociatedFiles({\n collectionConfig,\n config,\n doc: docWithLocales,\n files: filesToUpload,\n overrideDelete: false,\n req,\n })\n }\n\n // /////////////////////////////////////\n // beforeValidate - Fields\n // /////////////////////////////////////\n\n data = await beforeValidate<DeepPartial<DataFromCollectionSlug<TSlug>>>({\n id,\n collection: collectionConfig,\n context: req.context,\n data,\n doc: originalDoc,\n global: null,\n operation: 'update',\n overrideAccess,\n req,\n })\n\n // /////////////////////////////////////\n // beforeValidate - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.beforeValidate?.length) {\n for (const hook of collectionConfig.hooks.beforeValidate) {\n data =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n data,\n operation: 'update',\n originalDoc,\n req,\n })) || data\n }\n }\n\n // /////////////////////////////////////\n // Write files to local storage\n // /////////////////////////////////////\n\n if (!collectionConfig.upload.disableLocalStorage) {\n await uploadFiles(payload, filesToUpload, req)\n }\n\n // /////////////////////////////////////\n // beforeChange - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.beforeChange?.length) {\n for (const hook of collectionConfig.hooks.beforeChange) {\n data =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n data,\n operation: 'update',\n originalDoc,\n req,\n })) || data\n }\n }\n\n // /////////////////////////////////////\n // beforeChange - Fields\n // /////////////////////////////////////\n\n const beforeChangeArgs: Args<DataFromCollectionSlug<TSlug>> = {\n id,\n collection: collectionConfig,\n context: req.context,\n data: { ...data, id },\n doc: originalDoc,\n docWithLocales,\n global: null,\n operation: 'update',\n overrideAccess,\n req,\n skipValidation:\n // only skip validation for drafts when draft validation is false\n (isSavingDraft && !hasDraftValidationEnabled(collectionConfig)) ||\n // Skip validation for trash operations since they're just metadata updates\n (collectionConfig.trash && (Boolean(data?.deletedAt) || isRestoringDraftFromTrash)) ||\n // Skip validation for unpublish operations — they only change _status, not document data\n unpublishAllLocales,\n }\n\n // /////////////////////////////////////\n // Handle Localized Data Merging\n // /////////////////////////////////////\n\n let result: JsonObject = await beforeChange(beforeChangeArgs)\n let snapshotToSave: JsonObject | undefined\n\n if (config.localization && collectionConfig.versions) {\n let snapshotData: JsonObject | undefined\n let currentDoc\n\n if (collectionConfig.versions.drafts && collectionConfig.versions.drafts.localizeStatus) {\n if (publishAllLocales || unpublishAllLocales) {\n let accessibleLocaleCodes = config.localization.localeCodes\n\n if (config.localization.filterAvailableLocales) {\n const filteredLocales = await config.localization.filterAvailableLocales({\n locales: config.localization.locales,\n req,\n })\n accessibleLocaleCodes = filteredLocales.map((locale) =>\n typeof locale === 'string' ? locale : locale.code,\n )\n }\n\n if (typeof result._status !== 'object' || result._status === null) {\n result._status = {}\n }\n\n for (const localeCode of accessibleLocaleCodes) {\n result._status[localeCode] = unpublishAllLocales ? 'draft' : 'published'\n }\n } else if (!isSavingDraft) {\n // publishing a single locale\n currentDoc = await payload.db.findOne<DataFromCollectionSlug<TSlug>>({\n collection: collectionConfig.slug,\n req,\n where: { id: { equals: id } },\n })\n snapshotData = result\n }\n } else if (publishSpecificLocale) {\n // previous way of publishing a single locale\n currentDoc = await getLatestCollectionVersion({\n id,\n config: collectionConfig,\n payload,\n published: true,\n query: {\n collection: collectionConfig.slug,\n locale: 'all',\n req,\n where: { id: { equals: id } },\n },\n req,\n })\n snapshotData = {\n ...result,\n _status: 'draft',\n }\n }\n\n if (snapshotData) {\n snapshotToSave = deepCopyObjectSimple(snapshotData || {})\n\n result = mergeLocalizedData({\n configBlockReferences: config.blocks,\n dataWithLocales: result || {},\n docWithLocales: currentDoc || {},\n fields: collectionConfig.fields,\n selectedLocales: [locale],\n })\n }\n }\n\n const dataToUpdate: JsonObject = { ...result }\n\n // /////////////////////////////////////\n // Handle potential password update\n // /////////////////////////////////////\n\n if (shouldSavePassword && typeof password === 'string') {\n const { hash, salt } = await generatePasswordSaltHash({\n collection: collectionConfig,\n password,\n req,\n })\n dataToUpdate.salt = salt\n dataToUpdate.hash = hash\n delete dataToUpdate.password\n delete data.password\n }\n\n // /////////////////////////////////////\n // Update\n // /////////////////////////////////////\n\n let resultWithLocales: JsonObject = result\n\n if (!isSavingDraft) {\n // Ensure updatedAt date is always updated\n dataToUpdate.updatedAt = new Date().toISOString()\n resultWithLocales = await req.payload.db.updateOne({\n id,\n collection: collectionConfig.slug,\n data: dataToUpdate,\n locale,\n req,\n })\n }\n\n // /////////////////////////////////////\n // Create version\n // /////////////////////////////////////\n\n if (collectionConfig.versions) {\n resultWithLocales = await saveVersion({\n id,\n autosave,\n collection: collectionConfig,\n docWithLocales: resultWithLocales,\n draft: isSavingDraft,\n operation: 'update',\n payload,\n publishSpecificLocale,\n req,\n snapshot: snapshotToSave,\n unpublish: unpublishAllLocales,\n })\n }\n\n // /////////////////////////////////////\n // afterRead - Fields\n // /////////////////////////////////////\n\n result = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth,\n doc: resultWithLocales,\n draft: draftArg,\n fallbackLocale,\n global: null,\n locale,\n overrideAccess,\n populate,\n req,\n select,\n showHiddenFields,\n })\n\n // /////////////////////////////////////\n // afterRead - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.afterRead?.length) {\n for (const hook of collectionConfig.hooks.afterRead) {\n result =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: result,\n overrideAccess,\n req,\n })) || result\n }\n }\n\n // /////////////////////////////////////\n // afterChange - Fields\n // /////////////////////////////////////\n\n result = await afterChange({\n collection: collectionConfig,\n context: req.context,\n data,\n doc: result,\n global: null,\n operation: 'update',\n previousDoc: originalDoc,\n req,\n })\n\n // /////////////////////////////////////\n // afterChange - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.afterChange?.length) {\n for (const hook of collectionConfig.hooks.afterChange) {\n result =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n data,\n doc: result,\n operation: 'update',\n overrideAccess,\n previousDoc: originalDoc,\n req,\n })) || result\n }\n }\n\n return result as TransformCollectionWithSelect<TSlug, TSelect>\n}\n"],"names":["ensureUsernameOrEmail","generatePasswordSaltHash","afterChange","afterRead","beforeChange","beforeValidate","deepCopyObjectSimple","getLatestCollectionVersion","saveVersion","deleteAssociatedFiles","uploadFiles","checkDocumentLockStatus","hasDraftsEnabled","hasDraftValidationEnabled","hasLocalizeStatusEnabled","mergeLocalizedData","updateDocument","id","autosave","collectionConfig","config","data","depth","docWithLocales","draftArg","fallbackLocale","filesToUpload","locale","overrideAccess","overrideLock","payload","populate","publishAllLocales","publishAllLocalesArg","publishSpecificLocale","req","select","showHiddenFields","unpublishAllLocales","unpublishAllLocalesArg","password","isSavingDraft","Boolean","_status","shouldSavePassword","auth","disableLocalStrategy","enableFields","collectionSlug","slug","lockErrorMessage","originalDoc","collection","context","doc","draft","global","isRestoringDraftFromTrash","deletedAt","authOptions","operation","isDraftOverPublished","files","overrideDelete","hooks","length","hook","upload","disableLocalStorage","beforeChangeArgs","skipValidation","trash","result","snapshotToSave","localization","versions","snapshotData","currentDoc","drafts","localizeStatus","accessibleLocaleCodes","localeCodes","filterAvailableLocales","filteredLocales","locales","map","code","localeCode","db","findOne","where","equals","published","query","configBlockReferences","blocks","dataWithLocales","fields","selectedLocales","dataToUpdate","hash","salt","resultWithLocales","updatedAt","Date","toISOString","updateOne","snapshot","unpublish","previousDoc"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/collections/operations/utilities/update.ts"],"sourcesContent":["import type { DeepPartial } from 'ts-essentials'\n\nimport type { Args } from '../../../fields/hooks/beforeChange/index.js'\nimport type {\n CollectionSlug,\n FileToSave,\n SanitizedConfig,\n TypedFallbackLocale,\n} from '../../../index.js'\nimport type {\n JsonObject,\n Payload,\n PayloadRequest,\n PopulateType,\n SelectType,\n TransformCollectionWithSelect,\n} from '../../../types/index.js'\nimport type {\n DataFromCollectionSlug,\n SanitizedCollectionConfig,\n SelectFromCollectionSlug,\n TypeWithID,\n} from '../../config/types.js'\n\nimport { ensureUsernameOrEmail } from '../../../auth/ensureUsernameOrEmail.js'\nimport { generatePasswordSaltHash } from '../../../auth/strategies/local/generatePasswordSaltHash.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 { deepCopyObjectSimple, saveVersion } from '../../../index.js'\nimport { deleteAssociatedFiles } from '../../../uploads/deleteAssociatedFiles.js'\nimport { uploadFiles } from '../../../uploads/uploadFiles.js'\nimport { checkDocumentLockStatus } from '../../../utilities/checkDocumentLockStatus.js'\nimport {\n hasDraftsEnabled,\n hasDraftValidationEnabled,\n hasLocalizeStatusEnabled,\n} from '../../../utilities/getVersionsConfig.js'\nimport { buildLocalizedPublishData } from '../../../versions/buildSingleLocalePublishData.js'\nexport type SharedUpdateDocumentArgs<TSlug extends CollectionSlug> = {\n autosave: boolean\n collectionConfig: SanitizedCollectionConfig\n config: SanitizedConfig\n data: DeepPartial<DataFromCollectionSlug<TSlug>>\n depth: number\n docWithLocales: JsonObject & TypeWithID\n draftArg: boolean\n fallbackLocale: TypedFallbackLocale\n filesToUpload: FileToSave[]\n id: number | string\n locale: string\n overrideAccess: boolean\n overrideLock: boolean\n payload: Payload\n populate?: PopulateType\n publishAllLocales?: boolean\n req: PayloadRequest\n select: SelectType\n showHiddenFields: boolean\n unpublishAllLocales?: boolean\n}\n\n/**\n * This function is used to update a document in the DB and return the result.\n *\n * It runs the following hooks in order:\n * - beforeValidate - Fields\n * - beforeValidate - Collection\n * - beforeChange - Collection\n * - beforeChange - Fields\n * - afterRead - Fields\n * - afterRead - Collection\n * - afterChange - Fields\n * - afterChange - Collection\n */\nexport const updateDocument = async <\n TSlug extends CollectionSlug,\n TSelect extends SelectFromCollectionSlug<TSlug> = SelectType,\n>({\n id,\n autosave,\n collectionConfig,\n config,\n data,\n depth,\n docWithLocales,\n draftArg,\n fallbackLocale,\n filesToUpload,\n locale,\n overrideAccess,\n overrideLock,\n payload,\n populate,\n publishAllLocales: publishAllLocalesArg,\n req,\n select,\n showHiddenFields,\n unpublishAllLocales: unpublishAllLocalesArg,\n}: SharedUpdateDocumentArgs<TSlug>): Promise<TransformCollectionWithSelect<TSlug, TSelect>> => {\n const password = data?.password\n const publishAllLocales =\n !draftArg &&\n (publishAllLocalesArg ??\n (hasLocalizeStatusEnabled(collectionConfig) && locale !== 'all' ? false : true))\n const unpublishAllLocales =\n typeof unpublishAllLocalesArg === 'string'\n ? unpublishAllLocalesArg === 'true'\n : !!unpublishAllLocalesArg\n const isSavingDraft =\n Boolean(draftArg && hasDraftsEnabled(collectionConfig)) &&\n data._status !== 'published' &&\n !publishAllLocales\n const shouldSavePassword = Boolean(\n password &&\n collectionConfig.auth &&\n (!collectionConfig.auth.disableLocalStrategy ||\n (typeof collectionConfig.auth.disableLocalStrategy === 'object' &&\n collectionConfig.auth.disableLocalStrategy.enableFields)) &&\n !isSavingDraft,\n )\n\n if (isSavingDraft) {\n data._status = 'draft'\n }\n\n // /////////////////////////////////////\n // Handle potentially locked documents\n // /////////////////////////////////////\n\n await checkDocumentLockStatus({\n id,\n collectionSlug: collectionConfig.slug,\n lockErrorMessage: `Document with ID ${id} is currently locked by another user and cannot be updated.`,\n overrideLock,\n req,\n })\n\n const originalDoc = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth: 0,\n doc: deepCopyObjectSimple(docWithLocales),\n draft: draftArg,\n fallbackLocale: id ? null : fallbackLocale,\n global: null,\n locale,\n overrideAccess: true,\n req,\n showHiddenFields: true,\n })\n\n const isRestoringDraftFromTrash = Boolean(originalDoc?.deletedAt) && data?._status !== 'published'\n\n if (collectionConfig.auth) {\n ensureUsernameOrEmail<TSlug>({\n authOptions: collectionConfig.auth,\n collectionSlug: collectionConfig.slug,\n data,\n operation: 'update',\n originalDoc,\n req,\n })\n }\n\n // /////////////////////////////////////\n // Delete any associated files\n // /////////////////////////////////////\n\n // When saving a draft on a document whose latest version is published, the file\n // referenced by docWithLocales is still actively used by the published main document.\n // Deleting it here would break the published document's file even though no publish\n // is happening. Only skip deletion in this case; when the latest version is already a\n // draft, it is safe to delete the old draft file as it is being replaced.\n const isDraftOverPublished = isSavingDraft && docWithLocales._status === 'published'\n\n if (!isDraftOverPublished) {\n await deleteAssociatedFiles({\n collectionConfig,\n config,\n doc: docWithLocales,\n files: filesToUpload,\n overrideDelete: false,\n req,\n })\n }\n\n // /////////////////////////////////////\n // beforeValidate - Fields\n // /////////////////////////////////////\n\n data = await beforeValidate<DeepPartial<DataFromCollectionSlug<TSlug>>>({\n id,\n collection: collectionConfig,\n context: req.context,\n data,\n doc: originalDoc,\n global: null,\n operation: 'update',\n overrideAccess,\n req,\n })\n\n // /////////////////////////////////////\n // beforeValidate - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.beforeValidate?.length) {\n for (const hook of collectionConfig.hooks.beforeValidate) {\n data =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n data,\n operation: 'update',\n originalDoc,\n req,\n })) || data\n }\n }\n\n // /////////////////////////////////////\n // Write files to local storage\n // /////////////////////////////////////\n\n if (!collectionConfig.upload.disableLocalStorage) {\n await uploadFiles(payload, filesToUpload, req)\n }\n\n // /////////////////////////////////////\n // beforeChange - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.beforeChange?.length) {\n for (const hook of collectionConfig.hooks.beforeChange) {\n data =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n data,\n operation: 'update',\n originalDoc,\n req,\n })) || data\n }\n }\n\n // /////////////////////////////////////\n // beforeChange - Fields\n // /////////////////////////////////////\n\n const beforeChangeArgs: Args<DataFromCollectionSlug<TSlug>> = {\n id,\n collection: collectionConfig,\n context: req.context,\n data: { ...data, id },\n doc: originalDoc,\n docWithLocales,\n global: null,\n operation: 'update',\n overrideAccess,\n req,\n skipValidation:\n // only skip validation for drafts when draft validation is false\n (isSavingDraft && !hasDraftValidationEnabled(collectionConfig)) ||\n // Skip validation for trash operations since they're just metadata updates\n (collectionConfig.trash && (Boolean(data?.deletedAt) || isRestoringDraftFromTrash)) ||\n // Skip validation for unpublish operations — they only change _status, not document data\n unpublishAllLocales,\n }\n\n // /////////////////////////////////////\n // Handle Localized Data Merging\n // /////////////////////////////////////\n\n let result: JsonObject = await beforeChange(beforeChangeArgs)\n\n if (\n config.localization &&\n hasLocalizeStatusEnabled(collectionConfig) &&\n typeof result._status === 'string'\n ) {\n const statusStr = result._status\n result._status = {}\n for (const localeCode of config.localization.localeCodes) {\n ;(result._status as Record<string, unknown>)[localeCode] = statusStr\n }\n }\n\n let localizedPublishData: JsonObject | null = null\n\n if (config.localization && collectionConfig.versions) {\n if (hasLocalizeStatusEnabled(collectionConfig)) {\n if (publishAllLocales || unpublishAllLocales) {\n let accessibleLocaleCodes = config.localization.localeCodes\n\n if (config.localization.filterAvailableLocales) {\n const filteredLocales = await config.localization.filterAvailableLocales({\n locales: config.localization.locales,\n req,\n })\n accessibleLocaleCodes = filteredLocales.map((locale) =>\n typeof locale === 'string' ? locale : locale.code,\n )\n }\n\n if (typeof result._status !== 'object' || result._status === null) {\n result._status = {}\n }\n\n for (const localeCode of accessibleLocaleCodes) {\n result._status[localeCode] = unpublishAllLocales ? 'draft' : 'published'\n }\n } else if (\n !isSavingDraft &&\n result._status &&\n typeof result._status === 'object' &&\n !Array.isArray(result._status) &&\n (result._status as Record<string, unknown>)[locale] === 'published'\n ) {\n const currentDoc = await payload.db.findOne<DataFromCollectionSlug<TSlug>>({\n collection: collectionConfig.slug,\n locale: 'all',\n req,\n where: { id: { equals: id } },\n })\n\n localizedPublishData = buildLocalizedPublishData({\n config,\n currentDoc: currentDoc as JsonObject,\n fields: collectionConfig.fields,\n locale,\n result,\n })\n }\n }\n }\n\n const dataToUpdate: JsonObject = { ...(localizedPublishData ?? result) }\n\n // /////////////////////////////////////\n // Handle potential password update\n // /////////////////////////////////////\n\n if (shouldSavePassword && typeof password === 'string') {\n const { hash, salt } = await generatePasswordSaltHash({\n collection: collectionConfig,\n password,\n req,\n })\n dataToUpdate.salt = salt\n dataToUpdate.hash = hash\n delete dataToUpdate.password\n delete data.password\n }\n\n // /////////////////////////////////////\n // Update\n // /////////////////////////////////////\n\n let resultWithLocales: JsonObject = result\n\n if (!isSavingDraft) {\n // Ensure updatedAt date is always updated\n dataToUpdate.updatedAt = new Date().toISOString()\n if (localizedPublishData) {\n // Single-locale publish: save filtered data to main doc but keep full locale data for\n // the version so draft fetches (replaceWithDraftIfAvailable) return complete data.\n await req.payload.db.updateOne({\n id,\n collection: collectionConfig.slug,\n data: dataToUpdate,\n locale,\n req,\n })\n resultWithLocales = { ...result, updatedAt: dataToUpdate.updatedAt }\n } else {\n resultWithLocales = await req.payload.db.updateOne({\n id,\n collection: collectionConfig.slug,\n data: dataToUpdate,\n locale,\n req,\n })\n }\n }\n\n // /////////////////////////////////////\n // Create version\n // /////////////////////////////////////\n\n if (collectionConfig.versions) {\n resultWithLocales = await saveVersion({\n id,\n autosave,\n collection: collectionConfig,\n docWithLocales: resultWithLocales,\n draft: isSavingDraft,\n operation: 'update',\n payload,\n req,\n unpublish: unpublishAllLocales,\n })\n }\n\n // /////////////////////////////////////\n // afterRead - Fields\n // /////////////////////////////////////\n\n result = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth,\n doc: resultWithLocales,\n draft: draftArg,\n fallbackLocale,\n global: null,\n locale,\n overrideAccess,\n populate,\n req,\n select,\n showHiddenFields,\n })\n\n // /////////////////////////////////////\n // afterRead - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.afterRead?.length) {\n for (const hook of collectionConfig.hooks.afterRead) {\n result =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: result,\n overrideAccess,\n req,\n })) || result\n }\n }\n\n // /////////////////////////////////////\n // afterChange - Fields\n // /////////////////////////////////////\n\n result = await afterChange({\n collection: collectionConfig,\n context: req.context,\n data,\n doc: result,\n global: null,\n operation: 'update',\n previousDoc: originalDoc,\n req,\n })\n\n // /////////////////////////////////////\n // afterChange - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.afterChange?.length) {\n for (const hook of collectionConfig.hooks.afterChange) {\n result =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n data,\n doc: result,\n operation: 'update',\n overrideAccess,\n previousDoc: originalDoc,\n req,\n })) || result\n }\n }\n\n return result as TransformCollectionWithSelect<TSlug, TSelect>\n}\n"],"names":["ensureUsernameOrEmail","generatePasswordSaltHash","afterChange","afterRead","beforeChange","beforeValidate","deepCopyObjectSimple","saveVersion","deleteAssociatedFiles","uploadFiles","checkDocumentLockStatus","hasDraftsEnabled","hasDraftValidationEnabled","hasLocalizeStatusEnabled","buildLocalizedPublishData","updateDocument","id","autosave","collectionConfig","config","data","depth","docWithLocales","draftArg","fallbackLocale","filesToUpload","locale","overrideAccess","overrideLock","payload","populate","publishAllLocales","publishAllLocalesArg","req","select","showHiddenFields","unpublishAllLocales","unpublishAllLocalesArg","password","isSavingDraft","Boolean","_status","shouldSavePassword","auth","disableLocalStrategy","enableFields","collectionSlug","slug","lockErrorMessage","originalDoc","collection","context","doc","draft","global","isRestoringDraftFromTrash","deletedAt","authOptions","operation","isDraftOverPublished","files","overrideDelete","hooks","length","hook","upload","disableLocalStorage","beforeChangeArgs","skipValidation","trash","result","localization","statusStr","localeCode","localeCodes","localizedPublishData","versions","accessibleLocaleCodes","filterAvailableLocales","filteredLocales","locales","map","code","Array","isArray","currentDoc","db","findOne","where","equals","fields","dataToUpdate","hash","salt","resultWithLocales","updatedAt","Date","toISOString","updateOne","unpublish","previousDoc"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/config/client.ts"],"sourcesContent":["import type { I18nClient, TFunction } from '@payloadcms/translations'\nimport type { DeepPartial } from 'ts-essentials'\n\nimport type { ImportMap } from '../bin/generateImportMap/index.js'\nimport type { ClientBlock } from '../fields/config/types.js'\nimport type { BlockSlug, TypedUser } from '../index.js'\nimport type {\n ClientWidget,\n RootLivePreviewConfig,\n SanitizedConfig,\n ServerOnlyLivePreviewProperties,\n} from './types.js'\n\nimport {\n type ClientCollectionConfig,\n createClientCollectionConfigs,\n} from '../collections/config/client.js'\nimport { createClientBlocks, createClientFields } from '../fields/config/client.js'\nimport { type ClientGlobalConfig, createClientGlobalConfigs } from '../globals/config/client.js'\n\nexport type ServerOnlyRootProperties = keyof Pick<\n SanitizedConfig,\n | 'bin'\n | 'cors'\n | 'csrf'\n | 'custom'\n | 'db'\n | 'editor'\n | 'email'\n | 'endpoints'\n | 'graphQL'\n | 'hooks'\n | 'i18n'\n | 'jobs'\n | 'kv'\n | 'logger'\n | 'onInit'\n | 'plugins'\n | 'queryPresets'\n | 'secret'\n | 'sharp'\n | 'storage'\n | 'typescript'\n>\n\nexport type ServerOnlyRootAdminProperties = keyof Pick<SanitizedConfig['admin'], 'components'>\n\nexport type ClientConfig = {\n admin: {\n dashboard?: {\n widgets: ClientWidget[]\n }\n livePreview?: Omit<RootLivePreviewConfig, ServerOnlyLivePreviewProperties>\n } & Omit<SanitizedConfig['admin'], 'components' | 'dashboard' | 'dependencies' | 'livePreview'>\n blocks: ClientBlock[]\n blocksMap: Record<BlockSlug, ClientBlock>\n collections: ClientCollectionConfig[]\n custom?: Record<string, any>\n globals: ClientGlobalConfig[]\n unauthenticated?: boolean\n} & Omit<SanitizedConfig, 'admin' | 'collections' | 'globals' | 'i18n' | ServerOnlyRootProperties>\n\nexport type UnauthenticatedClientConfig = {\n admin: {\n routes: ClientConfig['admin']['routes']\n user: ClientConfig['admin']['user']\n }\n collections: [\n {\n auth: ClientCollectionConfig['auth']\n slug: string\n },\n ]\n globals: []\n routes: ClientConfig['routes']\n serverURL: ClientConfig['serverURL']\n unauthenticated: true\n}\n\nexport const serverOnlyAdminConfigProperties: readonly Partial<ServerOnlyRootAdminProperties>[] = []\n\nexport const serverOnlyConfigProperties: readonly Partial<ServerOnlyRootProperties>[] = [\n 'endpoints',\n 'db',\n 'editor',\n 'plugins',\n 'sharp',\n 'onInit',\n 'secret',\n 'hooks',\n 'bin',\n 'i18n',\n 'typescript',\n 'cors',\n 'csrf',\n 'email',\n 'custom',\n 'graphQL',\n 'jobs',\n 'logger',\n 'kv',\n 'queryPresets',\n 'storage',\n // `admin`, `onInit`, `localization`, `collections`, and `globals` are all handled separately\n]\n\nexport type CreateClientConfigArgs = {\n config: SanitizedConfig\n i18n: I18nClient\n importMap: ImportMap\n /**\n * If unauthenticated, the client config will omit some sensitive properties\n * such as field schemas, etc. This is useful for login and error pages where\n * the page source should not contain this information.\n *\n * For example, allow `true` to generate a client config for the \"create first user\" page\n * where there is no user yet, but the config should still be complete.\n */\n user: true | TypedUser\n}\n\nexport const createUnauthenticatedClientConfig = ({\n clientConfig,\n}: {\n /**\n * Send the previously generated client config to share memory when applicable.\n * E.g. the admin-enabled collection config can reference the existing collection rather than creating a new object.\n */\n clientConfig: ClientConfig\n}): UnauthenticatedClientConfig => {\n /**\n * To share memory, find the admin user collection from the existing client config.\n */\n const adminUserCollection = clientConfig.collections.find(\n ({ slug }) => slug === clientConfig.admin.user,\n )!\n\n return {\n admin: {\n routes: clientConfig.admin.routes,\n user: clientConfig.admin.user,\n },\n collections: [\n {\n slug: adminUserCollection.slug,\n auth: adminUserCollection.auth,\n },\n ],\n globals: [],\n routes: clientConfig.routes,\n serverURL: clientConfig.serverURL,\n unauthenticated: true,\n }\n}\n\nexport const createClientConfig = ({\n config,\n i18n,\n importMap,\n}: CreateClientConfigArgs): ClientConfig => {\n const clientConfig = {} as DeepPartial<ClientConfig>\n\n for (const key in config) {\n if (serverOnlyConfigProperties.includes(key as any)) {\n continue\n }\n\n switch (key) {\n case 'admin':\n clientConfig.admin = {\n autoLogin: config.admin.autoLogin,\n autoRefresh: config.admin.autoRefresh,\n avatar: config.admin.avatar,\n custom: config.admin.custom,\n dateFormat: config.admin.dateFormat,\n importMap: config.admin.importMap,\n meta: config.admin.meta,\n routes: config.admin.routes,\n theme: config.admin.theme,\n timezones: config.admin.timezones,\n toast: config.admin.toast,\n user: config.admin.user,\n }\n\n if (config.admin.dashboard?.widgets) {\n ;(clientConfig.admin.dashboard ??= {}).widgets = config.admin.dashboard.widgets.map(\n (widget) => {\n const { Component: _, fields, label, ...rest } = widget\n return {\n ...rest,\n ...(fields?.length\n ? {\n fields: createClientFields({\n defaultIDType: config.db.defaultIDType,\n fields,\n i18n,\n importMap,\n }),\n }\n : {}),\n // Resolve label function to string for client\n label:\n typeof label === 'function' ? label({ i18n, t: i18n.t as TFunction }) : label,\n }\n },\n )\n }\n\n if (config.admin.livePreview) {\n clientConfig.admin.livePreview = {}\n\n if (config.admin.livePreview.breakpoints) {\n clientConfig.admin.livePreview.breakpoints = config.admin.livePreview.breakpoints\n }\n\n if (config.admin.livePreview.collections) {\n clientConfig.admin.livePreview.collections = config.admin.livePreview.collections\n }\n\n if (config.admin.livePreview.globals) {\n clientConfig.admin.livePreview.globals = config.admin.livePreview.globals\n }\n }\n\n break\n\n case 'blocks': {\n ;(clientConfig.blocks as ClientBlock[]) = createClientBlocks({\n blocks: config.blocks!,\n defaultIDType: config.db.defaultIDType,\n i18n,\n importMap,\n }).filter((block) => typeof block !== 'string') as ClientBlock[]\n\n clientConfig.blocksMap = {}\n if (clientConfig.blocks?.length) {\n for (const block of clientConfig.blocks) {\n if (!block?.slug) {\n continue\n }\n\n clientConfig.blocksMap[block.slug] = block as ClientBlock\n }\n }\n\n break\n }\n\n case 'collections':\n ;(clientConfig.collections as ClientCollectionConfig[]) = createClientCollectionConfigs({\n collections: config.collections,\n defaultIDType: config.db.defaultIDType,\n i18n,\n importMap,\n })\n\n break\n\n case 'globals':\n ;(clientConfig.globals as ClientGlobalConfig[]) = createClientGlobalConfigs({\n defaultIDType: config.db.defaultIDType,\n globals: config.globals,\n i18n,\n importMap,\n })\n\n break\n\n case 'localization':\n if (typeof config.localization === 'object' && config.localization) {\n clientConfig.localization = {}\n\n if (config.localization.defaultLocale) {\n clientConfig.localization.defaultLocale = config.localization.defaultLocale\n }\n\n if (config.localization.defaultLocalePublishOption) {\n clientConfig.localization.defaultLocalePublishOption =\n config.localization.defaultLocalePublishOption\n }\n\n if (config.localization.fallback) {\n clientConfig.localization.fallback = config.localization.fallback\n }\n\n if (config.localization.localeCodes) {\n clientConfig.localization.localeCodes = config.localization.localeCodes\n }\n\n if (config.localization.locales) {\n clientConfig.localization.locales = []\n\n for (const locale of config.localization.locales) {\n if (locale) {\n const clientLocale: Partial<(typeof config.localization.locales)[0]> = {}\n\n if (locale.code) {\n clientLocale.code = locale.code\n }\n\n if (locale.fallbackLocale) {\n clientLocale.fallbackLocale = locale.fallbackLocale\n }\n\n if (locale.label) {\n clientLocale.label = locale.label\n }\n\n if (locale.rtl) {\n clientLocale.rtl = locale.rtl\n }\n\n clientConfig.localization.locales.push(clientLocale)\n }\n }\n }\n }\n\n break\n\n default:\n ;(clientConfig as any)[key] = config[key as keyof SanitizedConfig]\n }\n }\n\n return clientConfig as ClientConfig\n}\n"],"names":["createClientCollectionConfigs","createClientBlocks","createClientFields","createClientGlobalConfigs","serverOnlyAdminConfigProperties","serverOnlyConfigProperties","createUnauthenticatedClientConfig","clientConfig","adminUserCollection","collections","find","slug","admin","user","routes","auth","globals","serverURL","unauthenticated","createClientConfig","config","i18n","importMap","key","includes","autoLogin","autoRefresh","avatar","custom","dateFormat","meta","theme","timezones","toast","dashboard","widgets","map","widget","Component","_","fields","label","rest","length","defaultIDType","db","t","livePreview","breakpoints","blocks","filter","block","blocksMap","localization","defaultLocale","defaultLocalePublishOption","fallback","localeCodes","locales","locale","clientLocale","code","fallbackLocale","rtl","push"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/config/client.ts"],"sourcesContent":["import type { I18nClient, TFunction } from '@payloadcms/translations'\nimport type { DeepPartial } from 'ts-essentials'\n\nimport type { ImportMap } from '../bin/generateImportMap/index.js'\nimport type { ClientBlock } from '../fields/config/types.js'\nimport type { BlockSlug, TypedUser } from '../index.js'\nimport type {\n ClientWidget,\n RootLivePreviewConfig,\n SanitizedConfig,\n ServerOnlyLivePreviewProperties,\n} from './types.js'\n\nimport {\n type ClientCollectionConfig,\n createClientCollectionConfigs,\n} from '../collections/config/client.js'\nimport { createClientBlocks, createClientFields } from '../fields/config/client.js'\nimport { type ClientGlobalConfig, createClientGlobalConfigs } from '../globals/config/client.js'\n\nexport type ServerOnlyRootProperties = keyof Pick<\n SanitizedConfig,\n | 'bin'\n | 'cors'\n | 'csrf'\n | 'custom'\n | 'db'\n | 'editor'\n | 'email'\n | 'endpoints'\n | 'graphQL'\n | 'hooks'\n | 'i18n'\n | 'jobs'\n | 'kv'\n | 'logger'\n | 'onInit'\n | 'plugins'\n | 'queryPresets'\n | 'secret'\n | 'sharp'\n | 'storage'\n | 'typescript'\n>\n\nexport type ServerOnlyRootAdminProperties = keyof Pick<SanitizedConfig['admin'], 'components'>\n\nexport type ClientConfig = {\n admin: {\n dashboard?: {\n widgets: ClientWidget[]\n }\n livePreview?: Omit<RootLivePreviewConfig, ServerOnlyLivePreviewProperties>\n } & Omit<SanitizedConfig['admin'], 'components' | 'dashboard' | 'dependencies' | 'livePreview'>\n blocks: ClientBlock[]\n blocksMap: Record<BlockSlug, ClientBlock>\n collections: ClientCollectionConfig[]\n custom?: Record<string, any>\n globals: ClientGlobalConfig[]\n unauthenticated?: boolean\n} & Omit<SanitizedConfig, 'admin' | 'collections' | 'globals' | 'i18n' | ServerOnlyRootProperties>\n\nexport type UnauthenticatedClientConfig = {\n admin: {\n routes: ClientConfig['admin']['routes']\n user: ClientConfig['admin']['user']\n }\n collections: [\n {\n auth: ClientCollectionConfig['auth']\n slug: string\n },\n ]\n globals: []\n routes: ClientConfig['routes']\n serverURL: ClientConfig['serverURL']\n unauthenticated: true\n}\n\nexport const serverOnlyAdminConfigProperties: readonly Partial<ServerOnlyRootAdminProperties>[] = []\n\nexport const serverOnlyConfigProperties: readonly Partial<ServerOnlyRootProperties>[] = [\n 'endpoints',\n 'db',\n 'editor',\n 'plugins',\n 'sharp',\n 'onInit',\n 'secret',\n 'hooks',\n 'bin',\n 'i18n',\n 'typescript',\n 'cors',\n 'csrf',\n 'email',\n 'custom',\n 'graphQL',\n 'jobs',\n 'logger',\n 'kv',\n 'queryPresets',\n 'storage',\n // `admin`, `onInit`, `localization`, `collections`, and `globals` are all handled separately\n]\n\nexport type CreateClientConfigArgs = {\n config: SanitizedConfig\n i18n: I18nClient\n importMap: ImportMap\n /**\n * If unauthenticated, the client config will omit some sensitive properties\n * such as field schemas, etc. This is useful for login and error pages where\n * the page source should not contain this information.\n *\n * For example, allow `true` to generate a client config for the \"create first user\" page\n * where there is no user yet, but the config should still be complete.\n */\n user: true | TypedUser\n}\n\nexport const createUnauthenticatedClientConfig = ({\n clientConfig,\n}: {\n /**\n * Send the previously generated client config to share memory when applicable.\n * E.g. the admin-enabled collection config can reference the existing collection rather than creating a new object.\n */\n clientConfig: ClientConfig\n}): UnauthenticatedClientConfig => {\n /**\n * To share memory, find the admin user collection from the existing client config.\n */\n const adminUserCollection = clientConfig.collections.find(\n ({ slug }) => slug === clientConfig.admin.user,\n )!\n\n return {\n admin: {\n routes: clientConfig.admin.routes,\n user: clientConfig.admin.user,\n },\n collections: [\n {\n slug: adminUserCollection.slug,\n auth: adminUserCollection.auth,\n },\n ],\n globals: [],\n routes: clientConfig.routes,\n serverURL: clientConfig.serverURL,\n unauthenticated: true,\n }\n}\n\nexport const createClientConfig = ({\n config,\n i18n,\n importMap,\n}: CreateClientConfigArgs): ClientConfig => {\n const clientConfig = {} as DeepPartial<ClientConfig>\n\n for (const key in config) {\n if (serverOnlyConfigProperties.includes(key as any)) {\n continue\n }\n\n switch (key) {\n case 'admin':\n clientConfig.admin = {\n autoLogin: config.admin.autoLogin,\n autoRefresh: config.admin.autoRefresh,\n avatar: config.admin.avatar,\n custom: config.admin.custom,\n dateFormat: config.admin.dateFormat,\n importMap: config.admin.importMap,\n meta: config.admin.meta,\n routes: config.admin.routes,\n theme: config.admin.theme,\n timezones: config.admin.timezones,\n toast: config.admin.toast,\n user: config.admin.user,\n }\n\n if (config.admin.dashboard?.widgets) {\n ;(clientConfig.admin.dashboard ??= {}).widgets = config.admin.dashboard.widgets.map(\n (widget) => {\n const { Component: _, fields, label, ...rest } = widget\n return {\n ...rest,\n ...(fields?.length\n ? {\n fields: createClientFields({\n defaultIDType: config.db.defaultIDType,\n fields,\n i18n,\n importMap,\n }),\n }\n : {}),\n // Resolve label function to string for client\n label:\n typeof label === 'function' ? label({ i18n, t: i18n.t as TFunction }) : label,\n }\n },\n )\n }\n\n if (config.admin.livePreview) {\n clientConfig.admin.livePreview = {}\n\n if (config.admin.livePreview.breakpoints) {\n clientConfig.admin.livePreview.breakpoints = config.admin.livePreview.breakpoints\n }\n\n if (config.admin.livePreview.collections) {\n clientConfig.admin.livePreview.collections = config.admin.livePreview.collections\n }\n\n if (config.admin.livePreview.globals) {\n clientConfig.admin.livePreview.globals = config.admin.livePreview.globals\n }\n }\n\n break\n\n case 'blocks': {\n ;(clientConfig.blocks as ClientBlock[]) = createClientBlocks({\n blocks: config.blocks!,\n defaultIDType: config.db.defaultIDType,\n i18n,\n importMap,\n }).filter((block) => typeof block !== 'string')\n\n clientConfig.blocksMap = {}\n if (clientConfig.blocks?.length) {\n for (const block of clientConfig.blocks) {\n if (!block?.slug) {\n continue\n }\n\n clientConfig.blocksMap[block.slug] = block as ClientBlock\n }\n }\n\n break\n }\n\n case 'collections':\n ;(clientConfig.collections as ClientCollectionConfig[]) = createClientCollectionConfigs({\n collections: config.collections,\n defaultIDType: config.db.defaultIDType,\n i18n,\n importMap,\n })\n\n break\n\n case 'globals':\n ;(clientConfig.globals as ClientGlobalConfig[]) = createClientGlobalConfigs({\n defaultIDType: config.db.defaultIDType,\n globals: config.globals,\n i18n,\n importMap,\n })\n\n break\n\n case 'localization':\n if (typeof config.localization === 'object' && config.localization) {\n clientConfig.localization = {}\n\n if (config.localization.defaultLocale) {\n clientConfig.localization.defaultLocale = config.localization.defaultLocale\n }\n\n if (config.localization.defaultLocalePublishOption) {\n clientConfig.localization.defaultLocalePublishOption =\n config.localization.defaultLocalePublishOption\n }\n\n if (config.localization.fallback) {\n clientConfig.localization.fallback = config.localization.fallback\n }\n\n if (config.localization.localeCodes) {\n clientConfig.localization.localeCodes = config.localization.localeCodes\n }\n\n if (config.localization.locales) {\n clientConfig.localization.locales = []\n\n for (const locale of config.localization.locales) {\n if (locale) {\n const clientLocale: Partial<(typeof config.localization.locales)[0]> = {}\n\n if (locale.code) {\n clientLocale.code = locale.code\n }\n\n if (locale.fallbackLocale) {\n clientLocale.fallbackLocale = locale.fallbackLocale\n }\n\n if (locale.label) {\n clientLocale.label = locale.label\n }\n\n if (locale.rtl) {\n clientLocale.rtl = locale.rtl\n }\n\n clientConfig.localization.locales.push(clientLocale)\n }\n }\n }\n }\n\n break\n\n default:\n ;(clientConfig as any)[key] = config[key as keyof SanitizedConfig]\n }\n }\n\n return clientConfig as ClientConfig\n}\n"],"names":["createClientCollectionConfigs","createClientBlocks","createClientFields","createClientGlobalConfigs","serverOnlyAdminConfigProperties","serverOnlyConfigProperties","createUnauthenticatedClientConfig","clientConfig","adminUserCollection","collections","find","slug","admin","user","routes","auth","globals","serverURL","unauthenticated","createClientConfig","config","i18n","importMap","key","includes","autoLogin","autoRefresh","avatar","custom","dateFormat","meta","theme","timezones","toast","dashboard","widgets","map","widget","Component","_","fields","label","rest","length","defaultIDType","db","t","livePreview","breakpoints","blocks","filter","block","blocksMap","localization","defaultLocale","defaultLocalePublishOption","fallback","localeCodes","locales","locale","clientLocale","code","fallbackLocale","rtl","push"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/config/orderable/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAoB,gBAAgB,EAAE,MAAM,mCAAmC,CAAA;AAC3F,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAEnD,OAAO,KAAK,EAA4B,eAAe,EAAE,MAAM,aAAa,CAAA;AAc5E,eAAO,MAAM,yBAAyB,GACpC,YAAY,gBAAgB,EAC5B,QAAQ,MAAM,EACd,qBAAqB,MAAM,EAAE,EAC7B,6BAA6B,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,kBAuF9D,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,cAAc,EAAE,MAAM,CAAA;IACtB,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,YAAY,EAAE,SAAS,GAAG,MAAM,CAAA;IAChC,kBAAkB,EAAE,MAAM,CAAA;IAC1B,MAAM,EAAE;QACN,EAAE,EAAE,MAAM,CAAA;QACV,GAAG,EAAE,MAAM,CAAA;KACZ,CAAA;CACF,CAAA;AAED,eAAO,MAAM,oBAAoB,GAC/B,QAAQ,eAAe,EACvB,4BAA4B,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,SA4L7D,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/config/orderable/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAoB,gBAAgB,EAAE,MAAM,mCAAmC,CAAA;AAC3F,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAEnD,OAAO,KAAK,EAA4B,eAAe,EAAE,MAAM,aAAa,CAAA;AAgB5E,eAAO,MAAM,yBAAyB,GACpC,YAAY,gBAAgB,EAC5B,QAAQ,MAAM,EACd,qBAAqB,MAAM,EAAE,EAC7B,6BAA6B,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,kBAuF9D,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,cAAc,EAAE,MAAM,CAAA;IACtB,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,YAAY,EAAE,SAAS,GAAG,MAAM,CAAA;IAChC,kBAAkB,EAAE,MAAM,CAAA;IAC1B,MAAM,EAAE;QACN,EAAE,EAAE,MAAM,CAAA;QACV,GAAG,EAAE,MAAM,CAAA;KACZ,CAAA;CACF,CAAA;AAED,eAAO,MAAM,oBAAoB,GAC/B,QAAQ,eAAe,EACvB,4BAA4B,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,SAiN7D,CAAA"}