@payloadcms/codemod 4.0.0-internal.3ed7230 → 4.0.0-internal.44ac9c8

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 (363) hide show
  1. package/README.md +93 -28
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +41 -27
  4. package/dist/cli.js.map +1 -1
  5. package/dist/cli.parseFlags.d.ts +14 -0
  6. package/dist/cli.parseFlags.d.ts.map +1 -1
  7. package/dist/cli.parseFlags.js +29 -2
  8. package/dist/cli.parseFlags.js.map +1 -1
  9. package/dist/registry.d.ts.map +1 -1
  10. package/dist/registry.js +14 -0
  11. package/dist/registry.js.map +1 -1
  12. package/dist/runbook/payload-v4-upgrade.md +55 -0
  13. package/dist/runbook/v4.mdx +2226 -0
  14. package/dist/transforms/add-override-access-true/basic.input.js +41 -0
  15. package/dist/transforms/add-override-access-true/basic.input.js.map +1 -0
  16. package/dist/transforms/add-override-access-true/basic.output.js +50 -0
  17. package/dist/transforms/add-override-access-true/basic.output.js.map +1 -0
  18. package/dist/transforms/add-override-access-true/comment-between-properties.input.js +11 -0
  19. package/dist/transforms/add-override-access-true/comment-between-properties.input.js.map +1 -0
  20. package/dist/transforms/add-override-access-true/comment-between-properties.output.js +12 -0
  21. package/dist/transforms/add-override-access-true/comment-between-properties.output.js.map +1 -0
  22. package/dist/transforms/add-override-access-true/index.d.ts +20 -0
  23. package/dist/transforms/add-override-access-true/index.d.ts.map +1 -0
  24. package/dist/transforms/add-override-access-true/index.js +208 -0
  25. package/dist/transforms/add-override-access-true/index.js.map +1 -0
  26. package/dist/transforms/add-override-access-true/javascript.input.d.ts +6 -0
  27. package/dist/transforms/add-override-access-true/javascript.input.d.ts.map +1 -0
  28. package/dist/transforms/add-override-access-true/javascript.input.js +24 -0
  29. package/dist/transforms/add-override-access-true/javascript.input.js.map +1 -0
  30. package/dist/transforms/add-override-access-true/javascript.output.d.ts +6 -0
  31. package/dist/transforms/add-override-access-true/javascript.output.d.ts.map +1 -0
  32. package/dist/transforms/add-override-access-true/javascript.output.js +26 -0
  33. package/dist/transforms/add-override-access-true/javascript.output.js.map +1 -0
  34. package/dist/transforms/add-override-access-true/non-matching.input.js +42 -0
  35. package/dist/transforms/add-override-access-true/non-matching.input.js.map +1 -0
  36. package/dist/transforms/add-override-access-true/non-matching.output.js +42 -0
  37. package/dist/transforms/add-override-access-true/non-matching.output.js.map +1 -0
  38. package/dist/transforms/add-override-access-true/single-line.input.js +13 -0
  39. package/dist/transforms/add-override-access-true/single-line.input.js.map +1 -0
  40. package/dist/transforms/add-override-access-true/single-line.output.js +17 -0
  41. package/dist/transforms/add-override-access-true/single-line.output.js.map +1 -0
  42. package/dist/transforms/add-override-access-true/trailing-comment.input.js +10 -0
  43. package/dist/transforms/add-override-access-true/trailing-comment.input.js.map +1 -0
  44. package/dist/transforms/add-override-access-true/trailing-comment.output.js +12 -0
  45. package/dist/transforms/add-override-access-true/trailing-comment.output.js.map +1 -0
  46. package/dist/transforms/migrate-aliased-exports/index.d.ts.map +1 -1
  47. package/dist/transforms/migrate-aliased-exports/index.js +6 -5
  48. package/dist/transforms/migrate-aliased-exports/index.js.map +1 -1
  49. package/dist/transforms/migrate-aliased-exports/request.input.js +6 -0
  50. package/dist/transforms/migrate-aliased-exports/request.input.js.map +1 -0
  51. package/dist/transforms/migrate-aliased-exports/request.output.js +5 -0
  52. package/dist/transforms/migrate-aliased-exports/request.output.js.map +1 -0
  53. package/dist/transforms/migrate-authorship-default/already-set.input.js +15 -0
  54. package/dist/transforms/migrate-authorship-default/already-set.input.js.map +1 -0
  55. package/dist/transforms/migrate-authorship-default/already-set.output.js +15 -0
  56. package/dist/transforms/migrate-authorship-default/already-set.output.js.map +1 -0
  57. package/dist/transforms/migrate-authorship-default/basic.input.js +16 -0
  58. package/dist/transforms/migrate-authorship-default/basic.input.js.map +1 -0
  59. package/dist/transforms/migrate-authorship-default/basic.output.js +18 -0
  60. package/dist/transforms/migrate-authorship-default/basic.output.js.map +1 -0
  61. package/dist/transforms/migrate-authorship-default/build-config.input.js +32 -0
  62. package/dist/transforms/migrate-authorship-default/build-config.input.js.map +1 -0
  63. package/dist/transforms/migrate-authorship-default/build-config.output.js +35 -0
  64. package/dist/transforms/migrate-authorship-default/build-config.output.js.map +1 -0
  65. package/dist/transforms/migrate-authorship-default/globals.input.js +16 -0
  66. package/dist/transforms/migrate-authorship-default/globals.input.js.map +1 -0
  67. package/dist/transforms/migrate-authorship-default/globals.output.js +17 -0
  68. package/dist/transforms/migrate-authorship-default/globals.output.js.map +1 -0
  69. package/dist/transforms/migrate-authorship-default/index.d.ts +11 -0
  70. package/dist/transforms/migrate-authorship-default/index.d.ts.map +1 -0
  71. package/dist/transforms/migrate-authorship-default/index.js +141 -0
  72. package/dist/transforms/migrate-authorship-default/index.js.map +1 -0
  73. package/dist/transforms/migrate-authorship-default/non-matching.input.js +18 -0
  74. package/dist/transforms/migrate-authorship-default/non-matching.input.js.map +1 -0
  75. package/dist/transforms/migrate-authorship-default/non-matching.output.js +18 -0
  76. package/dist/transforms/migrate-authorship-default/non-matching.output.js.map +1 -0
  77. package/dist/transforms/migrate-authorship-default/satisfies.input.js +11 -0
  78. package/dist/transforms/migrate-authorship-default/satisfies.input.js.map +1 -0
  79. package/dist/transforms/migrate-authorship-default/satisfies.output.js +13 -0
  80. package/dist/transforms/migrate-authorship-default/satisfies.output.js.map +1 -0
  81. package/dist/transforms/migrate-field-component-types/basic.input.js +8 -0
  82. package/dist/transforms/migrate-field-component-types/basic.input.js.map +1 -0
  83. package/dist/transforms/migrate-field-component-types/basic.output.js +8 -0
  84. package/dist/transforms/migrate-field-component-types/basic.output.js.map +1 -0
  85. package/dist/transforms/migrate-field-component-types/index.d.ts +3 -0
  86. package/dist/transforms/migrate-field-component-types/index.d.ts.map +1 -0
  87. package/dist/transforms/migrate-field-component-types/index.js +616 -0
  88. package/dist/transforms/migrate-field-component-types/index.js.map +1 -0
  89. package/dist/transforms/migrate-payload-request-creation/aliases.input.js +8 -0
  90. package/dist/transforms/migrate-payload-request-creation/aliases.input.js.map +1 -0
  91. package/dist/transforms/migrate-payload-request-creation/aliases.output.js +31 -0
  92. package/dist/transforms/migrate-payload-request-creation/aliases.output.js.map +1 -0
  93. package/dist/transforms/migrate-payload-request-creation/collision.input.js +9 -0
  94. package/dist/transforms/migrate-payload-request-creation/collision.input.js.map +1 -0
  95. package/dist/transforms/migrate-payload-request-creation/comments.input.js +9 -0
  96. package/dist/transforms/migrate-payload-request-creation/comments.input.js.map +1 -0
  97. package/dist/transforms/migrate-payload-request-creation/comments.output.js +34 -0
  98. package/dist/transforms/migrate-payload-request-creation/comments.output.js.map +1 -0
  99. package/dist/transforms/migrate-payload-request-creation/empty.input.js +5 -0
  100. package/dist/transforms/migrate-payload-request-creation/empty.input.js.map +1 -0
  101. package/dist/transforms/migrate-payload-request-creation/empty.output.js +7 -0
  102. package/dist/transforms/migrate-payload-request-creation/empty.output.js.map +1 -0
  103. package/dist/transforms/migrate-payload-request-creation/evaluation-order.input.js +10 -0
  104. package/dist/transforms/migrate-payload-request-creation/evaluation-order.input.js.map +1 -0
  105. package/dist/transforms/migrate-payload-request-creation/expression.input.js +8 -0
  106. package/dist/transforms/migrate-payload-request-creation/expression.input.js.map +1 -0
  107. package/dist/transforms/migrate-payload-request-creation/expression.output.js +8 -0
  108. package/dist/transforms/migrate-payload-request-creation/expression.output.js.map +1 -0
  109. package/dist/transforms/migrate-payload-request-creation/getters.input.js +52 -0
  110. package/dist/transforms/migrate-payload-request-creation/getters.input.js.map +1 -0
  111. package/dist/transforms/migrate-payload-request-creation/index.d.ts +3 -0
  112. package/dist/transforms/migrate-payload-request-creation/index.d.ts.map +1 -0
  113. package/dist/transforms/migrate-payload-request-creation/index.js +236 -0
  114. package/dist/transforms/migrate-payload-request-creation/index.js.map +1 -0
  115. package/dist/transforms/migrate-payload-request-creation/internal.input.js +6 -0
  116. package/dist/transforms/migrate-payload-request-creation/internal.input.js.map +1 -0
  117. package/dist/transforms/migrate-payload-request-creation/internal.output.js +6 -0
  118. package/dist/transforms/migrate-payload-request-creation/internal.output.js.map +1 -0
  119. package/dist/transforms/migrate-payload-request-creation/non-matching.input.js +5 -0
  120. package/dist/transforms/migrate-payload-request-creation/non-matching.input.js.map +1 -0
  121. package/dist/transforms/migrate-payload-request-creation/populated.input.js +7 -0
  122. package/dist/transforms/migrate-payload-request-creation/populated.input.js.map +1 -0
  123. package/dist/transforms/migrate-payload-request-creation/populated.output.js +30 -0
  124. package/dist/transforms/migrate-payload-request-creation/populated.output.js.map +1 -0
  125. package/dist/transforms/migrate-payload-request-creation/shadowed.input.js +7 -0
  126. package/dist/transforms/migrate-payload-request-creation/shadowed.input.js.map +1 -0
  127. package/dist/transforms/migrate-payload-request-creation/shadowed.output.js +9 -0
  128. package/dist/transforms/migrate-payload-request-creation/shadowed.output.js.map +1 -0
  129. package/dist/transforms/migrate-payload-request-creation/shorthand.input.js +12 -0
  130. package/dist/transforms/migrate-payload-request-creation/shorthand.input.js.map +1 -0
  131. package/dist/transforms/migrate-payload-request-creation/shorthand.output.js +12 -0
  132. package/dist/transforms/migrate-payload-request-creation/shorthand.output.js.map +1 -0
  133. package/dist/transforms/migrate-payload-request-creation/unsupported.input.js +9 -0
  134. package/dist/transforms/migrate-payload-request-creation/unsupported.input.js.map +1 -0
  135. package/dist/transforms/migrate-sharp-to-transformer/basic.input.js +28 -0
  136. package/dist/transforms/migrate-sharp-to-transformer/basic.input.js.map +1 -0
  137. package/dist/transforms/migrate-sharp-to-transformer/basic.output.js +39 -0
  138. package/dist/transforms/migrate-sharp-to-transformer/basic.output.js.map +1 -0
  139. package/dist/transforms/migrate-sharp-to-transformer/existing-transformers.input.js +27 -0
  140. package/dist/transforms/migrate-sharp-to-transformer/existing-transformers.input.js.map +1 -0
  141. package/dist/transforms/migrate-sharp-to-transformer/existing-transformers.output.js +33 -0
  142. package/dist/transforms/migrate-sharp-to-transformer/existing-transformers.output.js.map +1 -0
  143. package/dist/transforms/migrate-sharp-to-transformer/index.d.ts +3 -0
  144. package/dist/transforms/migrate-sharp-to-transformer/index.d.ts.map +1 -0
  145. package/dist/transforms/migrate-sharp-to-transformer/index.js +280 -0
  146. package/dist/transforms/migrate-sharp-to-transformer/index.js.map +1 -0
  147. package/dist/transforms/migrate-sharp-to-transformer/no-match.input.js +11 -0
  148. package/dist/transforms/migrate-sharp-to-transformer/no-match.input.js.map +1 -0
  149. package/dist/transforms/migrate-sharp-to-transformer/no-match.output.js +11 -0
  150. package/dist/transforms/migrate-sharp-to-transformer/no-match.output.js.map +1 -0
  151. package/dist/transforms/migrate-versions-default/index.js +5 -5
  152. package/dist/transforms/migrate-versions-default/index.js.map +1 -1
  153. package/dist/transforms/remove-default-locale-publish-option/all-value.input.js +13 -0
  154. package/dist/transforms/remove-default-locale-publish-option/all-value.input.js.map +1 -0
  155. package/dist/transforms/remove-default-locale-publish-option/basic.input.js +13 -0
  156. package/dist/transforms/remove-default-locale-publish-option/basic.input.js.map +1 -0
  157. package/dist/transforms/remove-default-locale-publish-option/basic.output.js +12 -0
  158. package/dist/transforms/remove-default-locale-publish-option/basic.output.js.map +1 -0
  159. package/dist/transforms/remove-default-locale-publish-option/dynamic.input.js +17 -0
  160. package/dist/transforms/remove-default-locale-publish-option/dynamic.input.js.map +1 -0
  161. package/dist/transforms/remove-default-locale-publish-option/index.d.ts +10 -0
  162. package/dist/transforms/remove-default-locale-publish-option/index.d.ts.map +1 -0
  163. package/dist/transforms/remove-default-locale-publish-option/index.js +103 -0
  164. package/dist/transforms/remove-default-locale-publish-option/index.js.map +1 -0
  165. package/dist/transforms/remove-default-locale-publish-option/no-match.input.js +10 -0
  166. package/dist/transforms/remove-default-locale-publish-option/no-match.input.js.map +1 -0
  167. package/dist/transforms/remove-default-locale-publish-option/no-match.output.js +10 -0
  168. package/dist/transforms/remove-default-locale-publish-option/no-match.output.js.map +1 -0
  169. package/dist/transforms/remove-default-locale-publish-option/reassigned.input.js +22 -0
  170. package/dist/transforms/remove-default-locale-publish-option/reassigned.input.js.map +1 -0
  171. package/dist/transforms/remove-default-locale-publish-option/shorthand.input.js +14 -0
  172. package/dist/transforms/remove-default-locale-publish-option/shorthand.input.js.map +1 -0
  173. package/dist/transforms/remove-default-locale-publish-option/shorthand.output.js +13 -0
  174. package/dist/transforms/remove-default-locale-publish-option/shorthand.output.js.map +1 -0
  175. package/dist/transforms/remove-publish-specific-locale/index.d.ts.map +1 -1
  176. package/dist/transforms/remove-publish-specific-locale/index.js.map +1 -1
  177. package/dist/transforms/remove-storage-always-insert-fields/aliased.input.js +11 -0
  178. package/dist/transforms/remove-storage-always-insert-fields/aliased.input.js.map +1 -0
  179. package/dist/transforms/remove-storage-always-insert-fields/aliased.output.js +10 -0
  180. package/dist/transforms/remove-storage-always-insert-fields/aliased.output.js.map +1 -0
  181. package/dist/transforms/remove-storage-always-insert-fields/basic.input.js +54 -0
  182. package/dist/transforms/remove-storage-always-insert-fields/basic.input.js.map +1 -0
  183. package/dist/transforms/remove-storage-always-insert-fields/basic.output.js +48 -0
  184. package/dist/transforms/remove-storage-always-insert-fields/basic.output.js.map +1 -0
  185. package/dist/transforms/remove-storage-always-insert-fields/index.d.ts +3 -0
  186. package/dist/transforms/remove-storage-always-insert-fields/index.d.ts.map +1 -0
  187. package/dist/transforms/remove-storage-always-insert-fields/index.js +71 -0
  188. package/dist/transforms/remove-storage-always-insert-fields/index.js.map +1 -0
  189. package/dist/transforms/remove-storage-always-insert-fields/no-match.input.js +27 -0
  190. package/dist/transforms/remove-storage-always-insert-fields/no-match.input.js.map +1 -0
  191. package/dist/transforms/remove-storage-always-insert-fields/no-match.output.js +27 -0
  192. package/dist/transforms/remove-storage-always-insert-fields/no-match.output.js.map +1 -0
  193. package/dist/transforms/remove-versions-true/index.js +4 -4
  194. package/dist/transforms/remove-versions-true/index.js.map +1 -1
  195. package/dist/upgrade/defaultTag.d.ts +9 -0
  196. package/dist/upgrade/defaultTag.d.ts.map +1 -0
  197. package/dist/upgrade/defaultTag.js +25 -0
  198. package/dist/upgrade/defaultTag.js.map +1 -0
  199. package/dist/upgrade/detectPackageManager.d.ts +8 -0
  200. package/dist/upgrade/detectPackageManager.d.ts.map +1 -0
  201. package/dist/upgrade/detectPackageManager.js +38 -0
  202. package/dist/upgrade/detectPackageManager.js.map +1 -0
  203. package/dist/upgrade/dispatch.d.ts +38 -0
  204. package/dist/upgrade/dispatch.d.ts.map +1 -0
  205. package/dist/upgrade/dispatch.js +132 -0
  206. package/dist/upgrade/dispatch.js.map +1 -0
  207. package/dist/upgrade/index.d.ts +25 -0
  208. package/dist/upgrade/index.d.ts.map +1 -0
  209. package/dist/upgrade/index.js +209 -0
  210. package/dist/upgrade/index.js.map +1 -0
  211. package/dist/upgrade/prompt.d.ts +14 -0
  212. package/dist/upgrade/prompt.d.ts.map +1 -0
  213. package/dist/upgrade/prompt.js +77 -0
  214. package/dist/upgrade/prompt.js.map +1 -0
  215. package/dist/upgrade/report.d.ts +21 -0
  216. package/dist/upgrade/report.d.ts.map +1 -0
  217. package/dist/upgrade/report.js +47 -0
  218. package/dist/upgrade/report.js.map +1 -0
  219. package/dist/upgrade/resolveVersions.d.ts +13 -0
  220. package/dist/upgrade/resolveVersions.d.ts.map +1 -0
  221. package/dist/upgrade/resolveVersions.js +55 -0
  222. package/dist/upgrade/resolveVersions.js.map +1 -0
  223. package/dist/upgrade/rewritePackageJson.d.ts +32 -0
  224. package/dist/upgrade/rewritePackageJson.d.ts.map +1 -0
  225. package/dist/upgrade/rewritePackageJson.js +123 -0
  226. package/dist/upgrade/rewritePackageJson.js.map +1 -0
  227. package/dist/upgrade/runInstall.d.ts +16 -0
  228. package/dist/upgrade/runInstall.d.ts.map +1 -0
  229. package/dist/upgrade/runInstall.js +17 -0
  230. package/dist/upgrade/runInstall.js.map +1 -0
  231. package/dist/upgrade/selectAgent.d.ts +45 -0
  232. package/dist/upgrade/selectAgent.d.ts.map +1 -0
  233. package/dist/upgrade/selectAgent.js +54 -0
  234. package/dist/upgrade/selectAgent.js.map +1 -0
  235. package/dist/upgrade/selfCommand.d.ts +13 -0
  236. package/dist/upgrade/selfCommand.d.ts.map +1 -0
  237. package/dist/upgrade/selfCommand.js +17 -0
  238. package/dist/upgrade/selfCommand.js.map +1 -0
  239. package/dist/upgrade/types.d.ts +47 -0
  240. package/dist/upgrade/types.d.ts.map +1 -0
  241. package/dist/upgrade/types.js +11 -0
  242. package/dist/upgrade/types.js.map +1 -0
  243. package/dist/utils/project.d.ts +4 -0
  244. package/dist/utils/project.d.ts.map +1 -0
  245. package/dist/utils/project.js +30 -0
  246. package/dist/utils/project.js.map +1 -0
  247. package/package.json +8 -4
  248. package/dist/cli.parseFlags.spec.d.ts +0 -2
  249. package/dist/cli.parseFlags.spec.d.ts.map +0 -1
  250. package/dist/cli.parseFlags.spec.js +0 -49
  251. package/dist/cli.parseFlags.spec.js.map +0 -1
  252. package/dist/runner.spec.d.ts +0 -2
  253. package/dist/runner.spec.d.ts.map +0 -1
  254. package/dist/runner.spec.js +0 -88
  255. package/dist/runner.spec.js.map +0 -1
  256. package/dist/transforms/example-noop/index.spec.d.ts +0 -2
  257. package/dist/transforms/example-noop/index.spec.d.ts.map +0 -1
  258. package/dist/transforms/example-noop/index.spec.js +0 -29
  259. package/dist/transforms/example-noop/index.spec.js.map +0 -1
  260. package/dist/transforms/globals-components-edit/index.spec.d.ts +0 -2
  261. package/dist/transforms/globals-components-edit/index.spec.d.ts.map +0 -1
  262. package/dist/transforms/globals-components-edit/index.spec.js +0 -37
  263. package/dist/transforms/globals-components-edit/index.spec.js.map +0 -1
  264. package/dist/transforms/migrate-after-operation-read/index.spec.d.ts +0 -2
  265. package/dist/transforms/migrate-after-operation-read/index.spec.d.ts.map +0 -1
  266. package/dist/transforms/migrate-after-operation-read/index.spec.js +0 -62
  267. package/dist/transforms/migrate-after-operation-read/index.spec.js.map +0 -1
  268. package/dist/transforms/migrate-aliased-exports/index.spec.d.ts +0 -2
  269. package/dist/transforms/migrate-aliased-exports/index.spec.d.ts.map +0 -1
  270. package/dist/transforms/migrate-aliased-exports/index.spec.js +0 -55
  271. package/dist/transforms/migrate-aliased-exports/index.spec.js.map +0 -1
  272. package/dist/transforms/migrate-azure-chunk-large-files/index.spec.d.ts +0 -2
  273. package/dist/transforms/migrate-azure-chunk-large-files/index.spec.d.ts.map +0 -1
  274. package/dist/transforms/migrate-azure-chunk-large-files/index.spec.js +0 -67
  275. package/dist/transforms/migrate-azure-chunk-large-files/index.spec.js.map +0 -1
  276. package/dist/transforms/migrate-block-references-to-blocks/index.spec.d.ts +0 -2
  277. package/dist/transforms/migrate-block-references-to-blocks/index.spec.d.ts.map +0 -1
  278. package/dist/transforms/migrate-block-references-to-blocks/index.spec.js +0 -45
  279. package/dist/transforms/migrate-block-references-to-blocks/index.spec.js.map +0 -1
  280. package/dist/transforms/migrate-build-script/index.spec.d.ts +0 -2
  281. package/dist/transforms/migrate-build-script/index.spec.d.ts.map +0 -1
  282. package/dist/transforms/migrate-build-script/index.spec.js +0 -81
  283. package/dist/transforms/migrate-build-script/index.spec.js.map +0 -1
  284. package/dist/transforms/migrate-db-types-subpath/index.spec.d.ts +0 -2
  285. package/dist/transforms/migrate-db-types-subpath/index.spec.d.ts.map +0 -1
  286. package/dist/transforms/migrate-db-types-subpath/index.spec.js +0 -46
  287. package/dist/transforms/migrate-db-types-subpath/index.spec.js.map +0 -1
  288. package/dist/transforms/migrate-disabled-fields/index.spec.d.ts +0 -2
  289. package/dist/transforms/migrate-disabled-fields/index.spec.d.ts.map +0 -1
  290. package/dist/transforms/migrate-disabled-fields/index.spec.js +0 -73
  291. package/dist/transforms/migrate-disabled-fields/index.spec.js.map +0 -1
  292. package/dist/transforms/migrate-document-title-context/index.spec.d.ts +0 -2
  293. package/dist/transforms/migrate-document-title-context/index.spec.d.ts.map +0 -1
  294. package/dist/transforms/migrate-document-title-context/index.spec.js +0 -86
  295. package/dist/transforms/migrate-document-title-context/index.spec.js.map +0 -1
  296. package/dist/transforms/migrate-force-select/index.spec.d.ts +0 -2
  297. package/dist/transforms/migrate-force-select/index.spec.d.ts.map +0 -1
  298. package/dist/transforms/migrate-force-select/index.spec.js +0 -107
  299. package/dist/transforms/migrate-force-select/index.spec.js.map +0 -1
  300. package/dist/transforms/migrate-hide-api-url/index.spec.d.ts +0 -2
  301. package/dist/transforms/migrate-hide-api-url/index.spec.d.ts.map +0 -1
  302. package/dist/transforms/migrate-hide-api-url/index.spec.js +0 -118
  303. package/dist/transforms/migrate-hide-api-url/index.spec.js.map +0 -1
  304. package/dist/transforms/migrate-import-export-hooks/index.spec.d.ts +0 -2
  305. package/dist/transforms/migrate-import-export-hooks/index.spec.d.ts.map +0 -1
  306. package/dist/transforms/migrate-import-export-hooks/index.spec.js +0 -65
  307. package/dist/transforms/migrate-import-export-hooks/index.spec.js.map +0 -1
  308. package/dist/transforms/migrate-list-view-select-api/index.spec.d.ts +0 -2
  309. package/dist/transforms/migrate-list-view-select-api/index.spec.d.ts.map +0 -1
  310. package/dist/transforms/migrate-list-view-select-api/index.spec.js +0 -37
  311. package/dist/transforms/migrate-list-view-select-api/index.spec.js.map +0 -1
  312. package/dist/transforms/migrate-next-generate-viewport-export/index.spec.d.ts +0 -2
  313. package/dist/transforms/migrate-next-generate-viewport-export/index.spec.d.ts.map +0 -1
  314. package/dist/transforms/migrate-next-generate-viewport-export/index.spec.js +0 -41
  315. package/dist/transforms/migrate-next-generate-viewport-export/index.spec.js.map +0 -1
  316. package/dist/transforms/migrate-next-subpath-exports/index.spec.d.ts +0 -2
  317. package/dist/transforms/migrate-next-subpath-exports/index.spec.d.ts.map +0 -1
  318. package/dist/transforms/migrate-next-subpath-exports/index.spec.js +0 -46
  319. package/dist/transforms/migrate-next-subpath-exports/index.spec.js.map +0 -1
  320. package/dist/transforms/migrate-slug-field/index.spec.d.ts +0 -2
  321. package/dist/transforms/migrate-slug-field/index.spec.d.ts.map +0 -1
  322. package/dist/transforms/migrate-slug-field/index.spec.js +0 -47
  323. package/dist/transforms/migrate-slug-field/index.spec.js.map +0 -1
  324. package/dist/transforms/migrate-storage-adapters-to-config/index.spec.d.ts +0 -2
  325. package/dist/transforms/migrate-storage-adapters-to-config/index.spec.d.ts.map +0 -1
  326. package/dist/transforms/migrate-storage-adapters-to-config/index.spec.js +0 -85
  327. package/dist/transforms/migrate-storage-adapters-to-config/index.spec.js.map +0 -1
  328. package/dist/transforms/migrate-versions-default/index.spec.d.ts +0 -2
  329. package/dist/transforms/migrate-versions-default/index.spec.d.ts.map +0 -1
  330. package/dist/transforms/migrate-versions-default/index.spec.js +0 -81
  331. package/dist/transforms/migrate-versions-default/index.spec.js.map +0 -1
  332. package/dist/transforms/remove-group-by-true/index.spec.d.ts +0 -2
  333. package/dist/transforms/remove-group-by-true/index.spec.d.ts.map +0 -1
  334. package/dist/transforms/remove-group-by-true/index.spec.js +0 -47
  335. package/dist/transforms/remove-group-by-true/index.spec.js.map +0 -1
  336. package/dist/transforms/remove-localize-status-config/index.spec.d.ts +0 -2
  337. package/dist/transforms/remove-localize-status-config/index.spec.d.ts.map +0 -1
  338. package/dist/transforms/remove-localize-status-config/index.spec.js +0 -38
  339. package/dist/transforms/remove-localize-status-config/index.spec.js.map +0 -1
  340. package/dist/transforms/remove-publish-specific-locale/index.spec.d.ts +0 -2
  341. package/dist/transforms/remove-publish-specific-locale/index.spec.d.ts.map +0 -1
  342. package/dist/transforms/remove-publish-specific-locale/index.spec.js +0 -47
  343. package/dist/transforms/remove-publish-specific-locale/index.spec.js.map +0 -1
  344. package/dist/transforms/remove-versions-true/index.spec.d.ts +0 -2
  345. package/dist/transforms/remove-versions-true/index.spec.d.ts.map +0 -1
  346. package/dist/transforms/remove-versions-true/index.spec.js +0 -38
  347. package/dist/transforms/remove-versions-true/index.spec.js.map +0 -1
  348. package/dist/transforms/rename-experimental-table-feature/index.spec.d.ts +0 -2
  349. package/dist/transforms/rename-experimental-table-feature/index.spec.d.ts.map +0 -1
  350. package/dist/transforms/rename-experimental-table-feature/index.spec.js +0 -54
  351. package/dist/transforms/rename-experimental-table-feature/index.spec.js.map +0 -1
  352. package/dist/transforms/rename-storage-adapters-to-storage/index.spec.d.ts +0 -2
  353. package/dist/transforms/rename-storage-adapters-to-storage/index.spec.d.ts.map +0 -1
  354. package/dist/transforms/rename-storage-adapters-to-storage/index.spec.js +0 -55
  355. package/dist/transforms/rename-storage-adapters-to-storage/index.spec.js.map +0 -1
  356. package/dist/transforms/rename-typescript-schema-to-json-schema/index.spec.d.ts +0 -2
  357. package/dist/transforms/rename-typescript-schema-to-json-schema/index.spec.d.ts.map +0 -1
  358. package/dist/transforms/rename-typescript-schema-to-json-schema/index.spec.js +0 -45
  359. package/dist/transforms/rename-typescript-schema-to-json-schema/index.spec.js.map +0 -1
  360. package/dist/utils/packageJson.spec.d.ts +0 -2
  361. package/dist/utils/packageJson.spec.d.ts.map +0 -1
  362. package/dist/utils/packageJson.spec.js +0 -41
  363. package/dist/utils/packageJson.spec.js.map +0 -1
