payload 4.0.0-internal.5f0cd13 → 4.0.0-internal.63f8536

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 (541) hide show
  1. package/LICENSE.md +1 -1
  2. package/bin.js +11 -0
  3. package/dist/admin/RichText.d.ts +2 -2
  4. package/dist/admin/RichText.d.ts.map +1 -1
  5. package/dist/admin/RichText.js.map +1 -1
  6. package/dist/admin/adapters/devReload.d.ts +9 -0
  7. package/dist/admin/adapters/devReload.d.ts.map +1 -0
  8. package/dist/admin/adapters/devReload.js +6 -0
  9. package/dist/admin/adapters/devReload.js.map +1 -0
  10. package/dist/admin/adapters/index.d.ts +3 -0
  11. package/dist/admin/adapters/index.d.ts.map +1 -1
  12. package/dist/admin/adapters/index.js.map +1 -1
  13. package/dist/admin/adapters/render.d.ts +16 -0
  14. package/dist/admin/adapters/render.d.ts.map +1 -0
  15. package/dist/admin/adapters/render.js +7 -0
  16. package/dist/admin/adapters/render.js.map +1 -0
  17. package/dist/admin/adapters/views.d.ts +36 -0
  18. package/dist/admin/adapters/views.d.ts.map +1 -0
  19. package/dist/admin/adapters/views.js +7 -0
  20. package/dist/admin/adapters/views.js.map +1 -0
  21. package/dist/admin/fields/Row.d.ts +2 -2
  22. package/dist/admin/fields/Row.d.ts.map +1 -1
  23. package/dist/admin/fields/Row.js.map +1 -1
  24. package/dist/admin/forms/Description.d.ts +2 -2
  25. package/dist/admin/forms/Description.d.ts.map +1 -1
  26. package/dist/admin/forms/Description.js.map +1 -1
  27. package/dist/admin/forms/Field.d.ts +10 -5
  28. package/dist/admin/forms/Field.d.ts.map +1 -1
  29. package/dist/admin/forms/Field.js.map +1 -1
  30. package/dist/admin/functions/index.d.ts +10 -1
  31. package/dist/admin/functions/index.d.ts.map +1 -1
  32. package/dist/admin/functions/index.js.map +1 -1
  33. package/dist/admin/types.d.ts +3 -2
  34. package/dist/admin/types.d.ts.map +1 -1
  35. package/dist/admin/types.js.map +1 -1
  36. package/dist/admin/views/dashboard.d.ts +7 -0
  37. package/dist/admin/views/dashboard.d.ts.map +1 -1
  38. package/dist/admin/views/dashboard.js.map +1 -1
  39. package/dist/admin/views/document.d.ts +5 -3
  40. package/dist/admin/views/document.d.ts.map +1 -1
  41. package/dist/admin/views/document.js.map +1 -1
  42. package/dist/admin/views/list.d.ts +5 -0
  43. package/dist/admin/views/list.d.ts.map +1 -1
  44. package/dist/admin/views/list.js.map +1 -1
  45. package/dist/auth/baseFields/apiKey.d.ts +10 -2
  46. package/dist/auth/baseFields/apiKey.d.ts.map +1 -1
  47. package/dist/auth/baseFields/apiKey.js +35 -24
  48. package/dist/auth/baseFields/apiKey.js.map +1 -1
  49. package/dist/auth/defaultAccess.d.ts +1 -1
  50. package/dist/auth/defaultAccess.d.ts.map +1 -1
  51. package/dist/auth/defaultAccess.js +1 -1
  52. package/dist/auth/defaultAccess.js.map +1 -1
  53. package/dist/auth/defaultUser.d.ts.map +1 -1
  54. package/dist/auth/defaultUser.js +2 -1
  55. package/dist/auth/defaultUser.js.map +1 -1
  56. package/dist/auth/getAuthFields.js +2 -2
  57. package/dist/auth/getAuthFields.js.map +1 -1
  58. package/dist/auth/operations/auth.d.ts +2 -2
  59. package/dist/auth/operations/auth.d.ts.map +1 -1
  60. package/dist/auth/operations/auth.js.map +1 -1
  61. package/dist/auth/operations/login.d.ts +2 -1
  62. package/dist/auth/operations/login.d.ts.map +1 -1
  63. package/dist/auth/operations/login.js.map +1 -1
  64. package/dist/auth/operations/me.js.map +1 -1
  65. package/dist/auth/operations/refresh.d.ts.map +1 -1
  66. package/dist/auth/operations/refresh.js +9 -3
  67. package/dist/auth/operations/refresh.js.map +1 -1
  68. package/dist/auth/operations/resetPassword.d.ts.map +1 -1
  69. package/dist/auth/operations/resetPassword.js.map +1 -1
  70. package/dist/auth/sendVerificationEmail.d.ts +2 -2
  71. package/dist/auth/sendVerificationEmail.d.ts.map +1 -1
  72. package/dist/auth/sendVerificationEmail.js +1 -1
  73. package/dist/auth/sendVerificationEmail.js.map +1 -1
  74. package/dist/auth/sessions.d.ts +4 -5
  75. package/dist/auth/sessions.d.ts.map +1 -1
  76. package/dist/auth/sessions.js +5 -3
  77. package/dist/auth/sessions.js.map +1 -1
  78. package/dist/auth/strategies/apiKey.js.map +1 -1
  79. package/dist/auth/strategies/local/incrementLoginAttempts.d.ts +2 -2
  80. package/dist/auth/strategies/local/incrementLoginAttempts.d.ts.map +1 -1
  81. package/dist/auth/strategies/local/incrementLoginAttempts.js +1 -1
  82. package/dist/auth/strategies/local/incrementLoginAttempts.js.map +1 -1
  83. package/dist/auth/types.d.ts +28 -21
  84. package/dist/auth/types.d.ts.map +1 -1
  85. package/dist/auth/types.js.map +1 -1
  86. package/dist/bin/build.d.ts +25 -0
  87. package/dist/bin/build.d.ts.map +1 -0
  88. package/dist/bin/build.js +80 -0
  89. package/dist/bin/build.js.map +1 -0
  90. package/dist/bin/build.spec.js +170 -0
  91. package/dist/bin/build.spec.js.map +1 -0
  92. package/dist/bin/generateImportMap/index.d.ts.map +1 -1
  93. package/dist/bin/generateImportMap/index.js +8 -5
  94. package/dist/bin/generateImportMap/index.js.map +1 -1
  95. package/dist/bin/generateImportMap/iterateCollections.d.ts.map +1 -1
  96. package/dist/bin/generateImportMap/iterateCollections.js +11 -0
  97. package/dist/bin/generateImportMap/iterateCollections.js.map +1 -1
  98. package/dist/bin/generateImportMap/iterateConfig.d.ts.map +1 -1
  99. package/dist/bin/generateImportMap/iterateConfig.js +12 -0
  100. package/dist/bin/generateImportMap/iterateConfig.js.map +1 -1
  101. package/dist/bin/generateImportMap/utilities/resolveImportMapFilePath.d.ts +5 -1
  102. package/dist/bin/generateImportMap/utilities/resolveImportMapFilePath.d.ts.map +1 -1
  103. package/dist/bin/generateImportMap/utilities/resolveImportMapFilePath.js +32 -18
  104. package/dist/bin/generateImportMap/utilities/resolveImportMapFilePath.js.map +1 -1
  105. package/dist/bin/generateTypes.d.ts +3 -2
  106. package/dist/bin/generateTypes.d.ts.map +1 -1
  107. package/dist/bin/generateTypes.js +4 -0
  108. package/dist/bin/generateTypes.js.map +1 -1
  109. package/dist/bin/index.d.ts.map +1 -1
  110. package/dist/bin/index.js +9 -0
  111. package/dist/bin/index.js.map +1 -1
  112. package/dist/bin/loadEnv.d.ts +3 -1
  113. package/dist/bin/loadEnv.d.ts.map +1 -1
  114. package/dist/bin/loadEnv.js +40 -10
  115. package/dist/bin/loadEnv.js.map +1 -1
  116. package/dist/collections/config/client.d.ts +1 -1
  117. package/dist/collections/config/client.d.ts.map +1 -1
  118. package/dist/collections/config/client.js +1 -0
  119. package/dist/collections/config/client.js.map +1 -1
  120. package/dist/collections/config/defaults.d.ts +0 -4
  121. package/dist/collections/config/defaults.d.ts.map +1 -1
  122. package/dist/collections/config/defaults.js +2 -17
  123. package/dist/collections/config/defaults.js.map +1 -1
  124. package/dist/collections/config/defaults.spec.js +47 -0
  125. package/dist/collections/config/defaults.spec.js.map +1 -0
  126. package/dist/collections/config/sanitize.d.ts.map +1 -1
  127. package/dist/collections/config/sanitize.js +1 -11
  128. package/dist/collections/config/sanitize.js.map +1 -1
  129. package/dist/collections/config/types.d.ts +11 -7
  130. package/dist/collections/config/types.d.ts.map +1 -1
  131. package/dist/collections/config/types.js.map +1 -1
  132. package/dist/collections/endpoints/create.d.ts.map +1 -1
  133. package/dist/collections/endpoints/create.js +0 -2
  134. package/dist/collections/endpoints/create.js.map +1 -1
  135. package/dist/collections/endpoints/updateByID.d.ts.map +1 -1
  136. package/dist/collections/endpoints/updateByID.js +1 -2
  137. package/dist/collections/endpoints/updateByID.js.map +1 -1
  138. package/dist/collections/operations/count.d.ts.map +1 -1
  139. package/dist/collections/operations/count.js +1 -0
  140. package/dist/collections/operations/count.js.map +1 -1
  141. package/dist/collections/operations/create.d.ts +0 -1
  142. package/dist/collections/operations/create.d.ts.map +1 -1
  143. package/dist/collections/operations/create.js +15 -6
  144. package/dist/collections/operations/create.js.map +1 -1
  145. package/dist/collections/operations/delete.d.ts.map +1 -1
  146. package/dist/collections/operations/delete.js +3 -0
  147. package/dist/collections/operations/delete.js.map +1 -1
  148. package/dist/collections/operations/findDistinct.d.ts.map +1 -1
  149. package/dist/collections/operations/findDistinct.js +1 -0
  150. package/dist/collections/operations/findDistinct.js.map +1 -1
  151. package/dist/collections/operations/local/count.d.ts +3 -3
  152. package/dist/collections/operations/local/count.d.ts.map +1 -1
  153. package/dist/collections/operations/local/count.js.map +1 -1
  154. package/dist/collections/operations/local/countVersions.d.ts +3 -3
  155. package/dist/collections/operations/local/countVersions.d.ts.map +1 -1
  156. package/dist/collections/operations/local/countVersions.js.map +1 -1
  157. package/dist/collections/operations/local/create.d.ts +3 -3
  158. package/dist/collections/operations/local/create.d.ts.map +1 -1
  159. package/dist/collections/operations/local/create.js.map +1 -1
  160. package/dist/collections/operations/local/delete.d.ts +3 -3
  161. package/dist/collections/operations/local/delete.d.ts.map +1 -1
  162. package/dist/collections/operations/local/delete.js.map +1 -1
  163. package/dist/collections/operations/local/duplicate.d.ts +3 -3
  164. package/dist/collections/operations/local/duplicate.d.ts.map +1 -1
  165. package/dist/collections/operations/local/duplicate.js.map +1 -1
  166. package/dist/collections/operations/local/find.d.ts +3 -3
  167. package/dist/collections/operations/local/find.d.ts.map +1 -1
  168. package/dist/collections/operations/local/find.js.map +1 -1
  169. package/dist/collections/operations/local/findByID.d.ts +3 -3
  170. package/dist/collections/operations/local/findByID.d.ts.map +1 -1
  171. package/dist/collections/operations/local/findByID.js.map +1 -1
  172. package/dist/collections/operations/local/findDistinct.d.ts +2 -2
  173. package/dist/collections/operations/local/findDistinct.d.ts.map +1 -1
  174. package/dist/collections/operations/local/findDistinct.js.map +1 -1
  175. package/dist/collections/operations/local/findVersionByID.d.ts +3 -3
  176. package/dist/collections/operations/local/findVersionByID.d.ts.map +1 -1
  177. package/dist/collections/operations/local/findVersionByID.js.map +1 -1
  178. package/dist/collections/operations/local/findVersions.d.ts +3 -3
  179. package/dist/collections/operations/local/findVersions.d.ts.map +1 -1
  180. package/dist/collections/operations/local/findVersions.js.map +1 -1
  181. package/dist/collections/operations/local/restoreVersion.d.ts +3 -3
  182. package/dist/collections/operations/local/restoreVersion.d.ts.map +1 -1
  183. package/dist/collections/operations/local/restoreVersion.js.map +1 -1
  184. package/dist/collections/operations/local/update.d.ts +7 -11
  185. package/dist/collections/operations/local/update.d.ts.map +1 -1
  186. package/dist/collections/operations/local/update.js +1 -2
  187. package/dist/collections/operations/local/update.js.map +1 -1
  188. package/dist/collections/operations/update.d.ts +0 -1
  189. package/dist/collections/operations/update.d.ts.map +1 -1
  190. package/dist/collections/operations/update.js +8 -4
  191. package/dist/collections/operations/update.js.map +1 -1
  192. package/dist/collections/operations/updateByID.d.ts +0 -1
  193. package/dist/collections/operations/updateByID.d.ts.map +1 -1
  194. package/dist/collections/operations/updateByID.js +1 -5
  195. package/dist/collections/operations/updateByID.js.map +1 -1
  196. package/dist/collections/operations/utilities/copyDataWithFreshRowIDs.d.ts +9 -0
  197. package/dist/collections/operations/utilities/copyDataWithFreshRowIDs.d.ts.map +1 -0
  198. package/dist/collections/operations/utilities/copyDataWithFreshRowIDs.js +170 -0
  199. package/dist/collections/operations/utilities/copyDataWithFreshRowIDs.js.map +1 -0
  200. package/dist/collections/operations/utilities/types.d.ts +0 -9
  201. package/dist/collections/operations/utilities/types.d.ts.map +1 -1
  202. package/dist/collections/operations/utilities/types.js.map +1 -1
  203. package/dist/collections/operations/utilities/update.d.ts +1 -2
  204. package/dist/collections/operations/utilities/update.d.ts.map +1 -1
  205. package/dist/collections/operations/utilities/update.js +64 -65
  206. package/dist/collections/operations/utilities/update.js.map +1 -1
  207. package/dist/config/client.d.ts +2 -2
  208. package/dist/config/client.d.ts.map +1 -1
  209. package/dist/config/client.js.map +1 -1
  210. package/dist/config/defaults.d.ts +0 -4
  211. package/dist/config/defaults.d.ts.map +1 -1
  212. package/dist/config/defaults.js +0 -78
  213. package/dist/config/defaults.js.map +1 -1
  214. package/dist/config/definePlugin.d.ts +10 -10
  215. package/dist/config/definePlugin.d.ts.map +1 -1
  216. package/dist/config/definePlugin.js +7 -11
  217. package/dist/config/definePlugin.js.map +1 -1
  218. package/dist/config/orderable/index.d.ts.map +1 -1
  219. package/dist/config/orderable/index.js +23 -0
  220. package/dist/config/orderable/index.js.map +1 -1
  221. package/dist/config/sanitize.d.ts.map +1 -1
  222. package/dist/config/sanitize.js +137 -13
  223. package/dist/config/sanitize.js.map +1 -1
  224. package/dist/config/types.d.ts +57 -19
  225. package/dist/config/types.d.ts.map +1 -1
  226. package/dist/config/types.js +2 -0
  227. package/dist/config/types.js.map +1 -1
  228. package/dist/database/getLocalizedPaths.d.ts.map +1 -1
  229. package/dist/database/getLocalizedPaths.js +1 -1
  230. package/dist/database/getLocalizedPaths.js.map +1 -1
  231. package/dist/database/migrations/migrationsCollection.d.ts.map +1 -1
  232. package/dist/database/migrations/migrationsCollection.js +2 -1
  233. package/dist/database/migrations/migrationsCollection.js.map +1 -1
  234. package/dist/errors/ValidationError.d.ts +1 -0
  235. package/dist/errors/ValidationError.d.ts.map +1 -1
  236. package/dist/errors/ValidationError.js.map +1 -1
  237. package/dist/exports/internal.d.ts +1 -0
  238. package/dist/exports/internal.d.ts.map +1 -1
  239. package/dist/exports/internal.js +1 -0
  240. package/dist/exports/internal.js.map +1 -1
  241. package/dist/exports/migrations.d.ts +5 -13
  242. package/dist/exports/migrations.d.ts.map +1 -1
  243. package/dist/exports/migrations.js +5 -13
  244. package/dist/exports/migrations.js.map +1 -1
  245. package/dist/exports/shared.d.ts +23 -2
  246. package/dist/exports/shared.d.ts.map +1 -1
  247. package/dist/exports/shared.js +22 -1
  248. package/dist/exports/shared.js.map +1 -1
  249. package/dist/fields/baseFields/slug/countVersions.d.ts.map +1 -1
  250. package/dist/fields/baseFields/slug/countVersions.js +6 -8
  251. package/dist/fields/baseFields/slug/countVersions.js.map +1 -1
  252. package/dist/fields/baseFields/slug/generateSlug.d.ts +14 -7
  253. package/dist/fields/baseFields/slug/generateSlug.d.ts.map +1 -1
  254. package/dist/fields/baseFields/slug/generateSlug.js +53 -73
  255. package/dist/fields/baseFields/slug/generateSlug.js.map +1 -1
  256. package/dist/fields/baseFields/slug/types.d.ts +14 -0
  257. package/dist/fields/baseFields/slug/types.d.ts.map +1 -0
  258. package/dist/fields/baseFields/slug/types.js +6 -0
  259. package/dist/fields/baseFields/slug/types.js.map +1 -0
  260. package/dist/fields/config/client.d.ts +3 -3
  261. package/dist/fields/config/client.d.ts.map +1 -1
  262. package/dist/fields/config/client.js +13 -13
  263. package/dist/fields/config/client.js.map +1 -1
  264. package/dist/fields/config/sanitize.d.ts.map +1 -1
  265. package/dist/fields/config/sanitize.js +40 -4
  266. package/dist/fields/config/sanitize.js.map +1 -1
  267. package/dist/fields/config/types.d.ts +49 -28
  268. package/dist/fields/config/types.d.ts.map +1 -1
  269. package/dist/fields/config/types.js.map +1 -1
  270. package/dist/fields/hooks/afterChange/promise.js +1 -1
  271. package/dist/fields/hooks/afterChange/promise.js.map +1 -1
  272. package/dist/fields/hooks/afterRead/promise.d.ts.map +1 -1
  273. package/dist/fields/hooks/afterRead/promise.js +13 -3
  274. package/dist/fields/hooks/afterRead/promise.js.map +1 -1
  275. package/dist/fields/hooks/beforeChange/promise.d.ts.map +1 -1
  276. package/dist/fields/hooks/beforeChange/promise.js +3 -3
  277. package/dist/fields/hooks/beforeChange/promise.js.map +1 -1
  278. package/dist/fields/hooks/beforeDuplicate/promise.js +2 -2
  279. package/dist/fields/hooks/beforeDuplicate/promise.js.map +1 -1
  280. package/dist/fields/hooks/beforeValidate/promise.d.ts.map +1 -1
  281. package/dist/fields/hooks/beforeValidate/promise.js +11 -2
  282. package/dist/fields/hooks/beforeValidate/promise.js.map +1 -1
  283. package/dist/fields/setDefaultBeforeDuplicate.js +1 -0
  284. package/dist/fields/setDefaultBeforeDuplicate.js.map +1 -1
  285. package/dist/fields/sortableFieldTypes.d.ts.map +1 -1
  286. package/dist/fields/sortableFieldTypes.js +1 -0
  287. package/dist/fields/sortableFieldTypes.js.map +1 -1
  288. package/dist/fields/validations.d.ts +4 -1
  289. package/dist/fields/validations.d.ts.map +1 -1
  290. package/dist/fields/validations.js +12 -4
  291. package/dist/fields/validations.js.map +1 -1
  292. package/dist/globals/config/sanitize.d.ts.map +1 -1
  293. package/dist/globals/config/sanitize.js +2 -6
  294. package/dist/globals/config/sanitize.js.map +1 -1
  295. package/dist/globals/config/sanitize.spec.js +43 -0
  296. package/dist/globals/config/sanitize.spec.js.map +1 -0
  297. package/dist/globals/endpoints/update.d.ts.map +1 -1
  298. package/dist/globals/endpoints/update.js +0 -2
  299. package/dist/globals/endpoints/update.js.map +1 -1
  300. package/dist/globals/operations/local/countVersions.d.ts +3 -3
  301. package/dist/globals/operations/local/countVersions.d.ts.map +1 -1
  302. package/dist/globals/operations/local/countVersions.js.map +1 -1
  303. package/dist/globals/operations/local/findOne.d.ts +3 -3
  304. package/dist/globals/operations/local/findOne.d.ts.map +1 -1
  305. package/dist/globals/operations/local/findOne.js.map +1 -1
  306. package/dist/globals/operations/local/findVersionByID.d.ts +3 -3
  307. package/dist/globals/operations/local/findVersionByID.d.ts.map +1 -1
  308. package/dist/globals/operations/local/findVersionByID.js.map +1 -1
  309. package/dist/globals/operations/local/findVersions.d.ts +3 -3
  310. package/dist/globals/operations/local/findVersions.d.ts.map +1 -1
  311. package/dist/globals/operations/local/findVersions.js.map +1 -1
  312. package/dist/globals/operations/local/restoreVersion.d.ts +3 -3
  313. package/dist/globals/operations/local/restoreVersion.d.ts.map +1 -1
  314. package/dist/globals/operations/local/restoreVersion.js.map +1 -1
  315. package/dist/globals/operations/local/update.d.ts +7 -9
  316. package/dist/globals/operations/local/update.d.ts.map +1 -1
  317. package/dist/globals/operations/local/update.js +1 -2
  318. package/dist/globals/operations/local/update.js.map +1 -1
  319. package/dist/globals/operations/update.d.ts +0 -1
  320. package/dist/globals/operations/update.d.ts.map +1 -1
  321. package/dist/globals/operations/update.js +52 -58
  322. package/dist/globals/operations/update.js.map +1 -1
  323. package/dist/index.bundled.d.ts +595 -368
  324. package/dist/index.d.ts +71 -26
  325. package/dist/index.d.ts.map +1 -1
  326. package/dist/index.js +54 -37
  327. package/dist/index.js.map +1 -1
  328. package/dist/kv/adapters/DatabaseKVAdapter.d.ts.map +1 -1
  329. package/dist/kv/adapters/DatabaseKVAdapter.js +1 -0
  330. package/dist/kv/adapters/DatabaseKVAdapter.js.map +1 -1
  331. package/dist/locked-documents/config.d.ts.map +1 -1
  332. package/dist/locked-documents/config.js +2 -1
  333. package/dist/locked-documents/config.js.map +1 -1
  334. package/dist/preferences/config.d.ts.map +1 -1
  335. package/dist/preferences/config.js +2 -1
  336. package/dist/preferences/config.js.map +1 -1
  337. package/dist/preferences/keys.d.ts +4 -0
  338. package/dist/preferences/keys.d.ts.map +1 -1
  339. package/dist/preferences/keys.js +4 -1
  340. package/dist/preferences/keys.js.map +1 -1
  341. package/dist/preferences/types.d.ts +15 -0
  342. package/dist/preferences/types.d.ts.map +1 -1
  343. package/dist/preferences/types.js +3 -1
  344. package/dist/preferences/types.js.map +1 -1
  345. package/dist/query-presets/config.d.ts.map +1 -1
  346. package/dist/query-presets/config.js +75 -35
  347. package/dist/query-presets/config.js.map +1 -1
  348. package/dist/query-presets/constraints.d.ts.map +1 -1
  349. package/dist/query-presets/constraints.js +2 -1
  350. package/dist/query-presets/constraints.js.map +1 -1
  351. package/dist/queues/config/collection.d.ts.map +1 -1
  352. package/dist/queues/config/collection.js +2 -1
  353. package/dist/queues/config/collection.js.map +1 -1
  354. package/dist/queues/config/generateJobsJSONSchemas.js +2 -2
  355. package/dist/queues/config/generateJobsJSONSchemas.js.map +1 -1
  356. package/dist/queues/config/global.d.ts.map +1 -1
  357. package/dist/queues/config/global.js +2 -1
  358. package/dist/queues/config/global.js.map +1 -1
  359. package/dist/types/index.d.ts +8 -3
  360. package/dist/types/index.d.ts.map +1 -1
  361. package/dist/types/index.js.map +1 -1
  362. package/dist/uploads/generateFileData.d.ts +2 -1
  363. package/dist/uploads/generateFileData.d.ts.map +1 -1
  364. package/dist/uploads/generateFileData.js +5 -2
  365. package/dist/uploads/generateFileData.js.map +1 -1
  366. package/dist/uploads/matchMimeType.d.ts +8 -0
  367. package/dist/uploads/matchMimeType.d.ts.map +1 -0
  368. package/dist/uploads/matchMimeType.js +19 -0
  369. package/dist/uploads/matchMimeType.js.map +1 -0
  370. package/dist/uploads/matchMimeType.spec.js +66 -0
  371. package/dist/uploads/matchMimeType.spec.js.map +1 -0
  372. package/dist/uploads/safeFetch.d.ts.map +1 -1
  373. package/dist/uploads/safeFetch.js +11 -5
  374. package/dist/uploads/safeFetch.js.map +1 -1
  375. package/dist/uploads/types.d.ts +21 -0
  376. package/dist/uploads/types.d.ts.map +1 -1
  377. package/dist/uploads/types.js.map +1 -1
  378. package/dist/utilities/addDataAndFileToRequest.d.ts.map +1 -1
  379. package/dist/utilities/addDataAndFileToRequest.js +6 -0
  380. package/dist/utilities/addDataAndFileToRequest.js.map +1 -1
  381. package/dist/utilities/appendDateTimezoneSelectFields.js +2 -2
  382. package/dist/utilities/appendDateTimezoneSelectFields.js.map +1 -1
  383. package/dist/utilities/configToJSONSchema.d.ts +36 -2
  384. package/dist/utilities/configToJSONSchema.d.ts.map +1 -1
  385. package/dist/utilities/configToJSONSchema.js +204 -84
  386. package/dist/utilities/configToJSONSchema.js.map +1 -1
  387. package/dist/utilities/configToJSONSchema.spec.js +534 -29
  388. package/dist/utilities/configToJSONSchema.spec.js.map +1 -1
  389. package/dist/utilities/createLocalReq.d.ts +2 -2
  390. package/dist/utilities/createLocalReq.d.ts.map +1 -1
  391. package/dist/utilities/createLocalReq.js.map +1 -1
  392. package/dist/utilities/createPayloadRequest.d.ts.map +1 -1
  393. package/dist/utilities/createPayloadRequest.js +1 -0
  394. package/dist/utilities/createPayloadRequest.js.map +1 -1
  395. package/dist/utilities/deepCopyObject.d.ts.map +1 -1
  396. package/dist/utilities/deepCopyObject.js +8 -0
  397. package/dist/utilities/deepCopyObject.js.map +1 -1
  398. package/dist/utilities/dependencies/dependencyChecker.js +1 -1
  399. package/dist/utilities/dependencies/dependencyChecker.js.map +1 -1
  400. package/dist/utilities/dependencies/getDependencies.d.ts.map +1 -1
  401. package/dist/utilities/dependencies/getDependencies.js +5 -5
  402. package/dist/utilities/dependencies/getDependencies.js.map +1 -1
  403. package/dist/utilities/dynamicImport.js +1 -1
  404. package/dist/utilities/dynamicImport.js.map +1 -1
  405. package/dist/utilities/filterDataToSelectedLocales.d.ts.map +1 -1
  406. package/dist/utilities/filterDataToSelectedLocales.js +5 -12
  407. package/dist/utilities/filterDataToSelectedLocales.js.map +1 -1
  408. package/dist/utilities/filterDataToSelectedLocales.spec.js +1 -2
  409. package/dist/utilities/filterDataToSelectedLocales.spec.js.map +1 -1
  410. package/dist/utilities/flattenAllFields.d.ts.map +1 -1
  411. package/dist/utilities/flattenAllFields.js +7 -22
  412. package/dist/utilities/flattenAllFields.js.map +1 -1
  413. package/dist/utilities/formatErrors.d.ts.map +1 -1
  414. package/dist/utilities/formatErrors.js +3 -1
  415. package/dist/utilities/formatErrors.js.map +1 -1
  416. package/dist/utilities/getEntityPermissions/getEntityPermissions.d.ts.map +1 -1
  417. package/dist/utilities/getEntityPermissions/getEntityPermissions.js +2 -0
  418. package/dist/utilities/getEntityPermissions/getEntityPermissions.js.map +1 -1
  419. package/dist/utilities/getEntityPermissions/populateFieldPermissions.d.ts +7 -1
  420. package/dist/utilities/getEntityPermissions/populateFieldPermissions.d.ts.map +1 -1
  421. package/dist/utilities/getEntityPermissions/populateFieldPermissions.js +24 -7
  422. package/dist/utilities/getEntityPermissions/populateFieldPermissions.js.map +1 -1
  423. package/dist/utilities/getFieldByPath.d.ts.map +1 -1
  424. package/dist/utilities/getFieldByPath.js +1 -1
  425. package/dist/utilities/getFieldByPath.js.map +1 -1
  426. package/dist/utilities/getRequestLanguage.d.ts +2 -2
  427. package/dist/utilities/getRequestLanguage.d.ts.map +1 -1
  428. package/dist/utilities/getRequestLanguage.js.map +1 -1
  429. package/dist/utilities/getVersionsConfig.js.map +1 -1
  430. package/dist/utilities/handleEndpoints.d.ts.map +1 -1
  431. package/dist/utilities/handleEndpoints.js +7 -3
  432. package/dist/utilities/handleEndpoints.js.map +1 -1
  433. package/dist/utilities/isURLAllowed.d.ts.map +1 -1
  434. package/dist/utilities/isURLAllowed.js +9 -3
  435. package/dist/utilities/isURLAllowed.js.map +1 -1
  436. package/dist/utilities/isURLAllowed.spec.js +78 -0
  437. package/dist/utilities/isURLAllowed.spec.js.map +1 -0
  438. package/dist/utilities/mergeLocalizedData.d.ts +14 -4
  439. package/dist/utilities/mergeLocalizedData.d.ts.map +1 -1
  440. package/dist/utilities/mergeLocalizedData.js +54 -46
  441. package/dist/utilities/mergeLocalizedData.js.map +1 -1
  442. package/dist/utilities/mergeLocalizedData.spec.js +23 -23
  443. package/dist/utilities/mergeLocalizedData.spec.js.map +1 -1
  444. package/dist/utilities/parseParams/index.d.ts +2 -5
  445. package/dist/utilities/parseParams/index.d.ts.map +1 -1
  446. package/dist/utilities/parseParams/index.js.map +1 -1
  447. package/dist/utilities/parseParams/index.spec.js +0 -9
  448. package/dist/utilities/parseParams/index.spec.js.map +1 -1
  449. package/dist/utilities/telemetry/events/adminInit.d.ts.map +1 -1
  450. package/dist/utilities/telemetry/events/adminInit.js +2 -3
  451. package/dist/utilities/telemetry/events/adminInit.js.map +1 -1
  452. package/dist/utilities/telemetry/events/serverInit.d.ts.map +1 -1
  453. package/dist/utilities/telemetry/events/serverInit.js +2 -3
  454. package/dist/utilities/telemetry/events/serverInit.js.map +1 -1
  455. package/dist/utilities/telemetry/index.d.ts +14 -3
  456. package/dist/utilities/telemetry/index.d.ts.map +1 -1
  457. package/dist/utilities/telemetry/index.js +6 -1
  458. package/dist/utilities/telemetry/index.js.map +1 -1
  459. package/dist/utilities/telemetry/index.spec.js +43 -0
  460. package/dist/utilities/telemetry/index.spec.js.map +1 -0
  461. package/dist/utilities/transformColumnPreferences.js +4 -2
  462. package/dist/utilities/transformColumnPreferences.js.map +1 -1
  463. package/dist/utilities/traverseFields.d.ts.map +1 -1
  464. package/dist/utilities/traverseFields.js +2 -4
  465. package/dist/utilities/traverseFields.js.map +1 -1
  466. package/dist/utilities/traverseForLocalizedFields.d.ts.map +1 -1
  467. package/dist/utilities/traverseForLocalizedFields.js +3 -0
  468. package/dist/utilities/traverseForLocalizedFields.js.map +1 -1
  469. package/dist/versions/baseFields.d.ts +1 -2
  470. package/dist/versions/baseFields.d.ts.map +1 -1
  471. package/dist/versions/baseFields.js +0 -13
  472. package/dist/versions/baseFields.js.map +1 -1
  473. package/dist/versions/buildCollectionFields.d.ts.map +1 -1
  474. package/dist/versions/buildCollectionFields.js +0 -2
  475. package/dist/versions/buildCollectionFields.js.map +1 -1
  476. package/dist/versions/buildGlobalFields.d.ts.map +1 -1
  477. package/dist/versions/buildGlobalFields.js +0 -2
  478. package/dist/versions/buildGlobalFields.js.map +1 -1
  479. package/dist/versions/buildSingleLocalePublishData.d.ts +32 -0
  480. package/dist/versions/buildSingleLocalePublishData.d.ts.map +1 -0
  481. package/dist/versions/buildSingleLocalePublishData.js +37 -0
  482. package/dist/versions/buildSingleLocalePublishData.js.map +1 -0
  483. package/dist/versions/saveVersion.d.ts +0 -2
  484. package/dist/versions/saveVersion.d.ts.map +1 -1
  485. package/dist/versions/saveVersion.js +12 -17
  486. package/dist/versions/saveVersion.js.map +1 -1
  487. package/dist/versions/schedule/job.d.ts.map +1 -1
  488. package/dist/versions/schedule/job.js +6 -10
  489. package/dist/versions/schedule/job.js.map +1 -1
  490. package/dist/versions/types.d.ts +2 -15
  491. package/dist/versions/types.d.ts.map +1 -1
  492. package/dist/versions/types.js.map +1 -1
  493. package/package.json +9 -6
  494. package/dist/database/migrations/templates/localizeStatus.d.ts +0 -10
  495. package/dist/database/migrations/templates/localizeStatus.d.ts.map +0 -1
  496. package/dist/database/migrations/templates/localizeStatus.js +0 -54
  497. package/dist/database/migrations/templates/localizeStatus.js.map +0 -1
  498. package/dist/fields/baseFields/slug/index.d.ts +0 -89
  499. package/dist/fields/baseFields/slug/index.d.ts.map +0 -1
  500. package/dist/fields/baseFields/slug/index.js +0 -81
  501. package/dist/fields/baseFields/slug/index.js.map +0 -1
  502. package/dist/versions/migrations/localizeStatus/index.d.ts +0 -12
  503. package/dist/versions/migrations/localizeStatus/index.d.ts.map +0 -1
  504. package/dist/versions/migrations/localizeStatus/index.js +0 -33
  505. package/dist/versions/migrations/localizeStatus/index.js.map +0 -1
  506. package/dist/versions/migrations/localizeStatus/mongo/down.d.ts +0 -9
  507. package/dist/versions/migrations/localizeStatus/mongo/down.d.ts.map +0 -1
  508. package/dist/versions/migrations/localizeStatus/mongo/down.js +0 -112
  509. package/dist/versions/migrations/localizeStatus/mongo/down.js.map +0 -1
  510. package/dist/versions/migrations/localizeStatus/mongo/index.d.ts +0 -8
  511. package/dist/versions/migrations/localizeStatus/mongo/index.d.ts.map +0 -1
  512. package/dist/versions/migrations/localizeStatus/mongo/index.js +0 -8
  513. package/dist/versions/migrations/localizeStatus/mongo/index.js.map +0 -1
  514. package/dist/versions/migrations/localizeStatus/mongo/up.d.ts +0 -9
  515. package/dist/versions/migrations/localizeStatus/mongo/up.d.ts.map +0 -1
  516. package/dist/versions/migrations/localizeStatus/mongo/up.js +0 -220
  517. package/dist/versions/migrations/localizeStatus/mongo/up.js.map +0 -1
  518. package/dist/versions/migrations/localizeStatus/sql/down.d.ts +0 -11
  519. package/dist/versions/migrations/localizeStatus/sql/down.d.ts.map +0 -1
  520. package/dist/versions/migrations/localizeStatus/sql/down.js +0 -213
  521. package/dist/versions/migrations/localizeStatus/sql/down.js.map +0 -1
  522. package/dist/versions/migrations/localizeStatus/sql/index.d.ts +0 -8
  523. package/dist/versions/migrations/localizeStatus/sql/index.d.ts.map +0 -1
  524. package/dist/versions/migrations/localizeStatus/sql/index.js +0 -8
  525. package/dist/versions/migrations/localizeStatus/sql/index.js.map +0 -1
  526. package/dist/versions/migrations/localizeStatus/sql/migrateMainCollection.d.ts +0 -13
  527. package/dist/versions/migrations/localizeStatus/sql/migrateMainCollection.d.ts.map +0 -1
  528. package/dist/versions/migrations/localizeStatus/sql/migrateMainCollection.js +0 -51
  529. package/dist/versions/migrations/localizeStatus/sql/migrateMainCollection.js.map +0 -1
  530. package/dist/versions/migrations/localizeStatus/sql/migrateMainGlobal.d.ts +0 -13
  531. package/dist/versions/migrations/localizeStatus/sql/migrateMainGlobal.d.ts.map +0 -1
  532. package/dist/versions/migrations/localizeStatus/sql/migrateMainGlobal.js +0 -54
  533. package/dist/versions/migrations/localizeStatus/sql/migrateMainGlobal.js.map +0 -1
  534. package/dist/versions/migrations/localizeStatus/sql/up.d.ts +0 -11
  535. package/dist/versions/migrations/localizeStatus/sql/up.d.ts.map +0 -1
  536. package/dist/versions/migrations/localizeStatus/sql/up.js +0 -277
  537. package/dist/versions/migrations/localizeStatus/sql/up.js.map +0 -1
  538. package/dist/versions/saveSnapshot.d.ts +0 -18
  539. package/dist/versions/saveSnapshot.d.ts.map +0 -1
  540. package/dist/versions/saveSnapshot.js +0 -38
  541. package/dist/versions/saveSnapshot.js.map +0 -1
