@payloadcms/codemod 4.0.0-internal.cc18726 → 4.0.0-internal.cd47d20

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 (357) hide show
  1. package/README.md +92 -28
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +41 -27
  4. package/dist/cli.js.map +1 -1
  5. package/dist/cli.parseFlags.d.ts +14 -0
  6. package/dist/cli.parseFlags.d.ts.map +1 -1
  7. package/dist/cli.parseFlags.js +29 -2
  8. package/dist/cli.parseFlags.js.map +1 -1
  9. package/dist/registry.d.ts.map +1 -1
  10. package/dist/registry.js +14 -0
  11. package/dist/registry.js.map +1 -1
  12. package/dist/runbook/payload-v4-upgrade.md +55 -0
  13. package/dist/runbook/v4.mdx +2186 -0
  14. package/dist/transforms/add-override-access-true/basic.input.js +41 -0
  15. package/dist/transforms/add-override-access-true/basic.input.js.map +1 -0
  16. package/dist/transforms/add-override-access-true/basic.output.js +50 -0
  17. package/dist/transforms/add-override-access-true/basic.output.js.map +1 -0
  18. package/dist/transforms/add-override-access-true/comment-between-properties.input.js +11 -0
  19. package/dist/transforms/add-override-access-true/comment-between-properties.input.js.map +1 -0
  20. package/dist/transforms/add-override-access-true/comment-between-properties.output.js +12 -0
  21. package/dist/transforms/add-override-access-true/comment-between-properties.output.js.map +1 -0
  22. package/dist/transforms/add-override-access-true/index.d.ts +20 -0
  23. package/dist/transforms/add-override-access-true/index.d.ts.map +1 -0
  24. package/dist/transforms/add-override-access-true/index.js +208 -0
  25. package/dist/transforms/add-override-access-true/index.js.map +1 -0
  26. package/dist/transforms/add-override-access-true/javascript.input.d.ts +6 -0
  27. package/dist/transforms/add-override-access-true/javascript.input.d.ts.map +1 -0
  28. package/dist/transforms/add-override-access-true/javascript.input.js +24 -0
  29. package/dist/transforms/add-override-access-true/javascript.input.js.map +1 -0
  30. package/dist/transforms/add-override-access-true/javascript.output.d.ts +6 -0
  31. package/dist/transforms/add-override-access-true/javascript.output.d.ts.map +1 -0
  32. package/dist/transforms/add-override-access-true/javascript.output.js +26 -0
  33. package/dist/transforms/add-override-access-true/javascript.output.js.map +1 -0
  34. package/dist/transforms/add-override-access-true/non-matching.input.js +42 -0
  35. package/dist/transforms/add-override-access-true/non-matching.input.js.map +1 -0
  36. package/dist/transforms/add-override-access-true/non-matching.output.js +42 -0
  37. package/dist/transforms/add-override-access-true/non-matching.output.js.map +1 -0
  38. package/dist/transforms/add-override-access-true/single-line.input.js +13 -0
  39. package/dist/transforms/add-override-access-true/single-line.input.js.map +1 -0
  40. package/dist/transforms/add-override-access-true/single-line.output.js +17 -0
  41. package/dist/transforms/add-override-access-true/single-line.output.js.map +1 -0
  42. package/dist/transforms/add-override-access-true/trailing-comment.input.js +10 -0
  43. package/dist/transforms/add-override-access-true/trailing-comment.input.js.map +1 -0
  44. package/dist/transforms/add-override-access-true/trailing-comment.output.js +12 -0
  45. package/dist/transforms/add-override-access-true/trailing-comment.output.js.map +1 -0
  46. package/dist/transforms/migrate-aliased-exports/index.d.ts.map +1 -1
  47. package/dist/transforms/migrate-aliased-exports/index.js +6 -5
  48. package/dist/transforms/migrate-aliased-exports/index.js.map +1 -1
  49. package/dist/transforms/migrate-aliased-exports/request.input.js +6 -0
  50. package/dist/transforms/migrate-aliased-exports/request.input.js.map +1 -0
  51. package/dist/transforms/migrate-aliased-exports/request.output.js +5 -0
  52. package/dist/transforms/migrate-aliased-exports/request.output.js.map +1 -0
  53. package/dist/transforms/migrate-authorship-default/already-set.input.js +15 -0
  54. package/dist/transforms/migrate-authorship-default/already-set.input.js.map +1 -0
  55. package/dist/transforms/migrate-authorship-default/already-set.output.js +15 -0
  56. package/dist/transforms/migrate-authorship-default/already-set.output.js.map +1 -0
  57. package/dist/transforms/migrate-authorship-default/basic.input.js +16 -0
  58. package/dist/transforms/migrate-authorship-default/basic.input.js.map +1 -0
  59. package/dist/transforms/migrate-authorship-default/basic.output.js +18 -0
  60. package/dist/transforms/migrate-authorship-default/basic.output.js.map +1 -0
  61. package/dist/transforms/migrate-authorship-default/build-config.input.js +32 -0
  62. package/dist/transforms/migrate-authorship-default/build-config.input.js.map +1 -0
  63. package/dist/transforms/migrate-authorship-default/build-config.output.js +35 -0
  64. package/dist/transforms/migrate-authorship-default/build-config.output.js.map +1 -0
  65. package/dist/transforms/migrate-authorship-default/globals.input.js +16 -0
  66. package/dist/transforms/migrate-authorship-default/globals.input.js.map +1 -0
  67. package/dist/transforms/migrate-authorship-default/globals.output.js +17 -0
  68. package/dist/transforms/migrate-authorship-default/globals.output.js.map +1 -0
  69. package/dist/transforms/migrate-authorship-default/index.d.ts +11 -0
  70. package/dist/transforms/migrate-authorship-default/index.d.ts.map +1 -0
  71. package/dist/transforms/migrate-authorship-default/index.js +141 -0
  72. package/dist/transforms/migrate-authorship-default/index.js.map +1 -0
  73. package/dist/transforms/migrate-authorship-default/non-matching.input.js +18 -0
  74. package/dist/transforms/migrate-authorship-default/non-matching.input.js.map +1 -0
  75. package/dist/transforms/migrate-authorship-default/non-matching.output.js +18 -0
  76. package/dist/transforms/migrate-authorship-default/non-matching.output.js.map +1 -0
  77. package/dist/transforms/migrate-authorship-default/satisfies.input.js +11 -0
  78. package/dist/transforms/migrate-authorship-default/satisfies.input.js.map +1 -0
  79. package/dist/transforms/migrate-authorship-default/satisfies.output.js +13 -0
  80. package/dist/transforms/migrate-authorship-default/satisfies.output.js.map +1 -0
  81. package/dist/transforms/migrate-field-component-types/basic.input.js +8 -0
  82. package/dist/transforms/migrate-field-component-types/basic.input.js.map +1 -0
  83. package/dist/transforms/migrate-field-component-types/basic.output.js +8 -0
  84. package/dist/transforms/migrate-field-component-types/basic.output.js.map +1 -0
  85. package/dist/transforms/migrate-field-component-types/index.d.ts +3 -0
  86. package/dist/transforms/migrate-field-component-types/index.d.ts.map +1 -0
  87. package/dist/transforms/migrate-field-component-types/index.js +616 -0
  88. package/dist/transforms/migrate-field-component-types/index.js.map +1 -0
  89. package/dist/transforms/migrate-payload-request-creation/aliases.input.js +8 -0
  90. package/dist/transforms/migrate-payload-request-creation/aliases.input.js.map +1 -0
  91. package/dist/transforms/migrate-payload-request-creation/aliases.output.js +31 -0
  92. package/dist/transforms/migrate-payload-request-creation/aliases.output.js.map +1 -0
  93. package/dist/transforms/migrate-payload-request-creation/collision.input.js +9 -0
  94. package/dist/transforms/migrate-payload-request-creation/collision.input.js.map +1 -0
  95. package/dist/transforms/migrate-payload-request-creation/comments.input.js +9 -0
  96. package/dist/transforms/migrate-payload-request-creation/comments.input.js.map +1 -0
  97. package/dist/transforms/migrate-payload-request-creation/comments.output.js +34 -0
  98. package/dist/transforms/migrate-payload-request-creation/comments.output.js.map +1 -0
  99. package/dist/transforms/migrate-payload-request-creation/empty.input.js +5 -0
  100. package/dist/transforms/migrate-payload-request-creation/empty.input.js.map +1 -0
  101. package/dist/transforms/migrate-payload-request-creation/empty.output.js +7 -0
  102. package/dist/transforms/migrate-payload-request-creation/empty.output.js.map +1 -0
  103. package/dist/transforms/migrate-payload-request-creation/evaluation-order.input.js +10 -0
  104. package/dist/transforms/migrate-payload-request-creation/evaluation-order.input.js.map +1 -0
  105. package/dist/transforms/migrate-payload-request-creation/expression.input.js +8 -0
  106. package/dist/transforms/migrate-payload-request-creation/expression.input.js.map +1 -0
  107. package/dist/transforms/migrate-payload-request-creation/expression.output.js +8 -0
  108. package/dist/transforms/migrate-payload-request-creation/expression.output.js.map +1 -0
  109. package/dist/transforms/migrate-payload-request-creation/getters.input.js +52 -0
  110. package/dist/transforms/migrate-payload-request-creation/getters.input.js.map +1 -0
  111. package/dist/transforms/migrate-payload-request-creation/index.d.ts +3 -0
  112. package/dist/transforms/migrate-payload-request-creation/index.d.ts.map +1 -0
  113. package/dist/transforms/migrate-payload-request-creation/index.js +236 -0
  114. package/dist/transforms/migrate-payload-request-creation/index.js.map +1 -0
  115. package/dist/transforms/migrate-payload-request-creation/internal.input.js +6 -0
  116. package/dist/transforms/migrate-payload-request-creation/internal.input.js.map +1 -0
  117. package/dist/transforms/migrate-payload-request-creation/internal.output.js +6 -0
  118. package/dist/transforms/migrate-payload-request-creation/internal.output.js.map +1 -0
  119. package/dist/transforms/migrate-payload-request-creation/non-matching.input.js +5 -0
  120. package/dist/transforms/migrate-payload-request-creation/non-matching.input.js.map +1 -0
  121. package/dist/transforms/migrate-payload-request-creation/populated.input.js +7 -0
  122. package/dist/transforms/migrate-payload-request-creation/populated.input.js.map +1 -0
  123. package/dist/transforms/migrate-payload-request-creation/populated.output.js +30 -0
  124. package/dist/transforms/migrate-payload-request-creation/populated.output.js.map +1 -0
  125. package/dist/transforms/migrate-payload-request-creation/shadowed.input.js +7 -0
  126. package/dist/transforms/migrate-payload-request-creation/shadowed.input.js.map +1 -0
  127. package/dist/transforms/migrate-payload-request-creation/shadowed.output.js +9 -0
  128. package/dist/transforms/migrate-payload-request-creation/shadowed.output.js.map +1 -0
  129. package/dist/transforms/migrate-payload-request-creation/shorthand.input.js +12 -0
  130. package/dist/transforms/migrate-payload-request-creation/shorthand.input.js.map +1 -0
  131. package/dist/transforms/migrate-payload-request-creation/shorthand.output.js +12 -0
  132. package/dist/transforms/migrate-payload-request-creation/shorthand.output.js.map +1 -0
  133. package/dist/transforms/migrate-payload-request-creation/unsupported.input.js +9 -0
  134. package/dist/transforms/migrate-payload-request-creation/unsupported.input.js.map +1 -0
  135. package/dist/transforms/migrate-versions-default/index.js +5 -5
  136. package/dist/transforms/migrate-versions-default/index.js.map +1 -1
  137. package/dist/transforms/remove-default-locale-publish-option/all-value.input.js +13 -0
  138. package/dist/transforms/remove-default-locale-publish-option/all-value.input.js.map +1 -0
  139. package/dist/transforms/remove-default-locale-publish-option/basic.input.js +13 -0
  140. package/dist/transforms/remove-default-locale-publish-option/basic.input.js.map +1 -0
  141. package/dist/transforms/remove-default-locale-publish-option/basic.output.js +12 -0
  142. package/dist/transforms/remove-default-locale-publish-option/basic.output.js.map +1 -0
  143. package/dist/transforms/remove-default-locale-publish-option/dynamic.input.js +17 -0
  144. package/dist/transforms/remove-default-locale-publish-option/dynamic.input.js.map +1 -0
  145. package/dist/transforms/remove-default-locale-publish-option/index.d.ts +10 -0
  146. package/dist/transforms/remove-default-locale-publish-option/index.d.ts.map +1 -0
  147. package/dist/transforms/remove-default-locale-publish-option/index.js +103 -0
  148. package/dist/transforms/remove-default-locale-publish-option/index.js.map +1 -0
  149. package/dist/transforms/remove-default-locale-publish-option/no-match.input.js +10 -0
  150. package/dist/transforms/remove-default-locale-publish-option/no-match.input.js.map +1 -0
  151. package/dist/transforms/remove-default-locale-publish-option/no-match.output.js +10 -0
  152. package/dist/transforms/remove-default-locale-publish-option/no-match.output.js.map +1 -0
  153. package/dist/transforms/remove-default-locale-publish-option/reassigned.input.js +22 -0
  154. package/dist/transforms/remove-default-locale-publish-option/reassigned.input.js.map +1 -0
  155. package/dist/transforms/remove-default-locale-publish-option/shorthand.input.js +14 -0
  156. package/dist/transforms/remove-default-locale-publish-option/shorthand.input.js.map +1 -0
  157. package/dist/transforms/remove-default-locale-publish-option/shorthand.output.js +13 -0
  158. package/dist/transforms/remove-default-locale-publish-option/shorthand.output.js.map +1 -0
  159. package/dist/transforms/remove-publish-specific-locale/index.d.ts.map +1 -1
  160. package/dist/transforms/remove-publish-specific-locale/index.js.map +1 -1
  161. package/dist/transforms/remove-storage-always-insert-fields/aliased.input.js +11 -0
  162. package/dist/transforms/remove-storage-always-insert-fields/aliased.input.js.map +1 -0
  163. package/dist/transforms/remove-storage-always-insert-fields/aliased.output.js +10 -0
  164. package/dist/transforms/remove-storage-always-insert-fields/aliased.output.js.map +1 -0
  165. package/dist/transforms/remove-storage-always-insert-fields/basic.input.js +54 -0
  166. package/dist/transforms/remove-storage-always-insert-fields/basic.input.js.map +1 -0
  167. package/dist/transforms/remove-storage-always-insert-fields/basic.output.js +48 -0
  168. package/dist/transforms/remove-storage-always-insert-fields/basic.output.js.map +1 -0
  169. package/dist/transforms/remove-storage-always-insert-fields/index.d.ts +3 -0
  170. package/dist/transforms/remove-storage-always-insert-fields/index.d.ts.map +1 -0
  171. package/dist/transforms/remove-storage-always-insert-fields/index.js +71 -0
  172. package/dist/transforms/remove-storage-always-insert-fields/index.js.map +1 -0
  173. package/dist/transforms/remove-storage-always-insert-fields/no-match.input.js +27 -0
  174. package/dist/transforms/remove-storage-always-insert-fields/no-match.input.js.map +1 -0
  175. package/dist/transforms/remove-storage-always-insert-fields/no-match.output.js +27 -0
  176. package/dist/transforms/remove-storage-always-insert-fields/no-match.output.js.map +1 -0
  177. package/dist/transforms/remove-strict-draft-types/basic.input.js +28 -0
  178. package/dist/transforms/remove-strict-draft-types/basic.input.js.map +1 -0
  179. package/dist/transforms/remove-strict-draft-types/basic.output.js +24 -0
  180. package/dist/transforms/remove-strict-draft-types/basic.output.js.map +1 -0
  181. package/dist/transforms/remove-strict-draft-types/index.d.ts +3 -0
  182. package/dist/transforms/remove-strict-draft-types/index.d.ts.map +1 -0
  183. package/dist/transforms/remove-strict-draft-types/index.js +44 -0
  184. package/dist/transforms/remove-strict-draft-types/index.js.map +1 -0
  185. package/dist/transforms/remove-strict-draft-types/no-match.input.js +11 -0
  186. package/dist/transforms/remove-strict-draft-types/no-match.input.js.map +1 -0
  187. package/dist/transforms/remove-versions-true/index.js +4 -4
  188. package/dist/transforms/remove-versions-true/index.js.map +1 -1
  189. package/dist/upgrade/defaultTag.d.ts +9 -0
  190. package/dist/upgrade/defaultTag.d.ts.map +1 -0
  191. package/dist/upgrade/defaultTag.js +25 -0
  192. package/dist/upgrade/defaultTag.js.map +1 -0
  193. package/dist/upgrade/detectPackageManager.d.ts +8 -0
  194. package/dist/upgrade/detectPackageManager.d.ts.map +1 -0
  195. package/dist/upgrade/detectPackageManager.js +38 -0
  196. package/dist/upgrade/detectPackageManager.js.map +1 -0
  197. package/dist/upgrade/dispatch.d.ts +38 -0
  198. package/dist/upgrade/dispatch.d.ts.map +1 -0
  199. package/dist/upgrade/dispatch.js +132 -0
  200. package/dist/upgrade/dispatch.js.map +1 -0
  201. package/dist/upgrade/index.d.ts +25 -0
  202. package/dist/upgrade/index.d.ts.map +1 -0
  203. package/dist/upgrade/index.js +209 -0
  204. package/dist/upgrade/index.js.map +1 -0
  205. package/dist/upgrade/prompt.d.ts +14 -0
  206. package/dist/upgrade/prompt.d.ts.map +1 -0
  207. package/dist/upgrade/prompt.js +77 -0
  208. package/dist/upgrade/prompt.js.map +1 -0
  209. package/dist/upgrade/report.d.ts +21 -0
  210. package/dist/upgrade/report.d.ts.map +1 -0
  211. package/dist/upgrade/report.js +47 -0
  212. package/dist/upgrade/report.js.map +1 -0
  213. package/dist/upgrade/resolveVersions.d.ts +13 -0
  214. package/dist/upgrade/resolveVersions.d.ts.map +1 -0
  215. package/dist/upgrade/resolveVersions.js +55 -0
  216. package/dist/upgrade/resolveVersions.js.map +1 -0
  217. package/dist/upgrade/rewritePackageJson.d.ts +32 -0
  218. package/dist/upgrade/rewritePackageJson.d.ts.map +1 -0
  219. package/dist/upgrade/rewritePackageJson.js +123 -0
  220. package/dist/upgrade/rewritePackageJson.js.map +1 -0
  221. package/dist/upgrade/runInstall.d.ts +16 -0
  222. package/dist/upgrade/runInstall.d.ts.map +1 -0
  223. package/dist/upgrade/runInstall.js +17 -0
  224. package/dist/upgrade/runInstall.js.map +1 -0
  225. package/dist/upgrade/selectAgent.d.ts +45 -0
  226. package/dist/upgrade/selectAgent.d.ts.map +1 -0
  227. package/dist/upgrade/selectAgent.js +54 -0
  228. package/dist/upgrade/selectAgent.js.map +1 -0
  229. package/dist/upgrade/selfCommand.d.ts +13 -0
  230. package/dist/upgrade/selfCommand.d.ts.map +1 -0
  231. package/dist/upgrade/selfCommand.js +17 -0
  232. package/dist/upgrade/selfCommand.js.map +1 -0
  233. package/dist/upgrade/types.d.ts +47 -0
  234. package/dist/upgrade/types.d.ts.map +1 -0
  235. package/dist/upgrade/types.js +11 -0
  236. package/dist/upgrade/types.js.map +1 -0
  237. package/dist/utils/project.d.ts +4 -0
  238. package/dist/utils/project.d.ts.map +1 -0
  239. package/dist/utils/project.js +30 -0
  240. package/dist/utils/project.js.map +1 -0
  241. package/package.json +8 -4
  242. package/dist/cli.parseFlags.spec.d.ts +0 -2
  243. package/dist/cli.parseFlags.spec.d.ts.map +0 -1
  244. package/dist/cli.parseFlags.spec.js +0 -49
  245. package/dist/cli.parseFlags.spec.js.map +0 -1
  246. package/dist/runner.spec.d.ts +0 -2
  247. package/dist/runner.spec.d.ts.map +0 -1
  248. package/dist/runner.spec.js +0 -88
  249. package/dist/runner.spec.js.map +0 -1
  250. package/dist/transforms/example-noop/index.spec.d.ts +0 -2
  251. package/dist/transforms/example-noop/index.spec.d.ts.map +0 -1
  252. package/dist/transforms/example-noop/index.spec.js +0 -29
  253. package/dist/transforms/example-noop/index.spec.js.map +0 -1
  254. package/dist/transforms/globals-components-edit/index.spec.d.ts +0 -2
  255. package/dist/transforms/globals-components-edit/index.spec.d.ts.map +0 -1
  256. package/dist/transforms/globals-components-edit/index.spec.js +0 -37
  257. package/dist/transforms/globals-components-edit/index.spec.js.map +0 -1
  258. package/dist/transforms/migrate-after-operation-read/index.spec.d.ts +0 -2
  259. package/dist/transforms/migrate-after-operation-read/index.spec.d.ts.map +0 -1
  260. package/dist/transforms/migrate-after-operation-read/index.spec.js +0 -62
  261. package/dist/transforms/migrate-after-operation-read/index.spec.js.map +0 -1
  262. package/dist/transforms/migrate-aliased-exports/index.spec.d.ts +0 -2
  263. package/dist/transforms/migrate-aliased-exports/index.spec.d.ts.map +0 -1
  264. package/dist/transforms/migrate-aliased-exports/index.spec.js +0 -55
  265. package/dist/transforms/migrate-aliased-exports/index.spec.js.map +0 -1
  266. package/dist/transforms/migrate-azure-chunk-large-files/index.spec.d.ts +0 -2
  267. package/dist/transforms/migrate-azure-chunk-large-files/index.spec.d.ts.map +0 -1
  268. package/dist/transforms/migrate-azure-chunk-large-files/index.spec.js +0 -67
  269. package/dist/transforms/migrate-azure-chunk-large-files/index.spec.js.map +0 -1
  270. package/dist/transforms/migrate-block-references-to-blocks/index.spec.d.ts +0 -2
  271. package/dist/transforms/migrate-block-references-to-blocks/index.spec.d.ts.map +0 -1
  272. package/dist/transforms/migrate-block-references-to-blocks/index.spec.js +0 -45
  273. package/dist/transforms/migrate-block-references-to-blocks/index.spec.js.map +0 -1
  274. package/dist/transforms/migrate-build-script/index.spec.d.ts +0 -2
  275. package/dist/transforms/migrate-build-script/index.spec.d.ts.map +0 -1
  276. package/dist/transforms/migrate-build-script/index.spec.js +0 -81
  277. package/dist/transforms/migrate-build-script/index.spec.js.map +0 -1
  278. package/dist/transforms/migrate-db-types-subpath/index.spec.d.ts +0 -2
  279. package/dist/transforms/migrate-db-types-subpath/index.spec.d.ts.map +0 -1
  280. package/dist/transforms/migrate-db-types-subpath/index.spec.js +0 -46
  281. package/dist/transforms/migrate-db-types-subpath/index.spec.js.map +0 -1
  282. package/dist/transforms/migrate-disabled-fields/index.spec.d.ts +0 -2
  283. package/dist/transforms/migrate-disabled-fields/index.spec.d.ts.map +0 -1
  284. package/dist/transforms/migrate-disabled-fields/index.spec.js +0 -73
  285. package/dist/transforms/migrate-disabled-fields/index.spec.js.map +0 -1
  286. package/dist/transforms/migrate-document-title-context/index.spec.d.ts +0 -2
  287. package/dist/transforms/migrate-document-title-context/index.spec.d.ts.map +0 -1
  288. package/dist/transforms/migrate-document-title-context/index.spec.js +0 -86
  289. package/dist/transforms/migrate-document-title-context/index.spec.js.map +0 -1
  290. package/dist/transforms/migrate-force-select/index.spec.d.ts +0 -2
  291. package/dist/transforms/migrate-force-select/index.spec.d.ts.map +0 -1
  292. package/dist/transforms/migrate-force-select/index.spec.js +0 -107
  293. package/dist/transforms/migrate-force-select/index.spec.js.map +0 -1
  294. package/dist/transforms/migrate-hide-api-url/index.spec.d.ts +0 -2
  295. package/dist/transforms/migrate-hide-api-url/index.spec.d.ts.map +0 -1
  296. package/dist/transforms/migrate-hide-api-url/index.spec.js +0 -118
  297. package/dist/transforms/migrate-hide-api-url/index.spec.js.map +0 -1
  298. package/dist/transforms/migrate-import-export-hooks/index.spec.d.ts +0 -2
  299. package/dist/transforms/migrate-import-export-hooks/index.spec.d.ts.map +0 -1
  300. package/dist/transforms/migrate-import-export-hooks/index.spec.js +0 -65
  301. package/dist/transforms/migrate-import-export-hooks/index.spec.js.map +0 -1
  302. package/dist/transforms/migrate-list-view-select-api/index.spec.d.ts +0 -2
  303. package/dist/transforms/migrate-list-view-select-api/index.spec.d.ts.map +0 -1
  304. package/dist/transforms/migrate-list-view-select-api/index.spec.js +0 -37
  305. package/dist/transforms/migrate-list-view-select-api/index.spec.js.map +0 -1
  306. package/dist/transforms/migrate-next-generate-viewport-export/index.spec.d.ts +0 -2
  307. package/dist/transforms/migrate-next-generate-viewport-export/index.spec.d.ts.map +0 -1
  308. package/dist/transforms/migrate-next-generate-viewport-export/index.spec.js +0 -41
  309. package/dist/transforms/migrate-next-generate-viewport-export/index.spec.js.map +0 -1
  310. package/dist/transforms/migrate-next-subpath-exports/index.spec.d.ts +0 -2
  311. package/dist/transforms/migrate-next-subpath-exports/index.spec.d.ts.map +0 -1
  312. package/dist/transforms/migrate-next-subpath-exports/index.spec.js +0 -46
  313. package/dist/transforms/migrate-next-subpath-exports/index.spec.js.map +0 -1
  314. package/dist/transforms/migrate-slug-field/index.spec.d.ts +0 -2
  315. package/dist/transforms/migrate-slug-field/index.spec.d.ts.map +0 -1
  316. package/dist/transforms/migrate-slug-field/index.spec.js +0 -47
  317. package/dist/transforms/migrate-slug-field/index.spec.js.map +0 -1
  318. package/dist/transforms/migrate-storage-adapters-to-config/index.spec.d.ts +0 -2
  319. package/dist/transforms/migrate-storage-adapters-to-config/index.spec.d.ts.map +0 -1
  320. package/dist/transforms/migrate-storage-adapters-to-config/index.spec.js +0 -85
  321. package/dist/transforms/migrate-storage-adapters-to-config/index.spec.js.map +0 -1
  322. package/dist/transforms/migrate-versions-default/index.spec.d.ts +0 -2
  323. package/dist/transforms/migrate-versions-default/index.spec.d.ts.map +0 -1
  324. package/dist/transforms/migrate-versions-default/index.spec.js +0 -81
  325. package/dist/transforms/migrate-versions-default/index.spec.js.map +0 -1
  326. package/dist/transforms/remove-group-by-true/index.spec.d.ts +0 -2
  327. package/dist/transforms/remove-group-by-true/index.spec.d.ts.map +0 -1
  328. package/dist/transforms/remove-group-by-true/index.spec.js +0 -47
  329. package/dist/transforms/remove-group-by-true/index.spec.js.map +0 -1
  330. package/dist/transforms/remove-localize-status-config/index.spec.d.ts +0 -2
  331. package/dist/transforms/remove-localize-status-config/index.spec.d.ts.map +0 -1
  332. package/dist/transforms/remove-localize-status-config/index.spec.js +0 -38
  333. package/dist/transforms/remove-localize-status-config/index.spec.js.map +0 -1
  334. package/dist/transforms/remove-publish-specific-locale/index.spec.d.ts +0 -2
  335. package/dist/transforms/remove-publish-specific-locale/index.spec.d.ts.map +0 -1
  336. package/dist/transforms/remove-publish-specific-locale/index.spec.js +0 -47
  337. package/dist/transforms/remove-publish-specific-locale/index.spec.js.map +0 -1
  338. package/dist/transforms/remove-versions-true/index.spec.d.ts +0 -2
  339. package/dist/transforms/remove-versions-true/index.spec.d.ts.map +0 -1
  340. package/dist/transforms/remove-versions-true/index.spec.js +0 -38
  341. package/dist/transforms/remove-versions-true/index.spec.js.map +0 -1
  342. package/dist/transforms/rename-experimental-table-feature/index.spec.d.ts +0 -2
  343. package/dist/transforms/rename-experimental-table-feature/index.spec.d.ts.map +0 -1
  344. package/dist/transforms/rename-experimental-table-feature/index.spec.js +0 -54
  345. package/dist/transforms/rename-experimental-table-feature/index.spec.js.map +0 -1
  346. package/dist/transforms/rename-storage-adapters-to-storage/index.spec.d.ts +0 -2
  347. package/dist/transforms/rename-storage-adapters-to-storage/index.spec.d.ts.map +0 -1
  348. package/dist/transforms/rename-storage-adapters-to-storage/index.spec.js +0 -55
  349. package/dist/transforms/rename-storage-adapters-to-storage/index.spec.js.map +0 -1
  350. package/dist/transforms/rename-typescript-schema-to-json-schema/index.spec.d.ts +0 -2
  351. package/dist/transforms/rename-typescript-schema-to-json-schema/index.spec.d.ts.map +0 -1
  352. package/dist/transforms/rename-typescript-schema-to-json-schema/index.spec.js +0 -45
  353. package/dist/transforms/rename-typescript-schema-to-json-schema/index.spec.js.map +0 -1
  354. package/dist/utils/packageJson.spec.d.ts +0 -2
  355. package/dist/utils/packageJson.spec.d.ts.map +0 -1
  356. package/dist/utils/packageJson.spec.js +0 -41
  357. package/dist/utils/packageJson.spec.js.map +0 -1