@@ -0,0 +1,280 @@
1
+ import { Node, SyntaxKind } from 'ts-morph';
2
+ const TRANSFORMER_MODULE = '@payloadcms/transformer-sharp';
3
+ const TRANSFORMER_NAME = 'sharpTransformer';
4
+ const IDENTIFIER_PATTERN = /^[A-Z_$][\w$]*$/i;
5
+ const RESERVED_WORDS = new Set([
6
+ 'await',
7
+ 'break',
8
+ 'case',
9
+ 'catch',
10
+ 'class',
11
+ 'const',
12
+ 'continue',
13
+ 'debugger',
14
+ 'default',
15
+ 'delete',
16
+ 'do',
17
+ 'else',
18
+ 'enum',
19
+ 'export',
20
+ 'extends',
21
+ 'false',
22
+ 'finally',
23
+ 'for',
24
+ 'function',
25
+ 'if',
26
+ 'implements',
27
+ 'import',
28
+ 'in',
29
+ 'instanceof',
30
+ 'interface',
31
+ 'let',
32
+ 'new',
33
+ 'null',
34
+ 'package',
35
+ 'private',
36
+ 'protected',
37
+ 'public',
38
+ 'return',
39
+ 'static',
40
+ 'super',
41
+ 'switch',
42
+ 'this',
43
+ 'throw',
44
+ 'true',
45
+ 'try',
46
+ 'typeof',
47
+ 'var',
48
+ 'void',
49
+ 'while',
50
+ 'with',
51
+ 'yield'
52
+ ]);
53
+ /** Whether `value` can be used as a plain (unquoted, non-bracketed) object literal key. */ function isSafePlainObjectKey(value) {
54
+ return IDENTIFIER_PATTERN.test(value) && !RESERVED_WORDS.has(value);
55
+ }
56
+ /** Fields moved from a collection's `upload` object into `sharpTransformer({ collections })`. */ const MOVED_UPLOAD_FIELDS = [
57
+ 'constructorOptions',
58
+ 'formatOptions',
59
+ 'resizeOptions',
60
+ 'trimOptions',
61
+ 'withMetadata',
62
+ 'imageSizes',
63
+ 'crop',
64
+ 'focalPoint'
65
+ ];
66
+ const findBuildConfigLocalNames = (file)=>{
67
+ const localNames = new Set();
68
+ for (const importDecl of file.getImportDeclarations()){
69
+ if (importDecl.getModuleSpecifierValue() !== 'payload') {
70
+ continue;
71
+ }
72
+ for (const spec of importDecl.getNamedImports()){
73
+ if (spec.getName() === 'buildConfig') {
74
+ localNames.add(spec.getAliasNode()?.getText() ?? spec.getName());
75
+ }
76
+ }
77
+ }
78
+ return localNames;
79
+ };
80
+ function ensureSharpTransformerImport(sourceFile) {
81
+ const existing = sourceFile.getImportDeclarations().find((decl)=>decl.getModuleSpecifierValue() === TRANSFORMER_MODULE);
82
+ if (!existing) {
83
+ const otherImports = sourceFile.getImportDeclarations();
84
+ const fileOmitsSemicolonsOnImports = otherImports.length > 0 && otherImports.every((decl)=>!decl.getText().endsWith(';'));
85
+ const insertedImport = sourceFile.addImportDeclaration({
86
+ moduleSpecifier: TRANSFORMER_MODULE,
87
+ namedImports: [
88
+ TRANSFORMER_NAME
89
+ ]
90
+ });
91
+ // ts-morph always appends a semicolon; strip it when the file's other imports don't use them.
92
+ if (fileOmitsSemicolonsOnImports) {
93
+ const insertedImportText = insertedImport.getText();
94
+ if (insertedImportText.endsWith(';')) {
95
+ insertedImport.replaceWithText(insertedImportText.slice(0, -1));
96
+ }
97
+ }
98
+ return;
99
+ }
100
+ const alreadyImported = existing.getNamedImports().some((named)=>named.getName() === TRANSFORMER_NAME);
101
+ if (!alreadyImported) {
102
+ existing.addNamedImport(TRANSFORMER_NAME);
103
+ }
104
+ }
105
+ /**
106
+ * Extracts Sharp-owned fields off one collection's `upload` object literal into
107
+ * a `<slug>: { ... }` entry text for the `sharpTransformer({ collections })` map.
108
+ * Returns `undefined` when the collection has nothing to migrate.
109
+ */ function extractCollectionSharpEntry({ collectionObj, filePath, notes }) {
110
+ const slugProp = collectionObj.getProperty('slug');
111
+ const slugAssignment = slugProp?.asKind(SyntaxKind.PropertyAssignment);
112
+ const slugInitializer = slugAssignment?.getInitializer();
113
+ if (!slugInitializer) {
114
+ return undefined;
115
+ }
116
+ const uploadProp = collectionObj.getProperty('upload');
117
+ if (!uploadProp || !Node.isPropertyAssignment(uploadProp)) {
118
+ return undefined;
119
+ }
120
+ const uploadObj = uploadProp.getInitializerIfKind(SyntaxKind.ObjectLiteralExpression);
121
+ if (!uploadObj) {
122
+ if (uploadProp.getInitializer()?.getKind() !== SyntaxKind.TrueKeyword) {
123
+ notes.push(`${filePath}: collection ${slugInitializer.getText()}'s \`upload\` option is not an inline object — check it for Sharp-specific fields (resizeOptions/imageSizes/formatOptions/trimOptions/constructorOptions/withMetadata/crop/focalPoint) manually.`);
124
+ }
125
+ return undefined;
126
+ }
127
+ const uploadHasSpread = uploadObj.getProperties().some((prop)=>Node.isSpreadAssignment(prop));
128
+ if (uploadHasSpread) {
129
+ notes.push(`${filePath}: collection ${slugInitializer.getText()}'s \`upload\` object contains a spread — Sharp-specific fields (resizeOptions/imageSizes/formatOptions/trimOptions/constructorOptions/withMetadata/crop/focalPoint) hidden inside it need manual review.`);
130
+ }
131
+ const movedTexts = [];
132
+ for (const name of MOVED_UPLOAD_FIELDS){
133
+ const prop = uploadObj.getProperty(name);
134
+ if (prop && Node.isPropertyAssignment(prop)) {
135
+ movedTexts.push(prop.print());
136
+ prop.remove();
137
+ }
138
+ }
139
+ if (movedTexts.length === 0) {
140
+ return undefined;
141
+ }
142
+ // Avoid leaving `upload: {\n}` spread across two lines once every property moves out.
143
+ if (uploadObj.getProperties().length === 0) {
144
+ uploadObj.replaceWithText('{}');
145
+ }
146
+ const slugLiteralValue = Node.isStringLiteral(slugInitializer) ? slugInitializer.getLiteralValue() : undefined;
147
+ const keyText = slugLiteralValue !== undefined && isSafePlainObjectKey(slugLiteralValue) ? slugLiteralValue : `[${slugInitializer.getText()}]`;
148
+ return `${keyText}: { ${movedTexts.join(', ')} }`;
149
+ }
150
+ /**
151
+ * Builds every `<slug>: { ... }` entry for a `buildConfig({ collections })` array,
152
+ * skipping (and, for a present `sharp` signal, noting) entries that aren't inline
153
+ * object literals or whose `collections` array isn't statically analyzable.
154
+ */ function extractSharpCollectionEntries({ configObj, filePath, notes }) {
155
+ const collectionsProp = configObj.getProperty('collections');
156
+ if (!collectionsProp || !Node.isPropertyAssignment(collectionsProp)) {
157
+ return [];
158
+ }
159
+ const arrayLiteral = collectionsProp.getInitializerIfKind(SyntaxKind.ArrayLiteralExpression);
160
+ if (!arrayLiteral) {
161
+ notes.push(`${filePath}: \`collections\` isn't an inline array — check each collection for Sharp-specific \`upload\` fields (resizeOptions/imageSizes/formatOptions/trimOptions/constructorOptions/withMetadata/crop/focalPoint) and move them into \`sharpTransformer({ collections })\` manually.`);
162
+ return [];
163
+ }
164
+ const entries = [];
165
+ for (const el of arrayLiteral.getElements()){
166
+ if (!Node.isObjectLiteralExpression(el)) {
167
+ notes.push(`${filePath}: a collection in \`collections\` is defined externally — check it for Sharp-specific \`upload\` fields and move them into \`sharpTransformer({ collections })\` manually.`);
168
+ continue;
169
+ }
170
+ const entry = extractCollectionSharpEntry({
171
+ collectionObj: el,
172
+ filePath,
173
+ notes
174
+ });
175
+ if (entry) {
176
+ entries.push(entry);
177
+ }
178
+ }
179
+ return entries;
180
+ }
181
+ function findSharpTransformerCall(transformersArray) {
182
+ return transformersArray.getElements().find((el)=>{
183
+ if (!Node.isCallExpression(el)) {
184
+ return false;
185
+ }
186
+ const callee = el.getExpression();
187
+ return Node.isIdentifier(callee) && callee.getText() === TRANSFORMER_NAME;
188
+ });
189
+ }
190
+ export const migrateSharpToTransformer = {
191
+ name: 'migrate-sharp-to-transformer',
192
+ apply: ({ project })=>{
193
+ const filesChanged = new Set();
194
+ const notes = [];
195
+ for (const sourceFile of project.getSourceFiles()){
196
+ const buildConfigLocalNames = findBuildConfigLocalNames(sourceFile);
197
+ if (buildConfigLocalNames.size === 0) {
198
+ continue;
199
+ }
200
+ const calls = sourceFile.getDescendantsOfKind(SyntaxKind.CallExpression).filter((call)=>{
201
+ const expr = call.getExpression();
202
+ return Node.isIdentifier(expr) && buildConfigLocalNames.has(expr.getText());
203
+ });
204
+ for (const call of calls){
205
+ const [arg] = call.getArguments();
206
+ const configObj = arg?.asKind(SyntaxKind.ObjectLiteralExpression);
207
+ if (!configObj) {
208
+ notes.push(`${sourceFile.getFilePath()}: \`buildConfig\` argument is not an inline object literal — check it manually for a top-level \`sharp\` dependency and per-collection Sharp-specific \`upload\` options.`);
209
+ continue;
210
+ }
211
+ const uploadProp = configObj.getProperty('upload');
212
+ const uploadObj = uploadProp?.asKind(SyntaxKind.PropertyAssignment)?.getInitializerIfKind(SyntaxKind.ObjectLiteralExpression);
213
+ const existingTransformersProp = uploadObj?.getProperty('transformers');
214
+ const existingTransformersArray = existingTransformersProp?.asKind(SyntaxKind.PropertyAssignment)?.getInitializerIfKind(SyntaxKind.ArrayLiteralExpression);
215
+ if (existingTransformersArray && findSharpTransformerCall(existingTransformersArray)) {
216
+ // Already migrated, but a leftover `sharp` property would fail a later
217
+ // type-check with no signal from this codemod — flag it here.
218
+ if (configObj.getProperty('sharp')) {
219
+ notes.push(`${sourceFile.getFilePath()}: a top-level \`sharp\` property remains even though \`sharpTransformer\` is already registered — move any value you still need into the existing \`sharpTransformer\` call, then remove \`sharp\` manually.`);
220
+ }
221
+ continue;
222
+ }
223
+ const sharpProp = configObj.getProperty('sharp');
224
+ let sharpExpressionText;
225
+ if (sharpProp && Node.isPropertyAssignment(sharpProp)) {
226
+ sharpExpressionText = sharpProp.getInitializer()?.getText();
227
+ } else if (sharpProp && Node.isShorthandPropertyAssignment(sharpProp)) {
228
+ sharpExpressionText = sharpProp.getName();
229
+ }
230
+ // Remove `sharp` before extracting collection entries — later removals
231
+ // shift node positions, and ts-morph node references taken before a
232
+ // sibling removal can go stale.
233
+ sharpProp?.remove();
234
+ const collectionEntries = extractSharpCollectionEntries({
235
+ configObj,
236
+ filePath: sourceFile.getFilePath(),
237
+ notes
238
+ });
239
+ if (!sharpExpressionText && collectionEntries.length === 0) {
240
+ continue;
241
+ }
242
+ const transformerArgs = [];
243
+ if (sharpExpressionText) {
244
+ transformerArgs.push(sharpExpressionText === 'sharp' ? 'sharp' : `sharp: ${sharpExpressionText}`);
245
+ }
246
+ if (collectionEntries.length > 0) {
247
+ transformerArgs.push(`collections: { ${collectionEntries.join(', ')} }`);
248
+ }
249
+ const transformerCallText = `${TRANSFORMER_NAME}({ ${transformerArgs.join(', ')} })`;
250
+ if (existingTransformersArray) {
251
+ existingTransformersArray.addElement(transformerCallText);
252
+ } else if (uploadObj) {
253
+ uploadObj.addPropertyAssignment({
254
+ name: 'transformers',
255
+ initializer: `[${transformerCallText}]`
256
+ });
257
+ } else if (uploadProp) {
258
+ notes.push(`${sourceFile.getFilePath()}: \`upload\` isn't an inline object — add \`transformers: [${transformerCallText}]\` to it manually.`);
259
+ } else {
260
+ configObj.addPropertyAssignment({
261
+ name: 'upload',
262
+ initializer: `{ transformers: [${transformerCallText}] }`
263
+ });
264
+ }
265
+ ensureSharpTransformerImport(sourceFile);
266
+ filesChanged.add(sourceFile.getFilePath());
267
+ }
268
+ }
269
+ if (filesChanged.size > 0) {
270
+ notes.push(`Install the new dependency this migration relies on: pnpm add @payloadcms/transformer-sharp`);
271
+ }
272
+ return {
273
+ filesChanged: Array.from(filesChanged),
274
+ notes: notes.length ? notes : undefined
275
+ };
276
+ },
277
+ description: 'Move a top-level `sharp` dependency and per-collection Sharp-specific `upload` options (resizeOptions, imageSizes, formatOptions, trimOptions, constructorOptions, withMetadata, crop, focalPoint) into `sharpTransformer({ collections })`, registered under `upload.transformers`.'
278
+ };
279
+
280
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/transforms/migrate-sharp-to-transformer/index.ts"],"sourcesContent":["import type { ArrayLiteralExpression, ObjectLiteralExpression, SourceFile } from 'ts-morph'\n\nimport { Node, SyntaxKind } from 'ts-morph'\n\nimport type { Transform } from '../../types.js'\n\nconst TRANSFORMER_MODULE = '@payloadcms/transformer-sharp'\nconst TRANSFORMER_NAME = 'sharpTransformer'\n\nconst IDENTIFIER_PATTERN = /^[A-Z_$][\\w$]*$/i\nconst RESERVED_WORDS = new Set([\n 'await',\n 'break',\n 'case',\n 'catch',\n 'class',\n 'const',\n 'continue',\n 'debugger',\n 'default',\n 'delete',\n 'do',\n 'else',\n 'enum',\n 'export',\n 'extends',\n 'false',\n 'finally',\n 'for',\n 'function',\n 'if',\n 'implements',\n 'import',\n 'in',\n 'instanceof',\n 'interface',\n 'let',\n 'new',\n 'null',\n 'package',\n 'private',\n 'protected',\n 'public',\n 'return',\n 'static',\n 'super',\n 'switch',\n 'this',\n 'throw',\n 'true',\n 'try',\n 'typeof',\n 'var',\n 'void',\n 'while',\n 'with',\n 'yield',\n])\n\n/** Whether `value` can be used as a plain (unquoted, non-bracketed) object literal key. */\nfunction isSafePlainObjectKey(value: string): boolean {\n return IDENTIFIER_PATTERN.test(value) && !RESERVED_WORDS.has(value)\n}\n\n/** Fields moved from a collection's `upload` object into `sharpTransformer({ collections })`. */\nconst MOVED_UPLOAD_FIELDS = [\n 'constructorOptions',\n 'formatOptions',\n 'resizeOptions',\n 'trimOptions',\n 'withMetadata',\n 'imageSizes',\n 'crop',\n 'focalPoint',\n]\n\nconst findBuildConfigLocalNames = (file: SourceFile): Set<string> => {\n const localNames = new Set<string>()\n\n for (const importDecl of file.getImportDeclarations()) {\n if (importDecl.getModuleSpecifierValue() !== 'payload') {\n continue\n }\n for (const spec of importDecl.getNamedImports()) {\n if (spec.getName() === 'buildConfig') {\n localNames.add(spec.getAliasNode()?.getText() ?? spec.getName())\n }\n }\n }\n\n return localNames\n}\n\nfunction ensureSharpTransformerImport(sourceFile: SourceFile): void {\n const existing = sourceFile\n .getImportDeclarations()\n .find((decl) => decl.getModuleSpecifierValue() === TRANSFORMER_MODULE)\n\n if (!existing) {\n const otherImports = sourceFile.getImportDeclarations()\n const fileOmitsSemicolonsOnImports =\n otherImports.length > 0 && otherImports.every((decl) => !decl.getText().endsWith(';'))\n\n const insertedImport = sourceFile.addImportDeclaration({\n moduleSpecifier: TRANSFORMER_MODULE,\n namedImports: [TRANSFORMER_NAME],\n })\n\n // ts-morph always appends a semicolon; strip it when the file's other imports don't use them.\n if (fileOmitsSemicolonsOnImports) {\n const insertedImportText = insertedImport.getText()\n if (insertedImportText.endsWith(';')) {\n insertedImport.replaceWithText(insertedImportText.slice(0, -1))\n }\n }\n\n return\n }\n\n const alreadyImported = existing\n .getNamedImports()\n .some((named) => named.getName() === TRANSFORMER_NAME)\n\n if (!alreadyImported) {\n existing.addNamedImport(TRANSFORMER_NAME)\n }\n}\n\n/**\n * Extracts Sharp-owned fields off one collection's `upload` object literal into\n * a `<slug>: { ... }` entry text for the `sharpTransformer({ collections })` map.\n * Returns `undefined` when the collection has nothing to migrate.\n */\nfunction extractCollectionSharpEntry({\n collectionObj,\n filePath,\n notes,\n}: {\n collectionObj: ObjectLiteralExpression\n filePath: string\n notes: string[]\n}): string | undefined {\n const slugProp = collectionObj.getProperty('slug')\n const slugAssignment = slugProp?.asKind(SyntaxKind.PropertyAssignment)\n const slugInitializer = slugAssignment?.getInitializer()\n\n if (!slugInitializer) {\n return undefined\n }\n\n const uploadProp = collectionObj.getProperty('upload')\n if (!uploadProp || !Node.isPropertyAssignment(uploadProp)) {\n return undefined\n }\n\n const uploadObj = uploadProp.getInitializerIfKind(SyntaxKind.ObjectLiteralExpression)\n if (!uploadObj) {\n if (uploadProp.getInitializer()?.getKind() !== SyntaxKind.TrueKeyword) {\n notes.push(\n `${filePath}: collection ${slugInitializer.getText()}'s \\`upload\\` option is not an inline object — check it for Sharp-specific fields (resizeOptions/imageSizes/formatOptions/trimOptions/constructorOptions/withMetadata/crop/focalPoint) manually.`,\n )\n }\n return undefined\n }\n\n const uploadHasSpread = uploadObj.getProperties().some((prop) => Node.isSpreadAssignment(prop))\n if (uploadHasSpread) {\n notes.push(\n `${filePath}: collection ${slugInitializer.getText()}'s \\`upload\\` object contains a spread — Sharp-specific fields (resizeOptions/imageSizes/formatOptions/trimOptions/constructorOptions/withMetadata/crop/focalPoint) hidden inside it need manual review.`,\n )\n }\n\n const movedTexts: string[] = []\n for (const name of MOVED_UPLOAD_FIELDS) {\n const prop = uploadObj.getProperty(name)\n if (prop && Node.isPropertyAssignment(prop)) {\n movedTexts.push(prop.print())\n prop.remove()\n }\n }\n\n if (movedTexts.length === 0) {\n return undefined\n }\n\n // Avoid leaving `upload: {\\n}` spread across two lines once every property moves out.\n if (uploadObj.getProperties().length === 0) {\n uploadObj.replaceWithText('{}')\n }\n\n const slugLiteralValue = Node.isStringLiteral(slugInitializer)\n ? slugInitializer.getLiteralValue()\n : undefined\n const keyText =\n slugLiteralValue !== undefined && isSafePlainObjectKey(slugLiteralValue)\n ? slugLiteralValue\n : `[${slugInitializer.getText()}]`\n\n return `${keyText}: { ${movedTexts.join(', ')} }`\n}\n\n/**\n * Builds every `<slug>: { ... }` entry for a `buildConfig({ collections })` array,\n * skipping (and, for a present `sharp` signal, noting) entries that aren't inline\n * object literals or whose `collections` array isn't statically analyzable.\n */\nfunction extractSharpCollectionEntries({\n configObj,\n filePath,\n notes,\n}: {\n configObj: ObjectLiteralExpression\n filePath: string\n notes: string[]\n}): string[] {\n const collectionsProp = configObj.getProperty('collections')\n if (!collectionsProp || !Node.isPropertyAssignment(collectionsProp)) {\n return []\n }\n\n const arrayLiteral = collectionsProp.getInitializerIfKind(SyntaxKind.ArrayLiteralExpression)\n if (!arrayLiteral) {\n notes.push(\n `${filePath}: \\`collections\\` isn't an inline array — check each collection for Sharp-specific \\`upload\\` fields (resizeOptions/imageSizes/formatOptions/trimOptions/constructorOptions/withMetadata/crop/focalPoint) and move them into \\`sharpTransformer({ collections })\\` manually.`,\n )\n return []\n }\n\n const entries: string[] = []\n\n for (const el of arrayLiteral.getElements()) {\n if (!Node.isObjectLiteralExpression(el)) {\n notes.push(\n `${filePath}: a collection in \\`collections\\` is defined externally — check it for Sharp-specific \\`upload\\` fields and move them into \\`sharpTransformer({ collections })\\` manually.`,\n )\n continue\n }\n\n const entry = extractCollectionSharpEntry({ collectionObj: el, filePath, notes })\n if (entry) {\n entries.push(entry)\n }\n }\n\n return entries\n}\n\nfunction findSharpTransformerCall(transformersArray: ArrayLiteralExpression) {\n return transformersArray.getElements().find((el) => {\n if (!Node.isCallExpression(el)) {\n return false\n }\n const callee = el.getExpression()\n return Node.isIdentifier(callee) && callee.getText() === TRANSFORMER_NAME\n })\n}\n\nexport const migrateSharpToTransformer: Transform = {\n name: 'migrate-sharp-to-transformer',\n apply: ({ project }) => {\n const filesChanged = new Set<string>()\n const notes: string[] = []\n\n for (const sourceFile of project.getSourceFiles()) {\n const buildConfigLocalNames = findBuildConfigLocalNames(sourceFile)\n if (buildConfigLocalNames.size === 0) {\n continue\n }\n\n const calls = sourceFile.getDescendantsOfKind(SyntaxKind.CallExpression).filter((call) => {\n const expr = call.getExpression()\n return Node.isIdentifier(expr) && buildConfigLocalNames.has(expr.getText())\n })\n\n for (const call of calls) {\n const [arg] = call.getArguments()\n const configObj = arg?.asKind(SyntaxKind.ObjectLiteralExpression)\n if (!configObj) {\n notes.push(\n `${sourceFile.getFilePath()}: \\`buildConfig\\` argument is not an inline object literal — check it manually for a top-level \\`sharp\\` dependency and per-collection Sharp-specific \\`upload\\` options.`,\n )\n continue\n }\n\n const uploadProp = configObj.getProperty('upload')\n const uploadObj = uploadProp\n ?.asKind(SyntaxKind.PropertyAssignment)\n ?.getInitializerIfKind(SyntaxKind.ObjectLiteralExpression)\n const existingTransformersProp = uploadObj?.getProperty('transformers')\n const existingTransformersArray = existingTransformersProp\n ?.asKind(SyntaxKind.PropertyAssignment)\n ?.getInitializerIfKind(SyntaxKind.ArrayLiteralExpression)\n\n if (existingTransformersArray && findSharpTransformerCall(existingTransformersArray)) {\n // Already migrated, but a leftover `sharp` property would fail a later\n // type-check with no signal from this codemod — flag it here.\n if (configObj.getProperty('sharp')) {\n notes.push(\n `${sourceFile.getFilePath()}: a top-level \\`sharp\\` property remains even though \\`sharpTransformer\\` is already registered — move any value you still need into the existing \\`sharpTransformer\\` call, then remove \\`sharp\\` manually.`,\n )\n }\n continue\n }\n\n const sharpProp = configObj.getProperty('sharp')\n let sharpExpressionText: string | undefined\n if (sharpProp && Node.isPropertyAssignment(sharpProp)) {\n sharpExpressionText = sharpProp.getInitializer()?.getText()\n } else if (sharpProp && Node.isShorthandPropertyAssignment(sharpProp)) {\n sharpExpressionText = sharpProp.getName()\n }\n\n // Remove `sharp` before extracting collection entries — later removals\n // shift node positions, and ts-morph node references taken before a\n // sibling removal can go stale.\n sharpProp?.remove()\n\n const collectionEntries = extractSharpCollectionEntries({\n configObj,\n filePath: sourceFile.getFilePath(),\n notes,\n })\n\n if (!sharpExpressionText && collectionEntries.length === 0) {\n continue\n }\n\n const transformerArgs: string[] = []\n if (sharpExpressionText) {\n transformerArgs.push(\n sharpExpressionText === 'sharp' ? 'sharp' : `sharp: ${sharpExpressionText}`,\n )\n }\n if (collectionEntries.length > 0) {\n transformerArgs.push(`collections: { ${collectionEntries.join(', ')} }`)\n }\n\n const transformerCallText = `${TRANSFORMER_NAME}({ ${transformerArgs.join(', ')} })`\n\n if (existingTransformersArray) {\n existingTransformersArray.addElement(transformerCallText)\n } else if (uploadObj) {\n uploadObj.addPropertyAssignment({\n name: 'transformers',\n initializer: `[${transformerCallText}]`,\n })\n } else if (uploadProp) {\n notes.push(\n `${sourceFile.getFilePath()}: \\`upload\\` isn't an inline object — add \\`transformers: [${transformerCallText}]\\` to it manually.`,\n )\n } else {\n configObj.addPropertyAssignment({\n name: 'upload',\n initializer: `{ transformers: [${transformerCallText}] }`,\n })\n }\n\n ensureSharpTransformerImport(sourceFile)\n filesChanged.add(sourceFile.getFilePath())\n }\n }\n\n if (filesChanged.size > 0) {\n notes.push(\n `Install the new dependency this migration relies on: pnpm add @payloadcms/transformer-sharp`,\n )\n }\n\n return { filesChanged: Array.from(filesChanged), notes: notes.length ? notes : undefined }\n },\n description:\n 'Move a top-level `sharp` dependency and per-collection Sharp-specific `upload` options (resizeOptions, imageSizes, formatOptions, trimOptions, constructorOptions, withMetadata, crop, focalPoint) into `sharpTransformer({ collections })`, registered under `upload.transformers`.',\n}\n"],"names":["Node","SyntaxKind","TRANSFORMER_MODULE","TRANSFORMER_NAME","IDENTIFIER_PATTERN","RESERVED_WORDS","Set","isSafePlainObjectKey","value","test","has","MOVED_UPLOAD_FIELDS","findBuildConfigLocalNames","file","localNames","importDecl","getImportDeclarations","getModuleSpecifierValue","spec","getNamedImports","getName","add","getAliasNode","getText","ensureSharpTransformerImport","sourceFile","existing","find","decl","otherImports","fileOmitsSemicolonsOnImports","length","every","endsWith","insertedImport","addImportDeclaration","moduleSpecifier","namedImports","insertedImportText","replaceWithText","slice","alreadyImported","some","named","addNamedImport","extractCollectionSharpEntry","collectionObj","filePath","notes","slugProp","getProperty","slugAssignment","asKind","PropertyAssignment","slugInitializer","getInitializer","undefined","uploadProp","isPropertyAssignment","uploadObj","getInitializerIfKind","ObjectLiteralExpression","getKind","TrueKeyword","push","uploadHasSpread","getProperties","prop","isSpreadAssignment","movedTexts","name","print","remove","slugLiteralValue","isStringLiteral","getLiteralValue","keyText","join","extractSharpCollectionEntries","configObj","collectionsProp","arrayLiteral","ArrayLiteralExpression","entries","el","getElements","isObjectLiteralExpression","entry","findSharpTransformerCall","transformersArray","isCallExpression","callee","getExpression","isIdentifier","migrateSharpToTransformer","apply","project","filesChanged","getSourceFiles","buildConfigLocalNames","size","calls","getDescendantsOfKind","CallExpression","filter","call","expr","arg","getArguments","getFilePath","existingTransformersProp","existingTransformersArray","sharpProp","sharpExpressionText","isShorthandPropertyAssignment","collectionEntries","transformerArgs","transformerCallText","addElement","addPropertyAssignment","initializer","Array","from","description"],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { buildConfig } from 'payload';
2
+ export default buildConfig({
3
+ collections: [
4
+ {
5
+ slug: 'posts',
6
+ fields: []
7
+ }
8
+ ]
9
+ });
10
+
11
+ //# sourceMappingURL=no-match.input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/transforms/migrate-sharp-to-transformer/no-match.input.ts"],"sourcesContent":["import { buildConfig } from 'payload'\n\nexport default buildConfig({\n collections: [\n {\n slug: 'posts',\n fields: [],\n },\n ],\n})\n"],"names":["buildConfig","collections","slug","fields"],"mappings":"AAAA,SAASA,WAAW,QAAQ,UAAS;AAErC,eAAeA,YAAY;IACzBC,aAAa;QACX;YACEC,MAAM;YACNC,QAAQ,EAAE;QACZ;KACD;AACH,GAAE"}
@@ -0,0 +1,11 @@
1
+ import { buildConfig } from 'payload';
2
+ export default buildConfig({
3
+ collections: [
4
+ {
5
+ slug: 'posts',
6
+ fields: []
7
+ }
8
+ ]
9
+ });
10
+
11
+ //# sourceMappingURL=no-match.output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/transforms/migrate-sharp-to-transformer/no-match.output.ts"],"sourcesContent":["import { buildConfig } from 'payload'\n\nexport default buildConfig({\n collections: [\n {\n slug: 'posts',\n fields: [],\n },\n ],\n})\n"],"names":["buildConfig","collections","slug","fields"],"mappings":"AAAA,SAASA,WAAW,QAAQ,UAAS;AAErC,eAAeA,YAAY;IACzBC,aAAa;QACX;YACEC,MAAM;YACNC,QAAQ,EAAE;QACZ;KACD;AACH,GAAE"}
@@ -1,4 +1,4 @@
1
- import { Node, SyntaxKind } from 'ts-morph';
1
+ import { Node } from 'ts-morph';
2
2
  const VERSIONED_CONFIG_TYPE_NAMES = new Set([
3
3
  'CollectionConfig',
4
4
  'GlobalConfig',
@@ -69,8 +69,8 @@ const isVersionedConfigTypeName = (typeText)=>{
69
69
  return undefined;
70
70
  }
71
71
  // Form 2: { ... } satisfies CollectionConfig
72
- if (node.getKind() === SyntaxKind.SatisfiesExpression) {
73
- const typeNode = node.getTypeNode?.();
72
+ if (Node.isSatisfiesExpression(node)) {
73
+ const typeNode = node.getTypeNode();
74
74
  if (!typeNode) {
75
75
  return undefined;
76
76
  }
@@ -78,8 +78,8 @@ const isVersionedConfigTypeName = (typeText)=>{
78
78
  if (!isVersionedConfigTypeName(typeText)) {
79
79
  return undefined;
80
80
  }
81
- const expr = node.getExpression?.();
82
- if (expr && Node.isObjectLiteralExpression(expr)) {
81
+ const expr = node.getExpression();
82
+ if (Node.isObjectLiteralExpression(expr)) {
83
83
  return expr;
84
84
  }
85
85
  return undefined;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/transforms/migrate-versions-default/index.ts"],"sourcesContent":["import { Node, SyntaxKind } from 'ts-morph'\n\nimport type { Transform } from '../../types.js'\n\nconst VERSIONED_CONFIG_TYPE_NAMES = new Set([\n 'CollectionConfig',\n 'GlobalConfig',\n 'SanitizedCollectionConfig',\n 'SanitizedGlobalConfig',\n])\n\nconst isVersionedConfigTypeName = (typeText: string): boolean => {\n const baseName = typeText.replace(/<.*>$/, '').trim()\n return VERSIONED_CONFIG_TYPE_NAMES.has(baseName)\n}\n\n/**\n * Finds object literals typed as CollectionConfig or GlobalConfig and adds\n * `versions: false` if the property is absent. Covers three annotation forms:\n * const X: CollectionConfig = { ... }\n * { ... } satisfies GlobalConfig\n * { ... } as CollectionConfig\n */\nexport const migrateVersionsDefault: Transform = {\n name: 'migrate-versions-default',\n apply: ({ project }) => {\n const filesChanged = new Set<string>()\n\n for (const sourceFile of project.getSourceFiles()) {\n let mutated = false\n\n sourceFile.forEachDescendant((node) => {\n const objectLiteral = resolveVersionedConfigObject(node)\n if (!objectLiteral) {\n return\n }\n\n if (objectLiteral.getProperty('versions')) {\n return\n }\n\n objectLiteral.addPropertyAssignment({\n name: 'versions',\n initializer: 'false',\n })\n\n mutated = true\n })\n\n if (mutated) {\n filesChanged.add(sourceFile.getFilePath())\n }\n }\n\n return { filesChanged: [...filesChanged] }\n },\n description:\n 'Add `versions: false` to CollectionConfig and GlobalConfig objects that do not already have a versions property, preserving the previous opt-in behaviour after versions became enabled by default.',\n}\n\n/**\n * Given a node, returns its ObjectLiteralExpression if the node represents a\n * CollectionConfig- or GlobalConfig-typed value in one of the three recognised forms.\n * Returns undefined for everything else.\n */\nconst resolveVersionedConfigObject = (node: Node) => {\n // Form 1: const X: CollectionConfig = { ... }\n if (Node.isVariableDeclaration(node)) {\n const typeNode = node.getTypeNode()\n if (!typeNode) {\n return undefined\n }\n const typeText = typeNode.getText().trim()\n if (!isVersionedConfigTypeName(typeText)) {\n return undefined\n }\n const initializer = node.getInitializer()\n if (initializer && Node.isObjectLiteralExpression(initializer)) {\n return initializer\n }\n return undefined\n }\n\n // Form 2: { ... } satisfies CollectionConfig\n if (node.getKind() === SyntaxKind.SatisfiesExpression) {\n const typeNode = (node as any).getTypeNode?.()\n if (!typeNode) {\n return undefined\n }\n const typeText = typeNode.getText().trim()\n if (!isVersionedConfigTypeName(typeText)) {\n return undefined\n }\n const expr = (node as any).getExpression?.()\n if (expr && Node.isObjectLiteralExpression(expr)) {\n return expr\n }\n return undefined\n }\n\n // Form 3: { ... } as CollectionConfig\n if (Node.isAsExpression(node)) {\n const typeNode = node.getTypeNode()\n if (!typeNode) {\n return undefined\n }\n const typeText = typeNode.getText().trim()\n if (!isVersionedConfigTypeName(typeText)) {\n return undefined\n }\n const expr = node.getExpression()\n if (Node.isObjectLiteralExpression(expr)) {\n return expr\n }\n return undefined\n }\n\n return undefined\n}\n"],"names":["Node","SyntaxKind","VERSIONED_CONFIG_TYPE_NAMES","Set","isVersionedConfigTypeName","typeText","baseName","replace","trim","has","migrateVersionsDefault","name","apply","project","filesChanged","sourceFile","getSourceFiles","mutated","forEachDescendant","node","objectLiteral","resolveVersionedConfigObject","getProperty","addPropertyAssignment","initializer","add","getFilePath","description","isVariableDeclaration","typeNode","getTypeNode","undefined","getText","getInitializer","isObjectLiteralExpression","getKind","SatisfiesExpression","expr","getExpression","isAsExpression"],"mappings":"AAAA,SAASA,IAAI,EAAEC,UAAU,QAAQ,WAAU;AAI3C,MAAMC,8BAA8B,IAAIC,IAAI;IAC1C;IACA;IACA;IACA;CACD;AAED,MAAMC,4BAA4B,CAACC;IACjC,MAAMC,WAAWD,SAASE,OAAO,CAAC,SAAS,IAAIC,IAAI;IACnD,OAAON,4BAA4BO,GAAG,CAACH;AACzC;AAEA;;;;;;CAMC,GACD,OAAO,MAAMI,yBAAoC;IAC/CC,MAAM;IACNC,OAAO,CAAC,EAAEC,OAAO,EAAE;QACjB,MAAMC,eAAe,IAAIX;QAEzB,KAAK,MAAMY,cAAcF,QAAQG,cAAc,GAAI;YACjD,IAAIC,UAAU;YAEdF,WAAWG,iBAAiB,CAAC,CAACC;gBAC5B,MAAMC,gBAAgBC,6BAA6BF;gBACnD,IAAI,CAACC,eAAe;oBAClB;gBACF;gBAEA,IAAIA,cAAcE,WAAW,CAAC,aAAa;oBACzC;gBACF;gBAEAF,cAAcG,qBAAqB,CAAC;oBAClCZ,MAAM;oBACNa,aAAa;gBACf;gBAEAP,UAAU;YACZ;YAEA,IAAIA,SAAS;gBACXH,aAAaW,GAAG,CAACV,WAAWW,WAAW;YACzC;QACF;QAEA,OAAO;YAAEZ,cAAc;mBAAIA;aAAa;QAAC;IAC3C;IACAa,aACE;AACJ,EAAC;AAED;;;;CAIC,GACD,MAAMN,+BAA+B,CAACF;IACpC,8CAA8C;IAC9C,IAAInB,KAAK4B,qBAAqB,CAACT,OAAO;QACpC,MAAMU,WAAWV,KAAKW,WAAW;QACjC,IAAI,CAACD,UAAU;YACb,OAAOE;QACT;QACA,MAAM1B,WAAWwB,SAASG,OAAO,GAAGxB,IAAI;QACxC,IAAI,CAACJ,0BAA0BC,WAAW;YACxC,OAAO0B;QACT;QACA,MAAMP,cAAcL,KAAKc,cAAc;QACvC,IAAIT,eAAexB,KAAKkC,yBAAyB,CAACV,cAAc;YAC9D,OAAOA;QACT;QACA,OAAOO;IACT;IAEA,6CAA6C;IAC7C,IAAIZ,KAAKgB,OAAO,OAAOlC,WAAWmC,mBAAmB,EAAE;QACrD,MAAMP,WAAW,AAACV,KAAaW,WAAW;QAC1C,IAAI,CAACD,UAAU;YACb,OAAOE;QACT;QACA,MAAM1B,WAAWwB,SAASG,OAAO,GAAGxB,IAAI;QACxC,IAAI,CAACJ,0BAA0BC,WAAW;YACxC,OAAO0B;QACT;QACA,MAAMM,OAAO,AAAClB,KAAamB,aAAa;QACxC,IAAID,QAAQrC,KAAKkC,yBAAyB,CAACG,OAAO;YAChD,OAAOA;QACT;QACA,OAAON;IACT;IAEA,sCAAsC;IACtC,IAAI/B,KAAKuC,cAAc,CAACpB,OAAO;QAC7B,MAAMU,WAAWV,KAAKW,WAAW;QACjC,IAAI,CAACD,UAAU;YACb,OAAOE;QACT;QACA,MAAM1B,WAAWwB,SAASG,OAAO,GAAGxB,IAAI;QACxC,IAAI,CAACJ,0BAA0BC,WAAW;YACxC,OAAO0B;QACT;QACA,MAAMM,OAAOlB,KAAKmB,aAAa;QAC/B,IAAItC,KAAKkC,yBAAyB,CAACG,OAAO;YACxC,OAAOA;QACT;QACA,OAAON;IACT;IAEA,OAAOA;AACT"}
1
+ {"version":3,"sources":["../../../src/transforms/migrate-versions-default/index.ts"],"sourcesContent":["import { Node } from 'ts-morph'\n\nimport type { Transform } from '../../types.js'\n\nconst VERSIONED_CONFIG_TYPE_NAMES = new Set([\n 'CollectionConfig',\n 'GlobalConfig',\n 'SanitizedCollectionConfig',\n 'SanitizedGlobalConfig',\n])\n\nconst isVersionedConfigTypeName = (typeText: string): boolean => {\n const baseName = typeText.replace(/<.*>$/, '').trim()\n return VERSIONED_CONFIG_TYPE_NAMES.has(baseName)\n}\n\n/**\n * Finds object literals typed as CollectionConfig or GlobalConfig and adds\n * `versions: false` if the property is absent. Covers three annotation forms:\n * const X: CollectionConfig = { ... }\n * { ... } satisfies GlobalConfig\n * { ... } as CollectionConfig\n */\nexport const migrateVersionsDefault: Transform = {\n name: 'migrate-versions-default',\n apply: ({ project }) => {\n const filesChanged = new Set<string>()\n\n for (const sourceFile of project.getSourceFiles()) {\n let mutated = false\n\n sourceFile.forEachDescendant((node) => {\n const objectLiteral = resolveVersionedConfigObject(node)\n if (!objectLiteral) {\n return\n }\n\n if (objectLiteral.getProperty('versions')) {\n return\n }\n\n objectLiteral.addPropertyAssignment({\n name: 'versions',\n initializer: 'false',\n })\n\n mutated = true\n })\n\n if (mutated) {\n filesChanged.add(sourceFile.getFilePath())\n }\n }\n\n return { filesChanged: [...filesChanged] }\n },\n description:\n 'Add `versions: false` to CollectionConfig and GlobalConfig objects that do not already have a versions property, preserving the previous opt-in behaviour after versions became enabled by default.',\n}\n\n/**\n * Given a node, returns its ObjectLiteralExpression if the node represents a\n * CollectionConfig- or GlobalConfig-typed value in one of the three recognised forms.\n * Returns undefined for everything else.\n */\nconst resolveVersionedConfigObject = (node: Node) => {\n // Form 1: const X: CollectionConfig = { ... }\n if (Node.isVariableDeclaration(node)) {\n const typeNode = node.getTypeNode()\n if (!typeNode) {\n return undefined\n }\n const typeText = typeNode.getText().trim()\n if (!isVersionedConfigTypeName(typeText)) {\n return undefined\n }\n const initializer = node.getInitializer()\n if (initializer && Node.isObjectLiteralExpression(initializer)) {\n return initializer\n }\n return undefined\n }\n\n // Form 2: { ... } satisfies CollectionConfig\n if (Node.isSatisfiesExpression(node)) {\n const typeNode = node.getTypeNode()\n if (!typeNode) {\n return undefined\n }\n const typeText = typeNode.getText().trim()\n if (!isVersionedConfigTypeName(typeText)) {\n return undefined\n }\n const expr = node.getExpression()\n if (Node.isObjectLiteralExpression(expr)) {\n return expr\n }\n return undefined\n }\n\n // Form 3: { ... } as CollectionConfig\n if (Node.isAsExpression(node)) {\n const typeNode = node.getTypeNode()\n if (!typeNode) {\n return undefined\n }\n const typeText = typeNode.getText().trim()\n if (!isVersionedConfigTypeName(typeText)) {\n return undefined\n }\n const expr = node.getExpression()\n if (Node.isObjectLiteralExpression(expr)) {\n return expr\n }\n return undefined\n }\n\n return undefined\n}\n"],"names":["Node","VERSIONED_CONFIG_TYPE_NAMES","Set","isVersionedConfigTypeName","typeText","baseName","replace","trim","has","migrateVersionsDefault","name","apply","project","filesChanged","sourceFile","getSourceFiles","mutated","forEachDescendant","node","objectLiteral","resolveVersionedConfigObject","getProperty","addPropertyAssignment","initializer","add","getFilePath","description","isVariableDeclaration","typeNode","getTypeNode","undefined","getText","getInitializer","isObjectLiteralExpression","isSatisfiesExpression","expr","getExpression","isAsExpression"],"mappings":"AAAA,SAASA,IAAI,QAAQ,WAAU;AAI/B,MAAMC,8BAA8B,IAAIC,IAAI;IAC1C;IACA;IACA;IACA;CACD;AAED,MAAMC,4BAA4B,CAACC;IACjC,MAAMC,WAAWD,SAASE,OAAO,CAAC,SAAS,IAAIC,IAAI;IACnD,OAAON,4BAA4BO,GAAG,CAACH;AACzC;AAEA;;;;;;CAMC,GACD,OAAO,MAAMI,yBAAoC;IAC/CC,MAAM;IACNC,OAAO,CAAC,EAAEC,OAAO,EAAE;QACjB,MAAMC,eAAe,IAAIX;QAEzB,KAAK,MAAMY,cAAcF,QAAQG,cAAc,GAAI;YACjD,IAAIC,UAAU;YAEdF,WAAWG,iBAAiB,CAAC,CAACC;gBAC5B,MAAMC,gBAAgBC,6BAA6BF;gBACnD,IAAI,CAACC,eAAe;oBAClB;gBACF;gBAEA,IAAIA,cAAcE,WAAW,CAAC,aAAa;oBACzC;gBACF;gBAEAF,cAAcG,qBAAqB,CAAC;oBAClCZ,MAAM;oBACNa,aAAa;gBACf;gBAEAP,UAAU;YACZ;YAEA,IAAIA,SAAS;gBACXH,aAAaW,GAAG,CAACV,WAAWW,WAAW;YACzC;QACF;QAEA,OAAO;YAAEZ,cAAc;mBAAIA;aAAa;QAAC;IAC3C;IACAa,aACE;AACJ,EAAC;AAED;;;;CAIC,GACD,MAAMN,+BAA+B,CAACF;IACpC,8CAA8C;IAC9C,IAAIlB,KAAK2B,qBAAqB,CAACT,OAAO;QACpC,MAAMU,WAAWV,KAAKW,WAAW;QACjC,IAAI,CAACD,UAAU;YACb,OAAOE;QACT;QACA,MAAM1B,WAAWwB,SAASG,OAAO,GAAGxB,IAAI;QACxC,IAAI,CAACJ,0BAA0BC,WAAW;YACxC,OAAO0B;QACT;QACA,MAAMP,cAAcL,KAAKc,cAAc;QACvC,IAAIT,eAAevB,KAAKiC,yBAAyB,CAACV,cAAc;YAC9D,OAAOA;QACT;QACA,OAAOO;IACT;IAEA,6CAA6C;IAC7C,IAAI9B,KAAKkC,qBAAqB,CAAChB,OAAO;QACpC,MAAMU,WAAWV,KAAKW,WAAW;QACjC,IAAI,CAACD,UAAU;YACb,OAAOE;QACT;QACA,MAAM1B,WAAWwB,SAASG,OAAO,GAAGxB,IAAI;QACxC,IAAI,CAACJ,0BAA0BC,WAAW;YACxC,OAAO0B;QACT;QACA,MAAMK,OAAOjB,KAAKkB,aAAa;QAC/B,IAAIpC,KAAKiC,yBAAyB,CAACE,OAAO;YACxC,OAAOA;QACT;QACA,OAAOL;IACT;IAEA,sCAAsC;IACtC,IAAI9B,KAAKqC,cAAc,CAACnB,OAAO;QAC7B,MAAMU,WAAWV,KAAKW,WAAW;QACjC,IAAI,CAACD,UAAU;YACb,OAAOE;QACT;QACA,MAAM1B,WAAWwB,SAASG,OAAO,GAAGxB,IAAI;QACxC,IAAI,CAACJ,0BAA0BC,WAAW;YACxC,OAAO0B;QACT;QACA,MAAMK,OAAOjB,KAAKkB,aAAa;QAC/B,IAAIpC,KAAKiC,yBAAyB,CAACE,OAAO;YACxC,OAAOA;QACT;QACA,OAAOL;IACT;IAEA,OAAOA;AACT"}
@@ -0,0 +1,13 @@
1
+ import { buildConfig } from 'payload';
2
+ export default buildConfig({
3
+ localization: {
4
+ defaultLocale: 'en',
5
+ defaultLocalePublishOption: 'all',
6
+ locales: [
7
+ 'en',
8
+ 'es'
9
+ ]
10
+ }
11
+ });
12
+
13
+ //# sourceMappingURL=all-value.input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/transforms/remove-default-locale-publish-option/all-value.input.ts"],"sourcesContent":["import { buildConfig } from 'payload'\n\nexport default buildConfig({\n localization: {\n defaultLocale: 'en',\n defaultLocalePublishOption: 'all',\n locales: ['en', 'es'],\n },\n})\n"],"names":["buildConfig","localization","defaultLocale","defaultLocalePublishOption","locales"],"mappings":"AAAA,SAASA,WAAW,QAAQ,UAAS;AAErC,eAAeA,YAAY;IACzBC,cAAc;QACZC,eAAe;QACfC,4BAA4B;QAC5BC,SAAS;YAAC;YAAM;SAAK;IACvB;AACF,GAAE"}
@@ -0,0 +1,13 @@
1
+ import { buildConfig } from 'payload';
2
+ export default buildConfig({
3
+ localization: {
4
+ defaultLocale: 'en',
5
+ defaultLocalePublishOption: 'active',
6
+ locales: [
7
+ 'en',
8
+ 'es'
9
+ ]
10
+ }
11
+ });
12
+
13
+ //# sourceMappingURL=basic.input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/transforms/remove-default-locale-publish-option/basic.input.ts"],"sourcesContent":["import { buildConfig } from 'payload'\n\nexport default buildConfig({\n localization: {\n defaultLocale: 'en',\n defaultLocalePublishOption: 'active',\n locales: ['en', 'es'],\n },\n})\n"],"names":["buildConfig","localization","defaultLocale","defaultLocalePublishOption","locales"],"mappings":"AAAA,SAASA,WAAW,QAAQ,UAAS;AAErC,eAAeA,YAAY;IACzBC,cAAc;QACZC,eAAe;QACfC,4BAA4B;QAC5BC,SAAS;YAAC;YAAM;SAAK;IACvB;AACF,GAAE"}
@@ -0,0 +1,12 @@
1
+ import { buildConfig } from 'payload';
2
+ export default buildConfig({
3
+ localization: {
4
+ defaultLocale: 'en',
5
+ locales: [
6
+ 'en',
7
+ 'es'
8
+ ]
9
+ }
10
+ });
11
+
12
+ //# sourceMappingURL=basic.output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/transforms/remove-default-locale-publish-option/basic.output.ts"],"sourcesContent":["import { buildConfig } from 'payload'\n\nexport default buildConfig({\n localization: {\n defaultLocale: 'en',\n locales: ['en', 'es'],\n },\n})\n"],"names":["buildConfig","localization","defaultLocale","locales"],"mappings":"AAAA,SAASA,WAAW,QAAQ,UAAS;AAErC,eAAeA,YAAY;IACzBC,cAAc;QACZC,eAAe;QACfC,SAAS;YAAC;YAAM;SAAK;IACvB;AACF,GAAE"}
@@ -0,0 +1,17 @@
1
+ import { buildConfig } from 'payload';
2
+ const localization = createLocalization();
3
+ export default buildConfig({
4
+ localization
5
+ });
6
+ function createLocalization() {
7
+ return {
8
+ defaultLocale: 'en',
9
+ defaultLocalePublishOption: 'all',
10
+ locales: [
11
+ 'en',
12
+ 'es'
13
+ ]
14
+ };
15
+ }
16
+
17
+ //# sourceMappingURL=dynamic.input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/transforms/remove-default-locale-publish-option/dynamic.input.ts"],"sourcesContent":["import { buildConfig } from 'payload'\n\nconst localization = createLocalization()\n\nexport default buildConfig({ localization })\n\nfunction createLocalization() {\n return {\n defaultLocale: 'en',\n defaultLocalePublishOption: 'all',\n locales: ['en', 'es'],\n }\n}\n"],"names":["buildConfig","localization","createLocalization","defaultLocale","defaultLocalePublishOption","locales"],"mappings":"AAAA,SAASA,WAAW,QAAQ,UAAS;AAErC,MAAMC,eAAeC;AAErB,eAAeF,YAAY;IAAEC;AAAa,GAAE;AAE5C,SAASC;IACP,OAAO;QACLC,eAAe;QACfC,4BAA4B;QAC5BC,SAAS;YAAC;YAAM;SAAK;IACvB;AACF"}
@@ -0,0 +1,10 @@
1
+ import type { Transform } from '../../types.js';
2
+ /**
3
+ * Removes `defaultLocalePublishOption` from `localization` config objects.
4
+ *
5
+ * The Admin UI Publish button now always defaults to publishing the active
6
+ * locale when localized fields exist, with "Publish all locales" available
7
+ * as a secondary option. The config property is no longer needed.
8
+ */
9
+ export declare const removeDefaultLocalePublishOption: Transform;
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/transforms/remove-default-locale-publish-option/index.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE/C;;;;;;GAMG;AACH,eAAO,MAAM,gCAAgC,EAAE,SA0E9C,CAAA"}
@@ -0,0 +1,103 @@
1
+ import { Node, SyntaxKind, VariableDeclarationKind } from 'ts-morph';
2
+ /**
3
+ * Removes `defaultLocalePublishOption` from `localization` config objects.
4
+ *
5
+ * The Admin UI Publish button now always defaults to publishing the active
6
+ * locale when localized fields exist, with "Publish all locales" available
7
+ * as a secondary option. The config property is no longer needed.
8
+ */ export const removeDefaultLocalePublishOption = {
9
+ name: 'remove-default-locale-publish-option',
10
+ apply: ({ project })=>{
11
+ const filesChanged = new Set();
12
+ const notes = new Set();
13
+ for (const sourceFile of project.getSourceFiles()){
14
+ const localizationProperties = [
15
+ ...sourceFile.getDescendantsOfKind(SyntaxKind.PropertyAssignment).filter((property)=>property.getName() === 'localization'),
16
+ ...sourceFile.getDescendantsOfKind(SyntaxKind.ShorthandPropertyAssignment).filter((property)=>property.getName() === 'localization')
17
+ ];
18
+ for (const localizationProperty of localizationProperties){
19
+ const localizationResolution = resolveLocalizationObject({
20
+ property: localizationProperty
21
+ });
22
+ if (localizationResolution.isUnresolved) {
23
+ notes.add(`${sourceFile.getFilePath()}: 'localization' uses a value that cannot be resolved safely — migrate manually by removing 'localization.defaultLocalePublishOption' if it is present.`);
24
+ continue;
25
+ }
26
+ const localizationObject = localizationResolution.object;
27
+ if (!localizationObject) {
28
+ continue;
29
+ }
30
+ if (localizationObject.getProperties().some((property)=>Node.isSpreadAssignment(property))) {
31
+ notes.add(`${sourceFile.getFilePath()}: 'localization' includes a spread — migrate manually by removing 'localization.defaultLocalePublishOption' if it is present in the spread value.`);
32
+ }
33
+ const defaultLocalePublishOption = localizationObject.getProperty('defaultLocalePublishOption');
34
+ if (!defaultLocalePublishOption || !Node.isPropertyAssignment(defaultLocalePublishOption)) {
35
+ continue;
36
+ }
37
+ const initializer = defaultLocalePublishOption.getInitializer();
38
+ if (initializer && Node.isStringLiteral(initializer) && initializer.getLiteralValue() === 'all') {
39
+ notes.add(`${sourceFile.getFilePath()}: 'localization.defaultLocalePublishOption' was set to 'all' — the Admin UI Publish button now defaults to publishing only the active locale instead. Use the "Publish all locales" option in the Publish button dropdown to publish every locale at once.`);
40
+ }
41
+ defaultLocalePublishOption.remove();
42
+ filesChanged.add(sourceFile.getFilePath());
43
+ }
44
+ }
45
+ return {
46
+ filesChanged: Array.from(filesChanged),
47
+ ...notes.size > 0 ? {
48
+ notes: Array.from(notes)
49
+ } : {}
50
+ };
51
+ },
52
+ description: 'Remove localization.defaultLocalePublishOption from Payload configs. The Admin UI Publish button now always defaults to publishing the active locale when localized fields exist, with "Publish all locales" available as a secondary dropdown option.'
53
+ };
54
+ function resolveLocalizationObject({ property }) {
55
+ if (Node.isPropertyAssignment(property)) {
56
+ return resolveLocalizationInitializer({
57
+ initializer: property.getInitializer()
58
+ });
59
+ }
60
+ const variableDeclaration = property.getValueSymbol()?.getDeclarations().find(Node.isVariableDeclaration);
61
+ return resolveLocalizationVariable({
62
+ variableDeclaration
63
+ });
64
+ }
65
+ function resolveLocalizationInitializer({ initializer }) {
66
+ if (!initializer) {
67
+ return {
68
+ isUnresolved: true
69
+ };
70
+ }
71
+ if (Node.isObjectLiteralExpression(initializer)) {
72
+ return {
73
+ isUnresolved: false,
74
+ object: initializer
75
+ };
76
+ }
77
+ if (initializer.getKind() === SyntaxKind.FalseKeyword) {
78
+ return {
79
+ isUnresolved: false
80
+ };
81
+ }
82
+ if (Node.isIdentifier(initializer)) {
83
+ const variableDeclaration = initializer.getDefinitions().map((definition)=>definition.getDeclarationNode()).find(Node.isVariableDeclaration);
84
+ return resolveLocalizationVariable({
85
+ variableDeclaration
86
+ });
87
+ }
88
+ return {
89
+ isUnresolved: true
90
+ };
91
+ }
92
+ function resolveLocalizationVariable({ variableDeclaration }) {
93
+ if (!variableDeclaration || variableDeclaration.getVariableStatement()?.getDeclarationKind() !== VariableDeclarationKind.Const) {
94
+ return {
95
+ isUnresolved: true
96
+ };
97
+ }
98
+ return resolveLocalizationInitializer({
99
+ initializer: variableDeclaration.getInitializer()
100
+ });
101
+ }
102
+
103
+ //# sourceMappingURL=index.js.map