@payloadcms/codemod 4.0.0-internal.b8e7c89 → 4.0.0-internal.bf4bcce

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 (408) hide show
  1. package/README.md +97 -28
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.help.d.ts +4 -0
  4. package/dist/cli.help.d.ts.map +1 -0
  5. package/dist/cli.help.js +29 -0
  6. package/dist/cli.help.js.map +1 -0
  7. package/dist/cli.js +49 -27
  8. package/dist/cli.js.map +1 -1
  9. package/dist/cli.parseFlags.d.ts +15 -0
  10. package/dist/cli.parseFlags.d.ts.map +1 -1
  11. package/dist/cli.parseFlags.js +35 -2
  12. package/dist/cli.parseFlags.js.map +1 -1
  13. package/dist/registry.d.ts.map +1 -1
  14. package/dist/registry.js +20 -0
  15. package/dist/registry.js.map +1 -1
  16. package/dist/runbook/payload-v4-upgrade.md +55 -0
  17. package/dist/runbook/v4.mdx +2516 -0
  18. package/dist/transforms/add-override-access-true/basic.input.js +41 -0
  19. package/dist/transforms/add-override-access-true/basic.input.js.map +1 -0
  20. package/dist/transforms/add-override-access-true/basic.output.js +50 -0
  21. package/dist/transforms/add-override-access-true/basic.output.js.map +1 -0
  22. package/dist/transforms/add-override-access-true/comment-between-properties.input.js +11 -0
  23. package/dist/transforms/add-override-access-true/comment-between-properties.input.js.map +1 -0
  24. package/dist/transforms/add-override-access-true/comment-between-properties.output.js +12 -0
  25. package/dist/transforms/add-override-access-true/comment-between-properties.output.js.map +1 -0
  26. package/dist/transforms/add-override-access-true/index.d.ts +20 -0
  27. package/dist/transforms/add-override-access-true/index.d.ts.map +1 -0
  28. package/dist/transforms/add-override-access-true/index.js +208 -0
  29. package/dist/transforms/add-override-access-true/index.js.map +1 -0
  30. package/dist/transforms/add-override-access-true/javascript.input.d.ts +6 -0
  31. package/dist/transforms/add-override-access-true/javascript.input.d.ts.map +1 -0
  32. package/dist/transforms/add-override-access-true/javascript.input.js +24 -0
  33. package/dist/transforms/add-override-access-true/javascript.input.js.map +1 -0
  34. package/dist/transforms/add-override-access-true/javascript.output.d.ts +6 -0
  35. package/dist/transforms/add-override-access-true/javascript.output.d.ts.map +1 -0
  36. package/dist/transforms/add-override-access-true/javascript.output.js +26 -0
  37. package/dist/transforms/add-override-access-true/javascript.output.js.map +1 -0
  38. package/dist/transforms/add-override-access-true/non-matching.input.js +42 -0
  39. package/dist/transforms/add-override-access-true/non-matching.input.js.map +1 -0
  40. package/dist/transforms/add-override-access-true/non-matching.output.js +42 -0
  41. package/dist/transforms/add-override-access-true/non-matching.output.js.map +1 -0
  42. package/dist/transforms/add-override-access-true/single-line.input.js +13 -0
  43. package/dist/transforms/add-override-access-true/single-line.input.js.map +1 -0
  44. package/dist/transforms/add-override-access-true/single-line.output.js +17 -0
  45. package/dist/transforms/add-override-access-true/single-line.output.js.map +1 -0
  46. package/dist/transforms/add-override-access-true/trailing-comment.input.js +10 -0
  47. package/dist/transforms/add-override-access-true/trailing-comment.input.js.map +1 -0
  48. package/dist/transforms/add-override-access-true/trailing-comment.output.js +12 -0
  49. package/dist/transforms/add-override-access-true/trailing-comment.output.js.map +1 -0
  50. package/dist/transforms/migrate-admin-context-properties/basic.input.js +32 -0
  51. package/dist/transforms/migrate-admin-context-properties/basic.input.js.map +1 -0
  52. package/dist/transforms/migrate-admin-context-properties/basic.output.js +30 -0
  53. package/dist/transforms/migrate-admin-context-properties/basic.output.js.map +1 -0
  54. package/dist/transforms/migrate-admin-context-properties/index.d.ts +3 -0
  55. package/dist/transforms/migrate-admin-context-properties/index.d.ts.map +1 -0
  56. package/dist/transforms/migrate-admin-context-properties/index.js +302 -0
  57. package/dist/transforms/migrate-admin-context-properties/index.js.map +1 -0
  58. package/dist/transforms/migrate-admin-context-properties/no-match.input.js +30 -0
  59. package/dist/transforms/migrate-admin-context-properties/no-match.input.js.map +1 -0
  60. package/dist/transforms/migrate-admin-context-properties/no-match.output.js +30 -0
  61. package/dist/transforms/migrate-admin-context-properties/no-match.output.js.map +1 -0
  62. package/dist/transforms/migrate-aliased-exports/index.d.ts.map +1 -1
  63. package/dist/transforms/migrate-aliased-exports/index.js +6 -5
  64. package/dist/transforms/migrate-aliased-exports/index.js.map +1 -1
  65. package/dist/transforms/migrate-aliased-exports/request.input.js +6 -0
  66. package/dist/transforms/migrate-aliased-exports/request.input.js.map +1 -0
  67. package/dist/transforms/migrate-aliased-exports/request.output.js +5 -0
  68. package/dist/transforms/migrate-aliased-exports/request.output.js.map +1 -0
  69. package/dist/transforms/migrate-authorship-default/already-set.input.js +15 -0
  70. package/dist/transforms/migrate-authorship-default/already-set.input.js.map +1 -0
  71. package/dist/transforms/migrate-authorship-default/already-set.output.js +15 -0
  72. package/dist/transforms/migrate-authorship-default/already-set.output.js.map +1 -0
  73. package/dist/transforms/migrate-authorship-default/basic.input.js +16 -0
  74. package/dist/transforms/migrate-authorship-default/basic.input.js.map +1 -0
  75. package/dist/transforms/migrate-authorship-default/basic.output.js +18 -0
  76. package/dist/transforms/migrate-authorship-default/basic.output.js.map +1 -0
  77. package/dist/transforms/migrate-authorship-default/build-config.input.js +32 -0
  78. package/dist/transforms/migrate-authorship-default/build-config.input.js.map +1 -0
  79. package/dist/transforms/migrate-authorship-default/build-config.output.js +35 -0
  80. package/dist/transforms/migrate-authorship-default/build-config.output.js.map +1 -0
  81. package/dist/transforms/migrate-authorship-default/globals.input.js +16 -0
  82. package/dist/transforms/migrate-authorship-default/globals.input.js.map +1 -0
  83. package/dist/transforms/migrate-authorship-default/globals.output.js +17 -0
  84. package/dist/transforms/migrate-authorship-default/globals.output.js.map +1 -0
  85. package/dist/transforms/migrate-authorship-default/index.d.ts +11 -0
  86. package/dist/transforms/migrate-authorship-default/index.d.ts.map +1 -0
  87. package/dist/transforms/migrate-authorship-default/index.js +141 -0
  88. package/dist/transforms/migrate-authorship-default/index.js.map +1 -0
  89. package/dist/transforms/migrate-authorship-default/non-matching.input.js +18 -0
  90. package/dist/transforms/migrate-authorship-default/non-matching.input.js.map +1 -0
  91. package/dist/transforms/migrate-authorship-default/non-matching.output.js +18 -0
  92. package/dist/transforms/migrate-authorship-default/non-matching.output.js.map +1 -0
  93. package/dist/transforms/migrate-authorship-default/satisfies.input.js +11 -0
  94. package/dist/transforms/migrate-authorship-default/satisfies.input.js.map +1 -0
  95. package/dist/transforms/migrate-authorship-default/satisfies.output.js +13 -0
  96. package/dist/transforms/migrate-authorship-default/satisfies.output.js.map +1 -0
  97. package/dist/transforms/migrate-displayed-field-value-args/basic.input.js +4 -0
  98. package/dist/transforms/migrate-displayed-field-value-args/basic.input.js.map +1 -0
  99. package/dist/transforms/migrate-displayed-field-value-args/basic.output.js +8 -0
  100. package/dist/transforms/migrate-displayed-field-value-args/basic.output.js.map +1 -0
  101. package/dist/transforms/migrate-displayed-field-value-args/index.d.ts +3 -0
  102. package/dist/transforms/migrate-displayed-field-value-args/index.d.ts.map +1 -0
  103. package/dist/transforms/migrate-displayed-field-value-args/index.js +84 -0
  104. package/dist/transforms/migrate-displayed-field-value-args/index.js.map +1 -0
  105. package/dist/transforms/migrate-displayed-field-value-args/namespace.input.js +4 -0
  106. package/dist/transforms/migrate-displayed-field-value-args/namespace.input.js.map +1 -0
  107. package/dist/transforms/migrate-displayed-field-value-args/namespace.output.js +8 -0
  108. package/dist/transforms/migrate-displayed-field-value-args/namespace.output.js.map +1 -0
  109. package/dist/transforms/migrate-displayed-field-value-args/no-match.input.js +4 -0
  110. package/dist/transforms/migrate-displayed-field-value-args/no-match.input.js.map +1 -0
  111. package/dist/transforms/migrate-displayed-field-value-args/no-match.output.js +4 -0
  112. package/dist/transforms/migrate-displayed-field-value-args/no-match.output.js.map +1 -0
  113. package/dist/transforms/migrate-field-component-types/basic.input.js +8 -0
  114. package/dist/transforms/migrate-field-component-types/basic.input.js.map +1 -0
  115. package/dist/transforms/migrate-field-component-types/basic.output.js +8 -0
  116. package/dist/transforms/migrate-field-component-types/basic.output.js.map +1 -0
  117. package/dist/transforms/migrate-field-component-types/index.d.ts +3 -0
  118. package/dist/transforms/migrate-field-component-types/index.d.ts.map +1 -0
  119. package/dist/transforms/migrate-field-component-types/index.js +620 -0
  120. package/dist/transforms/migrate-field-component-types/index.js.map +1 -0
  121. package/dist/transforms/migrate-payload-request-creation/aliases.input.js +8 -0
  122. package/dist/transforms/migrate-payload-request-creation/aliases.input.js.map +1 -0
  123. package/dist/transforms/migrate-payload-request-creation/aliases.output.js +31 -0
  124. package/dist/transforms/migrate-payload-request-creation/aliases.output.js.map +1 -0
  125. package/dist/transforms/migrate-payload-request-creation/collision.input.js +9 -0
  126. package/dist/transforms/migrate-payload-request-creation/collision.input.js.map +1 -0
  127. package/dist/transforms/migrate-payload-request-creation/comments.input.js +9 -0
  128. package/dist/transforms/migrate-payload-request-creation/comments.input.js.map +1 -0
  129. package/dist/transforms/migrate-payload-request-creation/comments.output.js +34 -0
  130. package/dist/transforms/migrate-payload-request-creation/comments.output.js.map +1 -0
  131. package/dist/transforms/migrate-payload-request-creation/empty.input.js +5 -0
  132. package/dist/transforms/migrate-payload-request-creation/empty.input.js.map +1 -0
  133. package/dist/transforms/migrate-payload-request-creation/empty.output.js +7 -0
  134. package/dist/transforms/migrate-payload-request-creation/empty.output.js.map +1 -0
  135. package/dist/transforms/migrate-payload-request-creation/evaluation-order.input.js +10 -0
  136. package/dist/transforms/migrate-payload-request-creation/evaluation-order.input.js.map +1 -0
  137. package/dist/transforms/migrate-payload-request-creation/expression.input.js +8 -0
  138. package/dist/transforms/migrate-payload-request-creation/expression.input.js.map +1 -0
  139. package/dist/transforms/migrate-payload-request-creation/expression.output.js +8 -0
  140. package/dist/transforms/migrate-payload-request-creation/expression.output.js.map +1 -0
  141. package/dist/transforms/migrate-payload-request-creation/getters.input.js +52 -0
  142. package/dist/transforms/migrate-payload-request-creation/getters.input.js.map +1 -0
  143. package/dist/transforms/migrate-payload-request-creation/index.d.ts +3 -0
  144. package/dist/transforms/migrate-payload-request-creation/index.d.ts.map +1 -0
  145. package/dist/transforms/migrate-payload-request-creation/index.js +236 -0
  146. package/dist/transforms/migrate-payload-request-creation/index.js.map +1 -0
  147. package/dist/transforms/migrate-payload-request-creation/internal.input.js +6 -0
  148. package/dist/transforms/migrate-payload-request-creation/internal.input.js.map +1 -0
  149. package/dist/transforms/migrate-payload-request-creation/internal.output.js +6 -0
  150. package/dist/transforms/migrate-payload-request-creation/internal.output.js.map +1 -0
  151. package/dist/transforms/migrate-payload-request-creation/non-matching.input.js +5 -0
  152. package/dist/transforms/migrate-payload-request-creation/non-matching.input.js.map +1 -0
  153. package/dist/transforms/migrate-payload-request-creation/populated.input.js +7 -0
  154. package/dist/transforms/migrate-payload-request-creation/populated.input.js.map +1 -0
  155. package/dist/transforms/migrate-payload-request-creation/populated.output.js +30 -0
  156. package/dist/transforms/migrate-payload-request-creation/populated.output.js.map +1 -0
  157. package/dist/transforms/migrate-payload-request-creation/shadowed.input.js +7 -0
  158. package/dist/transforms/migrate-payload-request-creation/shadowed.input.js.map +1 -0
  159. package/dist/transforms/migrate-payload-request-creation/shadowed.output.js +9 -0
  160. package/dist/transforms/migrate-payload-request-creation/shadowed.output.js.map +1 -0
  161. package/dist/transforms/migrate-payload-request-creation/shorthand.input.js +12 -0
  162. package/dist/transforms/migrate-payload-request-creation/shorthand.input.js.map +1 -0
  163. package/dist/transforms/migrate-payload-request-creation/shorthand.output.js +12 -0
  164. package/dist/transforms/migrate-payload-request-creation/shorthand.output.js.map +1 -0
  165. package/dist/transforms/migrate-payload-request-creation/unsupported.input.js +9 -0
  166. package/dist/transforms/migrate-payload-request-creation/unsupported.input.js.map +1 -0
  167. package/dist/transforms/migrate-sharp-to-transformer/basic.input.js +28 -0
  168. package/dist/transforms/migrate-sharp-to-transformer/basic.input.js.map +1 -0
  169. package/dist/transforms/migrate-sharp-to-transformer/basic.output.js +39 -0
  170. package/dist/transforms/migrate-sharp-to-transformer/basic.output.js.map +1 -0
  171. package/dist/transforms/migrate-sharp-to-transformer/existing-transformers.input.js +27 -0
  172. package/dist/transforms/migrate-sharp-to-transformer/existing-transformers.input.js.map +1 -0
  173. package/dist/transforms/migrate-sharp-to-transformer/existing-transformers.output.js +33 -0
  174. package/dist/transforms/migrate-sharp-to-transformer/existing-transformers.output.js.map +1 -0
  175. package/dist/transforms/migrate-sharp-to-transformer/index.d.ts +3 -0
  176. package/dist/transforms/migrate-sharp-to-transformer/index.d.ts.map +1 -0
  177. package/dist/transforms/migrate-sharp-to-transformer/index.js +430 -0
  178. package/dist/transforms/migrate-sharp-to-transformer/index.js.map +1 -0
  179. package/dist/transforms/migrate-sharp-to-transformer/no-match.input.js +11 -0
  180. package/dist/transforms/migrate-sharp-to-transformer/no-match.input.js.map +1 -0
  181. package/dist/transforms/migrate-sharp-to-transformer/no-match.output.js +11 -0
  182. package/dist/transforms/migrate-sharp-to-transformer/no-match.output.js.map +1 -0
  183. package/dist/transforms/migrate-versions-default/index.js +5 -5
  184. package/dist/transforms/migrate-versions-default/index.js.map +1 -1
  185. package/dist/transforms/remove-default-locale-publish-option/all-value.input.js +13 -0
  186. package/dist/transforms/remove-default-locale-publish-option/all-value.input.js.map +1 -0
  187. package/dist/transforms/remove-default-locale-publish-option/basic.input.js +13 -0
  188. package/dist/transforms/remove-default-locale-publish-option/basic.input.js.map +1 -0
  189. package/dist/transforms/remove-default-locale-publish-option/basic.output.js +12 -0
  190. package/dist/transforms/remove-default-locale-publish-option/basic.output.js.map +1 -0
  191. package/dist/transforms/remove-default-locale-publish-option/dynamic.input.js +17 -0
  192. package/dist/transforms/remove-default-locale-publish-option/dynamic.input.js.map +1 -0
  193. package/dist/transforms/remove-default-locale-publish-option/index.d.ts +10 -0
  194. package/dist/transforms/remove-default-locale-publish-option/index.d.ts.map +1 -0
  195. package/dist/transforms/remove-default-locale-publish-option/index.js +103 -0
  196. package/dist/transforms/remove-default-locale-publish-option/index.js.map +1 -0
  197. package/dist/transforms/remove-default-locale-publish-option/no-match.input.js +10 -0
  198. package/dist/transforms/remove-default-locale-publish-option/no-match.input.js.map +1 -0
  199. package/dist/transforms/remove-default-locale-publish-option/no-match.output.js +10 -0
  200. package/dist/transforms/remove-default-locale-publish-option/no-match.output.js.map +1 -0
  201. package/dist/transforms/remove-default-locale-publish-option/reassigned.input.js +22 -0
  202. package/dist/transforms/remove-default-locale-publish-option/reassigned.input.js.map +1 -0
  203. package/dist/transforms/remove-default-locale-publish-option/shorthand.input.js +14 -0
  204. package/dist/transforms/remove-default-locale-publish-option/shorthand.input.js.map +1 -0
  205. package/dist/transforms/remove-default-locale-publish-option/shorthand.output.js +13 -0
  206. package/dist/transforms/remove-default-locale-publish-option/shorthand.output.js.map +1 -0
  207. package/dist/transforms/remove-publish-specific-locale/index.d.ts.map +1 -1
  208. package/dist/transforms/remove-publish-specific-locale/index.js.map +1 -1
  209. package/dist/transforms/remove-storage-always-insert-fields/aliased.input.js +11 -0
  210. package/dist/transforms/remove-storage-always-insert-fields/aliased.input.js.map +1 -0
  211. package/dist/transforms/remove-storage-always-insert-fields/aliased.output.js +10 -0
  212. package/dist/transforms/remove-storage-always-insert-fields/aliased.output.js.map +1 -0
  213. package/dist/transforms/remove-storage-always-insert-fields/basic.input.js +54 -0
  214. package/dist/transforms/remove-storage-always-insert-fields/basic.input.js.map +1 -0
  215. package/dist/transforms/remove-storage-always-insert-fields/basic.output.js +48 -0
  216. package/dist/transforms/remove-storage-always-insert-fields/basic.output.js.map +1 -0
  217. package/dist/transforms/remove-storage-always-insert-fields/index.d.ts +3 -0
  218. package/dist/transforms/remove-storage-always-insert-fields/index.d.ts.map +1 -0
  219. package/dist/transforms/remove-storage-always-insert-fields/index.js +75 -0
  220. package/dist/transforms/remove-storage-always-insert-fields/index.js.map +1 -0
  221. package/dist/transforms/remove-storage-always-insert-fields/no-match.input.js +27 -0
  222. package/dist/transforms/remove-storage-always-insert-fields/no-match.input.js.map +1 -0
  223. package/dist/transforms/remove-storage-always-insert-fields/no-match.output.js +27 -0
  224. package/dist/transforms/remove-storage-always-insert-fields/no-match.output.js.map +1 -0
  225. package/dist/transforms/remove-versions-true/index.js +4 -4
  226. package/dist/transforms/remove-versions-true/index.js.map +1 -1
  227. package/dist/transforms/rename-diff-value-props/basic.input.js +38 -0
  228. package/dist/transforms/rename-diff-value-props/basic.input.js.map +1 -0
  229. package/dist/transforms/rename-diff-value-props/basic.output.js +38 -0
  230. package/dist/transforms/rename-diff-value-props/basic.output.js.map +1 -0
  231. package/dist/transforms/rename-diff-value-props/index.d.ts +3 -0
  232. package/dist/transforms/rename-diff-value-props/index.d.ts.map +1 -0
  233. package/dist/transforms/rename-diff-value-props/index.js +328 -0
  234. package/dist/transforms/rename-diff-value-props/index.js.map +1 -0
  235. package/dist/transforms/rename-diff-value-props/no-match.input.js +8 -0
  236. package/dist/transforms/rename-diff-value-props/no-match.input.js.map +1 -0
  237. package/dist/transforms/rename-experimental-table-feature/index.d.ts.map +1 -1
  238. package/dist/transforms/rename-experimental-table-feature/index.js +7 -1
  239. package/dist/transforms/rename-experimental-table-feature/index.js.map +1 -1
  240. package/dist/upgrade/defaultTag.d.ts +9 -0
  241. package/dist/upgrade/defaultTag.d.ts.map +1 -0
  242. package/dist/upgrade/defaultTag.js +25 -0
  243. package/dist/upgrade/defaultTag.js.map +1 -0
  244. package/dist/upgrade/detectPackageManager.d.ts +8 -0
  245. package/dist/upgrade/detectPackageManager.d.ts.map +1 -0
  246. package/dist/upgrade/detectPackageManager.js +38 -0
  247. package/dist/upgrade/detectPackageManager.js.map +1 -0
  248. package/dist/upgrade/dispatch.d.ts +38 -0
  249. package/dist/upgrade/dispatch.d.ts.map +1 -0
  250. package/dist/upgrade/dispatch.js +132 -0
  251. package/dist/upgrade/dispatch.js.map +1 -0
  252. package/dist/upgrade/index.d.ts +25 -0
  253. package/dist/upgrade/index.d.ts.map +1 -0
  254. package/dist/upgrade/index.js +209 -0
  255. package/dist/upgrade/index.js.map +1 -0
  256. package/dist/upgrade/prompt.d.ts +14 -0
  257. package/dist/upgrade/prompt.d.ts.map +1 -0
  258. package/dist/upgrade/prompt.js +77 -0
  259. package/dist/upgrade/prompt.js.map +1 -0
  260. package/dist/upgrade/report.d.ts +21 -0
  261. package/dist/upgrade/report.d.ts.map +1 -0
  262. package/dist/upgrade/report.js +47 -0
  263. package/dist/upgrade/report.js.map +1 -0
  264. package/dist/upgrade/resolveVersions.d.ts +13 -0
  265. package/dist/upgrade/resolveVersions.d.ts.map +1 -0
  266. package/dist/upgrade/resolveVersions.js +55 -0
  267. package/dist/upgrade/resolveVersions.js.map +1 -0
  268. package/dist/upgrade/rewritePackageJson.d.ts +32 -0
  269. package/dist/upgrade/rewritePackageJson.d.ts.map +1 -0
  270. package/dist/upgrade/rewritePackageJson.js +164 -0
  271. package/dist/upgrade/rewritePackageJson.js.map +1 -0
  272. package/dist/upgrade/runInstall.d.ts +16 -0
  273. package/dist/upgrade/runInstall.d.ts.map +1 -0
  274. package/dist/upgrade/runInstall.js +17 -0
  275. package/dist/upgrade/runInstall.js.map +1 -0
  276. package/dist/upgrade/selectAgent.d.ts +45 -0
  277. package/dist/upgrade/selectAgent.d.ts.map +1 -0
  278. package/dist/upgrade/selectAgent.js +54 -0
  279. package/dist/upgrade/selectAgent.js.map +1 -0
  280. package/dist/upgrade/selfCommand.d.ts +13 -0
  281. package/dist/upgrade/selfCommand.d.ts.map +1 -0
  282. package/dist/upgrade/selfCommand.js +17 -0
  283. package/dist/upgrade/selfCommand.js.map +1 -0
  284. package/dist/upgrade/types.d.ts +47 -0
  285. package/dist/upgrade/types.d.ts.map +1 -0
  286. package/dist/upgrade/types.js +11 -0
  287. package/dist/upgrade/types.js.map +1 -0
  288. package/dist/utils/project.d.ts +10 -0
  289. package/dist/utils/project.d.ts.map +1 -0
  290. package/dist/utils/project.js +43 -0
  291. package/dist/utils/project.js.map +1 -0
  292. package/package.json +9 -5
  293. package/dist/cli.parseFlags.spec.d.ts +0 -2
  294. package/dist/cli.parseFlags.spec.d.ts.map +0 -1
  295. package/dist/cli.parseFlags.spec.js +0 -49
  296. package/dist/cli.parseFlags.spec.js.map +0 -1
  297. package/dist/runner.spec.d.ts +0 -2
  298. package/dist/runner.spec.d.ts.map +0 -1
  299. package/dist/runner.spec.js +0 -88
  300. package/dist/runner.spec.js.map +0 -1
  301. package/dist/transforms/example-noop/index.spec.d.ts +0 -2
  302. package/dist/transforms/example-noop/index.spec.d.ts.map +0 -1
  303. package/dist/transforms/example-noop/index.spec.js +0 -29
  304. package/dist/transforms/example-noop/index.spec.js.map +0 -1
  305. package/dist/transforms/globals-components-edit/index.spec.d.ts +0 -2
  306. package/dist/transforms/globals-components-edit/index.spec.d.ts.map +0 -1
  307. package/dist/transforms/globals-components-edit/index.spec.js +0 -37
  308. package/dist/transforms/globals-components-edit/index.spec.js.map +0 -1
  309. package/dist/transforms/migrate-after-operation-read/index.spec.d.ts +0 -2
  310. package/dist/transforms/migrate-after-operation-read/index.spec.d.ts.map +0 -1
  311. package/dist/transforms/migrate-after-operation-read/index.spec.js +0 -62
  312. package/dist/transforms/migrate-after-operation-read/index.spec.js.map +0 -1
  313. package/dist/transforms/migrate-aliased-exports/index.spec.d.ts +0 -2
  314. package/dist/transforms/migrate-aliased-exports/index.spec.d.ts.map +0 -1
  315. package/dist/transforms/migrate-aliased-exports/index.spec.js +0 -55
  316. package/dist/transforms/migrate-aliased-exports/index.spec.js.map +0 -1
  317. package/dist/transforms/migrate-azure-chunk-large-files/index.spec.d.ts +0 -2
  318. package/dist/transforms/migrate-azure-chunk-large-files/index.spec.d.ts.map +0 -1
  319. package/dist/transforms/migrate-azure-chunk-large-files/index.spec.js +0 -67
  320. package/dist/transforms/migrate-azure-chunk-large-files/index.spec.js.map +0 -1
  321. package/dist/transforms/migrate-block-references-to-blocks/index.spec.d.ts +0 -2
  322. package/dist/transforms/migrate-block-references-to-blocks/index.spec.d.ts.map +0 -1
  323. package/dist/transforms/migrate-block-references-to-blocks/index.spec.js +0 -45
  324. package/dist/transforms/migrate-block-references-to-blocks/index.spec.js.map +0 -1
  325. package/dist/transforms/migrate-build-script/index.spec.d.ts +0 -2
  326. package/dist/transforms/migrate-build-script/index.spec.d.ts.map +0 -1
  327. package/dist/transforms/migrate-build-script/index.spec.js +0 -81
  328. package/dist/transforms/migrate-build-script/index.spec.js.map +0 -1
  329. package/dist/transforms/migrate-db-types-subpath/index.spec.d.ts +0 -2
  330. package/dist/transforms/migrate-db-types-subpath/index.spec.d.ts.map +0 -1
  331. package/dist/transforms/migrate-db-types-subpath/index.spec.js +0 -46
  332. package/dist/transforms/migrate-db-types-subpath/index.spec.js.map +0 -1
  333. package/dist/transforms/migrate-disabled-fields/index.spec.d.ts +0 -2
  334. package/dist/transforms/migrate-disabled-fields/index.spec.d.ts.map +0 -1
  335. package/dist/transforms/migrate-disabled-fields/index.spec.js +0 -73
  336. package/dist/transforms/migrate-disabled-fields/index.spec.js.map +0 -1
  337. package/dist/transforms/migrate-document-title-context/index.spec.d.ts +0 -2
  338. package/dist/transforms/migrate-document-title-context/index.spec.d.ts.map +0 -1
  339. package/dist/transforms/migrate-document-title-context/index.spec.js +0 -86
  340. package/dist/transforms/migrate-document-title-context/index.spec.js.map +0 -1
  341. package/dist/transforms/migrate-force-select/index.spec.d.ts +0 -2
  342. package/dist/transforms/migrate-force-select/index.spec.d.ts.map +0 -1
  343. package/dist/transforms/migrate-force-select/index.spec.js +0 -107
  344. package/dist/transforms/migrate-force-select/index.spec.js.map +0 -1
  345. package/dist/transforms/migrate-hide-api-url/index.spec.d.ts +0 -2
  346. package/dist/transforms/migrate-hide-api-url/index.spec.d.ts.map +0 -1
  347. package/dist/transforms/migrate-hide-api-url/index.spec.js +0 -118
  348. package/dist/transforms/migrate-hide-api-url/index.spec.js.map +0 -1
  349. package/dist/transforms/migrate-import-export-hooks/index.spec.d.ts +0 -2
  350. package/dist/transforms/migrate-import-export-hooks/index.spec.d.ts.map +0 -1
  351. package/dist/transforms/migrate-import-export-hooks/index.spec.js +0 -65
  352. package/dist/transforms/migrate-import-export-hooks/index.spec.js.map +0 -1
  353. package/dist/transforms/migrate-list-view-select-api/index.spec.d.ts +0 -2
  354. package/dist/transforms/migrate-list-view-select-api/index.spec.d.ts.map +0 -1
  355. package/dist/transforms/migrate-list-view-select-api/index.spec.js +0 -37
  356. package/dist/transforms/migrate-list-view-select-api/index.spec.js.map +0 -1
  357. package/dist/transforms/migrate-next-generate-viewport-export/index.spec.d.ts +0 -2
  358. package/dist/transforms/migrate-next-generate-viewport-export/index.spec.d.ts.map +0 -1
  359. package/dist/transforms/migrate-next-generate-viewport-export/index.spec.js +0 -41
  360. package/dist/transforms/migrate-next-generate-viewport-export/index.spec.js.map +0 -1
  361. package/dist/transforms/migrate-next-subpath-exports/index.spec.d.ts +0 -2
  362. package/dist/transforms/migrate-next-subpath-exports/index.spec.d.ts.map +0 -1
  363. package/dist/transforms/migrate-next-subpath-exports/index.spec.js +0 -46
  364. package/dist/transforms/migrate-next-subpath-exports/index.spec.js.map +0 -1
  365. package/dist/transforms/migrate-slug-field/index.spec.d.ts +0 -2
  366. package/dist/transforms/migrate-slug-field/index.spec.d.ts.map +0 -1
  367. package/dist/transforms/migrate-slug-field/index.spec.js +0 -47
  368. package/dist/transforms/migrate-slug-field/index.spec.js.map +0 -1
  369. package/dist/transforms/migrate-storage-adapters-to-config/index.spec.d.ts +0 -2
  370. package/dist/transforms/migrate-storage-adapters-to-config/index.spec.d.ts.map +0 -1
  371. package/dist/transforms/migrate-storage-adapters-to-config/index.spec.js +0 -85
  372. package/dist/transforms/migrate-storage-adapters-to-config/index.spec.js.map +0 -1
  373. package/dist/transforms/migrate-versions-default/index.spec.d.ts +0 -2
  374. package/dist/transforms/migrate-versions-default/index.spec.d.ts.map +0 -1
  375. package/dist/transforms/migrate-versions-default/index.spec.js +0 -81
  376. package/dist/transforms/migrate-versions-default/index.spec.js.map +0 -1
  377. package/dist/transforms/remove-group-by-true/index.spec.d.ts +0 -2
  378. package/dist/transforms/remove-group-by-true/index.spec.d.ts.map +0 -1
  379. package/dist/transforms/remove-group-by-true/index.spec.js +0 -47
  380. package/dist/transforms/remove-group-by-true/index.spec.js.map +0 -1
  381. package/dist/transforms/remove-localize-status-config/index.spec.d.ts +0 -2
  382. package/dist/transforms/remove-localize-status-config/index.spec.d.ts.map +0 -1
  383. package/dist/transforms/remove-localize-status-config/index.spec.js +0 -38
  384. package/dist/transforms/remove-localize-status-config/index.spec.js.map +0 -1
  385. package/dist/transforms/remove-publish-specific-locale/index.spec.d.ts +0 -2
  386. package/dist/transforms/remove-publish-specific-locale/index.spec.d.ts.map +0 -1
  387. package/dist/transforms/remove-publish-specific-locale/index.spec.js +0 -47
  388. package/dist/transforms/remove-publish-specific-locale/index.spec.js.map +0 -1
  389. package/dist/transforms/remove-versions-true/index.spec.d.ts +0 -2
  390. package/dist/transforms/remove-versions-true/index.spec.d.ts.map +0 -1
  391. package/dist/transforms/remove-versions-true/index.spec.js +0 -38
  392. package/dist/transforms/remove-versions-true/index.spec.js.map +0 -1
  393. package/dist/transforms/rename-experimental-table-feature/index.spec.d.ts +0 -2
  394. package/dist/transforms/rename-experimental-table-feature/index.spec.d.ts.map +0 -1
  395. package/dist/transforms/rename-experimental-table-feature/index.spec.js +0 -54
  396. package/dist/transforms/rename-experimental-table-feature/index.spec.js.map +0 -1
  397. package/dist/transforms/rename-storage-adapters-to-storage/index.spec.d.ts +0 -2
  398. package/dist/transforms/rename-storage-adapters-to-storage/index.spec.d.ts.map +0 -1
  399. package/dist/transforms/rename-storage-adapters-to-storage/index.spec.js +0 -55
  400. package/dist/transforms/rename-storage-adapters-to-storage/index.spec.js.map +0 -1
  401. package/dist/transforms/rename-typescript-schema-to-json-schema/index.spec.d.ts +0 -2
  402. package/dist/transforms/rename-typescript-schema-to-json-schema/index.spec.d.ts.map +0 -1
  403. package/dist/transforms/rename-typescript-schema-to-json-schema/index.spec.js +0 -45
  404. package/dist/transforms/rename-typescript-schema-to-json-schema/index.spec.js.map +0 -1
  405. package/dist/utils/packageJson.spec.d.ts +0 -2
  406. package/dist/utils/packageJson.spec.d.ts.map +0 -1
  407. package/dist/utils/packageJson.spec.js +0 -41
  408. package/dist/utils/packageJson.spec.js.map +0 -1
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Default Payload dist-tag when the caller did not pass --tag. Every package in
3
+ * the monorepo (this one included) is versioned and published in lockstep, so
4
+ * the dist-tag the codemod was invoked under (`npx @payloadcms/codemod@beta`)
5
+ * surfaces as its own version's prerelease id. Follow that train; fall back to
6
+ * beta for stable or local dev builds that carry no prerelease id.
7
+ */
8
+ export declare function resolveDefaultTag(version?: string | undefined): string;
9
+ //# sourceMappingURL=defaultTag.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaultTag.d.ts","sourceRoot":"","sources":["../../src/upgrade/defaultTag.ts"],"names":[],"mappings":"AAQA;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,MAAM,GAAG,SAA4B,GAAG,MAAM,CAGxF"}
@@ -0,0 +1,25 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { dirname, resolve } from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ import semver from 'semver';
5
+ /** Dist-tag used when neither --tag nor the running version implies one. */ const FALLBACK_TAG = 'beta';
6
+ /**
7
+ * Default Payload dist-tag when the caller did not pass --tag. Every package in
8
+ * the monorepo (this one included) is versioned and published in lockstep, so
9
+ * the dist-tag the codemod was invoked under (`npx @payloadcms/codemod@beta`)
10
+ * surfaces as its own version's prerelease id. Follow that train; fall back to
11
+ * beta for stable or local dev builds that carry no prerelease id.
12
+ */ export function resolveDefaultTag(version = readOwnVersion()) {
13
+ const id = version ? semver.prerelease(version)?.[0] : undefined;
14
+ return typeof id === 'string' ? id : FALLBACK_TAG;
15
+ }
16
+ function readOwnVersion() {
17
+ try {
18
+ const pkgPath = resolve(dirname(fileURLToPath(import.meta.url)), '..', '..', 'package.json');
19
+ return JSON.parse(readFileSync(pkgPath, 'utf8')).version;
20
+ } catch {
21
+ return undefined;
22
+ }
23
+ }
24
+
25
+ //# sourceMappingURL=defaultTag.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/upgrade/defaultTag.ts"],"sourcesContent":["import { readFileSync } from 'node:fs'\nimport { dirname, resolve } from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport semver from 'semver'\n\n/** Dist-tag used when neither --tag nor the running version implies one. */\nconst FALLBACK_TAG = 'beta'\n\n/**\n * Default Payload dist-tag when the caller did not pass --tag. Every package in\n * the monorepo (this one included) is versioned and published in lockstep, so\n * the dist-tag the codemod was invoked under (`npx @payloadcms/codemod@beta`)\n * surfaces as its own version's prerelease id. Follow that train; fall back to\n * beta for stable or local dev builds that carry no prerelease id.\n */\nexport function resolveDefaultTag(version: string | undefined = readOwnVersion()): string {\n const id = version ? semver.prerelease(version)?.[0] : undefined\n return typeof id === 'string' ? id : FALLBACK_TAG\n}\n\nfunction readOwnVersion(): string | undefined {\n try {\n const pkgPath = resolve(dirname(fileURLToPath(import.meta.url)), '..', '..', 'package.json')\n return JSON.parse(readFileSync(pkgPath, 'utf8')).version as string\n } catch {\n return undefined\n }\n}\n"],"names":["readFileSync","dirname","resolve","fileURLToPath","semver","FALLBACK_TAG","resolveDefaultTag","version","readOwnVersion","id","prerelease","undefined","pkgPath","url","JSON","parse"],"mappings":"AAAA,SAASA,YAAY,QAAQ,UAAS;AACtC,SAASC,OAAO,EAAEC,OAAO,QAAQ,YAAW;AAC5C,SAASC,aAAa,QAAQ,WAAU;AACxC,OAAOC,YAAY,SAAQ;AAE3B,0EAA0E,GAC1E,MAAMC,eAAe;AAErB;;;;;;CAMC,GACD,OAAO,SAASC,kBAAkBC,UAA8BC,gBAAgB;IAC9E,MAAMC,KAAKF,UAAUH,OAAOM,UAAU,CAACH,UAAU,CAAC,EAAE,GAAGI;IACvD,OAAO,OAAOF,OAAO,WAAWA,KAAKJ;AACvC;AAEA,SAASG;IACP,IAAI;QACF,MAAMI,UAAUV,QAAQD,QAAQE,cAAc,YAAYU,GAAG,IAAI,MAAM,MAAM;QAC7E,OAAOC,KAAKC,KAAK,CAACf,aAAaY,SAAS,SAASL,OAAO;IAC1D,EAAE,OAAM;QACN,OAAOI;IACT;AACF"}
@@ -0,0 +1,8 @@
1
+ import type { PackageManager } from './types.js';
2
+ /**
3
+ * Map a project directory's lockfile to its package manager. `exists` is
4
+ * injectable so callers can test offline; it defaults to the real filesystem.
5
+ * pnpm is checked first, so it wins in a multi-lockfile repo.
6
+ */
7
+ export declare function detectPackageManager(projectPath: string, exists?: (path: string) => boolean): PackageManager;
8
+ //# sourceMappingURL=detectPackageManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detectPackageManager.d.ts","sourceRoot":"","sources":["../../src/upgrade/detectPackageManager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAUhD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,EACnB,MAAM,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAoB,GAC7C,cAAc,CAOhB"}
@@ -0,0 +1,38 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ const LOCKFILES = [
4
+ {
5
+ file: 'pnpm-lock.yaml',
6
+ pm: 'pnpm'
7
+ },
8
+ {
9
+ file: 'yarn.lock',
10
+ pm: 'yarn'
11
+ },
12
+ {
13
+ file: 'bun.lockb',
14
+ pm: 'bun'
15
+ },
16
+ {
17
+ file: 'bun.lock',
18
+ pm: 'bun'
19
+ },
20
+ {
21
+ file: 'package-lock.json',
22
+ pm: 'npm'
23
+ }
24
+ ];
25
+ /**
26
+ * Map a project directory's lockfile to its package manager. `exists` is
27
+ * injectable so callers can test offline; it defaults to the real filesystem.
28
+ * pnpm is checked first, so it wins in a multi-lockfile repo.
29
+ */ export function detectPackageManager(projectPath, exists = existsSync) {
30
+ for (const { file, pm } of LOCKFILES){
31
+ if (exists(join(projectPath, file))) {
32
+ return pm;
33
+ }
34
+ }
35
+ return 'npm';
36
+ }
37
+
38
+ //# sourceMappingURL=detectPackageManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/upgrade/detectPackageManager.ts"],"sourcesContent":["import { existsSync } from 'node:fs'\nimport { join } from 'node:path'\n\nimport type { PackageManager } from './types.js'\n\nconst LOCKFILES: { file: string; pm: PackageManager }[] = [\n { file: 'pnpm-lock.yaml', pm: 'pnpm' },\n { file: 'yarn.lock', pm: 'yarn' },\n { file: 'bun.lockb', pm: 'bun' },\n { file: 'bun.lock', pm: 'bun' },\n { file: 'package-lock.json', pm: 'npm' },\n]\n\n/**\n * Map a project directory's lockfile to its package manager. `exists` is\n * injectable so callers can test offline; it defaults to the real filesystem.\n * pnpm is checked first, so it wins in a multi-lockfile repo.\n */\nexport function detectPackageManager(\n projectPath: string,\n exists: (path: string) => boolean = existsSync,\n): PackageManager {\n for (const { file, pm } of LOCKFILES) {\n if (exists(join(projectPath, file))) {\n return pm\n }\n }\n return 'npm'\n}\n"],"names":["existsSync","join","LOCKFILES","file","pm","detectPackageManager","projectPath","exists"],"mappings":"AAAA,SAASA,UAAU,QAAQ,UAAS;AACpC,SAASC,IAAI,QAAQ,YAAW;AAIhC,MAAMC,YAAoD;IACxD;QAAEC,MAAM;QAAkBC,IAAI;IAAO;IACrC;QAAED,MAAM;QAAaC,IAAI;IAAO;IAChC;QAAED,MAAM;QAAaC,IAAI;IAAM;IAC/B;QAAED,MAAM;QAAYC,IAAI;IAAM;IAC9B;QAAED,MAAM;QAAqBC,IAAI;IAAM;CACxC;AAED;;;;CAIC,GACD,OAAO,SAASC,qBACdC,WAAmB,EACnBC,SAAoCP,UAAU;IAE9C,KAAK,MAAM,EAAEG,IAAI,EAAEC,EAAE,EAAE,IAAIF,UAAW;QACpC,IAAIK,OAAON,KAAKK,aAAaH,QAAQ;YACnC,OAAOC;QACT;IACF;IACA,OAAO;AACT"}
@@ -0,0 +1,38 @@
1
+ import type { Agent, DispatchChoice } from './selectAgent.js';
2
+ import { runUpgrade } from './index.js';
3
+ type UpgradeFlags = Parameters<typeof runUpgrade>[0]['flags'];
4
+ type RunDispatchArgs = {
5
+ agentFlag?: string;
6
+ path: string;
7
+ upgradeFlags: UpgradeFlags;
8
+ };
9
+ export type DispatchDeps = {
10
+ detectAgents: () => Agent[];
11
+ isInteractive: boolean;
12
+ promptChoice: (agents: Agent[]) => Promise<DispatchChoice>;
13
+ renderPrompt: () => string;
14
+ runMechanical: (args: {
15
+ flags: UpgradeFlags;
16
+ path: string;
17
+ }) => Promise<{
18
+ failed: boolean;
19
+ }>;
20
+ spawnAgent: (args: {
21
+ agent: Agent;
22
+ cwd: string;
23
+ promptFilePath: string;
24
+ }) => Promise<{
25
+ code: number;
26
+ }>;
27
+ writePromptFile: (contents: string) => string;
28
+ };
29
+ /**
30
+ * Bare `upgrade`: pick how to run the full v3 -> v4 upgrade. Hands the
31
+ * orchestration prompt to a detected coding agent, runs the mechanical slice
32
+ * here, or prints the prompt for manual use.
33
+ */
34
+ export declare function runDispatch({ agentFlag, path, upgradeFlags }: RunDispatchArgs, deps?: DispatchDeps): Promise<{
35
+ failed: boolean;
36
+ }>;
37
+ export {};
38
+ //# sourceMappingURL=dispatch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../../src/upgrade/dispatch.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAE7D,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAKvC,KAAK,YAAY,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;AAE7D,KAAK,eAAe,GAAG;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,YAAY,EAAE,YAAY,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,YAAY,EAAE,MAAM,KAAK,EAAE,CAAA;IAC3B,aAAa,EAAE,OAAO,CAAA;IACtB,YAAY,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,OAAO,CAAC,cAAc,CAAC,CAAA;IAC1D,YAAY,EAAE,MAAM,MAAM,CAAA;IAC1B,aAAa,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,YAAY,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC;QAAE,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC,CAAA;IAC5F,UAAU,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,KAAK,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC;QACnF,IAAI,EAAE,MAAM,CAAA;KACb,CAAC,CAAA;IACF,eAAe,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAA;CAC9C,CAAA;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,eAAe,EAClD,IAAI,GAAE,YAAoC,GACzC,OAAO,CAAC;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC,CAmC9B"}
@@ -0,0 +1,132 @@
1
+ /* eslint-disable no-console */ import * as p from '@clack/prompts';
2
+ import { spawn } from 'node:child_process';
3
+ import { mkdtempSync, writeFileSync } from 'node:fs';
4
+ import { tmpdir } from 'node:os';
5
+ import { join, resolve } from 'node:path';
6
+ import { runUpgrade } from './index.js';
7
+ import { renderUpgradePrompt } from './prompt.js';
8
+ import { detectInstalledAgents, selectDispatch } from './selectAgent.js';
9
+ import { resolveSelfCommand } from './selfCommand.js';
10
+ /**
11
+ * Bare `upgrade`: pick how to run the full v3 -> v4 upgrade. Hands the
12
+ * orchestration prompt to a detected coding agent, runs the mechanical slice
13
+ * here, or prints the prompt for manual use.
14
+ */ export async function runDispatch({ agentFlag, path, upgradeFlags }, deps = defaultDispatchDeps()) {
15
+ const installed = deps.detectAgents();
16
+ let choice;
17
+ try {
18
+ choice = await selectDispatch({
19
+ agentFlag,
20
+ installed,
21
+ isInteractive: deps.isInteractive,
22
+ prompt: deps.promptChoice
23
+ });
24
+ } catch (err) {
25
+ console.error(err instanceof Error ? err.message : String(err));
26
+ return {
27
+ failed: true
28
+ };
29
+ }
30
+ if (choice.kind === 'run') {
31
+ return deps.runMechanical({
32
+ flags: upgradeFlags,
33
+ path
34
+ });
35
+ }
36
+ const promptText = deps.renderPrompt();
37
+ if (choice.kind === 'print') {
38
+ console.log(promptText);
39
+ return {
40
+ failed: false
41
+ };
42
+ }
43
+ const promptFilePath = deps.writePromptFile(promptText);
44
+ console.log(`Handing the upgrade prompt to ${choice.agent.label}...`);
45
+ const { code } = await deps.spawnAgent({
46
+ agent: choice.agent,
47
+ cwd: resolve(path),
48
+ promptFilePath
49
+ });
50
+ return {
51
+ failed: code !== 0
52
+ };
53
+ }
54
+ function defaultDispatchDeps() {
55
+ return {
56
+ detectAgents: detectInstalledAgents,
57
+ isInteractive: Boolean(process.stdin.isTTY && process.stdout.isTTY),
58
+ promptChoice: promptChoiceFromTerminal,
59
+ renderPrompt: ()=>renderUpgradePrompt({
60
+ command: resolveSelfCommand()
61
+ }),
62
+ runMechanical: (args)=>runUpgrade(args),
63
+ spawnAgent: spawnAgentInteractive,
64
+ writePromptFile: (contents)=>{
65
+ const dir = mkdtempSync(join(tmpdir(), 'payload-v4-upgrade-'));
66
+ const filePath = join(dir, 'prompt.md');
67
+ writeFileSync(filePath, contents);
68
+ return filePath;
69
+ }
70
+ };
71
+ }
72
+ /** Clack select: each installed agent, then run the slice or print the prompt. */ async function promptChoiceFromTerminal(agents) {
73
+ p.intro('Payload v3 -> v4 upgrade');
74
+ const selection = await p.select({
75
+ message: 'How do you want to run it?',
76
+ options: [
77
+ ...agents.map((agent)=>({
78
+ hint: `hand the prompt to \`${agent.command}\``,
79
+ label: agent.label,
80
+ value: agent.id
81
+ })),
82
+ {
83
+ hint: 'pin versions, install, run the codemods now',
84
+ label: 'Run the mechanical steps',
85
+ value: 'run'
86
+ },
87
+ {
88
+ hint: 'run it yourself or paste it elsewhere',
89
+ label: 'Just print the prompt',
90
+ value: 'print'
91
+ }
92
+ ]
93
+ });
94
+ // Cancelling (Ctrl-C) falls back to printing the prompt so the user keeps it.
95
+ if (p.isCancel(selection)) {
96
+ return {
97
+ kind: 'print'
98
+ };
99
+ }
100
+ if (selection === 'run') {
101
+ return {
102
+ kind: 'run'
103
+ };
104
+ }
105
+ const agent = agents.find((a)=>a.id === selection);
106
+ return agent ? {
107
+ agent,
108
+ kind: 'agent'
109
+ } : {
110
+ kind: 'print'
111
+ };
112
+ }
113
+ /** Interactive agent session seeded with a one-line pointer to the prompt file. */ function spawnAgentInteractive({ agent, cwd, promptFilePath }) {
114
+ const launchPrompt = `Read ${promptFilePath} and follow it to upgrade this project from Payload v3 to v4.`;
115
+ return new Promise((resolveSpawn)=>{
116
+ const child = spawn(agent.command, [
117
+ launchPrompt
118
+ ], {
119
+ cwd,
120
+ shell: false,
121
+ stdio: 'inherit'
122
+ });
123
+ child.on('close', (code)=>resolveSpawn({
124
+ code: code ?? 1
125
+ }));
126
+ child.on('error', ()=>resolveSpawn({
127
+ code: 1
128
+ }));
129
+ });
130
+ }
131
+
132
+ //# sourceMappingURL=dispatch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/upgrade/dispatch.ts"],"sourcesContent":["/* eslint-disable no-console */\nimport * as p from '@clack/prompts'\nimport { spawn } from 'node:child_process'\nimport { mkdtempSync, writeFileSync } from 'node:fs'\nimport { tmpdir } from 'node:os'\nimport { join, resolve } from 'node:path'\n\nimport type { Agent, DispatchChoice } from './selectAgent.js'\n\nimport { runUpgrade } from './index.js'\nimport { renderUpgradePrompt } from './prompt.js'\nimport { detectInstalledAgents, selectDispatch } from './selectAgent.js'\nimport { resolveSelfCommand } from './selfCommand.js'\n\ntype UpgradeFlags = Parameters<typeof runUpgrade>[0]['flags']\n\ntype RunDispatchArgs = {\n agentFlag?: string\n path: string\n upgradeFlags: UpgradeFlags\n}\n\nexport type DispatchDeps = {\n detectAgents: () => Agent[]\n isInteractive: boolean\n promptChoice: (agents: Agent[]) => Promise<DispatchChoice>\n renderPrompt: () => string\n runMechanical: (args: { flags: UpgradeFlags; path: string }) => Promise<{ failed: boolean }>\n spawnAgent: (args: { agent: Agent; cwd: string; promptFilePath: string }) => Promise<{\n code: number\n }>\n writePromptFile: (contents: string) => string\n}\n\n/**\n * Bare `upgrade`: pick how to run the full v3 -> v4 upgrade. Hands the\n * orchestration prompt to a detected coding agent, runs the mechanical slice\n * here, or prints the prompt for manual use.\n */\nexport async function runDispatch(\n { agentFlag, path, upgradeFlags }: RunDispatchArgs,\n deps: DispatchDeps = defaultDispatchDeps(),\n): Promise<{ failed: boolean }> {\n const installed = deps.detectAgents()\n\n let choice: DispatchChoice\n try {\n choice = await selectDispatch({\n agentFlag,\n installed,\n isInteractive: deps.isInteractive,\n prompt: deps.promptChoice,\n })\n } catch (err) {\n console.error(err instanceof Error ? err.message : String(err))\n return { failed: true }\n }\n\n if (choice.kind === 'run') {\n return deps.runMechanical({ flags: upgradeFlags, path })\n }\n\n const promptText = deps.renderPrompt()\n\n if (choice.kind === 'print') {\n console.log(promptText)\n return { failed: false }\n }\n\n const promptFilePath = deps.writePromptFile(promptText)\n console.log(`Handing the upgrade prompt to ${choice.agent.label}...`)\n const { code } = await deps.spawnAgent({\n agent: choice.agent,\n cwd: resolve(path),\n promptFilePath,\n })\n return { failed: code !== 0 }\n}\n\nfunction defaultDispatchDeps(): DispatchDeps {\n return {\n detectAgents: detectInstalledAgents,\n isInteractive: Boolean(process.stdin.isTTY && process.stdout.isTTY),\n promptChoice: promptChoiceFromTerminal,\n renderPrompt: () => renderUpgradePrompt({ command: resolveSelfCommand() }),\n runMechanical: (args) => runUpgrade(args),\n spawnAgent: spawnAgentInteractive,\n writePromptFile: (contents) => {\n const dir = mkdtempSync(join(tmpdir(), 'payload-v4-upgrade-'))\n const filePath = join(dir, 'prompt.md')\n writeFileSync(filePath, contents)\n return filePath\n },\n }\n}\n\n/** Clack select: each installed agent, then run the slice or print the prompt. */\nasync function promptChoiceFromTerminal(agents: Agent[]): Promise<DispatchChoice> {\n p.intro('Payload v3 -> v4 upgrade')\n const selection = await p.select({\n message: 'How do you want to run it?',\n options: [\n ...agents.map((agent) => ({\n hint: `hand the prompt to \\`${agent.command}\\``,\n label: agent.label,\n value: agent.id,\n })),\n {\n hint: 'pin versions, install, run the codemods now',\n label: 'Run the mechanical steps',\n value: 'run',\n },\n {\n hint: 'run it yourself or paste it elsewhere',\n label: 'Just print the prompt',\n value: 'print',\n },\n ],\n })\n\n // Cancelling (Ctrl-C) falls back to printing the prompt so the user keeps it.\n if (p.isCancel(selection)) {\n return { kind: 'print' }\n }\n if (selection === 'run') {\n return { kind: 'run' }\n }\n const agent = agents.find((a) => a.id === selection)\n return agent ? { agent, kind: 'agent' } : { kind: 'print' }\n}\n\n/** Interactive agent session seeded with a one-line pointer to the prompt file. */\nfunction spawnAgentInteractive({\n agent,\n cwd,\n promptFilePath,\n}: {\n agent: Agent\n cwd: string\n promptFilePath: string\n}): Promise<{ code: number }> {\n const launchPrompt = `Read ${promptFilePath} and follow it to upgrade this project from Payload v3 to v4.`\n return new Promise((resolveSpawn) => {\n const child = spawn(agent.command, [launchPrompt], { cwd, shell: false, stdio: 'inherit' })\n child.on('close', (code) => resolveSpawn({ code: code ?? 1 }))\n child.on('error', () => resolveSpawn({ code: 1 }))\n })\n}\n"],"names":["p","spawn","mkdtempSync","writeFileSync","tmpdir","join","resolve","runUpgrade","renderUpgradePrompt","detectInstalledAgents","selectDispatch","resolveSelfCommand","runDispatch","agentFlag","path","upgradeFlags","deps","defaultDispatchDeps","installed","detectAgents","choice","isInteractive","prompt","promptChoice","err","console","error","Error","message","String","failed","kind","runMechanical","flags","promptText","renderPrompt","log","promptFilePath","writePromptFile","agent","label","code","spawnAgent","cwd","Boolean","process","stdin","isTTY","stdout","promptChoiceFromTerminal","command","args","spawnAgentInteractive","contents","dir","filePath","agents","intro","selection","select","options","map","hint","value","id","isCancel","find","a","launchPrompt","Promise","resolveSpawn","child","shell","stdio","on"],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { UpgradeDeps } from './types.js';
2
+ import { runTransforms as defaultRunTransforms } from '../runner.js';
3
+ export type UpgradeFlags = {
4
+ dry: boolean;
5
+ force: boolean;
6
+ /** Explicit --tag; when absent the default is derived from the running version. */
7
+ tag?: string;
8
+ };
9
+ type RunUpgradeArgs = {
10
+ flags: UpgradeFlags;
11
+ path: string;
12
+ };
13
+ type RunUpgradeOverrides = {
14
+ runTransforms?: typeof defaultRunTransforms;
15
+ };
16
+ /**
17
+ * Compose the upgrade pipeline: preflight -> resolve -> rewrite -> install ->
18
+ * verify -> transforms -> report. Install runs before transforms so a failed
19
+ * install aborts before any codemod touches source files.
20
+ */
21
+ export declare function runUpgrade({ flags, path }: RunUpgradeArgs, deps?: UpgradeDeps, overrides?: RunUpgradeOverrides): Promise<{
22
+ failed: boolean;
23
+ }>;
24
+ export {};
25
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/upgrade/index.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAuC,WAAW,EAAE,MAAM,YAAY,CAAA;AAGlF,OAAO,EAAE,aAAa,IAAI,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAepE,MAAM,MAAM,YAAY,GAAG;IACzB,GAAG,EAAE,OAAO,CAAA;IACZ,KAAK,EAAE,OAAO,CAAA;IACd,mFAAmF;IACnF,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,CAAA;AAED,KAAK,cAAc,GAAG;IACpB,KAAK,EAAE,YAAY,CAAA;IACnB,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,KAAK,mBAAmB,GAAG;IACzB,aAAa,CAAC,EAAE,OAAO,oBAAoB,CAAA;CAC5C,CAAA;AAmBD;;;;GAIG;AACH,wBAAsB,UAAU,CAC9B,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,cAAc,EAC/B,IAAI,GAAE,WAA2B,EACjC,SAAS,GAAE,mBAAwB,GAClC,OAAO,CAAC;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC,CA6F9B"}
@@ -0,0 +1,209 @@
1
+ /* eslint-disable no-console */ import { spawn, spawnSync } from 'node:child_process';
2
+ import { existsSync, readFileSync, writeFileSync } from 'node:fs';
3
+ import { dirname, join, resolve } from 'node:path';
4
+ import { fileURLToPath } from 'node:url';
5
+ import semver from 'semver';
6
+ import { transforms as registry } from '../registry.js';
7
+ import { runTransforms as defaultRunTransforms } from '../runner.js';
8
+ import { loadPackageJsons, serializePackageJson } from '../utils/packageJson.js';
9
+ import { loadProject } from '../utils/project.js';
10
+ import { resolveDefaultTag } from './defaultTag.js';
11
+ import { detectPackageManager } from './detectPackageManager.js';
12
+ import { renderReport } from './report.js';
13
+ import { resolveVersions } from './resolveVersions.js';
14
+ import { isPayloadEslintPackage, isPlaceholderSpec, rewritePackageJson } from './rewritePackageJson.js';
15
+ import { runInstall } from './runInstall.js';
16
+ import { MIGRATION_GUIDE_RELATIVE_PATH, RUNBOOK_RELATIVE_PATH } from './types.js';
17
+ const defaultDeps = ()=>({
18
+ exists: existsSync,
19
+ fetchRegistry: async (name)=>{
20
+ const res = await fetch(`https://registry.npmjs.org/${name}`);
21
+ if (!res.ok) {
22
+ throw new Error(`Registry lookup failed for ${name}: ${res.status}`);
23
+ }
24
+ return await res.json();
25
+ },
26
+ spawn: (command, args, options)=>new Promise((resolveSpawn)=>{
27
+ const child = spawn(command, args, {
28
+ ...options,
29
+ shell: false,
30
+ stdio: 'inherit'
31
+ });
32
+ child.on('close', (code)=>resolveSpawn({
33
+ code: code ?? 1
34
+ }));
35
+ child.on('error', ()=>resolveSpawn({
36
+ code: 1
37
+ }));
38
+ })
39
+ });
40
+ /**
41
+ * Compose the upgrade pipeline: preflight -> resolve -> rewrite -> install ->
42
+ * verify -> transforms -> report. Install runs before transforms so a failed
43
+ * install aborts before any codemod touches source files.
44
+ */ export async function runUpgrade({ flags, path }, deps = defaultDeps(), overrides = {}) {
45
+ const runTransforms = overrides.runTransforms ?? defaultRunTransforms;
46
+ const projectPath = resolve(path);
47
+ // 1. PREFLIGHT
48
+ const packageManager = detectPackageManager(projectPath, deps.exists);
49
+ const packageJsonPath = join(projectPath, 'package.json');
50
+ if (!deps.exists(packageJsonPath)) {
51
+ console.error(`No package.json found at ${packageJsonPath}.`);
52
+ return {
53
+ failed: true
54
+ };
55
+ }
56
+ if (!flags.force && isGitTreeDirty(projectPath)) {
57
+ console.warn('Warning: git tree is dirty. Commit or stash first, or pass --force.');
58
+ }
59
+ // 2. RESOLVE VERSIONS
60
+ const tag = flags.tag ?? resolveDefaultTag();
61
+ const resolved = await resolveVersions({
62
+ fetchRegistry: deps.fetchRegistry,
63
+ tag
64
+ });
65
+ warnStaleNode(resolved);
66
+ // 3. REWRITE package.json
67
+ const original = readFileSync(packageJsonPath, 'utf8');
68
+ const data = JSON.parse(original);
69
+ const summary = rewritePackageJson({
70
+ data,
71
+ resolved
72
+ });
73
+ const nextText = serializePackageJson(data, original);
74
+ if (flags.dry) {
75
+ console.log('[dry] package.json changes:');
76
+ console.log(nextText);
77
+ console.log(`[dry] would run: ${packageManager} install`);
78
+ console.log('[dry] would then run Payload transforms.');
79
+ return {
80
+ failed: false
81
+ };
82
+ }
83
+ writeFileSync(packageJsonPath, nextText);
84
+ // 4. INSTALL
85
+ const install = await runInstall({
86
+ packageManager,
87
+ path: projectPath,
88
+ spawn: deps.spawn
89
+ });
90
+ if (install.code !== 0) {
91
+ console.error(`Install failed (exit ${install.code}). Aborting before transforms.`);
92
+ return {
93
+ failed: true
94
+ };
95
+ }
96
+ // 5. VERIFY RESOLUTION
97
+ const versions = verifyResolution(projectPath, data, resolved);
98
+ // 6. RUN PAYLOAD TRANSFORMS
99
+ // Reload package.jsons from disk so transforms see the rewritten root file
100
+ // (and any other package.json files in the tree) with the same reference
101
+ // semantics the bare transform path relies on for in-place mutation.
102
+ const packageJsons = loadPackageJsons(projectPath);
103
+ const project = loadProject(projectPath);
104
+ const snapshot = new Map(project.getSourceFiles().map((f)=>[
105
+ f.getFilePath(),
106
+ f.getFullText()
107
+ ]));
108
+ const { failed, results } = await runTransforms({
109
+ packageJsons: packageJsons.map(({ data: pkgData, path: pkgPath })=>({
110
+ data: pkgData,
111
+ path: pkgPath
112
+ })),
113
+ project,
114
+ transforms: registry
115
+ });
116
+ await Promise.all(project.getSourceFiles().filter((f)=>snapshot.get(f.getFilePath()) !== f.getFullText()).map((f)=>f.save()));
117
+ for (const pkg of packageJsons){
118
+ const text = serializePackageJson(pkg.data, pkg.originalText);
119
+ if (text !== pkg.originalText) {
120
+ writeFileSync(pkg.path, text);
121
+ }
122
+ }
123
+ // 7. REPORT
124
+ const distDir = resolve(dirname(fileURLToPath(import.meta.url)), '..');
125
+ const migrationGuideAbsPath = join(distDir, MIGRATION_GUIDE_RELATIVE_PATH);
126
+ const model = {
127
+ floorsWritten: summary.floorsWritten,
128
+ migrationGuidePath: deps.exists(migrationGuideAbsPath) ? migrationGuideAbsPath : undefined,
129
+ nextTarget: resolved.nextTarget,
130
+ overridesRemoved: summary.overridesRemoved,
131
+ placeholdersSkipped: summary.placeholdersSkipped,
132
+ runbookPath: join(distDir, RUNBOOK_RELATIVE_PATH),
133
+ transforms: results,
134
+ versions
135
+ };
136
+ console.log(renderReport(model));
137
+ // A resolution mismatch means the installed tree is not confirmed v4, so the
138
+ // run failed even when every transform succeeded (resolution over intent).
139
+ const resolutionFailed = versions.some((v)=>!v.ok);
140
+ return {
141
+ failed: failed || resolutionFailed
142
+ };
143
+ }
144
+ function warnStaleNode(resolved) {
145
+ const running = process.versions.node;
146
+ if (!semver.satisfies(running, resolved.enginesNode)) {
147
+ console.warn(`Warning: running Node ${running} does not satisfy ${resolved.enginesNode}. ` + 'Install may resolve incorrectly; switch Node before continuing.');
148
+ }
149
+ }
150
+ function verifyResolution(projectPath, data, resolved) {
151
+ const rows = [];
152
+ const deps = {
153
+ ...asRecord(data.dependencies),
154
+ ...asRecord(data.devDependencies)
155
+ };
156
+ for (const name of Object.keys(deps)){
157
+ if (name !== 'payload' && !name.startsWith('@payloadcms/')) {
158
+ continue;
159
+ }
160
+ // eslint packages are versioned independently, so they are not part of the
161
+ // lockstep-pinned set and cannot be verified against the payload version.
162
+ if (isPayloadEslintPackage(name)) {
163
+ continue;
164
+ }
165
+ // Workspace/catalog/link specs were left unpinned, so there is no exact
166
+ // version to verify against.
167
+ if (isPlaceholderSpec(deps[name])) {
168
+ continue;
169
+ }
170
+ const installed = readInstalledVersion(projectPath, name);
171
+ rows.push({
172
+ name,
173
+ ok: installed === resolved.payloadVersion,
174
+ resolved: installed,
175
+ wrote: resolved.payloadVersion
176
+ });
177
+ }
178
+ return rows;
179
+ }
180
+ function readInstalledVersion(projectPath, name) {
181
+ try {
182
+ const pkgPath = join(projectPath, 'node_modules', name, 'package.json');
183
+ return JSON.parse(readFileSync(pkgPath, 'utf8')).version;
184
+ } catch {
185
+ return undefined;
186
+ }
187
+ }
188
+ /**
189
+ * Best-effort dirty-tree check via `git status --porcelain`. Any failure (not a
190
+ * repo, git missing) yields no signal and is treated as clean, so the warning
191
+ * never produces a false alarm outside a working git tree.
192
+ */ function isGitTreeDirty(projectPath) {
193
+ const result = spawnSync('git', [
194
+ 'status',
195
+ '--porcelain'
196
+ ], {
197
+ cwd: projectPath,
198
+ encoding: 'utf8'
199
+ });
200
+ if (result.error || result.status !== 0) {
201
+ return false;
202
+ }
203
+ return result.stdout.trim().length > 0;
204
+ }
205
+ function asRecord(value) {
206
+ return typeof value === 'object' && value !== null ? value : {};
207
+ }
208
+
209
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/upgrade/index.ts"],"sourcesContent":["/* eslint-disable no-console */\nimport { spawn, spawnSync } from 'node:child_process'\nimport { existsSync, readFileSync, writeFileSync } from 'node:fs'\nimport { dirname, join, resolve } from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport semver from 'semver'\n\nimport type { ReportModel, VersionReportRow } from './report.js'\nimport type { RegistryPackument, ResolvedVersions, UpgradeDeps } from './types.js'\n\nimport { transforms as registry } from '../registry.js'\nimport { runTransforms as defaultRunTransforms } from '../runner.js'\nimport { loadPackageJsons, serializePackageJson } from '../utils/packageJson.js'\nimport { loadProject } from '../utils/project.js'\nimport { resolveDefaultTag } from './defaultTag.js'\nimport { detectPackageManager } from './detectPackageManager.js'\nimport { renderReport } from './report.js'\nimport { resolveVersions } from './resolveVersions.js'\nimport {\n isPayloadEslintPackage,\n isPlaceholderSpec,\n rewritePackageJson,\n} from './rewritePackageJson.js'\nimport { runInstall } from './runInstall.js'\nimport { MIGRATION_GUIDE_RELATIVE_PATH, RUNBOOK_RELATIVE_PATH } from './types.js'\n\nexport type UpgradeFlags = {\n dry: boolean\n force: boolean\n /** Explicit --tag; when absent the default is derived from the running version. */\n tag?: string\n}\n\ntype RunUpgradeArgs = {\n flags: UpgradeFlags\n path: string\n}\n\ntype RunUpgradeOverrides = {\n runTransforms?: typeof defaultRunTransforms\n}\n\nconst defaultDeps = (): UpgradeDeps => ({\n exists: existsSync,\n fetchRegistry: async (name) => {\n const res = await fetch(`https://registry.npmjs.org/${name}`)\n if (!res.ok) {\n throw new Error(`Registry lookup failed for ${name}: ${res.status}`)\n }\n return (await res.json()) as RegistryPackument\n },\n spawn: (command, args, options) =>\n new Promise((resolveSpawn) => {\n const child = spawn(command, args, { ...options, shell: false, stdio: 'inherit' })\n child.on('close', (code) => resolveSpawn({ code: code ?? 1 }))\n child.on('error', () => resolveSpawn({ code: 1 }))\n }),\n})\n\n/**\n * Compose the upgrade pipeline: preflight -> resolve -> rewrite -> install ->\n * verify -> transforms -> report. Install runs before transforms so a failed\n * install aborts before any codemod touches source files.\n */\nexport async function runUpgrade(\n { flags, path }: RunUpgradeArgs,\n deps: UpgradeDeps = defaultDeps(),\n overrides: RunUpgradeOverrides = {},\n): Promise<{ failed: boolean }> {\n const runTransforms = overrides.runTransforms ?? defaultRunTransforms\n const projectPath = resolve(path)\n\n // 1. PREFLIGHT\n const packageManager = detectPackageManager(projectPath, deps.exists)\n const packageJsonPath = join(projectPath, 'package.json')\n if (!deps.exists(packageJsonPath)) {\n console.error(`No package.json found at ${packageJsonPath}.`)\n return { failed: true }\n }\n if (!flags.force && isGitTreeDirty(projectPath)) {\n console.warn('Warning: git tree is dirty. Commit or stash first, or pass --force.')\n }\n\n // 2. RESOLVE VERSIONS\n const tag = flags.tag ?? resolveDefaultTag()\n const resolved = await resolveVersions({ fetchRegistry: deps.fetchRegistry, tag })\n warnStaleNode(resolved)\n\n // 3. REWRITE package.json\n const original = readFileSync(packageJsonPath, 'utf8')\n const data = JSON.parse(original) as Record<string, unknown>\n const summary = rewritePackageJson({ data, resolved })\n const nextText = serializePackageJson(data, original)\n\n if (flags.dry) {\n console.log('[dry] package.json changes:')\n console.log(nextText)\n console.log(`[dry] would run: ${packageManager} install`)\n console.log('[dry] would then run Payload transforms.')\n return { failed: false }\n }\n\n writeFileSync(packageJsonPath, nextText)\n\n // 4. INSTALL\n const install = await runInstall({ packageManager, path: projectPath, spawn: deps.spawn })\n if (install.code !== 0) {\n console.error(`Install failed (exit ${install.code}). Aborting before transforms.`)\n return { failed: true }\n }\n\n // 5. VERIFY RESOLUTION\n const versions = verifyResolution(projectPath, data, resolved)\n\n // 6. RUN PAYLOAD TRANSFORMS\n // Reload package.jsons from disk so transforms see the rewritten root file\n // (and any other package.json files in the tree) with the same reference\n // semantics the bare transform path relies on for in-place mutation.\n const packageJsons = loadPackageJsons(projectPath)\n const project = loadProject(projectPath)\n const snapshot = new Map(project.getSourceFiles().map((f) => [f.getFilePath(), f.getFullText()]))\n const { failed, results } = await runTransforms({\n packageJsons: packageJsons.map(({ data: pkgData, path: pkgPath }) => ({\n data: pkgData,\n path: pkgPath,\n })),\n project,\n transforms: registry,\n })\n await Promise.all(\n project\n .getSourceFiles()\n .filter((f) => snapshot.get(f.getFilePath()) !== f.getFullText())\n .map((f) => f.save()),\n )\n for (const pkg of packageJsons) {\n const text = serializePackageJson(pkg.data, pkg.originalText)\n if (text !== pkg.originalText) {\n writeFileSync(pkg.path, text)\n }\n }\n\n // 7. REPORT\n const distDir = resolve(dirname(fileURLToPath(import.meta.url)), '..')\n const migrationGuideAbsPath = join(distDir, MIGRATION_GUIDE_RELATIVE_PATH)\n const model: ReportModel = {\n floorsWritten: summary.floorsWritten,\n migrationGuidePath: deps.exists(migrationGuideAbsPath) ? migrationGuideAbsPath : undefined,\n nextTarget: resolved.nextTarget,\n overridesRemoved: summary.overridesRemoved,\n placeholdersSkipped: summary.placeholdersSkipped,\n runbookPath: join(distDir, RUNBOOK_RELATIVE_PATH),\n transforms: results,\n versions,\n }\n console.log(renderReport(model))\n\n // A resolution mismatch means the installed tree is not confirmed v4, so the\n // run failed even when every transform succeeded (resolution over intent).\n const resolutionFailed = versions.some((v) => !v.ok)\n return { failed: failed || resolutionFailed }\n}\n\nfunction warnStaleNode(resolved: ResolvedVersions): void {\n const running = process.versions.node\n if (!semver.satisfies(running, resolved.enginesNode)) {\n console.warn(\n `Warning: running Node ${running} does not satisfy ${resolved.enginesNode}. ` +\n 'Install may resolve incorrectly; switch Node before continuing.',\n )\n }\n}\n\nfunction verifyResolution(\n projectPath: string,\n data: Record<string, unknown>,\n resolved: ResolvedVersions,\n): VersionReportRow[] {\n const rows: VersionReportRow[] = []\n const deps = { ...asRecord(data.dependencies), ...asRecord(data.devDependencies) }\n for (const name of Object.keys(deps)) {\n if (name !== 'payload' && !name.startsWith('@payloadcms/')) {\n continue\n }\n // eslint packages are versioned independently, so they are not part of the\n // lockstep-pinned set and cannot be verified against the payload version.\n if (isPayloadEslintPackage(name)) {\n continue\n }\n // Workspace/catalog/link specs were left unpinned, so there is no exact\n // version to verify against.\n if (isPlaceholderSpec(deps[name])) {\n continue\n }\n const installed = readInstalledVersion(projectPath, name)\n rows.push({\n name,\n ok: installed === resolved.payloadVersion,\n resolved: installed,\n wrote: resolved.payloadVersion,\n })\n }\n return rows\n}\n\nfunction readInstalledVersion(projectPath: string, name: string): string | undefined {\n try {\n const pkgPath = join(projectPath, 'node_modules', name, 'package.json')\n return JSON.parse(readFileSync(pkgPath, 'utf8')).version as string\n } catch {\n return undefined\n }\n}\n\n/**\n * Best-effort dirty-tree check via `git status --porcelain`. Any failure (not a\n * repo, git missing) yields no signal and is treated as clean, so the warning\n * never produces a false alarm outside a working git tree.\n */\nfunction isGitTreeDirty(projectPath: string): boolean {\n const result = spawnSync('git', ['status', '--porcelain'], {\n cwd: projectPath,\n encoding: 'utf8',\n })\n if (result.error || result.status !== 0) {\n return false\n }\n return result.stdout.trim().length > 0\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return typeof value === 'object' && value !== null ? (value as Record<string, unknown>) : {}\n}\n"],"names":["spawn","spawnSync","existsSync","readFileSync","writeFileSync","dirname","join","resolve","fileURLToPath","semver","transforms","registry","runTransforms","defaultRunTransforms","loadPackageJsons","serializePackageJson","loadProject","resolveDefaultTag","detectPackageManager","renderReport","resolveVersions","isPayloadEslintPackage","isPlaceholderSpec","rewritePackageJson","runInstall","MIGRATION_GUIDE_RELATIVE_PATH","RUNBOOK_RELATIVE_PATH","defaultDeps","exists","fetchRegistry","name","res","fetch","ok","Error","status","json","command","args","options","Promise","resolveSpawn","child","shell","stdio","on","code","runUpgrade","flags","path","deps","overrides","projectPath","packageManager","packageJsonPath","console","error","failed","force","isGitTreeDirty","warn","tag","resolved","warnStaleNode","original","data","JSON","parse","summary","nextText","dry","log","install","versions","verifyResolution","packageJsons","project","snapshot","Map","getSourceFiles","map","f","getFilePath","getFullText","results","pkgData","pkgPath","all","filter","get","save","pkg","text","originalText","distDir","url","migrationGuideAbsPath","model","floorsWritten","migrationGuidePath","undefined","nextTarget","overridesRemoved","placeholdersSkipped","runbookPath","resolutionFailed","some","v","running","process","node","satisfies","enginesNode","rows","asRecord","dependencies","devDependencies","Object","keys","startsWith","installed","readInstalledVersion","push","payloadVersion","wrote","version","result","cwd","encoding","stdout","trim","length","value"],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Render the overarching agent prompt for a full Payload v3 -> v4 upgrade,
3
+ * Next.js 16 included. The prompt is a thin orchestrator: it sequences the
4
+ * gates, runs this package's `upgrade` command for the deterministic slice,
5
+ * delegates Next.js to Next's own agent workflow, and points at the migration
6
+ * guide for the judgment work rather than restating any of it. The text is
7
+ * project-agnostic (the agent runs it from the project root). `command` is the
8
+ * token that re-invokes this CLI, so a local checkout points followers at the
9
+ * local build instead of the published package. Pure: the caller prints it.
10
+ */
11
+ export declare function renderUpgradePrompt({ command, }?: {
12
+ command?: string;
13
+ }): string;
14
+ //# sourceMappingURL=prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/upgrade/prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,OAAmC,GACpC,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,MAAM,CAiEpC"}