package/README.md CHANGED
@@ -14,10 +14,66 @@ With no arguments, runs every registered transform against the current directory
14
14
 
15
15
  ### Flags
16
16
 
17
- - `--transform <name>` — run a single transform by name.
18
- - `--list` — print registered transforms.
19
- - `--dry` — analyze only; write nothing.
20
- - `--print` — print transformed sources to stdout instead of writing.
17
+ - `--transform <name>`: run a single transform by name.
18
+ - `--list`: print registered transforms.
19
+ - `--dry`: analyze only; write nothing.
20
+ - `--print`: print transformed sources to stdout instead of writing.
21
+
22
+ ## `upgrade` command
23
+
24
+ The `upgrade` command has three verbs.
25
+
26
+ ### `upgrade` (pick how to run it)
27
+
28
+ `npx @payloadcms/codemod upgrade` is the entry point. It detects installed coding-agent CLIs
29
+ (`claude`, `codex`) and asks how you want to run the full v3 -> v4 upgrade, Next.js 16 included:
30
+
31
+ - Hand the orchestration prompt to a detected agent. The agent runs the whole sequence, calling
32
+ `upgrade run` for the mechanical slice as one step.
33
+ - Run the mechanical steps here, the same work as `upgrade run`.
34
+ - Just print the prompt to run it yourself or paste it elsewhere.
35
+
36
+ Pin an agent with `--agent <claude|codex>` to skip the picker. When there is no TTY (CI), it prints
37
+ the prompt instead of prompting.
38
+
39
+ ### `upgrade run` (mechanical slice)
40
+
41
+ `npx @payloadcms/codemod upgrade run` performs the deterministic v3 -> v4 slice against the current
42
+ directory (run it from your project root):
43
+
44
+ 1. Resolves the current Payload version from the npm registry, using the dist-tag this CLI was installed under (`beta` if run as `@payloadcms/codemod@beta`, else `canary`; override with `--tag <dist-tag>`).
45
+ 2. Rewrites `package.json`: pins `payload` + every `@payloadcms/*` to that exact version in
46
+ lockstep, removes dependency overrides pinning them, converts their carets to exact, and writes
47
+ the TypeScript / `@types/node` / `engines.node` floors. The `@payloadcms/eslint-*` packages are
48
+ versioned independently, so they are set to `latest` rather than lockstep-pinned.
49
+ 3. Installs with your detected package manager.
50
+ 4. Runs every registered transform against the now-v4 tree.
51
+ 5. Prints a report and points you at the bundled runbook for the rest.
52
+
53
+ It does NOT upgrade Next.js. Payload v4 requires Next 16; run Next's own recommended agent
54
+ workflow (linked from the bundled runbook) to bump Next and migrate the code together. The report
55
+ prints the required Next target.
56
+
57
+ Flags:
58
+
59
+ - `--tag <dist-tag>`: dist-tag to resolve Payload versions from. Defaults to the dist-tag this CLI was installed under (`beta` when run as `@payloadcms/codemod@beta`, else `canary`).
60
+ - `--dry`: preview the `package.json` changes and planned steps; write and install nothing.
61
+ - `--force`: skip the dirty-git-tree warning.
62
+
63
+ ### `upgrade prompt` (print the prompt)
64
+
65
+ `npx @payloadcms/codemod upgrade prompt` prints the orchestration prompt to stdout and exits. It is
66
+ offline and stateless: it writes nothing and makes no network calls. The text is project-agnostic,
67
+ so pipe it to any agent and run it from the project root. This is the same prompt the `upgrade`
68
+ picker hands off, minus the detection and spawn.
69
+
70
+ The prompt sequences the upgrade (mechanical slice via `upgrade run`, then Next.js via Next's own
71
+ codemods and agent workflow, then regeneration, judgment work, and verification) and points at the
72
+ bundled runbook and migration guide for detail rather than restating them.
73
+
74
+ The mechanical-slice command inside the prompt re-invokes this CLI. A published install emits
75
+ `npx @payloadcms/codemod`; a source checkout emits `node <bin>` so followers run the local build.
76
+ Set `PAYLOAD_CODEMOD_COMMAND` to override the emitted token.
21
77
 
