@openrewrite/recipes-angular 0.0.0 → 0.4.0-20260320-120427

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 (421) hide show
  1. package/dist/index.d.ts +107 -0
  2. package/dist/index.d.ts.map +1 -0
  3. package/dist/index.js +441 -0
  4. package/dist/index.js.map +1 -0
  5. package/dist/migration/add-default-configuration.d.ts +8 -0
  6. package/dist/migration/add-default-configuration.d.ts.map +1 -0
  7. package/dist/migration/add-default-configuration.js +124 -0
  8. package/dist/migration/add-default-configuration.js.map +1 -0
  9. package/dist/migration/add-localize-polyfill.d.ts +8 -0
  10. package/dist/migration/add-localize-polyfill.d.ts.map +1 -0
  11. package/dist/migration/add-localize-polyfill.js +78 -0
  12. package/dist/migration/add-localize-polyfill.js.map +1 -0
  13. package/dist/migration/add-module-with-providers-generic.d.ts +8 -0
  14. package/dist/migration/add-module-with-providers-generic.d.ts.map +1 -0
  15. package/dist/migration/add-module-with-providers-generic.js +114 -0
  16. package/dist/migration/add-module-with-providers-generic.js.map +1 -0
  17. package/dist/migration/add-static-false-to-view-queries.d.ts +8 -0
  18. package/dist/migration/add-static-false-to-view-queries.d.ts.map +1 -0
  19. package/dist/migration/add-static-false-to-view-queries.js +100 -0
  20. package/dist/migration/add-static-false-to-view-queries.js.map +1 -0
  21. package/dist/migration/add-testbed-teardown.d.ts +8 -0
  22. package/dist/migration/add-testbed-teardown.d.ts.map +1 -0
  23. package/dist/migration/add-testbed-teardown.js +62 -0
  24. package/dist/migration/add-testbed-teardown.js.map +1 -0
  25. package/dist/migration/enable-aot-build.d.ts +8 -0
  26. package/dist/migration/enable-aot-build.d.ts.map +1 -0
  27. package/dist/migration/enable-aot-build.js +123 -0
  28. package/dist/migration/enable-aot-build.js.map +1 -0
  29. package/dist/migration/explicit-standalone-flag.d.ts +8 -0
  30. package/dist/migration/explicit-standalone-flag.d.ts.map +1 -0
  31. package/dist/migration/explicit-standalone-flag.js +99 -0
  32. package/dist/migration/explicit-standalone-flag.js.map +1 -0
  33. package/dist/migration/migrate-constructor-to-inject.d.ts +8 -0
  34. package/dist/migration/migrate-constructor-to-inject.d.ts.map +1 -0
  35. package/dist/migration/migrate-constructor-to-inject.js +162 -0
  36. package/dist/migration/migrate-constructor-to-inject.js.map +1 -0
  37. package/dist/migration/migrate-input-to-signal.d.ts +8 -0
  38. package/dist/migration/migrate-input-to-signal.d.ts.map +1 -0
  39. package/dist/migration/migrate-input-to-signal.js +293 -0
  40. package/dist/migration/migrate-input-to-signal.js.map +1 -0
  41. package/dist/migration/migrate-output-to-signal.d.ts +8 -0
  42. package/dist/migration/migrate-output-to-signal.d.ts.map +1 -0
  43. package/dist/migration/migrate-output-to-signal.js +259 -0
  44. package/dist/migration/migrate-output-to-signal.js.map +1 -0
  45. package/dist/migration/migrate-query-to-signal.d.ts +8 -0
  46. package/dist/migration/migrate-query-to-signal.d.ts.map +1 -0
  47. package/dist/migration/migrate-query-to-signal.js +256 -0
  48. package/dist/migration/migrate-query-to-signal.js.map +1 -0
  49. package/dist/migration/migrate-to-solution-style-tsconfig.d.ts +17 -0
  50. package/dist/migration/migrate-to-solution-style-tsconfig.d.ts.map +1 -0
  51. package/dist/migration/migrate-to-solution-style-tsconfig.js +153 -0
  52. package/dist/migration/migrate-to-solution-style-tsconfig.js.map +1 -0
  53. package/dist/migration/move-document-to-core.d.ts +16 -0
  54. package/dist/migration/move-document-to-core.d.ts.map +1 -0
  55. package/dist/migration/move-document-to-core.js +48 -0
  56. package/dist/migration/move-document-to-core.js.map +1 -0
  57. package/dist/migration/remove-aot-summaries.d.ts +8 -0
  58. package/dist/migration/remove-aot-summaries.d.ts.map +1 -0
  59. package/dist/migration/remove-aot-summaries.js +90 -0
  60. package/dist/migration/remove-aot-summaries.js.map +1 -0
  61. package/dist/migration/remove-browser-module-with-server-transition.d.ts +8 -0
  62. package/dist/migration/remove-browser-module-with-server-transition.d.ts.map +1 -0
  63. package/dist/migration/remove-browser-module-with-server-transition.js +173 -0
  64. package/dist/migration/remove-browser-module-with-server-transition.js.map +1 -0
  65. package/dist/migration/remove-component-factory-resolver.d.ts +8 -0
  66. package/dist/migration/remove-component-factory-resolver.d.ts.map +1 -0
  67. package/dist/migration/remove-component-factory-resolver.js +70 -0
  68. package/dist/migration/remove-component-factory-resolver.js.map +1 -0
  69. package/dist/migration/remove-default-project.d.ts +8 -0
  70. package/dist/migration/remove-default-project.d.ts.map +1 -0
  71. package/dist/migration/remove-default-project.js +59 -0
  72. package/dist/migration/remove-default-project.js.map +1 -0
  73. package/dist/migration/remove-empty-ng-on-init.d.ts +8 -0
  74. package/dist/migration/remove-empty-ng-on-init.d.ts.map +1 -0
  75. package/dist/migration/remove-empty-ng-on-init.js +98 -0
  76. package/dist/migration/remove-empty-ng-on-init.js.map +1 -0
  77. package/dist/migration/remove-enable-ivy.d.ts +8 -0
  78. package/dist/migration/remove-enable-ivy.d.ts.map +1 -0
  79. package/dist/migration/remove-enable-ivy.js +78 -0
  80. package/dist/migration/remove-enable-ivy.js.map +1 -0
  81. package/dist/migration/remove-entry-components.d.ts +8 -0
  82. package/dist/migration/remove-entry-components.d.ts.map +1 -0
  83. package/dist/migration/remove-entry-components.js +101 -0
  84. package/dist/migration/remove-entry-components.js.map +1 -0
  85. package/dist/migration/remove-es5-browser-support.d.ts +8 -0
  86. package/dist/migration/remove-es5-browser-support.d.ts.map +1 -0
  87. package/dist/migration/remove-es5-browser-support.js +74 -0
  88. package/dist/migration/remove-es5-browser-support.js.map +1 -0
  89. package/dist/migration/remove-extract-css.d.ts +8 -0
  90. package/dist/migration/remove-extract-css.d.ts.map +1 -0
  91. package/dist/migration/remove-extract-css.js +76 -0
  92. package/dist/migration/remove-extract-css.js.map +1 -0
  93. package/dist/migration/remove-ie-polyfills.d.ts +8 -0
  94. package/dist/migration/remove-ie-polyfills.d.ts.map +1 -0
  95. package/dist/migration/remove-ie-polyfills.js +151 -0
  96. package/dist/migration/remove-ie-polyfills.js.map +1 -0
  97. package/dist/migration/remove-module-id.d.ts +8 -0
  98. package/dist/migration/remove-module-id.d.ts.map +1 -0
  99. package/dist/migration/remove-module-id.js +81 -0
  100. package/dist/migration/remove-module-id.js.map +1 -0
  101. package/dist/migration/remove-relative-link-resolution.d.ts +8 -0
  102. package/dist/migration/remove-relative-link-resolution.d.ts.map +1 -0
  103. package/dist/migration/remove-relative-link-resolution.js +84 -0
  104. package/dist/migration/remove-relative-link-resolution.js.map +1 -0
  105. package/dist/migration/remove-standalone-true.d.ts +8 -0
  106. package/dist/migration/remove-standalone-true.d.ts.map +1 -0
  107. package/dist/migration/remove-standalone-true.js +73 -0
  108. package/dist/migration/remove-standalone-true.js.map +1 -0
  109. package/dist/migration/remove-static-false.d.ts +8 -0
  110. package/dist/migration/remove-static-false.d.ts.map +1 -0
  111. package/dist/migration/remove-static-false.js +90 -0
  112. package/dist/migration/remove-static-false.js.map +1 -0
  113. package/dist/migration/remove-zone-js-polyfill.d.ts +8 -0
  114. package/dist/migration/remove-zone-js-polyfill.d.ts.map +1 -0
  115. package/dist/migration/remove-zone-js-polyfill.js +73 -0
  116. package/dist/migration/remove-zone-js-polyfill.js.map +1 -0
  117. package/dist/migration/rename-after-render.d.ts +8 -0
  118. package/dist/migration/rename-after-render.d.ts.map +1 -0
  119. package/dist/migration/rename-after-render.js +52 -0
  120. package/dist/migration/rename-after-render.js.map +1 -0
  121. package/dist/migration/rename-check-no-changes.d.ts +8 -0
  122. package/dist/migration/rename-check-no-changes.d.ts.map +1 -0
  123. package/dist/migration/rename-check-no-changes.js +48 -0
  124. package/dist/migration/rename-check-no-changes.js.map +1 -0
  125. package/dist/migration/rename-file.d.ts +14 -0
  126. package/dist/migration/rename-file.d.ts.map +1 -0
  127. package/dist/migration/rename-file.js +124 -0
  128. package/dist/migration/rename-file.js.map +1 -0
  129. package/dist/migration/rename-pending-tasks.d.ts +8 -0
  130. package/dist/migration/rename-pending-tasks.d.ts.map +1 -0
  131. package/dist/migration/rename-pending-tasks.js +49 -0
  132. package/dist/migration/rename-pending-tasks.js.map +1 -0
  133. package/dist/migration/rename-zoneless-provider.d.ts +8 -0
  134. package/dist/migration/rename-zoneless-provider.d.ts.map +1 -0
  135. package/dist/migration/rename-zoneless-provider.js +48 -0
  136. package/dist/migration/rename-zoneless-provider.js.map +1 -0
  137. package/dist/migration/replace-async-with-wait-for-async.d.ts +8 -0
  138. package/dist/migration/replace-async-with-wait-for-async.d.ts.map +1 -0
  139. package/dist/migration/replace-async-with-wait-for-async.js +52 -0
  140. package/dist/migration/replace-async-with-wait-for-async.js.map +1 -0
  141. package/dist/migration/replace-deep-zone-js-imports.d.ts +8 -0
  142. package/dist/migration/replace-deep-zone-js-imports.d.ts.map +1 -0
  143. package/dist/migration/replace-deep-zone-js-imports.js +144 -0
  144. package/dist/migration/replace-deep-zone-js-imports.js.map +1 -0
  145. package/dist/migration/replace-http-client-module.d.ts +8 -0
  146. package/dist/migration/replace-http-client-module.d.ts.map +1 -0
  147. package/dist/migration/replace-http-client-module.js +248 -0
  148. package/dist/migration/replace-http-client-module.js.map +1 -0
  149. package/dist/migration/replace-initial-navigation.d.ts +8 -0
  150. package/dist/migration/replace-initial-navigation.d.ts.map +1 -0
  151. package/dist/migration/replace-initial-navigation.js +80 -0
  152. package/dist/migration/replace-initial-navigation.js.map +1 -0
  153. package/dist/migration/replace-inject-flags.d.ts +8 -0
  154. package/dist/migration/replace-inject-flags.d.ts.map +1 -0
  155. package/dist/migration/replace-inject-flags.js +101 -0
  156. package/dist/migration/replace-inject-flags.js.map +1 -0
  157. package/dist/migration/replace-load-children-string.d.ts +8 -0
  158. package/dist/migration/replace-load-children-string.d.ts.map +1 -0
  159. package/dist/migration/replace-load-children-string.js +70 -0
  160. package/dist/migration/replace-load-children-string.js.map +1 -0
  161. package/dist/migration/replace-node-sass-with-sass.d.ts +8 -0
  162. package/dist/migration/replace-node-sass-with-sass.d.ts.map +1 -0
  163. package/dist/migration/replace-node-sass-with-sass.js +38 -0
  164. package/dist/migration/replace-node-sass-with-sass.js.map +1 -0
  165. package/dist/migration/replace-router-link-with-href.d.ts +8 -0
  166. package/dist/migration/replace-router-link-with-href.d.ts.map +1 -0
  167. package/dist/migration/replace-router-link-with-href.js +55 -0
  168. package/dist/migration/replace-router-link-with-href.js.map +1 -0
  169. package/dist/migration/replace-testbed-get-with-inject.d.ts +8 -0
  170. package/dist/migration/replace-testbed-get-with-inject.d.ts.map +1 -0
  171. package/dist/migration/replace-testbed-get-with-inject.js +53 -0
  172. package/dist/migration/replace-testbed-get-with-inject.js.map +1 -0
  173. package/dist/migration/replace-untyped-forms.d.ts +8 -0
  174. package/dist/migration/replace-untyped-forms.d.ts.map +1 -0
  175. package/dist/migration/replace-untyped-forms.js +78 -0
  176. package/dist/migration/replace-untyped-forms.js.map +1 -0
  177. package/dist/migration/replace-validator-with-validators.d.ts +8 -0
  178. package/dist/migration/replace-validator-with-validators.d.ts.map +1 -0
  179. package/dist/migration/replace-validator-with-validators.js +62 -0
  180. package/dist/migration/replace-validator-with-validators.js.map +1 -0
  181. package/dist/migration/replace-view-encapsulation-native.d.ts +8 -0
  182. package/dist/migration/replace-view-encapsulation-native.d.ts.map +1 -0
  183. package/dist/migration/replace-view-encapsulation-native.js +67 -0
  184. package/dist/migration/replace-view-encapsulation-native.js.map +1 -0
  185. package/dist/migration/update-component-template-url.d.ts +28 -0
  186. package/dist/migration/update-component-template-url.d.ts.map +1 -0
  187. package/dist/migration/update-component-template-url.js +178 -0
  188. package/dist/migration/update-component-template-url.js.map +1 -0
  189. package/dist/migration/update-tsconfig-module.d.ts +8 -0
  190. package/dist/migration/update-tsconfig-module.d.ts.map +1 -0
  191. package/dist/migration/update-tsconfig-module.js +83 -0
  192. package/dist/migration/update-tsconfig-module.js.map +1 -0
  193. package/dist/migration/update-tsconfig-target.d.ts +8 -0
  194. package/dist/migration/update-tsconfig-target.d.ts.map +1 -0
  195. package/dist/migration/update-tsconfig-target.js +78 -0
  196. package/dist/migration/update-tsconfig-target.js.map +1 -0
  197. package/dist/migration/upgrade-to-angular-10.d.ts +8 -0
  198. package/dist/migration/upgrade-to-angular-10.d.ts.map +1 -0
  199. package/dist/migration/upgrade-to-angular-10.js +68 -0
  200. package/dist/migration/upgrade-to-angular-10.js.map +1 -0
  201. package/dist/migration/upgrade-to-angular-11.d.ts +8 -0
  202. package/dist/migration/upgrade-to-angular-11.d.ts.map +1 -0
  203. package/dist/migration/upgrade-to-angular-11.js +68 -0
  204. package/dist/migration/upgrade-to-angular-11.js.map +1 -0
  205. package/dist/migration/upgrade-to-angular-12.d.ts +8 -0
  206. package/dist/migration/upgrade-to-angular-12.d.ts.map +1 -0
  207. package/dist/migration/upgrade-to-angular-12.js +59 -0
  208. package/dist/migration/upgrade-to-angular-12.js.map +1 -0
  209. package/dist/migration/upgrade-to-angular-13.d.ts +8 -0
  210. package/dist/migration/upgrade-to-angular-13.d.ts.map +1 -0
  211. package/dist/migration/upgrade-to-angular-13.js +61 -0
  212. package/dist/migration/upgrade-to-angular-13.js.map +1 -0
  213. package/dist/migration/upgrade-to-angular-14.d.ts +8 -0
  214. package/dist/migration/upgrade-to-angular-14.d.ts.map +1 -0
  215. package/dist/migration/upgrade-to-angular-14.js +60 -0
  216. package/dist/migration/upgrade-to-angular-14.js.map +1 -0
  217. package/dist/migration/upgrade-to-angular-15.d.ts +8 -0
  218. package/dist/migration/upgrade-to-angular-15.d.ts.map +1 -0
  219. package/dist/migration/upgrade-to-angular-15.js +59 -0
  220. package/dist/migration/upgrade-to-angular-15.js.map +1 -0
  221. package/dist/migration/upgrade-to-angular-16.d.ts +8 -0
  222. package/dist/migration/upgrade-to-angular-16.d.ts.map +1 -0
  223. package/dist/migration/upgrade-to-angular-16.js +73 -0
  224. package/dist/migration/upgrade-to-angular-16.js.map +1 -0
  225. package/dist/migration/upgrade-to-angular-17.d.ts +8 -0
  226. package/dist/migration/upgrade-to-angular-17.d.ts.map +1 -0
  227. package/dist/migration/upgrade-to-angular-17.js +59 -0
  228. package/dist/migration/upgrade-to-angular-17.js.map +1 -0
  229. package/dist/migration/upgrade-to-angular-18.d.ts +8 -0
  230. package/dist/migration/upgrade-to-angular-18.d.ts.map +1 -0
  231. package/dist/migration/upgrade-to-angular-18.js +85 -0
  232. package/dist/migration/upgrade-to-angular-18.js.map +1 -0
  233. package/dist/migration/upgrade-to-angular-19.d.ts +8 -0
  234. package/dist/migration/upgrade-to-angular-19.d.ts.map +1 -0
  235. package/dist/migration/upgrade-to-angular-19.js +68 -0
  236. package/dist/migration/upgrade-to-angular-19.js.map +1 -0
  237. package/dist/migration/upgrade-to-angular-20.d.ts +8 -0
  238. package/dist/migration/upgrade-to-angular-20.d.ts.map +1 -0
  239. package/dist/migration/upgrade-to-angular-20.js +63 -0
  240. package/dist/migration/upgrade-to-angular-20.js.map +1 -0
  241. package/dist/migration/upgrade-to-angular-21.d.ts +8 -0
  242. package/dist/migration/upgrade-to-angular-21.d.ts.map +1 -0
  243. package/dist/migration/upgrade-to-angular-21.js +69 -0
  244. package/dist/migration/upgrade-to-angular-21.js.map +1 -0
  245. package/dist/migration/upgrade-to-angular-8.d.ts +8 -0
  246. package/dist/migration/upgrade-to-angular-8.d.ts.map +1 -0
  247. package/dist/migration/upgrade-to-angular-8.js +70 -0
  248. package/dist/migration/upgrade-to-angular-8.js.map +1 -0
  249. package/dist/migration/upgrade-to-angular-9.d.ts +8 -0
  250. package/dist/migration/upgrade-to-angular-9.d.ts.map +1 -0
  251. package/dist/migration/upgrade-to-angular-9.js +85 -0
  252. package/dist/migration/upgrade-to-angular-9.js.map +1 -0
  253. package/dist/search/find-analyze-for-entry-components-usage.d.ts +8 -0
  254. package/dist/search/find-analyze-for-entry-components-usage.d.ts.map +1 -0
  255. package/dist/search/find-analyze-for-entry-components-usage.js +66 -0
  256. package/dist/search/find-analyze-for-entry-components-usage.js.map +1 -0
  257. package/dist/search/find-angular-decorator.d.ts +8 -0
  258. package/dist/search/find-angular-decorator.d.ts.map +1 -0
  259. package/dist/search/find-angular-decorator.js +78 -0
  260. package/dist/search/find-angular-decorator.js.map +1 -0
  261. package/dist/search/find-angular-http-usage.d.ts +8 -0
  262. package/dist/search/find-angular-http-usage.d.ts.map +1 -0
  263. package/dist/search/find-angular-http-usage.js +55 -0
  264. package/dist/search/find-angular-http-usage.js.map +1 -0
  265. package/dist/search/find-animation-driver-matches-element.d.ts +8 -0
  266. package/dist/search/find-animation-driver-matches-element.d.ts.map +1 -0
  267. package/dist/search/find-animation-driver-matches-element.js +59 -0
  268. package/dist/search/find-animation-driver-matches-element.js.map +1 -0
  269. package/dist/search/find-async-test-helper-usage.d.ts +8 -0
  270. package/dist/search/find-async-test-helper-usage.d.ts.map +1 -0
  271. package/dist/search/find-async-test-helper-usage.js +65 -0
  272. package/dist/search/find-async-test-helper-usage.js.map +1 -0
  273. package/dist/search/find-bare-module-with-providers.d.ts +8 -0
  274. package/dist/search/find-bare-module-with-providers.d.ts.map +1 -0
  275. package/dist/search/find-bare-module-with-providers.js +67 -0
  276. package/dist/search/find-bare-module-with-providers.js.map +1 -0
  277. package/dist/search/find-browser-transfer-state-module-usage.d.ts +8 -0
  278. package/dist/search/find-browser-transfer-state-module-usage.d.ts.map +1 -0
  279. package/dist/search/find-browser-transfer-state-module-usage.js +65 -0
  280. package/dist/search/find-browser-transfer-state-module-usage.js.map +1 -0
  281. package/dist/search/find-common-module-usage.d.ts +8 -0
  282. package/dist/search/find-common-module-usage.d.ts.map +1 -0
  283. package/dist/search/find-common-module-usage.js +67 -0
  284. package/dist/search/find-common-module-usage.js.map +1 -0
  285. package/dist/search/find-compiler-factory-usage.d.ts +8 -0
  286. package/dist/search/find-compiler-factory-usage.d.ts.map +1 -0
  287. package/dist/search/find-compiler-factory-usage.js +70 -0
  288. package/dist/search/find-compiler-factory-usage.js.map +1 -0
  289. package/dist/search/find-date-pipe-default-timezone-usage.d.ts +8 -0
  290. package/dist/search/find-date-pipe-default-timezone-usage.d.ts.map +1 -0
  291. package/dist/search/find-date-pipe-default-timezone-usage.js +66 -0
  292. package/dist/search/find-date-pipe-default-timezone-usage.js.map +1 -0
  293. package/dist/search/find-effect-timing-usage.d.ts +8 -0
  294. package/dist/search/find-effect-timing-usage.d.ts.map +1 -0
  295. package/dist/search/find-effect-timing-usage.js +48 -0
  296. package/dist/search/find-effect-timing-usage.js.map +1 -0
  297. package/dist/search/find-empty-projectable-nodes.d.ts +8 -0
  298. package/dist/search/find-empty-projectable-nodes.d.ts.map +1 -0
  299. package/dist/search/find-empty-projectable-nodes.js +88 -0
  300. package/dist/search/find-empty-projectable-nodes.js.map +1 -0
  301. package/dist/search/find-fake-async-usage.d.ts +8 -0
  302. package/dist/search/find-fake-async-usage.d.ts.map +1 -0
  303. package/dist/search/find-fake-async-usage.js +56 -0
  304. package/dist/search/find-fake-async-usage.js.map +1 -0
  305. package/dist/search/find-hammer-js-usage.d.ts +8 -0
  306. package/dist/search/find-hammer-js-usage.d.ts.map +1 -0
  307. package/dist/search/find-hammer-js-usage.js +69 -0
  308. package/dist/search/find-hammer-js-usage.js.map +1 -0
  309. package/dist/search/find-i18n-usage.d.ts +8 -0
  310. package/dist/search/find-i18n-usage.d.ts.map +1 -0
  311. package/dist/search/find-i18n-usage.js +128 -0
  312. package/dist/search/find-i18n-usage.js.map +1 -0
  313. package/dist/search/find-karma-usage.d.ts +8 -0
  314. package/dist/search/find-karma-usage.d.ts.map +1 -0
  315. package/dist/search/find-karma-usage.js +69 -0
  316. package/dist/search/find-karma-usage.js.map +1 -0
  317. package/dist/search/find-load-children-string-usage.d.ts +8 -0
  318. package/dist/search/find-load-children-string-usage.d.ts.map +1 -0
  319. package/dist/search/find-load-children-string-usage.js +62 -0
  320. package/dist/search/find-load-children-string-usage.js.map +1 -0
  321. package/dist/search/find-missing-injectable.d.ts +8 -0
  322. package/dist/search/find-missing-injectable.d.ts.map +1 -0
  323. package/dist/search/find-missing-injectable.js +98 -0
  324. package/dist/search/find-missing-injectable.js.map +1 -0
  325. package/dist/search/find-ng-class-usage.d.ts +8 -0
  326. package/dist/search/find-ng-class-usage.d.ts.map +1 -0
  327. package/dist/search/find-ng-class-usage.js +65 -0
  328. package/dist/search/find-ng-class-usage.js.map +1 -0
  329. package/dist/search/find-ng-style-usage.d.ts +8 -0
  330. package/dist/search/find-ng-style-usage.d.ts.map +1 -0
  331. package/dist/search/find-ng-style-usage.js +65 -0
  332. package/dist/search/find-ng-style-usage.js.map +1 -0
  333. package/dist/search/find-path-match-type-usage.d.ts +8 -0
  334. package/dist/search/find-path-match-type-usage.d.ts.map +1 -0
  335. package/dist/search/find-path-match-type-usage.js +62 -0
  336. package/dist/search/find-path-match-type-usage.js.map +1 -0
  337. package/dist/search/find-platform-dynamic-server-usage.d.ts +8 -0
  338. package/dist/search/find-platform-dynamic-server-usage.d.ts.map +1 -0
  339. package/dist/search/find-platform-dynamic-server-usage.js +59 -0
  340. package/dist/search/find-platform-dynamic-server-usage.js.map +1 -0
  341. package/dist/search/find-platform-webworker-usage.d.ts +8 -0
  342. package/dist/search/find-platform-webworker-usage.d.ts.map +1 -0
  343. package/dist/search/find-platform-webworker-usage.js +54 -0
  344. package/dist/search/find-platform-webworker-usage.js.map +1 -0
  345. package/dist/search/find-platform-worker-usage.d.ts +8 -0
  346. package/dist/search/find-platform-worker-usage.d.ts.map +1 -0
  347. package/dist/search/find-platform-worker-usage.js +60 -0
  348. package/dist/search/find-platform-worker-usage.js.map +1 -0
  349. package/dist/search/find-preserve-fragment-usage.d.ts +8 -0
  350. package/dist/search/find-preserve-fragment-usage.d.ts.map +1 -0
  351. package/dist/search/find-preserve-fragment-usage.js +52 -0
  352. package/dist/search/find-preserve-fragment-usage.js.map +1 -0
  353. package/dist/search/find-preserve-query-params-usage.d.ts +8 -0
  354. package/dist/search/find-preserve-query-params-usage.d.ts.map +1 -0
  355. package/dist/search/find-preserve-query-params-usage.js +52 -0
  356. package/dist/search/find-preserve-query-params-usage.js.map +1 -0
  357. package/dist/search/find-provided-in-deprecated-usage.d.ts +8 -0
  358. package/dist/search/find-provided-in-deprecated-usage.d.ts.map +1 -0
  359. package/dist/search/find-provided-in-deprecated-usage.js +87 -0
  360. package/dist/search/find-provided-in-deprecated-usage.js.map +1 -0
  361. package/dist/search/find-reflective-injector-usage.d.ts +8 -0
  362. package/dist/search/find-reflective-injector-usage.d.ts.map +1 -0
  363. package/dist/search/find-reflective-injector-usage.js +65 -0
  364. package/dist/search/find-reflective-injector-usage.js.map +1 -0
  365. package/dist/search/find-render-application-usage.d.ts +8 -0
  366. package/dist/search/find-render-application-usage.d.ts.map +1 -0
  367. package/dist/search/find-render-application-usage.js +67 -0
  368. package/dist/search/find-render-application-usage.js.map +1 -0
  369. package/dist/search/find-render-component-type-usage.d.ts +8 -0
  370. package/dist/search/find-render-component-type-usage.d.ts.map +1 -0
  371. package/dist/search/find-render-component-type-usage.js +66 -0
  372. package/dist/search/find-render-component-type-usage.js.map +1 -0
  373. package/dist/search/find-render-module-factory-usage.d.ts +8 -0
  374. package/dist/search/find-render-module-factory-usage.d.ts.map +1 -0
  375. package/dist/search/find-render-module-factory-usage.js +65 -0
  376. package/dist/search/find-render-module-factory-usage.js.map +1 -0
  377. package/dist/search/find-renderer-usage.d.ts +8 -0
  378. package/dist/search/find-renderer-usage.d.ts.map +1 -0
  379. package/dist/search/find-renderer-usage.js +66 -0
  380. package/dist/search/find-renderer-usage.js.map +1 -0
  381. package/dist/search/find-resource-cache-provider-usage.d.ts +8 -0
  382. package/dist/search/find-resource-cache-provider-usage.d.ts.map +1 -0
  383. package/dist/search/find-resource-cache-provider-usage.js +59 -0
  384. package/dist/search/find-resource-cache-provider-usage.js.map +1 -0
  385. package/dist/search/find-root-renderer-usage.d.ts +8 -0
  386. package/dist/search/find-root-renderer-usage.d.ts.map +1 -0
  387. package/dist/search/find-root-renderer-usage.js +67 -0
  388. package/dist/search/find-root-renderer-usage.js.map +1 -0
  389. package/dist/search/find-rxjs-compat-usage.d.ts +8 -0
  390. package/dist/search/find-rxjs-compat-usage.d.ts.map +1 -0
  391. package/dist/search/find-rxjs-compat-usage.js +60 -0
  392. package/dist/search/find-rxjs-compat-usage.js.map +1 -0
  393. package/dist/search/find-server-transfer-state-module-usage.d.ts +8 -0
  394. package/dist/search/find-server-transfer-state-module-usage.d.ts.map +1 -0
  395. package/dist/search/find-server-transfer-state-module-usage.js +59 -0
  396. package/dist/search/find-server-transfer-state-module-usage.js.map +1 -0
  397. package/dist/search/find-setup-testing-router-usage.d.ts +8 -0
  398. package/dist/search/find-setup-testing-router-usage.d.ts.map +1 -0
  399. package/dist/search/find-setup-testing-router-usage.js +65 -0
  400. package/dist/search/find-setup-testing-router-usage.js.map +1 -0
  401. package/dist/search/find-testability-pending-request-usage.d.ts +8 -0
  402. package/dist/search/find-testability-pending-request-usage.d.ts.map +1 -0
  403. package/dist/search/find-testability-pending-request-usage.js +59 -0
  404. package/dist/search/find-testability-pending-request-usage.js.map +1 -0
  405. package/dist/search/find-undecorated-angular-class.d.ts +8 -0
  406. package/dist/search/find-undecorated-angular-class.d.ts.map +1 -0
  407. package/dist/search/find-undecorated-angular-class.js +87 -0
  408. package/dist/search/find-undecorated-angular-class.js.map +1 -0
  409. package/dist/search/find-with-no-dom-reuse-usage.d.ts +8 -0
  410. package/dist/search/find-with-no-dom-reuse-usage.d.ts.map +1 -0
  411. package/dist/search/find-with-no-dom-reuse-usage.js +66 -0
  412. package/dist/search/find-with-no-dom-reuse-usage.js.map +1 -0
  413. package/dist/search/find-wrapped-value-usage.d.ts +8 -0
  414. package/dist/search/find-wrapped-value-usage.d.ts.map +1 -0
  415. package/dist/search/find-wrapped-value-usage.js +66 -0
  416. package/dist/search/find-wrapped-value-usage.js.map +1 -0
  417. package/dist/search/find-zone-js-usage.d.ts +8 -0
  418. package/dist/search/find-zone-js-usage.d.ts.map +1 -0
  419. package/dist/search/find-zone-js-usage.js +65 -0
  420. package/dist/search/find-zone-js-usage.js.map +1 -0
  421. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-fake-async-usage.d.ts","sourceRoot":"","sources":["../../src/search/find-fake-async-usage.ts"],"names":[],"mappings":"AAMA,OAAO,EAAC,gBAAgB,EAAqB,MAAM,EAAE,WAAW,EAAC,MAAM,sBAAsB,CAAC;AAI9F,qBAAa,kBAAmB,SAAQ,MAAM;IAC1C,QAAQ,CAAC,IAAI,0DAA0D;IACvE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAA8C;IAC1E,QAAQ,CAAC,WAAW,EAAE,MAAM,CAE0B;IAEhD,MAAM,IAAI,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;CAmB9D"}
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright 2026 the original author or authors.
4
+ *
5
+ * Moderne Proprietary. Only for use by Moderne customers under the terms of a commercial contract.
6
+ */
7
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
8
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
9
+ return new (P || (P = Promise))(function (resolve, reject) {
10
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
11
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
12
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
13
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
14
+ });
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.FindFakeAsyncUsage = void 0;
18
+ const rewrite_1 = require("@openrewrite/rewrite");
19
+ const javascript_1 = require("@openrewrite/rewrite/javascript");
20
+ const java_1 = require("@openrewrite/rewrite/java");
21
+ class FindFakeAsyncUsage extends rewrite_1.Recipe {
22
+ constructor() {
23
+ super(...arguments);
24
+ this.name = "org.openrewrite.angular.search.find-fake-async-usage";
25
+ this.displayName = "Find zone.js-dependent test helper usage";
26
+ this.description = "Finds `fakeAsync()`, `tick()`, and `waitForAsync()` calls from `@angular/core/testing`. " +
27
+ "These zone.js-dependent test helpers are incompatible with Vitest, the default test runner in Angular 21. " +
28
+ "Migrate to native async/await patterns instead.";
29
+ }
30
+ editor() {
31
+ return __awaiter(this, void 0, void 0, function* () {
32
+ return new class extends javascript_1.JavaScriptVisitor {
33
+ visitMethodInvocation(method, p) {
34
+ const _super = Object.create(null, {
35
+ visitMethodInvocation: { get: () => super.visitMethodInvocation }
36
+ });
37
+ return __awaiter(this, void 0, void 0, function* () {
38
+ var _a;
39
+ const m = yield _super.visitMethodInvocation.call(this, method, p);
40
+ if (m.name.simpleName === 'fakeAsync' || m.name.simpleName === 'tick' || m.name.simpleName === 'waitForAsync') {
41
+ const methodType = m.methodType;
42
+ if (((_a = methodType === null || methodType === void 0 ? void 0 : methodType.declaringType) === null || _a === void 0 ? void 0 : _a.kind) === java_1.Type.Kind.Class
43
+ && methodType.declaringType.fullyQualifiedName === '@angular/core/testing') {
44
+ return (0, rewrite_1.foundSearchResult)(m, `${m.name.simpleName}() is a zone.js-dependent test helper incompatible with Vitest. ` +
45
+ "Migrate to native async/await. See https://angular.dev/guide/testing");
46
+ }
47
+ }
48
+ return m;
49
+ });
50
+ }
51
+ };
52
+ });
53
+ }
54
+ }
55
+ exports.FindFakeAsyncUsage = FindFakeAsyncUsage;
56
+ //# sourceMappingURL=find-fake-async-usage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-fake-async-usage.js","sourceRoot":"","sources":["../../src/search/find-fake-async-usage.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;AAEH,kDAA8F;AAC9F,gEAAkE;AAClE,oDAAkD;AAElD,MAAa,kBAAmB,SAAQ,gBAAM;IAA9C;;QACa,SAAI,GAAG,sDAAsD,CAAC;QAC9D,gBAAW,GAAW,0CAA0C,CAAC;QACjE,gBAAW,GAAW,0FAA0F;YACrH,4GAA4G;YAC5G,iDAAiD,CAAC;IAqB1D,CAAC;IAnBS,MAAM;;YACR,OAAO,IAAI,KAAM,SAAQ,8BAAmC;gBACxC,qBAAqB,CAAC,MAA0B,EAAE,CAAmB;;;;;;wBACjF,MAAM,CAAC,GAAG,MAAM,OAAM,qBAAqB,YAAC,MAAM,EAAE,CAAC,CAAuB,CAAC;wBAE7E,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,KAAK,WAAW,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,KAAK,cAAc,EAAE,CAAC;4BAC5G,MAAM,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC;4BAChC,IAAI,CAAA,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,aAAa,0CAAE,IAAI,MAAK,WAAI,CAAC,IAAI,CAAC,KAAK;mCAC/C,UAAU,CAAC,aAA4B,CAAC,kBAAkB,KAAK,uBAAuB,EAAE,CAAC;gCAC7F,OAAO,IAAA,2BAAiB,EAAC,CAAC,EACtB,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,kEAAkE;oCACtF,sEAAsE,CAAC,CAAC;4BAChF,CAAC;wBACL,CAAC;wBAED,OAAO,CAAC,CAAC;oBACb,CAAC;iBAAA;aACJ,CAAC;QACN,CAAC;KAAA;CACJ;AA1BD,gDA0BC"}
@@ -0,0 +1,8 @@
1
+ import { ExecutionContext, Recipe, TreeVisitor } from "@openrewrite/rewrite";
2
+ export declare class FindHammerJsUsage extends Recipe {
3
+ readonly name = "org.openrewrite.angular.search.find-hammer-js-usage";
4
+ readonly displayName: string;
5
+ readonly description: string;
6
+ editor(): Promise<TreeVisitor<any, ExecutionContext>>;
7
+ }
8
+ //# sourceMappingURL=find-hammer-js-usage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-hammer-js-usage.d.ts","sourceRoot":"","sources":["../../src/search/find-hammer-js-usage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAqB,MAAM,EAAE,WAAW,EAAC,MAAM,sBAAsB,CAAC;AAI9F,qBAAa,iBAAkB,SAAQ,MAAM;IACzC,QAAQ,CAAC,IAAI,yDAAyD;IACtE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAyB;IACrD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAyI;IAE/J,MAAM,IAAI,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;CAsC9D"}
@@ -0,0 +1,69 @@
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.FindHammerJsUsage = 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
+ class FindHammerJsUsage extends rewrite_1.Recipe {
17
+ constructor() {
18
+ super(...arguments);
19
+ this.name = "org.openrewrite.angular.search.find-hammer-js-usage";
20
+ this.displayName = "Find HammerJS usage";
21
+ this.description = "Finds `HammerModule` imports and HammerJS references. Angular has deprecated HammerJS support and it will be removed in Angular 21.";
22
+ }
23
+ editor() {
24
+ return __awaiter(this, void 0, void 0, function* () {
25
+ return new class extends javascript_1.JavaScriptVisitor {
26
+ visitImportDeclaration(jsImport, p) {
27
+ const _super = Object.create(null, {
28
+ visitImportDeclaration: { get: () => super.visitImportDeclaration }
29
+ });
30
+ return __awaiter(this, void 0, void 0, function* () {
31
+ const imp = yield _super.visitImportDeclaration.call(this, jsImport, p);
32
+ if (!imp.moduleSpecifier)
33
+ return imp;
34
+ const moduleSpec = imp.moduleSpecifier.element;
35
+ if (moduleSpec.kind !== java_1.J.Kind.Literal)
36
+ return imp;
37
+ const moduleName = moduleSpec.value;
38
+ if (moduleName === 'hammerjs' || moduleName.startsWith('hammerjs/')) {
39
+ return (0, rewrite_1.foundSearchResult)(imp, "HammerJS import. Angular has deprecated HammerJS support; it will be removed in Angular 21.");
40
+ }
41
+ return imp;
42
+ });
43
+ }
44
+ visitIdentifier(identifier, p) {
45
+ const _super = Object.create(null, {
46
+ visitIdentifier: { get: () => super.visitIdentifier }
47
+ });
48
+ return __awaiter(this, void 0, void 0, function* () {
49
+ var _a, _b;
50
+ const id = yield _super.visitIdentifier.call(this, identifier, p);
51
+ if (!id)
52
+ return id;
53
+ if (id.simpleName === 'HammerModule' && ((_a = id.type) === null || _a === void 0 ? void 0 : _a.kind) === java_1.Type.Kind.Class
54
+ && id.type.fullyQualifiedName === 'HammerModule') {
55
+ return (0, rewrite_1.foundSearchResult)(id, "HammerModule usage. Angular has deprecated HammerJS support; it will be removed in Angular 21.");
56
+ }
57
+ if (id.simpleName === 'HammerGestureConfig' && ((_b = id.type) === null || _b === void 0 ? void 0 : _b.kind) === java_1.Type.Kind.Class
58
+ && id.type.fullyQualifiedName === 'HammerGestureConfig') {
59
+ return (0, rewrite_1.foundSearchResult)(id, "HammerGestureConfig usage. Angular has deprecated HammerJS support; it will be removed in Angular 21.");
60
+ }
61
+ return id;
62
+ });
63
+ }
64
+ };
65
+ });
66
+ }
67
+ }
68
+ exports.FindHammerJsUsage = FindHammerJsUsage;
69
+ //# sourceMappingURL=find-hammer-js-usage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-hammer-js-usage.js","sourceRoot":"","sources":["../../src/search/find-hammer-js-usage.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,kDAA8F;AAC9F,gEAAsE;AACtE,oDAAkD;AAElD,MAAa,iBAAkB,SAAQ,gBAAM;IAA7C;;QACa,SAAI,GAAG,qDAAqD,CAAC;QAC7D,gBAAW,GAAW,qBAAqB,CAAC;QAC5C,gBAAW,GAAW,qIAAqI,CAAC;IAwCzK,CAAC;IAtCS,MAAM;;YACR,OAAO,IAAI,KAAM,SAAQ,8BAAmC;gBACxC,sBAAsB,CAAC,QAAmB,EAAE,CAAmB;;;;;wBAC3E,MAAM,GAAG,GAAG,MAAM,OAAM,sBAAsB,YAAC,QAAQ,EAAE,CAAC,CAAc,CAAC;wBACzE,IAAI,CAAC,GAAG,CAAC,eAAe;4BAAE,OAAO,GAAG,CAAC;wBAErC,MAAM,UAAU,GAAG,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC;wBAC/C,IAAI,UAAU,CAAC,IAAI,KAAK,QAAC,CAAC,IAAI,CAAC,OAAO;4BAAE,OAAO,GAAG,CAAC;wBAEnD,MAAM,UAAU,GAAI,UAAwB,CAAC,KAAe,CAAC;wBAC7D,IAAI,UAAU,KAAK,UAAU,IAAI,UAAU,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;4BAClE,OAAO,IAAA,2BAAiB,EAAC,GAAG,EACxB,6FAA6F,CAAC,CAAC;wBACvG,CAAC;wBAED,OAAO,GAAG,CAAC;oBACf,CAAC;iBAAA;gBAEc,eAAe,CAAC,UAAwB,EAAE,CAAmB;;;;;;wBACxE,MAAM,EAAE,GAAG,MAAM,OAAM,eAAe,YAAC,UAAU,EAAE,CAAC,CAAiB,CAAC;wBACtE,IAAI,CAAC,EAAE;4BAAE,OAAO,EAAE,CAAC;wBAEnB,IAAI,EAAE,CAAC,UAAU,KAAK,cAAc,IAAI,CAAA,MAAA,EAAE,CAAC,IAAI,0CAAE,IAAI,MAAK,WAAI,CAAC,IAAI,CAAC,KAAK;+BACjE,EAAE,CAAC,IAAmB,CAAC,kBAAkB,KAAK,cAAc,EAAE,CAAC;4BACnE,OAAO,IAAA,2BAAiB,EAAC,EAAE,EACvB,gGAAgG,CAAC,CAAC;wBAC1G,CAAC;wBAED,IAAI,EAAE,CAAC,UAAU,KAAK,qBAAqB,IAAI,CAAA,MAAA,EAAE,CAAC,IAAI,0CAAE,IAAI,MAAK,WAAI,CAAC,IAAI,CAAC,KAAK;+BACxE,EAAE,CAAC,IAAmB,CAAC,kBAAkB,KAAK,qBAAqB,EAAE,CAAC;4BAC1E,OAAO,IAAA,2BAAiB,EAAC,EAAE,EACvB,uGAAuG,CAAC,CAAC;wBACjH,CAAC;wBAED,OAAO,EAAE,CAAC;oBACd,CAAC;iBAAA;aACJ,CAAC;QACN,CAAC;KAAA;CACJ;AA3CD,8CA2CC"}
@@ -0,0 +1,8 @@
1
+ import { Recipe } from "@openrewrite/rewrite";
2
+ export declare class FindI18nUsage extends Recipe {
3
+ readonly name = "org.openrewrite.angular.search.find-i18n-usage";
4
+ readonly displayName: string;
5
+ readonly description: string;
6
+ recipeList(): Promise<Recipe[]>;
7
+ }
8
+ //# sourceMappingURL=find-i18n-usage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-i18n-usage.d.ts","sourceRoot":"","sources":["../../src/search/find-i18n-usage.ts"],"names":[],"mappings":"AAMA,OAAO,EAAsC,MAAM,EAAc,MAAM,sBAAsB,CAAC;AAyE9F,qBAAa,aAAc,SAAQ,MAAM;IACrC,QAAQ,CAAC,IAAI,oDAAoD;IACjE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAqB;IACjD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAG8C;IAEpE,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;CAMxC"}
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright 2026 the original author or authors.
4
+ *
5
+ * Moderne Proprietary. Only for use by Moderne customers under the terms of a commercial contract.
6
+ */
7
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
8
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
9
+ return new (P || (P = Promise))(function (resolve, reject) {
10
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
11
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
12
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
13
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
14
+ });
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.FindI18nUsage = void 0;
18
+ const rewrite_1 = require("@openrewrite/rewrite");
19
+ const javascript_1 = require("@openrewrite/rewrite/javascript");
20
+ const java_1 = require("@openrewrite/rewrite/java");
21
+ const json_1 = require("@openrewrite/rewrite/json");
22
+ const I18N_CONFIG_KEYS = new Set(['i18nLocale', 'i18nFile', 'i18nFormat', 'i18nMissingTranslation']);
23
+ class FindI18nConfigInAngularJson extends rewrite_1.Recipe {
24
+ constructor() {
25
+ super(...arguments);
26
+ this.name = "org.openrewrite.angular.search.find-i18n-usage.angular-json";
27
+ this.displayName = "Find i18n configuration in `angular.json`";
28
+ this.description = "Finds legacy i18n configuration keys (`i18nLocale`, `i18nFile`, `i18nFormat`, `i18nMissingTranslation`) in `angular.json`.";
29
+ }
30
+ editor() {
31
+ return __awaiter(this, void 0, void 0, function* () {
32
+ return new class extends json_1.JsonVisitor {
33
+ visitDocument(doc, p) {
34
+ const _super = Object.create(null, {
35
+ visitDocument: { get: () => super.visitDocument }
36
+ });
37
+ return __awaiter(this, void 0, void 0, function* () {
38
+ if (!doc.sourcePath.endsWith('angular.json'))
39
+ return doc;
40
+ return _super.visitDocument.call(this, doc, p);
41
+ });
42
+ }
43
+ visitMember(member, p) {
44
+ const _super = Object.create(null, {
45
+ visitMember: { get: () => super.visitMember }
46
+ });
47
+ return __awaiter(this, void 0, void 0, function* () {
48
+ const m = yield _super.visitMember.call(this, member, p);
49
+ if (!m)
50
+ return m;
51
+ const keyName = (0, json_1.getMemberKeyName)(m);
52
+ if (keyName && I18N_CONFIG_KEYS.has(keyName)) {
53
+ return (0, rewrite_1.foundSearchResult)(m, `Legacy i18n config \`${keyName}\`. Angular 9 requires \`@angular/localize\` for i18n support.`);
54
+ }
55
+ return m;
56
+ });
57
+ }
58
+ }();
59
+ });
60
+ }
61
+ }
62
+ class FindLocalizeUsageInTypeScript extends rewrite_1.Recipe {
63
+ constructor() {
64
+ super(...arguments);
65
+ this.name = "org.openrewrite.angular.search.find-i18n-usage.typescript";
66
+ this.displayName = "Find `$localize` usage in TypeScript";
67
+ this.description = "Finds `$localize` tagged template literal usage and `@angular/localize` imports.";
68
+ }
69
+ editor() {
70
+ return __awaiter(this, void 0, void 0, function* () {
71
+ return new class extends javascript_1.JavaScriptVisitor {
72
+ visitImportDeclaration(jsImport, p) {
73
+ const _super = Object.create(null, {
74
+ visitImportDeclaration: { get: () => super.visitImportDeclaration }
75
+ });
76
+ return __awaiter(this, void 0, void 0, function* () {
77
+ const imp = yield _super.visitImportDeclaration.call(this, jsImport, p);
78
+ if (!imp.moduleSpecifier)
79
+ return imp;
80
+ const moduleSpec = imp.moduleSpecifier.element;
81
+ if (moduleSpec.kind !== java_1.J.Kind.Literal)
82
+ return imp;
83
+ const moduleName = moduleSpec.value;
84
+ if (moduleName === '@angular/localize' || moduleName.startsWith('@angular/localize/')) {
85
+ return (0, rewrite_1.foundSearchResult)(imp, "`@angular/localize` import. Ensure `import '@angular/localize/init'` is in `polyfills.ts`.");
86
+ }
87
+ return imp;
88
+ });
89
+ }
90
+ visitIdentifier(identifier, p) {
91
+ const _super = Object.create(null, {
92
+ visitIdentifier: { get: () => super.visitIdentifier }
93
+ });
94
+ return __awaiter(this, void 0, void 0, function* () {
95
+ const id = yield _super.visitIdentifier.call(this, identifier, p);
96
+ if (!id)
97
+ return id;
98
+ if (id.simpleName === '$localize') {
99
+ return (0, rewrite_1.foundSearchResult)(id, "`$localize` usage. Ensure `@angular/localize` is installed and `import '@angular/localize/init'` is in `polyfills.ts`.");
100
+ }
101
+ return id;
102
+ });
103
+ }
104
+ };
105
+ });
106
+ }
107
+ }
108
+ class FindI18nUsage extends rewrite_1.Recipe {
109
+ constructor() {
110
+ super(...arguments);
111
+ this.name = "org.openrewrite.angular.search.find-i18n-usage";
112
+ this.displayName = "Find i18n usage";
113
+ this.description = "Finds i18n usage indicators: legacy i18n configuration in `angular.json` " +
114
+ "(`i18nLocale`, `i18nFile`, `i18nFormat`, `i18nMissingTranslation`), `$localize` tagged template literals, " +
115
+ "and `@angular/localize` imports. Projects with these markers need `@angular/localize` installed and " +
116
+ "`import '@angular/localize/init'` in `polyfills.ts` for Angular 9+.";
117
+ }
118
+ recipeList() {
119
+ return __awaiter(this, void 0, void 0, function* () {
120
+ return [
121
+ new FindI18nConfigInAngularJson(),
122
+ new FindLocalizeUsageInTypeScript(),
123
+ ];
124
+ });
125
+ }
126
+ }
127
+ exports.FindI18nUsage = FindI18nUsage;
128
+ //# sourceMappingURL=find-i18n-usage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-i18n-usage.js","sourceRoot":"","sources":["../../src/search/find-i18n-usage.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;AAEH,kDAA8F;AAC9F,gEAAsE;AACtE,oDAA4C;AAC5C,oDAAyF;AAEzF,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,wBAAwB,CAAC,CAAC,CAAC;AAErG,MAAM,2BAA4B,SAAQ,gBAAM;IAAhD;;QACa,SAAI,GAAG,6DAA6D,CAAC;QACrE,gBAAW,GAAG,2CAA2C,CAAC;QAC1D,gBAAW,GAAG,4HAA4H,CAAC;IAuBxJ,CAAC;IArBS,MAAM;;YACR,OAAO,IAAI,KAAM,SAAQ,kBAA6B;gBAClC,aAAa,CAAC,GAAkB,EAAE,CAAmB;;;;;wBACjE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,cAAc,CAAC;4BAAE,OAAO,GAAG,CAAC;wBACzD,OAAO,OAAM,aAAa,YAAC,GAAG,EAAE,CAAC,EAAE;oBACvC,CAAC;iBAAA;gBAEe,WAAW,CAAC,MAAmB,EAAE,CAAmB;;;;;wBAChE,MAAM,CAAC,GAAG,MAAM,OAAM,WAAW,YAAC,MAAM,EAAE,CAAC,CAAgB,CAAC;wBAC5D,IAAI,CAAC,CAAC;4BAAE,OAAO,CAAC,CAAC;wBAEjB,MAAM,OAAO,GAAG,IAAA,uBAAgB,EAAC,CAAC,CAAC,CAAC;wBACpC,IAAI,OAAO,IAAI,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;4BAC3C,OAAO,IAAA,2BAAiB,EAAC,CAAC,EACtB,wBAAwB,OAAO,gEAAgE,CAAC,CAAC;wBACzG,CAAC;wBAED,OAAO,CAAC,CAAC;oBACb,CAAC;iBAAA;aACJ,EAAE,CAAC;QACR,CAAC;KAAA;CACJ;AAED,MAAM,6BAA8B,SAAQ,gBAAM;IAAlD;;QACa,SAAI,GAAG,2DAA2D,CAAC;QACnE,gBAAW,GAAG,sCAAsC,CAAC;QACrD,gBAAW,GAAG,kFAAkF,CAAC;IAiC9G,CAAC;IA/BS,MAAM;;YACR,OAAO,IAAI,KAAM,SAAQ,8BAAmC;gBACxC,sBAAsB,CAAC,QAAmB,EAAE,CAAmB;;;;;wBAC3E,MAAM,GAAG,GAAG,MAAM,OAAM,sBAAsB,YAAC,QAAQ,EAAE,CAAC,CAAc,CAAC;wBACzE,IAAI,CAAC,GAAG,CAAC,eAAe;4BAAE,OAAO,GAAG,CAAC;wBAErC,MAAM,UAAU,GAAG,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC;wBAC/C,IAAI,UAAU,CAAC,IAAI,KAAK,QAAC,CAAC,IAAI,CAAC,OAAO;4BAAE,OAAO,GAAG,CAAC;wBAEnD,MAAM,UAAU,GAAI,UAAwB,CAAC,KAAe,CAAC;wBAC7D,IAAI,UAAU,KAAK,mBAAmB,IAAI,UAAU,CAAC,UAAU,CAAC,oBAAoB,CAAC,EAAE,CAAC;4BACpF,OAAO,IAAA,2BAAiB,EAAC,GAAG,EACxB,4FAA4F,CAAC,CAAC;wBACtG,CAAC;wBAED,OAAO,GAAG,CAAC;oBACf,CAAC;iBAAA;gBAEc,eAAe,CAAC,UAAwB,EAAE,CAAmB;;;;;wBACxE,MAAM,EAAE,GAAG,MAAM,OAAM,eAAe,YAAC,UAAU,EAAE,CAAC,CAAiB,CAAC;wBACtE,IAAI,CAAC,EAAE;4BAAE,OAAO,EAAE,CAAC;wBAEnB,IAAI,EAAE,CAAC,UAAU,KAAK,WAAW,EAAE,CAAC;4BAChC,OAAO,IAAA,2BAAiB,EAAC,EAAE,EACvB,wHAAwH,CAAC,CAAC;wBAClI,CAAC;wBAED,OAAO,EAAE,CAAC;oBACd,CAAC;iBAAA;aACJ,CAAC;QACN,CAAC;KAAA;CACJ;AAED,MAAa,aAAc,SAAQ,gBAAM;IAAzC;;QACa,SAAI,GAAG,gDAAgD,CAAC;QACxD,gBAAW,GAAW,iBAAiB,CAAC;QACxC,gBAAW,GAAW,2EAA2E;YACtG,4GAA4G;YAC5G,sGAAsG;YACtG,qEAAqE,CAAC;IAQ9E,CAAC;IANS,UAAU;;YACZ,OAAO;gBACH,IAAI,2BAA2B,EAAE;gBACjC,IAAI,6BAA6B,EAAE;aACtC,CAAC;QACN,CAAC;KAAA;CACJ;AAdD,sCAcC"}
@@ -0,0 +1,8 @@
1
+ import { ExecutionContext, Recipe, TreeVisitor } from "@openrewrite/rewrite";
2
+ export declare class FindKarmaUsage extends Recipe {
3
+ readonly name = "org.openrewrite.angular.search.find-karma-usage";
4
+ readonly displayName: string;
5
+ readonly description: string;
6
+ editor(): Promise<TreeVisitor<any, ExecutionContext>>;
7
+ }
8
+ //# sourceMappingURL=find-karma-usage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-karma-usage.d.ts","sourceRoot":"","sources":["../../src/search/find-karma-usage.ts"],"names":[],"mappings":"AAMA,OAAO,EAAC,gBAAgB,EAAqB,MAAM,EAAE,WAAW,EAAC,MAAM,sBAAsB,CAAC;AAG9F,qBAAa,cAAe,SAAQ,MAAM;IACtC,QAAQ,CAAC,IAAI,qDAAqD;IAClE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAkC;IAC9D,QAAQ,CAAC,WAAW,EAAE,MAAM,CAC4C;IAElE,MAAM,IAAI,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;CA+B9D"}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright 2026 the original author or authors.
4
+ *
5
+ * Moderne Proprietary. Only for use by Moderne customers under the terms of a commercial contract.
6
+ */
7
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
8
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
9
+ return new (P || (P = Promise))(function (resolve, reject) {
10
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
11
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
12
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
13
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
14
+ });
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.FindKarmaUsage = void 0;
18
+ const rewrite_1 = require("@openrewrite/rewrite");
19
+ const json_1 = require("@openrewrite/rewrite/json");
20
+ class FindKarmaUsage extends rewrite_1.Recipe {
21
+ constructor() {
22
+ super(...arguments);
23
+ this.name = "org.openrewrite.angular.search.find-karma-usage";
24
+ this.displayName = "Find Karma test runner usage";
25
+ this.description = "Finds Karma test runner configuration in package.json dependencies and angular.json test builder. " +
26
+ "Angular 21 replaces Karma with Vitest as the default test runner.";
27
+ }
28
+ editor() {
29
+ return __awaiter(this, void 0, void 0, function* () {
30
+ return new class extends json_1.JsonVisitor {
31
+ visitDocument(doc, p) {
32
+ const _super = Object.create(null, {
33
+ visitDocument: { get: () => super.visitDocument }
34
+ });
35
+ return __awaiter(this, void 0, void 0, function* () {
36
+ if (!doc.sourcePath.endsWith('package.json') && !doc.sourcePath.endsWith('angular.json'))
37
+ return doc;
38
+ return _super.visitDocument.call(this, doc, p);
39
+ });
40
+ }
41
+ visitMember(member, p) {
42
+ const _super = Object.create(null, {
43
+ visitMember: { get: () => super.visitMember }
44
+ });
45
+ return __awaiter(this, void 0, void 0, function* () {
46
+ const m = yield _super.visitMember.call(this, member, p);
47
+ if (!m)
48
+ return m;
49
+ const key = (0, json_1.getMemberKeyName)(m);
50
+ if (!key)
51
+ return m;
52
+ if (key.startsWith('karma')) {
53
+ return (0, rewrite_1.foundSearchResult)(m, `Karma dependency '${key}'. Angular 21 uses Vitest as the default test runner. See https://angular.dev/guide/testing`);
54
+ }
55
+ if (key === 'builder' && (0, json_1.isLiteral)(m.value)) {
56
+ const val = m.value.value;
57
+ if (typeof val === 'string' && val.includes('karma')) {
58
+ return (0, rewrite_1.foundSearchResult)(m, "Karma test builder reference. Angular 21 uses Vitest as the default test runner. See https://angular.dev/guide/testing");
59
+ }
60
+ }
61
+ return m;
62
+ });
63
+ }
64
+ }();
65
+ });
66
+ }
67
+ }
68
+ exports.FindKarmaUsage = FindKarmaUsage;
69
+ //# sourceMappingURL=find-karma-usage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-karma-usage.js","sourceRoot":"","sources":["../../src/search/find-karma-usage.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;AAEH,kDAA8F;AAC9F,oDAAyF;AAEzF,MAAa,cAAe,SAAQ,gBAAM;IAA1C;;QACa,SAAI,GAAG,iDAAiD,CAAC;QACzD,gBAAW,GAAW,8BAA8B,CAAC;QACrD,gBAAW,GAAW,oGAAoG;YAC/H,mEAAmE,CAAC;IAiC5E,CAAC;IA/BS,MAAM;;YACR,OAAO,IAAI,KAAM,SAAQ,kBAA6B;gBAClC,aAAa,CAAC,GAAkB,EAAE,CAAmB;;;;;wBACjE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,cAAc,CAAC;4BAAE,OAAO,GAAG,CAAC;wBACrG,OAAO,OAAM,aAAa,YAAC,GAAG,EAAE,CAAC,EAAE;oBACvC,CAAC;iBAAA;gBAEe,WAAW,CAAC,MAAmB,EAAE,CAAmB;;;;;wBAChE,MAAM,CAAC,GAAG,MAAM,OAAM,WAAW,YAAC,MAAM,EAAE,CAAC,CAAgB,CAAC;wBAC5D,IAAI,CAAC,CAAC;4BAAE,OAAO,CAAC,CAAC;wBAEjB,MAAM,GAAG,GAAG,IAAA,uBAAgB,EAAC,CAAC,CAAC,CAAC;wBAChC,IAAI,CAAC,GAAG;4BAAE,OAAO,CAAC,CAAC;wBAEnB,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;4BAC1B,OAAO,IAAA,2BAAiB,EAAC,CAAC,EACtB,qBAAqB,GAAG,6FAA6F,CAAC,CAAC;wBAC/H,CAAC;wBAED,IAAI,GAAG,KAAK,SAAS,IAAI,IAAA,gBAAS,EAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;4BAC1C,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,KAAe,CAAC;4BACpC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gCACnD,OAAO,IAAA,2BAAiB,EAAC,CAAC,EACtB,wHAAwH,CAAC,CAAC;4BAClI,CAAC;wBACL,CAAC;wBAED,OAAO,CAAC,CAAC;oBACb,CAAC;iBAAA;aACJ,EAAE,CAAC;QACR,CAAC;KAAA;CACJ;AArCD,wCAqCC"}
@@ -0,0 +1,8 @@
1
+ import { ExecutionContext, Recipe, TreeVisitor } from "@openrewrite/rewrite";
2
+ export declare class FindLoadChildrenStringUsage extends Recipe {
3
+ readonly name = "org.openrewrite.angular.search.find-load-children-string-usage";
4
+ readonly displayName: string;
5
+ readonly description: string;
6
+ editor(): Promise<TreeVisitor<any, ExecutionContext>>;
7
+ }
8
+ //# sourceMappingURL=find-load-children-string-usage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-load-children-string-usage.d.ts","sourceRoot":"","sources":["../../src/search/find-load-children-string-usage.ts"],"names":[],"mappings":"AAMA,OAAO,EAAC,gBAAgB,EAAqB,MAAM,EAAE,WAAW,EAAC,MAAM,sBAAsB,CAAC;AAI9F,qBAAa,2BAA4B,SAAQ,MAAM;IACnD,QAAQ,CAAC,IAAI,oEAAoE;IACjF,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAuD;IACnF,QAAQ,CAAC,WAAW,EAAE,MAAM,CAGiF;IAEvG,MAAM,IAAI,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;CAwB9D"}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright 2026 the original author or authors.
4
+ *
5
+ * Moderne Proprietary. Only for use by Moderne customers under the terms of a commercial contract.
6
+ */
7
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
8
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
9
+ return new (P || (P = Promise))(function (resolve, reject) {
10
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
11
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
12
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
13
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
14
+ });
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.FindLoadChildrenStringUsage = void 0;
18
+ const rewrite_1 = require("@openrewrite/rewrite");
19
+ const javascript_1 = require("@openrewrite/rewrite/javascript");
20
+ const java_1 = require("@openrewrite/rewrite/java");
21
+ class FindLoadChildrenStringUsage extends rewrite_1.Recipe {
22
+ constructor() {
23
+ super(...arguments);
24
+ this.name = "org.openrewrite.angular.search.find-load-children-string-usage";
25
+ this.displayName = "Find deprecated string-based `loadChildren` usage";
26
+ this.description = "Finds usages of the deprecated string-based `loadChildren` syntax " +
27
+ "(e.g. `loadChildren: './path/to/module#ModuleName'`). " +
28
+ "String-based lazy loading was deprecated in Angular 8 and removed in Angular 11. " +
29
+ "Use dynamic imports instead: `loadChildren: () => import('./path/to/module').then(m => m.ModuleName)`.";
30
+ }
31
+ editor() {
32
+ return __awaiter(this, void 0, void 0, function* () {
33
+ return new class extends javascript_1.JavaScriptVisitor {
34
+ visitPropertyAssignment(prop, p) {
35
+ const _super = Object.create(null, {
36
+ visitPropertyAssignment: { get: () => super.visitPropertyAssignment }
37
+ });
38
+ return __awaiter(this, void 0, void 0, function* () {
39
+ let pa = yield _super.visitPropertyAssignment.call(this, prop, p);
40
+ if (!pa)
41
+ return pa;
42
+ const nameExpr = pa.name.element;
43
+ if (!(0, java_1.isIdentifier)(nameExpr) || nameExpr.simpleName !== 'loadChildren')
44
+ return pa;
45
+ if (!pa.initializer)
46
+ return pa;
47
+ if ((0, java_1.isLiteral)(pa.initializer)) {
48
+ const lit = pa.initializer;
49
+ if (typeof lit.value === 'string' && lit.value.includes('#')) {
50
+ return (0, rewrite_1.foundSearchResult)(pa, "String-based `loadChildren` was removed in Angular 11. " +
51
+ "Use dynamic imports: `loadChildren: () => import('...').then(m => m.ModuleName)`.");
52
+ }
53
+ }
54
+ return pa;
55
+ });
56
+ }
57
+ }();
58
+ });
59
+ }
60
+ }
61
+ exports.FindLoadChildrenStringUsage = FindLoadChildrenStringUsage;
62
+ //# sourceMappingURL=find-load-children-string-usage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-load-children-string-usage.js","sourceRoot":"","sources":["../../src/search/find-load-children-string-usage.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;AAEH,kDAA8F;AAC9F,gEAAsE;AACtE,oDAAqE;AAErE,MAAa,2BAA4B,SAAQ,gBAAM;IAAvD;;QACa,SAAI,GAAG,gEAAgE,CAAC;QACxE,gBAAW,GAAW,mDAAmD,CAAC;QAC1E,gBAAW,GAAW,oEAAoE;YAC/F,wDAAwD;YACxD,mFAAmF;YACnF,wGAAwG,CAAC;IA0BjH,CAAC;IAxBS,MAAM;;YACR,OAAO,IAAI,KAAM,SAAQ,8BAAmC;gBACzC,uBAAuB,CAAC,IAA2B,EAAE,CAAmB;;;;;wBACnF,IAAI,EAAE,GAAG,MAAM,OAAM,uBAAuB,YAAC,IAAI,EAAE,CAAC,CAA0B,CAAC;wBAC/E,IAAI,CAAC,EAAE;4BAAE,OAAO,EAAE,CAAC;wBAEnB,MAAM,QAAQ,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC;wBACjC,IAAI,CAAC,IAAA,mBAAY,EAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,UAAU,KAAK,cAAc;4BAAE,OAAO,EAAE,CAAC;wBAEjF,IAAI,CAAC,EAAE,CAAC,WAAW;4BAAE,OAAO,EAAE,CAAC;wBAE/B,IAAI,IAAA,gBAAS,EAAC,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC;4BAC5B,MAAM,GAAG,GAAG,EAAE,CAAC,WAAwB,CAAC;4BACxC,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gCAC3D,OAAO,IAAA,2BAAiB,EAAC,EAAE,EACvB,yDAAyD;oCACzD,mFAAmF,CAAC,CAAC;4BAC7F,CAAC;wBACL,CAAC;wBAED,OAAO,EAAE,CAAC;oBACd,CAAC;iBAAA;aACJ,EAAE,CAAC;QACR,CAAC;KAAA;CACJ;AAhCD,kEAgCC"}
@@ -0,0 +1,8 @@
1
+ import { ExecutionContext, Recipe, TreeVisitor } from "@openrewrite/rewrite";
2
+ export declare class FindMissingInjectable extends Recipe {
3
+ readonly name = "org.openrewrite.angular.search.find-missing-injectable";
4
+ readonly displayName: string;
5
+ readonly description: string;
6
+ editor(): Promise<TreeVisitor<any, ExecutionContext>>;
7
+ }
8
+ //# sourceMappingURL=find-missing-injectable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-missing-injectable.d.ts","sourceRoot":"","sources":["../../src/search/find-missing-injectable.ts"],"names":[],"mappings":"AAMA,OAAO,EAAC,gBAAgB,EAAqB,MAAM,EAAE,WAAW,EAAC,MAAM,sBAAsB,CAAC;AAM9F,qBAAa,qBAAsB,SAAQ,MAAM;IAC7C,QAAQ,CAAC,IAAI,4DAA4D;IACzE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAmE;IAC/F,QAAQ,CAAC,WAAW,EAAE,MAAM,CAE4F;IAElH,MAAM,IAAI,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;CAuD9D"}
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright 2026 the original author or authors.
4
+ *
5
+ * Moderne Proprietary. Only for use by Moderne customers under the terms of a commercial contract.
6
+ */
7
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
8
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
9
+ return new (P || (P = Promise))(function (resolve, reject) {
10
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
11
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
12
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
13
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
14
+ });
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.FindMissingInjectable = void 0;
18
+ const rewrite_1 = require("@openrewrite/rewrite");
19
+ const javascript_1 = require("@openrewrite/rewrite/javascript");
20
+ const java_1 = require("@openrewrite/rewrite/java");
21
+ const ANGULAR_DECORATORS = new Set(['Component', 'Directive', 'Pipe', 'Injectable', 'NgModule']);
22
+ class FindMissingInjectable extends rewrite_1.Recipe {
23
+ constructor() {
24
+ super(...arguments);
25
+ this.name = "org.openrewrite.angular.search.find-missing-injectable";
26
+ this.displayName = "Find classes with DI dependencies but missing `@Injectable()`";
27
+ this.description = "Finds classes that have constructor parameters (suggesting dependency injection) " +
28
+ "but lack an `@Injectable()` or other Angular class-level decorator. " +
29
+ "Angular 9 with Ivy requires an explicit `@Injectable()` decorator for all services that use dependency injection.";
30
+ }
31
+ editor() {
32
+ return __awaiter(this, void 0, void 0, function* () {
33
+ return new class extends javascript_1.JavaScriptVisitor {
34
+ constructor() {
35
+ super(...arguments);
36
+ this.importsFromAngular = false;
37
+ }
38
+ visitImportDeclaration(jsImport, p) {
39
+ const _super = Object.create(null, {
40
+ visitImportDeclaration: { get: () => super.visitImportDeclaration }
41
+ });
42
+ return __awaiter(this, void 0, void 0, function* () {
43
+ const imp = yield _super.visitImportDeclaration.call(this, jsImport, p);
44
+ if (!(imp === null || imp === void 0 ? void 0 : imp.moduleSpecifier))
45
+ return imp;
46
+ const moduleSpec = imp.moduleSpecifier.element;
47
+ if (moduleSpec.kind === java_1.J.Kind.Literal) {
48
+ const moduleName = moduleSpec.value;
49
+ if (moduleName.startsWith('@angular/')) {
50
+ this.importsFromAngular = true;
51
+ }
52
+ }
53
+ return imp;
54
+ });
55
+ }
56
+ visitClassDeclaration(classDecl, p) {
57
+ const _super = Object.create(null, {
58
+ visitClassDeclaration: { get: () => super.visitClassDeclaration }
59
+ });
60
+ return __awaiter(this, void 0, void 0, function* () {
61
+ var _a;
62
+ const cd = yield _super.visitClassDeclaration.call(this, classDecl, p);
63
+ if (!cd)
64
+ return cd;
65
+ if (!this.importsFromAngular)
66
+ return cd;
67
+ const hasAngularDecorator = cd.leadingAnnotations.some(a => (0, java_1.isIdentifier)(a.annotationType) && ANGULAR_DECORATORS.has(a.annotationType.simpleName));
68
+ if (hasAngularDecorator)
69
+ return cd;
70
+ let hasConstructorParams = false;
71
+ for (const stmt of cd.body.statements) {
72
+ const el = stmt.element;
73
+ if (el.kind !== java_1.J.Kind.MethodDeclaration)
74
+ continue;
75
+ const method = el;
76
+ if (method.name.simpleName !== 'constructor')
77
+ continue;
78
+ const params = (_a = method.parameters) === null || _a === void 0 ? void 0 : _a.elements;
79
+ if (params && params.length > 0) {
80
+ const hasRealParams = params.some(rp => rp.element.kind !== java_1.J.Kind.Empty);
81
+ if (hasRealParams) {
82
+ hasConstructorParams = true;
83
+ }
84
+ }
85
+ break;
86
+ }
87
+ if (!hasConstructorParams)
88
+ return cd;
89
+ return (0, rewrite_1.foundSearchResult)(cd, "Class has constructor dependencies but no `@Injectable()` decorator. " +
90
+ "Angular 9 with Ivy requires an explicit `@Injectable()` for dependency injection to work.");
91
+ });
92
+ }
93
+ }();
94
+ });
95
+ }
96
+ }
97
+ exports.FindMissingInjectable = FindMissingInjectable;
98
+ //# sourceMappingURL=find-missing-injectable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-missing-injectable.js","sourceRoot":"","sources":["../../src/search/find-missing-injectable.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { ExecutionContext, Recipe, TreeVisitor } from "@openrewrite/rewrite";
2
+ export declare class FindNgClassUsage extends Recipe {
3
+ readonly name = "org.openrewrite.angular.search.find-ng-class-usage";
4
+ readonly displayName: string;
5
+ readonly description: string;
6
+ editor(): Promise<TreeVisitor<any, ExecutionContext>>;
7
+ }
8
+ //# sourceMappingURL=find-ng-class-usage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-ng-class-usage.d.ts","sourceRoot":"","sources":["../../src/search/find-ng-class-usage.ts"],"names":[],"mappings":"AAMA,OAAO,EAAC,gBAAgB,EAAqB,MAAM,EAAE,WAAW,EAAC,MAAM,sBAAsB,CAAC;AAI9F,qBAAa,gBAAiB,SAAQ,MAAM;IACxC,QAAQ,CAAC,IAAI,wDAAwD;IACrE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAA0B;IACtD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAC4E;IAElG,MAAM,IAAI,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;CA4B9D"}