@codeperfect/eslint-plugin 1.0.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 (248) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +128 -0
  3. package/dist/.tsbuildinfo +1 -0
  4. package/dist/architecture/consistent-barrel-files/consistent-barrel-files-listeners.d.ts +16 -0
  5. package/dist/architecture/consistent-barrel-files/consistent-barrel-files-listeners.d.ts.map +1 -0
  6. package/dist/architecture/consistent-barrel-files/consistent-barrel-files-listeners.js +131 -0
  7. package/dist/architecture/consistent-barrel-files/consistent-barrel-files-options.d.ts +48 -0
  8. package/dist/architecture/consistent-barrel-files/consistent-barrel-files-options.d.ts.map +1 -0
  9. package/dist/architecture/consistent-barrel-files/consistent-barrel-files-options.js +126 -0
  10. package/dist/architecture/consistent-barrel-files/exports-only-rule-test-utilities.d.ts +40 -0
  11. package/dist/architecture/consistent-barrel-files/exports-only-rule-test-utilities.d.ts.map +1 -0
  12. package/dist/architecture/consistent-barrel-files/exports-only-rule-test-utilities.js +90 -0
  13. package/dist/architecture/consistent-barrel-files/exports-only-rule.d.ts +11 -0
  14. package/dist/architecture/consistent-barrel-files/exports-only-rule.d.ts.map +1 -0
  15. package/dist/architecture/consistent-barrel-files/exports-only-rule.js +218 -0
  16. package/dist/architecture/consistent-barrel-files/index.d.ts +5 -0
  17. package/dist/architecture/consistent-barrel-files/index.d.ts.map +1 -0
  18. package/dist/architecture/consistent-barrel-files/index.js +4 -0
  19. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.d.ts +11 -0
  20. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.d.ts.map +1 -0
  21. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.js +100 -0
  22. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-test-utilities.d.ts +40 -0
  23. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-test-utilities.d.ts.map +1 -0
  24. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-test-utilities.js +90 -0
  25. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-utilities.d.ts +65 -0
  26. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-utilities.d.ts.map +1 -0
  27. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-utilities.js +154 -0
  28. package/dist/architecture/consistent-barrel-files/rule.d.ts +11 -0
  29. package/dist/architecture/consistent-barrel-files/rule.d.ts.map +1 -0
  30. package/dist/architecture/consistent-barrel-files/rule.js +58 -0
  31. package/dist/architecture/consistent-barrel-files/test-helpers.d.ts +141 -0
  32. package/dist/architecture/consistent-barrel-files/test-helpers.d.ts.map +1 -0
  33. package/dist/architecture/consistent-barrel-files/test-helpers.js +229 -0
  34. package/dist/architecture/consistent-barrel-files/types.d.ts +25 -0
  35. package/dist/architecture/consistent-barrel-files/types.d.ts.map +1 -0
  36. package/dist/architecture/consistent-barrel-files/types.js +2 -0
  37. package/dist/architecture/index.d.ts +2 -0
  38. package/dist/architecture/index.d.ts.map +1 -0
  39. package/dist/architecture/index.js +2 -0
  40. package/dist/benchmark-rules.d.ts +83 -0
  41. package/dist/benchmark-rules.d.ts.map +1 -0
  42. package/dist/benchmark-rules.js +175 -0
  43. package/dist/codeperfect-eslint-plugin-1.0.0.tgz +0 -0
  44. package/dist/codeperfect-plugin.d.ts +46 -0
  45. package/dist/codeperfect-plugin.d.ts.map +1 -0
  46. package/dist/codeperfect-plugin.js +29 -0
  47. package/dist/core/index.d.ts +3 -0
  48. package/dist/core/index.d.ts.map +1 -0
  49. package/dist/core/index.js +3 -0
  50. package/dist/core/no-multiple-declarators/index.d.ts +2 -0
  51. package/dist/core/no-multiple-declarators/index.d.ts.map +1 -0
  52. package/dist/core/no-multiple-declarators/index.js +2 -0
  53. package/dist/core/no-multiple-declarators/rule.d.ts +4 -0
  54. package/dist/core/no-multiple-declarators/rule.d.ts.map +1 -0
  55. package/dist/core/no-multiple-declarators/rule.js +100 -0
  56. package/dist/core/prefer-interface-types/index.d.ts +2 -0
  57. package/dist/core/prefer-interface-types/index.d.ts.map +1 -0
  58. package/dist/core/prefer-interface-types/index.js +2 -0
  59. package/dist/core/prefer-interface-types/rule.d.ts +5 -0
  60. package/dist/core/prefer-interface-types/rule.d.ts.map +1 -0
  61. package/dist/core/prefer-interface-types/rule.js +145 -0
  62. package/dist/core/prefer-interface-types/test-helpers.d.ts +110 -0
  63. package/dist/core/prefer-interface-types/test-helpers.d.ts.map +1 -0
  64. package/dist/core/prefer-interface-types/test-helpers.js +116 -0
  65. package/dist/custom-rule-documentation.d.ts +36 -0
  66. package/dist/custom-rule-documentation.d.ts.map +1 -0
  67. package/dist/custom-rule-documentation.js +35 -0
  68. package/dist/custom-rules.d.ts +61 -0
  69. package/dist/custom-rules.d.ts.map +1 -0
  70. package/dist/custom-rules.js +70 -0
  71. package/dist/docs/index.d.ts +4 -0
  72. package/dist/docs/index.d.ts.map +1 -0
  73. package/dist/docs/index.js +4 -0
  74. package/dist/docs/no-interface-member-docs/comment-utilities-test-helpers.d.ts +89 -0
  75. package/dist/docs/no-interface-member-docs/comment-utilities-test-helpers.d.ts.map +1 -0
  76. package/dist/docs/no-interface-member-docs/comment-utilities-test-helpers.js +129 -0
  77. package/dist/docs/no-interface-member-docs/comment-utilities.d.ts +48 -0
  78. package/dist/docs/no-interface-member-docs/comment-utilities.d.ts.map +1 -0
  79. package/dist/docs/no-interface-member-docs/comment-utilities.js +146 -0
  80. package/dist/docs/no-interface-member-docs/index.d.ts +2 -0
  81. package/dist/docs/no-interface-member-docs/index.d.ts.map +1 -0
  82. package/dist/docs/no-interface-member-docs/index.js +2 -0
  83. package/dist/docs/no-interface-member-docs/parameter-tags.d.ts +13 -0
  84. package/dist/docs/no-interface-member-docs/parameter-tags.d.ts.map +1 -0
  85. package/dist/docs/no-interface-member-docs/parameter-tags.js +101 -0
  86. package/dist/docs/no-interface-member-docs/parameter-utilities.d.ts +24 -0
  87. package/dist/docs/no-interface-member-docs/parameter-utilities.d.ts.map +1 -0
  88. package/dist/docs/no-interface-member-docs/parameter-utilities.js +125 -0
  89. package/dist/docs/no-interface-member-docs/rule.d.ts +5 -0
  90. package/dist/docs/no-interface-member-docs/rule.d.ts.map +1 -0
  91. package/dist/docs/no-interface-member-docs/rule.js +168 -0
  92. package/dist/docs/no-interface-member-docs/test-helpers.d.ts +103 -0
  93. package/dist/docs/no-interface-member-docs/test-helpers.d.ts.map +1 -0
  94. package/dist/docs/no-interface-member-docs/test-helpers.js +157 -0
  95. package/dist/docs/no-interface-member-docs/types.d.ts +30 -0
  96. package/dist/docs/no-interface-member-docs/types.d.ts.map +1 -0
  97. package/dist/docs/no-interface-member-docs/types.js +2 -0
  98. package/dist/docs/require-example-language/empty-fence-fixes.d.ts +29 -0
  99. package/dist/docs/require-example-language/empty-fence-fixes.d.ts.map +1 -0
  100. package/dist/docs/require-example-language/empty-fence-fixes.js +169 -0
  101. package/dist/docs/require-example-language/example-utilities.d.ts +70 -0
  102. package/dist/docs/require-example-language/example-utilities.d.ts.map +1 -0
  103. package/dist/docs/require-example-language/example-utilities.js +76 -0
  104. package/dist/docs/require-example-language/examples.d.ts +36 -0
  105. package/dist/docs/require-example-language/examples.d.ts.map +1 -0
  106. package/dist/docs/require-example-language/examples.js +181 -0
  107. package/dist/docs/require-example-language/fixes.d.ts +49 -0
  108. package/dist/docs/require-example-language/fixes.d.ts.map +1 -0
  109. package/dist/docs/require-example-language/fixes.js +182 -0
  110. package/dist/docs/require-example-language/index.d.ts +3 -0
  111. package/dist/docs/require-example-language/index.d.ts.map +1 -0
  112. package/dist/docs/require-example-language/index.js +2 -0
  113. package/dist/docs/require-example-language/reporting.d.ts +60 -0
  114. package/dist/docs/require-example-language/reporting.d.ts.map +1 -0
  115. package/dist/docs/require-example-language/reporting.js +145 -0
  116. package/dist/docs/require-example-language/rule.d.ts +7 -0
  117. package/dist/docs/require-example-language/rule.d.ts.map +1 -0
  118. package/dist/docs/require-example-language/rule.js +34 -0
  119. package/dist/docs/require-example-language/types.d.ts +22 -0
  120. package/dist/docs/require-example-language/types.d.ts.map +1 -0
  121. package/dist/docs/require-example-language/types.js +2 -0
  122. package/dist/docs/single-line-jsdoc/index.d.ts +2 -0
  123. package/dist/docs/single-line-jsdoc/index.d.ts.map +1 -0
  124. package/dist/docs/single-line-jsdoc/index.js +2 -0
  125. package/dist/docs/single-line-jsdoc/rule.d.ts +5 -0
  126. package/dist/docs/single-line-jsdoc/rule.d.ts.map +1 -0
  127. package/dist/docs/single-line-jsdoc/rule.js +196 -0
  128. package/dist/docs/single-line-jsdoc/single-line-jsdoc-content.d.ts +16 -0
  129. package/dist/docs/single-line-jsdoc/single-line-jsdoc-content.d.ts.map +1 -0
  130. package/dist/docs/single-line-jsdoc/single-line-jsdoc-content.js +95 -0
  131. package/dist/docs/single-line-jsdoc/single-line-jsdoc-utilities.d.ts +25 -0
  132. package/dist/docs/single-line-jsdoc/single-line-jsdoc-utilities.d.ts.map +1 -0
  133. package/dist/docs/single-line-jsdoc/single-line-jsdoc-utilities.js +140 -0
  134. package/dist/docs/test-helpers.d.ts +50 -0
  135. package/dist/docs/test-helpers.d.ts.map +1 -0
  136. package/dist/docs/test-helpers.js +107 -0
  137. package/dist/index.d.ts +6 -0
  138. package/dist/index.d.ts.map +1 -0
  139. package/dist/index.js +6 -0
  140. package/dist/presets.d.ts +10 -0
  141. package/dist/presets.d.ts.map +1 -0
  142. package/dist/presets.js +50 -0
  143. package/dist/rules/index.d.ts +5 -0
  144. package/dist/rules/index.d.ts.map +1 -0
  145. package/dist/rules/index.js +6 -0
  146. package/dist/testing/aaa/analyzer.d.ts +36 -0
  147. package/dist/testing/aaa/analyzer.d.ts.map +1 -0
  148. package/dist/testing/aaa/analyzer.js +490 -0
  149. package/dist/testing/aaa/index.d.ts +3 -0
  150. package/dist/testing/aaa/index.d.ts.map +1 -0
  151. package/dist/testing/aaa/index.js +2 -0
  152. package/dist/testing/aaa/types.d.ts +31 -0
  153. package/dist/testing/aaa/types.d.ts.map +1 -0
  154. package/dist/testing/aaa/types.js +2 -0
  155. package/dist/testing/assert-actual-expected-names/index.d.ts +2 -0
  156. package/dist/testing/assert-actual-expected-names/index.d.ts.map +1 -0
  157. package/dist/testing/assert-actual-expected-names/index.js +2 -0
  158. package/dist/testing/assert-actual-expected-names/rule.d.ts +4 -0
  159. package/dist/testing/assert-actual-expected-names/rule.d.ts.map +1 -0
  160. package/dist/testing/assert-actual-expected-names/rule.js +54 -0
  161. package/dist/testing/enforce-aaa-phase-purity/index.d.ts +2 -0
  162. package/dist/testing/enforce-aaa-phase-purity/index.d.ts.map +1 -0
  163. package/dist/testing/enforce-aaa-phase-purity/index.js +2 -0
  164. package/dist/testing/enforce-aaa-phase-purity/rule.d.ts +4 -0
  165. package/dist/testing/enforce-aaa-phase-purity/rule.d.ts.map +1 -0
  166. package/dist/testing/enforce-aaa-phase-purity/rule.js +110 -0
  167. package/dist/testing/enforce-aaa-structure/index.d.ts +2 -0
  168. package/dist/testing/enforce-aaa-structure/index.d.ts.map +1 -0
  169. package/dist/testing/enforce-aaa-structure/index.js +2 -0
  170. package/dist/testing/enforce-aaa-structure/rule.d.ts +4 -0
  171. package/dist/testing/enforce-aaa-structure/rule.d.ts.map +1 -0
  172. package/dist/testing/enforce-aaa-structure/rule.js +48 -0
  173. package/dist/testing/index.d.ts +9 -0
  174. package/dist/testing/index.d.ts.map +1 -0
  175. package/dist/testing/index.js +9 -0
  176. package/dist/testing/prefer-vi-mocked-import/fix.d.ts +16 -0
  177. package/dist/testing/prefer-vi-mocked-import/fix.d.ts.map +1 -0
  178. package/dist/testing/prefer-vi-mocked-import/fix.js +224 -0
  179. package/dist/testing/prefer-vi-mocked-import/index.d.ts +2 -0
  180. package/dist/testing/prefer-vi-mocked-import/index.d.ts.map +1 -0
  181. package/dist/testing/prefer-vi-mocked-import/index.js +2 -0
  182. package/dist/testing/prefer-vi-mocked-import/match-bindings.d.ts +16 -0
  183. package/dist/testing/prefer-vi-mocked-import/match-bindings.d.ts.map +1 -0
  184. package/dist/testing/prefer-vi-mocked-import/match-bindings.js +52 -0
  185. package/dist/testing/prefer-vi-mocked-import/match-declarations.d.ts +16 -0
  186. package/dist/testing/prefer-vi-mocked-import/match-declarations.d.ts.map +1 -0
  187. package/dist/testing/prefer-vi-mocked-import/match-declarations.js +99 -0
  188. package/dist/testing/prefer-vi-mocked-import/match-helpers.d.ts +66 -0
  189. package/dist/testing/prefer-vi-mocked-import/match-helpers.d.ts.map +1 -0
  190. package/dist/testing/prefer-vi-mocked-import/match-helpers.js +102 -0
  191. package/dist/testing/prefer-vi-mocked-import/match-imports.d.ts +17 -0
  192. package/dist/testing/prefer-vi-mocked-import/match-imports.d.ts.map +1 -0
  193. package/dist/testing/prefer-vi-mocked-import/match-imports.js +156 -0
  194. package/dist/testing/prefer-vi-mocked-import/match-rewrites.d.ts +42 -0
  195. package/dist/testing/prefer-vi-mocked-import/match-rewrites.d.ts.map +1 -0
  196. package/dist/testing/prefer-vi-mocked-import/match-rewrites.js +119 -0
  197. package/dist/testing/prefer-vi-mocked-import/match-walk.d.ts +13 -0
  198. package/dist/testing/prefer-vi-mocked-import/match-walk.d.ts.map +1 -0
  199. package/dist/testing/prefer-vi-mocked-import/match-walk.js +62 -0
  200. package/dist/testing/prefer-vi-mocked-import/match.d.ts +15 -0
  201. package/dist/testing/prefer-vi-mocked-import/match.d.ts.map +1 -0
  202. package/dist/testing/prefer-vi-mocked-import/match.js +193 -0
  203. package/dist/testing/prefer-vi-mocked-import/rule.d.ts +5 -0
  204. package/dist/testing/prefer-vi-mocked-import/rule.d.ts.map +1 -0
  205. package/dist/testing/prefer-vi-mocked-import/rule.js +32 -0
  206. package/dist/testing/prefer-vi-mocked-import/types.d.ts +83 -0
  207. package/dist/testing/prefer-vi-mocked-import/types.d.ts.map +1 -0
  208. package/dist/testing/prefer-vi-mocked-import/types.js +2 -0
  209. package/dist/testing/require-aaa-sections/index.d.ts +2 -0
  210. package/dist/testing/require-aaa-sections/index.d.ts.map +1 -0
  211. package/dist/testing/require-aaa-sections/index.js +2 -0
  212. package/dist/testing/require-aaa-sections/rule.d.ts +4 -0
  213. package/dist/testing/require-aaa-sections/rule.d.ts.map +1 -0
  214. package/dist/testing/require-aaa-sections/rule.js +111 -0
  215. package/dist/testing/require-act-result-capture/index.d.ts +2 -0
  216. package/dist/testing/require-act-result-capture/index.d.ts.map +1 -0
  217. package/dist/testing/require-act-result-capture/index.js +2 -0
  218. package/dist/testing/require-act-result-capture/rule.d.ts +4 -0
  219. package/dist/testing/require-act-result-capture/rule.d.ts.map +1 -0
  220. package/dist/testing/require-act-result-capture/rule.js +34 -0
  221. package/dist/testing/require-test-companion/index.d.ts +3 -0
  222. package/dist/testing/require-test-companion/index.d.ts.map +1 -0
  223. package/dist/testing/require-test-companion/index.js +3 -0
  224. package/dist/testing/require-test-companion/require-test-companion-listeners.d.ts +16 -0
  225. package/dist/testing/require-test-companion/require-test-companion-listeners.d.ts.map +1 -0
  226. package/dist/testing/require-test-companion/require-test-companion-listeners.js +145 -0
  227. package/dist/testing/require-test-companion/require-test-companion-options.d.ts +54 -0
  228. package/dist/testing/require-test-companion/require-test-companion-options.d.ts.map +1 -0
  229. package/dist/testing/require-test-companion/require-test-companion-options.js +112 -0
  230. package/dist/testing/require-test-companion/require-test-companion-test-helpers.d.ts +51 -0
  231. package/dist/testing/require-test-companion/require-test-companion-test-helpers.d.ts.map +1 -0
  232. package/dist/testing/require-test-companion/require-test-companion-test-helpers.js +183 -0
  233. package/dist/testing/require-test-companion/require-test-companion-utilities.d.ts +28 -0
  234. package/dist/testing/require-test-companion/require-test-companion-utilities.d.ts.map +1 -0
  235. package/dist/testing/require-test-companion/require-test-companion-utilities.js +26 -0
  236. package/dist/testing/require-test-companion/rule.d.ts +5 -0
  237. package/dist/testing/require-test-companion/rule.d.ts.map +1 -0
  238. package/dist/testing/require-test-companion/rule.js +57 -0
  239. package/dist/testing/require-test-companion/types.d.ts +11 -0
  240. package/dist/testing/require-test-companion/types.d.ts.map +1 -0
  241. package/dist/testing/require-test-companion/types.js +2 -0
  242. package/dist/testing/single-act-statement/index.d.ts +2 -0
  243. package/dist/testing/single-act-statement/index.d.ts.map +1 -0
  244. package/dist/testing/single-act-statement/index.js +2 -0
  245. package/dist/testing/single-act-statement/rule.d.ts +4 -0
  246. package/dist/testing/single-act-statement/rule.d.ts.map +1 -0
  247. package/dist/testing/single-act-statement/rule.js +33 -0
  248. package/package.json +106 -0