@@ -0,0 +1,43 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { definePlugin } from '../../config/definePlugin.js';
3
+ import { getInstalledPluginSlugs } from './index.js';
4
+ // `getInstalledPluginSlugs` is what populates `baseEvent.plugins` - the list of
5
+ // installed plugin slugs sent with every telemetry event.
6
+ const payloadWithPlugins = (plugins)=>({
7
+ config: {
8
+ plugins
9
+ }
10
+ });
11
+ describe('telemetry installed plugins', ()=>{
12
+ it('should send only first-party slugs, ignoring custom and slug-less plugins', ()=>{
13
+ const seoPlugin = definePlugin({
14
+ slug: '@payloadcms/plugin-seo',
15
+ plugin: ({ config })=>config
16
+ })();
17
+ const stripePlugin = definePlugin({
18
+ slug: '@payloadcms/plugin-stripe',
19
+ plugin: ({ config })=>config
20
+ })();
21
+ // A user's own plugin — its slug is author-defined and must not be sent.
22
+ const customPlugin = definePlugin({
23
+ slug: 'acme-internal-billing',
24
+ plugin: ({ config })=>config
25
+ })();
26
+ const legacyPlugin = (config)=>config;
27
+ const slugs = getInstalledPluginSlugs(payloadWithPlugins([
28
+ seoPlugin,
29
+ stripePlugin,
30
+ customPlugin,
31
+ legacyPlugin
32
+ ]));
33
+ expect(slugs).toEqual([
34
+ '@payloadcms/plugin-seo',
35
+ '@payloadcms/plugin-stripe'
36
+ ]);
37
+ });
38
+ it('should send an empty array when no first-party plugins are installed', ()=>{
39
+ expect(getInstalledPluginSlugs(payloadWithPlugins([]))).toEqual([]);
40
+ });
41
+ });
42
+
43
+ //# sourceMappingURL=index.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/utilities/telemetry/index.spec.ts"],"sourcesContent":["import { describe, expect, it } from 'vitest'\n\nimport type { Plugin } from '../../config/types.js'\nimport type { Payload } from '../../types/index.js'\n\nimport { definePlugin } from '../../config/definePlugin.js'\nimport { getInstalledPluginSlugs } from './index.js'\n\n// `getInstalledPluginSlugs` is what populates `baseEvent.plugins` - the list of\n// installed plugin slugs sent with every telemetry event.\nconst payloadWithPlugins = (plugins: Plugin[]): Payload =>\n ({ config: { plugins } }) as unknown as Payload\n\ndescribe('telemetry installed plugins', () => {\n it('should send only first-party slugs, ignoring custom and slug-less plugins', () => {\n const seoPlugin = definePlugin({\n slug: '@payloadcms/plugin-seo',\n plugin: ({ config }) => config,\n })()\n const stripePlugin = definePlugin({\n slug: '@payloadcms/plugin-stripe',\n plugin: ({ config }) => config,\n })()\n // A user's own plugin — its slug is author-defined and must not be sent.\n const customPlugin = definePlugin({\n slug: 'acme-internal-billing',\n plugin: ({ config }) => config,\n })()\n const legacyPlugin: Plugin = (config) => config\n\n const slugs = getInstalledPluginSlugs(\n payloadWithPlugins([seoPlugin, stripePlugin, customPlugin, legacyPlugin]),\n )\n\n expect(slugs).toEqual(['@payloadcms/plugin-seo', '@payloadcms/plugin-stripe'])\n })\n\n it('should send an empty array when no first-party plugins are installed', () => {\n expect(getInstalledPluginSlugs(payloadWithPlugins([]))).toEqual([])\n })\n})\n"],"names":["describe","expect","it","definePlugin","getInstalledPluginSlugs","payloadWithPlugins","plugins","config","seoPlugin","slug","plugin","stripePlugin","customPlugin","legacyPlugin","slugs","toEqual"],"mappings":"AAAA,SAASA,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ,SAAQ;AAK7C,SAASC,YAAY,QAAQ,+BAA8B;AAC3D,SAASC,uBAAuB,QAAQ,aAAY;AAEpD,gFAAgF;AAChF,0DAA0D;AAC1D,MAAMC,qBAAqB,CAACC,UACzB,CAAA;QAAEC,QAAQ;YAAED;QAAQ;IAAE,CAAA;AAEzBN,SAAS,+BAA+B;IACtCE,GAAG,6EAA6E;QAC9E,MAAMM,YAAYL,aAAa;YAC7BM,MAAM;YACNC,QAAQ,CAAC,EAAEH,MAAM,EAAE,GAAKA;QAC1B;QACA,MAAMI,eAAeR,aAAa;YAChCM,MAAM;YACNC,QAAQ,CAAC,EAAEH,MAAM,EAAE,GAAKA;QAC1B;QACA,yEAAyE;QACzE,MAAMK,eAAeT,aAAa;YAChCM,MAAM;YACNC,QAAQ,CAAC,EAAEH,MAAM,EAAE,GAAKA;QAC1B;QACA,MAAMM,eAAuB,CAACN,SAAWA;QAEzC,MAAMO,QAAQV,wBACZC,mBAAmB;YAACG;YAAWG;YAAcC;YAAcC;SAAa;QAG1EZ,OAAOa,OAAOC,OAAO,CAAC;YAAC;YAA0B;SAA4B;IAC/E;IAEAb,GAAG,wEAAwE;QACzED,OAAOG,wBAAwBC,mBAAmB,EAAE,IAAIU,OAAO,CAAC,EAAE;IACpE;AACF"}
@@ -13,8 +13,10 @@
13
13
  if (typeof columns === 'string') {
14
14
  try {
15
15
  columnsToTransform = JSON.parse(columns);
16
- } catch (e) {
17
- console.error('Error parsing columns', columns, e); // eslint-disable-line no-console
16
+ } catch {
17
+ columnsToTransform = columns.includes(',') ? columns.split(',') : [
18
+ columns
19
+ ];
18
20
  }
19
21
  }
