@payloadcms/codemod 4.0.0-internal.b8a92d2 → 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 (257) hide show
  1. package/README.md +97 -30
  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 +16 -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-publish-specific-locale/index.d.ts.map +1 -1
  186. package/dist/transforms/remove-publish-specific-locale/index.js.map +1 -1
  187. package/dist/transforms/remove-storage-always-insert-fields/index.d.ts.map +1 -1
  188. package/dist/transforms/remove-storage-always-insert-fields/index.js +4 -0
  189. package/dist/transforms/remove-storage-always-insert-fields/index.js.map +1 -1
  190. package/dist/transforms/remove-versions-true/index.js +4 -4
  191. package/dist/transforms/remove-versions-true/index.js.map +1 -1
  192. package/dist/transforms/rename-diff-value-props/basic.input.js +38 -0
  193. package/dist/transforms/rename-diff-value-props/basic.input.js.map +1 -0
  194. package/dist/transforms/rename-diff-value-props/basic.output.js +38 -0
  195. package/dist/transforms/rename-diff-value-props/basic.output.js.map +1 -0
  196. package/dist/transforms/rename-diff-value-props/index.d.ts +3 -0
  197. package/dist/transforms/rename-diff-value-props/index.d.ts.map +1 -0
  198. package/dist/transforms/rename-diff-value-props/index.js +328 -0
  199. package/dist/transforms/rename-diff-value-props/index.js.map +1 -0
  200. package/dist/transforms/rename-diff-value-props/no-match.input.js +8 -0
  201. package/dist/transforms/rename-diff-value-props/no-match.input.js.map +1 -0
  202. package/dist/transforms/rename-experimental-table-feature/index.d.ts.map +1 -1
  203. package/dist/transforms/rename-experimental-table-feature/index.js +7 -1
  204. package/dist/transforms/rename-experimental-table-feature/index.js.map +1 -1
  205. package/dist/upgrade/defaultTag.d.ts +9 -0
  206. package/dist/upgrade/defaultTag.d.ts.map +1 -0
  207. package/dist/upgrade/defaultTag.js +25 -0
  208. package/dist/upgrade/defaultTag.js.map +1 -0
  209. package/dist/upgrade/detectPackageManager.d.ts +8 -0
  210. package/dist/upgrade/detectPackageManager.d.ts.map +1 -0
  211. package/dist/upgrade/detectPackageManager.js +38 -0
  212. package/dist/upgrade/detectPackageManager.js.map +1 -0
  213. package/dist/upgrade/dispatch.d.ts +38 -0
  214. package/dist/upgrade/dispatch.d.ts.map +1 -0
  215. package/dist/upgrade/dispatch.js +132 -0
  216. package/dist/upgrade/dispatch.js.map +1 -0
  217. package/dist/upgrade/index.d.ts +25 -0
  218. package/dist/upgrade/index.d.ts.map +1 -0
  219. package/dist/upgrade/index.js +209 -0
  220. package/dist/upgrade/index.js.map +1 -0
  221. package/dist/upgrade/prompt.d.ts +14 -0
  222. package/dist/upgrade/prompt.d.ts.map +1 -0
  223. package/dist/upgrade/prompt.js +77 -0
  224. package/dist/upgrade/prompt.js.map +1 -0
  225. package/dist/upgrade/report.d.ts +21 -0
  226. package/dist/upgrade/report.d.ts.map +1 -0
  227. package/dist/upgrade/report.js +47 -0
  228. package/dist/upgrade/report.js.map +1 -0
  229. package/dist/upgrade/resolveVersions.d.ts +13 -0
  230. package/dist/upgrade/resolveVersions.d.ts.map +1 -0
  231. package/dist/upgrade/resolveVersions.js +55 -0
  232. package/dist/upgrade/resolveVersions.js.map +1 -0
  233. package/dist/upgrade/rewritePackageJson.d.ts +32 -0
  234. package/dist/upgrade/rewritePackageJson.d.ts.map +1 -0
  235. package/dist/upgrade/rewritePackageJson.js +164 -0
  236. package/dist/upgrade/rewritePackageJson.js.map +1 -0
  237. package/dist/upgrade/runInstall.d.ts +16 -0
  238. package/dist/upgrade/runInstall.d.ts.map +1 -0
  239. package/dist/upgrade/runInstall.js +17 -0
  240. package/dist/upgrade/runInstall.js.map +1 -0
  241. package/dist/upgrade/selectAgent.d.ts +45 -0
  242. package/dist/upgrade/selectAgent.d.ts.map +1 -0
  243. package/dist/upgrade/selectAgent.js +54 -0
  244. package/dist/upgrade/selectAgent.js.map +1 -0
  245. package/dist/upgrade/selfCommand.d.ts +13 -0
  246. package/dist/upgrade/selfCommand.d.ts.map +1 -0
  247. package/dist/upgrade/selfCommand.js +17 -0
  248. package/dist/upgrade/selfCommand.js.map +1 -0
  249. package/dist/upgrade/types.d.ts +47 -0
  250. package/dist/upgrade/types.d.ts.map +1 -0
  251. package/dist/upgrade/types.js +11 -0
  252. package/dist/upgrade/types.js.map +1 -0
  253. package/dist/utils/project.d.ts +10 -0
  254. package/dist/utils/project.d.ts.map +1 -0
  255. package/dist/utils/project.js +43 -0
  256. package/dist/utils/project.js.map +1 -0
  257. package/package.json +8 -4
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/upgrade/selectAgent.ts"],"sourcesContent":["import { spawnSync } from 'node:child_process'\n\nexport type AgentId = 'claude' | 'codex'\n\nexport type Agent = {\n /** Executable expected on PATH. */\n command: string\n id: AgentId\n /** Human label shown in the picker. */\n label: string\n}\n\n/** Coding agents the dispatcher can hand the orchestration prompt to. */\nexport const AGENTS: Agent[] = [\n { id: 'claude', command: 'claude', label: 'Claude Code' },\n { id: 'codex', command: 'codex', label: 'Codex' },\n]\n\n/**\n * Hand the prompt to `agent`, run the mechanical slice here, or print the\n * prompt to stdout for manual use.\n */\nexport type DispatchChoice = { agent: Agent; kind: 'agent' } | { kind: 'print' } | { kind: 'run' }\n\nexport type SelectDispatchArgs = {\n /** Value of `--agent`, if the user pinned one. */\n agentFlag?: string\n /** Agents found on PATH. */\n installed: Agent[]\n /** Both stdin and stdout are a TTY, so a picker can run. */\n isInteractive: boolean\n /** Interactive picker; only called when a choice is genuinely needed. */\n prompt: (agents: Agent[]) => Promise<DispatchChoice>\n}\n\n/**\n * Decide how to dispatch the upgrade, kept pure so the branching is unit-tested\n * without a terminal. `--agent` wins and is strict (unknown or not-installed\n * throws). A non-interactive session falls back to printing the prompt. Any TTY\n * opens the picker, which offers running the mechanical slice or printing even\n * when no agent is installed.\n */\nexport async function selectDispatch({\n agentFlag,\n installed,\n isInteractive,\n prompt,\n}: SelectDispatchArgs): Promise<DispatchChoice> {\n if (agentFlag) {\n const known = AGENTS.find((a) => a.id === agentFlag)\n if (!known) {\n throw new Error(\n `Unknown agent \"${agentFlag}\". Supported: ${AGENTS.map((a) => a.id).join(', ')}.`,\n )\n }\n if (!installed.some((a) => a.id === known.id)) {\n throw new Error(\n `Agent \"${agentFlag}\" is not installed (command \"${known.command}\" not found).`,\n )\n }\n return { agent: known, kind: 'agent' }\n }\n\n if (!isInteractive) {\n return { kind: 'print' }\n }\n\n return prompt(installed)\n}\n\n/** Filter the registry down to agents whose command resolves on PATH. */\nexport function detectInstalledAgents(\n isAvailable: (command: string) => boolean = isCommandAvailable,\n): Agent[] {\n return AGENTS.filter((agent) => isAvailable(agent.command))\n}\n\n/** Cross-platform PATH probe using the OS command locator. */\nexport function isCommandAvailable(command: string): boolean {\n const locator = process.platform === 'win32' ? 'where' : 'which'\n const result = spawnSync(locator, [command], { stdio: 'ignore' })\n return result.status === 0\n}\n"],"names":["spawnSync","AGENTS","id","command","label","selectDispatch","agentFlag","installed","isInteractive","prompt","known","find","a","Error","map","join","some","agent","kind","detectInstalledAgents","isAvailable","isCommandAvailable","filter","locator","process","platform","result","stdio","status"],"mappings":"AAAA,SAASA,SAAS,QAAQ,qBAAoB;AAY9C,uEAAuE,GACvE,OAAO,MAAMC,SAAkB;IAC7B;QAAEC,IAAI;QAAUC,SAAS;QAAUC,OAAO;IAAc;IACxD;QAAEF,IAAI;QAASC,SAAS;QAASC,OAAO;IAAQ;CACjD,CAAA;AAmBD;;;;;;CAMC,GACD,OAAO,eAAeC,eAAe,EACnCC,SAAS,EACTC,SAAS,EACTC,aAAa,EACbC,MAAM,EACa;IACnB,IAAIH,WAAW;QACb,MAAMI,QAAQT,OAAOU,IAAI,CAAC,CAACC,IAAMA,EAAEV,EAAE,KAAKI;QAC1C,IAAI,CAACI,OAAO;YACV,MAAM,IAAIG,MACR,CAAC,eAAe,EAAEP,UAAU,cAAc,EAAEL,OAAOa,GAAG,CAAC,CAACF,IAAMA,EAAEV,EAAE,EAAEa,IAAI,CAAC,MAAM,CAAC,CAAC;QAErF;QACA,IAAI,CAACR,UAAUS,IAAI,CAAC,CAACJ,IAAMA,EAAEV,EAAE,KAAKQ,MAAMR,EAAE,GAAG;YAC7C,MAAM,IAAIW,MACR,CAAC,OAAO,EAAEP,UAAU,6BAA6B,EAAEI,MAAMP,OAAO,CAAC,aAAa,CAAC;QAEnF;QACA,OAAO;YAAEc,OAAOP;YAAOQ,MAAM;QAAQ;IACvC;IAEA,IAAI,CAACV,eAAe;QAClB,OAAO;YAAEU,MAAM;QAAQ;IACzB;IAEA,OAAOT,OAAOF;AAChB;AAEA,uEAAuE,GACvE,OAAO,SAASY,sBACdC,cAA4CC,kBAAkB;IAE9D,OAAOpB,OAAOqB,MAAM,CAAC,CAACL,QAAUG,YAAYH,MAAMd,OAAO;AAC3D;AAEA,4DAA4D,GAC5D,OAAO,SAASkB,mBAAmBlB,OAAe;IAChD,MAAMoB,UAAUC,QAAQC,QAAQ,KAAK,UAAU,UAAU;IACzD,MAAMC,SAAS1B,UAAUuB,SAAS;QAACpB;KAAQ,EAAE;QAAEwB,OAAO;IAAS;IAC/D,OAAOD,OAAOE,MAAM,KAAK;AAC3B"}
@@ -0,0 +1,13 @@
1
+ type ResolveSelfCommandArgs = {
2
+ argv1?: string;
3
+ override?: string;
4
+ };
5
+ /**
6
+ * The command a follower types to re-invoke this CLI. A published install lives
7
+ * under node_modules and is reached with npx; a source checkout is reached with
8
+ * `node <bin>` so local testing runs the local build, not a published version.
9
+ * `PAYLOAD_CODEMOD_COMMAND` overrides both.
10
+ */
11
+ export declare function resolveSelfCommand({ argv1, override, }?: ResolveSelfCommandArgs): string;
12
+ export {};
13
+ //# sourceMappingURL=selfCommand.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selfCommand.d.ts","sourceRoot":"","sources":["../../src/upgrade/selfCommand.ts"],"names":[],"mappings":"AAEA,KAAK,sBAAsB,GAAG;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,KAAuB,EACvB,QAA8C,GAC/C,GAAE,sBAA2B,GAAG,MAAM,CAQtC"}
@@ -0,0 +1,17 @@
1
+ import { resolve } from 'node:path';
2
+ /**
3
+ * The command a follower types to re-invoke this CLI. A published install lives
4
+ * under node_modules and is reached with npx; a source checkout is reached with
5
+ * `node <bin>` so local testing runs the local build, not a published version.
6
+ * `PAYLOAD_CODEMOD_COMMAND` overrides both.
7
+ */ export function resolveSelfCommand({ argv1 = process.argv[1], override = process.env.PAYLOAD_CODEMOD_COMMAND } = {}) {
8
+ if (override) {
9
+ return override;
10
+ }
11
+ if (argv1 && !argv1.includes('node_modules')) {
12
+ return `node ${resolve(argv1)}`;
13
+ }
14
+ return 'npx @payloadcms/codemod';
15
+ }
16
+
17
+ //# sourceMappingURL=selfCommand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/upgrade/selfCommand.ts"],"sourcesContent":["import { resolve } from 'node:path'\n\ntype ResolveSelfCommandArgs = {\n argv1?: string\n override?: string\n}\n\n/**\n * The command a follower types to re-invoke this CLI. A published install lives\n * under node_modules and is reached with npx; a source checkout is reached with\n * `node <bin>` so local testing runs the local build, not a published version.\n * `PAYLOAD_CODEMOD_COMMAND` overrides both.\n */\nexport function resolveSelfCommand({\n argv1 = process.argv[1],\n override = process.env.PAYLOAD_CODEMOD_COMMAND,\n}: ResolveSelfCommandArgs = {}): string {\n if (override) {\n return override\n }\n if (argv1 && !argv1.includes('node_modules')) {\n return `node ${resolve(argv1)}`\n }\n return 'npx @payloadcms/codemod'\n}\n"],"names":["resolve","resolveSelfCommand","argv1","process","argv","override","env","PAYLOAD_CODEMOD_COMMAND","includes"],"mappings":"AAAA,SAASA,OAAO,QAAQ,YAAW;AAOnC;;;;;CAKC,GACD,OAAO,SAASC,mBAAmB,EACjCC,QAAQC,QAAQC,IAAI,CAAC,EAAE,EACvBC,WAAWF,QAAQG,GAAG,CAACC,uBAAuB,EACvB,GAAG,CAAC,CAAC;IAC5B,IAAIF,UAAU;QACZ,OAAOA;IACT;IACA,IAAIH,SAAS,CAACA,MAAMM,QAAQ,CAAC,iBAAiB;QAC5C,OAAO,CAAC,KAAK,EAAER,QAAQE,QAAQ;IACjC;IACA,OAAO;AACT"}
@@ -0,0 +1,47 @@
1
+ /** Minimal shape of an npm registry packument we read. */
2
+ export type RegistryPackument = {
3
+ 'dist-tags'?: Record<string, string>;
4
+ versions?: Record<string, {
5
+ engines?: Record<string, string>;
6
+ peerDependencies?: Record<string, string>;
7
+ }>;
8
+ };
9
+ export type FetchRegistry = (packageName: string) => Promise<RegistryPackument>;
10
+ export type Spawn = (command: string, args: string[], options: {
11
+ cwd: string;
12
+ env: NodeJS.ProcessEnv;
13
+ }) => Promise<{
14
+ code: number;
15
+ }>;
16
+ export type PackageManager = 'bun' | 'npm' | 'pnpm' | 'yarn';
17
+ /** Target versions the command resolves. Only some are written; see `written`. */
18
+ export type ResolvedVersions = {
19
+ /** Copied verbatim into engines.node. */
20
+ enginesNode: string;
21
+ /** Newest patch within @payloadcms/next's peer range. REPORT ONLY, never written. */
22
+ nextTarget: null | string;
23
+ /** Exact canary, applied in lockstep to payload + every @payloadcms/*. */
24
+ payloadVersion: string;
25
+ /** TypeScript floor (guide-sourced constant). */
26
+ typescript: string;
27
+ /** Newest @types/node patch within the Node major. */
28
+ typesNode: string;
29
+ };
30
+ export type UpgradeDeps = {
31
+ exists: (path: string) => boolean;
32
+ fetchRegistry: FetchRegistry;
33
+ spawn: Spawn;
34
+ };
35
+ /**
36
+ * TypeScript floor for Payload v4. Nothing machine-readable declares it, so it
37
+ * lives here, sourced from the v4 migration guide prose. Bump alongside the guide.
38
+ */
39
+ export declare const TS_FLOOR = "6.0.3";
40
+ /** Path (relative to dist/) of the bundled runbook the command points users to. */
41
+ export declare const RUNBOOK_RELATIVE_PATH = "runbook/payload-v4-upgrade.md";
42
+ /**
43
+ * Path (relative to dist/) of the bundled migration guide. Present only when the
44
+ * monorepo copy was available at build time; the report points at it when it exists.
45
+ */
46
+ export declare const MIGRATION_GUIDE_RELATIVE_PATH = "runbook/v4.mdx";
47
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/upgrade/types.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAC1D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACpC,QAAQ,CAAC,EAAE,MAAM,CACf,MAAM,EACN;QACE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAChC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAC1C,CACF,CAAA;CACF,CAAA;AAED,MAAM,MAAM,aAAa,GAAG,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAA;AAE/E,MAAM,MAAM,KAAK,GAAG,CAClB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAA;CAAE,KAC7C,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAAA;AAE9B,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAA;AAE5D,kFAAkF;AAClF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,yCAAyC;IACzC,WAAW,EAAE,MAAM,CAAA;IACnB,qFAAqF;IACrF,UAAU,EAAE,IAAI,GAAG,MAAM,CAAA;IACzB,0EAA0E;IAC1E,cAAc,EAAE,MAAM,CAAA;IACtB,iDAAiD;IACjD,UAAU,EAAE,MAAM,CAAA;IAClB,sDAAsD;IACtD,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAA;IACjC,aAAa,EAAE,aAAa,CAAA;IAC5B,KAAK,EAAE,KAAK,CAAA;CACb,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,QAAQ,UAAU,CAAA;AAE/B,mFAAmF;AACnF,eAAO,MAAM,qBAAqB,kCAAkC,CAAA;AAEpE;;;GAGG;AACH,eAAO,MAAM,6BAA6B,mBAAmB,CAAA"}
@@ -0,0 +1,11 @@
1
+ /** Minimal shape of an npm registry packument we read. */ /**
2
+ * TypeScript floor for Payload v4. Nothing machine-readable declares it, so it
3
+ * lives here, sourced from the v4 migration guide prose. Bump alongside the guide.
4
+ */ export const TS_FLOOR = '6.0.3';
5
+ /** Path (relative to dist/) of the bundled runbook the command points users to. */ export const RUNBOOK_RELATIVE_PATH = 'runbook/payload-v4-upgrade.md';
6
+ /**
7
+ * Path (relative to dist/) of the bundled migration guide. Present only when the
8
+ * monorepo copy was available at build time; the report points at it when it exists.
9
+ */ export const MIGRATION_GUIDE_RELATIVE_PATH = 'runbook/v4.mdx';
10
+
11
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/upgrade/types.ts"],"sourcesContent":["/** Minimal shape of an npm registry packument we read. */\nexport type RegistryPackument = {\n 'dist-tags'?: Record<string, string>\n versions?: Record<\n string,\n {\n engines?: Record<string, string>\n peerDependencies?: Record<string, string>\n }\n >\n}\n\nexport type FetchRegistry = (packageName: string) => Promise<RegistryPackument>\n\nexport type Spawn = (\n command: string,\n args: string[],\n options: { cwd: string; env: NodeJS.ProcessEnv },\n) => Promise<{ code: number }>\n\nexport type PackageManager = 'bun' | 'npm' | 'pnpm' | 'yarn'\n\n/** Target versions the command resolves. Only some are written; see `written`. */\nexport type ResolvedVersions = {\n /** Copied verbatim into engines.node. */\n enginesNode: string\n /** Newest patch within @payloadcms/next's peer range. REPORT ONLY, never written. */\n nextTarget: null | string\n /** Exact canary, applied in lockstep to payload + every @payloadcms/*. */\n payloadVersion: string\n /** TypeScript floor (guide-sourced constant). */\n typescript: string\n /** Newest @types/node patch within the Node major. */\n typesNode: string\n}\n\nexport type UpgradeDeps = {\n exists: (path: string) => boolean\n fetchRegistry: FetchRegistry\n spawn: Spawn\n}\n\n/**\n * TypeScript floor for Payload v4. Nothing machine-readable declares it, so it\n * lives here, sourced from the v4 migration guide prose. Bump alongside the guide.\n */\nexport const TS_FLOOR = '6.0.3'\n\n/** Path (relative to dist/) of the bundled runbook the command points users to. */\nexport const RUNBOOK_RELATIVE_PATH = 'runbook/payload-v4-upgrade.md'\n\n/**\n * Path (relative to dist/) of the bundled migration guide. Present only when the\n * monorepo copy was available at build time; the report points at it when it exists.\n */\nexport const MIGRATION_GUIDE_RELATIVE_PATH = 'runbook/v4.mdx'\n"],"names":["TS_FLOOR","RUNBOOK_RELATIVE_PATH","MIGRATION_GUIDE_RELATIVE_PATH"],"mappings":"AAAA,wDAAwD,GA0CxD;;;CAGC,GACD,OAAO,MAAMA,WAAW,QAAO;AAE/B,iFAAiF,GACjF,OAAO,MAAMC,wBAAwB,gCAA+B;AAEpE;;;CAGC,GACD,OAAO,MAAMC,gCAAgC,iBAAgB"}
@@ -0,0 +1,10 @@
1
+ import { Project } from 'ts-morph';
2
+ /**
3
+ * Load a ts-morph Project rooted at `path`, using its tsconfig.json if present.
4
+ *
5
+ * Falls back to globbing when the tsconfig resolves no source files (e.g. a
6
+ * solution-style config with only `references`), so transforms never silently
7
+ * run against an empty project.
8
+ */
9
+ export declare function loadProject(path: string): Project;
10
+ //# sourceMappingURL=project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/utils/project.ts"],"names":[],"mappings":"AAEA,OAAO,EAAmB,OAAO,EAAa,MAAM,UAAU,CAAA;AAQ9D;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAgBjD"}
@@ -0,0 +1,43 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { resolve } from 'node:path';
3
+ import { IndentationText, Project, QuoteKind } from 'ts-morph';
4
+ const manipulationSettings = {
5
+ indentationText: IndentationText.TwoSpaces,
6
+ quoteKind: QuoteKind.Single,
7
+ useTrailingCommas: true
8
+ };
9
+ /**
10
+ * Load a ts-morph Project rooted at `path`, using its tsconfig.json if present.
11
+ *
12
+ * Falls back to globbing when the tsconfig resolves no source files (e.g. a
13
+ * solution-style config with only `references`), so transforms never silently
14
+ * run against an empty project.
15
+ */ export function loadProject(path) {
16
+ const tsconfigPath = resolve(path, 'tsconfig.json');
17
+ if (existsSync(tsconfigPath)) {
18
+ const project = new Project({
19
+ manipulationSettings,
20
+ tsConfigFilePath: tsconfigPath
21
+ });
22
+ if (project.getSourceFiles().length > 0) {
23
+ return project;
24
+ }
25
+ console.warn(`Warning: ${tsconfigPath} resolved no source files. Falling back to globbing ${path}.`);
26
+ }
27
+ return loadProjectFromGlob(path);
28
+ }
29
+ function loadProjectFromGlob(path) {
30
+ const project = new Project({
31
+ manipulationSettings
32
+ });
33
+ project.addSourceFilesAtPaths([
34
+ `${path}/**/*.{ts,tsx,js,jsx}`,
35
+ '!**/node_modules/**',
36
+ '!**/dist/**',
37
+ '!**/.next/**',
38
+ '!**/build/**'
39
+ ]);
40
+ return project;
41
+ }
42
+
43
+ //# sourceMappingURL=project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/project.ts"],"sourcesContent":["import { existsSync } from 'node:fs'\nimport { resolve } from 'node:path'\nimport { IndentationText, Project, QuoteKind } from 'ts-morph'\n\nconst manipulationSettings = {\n indentationText: IndentationText.TwoSpaces,\n quoteKind: QuoteKind.Single,\n useTrailingCommas: true,\n}\n\n/**\n * Load a ts-morph Project rooted at `path`, using its tsconfig.json if present.\n *\n * Falls back to globbing when the tsconfig resolves no source files (e.g. a\n * solution-style config with only `references`), so transforms never silently\n * run against an empty project.\n */\nexport function loadProject(path: string): Project {\n const tsconfigPath = resolve(path, 'tsconfig.json')\n\n if (existsSync(tsconfigPath)) {\n const project = new Project({ manipulationSettings, tsConfigFilePath: tsconfigPath })\n\n if (project.getSourceFiles().length > 0) {\n return project\n }\n\n console.warn(\n `Warning: ${tsconfigPath} resolved no source files. Falling back to globbing ${path}.`,\n )\n }\n\n return loadProjectFromGlob(path)\n}\n\nfunction loadProjectFromGlob(path: string): Project {\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"],"names":["existsSync","resolve","IndentationText","Project","QuoteKind","manipulationSettings","indentationText","TwoSpaces","quoteKind","Single","useTrailingCommas","loadProject","path","tsconfigPath","project","tsConfigFilePath","getSourceFiles","length","console","warn","loadProjectFromGlob","addSourceFilesAtPaths"],"mappings":"AAAA,SAASA,UAAU,QAAQ,UAAS;AACpC,SAASC,OAAO,QAAQ,YAAW;AACnC,SAASC,eAAe,EAAEC,OAAO,EAAEC,SAAS,QAAQ,WAAU;AAE9D,MAAMC,uBAAuB;IAC3BC,iBAAiBJ,gBAAgBK,SAAS;IAC1CC,WAAWJ,UAAUK,MAAM;IAC3BC,mBAAmB;AACrB;AAEA;;;;;;CAMC,GACD,OAAO,SAASC,YAAYC,IAAY;IACtC,MAAMC,eAAeZ,QAAQW,MAAM;IAEnC,IAAIZ,WAAWa,eAAe;QAC5B,MAAMC,UAAU,IAAIX,QAAQ;YAAEE;YAAsBU,kBAAkBF;QAAa;QAEnF,IAAIC,QAAQE,cAAc,GAAGC,MAAM,GAAG,GAAG;YACvC,OAAOH;QACT;QAEAI,QAAQC,IAAI,CACV,CAAC,SAAS,EAAEN,aAAa,oDAAoD,EAAED,KAAK,CAAC,CAAC;IAE1F;IAEA,OAAOQ,oBAAoBR;AAC7B;AAEA,SAASQ,oBAAoBR,IAAY;IACvC,MAAME,UAAU,IAAIX,QAAQ;QAAEE;IAAqB;IACnDS,QAAQO,qBAAqB,CAAC;QAC5B,GAAGT,KAAK,qBAAqB,CAAC;QAC9B;QACA;QACA;QACA;KACD;IACD,OAAOE;AACT"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@payloadcms/codemod",
3
- "version": "4.0.0-internal.b8a92d2",
3
+ "version": "4.0.0-internal.bf4bcce",
4
4
  "description": "Codemods for migrating Payload projects across versions.",
