@thethracian/oxlint-config 0.3.5 → 0.4.0

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 (450) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +14 -2
  3. package/dist/codemods/arrow-body-style.d.ts.map +1 -1
  4. package/dist/codemods/arrow-body-style.js +13 -1
  5. package/dist/codemods/arrow-body-style.js.map +1 -1
  6. package/dist/codemods/explicit-return-types.d.ts.map +1 -1
  7. package/dist/codemods/explicit-return-types.js +15 -3
  8. package/dist/codemods/explicit-return-types.js.map +1 -1
  9. package/dist/codemods/function-declarations.d.ts.map +1 -1
  10. package/dist/codemods/function-declarations.js +7 -0
  11. package/dist/codemods/function-declarations.js.map +1 -1
  12. package/dist/codemods/inline-export-lists.d.ts.map +1 -1
  13. package/dist/codemods/inline-export-lists.js +17 -3
  14. package/dist/codemods/inline-export-lists.js.map +1 -1
  15. package/dist/codemods/internal-export-docs.d.ts.map +1 -1
  16. package/dist/codemods/internal-export-docs.js +17 -5
  17. package/dist/codemods/internal-export-docs.js.map +1 -1
  18. package/dist/codemods/no-ternary-variable-initializers.d.ts.map +1 -1
  19. package/dist/codemods/no-ternary-variable-initializers.js +24 -14
  20. package/dist/codemods/no-ternary-variable-initializers.js.map +1 -1
  21. package/dist/codemods/rename-acronyms.d.ts.map +1 -1
  22. package/dist/codemods/rename-acronyms.js +31 -1
  23. package/dist/codemods/rename-acronyms.js.map +1 -1
  24. package/dist/rules/diagnostic-guidance.d.ts.map +1 -1
  25. package/dist/rules/diagnostic-guidance.js +26 -2
  26. package/dist/rules/diagnostic-guidance.js.map +1 -1
  27. package/dist/rules/effect-alias-canonicalization.d.ts +27 -0
  28. package/dist/rules/effect-alias-canonicalization.d.ts.map +1 -0
  29. package/dist/rules/effect-alias-canonicalization.js +60 -0
  30. package/dist/rules/effect-alias-canonicalization.js.map +1 -0
  31. package/dist/rules/effect-ast-scope.d.ts +25 -0
  32. package/dist/rules/effect-ast-scope.d.ts.map +1 -0
  33. package/dist/rules/effect-ast-scope.js +286 -0
  34. package/dist/rules/effect-ast-scope.js.map +1 -0
  35. package/dist/rules/effect-ast.d.ts +42 -0
  36. package/dist/rules/effect-ast.d.ts.map +1 -0
  37. package/dist/rules/effect-ast.js +74 -0
  38. package/dist/rules/effect-ast.js.map +1 -0
  39. package/dist/rules/effect-boundary-ast-shared.d.ts +42 -0
  40. package/dist/rules/effect-boundary-ast-shared.d.ts.map +1 -0
  41. package/dist/rules/effect-boundary-ast-shared.js +203 -0
  42. package/dist/rules/effect-boundary-ast-shared.js.map +1 -0
  43. package/dist/rules/effect-default-boundary-ast.d.ts +10 -0
  44. package/dist/rules/effect-default-boundary-ast.d.ts.map +1 -0
  45. package/dist/rules/effect-default-boundary-ast.js +320 -0
  46. package/dist/rules/effect-default-boundary-ast.js.map +1 -0
  47. package/dist/rules/effect-default-compat-rules.d.ts +11 -15
  48. package/dist/rules/effect-default-compat-rules.d.ts.map +1 -1
  49. package/dist/rules/effect-default-compat-rules.js +20 -0
  50. package/dist/rules/effect-default-compat-rules.js.map +1 -1
  51. package/dist/rules/effect-default-scan-helpers.js +1 -1
  52. package/dist/rules/effect-default-scan-helpers.js.map +1 -1
  53. package/dist/rules/effect-default-workflow-helpers.d.ts.map +1 -1
  54. package/dist/rules/effect-default-workflow-helpers.js +7 -29
  55. package/dist/rules/effect-default-workflow-helpers.js.map +1 -1
  56. package/dist/rules/effect-default.d.ts +4 -1
  57. package/dist/rules/effect-default.d.ts.map +1 -1
  58. package/dist/rules/effect-default.js +14 -5
  59. package/dist/rules/effect-default.js.map +1 -1
  60. package/dist/rules/effect-export-binding-patterns.d.ts +9 -0
  61. package/dist/rules/effect-export-binding-patterns.d.ts.map +1 -0
  62. package/dist/rules/effect-export-binding-patterns.js +149 -0
  63. package/dist/rules/effect-export-binding-patterns.js.map +1 -0
  64. package/dist/rules/effect-export-declaration-boundaries.d.ts +21 -0
  65. package/dist/rules/effect-export-declaration-boundaries.d.ts.map +1 -0
  66. package/dist/rules/effect-export-declaration-boundaries.js +119 -0
  67. package/dist/rules/effect-export-declaration-boundaries.js.map +1 -0
  68. package/dist/rules/effect-export-default-binding.d.ts +5 -0
  69. package/dist/rules/effect-export-default-binding.d.ts.map +1 -0
  70. package/dist/rules/effect-export-default-binding.js +350 -0
  71. package/dist/rules/effect-export-default-binding.js.map +1 -0
  72. package/dist/rules/effect-export-segments.d.ts +9 -0
  73. package/dist/rules/effect-export-segments.d.ts.map +1 -0
  74. package/dist/rules/effect-export-segments.js +67 -0
  75. package/dist/rules/effect-export-segments.js.map +1 -0
  76. package/dist/rules/effect-exported-declarations.d.ts +3 -15
  77. package/dist/rules/effect-exported-declarations.d.ts.map +1 -1
  78. package/dist/rules/effect-exported-declarations.js +139 -94
  79. package/dist/rules/effect-exported-declarations.js.map +1 -1
  80. package/dist/rules/effect-global-fetch-ast.d.ts +14 -0
  81. package/dist/rules/effect-global-fetch-ast.d.ts.map +1 -0
  82. package/dist/rules/effect-global-fetch-ast.js +321 -0
  83. package/dist/rules/effect-global-fetch-ast.js.map +1 -0
  84. package/dist/rules/effect-global-fetch-imports.d.ts +29 -0
  85. package/dist/rules/effect-global-fetch-imports.d.ts.map +1 -0
  86. package/dist/rules/effect-global-fetch-imports.js +91 -0
  87. package/dist/rules/effect-global-fetch-imports.js.map +1 -0
  88. package/dist/rules/effect-import-bindings.d.ts +13 -0
  89. package/dist/rules/effect-import-bindings.d.ts.map +1 -0
  90. package/dist/rules/effect-import-bindings.js +133 -0
  91. package/dist/rules/effect-import-bindings.js.map +1 -0
  92. package/dist/rules/effect-imported-call-matcher.d.ts +24 -0
  93. package/dist/rules/effect-imported-call-matcher.d.ts.map +1 -0
  94. package/dist/rules/effect-imported-call-matcher.js +271 -0
  95. package/dist/rules/effect-imported-call-matcher.js.map +1 -0
  96. package/dist/rules/effect-module-source-index.d.ts +44 -0
  97. package/dist/rules/effect-module-source-index.d.ts.map +1 -0
  98. package/dist/rules/effect-module-source-index.js +306 -0
  99. package/dist/rules/effect-module-source-index.js.map +1 -0
  100. package/dist/rules/effect-native-references.d.ts +66 -0
  101. package/dist/rules/effect-native-references.d.ts.map +1 -0
  102. package/dist/rules/effect-native-references.js +164 -0
  103. package/dist/rules/effect-native-references.js.map +1 -0
  104. package/dist/rules/effect-object-assign-provenance.d.ts +20 -0
  105. package/dist/rules/effect-object-assign-provenance.d.ts.map +1 -0
  106. package/dist/rules/effect-object-assign-provenance.js +37 -0
  107. package/dist/rules/effect-object-assign-provenance.js.map +1 -0
  108. package/dist/rules/effect-prefer-map-over-flatmap-succeed.d.ts +4 -0
  109. package/dist/rules/effect-prefer-map-over-flatmap-succeed.d.ts.map +1 -0
  110. package/dist/rules/effect-prefer-map-over-flatmap-succeed.js +294 -0
  111. package/dist/rules/effect-prefer-map-over-flatmap-succeed.js.map +1 -0
  112. package/dist/rules/effect-prefer-succeed-for-stable-values.d.ts +4 -0
  113. package/dist/rules/effect-prefer-succeed-for-stable-values.d.ts.map +1 -0
  114. package/dist/rules/effect-prefer-succeed-for-stable-values.js +292 -0
  115. package/dist/rules/effect-prefer-succeed-for-stable-values.js.map +1 -0
  116. package/dist/rules/effect-promise-ast-values.d.ts +26 -0
  117. package/dist/rules/effect-promise-ast-values.d.ts.map +1 -0
  118. package/dist/rules/effect-promise-ast-values.js +66 -0
  119. package/dist/rules/effect-promise-ast-values.js.map +1 -0
  120. package/dist/rules/effect-promise-callable-declarations.d.ts +22 -0
  121. package/dist/rules/effect-promise-callable-declarations.d.ts.map +1 -0
  122. package/dist/rules/effect-promise-callable-declarations.js +255 -0
  123. package/dist/rules/effect-promise-callable-declarations.js.map +1 -0
  124. package/dist/rules/effect-promise-callable-lookup.d.ts +40 -0
  125. package/dist/rules/effect-promise-callable-lookup.d.ts.map +1 -0
  126. package/dist/rules/effect-promise-callable-lookup.js +99 -0
  127. package/dist/rules/effect-promise-callable-lookup.js.map +1 -0
  128. package/dist/rules/effect-promise-callable-scopes.d.ts +16 -0
  129. package/dist/rules/effect-promise-callable-scopes.d.ts.map +1 -0
  130. package/dist/rules/effect-promise-callable-scopes.js +43 -0
  131. package/dist/rules/effect-promise-callable-scopes.js.map +1 -0
  132. package/dist/rules/effect-promise-callable-types.d.ts +43 -0
  133. package/dist/rules/effect-promise-callable-types.d.ts.map +1 -0
  134. package/dist/rules/effect-promise-callable-types.js +5 -0
  135. package/dist/rules/effect-promise-callable-types.js.map +1 -0
  136. package/dist/rules/effect-promise-callables.d.ts +5 -0
  137. package/dist/rules/effect-promise-callables.d.ts.map +1 -0
  138. package/dist/rules/effect-promise-callables.js +7 -0
  139. package/dist/rules/effect-promise-callables.js.map +1 -0
  140. package/dist/rules/effect-promise-collections.d.ts +20 -0
  141. package/dist/rules/effect-promise-collections.d.ts.map +1 -0
  142. package/dist/rules/effect-promise-collections.js +199 -0
  143. package/dist/rules/effect-promise-collections.js.map +1 -0
  144. package/dist/rules/effect-promise-completion.d.ts +141 -0
  145. package/dist/rules/effect-promise-completion.d.ts.map +1 -0
  146. package/dist/rules/effect-promise-completion.js +200 -0
  147. package/dist/rules/effect-promise-completion.js.map +1 -0
  148. package/dist/rules/effect-promise-environment-projections.d.ts +23 -0
  149. package/dist/rules/effect-promise-environment-projections.d.ts.map +1 -0
  150. package/dist/rules/effect-promise-environment-projections.js +191 -0
  151. package/dist/rules/effect-promise-environment-projections.js.map +1 -0
  152. package/dist/rules/effect-promise-environment-types.d.ts +96 -0
  153. package/dist/rules/effect-promise-environment-types.d.ts.map +1 -0
  154. package/dist/rules/effect-promise-environment-types.js +10 -0
  155. package/dist/rules/effect-promise-environment-types.js.map +1 -0
  156. package/dist/rules/effect-promise-environment-values.d.ts +41 -0
  157. package/dist/rules/effect-promise-environment-values.d.ts.map +1 -0
  158. package/dist/rules/effect-promise-environment-values.js +214 -0
  159. package/dist/rules/effect-promise-environment-values.js.map +1 -0
  160. package/dist/rules/effect-promise-environments.d.ts +5 -0
  161. package/dist/rules/effect-promise-environments.d.ts.map +1 -0
  162. package/dist/rules/effect-promise-environments.js +7 -0
  163. package/dist/rules/effect-promise-environments.js.map +1 -0
  164. package/dist/rules/effect-promise-execution-ast.d.ts +12 -0
  165. package/dist/rules/effect-promise-execution-ast.d.ts.map +1 -0
  166. package/dist/rules/effect-promise-execution-ast.js +30 -0
  167. package/dist/rules/effect-promise-execution-ast.js.map +1 -0
  168. package/dist/rules/effect-promise-execution-engine.d.ts +9 -0
  169. package/dist/rules/effect-promise-execution-engine.d.ts.map +1 -0
  170. package/dist/rules/effect-promise-execution-engine.js +280 -0
  171. package/dist/rules/effect-promise-execution-engine.js.map +1 -0
  172. package/dist/rules/effect-promise-execution-flow.d.ts +48 -0
  173. package/dist/rules/effect-promise-execution-flow.d.ts.map +1 -0
  174. package/dist/rules/effect-promise-execution-flow.js +193 -0
  175. package/dist/rules/effect-promise-execution-flow.js.map +1 -0
  176. package/dist/rules/effect-promise-execution-navigation.d.ts +34 -0
  177. package/dist/rules/effect-promise-execution-navigation.d.ts.map +1 -0
  178. package/dist/rules/effect-promise-execution-navigation.js +66 -0
  179. package/dist/rules/effect-promise-execution-navigation.js.map +1 -0
  180. package/dist/rules/effect-promise-execution-types.d.ts +36 -0
  181. package/dist/rules/effect-promise-execution-types.d.ts.map +1 -0
  182. package/dist/rules/effect-promise-execution-types.js +5 -0
  183. package/dist/rules/effect-promise-execution-types.js.map +1 -0
  184. package/dist/rules/effect-promise-execution-values.d.ts +40 -0
  185. package/dist/rules/effect-promise-execution-values.d.ts.map +1 -0
  186. package/dist/rules/effect-promise-execution-values.js +268 -0
  187. package/dist/rules/effect-promise-execution-values.js.map +1 -0
  188. package/dist/rules/effect-promise-expression-flow.d.ts +27 -0
  189. package/dist/rules/effect-promise-expression-flow.d.ts.map +1 -0
  190. package/dist/rules/effect-promise-expression-flow.js +80 -0
  191. package/dist/rules/effect-promise-expression-flow.js.map +1 -0
  192. package/dist/rules/effect-promise-invocation-memo.d.ts +16 -0
  193. package/dist/rules/effect-promise-invocation-memo.d.ts.map +1 -0
  194. package/dist/rules/effect-promise-invocation-memo.js +44 -0
  195. package/dist/rules/effect-promise-invocation-memo.js.map +1 -0
  196. package/dist/rules/effect-promise-invocations.d.ts +16 -0
  197. package/dist/rules/effect-promise-invocations.d.ts.map +1 -0
  198. package/dist/rules/effect-promise-invocations.js +126 -0
  199. package/dist/rules/effect-promise-invocations.js.map +1 -0
  200. package/dist/rules/effect-promise-node-children.d.ts +22 -0
  201. package/dist/rules/effect-promise-node-children.d.ts.map +1 -0
  202. package/dist/rules/effect-promise-node-children.js +49 -0
  203. package/dist/rules/effect-promise-node-children.js.map +1 -0
  204. package/dist/rules/effect-promise-node-evaluation.d.ts +43 -0
  205. package/dist/rules/effect-promise-node-evaluation.d.ts.map +1 -0
  206. package/dist/rules/effect-promise-node-evaluation.js +150 -0
  207. package/dist/rules/effect-promise-node-evaluation.js.map +1 -0
  208. package/dist/rules/effect-promise-parameter-bindings.d.ts +28 -0
  209. package/dist/rules/effect-promise-parameter-bindings.d.ts.map +1 -0
  210. package/dist/rules/effect-promise-parameter-bindings.js +187 -0
  211. package/dist/rules/effect-promise-parameter-bindings.js.map +1 -0
  212. package/dist/rules/effect-promise-pattern-bindings.d.ts +9 -0
  213. package/dist/rules/effect-promise-pattern-bindings.d.ts.map +1 -0
  214. package/dist/rules/effect-promise-pattern-bindings.js +54 -0
  215. package/dist/rules/effect-promise-pattern-bindings.js.map +1 -0
  216. package/dist/rules/effect-promise-program-traversal.d.ts +40 -0
  217. package/dist/rules/effect-promise-program-traversal.d.ts.map +1 -0
  218. package/dist/rules/effect-promise-program-traversal.js +115 -0
  219. package/dist/rules/effect-promise-program-traversal.js.map +1 -0
  220. package/dist/rules/effect-promise-rule-bindings.d.ts +23 -0
  221. package/dist/rules/effect-promise-rule-bindings.d.ts.map +1 -0
  222. package/dist/rules/effect-promise-rule-bindings.js +41 -0
  223. package/dist/rules/effect-promise-rule-bindings.js.map +1 -0
  224. package/dist/rules/effect-promise-runtime-arguments.d.ts +18 -0
  225. package/dist/rules/effect-promise-runtime-arguments.d.ts.map +1 -0
  226. package/dist/rules/effect-promise-runtime-arguments.js +49 -0
  227. package/dist/rules/effect-promise-runtime-arguments.js.map +1 -0
  228. package/dist/rules/effect-promise-runtime-call-targets.d.ts +21 -0
  229. package/dist/rules/effect-promise-runtime-call-targets.d.ts.map +1 -0
  230. package/dist/rules/effect-promise-runtime-call-targets.js +55 -0
  231. package/dist/rules/effect-promise-runtime-call-targets.js.map +1 -0
  232. package/dist/rules/effect-promise-runtime-callable-properties.d.ts +20 -0
  233. package/dist/rules/effect-promise-runtime-callable-properties.d.ts.map +1 -0
  234. package/dist/rules/effect-promise-runtime-callable-properties.js +30 -0
  235. package/dist/rules/effect-promise-runtime-callable-properties.js.map +1 -0
  236. package/dist/rules/effect-promise-runtime-callables.d.ts +51 -0
  237. package/dist/rules/effect-promise-runtime-callables.d.ts.map +1 -0
  238. package/dist/rules/effect-promise-runtime-callables.js +214 -0
  239. package/dist/rules/effect-promise-runtime-callables.js.map +1 -0
  240. package/dist/rules/effect-promise-runtime-choice-operations.d.ts +32 -0
  241. package/dist/rules/effect-promise-runtime-choice-operations.d.ts.map +1 -0
  242. package/dist/rules/effect-promise-runtime-choice-operations.js +145 -0
  243. package/dist/rules/effect-promise-runtime-choice-operations.js.map +1 -0
  244. package/dist/rules/effect-promise-runtime-choice.d.ts +26 -0
  245. package/dist/rules/effect-promise-runtime-choice.d.ts.map +1 -0
  246. package/dist/rules/effect-promise-runtime-choice.js +95 -0
  247. package/dist/rules/effect-promise-runtime-choice.js.map +1 -0
  248. package/dist/rules/effect-promise-runtime-control-branches.d.ts +14 -0
  249. package/dist/rules/effect-promise-runtime-control-branches.d.ts.map +1 -0
  250. package/dist/rules/effect-promise-runtime-control-branches.js +74 -0
  251. package/dist/rules/effect-promise-runtime-control-branches.js.map +1 -0
  252. package/dist/rules/effect-promise-runtime-control-completions.d.ts +26 -0
  253. package/dist/rules/effect-promise-runtime-control-completions.d.ts.map +1 -0
  254. package/dist/rules/effect-promise-runtime-control-completions.js +116 -0
  255. package/dist/rules/effect-promise-runtime-control-completions.js.map +1 -0
  256. package/dist/rules/effect-promise-runtime-control-flow.d.ts +9 -0
  257. package/dist/rules/effect-promise-runtime-control-flow.d.ts.map +1 -0
  258. package/dist/rules/effect-promise-runtime-control-flow.js +94 -0
  259. package/dist/rules/effect-promise-runtime-control-flow.js.map +1 -0
  260. package/dist/rules/effect-promise-runtime-control-patterns.d.ts +15 -0
  261. package/dist/rules/effect-promise-runtime-control-patterns.d.ts.map +1 -0
  262. package/dist/rules/effect-promise-runtime-control-patterns.js +84 -0
  263. package/dist/rules/effect-promise-runtime-control-patterns.js.map +1 -0
  264. package/dist/rules/effect-promise-runtime-control-scalars.d.ts +23 -0
  265. package/dist/rules/effect-promise-runtime-control-scalars.d.ts.map +1 -0
  266. package/dist/rules/effect-promise-runtime-control-scalars.js +178 -0
  267. package/dist/rules/effect-promise-runtime-control-scalars.js.map +1 -0
  268. package/dist/rules/effect-promise-runtime-expressions.d.ts +22 -0
  269. package/dist/rules/effect-promise-runtime-expressions.d.ts.map +1 -0
  270. package/dist/rules/effect-promise-runtime-expressions.js +265 -0
  271. package/dist/rules/effect-promise-runtime-expressions.js.map +1 -0
  272. package/dist/rules/effect-promise-runtime-heap.d.ts +39 -0
  273. package/dist/rules/effect-promise-runtime-heap.d.ts.map +1 -0
  274. package/dist/rules/effect-promise-runtime-heap.js +73 -0
  275. package/dist/rules/effect-promise-runtime-heap.js.map +1 -0
  276. package/dist/rules/effect-promise-runtime-interpreter.d.ts +39 -0
  277. package/dist/rules/effect-promise-runtime-interpreter.d.ts.map +1 -0
  278. package/dist/rules/effect-promise-runtime-interpreter.js +260 -0
  279. package/dist/rules/effect-promise-runtime-interpreter.js.map +1 -0
  280. package/dist/rules/effect-promise-runtime-intrinsics.d.ts +15 -0
  281. package/dist/rules/effect-promise-runtime-intrinsics.d.ts.map +1 -0
  282. package/dist/rules/effect-promise-runtime-intrinsics.js +54 -0
  283. package/dist/rules/effect-promise-runtime-intrinsics.js.map +1 -0
  284. package/dist/rules/effect-promise-runtime-loops.d.ts +9 -0
  285. package/dist/rules/effect-promise-runtime-loops.d.ts.map +1 -0
  286. package/dist/rules/effect-promise-runtime-loops.js +277 -0
  287. package/dist/rules/effect-promise-runtime-loops.js.map +1 -0
  288. package/dist/rules/effect-promise-runtime-members.d.ts +28 -0
  289. package/dist/rules/effect-promise-runtime-members.d.ts.map +1 -0
  290. package/dist/rules/effect-promise-runtime-members.js +88 -0
  291. package/dist/rules/effect-promise-runtime-members.js.map +1 -0
  292. package/dist/rules/effect-promise-runtime-memo.d.ts +40 -0
  293. package/dist/rules/effect-promise-runtime-memo.d.ts.map +1 -0
  294. package/dist/rules/effect-promise-runtime-memo.js +124 -0
  295. package/dist/rules/effect-promise-runtime-memo.js.map +1 -0
  296. package/dist/rules/effect-promise-runtime-model.d.ts +251 -0
  297. package/dist/rules/effect-promise-runtime-model.d.ts.map +1 -0
  298. package/dist/rules/effect-promise-runtime-model.js +84 -0
  299. package/dist/rules/effect-promise-runtime-model.js.map +1 -0
  300. package/dist/rules/effect-promise-runtime-mutations.d.ts +17 -0
  301. package/dist/rules/effect-promise-runtime-mutations.d.ts.map +1 -0
  302. package/dist/rules/effect-promise-runtime-mutations.js +165 -0
  303. package/dist/rules/effect-promise-runtime-mutations.js.map +1 -0
  304. package/dist/rules/effect-promise-runtime-patterns.d.ts +21 -0
  305. package/dist/rules/effect-promise-runtime-patterns.d.ts.map +1 -0
  306. package/dist/rules/effect-promise-runtime-patterns.js +179 -0
  307. package/dist/rules/effect-promise-runtime-patterns.js.map +1 -0
  308. package/dist/rules/effect-promise-runtime-proof.d.ts +74 -0
  309. package/dist/rules/effect-promise-runtime-proof.d.ts.map +1 -0
  310. package/dist/rules/effect-promise-runtime-proof.js +253 -0
  311. package/dist/rules/effect-promise-runtime-proof.js.map +1 -0
  312. package/dist/rules/effect-promise-runtime-reporting.d.ts +16 -0
  313. package/dist/rules/effect-promise-runtime-reporting.d.ts.map +1 -0
  314. package/dist/rules/effect-promise-runtime-reporting.js +11 -0
  315. package/dist/rules/effect-promise-runtime-reporting.js.map +1 -0
  316. package/dist/rules/effect-promise-runtime-scalar-operations.d.ts +2 -0
  317. package/dist/rules/effect-promise-runtime-scalar-operations.d.ts.map +1 -0
  318. package/dist/rules/effect-promise-runtime-scalar-operations.js +5 -0
  319. package/dist/rules/effect-promise-runtime-scalar-operations.js.map +1 -0
  320. package/dist/rules/effect-promise-runtime-scalars.d.ts +24 -0
  321. package/dist/rules/effect-promise-runtime-scalars.d.ts.map +1 -0
  322. package/dist/rules/effect-promise-runtime-scalars.js +125 -0
  323. package/dist/rules/effect-promise-runtime-scalars.js.map +1 -0
  324. package/dist/rules/effect-promise-runtime-statements.d.ts +15 -0
  325. package/dist/rules/effect-promise-runtime-statements.d.ts.map +1 -0
  326. package/dist/rules/effect-promise-runtime-statements.js +251 -0
  327. package/dist/rules/effect-promise-runtime-statements.js.map +1 -0
  328. package/dist/rules/effect-promise-runtime-store.d.ts +44 -0
  329. package/dist/rules/effect-promise-runtime-store.d.ts.map +1 -0
  330. package/dist/rules/effect-promise-runtime-store.js +186 -0
  331. package/dist/rules/effect-promise-runtime-store.js.map +1 -0
  332. package/dist/rules/effect-promise-runtime-structures.d.ts +9 -0
  333. package/dist/rules/effect-promise-runtime-structures.d.ts.map +1 -0
  334. package/dist/rules/effect-promise-runtime-structures.js +181 -0
  335. package/dist/rules/effect-promise-runtime-structures.js.map +1 -0
  336. package/dist/rules/effect-promise-runtime-switch.d.ts +9 -0
  337. package/dist/rules/effect-promise-runtime-switch.d.ts.map +1 -0
  338. package/dist/rules/effect-promise-runtime-switch.js +91 -0
  339. package/dist/rules/effect-promise-runtime-switch.js.map +1 -0
  340. package/dist/rules/effect-promise-runtime-tasks.d.ts +72 -0
  341. package/dist/rules/effect-promise-runtime-tasks.d.ts.map +1 -0
  342. package/dist/rules/effect-promise-runtime-tasks.js +158 -0
  343. package/dist/rules/effect-promise-runtime-tasks.js.map +1 -0
  344. package/dist/rules/effect-promise-runtime-this.d.ts +14 -0
  345. package/dist/rules/effect-promise-runtime-this.d.ts.map +1 -0
  346. package/dist/rules/effect-promise-runtime-this.js +29 -0
  347. package/dist/rules/effect-promise-runtime-this.js.map +1 -0
  348. package/dist/rules/effect-promise-runtime-try.d.ts +9 -0
  349. package/dist/rules/effect-promise-runtime-try.d.ts.map +1 -0
  350. package/dist/rules/effect-promise-runtime-try.js +94 -0
  351. package/dist/rules/effect-promise-runtime-try.js.map +1 -0
  352. package/dist/rules/effect-promise-runtime-values.d.ts +88 -0
  353. package/dist/rules/effect-promise-runtime-values.d.ts.map +1 -0
  354. package/dist/rules/effect-promise-runtime-values.js +382 -0
  355. package/dist/rules/effect-promise-runtime-values.js.map +1 -0
  356. package/dist/rules/effect-promise-value-scopes.d.ts +94 -0
  357. package/dist/rules/effect-promise-value-scopes.d.ts.map +1 -0
  358. package/dist/rules/effect-promise-value-scopes.js +218 -0
  359. package/dist/rules/effect-promise-value-scopes.js.map +1 -0
  360. package/dist/rules/effect-recursion-ast.d.ts +14 -0
  361. package/dist/rules/effect-recursion-ast.d.ts.map +1 -0
  362. package/dist/rules/effect-recursion-ast.js +154 -0
  363. package/dist/rules/effect-recursion-ast.js.map +1 -0
  364. package/dist/rules/effect-recursion-execution.d.ts +15 -0
  365. package/dist/rules/effect-recursion-execution.d.ts.map +1 -0
  366. package/dist/rules/effect-recursion-execution.js +312 -0
  367. package/dist/rules/effect-recursion-execution.js.map +1 -0
  368. package/dist/rules/effect-recursion-generator.d.ts +17 -0
  369. package/dist/rules/effect-recursion-generator.d.ts.map +1 -0
  370. package/dist/rules/effect-recursion-generator.js +125 -0
  371. package/dist/rules/effect-recursion-generator.js.map +1 -0
  372. package/dist/rules/effect-recursion-local-bindings.d.ts +44 -0
  373. package/dist/rules/effect-recursion-local-bindings.d.ts.map +1 -0
  374. package/dist/rules/effect-recursion-local-bindings.js +99 -0
  375. package/dist/rules/effect-recursion-local-bindings.js.map +1 -0
  376. package/dist/rules/effect-recursion-phases.d.ts +40 -0
  377. package/dist/rules/effect-recursion-phases.d.ts.map +1 -0
  378. package/dist/rules/effect-recursion-phases.js +62 -0
  379. package/dist/rules/effect-recursion-phases.js.map +1 -0
  380. package/dist/rules/effect-recursion-source.d.ts +10 -0
  381. package/dist/rules/effect-recursion-source.d.ts.map +1 -0
  382. package/dist/rules/effect-recursion-source.js +182 -0
  383. package/dist/rules/effect-recursion-source.js.map +1 -0
  384. package/dist/rules/effect-recursion-viability.d.ts +66 -0
  385. package/dist/rules/effect-recursion-viability.d.ts.map +1 -0
  386. package/dist/rules/effect-recursion-viability.js +228 -0
  387. package/dist/rules/effect-recursion-viability.js.map +1 -0
  388. package/dist/rules/effect-rule-aliases.d.ts +14 -19
  389. package/dist/rules/effect-rule-aliases.d.ts.map +1 -1
  390. package/dist/rules/effect-rule-aliases.js +48 -30
  391. package/dist/rules/effect-rule-aliases.js.map +1 -1
  392. package/dist/rules/effect-rule-core.d.ts +4 -4
  393. package/dist/rules/effect-rule-core.d.ts.map +1 -1
  394. package/dist/rules/effect-rule-core.js +42 -44
  395. package/dist/rules/effect-rule-core.js.map +1 -1
  396. package/dist/rules/effect-rule-names.d.ts.map +1 -1
  397. package/dist/rules/effect-rule-names.js +1 -1
  398. package/dist/rules/effect-rule-names.js.map +1 -1
  399. package/dist/rules/effect-source-navigation-lexer.d.ts +13 -0
  400. package/dist/rules/effect-source-navigation-lexer.d.ts.map +1 -0
  401. package/dist/rules/effect-source-navigation-lexer.js +228 -0
  402. package/dist/rules/effect-source-navigation-lexer.js.map +1 -0
  403. package/dist/rules/effect-source-navigation.d.ts +2 -2
  404. package/dist/rules/effect-source-navigation.d.ts.map +1 -1
  405. package/dist/rules/effect-source-navigation.js +104 -101
  406. package/dist/rules/effect-source-navigation.js.map +1 -1
  407. package/dist/rules/effect-strict-ast-helpers.d.ts +82 -0
  408. package/dist/rules/effect-strict-ast-helpers.d.ts.map +1 -0
  409. package/dist/rules/effect-strict-ast-helpers.js +194 -0
  410. package/dist/rules/effect-strict-ast-helpers.js.map +1 -0
  411. package/dist/rules/effect-strict-ast-specs.d.ts.map +1 -1
  412. package/dist/rules/effect-strict-ast-specs.js +14 -16
  413. package/dist/rules/effect-strict-ast-specs.js.map +1 -1
  414. package/dist/rules/effect-strict-internals.d.ts +2 -196
  415. package/dist/rules/effect-strict-internals.d.ts.map +1 -1
  416. package/dist/rules/effect-strict-internals.js +2 -417
  417. package/dist/rules/effect-strict-internals.js.map +1 -1
  418. package/dist/rules/effect-strict-source-predicates.d.ts +120 -0
  419. package/dist/rules/effect-strict-source-predicates.d.ts.map +1 -0
  420. package/dist/rules/effect-strict-source-predicates.js +234 -0
  421. package/dist/rules/effect-strict-source-predicates.js.map +1 -0
  422. package/dist/rules/effect-sync-promise-scope-index.d.ts +44 -0
  423. package/dist/rules/effect-sync-promise-scope-index.d.ts.map +1 -0
  424. package/dist/rules/effect-sync-promise-scope-index.js +345 -0
  425. package/dist/rules/effect-sync-promise-scope-index.js.map +1 -0
  426. package/dist/rules/effect-sync-promise-scopes.d.ts +10 -0
  427. package/dist/rules/effect-sync-promise-scopes.d.ts.map +1 -0
  428. package/dist/rules/effect-sync-promise-scopes.js +115 -0
  429. package/dist/rules/effect-sync-promise-scopes.js.map +1 -0
  430. package/dist/rules/effect-sync-promise-source.d.ts +2 -0
  431. package/dist/rules/effect-sync-promise-source.d.ts.map +1 -0
  432. package/dist/rules/effect-sync-promise-source.js +5 -0
  433. package/dist/rules/effect-sync-promise-source.js.map +1 -0
  434. package/dist/rules/plugin-commented-out-code-jsx-scanner.d.ts +21 -0
  435. package/dist/rules/plugin-commented-out-code-jsx-scanner.d.ts.map +1 -0
  436. package/dist/rules/plugin-commented-out-code-jsx-scanner.js +200 -0
  437. package/dist/rules/plugin-commented-out-code-jsx-scanner.js.map +1 -0
  438. package/dist/rules/plugin-commented-out-code-lexical-primitives.d.ts +139 -0
  439. package/dist/rules/plugin-commented-out-code-lexical-primitives.d.ts.map +1 -0
  440. package/dist/rules/plugin-commented-out-code-lexical-primitives.js +244 -0
  441. package/dist/rules/plugin-commented-out-code-lexical-primitives.js.map +1 -0
  442. package/dist/rules/plugin-commented-out-code-rule.d.ts +13 -0
  443. package/dist/rules/plugin-commented-out-code-rule.d.ts.map +1 -1
  444. package/dist/rules/plugin-commented-out-code-rule.js +174 -82
  445. package/dist/rules/plugin-commented-out-code-rule.js.map +1 -1
  446. package/dist/rules/plugin-commented-out-code-source-scanner.d.ts +8 -0
  447. package/dist/rules/plugin-commented-out-code-source-scanner.d.ts.map +1 -0
  448. package/dist/rules/plugin-commented-out-code-source-scanner.js +228 -0
  449. package/dist/rules/plugin-commented-out-code-source-scanner.js.map +1 -0
  450. package/package.json +1 -1