20
22
  if (columnsToTransform && Array.isArray(columnsToTransform)) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utilities/transformColumnPreferences.ts"],"sourcesContent":["import type { Column } from '../admin/types.js'\nimport type { ColumnPreference } from '../preferences/types.js'\n\nexport type ColumnsFromURL = string[]\n\n/**\n * Transforms various forms of columns into `ColumnPreference[]` which is what is stored in the user's preferences table\n * In React state, for example, columns are stored in in their entirety, including React components: `[{ accessor: 'title', active: true, Label: React.ReactNode, ... }]`\n * In the URL, they are stored as an array of strings: `['title', '-slug']`, where the `-` prefix is used to indicate that the column is inactive\n * However in the database, columns must be in this exact shape: `[{ accessor: 'title', active: true }, { accessor: 'slug', active: false }]`\n * This means that when handling columns, they need to be consistently transformed back and forth\n */\nexport const transformColumnsToPreferences = (\n columns: Column[] | ColumnPreference[] | ColumnsFromURL | string | undefined,\n): ColumnPreference[] | undefined => {\n if (!columns) {\n return undefined\n }\n\n let columnsToTransform = columns\n\n // Columns that originate from the URL are a stringified JSON array and need to be parsed first\n if (typeof columns === 'string') {\n try {\n columnsToTransform = JSON.parse(columns)\n } catch (e) {\n console.error('Error parsing columns', columns, e) // eslint-disable-line no-console\n }\n }\n\n if (columnsToTransform && Array.isArray(columnsToTransform)) {\n return columnsToTransform.map((col) => {\n if (typeof col === 'string') {\n const active = col[0] !== '-'\n return { accessor: active ? col : col.slice(1), active }\n }\n\n return { accessor: col.accessor, active: col.active }\n })\n }\n}\n\n/**\n * Does the opposite of `transformColumnsToPreferences`, where `ColumnPreference[]` and `Column[]` are transformed into `ColumnsFromURL`\n * This is useful for storing the columns in the URL, where it appears as a simple comma delimited array of strings\n * The `-` prefix is used to indicate that the column is inactive\n */\nexport const transformColumnsToSearchParams = (\n columns: Column[] | ColumnPreference[],\n): ColumnsFromURL => {\n return columns?.map((col) => (col.active ? col.accessor : `-${col.accessor}`))\n}\n"],"names":["transformColumnsToPreferences","columns","undefined","columnsToTransform","JSON","parse","e","console","error","Array","isArray","map","col","active","accessor","slice","transformColumnsToSearchParams"],"mappings":"AAKA;;;;;;CAMC,GACD,OAAO,MAAMA,gCAAgC,CAC3CC;IAEA,IAAI,CAACA,SAAS;QACZ,OAAOC;IACT;IAEA,IAAIC,qBAAqBF;IAEzB,+FAA+F;IAC/F,IAAI,OAAOA,YAAY,UAAU;QAC/B,IAAI;YACFE,qBAAqBC,KAAKC,KAAK,CAACJ;QAClC,EAAE,OAAOK,GAAG;YACVC,QAAQC,KAAK,CAAC,yBAAyBP,SAASK,IAAG,iCAAiC;QACtF;IACF;IAEA,IAAIH,sBAAsBM,MAAMC,OAAO,CAACP,qBAAqB;QAC3D,OAAOA,mBAAmBQ,GAAG,CAAC,CAACC;YAC7B,IAAI,OAAOA,QAAQ,UAAU;gBAC3B,MAAMC,SAASD,GAAG,CAAC,EAAE,KAAK;gBAC1B,OAAO;oBAAEE,UAAUD,SAASD,MAAMA,IAAIG,KAAK,CAAC;oBAAIF;gBAAO;YACzD;YAEA,OAAO;gBAAEC,UAAUF,IAAIE,QAAQ;gBAAED,QAAQD,IAAIC,MAAM;YAAC;QACtD;IACF;AACF,EAAC;AAED;;;;CAIC,GACD,OAAO,MAAMG,iCAAiC,CAC5Cf;IAEA,OAAOA,SAASU,IAAI,CAACC,MAASA,IAAIC,MAAM,GAAGD,IAAIE,QAAQ,GAAG,CAAC,CAAC,EAAEF,IAAIE,QAAQ,EAAE;AAC9E,EAAC"}
1
+ {"version":3,"sources":["../../src/utilities/transformColumnPreferences.ts"],"sourcesContent":["import type { Column } from '../admin/types.js'\nimport type { ColumnPreference } from '../preferences/types.js'\n\nexport type ColumnsFromURL = string[]\n\n/**\n * Transforms various forms of columns into `ColumnPreference[]` which is what is stored in the user's preferences table\n * In React state, for example, columns are stored in in their entirety, including React components: `[{ accessor: 'title', active: true, Label: React.ReactNode, ... }]`\n * In the URL, they are stored as an array of strings: `['title', '-slug']`, where the `-` prefix is used to indicate that the column is inactive\n * However in the database, columns must be in this exact shape: `[{ accessor: 'title', active: true }, { accessor: 'slug', active: false }]`\n * This means that when handling columns, they need to be consistently transformed back and forth\n */\nexport const transformColumnsToPreferences = (\n columns: Column[] | ColumnPreference[] | ColumnsFromURL | string | undefined,\n): ColumnPreference[] | undefined => {\n if (!columns) {\n return undefined\n }\n\n let columnsToTransform = columns\n\n // Columns that originate from the URL are a stringified JSON array and need to be parsed first\n if (typeof columns === 'string') {\n try {\n columnsToTransform = JSON.parse(columns)\n } catch {\n columnsToTransform = columns.includes(',') ? columns.split(',') : [columns]\n }\n }\n\n if (columnsToTransform && Array.isArray(columnsToTransform)) {\n return columnsToTransform.map((col) => {\n if (typeof col === 'string') {\n const active = col[0] !== '-'\n return { accessor: active ? col : col.slice(1), active }\n }\n\n return { accessor: col.accessor, active: col.active }\n })\n }\n}\n\n/**\n * Does the opposite of `transformColumnsToPreferences`, where `ColumnPreference[]` and `Column[]` are transformed into `ColumnsFromURL`\n * This is useful for storing the columns in the URL, where it appears as a simple comma delimited array of strings\n * The `-` prefix is used to indicate that the column is inactive\n */\nexport const transformColumnsToSearchParams = (\n columns: Column[] | ColumnPreference[],\n): ColumnsFromURL => {\n return columns?.map((col) => (col.active ? col.accessor : `-${col.accessor}`))\n}\n"],"names":["transformColumnsToPreferences","columns","undefined","columnsToTransform","JSON","parse","includes","split","Array","isArray","map","col","active","accessor","slice","transformColumnsToSearchParams"],"mappings":"AAKA;;;;;;CAMC,GACD,OAAO,MAAMA,gCAAgC,CAC3CC;IAEA,IAAI,CAACA,SAAS;QACZ,OAAOC;IACT;IAEA,IAAIC,qBAAqBF;IAEzB,+FAA+F;IAC/F,IAAI,OAAOA,YAAY,UAAU;QAC/B,IAAI;YACFE,qBAAqBC,KAAKC,KAAK,CAACJ;QAClC,EAAE,OAAM;YACNE,qBAAqBF,QAAQK,QAAQ,CAAC,OAAOL,QAAQM,KAAK,CAAC,OAAO;gBAACN;aAAQ;QAC7E;IACF;IAEA,IAAIE,sBAAsBK,MAAMC,OAAO,CAACN,qBAAqB;QAC3D,OAAOA,mBAAmBO,GAAG,CAAC,CAACC;YAC7B,IAAI,OAAOA,QAAQ,UAAU;gBAC3B,MAAMC,SAASD,GAAG,CAAC,EAAE,KAAK;gBAC1B,OAAO;oBAAEE,UAAUD,SAASD,MAAMA,IAAIG,KAAK,CAAC;oBAAIF;gBAAO;YACzD;YAEA,OAAO;gBAAEC,UAAUF,IAAIE,QAAQ;gBAAED,QAAQD,IAAIC,MAAM;YAAC;QACtD;IACF;AACF,EAAC;AAED;;;;CAIC,GACD,OAAO,MAAMG,iCAAiC,CAC5Cd;IAEA,OAAOA,SAASS,IAAI,CAACC,MAASA,IAAIC,MAAM,GAAGD,IAAIE,QAAQ,GAAG,CAAC,CAAC,EAAEF,IAAIE,QAAQ,EAAE;AAC9E,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../src/utilities/traverseFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACjE,OAAO,KAAK,EAAkC,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAsGlG,MAAM,MAAM,sBAAsB,GAAG,CAAC,IAAI,EAAE;IAC1C;;OAEG;IACH,KAAK,EAAE,KAAK,GAAG,UAAU,CAAA;IACzB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,IAAI,CAAA;IACjB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,UAAU,EAAE,MAAM,CAAA;IAClB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAA;IAC7C;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAA;CACxC,KAAK,OAAO,GAAG,IAAI,CAAA;AAEpB,KAAK,kBAAkB,GAAG;IACxB,QAAQ,EAAE,sBAAsB,CAAA;IAChC,aAAa,CAAC,EAAE,CAAC,MAAM,UAAU,CAAC,sBAAsB,CAAC,CAAC,EAAE,CAAA;IAC5D,MAAM,CAAC,EAAE,MAAM,GAAG,eAAe,CAAA;IACjC,MAAM,EAAE,CAAC,KAAK,GAAG,UAAU,CAAC,EAAE,CAAA;IAC9B,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAA;IAC7C,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAA;CACxC,CAAA;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,GAAI,iJAY5B,kBAAkB,KAAG,IA0WvB,CAAA"}
1
+ {"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../src/utilities/traverseFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACjE,OAAO,KAAK,EAAkC,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAiGlG,MAAM,MAAM,sBAAsB,GAAG,CAAC,IAAI,EAAE;IAC1C;;OAEG;IACH,KAAK,EAAE,KAAK,GAAG,UAAU,CAAA;IACzB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,IAAI,CAAA;IACjB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,UAAU,EAAE,MAAM,CAAA;IAClB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAA;IAC7C;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAA;CACxC,KAAK,OAAO,GAAG,IAAI,CAAA;AAEpB,KAAK,kBAAkB,GAAG;IACxB,QAAQ,EAAE,sBAAsB,CAAA;IAChC,aAAa,CAAC,EAAE,CAAC,MAAM,UAAU,CAAC,sBAAsB,CAAC,CAAC,EAAE,CAAA;IAC5D,MAAM,CAAC,EAAE,MAAM,GAAG,eAAe,CAAA;IACjC,MAAM,EAAE,CAAC,KAAK,GAAG,UAAU,CAAC,EAAE,CAAA;IAC9B,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAA;IAC7C,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAA;CACxC,CAAA;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,GAAI,iJAY5B,kBAAkB,KAAG,IA0WvB,CAAA"}
@@ -15,8 +15,7 @@ const traverseArrayOrBlocksField = ({ callback, callbackStack, config, data, fie
15
15
  });
16
16
  }
