@thethracian/oxlint-config 0.2.0 → 0.3.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 (279) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/README.md +125 -19
  3. package/dist/codemod-fix/cli.d.ts +3 -0
  4. package/dist/codemod-fix/cli.d.ts.map +1 -0
  5. package/dist/codemod-fix/cli.js +22 -0
  6. package/dist/codemod-fix/cli.js.map +1 -0
  7. package/dist/codemod-fix/index.d.ts +44 -0
  8. package/dist/codemod-fix/index.d.ts.map +1 -0
  9. package/dist/codemod-fix/index.js +110 -0
  10. package/dist/codemod-fix/index.js.map +1 -0
  11. package/dist/codemods/arrow-body-style.d.ts +7 -0
  12. package/dist/codemods/arrow-body-style.d.ts.map +1 -0
  13. package/dist/codemods/arrow-body-style.js +106 -0
  14. package/dist/codemods/arrow-body-style.js.map +1 -0
  15. package/dist/codemods/comment-format.d.ts +24 -0
  16. package/dist/codemods/comment-format.d.ts.map +1 -0
  17. package/dist/codemods/comment-format.js +100 -0
  18. package/dist/codemods/comment-format.js.map +1 -0
  19. package/dist/codemods/explicit-return-types.d.ts +7 -0
  20. package/dist/codemods/explicit-return-types.d.ts.map +1 -0
  21. package/dist/codemods/explicit-return-types.js +350 -0
  22. package/dist/codemods/explicit-return-types.js.map +1 -0
  23. package/dist/codemods/format-file-header.d.ts +7 -0
  24. package/dist/codemods/format-file-header.d.ts.map +1 -0
  25. package/dist/codemods/format-file-header.js +163 -0
  26. package/dist/codemods/format-file-header.js.map +1 -0
  27. package/dist/codemods/format-jsdoc-comments.d.ts +7 -0
  28. package/dist/codemods/format-jsdoc-comments.d.ts.map +1 -0
  29. package/dist/codemods/format-jsdoc-comments.js +129 -0
  30. package/dist/codemods/format-jsdoc-comments.js.map +1 -0
  31. package/dist/codemods/function-declarations.d.ts +7 -0
  32. package/dist/codemods/function-declarations.d.ts.map +1 -0
  33. package/dist/codemods/function-declarations.js +202 -0
  34. package/dist/codemods/function-declarations.js.map +1 -0
  35. package/dist/codemods/inline-export-lists.d.ts +7 -0
  36. package/dist/codemods/inline-export-lists.d.ts.map +1 -0
  37. package/dist/codemods/inline-export-lists.js +168 -0
  38. package/dist/codemods/inline-export-lists.js.map +1 -0
  39. package/dist/codemods/internal-export-docs.d.ts +7 -0
  40. package/dist/codemods/internal-export-docs.d.ts.map +1 -0
  41. package/dist/codemods/internal-export-docs.js +93 -0
  42. package/dist/codemods/internal-export-docs.js.map +1 -0
  43. package/dist/codemods/no-ternary-branch-initializers.d.ts +14 -0
  44. package/dist/codemods/no-ternary-branch-initializers.d.ts.map +1 -0
  45. package/dist/codemods/no-ternary-branch-initializers.js +240 -0
  46. package/dist/codemods/no-ternary-branch-initializers.js.map +1 -0
  47. package/dist/codemods/no-ternary-variable-initializers.d.ts +14 -0
  48. package/dist/codemods/no-ternary-variable-initializers.d.ts.map +1 -0
  49. package/dist/codemods/no-ternary-variable-initializers.js +235 -0
  50. package/dist/codemods/no-ternary-variable-initializers.js.map +1 -0
  51. package/dist/codemods/no-ternary.d.ts +7 -0
  52. package/dist/codemods/no-ternary.d.ts.map +1 -0
  53. package/dist/codemods/no-ternary.js +215 -0
  54. package/dist/codemods/no-ternary.js.map +1 -0
  55. package/dist/codemods/rename-acronyms.d.ts +8 -0
  56. package/dist/codemods/rename-acronyms.d.ts.map +1 -0
  57. package/dist/codemods/rename-acronyms.js +193 -0
  58. package/dist/codemods/rename-acronyms.js.map +1 -0
  59. package/dist/codemods/run.d.ts +2 -0
  60. package/dist/codemods/run.d.ts.map +1 -0
  61. package/dist/codemods/run.js +14 -0
  62. package/dist/codemods/run.js.map +1 -0
  63. package/dist/codemods/sort-imports.d.ts +7 -0
  64. package/dist/codemods/sort-imports.d.ts.map +1 -0
  65. package/dist/codemods/sort-imports.js +235 -0
  66. package/dist/codemods/sort-imports.js.map +1 -0
  67. package/dist/index.d.ts +30 -96
  68. package/dist/index.d.ts.map +1 -1
  69. package/dist/index.js +157 -95
  70. package/dist/index.js.map +1 -1
  71. package/dist/rules/acronym-case.d.ts +7 -3
  72. package/dist/rules/acronym-case.d.ts.map +1 -1
  73. package/dist/rules/acronym-case.js +129 -120
  74. package/dist/rules/acronym-case.js.map +1 -1
  75. package/dist/rules/acronyms-1.d.ts +3 -0
  76. package/dist/rules/acronyms-1.d.ts.map +1 -0
  77. package/dist/rules/acronyms-1.js +407 -0
  78. package/dist/rules/acronyms-1.js.map +1 -0
  79. package/dist/rules/acronyms-2.d.ts +3 -0
  80. package/dist/rules/acronyms-2.d.ts.map +1 -0
  81. package/dist/rules/acronyms-2.js +407 -0
  82. package/dist/rules/acronyms-2.js.map +1 -0
  83. package/dist/rules/acronyms-3.d.ts +3 -0
  84. package/dist/rules/acronyms-3.d.ts.map +1 -0
  85. package/dist/rules/acronyms-3.js +407 -0
  86. package/dist/rules/acronyms-3.js.map +1 -0
  87. package/dist/rules/acronyms-4.d.ts +3 -0
  88. package/dist/rules/acronyms-4.d.ts.map +1 -0
  89. package/dist/rules/acronyms-4.js +377 -0
  90. package/dist/rules/acronyms-4.js.map +1 -0
  91. package/dist/rules/acronyms.d.ts +1 -8
  92. package/dist/rules/acronyms.d.ts.map +1 -1
  93. package/dist/rules/acronyms.js +14 -1578
  94. package/dist/rules/acronyms.js.map +1 -1
  95. package/dist/rules/boolean-prefix.d.ts +11 -2
  96. package/dist/rules/boolean-prefix.d.ts.map +1 -1
  97. package/dist/rules/boolean-prefix.js +95 -59
  98. package/dist/rules/boolean-prefix.js.map +1 -1
  99. package/dist/rules/camel-case-identifiers.d.ts +3 -4
  100. package/dist/rules/camel-case-identifiers.d.ts.map +1 -1
  101. package/dist/rules/camel-case-identifiers.js +59 -40
  102. package/dist/rules/camel-case-identifiers.js.map +1 -1
  103. package/dist/rules/char-class.d.ts +26 -13
  104. package/dist/rules/char-class.d.ts.map +1 -1
  105. package/dist/rules/char-class.js +56 -24
  106. package/dist/rules/char-class.js.map +1 -1
  107. package/dist/rules/diagnostic-guidance.d.ts +91 -0
  108. package/dist/rules/diagnostic-guidance.d.ts.map +1 -0
  109. package/dist/rules/diagnostic-guidance.js +243 -0
  110. package/dist/rules/diagnostic-guidance.js.map +1 -0
  111. package/dist/rules/effect-default-ast.d.ts +89 -0
  112. package/dist/rules/effect-default-ast.d.ts.map +1 -0
  113. package/dist/rules/effect-default-ast.js +208 -0
  114. package/dist/rules/effect-default-ast.js.map +1 -0
  115. package/dist/rules/effect-default-compat-rules.d.ts +76 -0
  116. package/dist/rules/effect-default-compat-rules.d.ts.map +1 -0
  117. package/dist/rules/effect-default-compat-rules.js +270 -0
  118. package/dist/rules/effect-default-compat-rules.js.map +1 -0
  119. package/dist/rules/effect-default-env-rules.d.ts +60 -0
  120. package/dist/rules/effect-default-env-rules.d.ts.map +1 -0
  121. package/dist/rules/effect-default-env-rules.js +259 -0
  122. package/dist/rules/effect-default-env-rules.js.map +1 -0
  123. package/dist/rules/effect-default-fiber-helpers.d.ts +13 -0
  124. package/dist/rules/effect-default-fiber-helpers.d.ts.map +1 -0
  125. package/dist/rules/effect-default-fiber-helpers.js +76 -0
  126. package/dist/rules/effect-default-fiber-helpers.js.map +1 -0
  127. package/dist/rules/effect-default-floating-helpers.d.ts +7 -0
  128. package/dist/rules/effect-default-floating-helpers.d.ts.map +1 -0
  129. package/dist/rules/effect-default-floating-helpers.js +113 -0
  130. package/dist/rules/effect-default-floating-helpers.js.map +1 -0
  131. package/dist/rules/effect-default-helpers.d.ts +8 -32
  132. package/dist/rules/effect-default-helpers.d.ts.map +1 -1
  133. package/dist/rules/effect-default-helpers.js +11 -458
  134. package/dist/rules/effect-default-helpers.js.map +1 -1
  135. package/dist/rules/effect-default-resource-helpers.d.ts +18 -4
  136. package/dist/rules/effect-default-resource-helpers.d.ts.map +1 -1
  137. package/dist/rules/effect-default-resource-helpers.js +30 -13
  138. package/dist/rules/effect-default-resource-helpers.js.map +1 -1
  139. package/dist/rules/effect-default-safety-helpers.d.ts +43 -0
  140. package/dist/rules/effect-default-safety-helpers.d.ts.map +1 -0
  141. package/dist/rules/effect-default-safety-helpers.js +126 -0
  142. package/dist/rules/effect-default-safety-helpers.js.map +1 -0
  143. package/dist/rules/effect-default-scan-helpers.d.ts +43 -0
  144. package/dist/rules/effect-default-scan-helpers.d.ts.map +1 -0
  145. package/dist/rules/effect-default-scan-helpers.js +141 -0
  146. package/dist/rules/effect-default-scan-helpers.js.map +1 -0
  147. package/dist/rules/effect-default-schema-helpers.d.ts +37 -0
  148. package/dist/rules/effect-default-schema-helpers.d.ts.map +1 -0
  149. package/dist/rules/effect-default-schema-helpers.js +104 -0
  150. package/dist/rules/effect-default-schema-helpers.js.map +1 -0
  151. package/dist/rules/effect-default-test-helpers.d.ts +18 -4
  152. package/dist/rules/effect-default-test-helpers.d.ts.map +1 -1
  153. package/dist/rules/effect-default-test-helpers.js +41 -20
  154. package/dist/rules/effect-default-test-helpers.js.map +1 -1
  155. package/dist/rules/effect-default-workflow-helpers.d.ts +91 -0
  156. package/dist/rules/effect-default-workflow-helpers.d.ts.map +1 -0
  157. package/dist/rules/effect-default-workflow-helpers.js +247 -0
  158. package/dist/rules/effect-default-workflow-helpers.js.map +1 -0
  159. package/dist/rules/effect-default.d.ts +1 -1
  160. package/dist/rules/effect-default.d.ts.map +1 -1
  161. package/dist/rules/effect-default.js +198 -637
  162. package/dist/rules/effect-default.js.map +1 -1
  163. package/dist/rules/effect-exported-declarations.d.ts +19 -0
  164. package/dist/rules/effect-exported-declarations.d.ts.map +1 -0
  165. package/dist/rules/effect-exported-declarations.js +237 -0
  166. package/dist/rules/effect-exported-declarations.js.map +1 -0
  167. package/dist/rules/effect-path-options.d.ts +49 -11
  168. package/dist/rules/effect-path-options.d.ts.map +1 -1
  169. package/dist/rules/effect-path-options.js +85 -52
  170. package/dist/rules/effect-path-options.js.map +1 -1
  171. package/dist/rules/effect-rule-aliases.d.ts +55 -0
  172. package/dist/rules/effect-rule-aliases.d.ts.map +1 -0
  173. package/dist/rules/effect-rule-aliases.js +278 -0
  174. package/dist/rules/effect-rule-aliases.js.map +1 -0
  175. package/dist/rules/effect-rule-core.d.ts +46 -24
  176. package/dist/rules/effect-rule-core.d.ts.map +1 -1
  177. package/dist/rules/effect-rule-core.js +263 -303
  178. package/dist/rules/effect-rule-core.js.map +1 -1
  179. package/dist/rules/effect-rule-names.d.ts +12 -3
  180. package/dist/rules/effect-rule-names.d.ts.map +1 -1
  181. package/dist/rules/effect-rule-names.js +15 -3
  182. package/dist/rules/effect-rule-names.js.map +1 -1
  183. package/dist/rules/effect-source-comments.d.ts +7 -0
  184. package/dist/rules/effect-source-comments.d.ts.map +1 -0
  185. package/dist/rules/effect-source-comments.js +227 -0
  186. package/dist/rules/effect-source-comments.js.map +1 -0
  187. package/dist/rules/effect-source-helpers.d.ts +4 -9
  188. package/dist/rules/effect-source-helpers.d.ts.map +1 -1
  189. package/dist/rules/effect-source-helpers.js +7 -333
  190. package/dist/rules/effect-source-helpers.js.map +1 -1
  191. package/dist/rules/effect-source-navigation.d.ts +25 -0
  192. package/dist/rules/effect-source-navigation.d.ts.map +1 -0
  193. package/dist/rules/effect-source-navigation.js +244 -0
  194. package/dist/rules/effect-source-navigation.js.map +1 -0
  195. package/dist/rules/effect-source-scan.d.ts +30 -7
  196. package/dist/rules/effect-source-scan.d.ts.map +1 -1
  197. package/dist/rules/effect-source-scan.js +377 -297
  198. package/dist/rules/effect-source-scan.js.map +1 -1
  199. package/dist/rules/effect-strict-ast-specs.d.ts +8 -0
  200. package/dist/rules/effect-strict-ast-specs.d.ts.map +1 -0
  201. package/dist/rules/effect-strict-ast-specs.js +166 -0
  202. package/dist/rules/effect-strict-ast-specs.js.map +1 -0
  203. package/dist/rules/effect-strict-boundary-helpers.d.ts +25 -0
  204. package/dist/rules/effect-strict-boundary-helpers.d.ts.map +1 -0
  205. package/dist/rules/effect-strict-boundary-helpers.js +127 -0
  206. package/dist/rules/effect-strict-boundary-helpers.js.map +1 -0
  207. package/dist/rules/effect-strict-core-specs.d.ts +8 -0
  208. package/dist/rules/effect-strict-core-specs.d.ts.map +1 -0
  209. package/dist/rules/effect-strict-core-specs.js +334 -0
  210. package/dist/rules/effect-strict-core-specs.js.map +1 -0
  211. package/dist/rules/effect-strict-external-helpers.d.ts +25 -0
  212. package/dist/rules/effect-strict-external-helpers.d.ts.map +1 -0
  213. package/dist/rules/effect-strict-external-helpers.js +87 -0
  214. package/dist/rules/effect-strict-external-helpers.js.map +1 -0
  215. package/dist/rules/effect-strict-helpers.d.ts +75 -33
  216. package/dist/rules/effect-strict-helpers.d.ts.map +1 -1
  217. package/dist/rules/effect-strict-helpers.js +124 -246
  218. package/dist/rules/effect-strict-helpers.js.map +1 -1
  219. package/dist/rules/effect-strict-internals.d.ts +198 -0
  220. package/dist/rules/effect-strict-internals.d.ts.map +1 -0
  221. package/dist/rules/effect-strict-internals.js +477 -0
  222. package/dist/rules/effect-strict-internals.js.map +1 -0
  223. package/dist/rules/effect-strict-segment-helpers.d.ts +79 -0
  224. package/dist/rules/effect-strict-segment-helpers.d.ts.map +1 -0
  225. package/dist/rules/effect-strict-segment-helpers.js +308 -0
  226. package/dist/rules/effect-strict-segment-helpers.js.map +1 -0
  227. package/dist/rules/effect-strict.d.ts +1 -1
  228. package/dist/rules/effect-strict.d.ts.map +1 -1
  229. package/dist/rules/effect-strict.js +10 -661
  230. package/dist/rules/effect-strict.js.map +1 -1
  231. package/dist/rules/max-import-depth.d.ts +2 -2
  232. package/dist/rules/max-import-depth.d.ts.map +1 -1
  233. package/dist/rules/max-import-depth.js +52 -17
  234. package/dist/rules/max-import-depth.js.map +1 -1
  235. package/dist/rules/max-line-length.d.ts +9 -2
  236. package/dist/rules/max-line-length.d.ts.map +1 -1
  237. package/dist/rules/max-line-length.js +62 -7
  238. package/dist/rules/max-line-length.js.map +1 -1
  239. package/dist/rules/no-commented-out-code.d.ts +3 -7
  240. package/dist/rules/no-commented-out-code.d.ts.map +1 -1
  241. package/dist/rules/no-commented-out-code.js +157 -102
  242. package/dist/rules/no-commented-out-code.js.map +1 -1
  243. package/dist/rules/pascal-case-types.d.ts +1 -1
  244. package/dist/rules/pascal-case-types.d.ts.map +1 -1
  245. package/dist/rules/pascal-case-types.js +65 -46
  246. package/dist/rules/pascal-case-types.js.map +1 -1
  247. package/dist/rules/plugin-commented-out-code-rule.d.ts +32 -0
  248. package/dist/rules/plugin-commented-out-code-rule.d.ts.map +1 -0
  249. package/dist/rules/plugin-commented-out-code-rule.js +135 -0
  250. package/dist/rules/plugin-commented-out-code-rule.js.map +1 -0
  251. package/dist/rules/plugin.d.ts +3 -121
  252. package/dist/rules/plugin.d.ts.map +1 -1
  253. package/dist/rules/plugin.js +195 -201
  254. package/dist/rules/plugin.js.map +1 -1
  255. package/dist/rules/private-underscore.d.ts +1 -1
  256. package/dist/rules/private-underscore.d.ts.map +1 -1
  257. package/dist/rules/private-underscore.js +11 -4
  258. package/dist/rules/private-underscore.js.map +1 -1
  259. package/dist/rules/require-file-doc.d.ts +5 -6
  260. package/dist/rules/require-file-doc.d.ts.map +1 -1
  261. package/dist/rules/require-file-doc.js +127 -78
  262. package/dist/rules/require-file-doc.js.map +1 -1
  263. package/dist/rules/require-function-doc-ignored-text.d.ts +7 -0
  264. package/dist/rules/require-function-doc-ignored-text.d.ts.map +1 -0
  265. package/dist/rules/require-function-doc-ignored-text.js +67 -0
  266. package/dist/rules/require-function-doc-ignored-text.js.map +1 -0
  267. package/dist/rules/require-function-doc-local-exports.d.ts +7 -0
  268. package/dist/rules/require-function-doc-local-exports.d.ts.map +1 -0
  269. package/dist/rules/require-function-doc-local-exports.js +114 -0
  270. package/dist/rules/require-function-doc-local-exports.js.map +1 -0
  271. package/dist/rules/require-function-doc.d.ts +3 -18
  272. package/dist/rules/require-function-doc.d.ts.map +1 -1
  273. package/dist/rules/require-function-doc.js +404 -218
  274. package/dist/rules/require-function-doc.js.map +1 -1
  275. package/dist/rules/source-cache.d.ts +19 -0
  276. package/dist/rules/source-cache.d.ts.map +1 -0
  277. package/dist/rules/source-cache.js +63 -0
  278. package/dist/rules/source-cache.js.map +1 -0
  279. package/package.json +15 -10