@@ -0,0 +1,29 @@
1
+ import { assertActualExpectedNamesRule, barrelFilesExportsOnlyRule, consistentBarrelFilesRule, enforceAaaPhasePurityRule, enforceAaaStructureRule, noInterfaceMemberDocumentationRule, noMultipleDeclaratorsRule, noReexportsOutsideBarrelsRule, preferInterfaceTypesRule, preferViMockedImportRule, requireAaaSectionsRule, requireActResultCaptureRule, requireExampleLanguageRule, requireTestCompanionRule, singleActStatementRule, singleLineJsdocRule, } from "./rules";
2
+ /** Rule registry exposed by the package plugin. */
3
+ const codeperfectRules = {
4
+ "assert-actual-expected-names": assertActualExpectedNamesRule,
5
+ "barrel-files-exports-only": barrelFilesExportsOnlyRule,
6
+ "consistent-barrel-files": consistentBarrelFilesRule,
7
+ "enforce-aaa-phase-purity": enforceAaaPhasePurityRule,
8
+ "enforce-aaa-structure": enforceAaaStructureRule,
9
+ "no-interface-member-docs": noInterfaceMemberDocumentationRule,
10
+ "no-multiple-declarators": noMultipleDeclaratorsRule,
11
+ "no-reexports-outside-barrels": noReexportsOutsideBarrelsRule,
12
+ "prefer-interface-types": preferInterfaceTypesRule,
13
+ "prefer-vi-mocked-import": preferViMockedImportRule,
14
+ "require-aaa-sections": requireAaaSectionsRule,
15
+ "require-act-result-capture": requireActResultCaptureRule,
16
+ "require-example-language": requireExampleLanguageRule,
17
+ "require-test-companion": requireTestCompanionRule,
18
+ "single-act-statement": singleActStatementRule,
19
+ "single-line-jsdoc": singleLineJsdocRule,
20
+ };
21
+ /** ESLint plugin object exported by the package. */
22
+ const codeperfectPlugin = {
23
+ meta: {
24
+ name: "@codeperfect/eslint-plugin",
25
+ },
26
+ rules: codeperfectRules,
27
+ };
28
+ export { codeperfectPlugin, codeperfectRules };
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZXBlcmZlY3QtcGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvZGVwZXJmZWN0LXBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQ0wsNkJBQTZCLEVBQzdCLDBCQUEwQixFQUMxQix5QkFBeUIsRUFDekIseUJBQXlCLEVBQ3pCLHVCQUF1QixFQUN2QixrQ0FBa0MsRUFDbEMseUJBQXlCLEVBQ3pCLDZCQUE2QixFQUM3Qix3QkFBd0IsRUFDeEIsd0JBQXdCLEVBQ3hCLHNCQUFzQixFQUN0QiwyQkFBMkIsRUFDM0IsMEJBQTBCLEVBQzFCLHdCQUF3QixFQUN4QixzQkFBc0IsRUFDdEIsbUJBQW1CLEdBQ3BCLE1BQU0sU0FBUyxDQUFDO0FBRWpCLG1EQUFtRDtBQUNuRCxNQUFNLGdCQUFnQixHQUFHO0lBQ3ZCLDhCQUE4QixFQUFFLDZCQUE2QjtJQUM3RCwyQkFBMkIsRUFBRSwwQkFBMEI7SUFDdkQseUJBQXlCLEVBQUUseUJBQXlCO0lBQ3BELDBCQUEwQixFQUFFLHlCQUF5QjtJQUNyRCx1QkFBdUIsRUFBRSx1QkFBdUI7SUFDaEQsMEJBQTBCLEVBQUUsa0NBQWtDO0lBQzlELHlCQUF5QixFQUFFLHlCQUF5QjtJQUNwRCw4QkFBOEIsRUFBRSw2QkFBNkI7SUFDN0Qsd0JBQXdCLEVBQUUsd0JBQXdCO0lBQ2xELHlCQUF5QixFQUFFLHdCQUF3QjtJQUNuRCxzQkFBc0IsRUFBRSxzQkFBc0I7SUFDOUMsNEJBQTRCLEVBQUUsMkJBQTJCO0lBQ3pELDBCQUEwQixFQUFFLDBCQUEwQjtJQUN0RCx3QkFBd0IsRUFBRSx3QkFBd0I7SUFDbEQsc0JBQXNCLEVBQUUsc0JBQXNCO0lBQzlDLG1CQUFtQixFQUFFLG1CQUFtQjtDQUNVLENBQUM7QUFFckQsb0RBQW9EO0FBQ3BELE1BQU0saUJBQWlCLEdBQUc7SUFDeEIsSUFBSSxFQUFFO1FBQ0osSUFBSSxFQUFFLDRCQUE0QjtLQUNuQztJQUNELEtBQUssRUFBRSxnQkFBZ0I7Q0FDZ0MsQ0FBQztBQUUxRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgTGludGVyLCBSdWxlIH0gZnJvbSBcImVzbGludFwiO1xuXG5pbXBvcnQge1xuICBhc3NlcnRBY3R1YWxFeHBlY3RlZE5hbWVzUnVsZSxcbiAgYmFycmVsRmlsZXNFeHBvcnRzT25seVJ1bGUsXG4gIGNvbnNpc3RlbnRCYXJyZWxGaWxlc1J1bGUsXG4gIGVuZm9yY2VBYWFQaGFzZVB1cml0eVJ1bGUsXG4gIGVuZm9yY2VBYWFTdHJ1Y3R1cmVSdWxlLFxuICBub0ludGVyZmFjZU1lbWJlckRvY3VtZW50YXRpb25SdWxlLFxuICBub011bHRpcGxlRGVjbGFyYXRvcnNSdWxlLFxuICBub1JlZXhwb3J0c091dHNpZGVCYXJyZWxzUnVsZSxcbiAgcHJlZmVySW50ZXJmYWNlVHlwZXNSdWxlLFxuICBwcmVmZXJWaU1vY2tlZEltcG9ydFJ1bGUsXG4gIHJlcXVpcmVBYWFTZWN0aW9uc1J1bGUsXG4gIHJlcXVpcmVBY3RSZXN1bHRDYXB0dXJlUnVsZSxcbiAgcmVxdWlyZUV4YW1wbGVMYW5ndWFnZVJ1bGUsXG4gIHJlcXVpcmVUZXN0Q29tcGFuaW9uUnVsZSxcbiAgc2luZ2xlQWN0U3RhdGVtZW50UnVsZSxcbiAgc2luZ2xlTGluZUpzZG9jUnVsZSxcbn0gZnJvbSBcIi4vcnVsZXNcIjtcblxuLyoqIFJ1bGUgcmVnaXN0cnkgZXhwb3NlZCBieSB0aGUgcGFja2FnZSBwbHVnaW4uICovXG5jb25zdCBjb2RlcGVyZmVjdFJ1bGVzID0ge1xuICBcImFzc2VydC1hY3R1YWwtZXhwZWN0ZWQtbmFtZXNcIjogYXNzZXJ0QWN0dWFsRXhwZWN0ZWROYW1lc1J1bGUsXG4gIFwiYmFycmVsLWZpbGVzLWV4cG9ydHMtb25seVwiOiBiYXJyZWxGaWxlc0V4cG9ydHNPbmx5UnVsZSxcbiAgXCJjb25zaXN0ZW50LWJhcnJlbC1maWxlc1wiOiBjb25zaXN0ZW50QmFycmVsRmlsZXNSdWxlLFxuICBcImVuZm9yY2UtYWFhLXBoYXNlLXB1cml0eVwiOiBlbmZvcmNlQWFhUGhhc2VQdXJpdHlSdWxlLFxuICBcImVuZm9yY2UtYWFhLXN0cnVjdHVyZVwiOiBlbmZvcmNlQWFhU3RydWN0dXJlUnVsZSxcbiAgXCJuby1pbnRlcmZhY2UtbWVtYmVyLWRvY3NcIjogbm9JbnRlcmZhY2VNZW1iZXJEb2N1bWVudGF0aW9uUnVsZSxcbiAgXCJuby1tdWx0aXBsZS1kZWNsYXJhdG9yc1wiOiBub011bHRpcGxlRGVjbGFyYXRvcnNSdWxlLFxuICBcIm5vLXJlZXhwb3J0cy1vdXRzaWRlLWJhcnJlbHNcIjogbm9SZWV4cG9ydHNPdXRzaWRlQmFycmVsc1J1bGUsXG4gIFwicHJlZmVyLWludGVyZmFjZS10eXBlc1wiOiBwcmVmZXJJbnRlcmZhY2VUeXBlc1J1bGUsXG4gIFwicHJlZmVyLXZpLW1vY2tlZC1pbXBvcnRcIjogcHJlZmVyVmlNb2NrZWRJbXBvcnRSdWxlLFxuICBcInJlcXVpcmUtYWFhLXNlY3Rpb25zXCI6IHJlcXVpcmVBYWFTZWN0aW9uc1J1bGUsXG4gIFwicmVxdWlyZS1hY3QtcmVzdWx0LWNhcHR1cmVcIjogcmVxdWlyZUFjdFJlc3VsdENhcHR1cmVSdWxlLFxuICBcInJlcXVpcmUtZXhhbXBsZS1sYW5ndWFnZVwiOiByZXF1aXJlRXhhbXBsZUxhbmd1YWdlUnVsZSxcbiAgXCJyZXF1aXJlLXRlc3QtY29tcGFuaW9uXCI6IHJlcXVpcmVUZXN0Q29tcGFuaW9uUnVsZSxcbiAgXCJzaW5nbGUtYWN0LXN0YXRlbWVudFwiOiBzaW5nbGVBY3RTdGF0ZW1lbnRSdWxlLFxuICBcInNpbmdsZS1saW5lLWpzZG9jXCI6IHNpbmdsZUxpbmVKc2RvY1J1bGUsXG59IGFzIGNvbnN0IHNhdGlzZmllcyBSZWNvcmQ8c3RyaW5nLCBSdWxlLlJ1bGVNb2R1bGU+O1xuXG4vKiogRVNMaW50IHBsdWdpbiBvYmplY3QgZXhwb3J0ZWQgYnkgdGhlIHBhY2thZ2UuICovXG5jb25zdCBjb2RlcGVyZmVjdFBsdWdpbiA9IHtcbiAgbWV0YToge1xuICAgIG5hbWU6IFwiQGNvZGVwZXJmZWN0L2VzbGludC1wbHVnaW5cIixcbiAgfSxcbiAgcnVsZXM6IGNvZGVwZXJmZWN0UnVsZXMsXG59IHNhdGlzZmllcyBOb25OdWxsYWJsZTxMaW50ZXIuQ29uZmlnW1wicGx1Z2luc1wiXT5bc3RyaW5nXTtcblxuZXhwb3J0IHsgY29kZXBlcmZlY3RQbHVnaW4sIGNvZGVwZXJmZWN0UnVsZXMgfTtcbiJdfQ==
@@ -0,0 +1,3 @@
1
+ export { noMultipleDeclaratorsRule } from "./no-multiple-declarators";
2
+ export { preferInterfaceTypesRule } from "./prefer-interface-types";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { noMultipleDeclaratorsRule } from "./no-multiple-declarators";
2
+ export { preferInterfaceTypesRule } from "./prefer-interface-types";
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29yZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IG5vTXVsdGlwbGVEZWNsYXJhdG9yc1J1bGUgfSBmcm9tIFwiLi9uby1tdWx0aXBsZS1kZWNsYXJhdG9yc1wiO1xuZXhwb3J0IHsgcHJlZmVySW50ZXJmYWNlVHlwZXNSdWxlIH0gZnJvbSBcIi4vcHJlZmVyLWludGVyZmFjZS10eXBlc1wiO1xuIl19
@@ -0,0 +1,2 @@
1
+ export { noMultipleDeclaratorsRule } from "./rule";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/no-multiple-declarators/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,QAAQ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { noMultipleDeclaratorsRule } from "./rule";
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29yZS9uby1tdWx0aXBsZS1kZWNsYXJhdG9ycy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBub011bHRpcGxlRGVjbGFyYXRvcnNSdWxlIH0gZnJvbSBcIi4vcnVsZVwiO1xuIl19
@@ -0,0 +1,4 @@
1
+ import type { Rule } from "eslint";
2
+ declare const noMultipleDeclaratorsRule: Rule.RuleModule;
3
+ export { noMultipleDeclaratorsRule };
4
+ //# sourceMappingURL=rule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rule.d.ts","sourceRoot":"","sources":["../../../src/core/no-multiple-declarators/rule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAkLnC,QAAA,MAAM,yBAAyB,EAAE,IAAI,CAAC,UAqBrC,CAAC;AAEF,OAAO,EAAE,yBAAyB,EAAE,CAAC"}
@@ -0,0 +1,100 @@
1
+ import { createRuleDocumentation } from "../../custom-rule-documentation";
2
+ const commentPattern = /\/\/|\/\*/u;
3
+ const loopParentTypes = new Set(["ForInStatement", "ForOfStatement"]);
4
+ const getSourceCode = (context) => context.sourceCode;
5
+ const getSourceText = (sourceCode) => typeof sourceCode.text === "string" ? sourceCode.text : sourceCode.getText();
6
+ const hasRange = (node) => Array.isArray(node?.range) && node.range.length === 2;
7
+ const hasFixData = (node) => Array.isArray(node.range) &&
8
+ node.range.length === 2 &&
9
+ typeof node.kind === "string";
10
+ const isLoopInitializer = (node) => {
11
+ const { parent } = node;
12
+ if (parent?.type === "ForStatement") {
13
+ return parent.init === node;
14
+ }
15
+ if (parent !== void 0 && loopParentTypes.has(parent.type)) {
16
+ return parent.left === node;
17
+ }
18
+ return false;
19
+ };
20
+ const isWrappedExport = (node) => node.parent?.type === "ExportDefaultDeclaration" ||
21
+ node.parent?.type === "ExportNamedDeclaration";
22
+ const getLineIndent = (sourceText, start) => {
23
+ const lineStart = sourceText.lastIndexOf("\n", start - 1) + 1;
24
+ const linePrefix = sourceText.slice(lineStart, start);
25
+ return linePrefix.replace(/[^\t ].*$/u, "");
26
+ };
27
+ const hasSeparatorComment = (declarations, sourceText) => {
28
+ for (const [index, declaration] of declarations.entries()) {
29
+ const nextDeclaration = declarations[index + 1];
30
+ if (nextDeclaration === void 0) {
31
+ break;
32
+ }
33
+ if (!hasRange(declaration) || !hasRange(nextDeclaration)) {
34
+ return true;
35
+ }
36
+ const separatorText = sourceText.slice(declaration.range[1], nextDeclaration.range[0]);
37
+ if (commentPattern.test(separatorText)) {
38
+ return true;
39
+ }
40
+ }
41
+ return false;
42
+ };
43
+ const canFix = (node, declarations, sourceText) => {
44
+ if (!hasFixData(node)) {
45
+ return false;
46
+ }
47
+ if (isLoopInitializer(node) || isWrappedExport(node)) {
48
+ return false;
49
+ }
50
+ return !hasSeparatorComment(declarations, sourceText);
51
+ };
52
+ const buildReplacement = (node, declarations, sourceCode) => {
53
+ const sourceText = getSourceText(sourceCode);
54
+ const indent = getLineIndent(sourceText, node.range[0]);
55
+ return declarations
56
+ .map((declaration) => `${node.kind} ${sourceCode.getText(declaration)};`)
57
+ .join(`\n${indent}`);
58
+ };
59
+ const reportVariableDeclaration = (context, node) => {
60
+ const declarations = node.declarations ?? [];
61
+ if (declarations.length <= 1) {
62
+ return;
63
+ }
64
+ const sourceCode = getSourceCode(context);
65
+ const sourceText = getSourceText(sourceCode);
66
+ const fixable = canFix(node, declarations, sourceText);
67
+ if (fixable) {
68
+ const fixedNode = node;
69
+ context.report({
70
+ fix: (fixer) => fixer.replaceTextRange(fixedNode.range, buildReplacement(fixedNode, declarations, sourceCode)),
71
+ messageId: "singleDeclarator",
72
+ node: node,
73
+ });
74
+ return;
75
+ }
76
+ context.report({
77
+ messageId: "singleDeclarator",
78
+ node: node,
79
+ });
80
+ };
81
+ const noMultipleDeclaratorsRule = {
82
+ create(context) {
83
+ return {
84
+ VariableDeclaration: (node) => {
85
+ reportVariableDeclaration(context, node);
86
+ },
87
+ };
88
+ },
89
+ meta: {
90
+ docs: createRuleDocumentation("no-multiple-declarators", "Require variable declarations to contain exactly one declarator per statement."),
91
+ fixable: "code",
92
+ messages: {
93
+ singleDeclarator: "Declare exactly one variable per declaration statement.",
94
+ },
95
+ schema: [],
96
+ type: "suggestion",
97
+ },
98
+ };
99
+ export { noMultipleDeclaratorsRule };
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb3JlL25vLW11bHRpcGxlLWRlY2xhcmF0b3JzL3J1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUE4QjFFLE1BQU0sY0FBYyxHQUFHLFlBQVksQ0FBQztBQUNwQyxNQUFNLGVBQWUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQztBQUV0RSxNQUFNLGFBQWEsR0FBRyxDQUFDLE9BQXlCLEVBQW9CLEVBQUUsQ0FDcEUsT0FBTyxDQUFDLFVBQXlDLENBQUM7QUFFcEQsTUFBTSxhQUFhLEdBQUcsQ0FBQyxVQUE0QixFQUFVLEVBQUUsQ0FDN0QsT0FBTyxVQUFVLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBRS9FLE1BQU0sUUFBUSxHQUFHLENBQ2YsSUFBMEIsRUFDVyxFQUFFLENBQ3ZDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztBQUV4RCxNQUFNLFVBQVUsR0FBRyxDQUNqQixJQUE2QixFQUNxQyxFQUFFLENBQ3BFLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztJQUN6QixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDO0lBQ3ZCLE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxRQUFRLENBQUM7QUFFaEMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLElBQTZCLEVBQVcsRUFBRTtJQUNuRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBRXhCLElBQUksTUFBTSxFQUFFLElBQUksS0FBSyxjQUFjLEVBQUUsQ0FBQztRQUNwQyxPQUFRLE1BQTJCLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQztJQUNwRCxDQUFDO0lBRUQsSUFBSSxNQUFNLEtBQUssS0FBSyxDQUFDLElBQUksZUFBZSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUMxRCxPQUFRLE1BQWlDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQztJQUMxRCxDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDLENBQUM7QUFFRixNQUFNLGVBQWUsR0FBRyxDQUFDLElBQTZCLEVBQVcsRUFBRSxDQUNqRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksS0FBSywwQkFBMEI7SUFDaEQsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEtBQUssd0JBQXdCLENBQUM7QUFFakQsTUFBTSxhQUFhLEdBQUcsQ0FBQyxVQUFrQixFQUFFLEtBQWEsRUFBVSxFQUFFO0lBQ2xFLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDOUQsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFdEQsT0FBTyxVQUFVLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM5QyxDQUFDLENBQUM7QUFFRixNQUFNLG1CQUFtQixHQUFHLENBQzFCLFlBQStDLEVBQy9DLFVBQWtCLEVBQ1QsRUFBRTtJQUNYLEtBQUssTUFBTSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztRQUMxRCxNQUFNLGVBQWUsR0FBRyxZQUFZLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRWhELElBQUksZUFBZSxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDL0IsTUFBTTtRQUNSLENBQUM7UUFFRCxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7WUFDekQsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FDcEMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDcEIsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FDekIsQ0FBQztRQUVGLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQ3ZDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMsQ0FBQztBQUVGLE1BQU0sTUFBTSxHQUFHLENBQ2IsSUFBNkIsRUFDN0IsWUFBK0MsRUFDL0MsVUFBa0IsRUFDVCxFQUFFO0lBQ1gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3RCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDckQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsT0FBTyxDQUFDLG1CQUFtQixDQUFDLFlBQVksRUFBRSxVQUFVLENBQUMsQ0FBQztBQUN4RCxDQUFDLENBQUM7QUFFRixNQUFNLGdCQUFnQixHQUFHLENBQ3ZCLElBQThELEVBQzlELFlBQW9FLEVBQ3BFLFVBQTRCLEVBQ3BCLEVBQUU7SUFDVixNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDN0MsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFeEQsT0FBTyxZQUFZO1NBQ2hCLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQztTQUN4RSxJQUFJLENBQUMsS0FBSyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQ3pCLENBQUMsQ0FBQztBQUVGLE1BQU0seUJBQXlCLEdBQUcsQ0FDaEMsT0FBeUIsRUFDekIsSUFBNkIsRUFDdkIsRUFBRTtJQUNSLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDO0lBRTdDLElBQUksWUFBWSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUM3QixPQUFPO0lBQ1QsQ0FBQztJQUVELE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMxQyxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDN0MsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFFdkQsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUNaLE1BQU0sU0FBUyxHQUFHLElBR2pCLENBQUM7UUFFRixPQUFPLENBQUMsTUFBTSxDQUFDO1lBQ2IsR0FBRyxFQUFFLENBQUMsS0FBcUIsRUFBWSxFQUFFLENBQ3ZDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FDcEIsU0FBUyxDQUFDLEtBQUssRUFDZixnQkFBZ0IsQ0FDZCxTQUFTLEVBQ1QsWUFBNkQsRUFDN0QsVUFBVSxDQUNYLENBQ0Y7WUFDSCxTQUFTLEVBQUUsa0JBQWtCO1lBQzdCLElBQUksRUFBRSxJQUE0QjtTQUNuQyxDQUFDLENBQUM7UUFFSCxPQUFPO0lBQ1QsQ0FBQztJQUVELE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDYixTQUFTLEVBQUUsa0JBQWtCO1FBQzdCLElBQUksRUFBRSxJQUE0QjtLQUNuQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUM7QUFFRixNQUFNLHlCQUF5QixHQUFvQjtJQUNqRCxNQUFNLENBQUMsT0FBeUI7UUFDOUIsT0FBTztZQUNMLG1CQUFtQixFQUFFLENBQUMsSUFBZSxFQUFRLEVBQUU7Z0JBQzdDLHlCQUF5QixDQUFDLE9BQU8sRUFBRSxJQUErQixDQUFDLENBQUM7WUFDdEUsQ0FBQztTQUNGLENBQUM7SUFDSixDQUFDO0lBQ0QsSUFBSSxFQUFFO1FBQ0osSUFBSSxFQUFFLHVCQUF1QixDQUMzQix5QkFBeUIsRUFDekIsZ0ZBQWdGLENBQ2pGO1FBQ0QsT0FBTyxFQUFFLE1BQU07UUFDZixRQUFRLEVBQUU7WUFDUixnQkFBZ0IsRUFDZCx5REFBeUQ7U0FDNUQ7UUFDRCxNQUFNLEVBQUUsRUFBRTtRQUNWLElBQUksRUFBRSxZQUFZO0tBQ25CO0NBQ0YsQ0FBQztBQUVGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBSdWxlIH0gZnJvbSBcImVzbGludFwiO1xuXG5pbXBvcnQgeyBjcmVhdGVSdWxlRG9jdW1lbnRhdGlvbiB9IGZyb20gXCIuLi8uLi9jdXN0b20tcnVsZS1kb2N1bWVudGF0aW9uXCI7XG5cbnR5cGUgUmFuZ2UgPSBbbnVtYmVyLCBudW1iZXJdO1xuXG5pbnRlcmZhY2UgQmFzZU5vZGUge1xuICBwYXJlbnQ/OiBCYXNlTm9kZTtcbiAgcmFuZ2U/OiBSYW5nZTtcbiAgdHlwZTogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgRm9ySW5Pck9mU3RhdGVtZW50Tm9kZSBleHRlbmRzIEJhc2VOb2RlIHtcbiAgbGVmdD86IEJhc2VOb2RlO1xufVxuXG5pbnRlcmZhY2UgRm9yU3RhdGVtZW50Tm9kZSBleHRlbmRzIEJhc2VOb2RlIHtcbiAgaW5pdD86IEJhc2VOb2RlIHwgbnVsbDtcbn1cblxuaW50ZXJmYWNlIFNvdXJjZUNvZGVBY2Nlc3Mge1xuICBnZXRUZXh0OiAobm9kZT86IEJhc2VOb2RlKSA9PiBzdHJpbmc7XG4gIHRleHQ/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBWYXJpYWJsZURlY2xhcmF0aW9uTm9kZSBleHRlbmRzIEJhc2VOb2RlIHtcbiAgZGVjbGFyYXRpb25zPzogVmFyaWFibGVEZWNsYXJhdG9yTm9kZVtdO1xuICBraW5kPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgVmFyaWFibGVEZWNsYXJhdG9yTm9kZSBleHRlbmRzIEJhc2VOb2RlIHt9XG5cbmNvbnN0IGNvbW1lbnRQYXR0ZXJuID0gL1xcL1xcL3xcXC9cXCovdTtcbmNvbnN0IGxvb3BQYXJlbnRUeXBlcyA9IG5ldyBTZXQoW1wiRm9ySW5TdGF0ZW1lbnRcIiwgXCJGb3JPZlN0YXRlbWVudFwiXSk7XG5cbmNvbnN0IGdldFNvdXJjZUNvZGUgPSAoY29udGV4dDogUnVsZS5SdWxlQ29udGV4dCk6IFNvdXJjZUNvZGVBY2Nlc3MgPT5cbiAgY29udGV4dC5zb3VyY2VDb2RlIGFzIHVua25vd24gYXMgU291cmNlQ29kZUFjY2VzcztcblxuY29uc3QgZ2V0U291cmNlVGV4dCA9IChzb3VyY2VDb2RlOiBTb3VyY2VDb2RlQWNjZXNzKTogc3RyaW5nID0+XG4gIHR5cGVvZiBzb3VyY2VDb2RlLnRleHQgPT09IFwic3RyaW5nXCIgPyBzb3VyY2VDb2RlLnRleHQgOiBzb3VyY2VDb2RlLmdldFRleHQoKTtcblxuY29uc3QgaGFzUmFuZ2UgPSAoXG4gIG5vZGU6IEJhc2VOb2RlIHwgdW5kZWZpbmVkLFxuKTogbm9kZSBpcyBCYXNlTm9kZSAmIHsgcmFuZ2U6IFJhbmdlIH0gPT5cbiAgQXJyYXkuaXNBcnJheShub2RlPy5yYW5nZSkgJiYgbm9kZS5yYW5nZS5sZW5ndGggPT09IDI7XG5cbmNvbnN0IGhhc0ZpeERhdGEgPSAoXG4gIG5vZGU6IFZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLFxuKTogbm9kZSBpcyBWYXJpYWJsZURlY2xhcmF0aW9uTm9kZSAmIHsga2luZDogc3RyaW5nOyByYW5nZTogUmFuZ2UgfSA9PlxuICBBcnJheS5pc0FycmF5KG5vZGUucmFuZ2UpICYmXG4gIG5vZGUucmFuZ2UubGVuZ3RoID09PSAyICYmXG4gIHR5cGVvZiBub2RlLmtpbmQgPT09IFwic3RyaW5nXCI7XG5cbmNvbnN0IGlzTG9vcEluaXRpYWxpemVyID0gKG5vZGU6IFZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IHsgcGFyZW50IH0gPSBub2RlO1xuXG4gIGlmIChwYXJlbnQ/LnR5cGUgPT09IFwiRm9yU3RhdGVtZW50XCIpIHtcbiAgICByZXR1cm4gKHBhcmVudCBhcyBGb3JTdGF0ZW1lbnROb2RlKS5pbml0ID09PSBub2RlO1xuICB9XG5cbiAgaWYgKHBhcmVudCAhPT0gdm9pZCAwICYmIGxvb3BQYXJlbnRUeXBlcy5oYXMocGFyZW50LnR5cGUpKSB7XG4gICAgcmV0dXJuIChwYXJlbnQgYXMgRm9ySW5Pck9mU3RhdGVtZW50Tm9kZSkubGVmdCA9PT0gbm9kZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmNvbnN0IGlzV3JhcHBlZEV4cG9ydCA9IChub2RlOiBWYXJpYWJsZURlY2xhcmF0aW9uTm9kZSk6IGJvb2xlYW4gPT5cbiAgbm9kZS5wYXJlbnQ/LnR5cGUgPT09IFwiRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uXCIgfHxcbiAgbm9kZS5wYXJlbnQ/LnR5cGUgPT09IFwiRXhwb3J0TmFtZWREZWNsYXJhdGlvblwiO1xuXG5jb25zdCBnZXRMaW5lSW5kZW50ID0gKHNvdXJjZVRleHQ6IHN0cmluZywgc3RhcnQ6IG51bWJlcik6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGxpbmVTdGFydCA9IHNvdXJjZVRleHQubGFzdEluZGV4T2YoXCJcXG5cIiwgc3RhcnQgLSAxKSArIDE7XG4gIGNvbnN0IGxpbmVQcmVmaXggPSBzb3VyY2VUZXh0LnNsaWNlKGxpbmVTdGFydCwgc3RhcnQpO1xuXG4gIHJldHVybiBsaW5lUHJlZml4LnJlcGxhY2UoL1teXFx0IF0uKiQvdSwgXCJcIik7XG59O1xuXG5jb25zdCBoYXNTZXBhcmF0b3JDb21tZW50ID0gKFxuICBkZWNsYXJhdGlvbnM6IHJlYWRvbmx5IFZhcmlhYmxlRGVjbGFyYXRvck5vZGVbXSxcbiAgc291cmNlVGV4dDogc3RyaW5nLFxuKTogYm9vbGVhbiA9PiB7XG4gIGZvciAoY29uc3QgW2luZGV4LCBkZWNsYXJhdGlvbl0gb2YgZGVjbGFyYXRpb25zLmVudHJpZXMoKSkge1xuICAgIGNvbnN0IG5leHREZWNsYXJhdGlvbiA9IGRlY2xhcmF0aW9uc1tpbmRleCArIDFdO1xuXG4gICAgaWYgKG5leHREZWNsYXJhdGlvbiA9PT0gdm9pZCAwKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAoIWhhc1JhbmdlKGRlY2xhcmF0aW9uKSB8fCAhaGFzUmFuZ2UobmV4dERlY2xhcmF0aW9uKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY29uc3Qgc2VwYXJhdG9yVGV4dCA9IHNvdXJjZVRleHQuc2xpY2UoXG4gICAgICBkZWNsYXJhdGlvbi5yYW5nZVsxXSxcbiAgICAgIG5leHREZWNsYXJhdGlvbi5yYW5nZVswXSxcbiAgICApO1xuXG4gICAgaWYgKGNvbW1lbnRQYXR0ZXJuLnRlc3Qoc2VwYXJhdG9yVGV4dCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmNvbnN0IGNhbkZpeCA9IChcbiAgbm9kZTogVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsXG4gIGRlY2xhcmF0aW9uczogcmVhZG9ubHkgVmFyaWFibGVEZWNsYXJhdG9yTm9kZVtdLFxuICBzb3VyY2VUZXh0OiBzdHJpbmcsXG4pOiBib29sZWFuID0+IHtcbiAgaWYgKCFoYXNGaXhEYXRhKG5vZGUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGlzTG9vcEluaXRpYWxpemVyKG5vZGUpIHx8IGlzV3JhcHBlZEV4cG9ydChub2RlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiAhaGFzU2VwYXJhdG9yQ29tbWVudChkZWNsYXJhdGlvbnMsIHNvdXJjZVRleHQpO1xufTtcblxuY29uc3QgYnVpbGRSZXBsYWNlbWVudCA9IChcbiAgbm9kZTogVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUgJiB7IGtpbmQ6IHN0cmluZzsgcmFuZ2U6IFJhbmdlIH0sXG4gIGRlY2xhcmF0aW9uczogcmVhZG9ubHkgKFZhcmlhYmxlRGVjbGFyYXRvck5vZGUgJiB7IHJhbmdlOiBSYW5nZSB9KVtdLFxuICBzb3VyY2VDb2RlOiBTb3VyY2VDb2RlQWNjZXNzLFxuKTogc3RyaW5nID0+IHtcbiAgY29uc3Qgc291cmNlVGV4dCA9IGdldFNvdXJjZVRleHQoc291cmNlQ29kZSk7XG4gIGNvbnN0IGluZGVudCA9IGdldExpbmVJbmRlbnQoc291cmNlVGV4dCwgbm9kZS5yYW5nZVswXSk7XG5cbiAgcmV0dXJuIGRlY2xhcmF0aW9uc1xuICAgIC5tYXAoKGRlY2xhcmF0aW9uKSA9PiBgJHtub2RlLmtpbmR9ICR7c291cmNlQ29kZS5nZXRUZXh0KGRlY2xhcmF0aW9uKX07YClcbiAgICAuam9pbihgXFxuJHtpbmRlbnR9YCk7XG59O1xuXG5jb25zdCByZXBvcnRWYXJpYWJsZURlY2xhcmF0aW9uID0gKFxuICBjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0LFxuICBub2RlOiBWYXJpYWJsZURlY2xhcmF0aW9uTm9kZSxcbik6IHZvaWQgPT4ge1xuICBjb25zdCBkZWNsYXJhdGlvbnMgPSBub2RlLmRlY2xhcmF0aW9ucyA/PyBbXTtcblxuICBpZiAoZGVjbGFyYXRpb25zLmxlbmd0aCA8PSAxKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgc291cmNlQ29kZSA9IGdldFNvdXJjZUNvZGUoY29udGV4dCk7XG4gIGNvbnN0IHNvdXJjZVRleHQgPSBnZXRTb3VyY2VUZXh0KHNvdXJjZUNvZGUpO1xuICBjb25zdCBmaXhhYmxlID0gY2FuRml4KG5vZGUsIGRlY2xhcmF0aW9ucywgc291cmNlVGV4dCk7XG5cbiAgaWYgKGZpeGFibGUpIHtcbiAgICBjb25zdCBmaXhlZE5vZGUgPSBub2RlIGFzIFZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlICYge1xuICAgICAga2luZDogc3RyaW5nO1xuICAgICAgcmFuZ2U6IFJhbmdlO1xuICAgIH07XG5cbiAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICBmaXg6IChmaXhlcjogUnVsZS5SdWxlRml4ZXIpOiBSdWxlLkZpeCA9PlxuICAgICAgICBmaXhlci5yZXBsYWNlVGV4dFJhbmdlKFxuICAgICAgICAgIGZpeGVkTm9kZS5yYW5nZSxcbiAgICAgICAgICBidWlsZFJlcGxhY2VtZW50KFxuICAgICAgICAgICAgZml4ZWROb2RlLFxuICAgICAgICAgICAgZGVjbGFyYXRpb25zIGFzIChWYXJpYWJsZURlY2xhcmF0b3JOb2RlICYgeyByYW5nZTogUmFuZ2UgfSlbXSxcbiAgICAgICAgICAgIHNvdXJjZUNvZGUsXG4gICAgICAgICAgKSxcbiAgICAgICAgKSxcbiAgICAgIG1lc3NhZ2VJZDogXCJzaW5nbGVEZWNsYXJhdG9yXCIsXG4gICAgICBub2RlOiBub2RlIGFzIHVua25vd24gYXMgUnVsZS5Ob2RlLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29udGV4dC5yZXBvcnQoe1xuICAgIG1lc3NhZ2VJZDogXCJzaW5nbGVEZWNsYXJhdG9yXCIsXG4gICAgbm9kZTogbm9kZSBhcyB1bmtub3duIGFzIFJ1bGUuTm9kZSxcbiAgfSk7XG59O1xuXG5jb25zdCBub011bHRpcGxlRGVjbGFyYXRvcnNSdWxlOiBSdWxlLlJ1bGVNb2R1bGUgPSB7XG4gIGNyZWF0ZShjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0KTogUnVsZS5SdWxlTGlzdGVuZXIge1xuICAgIHJldHVybiB7XG4gICAgICBWYXJpYWJsZURlY2xhcmF0aW9uOiAobm9kZTogUnVsZS5Ob2RlKTogdm9pZCA9PiB7XG4gICAgICAgIHJlcG9ydFZhcmlhYmxlRGVjbGFyYXRpb24oY29udGV4dCwgbm9kZSBhcyBWYXJpYWJsZURlY2xhcmF0aW9uTm9kZSk7XG4gICAgICB9LFxuICAgIH07XG4gIH0sXG4gIG1ldGE6IHtcbiAgICBkb2NzOiBjcmVhdGVSdWxlRG9jdW1lbnRhdGlvbihcbiAgICAgIFwibm8tbXVsdGlwbGUtZGVjbGFyYXRvcnNcIixcbiAgICAgIFwiUmVxdWlyZSB2YXJpYWJsZSBkZWNsYXJhdGlvbnMgdG8gY29udGFpbiBleGFjdGx5IG9uZSBkZWNsYXJhdG9yIHBlciBzdGF0ZW1lbnQuXCIsXG4gICAgKSxcbiAgICBmaXhhYmxlOiBcImNvZGVcIixcbiAgICBtZXNzYWdlczoge1xuICAgICAgc2luZ2xlRGVjbGFyYXRvcjpcbiAgICAgICAgXCJEZWNsYXJlIGV4YWN0bHkgb25lIHZhcmlhYmxlIHBlciBkZWNsYXJhdGlvbiBzdGF0ZW1lbnQuXCIsXG4gICAgfSxcbiAgICBzY2hlbWE6IFtdLFxuICAgIHR5cGU6IFwic3VnZ2VzdGlvblwiLFxuICB9LFxufTtcblxuZXhwb3J0IHsgbm9NdWx0aXBsZURlY2xhcmF0b3JzUnVsZSB9O1xuIl19
@@ -0,0 +1,2 @@
1
+ export { preferInterfaceTypesRule } from "./rule";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/prefer-interface-types/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,QAAQ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { preferInterfaceTypesRule } from "./rule";
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29yZS9wcmVmZXItaW50ZXJmYWNlLXR5cGVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IHByZWZlckludGVyZmFjZVR5cGVzUnVsZSB9IGZyb20gXCIuL3J1bGVcIjtcbiJdfQ==
@@ -0,0 +1,5 @@
1
+ import type { Rule } from "eslint";
2
+ /** ESLint rule requiring named interface/type aliases for object types. */
3
+ declare const preferInterfaceTypesRule: Rule.RuleModule;
4
+ export { preferInterfaceTypesRule };
5
+ //# sourceMappingURL=rule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rule.d.ts","sourceRoot":"","sources":["../../../src/core/prefer-interface-types/rule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AA4LnC,2EAA2E;AAC3E,QAAA,MAAM,wBAAwB,EAAE,IAAI,CAAC,UA6BpC,CAAC;AAEF,OAAO,EAAE,wBAAwB,EAAE,CAAC"}
@@ -0,0 +1,145 @@
1
+ import { createRuleDocumentation } from "../../custom-rule-documentation";
2
+ /**
3
+ * Gets a nested type annotation from parameter wrappers.
4
+ * @param node Parameter wrapper node.
5
+ * @returns The nested type annotation when present.
6
+ * @example
7
+ * ```typescript
8
+ * const annotation = getNestedTypeAnnotation({ argument: node });
9
+ * ```
10
+ */
11
+ const getNestedTypeAnnotation = (node) => {
12
+ if (node.argument !== void 0) {
13
+ return getTypeAnnotationNode(node.argument);
14
+ }
15
+ if (node.parameter !== void 0) {
16
+ return getTypeAnnotationNode(node.parameter);
17
+ }
18
+ return void 0;
19
+ };
20
+ /**
21
+ * Extracts the type annotation from a node.
22
+ * @param node Node that may contain a type annotation.
23
+ * @returns The type annotation when present.
24
+ * @example
25
+ * ```typescript
26
+ * const annotation = getTypeAnnotationNode(node);
27
+ * ```
28
+ */
29
+ const getTypeAnnotationNode = (node) => {
30
+ if (node === null || typeof node !== "object") {
31
+ return void 0;
32
+ }
33
+ const directTypeAnnotation = node.typeAnnotation
34
+ ?.typeAnnotation;
35
+ if (directTypeAnnotation !== void 0) {
36
+ return directTypeAnnotation;
37
+ }
38
+ return getNestedTypeAnnotation(node);
39
+ };
40
+ /**
41
+ * Gets the return type annotation for a function-like node.
42
+ * @param node Node that may contain a return type.
43
+ * @returns The return type annotation when present.
44
+ * @example
45
+ * ```typescript
46
+ * const annotation = getReturnTypeAnnotation(node);
47
+ * ```
48
+ */
49
+ const getReturnTypeAnnotation = (node) => {
50
+ if (node === null || typeof node !== "object") {
51
+ return void 0;
52
+ }
53
+ const typedNode = node;
54
+ return typedNode.returnType?.typeAnnotation;
55
+ };
56
+ /**
57
+ * Gets getParameters.
58
+ * @param node Input node value.
59
+ * @returns Return value output.
60
+ * @example
61
+ * ```typescript
62
+ * getParameters();
63
+ * ```
64
+ */
65
+ const getParameters = (node) => {
66
+ if (node === null || typeof node !== "object") {
67
+ return [];
68
+ }
69
+ const typedNode = node;
70
+ return Array.isArray(typedNode.params) ? typedNode.params : [];
71
+ };
72
+ /**
73
+ * Checks whether the node represents a type literal.
74
+ * @param node Type annotation node to check.
75
+ * @returns True when the node is a type literal.
76
+ * @example
77
+ * ```typescript
78
+ * const isLiteral = isTypeLiteral(annotation);
79
+ * ```
80
+ */
81
+ const isTypeLiteral = (node) => node?.type === "TSTypeLiteral";
82
+ /**
83
+ * Reports an inline object type annotation.
84
+ * @param context Rule execution context.
85
+ * @param typeAnnotation Type annotation node to report.
86
+ * @example
87
+ * ```typescript
88
+ * reportTypeLiteral(context, typeAnnotation);
89
+ * ```
90
+ */
91
+ const reportTypeLiteral = (context, typeAnnotation) => {
92
+ context.report({
93
+ messageId: "preferNamedObject",
94
+ node: typeAnnotation,
95
+ });
96
+ };
97
+ /**
98
+ * Checks function-like nodes for inline object types.
99
+ * @param context Rule execution context.
100
+ * @param node Function-like node to check.
101
+ * @example
102
+ * ```typescript
103
+ * checkFunctionLike(context, node);
104
+ * ```
105
+ */
106
+ const checkFunctionLike = (context, node) => {
107
+ for (const parameter of getParameters(node)) {
108
+ const typeAnnotation = getTypeAnnotationNode(parameter);
109
+ if (isTypeLiteral(typeAnnotation)) {
110
+ reportTypeLiteral(context, typeAnnotation);
111
+ }
112
+ }
113
+ const returnTypeAnnotation = getReturnTypeAnnotation(node);
114
+ if (isTypeLiteral(returnTypeAnnotation)) {
115
+ reportTypeLiteral(context, returnTypeAnnotation);
116
+ }
117
+ };
118
+ /** ESLint rule requiring named interface/type aliases for object types. */
119
+ const preferInterfaceTypesRule = {
120
+ create(context) {
121
+ const listener = (node) => {
122
+ checkFunctionLike(context, node);
123
+ };
124
+ return {
125
+ ArrowFunctionExpression: listener,
126
+ FunctionDeclaration: listener,
127
+ FunctionExpression: listener,
128
+ TSCallSignatureDeclaration: listener,
129
+ TSConstructSignatureDeclaration: listener,
130
+ TSDeclareFunction: listener,
131
+ TSFunctionType: listener,
132
+ TSMethodSignature: listener,
133
+ };
134
+ },
135
+ meta: {
136
+ docs: createRuleDocumentation("prefer-interface-types", "Require named interfaces or type aliases for object types in parameters and return types."),
137
+ messages: {
138
+ preferNamedObject: "Use a named interface or type alias instead of an inline object type.",
139
+ },
140
+ schema: [],
141
+ type: "suggestion",
142
+ },
143
+ };
144
+ export { preferInterfaceTypesRule };
145
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb3JlL3ByZWZlci1pbnRlcmZhY2UtdHlwZXMvcnVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQXFDMUU7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLHVCQUF1QixHQUFHLENBQzlCLElBQXdCLEVBQ1EsRUFBRTtJQUNsQyxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUM3QixPQUFPLHFCQUFxQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDOUIsT0FBTyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFDLENBQUM7QUFDaEIsQ0FBQyxDQUFDO0FBRUY7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLHFCQUFxQixHQUFHLENBQzVCLElBQWEsRUFDbUIsRUFBRTtJQUNsQyxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDOUMsT0FBTyxLQUFLLENBQUMsQ0FBQztJQUNoQixDQUFDO0lBRUQsTUFBTSxvQkFBb0IsR0FBSSxJQUFnQyxDQUFDLGNBQWM7UUFDM0UsRUFBRSxjQUFjLENBQUM7SUFFbkIsSUFBSSxvQkFBb0IsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3BDLE9BQU8sb0JBQW9CLENBQUM7SUFDOUIsQ0FBQztJQUVELE9BQU8sdUJBQXVCLENBQUMsSUFBMEIsQ0FBQyxDQUFDO0FBQzdELENBQUMsQ0FBQztBQUVGOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSx1QkFBdUIsR0FBRyxDQUM5QixJQUFhLEVB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ImltcG9ydCB0eXBlIHsgUnVsZSB9IGZyb20gXCJlc2xpbnRcIjtcblxuaW1wb3J0IHsgY3JlYXRlUnVsZURvY3VtZW50YXRpb24gfSBmcm9tIFwiLi4vLi4vY3VzdG9tLXJ1bGUtZG9jdW1lbnRhdGlvblwiO1xuLyoqIFR5cGUgZGVmaW5pdGlvbiBmb3IgcnVsZSBkYXRhLiAqL1xuaW50ZXJmYWNlIEZ1bmN0aW9uTGlrZU5vZGUge1xuICAvKiogUGFyYW1zIGhlbHBlciB2YWx1ZS4gKi9cbiAgcGFyYW1zPzogdW5rbm93bltdO1xuXG4gIC8qKiBSZXR1cm5UeXBlIGhlbHBlciB2YWx1ZS4gKi9cbiAgcmV0dXJuVHlwZT86IHtcbiAgICAvKiogVHlwZUFubm90YXRpb24gaGVscGVyIHZhbHVlLiAqL1xuICAgIHR5cGVBbm5vdGF0aW9uPzogVHlwZUFubm90YXRpb25Ob2RlO1xuICB9O1xufVxuXG4vKiogVHlwZSBkZWZpbml0aW9uIGZvciBydWxlIGRhdGEuICovXG5pbnRlcmZhY2UgUGFyYW1ldGVyQ29udGFpbmVyIHtcbiAgLyoqIEFyZ3VtZW50IGhlbHBlciB2YWx1ZS4gKi9cbiAgYXJndW1lbnQ/OiB1bmtub3duO1xuXG4gIC8qKiBQYXJhbWV0ZXIgaGVscGVyIHZhbHVlLiAqL1xuICBwYXJhbWV0ZXI/OiB1bmtub3duO1xufVxuXG4vKiogVHlwZSBkZWZpbml0aW9uIGZvciBydWxlIGRhdGEuICovXG5pbnRlcmZhY2UgVHlwZUFubm90YXRpb25Db250YWluZXIge1xuICAvKiogVHlwZUFubm90YXRpb24gaGVscGVyIHZhbHVlLiAqL1xuICB0eXBlQW5ub3RhdGlvbj86IHtcbiAgICAvKiogVHlwZUFubm90YXRpb24gaGVscGVyIHZhbHVlLiAqL1xuICAgIHR5cGVBbm5vdGF0aW9uPzogVHlwZUFubm90YXRpb25Ob2RlO1xuICB9O1xufVxuXG4vKiogVHlwZSBkZWZpbml0aW9uIGZvciBydWxlIGRhdGEuICovXG5pbnRlcmZhY2UgVHlwZUFubm90YXRpb25Ob2RlIHtcbiAgLyoqIFR5cGUgZmllbGQgdmFsdWUuICovXG4gIHR5cGU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBHZXRzIGEgbmVzdGVkIHR5cGUgYW5ub3RhdGlvbiBmcm9tIHBhcmFtZXRlciB3cmFwcGVycy5cbiAqIEBwYXJhbSBub2RlIFBhcmFtZXRlciB3cmFwcGVyIG5vZGUuXG4gKiBAcmV0dXJucyBUaGUgbmVzdGVkIHR5cGUgYW5ub3RhdGlvbiB3aGVuIHByZXNlbnQuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgYW5ub3RhdGlvbiA9IGdldE5lc3RlZFR5cGVBbm5vdGF0aW9uKHsgYXJndW1lbnQ6IG5vZGUgfSk7XG4gKiBgYGBcbiAqL1xuY29uc3QgZ2V0TmVzdGVkVHlwZUFubm90YXRpb24gPSAoXG4gIG5vZGU6IFBhcmFtZXRlckNvbnRhaW5lcixcbik6IFR5cGVBbm5vdGF0aW9uTm9kZSB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmIChub2RlLmFyZ3VtZW50ICE9PSB2b2lkIDApIHtcbiAgICByZXR1cm4gZ2V0VHlwZUFubm90YXRpb25Ob2RlKG5vZGUuYXJndW1lbnQpO1xuICB9XG5cbiAgaWYgKG5vZGUucGFyYW1ldGVyICE9PSB2b2lkIDApIHtcbiAgICByZXR1cm4gZ2V0VHlwZUFubm90YXRpb25Ob2RlKG5vZGUucGFyYW1ldGVyKTtcbiAgfVxuXG4gIHJldHVybiB2b2lkIDA7XG59O1xuXG4vKipcbiAqIEV4dHJhY3RzIHRoZSB0eXBlIGFubm90YXRpb24gZnJvbSBhIG5vZGUuXG4gKiBAcGFyYW0gbm9kZSBOb2RlIHRoYXQgbWF5IGNvbnRhaW4gYSB0eXBlIGFubm90YXRpb24uXG4gKiBAcmV0dXJucyBUaGUgdHlwZSBhbm5vdGF0aW9uIHdoZW4gcHJlc2VudC5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBhbm5vdGF0aW9uID0gZ2V0VHlwZUFubm90YXRpb25Ob2RlKG5vZGUpO1xuICogYGBgXG4gKi9cbmNvbnN0IGdldFR5cGVBbm5vdGF0aW9uTm9kZSA9IChcbiAgbm9kZTogdW5rbm93bixcbik6IFR5cGVBbm5vdGF0aW9uTm9kZSB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmIChub2RlID09PSBudWxsIHx8IHR5cGVvZiBub2RlICE9PSBcIm9iamVjdFwiKSB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfVxuXG4gIGNvbnN0IGRpcmVjdFR5cGVBbm5vdGF0aW9uID0gKG5vZGUgYXMgVHlwZUFubm90YXRpb25Db250YWluZXIpLnR5cGVBbm5vdGF0aW9uXG4gICAgPy50eXBlQW5ub3RhdGlvbjtcblxuICBpZiAoZGlyZWN0VHlwZUFubm90YXRpb24gIT09IHZvaWQgMCkge1xuICAgIHJldHVybiBkaXJlY3RUeXBlQW5ub3RhdGlvbjtcbiAgfVxuXG4gIHJldHVybiBnZXROZXN0ZWRUeXBlQW5ub3RhdGlvbihub2RlIGFzIFBhcmFtZXRlckNvbnRhaW5lcik7XG59O1xuXG4vKipcbiAqIEdldHMgdGhlIHJldHVybiB0eXBlIGFubm90YXRpb24gZm9yIGEgZnVuY3Rpb24tbGlrZSBub2RlLlxuICogQHBhcmFtIG5vZGUgTm9kZSB0aGF0IG1heSBjb250YWluIGEgcmV0dXJuIHR5cGUuXG4gKiBAcmV0dXJucyBUaGUgcmV0dXJuIHR5cGUgYW5ub3RhdGlvbiB3aGVuIHByZXNlbnQuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgYW5ub3RhdGlvbiA9IGdldFJldHVyblR5cGVBbm5vdGF0aW9uKG5vZGUpO1xuICogYGBgXG4gKi9cbmNvbnN0IGdldFJldHVyblR5cGVBbm5vdGF0aW9uID0gKFxuICBub2RlOiB1bmtub3duLFxuKTogVHlwZUFubm90YXRpb25Ob2RlIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKG5vZGUgPT09IG51bGwgfHwgdHlwZW9mIG5vZGUgIT09IFwib2JqZWN0XCIpIHtcbiAgICByZXR1cm4gdm9pZCAwO1xuICB9XG5cbiAgY29uc3QgdHlwZWROb2RlID0gbm9kZSBhcyBGdW5jdGlvbkxpa2VOb2RlO1xuXG4gIHJldHVybiB0eXBlZE5vZGUucmV0dXJuVHlwZT8udHlwZUFubm90YXRpb247XG59O1xuXG4vKipcbiAqIEdldHMgZ2V0UGFyYW1ldGVycy5cbiAqIEBwYXJhbSBub2RlIElucHV0IG5vZGUgdmFsdWUuXG4gKiBAcmV0dXJucyBSZXR1cm4gdmFsdWUgb3V0cHV0LlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGdldFBhcmFtZXRlcnMoKTtcbiAqIGBgYFxuICovXG5jb25zdCBnZXRQYXJhbWV0ZXJzID0gKG5vZGU6IHVua25vd24pOiB1bmtub3duW10gPT4ge1xuICBpZiAobm9kZSA9PT0gbnVsbCB8fCB0eXBlb2Ygbm9kZSAhPT0gXCJvYmplY3RcIikge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IHR5cGVkTm9kZSA9IG5vZGUgYXMgRnVuY3Rpb25MaWtlTm9kZTtcblxuICByZXR1cm4gQXJyYXkuaXNBcnJheSh0eXBlZE5vZGUucGFyYW1zKSA/IHR5cGVkTm9kZS5wYXJhbXMgOiBbXTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIG5vZGUgcmVwcmVzZW50cyBhIHR5cGUgbGl0ZXJhbC5cbiAqIEBwYXJhbSBub2RlIFR5cGUgYW5ub3RhdGlvbiBub2RlIHRvIGNoZWNrLlxuICogQHJldHVybnMgVHJ1ZSB3aGVuIHRoZSBub2RlIGlzIGEgdHlwZSBsaXRlcmFsLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGlzTGl0ZXJhbCA9IGlzVHlwZUxpdGVyYWwoYW5ub3RhdGlvbik7XG4gKiBgYGBcbiAqL1xuY29uc3QgaXNUeXBlTGl0ZXJhbCA9IChcbiAgbm9kZTogVHlwZUFubm90YXRpb25Ob2RlIHwgdW5kZWZpbmVkLFxuKTogbm9kZSBpcyBUeXBlQW5ub3RhdGlvbk5vZGUgPT4gbm9kZT8udHlwZSA9PT0gXCJUU1R5cGVMaXRlcmFsXCI7XG5cbi8qKlxuICogUmVwb3J0cyBhbiBpbmxpbmUgb2JqZWN0IHR5cGUgYW5ub3RhdGlvbi5cbiAqIEBwYXJhbSBjb250ZXh0IFJ1bGUgZXhlY3V0aW9uIGNvbnRleHQuXG4gKiBAcGFyYW0gdHlwZUFubm90YXRpb24gVHlwZSBhbm5vdGF0aW9uIG5vZGUgdG8gcmVwb3J0LlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHJlcG9ydFR5cGVMaXRlcmFsKGNvbnRleHQsIHR5cGVBbm5vdGF0aW9uKTtcbiAqIGBgYFxuICovXG5jb25zdCByZXBvcnRUeXBlTGl0ZXJhbCA9IChcbiAgY29udGV4dDogUnVsZS5SdWxlQ29udGV4dCxcbiAgdHlwZUFubm90YXRpb246IFR5cGVBbm5vdGF0aW9uTm9kZSxcbik6IHZvaWQgPT4ge1xuICBjb250ZXh0LnJlcG9ydCh7XG4gICAgbWVzc2FnZUlkOiBcInByZWZlck5hbWVkT2JqZWN0XCIsXG4gICAgbm9kZTogdHlwZUFubm90YXRpb24gYXMgdW5rbm93biBhcyBSdWxlLk5vZGUsXG4gIH0pO1xufTtcblxuLyoqXG4gKiBDaGVja3MgZnVuY3Rpb24tbGlrZSBub2RlcyBmb3IgaW5saW5lIG9iamVjdCB0eXBlcy5cbiAqIEBwYXJhbSBjb250ZXh0IFJ1bGUgZXhlY3V0aW9uIGNvbnRleHQuXG4gKiBAcGFyYW0gbm9kZSBGdW5jdGlvbi1saWtlIG5vZGUgdG8gY2hlY2suXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY2hlY2tGdW5jdGlvbkxpa2UoY29udGV4dCwgbm9kZSk7XG4gKiBgYGBcbiAqL1xuY29uc3QgY2hlY2tGdW5jdGlvbkxpa2UgPSAoXG4gIGNvbnRleHQ6IFJ1bGUuUnVsZUNvbnRleHQsXG4gIG5vZGU6IFJ1bGUuTm9kZSxcbik6IHZvaWQgPT4ge1xuICBmb3IgKGNvbnN0IHBhcmFtZXRlciBvZiBnZXRQYXJhbWV0ZXJzKG5vZGUpKSB7XG4gICAgY29uc3QgdHlwZUFubm90YXRpb24gPSBnZXRUeXBlQW5ub3RhdGlvbk5vZGUocGFyYW1ldGVyKTtcblxuICAgIGlmIChpc1R5cGVMaXRlcmFsKHR5cGVBbm5vdGF0aW9uKSkge1xuICAgICAgcmVwb3J0VHlwZUxpdGVyYWwoY29udGV4dCwgdHlwZUFubm90YXRpb24pO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJldHVyblR5cGVBbm5vdGF0aW9uID0gZ2V0UmV0dXJuVHlwZUFubm90YXRpb24obm9kZSk7XG5cbiAgaWYgKGlzVHlwZUxpdGVyYWwocmV0dXJuVHlwZUFubm90YXRpb24pKSB7XG4gICAgcmVwb3J0VHlwZUxpdGVyYWwoY29udGV4dCwgcmV0dXJuVHlwZUFubm90YXRpb24pO1xuICB9XG59O1xuXG4vKiogRVNMaW50IHJ1bGUgcmVxdWlyaW5nIG5hbWVkIGludGVyZmFjZS90eXBlIGFsaWFzZXMgZm9yIG9iamVjdCB0eXBlcy4gKi9cbmNvbnN0IHByZWZlckludGVyZmFjZVR5cGVzUnVsZTogUnVsZS5SdWxlTW9kdWxlID0ge1xuICBjcmVhdGUoY29udGV4dDogUnVsZS5SdWxlQ29udGV4dCk6IFJ1bGUuUnVsZUxpc3RlbmVyIHtcbiAgICBjb25zdCBsaXN0ZW5lciA9IChub2RlOiBSdWxlLk5vZGUpOiB2b2lkID0+IHtcbiAgICAgIGNoZWNrRnVuY3Rpb25MaWtlKGNvbnRleHQsIG5vZGUpO1xuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgQXJyb3dGdW5jdGlvbkV4cHJlc3Npb246IGxpc3RlbmVyLFxuICAgICAgRnVuY3Rpb25EZWNsYXJhdGlvbjogbGlzdGVuZXIsXG4gICAgICBGdW5jdGlvbkV4cHJlc3Npb246IGxpc3RlbmVyLFxuICAgICAgVFNDYWxsU2lnbmF0dXJlRGVjbGFyYXRpb246IGxpc3RlbmVyLFxuICAgICAgVFNDb25zdHJ1Y3RTaWduYXR1cmVEZWNsYXJhdGlvbjogbGlzdGVuZXIsXG4gICAgICBUU0RlY2xhcmVGdW5jdGlvbjogbGlzdGVuZXIsXG4gICAgICBUU0Z1bmN0aW9uVHlwZTogbGlzdGVuZXIsXG4gICAgICBUU01ldGhvZFNpZ25hdHVyZTogbGlzdGVuZXIsXG4gICAgfTtcbiAgfSxcbiAgbWV0YToge1xuICAgIGRvY3M6IGNyZWF0ZVJ1bGVEb2N1bWVudGF0aW9uKFxuICAgICAgXCJwcmVmZXItaW50ZXJmYWNlLXR5cGVzXCIsXG4gICAgICBcIlJlcXVpcmUgbmFtZWQgaW50ZXJmYWNlcyBvciB0eXBlIGFsaWFzZXMgZm9yIG9iamVjdCB0eXBlcyBpbiBwYXJhbWV0ZXJzIGFuZCByZXR1cm4gdHlwZXMuXCIsXG4gICAgKSxcbiAgICBtZXNzYWdlczoge1xuICAgICAgcHJlZmVyTmFtZWRPYmplY3Q6XG4gICAgICAgIFwiVXNlIGEgbmFtZWQgaW50ZXJmYWNlIG9yIHR5cGUgYWxpYXMgaW5zdGVhZCBvZiBhbiBpbmxpbmUgb2JqZWN0IHR5cGUuXCIsXG4gICAgfSxcbiAgICBzY2hlbWE6IFtdLFxuICAgIHR5cGU6IFwic3VnZ2VzdGlvblwiLFxuICB9LFxufTtcblxuZXhwb3J0IHsgcHJlZmVySW50ZXJmYWNlVHlwZXNSdWxlIH07XG4iXX0=
@@ -0,0 +1,110 @@
1
+ import type { Rule } from "eslint";
2
+ /** Type definition for rule data. */
3
+ interface MockNode {
4
+ /** Index signature value map. */
5
+ [key: string]: unknown;
6
+ /** Type field value. */
7
+ type: string;
8
+ }
9
+ /** Type definition for rule data. */
10
+ interface ReportEntry {
11
+ /** MessageId helper value. */
12
+ messageId: string | undefined;
13
+ /** NodeType field value. */
14
+ nodeType: string | undefined;
15
+ }
16
+ /** Type definition for rule data. */
17
+ interface RuleContextState {
18
+ /** Context field value. */
19
+ context: Rule.RuleContext;
20
+ /** Reports field value. */
21
+ reports: ReportEntry[];
22
+ }
23
+ /** Type definition for rule data. */
24
+ interface TypeAnnotationWrapper {
25
+ /** TypeAnnotation field value. */
26
+ typeAnnotation: {
27
+ /** Type field value. */
28
+ type: string;
29
+ };
30
+ }
31
+ /**
32
+ * Creates createContext.
33
+ * @returns Return value output.
34
+ * @example
35
+ * ```typescript
36
+ * createContext();
37
+ * ```
38
+ */
39
+ declare const createContext: () => RuleContextState;
40
+ /**
41
+ * Creates createTypeAnnotation.
42
+ * @param type Input type value.
43
+ * @returns Return value output.
44
+ * @example
45
+ * ```typescript
46
+ * createTypeAnnotation();
47
+ * ```
48
+ */
49
+ declare const createTypeAnnotation: (type: string) => TypeAnnotationWrapper;
50
+ /**
51
+ * Creates createParameter.
52
+ * @param type Input type value.
53
+ * @returns Return value output.
54
+ * @example
55
+ * ```typescript
56
+ * createParameter();
57
+ * ```
58
+ */
59
+ declare const createParameter: (type: string) => MockNode;
60
+ /**
61
+ * Creates createBareParameter.
62
+ * @returns Return value output.
63
+ * @example
64
+ * ```typescript
65
+ * createBareParameter();
66
+ * ```
67
+ */
68
+ declare const createBareParameter: () => MockNode;
69
+ /**
70
+ * Creates createParameterProperty.
71
+ * @param type Input type value.
72
+ * @returns Return value output.
73
+ * @example
74
+ * ```typescript
75
+ * createParameterProperty();
76
+ * ```
77
+ */
78
+ declare const createParameterProperty: (type: string) => MockNode;
79
+ /**
80
+ * Creates createRestParameter.
81
+ * @param type Input type value.
82
+ * @returns Return value output.
83
+ * @example
84
+ * ```typescript
85
+ * createRestParameter();
86
+ * ```
87
+ */
88
+ declare const createRestParameter: (type: string) => MockNode;
89
+ /**
90
+ * Creates createFunctionNode.
91
+ * @param overrides Input overrides value.
92
+ * @returns Return value output.
93
+ * @example
94
+ * ```typescript
95
+ * createFunctionNode();
96
+ * ```
97
+ */
98
+ declare const createFunctionNode: (overrides: Partial<MockNode>) => MockNode;
99
+ /**
100
+ * Runs the listener for the supplied node.
101
+ * @param context Rule execution context.
102
+ * @param node Node to run through the listener.
103
+ * @example
104
+ * ```typescript
105
+ * runListener(context, node);
106
+ * ```
107
+ */
108
+ declare const runListener: (context: Rule.RuleContext, node?: MockNode) => void;
109
+ export { createBareParameter, createContext, createFunctionNode, createParameter, createParameterProperty, createRestParameter, createTypeAnnotation, runListener, };
110
+ //# sourceMappingURL=test-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-helpers.d.ts","sourceRoot":"","sources":["../../../src/core/prefer-interface-types/test-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAInC,qCAAqC;AACrC,UAAU,QAAQ;IAChB,iCAAiC;IACjC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAEvB,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;CACd;AAWD,qCAAqC;AACrC,UAAU,WAAW;IACnB,8BAA8B;IAC9B,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAE9B,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B;AAED,qCAAqC;AACrC,UAAU,gBAAgB;IACxB,2BAA2B;IAC3B,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC;IAE1B,2BAA2B;IAC3B,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB;AAED,qCAAqC;AACrC,UAAU,qBAAqB;IAC7B,kCAAkC;IAClC,cAAc,EAAE;QACd,wBAAwB;QACxB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED;;;;;;;GAOG;AACH,QAAA,MAAM,aAAa,QAAO,gBAczB,CAAC;AAEF;;;;;;;;GAQG;AACH,QAAA,MAAM,oBAAoB,GAAI,MAAM,MAAM,KAAG,qBAE3C,CAAC;AAEH;;;;;;;;GAQG;AACH,QAAA,MAAM,eAAe,GAAI,MAAM,MAAM,KAAG,QAKxB,CAAC;AAEjB;;;;;;;GAOG;AACH,QAAA,MAAM,mBAAmB,QAAO,QAIhB,CAAC;AAEjB;;;;;;;;GAQG;AACH,QAAA,MAAM,uBAAuB,GAAI,MAAM,MAAM,KAAG,QAIhC,CAAC;AAEjB;;;;;;;;GAQG;AACH,QAAA,MAAM,mBAAmB,GAAI,MAAM,MAAM,KAAG,QAI5B,CAAC;AAEjB;;;;;;;;GAQG;AACH,QAAA,MAAM,kBAAkB,GAAI,WAAW,OAAO,CAAC,QAAQ,CAAC,KAAG,QAK3C,CAAC;AAEjB;;;;;;;;GAQG;AACH,QAAA,MAAM,WAAW,GAAI,SAAS,IAAI,CAAC,WAAW,EAAE,OAAO,QAAQ,KAAG,IAOjE,CAAC;AAEF,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,uBAAuB,EACvB,mBAAmB,EACnB,oBAAoB,EACpB,WAAW,GACZ,CAAC"}
@@ -0,0 +1,116 @@
1
+ import { preferInterfaceTypesRule } from "./rule";
2
+ /**
3
+ * Creates createContext.
4
+ * @returns Return value output.
5
+ * @example
6
+ * ```typescript
7
+ * createContext();
8
+ * ```
9
+ */
10
+ const createContext = () => {
11
+ const reports = [];
12
+ const context = {
13
+ id: "prefer-interface-types",
14
+ options: [],
15
+ report: (descriptor) => {
16
+ const { messageId, node } = descriptor;
17
+ const reportEntry = { messageId, nodeType: node?.type };
18
+ reports.push(reportEntry);
19
+ },
20
+ };
21
+ return { context, reports };
22
+ };
23
+ /**
24
+ * Creates createTypeAnnotation.
25
+ * @param type Input type value.
26
+ * @returns Return value output.
27
+ * @example
28
+ * ```typescript
29
+ * createTypeAnnotation();
30
+ * ```
31
+ */
32
+ const createTypeAnnotation = (type) => ({
33
+ typeAnnotation: { type },
34
+ });
35
+ /**
36
+ * Creates createParameter.
37
+ * @param type Input type value.
38
+ * @returns Return value output.
39
+ * @example
40
+ * ```typescript
41
+ * createParameter();
42
+ * ```
43
+ */
44
+ const createParameter = (type) => ({
45
+ name: "value",
46
+ type: "Identifier",
47
+ typeAnnotation: createTypeAnnotation(type),
48
+ });
49
+ /**
50
+ * Creates createBareParameter.
51
+ * @returns Return value output.
52
+ * @example
53
+ * ```typescript
54
+ * createBareParameter();
55
+ * ```
56
+ */
57
+ const createBareParameter = () => ({
58
+ name: "value",
59
+ type: "Identifier",
60
+ });
61
+ /**
62
+ * Creates createParameterProperty.
63
+ * @param type Input type value.
64
+ * @returns Return value output.
65
+ * @example
66
+ * ```typescript
67
+ * createParameterProperty();
68
+ * ```
69
+ */
70
+ const createParameterProperty = (type) => ({
71
+ parameter: createParameter(type),
72
+ type: "TSParameterProperty",
73
+ });
74
+ /**
75
+ * Creates createRestParameter.
76
+ * @param type Input type value.
77
+ * @returns Return value output.
78
+ * @example
79
+ * ```typescript
80
+ * createRestParameter();
81
+ * ```
82
+ */
83
+ const createRestParameter = (type) => ({
84
+ argument: createParameter(type),
85
+ type: "RestElement",
86
+ });
87
+ /**
88
+ * Creates createFunctionNode.
89
+ * @param overrides Input overrides value.
90
+ * @returns Return value output.
91
+ * @example
92
+ * ```typescript
93
+ * createFunctionNode();
94
+ * ```
95
+ */
96
+ const createFunctionNode = (overrides) => ({
97
+ params: [],
98
+ type: "FunctionDeclaration",
99
+ ...overrides,
100
+ });
101
+ /**
102
+ * Runs the listener for the supplied node.
103
+ * @param context Rule execution context.
104
+ * @param node Node to run through the listener.
105
+ * @example
106
+ * ```typescript
107
+ * runListener(context, node);
108
+ * ```
109
+ */
110
+ const runListener = (context, node) => {
111
+ const listeners = preferInterfaceTypesRule.create(context);
112
+ const listener = listeners.FunctionDeclaration;
113
+ listener?.(node);
114
+ };
115
+ export { createBareParameter, createContext, createFunctionNode, createParameter, createParameterProperty, createRestParameter, createTypeAnnotation, runListener, };
116
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvcmUvcHJlZmVyLWludGVyZmFjZS10eXBlcy90ZXN0LWhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sUUFBUSxDQUFDO0FBK0NsRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxhQUFhLEdBQUcsR0FBcUIsRUFBRTtJQUMzQyxNQUFNLE9BQU8sR0FBa0IsRUFBRSxDQUFDO0lBQ2xDLE1BQU0sT0FBTyxHQUFxQjtRQUNoQyxFQUFFLEVBQUUsd0JBQXdCO1FBQzVCLE9BQU8sRUFBRSxFQUFFO1FBQ1gsTUFBTSxFQUFFLENBQUMsVUFBaUMsRUFBUSxFQUFFO1lBQ2xELE1BQU0sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEdBQUcsVUFBcUMsQ0FBQztZQUNsRSxNQUFNLFdBQVcsR0FBZ0IsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUVyRSxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzVCLENBQUM7S0FDNkIsQ0FBQztJQUVqQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDO0FBQzlCLENBQUMsQ0FBQztBQUVGOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLElBQVksRUFBeUIsRUFBRSxDQUFDLENBQUM7SUFDckUsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFFO0NBQ3pCLENBQUMsQ0FBQztBQUVIOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxlQUFlLEdBQUcsQ0FBQyxJQUFZLEVBQVksRUFBRSxDQUNqRCxDQUFDO0lBQ0MsSUFBSSxFQUFFLE9BQU87SUFDYixJQUFJLEVBQUUsWUFBWTtJQUNsQixjQUFjLEVBQUUsb0JBQW9CLENBQUMsSUFBSSxDQUFDO0NBQzNDLENBQWEsQ0FBQztBQUVqQjs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxtQkFBbUIsR0FBRyxHQUFhLEVBQUUsQ0FDekMsQ0FBQztJQUNDLElBQUksRUFBRSxPQUFPO0lBQ2IsSUFBSSxFQUFFLFlBQVk7Q0FDbkIsQ0FBYSxDQUFDO0FBRWpCOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLElBQVksRUFBWSxFQUFFLENBQ3pELENBQUM7SUFDQyxTQUFTLEVBQUUsZUFBZSxDQUFDLElBQUksQ0FBQztJQUNoQyxJQUFJLEVBQUUscUJBQXFCO0NBQzVCLENBQWEsQ0FBQztBQUVqQjs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxJQUFZLEVBQVksRUFBRSxDQUNyRCxDQUFDO0lBQ0MsUUFBUSxFQUFFLGVBQWUsQ0FBQyxJQUFJLENBQUM7SUFDL0IsSUFBSSxFQUFFLGFBQWE7Q0FDcEIsQ0FBYSxDQUFDO0FBRWpCOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLFNBQTRCLEVBQVksRUFBRSxDQUNwRSxDQUFDO0lBQ0MsTUFBTSxFQUFFLEVBQUU7SUFDVixJQUFJLEVBQUUscUJBQXFCO0lBQzNCLEdBQUcsU0FBUztDQUNiLENBQWEsQ0FBQztBQUVqQjs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sV0FBVyxHQUFHLENBQUMsT0FBeUIsRUFBRSxJQUFlLEVBQVEsRUFBRTtJQUN2RSxNQUFNLFNBQVMsR0FBRyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDM0QsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLG1CQUVkLENBQUM7SUFFZCxRQUFRLEVBQUUsQ0FBQyxJQUE0QixDQUFDLENBQUM7QUFDM0MsQ0FBQyxDQUFDO0FBRUYsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixhQUFhLEVBQ2Isa0JBQWtCLEVBQ2xCLGVBQWUsRUFDZix1QkFBdUIsRUFDdkIsbUJBQW1CLEVBQ25CLG9CQUFvQixFQUNwQixXQUFXLEdBQ1osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUnVsZSB9IGZyb20gXCJlc2xpbnRcIjtcblxuaW1wb3J0IHsgcHJlZmVySW50ZXJmYWNlVHlwZXNSdWxlIH0gZnJvbSBcIi4vcnVsZVwiO1xuXG4vKiogVHlwZSBkZWZpbml0aW9uIGZvciBydWxlIGRhdGEuICovXG5pbnRlcmZhY2UgTW9ja05vZGUge1xuICAvKiogSW5kZXggc2lnbmF0dXJlIHZhbHVlIG1hcC4gKi9cbiAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcblxuICAvKiogVHlwZSBmaWVsZCB2YWx1ZS4gKi9cbiAgdHlwZTogc3RyaW5nO1xufVxuXG4vKiogVHlwZSBkZWZpbml0aW9uIGZvciBydWxlIGRhdGEuICovXG5pbnRlcmZhY2UgUmVwb3J0RGVzY3JpcHRvckRldGFpbHMge1xuICAvKiogTWVzc2FnZUlkIGZpZWxkIHZhbHVlLiAqL1xuICBtZXNzYWdlSWQ/OiBzdHJpbmc7XG5cbiAgLyoqIE5vZGUgZmllbGQgdmFsdWUuICovXG4gIG5vZGU/OiBSdWxlLk5vZGU7XG59XG5cbi8qKiBUeXBlIGRlZmluaXRpb24gZm9yIHJ1bGUgZGF0YS4gKi9cbmludGVyZmFjZSBSZXBvcnRFbnRyeSB7XG4gIC8qKiBNZXNzYWdlSWQgaGVscGVyIHZhbHVlLiAqL1xuICBtZXNzYWdlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKiogTm9kZVR5cGUgZmllbGQgdmFsdWUuICovXG4gIG5vZGVUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbi8qKiBUeXBlIGRlZmluaXRpb24gZm9yIHJ1bGUgZGF0YS4gKi9cbmludGVyZmFjZSBSdWxlQ29udGV4dFN0YXRlIHtcbiAgLyoqIENvbnRleHQgZmllbGQgdmFsdWUuICovXG4gIGNvbnRleHQ6IFJ1bGUuUnVsZUNvbnRleHQ7XG5cbiAgLyoqIFJlcG9ydHMgZmllbGQgdmFsdWUuICovXG4gIHJlcG9ydHM6IFJlcG9ydEVudHJ5W107XG59XG5cbi8qKiBUeXBlIGRlZmluaXRpb24gZm9yIHJ1bGUgZGF0YS4gKi9cbmludGVyZmFjZSBUeXBlQW5ub3RhdGlvbldyYXBwZXIge1xuICAvKiogVHlwZUFubm90YXRpb24gZmllbGQgdmFsdWUuICovXG4gIHR5cGVBbm5vdGF0aW9uOiB7XG4gICAgLyoqIFR5cGUgZmllbGQgdmFsdWUuICovXG4gICAgdHlwZTogc3RyaW5nO1xuICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgY3JlYXRlQ29udGV4dC5cbiAqIEByZXR1cm5zIFJldHVybiB2YWx1ZSBvdXRwdXQuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY3JlYXRlQ29udGV4dCgpO1xuICogYGBgXG4gKi9cbmNvbnN0IGNyZWF0ZUNvbnRleHQgPSAoKTogUnVsZUNvbnRleHRTdGF0ZSA9PiB7XG4gIGNvbnN0IHJlcG9ydHM6IFJlcG9ydEVudHJ5W10gPSBbXTtcbiAgY29uc3QgY29udGV4dDogUnVsZS5SdWxlQ29udGV4dCA9IHtcbiAgICBpZDogXCJwcmVmZXItaW50ZXJmYWNlLXR5cGVzXCIsXG4gICAgb3B0aW9uczogW10sXG4gICAgcmVwb3J0OiAoZGVzY3JpcHRvcjogUnVsZS5SZXBvcnREZXNjcmlwdG9yKTogdm9pZCA9PiB7XG4gICAgICBjb25zdCB7IG1lc3NhZ2VJZCwgbm9kZSB9ID0gZGVzY3JpcHRvciBhcyBSZXBvcnREZXNjcmlwdG9yRGV0YWlscztcbiAgICAgIGNvbnN0IHJlcG9ydEVudHJ5OiBSZXBvcnRFbnRyeSA9IHsgbWVzc2FnZUlkLCBub2RlVHlwZTogbm9kZT8udHlwZSB9O1xuXG4gICAgICByZXBvcnRzLnB1c2gocmVwb3J0RW50cnkpO1xuICAgIH0sXG4gIH0gYXMgdW5rbm93biBhcyBSdWxlLlJ1bGVDb250ZXh0O1xuXG4gIHJldHVybiB7IGNvbnRleHQsIHJlcG9ydHMgfTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBjcmVhdGVUeXBlQW5ub3RhdGlvbi5cbiAqIEBwYXJhbSB0eXBlIElucHV0IHR5cGUgdmFsdWUuXG4gKiBAcmV0dXJucyBSZXR1cm4gdmFsdWUgb3V0cHV0LlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNyZWF0ZVR5cGVBbm5vdGF0aW9uKCk7XG4gKiBgYGBcbiAqL1xuY29uc3QgY3JlYXRlVHlwZUFubm90YXRpb24gPSAodHlwZTogc3RyaW5nKTogVHlwZUFubm90YXRpb25XcmFwcGVyID0+ICh7XG4gIHR5cGVBbm5vdGF0aW9uOiB7IHR5cGUgfSxcbn0pO1xuXG4vKipcbiAqIENyZWF0ZXMgY3JlYXRlUGFyYW1ldGVyLlxuICogQHBhcmFtIHR5cGUgSW5wdXQgdHlwZSB2YWx1ZS5cbiAqIEByZXR1cm5zIFJldHVybiB2YWx1ZSBvdXRwdXQuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY3JlYXRlUGFyYW1ldGVyKCk7XG4gKiBgYGBcbiAqL1xuY29uc3QgY3JlYXRlUGFyYW1ldGVyID0gKHR5cGU6IHN0cmluZyk6IE1vY2tOb2RlID0+XG4gICh7XG4gICAgbmFtZTogXCJ2YWx1ZVwiLFxuICAgIHR5cGU6IFwiSWRlbnRpZmllclwiLFxuICAgIHR5cGVBbm5vdGF0aW9uOiBjcmVhdGVUeXBlQW5ub3RhdGlvbih0eXBlKSxcbiAgfSkgYXMgTW9ja05vZGU7XG5cbi8qKlxuICogQ3JlYXRlcyBjcmVhdGVCYXJlUGFyYW1ldGVyLlxuICogQHJldHVybnMgUmV0dXJuIHZhbHVlIG91dHB1dC5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjcmVhdGVCYXJlUGFyYW1ldGVyKCk7XG4gKiBgYGBcbiAqL1xuY29uc3QgY3JlYXRlQmFyZVBhcmFtZXRlciA9ICgpOiBNb2NrTm9kZSA9PlxuICAoe1xuICAgIG5hbWU6IFwidmFsdWVcIixcbiAgICB0eXBlOiBcIklkZW50aWZpZXJcIixcbiAgfSkgYXMgTW9ja05vZGU7XG5cbi8qKlxuICogQ3JlYXRlcyBjcmVhdGVQYXJhbWV0ZXJQcm9wZXJ0eS5cbiAqIEBwYXJhbSB0eXBlIElucHV0IHR5cGUgdmFsdWUuXG4gKiBAcmV0dXJucyBSZXR1cm4gdmFsdWUgb3V0cHV0LlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNyZWF0ZVBhcmFtZXRlclByb3BlcnR5KCk7XG4gKiBgYGBcbiAqL1xuY29uc3QgY3JlYXRlUGFyYW1ldGVyUHJvcGVydHkgPSAodHlwZTogc3RyaW5nKTogTW9ja05vZGUgPT5cbiAgKHtcbiAgICBwYXJhbWV0ZXI6IGNyZWF0ZVBhcmFtZXRlcih0eXBlKSxcbiAgICB0eXBlOiBcIlRTUGFyYW1ldGVyUHJvcGVydHlcIixcbiAgfSkgYXMgTW9ja05vZGU7XG5cbi8qKlxuICogQ3JlYXRlcyBjcmVhdGVSZXN0UGFyYW1ldGVyLlxuICogQHBhcmFtIHR5cGUgSW5wdXQgdHlwZSB2YWx1ZS5cbiAqIEByZXR1cm5zIFJldHVybiB2YWx1ZSBvdXRwdXQuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY3JlYXRlUmVzdFBhcmFtZXRlcigpO1xuICogYGBgXG4gKi9cbmNvbnN0IGNyZWF0ZVJlc3RQYXJhbWV0ZXIgPSAodHlwZTogc3RyaW5nKTogTW9ja05vZGUgPT5cbiAgKHtcbiAgICBhcmd1bWVudDogY3JlYXRlUGFyYW1ldGVyKHR5cGUpLFxuICAgIHR5cGU6IFwiUmVzdEVsZW1lbnRcIixcbiAgfSkgYXMgTW9ja05vZGU7XG5cbi8qKlxuICogQ3JlYXRlcyBjcmVhdGVGdW5jdGlvbk5vZGUuXG4gKiBAcGFyYW0gb3ZlcnJpZGVzIElucHV0IG92ZXJyaWRlcyB2YWx1ZS5cbiAqIEByZXR1cm5zIFJldHVybiB2YWx1ZSBvdXRwdXQuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY3JlYXRlRnVuY3Rpb25Ob2RlKCk7XG4gKiBgYGBcbiAqL1xuY29uc3QgY3JlYXRlRnVuY3Rpb25Ob2RlID0gKG92ZXJyaWRlczogUGFydGlhbDxNb2NrTm9kZT4pOiBNb2NrTm9kZSA9PlxuICAoe1xuICAgIHBhcmFtczogW10sXG4gICAgdHlwZTogXCJGdW5jdGlvbkRlY2xhcmF0aW9uXCIsXG4gICAgLi4ub3ZlcnJpZGVzLFxuICB9KSBhcyBNb2NrTm9kZTtcblxuLyoqXG4gKiBSdW5zIHRoZSBsaXN0ZW5lciBmb3IgdGhlIHN1cHBsaWVkIG5vZGUuXG4gKiBAcGFyYW0gY29udGV4dCBSdWxlIGV4ZWN1dGlvbiBjb250ZXh0LlxuICogQHBhcmFtIG5vZGUgTm9kZSB0byBydW4gdGhyb3VnaCB0aGUgbGlzdGVuZXIuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogcnVuTGlzdGVuZXIoY29udGV4dCwgbm9kZSk7XG4gKiBgYGBcbiAqL1xuY29uc3QgcnVuTGlzdGVuZXIgPSAoY29udGV4dDogUnVsZS5SdWxlQ29udGV4dCwgbm9kZT86IE1vY2tOb2RlKTogdm9pZCA9PiB7XG4gIGNvbnN0IGxpc3RlbmVycyA9IHByZWZlckludGVyZmFjZVR5cGVzUnVsZS5jcmVhdGUoY29udGV4dCk7XG4gIGNvbnN0IGxpc3RlbmVyID0gbGlzdGVuZXJzLkZ1bmN0aW9uRGVjbGFyYXRpb24gYXNcbiAgICB8ICgobm9kZTogUnVsZS5Ob2RlKSA9PiB2b2lkKVxuICAgIHwgdW5kZWZpbmVkO1xuXG4gIGxpc3RlbmVyPy4obm9kZSBhcyB1bmtub3duIGFzIFJ1bGUuTm9kZSk7XG59O1xuXG5leHBvcnQge1xuICBjcmVhdGVCYXJlUGFyYW1ldGVyLFxuICBjcmVhdGVDb250ZXh0LFxuICBjcmVhdGVGdW5jdGlvbk5vZGUsXG4gIGNyZWF0ZVBhcmFtZXRlcixcbiAgY3JlYXRlUGFyYW1ldGVyUHJvcGVydHksXG4gIGNyZWF0ZVJlc3RQYXJhbWV0ZXIsXG4gIGNyZWF0ZVR5cGVBbm5vdGF0aW9uLFxuICBydW5MaXN0ZW5lcixcbn07XG4iXX0=