17
17
  if (field.type === 'blocks') {
18
- for (const _block of field.blockReferences ?? field.blocks){
19
- // TODO: iterate over blocks mapped to block slug in v4, or pass through payload.blocks
18
+ for (const _block of field.blocks){
20
19
  const block = typeof _block === 'string' ? config?.blocks?.find((b)=>b.slug === _block) : _block;
21
20
  if (block) {
22
21
  traverseFields({
@@ -38,8 +37,7 @@ const traverseArrayOrBlocksField = ({ callback, callbackStack, config, data, fie
38
37
  for (const ref of data){
39
38
  let fields;
40
39
  if (field.type === 'blocks' && typeof ref?.blockType === 'string') {
41
- // TODO: iterate over blocks mapped to block slug in v4, or pass through payload.blocks
42
- const block = field.blockReferences ? config?.blocks?.find((b)=>b.slug === ref.blockType) ?? field.blockReferences.find((b)=>typeof b !== 'string' && b.slug === ref.blockType) : field.blocks.find((b)=>b.slug === ref.blockType);
40
+ const block = config?.blocks?.find((b)=>b.slug === ref.blockType) ?? field.blocks.find((b)=>typeof b !== 'string' && b.slug === ref.blockType);
43
41
  fields = block?.fields;
44
42
  } else if (field.type === 'array') {
45
43
  fields = field.fields;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utilities/traverseFields.ts"],"sourcesContent":["import type { Config, SanitizedConfig } from '../config/types.js'\nimport type { ArrayField, Block, BlocksField, Field, TabAsField } from '../fields/config/types.js'\n\nimport {\n fieldAffectsData,\n fieldHasSubFields,\n fieldShouldBeLocalized,\n tabHasName,\n} from '../fields/config/types.js'\n\nconst traverseArrayOrBlocksField = ({\n callback,\n callbackStack,\n config,\n data,\n field,\n fillEmpty,\n leavesFirst,\n parentIsLocalized,\n parentPath,\n parentRef,\n}: {\n callback: TraverseFieldsCallback\n callbackStack: (() => ReturnType<TraverseFieldsCallback>)[]\n config?: Config | SanitizedConfig\n data: Record<string, unknown>[]\n field: ArrayField | BlocksField\n fillEmpty: boolean\n leavesFirst: boolean\n parentIsLocalized: boolean\n parentPath: string\n parentRef?: unknown\n}) => {\n if (fillEmpty) {\n if (field.type === 'array') {\n traverseFields({\n callback,\n callbackStack,\n config,\n fields: field.fields,\n isTopLevel: false,\n leavesFirst,\n parentIsLocalized: parentIsLocalized || field.localized,\n parentPath: `${parentPath}${field.name}.`,\n parentRef,\n })\n }\n if (field.type === 'blocks') {\n for (const _block of field.blockReferences ?? field.blocks) {\n // TODO: iterate over blocks mapped to block slug in v4, or pass through payload.blocks\n const block =\n typeof _block === 'string' ? config?.blocks?.find((b) => b.slug === _block) : _block\n if (block) {\n traverseFields({\n callback,\n callbackStack,\n config,\n fields: block.fields,\n isTopLevel: false,\n leavesFirst,\n parentIsLocalized: parentIsLocalized || field.localized,\n parentPath: `${parentPath}${field.name}.`,\n parentRef,\n })\n }\n }\n }\n return\n }\n for (const ref of data) {\n let fields!: Field[]\n if (field.type === 'blocks' && typeof ref?.blockType === 'string') {\n // TODO: iterate over blocks mapped to block slug in v4, or pass through payload.blocks\n const block = field.blockReferences\n ? ((config?.blocks?.find((b) => b.slug === ref.blockType) ??\n field.blockReferences.find(\n (b) => typeof b !== 'string' && b.slug === ref.blockType,\n )) as Block)\n : field.blocks.find((b) => b.slug === ref.blockType)\n\n fields = block?.fields as Field[]\n } else if (field.type === 'array') {\n fields = field.fields\n }\n\n if (fields) {\n traverseFields({\n callback,\n callbackStack,\n config,\n fields,\n fillEmpty,\n isTopLevel: false,\n leavesFirst,\n parentIsLocalized: parentIsLocalized || field.localized,\n parentPath: `${parentPath}${field.name}.`,\n parentRef,\n ref,\n })\n }\n }\n}\n\nexport type TraverseFieldsCallback = (args: {\n /**\n * The current field\n */\n field: Field | TabAsField\n /**\n * Function that when called will skip the current field and continue to the next\n */\n next?: () => void\n parentIsLocalized: boolean\n parentPath: string\n /**\n * The parent reference object\n */\n parentRef?: Record<string, unknown> | unknown\n /**\n * The current reference object\n */\n ref?: Record<string, unknown> | unknown\n}) => boolean | void\n\ntype TraverseFieldsArgs = {\n callback: TraverseFieldsCallback\n callbackStack?: (() => ReturnType<TraverseFieldsCallback>)[]\n config?: Config | SanitizedConfig\n fields: (Field | TabAsField)[]\n fillEmpty?: boolean\n isTopLevel?: boolean\n /**\n * @default false\n *\n * if this is `true`, the callback functions of the leaf fields will be called before the parent fields.\n * The return value of the callback function will be ignored.\n */\n leavesFirst?: boolean\n parentIsLocalized?: boolean\n parentPath?: string\n parentRef?: Record<string, unknown> | unknown\n ref?: Record<string, unknown> | unknown\n}\n\n/**\n * Iterate a recurse an array of fields, calling a callback for each field\n *\n * @param fields\n * @param callback callback called for each field, discontinue looping if callback returns truthy\n * @param fillEmpty fill empty properties to use this without data\n * @param ref the data or any artifacts assigned in the callback during field recursion\n * @param parentRef the data or any artifacts assigned in the callback during field recursion one level up\n */\nexport const traverseFields = ({\n callback,\n callbackStack: _callbackStack = [],\n config,\n fields,\n fillEmpty = true,\n isTopLevel = true,\n leavesFirst = false,\n parentIsLocalized,\n parentPath = '',\n parentRef = {},\n ref = {},\n}: TraverseFieldsArgs): void => {\n const fieldsMatched = fields.some((field) => {\n let callbackStack: (() => ReturnType<TraverseFieldsCallback>)[] = []\n if (!isTopLevel) {\n callbackStack = _callbackStack\n }\n let skip = false\n const next = () => {\n skip = true\n }\n\n if (!ref || typeof ref !== 'object') {\n return\n }\n\n if (\n !leavesFirst &&\n callback &&\n callback({ field, next, parentIsLocalized: parentIsLocalized!, parentPath, parentRef, ref })\n ) {\n return true\n } else if (leavesFirst) {\n callbackStack.push(() =>\n callback({\n field,\n next,\n parentIsLocalized: parentIsLocalized!,\n parentPath,\n parentRef,\n ref,\n }),\n )\n }\n\n if (skip) {\n return false\n }\n\n // avoid mutation of ref for all fields\n let currentRef = ref\n let currentParentRef = parentRef\n\n if (field.type === 'tabs' && 'tabs' in field) {\n for (const tab of field.tabs) {\n let tabRef = ref\n\n if (skip) {\n return false\n }\n\n if ('name' in tab && tab.name) {\n if (\n !ref[tab.name as keyof typeof ref] ||\n typeof ref[tab.name as keyof typeof ref] !== 'object'\n ) {\n if (fillEmpty) {\n if (tab.localized) {\n ;(ref as Record<string, any>)[tab.name] = { en: {} }\n } else {\n ;(ref as Record<string, any>)[tab.name] = {}\n }\n } else {\n continue\n }\n }\n\n if (\n callback &&\n !leavesFirst &&\n callback({\n field: { ...tab, type: 'tab' },\n next,\n parentIsLocalized: parentIsLocalized!,\n parentPath,\n parentRef: currentParentRef,\n ref: tabRef,\n })\n ) {\n return true\n } else if (leavesFirst) {\n callbackStack.push(() =>\n callback({\n field: { ...tab, type: 'tab' },\n next,\n parentIsLocalized: parentIsLocalized!,\n parentPath,\n parentRef: currentParentRef,\n ref: tabRef,\n }),\n )\n }\n\n tabRef = tabRef[tab.name as keyof typeof tabRef]\n\n if (tab.localized) {\n for (const key in tabRef as Record<string, unknown>) {\n if (\n tabRef[key as keyof typeof tabRef] &&\n typeof tabRef[key as keyof typeof tabRef] === 'object'\n ) {\n traverseFields({\n callback,\n callbackStack,\n config,\n fields: tab.fields,\n fillEmpty,\n isTopLevel: false,\n leavesFirst,\n parentIsLocalized: true,\n parentPath: `${parentPath}${tab.name}.`,\n parentRef: currentParentRef,\n ref: tabRef[key as keyof typeof tabRef],\n })\n }\n }\n }\n } else {\n if (\n callback &&\n !leavesFirst &&\n callback({\n field: { ...tab, type: 'tab' },\n next,\n parentIsLocalized: parentIsLocalized!,\n parentPath,\n parentRef: currentParentRef,\n ref: tabRef,\n })\n ) {\n return true\n } else if (leavesFirst) {\n callbackStack.push(() =>\n callback({\n field: { ...tab, type: 'tab' },\n next,\n parentIsLocalized: parentIsLocalized!,\n parentPath,\n parentRef: currentParentRef,\n ref: tabRef,\n }),\n )\n }\n }\n\n if (!tab.localized) {\n traverseFields({\n callback,\n callbackStack,\n config,\n fields: tab.fields,\n fillEmpty,\n isTopLevel: false,\n leavesFirst,\n parentIsLocalized: false,\n parentPath: tabHasName(tab) ? `${parentPath}${tab.name}.` : parentPath,\n parentRef: currentParentRef,\n ref: tabRef,\n })\n }\n\n if (skip) {\n return false\n }\n }\n\n return\n }\n\n if (field.type === 'tab' || fieldHasSubFields(field) || field.type === 'blocks') {\n if ('name' in field && field.name) {\n currentParentRef = currentRef\n if (!ref[field.name as keyof typeof ref]) {\n if (fillEmpty) {\n if (field.type === 'group' || field.type === 'tab') {\n if (fieldShouldBeLocalized({ field, parentIsLocalized: parentIsLocalized! })) {\n ;(ref as Record<string, any>)[field.name] = { en: {} }\n } else {\n ;(ref as Record<string, any>)[field.name] = {}\n }\n } else if (field.type === 'array' || field.type === 'blocks') {\n if (fieldShouldBeLocalized({ field, parentIsLocalized: parentIsLocalized! })) {\n ;(ref as Record<string, any>)[field.name] = { en: [] }\n } else {\n ;(ref as Record<string, any>)[field.name] = []\n }\n }\n } else {\n return\n }\n }\n currentRef = ref[field.name as keyof typeof ref]\n }\n\n if (\n (field.type === 'tab' || field.type === 'group') &&\n fieldShouldBeLocalized({ field, parentIsLocalized: parentIsLocalized! }) &&\n currentRef &&\n typeof currentRef === 'object'\n ) {\n if (fieldAffectsData(field)) {\n for (const key in currentRef as Record<string, unknown>) {\n if (currentRef[key as keyof typeof currentRef]) {\n traverseFields({\n callback,\n callbackStack,\n config,\n fields: field.fields,\n fillEmpty,\n isTopLevel: false,\n leavesFirst,\n parentIsLocalized: true,\n parentPath: field.name ? `${parentPath}${field.name}.` : parentPath,\n parentRef: currentParentRef,\n ref: currentRef[key as keyof typeof currentRef],\n })\n }\n }\n } else {\n traverseFields({\n callback,\n callbackStack,\n config,\n fields: field.fields,\n fillEmpty,\n isTopLevel: false,\n leavesFirst,\n parentIsLocalized,\n parentRef: currentParentRef,\n ref: currentRef,\n })\n }\n\n return\n }\n\n if (\n (field.type === 'blocks' || field.type === 'array') &&\n currentRef &&\n typeof currentRef === 'object'\n ) {\n // TODO: `?? field.localized ?? false` shouldn't be necessary, but right now it\n // is so that all fields are correctly traversed in copyToLocale and\n // therefore pass the localization integration tests.\n // I tried replacing the `!parentIsLocalized` condition with `parentIsLocalized === false`\n // in `fieldShouldBeLocalized`, but several tests failed. We must be calling it with incorrect\n // parameters somewhere.\n if (\n fieldShouldBeLocalized({\n field,\n parentIsLocalized: parentIsLocalized ?? false,\n })\n ) {\n if (Array.isArray(currentRef)) {\n traverseArrayOrBlocksField({\n callback,\n callbackStack,\n config,\n data: currentRef,\n field,\n fillEmpty,\n leavesFirst,\n parentIsLocalized: true,\n parentPath,\n parentRef: currentParentRef,\n })\n } else {\n for (const key in currentRef as Record<string, unknown>) {\n const localeData = currentRef[key as keyof typeof currentRef]\n if (!Array.isArray(localeData)) {\n continue\n }\n\n traverseArrayOrBlocksField({\n callback,\n callbackStack,\n config,\n data: localeData,\n field,\n fillEmpty,\n leavesFirst,\n parentIsLocalized: true,\n parentPath,\n parentRef: currentParentRef,\n })\n }\n }\n } else if (Array.isArray(currentRef)) {\n traverseArrayOrBlocksField({\n callback,\n callbackStack,\n config,\n data: currentRef as Record<string, unknown>[],\n field,\n fillEmpty,\n leavesFirst,\n parentIsLocalized: parentIsLocalized!,\n parentPath,\n parentRef: currentParentRef,\n })\n }\n } else if (currentRef && typeof currentRef === 'object' && 'fields' in field) {\n traverseFields({\n callback,\n callbackStack,\n config,\n fields: field.fields,\n fillEmpty,\n isTopLevel: false,\n leavesFirst,\n parentIsLocalized,\n parentPath: 'name' in field && field.name ? `${parentPath}${field.name}.` : parentPath,\n parentRef: currentParentRef,\n ref: currentRef,\n })\n }\n }\n\n if (isTopLevel) {\n callbackStack.reverse().forEach((cb) => {\n cb()\n })\n }\n })\n\n // Fallback: Handle dot-notation paths when no fields matched\n if (!fieldsMatched && ref && typeof ref === 'object') {\n Object.keys(ref).forEach((key) => {\n if (key.includes('.')) {\n // Split on first dot only\n const firstDotIndex = key.indexOf('.')\n const fieldName = key.substring(0, firstDotIndex)\n const remainingPath = key.substring(firstDotIndex + 1)\n\n // Create nested structure for this field\n if (!ref[fieldName as keyof typeof ref]) {\n ;(ref as Record<string, unknown>)[fieldName] = {}\n }\n\n const nestedRef = ref[fieldName as keyof typeof ref] as Record<string, unknown>\n\n // Move the value to the nested structure\n nestedRef[remainingPath] = (ref as Record<string, unknown>)[key]\n delete (ref as Record<string, unknown>)[key]\n\n // Recursively process the newly created nested structure\n // The field traversal will naturally handle it if the field exists in the schema\n traverseFields({\n callback,\n callbackStack: _callbackStack,\n config,\n fields,\n fillEmpty,\n isTopLevel: false,\n leavesFirst,\n parentIsLocalized,\n parentPath,\n parentRef,\n ref,\n })\n }\n })\n }\n}\n"],"names":["fieldAffectsData","fieldHasSubFields","fieldShouldBeLocalized","tabHasName","traverseArrayOrBlocksField","callback","callbackStack","config","data","field","fillEmpty","leavesFirst","parentIsLocalized","parentPath","parentRef","type","traverseFields","fields","isTopLevel","localized","name","_block","blockReferences","blocks","block","find","b","slug","ref","blockType","_callbackStack","fieldsMatched","some","skip","next","push","currentRef","currentParentRef","tab","tabs","tabRef","en","key","Array","isArray","localeData","reverse","forEach","cb","Object","keys","includes","firstDotIndex","indexOf","fieldName","substring","remainingPath","nestedRef"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/utilities/traverseFields.ts"],"sourcesContent":["import type { Config, SanitizedConfig } from '../config/types.js'\nimport type { ArrayField, Block, BlocksField, Field, TabAsField } from '../fields/config/types.js'\n\nimport {\n fieldAffectsData,\n fieldHasSubFields,\n fieldShouldBeLocalized,\n tabHasName,\n} from '../fields/config/types.js'\n\nconst traverseArrayOrBlocksField = ({\n callback,\n callbackStack,\n config,\n data,\n field,\n fillEmpty,\n leavesFirst,\n parentIsLocalized,\n parentPath,\n parentRef,\n}: {\n callback: TraverseFieldsCallback\n callbackStack: (() => ReturnType<TraverseFieldsCallback>)[]\n config?: Config | SanitizedConfig\n data: Record<string, unknown>[]\n field: ArrayField | BlocksField\n fillEmpty: boolean\n leavesFirst: boolean\n parentIsLocalized: boolean\n parentPath: string\n parentRef?: unknown\n}) => {\n if (fillEmpty) {\n if (field.type === 'array') {\n traverseFields({\n callback,\n callbackStack,\n config,\n fields: field.fields,\n isTopLevel: false,\n leavesFirst,\n parentIsLocalized: parentIsLocalized || field.localized,\n parentPath: `${parentPath}${field.name}.`,\n parentRef,\n })\n }\n if (field.type === 'blocks') {\n for (const _block of field.blocks) {\n const block =\n typeof _block === 'string' ? config?.blocks?.find((b) => b.slug === _block) : _block\n if (block) {\n traverseFields({\n callback,\n callbackStack,\n config,\n fields: block.fields,\n isTopLevel: false,\n leavesFirst,\n parentIsLocalized: parentIsLocalized || field.localized,\n parentPath: `${parentPath}${field.name}.`,\n parentRef,\n })\n }\n }\n }\n return\n }\n for (const ref of data) {\n let fields!: Field[]\n if (field.type === 'blocks' && typeof ref?.blockType === 'string') {\n const block =\n config?.blocks?.find((b) => b.slug === ref.blockType) ??\n field.blocks.find((b): b is Block => typeof b !== 'string' && b.slug === ref.blockType)\n\n fields = block?.fields as Field[]\n } else if (field.type === 'array') {\n fields = field.fields\n }\n\n if (fields) {\n traverseFields({\n callback,\n callbackStack,\n config,\n fields,\n fillEmpty,\n isTopLevel: false,\n leavesFirst,\n parentIsLocalized: parentIsLocalized || field.localized,\n parentPath: `${parentPath}${field.name}.`,\n parentRef,\n ref,\n })\n }\n }\n}\n\nexport type TraverseFieldsCallback = (args: {\n /**\n * The current field\n */\n field: Field | TabAsField\n /**\n * Function that when called will skip the current field and continue to the next\n */\n next?: () => void\n parentIsLocalized: boolean\n parentPath: string\n /**\n * The parent reference object\n */\n parentRef?: Record<string, unknown> | unknown\n /**\n * The current reference object\n */\n ref?: Record<string, unknown> | unknown\n}) => boolean | void\n\ntype TraverseFieldsArgs = {\n callback: TraverseFieldsCallback\n callbackStack?: (() => ReturnType<TraverseFieldsCallback>)[]\n config?: Config | SanitizedConfig\n fields: (Field | TabAsField)[]\n fillEmpty?: boolean\n isTopLevel?: boolean\n /**\n * @default false\n *\n * if this is `true`, the callback functions of the leaf fields will be called before the parent fields.\n * The return value of the callback function will be ignored.\n */\n leavesFirst?: boolean\n parentIsLocalized?: boolean\n parentPath?: string\n parentRef?: Record<string, unknown> | unknown\n ref?: Record<string, unknown> | unknown\n}\n\n/**\n * Iterate a recurse an array of fields, calling a callback for each field\n *\n * @param fields\n * @param callback callback called for each field, discontinue looping if callback returns truthy\n * @param fillEmpty fill empty properties to use this without data\n * @param ref the data or any artifacts assigned in the callback during field recursion\n * @param parentRef the data or any artifacts assigned in the callback during field recursion one level up\n */\nexport const traverseFields = ({\n callback,\n callbackStack: _callbackStack = [],\n config,\n fields,\n fillEmpty = true,\n isTopLevel = true,\n leavesFirst = false,\n parentIsLocalized,\n parentPath = '',\n parentRef = {},\n ref = {},\n}: TraverseFieldsArgs): void => {\n const fieldsMatched = fields.some((field) => {\n let callbackStack: (() => ReturnType<TraverseFieldsCallback>)[] = []\n if (!isTopLevel) {\n callbackStack = _callbackStack\n }\n let skip = false\n const next = () => {\n skip = true\n }\n\n if (!ref || typeof ref !== 'object') {\n return\n }\n\n if (\n !leavesFirst &&\n callback &&\n callback({ field, next, parentIsLocalized: parentIsLocalized!, parentPath, parentRef, ref })\n ) {\n return true\n } else if (leavesFirst) {\n callbackStack.push(() =>\n callback({\n field,\n next,\n parentIsLocalized: parentIsLocalized!,\n parentPath,\n parentRef,\n ref,\n }),\n )\n }\n\n if (skip) {\n return false\n }\n\n // avoid mutation of ref for all fields\n let currentRef = ref\n let currentParentRef = parentRef\n\n if (field.type === 'tabs' && 'tabs' in field) {\n for (const tab of field.tabs) {\n let tabRef = ref\n\n if (skip) {\n return false\n }\n\n if ('name' in tab && tab.name) {\n if (\n !ref[tab.name as keyof typeof ref] ||\n typeof ref[tab.name as keyof typeof ref] !== 'object'\n ) {\n if (fillEmpty) {\n if (tab.localized) {\n ;(ref as Record<string, any>)[tab.name] = { en: {} }\n } else {\n ;(ref as Record<string, any>)[tab.name] = {}\n }\n } else {\n continue\n }\n }\n\n if (\n callback &&\n !leavesFirst &&\n callback({\n field: { ...tab, type: 'tab' },\n next,\n parentIsLocalized: parentIsLocalized!,\n parentPath,\n parentRef: currentParentRef,\n ref: tabRef,\n })\n ) {\n return true\n } else if (leavesFirst) {\n callbackStack.push(() =>\n callback({\n field: { ...tab, type: 'tab' },\n next,\n parentIsLocalized: parentIsLocalized!,\n parentPath,\n parentRef: currentParentRef,\n ref: tabRef,\n }),\n )\n }\n\n tabRef = tabRef[tab.name as keyof typeof tabRef]\n\n if (tab.localized) {\n for (const key in tabRef as Record<string, unknown>) {\n if (\n tabRef[key as keyof typeof tabRef] &&\n typeof tabRef[key as keyof typeof tabRef] === 'object'\n ) {\n traverseFields({\n callback,\n callbackStack,\n config,\n fields: tab.fields,\n fillEmpty,\n isTopLevel: false,\n leavesFirst,\n parentIsLocalized: true,\n parentPath: `${parentPath}${tab.name}.`,\n parentRef: currentParentRef,\n ref: tabRef[key as keyof typeof tabRef],\n })\n }\n }\n }\n } else {\n if (\n callback &&\n !leavesFirst &&\n callback({\n field: { ...tab, type: 'tab' },\n next,\n parentIsLocalized: parentIsLocalized!,\n parentPath,\n parentRef: currentParentRef,\n ref: tabRef,\n })\n ) {\n return true\n } else if (leavesFirst) {\n callbackStack.push(() =>\n callback({\n field: { ...tab, type: 'tab' },\n next,\n parentIsLocalized: parentIsLocalized!,\n parentPath,\n parentRef: currentParentRef,\n ref: tabRef,\n }),\n )\n }\n }\n\n if (!tab.localized) {\n traverseFields({\n callback,\n callbackStack,\n config,\n fields: tab.fields,\n fillEmpty,\n isTopLevel: false,\n leavesFirst,\n parentIsLocalized: false,\n parentPath: tabHasName(tab) ? `${parentPath}${tab.name}.` : parentPath,\n parentRef: currentParentRef,\n ref: tabRef,\n })\n }\n\n if (skip) {\n return false\n }\n }\n\n return\n }\n\n if (field.type === 'tab' || fieldHasSubFields(field) || field.type === 'blocks') {\n if ('name' in field && field.name) {\n currentParentRef = currentRef\n if (!ref[field.name as keyof typeof ref]) {\n if (fillEmpty) {\n if (field.type === 'group' || field.type === 'tab') {\n if (fieldShouldBeLocalized({ field, parentIsLocalized: parentIsLocalized! })) {\n ;(ref as Record<string, any>)[field.name] = { en: {} }\n } else {\n ;(ref as Record<string, any>)[field.name] = {}\n }\n } else if (field.type === 'array' || field.type === 'blocks') {\n if (fieldShouldBeLocalized({ field, parentIsLocalized: parentIsLocalized! })) {\n ;(ref as Record<string, any>)[field.name] = { en: [] }\n } else {\n ;(ref as Record<string, any>)[field.name] = []\n }\n }\n } else {\n return\n }\n }\n currentRef = ref[field.name as keyof typeof ref]\n }\n\n if (\n (field.type === 'tab' || field.type === 'group') &&\n fieldShouldBeLocalized({ field, parentIsLocalized: parentIsLocalized! }) &&\n currentRef &&\n typeof currentRef === 'object'\n ) {\n if (fieldAffectsData(field)) {\n for (const key in currentRef as Record<string, unknown>) {\n if (currentRef[key as keyof typeof currentRef]) {\n traverseFields({\n callback,\n callbackStack,\n config,\n fields: field.fields,\n fillEmpty,\n isTopLevel: false,\n leavesFirst,\n parentIsLocalized: true,\n parentPath: field.name ? `${parentPath}${field.name}.` : parentPath,\n parentRef: currentParentRef,\n ref: currentRef[key as keyof typeof currentRef],\n })\n }\n }\n } else {\n traverseFields({\n callback,\n callbackStack,\n config,\n fields: field.fields,\n fillEmpty,\n isTopLevel: false,\n leavesFirst,\n parentIsLocalized,\n parentRef: currentParentRef,\n ref: currentRef,\n })\n }\n\n return\n }\n\n if (\n (field.type === 'blocks' || field.type === 'array') &&\n currentRef &&\n typeof currentRef === 'object'\n ) {\n // TODO: `?? field.localized ?? false` shouldn't be necessary, but right now it\n // is so that all fields are correctly traversed in copyToLocale and\n // therefore pass the localization integration tests.\n // I tried replacing the `!parentIsLocalized` condition with `parentIsLocalized === false`\n // in `fieldShouldBeLocalized`, but several tests failed. We must be calling it with incorrect\n // parameters somewhere.\n if (\n fieldShouldBeLocalized({\n field,\n parentIsLocalized: parentIsLocalized ?? false,\n })\n ) {\n if (Array.isArray(currentRef)) {\n traverseArrayOrBlocksField({\n callback,\n callbackStack,\n config,\n data: currentRef,\n field,\n fillEmpty,\n leavesFirst,\n parentIsLocalized: true,\n parentPath,\n parentRef: currentParentRef,\n })\n } else {\n for (const key in currentRef as Record<string, unknown>) {\n const localeData = currentRef[key as keyof typeof currentRef]\n if (!Array.isArray(localeData)) {\n continue\n }\n\n traverseArrayOrBlocksField({\n callback,\n callbackStack,\n config,\n data: localeData,\n field,\n fillEmpty,\n leavesFirst,\n parentIsLocalized: true,\n parentPath,\n parentRef: currentParentRef,\n })\n }\n }\n } else if (Array.isArray(currentRef)) {\n traverseArrayOrBlocksField({\n callback,\n callbackStack,\n config,\n data: currentRef as Record<string, unknown>[],\n field,\n fillEmpty,\n leavesFirst,\n parentIsLocalized: parentIsLocalized!,\n parentPath,\n parentRef: currentParentRef,\n })\n }\n } else if (currentRef && typeof currentRef === 'object' && 'fields' in field) {\n traverseFields({\n callback,\n callbackStack,\n config,\n fields: field.fields,\n fillEmpty,\n isTopLevel: false,\n leavesFirst,\n parentIsLocalized,\n parentPath: 'name' in field && field.name ? `${parentPath}${field.name}.` : parentPath,\n parentRef: currentParentRef,\n ref: currentRef,\n })\n }\n }\n\n if (isTopLevel) {\n callbackStack.reverse().forEach((cb) => {\n cb()\n })\n }\n })\n\n // Fallback: Handle dot-notation paths when no fields matched\n if (!fieldsMatched && ref && typeof ref === 'object') {\n Object.keys(ref).forEach((key) => {\n if (key.includes('.')) {\n // Split on first dot only\n const firstDotIndex = key.indexOf('.')\n const fieldName = key.substring(0, firstDotIndex)\n const remainingPath = key.substring(firstDotIndex + 1)\n\n // Create nested structure for this field\n if (!ref[fieldName as keyof typeof ref]) {\n ;(ref as Record<string, unknown>)[fieldName] = {}\n }\n\n const nestedRef = ref[fieldName as keyof typeof ref] as Record<string, unknown>\n\n // Move the value to the nested structure\n nestedRef[remainingPath] = (ref as Record<string, unknown>)[key]\n delete (ref as Record<string, unknown>)[key]\n\n // Recursively process the newly created nested structure\n // The field traversal will naturally handle it if the field exists in the schema\n traverseFields({\n callback,\n callbackStack: _callbackStack,\n config,\n fields,\n fillEmpty,\n isTopLevel: false,\n leavesFirst,\n parentIsLocalized,\n parentPath,\n parentRef,\n ref,\n })\n }\n })\n }\n}\n"],"names":["fieldAffectsData","fieldHasSubFields","fieldShouldBeLocalized","tabHasName","traverseArrayOrBlocksField","callback","callbackStack","config","data","field","fillEmpty","leavesFirst","parentIsLocalized","parentPath","parentRef","type","traverseFields","fields","isTopLevel","localized","name","_block","blocks","block","find","b","slug","ref","blockType","_callbackStack","fieldsMatched","some","skip","next","push","currentRef","currentParentRef","tab","tabs","tabRef","en","key","Array","isArray","localeData","reverse","forEach","cb","Object","keys","includes","firstDotIndex","indexOf","fieldName","substring","remainingPath","nestedRef"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"traverseForLocalizedFields.d.ts","sourceRoot":"","sources":["../../src/utilities/traverseForLocalizedFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAA;AAEtD,eAAO,MAAM,0BAA0B,GAAI,QAAQ,KAAK,EAAE,KAAG,OA0C5D,CAAA"}
1
+ {"version":3,"file":"traverseForLocalizedFields.d.ts","sourceRoot":"","sources":["../../src/utilities/traverseForLocalizedFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAA;AAEtD,eAAO,MAAM,0BAA0B,GAAI,QAAQ,KAAK,EAAE,KAAG,OA6C5D,CAAA"}
@@ -15,6 +15,9 @@ export const traverseForLocalizedFields = (fields)=>{
15
15
  case 'blocks':
16
16
  if (field.blocks) {
17
17
  for (const block of field.blocks){
18
+ if (typeof block === 'string') {
19
+ continue;
20
+ }
18
21
  if (block.fields && traverseForLocalizedFields(block.fields)) {
19
22
  return true;
20
23
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utilities/traverseForLocalizedFields.ts"],"sourcesContent":["import type { Field } from '../fields/config/types.js'\n\nexport const traverseForLocalizedFields = (fields: Field[]): boolean => {\n for (const field of fields) {\n if ('localized' in field && field.localized) {\n return true\n }\n\n switch (field.type) {\n case 'array':\n case 'collapsible':\n case 'group':\n case 'row':\n if (field.fields && traverseForLocalizedFields(field.fields)) {\n return true\n }\n break\n\n case 'blocks':\n if (field.blocks) {\n for (const block of field.blocks) {\n if (block.fields && traverseForLocalizedFields(block.fields)) {\n return true\n }\n }\n }\n break\n\n case 'tabs':\n if (field.tabs) {\n for (const tab of field.tabs) {\n if ('localized' in tab && tab.localized) {\n return true\n }\n if ('fields' in tab && tab.fields && traverseForLocalizedFields(tab.fields)) {\n return true\n }\n }\n }\n break\n }\n }\n\n return false\n}\n"],"names":["traverseForLocalizedFields","fields","field","localized","type","blocks","block","tabs","tab"],"mappings":"AAEA,OAAO,MAAMA,6BAA6B,CAACC;IACzC,KAAK,MAAMC,SAASD,OAAQ;QAC1B,IAAI,eAAeC,SAASA,MAAMC,SAAS,EAAE;YAC3C,OAAO;QACT;QAEA,OAAQD,MAAME,IAAI;YAChB,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;gBACH,IAAIF,MAAMD,MAAM,IAAID,2BAA2BE,MAAMD,MAAM,GAAG;oBAC5D,OAAO;gBACT;gBACA;YAEF,KAAK;gBACH,IAAIC,MAAMG,MAAM,EAAE;oBAChB,KAAK,MAAMC,SAASJ,MAAMG,MAAM,CAAE;wBAChC,IAAIC,MAAML,MAAM,IAAID,2BAA2BM,MAAML,MAAM,GAAG;4BAC5D,OAAO;wBACT;oBACF;gBACF;gBACA;YAEF,KAAK;gBACH,IAAIC,MAAMK,IAAI,EAAE;oBACd,KAAK,MAAMC,OAAON,MAAMK,IAAI,CAAE;wBAC5B,IAAI,eAAeC,OAAOA,IAAIL,SAAS,EAAE;4BACvC,OAAO;wBACT;wBACA,IAAI,YAAYK,OAAOA,IAAIP,MAAM,IAAID,2BAA2BQ,IAAIP,MAAM,GAAG;4BAC3E,OAAO;wBACT;oBACF;gBACF;gBACA;QACJ;IACF;IAEA,OAAO;AACT,EAAC"}
1
+ {"version":3,"sources":["../../src/utilities/traverseForLocalizedFields.ts"],"sourcesContent":["import type { Field } from '../fields/config/types.js'\n\nexport const traverseForLocalizedFields = (fields: Field[]): boolean => {\n for (const field of fields) {\n if ('localized' in field && field.localized) {\n return true\n }\n\n switch (field.type) {\n case 'array':\n case 'collapsible':\n case 'group':\n case 'row':\n if (field.fields && traverseForLocalizedFields(field.fields)) {\n return true\n }\n break\n\n case 'blocks':\n if (field.blocks) {\n for (const block of field.blocks) {\n if (typeof block === 'string') {\n continue\n }\n if (block.fields && traverseForLocalizedFields(block.fields)) {\n return true\n }\n }\n }\n break\n\n case 'tabs':\n if (field.tabs) {\n for (const tab of field.tabs) {\n if ('localized' in tab && tab.localized) {\n return true\n }\n if ('fields' in tab && tab.fields && traverseForLocalizedFields(tab.fields)) {\n return true\n }\n }\n }\n break\n }\n }\n\n return false\n}\n"],"names":["traverseForLocalizedFields","fields","field","localized","type","blocks","block","tabs","tab"],"mappings":"AAEA,OAAO,MAAMA,6BAA6B,CAACC;IACzC,KAAK,MAAMC,SAASD,OAAQ;QAC1B,IAAI,eAAeC,SAASA,MAAMC,SAAS,EAAE;YAC3C,OAAO;QACT;QAEA,OAAQD,MAAME,IAAI;YAChB,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;gBACH,IAAIF,MAAMD,MAAM,IAAID,2BAA2BE,MAAMD,MAAM,GAAG;oBAC5D,OAAO;gBACT;gBACA;YAEF,KAAK;gBACH,IAAIC,MAAMG,MAAM,EAAE;oBAChB,KAAK,MAAMC,SAASJ,MAAMG,MAAM,CAAE;wBAChC,IAAI,OAAOC,UAAU,UAAU;4BAC7B;wBACF;wBACA,IAAIA,MAAML,MAAM,IAAID,2BAA2BM,MAAML,MAAM,GAAG;4BAC5D,OAAO;wBACT;oBACF;gBACF;gBACA;YAEF,KAAK;gBACH,IAAIC,MAAMK,IAAI,EAAE;oBACd,KAAK,MAAMC,OAAON,MAAMK,IAAI,CAAE;wBAC5B,IAAI,eAAeC,OAAOA,IAAIL,SAAS,EAAE;4BACvC,OAAO;wBACT;wBACA,IAAI,YAAYK,OAAOA,IAAIP,MAAM,IAAID,2BAA2BQ,IAAIP,MAAM,GAAG;4BAC3E,OAAO;wBACT;oBACF;gBACF;gBACA;QACJ;IACF;IAEA,OAAO;AACT,EAAC"}
@@ -1,7 +1,6 @@
1
- import type { CheckboxField, Field, Option } from '../fields/config/types.js';
1
+ import type { Field, Option } from '../fields/config/types.js';
2
2
  export declare const statuses: Option[];
3
3
  export declare const baseVersionFields: ({ localized }: {
4
4
  localized: boolean;
5
5
  }) => Field[];
6
- export declare const versionSnapshotField: CheckboxField;
7
6
  //# sourceMappingURL=baseFields.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"baseFields.d.ts","sourceRoot":"","sources":["../../src/versions/baseFields.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAE7E,eAAO,MAAM,QAAQ,EAAE,MAAM,EAS5B,CAAA;AAED,eAAO,MAAM,iBAAiB,GAAI,eAAe;IAAE,SAAS,EAAE,OAAO,CAAA;CAAE,KAAG,KAAK,EAgB9E,CAAA;AAOD,eAAO,MAAM,oBAAoB,EAAE,aAOlC,CAAA"}
1
+ {"version":3,"file":"baseFields.d.ts","sourceRoot":"","sources":["../../src/versions/baseFields.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAE9D,eAAO,MAAM,QAAQ,EAAE,MAAM,EAS5B,CAAA;AAED,eAAO,MAAM,iBAAiB,GAAI,eAAe;IAAE,SAAS,EAAE,OAAO,CAAA;CAAE,KAAG,KAAK,EAgB9E,CAAA"}
@@ -28,18 +28,5 @@ export const baseVersionFields = ({ localized })=>[
28
28
  options: statuses
29
29
  }
30
30
  ];
31
- // When publishing a specific locale,
32
- // we need to create a new draft which acts as a
33
- // "snapshot" to retain all existing draft data.
34
- // This field will be used to exclude any snapshot versions
35
- // from the admin Versions list
36
- export const versionSnapshotField = {
37
- name: 'snapshot',
38
- type: 'checkbox',
39
- admin: {
40
- disabled: true
41
- },
42
- index: true
43
- };
44
31
 
45
32
  //# sourceMappingURL=baseFields.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/versions/baseFields.ts"],"sourcesContent":["// @ts-strict-ignore\nimport type { CheckboxField, Field, Option } from '../fields/config/types.js'\n\nexport const statuses: Option[] = [\n {\n label: ({ t }) => t('version:draft'),\n value: 'draft',\n },\n {\n label: ({ t }) => t('version:published'),\n value: 'published',\n },\n]\n\nexport const baseVersionFields = ({ localized }: { localized: boolean }): Field[] => [\n {\n name: '_status',\n type: 'select',\n admin: {\n components: {\n Field: false,\n },\n disabled: { bulkEdit: true },\n },\n defaultValue: 'draft',\n index: true,\n label: ({ t }) => t('version:status'),\n localized: Boolean(localized),\n options: statuses,\n },\n]\n\n// When publishing a specific locale,\n// we need to create a new draft which acts as a\n// \"snapshot\" to retain all existing draft data.\n// This field will be used to exclude any snapshot versions\n// from the admin Versions list\nexport const versionSnapshotField: CheckboxField = {\n name: 'snapshot',\n type: 'checkbox',\n admin: {\n disabled: true,\n },\n index: true,\n}\n"],"names":["statuses","label","t","value","baseVersionFields","localized","name","type","admin","components","Field","disabled","bulkEdit","defaultValue","index","Boolean","options","versionSnapshotField"],"mappings":"AAAA,oBAAoB;AAGpB,OAAO,MAAMA,WAAqB;IAChC;QACEC,OAAO,CAAC,EAAEC,CAAC,EAAE,GAAKA,EAAE;QACpBC,OAAO;IACT;IACA;QACEF,OAAO,CAAC,EAAEC,CAAC,EAAE,GAAKA,EAAE;QACpBC,OAAO;IACT;CACD,CAAA;AAED,OAAO,MAAMC,oBAAoB,CAAC,EAAEC,SAAS,EAA0B,GAAc;QACnF;YACEC,MAAM;YACNC,MAAM;YACNC,OAAO;gBACLC,YAAY;oBACVC,OAAO;gBACT;gBACAC,UAAU;oBAAEC,UAAU;gBAAK;YAC7B;YACAC,cAAc;YACdC,OAAO;YACPb,OAAO,CAAC,EAAEC,CAAC,EAAE,GAAKA,EAAE;YACpBG,WAAWU,QAAQV;YACnBW,SAAShB;QACX;KACD,CAAA;AAED,qCAAqC;AACrC,gDAAgD;AAChD,gDAAgD;AAChD,2DAA2D;AAC3D,+BAA+B;AAC/B,OAAO,MAAMiB,uBAAsC;IACjDX,MAAM;IACNC,MAAM;IACNC,OAAO;QACLG,UAAU;IACZ;IACAG,OAAO;AACT,EAAC"}
1
+ {"version":3,"sources":["../../src/versions/baseFields.ts"],"sourcesContent":["// @ts-strict-ignore\nimport type { Field, Option } from '../fields/config/types.js'\n\nexport const statuses: Option[] = [\n {\n label: ({ t }) => t('version:draft'),\n value: 'draft',\n },\n {\n label: ({ t }) => t('version:published'),\n value: 'published',\n },\n]\n\nexport const baseVersionFields = ({ localized }: { localized: boolean }): Field[] => [\n {\n name: '_status',\n type: 'select',\n admin: {\n components: {\n Field: false,\n },\n disabled: { bulkEdit: true },\n },\n defaultValue: 'draft',\n index: true,\n label: ({ t }) => t('version:status'),\n localized: Boolean(localized),\n options: statuses,\n },\n]\n"],"names":["statuses","label","t","value","baseVersionFields","localized","name","type","admin","components","Field","disabled","bulkEdit","defaultValue","index","Boolean","options"],"mappings":"AAAA,oBAAoB;AAGpB,OAAO,MAAMA,WAAqB;IAChC;QACEC,OAAO,CAAC,EAAEC,CAAC,EAAE,GAAKA,EAAE;QACpBC,OAAO;IACT;IACA;QACEF,OAAO,CAAC,EAAEC,CAAC,EAAE,GAAKA,EAAE;QACpBC,OAAO;IACT;CACD,CAAA;AAED,OAAO,MAAMC,oBAAoB,CAAC,EAAEC,SAAS,EAA0B,GAAc;QACnF;YACEC,MAAM;YACNC,MAAM;YACNC,OAAO;gBACLC,YAAY;oBACVC,OAAO;gBACT;gBACAC,UAAU;oBAAEC,UAAU;gBAAK;YAC7B;YACAC,cAAc;YACdC,OAAO;YACPb,OAAO,CAAC,EAAEC,CAAC,EAAE,GAAKA,EAAE;YACpBG,WAAWU,QAAQV;YACnBW,SAAShB;QACX;KACD,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"buildCollectionFields.d.ts","sourceRoot":"","sources":["../../src/versions/buildCollectionFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAC/E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAKtE,eAAO,MAAM,4BAA4B,GAAI,CAAC,SAAS,OAAO,GAAG,KAAK,EACpE,QAAQ,eAAe,EACvB,YAAY,yBAAyB,EACrC,UAAU,CAAC,KACV,IAAI,SAAS,CAAC,GAAG,cAAc,EAAE,GAAG,KAAK,EA0E3C,CAAA"}
1
+ {"version":3,"file":"buildCollectionFields.d.ts","sourceRoot":"","sources":["../../src/versions/buildCollectionFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAC/E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAItE,eAAO,MAAM,4BAA4B,GAAI,CAAC,SAAS,OAAO,GAAG,KAAK,EACpE,QAAQ,eAAe,EACvB,YAAY,yBAAyB,EACrC,UAAU,CAAC,KACV,IAAI,SAAS,CAAC,GAAG,cAAc,EAAE,GAAG,KAAK,EAwE3C,CAAA"}
@@ -1,5 +1,4 @@
1
1
  import { hasAutosaveEnabled, hasDraftsEnabled } from '../utilities/getVersionsConfig.js';
2
- import { versionSnapshotField } from './baseFields.js';
3
2
  export const buildVersionCollectionFields = (config, collection, flatten)=>{
4
3
  const fields = [
5
4
  {
@@ -35,7 +34,6 @@ export const buildVersionCollectionFields = (config, collection, flatten)=>{
35
34
  ];
36
35
  if (hasDraftsEnabled(collection)) {
37
36
  if (config.localization) {
38
- fields.push(versionSnapshotField);
39
37
  fields.push({
40
38
  name: 'publishedLocale',
41
39
  type: 'select',
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/versions/buildCollectionFields.ts"],"sourcesContent":["import type { SanitizedCollectionConfig } from '../collections/config/types.js'\nimport type { SanitizedConfig } from '../config/types.js'\nimport type { Field, FlattenedField } from '../fields/config/types.js'\n\nimport { hasAutosaveEnabled, hasDraftsEnabled } from '../utilities/getVersionsConfig.js'\nimport { versionSnapshotField } from './baseFields.js'\n\nexport const buildVersionCollectionFields = <T extends boolean = false>(\n config: SanitizedConfig,\n collection: SanitizedCollectionConfig,\n flatten?: T,\n): true extends T ? FlattenedField[] : Field[] => {\n const fields: FlattenedField[] = [\n {\n name: 'parent',\n type: 'relationship',\n index: true,\n relationTo: collection.slug,\n },\n {\n name: 'version',\n type: 'group',\n fields: collection.fields.filter((field) => !('name' in field) || field.name !== 'id'),\n ...(flatten && {\n flattenedFields: collection.flattenedFields.filter((each) => each.name !== 'id'),\n })!,\n },\n {\n name: 'createdAt',\n type: 'date',\n admin: {\n disabled: true,\n },\n index: true,\n },\n {\n name: 'updatedAt',\n type: 'date',\n admin: {\n disabled: true,\n },\n index: true,\n },\n ]\n\n if (hasDraftsEnabled(collection)) {\n if (config.localization) {\n fields.push(versionSnapshotField)\n\n fields.push({\n name: 'publishedLocale',\n type: 'select',\n admin: {\n disabled: true,\n },\n index: true,\n options: config.localization.locales.map((locale) => {\n if (typeof locale === 'string') {\n return locale\n }\n\n return locale.code\n }),\n })\n }\n\n fields.push({\n name: 'latest',\n type: 'checkbox',\n admin: {\n disabled: true,\n },\n index: true,\n })\n\n if (hasAutosaveEnabled(collection)) {\n fields.push({\n name: 'autosave',\n type: 'checkbox',\n index: true,\n })\n }\n }\n\n return fields as true extends T ? FlattenedField[] : Field[]\n}\n"],"names":["hasAutosaveEnabled","hasDraftsEnabled","versionSnapshotField","buildVersionCollectionFields","config","collection","flatten","fields","name","type","index","relationTo","slug","filter","field","flattenedFields","each","admin","disabled","localization","push","options","locales","map","locale","code"],"mappings":"AAIA,SAASA,kBAAkB,EAAEC,gBAAgB,QAAQ,oCAAmC;AACxF,SAASC,oBAAoB,QAAQ,kBAAiB;AAEtD,OAAO,MAAMC,+BAA+B,CAC1CC,QACAC,YACAC;IAEA,MAAMC,SAA2B;QAC/B;YACEC,MAAM;YACNC,MAAM;YACNC,OAAO;YACPC,YAAYN,WAAWO,IAAI;QAC7B;QACA;YACEJ,MAAM;YACNC,MAAM;YACNF,QAAQF,WAAWE,MAAM,CAACM,MAAM,CAAC,CAACC,QAAU,CAAE,CAAA,UAAUA,KAAI,KAAMA,MAAMN,IAAI,KAAK;YACjF,GAAIF,WAAW;gBACbS,iBAAiBV,WAAWU,eAAe,CAACF,MAAM,CAAC,CAACG,OAASA,KAAKR,IAAI,KAAK;YAC7E,CAAC;QACH;QACA;YACEA,MAAM;YACNC,MAAM;YACNQ,OAAO;gBACLC,UAAU;YACZ;YACAR,OAAO;QACT;QACA;YACEF,MAAM;YACNC,MAAM;YACNQ,OAAO;gBACLC,UAAU;YACZ;YACAR,OAAO;QACT;KACD;IAED,IAAIT,iBAAiBI,aAAa;QAChC,IAAID,OAAOe,YAAY,EAAE;YACvBZ,OAAOa,IAAI,CAAClB;YAEZK,OAAOa,IAAI,CAAC;gBACVZ,MAAM;gBACNC,MAAM;gBACNQ,OAAO;oBACLC,UAAU;gBACZ;gBACAR,OAAO;gBACPW,SAASjB,OAAOe,YAAY,CAACG,OAAO,CAACC,GAAG,CAAC,CAACC;oBACxC,IAAI,OAAOA,WAAW,UAAU;wBAC9B,OAAOA;oBACT;oBAEA,OAAOA,OAAOC,IAAI;gBACpB;YACF;QACF;QAEAlB,OAAOa,IAAI,CAAC;YACVZ,MAAM;YACNC,MAAM;YACNQ,OAAO;gBACLC,UAAU;YACZ;YACAR,OAAO;QACT;QAEA,IAAIV,mBAAmBK,aAAa;YAClCE,OAAOa,IAAI,CAAC;gBACVZ,MAAM;gBACNC,MAAM;gBACNC,OAAO;YACT;QACF;IACF;IAEA,OAAOH;AACT,EAAC"}
1
+ {"version":3,"sources":["../../src/versions/buildCollectionFields.ts"],"sourcesContent":["import type { SanitizedCollectionConfig } from '../collections/config/types.js'\nimport type { SanitizedConfig } from '../config/types.js'\nimport type { Field, FlattenedField } from '../fields/config/types.js'\n\nimport { hasAutosaveEnabled, hasDraftsEnabled } from '../utilities/getVersionsConfig.js'\n\nexport const buildVersionCollectionFields = <T extends boolean = false>(\n config: SanitizedConfig,\n collection: SanitizedCollectionConfig,\n flatten?: T,\n): true extends T ? FlattenedField[] : Field[] => {\n const fields: FlattenedField[] = [\n {\n name: 'parent',\n type: 'relationship',\n index: true,\n relationTo: collection.slug,\n },\n {\n name: 'version',\n type: 'group',\n fields: collection.fields.filter((field) => !('name' in field) || field.name !== 'id'),\n ...(flatten && {\n flattenedFields: collection.flattenedFields.filter((each) => each.name !== 'id'),\n })!,\n },\n {\n name: 'createdAt',\n type: 'date',\n admin: {\n disabled: true,\n },\n index: true,\n },\n {\n name: 'updatedAt',\n type: 'date',\n admin: {\n disabled: true,\n },\n index: true,\n },\n ]\n\n if (hasDraftsEnabled(collection)) {\n if (config.localization) {\n fields.push({\n name: 'publishedLocale',\n type: 'select',\n admin: {\n disabled: true,\n },\n index: true,\n options: config.localization.locales.map((locale) => {\n if (typeof locale === 'string') {\n return locale\n }\n\n return locale.code\n }),\n })\n }\n\n fields.push({\n name: 'latest',\n type: 'checkbox',\n admin: {\n disabled: true,\n },\n index: true,\n })\n\n if (hasAutosaveEnabled(collection)) {\n fields.push({\n name: 'autosave',\n type: 'checkbox',\n index: true,\n })\n }\n }\n\n return fields as true extends T ? FlattenedField[] : Field[]\n}\n"],"names":["hasAutosaveEnabled","hasDraftsEnabled","buildVersionCollectionFields","config","collection","flatten","fields","name","type","index","relationTo","slug","filter","field","flattenedFields","each","admin","disabled","localization","push","options","locales","map","locale","code"],"mappings":"AAIA,SAASA,kBAAkB,EAAEC,gBAAgB,QAAQ,oCAAmC;AAExF,OAAO,MAAMC,+BAA+B,CAC1CC,QACAC,YACAC;IAEA,MAAMC,SAA2B;QAC/B;YACEC,MAAM;YACNC,MAAM;YACNC,OAAO;YACPC,YAAYN,WAAWO,IAAI;QAC7B;QACA;YACEJ,MAAM;YACNC,MAAM;YACNF,QAAQF,WAAWE,MAAM,CAACM,MAAM,CAAC,CAACC,QAAU,CAAE,CAAA,UAAUA,KAAI,KAAMA,MAAMN,IAAI,KAAK;YACjF,GAAIF,WAAW;gBACbS,iBAAiBV,WAAWU,eAAe,CAACF,MAAM,CAAC,CAACG,OAASA,KAAKR,IAAI,KAAK;YAC7E,CAAC;QACH;QACA;YACEA,MAAM;YACNC,MAAM;YACNQ,OAAO;gBACLC,UAAU;YACZ;YACAR,OAAO;QACT;QACA;YACEF,MAAM;YACNC,MAAM;YACNQ,OAAO;gBACLC,UAAU;YACZ;YACAR,OAAO;QACT;KACD;IAED,IAAIR,iBAAiBG,aAAa;QAChC,IAAID,OAAOe,YAAY,EAAE;YACvBZ,OAAOa,IAAI,CAAC;gBACVZ,MAAM;gBACNC,MAAM;gBACNQ,OAAO;oBACLC,UAAU;gBACZ;gBACAR,OAAO;gBACPW,SAASjB,OAAOe,YAAY,CAACG,OAAO,CAACC,GAAG,CAAC,CAACC;oBACxC,IAAI,OAAOA,WAAW,UAAU;wBAC9B,OAAOA;oBACT;oBAEA,OAAOA,OAAOC,IAAI;gBACpB;YACF;QACF;QAEAlB,OAAOa,IAAI,CAAC;YACVZ,MAAM;YACNC,MAAM;YACNQ,OAAO;gBACLC,UAAU;YACZ;YACAR,OAAO;QACT;QAEA,IAAIT,mBAAmBI,aAAa;YAClCE,OAAOa,IAAI,CAAC;gBACVZ,MAAM;gBACNC,MAAM;gBACNC,OAAO;YACT;QACF;IACF;IAEA,OAAOH;AACT,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"buildGlobalFields.d.ts","sourceRoot":"","sources":["../../src/versions/buildGlobalFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AACtE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AAKvE,eAAO,MAAM,wBAAwB,GAAI,CAAC,SAAS,OAAO,GAAG,KAAK,EAChE,QAAQ,eAAe,EACvB,QAAQ,qBAAqB,EAC7B,UAAU,CAAC,KACV,IAAI,SAAS,CAAC,GAAG,cAAc,EAAE,GAAG,KAAK,EAoE3C,CAAA"}
1
+ {"version":3,"file":"buildGlobalFields.d.ts","sourceRoot":"","sources":["../../src/versions/buildGlobalFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AACtE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AAIvE,eAAO,MAAM,wBAAwB,GAAI,CAAC,SAAS,OAAO,GAAG,KAAK,EAChE,QAAQ,eAAe,EACvB,QAAQ,qBAAqB,EAC7B,UAAU,CAAC,KACV,IAAI,SAAS,CAAC,GAAG,cAAc,EAAE,GAAG,KAAK,EAkE3C,CAAA"}
@@ -1,5 +1,4 @@
1
1
  import { hasAutosaveEnabled, hasDraftsEnabled } from '../utilities/getVersionsConfig.js';
2
- import { versionSnapshotField } from './baseFields.js';
3
2
  export const buildVersionGlobalFields = (config, global, flatten)=>{
4
3
  const fields = [
5
4
  {
@@ -29,7 +28,6 @@ export const buildVersionGlobalFields = (config, global, flatten)=>{
29
28
  ];
30
29
  if (hasDraftsEnabled(global)) {
31
30
  if (config.localization) {
32
- fields.push(versionSnapshotField);
33
31
  fields.push({
34
32
  name: 'publishedLocale',
35
33
  type: 'select',
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/versions/buildGlobalFields.ts"],"sourcesContent":["import type { SanitizedConfig } from '../config/types.js'\nimport type { Field, FlattenedField } from '../fields/config/types.js'\nimport type { SanitizedGlobalConfig } from '../globals/config/types.js'\n\nimport { hasAutosaveEnabled, hasDraftsEnabled } from '../utilities/getVersionsConfig.js'\nimport { versionSnapshotField } from './baseFields.js'\n\nexport const buildVersionGlobalFields = <T extends boolean = false>(\n config: SanitizedConfig,\n global: SanitizedGlobalConfig,\n flatten?: T,\n): true extends T ? FlattenedField[] : Field[] => {\n const fields: FlattenedField[] = [\n {\n name: 'version',\n type: 'group',\n fields: global.fields,\n ...(flatten && {\n flattenedFields: global.flattenedFields,\n })!,\n },\n {\n name: 'createdAt',\n type: 'date',\n admin: {\n disabled: true,\n },\n index: true,\n },\n {\n name: 'updatedAt',\n type: 'date',\n admin: {\n disabled: true,\n },\n index: true,\n },\n ]\n\n if (hasDraftsEnabled(global)) {\n if (config.localization) {\n fields.push(versionSnapshotField)\n\n fields.push({\n name: 'publishedLocale',\n type: 'select',\n admin: {\n disabled: true,\n },\n index: true,\n options: config.localization.locales.map((locale) => {\n if (typeof locale === 'string') {\n return locale\n }\n\n return locale.code\n }),\n })\n }\n\n fields.push({\n name: 'latest',\n type: 'checkbox',\n admin: {\n disabled: true,\n },\n index: true,\n })\n\n if (hasAutosaveEnabled(global)) {\n fields.push({\n name: 'autosave',\n type: 'checkbox',\n index: true,\n })\n }\n }\n\n return fields as true extends T ? FlattenedField[] : Field[]\n}\n"],"names":["hasAutosaveEnabled","hasDraftsEnabled","versionSnapshotField","buildVersionGlobalFields","config","global","flatten","fields","name","type","flattenedFields","admin","disabled","index","localization","push","options","locales","map","locale","code"],"mappings":"AAIA,SAASA,kBAAkB,EAAEC,gBAAgB,QAAQ,oCAAmC;AACxF,SAASC,oBAAoB,QAAQ,kBAAiB;AAEtD,OAAO,MAAMC,2BAA2B,CACtCC,QACAC,QACAC;IAEA,MAAMC,SAA2B;QAC/B;YACEC,MAAM;YACNC,MAAM;YACNF,QAAQF,OAAOE,MAAM;YACrB,GAAID,WAAW;gBACbI,iBAAiBL,OAAOK,eAAe;YACzC,CAAC;QACH;QACA;YACEF,MAAM;YACNC,MAAM;YACNE,OAAO;gBACLC,UAAU;YACZ;YACAC,OAAO;QACT;QACA;YACEL,MAAM;YACNC,MAAM;YACNE,OAAO;gBACLC,UAAU;YACZ;YACAC,OAAO;QACT;KACD;IAED,IAAIZ,iBAAiBI,SAAS;QAC5B,IAAID,OAAOU,YAAY,EAAE;YACvBP,OAAOQ,IAAI,CAACb;YAEZK,OAAOQ,IAAI,CAAC;gBACVP,MAAM;gBACNC,MAAM;gBACNE,OAAO;oBACLC,UAAU;gBACZ;gBACAC,OAAO;gBACPG,SAASZ,OAAOU,YAAY,CAACG,OAAO,CAACC,GAAG,CAAC,CAACC;oBACxC,IAAI,OAAOA,WAAW,UAAU;wBAC9B,OAAOA;oBACT;oBAEA,OAAOA,OAAOC,IAAI;gBACpB;YACF;QACF;QAEAb,OAAOQ,IAAI,CAAC;YACVP,MAAM;YACNC,MAAM;YACNE,OAAO;gBACLC,UAAU;YACZ;YACAC,OAAO;QACT;QAEA,IAAIb,mBAAmBK,SAAS;YAC9BE,OAAOQ,IAAI,CAAC;gBACVP,MAAM;gBACNC,MAAM;gBACNI,OAAO;YACT;QACF;IACF;IAEA,OAAON;AACT,EAAC"}
1
+ {"version":3,"sources":["../../src/versions/buildGlobalFields.ts"],"sourcesContent":["import type { SanitizedConfig } from '../config/types.js'\nimport type { Field, FlattenedField } from '../fields/config/types.js'\nimport type { SanitizedGlobalConfig } from '../globals/config/types.js'\n\nimport { hasAutosaveEnabled, hasDraftsEnabled } from '../utilities/getVersionsConfig.js'\n\nexport const buildVersionGlobalFields = <T extends boolean = false>(\n config: SanitizedConfig,\n global: SanitizedGlobalConfig,\n flatten?: T,\n): true extends T ? FlattenedField[] : Field[] => {\n const fields: FlattenedField[] = [\n {\n name: 'version',\n type: 'group',\n fields: global.fields,\n ...(flatten && {\n flattenedFields: global.flattenedFields,\n })!,\n },\n {\n name: 'createdAt',\n type: 'date',\n admin: {\n disabled: true,\n },\n index: true,\n },\n {\n name: 'updatedAt',\n type: 'date',\n admin: {\n disabled: true,\n },\n index: true,\n },\n ]\n\n if (hasDraftsEnabled(global)) {\n if (config.localization) {\n fields.push({\n name: 'publishedLocale',\n type: 'select',\n admin: {\n disabled: true,\n },\n index: true,\n options: config.localization.locales.map((locale) => {\n if (typeof locale === 'string') {\n return locale\n }\n\n return locale.code\n }),\n })\n }\n\n fields.push({\n name: 'latest',\n type: 'checkbox',\n admin: {\n disabled: true,\n },\n index: true,\n })\n\n if (hasAutosaveEnabled(global)) {\n fields.push({\n name: 'autosave',\n type: 'checkbox',\n index: true,\n })\n }\n }\n\n return fields as true extends T ? FlattenedField[] : Field[]\n}\n"],"names":["hasAutosaveEnabled","hasDraftsEnabled","buildVersionGlobalFields","config","global","flatten","fields","name","type","flattenedFields","admin","disabled","index","localization","push","options","locales","map","locale","code"],"mappings":"AAIA,SAASA,kBAAkB,EAAEC,gBAAgB,QAAQ,oCAAmC;AAExF,OAAO,MAAMC,2BAA2B,CACtCC,QACAC,QACAC;IAEA,MAAMC,SAA2B;QAC/B;YACEC,MAAM;YACNC,MAAM;YACNF,QAAQF,OAAOE,MAAM;YACrB,GAAID,WAAW;gBACbI,iBAAiBL,OAAOK,eAAe;YACzC,CAAC;QACH;QACA;YACEF,MAAM;YACNC,MAAM;YACNE,OAAO;gBACLC,UAAU;YACZ;YACAC,OAAO;QACT;QACA;YACEL,MAAM;YACNC,MAAM;YACNE,OAAO;gBACLC,UAAU;YACZ;YACAC,OAAO;QACT;KACD;IAED,IAAIX,iBAAiBG,SAAS;QAC5B,IAAID,OAAOU,YAAY,EAAE;YACvBP,OAAOQ,IAAI,CAAC;gBACVP,MAAM;gBACNC,MAAM;gBACNE,OAAO;oBACLC,UAAU;gBACZ;gBACAC,OAAO;gBACPG,SAASZ,OAAOU,YAAY,CAACG,OAAO,CAACC,GAAG,CAAC,CAACC;oBACxC,IAAI,OAAOA,WAAW,UAAU;wBAC9B,OAAOA;oBACT;oBAEA,OAAOA,OAAOC,IAAI;gBACpB;YACF;QACF;QAEAb,OAAOQ,IAAI,CAAC;YACVP,MAAM;YACNC,MAAM;YACNE,OAAO;gBACLC,UAAU;YACZ;YACAC,OAAO;QACT;QAEA,IAAIZ,mBAAmBI,SAAS;YAC9BE,OAAOQ,IAAI,CAAC;gBACVP,MAAM;gBACNC,MAAM;gBACNI,OAAO;YACT;QACF;IACF;IAEA,OAAON;AACT,EAAC"}
@@ -0,0 +1,32 @@
1
+ import type { Field } from '../fields/config/types.js';
2
+ import type { SanitizedConfig } from '../index.js';
3
+ import type { JsonObject } from '../types/index.js';
4
+ type Args = {
5
+ config: SanitizedConfig;
6
+ /**
7
+ * The current main doc fetched with `locale: 'all'`.
8
+ * For collections, pass the result of `payload.db.findOne`.
9
+ * For globals, pass the result of `payload.db.findGlobal`.
10
+ */
11
+ currentDoc: JsonObject | null;
12
+ fields: Field[];
13
+ /**
14
+ * The locale being published (e.g. 'en').
15
+ */
16
+ locale: string;
17
+ /**
18
+ * The full locale-keyed result from `beforeChange` — used as the version data.
19
+ */
20
+ result: JsonObject;
21
+ };
22
+ /**
23
+ * Builds the data object to write to the main collection/global doc when publishing
24
+ * a single locale. The version row uses `result` as-is (all locales intact); the
25
+ * main doc must only contain previously-published locale data plus the new locale
26
+ * being published now.
27
+ *
28
+ * Returns the merged object (with `_status` set), ready for the DB write.
29
+ */
30
+ export declare function buildLocalizedPublishData({ config, currentDoc, fields, locale, result, }: Args): JsonObject;
31
+ export {};
32
+ //# sourceMappingURL=buildSingleLocalePublishData.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildSingleLocalePublishData.d.ts","sourceRoot":"","sources":["../../src/versions/buildSingleLocalePublishData.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAA;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAInD,KAAK,IAAI,GAAG;IACV,MAAM,EAAE,eAAe,CAAA;IACvB;;;;OAIG;IACH,UAAU,EAAE,UAAU,GAAG,IAAI,CAAA;IAC7B,MAAM,EAAE,KAAK,EAAE,CAAA;IACf;;OAEG;IACH,MAAM,EAAE,MAAM,CAAA;IACd;;OAEG;IACH,MAAM,EAAE,UAAU,CAAA;CACnB,CAAA;AAED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,EACxC,MAAM,EACN,UAAU,EACV,MAAM,EACN,MAAM,EACN,MAAM,GACP,EAAE,IAAI,GAAG,UAAU,CAkCnB"}
@@ -0,0 +1,37 @@
1
+ import { mergeLocalizedData } from '../utilities/mergeLocalizedData.js';
2
+ /**
3
+ * Builds the data object to write to the main collection/global doc when publishing
4
+ * a single locale. The version row uses `result` as-is (all locales intact); the
5
+ * main doc must only contain previously-published locale data plus the new locale
6
+ * being published now.
7
+ *
8
+ * Returns the merged object (with `_status` set), ready for the DB write.
9
+ */ export function buildLocalizedPublishData({ config, currentDoc, fields, locale, result }) {
10
+ const currentDocStatus = currentDoc?._status && typeof currentDoc._status === 'object' ? currentDoc._status : {};
11
+ // Only carry forward locales that were previously published. The main doc can contain
12
+ // stale draft-locale data written by the initial create (which always inserts into the
13
+ // main collection, even when draft:true). Restricting to published locales prevents that
14
+ // data from leaking into the published doc.
15
+ const previouslyPublishedLocales = Object.entries(currentDocStatus).filter(([, status])=>status === 'published').map(([lc])=>lc);
16
+ const merged = mergeLocalizedData({
17
+ configBlockReferences: config.blocks,
18
+ dataWithLocales: result,
19
+ docWithLocales: currentDoc ?? {},
20
+ fields,
21
+ localesToPreserve: previouslyPublishedLocales,
22
+ localesToUpdate: [
23
+ locale
24
+ ]
25
+ });
26
+ // Build the _status map: retain existing per-locale statuses and mark the
27
+ // published locale as 'published'.
28
+ const resultStatus = result._status && typeof result._status === 'object' && !Array.isArray(result._status) ? result._status : {};
29
+ const mergedStatus = {
30
+ ...currentDocStatus
31
+ };
32
+ mergedStatus[locale] = resultStatus[locale] ?? 'published';
33
+ merged._status = mergedStatus;
34
+ return merged;
35
+ }
36
+
37
+ //# sourceMappingURL=buildSingleLocalePublishData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/versions/buildSingleLocalePublishData.ts"],"sourcesContent":["import type { Field } from '../fields/config/types.js'\nimport type { SanitizedConfig } from '../index.js'\nimport type { JsonObject } from '../types/index.js'\n\nimport { mergeLocalizedData } from '../utilities/mergeLocalizedData.js'\n\ntype Args = {\n config: SanitizedConfig\n /**\n * The current main doc fetched with `locale: 'all'`.\n * For collections, pass the result of `payload.db.findOne`.\n * For globals, pass the result of `payload.db.findGlobal`.\n */\n currentDoc: JsonObject | null\n fields: Field[]\n /**\n * The locale being published (e.g. 'en').\n */\n locale: string\n /**\n * The full locale-keyed result from `beforeChange` — used as the version data.\n */\n result: JsonObject\n}\n\n/**\n * Builds the data object to write to the main collection/global doc when publishing\n * a single locale. The version row uses `result` as-is (all locales intact); the\n * main doc must only contain previously-published locale data plus the new locale\n * being published now.\n *\n * Returns the merged object (with `_status` set), ready for the DB write.\n */\nexport function buildLocalizedPublishData({\n config,\n currentDoc,\n fields,\n locale,\n result,\n}: Args): JsonObject {\n const currentDocStatus =\n currentDoc?._status && typeof currentDoc._status === 'object'\n ? (currentDoc._status as Record<string, unknown>)\n : {}\n\n // Only carry forward locales that were previously published. The main doc can contain\n // stale draft-locale data written by the initial create (which always inserts into the\n // main collection, even when draft:true). Restricting to published locales prevents that\n // data from leaking into the published doc.\n const previouslyPublishedLocales = Object.entries(currentDocStatus)\n .filter(([, status]) => status === 'published')\n .map(([lc]) => lc)\n\n const merged = mergeLocalizedData({\n configBlockReferences: config.blocks,\n dataWithLocales: result,\n docWithLocales: currentDoc ?? {},\n fields,\n localesToPreserve: previouslyPublishedLocales,\n localesToUpdate: [locale],\n })\n\n // Build the _status map: retain existing per-locale statuses and mark the\n // published locale as 'published'.\n const resultStatus =\n result._status && typeof result._status === 'object' && !Array.isArray(result._status)\n ? (result._status as Record<string, unknown>)\n : {}\n const mergedStatus: Record<string, unknown> = { ...currentDocStatus }\n mergedStatus[locale] = resultStatus[locale] ?? 'published'\n merged._status = mergedStatus\n\n return merged\n}\n"],"names":["mergeLocalizedData","buildLocalizedPublishData","config","currentDoc","fields","locale","result","currentDocStatus","_status","previouslyPublishedLocales","Object","entries","filter","status","map","lc","merged","configBlockReferences","blocks","dataWithLocales","docWithLocales","localesToPreserve","localesToUpdate","resultStatus","Array","isArray","mergedStatus"],"mappings":"AAIA,SAASA,kBAAkB,QAAQ,qCAAoC;AAqBvE;;;;;;;CAOC,GACD,OAAO,SAASC,0BAA0B,EACxCC,MAAM,EACNC,UAAU,EACVC,MAAM,EACNC,MAAM,EACNC,MAAM,EACD;IACL,MAAMC,mBACJJ,YAAYK,WAAW,OAAOL,WAAWK,OAAO,KAAK,WAChDL,WAAWK,OAAO,GACnB,CAAC;IAEP,sFAAsF;IACtF,uFAAuF;IACvF,yFAAyF;IACzF,4CAA4C;IAC5C,MAAMC,6BAA6BC,OAAOC,OAAO,CAACJ,kBAC/CK,MAAM,CAAC,CAAC,GAAGC,OAAO,GAAKA,WAAW,aAClCC,GAAG,CAAC,CAAC,CAACC,GAAG,GAAKA;IAEjB,MAAMC,SAAShB,mBAAmB;QAChCiB,uBAAuBf,OAAOgB,MAAM;QACpCC,iBAAiBb;QACjBc,gBAAgBjB,cAAc,CAAC;QAC/BC;QACAiB,mBAAmBZ;QACnBa,iBAAiB;YAACjB;SAAO;IAC3B;IAEA,0EAA0E;IAC1E,mCAAmC;IACnC,MAAMkB,eACJjB,OAAOE,OAAO,IAAI,OAAOF,OAAOE,OAAO,KAAK,YAAY,CAACgB,MAAMC,OAAO,CAACnB,OAAOE,OAAO,IAChFF,OAAOE,OAAO,GACf,CAAC;IACP,MAAMkB,eAAwC;QAAE,GAAGnB,gBAAgB;IAAC;IACpEmB,YAAY,CAACrB,OAAO,GAAGkB,YAAY,CAAClB,OAAO,IAAI;IAC/CW,OAAOR,OAAO,GAAGkB;IAEjB,OAAOV;AACT"}
@@ -11,11 +11,9 @@ type Args<T extends JsonObject = JsonObject> = {
11
11
  id?: number | string;
12
12
  operation?: 'create' | 'restoreVersion' | 'update';
13
13
  payload: Payload;
14
- publishSpecificLocale?: string;
15
14
  req?: PayloadRequest;
16
15
  returning?: boolean;
17
16
  select?: SelectType;
18
- snapshot?: any;
19
17
  unpublish?: boolean;
20
18
  };
21
19
  export declare function saveVersion<TData extends JsonObject = JsonObject>(args: {
@@ -1 +1 @@
1
- {"version":3,"file":"saveVersion.d.ts","sourceRoot":"","sources":["../../src/versions/saveVersion.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAC/E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AACvE,OAAO,KAAK,EAA8C,OAAO,EAAE,MAAM,aAAa,CAAA;AACtF,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAU/E,KAAK,IAAI,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU,IAAI;IAC7C,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,UAAU,CAAC,EAAE,yBAAyB,CAAA;IACtC,cAAc,EAAE,CAAC,CAAA;IACjB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,MAAM,CAAC,EAAE,qBAAqB,CAAA;IAC9B,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,QAAQ,GAAG,gBAAgB,GAAG,QAAQ,CAAA;IAClD,OAAO,EAAE,OAAO,CAAA;IAChB,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,GAAG,CAAC,EAAE,cAAc,CAAA;IACpB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,QAAQ,CAAC,EAAE,GAAG,CAAA;IACd,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB,CAAA;AAED,wBAAsB,WAAW,CAAC,KAAK,SAAS,UAAU,GAAG,UAAU,EACrE,IAAI,EAAE;IAAE,SAAS,EAAE,KAAK,CAAA;CAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GACvC,OAAO,CAAC,IAAI,CAAC,CAAA;AAChB,wBAAsB,WAAW,CAAC,KAAK,SAAS,UAAU,GAAG,UAAU,EACrE,IAAI,EAAE;IAAE,SAAS,EAAE,IAAI,CAAA;CAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GACtC,OAAO,CAAC,UAAU,CAAC,CAAA;AACtB,wBAAsB,WAAW,CAAC,KAAK,SAAS,UAAU,GAAG,UAAU,EACrE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,GACnC,OAAO,CAAC,UAAU,CAAC,CAAA"}
1
+ {"version":3,"file":"saveVersion.d.ts","sourceRoot":"","sources":["../../src/versions/saveVersion.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAC/E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AACvE,OAAO,KAAK,EAA8C,OAAO,EAAE,MAAM,aAAa,CAAA;AACtF,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAS/E,KAAK,IAAI,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU,IAAI;IAC7C,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,UAAU,CAAC,EAAE,yBAAyB,CAAA;IACtC,cAAc,EAAE,CAAC,CAAA;IACjB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,MAAM,CAAC,EAAE,qBAAqB,CAAA;IAC9B,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,QAAQ,GAAG,gBAAgB,GAAG,QAAQ,CAAA;IAClD,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,CAAC,EAAE,cAAc,CAAA;IACpB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB,CAAA;AAED,wBAAsB,WAAW,CAAC,KAAK,SAAS,UAAU,GAAG,UAAU,EACrE,IAAI,EAAE;IAAE,SAAS,EAAE,KAAK,CAAA;CAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GACvC,OAAO,CAAC,IAAI,CAAC,CAAA;AAChB,wBAAsB,WAAW,CAAC,KAAK,SAAS,UAAU,GAAG,UAAU,EACrE,IAAI,EAAE;IAAE,SAAS,EAAE,IAAI,CAAA;CAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GACtC,OAAO,CAAC,UAAU,CAAC,CAAA;AACtB,wBAAsB,WAAW,CAAC,KAAK,SAAS,UAAU,GAAG,UAAU,EACrE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,GACnC,OAAO,CAAC,UAAU,CAAC,CAAA"}
@@ -1,11 +1,10 @@
1
1
  import { deepCopyObjectSimple } from '../index.js';
2
- import { getVersionsMax } from '../utilities/getVersionsConfig.js';
2
+ import { getVersionsMax, hasLocalizeStatusEnabled } from '../utilities/getVersionsConfig.js';
3
3
  import { sanitizeInternalFields } from '../utilities/sanitizeInternalFields.js';
4
4
  import { getQueryDraftsSelect } from './drafts/getQueryDraftsSelect.js';
5
5
  import { enforceMaxVersions } from './enforceMaxVersions.js';
6
- import { saveSnapshot } from './saveSnapshot.js';
7
6
  import { updateLatestVersion } from './updateLatestVersion.js';
8
- export async function saveVersion({ id, autosave, collection, docWithLocales, draft, global, operation, payload, publishSpecificLocale, req, returning, select, snapshot, unpublish }) {
7
+ export async function saveVersion({ id, autosave, collection, docWithLocales, draft, global, operation, payload, req, returning, select, unpublish }) {
9
8
  let result;
10
9
  let createdNewVersion = false;
11
10
  const now = new Date().toISOString();
@@ -16,6 +15,16 @@ export async function saveVersion({ id, autosave, collection, docWithLocales, dr
16
15
  if (versionData._id) {
17
16
  delete versionData._id;
18
17
  }
18
+ // When localizeStatus is enabled, _status must be stored as a localized object.
19
+ // Callers like restoreVersion set it as a plain string — expand it here.
20
+ const entity = collection ?? global;
21
+ if (entity && payload.config.localization && hasLocalizeStatusEnabled(entity) && typeof versionData._status === 'string') {
22
+ const status = versionData._status;
23
+ versionData._status = Object.fromEntries(payload.config.localization.localeCodes.map((code)=>[
24
+ code,
25
+ status
26
+ ]));
27
+ }
19
28
  try {
20
29
  if (unpublish || autosave) {
21
30
  result = await updateLatestVersion({
@@ -37,7 +46,6 @@ export async function saveVersion({ id, autosave, collection, docWithLocales, dr
37
46
  createdAt: operation === 'restoreVersion' ? versionData.createdAt : now,
38
47
  globalSlug: undefined,
39
48
  parent: collection ? id : undefined,
40
- publishedLocale: publishSpecificLocale || undefined,
41
49
  req,
42
50
  returning,
43
51
  select: getQueryDraftsSelect({
@@ -54,19 +62,6 @@ export async function saveVersion({ id, autosave, collection, docWithLocales, dr
54
62
  createVersionArgs.globalSlug = global.slug;
55
63
  result = await payload.db.createGlobalVersion(createVersionArgs);
56
64
  }
57
- if (snapshot) {
58
- await saveSnapshot({
59
- id,
60
- autosave,
61
- collection,
62
- data: snapshot,
63
- global,
64
- payload,
65
- publishSpecificLocale,
66
- req,
67
- select
68
- });
69
- }
70
65
  }
71
66
  } catch (err) {
72
67
  let errorMessage;