@@ -0,0 +1,259 @@
1
+ /* -------------------------------------------------------------------------- */
2
+ /* Environment, schema, resource, and test Effect rule specs. */
3
+ /* -------------------------------------------------------------------------- */
4
+ import { hasCastAfterSchemaDecode, hasExternalJSONWithoutDecodeUnknown, hasForkDaemonWithoutCleanup, hasForkInUninterruptibleWithoutRestore, hasJSONParsedBeforeSchemaStringDecode, hasParsedJSONNumberFromString, hasSchemaPromiseDecode, hasSchemaSyncDecodeInEffectWorkflow, hasUnboundedEffectConcurrency, hasUnboundedFlatMapConcurrency, hasUnhandledSchemaEffectDecode, } from './effect-default-helpers.js';
5
+ import { hasEffectSignal, hasRuntimeCall } from './effect-rule-core.js';
6
+ import { hasForkBeforeTestClockAdjust, hasRealSleepWithoutTestClock, hasTestClockWithoutEffectContext, } from './effect-default-test-helpers.js';
7
+ import { hasUnreleasedAcquire, hasUnscopedAcquireRelease, hasUnscopedResourceWorkflow, } from './effect-default-resource-helpers.js';
8
+ import { isConfiguredPath, isEffectTestPath } from './effect-path-options.js';
9
+ import { memberParts, objectValue, reportAST } from './effect-default-ast.js';
10
+ import { stripCommentsAndStrings } from './effect-source-helpers.js';
11
+ /**
12
+ * Internal helper exported for package-local composition.
13
+ *
14
+ * @internal
15
+ */
16
+ export const effectDefaultEnvironmentSpecs = [
17
+ {
18
+ ast: (context, source) => {
19
+ const isEffectModule = hasEffectSignal(source);
20
+ const isConfigLayer = isConfiguredPath(context, 'configLayers');
21
+ return {
22
+ MemberExpression(node) {
23
+ const { objectName, propertyName } = memberParts(node);
24
+ const processEnv = objectName === 'process' && propertyName === 'env';
25
+ if (isEffectModule && !isConfigLayer && processEnv) {
26
+ reportAST(context, 'Use Effect Config instead of process.env in Effect code.', node);
27
+ }
28
+ },
29
+ };
30
+ },
31
+ message: 'Use Effect Config instead of process.env in Effect code.',
32
+ name: 'effect-no-process-env-in-effect-code',
33
+ tokens: ['process'],
34
+ },
35
+ {
36
+ ast: (context, source) => {
37
+ const isEffectModule = hasEffectSignal(source);
38
+ const isAdapterLayer = isConfiguredPath(context, 'adapterLayers');
39
+ return {
40
+ CallExpression(node) {
41
+ const { objectName, propertyName } = memberParts(objectValue(node, 'callee'));
42
+ if (isEffectModule &&
43
+ !isAdapterLayer &&
44
+ objectName === 'Date' &&
45
+ propertyName === 'now') {
46
+ reportAST(context, 'Use Effect Clock instead of Date.now in Effect code.', node);
47
+ }
48
+ },
49
+ };
50
+ },
51
+ message: 'Use Effect Clock instead of Date.now in Effect code.',
52
+ name: 'effect-no-date-now-in-effect-code',
53
+ tokens: ['Date'],
54
+ },
55
+ {
56
+ ast: (context, source) => {
57
+ const isEffectModule = hasEffectSignal(source);
58
+ const isAdapterLayer = isConfiguredPath(context, 'adapterLayers');
59
+ return {
60
+ CallExpression(node) {
61
+ const { objectName, propertyName } = memberParts(objectValue(node, 'callee'));
62
+ if (isEffectModule &&
63
+ !isAdapterLayer &&
64
+ objectName === 'Math' &&
65
+ propertyName === 'random') {
66
+ reportAST(context, 'Use Effect Random instead of Math.random in Effect code.', node);
67
+ }
68
+ },
69
+ };
70
+ },
71
+ message: 'Use Effect Random instead of Math.random in Effect code.',
72
+ name: 'effect-no-math-random-in-effect-code',
73
+ tokens: ['Math'],
74
+ },
75
+ {
76
+ message: 'Decode external JSON with Schema instead of casting parsed unknown data.',
77
+ name: 'effect-no-json-parse-cast',
78
+ patterns: [
79
+ /\bJSON\.parse\s*\([^)]*\)\s+as\s+[A-Za-z_$][\w$]*/,
80
+ /\.json\s*\(\s*\)\s+as\s+[A-Za-z_$][\w$]*/,
81
+ ],
82
+ tokenGroups: [[' as '], ['JSON.parse', '.json']],
83
+ },
84
+ {
85
+ check: hasSchemaPromiseDecode,
86
+ message: 'Use Schema.decodeUnknown to decode unknown input into the Effect error channel.',
87
+ name: 'effect-schema-prefer-decodeUnknown-effect',
88
+ tokens: ['decode'],
89
+ },
90
+ {
91
+ check: hasUnhandledSchemaEffectDecode,
92
+ message: 'Schema parsing must expose parse errors through typed Effect handling.',
93
+ name: 'effect-schema-require-parse-error-handling',
94
+ tokens: ['decode'],
95
+ },
96
+ {
97
+ check: hasExternalJSONWithoutDecodeUnknown,
98
+ message: 'External data must enter through Schema.decodeUnknown.',
99
+ name: 'effect-schema-use-decodeUnknown-for-external-data',
100
+ tokens: ['.json'],
101
+ },
102
+ {
103
+ check: hasSchemaSyncDecodeInEffectWorkflow,
104
+ message: 'Do not use throwing synchronous Schema decoders in Effect modules.',
105
+ name: 'effect-schema-no-unsafe-sync-decode-in-effect-code',
106
+ tokens: ['decodeSync', 'decodeUnknownSync'],
107
+ },
108
+ {
109
+ check: hasJSONParsedBeforeSchemaStringDecode,
110
+ message: 'Use Schema.parseJson when decoding JSON strings with Schema.',
111
+ name: 'effect-schema-require-parseJson-for-json-strings',
112
+ tokens: ['JSON.parse'],
113
+ },
114
+ {
115
+ check: hasParsedJSONNumberFromString,
116
+ message: 'Use the correct Schema number type for already-parsed JSON numbers.',
117
+ name: 'effect-schema-correct-number-type-for-parsed-json',
118
+ tokens: ['JSON.parse'],
119
+ },
120
+ {
121
+ message: 'Prefer Schema.TaggedClass over hand-written _tag fields.',
122
+ name: 'effect-schema-prefer-taggedClass-over-manual-tag',
123
+ patterns: [/Schema\.Struct\s*\(\s*{[\s\S]*?_tag\s*:\s*Schema\.Literal/],
124
+ tokens: ['_tag'],
125
+ },
126
+ {
127
+ message: 'Use current Effect Schema API names instead of obsolete lowercase helpers.',
128
+ name: 'effect-schema-avoid-old-type-names',
129
+ patterns: [/\bSchema\.(?:string|number|boolean|array|object)\s*\(/],
130
+ tokens: ['Schema.'],
131
+ },
132
+ {
133
+ check: hasCastAfterSchemaDecode,
134
+ message: 'Do not cast after Schema decoding; let the schema provide the type.',
135
+ name: 'effect-schema-no-cast-after-decode',
136
+ tokenGroups: [['Schema.decode'], [' as ']],
137
+ },
138
+ {
139
+ check: hasUnreleasedAcquire,
140
+ message: 'Resource acquisition must use acquireRelease, scoped, or equivalent finalization.',
141
+ name: 'effect-require-acquire-release',
142
+ tokens: ['open', 'connect', 'subscribe', 'listen'],
143
+ },
144
+ {
145
+ check: hasUnscopedAcquireRelease,
146
+ message: 'Use Effect.scoped around acquireRelease when exposing acquired resources.',
147
+ name: 'effect-require-scoped-for-acquireRelease',
148
+ tokens: ['acquireRelease'],
149
+ },
150
+ {
151
+ check: hasUnscopedResourceWorkflow,
152
+ message: 'Resourceful workflows must be scoped.',
153
+ name: 'effect-require-scoped-for-resources',
154
+ tokens: ['Socket.', 'Connection.'],
155
+ },
156
+ {
157
+ check: hasForkDaemonWithoutCleanup,
158
+ message: 'Daemon fibers must have cleanup, interruption, or supervision.',
159
+ name: 'effect-no-fork-daemon-without-cleanup',
160
+ tokens: ['forkDaemon'],
161
+ },
162
+ {
163
+ message: 'Long-running listeners should use forkScoped so they follow Scope lifetime.',
164
+ name: 'effect-prefer-fork-scoped-for-listeners',
165
+ patterns: [
166
+ /Effect\.fork\s*\([\s\S]*?\b(?:listen[A-Z]\w*|subscribe[A-Z]\w*|watch[A-Z]\w*|listen|subscribe|watch)\b/,
167
+ ],
168
+ tokens: ['fork'],
169
+ },
170
+ {
171
+ check: hasForkInUninterruptibleWithoutRestore,
172
+ message: 'Use restore when forking inside uninterruptible regions.',
173
+ name: 'effect-require-restore-for-fork-in-uninterruptible',
174
+ tokenGroups: [['uninterruptible'], ['fork']],
175
+ },
176
+ {
177
+ check: hasUnboundedEffectConcurrency,
178
+ message: 'Concurrent Effect traversal must declare an explicit concurrency bound.',
179
+ name: 'effect-require-bounded-concurrency',
180
+ tokens: ['concurrency'],
181
+ },
182
+ {
183
+ check: hasUnboundedFlatMapConcurrency,
184
+ message: 'Concurrent Effect.flatMap usage must declare a bounded concurrency value.',
185
+ name: 'effect-require-bounded-flatMap-concurrency',
186
+ tokenGroups: [['flatMap'], ['concurrency']],
187
+ },
188
+ {
189
+ message: 'Use bounded, sliding, or dropping queues instead of unbounded queues.',
190
+ name: 'effect-no-unbounded-queue',
191
+ patterns: [/\bQueue\.unbounded\s*\(/],
192
+ tokens: ['unbounded'],
193
+ },
194
+ {
195
+ message: 'Stream buffers must be explicitly bounded.',
196
+ name: 'effect-no-unbounded-stream-buffer',
197
+ patterns: [
198
+ /\bStream\.(?:buffer|fromQueue|async|asyncPush)\s*\([^)]*\b(?:Infinity|unbounded)\b/,
199
+ ],
200
+ tokens: ['unbounded', 'Infinity'],
201
+ },
202
+ {
203
+ check: (source, context) => isEffectTestPath(context) && hasRuntimeCall(source),
204
+ message: 'Use @effect/vitest it.effect instead of manually running Effects in tests.',
205
+ name: 'effect-test-no-runpromise',
206
+ tokens: ['run'],
207
+ },
208
+ {
209
+ check: (source, context) => isEffectTestPath(context) &&
210
+ !hasRuntimeCall(source) &&
211
+ /\bit\s*\([\s\S]*?Effect\./.test(stripCommentsAndStrings(source)),
212
+ message: 'Use it.effect for tests that exercise Effect programs.',
213
+ name: 'effect-prefer-it-effect-for-unit-tests',
214
+ tokens: ['it('],
215
+ },
216
+ {
217
+ check: (source) => /TestClock\.adjust\s*\(/.test(stripCommentsAndStrings(source)) &&
218
+ !hasForkBeforeTestClockAdjust(source),
219
+ message: 'Fork time-dependent work before adjusting TestClock.',
220
+ name: 'effect-testClock-requires-fork',
221
+ tokens: ['TestClock.adjust'],
222
+ },
223
+ {
224
+ check: (source, context) => isEffectTestPath(context) && hasTestClockWithoutEffectContext(source),
225
+ message: 'Use Effect test context when using TestClock.',
226
+ name: 'effect-testClock-requires-testContext',
227
+ tokens: ['TestClock'],
228
+ },
229
+ {
230
+ check: (source, context) => isEffectTestPath(context) && hasRealSleepWithoutTestClock(source),
231
+ message: 'Use TestClock instead of real sleeps in Effect tests.',
232
+ name: 'effect-no-real-sleep-in-tests',
233
+ tokens: ['sleep'],
234
+ },
235
+ {
236
+ check: (source, context) => isEffectTestPath(context) &&
237
+ !hasRuntimeCall(source) &&
238
+ /\b(?:rejects|toThrow)\b/.test(stripCommentsAndStrings(source)) &&
239
+ /\bEffect\./.test(stripCommentsAndStrings(source)),
240
+ message: 'Use Effect.exit inside it.effect when asserting Effect failures.',
241
+ name: 'effect-use-exit-for-failure-tests',
242
+ tokens: ['rejects', 'toThrow'],
243
+ },
244
+ {
245
+ check: (source, context) => isEffectTestPath(context) &&
246
+ /\b(?:it|describe)\.effect\.only\s*\(/.test(stripCommentsAndStrings(source)),
247
+ message: 'Focused Effect tests must not be committed.',
248
+ name: 'effect-no-focused-effect-tests',
249
+ tokens: ['.only'],
250
+ },
251
+ {
252
+ check: (source, context) => isEffectTestPath(context) &&
253
+ /\b(?:it|describe)\.effect\.skip\s*\(/.test(stripCommentsAndStrings(source)),
254
+ message: 'Skipped Effect tests must not be committed.',
255
+ name: 'effect-no-skipped-effect-tests',
256
+ tokens: ['.skip'],
257
+ },
258
+ ];
259
+ //# sourceMappingURL=effect-default-env-rules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effect-default-env-rules.js","sourceRoot":"","sources":["../../src/rules/effect-default-env-rules.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,gFAAgF;AAChF,gFAAgF;AAChF,OAAO,EACL,wBAAwB,EACxB,mCAAmC,EACnC,2BAA2B,EAC3B,sCAAsC,EACtC,qCAAqC,EACrC,6BAA6B,EAC7B,sBAAsB,EACtB,mCAAmC,EACnC,6BAA6B,EAC7B,8BAA8B,EAC9B,8BAA8B,GAC/B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EACL,4BAA4B,EAC5B,4BAA4B,EAC5B,gCAAgC,GACjC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EACzB,2BAA2B,GAC5B,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAyBlE;;;;GAIG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG;IAC3C;QACE,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,EAA0C,EAAE;YAC/D,MAAM,cAAc,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;YAC/C,MAAM,aAAa,GAAG,gBAAgB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;YAChE,OAAO;gBACL,gBAAgB,CAAC,IAAI;oBACnB,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;oBACvD,MAAM,UAAU,GAAG,UAAU,KAAK,SAAS,IAAI,YAAY,KAAK,KAAK,CAAC;oBACtE,IAAI,cAAc,IAAI,CAAC,aAAa,IAAI,UAAU,EAAE,CAAC;wBACnD,SAAS,CAAC,OAAO,EAAE,0DAA0D,EAAE,IAAI,CAAC,CAAC;oBACvF,CAAC;gBACH,CAAC;aACF,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,0DAA0D;QACnE,IAAI,EAAE,sCAAsC;QAC5C,MAAM,EAAE,CAAC,SAAS,CAAC;KACpB;IACD;QACE,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,EAA0C,EAAE;YAC/D,MAAM,cAAc,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;YAC/C,MAAM,cAAc,GAAG,gBAAgB,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;YAClE,OAAO;gBACL,cAAc,CAAC,IAAI;oBACjB,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,WAAW,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;oBAC9E,IACE,cAAc;wBACd,CAAC,cAAc;wBACf,UAAU,KAAK,MAAM;wBACrB,YAAY,KAAK,KAAK,EACtB,CAAC;wBACD,SAAS,CAAC,OAAO,EAAE,sDAAsD,EAAE,IAAI,CAAC,CAAC;oBACnF,CAAC;gBACH,CAAC;aACF,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,sDAAsD;QAC/D,IAAI,EAAE,mCAAmC;QACzC,MAAM,EAAE,CAAC,MAAM,CAAC;KACjB;IACD;QACE,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,EAA0C,EAAE;YAC/D,MAAM,cAAc,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;YAC/C,MAAM,cAAc,GAAG,gBAAgB,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;YAClE,OAAO;gBACL,cAAc,CAAC,IAAI;oBACjB,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,WAAW,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;oBAC9E,IACE,cAAc;wBACd,CAAC,cAAc;wBACf,UAAU,KAAK,MAAM;wBACrB,YAAY,KAAK,QAAQ,EACzB,CAAC;wBACD,SAAS,CAAC,OAAO,EAAE,0DAA0D,EAAE,IAAI,CAAC,CAAC;oBACvF,CAAC;gBACH,CAAC;aACF,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,0DAA0D;QACnE,IAAI,EAAE,sCAAsC;QAC5C,MAAM,EAAE,CAAC,MAAM,CAAC;KACjB;IACD;QACE,OAAO,EAAE,0EAA0E;QACnF,IAAI,EAAE,2BAA2B;QACjC,QAAQ,EAAE;YACR,mDAAmD;YACnD,0CAA0C;SAC3C;QACD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;KACjD;IACD;QACE,KAAK,EAAE,sBAAsB;QAC7B,OAAO,EAAE,iFAAiF;QAC1F,IAAI,EAAE,2CAA2C;QACjD,MAAM,EAAE,CAAC,QAAQ,CAAC;KACnB;IACD;QACE,KAAK,EAAE,8BAA8B;QACrC,OAAO,EAAE,wEAAwE;QACjF,IAAI,EAAE,4CAA4C;QAClD,MAAM,EAAE,CAAC,QAAQ,CAAC;KACnB;IACD;QACE,KAAK,EAAE,mCAAmC;QAC1C,OAAO,EAAE,wDAAwD;QACjE,IAAI,EAAE,mDAAmD;QACzD,MAAM,EAAE,CAAC,OAAO,CAAC;KAClB;IACD;QACE,KAAK,EAAE,mCAAmC;QAC1C,OAAO,EAAE,oEAAoE;QAC7E,IAAI,EAAE,oDAAoD;QAC1D,MAAM,EAAE,CAAC,YAAY,EAAE,mBAAmB,CAAC;KAC5C;IACD;QACE,KAAK,EAAE,qCAAqC;QAC5C,OAAO,EAAE,8DAA8D;QACvE,IAAI,EAAE,kDAAkD;QACxD,MAAM,EAAE,CAAC,YAAY,CAAC;KACvB;IACD;QACE,KAAK,EAAE,6BAA6B;QACpC,OAAO,EAAE,qEAAqE;QAC9E,IAAI,EAAE,mDAAmD;QACzD,MAAM,EAAE,CAAC,YAAY,CAAC;KACvB;IACD;QACE,OAAO,EAAE,0DAA0D;QACnE,IAAI,EAAE,kDAAkD;QACxD,QAAQ,EAAE,CAAC,2DAA2D,CAAC;QACvE,MAAM,EAAE,CAAC,MAAM,CAAC;KACjB;IACD;QACE,OAAO,EAAE,4EAA4E;QACrF,IAAI,EAAE,oCAAoC;QAC1C,QAAQ,EAAE,CAAC,uDAAuD,CAAC;QACnE,MAAM,EAAE,CAAC,SAAS,CAAC;KACpB;IACD;QACE,KAAK,EAAE,wBAAwB;QAC/B,OAAO,EAAE,qEAAqE;QAC9E,IAAI,EAAE,oCAAoC;QAC1C,WAAW,EAAE,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;KAC3C;IACD;QACE,KAAK,EAAE,oBAAoB;QAC3B,OAAO,EAAE,mFAAmF;QAC5F,IAAI,EAAE,gCAAgC;QACtC,MAAM,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,CAAC;KACnD;IACD;QACE,KAAK,EAAE,yBAAyB;QAChC,OAAO,EAAE,2EAA2E;QACpF,IAAI,EAAE,0CAA0C;QAChD,MAAM,EAAE,CAAC,gBAAgB,CAAC;KAC3B;IACD;QACE,KAAK,EAAE,2BAA2B;QAClC,OAAO,EAAE,uCAAuC;QAChD,IAAI,EAAE,qCAAqC;QAC3C,MAAM,EAAE,CAAC,SAAS,EAAE,aAAa,CAAC;KACnC;IACD;QACE,KAAK,EAAE,2BAA2B;QAClC,OAAO,EAAE,gEAAgE;QACzE,IAAI,EAAE,uCAAuC;QAC7C,MAAM,EAAE,CAAC,YAAY,CAAC;KACvB;IACD;QACE,OAAO,EAAE,6EAA6E;QACtF,IAAI,EAAE,yCAAyC;QAC/C,QAAQ,EAAE;YACR,wGAAwG;SACzG;QACD,MAAM,EAAE,CAAC,MAAM,CAAC;KACjB;IACD;QACE,KAAK,EAAE,sCAAsC;QAC7C,OAAO,EAAE,0DAA0D;QACnE,IAAI,EAAE,oDAAoD;QAC1D,WAAW,EAAE,CAAC,CAAC,iBAAiB,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;KAC7C;IACD;QACE,KAAK,EAAE,6BAA6B;QACpC,OAAO,EAAE,yEAAyE;QAClF,IAAI,EAAE,oCAAoC;QAC1C,MAAM,EAAE,CAAC,aAAa,CAAC;KACxB;IACD;QACE,KAAK,EAAE,8BAA8B;QACrC,OAAO,EAAE,2EAA2E;QACpF,IAAI,EAAE,4CAA4C;QAClD,WAAW,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;KAC5C;IACD;QACE,OAAO,EAAE,uEAAuE;QAChF,IAAI,EAAE,2BAA2B;QACjC,QAAQ,EAAE,CAAC,yBAAyB,CAAC;QACrC,MAAM,EAAE,CAAC,WAAW,CAAC;KACtB;IACD;QACE,OAAO,EAAE,4CAA4C;QACrD,IAAI,EAAE,mCAAmC;QACzC,QAAQ,EAAE;YACR,oFAAoF;SACrF;QACD,MAAM,EAAE,CAAC,WAAW,EAAE,UAAU,CAAC;KAClC;IACD;QACE,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,EAAW,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,cAAc,CAAC,MAAM,CAAC;QACxF,OAAO,EAAE,4EAA4E;QACrF,IAAI,EAAE,2BAA2B;QACjC,MAAM,EAAE,CAAC,KAAK,CAAC;KAChB;IACD;QACE,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,EAAW,EAAE,CAClC,gBAAgB,CAAC,OAAO,CAAC;YACzB,CAAC,cAAc,CAAC,MAAM,CAAC;YACvB,2BAA2B,CAAC,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC;QACnE,OAAO,EAAE,wDAAwD;QACjE,IAAI,EAAE,wCAAwC;QAC9C,MAAM,EAAE,CAAC,KAAK,CAAC;KAChB;IACD;QACE,KAAK,EAAE,CAAC,MAAM,EAAW,EAAE,CACzB,wBAAwB,CAAC,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC;YAC9D,CAAC,4BAA4B,CAAC,MAAM,CAAC;QACvC,OAAO,EAAE,sDAAsD;QAC/D,IAAI,EAAE,gCAAgC;QACtC,MAAM,EAAE,CAAC,kBAAkB,CAAC;KAC7B;IACD;QACE,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,EAAW,EAAE,CAClC,gBAAgB,CAAC,OAAO,CAAC,IAAI,gCAAgC,CAAC,MAAM,CAAC;QACvE,OAAO,EAAE,+CAA+C;QACxD,IAAI,EAAE,uCAAuC;QAC7C,MAAM,EAAE,CAAC,WAAW,CAAC;KACtB;IACD;QACE,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,EAAW,EAAE,CAClC,gBAAgB,CAAC,OAAO,CAAC,IAAI,4BAA4B,CAAC,MAAM,CAAC;QACnE,OAAO,EAAE,uDAAuD;QAChE,IAAI,EAAE,+BAA+B;QACrC,MAAM,EAAE,CAAC,OAAO,CAAC;KAClB;IACD;QACE,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,EAAW,EAAE,CAClC,gBAAgB,CAAC,OAAO,CAAC;YACzB,CAAC,cAAc,CAAC,MAAM,CAAC;YACvB,yBAAyB,CAAC,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC;YAC/D,YAAY,CAAC,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC;QACpD,OAAO,EAAE,kEAAkE;QAC3E,IAAI,EAAE,mCAAmC;QACzC,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;KAC/B;IACD;QACE,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,EAAW,EAAE,CAClC,gBAAgB,CAAC,OAAO,CAAC;YACzB,sCAAsC,CAAC,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC;QAC9E,OAAO,EAAE,6CAA6C;QACtD,IAAI,EAAE,gCAAgC;QACtC,MAAM,EAAE,CAAC,OAAO,CAAC;KAClB;IACD;QACE,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,EAAW,EAAE,CAClC,gBAAgB,CAAC,OAAO,CAAC;YACzB,sCAAsC,CAAC,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC;QAC9E,OAAO,EAAE,6CAA6C;QACtD,IAAI,EAAE,gCAAgC;QACtC,MAAM,EAAE,CAAC,OAAO,CAAC;KAClB;CAC4B,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Internal helper exported for package-local composition.
3
+ *
4
+ * @internal
5
+ */
6
+ export declare const hasUnobservedFork: (source: string) => boolean;
7
+ /**
8
+ * Internal helper exported for package-local composition.
9
+ *
10
+ * @internal
11
+ */
12
+ export declare const hasRunForkWithoutObserver: (source: string) => boolean;
13
+ //# sourceMappingURL=effect-default-fiber-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effect-default-fiber-helpers.d.ts","sourceRoot":"","sources":["../../src/rules/effect-default-fiber-helpers.ts"],"names":[],"mappings":"AAsBA;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,GAAI,QAAQ,MAAM,KAAG,OAmBlD,CAAC;AAmCF;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,GAAI,QAAQ,MAAM,KAAG,OAc1D,CAAC"}
@@ -0,0 +1,76 @@
1
+ /* -------------------------------------------------------------------------- */
2
+ /* Fiber observation predicates for always-on Effect rules. */
3
+ /* -------------------------------------------------------------------------- */
4
+ import { sameFunctionTail, stripCommentsAndStrings } from './effect-source-helpers.js';
5
+ const isUnobservedForkMatch = (source, match) => {
6
+ const [, fiberName] = match;
7
+ const lineStart = source.lastIndexOf('\n', match.index) + 1;
8
+ const prefix = source.slice(lineStart, match.index);
9
+ if (!fiberName && /\breturn\s+$/.test(prefix)) {
10
+ return false;
11
+ }
12
+ if (!fiberName) {
13
+ return true;
14
+ }
15
+ const observedFiberPattern = new RegExp(`(?:yield\\*\\s+Fiber\\.(?:join|interrupt)\\s*\\(\\s*${fiberName}\\b|yield\\*\\s+${fiberName}\\.await\\b)`);
16
+ return !observedFiberPattern.test(sameFunctionTail(source, match.index + match[0].length));
17
+ };
18
+ /**
19
+ * Internal helper exported for package-local composition.
20
+ *
21
+ * @internal
22
+ */
23
+ export const hasUnobservedFork = (source) => {
24
+ const code = stripCommentsAndStrings(source);
25
+ const forkPatterns = [
26
+ /\b(?:(?:const|let)\s+([A-Za-z_$][\w$]*)\s*=\s*)?yield\*\s+Effect\.fork\s*\(/g,
27
+ /\b(?:(?:const|let)\s+([A-Za-z_$][\w$]*)\s*=\s*)?yield\*\s+[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*)?\.pipe\s*\(\s*Effect\.fork\b/g,
28
+ ];
29
+ for (const pattern of forkPatterns) {
30
+ for (const match of code.matchAll(pattern)) {
31
+ if (isUnobservedForkMatch(code, match)) {
32
+ return true;
33
+ }
34
+ }
35
+ }
36
+ return (/^\s*Effect\.fork\s*\(/m.test(code) ||
37
+ /^\s*[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*)?\.pipe\s*\(\s*Effect\.fork\b/m.test(code));
38
+ };
39
+ const nextSameNamedForkIndex = (assignedForks, startIndex, fiberName) => assignedForks.slice(startIndex + 1).find((nextMatch) => nextMatch[1] === fiberName)
40
+ ?.index;
41
+ const runForkLocalSource = (code, match, nextForkIndex) => {
42
+ const matchIndex = match.index ?? 0;
43
+ if (nextForkIndex !== undefined) {
44
+ return sameFunctionTail(code, matchIndex).slice(0, nextForkIndex - matchIndex);
45
+ }
46
+ return sameFunctionTail(code, matchIndex);
47
+ };
48
+ const hasUnobservedAssignedRunFork = (code, assignedForks) => {
49
+ for (const [index, match] of assignedForks.entries()) {
50
+ const [, fiberName] = match;
51
+ const nextForkIndex = nextSameNamedForkIndex(assignedForks, index, fiberName);
52
+ const localSource = runForkLocalSource(code, match, nextForkIndex);
53
+ const observedPattern = new RegExp(`\\b${fiberName}\\.addObserver\\b`);
54
+ if (!observedPattern.test(localSource)) {
55
+ return true;
56
+ }
57
+ }
58
+ return false;
59
+ };
60
+ /**
61
+ * Internal helper exported for package-local composition.
62
+ *
63
+ * @internal
64
+ */
65
+ export const hasRunForkWithoutObserver = (source) => {
66
+ const code = stripCommentsAndStrings(source);
67
+ const assignedForks = [
68
+ ...code.matchAll(/\b(?:const|let)\s+([A-Za-z_$][\w$]*)\s*=\s*Effect\.runFork\s*\(/g),
69
+ ];
70
+ if (hasUnobservedAssignedRunFork(code, assignedForks)) {
71
+ return true;
72
+ }
73
+ const unassignedSource = code.replace(/\b(?:const|let)\s+[A-Za-z_$][\w$]*\s*=\s*Effect\.runFork\s*\(/g, '');
74
+ return /Effect\.runFork\s*\(/.test(unassignedSource);
75
+ };
76
+ //# sourceMappingURL=effect-default-fiber-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effect-default-fiber-helpers.js","sourceRoot":"","sources":["../../src/rules/effect-default-fiber-helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Internal helper exported for package-local composition.
3
+ *
4
+ * @internal
5
+ */
6
+ export declare const hasFloatingEffect: (source: string) => boolean;
7
+ //# sourceMappingURL=effect-default-floating-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effect-default-floating-helpers.d.ts","sourceRoot":"","sources":["../../src/rules/effect-default-floating-helpers.ts"],"names":[],"mappings":"AAqKA;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,GAAI,QAAQ,MAAM,KAAG,OAKlD,CAAC"}
@@ -0,0 +1,113 @@
1
+ /* -------------------------------------------------------------------------- */
2
+ /* Floating Effect expression detection. */
3
+ /* -------------------------------------------------------------------------- */
4
+ import { findBalancedCallEnd, stripCommentsAndStrings } from './effect-source-helpers.js';
5
+ import { effectAliasesPattern } from './effect-default-scan-helpers.js';
6
+ import { effectImportAliases } from './effect-rule-core.js';
7
+ const EFFECT_PATTERN_CACHE_MAX = 256;
8
+ const floatingEffectPatternCache = new Map();
9
+ const setBoundedCacheValue = (cache, key, value) => {
10
+ if (cache.size >= EFFECT_PATTERN_CACHE_MAX) {
11
+ const firstKey = cache.keys().next().value;
12
+ if (firstKey !== undefined) {
13
+ cache.delete(firstKey);
14
+ }
15
+ }
16
+ cache.set(key, value);
17
+ return value;
18
+ };
19
+ const floatingEffectPatterns = (aliasPattern) => {
20
+ const cachedPatterns = floatingEffectPatternCache.get(aliasPattern);
21
+ if (cachedPatterns !== undefined) {
22
+ return cachedPatterns;
23
+ }
24
+ const runtimeMethods = 'runPromise|runPromiseExit|runSync|runSyncExit|runFork';
25
+ return setBoundedCacheValue(floatingEffectPatternCache, aliasPattern, {
26
+ floatingEffectCall: new RegExp(`^(?:void\\s+)?\\(*\\s*(?:${aliasPattern})\\.(?!(?:${runtimeMethods})\\b)[A-Za-z_$][\\w$]*\\s*\\(`),
27
+ guardedAndEffectCall: new RegExp(`^[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*)?\\s*&&\\s*(?:${aliasPattern})\\.(?!(?:${runtimeMethods})\\b)[A-Za-z_$][\\w$]*\\s*\\(`),
28
+ guardedOrEffectCall: new RegExp(`^[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*)?\\s*\\|\\|\\s*(?:${aliasPattern})\\.(?!(?:${runtimeMethods})\\b)[A-Za-z_$][\\w$]*\\s*\\(`),
29
+ inlineIfEffectCall: new RegExp(`^if\\s*\\([^)]*\\)\\s*(?:${aliasPattern})\\.(?!(?:${runtimeMethods})\\b)[A-Za-z_$][\\w$]*\\s*\\(`),
30
+ ternaryEffectCall: new RegExp(`\\?\\s*(?:${aliasPattern})\\.(?!(?:${runtimeMethods})\\b)[A-Za-z_$][\\w$]*\\s*\\(`),
31
+ });
32
+ };
33
+ const hasFloatingEffectCandidateLine = (line, aliasNeedles) => {
34
+ if (line.includes('.pipe') || line.includes('Schema.decode')) {
35
+ return true;
36
+ }
37
+ return aliasNeedles.some((needle) => line.includes(needle));
38
+ };
39
+ const lineEndFor = (source, lineStart) => {
40
+ const newlineIndex = source.indexOf('\n', lineStart);
41
+ if (newlineIndex === -1) {
42
+ return source.length;
43
+ }
44
+ return newlineIndex;
45
+ };
46
+ const nextLineStart = (source, lineStart) => {
47
+ const newlineIndex = source.indexOf('\n', lineStart);
48
+ if (newlineIndex === -1) {
49
+ return undefined;
50
+ }
51
+ return newlineIndex + 1;
52
+ };
53
+ const isStandaloneFloatingCall = (input) => input.patterns.floatingEffectCall.test(input.line) &&
54
+ !/[=(:,[]\s*$/.test(input.previous) &&
55
+ !input.previous.endsWith('.pipe(') &&
56
+ !input.line.endsWith(',');
57
+ const isFloatingPipeCall = (line, previous) => /^[A-Za-z_$][\w$]*\.pipe\s*\([\s\S]*?\bEffect\./.test(line) && !/[=(:,[]\s*$/.test(previous);
58
+ const isFloatingDecodeCall = (line) => /^Schema\.decode[A-Za-z]*\s*\([^)]*\)\s*\([^)]*\)\s*;?$/.test(line);
59
+ const isFloatingGuardedCall = (line, patterns) => patterns.inlineIfEffectCall.test(line) ||
60
+ patterns.guardedAndEffectCall.test(line) ||
61
+ patterns.guardedOrEffectCall.test(line) ||
62
+ patterns.ternaryEffectCall.test(line);
63
+ const isFloatingEffectLine = (input) => isStandaloneFloatingCall(input) ||
64
+ isFloatingPipeCall(input.line, input.previous) ||
65
+ isFloatingDecodeCall(input.line) ||
66
+ isFloatingGuardedCall(input.line, input.patterns);
67
+ const floatingLineState = (code, lineStart, previous) => {
68
+ const line = code.slice(lineStart, lineEndFor(code, lineStart)).trim();
69
+ if (line === '') {
70
+ return { line, nextPrevious: previous, nextStart: nextLineStart(code, lineStart), previous };
71
+ }
72
+ return { line, nextPrevious: line, nextStart: nextLineStart(code, lineStart), previous };
73
+ };
74
+ const isFloatingEffectCandidate = (state, aliasNeedles, patterns) => hasFloatingEffectCandidateLine(state.line, aliasNeedles) &&
75
+ isFloatingEffectLine({ line: state.line, patterns, previous: state.previous });
76
+ const hasFloatingEffectLines = (code, aliasNeedles, aliases) => {
77
+ const patterns = floatingEffectPatterns(aliases);
78
+ let state = floatingLineState(code, 0, '');
79
+ while (true) {
80
+ if (isFloatingEffectCandidate(state, aliasNeedles, patterns)) {
81
+ return true;
82
+ }
83
+ if (state.nextStart === undefined) {
84
+ return false;
85
+ }
86
+ state = floatingLineState(code, state.nextStart, state.nextPrevious);
87
+ }
88
+ };
89
+ const hasFloatingPipeStatement = (code) => {
90
+ for (const match of code.matchAll(/^\s*[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*)?\.pipe\s*\(/gm)) {
91
+ const statementPrefix = code.slice(code.lastIndexOf(';', match.index) + 1, match.index);
92
+ if (!/[=(:,[]\s*$/.test(statementPrefix.trimEnd())) {
93
+ const openParenIndex = code.indexOf('(', match.index);
94
+ const pipeCall = code.slice(match.index, findBalancedCallEnd(code, openParenIndex) + 1);
95
+ if (/\bEffect\./.test(pipeCall)) {
96
+ return true;
97
+ }
98
+ }
99
+ }
100
+ return false;
101
+ };
102
+ /**
103
+ * Internal helper exported for package-local composition.
104
+ *
105
+ * @internal
106
+ */
107
+ export const hasFloatingEffect = (source) => {
108
+ const code = stripCommentsAndStrings(source);
109
+ const aliasNeedles = effectImportAliases(source).map((alias) => `${alias}.`);
110
+ const aliases = effectAliasesPattern(source);
111
+ return hasFloatingEffectLines(code, aliasNeedles, aliases) || hasFloatingPipeStatement(code);
112
+ };
113
+ //# sourceMappingURL=effect-default-floating-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effect-default-floating-helpers.js","sourceRoot":"","sources":["../../src/rules/effect-default-floating-helpers.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,gFAAgF;AAChF,gFAAgF;AAChF,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AACvF,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,MAAM,wBAAwB,GAAG,GAAG,CAAC;AACrC,MAAM,0BAA0B,GAAG,IAAI,GAAG,EAAkC,CAAC;AAgB7E,MAAM,oBAAoB,GAAG,CAC3B,KAAyB,EACzB,GAAW,EACX,KAAY,EACL,EAAE;IACT,IAAI,KAAK,CAAC,IAAI,IAAI,wBAAwB,EAAE,CAAC;QAC3C,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;QAC3C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IACD,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACtB,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,CAAC,YAAoB,EAA0B,EAAE;IAC9E,MAAM,cAAc,GAAG,0BAA0B,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACpE,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;QACjC,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,MAAM,cAAc,GAAG,uDAAuD,CAAC;IAC/E,OAAO,oBAAoB,CAAC,0BAA0B,EAAE,YAAY,EAAE;QACpE,kBAAkB,EAAE,IAAI,MAAM,CAC5B,4BAA4B,YAAY,aAAa,cAAc,+BAA+B,CACnG;QACD,oBAAoB,EAAE,IAAI,MAAM,CAC9B,2DAA2D,YAAY,aAAa,cAAc,+BAA+B,CAClI;QACD,mBAAmB,EAAE,IAAI,MAAM,CAC7B,+DAA+D,YAAY,aAAa,cAAc,+BAA+B,CACtI;QACD,kBAAkB,EAAE,IAAI,MAAM,CAC5B,4BAA4B,YAAY,aAAa,cAAc,+BAA+B,CACnG;QACD,iBAAiB,EAAE,IAAI,MAAM,CAC3B,aAAa,YAAY,aAAa,cAAc,+BAA+B,CACpF;KACF,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,8BAA8B,GAAG,CAAC,IAAY,EAAE,YAA+B,EAAW,EAAE;IAChG,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;QAC7D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;AAC9D,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,MAAc,EAAE,SAAiB,EAAU,EAAE;IAC/D,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACrD,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE,CAAC;QACxB,OAAO,MAAM,CAAC,MAAM,CAAC;IACvB,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,MAAc,EAAE,SAAiB,EAAsB,EAAE;IAC9E,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACrD,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE,CAAC;QACxB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,YAAY,GAAG,CAAC,CAAC;AAC1B,CAAC,CAAC;AAEF,MAAM,wBAAwB,GAAG,CAAC,KAAwB,EAAW,EAAE,CACrE,KAAK,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IAClD,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;IACnC,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAClC,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAE5B,MAAM,kBAAkB,GAAG,CAAC,IAAY,EAAE,QAAgB,EAAW,EAAE,CACrE,gDAAgD,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAE/F,MAAM,oBAAoB,GAAG,CAAC,IAAY,EAAW,EAAE,CACrD,wDAAwD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEtE,MAAM,qBAAqB,GAAG,CAAC,IAAY,EAAE,QAAgC,EAAW,EAAE,CACxF,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;IACtC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;IACxC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;IACvC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAExC,MAAM,oBAAoB,GAAG,CAAC,KAAwB,EAAW,EAAE,CACjE,wBAAwB,CAAC,KAAK,CAAC;IAC/B,kBAAkB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC;IAC9C,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC;IAChC,qBAAqB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;AAEpD,MAAM,iBAAiB,GAAG,CACxB,IAAY,EACZ,SAAiB,EACjB,QAAgB,EAC8D,EAAE;IAChF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACvE,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;QAChB,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IAC/F,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;AAC3F,CAAC,CAAC;AAEF,MAAM,yBAAyB,GAAG,CAChC,KAAyC,EACzC,YAA+B,EAC/B,QAAgC,EACvB,EAAE,CACX,8BAA8B,CAAC,KAAK,CAAC,IAAI,EAAE,YAAY,CAAC;IACxD,oBAAoB,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;AAEjF,MAAM,sBAAsB,GAAG,CAC7B,IAAY,EACZ,YAA+B,EAC/B,OAAe,EACN,EAAE;IACX,MAAM,QAAQ,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;IACjD,IAAI,KAAK,GAAG,iBAAiB,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAC3C,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,yBAAyB,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,CAAC,EAAE,CAAC;YAC7D,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YAClC,OAAO,KAAK,CAAC;QACf,CAAC;QACD,KAAK,GAAG,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IACvE,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,wBAAwB,GAAG,CAAC,IAAY,EAAW,EAAE;IACzD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,0DAA0D,CAAC,EAAE,CAAC;QAC9F,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QACxF,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;YACnD,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,mBAAmB,CAAC,IAAI,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;YACxF,IAAI,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAChC,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,MAAc,EAAW,EAAE;IAC3D,MAAM,IAAI,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAC7C,MAAM,YAAY,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;IAC7E,MAAM,OAAO,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC7C,OAAO,sBAAsB,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,CAAC,IAAI,wBAAwB,CAAC,IAAI,CAAC,CAAC;AAC/F,CAAC,CAAC"}
@@ -1,33 +1,9 @@
1
- declare function hasRuntimeInEffect(source: string): boolean;
2
- declare function hasNestedFlatMap(source: string): boolean;
3
- declare function hasUnboundedEffectConcurrency(source: string): boolean;
4
- declare function hasUnboundedFlatMapConcurrency(source: string): boolean;
5
- declare function hasParsedJsonNumberFromString(source: string): boolean;
6
- declare function hasEffectInArrayForEach(source: string): boolean;
7
- declare function hasEffectInPromiseCallback(source: string): boolean;
8
- declare function hasReturnEffectInGen(source: string): boolean;
9
- declare function hasYieldWithoutStarInGen(source: string): boolean | number;
10
- declare function hasAsyncAwaitInEffect(source: string): boolean;
11
- declare function hasSyncForPromise(source: string): boolean;
12
- declare function hasSyncForThrowingOps(source: string): boolean;
13
- declare function hasThrowInEffect(source: string): boolean;
14
- declare function hasFloatingEffect(source: string): boolean;
15
- declare function hasUnobservedFork(source: string): boolean;
16
- declare function hasRunForkWithoutObserver(source: string): boolean;
17
- declare function hasUnsafeLazyEvaluation(source: string): boolean;
18
- declare function hasSchemaSyncDecodeInEffectWorkflow(source: string): boolean;
19
- declare function hasSchemaPromiseDecode(source: string): boolean;
20
- declare function hasTryPromiseWithoutTypedCatch(source: string): boolean;
21
- declare function hasExternalJsonWithoutDecodeUnknown(source: string): boolean;
22
- declare function hasCastAfterSchemaDecode(source: string): boolean;
23
- declare function hasUnhandledSchemaEffectDecode(source: string): boolean;
24
- declare function hasJsonParsedBeforeSchemaStringDecode(source: string): boolean;
25
- declare function hasRecursiveEffectWithoutSuspend(source: string): boolean;
26
- declare function hasUnloggedIgnore(source: string): boolean;
27
- declare function hasMultipleCatchTagsInOnePipe(source: string): boolean;
28
- declare function hasBroadCatchAllWithoutRethrow(source: string): boolean;
29
- declare function hasErrorMappingWithoutCause(source: string): boolean;
30
- declare function hasForkDaemonWithoutCleanup(source: string): boolean;
31
- declare function hasForkInUninterruptibleWithoutRestore(source: string): boolean;
32
- export { hasAsyncAwaitInEffect, hasEffectInArrayForEach, hasEffectInPromiseCallback, hasErrorMappingWithoutCause, hasFloatingEffect, hasForkDaemonWithoutCleanup, hasForkInUninterruptibleWithoutRestore, hasBroadCatchAllWithoutRethrow, hasJsonParsedBeforeSchemaStringDecode, hasMultipleCatchTagsInOnePipe, hasNestedFlatMap, hasRecursiveEffectWithoutSuspend, hasReturnEffectInGen, hasRunForkWithoutObserver, hasRuntimeInEffect, hasSchemaPromiseDecode, hasSchemaSyncDecodeInEffectWorkflow, hasSyncForPromise, hasSyncForThrowingOps, hasTryPromiseWithoutTypedCatch, hasUnhandledSchemaEffectDecode, hasParsedJsonNumberFromString, hasCastAfterSchemaDecode, hasExternalJsonWithoutDecodeUnknown, hasUnloggedIgnore, hasUnboundedEffectConcurrency, hasUnboundedFlatMapConcurrency, hasUnobservedFork, hasThrowInEffect, hasUnsafeLazyEvaluation, hasYieldWithoutStarInGen, };
1
+ export { effectAliasesPattern, effectCallBodies, effectCallPattern, enclosingPipeBody, localCallSegment, someEffectWorkflowBody, strippedCallSegment, } from './effect-default-scan-helpers';
2
+ export { hasFloatingEffect } from './effect-default-floating-helpers';
3
+ export { hasRunForkWithoutObserver, hasUnobservedFork } from './effect-default-fiber-helpers';
4
+ export { hasUnreleasedAcquire, hasUnscopedAcquireRelease, hasUnscopedResourceWorkflow, } from './effect-default-resource-helpers';
5
+ export { hasBroadCatchAllWithoutRethrow, hasErrorMappingWithoutCause, hasForkDaemonWithoutCleanup, hasForkInUninterruptibleWithoutRestore, hasMultipleCatchTagsInOnePipe, hasUnloggedIgnore, hasUnsafeLazyEvaluation, } from './effect-default-safety-helpers';
6
+ export { hasCastAfterSchemaDecode, hasExternalJSONWithoutDecodeUnknown, hasJSONParsedBeforeSchemaStringDecode, hasSchemaPromiseDecode, hasSchemaSyncDecodeInEffectWorkflow, hasUnhandledSchemaEffectDecode, } from './effect-default-schema-helpers';
7
+ export { hasForkBeforeTestClockAdjust, hasRealSleepWithoutTestClock, hasTestClockWithoutEffectContext, } from './effect-default-test-helpers';
8
+ export { hasAsyncAwaitInEffect, hasEffectInArrayForEach, hasEffectInPromiseCallback, hasNestedFlatMap, hasParsedJSONNumberFromString, hasRecursiveEffectWithoutSuspend, hasReturnEffectInGen, hasRuntimeInEffect, hasSyncForPromise, hasSyncForThrowingOPS, hasThrowInEffect, hasTryPromiseWithoutTypedCatch, hasUnboundedEffectConcurrency, hasUnboundedFlatMapConcurrency, hasYieldWithoutStarInGen, } from './effect-default-workflow-helpers';
33
9
  //# sourceMappingURL=effect-default-helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"effect-default-helpers.d.ts","sourceRoot":"","sources":["../../src/rules/effect-default-helpers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"effect-default-helpers.d.ts","sourceRoot":"","sources":["../../src/rules/effect-default-helpers.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAC9F,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EACzB,2BAA2B,GAC5B,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,8BAA8B,EAC9B,2BAA2B,EAC3B,2BAA2B,EAC3B,sCAAsC,EACtC,6BAA6B,EAC7B,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,wBAAwB,EACxB,mCAAmC,EACnC,qCAAqC,EACrC,sBAAsB,EACtB,mCAAmC,EACnC,8BAA8B,GAC/B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,4BAA4B,EAC5B,4BAA4B,EAC5B,gCAAgC,GACjC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,0BAA0B,EAC1B,gBAAgB,EAChB,6BAA6B,EAC7B,gCAAgC,EAChC,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,EAChB,8BAA8B,EAC9B,6BAA6B,EAC7B,8BAA8B,EAC9B,wBAAwB,GACzB,MAAM,mCAAmC,CAAC"}