@@ -0,0 +1,40 @@
1
+ import type { ASTNode } from './effect-ast';
2
+ import type { EffectAPIBindings } from './effect-boundary-ast-shared';
3
+ import type { ScopeStack } from './effect-ast-scope';
4
+ /**
5
+ * Effect v4 APIs whose function arguments execute during construction.
6
+ *
7
+ * @internal
8
+ */
9
+ export type EagerEffectAPI = 'catchEager' | 'flatMapEager' | 'fnUntracedEager' | 'mapEager' | 'matchCauseEffectEager';
10
+ /**
11
+ * Import identities required by recursion phase analysis.
12
+ *
13
+ * @internal
14
+ */
15
+ export interface RecursionPhaseBindings {
16
+ effect: EffectAPIBindings;
17
+ eagerFunctions: ReadonlyMap<string, EagerEffectAPI>;
18
+ }
19
+ /**
20
+ * Build exact local identities for the eager v4 Effect APIs.
21
+ *
22
+ * @param source - Complete source used to resolve named import aliases.
23
+ * @param effect - Existing namespace and general Effect bindings.
24
+ * @returns Import identities used by the execution-phase walker.
25
+ * @throws Does not throw.
26
+ * @internal
27
+ */
28
+ export declare const recursionPhaseBindingsFor: (source: string, effect: EffectAPIBindings) => RecursionPhaseBindings;
29
+ /**
30
+ * Resolve an eager API call using imported binding identity and lexical scope.
31
+ *
32
+ * @param node - Candidate CallExpression.
33
+ * @param bindings - Exact Effect identities for the source file.
34
+ * @param scopes - Lexical value scopes visible at the call.
35
+ * @returns The canonical eager API name, when verified.
36
+ * @throws Does not throw.
37
+ * @internal
38
+ */
39
+ export declare const eagerEffectAPIName: (node: ASTNode, bindings: RecursionPhaseBindings, scopes: ScopeStack) => EagerEffectAPI | undefined;
40
+ //# sourceMappingURL=effect-recursion-phases.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effect-recursion-phases.d.ts","sourceRoot":"","sources":["../../src/rules/effect-recursion-phases.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGrD;;;;GAIG;AACH,MAAM,MAAM,cAAc,GACtB,YAAY,GACZ,cAAc,GACd,iBAAiB,GACjB,UAAU,GACV,uBAAuB,CAAC;AAE5B;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CACrD;AAsBD;;;;;;;;GAQG;AACH,eAAO,MAAM,yBAAyB,GACpC,QAAQ,MAAM,EACd,QAAQ,iBAAiB,KACxB,sBAQF,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,kBAAkB,GAC7B,MAAM,OAAO,EACb,UAAU,sBAAsB,EAChC,QAAQ,UAAU,KACjB,cAAc,GAAG,SAcnB,CAAC"}
@@ -0,0 +1,62 @@
1
+ /* -------------------------------------------------------------------------- */
2
+ /* Imported Effect identities whose callbacks execute eagerly. */
3
+ /* -------------------------------------------------------------------------- */
4
+ import { childNode, identifierName } from './effect-ast.js';
5
+ import { effectCallAPIName, isShadowed, unwrappedExpression } from './effect-boundary-ast-shared.js';
6
+ import { effectFunctionAliases } from './effect-rule-aliases.js';
7
+ const eagerAPINames = [
8
+ 'catchEager',
9
+ 'flatMapEager',
10
+ 'fnUntracedEager',
11
+ 'mapEager',
12
+ 'matchCauseEffectEager',
13
+ ];
14
+ const eagerAPIName = (value) => eagerAPINames.find((APIName) => APIName === value);
15
+ const memberAPIName = (node, bindings, scopes) => {
16
+ const propertyName = effectCallAPIName(node, bindings.effect, scopes);
17
+ return eagerAPIName(propertyName);
18
+ };
19
+ /**
20
+ * Build exact local identities for the eager v4 Effect APIs.
21
+ *
22
+ * @param source - Complete source used to resolve named import aliases.
23
+ * @param effect - Existing namespace and general Effect bindings.
24
+ * @returns Import identities used by the execution-phase walker.
25
+ * @throws Does not throw.
26
+ * @internal
27
+ */
28
+ export const recursionPhaseBindingsFor = (source, effect) => {
29
+ const eagerFunctions = new Map();
30
+ for (const APIName of eagerAPINames) {
31
+ for (const localName of effectFunctionAliases(source, 'Effect', APIName)) {
32
+ eagerFunctions.set(localName, APIName);
33
+ }
34
+ }
35
+ return { eagerFunctions, effect };
36
+ };
37
+ /**
38
+ * Resolve an eager API call using imported binding identity and lexical scope.
39
+ *
40
+ * @param node - Candidate CallExpression.
41
+ * @param bindings - Exact Effect identities for the source file.
42
+ * @param scopes - Lexical value scopes visible at the call.
43
+ * @returns The canonical eager API name, when verified.
44
+ * @throws Does not throw.
45
+ * @internal
46
+ */
47
+ export const eagerEffectAPIName = (node, bindings, scopes) => {
48
+ if (node.type !== 'CallExpression') {
49
+ return undefined;
50
+ }
51
+ const callee = unwrappedExpression(childNode(node, 'callee'));
52
+ const memberName = memberAPIName(node, bindings, scopes);
53
+ if (memberName) {
54
+ return memberName;
55
+ }
56
+ const directName = identifierName(callee);
57
+ if (!directName || isShadowed(directName, scopes)) {
58
+ return undefined;
59
+ }
60
+ return bindings.eagerFunctions.get(directName);
61
+ };
62
+ //# sourceMappingURL=effect-recursion-phases.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effect-recursion-phases.js","sourceRoot":"","sources":["../../src/rules/effect-recursion-phases.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,gFAAgF;AAChF,gFAAgF;AAEhF,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAIlG,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAwB9D,MAAM,aAAa,GAA8B;IAC/C,YAAY;IACZ,cAAc;IACd,iBAAiB;IACjB,UAAU;IACV,uBAAuB;CACxB,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,KAAyB,EAA8B,EAAE,CAC7E,aAAa,CAAC,IAAI,CAAC,CAAC,OAAO,EAAW,EAAE,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC;AAE9D,MAAM,aAAa,GAAG,CACpB,IAAa,EACb,QAAgC,EAChC,MAAkB,EACU,EAAE;IAC9B,MAAM,YAAY,GAAG,iBAAiB,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtE,OAAO,YAAY,CAAC,YAAY,CAAC,CAAC;AACpC,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CACvC,MAAc,EACd,MAAyB,EACD,EAAE;IAC1B,MAAM,cAAc,GAAG,IAAI,GAAG,EAA0B,CAAC;IACzD,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE,CAAC;QACpC,KAAK,MAAM,SAAS,IAAI,qBAAqB,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC;YACzE,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IACD,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC;AACpC,CAAC,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,IAAa,EACb,QAAgC,EAChC,MAAkB,EACU,EAAE;IAC9B,IAAI,IAAI,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;QACnC,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,MAAM,GAAG,mBAAmB,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC9D,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IACzD,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IAC1C,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,CAAC;QAClD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AACjD,CAAC,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Detect eager recursive Effect construction when an AST is unavailable.
3
+ *
4
+ * @param source - Complete TypeScript source text.
5
+ * @returns Whether a supported function declaration or const arrow eagerly recurses.
6
+ * @throws Does not throw.
7
+ * @internal
8
+ */
9
+ export declare const hasRecursiveEffectSource: (source: string) => boolean;
10
+ //# sourceMappingURL=effect-recursion-source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effect-recursion-source.d.ts","sourceRoot":"","sources":["../../src/rules/effect-recursion-source.ts"],"names":[],"mappings":"AAiOA;;;;;;;GAOG;AACH,eAAO,MAAM,wBAAwB,GAAI,QAAQ,MAAM,KAAG,OAOzD,CAAC"}
@@ -0,0 +1,182 @@
1
+ /* -------------------------------------------------------------------------- */
2
+ /* Source fallback for execution-aware Effect recursion detection. */
3
+ /* -------------------------------------------------------------------------- */
4
+ import { Array, pipe } from 'effect';
5
+ import { canonicalizeEffectAPIAliases, effectImportAliases } from './effect-rule-aliases.js';
6
+ import { findBalancedCallEnd, findMatchingBrace, findStatementEnd, stripCommentsAndStrings, } from './effect-source-helpers.js';
7
+ const DEFERRED_EFFECT_CALLBACK = /\bEffect\.(?:flatMap|gen|map|succeed|suspend)\s*\(/g;
8
+ const escapedIdentifier = (name) => name.replace(/[.*+?^${}()|[\]\\]/g, String.raw `\$&`);
9
+ const headerBindsName = (header, name) => new RegExp(`(?:^|[({,])\\s*${escapedIdentifier(name)}\\s*(?=[:,)}=])`).test(header);
10
+ const findTopLevelToken = (source, start, token) => {
11
+ let depth = 0;
12
+ for (let index = start; index < source.length; index += 1) {
13
+ const char = source[index];
14
+ if (char === '(' || char === '[') {
15
+ depth += 1;
16
+ }
17
+ else if (char === ')' || char === ']') {
18
+ depth -= 1;
19
+ }
20
+ else if (depth === 0 && source.startsWith(token, index)) {
21
+ return index;
22
+ }
23
+ else if (depth === 0 && char === ';') {
24
+ return -1;
25
+ }
26
+ }
27
+ return -1;
28
+ };
29
+ const enclosingBlockStart = (source) => {
30
+ const stack = [];
31
+ for (let index = 0; index < source.length; index += 1) {
32
+ if (source[index] === '{') {
33
+ stack.push(index);
34
+ }
35
+ else if (source[index] === '}') {
36
+ stack.pop();
37
+ }
38
+ }
39
+ return (stack.at(-1) ?? -1) + 1;
40
+ };
41
+ const isShadowedRecursiveCall = (name, body, callIndex) => {
42
+ const escapedName = escapedIdentifier(name);
43
+ const prior = body.slice(0, callIndex);
44
+ if (/\bfunction\s*$/.test(prior)) {
45
+ return true;
46
+ }
47
+ const blockStart = enclosingBlockStart(prior);
48
+ if (new RegExp(`\\b(?:class|const|function|let)\\s+${escapedName}\\b`).test(prior.slice(blockStart))) {
49
+ return true;
50
+ }
51
+ const arrowIndex = prior.lastIndexOf('=>');
52
+ const parameterStart = prior.lastIndexOf('(', arrowIndex);
53
+ return (arrowIndex !== -1 &&
54
+ parameterStart !== -1 &&
55
+ headerBindsName(prior.slice(parameterStart, arrowIndex), name));
56
+ };
57
+ const updateDepth = (char, depth) => {
58
+ if (char === '(' || char === '[' || char === '{') {
59
+ return depth + 1;
60
+ }
61
+ if (char === ')' || char === ']' || char === '}') {
62
+ return depth - 1;
63
+ }
64
+ return depth;
65
+ };
66
+ const rangeIfContains = (start, end, target) => {
67
+ if (start <= target && target < end) {
68
+ return { end, start };
69
+ }
70
+ return undefined;
71
+ };
72
+ const callArgumentAt = (source, openParen, callEnd, target) => {
73
+ let argumentStart = openParen + 1;
74
+ let depth = 0;
75
+ for (let index = argumentStart; index < callEnd; index += 1) {
76
+ if (source[index] === ',' && depth === 0) {
77
+ const targetRange = rangeIfContains(argumentStart, index, target);
78
+ if (targetRange) {
79
+ return targetRange;
80
+ }
81
+ argumentStart = index + 1;
82
+ }
83
+ depth = updateDepth(source[index] ?? '', depth);
84
+ }
85
+ return rangeIfContains(argumentStart, callEnd + 1, target);
86
+ };
87
+ const selfCallEnd = (source, target) => {
88
+ const openParen = source.indexOf('(', target);
89
+ if (openParen === -1) {
90
+ return target;
91
+ }
92
+ return findBalancedCallEnd(source, openParen);
93
+ };
94
+ const hasImmediateInvocationSuffix = (source, target) => {
95
+ const suffix = source.slice(selfCallEnd(source, target) + 1);
96
+ return /^\s*[)}]*\s*(?:\.\s*(?:apply|call)\s*\(|\(\s*\))/.test(suffix);
97
+ };
98
+ const isBareFunctionArgument = (source, range, target) => {
99
+ const argument = source.slice(range.start, range.end);
100
+ const relativeTarget = target - range.start;
101
+ const arrowIndex = argument.lastIndexOf('=>', relativeTarget);
102
+ const functionIndex = argument.lastIndexOf('function', relativeTarget);
103
+ if (arrowIndex === -1 && functionIndex === -1) {
104
+ return false;
105
+ }
106
+ return !hasImmediateInvocationSuffix(source.slice(0, range.end), target);
107
+ };
108
+ const isDeferredEffectCallback = (source, target) => pipe(Array.fromIterable(source.matchAll(DEFERRED_EFFECT_CALLBACK)), Array.some((match) => {
109
+ const openParen = source.indexOf('(', match.index);
110
+ if (openParen === -1) {
111
+ return false;
112
+ }
113
+ const callEnd = findBalancedCallEnd(source, openParen);
114
+ if (target < openParen || target > callEnd) {
115
+ return false;
116
+ }
117
+ const range = callArgumentAt(source, openParen, callEnd, target);
118
+ return range !== undefined && isBareFunctionArgument(source, range, target);
119
+ }));
120
+ const hasUnsafeRecursiveBody = (name, body) => {
121
+ if (!/\bEffect\.[A-Za-z_$][\w$]*\s*\(/.test(body)) {
122
+ return false;
123
+ }
124
+ return pipe(Array.fromIterable(body.matchAll(new RegExp(`\\b${escapedIdentifier(name)}\\s*\\(`, 'g'))), Array.some((match) => !isDeferredEffectCallback(body, match.index) &&
125
+ !isShadowedRecursiveCall(name, body, match.index)));
126
+ };
127
+ const recursiveBody = (source, bodyStart) => {
128
+ if (source[bodyStart] === '{') {
129
+ return source.slice(bodyStart + 1, findMatchingBrace(source, bodyStart));
130
+ }
131
+ return source.slice(bodyStart, findStatementEnd(source, bodyStart));
132
+ };
133
+ const hasUnsafeRecursiveFunction = (source) => pipe(Array.fromIterable(source.matchAll(/\b(async\s+)?function\s*(\*)?\s*([A-Za-z_$][\w$]*)\s*(?:<[^>{;]*>)?\s*\(/g)), Array.some((match) => {
134
+ const [, asyncKeyword, star, name] = match;
135
+ const parameterStart = source.indexOf('(', match.index);
136
+ const bodyStart = findTopLevelToken(source, parameterStart, '{');
137
+ if (asyncKeyword || star || bodyStart === -1) {
138
+ return false;
139
+ }
140
+ const header = source.slice(parameterStart, bodyStart);
141
+ const body = recursiveBody(source, bodyStart);
142
+ return !headerBindsName(header, name) && hasUnsafeRecursiveBody(name, header + body);
143
+ }));
144
+ const firstCodeIndex = (source, start) => {
145
+ let index = start;
146
+ while (/\s/.test(source[index] ?? '')) {
147
+ index += 1;
148
+ }
149
+ return index;
150
+ };
151
+ const hasUnsafeArrowMatch = (source, match) => {
152
+ const [, name] = match;
153
+ const headerStart = match.index + match[0].length;
154
+ const arrowIndex = findTopLevelToken(source, headerStart, '=>');
155
+ if (arrowIndex === -1) {
156
+ return false;
157
+ }
158
+ const header = source.slice(headerStart, arrowIndex);
159
+ const bodyStart = firstCodeIndex(source, arrowIndex + 2);
160
+ const body = recursiveBody(source, bodyStart);
161
+ return (!/^\s*async\b/.test(header) &&
162
+ !headerBindsName(header, name) &&
163
+ hasUnsafeRecursiveBody(name, header + body));
164
+ };
165
+ const hasUnsafeRecursiveArrow = (source) => pipe(Array.fromIterable(source.matchAll(/\bconst\s+([A-Za-z_$][\w$]*)\s*=/g)), Array.some((match) => hasUnsafeArrowMatch(source, match)));
166
+ /**
167
+ * Detect eager recursive Effect construction when an AST is unavailable.
168
+ *
169
+ * @param source - Complete TypeScript source text.
170
+ * @returns Whether a supported function declaration or const arrow eagerly recurses.
171
+ * @throws Does not throw.
172
+ * @internal
173
+ */
174
+ export const hasRecursiveEffectSource = (source) => {
175
+ const canonicalSource = canonicalizeEffectAPIAliases(source);
176
+ if (!effectImportAliases(canonicalSource).includes('Effect')) {
177
+ return false;
178
+ }
179
+ const code = stripCommentsAndStrings(canonicalSource);
180
+ return hasUnsafeRecursiveFunction(code) || hasUnsafeRecursiveArrow(code);
181
+ };
182
+ //# sourceMappingURL=effect-recursion-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effect-recursion-source.js","sourceRoot":"","sources":["../../src/rules/effect-recursion-source.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ import type { EagerEffectAPI, RecursionPhaseBindings } from './effect-recursion-phases';
2
+ import type { ASTNode } from './effect-ast';
3
+ import type { ScopeStack } from './effect-ast-scope';
4
+ /**
5
+ * Statically known construction-time state of an Effect expression.
6
+ *
7
+ * @internal
8
+ */
9
+ export type EffectResolution = 'failure' | 'pending' | 'success' | 'unknown';
10
+ /**
11
+ * Exact named imports needed by the construction-time classifier.
12
+ *
13
+ * @internal
14
+ */
15
+ export interface EffectResolutionBindings {
16
+ delayFunctions: ReadonlySet<string>;
17
+ failureFunctions: ReadonlyMap<string, 'die' | 'fail' | 'failCause'>;
18
+ phase: RecursionPhaseBindings;
19
+ }
20
+ /**
21
+ * Canonical eager call shape after normalizing data-first and data-last forms.
22
+ *
23
+ * @internal
24
+ */
25
+ export interface EagerEffectInvocation {
26
+ APIName: EagerEffectAPI;
27
+ callback?: ASTNode;
28
+ input?: ASTNode;
29
+ }
30
+ /**
31
+ * Build exact named-import identities used by resolution classification.
32
+ *
33
+ * @internal
34
+ */
35
+ export declare const effectResolutionBindingsFor: (source: string, phase: RecursionPhaseBindings) => EffectResolutionBindings;
36
+ /**
37
+ * Classify only Effect expressions whose construction-time state is provable.
38
+ *
39
+ * @internal
40
+ */
41
+ export declare const effectResolutionOf: (value: ASTNode | undefined, bindings: EffectResolutionBindings, scopes: ScopeStack) => EffectResolution;
42
+ /**
43
+ * Check whether a resolved failure is guaranteed to contain a typed Fail reason.
44
+ *
45
+ * @internal
46
+ */
47
+ export declare const isCatchableFailure: (value: ASTNode | undefined, bindings: EffectResolutionBindings, scopes: ScopeStack) => boolean;
48
+ /**
49
+ * Normalize an eager Effect call without guessing through dynamic values.
50
+ *
51
+ * @internal
52
+ */
53
+ export declare const eagerEffectInvocation: (node: ASTNode, bindings: EffectResolutionBindings, scopes: ScopeStack) => EagerEffectInvocation | undefined;
54
+ /**
55
+ * Pick the only match callback selected by a statically resolved input.
56
+ *
57
+ * @internal
58
+ */
59
+ export declare const selectedMatchCallback: (options: ASTNode | undefined, resolution: EffectResolution) => ASTNode | undefined;
60
+ /**
61
+ * Select the only eager callback proven to execute during construction.
62
+ *
63
+ * @internal
64
+ */
65
+ export declare const selectedEagerCallback: (node: ASTNode, bindings: EffectResolutionBindings, scopes: ScopeStack) => ASTNode | undefined;
66
+ //# sourceMappingURL=effect-recursion-viability.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effect-recursion-viability.d.ts","sourceRoot":"","sources":["../../src/rules/effect-recursion-viability.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAGxF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAIrD;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AAE7E;;;;GAIG;AACH,MAAM,WAAW,wBAAwB;IACvC,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACpC,gBAAgB,EAAE,WAAW,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,WAAW,CAAC,CAAC;IACpE,KAAK,EAAE,sBAAsB,CAAC;CAC/B;AAED;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,cAAc,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAiED;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,GACtC,QAAQ,MAAM,EACd,OAAO,sBAAsB,KAC5B,wBAYF,CAAC;AAsBF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAC7B,OAAO,OAAO,GAAG,SAAS,EAC1B,UAAU,wBAAwB,EAClC,QAAQ,UAAU,KACjB,gBASF,CAAC;AAeF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAC7B,OAAO,OAAO,GAAG,SAAS,EAC1B,UAAU,wBAAwB,EAClC,QAAQ,UAAU,KACjB,OASF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,GAChC,MAAM,OAAO,EACb,UAAU,wBAAwB,EAClC,QAAQ,UAAU,KACjB,qBAAqB,GAAG,SAM1B,CAAC;AAkDF;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,GAChC,SAAS,OAAO,GAAG,SAAS,EAC5B,YAAY,gBAAgB,KAC3B,OAAO,GAAG,SAcZ,CAAC;AA4BF;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,GAChC,MAAM,OAAO,EACb,UAAU,wBAAwB,EAClC,QAAQ,UAAU,KACjB,OAAO,GAAG,SAiBZ,CAAC"}
@@ -0,0 +1,228 @@
1
+ /* -------------------------------------------------------------------------- */
2
+ /* Construction-time viability for Effect v4 eager combinators. */
3
+ /* -------------------------------------------------------------------------- */
4
+ import { childNode, childNodes, identifierName } from './effect-ast.js';
5
+ import { effectCallAPIName, isShadowed, unwrappedExpression } from './effect-boundary-ast-shared.js';
6
+ import { eagerEffectAPIName } from './effect-recursion-phases.js';
7
+ import { effectFunctionAliases } from './effect-rule-aliases.js';
8
+ const directInvocation = (node, APIName) => {
9
+ if (APIName === 'fnUntracedEager') {
10
+ return { APIName };
11
+ }
12
+ const [input, callback] = childNodes(node, 'arguments');
13
+ if (!callback) {
14
+ return { APIName };
15
+ }
16
+ return { APIName, callback, input };
17
+ };
18
+ const onlyArgument = (node) => {
19
+ const argumentsValue = childNodes(node, 'arguments');
20
+ if (argumentsValue.length === 1) {
21
+ return argumentsValue[0];
22
+ }
23
+ return undefined;
24
+ };
25
+ const curriedAPIName = (call, bindings, scopes) => {
26
+ const APIName = eagerEffectAPIName(call, bindings.phase, scopes);
27
+ if (APIName === 'fnUntracedEager') {
28
+ return undefined;
29
+ }
30
+ return APIName;
31
+ };
32
+ const curriedArguments = (node, innerCall) => {
33
+ const callback = onlyArgument(innerCall);
34
+ const [input] = childNodes(node, 'arguments');
35
+ if (!callback || !input) {
36
+ return undefined;
37
+ }
38
+ return { callback, input };
39
+ };
40
+ const curriedInvocation = (node, bindings, scopes) => {
41
+ const innerCall = unwrappedExpression(childNode(node, 'callee'));
42
+ if (innerCall?.type !== 'CallExpression') {
43
+ return undefined;
44
+ }
45
+ const APIName = curriedAPIName(innerCall, bindings, scopes);
46
+ if (!APIName) {
47
+ return undefined;
48
+ }
49
+ const argumentsValue = curriedArguments(node, innerCall);
50
+ if (!argumentsValue) {
51
+ return undefined;
52
+ }
53
+ return { APIName, ...argumentsValue };
54
+ };
55
+ /**
56
+ * Build exact named-import identities used by resolution classification.
57
+ *
58
+ * @internal
59
+ */
60
+ export const effectResolutionBindingsFor = (source, phase) => {
61
+ const failureFunctions = new Map();
62
+ for (const APIName of ['die', 'fail', 'failCause']) {
63
+ for (const localName of effectFunctionAliases(source, 'Effect', APIName)) {
64
+ failureFunctions.set(localName, APIName);
65
+ }
66
+ }
67
+ return {
68
+ delayFunctions: new Set(effectFunctionAliases(source, 'Effect', 'delay')),
69
+ failureFunctions,
70
+ phase,
71
+ };
72
+ };
73
+ const directCanonicalName = (node, bindings, scopes) => {
74
+ const callee = unwrappedExpression(childNode(node, 'callee'));
75
+ const name = identifierName(callee);
76
+ if (!name || isShadowed(name, scopes)) {
77
+ return undefined;
78
+ }
79
+ const failureAPIName = bindings.failureFunctions.get(name);
80
+ if (failureAPIName) {
81
+ return failureAPIName;
82
+ }
83
+ if (bindings.delayFunctions.has(name)) {
84
+ return 'delay';
85
+ }
86
+ return undefined;
87
+ };
88
+ /**
89
+ * Classify only Effect expressions whose construction-time state is provable.
90
+ *
91
+ * @internal
92
+ */
93
+ export const effectResolutionOf = (value, bindings, scopes) => {
94
+ const node = unwrappedExpression(value);
95
+ if (node?.type !== 'CallExpression') {
96
+ return 'unknown';
97
+ }
98
+ const APIName = effectCallAPIName(node, bindings.phase.effect, scopes) ||
99
+ directCanonicalName(node, bindings, scopes);
100
+ return resolutionForAPIName(APIName);
101
+ };
102
+ const resolutionForAPIName = (APIName) => {
103
+ if (APIName === 'succeed') {
104
+ return 'success';
105
+ }
106
+ if (APIName === 'fail' || APIName === 'failCause' || APIName === 'die') {
107
+ return 'failure';
108
+ }
109
+ if (APIName === 'delay') {
110
+ return 'pending';
111
+ }
112
+ return 'unknown';
113
+ };
114
+ /**
115
+ * Check whether a resolved failure is guaranteed to contain a typed Fail reason.
116
+ *
117
+ * @internal
118
+ */
119
+ export const isCatchableFailure = (value, bindings, scopes) => {
120
+ const node = unwrappedExpression(value);
121
+ if (node?.type !== 'CallExpression') {
122
+ return false;
123
+ }
124
+ const APIName = effectCallAPIName(node, bindings.phase.effect, scopes) ||
125
+ directCanonicalName(node, bindings, scopes);
126
+ return APIName === 'fail';
127
+ };
128
+ /**
129
+ * Normalize an eager Effect call without guessing through dynamic values.
130
+ *
131
+ * @internal
132
+ */
133
+ export const eagerEffectInvocation = (node, bindings, scopes) => {
134
+ const APIName = eagerEffectAPIName(node, bindings.phase, scopes);
135
+ if (APIName) {
136
+ return directInvocation(node, APIName);
137
+ }
138
+ return curriedInvocation(node, bindings, scopes);
139
+ };
140
+ const reflectedString = (target, name) => {
141
+ const value = Reflect.get(target, name);
142
+ if (typeof value === 'string') {
143
+ return value;
144
+ }
145
+ return undefined;
146
+ };
147
+ const matchPropertyName = (property) => {
148
+ const key = childNode(property, 'key');
149
+ if (Reflect.get(property, 'computed') === true) {
150
+ return reflectedString(key ?? {}, 'value');
151
+ }
152
+ return identifierName(key) ?? reflectedString(key ?? {}, 'value');
153
+ };
154
+ const matchPropertySelection = (property, selectedName) => {
155
+ if (!property || property.type !== 'Property') {
156
+ return { isFinal: true };
157
+ }
158
+ const propertyName = matchPropertyName(property);
159
+ if (!propertyName) {
160
+ return { isFinal: true };
161
+ }
162
+ if (propertyName !== selectedName) {
163
+ return { isFinal: false };
164
+ }
165
+ if (Reflect.get(property, 'kind') !== 'init') {
166
+ return { isFinal: true };
167
+ }
168
+ return { isFinal: true, value: childNode(property, 'value') };
169
+ };
170
+ const matchCallbackName = (resolution) => {
171
+ if (resolution === 'success') {
172
+ return 'onSuccess';
173
+ }
174
+ return 'onFailure';
175
+ };
176
+ /**
177
+ * Pick the only match callback selected by a statically resolved input.
178
+ *
179
+ * @internal
180
+ */
181
+ export const selectedMatchCallback = (options, resolution) => {
182
+ const object = unwrappedExpression(options);
183
+ if (object?.type !== 'ObjectExpression') {
184
+ return undefined;
185
+ }
186
+ const selectedName = matchCallbackName(resolution);
187
+ const properties = childNodes(object, 'properties');
188
+ for (let index = properties.length - 1; index >= 0; index -= 1) {
189
+ const selection = matchPropertySelection(properties[index], selectedName);
190
+ if (selection.isFinal) {
191
+ return selection.value;
192
+ }
193
+ }
194
+ return undefined;
195
+ };
196
+ const isSuccessCallback = (APIName, resolution) => resolution === 'success' && (APIName === 'flatMapEager' || APIName === 'mapEager');
197
+ const isFailureCallback = (invocation, resolution, bindings, scopes) => resolution === 'failure' &&
198
+ invocation.APIName === 'catchEager' &&
199
+ isCatchableFailure(invocation.input, bindings, scopes);
200
+ const eagerMatchCallback = (invocation, resolution) => {
201
+ if (invocation.APIName === 'matchCauseEffectEager' &&
202
+ (resolution === 'success' || resolution === 'failure')) {
203
+ return selectedMatchCallback(invocation.callback, resolution);
204
+ }
205
+ return undefined;
206
+ };
207
+ /**
208
+ * Select the only eager callback proven to execute during construction.
209
+ *
210
+ * @internal
211
+ */
212
+ export const selectedEagerCallback = (node, bindings, scopes) => {
213
+ const invocation = eagerEffectInvocation(node, bindings, scopes);
214
+ if (!invocation?.input || !invocation.callback) {
215
+ return undefined;
216
+ }
217
+ const resolution = effectResolutionOf(invocation.input, bindings, scopes);
218
+ const matchCallback = eagerMatchCallback(invocation, resolution);
219
+ if (matchCallback) {
220
+ return matchCallback;
221
+ }
222
+ if (isSuccessCallback(invocation.APIName, resolution) ||
223
+ isFailureCallback(invocation, resolution, bindings, scopes)) {
224
+ return invocation.callback;
225
+ }
226
+ return undefined;
227
+ };
228
+ //# sourceMappingURL=effect-recursion-viability.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effect-recursion-viability.js","sourceRoot":"","sources":["../../src/rules/effect-recursion-viability.ts"],"names":[],"mappings":"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"}