@openrewrite/recipes-react 0.2.9

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 (251) hide show
  1. package/dist/index.d.ts +4 -0
  2. package/dist/index.d.ts.map +1 -0
  3. package/dist/index.js +130 -0
  4. package/dist/index.js.map +1 -0
  5. package/dist/migration/change-component-prop-value.d.ts +20 -0
  6. package/dist/migration/change-component-prop-value.d.ts.map +1 -0
  7. package/dist/migration/change-component-prop-value.js +217 -0
  8. package/dist/migration/change-component-prop-value.js.map +1 -0
  9. package/dist/react-native/view-prop-types.d.ts +8 -0
  10. package/dist/react-native/view-prop-types.d.ts.map +1 -0
  11. package/dist/react-native/view-prop-types.js +65 -0
  12. package/dist/react-native/view-prop-types.js.map +1 -0
  13. package/dist/react16/error-boundaries.d.ts +8 -0
  14. package/dist/react16/error-boundaries.d.ts.map +1 -0
  15. package/dist/react16/error-boundaries.js +42 -0
  16. package/dist/react16/error-boundaries.js.map +1 -0
  17. package/dist/react16/find-dom-node.d.ts +8 -0
  18. package/dist/react16/find-dom-node.d.ts.map +1 -0
  19. package/dist/react16/find-dom-node.js +48 -0
  20. package/dist/react16/find-dom-node.js.map +1 -0
  21. package/dist/react16/react-dom-factories.d.ts +8 -0
  22. package/dist/react16/react-dom-factories.d.ts.map +1 -0
  23. package/dist/react16/react-dom-factories.js +72 -0
  24. package/dist/react16/react-dom-factories.js.map +1 -0
  25. package/dist/react16/react-prop-types.d.ts +8 -0
  26. package/dist/react16/react-prop-types.d.ts.map +1 -0
  27. package/dist/react16/react-prop-types.js +69 -0
  28. package/dist/react16/react-prop-types.js.map +1 -0
  29. package/dist/react16/react-to-react-dom.d.ts +8 -0
  30. package/dist/react16/react-to-react-dom.d.ts.map +1 -0
  31. package/dist/react16/react-to-react-dom.js +97 -0
  32. package/dist/react16/react-to-react-dom.js.map +1 -0
  33. package/dist/react16/replace-create-factory.d.ts +8 -0
  34. package/dist/react16/replace-create-factory.d.ts.map +1 -0
  35. package/dist/react16/replace-create-factory.js +69 -0
  36. package/dist/react16/replace-create-factory.js.map +1 -0
  37. package/dist/react16/upgrade-to-react-16.d.ts +8 -0
  38. package/dist/react16/upgrade-to-react-16.d.ts.map +1 -0
  39. package/dist/react16/upgrade-to-react-16.js +41 -0
  40. package/dist/react16/upgrade-to-react-16.js.map +1 -0
  41. package/dist/react17/remove-event-persist.d.ts +8 -0
  42. package/dist/react17/remove-event-persist.d.ts.map +1 -0
  43. package/dist/react17/remove-event-persist.js +114 -0
  44. package/dist/react17/remove-event-persist.js.map +1 -0
  45. package/dist/react17/rename-unsafe-lifecycles.d.ts +8 -0
  46. package/dist/react17/rename-unsafe-lifecycles.d.ts.map +1 -0
  47. package/dist/react17/rename-unsafe-lifecycles.js +48 -0
  48. package/dist/react17/rename-unsafe-lifecycles.js.map +1 -0
  49. package/dist/react17/update-react-imports.d.ts +8 -0
  50. package/dist/react17/update-react-imports.d.ts.map +1 -0
  51. package/dist/react17/update-react-imports.js +40 -0
  52. package/dist/react17/update-react-imports.js.map +1 -0
  53. package/dist/react17/upgrade-to-react-17.d.ts +8 -0
  54. package/dist/react17/upgrade-to-react-17.d.ts.map +1 -0
  55. package/dist/react17/upgrade-to-react-17.js +37 -0
  56. package/dist/react17/upgrade-to-react-17.js.map +1 -0
  57. package/dist/react18/remove-unstable-batched-updates.d.ts +8 -0
  58. package/dist/react18/remove-unstable-batched-updates.d.ts.map +1 -0
  59. package/dist/react18/remove-unstable-batched-updates.js +170 -0
  60. package/dist/react18/remove-unstable-batched-updates.js.map +1 -0
  61. package/dist/react18/replace-reactdom-render.d.ts +8 -0
  62. package/dist/react18/replace-reactdom-render.d.ts.map +1 -0
  63. package/dist/react18/replace-reactdom-render.js +55 -0
  64. package/dist/react18/replace-reactdom-render.js.map +1 -0
  65. package/dist/react18/replace-render-callback.d.ts +8 -0
  66. package/dist/react18/replace-render-callback.d.ts.map +1 -0
  67. package/dist/react18/replace-render-callback.js +60 -0
  68. package/dist/react18/replace-render-callback.js.map +1 -0
  69. package/dist/react18/replace-unmount-component-at-node.d.ts +8 -0
  70. package/dist/react18/replace-unmount-component-at-node.d.ts.map +1 -0
  71. package/dist/react18/replace-unmount-component-at-node.js +54 -0
  72. package/dist/react18/replace-unmount-component-at-node.js.map +1 -0
  73. package/dist/react18/upgrade-to-react-18.d.ts +8 -0
  74. package/dist/react18/upgrade-to-react-18.d.ts.map +1 -0
  75. package/dist/react18/upgrade-to-react-18.js +39 -0
  76. package/dist/react18/upgrade-to-react-18.js.map +1 -0
  77. package/dist/react19/deprecated-react-types.d.ts +8 -0
  78. package/dist/react19/deprecated-react-types.d.ts.map +1 -0
  79. package/dist/react19/deprecated-react-types.js +135 -0
  80. package/dist/react19/deprecated-react-types.js.map +1 -0
  81. package/dist/react19/find-context-consumer.d.ts +9 -0
  82. package/dist/react19/find-context-consumer.d.ts.map +1 -0
  83. package/dist/react19/find-context-consumer.js +128 -0
  84. package/dist/react19/find-context-consumer.js.map +1 -0
  85. package/dist/react19/find-deprecated-reactdom-apis.d.ts +9 -0
  86. package/dist/react19/find-deprecated-reactdom-apis.d.ts.map +1 -0
  87. package/dist/react19/find-deprecated-reactdom-apis.js +132 -0
  88. package/dist/react19/find-deprecated-reactdom-apis.js.map +1 -0
  89. package/dist/react19/find-element-ref.d.ts +9 -0
  90. package/dist/react19/find-element-ref.d.ts.map +1 -0
  91. package/dist/react19/find-element-ref.js +88 -0
  92. package/dist/react19/find-element-ref.js.map +1 -0
  93. package/dist/react19/find-legacy-context-api.d.ts +9 -0
  94. package/dist/react19/find-legacy-context-api.d.ts.map +1 -0
  95. package/dist/react19/find-legacy-context-api.js +163 -0
  96. package/dist/react19/find-legacy-context-api.js.map +1 -0
  97. package/dist/react19/no-implicit-ref-callback-return.d.ts +8 -0
  98. package/dist/react19/no-implicit-ref-callback-return.d.ts.map +1 -0
  99. package/dist/react19/no-implicit-ref-callback-return.js +107 -0
  100. package/dist/react19/no-implicit-ref-callback-return.js.map +1 -0
  101. package/dist/react19/remove-context-provider.d.ts +8 -0
  102. package/dist/react19/remove-context-provider.d.ts.map +1 -0
  103. package/dist/react19/remove-context-provider.js +59 -0
  104. package/dist/react19/remove-context-provider.js.map +1 -0
  105. package/dist/react19/remove-forward-ref.d.ts +8 -0
  106. package/dist/react19/remove-forward-ref.d.ts.map +1 -0
  107. package/dist/react19/remove-forward-ref.js +73 -0
  108. package/dist/react19/remove-forward-ref.js.map +1 -0
  109. package/dist/react19/remove-prop-types.d.ts +8 -0
  110. package/dist/react19/remove-prop-types.d.ts.map +1 -0
  111. package/dist/react19/remove-prop-types.js +76 -0
  112. package/dist/react19/remove-prop-types.js.map +1 -0
  113. package/dist/react19/remove-react-fc.d.ts +8 -0
  114. package/dist/react19/remove-react-fc.d.ts.map +1 -0
  115. package/dist/react19/remove-react-fc.js +149 -0
  116. package/dist/react19/remove-react-fc.js.map +1 -0
  117. package/dist/react19/replace-act-import.d.ts +9 -0
  118. package/dist/react19/replace-act-import.d.ts.map +1 -0
  119. package/dist/react19/replace-act-import.js +34 -0
  120. package/dist/react19/replace-act-import.js.map +1 -0
  121. package/dist/react19/replace-default-props.d.ts +8 -0
  122. package/dist/react19/replace-default-props.d.ts.map +1 -0
  123. package/dist/react19/replace-default-props.js +195 -0
  124. package/dist/react19/replace-default-props.js.map +1 -0
  125. package/dist/react19/replace-react-shallow-renderer.d.ts +8 -0
  126. package/dist/react19/replace-react-shallow-renderer.d.ts.map +1 -0
  127. package/dist/react19/replace-react-shallow-renderer.js +69 -0
  128. package/dist/react19/replace-react-shallow-renderer.js.map +1 -0
  129. package/dist/react19/replace-reactdom-hydrate.d.ts +8 -0
  130. package/dist/react19/replace-reactdom-hydrate.d.ts.map +1 -0
  131. package/dist/react19/replace-reactdom-hydrate.js +55 -0
  132. package/dist/react19/replace-reactdom-hydrate.js.map +1 -0
  133. package/dist/react19/replace-string-ref.d.ts +8 -0
  134. package/dist/react19/replace-string-ref.d.ts.map +1 -0
  135. package/dist/react19/replace-string-ref.js +75 -0
  136. package/dist/react19/replace-string-ref.js.map +1 -0
  137. package/dist/react19/replace-use-form-state.d.ts +8 -0
  138. package/dist/react19/replace-use-form-state.d.ts.map +1 -0
  139. package/dist/react19/replace-use-form-state.js +54 -0
  140. package/dist/react19/replace-use-form-state.js.map +1 -0
  141. package/dist/react19/upgrade-to-react-19.d.ts +8 -0
  142. package/dist/react19/upgrade-to-react-19.d.ts.map +1 -0
  143. package/dist/react19/upgrade-to-react-19.js +59 -0
  144. package/dist/react19/upgrade-to-react-19.js.map +1 -0
  145. package/dist/react19/use-context-hook.d.ts +8 -0
  146. package/dist/react19/use-context-hook.d.ts.map +1 -0
  147. package/dist/react19/use-context-hook.js +54 -0
  148. package/dist/react19/use-context-hook.js.map +1 -0
  149. package/dist/react19/use-ref-required-initial.d.ts +8 -0
  150. package/dist/react19/use-ref-required-initial.d.ts.map +1 -0
  151. package/dist/react19/use-ref-required-initial.js +74 -0
  152. package/dist/react19/use-ref-required-initial.js.map +1 -0
  153. package/dist/refactoring/class-to-functional.d.ts +8 -0
  154. package/dist/refactoring/class-to-functional.d.ts.map +1 -0
  155. package/dist/refactoring/class-to-functional.js +205 -0
  156. package/dist/refactoring/class-to-functional.js.map +1 -0
  157. package/dist/refactoring/create-class-to-es6.d.ts +8 -0
  158. package/dist/refactoring/create-class-to-es6.d.ts.map +1 -0
  159. package/dist/refactoring/create-class-to-es6.js +289 -0
  160. package/dist/refactoring/create-class-to-es6.js.map +1 -0
  161. package/dist/refactoring/create-element-to-jsx.d.ts +8 -0
  162. package/dist/refactoring/create-element-to-jsx.d.ts.map +1 -0
  163. package/dist/refactoring/create-element-to-jsx.js +167 -0
  164. package/dist/refactoring/create-element-to-jsx.js.map +1 -0
  165. package/dist/refactoring/manual-bind-to-arrow.d.ts +8 -0
  166. package/dist/refactoring/manual-bind-to-arrow.d.ts.map +1 -0
  167. package/dist/refactoring/manual-bind-to-arrow.js +134 -0
  168. package/dist/refactoring/manual-bind-to-arrow.js.map +1 -0
  169. package/dist/refactoring/pure-render-mixin.d.ts +8 -0
  170. package/dist/refactoring/pure-render-mixin.d.ts.map +1 -0
  171. package/dist/refactoring/pure-render-mixin.js +253 -0
  172. package/dist/refactoring/pure-render-mixin.js.map +1 -0
  173. package/dist/refactoring/sort-comp.d.ts +8 -0
  174. package/dist/refactoring/sort-comp.d.ts.map +1 -0
  175. package/dist/refactoring/sort-comp.js +128 -0
  176. package/dist/refactoring/sort-comp.js.map +1 -0
  177. package/dist/search/find-hook-usage.d.ts +9 -0
  178. package/dist/search/find-hook-usage.d.ts.map +1 -0
  179. package/dist/search/find-hook-usage.js +262 -0
  180. package/dist/search/find-hook-usage.js.map +1 -0
  181. package/dist/search/find-prop-usage.d.ts +15 -0
  182. package/dist/search/find-prop-usage.d.ts.map +1 -0
  183. package/dist/search/find-prop-usage.js +177 -0
  184. package/dist/search/find-prop-usage.js.map +1 -0
  185. package/dist/search/find-react-component.d.ts +15 -0
  186. package/dist/search/find-react-component.d.ts.map +1 -0
  187. package/dist/search/find-react-component.js +260 -0
  188. package/dist/search/find-react-component.js.map +1 -0
  189. package/dist/search/find-server-rendering-usage.d.ts +9 -0
  190. package/dist/search/find-server-rendering-usage.d.ts.map +1 -0
  191. package/dist/search/find-server-rendering-usage.js +131 -0
  192. package/dist/search/find-server-rendering-usage.js.map +1 -0
  193. package/dist/simplify-object-pattern-property.d.ts +8 -0
  194. package/dist/simplify-object-pattern-property.d.ts.map +1 -0
  195. package/dist/simplify-object-pattern-property.js +59 -0
  196. package/dist/simplify-object-pattern-property.js.map +1 -0
  197. package/dist/simplify-react-imports.d.ts +8 -0
  198. package/dist/simplify-react-imports.d.ts.map +1 -0
  199. package/dist/simplify-react-imports.js +199 -0
  200. package/dist/simplify-react-imports.js.map +1 -0
  201. package/package.json +39 -0
  202. package/src/index.ts +149 -0
  203. package/src/migration/change-component-prop-value.ts +268 -0
  204. package/src/react-native/view-prop-types.ts +63 -0
  205. package/src/react16/error-boundaries.ts +46 -0
  206. package/src/react16/find-dom-node.ts +55 -0
  207. package/src/react16/react-dom-factories.ts +99 -0
  208. package/src/react16/react-prop-types.ts +71 -0
  209. package/src/react16/react-to-react-dom.ts +104 -0
  210. package/src/react16/replace-create-factory.ts +96 -0
  211. package/src/react16/upgrade-to-react-16.ts +37 -0
  212. package/src/react17/remove-event-persist.ts +121 -0
  213. package/src/react17/rename-unsafe-lifecycles.ts +57 -0
  214. package/src/react17/update-react-imports.ts +50 -0
  215. package/src/react17/upgrade-to-react-17.ts +30 -0
  216. package/src/react18/remove-unstable-batched-updates.ts +192 -0
  217. package/src/react18/replace-reactdom-render.ts +68 -0
  218. package/src/react18/replace-render-callback.ts +66 -0
  219. package/src/react18/replace-unmount-component-at-node.ts +66 -0
  220. package/src/react18/upgrade-to-react-18.ts +33 -0
  221. package/src/react19/deprecated-react-types.ts +120 -0
  222. package/src/react19/find-context-consumer.ts +127 -0
  223. package/src/react19/find-deprecated-reactdom-apis.ts +125 -0
  224. package/src/react19/find-element-ref.ts +86 -0
  225. package/src/react19/find-legacy-context-api.ts +157 -0
  226. package/src/react19/no-implicit-ref-callback-return.ts +123 -0
  227. package/src/react19/remove-context-provider.ts +87 -0
  228. package/src/react19/remove-forward-ref.ts +69 -0
  229. package/src/react19/remove-prop-types.ts +86 -0
  230. package/src/react19/remove-react-fc.ts +247 -0
  231. package/src/react19/replace-act-import.ts +36 -0
  232. package/src/react19/replace-default-props.ts +220 -0
  233. package/src/react19/replace-react-shallow-renderer.ts +75 -0
  234. package/src/react19/replace-reactdom-hydrate.ts +67 -0
  235. package/src/react19/replace-string-ref.ts +89 -0
  236. package/src/react19/replace-use-form-state.ts +66 -0
  237. package/src/react19/upgrade-to-react-19.ts +66 -0
  238. package/src/react19/use-context-hook.ts +67 -0
  239. package/src/react19/use-ref-required-initial.ts +75 -0
  240. package/src/refactoring/class-to-functional.ts +229 -0
  241. package/src/refactoring/create-class-to-es6.ts +309 -0
  242. package/src/refactoring/create-element-to-jsx.ts +200 -0
  243. package/src/refactoring/manual-bind-to-arrow.ts +139 -0
  244. package/src/refactoring/pure-render-mixin.ts +346 -0
  245. package/src/refactoring/sort-comp.ts +135 -0
  246. package/src/search/find-hook-usage.ts +226 -0
  247. package/src/search/find-prop-usage.ts +176 -0
  248. package/src/search/find-react-component.ts +254 -0
  249. package/src/search/find-server-rendering-usage.ts +120 -0
  250. package/src/simplify-object-pattern-property.ts +71 -0
  251. package/src/simplify-react-imports.ts +241 -0
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.RenameUnsafeLifecycles = void 0;
13
+ const rewrite_1 = require("@openrewrite/rewrite");
14
+ const javascript_1 = require("@openrewrite/rewrite/javascript");
15
+ const UNSAFE_LIFECYCLE_MAP = {
16
+ 'componentWillMount': 'UNSAFE_componentWillMount',
17
+ 'componentWillReceiveProps': 'UNSAFE_componentWillReceiveProps',
18
+ 'componentWillUpdate': 'UNSAFE_componentWillUpdate',
19
+ };
20
+ class RenameUnsafeLifecycles extends rewrite_1.Recipe {
21
+ constructor() {
22
+ super(...arguments);
23
+ this.name = "org.openrewrite.react.17.rename-unsafe-lifecycles";
24
+ this.displayName = "Add `UNSAFE_` prefix to deprecated lifecycle methods";
25
+ this.description = "Renames `componentWillMount`, `componentWillReceiveProps`, and `componentWillUpdate` to their UNSAFE_ prefixed versions.";
26
+ }
27
+ editor() {
28
+ return __awaiter(this, void 0, void 0, function* () {
29
+ return new class extends javascript_1.JavaScriptVisitor {
30
+ visitIdentifier(ident, ctx) {
31
+ const _super = Object.create(null, {
32
+ visitIdentifier: { get: () => super.visitIdentifier }
33
+ });
34
+ return __awaiter(this, void 0, void 0, function* () {
35
+ let id = yield _super.visitIdentifier.call(this, ident, ctx);
36
+ const newName = UNSAFE_LIFECYCLE_MAP[id.simpleName];
37
+ if (newName) {
38
+ return Object.assign(Object.assign({}, id), { simpleName: newName });
39
+ }
40
+ return id;
41
+ });
42
+ }
43
+ }();
44
+ });
45
+ }
46
+ }
47
+ exports.RenameUnsafeLifecycles = RenameUnsafeLifecycles;
48
+ //# sourceMappingURL=rename-unsafe-lifecycles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rename-unsafe-lifecycles.js","sourceRoot":"","sources":["../../src/react17/rename-unsafe-lifecycles.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,kDAA2E;AAC3E,gEAAkE;AAGlE,MAAM,oBAAoB,GAA2B;IACjD,oBAAoB,EAAE,2BAA2B;IACjD,2BAA2B,EAAE,kCAAkC;IAC/D,qBAAqB,EAAE,4BAA4B;CACtD,CAAC;AA0BF,MAAa,sBAAuB,SAAQ,gBAAM;IAAlD;;QACa,SAAI,GAAG,mDAAmD,CAAC;QAC3D,gBAAW,GAAW,sDAAsD,CAAC;QAC7E,gBAAW,GAAW,0HAA0H,CAAC;IAmB9J,CAAC;IAjBS,MAAM;;YACR,OAAO,IAAI,KAAM,SAAQ,8BAAmC;gBACzC,eAAe,CAAC,KAAmB,EAAE,GAAqB;;;;;wBACrE,IAAI,EAAE,GAAG,MAAM,OAAM,eAAe,YAAC,KAAK,EAAE,GAAG,CAAiB,CAAC;wBAEjE,MAAM,OAAO,GAAG,oBAAoB,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;wBACpD,IAAI,OAAO,EAAE,CAAC;4BACV,OAAO,gCACA,EAAE,KACL,UAAU,EAAE,OAAO,GACN,CAAC;wBACtB,CAAC;wBAED,OAAO,EAAE,CAAC;oBACd,CAAC;iBAAA;aACJ,EAAE,CAAC;QACR,CAAC;KAAA;CACJ;AAtBD,wDAsBC"}
@@ -0,0 +1,8 @@
1
+ import { ExecutionContext, Recipe, TreeVisitor } from "@openrewrite/rewrite";
2
+ export declare class UpdateReactImports extends Recipe {
3
+ readonly name = "org.openrewrite.react.17.update-react-imports";
4
+ readonly displayName: string;
5
+ readonly description: string;
6
+ editor(): Promise<TreeVisitor<any, ExecutionContext>>;
7
+ }
8
+ //# sourceMappingURL=update-react-imports.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-react-imports.d.ts","sourceRoot":"","sources":["../../src/react17/update-react-imports.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAE,MAAM,EAAE,WAAW,EAAC,MAAM,sBAAsB,CAAC;AAgC3E,qBAAa,kBAAmB,SAAQ,MAAM;IAC1C,QAAQ,CAAC,IAAI,mDAAmD;IAChE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAsC;IAClE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAA4J;IAElL,MAAM,IAAI,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;CAY9D"}
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.UpdateReactImports = void 0;
13
+ const rewrite_1 = require("@openrewrite/rewrite");
14
+ const javascript_1 = require("@openrewrite/rewrite/javascript");
15
+ class UpdateReactImports extends rewrite_1.Recipe {
16
+ constructor() {
17
+ super(...arguments);
18
+ this.name = "org.openrewrite.react.17.update-react-imports";
19
+ this.displayName = "Remove unnecessary React imports";
20
+ this.description = "Removes the default `import React from 'react'` when React is only used for JSX, which is no longer necessary with the new JSX transform in React 17+.";
21
+ }
22
+ editor() {
23
+ return __awaiter(this, void 0, void 0, function* () {
24
+ return new class extends javascript_1.JavaScriptVisitor {
25
+ visitJsCompilationUnit(cu, ctx) {
26
+ const _super = Object.create(null, {
27
+ visitJsCompilationUnit: { get: () => super.visitJsCompilationUnit }
28
+ });
29
+ return __awaiter(this, void 0, void 0, function* () {
30
+ let result = yield _super.visitJsCompilationUnit.call(this, cu, ctx);
31
+ (0, javascript_1.maybeRemoveImport)(this, "react", "default");
32
+ return result;
33
+ });
34
+ }
35
+ }();
36
+ });
37
+ }
38
+ }
39
+ exports.UpdateReactImports = UpdateReactImports;
40
+ //# sourceMappingURL=update-react-imports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-react-imports.js","sourceRoot":"","sources":["../../src/react17/update-react-imports.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,kDAA2E;AAC3E,gEAAqF;AA+BrF,MAAa,kBAAmB,SAAQ,gBAAM;IAA9C;;QACa,SAAI,GAAG,+CAA+C,CAAC;QACvD,gBAAW,GAAW,kCAAkC,CAAC;QACzD,gBAAW,GAAW,wJAAwJ,CAAC;IAc5L,CAAC;IAZS,MAAM;;YACR,OAAO,IAAI,KAAM,SAAQ,8BAAmC;gBACzC,sBAAsB,CAAC,EAAO,EAAE,GAAqB;;;;;wBAChE,IAAI,MAAM,GAAG,MAAM,OAAM,sBAAsB,YAAC,EAAE,EAAE,GAAG,CAAC,CAAC;wBAIzD,IAAA,8BAAiB,EAAC,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;wBAC5C,OAAO,MAAM,CAAC;oBAClB,CAAC;iBAAA;aACJ,EAAE,CAAC;QACR,CAAC;KAAA;CACJ;AAjBD,gDAiBC"}
@@ -0,0 +1,8 @@
1
+ import { Recipe } from "@openrewrite/rewrite";
2
+ export declare class UpgradeToReact17 extends Recipe {
3
+ readonly name = "org.openrewrite.react.migrate.upgrade-to-react-17";
4
+ readonly displayName = "Upgrade to React 17";
5
+ readonly description = "Migrate deprecated APIs for React 17 compatibility. Includes all React 16 migrations plus lifecycle method prefixing, import cleanup, and event.persist() removal.";
6
+ recipeList(): Promise<Recipe[]>;
7
+ }
8
+ //# sourceMappingURL=upgrade-to-react-17.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upgrade-to-react-17.d.ts","sourceRoot":"","sources":["../../src/react17/upgrade-to-react-17.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,sBAAsB,CAAC;AAgB5C,qBAAa,gBAAiB,SAAQ,MAAM;IACxC,QAAQ,CAAC,IAAI,uDAAuD;IACpE,QAAQ,CAAC,WAAW,yBAAyB;IAC7C,QAAQ,CAAC,WAAW,wKAAwK;IAEtL,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;CAQxC"}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.UpgradeToReact17 = void 0;
13
+ const rewrite_1 = require("@openrewrite/rewrite");
14
+ const upgrade_to_react_16_1 = require("../react16/upgrade-to-react-16");
15
+ const rename_unsafe_lifecycles_1 = require("./rename-unsafe-lifecycles");
16
+ const update_react_imports_1 = require("./update-react-imports");
17
+ const remove_event_persist_1 = require("./remove-event-persist");
18
+ class UpgradeToReact17 extends rewrite_1.Recipe {
19
+ constructor() {
20
+ super(...arguments);
21
+ this.name = "org.openrewrite.react.migrate.upgrade-to-react-17";
22
+ this.displayName = "Upgrade to React 17";
23
+ this.description = "Migrate deprecated APIs for React 17 compatibility. Includes all React 16 migrations plus lifecycle method prefixing, import cleanup, and event.persist() removal.";
24
+ }
25
+ recipeList() {
26
+ return __awaiter(this, void 0, void 0, function* () {
27
+ return [
28
+ new upgrade_to_react_16_1.UpgradeToReact16(),
29
+ new rename_unsafe_lifecycles_1.RenameUnsafeLifecycles(),
30
+ new update_react_imports_1.UpdateReactImports(),
31
+ new remove_event_persist_1.RemoveEventPersist(),
32
+ ];
33
+ });
34
+ }
35
+ }
36
+ exports.UpgradeToReact17 = UpgradeToReact17;
37
+ //# sourceMappingURL=upgrade-to-react-17.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upgrade-to-react-17.js","sourceRoot":"","sources":["../../src/react17/upgrade-to-react-17.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,kDAA4C;AAC5C,wEAAgE;AAChE,yEAAkE;AAClE,iEAA0D;AAC1D,iEAA0D;AAY1D,MAAa,gBAAiB,SAAQ,gBAAM;IAA5C;;QACa,SAAI,GAAG,mDAAmD,CAAC;QAC3D,gBAAW,GAAG,qBAAqB,CAAC;QACpC,gBAAW,GAAG,oKAAoK,CAAC;IAUhM,CAAC;IARS,UAAU;;YACZ,OAAO;gBACH,IAAI,sCAAgB,EAAE;gBACtB,IAAI,iDAAsB,EAAE;gBAC5B,IAAI,yCAAkB,EAAE;gBACxB,IAAI,yCAAkB,EAAE;aAC3B,CAAC;QACN,CAAC;KAAA;CACJ;AAbD,4CAaC"}
@@ -0,0 +1,8 @@
1
+ import { ExecutionContext, Recipe, TreeVisitor } from "@openrewrite/rewrite";
2
+ export declare class RemoveUnstableBatchedUpdates extends Recipe {
3
+ readonly name = "org.openrewrite.react.18.remove-unstable-batched-updates";
4
+ readonly displayName = "Remove `unstable_batchedUpdates`";
5
+ readonly description = "Removes `unstable_batchedUpdates` wrappers from `react-dom`. React 18 automatically batches all state updates, making this function unnecessary.";
6
+ editor(): Promise<TreeVisitor<any, ExecutionContext>>;
7
+ }
8
+ //# sourceMappingURL=remove-unstable-batched-updates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove-unstable-batched-updates.d.ts","sourceRoot":"","sources":["../../src/react18/remove-unstable-batched-updates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAE,MAAM,EAAE,WAAW,EAAC,MAAM,sBAAsB,CAAC;AA8B3E,qBAAa,4BAA6B,SAAQ,MAAM;IACpD,QAAQ,CAAC,IAAI,8DAA8D;IAC3E,QAAQ,CAAC,WAAW,sCAAsC;IAC1D,QAAQ,CAAC,WAAW,sJAAsJ;IAEpK,MAAM,IAAI,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;CA4J9D"}
@@ -0,0 +1,170 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.RemoveUnstableBatchedUpdates = void 0;
13
+ const rewrite_1 = require("@openrewrite/rewrite");
14
+ const javascript_1 = require("@openrewrite/rewrite/javascript");
15
+ const java_1 = require("@openrewrite/rewrite/java");
16
+ const mutative_1 = require("mutative");
17
+ class RemoveUnstableBatchedUpdates extends rewrite_1.Recipe {
18
+ constructor() {
19
+ super(...arguments);
20
+ this.name = "org.openrewrite.react.18.remove-unstable-batched-updates";
21
+ this.displayName = "Remove `unstable_batchedUpdates`";
22
+ this.description = "Removes `unstable_batchedUpdates` wrappers from `react-dom`. React 18 automatically batches all state updates, making this function unnecessary.";
23
+ }
24
+ editor() {
25
+ return __awaiter(this, void 0, void 0, function* () {
26
+ return new class extends javascript_1.JavaScriptVisitor {
27
+ constructor() {
28
+ super(...arguments);
29
+ this.changed = false;
30
+ }
31
+ visitJsCompilationUnit(cu, ctx) {
32
+ const _super = Object.create(null, {
33
+ visitJsCompilationUnit: { get: () => super.visitJsCompilationUnit }
34
+ });
35
+ return __awaiter(this, void 0, void 0, function* () {
36
+ this.changed = false;
37
+ let result = yield _super.visitJsCompilationUnit.call(this, cu, ctx);
38
+ result = this.inlineTopLevelStatements(result);
39
+ if (this.changed) {
40
+ (0, javascript_1.maybeRemoveImport)(this, "react-dom", "unstable_batchedUpdates");
41
+ }
42
+ return result;
43
+ });
44
+ }
45
+ visitBlock(block, ctx) {
46
+ const _super = Object.create(null, {
47
+ visitBlock: { get: () => super.visitBlock }
48
+ });
49
+ return __awaiter(this, void 0, void 0, function* () {
50
+ let b = yield _super.visitBlock.call(this, block, ctx);
51
+ return this.inlineBlockStatements(b);
52
+ });
53
+ }
54
+ inlineTopLevelStatements(cu) {
55
+ const result = this.spliceStatements(cu.statements);
56
+ if (!result)
57
+ return cu;
58
+ return (0, mutative_1.create)(cu, draft => {
59
+ draft.statements = result;
60
+ });
61
+ }
62
+ inlineBlockStatements(block) {
63
+ const result = this.spliceStatements(block.statements);
64
+ if (!result)
65
+ return block;
66
+ return (0, mutative_1.create)(block, draft => {
67
+ draft.statements = result;
68
+ });
69
+ }
70
+ spliceStatements(statements) {
71
+ const newStatements = [];
72
+ let changed = false;
73
+ for (const paddedStmt of statements) {
74
+ const stmt = paddedStmt.element;
75
+ if (!stmt) {
76
+ newStatements.push(paddedStmt);
77
+ continue;
78
+ }
79
+ const bodyStatements = this.extractBatchedUpdatesBody(stmt);
80
+ if (bodyStatements !== null && bodyStatements.length > 0) {
81
+ const outerPrefix = paddedStmt.element.prefix;
82
+ const outerIndent = this.getIndentation(outerPrefix);
83
+ const innerIndent = bodyStatements.length > 0
84
+ ? this.getIndentation(bodyStatements[0].element.prefix)
85
+ : outerIndent;
86
+ for (const bodyStmt of bodyStatements) {
87
+ const adjustedPrefix = this.adjustIndentation(bodyStmt.element.prefix, innerIndent, outerIndent);
88
+ newStatements.push(Object.assign(Object.assign({}, bodyStmt), { element: Object.assign(Object.assign({}, bodyStmt.element), { prefix: adjustedPrefix }) }));
89
+ }
90
+ changed = true;
91
+ this.changed = true;
92
+ }
93
+ else {
94
+ newStatements.push(paddedStmt);
95
+ }
96
+ }
97
+ return changed ? newStatements : null;
98
+ }
99
+ getIndentation(prefix) {
100
+ var _a;
101
+ const ws = (_a = prefix === null || prefix === void 0 ? void 0 : prefix.whitespace) !== null && _a !== void 0 ? _a : '';
102
+ const lastNewline = ws.lastIndexOf('\n');
103
+ return lastNewline >= 0 ? ws.substring(lastNewline + 1) : ws;
104
+ }
105
+ adjustIndentation(prefix, fromIndent, toIndent) {
106
+ var _a;
107
+ if (fromIndent === toIndent)
108
+ return prefix;
109
+ const ws = (_a = prefix === null || prefix === void 0 ? void 0 : prefix.whitespace) !== null && _a !== void 0 ? _a : '';
110
+ const lastNewline = ws.lastIndexOf('\n');
111
+ if (lastNewline < 0)
112
+ return Object.assign(Object.assign({}, prefix), { whitespace: toIndent });
113
+ const currentIndent = ws.substring(lastNewline + 1);
114
+ const adjusted = currentIndent.startsWith(fromIndent)
115
+ ? toIndent + currentIndent.substring(fromIndent.length)
116
+ : toIndent;
117
+ return Object.assign(Object.assign({}, prefix), { whitespace: ws.substring(0, lastNewline + 1) + adjusted });
118
+ }
119
+ extractBatchedUpdatesBody(stmt) {
120
+ let expr;
121
+ if (stmt.kind === javascript_1.JS.Kind.ExpressionStatement) {
122
+ expr = stmt.expression;
123
+ }
124
+ else if (stmt.kind === java_1.J.Kind.MethodInvocation) {
125
+ expr = stmt;
126
+ }
127
+ else {
128
+ return null;
129
+ }
130
+ if (!expr || expr.kind !== java_1.J.Kind.MethodInvocation)
131
+ return null;
132
+ const method = expr;
133
+ if (!this.isBatchedUpdatesCall(method))
134
+ return null;
135
+ const args = method.arguments;
136
+ if (!args)
137
+ return null;
138
+ const elements = args.elements;
139
+ if (!elements || elements.length === 0)
140
+ return null;
141
+ const callback = elements[0].element;
142
+ if (!callback)
143
+ return null;
144
+ if (callback.kind === javascript_1.JS.Kind.ArrowFunction) {
145
+ const arrow = callback;
146
+ const body = arrow.lambda.body;
147
+ if (body && body.kind === java_1.J.Kind.Block) {
148
+ return body.statements;
149
+ }
150
+ }
151
+ return null;
152
+ }
153
+ isBatchedUpdatesCall(method) {
154
+ var _a;
155
+ if (method.name.simpleName === 'unstable_batchedUpdates') {
156
+ if (!method.select)
157
+ return true;
158
+ const select = (_a = method.select.element) !== null && _a !== void 0 ? _a : method.select;
159
+ if ((0, java_1.isIdentifier)(select) && select.simpleName === 'ReactDOM') {
160
+ return true;
161
+ }
162
+ }
163
+ return false;
164
+ }
165
+ }();
166
+ });
167
+ }
168
+ }
169
+ exports.RemoveUnstableBatchedUpdates = RemoveUnstableBatchedUpdates;
170
+ //# sourceMappingURL=remove-unstable-batched-updates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove-unstable-batched-updates.js","sourceRoot":"","sources":["../../src/react18/remove-unstable-batched-updates.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { ExecutionContext, Recipe, TreeVisitor } from "@openrewrite/rewrite";
2
+ export declare class ReplaceReactDomRender extends Recipe {
3
+ readonly name = "org.openrewrite.react.18.replace-reactdom-render";
4
+ readonly displayName: string;
5
+ readonly description: string;
6
+ editor(): Promise<TreeVisitor<any, ExecutionContext>>;
7
+ }
8
+ //# sourceMappingURL=replace-reactdom-render.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replace-reactdom-render.d.ts","sourceRoot":"","sources":["../../src/react18/replace-reactdom-render.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAE,MAAM,EAAE,WAAW,EAAC,MAAM,sBAAsB,CAAC;AAiC3E,qBAAa,qBAAsB,SAAQ,MAAM;IAC7C,QAAQ,CAAC,IAAI,sDAAsD;IACnE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAiD;IAC7E,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAgI;IAEtJ,MAAM,IAAI,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;CA6B9D"}
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.ReplaceReactDomRender = void 0;
13
+ const rewrite_1 = require("@openrewrite/rewrite");
14
+ const javascript_1 = require("@openrewrite/rewrite/javascript");
15
+ class ReplaceReactDomRender extends rewrite_1.Recipe {
16
+ constructor() {
17
+ super(...arguments);
18
+ this.name = "org.openrewrite.react.18.replace-reactdom-render";
19
+ this.displayName = "Replace `ReactDOM.render` with `createRoot`";
20
+ this.description = "Migrates from the legacy `ReactDOM.render()` API to the `createRoot()` API from `react-dom/client` introduced in React 18.";
21
+ }
22
+ editor() {
23
+ return __awaiter(this, void 0, void 0, function* () {
24
+ const reactDomOptions = {
25
+ context: ['import { render } from "react-dom";'],
26
+ dependencies: { '@types/react-dom': '^17.0.0' }
27
+ };
28
+ const element = (0, javascript_1.capture)();
29
+ const container = (0, javascript_1.capture)();
30
+ const rule = (0, javascript_1.rewrite)(() => ({
31
+ before: (0, javascript_1.pattern) `render(${element}, ${container})`.configure(reactDomOptions),
32
+ after: (0, javascript_1.template) `createRoot(${container}).render(${element})`
33
+ }));
34
+ return new class extends javascript_1.JavaScriptVisitor {
35
+ visitMethodInvocation(method, p) {
36
+ const _super = Object.create(null, {
37
+ visitMethodInvocation: { get: () => super.visitMethodInvocation }
38
+ });
39
+ return __awaiter(this, void 0, void 0, function* () {
40
+ let m = yield _super.visitMethodInvocation.call(this, method, p);
41
+ const result = yield rule.tryOn(this.cursor, m);
42
+ if (result) {
43
+ (0, javascript_1.maybeRemoveImport)(this, "react-dom", "render");
44
+ (0, javascript_1.maybeAddImport)(this, { module: "react-dom/client", member: "createRoot", onlyIfReferenced: false });
45
+ return result;
46
+ }
47
+ return m;
48
+ });
49
+ }
50
+ }();
51
+ });
52
+ }
53
+ }
54
+ exports.ReplaceReactDomRender = ReplaceReactDomRender;
55
+ //# sourceMappingURL=replace-reactdom-render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replace-reactdom-render.js","sourceRoot":"","sources":["../../src/react18/replace-reactdom-render.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,kDAA2E;AAC3E,gEAQyC;AAwBzC,MAAa,qBAAsB,SAAQ,gBAAM;IAAjD;;QACa,SAAI,GAAG,kDAAkD,CAAC;QAC1D,gBAAW,GAAW,6CAA6C,CAAC;QACpE,gBAAW,GAAW,4HAA4H,CAAC;IA+BhK,CAAC;IA7BS,MAAM;;YACR,MAAM,eAAe,GAAG;gBACpB,OAAO,EAAE,CAAC,qCAAqC,CAAC;gBAChD,YAAY,EAAE,EAAC,kBAAkB,EAAE,SAAS,EAAC;aAChD,CAAC;YAEF,MAAM,OAAO,GAAG,IAAA,oBAAO,GAAc,CAAC;YACtC,MAAM,SAAS,GAAG,IAAA,oBAAO,GAAc,CAAC;YAExC,MAAM,IAAI,GAAG,IAAA,oBAAO,EAAC,GAAG,EAAE,CAAC,CAAC;gBACxB,MAAM,EAAE,IAAA,oBAAO,EAAA,UAAU,OAAO,KAAK,SAAS,GAAG,CAAC,SAAS,CAAC,eAAe,CAAC;gBAC5E,KAAK,EAAE,IAAA,qBAAQ,EAAA,cAAc,SAAS,YAAY,OAAO,GAAG;aAC/D,CAAC,CAAC,CAAC;YAEJ,OAAO,IAAI,KAAM,SAAQ,8BAAmC;gBACzC,qBAAqB,CAAC,MAA0B,EAAE,CAAmB;;;;;wBAChF,IAAI,CAAC,GAAG,MAAM,OAAM,qBAAqB,YAAC,MAAM,EAAE,CAAC,CAAuB,CAAC;wBAE3E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAE,CAAC,CAAC;wBACjD,IAAI,MAAM,EAAE,CAAC;4BACT,IAAA,8BAAiB,EAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;4BAC/C,IAAA,2BAAc,EAAC,IAAI,EAAE,EAAC,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,KAAK,EAAC,CAAC,CAAC;4BAClG,OAAO,MAAM,CAAC;wBAClB,CAAC;wBAED,OAAO,CAAC,CAAC;oBACb,CAAC;iBAAA;aACJ,EAAE,CAAC;QACR,CAAC;KAAA;CACJ;AAlCD,sDAkCC"}
@@ -0,0 +1,8 @@
1
+ import { ExecutionContext, Recipe, TreeVisitor } from "@openrewrite/rewrite";
2
+ export declare class ReplaceRenderCallback extends Recipe {
3
+ readonly name = "org.openrewrite.react.18.replace-render-callback";
4
+ readonly displayName: string;
5
+ readonly description: string;
6
+ editor(): Promise<TreeVisitor<any, ExecutionContext>>;
7
+ }
8
+ //# sourceMappingURL=replace-render-callback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replace-render-callback.d.ts","sourceRoot":"","sources":["../../src/react18/replace-render-callback.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAE,MAAM,EAAE,WAAW,EAAC,MAAM,sBAAsB,CAAC;AA0B3E,qBAAa,qBAAsB,SAAQ,MAAM;IAC7C,QAAQ,CAAC,IAAI,sDAAsD;IACnE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAgD;IAC5E,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAiK;IAEvL,MAAM,IAAI,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;CAkC9D"}
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.ReplaceRenderCallback = void 0;
13
+ const rewrite_1 = require("@openrewrite/rewrite");
14
+ const javascript_1 = require("@openrewrite/rewrite/javascript");
15
+ const java_1 = require("@openrewrite/rewrite/java");
16
+ const mutative_1 = require("mutative");
17
+ class ReplaceRenderCallback extends rewrite_1.Recipe {
18
+ constructor() {
19
+ super(...arguments);
20
+ this.name = "org.openrewrite.react.18.replace-render-callback";
21
+ this.displayName = "Remove `ReactDOM.render` callback argument";
22
+ this.description = "Removes the third callback argument from `ReactDOM.render(element, container, callback)` calls. Callbacks are not supported in React 18's `createRoot` API.";
23
+ }
24
+ editor() {
25
+ return __awaiter(this, void 0, void 0, function* () {
26
+ return new class extends javascript_1.JavaScriptVisitor {
27
+ visitMethodInvocation(method, p) {
28
+ const _super = Object.create(null, {
29
+ visitMethodInvocation: { get: () => super.visitMethodInvocation }
30
+ });
31
+ return __awaiter(this, void 0, void 0, function* () {
32
+ var _a;
33
+ let m = yield _super.visitMethodInvocation.call(this, method, p);
34
+ if (m.name.simpleName !== 'render')
35
+ return m;
36
+ const isReactDomRender = (() => {
37
+ var _a;
38
+ if (m.select) {
39
+ const select = (_a = m.select.element) !== null && _a !== void 0 ? _a : m.select;
40
+ return (0, java_1.isIdentifier)(select) && select.simpleName === 'ReactDOM';
41
+ }
42
+ return false;
43
+ })();
44
+ if (!isReactDomRender)
45
+ return m;
46
+ const args = (_a = m.arguments) === null || _a === void 0 ? void 0 : _a.elements;
47
+ if (!args || args.length !== 3)
48
+ return m;
49
+ const newArgs = args.slice(0, 2);
50
+ return (0, mutative_1.create)(m, draft => {
51
+ draft.arguments = Object.assign(Object.assign({}, m.arguments), { elements: newArgs });
52
+ });
53
+ });
54
+ }
55
+ }();
56
+ });
57
+ }
58
+ }
59
+ exports.ReplaceRenderCallback = ReplaceRenderCallback;
60
+ //# sourceMappingURL=replace-render-callback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replace-render-callback.js","sourceRoot":"","sources":["../../src/react18/replace-render-callback.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,kDAA2E;AAC3E,gEAAkE;AAClE,oDAA0D;AAC1D,uCAAgC;AAuBhC,MAAa,qBAAsB,SAAQ,gBAAM;IAAjD;;QACa,SAAI,GAAG,kDAAkD,CAAC;QAC1D,gBAAW,GAAW,4CAA4C,CAAC;QACnE,gBAAW,GAAW,6JAA6J,CAAC;IAoCjM,CAAC;IAlCS,MAAM;;YACR,OAAO,IAAI,KAAM,SAAQ,8BAAmC;gBACzC,qBAAqB,CAAC,MAA0B,EAAE,CAAmB;;;;;;wBAChF,IAAI,CAAC,GAAG,MAAM,OAAM,qBAAqB,YAAC,MAAM,EAAE,CAAC,CAAuB,CAAC;wBAE3E,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,KAAK,QAAQ;4BAAE,OAAO,CAAC,CAAC;wBAG7C,MAAM,gBAAgB,GAAG,CAAC,GAAG,EAAE;;4BAC3B,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;gCACX,MAAM,MAAM,GAAG,MAAC,CAAC,CAAC,MAAc,CAAC,OAAO,mCAAI,CAAC,CAAC,MAAM,CAAC;gCACrD,OAAO,IAAA,mBAAY,EAAC,MAAM,CAAC,IAAI,MAAM,CAAC,UAAU,KAAK,UAAU,CAAC;4BACpE,CAAC;4BACD,OAAO,KAAK,CAAC;wBACjB,CAAC,CAAC,EAAE,CAAC;wBAEL,IAAI,CAAC,gBAAgB;4BAAE,OAAO,CAAC,CAAC;wBAGhC,MAAM,IAAI,GAAG,MAAA,CAAC,CAAC,SAAS,0CAAE,QAAQ,CAAC;wBACnC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;4BAAE,OAAO,CAAC,CAAC;wBAGzC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;wBAEjC,OAAO,IAAA,iBAAM,EAAC,CAAC,EAAE,KAAK,CAAC,EAAE;4BACpB,KAAa,CAAC,SAAS,mCACjB,CAAC,CAAC,SAAS,KACd,QAAQ,EAAE,OAAO,GACpB,CAAC;wBACN,CAAC,CAAC,CAAC;oBACP,CAAC;iBAAA;aACJ,EAAE,CAAC;QACR,CAAC;KAAA;CACJ;AAvCD,sDAuCC"}
@@ -0,0 +1,8 @@
1
+ import { ExecutionContext, Recipe, TreeVisitor } from "@openrewrite/rewrite";
2
+ export declare class ReplaceUnmountComponentAtNode extends Recipe {
3
+ readonly name = "org.openrewrite.react.18.replace-unmount-component-at-node";
4
+ readonly displayName: string;
5
+ readonly description: string;
6
+ editor(): Promise<TreeVisitor<any, ExecutionContext>>;
7
+ }
8
+ //# sourceMappingURL=replace-unmount-component-at-node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replace-unmount-component-at-node.d.ts","sourceRoot":"","sources":["../../src/react18/replace-unmount-component-at-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAE,MAAM,EAAE,WAAW,EAAC,MAAM,sBAAsB,CAAC;AAgC3E,qBAAa,6BAA8B,SAAQ,MAAM;IACrD,QAAQ,CAAC,IAAI,gEAAgE;IAC7E,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAoE;IAChG,QAAQ,CAAC,WAAW,EAAE,MAAM,CAA2H;IAEjJ,MAAM,IAAI,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;CA4B9D"}
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.ReplaceUnmountComponentAtNode = void 0;
13
+ const rewrite_1 = require("@openrewrite/rewrite");
14
+ const javascript_1 = require("@openrewrite/rewrite/javascript");
15
+ class ReplaceUnmountComponentAtNode extends rewrite_1.Recipe {
16
+ constructor() {
17
+ super(...arguments);
18
+ this.name = "org.openrewrite.react.18.replace-unmount-component-at-node";
19
+ this.displayName = "Replace `unmountComponentAtNode` with `createRoot().unmount()`";
20
+ this.description = "Replaces `ReactDOM.unmountComponentAtNode(container)` with `createRoot(container).unmount()` from `react-dom/client`.";
21
+ }
22
+ editor() {
23
+ return __awaiter(this, void 0, void 0, function* () {
24
+ const reactDomOptions = {
25
+ context: ['import { unmountComponentAtNode } from "react-dom";'],
26
+ dependencies: { '@types/react-dom': '^17.0.0' }
27
+ };
28
+ const container = (0, javascript_1.capture)();
29
+ const rule = (0, javascript_1.rewrite)(() => ({
30
+ before: (0, javascript_1.pattern) `unmountComponentAtNode(${container})`.configure(reactDomOptions),
31
+ after: (0, javascript_1.template) `createRoot(${container}).unmount()`
32
+ }));
33
+ return new class extends javascript_1.JavaScriptVisitor {
34
+ visitMethodInvocation(method, p) {
35
+ const _super = Object.create(null, {
36
+ visitMethodInvocation: { get: () => super.visitMethodInvocation }
37
+ });
38
+ return __awaiter(this, void 0, void 0, function* () {
39
+ let m = yield _super.visitMethodInvocation.call(this, method, p);
40
+ const result = yield rule.tryOn(this.cursor, m);
41
+ if (result) {
42
+ (0, javascript_1.maybeRemoveImport)(this, "react-dom", "unmountComponentAtNode");
43
+ (0, javascript_1.maybeAddImport)(this, { module: "react-dom/client", member: "createRoot", onlyIfReferenced: false });
44
+ return result;
45
+ }
46
+ return m;
47
+ });
48
+ }
49
+ }();
50
+ });
51
+ }
52
+ }
53
+ exports.ReplaceUnmountComponentAtNode = ReplaceUnmountComponentAtNode;
54
+ //# sourceMappingURL=replace-unmount-component-at-node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replace-unmount-component-at-node.js","sourceRoot":"","sources":["../../src/react18/replace-unmount-component-at-node.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,kDAA2E;AAC3E,gEAQyC;AAuBzC,MAAa,6BAA8B,SAAQ,gBAAM;IAAzD;;QACa,SAAI,GAAG,4DAA4D,CAAC;QACpE,gBAAW,GAAW,gEAAgE,CAAC;QACvF,gBAAW,GAAW,uHAAuH,CAAC;IA8B3J,CAAC;IA5BS,MAAM;;YACR,MAAM,eAAe,GAAG;gBACpB,OAAO,EAAE,CAAC,qDAAqD,CAAC;gBAChE,YAAY,EAAE,EAAC,kBAAkB,EAAE,SAAS,EAAC;aAChD,CAAC;YAEF,MAAM,SAAS,GAAG,IAAA,oBAAO,GAAc,CAAC;YAExC,MAAM,IAAI,GAAG,IAAA,oBAAO,EAAC,GAAG,EAAE,CAAC,CAAC;gBACxB,MAAM,EAAE,IAAA,oBAAO,EAAA,0BAA0B,SAAS,GAAG,CAAC,SAAS,CAAC,eAAe,CAAC;gBAChF,KAAK,EAAE,IAAA,qBAAQ,EAAA,cAAc,SAAS,aAAa;aACtD,CAAC,CAAC,CAAC;YAEJ,OAAO,IAAI,KAAM,SAAQ,8BAAmC;gBACzC,qBAAqB,CAAC,MAA0B,EAAE,CAAmB;;;;;wBAChF,IAAI,CAAC,GAAG,MAAM,OAAM,qBAAqB,YAAC,MAAM,EAAE,CAAC,CAAuB,CAAC;wBAE3E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAE,CAAC,CAAC;wBACjD,IAAI,MAAM,EAAE,CAAC;4BACT,IAAA,8BAAiB,EAAC,IAAI,EAAE,WAAW,EAAE,wBAAwB,CAAC,CAAC;4BAC/D,IAAA,2BAAc,EAAC,IAAI,EAAE,EAAC,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,KAAK,EAAC,CAAC,CAAC;4BAClG,OAAO,MAAM,CAAC;wBAClB,CAAC;wBAED,OAAO,CAAC,CAAC;oBACb,CAAC;iBAAA;aACJ,EAAE,CAAC;QACR,CAAC;KAAA;CACJ;AAjCD,sEAiCC"}
@@ -0,0 +1,8 @@
1
+ import { Recipe } from "@openrewrite/rewrite";
2
+ export declare class UpgradeToReact18 extends Recipe {
3
+ readonly name = "org.openrewrite.react.migrate.upgrade-to-react-18";
4
+ readonly displayName = "Upgrade to React 18";
5
+ readonly description = "Migrate deprecated APIs for React 18 compatibility. Includes all React 16 and 17 migrations plus the createRoot API migration, removal of unstable_batchedUpdates, unmountComponentAtNode replacement, and render callback removal.";
6
+ recipeList(): Promise<Recipe[]>;
7
+ }
8
+ //# sourceMappingURL=upgrade-to-react-18.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upgrade-to-react-18.d.ts","sourceRoot":"","sources":["../../src/react18/upgrade-to-react-18.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,sBAAsB,CAAC;AAkB5C,qBAAa,gBAAiB,SAAQ,MAAM;IACxC,QAAQ,CAAC,IAAI,uDAAuD;IACpE,QAAQ,CAAC,WAAW,yBAAyB;IAC7C,QAAQ,CAAC,WAAW,yOAAyO;IAEvP,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;CASxC"}