22
78
  ## How it works
23
79
 
@@ -25,30 +81,38 @@ The tool loads your project via [ts-morph](https://ts-morph.com/), using your `t
25
81
 
26
82
  ## Transforms
27
83
 
28
- - `migrate-list-view-select-api` — Removes `admin.enableListViewSelectAPI` from Collection Configs. The List View's Select API is the default in v4.
29
- - `migrate-disabled-fields` — migrates `field.admin.disableListColumn`, `disableListFilter`, `disableGroupBy`, `disableBulkEdit` and their equivalents on `imageSize.admin` into the consolidated `disabled` object form.
30
- - `globals-components-edit` — Globals: rename `admin.components.elements` to `admin.components.edit` and hoist `Description` to top-level `admin.components.Description` to match Collection conventions.
31
- - `migrate-force-select` — migrates `forceSelect: { ... }` on Collection/Global configs to a `select` function that augments the caller's `select` when present and returns `undefined` (preserving full-document reads) when not. Shallow values become a spread (`{ ...select, ... }`); nested values use `deepMergeSimple` from `payload/shared` (auto-imported) to preserve the previous deep-merge semantics. Non-literal values, sibling `select` already present, and unsupported member kinds are surfaced as notes for manual review.
32
- - `migrate-block-references-to-blocks` — renames blocks field `blockReferences` configs to `blocks`, and removes a sibling `blocks: []` placeholder when present. If a non-empty `blocks` sibling already exists, the transform leaves the field untouched and surfaces a note for manual review.
33
- - `migrate-hide-api-url` — migrates `admin.hideAPIURL: true` to `admin.components.views.edit.api.tab.condition: () => false` on collection and global configs.
34
- - `migrate-aliased-exports` — rewrites imports of types and utilities that used to be re-exported from `@payloadcms/ui` and `@payloadcms/next/utilities` to their canonical sources in `payload` / `payload/shared`.
35
- - `migrate-document-title-context` — migrates `title` and `setDocumentTitle` destructured from `useDocumentInfo()` to `useDocumentTitle()`. They were removed from `DocumentInfoContext` in v4 and now live on `DocumentTitleContext`.
36
- - `migrate-storage-adapters-to-config` — moves storage adapter factory calls (`s3Storage`, `gcsStorage`, `azureStorage`, `r2Storage`, `vercelBlobStorage`) from `plugins` to the new top-level `storage` array. Removes `plugins` if it becomes empty after the move. **Limitations:** aliased imports (e.g. `import { s3Storage as myS3 }`) are not detected; rename any aliases to the canonical factory name before running, or migrate those calls manually. The transform preserves AST structure but does not re-format output — run `prettier --write` (or your project's formatter) after applying.
37
- - `rename-storage-adapters-to-storage` — renames the top-level `storageAdapters` config property to `storage`. Skips any object that already has a `storage` property. Run this if you previously ran `migrate-storage-adapters-to-config` and need to update the property name.
38
- - `migrate-azure-chunk-large-files` — removes the `chunkLargeFiles` option from `azureStorage` `clientUploads` config. Chunked client uploads are the default in v4, so the flag no longer exists; `clientUploads: { chunkLargeFiles: true }` collapses to `clientUploads: true`. Surfaces a note when `chunkLargeFiles: false` was removed, since v4 can no longer disable chunking (and its broader CORS requirements apply).
39
- - `migrate-import-export-hooks` — migrates the deprecated `toCSV` and `fromCSV` field options in `custom['plugin-import-export']` to `hooks.beforeExport` and `hooks.beforeImport`. If a `hooks` object already exists it is merged into; if `hooks.beforeExport`/`hooks.beforeImport` already exist the deprecated sibling is dropped without overwriting. Review argument shapes after migration: `beforeExport` uses `siblingData` (not `row`) and `data` is the top-level document (previously `doc`).
40
- - `migrate-db-types-subpath` — rewrites imports from the removed `/types` subpath exports of `@payloadcms/drizzle`, `@payloadcms/db-postgres`, `@payloadcms/db-sqlite`, `@payloadcms/db-vercel-postgres`, and `@payloadcms/db-d1-sqlite` to their main entry points. Also handles re-export declarations and `declare module` augmentations.
41
- - `migrate-next-subpath-exports` — rewrites imports, re-exports, and string-literal component paths from the removed `@payloadcms/next/client`, `@payloadcms/next/rsc`, and `@payloadcms/next/templates` subpaths to their canonical `@payloadcms/ui` or `@payloadcms/ui/rsc` sources. After running, regenerate the import map with `payload generate:importmap`.
42
- - `migrate-next-generate-viewport-export` — adds a `generateViewport` export to app router layout files that already use Payload's shared Next.js layout, preserving Next.js viewport behavior without touching custom viewport implementations.
43
- - `migrate-lexical-is-html-element` — rewrites imports of the removed `isHTMLElement` utility from `@payloadcms/richtext-lexical` (and `/client`) to its canonical source, `lexical`, splitting it out of mixed imports and merging into an existing `lexical` import when present. Surfaces a note reminding you that `lexical` is now a required dependency (`pnpm add lexical`).
44
- - `migrate-after-operation-read` — rewrites `operation === 'read'` checks inside collection `afterOperation` hooks to handle the `find` and `findByID` operations (the deprecated `'read'` value was removed). Handles `===`/`!==`/`==`/`!=` against a destructured (or aliased) or property-accessed `operation` argument. Leaves `beforeOperation` (which still uses `'read'`) untouched, and surfaces notes for non-inline hooks and `switch` statements that need manual review.
45
- - `migrate-versions-default` — adds `versions: false` to every `CollectionConfig` or `GlobalConfig` object that does not already have a `versions` property. Preserves the previous opt-in behaviour now that `versions` defaults to `true` for both collections and globals. Detects the three common annotation forms: `: CollectionConfig`, `satisfies GlobalConfig`, and `as CollectionConfig`.
46
- - `remove-versions-true` — removes the now-redundant `versions: true` property from `CollectionConfig` and `GlobalConfig` objects. Only removes the bare boolean `true`; object-form configs (e.g. `versions: { drafts: true }`) are left untouched.
47
- - `remove-group-by-true` — removes `admin.groupBy` from `CollectionConfig` objects. The experimental `groupBy` flag has been removed; groupBy is now an always-available per-user UI preference.
48
- - `rename-typescript-schema-to-json-schema` — renames the `typescriptSchema` field-config property to `jsonSchema` (it always accepted JSON Schema, not TypeScript). Skips any object that already defines a `jsonSchema` sibling and surfaces it as a note for manual review.
49
- - `migrate-build-script` — rewrites the `build` npm script in `package.json` from `next build` to `payload build`, so the Import Map (and types) are generated before the Next.js build. Matches the `next build` invocation only (leaves `next build-storybook` and the like untouched) and is a no-op when `build` is already `payload build`.
50
- - `migrate-slug-field` — converts the removed experimental `slugField()` helper (imported from `payload`) into the native `{ type: 'slug' }` field, mapping `useAsSlug`/`fieldToUse`, `slugify`, `required`, `localized`, `disableUnique` (→ `unique: false`), and `position` (→ `admin.position`), and dropping the obsolete `checkboxName`. Removes the now-unused `slugField` import. Calls using `overrides` (or other unrecognized options) are left in place with a note for manual migration.
51
- - `rename-experimental-table-feature` — renames imports of `EXPERIMENTAL_TableFeature` from `@payloadcms/richtext-lexical` to `TableFeature` (the table feature is now stable) and updates all local usages, e.g. `EXPERIMENTAL_TableFeature()` call sites.
84
+ - `remove-strict-draft-types`: removes `typescript.strictDraftTypes` from inline config objects regardless of its value. Strict draft types are always enabled in v4. Preserves other TypeScript options; indirect or spread settings must be updated manually.
85
+ - `migrate-list-view-select-api`: Removes `admin.enableListViewSelectAPI` from Collection Configs. The List View's Select API is the default in v4.
86
+ - `migrate-disabled-fields`: migrates `field.admin.disableListColumn`, `disableListFilter`, `disableGroupBy`, `disableBulkEdit` and their equivalents on `imageSize.admin` into the consolidated `disabled` object form.
87
+ - `globals-components-edit`: Globals: rename `admin.components.elements` to `admin.components.edit` and hoist `Description` to top-level `admin.components.Description` to match Collection conventions.
88
+ - `migrate-force-select`: migrates `forceSelect: { ... }` on Collection/Global configs to a `select` function that augments the caller's `select` when present and returns `undefined` (preserving full-document reads) when not. Shallow values become a spread (`{ ...select, ... }`); nested values use `deepMergeSimple` from `payload/shared` (auto-imported) to preserve the previous deep-merge semantics. Non-literal values, sibling `select` already present, and unsupported member kinds are surfaced as notes for manual review.
89
+ - `migrate-field-component-types`: replaces field component aliases—including concrete fields, canonical generics, labels, descriptions, errors, diffs, and block row labels—with the corresponding props types wrapped in `React.FC`. Generic arguments are preserved. Explicit class components, re-exports, namespace references, and inline imports are left unchanged with notes for manual migration.
90
+ - `migrate-block-references-to-blocks`: renames blocks field `blockReferences` configs to `blocks`, and removes a sibling `blocks: []` placeholder when present. If a non-empty `blocks` sibling already exists, the transform leaves the field untouched and surfaces a note for manual review.
91
+ - `migrate-hide-api-url`: migrates `admin.hideAPIURL: true` to `admin.components.views.edit.api.tab.condition: () => false` on collection and global configs.
92
+ - `migrate-aliased-exports`: rewrites imports of types and utilities that used to be re-exported from `@payloadcms/ui` and `@payloadcms/next/utilities` to their canonical sources in `payload` / `payload/shared`.
93
+ - `migrate-payload-request-creation`: renames named request-helper and admin-context imports from `payload` and `payload/internal`. Calls migrate only with a plain identifier payload and either `{}` or an initialized local `const` options identifier whose type exposes all seven old option properties (or is `any`). The generated argument captures payload first and forwards only `context`, `depth`, `fallbackLocale`, `locale`, `req`, `urlSuffix`, and `user` through getters, preserving inherited getters, read order, and async rejection behavior. Existing `CreateLocalReqOptions` named imports from `payload` become options-only usages of `Omit<CreatePayloadRequestArgs, 'payload'>`; relative/private imports of that internal type require manual migration. Unsupported shapes, type usages, and collisions leave the affected binding unchanged with notes.
94
+ - `migrate-document-title-context`: migrates `title` and `setDocumentTitle` destructured from `useDocumentInfo()` to `useDocumentTitle()`. They were removed from `DocumentInfoContext` in v4 and now live on `DocumentTitleContext`.
95
+ - `migrate-storage-adapters-to-config`: moves storage adapter factory calls (`s3Storage`, `gcsStorage`, `azureStorage`, `r2Storage`, `vercelBlobStorage`) from `plugins` to the new top-level `storage` array. Removes `plugins` if it becomes empty after the move. **Limitations:** aliased imports (e.g. `import { s3Storage as myS3 }`) are not detected; rename any aliases to the canonical factory name before running, or migrate those calls manually. The transform preserves AST structure but does not re-format output. Run `prettier --write` (or your project's formatter) after applying.
96
+ - `rename-storage-adapters-to-storage`: renames the top-level `storageAdapters` config property to `storage`. Skips any object that already has a `storage` property. Run this if you previously ran `migrate-storage-adapters-to-config` and need to update the property name.
97
+ - `migrate-azure-chunk-large-files`: removes the `chunkLargeFiles` option from `azureStorage` `clientUploads` config. Chunked client uploads are the default in v4, so the flag no longer exists; `clientUploads: { chunkLargeFiles: true }` collapses to `clientUploads: true`. Surfaces a note when `chunkLargeFiles: false` was removed, since v4 can no longer disable chunking (and its broader CORS requirements apply).
98
+ - `remove-storage-always-insert-fields`: removes the obsolete `alwaysInsertFields` option from inline `cloudStoragePlugin`, `azureStorage`, `gcsStorage`, `r2Storage`, `s3Storage`, and `vercelBlobStorage` configs. The `prefix` field is now always inserted. Aliased named imports are supported; indirect or spread options must be updated manually.
99
+ - `migrate-import-export-hooks`: migrates the deprecated `toCSV` and `fromCSV` field options in `custom['plugin-import-export']` to `hooks.beforeExport` and `hooks.beforeImport`. If a `hooks` object already exists it is merged into; if `hooks.beforeExport`/`hooks.beforeImport` already exist the deprecated sibling is dropped without overwriting. Review argument shapes after migration: `beforeExport` uses `siblingData` (not `row`) and `data` is the top-level document (previously `doc`).
100
+ - `migrate-db-types-subpath`: rewrites imports from the removed `/types` subpath exports of `@payloadcms/drizzle`, `@payloadcms/db-postgres`, `@payloadcms/db-sqlite`, `@payloadcms/db-vercel-postgres`, and `@payloadcms/db-d1-sqlite` to their main entry points. Also handles re-export declarations and `declare module` augmentations.
101
+ - `migrate-next-subpath-exports`: rewrites imports, re-exports, and string-literal component paths from the removed `@payloadcms/next/client`, `@payloadcms/next/rsc`, and `@payloadcms/next/templates` subpaths to their canonical `@payloadcms/ui` or `@payloadcms/ui/rsc` sources. After running, regenerate the import map with `payload generate:importmap`.
102
+ - `migrate-next-generate-viewport-export`: adds a `generateViewport` export to app router layout files that already use Payload's shared Next.js layout, preserving Next.js viewport behavior without touching custom viewport implementations.
103
+ - `migrate-after-operation-read`: rewrites `operation === 'read'` checks inside collection `afterOperation` hooks to handle the `find` and `findByID` operations (the deprecated `'read'` value was removed). Handles `===`/`!==`/`==`/`!=` against a destructured (or aliased) or property-accessed `operation` argument. Leaves `beforeOperation` (which still uses `'read'`) untouched, and surfaces notes for non-inline hooks and `switch` statements that need manual review.
104
+ - `migrate-versions-default`: adds `versions: false` to every `CollectionConfig` or `GlobalConfig` object that does not already have a `versions` property. Preserves the previous opt-in behaviour now that `versions` defaults to `true` for both collections and globals. Detects the three common annotation forms: `: CollectionConfig`, `satisfies GlobalConfig`, and `as CollectionConfig`.
105
+ - `migrate-authorship-default`: adds `authorship: false` to every `CollectionConfig` or `GlobalConfig` object that does not already have an `authorship` property. Preserves the previous behaviour now that authorship tracking (`createdBy` / `updatedBy`) is enabled by default for both collections and globals. Detects the three common annotation forms: `: CollectionConfig`, `satisfies GlobalConfig`, and `as CollectionConfig`.
106
+ - `remove-versions-true`: removes the now-redundant `versions: true` property from `CollectionConfig` and `GlobalConfig` objects. Only removes the bare boolean `true`; object-form configs (e.g. `versions: { drafts: true }`) are left untouched.
107
+ - `add-override-access-true`: adds an explicit `overrideAccess: true` to Local API calls (`payload.find(...)`, `req.payload.create(...)`, `payload.jobs.run()`, and the rest) that omit it, preserving the Payload 3 default of skipping access control now that Payload 4 changes the default to `false`. Detection is syntactic so it works on JavaScript projects with no `tsconfig.json`. Deliberately never touches internal operations such as `findOperation(...)`, where a missing value meant `false` and inserting `true` would disable access control. Skips `resetPassword` (no destructuring default to preserve), calls whose argument object contains a spread, and non-Payload receivers. Review each inserted `true` and switch to `false` wherever the operation acts on behalf of a user.
108
+ - `remove-group-by-true`: removes `admin.groupBy` from `CollectionConfig` objects. The experimental `groupBy` flag has been removed; groupBy is now an always-available per-user UI preference.
109
+ - `remove-default-locale-publish-option`: removes `localization.defaultLocalePublishOption` from Payload configs. The Admin UI Publish button now always defaults to publishing the active locale when localized fields exist, with "Publish all locales" available as a secondary dropdown option. Surfaces a note when the removed value was `'all'`, since that combination previously changed the default and now has no config equivalent.
110
+ - `remove-localize-status-config`: removes `localizeStatus: true` from `versions.drafts` objects and `experimental.localizeStatus: true` from the root Payload config. Per-locale status is now automatic when localization is configured and localized fields exist; an explicit `localizeStatus: false` opt-out is preserved.
111
+ - `remove-publish-specific-locale`: removes `publishSpecificLocale` from `payload.update()` and `payload.updateGlobal()` call-site options. If the options object lacks a `locale` the property is renamed to `locale` so the same value is preserved; otherwise it is dropped.
112
+ - `rename-typescript-schema-to-json-schema`: renames the `typescriptSchema` field-config property to `jsonSchema` (it always accepted JSON Schema, not TypeScript). Skips any object that already defines a `jsonSchema` sibling and surfaces it as a note for manual review.
113
+ - `migrate-build-script`: rewrites the `build` npm script in `package.json` from `next build` to `payload build`, so the Import Map (and types) are generated before the Next.js build. Matches the `next build` invocation only (leaves `next build-storybook` and the like untouched) and is a no-op when `build` is already `payload build`.
114
+ - `migrate-slug-field`: converts the removed experimental `slugField()` helper (imported from `payload`) into the native `{ type: 'slug' }` field, mapping `useAsSlug`/`fieldToUse`, `slugify`, `required`, `localized`, `disableUnique` (→ `unique: false`), and `position` (→ `admin.position`), and dropping the obsolete `checkboxName`. Removes the now-unused `slugField` import. Calls using `overrides` (or other unrecognized options) are left in place with a note for manual migration.
115
+ - `rename-experimental-table-feature`: renames imports of `EXPERIMENTAL_TableFeature` from `@payloadcms/richtext-lexical` to `TableFeature` (the table feature is now stable) and updates all local usages, e.g. `EXPERIMENTAL_TableFeature()` call sites.
52
116
 
53
117
  ## Contributing
54
118
 
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAaA,wBAAsB,IAAI,CAAC,IAAI,GAAE,MAAM,EAA0B,GAAG,OAAO,CAAC,IAAI,CAAC,CA6DhF"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAmBA,wBAAsB,IAAI,CAAC,IAAI,GAAE,MAAM,EAA0B,GAAG,OAAO,CAAC,IAAI,CAAC,CAyFhF"}
package/dist/cli.js CHANGED
@@ -1,12 +1,51 @@
1
- /* eslint-disable no-console */ import { existsSync, writeFileSync } from 'node:fs';
1
+ /* eslint-disable no-console */ import { writeFileSync } from 'node:fs';
2
2
  import { resolve } from 'node:path';
3
- import { IndentationText, Project, QuoteKind } from 'ts-morph';
4
3
  import { parseFlags } from './cli.parseFlags.js';
5
4
  import { transforms as registry } from './registry.js';
6
5
  import { runTransforms } from './runner.js';
6
+ import { runDispatch } from './upgrade/dispatch.js';
7
+ import { runUpgrade } from './upgrade/index.js';
8
+ import { renderUpgradePrompt } from './upgrade/prompt.js';
9
+ import { resolveSelfCommand } from './upgrade/selfCommand.js';
7
10
  import { loadPackageJsons, serializePackageJson } from './utils/packageJson.js';
11
+ import { loadProject } from './utils/project.js';
8
12
  export async function main(argv = process.argv.slice(2)) {
9
13
  const flags = parseFlags(argv);
14
+ if (flags.command === 'upgrade') {
15
+ if (flags.upgrade === 'prompt') {
16
+ console.log(renderUpgradePrompt({
17
+ command: resolveSelfCommand()
18
+ }));
19
+ return;
20
+ }
21
+ if (flags.upgrade === 'run') {
22
+ const { failed } = await runUpgrade({
23
+ flags: {
24
+ dry: flags.dry,
25
+ force: flags.force,
26
+ tag: flags.tag
27
+ },
28
+ path: flags.path
29
+ });
30
+ if (failed) {
31
+ process.exitCode = 1;
32
+ }
33
+ return;
34
+ }
35
+ const { failed } = await runDispatch({
36
+ agentFlag: flags.agent,
37
+ path: flags.path,
38
+ upgradeFlags: {
39
+ dry: flags.dry,
40
+ force: flags.force,
41
+ tag: flags.tag
42
+ }
43
+ });
44
+ if (failed) {
45
+ process.exitCode = 1;
46
+ }
47
+ return;
48
+ }
10
49
  if (flags.list) {
11
50
  printList();
12
51
  return;
@@ -71,31 +110,6 @@ function printList() {
71
110
  console.log(`${t.name} ${t.description}`);
72
111
  }
73
112
  }
74
- function loadProject(path) {
75
- const manipulationSettings = {
76
- indentationText: IndentationText.TwoSpaces,
77
- quoteKind: QuoteKind.Single,
78
- useTrailingCommas: true
79
- };
80
- const tsconfigPath = resolve(path, 'tsconfig.json');
81
- if (existsSync(tsconfigPath)) {
82
- return new Project({
83
- manipulationSettings,
84
- tsConfigFilePath: tsconfigPath
85
- });
86
- }
87
- const project = new Project({
88
- manipulationSettings
89
- });
90
- project.addSourceFilesAtPaths([
91
- `${path}/**/*.{ts,tsx,js,jsx}`,
92
- '!**/node_modules/**',
93
- '!**/dist/**',
94
- '!**/.next/**',
95
- '!**/build/**'
96
- ]);
97
- return project;
98
- }
99
113
  function snapshotProject(project) {
100
114
  return new Map(project.getSourceFiles().map((file)=>[
101
115
  file.getFilePath(),
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli.ts"],"sourcesContent":["/* eslint-disable no-console */\nimport { existsSync, writeFileSync } from 'node:fs'\nimport { resolve } from 'node:path'\nimport { IndentationText, Project, QuoteKind } from 'ts-morph'\n\nimport type { TransformRunResult } from './runner.js'\nimport type { Transform } from './types.js'\n\nimport { parseFlags } from './cli.parseFlags.js'\nimport { transforms as registry } from './registry.js'\nimport { runTransforms } from './runner.js'\nimport { loadPackageJsons, serializePackageJson } from './utils/packageJson.js'\n\nexport async function main(argv: string[] = process.argv.slice(2)): Promise<void> {\n const flags = parseFlags(argv)\n\n if (flags.list) {\n printList()\n return\n }\n\n const selected = selectTransforms(registry, flags.transform)\n if (selected.length === 0) {\n console.error(`No transforms matched${flags.transform ? ` \"${flags.transform}\"` : ''}.`)\n process.exitCode = 1\n return\n }\n\n const project = loadProject(resolve(flags.path))\n const snapshot = snapshotProject(project)\n\n const packageJsons = loadPackageJsons(resolve(flags.path))\n\n const { failed, results } = await runTransforms({\n // Shares the same `data` reference, so transform mutations are visible\n // below for change detection (do not clone here).\n packageJsons: packageJsons.map(({ data, path }) => ({ data, path })),\n project,\n transforms: selected,\n })\n\n const changed = project\n .getSourceFiles()\n .filter((file) => snapshot.get(file.getFilePath()) !== file.getFullText())\n\n const changedPackageJsons = packageJsons.filter(\n (pkg) => serializePackageJson(pkg.data, pkg.originalText) !== pkg.originalText,\n )\n\n if (flags.print) {\n if (changed.length === 0 && changedPackageJsons.length === 0) {\n console.log('(no files changed)')\n } else {\n for (const file of changed) {\n console.log(`// ${file.getFilePath()}`)\n console.log(file.getFullText())\n }\n for (const pkg of changedPackageJsons) {\n console.log(`// ${pkg.path}`)\n console.log(serializePackageJson(pkg.data, pkg.originalText))\n }\n }\n } else if (!flags.dry) {\n await Promise.all(changed.map((file) => file.save()))\n for (const pkg of changedPackageJsons) {\n writeFileSync(pkg.path, serializePackageJson(pkg.data, pkg.originalText))\n }\n }\n\n printSummary(results)\n\n if (failed) {\n process.exitCode = 1\n }\n}\n\nfunction selectTransforms(available: Transform[], name: string | undefined): Transform[] {\n if (!name) {\n return available\n }\n return available.filter((t) => t.name === name)\n}\n\nfunction printList(): void {\n if (registry.length === 0) {\n console.log('No transforms registered.')\n return\n }\n for (const t of registry) {\n console.log(`${t.name} ${t.description}`)\n }\n}\n\nfunction loadProject(path: string): Project {\n const manipulationSettings = {\n indentationText: IndentationText.TwoSpaces,\n quoteKind: QuoteKind.Single,\n useTrailingCommas: true,\n }\n const tsconfigPath = resolve(path, 'tsconfig.json')\n if (existsSync(tsconfigPath)) {\n return new Project({ manipulationSettings, tsConfigFilePath: tsconfigPath })\n }\n const project = new Project({ manipulationSettings })\n project.addSourceFilesAtPaths([\n `${path}/**/*.{ts,tsx,js,jsx}`,\n '!**/node_modules/**',\n '!**/dist/**',\n '!**/.next/**',\n '!**/build/**',\n ])\n return project\n}\n\nfunction snapshotProject(project: Project): Map<string, string> {\n return new Map(project.getSourceFiles().map((file) => [file.getFilePath(), file.getFullText()]))\n}\n\nfunction printSummary(results: TransformRunResult[]): void {\n console.log('')\n console.log('Codemod summary:')\n for (const r of results) {\n if (r.error) {\n console.log(` [FAIL] ${r.name} — ${r.error.message}`)\n continue\n }\n console.log(` [ok] ${r.name} — ${r.filesChanged.length} file(s) changed`)\n for (const note of r.notes ?? []) {\n console.log(` note: ${note}`)\n }\n }\n}\n"],"names":["existsSync","writeFileSync","resolve","IndentationText","Project","QuoteKind","parseFlags","transforms","registry","runTransforms","loadPackageJsons","serializePackageJson","main","argv","process","slice","flags","list","printList","selected","selectTransforms","transform","length","console","error","exitCode","project","loadProject","path","snapshot","snapshotProject","packageJsons","failed","results","map","data","changed","getSourceFiles","filter","file","get","getFilePath","getFullText","changedPackageJsons","pkg","originalText","print","log","dry","Promise","all","save","printSummary","available","name","t","description","manipulationSettings","indentationText","TwoSpaces","quoteKind","Single","useTrailingCommas","tsconfigPath","tsConfigFilePath","addSourceFilesAtPaths","Map","r","message","filesChanged","note","notes"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/cli.ts"],"sourcesContent":["import type { Project } from 'ts-morph'\n\n/* eslint-disable no-console */\nimport { writeFileSync } from 'node:fs'\nimport { resolve } from 'node:path'\n\nimport type { TransformRunResult } from './runner.js'\nimport type { Transform } from './types.js'\n\nimport { parseFlags } from './cli.parseFlags.js'\nimport { transforms as registry } from './registry.js'\nimport { runTransforms } from './runner.js'\nimport { runDispatch } from './upgrade/dispatch.js'\nimport { runUpgrade } from './upgrade/index.js'\nimport { renderUpgradePrompt } from './upgrade/prompt.js'\nimport { resolveSelfCommand } from './upgrade/selfCommand.js'\nimport { loadPackageJsons, serializePackageJson } from './utils/packageJson.js'\nimport { loadProject } from './utils/project.js'\n\nexport async function main(argv: string[] = process.argv.slice(2)): Promise<void> {\n const flags = parseFlags(argv)\n\n if (flags.command === 'upgrade') {\n if (flags.upgrade === 'prompt') {\n console.log(renderUpgradePrompt({ command: resolveSelfCommand() }))\n return\n }\n\n if (flags.upgrade === 'run') {\n const { failed } = await runUpgrade({\n flags: { dry: flags.dry, force: flags.force, tag: flags.tag },\n path: flags.path,\n })\n if (failed) {\n process.exitCode = 1\n }\n return\n }\n\n const { failed } = await runDispatch({\n agentFlag: flags.agent,\n path: flags.path,\n upgradeFlags: { dry: flags.dry, force: flags.force, tag: flags.tag },\n })\n if (failed) {\n process.exitCode = 1\n }\n return\n }\n\n if (flags.list) {\n printList()\n return\n }\n\n const selected = selectTransforms(registry, flags.transform)\n if (selected.length === 0) {\n console.error(`No transforms matched${flags.transform ? ` \"${flags.transform}\"` : ''}.`)\n process.exitCode = 1\n return\n }\n\n const project = loadProject(resolve(flags.path))\n const snapshot = snapshotProject(project)\n\n const packageJsons = loadPackageJsons(resolve(flags.path))\n\n const { failed, results } = await runTransforms({\n // Shares the same `data` reference, so transform mutations are visible\n // below for change detection (do not clone here).\n packageJsons: packageJsons.map(({ data, path }) => ({ data, path })),\n project,\n transforms: selected,\n })\n\n const changed = project\n .getSourceFiles()\n .filter((file) => snapshot.get(file.getFilePath()) !== file.getFullText())\n\n const changedPackageJsons = packageJsons.filter(\n (pkg) => serializePackageJson(pkg.data, pkg.originalText) !== pkg.originalText,\n )\n\n if (flags.print) {\n if (changed.length === 0 && changedPackageJsons.length === 0) {\n console.log('(no files changed)')\n } else {\n for (const file of changed) {\n console.log(`// ${file.getFilePath()}`)\n console.log(file.getFullText())\n }\n for (const pkg of changedPackageJsons) {\n console.log(`// ${pkg.path}`)\n console.log(serializePackageJson(pkg.data, pkg.originalText))\n }\n }\n } else if (!flags.dry) {\n await Promise.all(changed.map((file) => file.save()))\n for (const pkg of changedPackageJsons) {\n writeFileSync(pkg.path, serializePackageJson(pkg.data, pkg.originalText))\n }\n }\n\n printSummary(results)\n\n if (failed) {\n process.exitCode = 1\n }\n}\n\nfunction selectTransforms(available: Transform[], name: string | undefined): Transform[] {\n if (!name) {\n return available\n }\n return available.filter((t) => t.name === name)\n}\n\nfunction printList(): void {\n if (registry.length === 0) {\n console.log('No transforms registered.')\n return\n }\n for (const t of registry) {\n console.log(`${t.name} ${t.description}`)\n }\n}\n\nfunction snapshotProject(project: Project): Map<string, string> {\n return new Map(project.getSourceFiles().map((file) => [file.getFilePath(), file.getFullText()]))\n}\n\nfunction printSummary(results: TransformRunResult[]): void {\n console.log('')\n console.log('Codemod summary:')\n for (const r of results) {\n if (r.error) {\n console.log(` [FAIL] ${r.name} — ${r.error.message}`)\n continue\n }\n console.log(` [ok] ${r.name} — ${r.filesChanged.length} file(s) changed`)\n for (const note of r.notes ?? []) {\n console.log(` note: ${note}`)\n }\n }\n}\n"],"names":["writeFileSync","resolve","parseFlags","transforms","registry","runTransforms","runDispatch","runUpgrade","renderUpgradePrompt","resolveSelfCommand","loadPackageJsons","serializePackageJson","loadProject","main","argv","process","slice","flags","command","upgrade","console","log","failed","dry","force","tag","path","exitCode","agentFlag","agent","upgradeFlags","list","printList","selected","selectTransforms","transform","length","error","project","snapshot","snapshotProject","packageJsons","results","map","data","changed","getSourceFiles","filter","file","get","getFilePath","getFullText","changedPackageJsons","pkg","originalText","print","Promise","all","save","printSummary","available","name","t","description","Map","r","message","filesChanged","note","notes"],"mappings":"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"}
@@ -1,9 +1,23 @@
1
+ export type CliCommand = 'upgrade';
2
+ /**
3
+ * The three `upgrade` verbs:
4
+ * - `dispatch` (bare `upgrade`): interactive picker to hand the orchestration
5
+ * prompt to a coding agent, or print it.
6
+ * - `run` (`upgrade run`): the deterministic mechanical slice.
7
+ * - `prompt` (`upgrade prompt`): print the orchestration prompt to stdout.
8
+ */
9
+ export type UpgradeSubcommand = 'dispatch' | 'prompt' | 'run';
1
10
  export type CliFlags = {
11
+ agent?: string;
12
+ command?: CliCommand;
2
13
  dry: boolean;
14
+ force: boolean;
3
15
  list: boolean;
4
16
  path: string;
5
17
  print: boolean;
18
+ tag?: string;
6
19
  transform?: string;
20
+ upgrade?: UpgradeSubcommand;
7
21
  };
8
22
  export declare function parseFlags(argv: string[]): CliFlags;
9
23
  //# sourceMappingURL=cli.parseFlags.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cli.parseFlags.d.ts","sourceRoot":"","sources":["../src/cli.parseFlags.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,QAAQ,GAAG;IACrB,GAAG,EAAE,OAAO,CAAA;IACZ,IAAI,EAAE,OAAO,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,OAAO,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,QAAQ,CAoBnD"}
1
+ {"version":3,"file":"cli.parseFlags.d.ts","sourceRoot":"","sources":["../src/cli.parseFlags.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,UAAU,GAAG,SAAS,CAAA;AAElC;;;;;;GAMG;AACH,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,QAAQ,GAAG,KAAK,CAAA;AAE7D,MAAM,MAAM,QAAQ,GAAG;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,UAAU,CAAA;IACpB,GAAG,EAAE,OAAO,CAAA;IACZ,KAAK,EAAE,OAAO,CAAA;IACd,IAAI,EAAE,OAAO,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,OAAO,CAAA;IACd,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,iBAAiB,CAAA;CAC5B,CAAA;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,QAAQ,CAmCnD"}
@@ -4,6 +4,9 @@ export function parseFlags(argv) {
4
4
  allowPositionals: true,
5
5
  args: argv,
6
6
  options: {
7
+ agent: {
8
+ type: 'string'
9
+ },
7
10
  dry: {
8
11
  type: 'boolean',
9
12
  default: false
@@ -12,6 +15,10 @@ export function parseFlags(argv) {
12
15
  type: 'boolean',
13
16
  default: false
14
17
  },
18
+ force: {
19
+ type: 'boolean',
20
+ default: false
21
+ },
15
22
  list: {
16
23
  type: 'boolean',
17
24
  default: false
@@ -20,18 +27,38 @@ export function parseFlags(argv) {
20
27
  type: 'boolean',
21
28
  default: false
22
29
  },
30
+ tag: {
31
+ type: 'string'
32
+ },
23
33
  transform: {
24
34
  type: 'string'
25
35
  }
26
36
  }
27
37
  });
38
+ const isUpgrade = positionals[0] === 'upgrade';
39
+ const command = isUpgrade ? 'upgrade' : undefined;
40
+ const upgrade = isUpgrade ? resolveUpgradeVerb(positionals[1]) : undefined;
41
+ // The upgrade command always operates on the current directory; only the bare
42
+ // transform command takes a positional path.
43
+ const path = isUpgrade ? process.cwd() : positionals[0] ?? process.cwd();
28
44
  return {
45
+ agent: values.agent,
46
+ command,
29
47
  dry: Boolean(values.dry) || Boolean(values['dry-run']),
48
+ force: Boolean(values.force),
30
49
  list: Boolean(values.list),
31
- path: positionals[0] ?? process.cwd(),
50
+ path,
32
51
  print: Boolean(values.print),
33
- transform: values.transform
52
+ tag: values.tag,
53
+ transform: values.transform,
54
+ upgrade
34
55
  };
35
56
  }
57
+ function resolveUpgradeVerb(verb) {
58
+ if (verb === 'prompt' || verb === 'run') {
59
+ return verb;
60
+ }
61
+ return 'dispatch';
62
+ }
36
63
 
37
64
  //# sourceMappingURL=cli.parseFlags.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli.parseFlags.ts"],"sourcesContent":["import { parseArgs } from 'node:util'\n\nexport type CliFlags = {\n dry: boolean\n list: boolean\n path: string\n print: boolean\n transform?: string\n}\n\nexport function parseFlags(argv: string[]): CliFlags {\n const { positionals, values } = parseArgs({\n allowPositionals: true,\n args: argv,\n options: {\n dry: { type: 'boolean', default: false },\n 'dry-run': { type: 'boolean', default: false },\n list: { type: 'boolean', default: false },\n print: { type: 'boolean', default: false },\n transform: { type: 'string' },\n },\n })\n\n return {\n dry: Boolean(values.dry) || Boolean(values['dry-run']),\n list: Boolean(values.list),\n path: positionals[0] ?? process.cwd(),\n print: Boolean(values.print),\n transform: values.transform,\n }\n}\n"],"names":["parseArgs","parseFlags","argv","positionals","values","allowPositionals","args","options","dry","type","default","list","print","transform","Boolean","path","process","cwd"],"mappings":"AAAA,SAASA,SAAS,QAAQ,YAAW;AAUrC,OAAO,SAASC,WAAWC,IAAc;IACvC,MAAM,EAAEC,WAAW,EAAEC,MAAM,EAAE,GAAGJ,UAAU;QACxCK,kBAAkB;QAClBC,MAAMJ;QACNK,SAAS;YACPC,KAAK;gBAAEC,MAAM;gBAAWC,SAAS;YAAM;YACvC,WAAW;gBAAED,MAAM;gBAAWC,SAAS;YAAM;YAC7CC,MAAM;gBAAEF,MAAM;gBAAWC,SAAS;YAAM;YACxCE,OAAO;gBAAEH,MAAM;gBAAWC,SAAS;YAAM;YACzCG,WAAW;gBAAEJ,MAAM;YAAS;QAC9B;IACF;IAEA,OAAO;QACLD,KAAKM,QAAQV,OAAOI,GAAG,KAAKM,QAAQV,MAAM,CAAC,UAAU;QACrDO,MAAMG,QAAQV,OAAOO,IAAI;QACzBI,MAAMZ,WAAW,CAAC,EAAE,IAAIa,QAAQC,GAAG;QACnCL,OAAOE,QAAQV,OAAOQ,KAAK;QAC3BC,WAAWT,OAAOS,SAAS;IAC7B;AACF"}
1
+ {"version":3,"sources":["../src/cli.parseFlags.ts"],"sourcesContent":["import { parseArgs } from 'node:util'\n\nexport type CliCommand = 'upgrade'\n\n/**\n * The three `upgrade` verbs:\n * - `dispatch` (bare `upgrade`): interactive picker to hand the orchestration\n * prompt to a coding agent, or print it.\n * - `run` (`upgrade run`): the deterministic mechanical slice.\n * - `prompt` (`upgrade prompt`): print the orchestration prompt to stdout.\n */\nexport type UpgradeSubcommand = 'dispatch' | 'prompt' | 'run'\n\nexport type CliFlags = {\n agent?: string\n command?: CliCommand\n dry: boolean\n force: boolean\n list: boolean\n path: string\n print: boolean\n tag?: string\n transform?: string\n upgrade?: UpgradeSubcommand\n}\n\nexport function parseFlags(argv: string[]): CliFlags {\n const { positionals, values } = parseArgs({\n allowPositionals: true,\n args: argv,\n options: {\n agent: { type: 'string' },\n dry: { type: 'boolean', default: false },\n 'dry-run': { type: 'boolean', default: false },\n force: { type: 'boolean', default: false },\n list: { type: 'boolean', default: false },\n print: { type: 'boolean', default: false },\n tag: { type: 'string' },\n transform: { type: 'string' },\n },\n })\n\n const isUpgrade = positionals[0] === 'upgrade'\n const command = isUpgrade ? 'upgrade' : undefined\n const upgrade = isUpgrade ? resolveUpgradeVerb(positionals[1]) : undefined\n // The upgrade command always operates on the current directory; only the bare\n // transform command takes a positional path.\n const path = isUpgrade ? process.cwd() : (positionals[0] ?? process.cwd())\n\n return {\n agent: values.agent,\n command,\n dry: Boolean(values.dry) || Boolean(values['dry-run']),\n force: Boolean(values.force),\n list: Boolean(values.list),\n path,\n print: Boolean(values.print),\n tag: values.tag,\n transform: values.transform,\n upgrade,\n }\n}\n\nfunction resolveUpgradeVerb(verb: string | undefined): UpgradeSubcommand {\n if (verb === 'prompt' || verb === 'run') {\n return verb\n }\n return 'dispatch'\n}\n"],"names":["parseArgs","parseFlags","argv","positionals","values","allowPositionals","args","options","agent","type","dry","default","force","list","print","tag","transform","isUpgrade","command","undefined","upgrade","resolveUpgradeVerb","path","process","cwd","Boolean","verb"],"mappings":"AAAA,SAASA,SAAS,QAAQ,YAAW;AA0BrC,OAAO,SAASC,WAAWC,IAAc;IACvC,MAAM,EAAEC,WAAW,EAAEC,MAAM,EAAE,GAAGJ,UAAU;QACxCK,kBAAkB;QAClBC,MAAMJ;QACNK,SAAS;YACPC,OAAO;gBAAEC,MAAM;YAAS;YACxBC,KAAK;gBAAED,MAAM;gBAAWE,SAAS;YAAM;YACvC,WAAW;gBAAEF,MAAM;gBAAWE,SAAS;YAAM;YAC7CC,OAAO;gBAAEH,MAAM;gBAAWE,SAAS;YAAM;YACzCE,MAAM;gBAAEJ,MAAM;gBAAWE,SAAS;YAAM;YACxCG,OAAO;gBAAEL,MAAM;gBAAWE,SAAS;YAAM;YACzCI,KAAK;gBAAEN,MAAM;YAAS;YACtBO,WAAW;gBAAEP,MAAM;YAAS;QAC9B;IACF;IAEA,MAAMQ,YAAYd,WAAW,CAAC,EAAE,KAAK;IACrC,MAAMe,UAAUD,YAAY,YAAYE;IACxC,MAAMC,UAAUH,YAAYI,mBAAmBlB,WAAW,CAAC,EAAE,IAAIgB;IACjE,8EAA8E;IAC9E,6CAA6C;IAC7C,MAAMG,OAAOL,YAAYM,QAAQC,GAAG,KAAMrB,WAAW,CAAC,EAAE,IAAIoB,QAAQC,GAAG;IAEvE,OAAO;QACLhB,OAAOJ,OAAOI,KAAK;QACnBU;QACAR,KAAKe,QAAQrB,OAAOM,GAAG,KAAKe,QAAQrB,MAAM,CAAC,UAAU;QACrDQ,OAAOa,QAAQrB,OAAOQ,KAAK;QAC3BC,MAAMY,QAAQrB,OAAOS,IAAI;QACzBS;QACAR,OAAOW,QAAQrB,OAAOU,KAAK;QAC3BC,KAAKX,OAAOW,GAAG;QACfC,WAAWZ,OAAOY,SAAS;QAC3BI;IACF;AACF;AAEA,SAASC,mBAAmBK,IAAwB;IAClD,IAAIA,SAAS,YAAYA,SAAS,OAAO;QACvC,OAAOA;IACT;IACA,OAAO;AACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AA6B3C,eAAO,MAAM,UAAU,EAAE,SAAS,EA2BjC,CAAA"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAoC3C,eAAO,MAAM,UAAU,EAAE,SAAS,EAkCjC,CAAA"}
package/dist/registry.js CHANGED
@@ -1,38 +1,48 @@
1
+ import { addOverrideAccessTrue } from './transforms/add-override-access-true/index.js';
1
2
  import { exampleNoop } from './transforms/example-noop/index.js';
2
3
  import { globalsComponentsEdit } from './transforms/globals-components-edit/index.js';
3
4
  import { migrateAfterOperationRead } from './transforms/migrate-after-operation-read/index.js';
4
5
  import { migrateAliasedExports } from './transforms/migrate-aliased-exports/index.js';
6
+ import { migrateAuthorshipDefault } from './transforms/migrate-authorship-default/index.js';
5
7
  import { migrateAzureChunkLargeFiles } from './transforms/migrate-azure-chunk-large-files/index.js';
6
8
  import { migrateBlockReferencesToBlocks } from './transforms/migrate-block-references-to-blocks/index.js';
7
9
  import { migrateBuildScript } from './transforms/migrate-build-script/index.js';
8
10
  import { migrateDbTypesSubpath } from './transforms/migrate-db-types-subpath/index.js';
9
11
  import { migrateDisabledFields } from './transforms/migrate-disabled-fields/index.js';
10
12
  import { migrateDocumentTitleContext } from './transforms/migrate-document-title-context/index.js';
13
+ import { migrateFieldComponentTypes } from './transforms/migrate-field-component-types/index.js';
11
14
  import { migrateForceSelect } from './transforms/migrate-force-select/index.js';
12
15
  import { migrateHideAPIURL } from './transforms/migrate-hide-api-url/index.js';
13
16
  import { migrateImportExportHooks } from './transforms/migrate-import-export-hooks/index.js';
14
17
  import { migrateListViewSelectAPI } from './transforms/migrate-list-view-select-api/index.js';
15
18
  import { migrateNextGenerateViewportExport } from './transforms/migrate-next-generate-viewport-export/index.js';
16
19
  import { migrateNextSubpathExports } from './transforms/migrate-next-subpath-exports/index.js';
20
+ import { migratePayloadRequestCreation } from './transforms/migrate-payload-request-creation/index.js';
17
21
  import { migrateSlugField } from './transforms/migrate-slug-field/index.js';
18
22
  import { migrateStorageAdaptersToConfig } from './transforms/migrate-storage-adapters-to-config/index.js';
19
23
  import { migrateVersionsDefault } from './transforms/migrate-versions-default/index.js';
24
+ import { removeDefaultLocalePublishOption } from './transforms/remove-default-locale-publish-option/index.js';
20
25
  import { removeGroupByTrue } from './transforms/remove-group-by-true/index.js';
21
26
  import { removeLocalizeStatusConfig } from './transforms/remove-localize-status-config/index.js';
22
27
  import { removePublishSpecificLocale } from './transforms/remove-publish-specific-locale/index.js';
28
+ import { removeStorageAlwaysInsertFields } from './transforms/remove-storage-always-insert-fields/index.js';
29
+ import { removeStrictDraftTypes } from './transforms/remove-strict-draft-types/index.js';
23
30
  import { removeVersionsTrue } from './transforms/remove-versions-true/index.js';
24
31
  import { renameExperimentalTableFeature } from './transforms/rename-experimental-table-feature/index.js';
25
32
  import { renameStorageAdaptersToStorage } from './transforms/rename-storage-adapters-to-storage/index.js';
26
33
  import { renameTypescriptSchemaToJsonSchema } from './transforms/rename-typescript-schema-to-json-schema/index.js';
27
34
  export const transforms = [
28
35
  exampleNoop,
36
+ addOverrideAccessTrue,
29
37
  migrateAfterOperationRead,
30
38
  migrateHideAPIURL,
31
39
  globalsComponentsEdit,
32
40
  migrateListViewSelectAPI,
33
41
  migrateDisabledFields,
34
42
  migrateForceSelect,
43
+ migrateFieldComponentTypes,
35
44
  migrateAliasedExports,
45
+ migratePayloadRequestCreation,
36
46
  migrateBlockReferencesToBlocks,
37
47
  migrateBuildScript,
38
48
  migrateDocumentTitleContext,
@@ -45,10 +55,14 @@ export const transforms = [
45
55
  migrateNextSubpathExports,
46
56
  migrateSlugField,
47
57
  migrateVersionsDefault,
58
+ migrateAuthorshipDefault,
59
+ removeDefaultLocalePublishOption,
48
60
  removeGroupByTrue,
49
61
  removeLocalizeStatusConfig,
50
62
  removeVersionsTrue,
51
63
  removePublishSpecificLocale,
64
+ removeStorageAlwaysInsertFields,
65
+ removeStrictDraftTypes,
52
66
  renameTypescriptSchemaToJsonSchema,
53
67
  renameExperimentalTableFeature
54
68
  ];
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/registry.ts"],"sourcesContent":["import type { Transform } from './types.js'\n\nimport { exampleNoop } from './transforms/example-noop/index.js'\nimport { globalsComponentsEdit } from './transforms/globals-components-edit/index.js'\nimport { migrateAfterOperationRead } from './transforms/migrate-after-operation-read/index.js'\nimport { migrateAliasedExports } from './transforms/migrate-aliased-exports/index.js'\nimport { migrateAzureChunkLargeFiles } from './transforms/migrate-azure-chunk-large-files/index.js'\nimport { migrateBlockReferencesToBlocks } from './transforms/migrate-block-references-to-blocks/index.js'\nimport { migrateBuildScript } from './transforms/migrate-build-script/index.js'\nimport { migrateDbTypesSubpath } from './transforms/migrate-db-types-subpath/index.js'\nimport { migrateDisabledFields } from './transforms/migrate-disabled-fields/index.js'\nimport { migrateDocumentTitleContext } from './transforms/migrate-document-title-context/index.js'\nimport { migrateForceSelect } from './transforms/migrate-force-select/index.js'\nimport { migrateHideAPIURL } from './transforms/migrate-hide-api-url/index.js'\nimport { migrateImportExportHooks } from './transforms/migrate-import-export-hooks/index.js'\nimport { migrateListViewSelectAPI } from './transforms/migrate-list-view-select-api/index.js'\nimport { migrateNextGenerateViewportExport } from './transforms/migrate-next-generate-viewport-export/index.js'\nimport { migrateNextSubpathExports } from './transforms/migrate-next-subpath-exports/index.js'\nimport { migrateSlugField } from './transforms/migrate-slug-field/index.js'\nimport { migrateStorageAdaptersToConfig } from './transforms/migrate-storage-adapters-to-config/index.js'\nimport { migrateVersionsDefault } from './transforms/migrate-versions-default/index.js'\nimport { removeGroupByTrue } from './transforms/remove-group-by-true/index.js'\nimport { removeLocalizeStatusConfig } from './transforms/remove-localize-status-config/index.js'\nimport { removePublishSpecificLocale } from './transforms/remove-publish-specific-locale/index.js'\nimport { removeVersionsTrue } from './transforms/remove-versions-true/index.js'\nimport { renameExperimentalTableFeature } from './transforms/rename-experimental-table-feature/index.js'\nimport { renameStorageAdaptersToStorage } from './transforms/rename-storage-adapters-to-storage/index.js'\nimport { renameTypescriptSchemaToJsonSchema } from './transforms/rename-typescript-schema-to-json-schema/index.js'\n\nexport const transforms: Transform[] = [\n exampleNoop,\n migrateAfterOperationRead,\n migrateHideAPIURL,\n globalsComponentsEdit,\n migrateListViewSelectAPI,\n migrateDisabledFields,\n migrateForceSelect,\n migrateAliasedExports,\n migrateBlockReferencesToBlocks,\n migrateBuildScript,\n migrateDocumentTitleContext,\n migrateStorageAdaptersToConfig,\n migrateAzureChunkLargeFiles,\n renameStorageAdaptersToStorage,\n migrateImportExportHooks,\n migrateDbTypesSubpath,\n migrateNextGenerateViewportExport,\n migrateNextSubpathExports,\n migrateSlugField,\n migrateVersionsDefault,\n removeGroupByTrue,\n removeLocalizeStatusConfig,\n removeVersionsTrue,\n removePublishSpecificLocale,\n renameTypescriptSchemaToJsonSchema,\n renameExperimentalTableFeature,\n]\n"],"names":["exampleNoop","globalsComponentsEdit","migrateAfterOperationRead","migrateAliasedExports","migrateAzureChunkLargeFiles","migrateBlockReferencesToBlocks","migrateBuildScript","migrateDbTypesSubpath","migrateDisabledFields","migrateDocumentTitleContext","migrateForceSelect","migrateHideAPIURL","migrateImportExportHooks","migrateListViewSelectAPI","migrateNextGenerateViewportExport","migrateNextSubpathExports","migrateSlugField","migrateStorageAdaptersToConfig","migrateVersionsDefault","removeGroupByTrue","removeLocalizeStatusConfig","removePublishSpecificLocale","removeVersionsTrue","renameExperimentalTableFeature","renameStorageAdaptersToStorage","renameTypescriptSchemaToJsonSchema","transforms"],"mappings":"AAEA,SAASA,WAAW,QAAQ,qCAAoC;AAChE,SAASC,qBAAqB,QAAQ,gDAA+C;AACrF,SAASC,yBAAyB,QAAQ,qDAAoD;AAC9F,SAASC,qBAAqB,QAAQ,gDAA+C;AACrF,SAASC,2BAA2B,QAAQ,wDAAuD;AACnG,SAASC,8BAA8B,QAAQ,2DAA0D;AACzG,SAASC,kBAAkB,QAAQ,6CAA4C;AAC/E,SAASC,qBAAqB,QAAQ,iDAAgD;AACtF,SAASC,qBAAqB,QAAQ,gDAA+C;AACrF,SAASC,2BAA2B,QAAQ,uDAAsD;AAClG,SAASC,kBAAkB,QAAQ,6CAA4C;AAC/E,SAASC,iBAAiB,QAAQ,6CAA4C;AAC9E,SAASC,wBAAwB,QAAQ,oDAAmD;AAC5F,SAASC,wBAAwB,QAAQ,qDAAoD;AAC7F,SAASC,iCAAiC,QAAQ,8DAA6D;AAC/G,SAASC,yBAAyB,QAAQ,qDAAoD;AAC9F,SAASC,gBAAgB,QAAQ,2CAA0C;AAC3E,SAASC,8BAA8B,QAAQ,2DAA0D;AACzG,SAASC,sBAAsB,QAAQ,iDAAgD;AACvF,SAASC,iBAAiB,QAAQ,6CAA4C;AAC9E,SAASC,0BAA0B,QAAQ,sDAAqD;AAChG,SAASC,2BAA2B,QAAQ,uDAAsD;AAClG,SAASC,kBAAkB,QAAQ,6CAA4C;AAC/E,SAASC,8BAA8B,QAAQ,0DAAyD;AACxG,SAASC,8BAA8B,QAAQ,2DAA0D;AACzG,SAASC,kCAAkC,QAAQ,gEAA+D;AAElH,OAAO,MAAMC,aAA0B;IACrC1B;IACAE;IACAS;IACAV;IACAY;IACAL;IACAE;IACAP;IACAE;IACAC;IACAG;IACAQ;IACAb;IACAoB;IACAZ;IACAL;IACAO;IACAC;IACAC;IACAE;IACAC;IACAC;IACAE;IACAD;IACAI;IACAF;CACD,CAAA"}
1
+ {"version":3,"sources":["../src/registry.ts"],"sourcesContent":["import type { Transform } from './types.js'\n\nimport { addOverrideAccessTrue } from './transforms/add-override-access-true/index.js'\nimport { exampleNoop } from './transforms/example-noop/index.js'\nimport { globalsComponentsEdit } from './transforms/globals-components-edit/index.js'\nimport { migrateAfterOperationRead } from './transforms/migrate-after-operation-read/index.js'\nimport { migrateAliasedExports } from './transforms/migrate-aliased-exports/index.js'\nimport { migrateAuthorshipDefault } from './transforms/migrate-authorship-default/index.js'\nimport { migrateAzureChunkLargeFiles } from './transforms/migrate-azure-chunk-large-files/index.js'\nimport { migrateBlockReferencesToBlocks } from './transforms/migrate-block-references-to-blocks/index.js'\nimport { migrateBuildScript } from './transforms/migrate-build-script/index.js'\nimport { migrateDbTypesSubpath } from './transforms/migrate-db-types-subpath/index.js'\nimport { migrateDisabledFields } from './transforms/migrate-disabled-fields/index.js'\nimport { migrateDocumentTitleContext } from './transforms/migrate-document-title-context/index.js'\nimport { migrateFieldComponentTypes } from './transforms/migrate-field-component-types/index.js'\nimport { migrateForceSelect } from './transforms/migrate-force-select/index.js'\nimport { migrateHideAPIURL } from './transforms/migrate-hide-api-url/index.js'\nimport { migrateImportExportHooks } from './transforms/migrate-import-export-hooks/index.js'\nimport { migrateListViewSelectAPI } from './transforms/migrate-list-view-select-api/index.js'\nimport { migrateNextGenerateViewportExport } from './transforms/migrate-next-generate-viewport-export/index.js'\nimport { migrateNextSubpathExports } from './transforms/migrate-next-subpath-exports/index.js'\nimport { migratePayloadRequestCreation } from './transforms/migrate-payload-request-creation/index.js'\nimport { migrateSlugField } from './transforms/migrate-slug-field/index.js'\nimport { migrateStorageAdaptersToConfig } from './transforms/migrate-storage-adapters-to-config/index.js'\nimport { migrateVersionsDefault } from './transforms/migrate-versions-default/index.js'\nimport { removeDefaultLocalePublishOption } from './transforms/remove-default-locale-publish-option/index.js'\nimport { removeGroupByTrue } from './transforms/remove-group-by-true/index.js'\nimport { removeLocalizeStatusConfig } from './transforms/remove-localize-status-config/index.js'\nimport { removePublishSpecificLocale } from './transforms/remove-publish-specific-locale/index.js'\nimport { removeStorageAlwaysInsertFields } from './transforms/remove-storage-always-insert-fields/index.js'\nimport { removeStrictDraftTypes } from './transforms/remove-strict-draft-types/index.js'\nimport { removeVersionsTrue } from './transforms/remove-versions-true/index.js'\nimport { renameExperimentalTableFeature } from './transforms/rename-experimental-table-feature/index.js'\nimport { renameStorageAdaptersToStorage } from './transforms/rename-storage-adapters-to-storage/index.js'\nimport { renameTypescriptSchemaToJsonSchema } from './transforms/rename-typescript-schema-to-json-schema/index.js'\n\nexport const transforms: Transform[] = [\n exampleNoop,\n addOverrideAccessTrue,\n migrateAfterOperationRead,\n migrateHideAPIURL,\n globalsComponentsEdit,\n migrateListViewSelectAPI,\n migrateDisabledFields,\n migrateForceSelect,\n migrateFieldComponentTypes,\n migrateAliasedExports,\n migratePayloadRequestCreation,\n migrateBlockReferencesToBlocks,\n migrateBuildScript,\n migrateDocumentTitleContext,\n migrateStorageAdaptersToConfig,\n migrateAzureChunkLargeFiles,\n renameStorageAdaptersToStorage,\n migrateImportExportHooks,\n migrateDbTypesSubpath,\n migrateNextGenerateViewportExport,\n migrateNextSubpathExports,\n migrateSlugField,\n migrateVersionsDefault,\n migrateAuthorshipDefault,\n removeDefaultLocalePublishOption,\n removeGroupByTrue,\n removeLocalizeStatusConfig,\n removeVersionsTrue,\n removePublishSpecificLocale,\n removeStorageAlwaysInsertFields,\n removeStrictDraftTypes,\n renameTypescriptSchemaToJsonSchema,\n renameExperimentalTableFeature,\n]\n"],"names":["addOverrideAccessTrue","exampleNoop","globalsComponentsEdit","migrateAfterOperationRead","migrateAliasedExports","migrateAuthorshipDefault","migrateAzureChunkLargeFiles","migrateBlockReferencesToBlocks","migrateBuildScript","migrateDbTypesSubpath","migrateDisabledFields","migrateDocumentTitleContext","migrateFieldComponentTypes","migrateForceSelect","migrateHideAPIURL","migrateImportExportHooks","migrateListViewSelectAPI","migrateNextGenerateViewportExport","migrateNextSubpathExports","migratePayloadRequestCreation","migrateSlugField","migrateStorageAdaptersToConfig","migrateVersionsDefault","removeDefaultLocalePublishOption","removeGroupByTrue","removeLocalizeStatusConfig","removePublishSpecificLocale","removeStorageAlwaysInsertFields","removeStrictDraftTypes","removeVersionsTrue","renameExperimentalTableFeature","renameStorageAdaptersToStorage","renameTypescriptSchemaToJsonSchema","transforms"],"mappings":"AAEA,SAASA,qBAAqB,QAAQ,iDAAgD;AACtF,SAASC,WAAW,QAAQ,qCAAoC;AAChE,SAASC,qBAAqB,QAAQ,gDAA+C;AACrF,SAASC,yBAAyB,QAAQ,qDAAoD;AAC9F,SAASC,qBAAqB,QAAQ,gDAA+C;AACrF,SAASC,wBAAwB,QAAQ,mDAAkD;AAC3F,SAASC,2BAA2B,QAAQ,wDAAuD;AACnG,SAASC,8BAA8B,QAAQ,2DAA0D;AACzG,SAASC,kBAAkB,QAAQ,6CAA4C;AAC/E,SAASC,qBAAqB,QAAQ,iDAAgD;AACtF,SAASC,qBAAqB,QAAQ,gDAA+C;AACrF,SAASC,2BAA2B,QAAQ,uDAAsD;AAClG,SAASC,0BAA0B,QAAQ,sDAAqD;AAChG,SAASC,kBAAkB,QAAQ,6CAA4C;AAC/E,SAASC,iBAAiB,QAAQ,6CAA4C;AAC9E,SAASC,wBAAwB,QAAQ,oDAAmD;AAC5F,SAASC,wBAAwB,QAAQ,qDAAoD;AAC7F,SAASC,iCAAiC,QAAQ,8DAA6D;AAC/G,SAASC,yBAAyB,QAAQ,qDAAoD;AAC9F,SAASC,6BAA6B,QAAQ,yDAAwD;AACtG,SAASC,gBAAgB,QAAQ,2CAA0C;AAC3E,SAASC,8BAA8B,QAAQ,2DAA0D;AACzG,SAASC,sBAAsB,QAAQ,iDAAgD;AACvF,SAASC,gCAAgC,QAAQ,6DAA4D;AAC7G,SAASC,iBAAiB,QAAQ,6CAA4C;AAC9E,SAASC,0BAA0B,QAAQ,sDAAqD;AAChG,SAASC,2BAA2B,QAAQ,uDAAsD;AAClG,SAASC,+BAA+B,QAAQ,4DAA2D;AAC3G,SAASC,sBAAsB,QAAQ,kDAAiD;AACxF,SAASC,kBAAkB,QAAQ,6CAA4C;AAC/E,SAASC,8BAA8B,QAAQ,0DAAyD;AACxG,SAASC,8BAA8B,QAAQ,2DAA0D;AACzG,SAASC,kCAAkC,QAAQ,gEAA+D;AAElH,OAAO,MAAMC,aAA0B;IACrChC;IACAD;IACAG;IACAW;IACAZ;IACAc;IACAN;IACAG;IACAD;IACAR;IACAe;IACAZ;IACAC;IACAG;IACAU;IACAf;IACAyB;IACAhB;IACAN;IACAQ;IACAC;IACAE;IACAE;IACAjB;IACAkB;IACAC;IACAC;IACAI;IACAH;IACAC;IACAC;IACAI;IACAF;CACD,CAAA"}
@@ -0,0 +1,55 @@
1
+ # Payload v3 -> v4: remaining steps
2
+
3
+ `npx @payloadcms/codemod upgrade run` has done the mechanical slice: pinned Payload packages to v4,
4
+ removed conflicting overrides, written the toolchain floors, installed, and run the AST
5
+ transforms. This checklist is what it did NOT do. The authoritative breaking-change list is
6
+ the migration guide (`docs/migration-guide/v4.mdx`, also bundled at `dist/runbook/v4.mdx`):
7
+ <https://github.com/payloadcms/payload/blob/main/docs/migration-guide/v4.mdx>
8
+
9
+ Report each item as verified / cannot-confirm / broken. Do not call the upgrade complete while
10
+ any gate fails or any generated file is stale.
11
+
12
+ ## 0. Before upgrading (do on v3)
13
+
14
+ Some migrations need v3 tooling that v4 removes, so they must run BEFORE `upgrade run`,
15
+ while the v3 packages are still installed:
16
+
17
+ - Slate richtext is deleted in v4. Migrate Slate -> Lexical on v3; the migration path is gone once
18
+ packages are pinned to v4.
19
+
20
+ ## 1. Next.js 16
21
+
22
+ Payload v4 requires Next 16. The command did not touch Next. Run Next's own recommended agent
23
+ workflow, which bumps Next + React and migrates the code as one unit:
24
+ <https://nextjs.org/docs/app/guides/upgrading/version-16#use-an-ai-agent-recommended>
25
+
26
+ Keep the resulting Next version within `>=16.2.6 <17` (the exact target is printed in the
27
+ upgrade report), since Next's `upgrade latest` may point past 16 in future.
28
+
29
+ ## 2. Regenerate generated files
30
+
31
+ ```bash
32
+ payload generate:types && payload generate:importmap
33
+ ```
34
+
35
+ Never hand-edit `payload-types.ts` or `importMap.js` — regenerate them. If a credential wall
36
+ blocks generation, set dummy env values and re-run.
37
+
38
+ ## 3. Manual v4 items (not covered by transforms)
39
+
40
+ - SCSS is gone: move `@payloadcms/ui/scss` to `@payloadcms/ui/css`; rename `--theme-*` -> `--color-*`.
41
+ - Sweep agent/editor instruction files (`AGENTS.md`, `CLAUDE.md`, `.cursor/rules/*`) for APIs v4 removed.
42
+ - Cron parsing is strict now: `/10 * * * *` -> `*/10 * * * *`.
43
+ - Jobs: run DB migrations for the new lease/stats fields.
44
+ - Review per-transform notes printed in the upgrade report for spots needing manual review.
45
+
46
+ ## 4. Verify
47
+
48
+ - `tsc --noEmit` (delete `tsconfig.tsbuildinfo` first; set `checkJs: true` so `importMap.js` is covered).
49
+ - Run integration tests and e2e separately.
50
+ - Build.
51
+ - Confirm native modules (e.g. `sharp`) still load.
52
+
53
+ ## 5. Report honestly
54
+
55
+ Distinguish verified, cannot-confirm, and broken. A silent gap reads as "checked and fine".