5
5
  "homepage": "https://payloadcms.com",
6
6
  "repository": {
@@ -29,20 +29,24 @@
29
29
  "README.md"
30
30
  ],
31
31
  "dependencies": {
32
- "ts-morph": "^21.0.1"
32
+ "@clack/prompts": "1.2.0",
33
+ "semver": "^7.8.5",
34
+ "ts-morph": "^28.0.0"
33
35
  },
34
36
  "devDependencies": {
35
37
  "@swc/core": "1.15.3",
36
38
  "@types/node": "24.12.3",
39
+ "@types/semver": "^7.7.1",
37
40
  "rimraf": "6.0.1",
38
41
  "typescript": "npm:@typescript/typescript6@6.0.2",
39
- "vitest": "5.0.0"
42
+ "vitest": "5.0.1"
40
43
  },
41
44
  "engines": {
42
45
  "node": ">=24.15.0"
43
46
  },
44
47
  "scripts": {
45
- "build": "pnpm typecheck && pnpm build:swc",
48
+ "build": "pnpm typecheck && pnpm build:swc && pnpm build:copy-docs",
49
+ "build:copy-docs": "node scripts/copy-migration-guide.mjs",
46
50
  "build:swc": "swc ./src -d ./dist --config-file .swcrc --strip-leading-paths",
47
51
  "clean": "rimraf -g {dist,*.tsbuildinfo}",
48
52
  "lint": "eslint .",