@codeperfect/eslint-plugin 1.0.0 → 2.1.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 (587) hide show
  1. package/README.md +26 -4
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/{custom-rules.d.ts → application/custom-rules.d.ts} +3 -0
  4. package/dist/application/custom-rules.d.ts.map +1 -0
  5. package/dist/application/custom-rules.js +74 -0
  6. package/dist/application/index.d.ts +4 -0
  7. package/dist/application/index.d.ts.map +1 -0
  8. package/dist/application/index.js +3 -0
  9. package/dist/codeperfect-eslint-plugin-1.0.0.tgz +0 -0
  10. package/dist/domain/architecture/consistent-barrel-files/barrel-file-utilities.d.ts +56 -0
  11. package/dist/domain/architecture/consistent-barrel-files/barrel-file-utilities.d.ts.map +1 -0
  12. package/dist/domain/architecture/consistent-barrel-files/barrel-file-utilities.js +149 -0
  13. package/dist/{architecture → domain/architecture}/consistent-barrel-files/consistent-barrel-files-listeners.d.ts +4 -4
  14. package/dist/domain/architecture/consistent-barrel-files/consistent-barrel-files-listeners.d.ts.map +1 -0
  15. package/dist/domain/architecture/consistent-barrel-files/consistent-barrel-files-listeners.js +98 -0
  16. package/dist/domain/architecture/consistent-barrel-files/consistent-barrel-files-options.d.ts +45 -0
  17. package/dist/domain/architecture/consistent-barrel-files/consistent-barrel-files-options.d.ts.map +1 -0
  18. package/dist/domain/architecture/consistent-barrel-files/consistent-barrel-files-options.js +64 -0
  19. package/dist/{architecture → domain/architecture}/consistent-barrel-files/exports-only-rule-test-utilities.d.ts +5 -4
  20. package/dist/domain/architecture/consistent-barrel-files/exports-only-rule-test-utilities.d.ts.map +1 -0
  21. package/dist/domain/architecture/consistent-barrel-files/exports-only-rule-test-utilities.js +87 -0
  22. package/dist/domain/architecture/consistent-barrel-files/exports-only-rule.d.ts.map +1 -0
  23. package/dist/domain/architecture/consistent-barrel-files/exports-only-rule.js +145 -0
  24. package/dist/domain/architecture/consistent-barrel-files/index.d.ts +5 -0
  25. package/dist/domain/architecture/consistent-barrel-files/index.d.ts.map +1 -0
  26. package/dist/domain/architecture/consistent-barrel-files/index.js +4 -0
  27. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.d.ts.map +1 -0
  28. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.js +90 -0
  29. package/dist/{architecture → domain/architecture}/consistent-barrel-files/no-reexports-outside-barrels-test-utilities.d.ts +1 -1
  30. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-test-utilities.d.ts.map +1 -0
  31. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-test-utilities.js +91 -0
  32. package/dist/{architecture → domain/architecture}/consistent-barrel-files/no-reexports-outside-barrels-utilities.d.ts +4 -6
  33. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-utilities.d.ts.map +1 -0
  34. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-utilities.js +95 -0
  35. package/dist/domain/architecture/consistent-barrel-files/rule.d.ts.map +1 -0
  36. package/dist/domain/architecture/consistent-barrel-files/rule.js +51 -0
  37. package/dist/domain/architecture/consistent-barrel-files/rule.repeat-runs.d.ts +4 -0
  38. package/dist/domain/architecture/consistent-barrel-files/rule.repeat-runs.d.ts.map +1 -0
  39. package/dist/domain/architecture/consistent-barrel-files/rule.repeat-runs.js +4 -0
  40. package/dist/{architecture → domain/architecture}/consistent-barrel-files/test-helpers.d.ts +48 -48
  41. package/dist/domain/architecture/consistent-barrel-files/test-helpers.d.ts.map +1 -0
  42. package/dist/domain/architecture/consistent-barrel-files/test-helpers.file-writers.d.ts +20 -0
  43. package/dist/domain/architecture/consistent-barrel-files/test-helpers.file-writers.d.ts.map +1 -0
  44. package/dist/domain/architecture/consistent-barrel-files/test-helpers.file-writers.js +25 -0
  45. package/dist/domain/architecture/consistent-barrel-files/test-helpers.js +235 -0
  46. package/dist/domain/architecture/consistent-barrel-files/types.d.ts +19 -0
  47. package/dist/domain/architecture/consistent-barrel-files/types.d.ts.map +1 -0
  48. package/dist/domain/architecture/consistent-barrel-files/types.js +2 -0
  49. package/dist/{architecture → domain/architecture}/index.d.ts +1 -1
  50. package/dist/domain/architecture/index.d.ts.map +1 -0
  51. package/dist/domain/architecture/index.js +2 -0
  52. package/dist/{core → domain/core}/index.d.ts +2 -2
  53. package/dist/domain/core/index.d.ts.map +1 -0
  54. package/dist/domain/core/index.js +3 -0
  55. package/dist/domain/core/no-multiple-declarators/index.d.ts +2 -0
  56. package/dist/domain/core/no-multiple-declarators/index.d.ts.map +1 -0
  57. package/dist/domain/core/no-multiple-declarators/index.js +2 -0
  58. package/dist/domain/core/no-multiple-declarators/rule-test-helpers.d.ts +101 -0
  59. package/dist/domain/core/no-multiple-declarators/rule-test-helpers.d.ts.map +1 -0
  60. package/dist/domain/core/no-multiple-declarators/rule-test-helpers.js +108 -0
  61. package/dist/{core → domain/core}/no-multiple-declarators/rule.d.ts +1 -0
  62. package/dist/domain/core/no-multiple-declarators/rule.d.ts.map +1 -0
  63. package/dist/domain/core/no-multiple-declarators/rule.fixes.d.ts +35 -0
  64. package/dist/domain/core/no-multiple-declarators/rule.fixes.d.ts.map +1 -0
  65. package/dist/domain/core/no-multiple-declarators/rule.fixes.js +95 -0
  66. package/dist/domain/core/no-multiple-declarators/rule.guardrails.d.ts +4 -0
  67. package/dist/domain/core/no-multiple-declarators/rule.guardrails.d.ts.map +1 -0
  68. package/dist/domain/core/no-multiple-declarators/rule.guardrails.js +4 -0
  69. package/dist/domain/core/no-multiple-declarators/rule.js +222 -0
  70. package/dist/domain/core/no-multiple-declarators/rule.mocked-types.d.ts +4 -0
  71. package/dist/domain/core/no-multiple-declarators/rule.mocked-types.d.ts.map +1 -0
  72. package/dist/domain/core/no-multiple-declarators/rule.mocked-types.js +4 -0
  73. package/dist/domain/core/no-multiple-declarators/types.d.ts +77 -0
  74. package/dist/domain/core/no-multiple-declarators/types.d.ts.map +1 -0
  75. package/dist/domain/core/no-multiple-declarators/types.js +38 -0
  76. package/dist/domain/core/prefer-interface-types/index.d.ts +2 -0
  77. package/dist/domain/core/prefer-interface-types/index.d.ts.map +1 -0
  78. package/dist/domain/core/prefer-interface-types/index.js +2 -0
  79. package/dist/domain/core/prefer-interface-types/rule.d.ts.map +1 -0
  80. package/dist/domain/core/prefer-interface-types/rule.js +148 -0
  81. package/dist/domain/core/prefer-interface-types/test-helpers.d.ts.map +1 -0
  82. package/dist/domain/core/prefer-interface-types/test-helpers.js +116 -0
  83. package/dist/{custom-rule-documentation.d.ts → domain/custom-rule-documentation.d.ts} +3 -1
  84. package/dist/domain/custom-rule-documentation.d.ts.map +1 -0
  85. package/dist/domain/custom-rule-documentation.js +36 -0
  86. package/dist/domain/docs/index.d.ts +4 -0
  87. package/dist/domain/docs/index.d.ts.map +1 -0
  88. package/dist/domain/docs/index.js +4 -0
  89. package/dist/domain/docs/no-interface-member-docs/comment-utilities-test-helpers.d.ts.map +1 -0
  90. package/dist/domain/docs/no-interface-member-docs/comment-utilities-test-helpers.js +129 -0
  91. package/dist/{docs → domain/docs}/no-interface-member-docs/comment-utilities.d.ts +1 -1
  92. package/dist/domain/docs/no-interface-member-docs/comment-utilities.d.ts.map +1 -0
  93. package/dist/domain/docs/no-interface-member-docs/comment-utilities.js +146 -0
  94. package/dist/domain/docs/no-interface-member-docs/index.d.ts +2 -0
  95. package/dist/domain/docs/no-interface-member-docs/index.d.ts.map +1 -0
  96. package/dist/domain/docs/no-interface-member-docs/index.js +2 -0
  97. package/dist/{docs → domain/docs}/no-interface-member-docs/parameter-tags.d.ts +1 -1
  98. package/dist/domain/docs/no-interface-member-docs/parameter-tags.d.ts.map +1 -0
  99. package/dist/domain/docs/no-interface-member-docs/parameter-tags.js +101 -0
  100. package/dist/{docs → domain/docs}/no-interface-member-docs/parameter-utilities.d.ts +1 -1
  101. package/dist/domain/docs/no-interface-member-docs/parameter-utilities.d.ts.map +1 -0
  102. package/dist/domain/docs/no-interface-member-docs/parameter-utilities.js +125 -0
  103. package/dist/domain/docs/no-interface-member-docs/rule.d.ts.map +1 -0
  104. package/dist/domain/docs/no-interface-member-docs/rule.js +171 -0
  105. package/dist/domain/docs/no-interface-member-docs/test-helpers.d.ts.map +1 -0
  106. package/dist/{docs → domain/docs}/no-interface-member-docs/test-helpers.js +2 -2
  107. package/dist/{docs → domain/docs}/no-interface-member-docs/types.d.ts +2 -2
  108. package/dist/domain/docs/no-interface-member-docs/types.d.ts.map +1 -0
  109. package/dist/domain/docs/no-interface-member-docs/types.js +2 -0
  110. package/dist/domain/docs/require-example-language/create-fixer.d.ts +5 -0
  111. package/dist/domain/docs/require-example-language/create-fixer.d.ts.map +1 -0
  112. package/dist/domain/docs/require-example-language/create-fixer.js +5 -0
  113. package/dist/domain/docs/require-example-language/empty-fence-fixes.d.ts.map +1 -0
  114. package/dist/domain/docs/require-example-language/empty-fence-fixes.js +169 -0
  115. package/dist/domain/docs/require-example-language/example-utilities.d.ts.map +1 -0
  116. package/dist/domain/docs/require-example-language/example-utilities.js +76 -0
  117. package/dist/{docs → domain/docs}/require-example-language/examples.d.ts +1 -1
  118. package/dist/domain/docs/require-example-language/examples.d.ts.map +1 -0
  119. package/dist/domain/docs/require-example-language/examples.js +181 -0
  120. package/dist/{docs → domain/docs}/require-example-language/fixes.d.ts +2 -2
  121. package/dist/domain/docs/require-example-language/fixes.d.ts.map +1 -0
  122. package/dist/domain/docs/require-example-language/fixes.js +182 -0
  123. package/dist/domain/docs/require-example-language/index.d.ts +3 -0
  124. package/dist/domain/docs/require-example-language/index.d.ts.map +1 -0
  125. package/dist/domain/docs/require-example-language/index.js +2 -0
  126. package/dist/{docs → domain/docs}/require-example-language/reporting.d.ts +1 -1
  127. package/dist/domain/docs/require-example-language/reporting.d.ts.map +1 -0
  128. package/dist/domain/docs/require-example-language/reporting.js +148 -0
  129. package/dist/domain/docs/require-example-language/rule.d.ts.map +1 -0
  130. package/dist/domain/docs/require-example-language/rule.js +37 -0
  131. package/dist/domain/docs/require-example-language/types.d.ts.map +1 -0
  132. package/dist/domain/docs/require-example-language/types.js +2 -0
  133. package/dist/domain/docs/single-line-jsdoc/index.d.ts +2 -0
  134. package/dist/domain/docs/single-line-jsdoc/index.d.ts.map +1 -0
  135. package/dist/domain/docs/single-line-jsdoc/index.js +2 -0
  136. package/dist/domain/docs/single-line-jsdoc/rule.d.ts +4 -0
  137. package/dist/domain/docs/single-line-jsdoc/rule.d.ts.map +1 -0
  138. package/dist/domain/docs/single-line-jsdoc/rule.edge-cases.d.ts +4 -0
  139. package/dist/domain/docs/single-line-jsdoc/rule.edge-cases.d.ts.map +1 -0
  140. package/dist/domain/docs/single-line-jsdoc/rule.edge-cases.js +5 -0
  141. package/dist/domain/docs/single-line-jsdoc/rule.js +201 -0
  142. package/dist/domain/docs/single-line-jsdoc/rule.node-lookups.d.ts +4 -0
  143. package/dist/domain/docs/single-line-jsdoc/rule.node-lookups.d.ts.map +1 -0
  144. package/dist/domain/docs/single-line-jsdoc/rule.node-lookups.js +5 -0
  145. package/dist/domain/docs/single-line-jsdoc/single-line-jsdoc-content.d.ts.map +1 -0
  146. package/dist/domain/docs/single-line-jsdoc/single-line-jsdoc-content.js +95 -0
  147. package/dist/{docs → domain/docs}/single-line-jsdoc/single-line-jsdoc-utilities.d.ts +1 -1
  148. package/dist/domain/docs/single-line-jsdoc/single-line-jsdoc-utilities.d.ts.map +1 -0
  149. package/dist/domain/docs/single-line-jsdoc/single-line-jsdoc-utilities.js +140 -0
  150. package/dist/domain/docs/test-helpers.d.ts.map +1 -0
  151. package/dist/domain/docs/test-helpers.js +107 -0
  152. package/dist/domain/index.d.ts +6 -0
  153. package/dist/domain/index.d.ts.map +1 -0
  154. package/dist/domain/index.js +6 -0
  155. package/dist/domain/testing/aaa/analyzer.analysis.d.ts +34 -0
  156. package/dist/domain/testing/aaa/analyzer.analysis.d.ts.map +1 -0
  157. package/dist/domain/testing/aaa/analyzer.analysis.helpers.d.ts +145 -0
  158. package/dist/domain/testing/aaa/analyzer.analysis.helpers.d.ts.map +1 -0
  159. package/dist/domain/testing/aaa/analyzer.analysis.helpers.js +203 -0
  160. package/dist/domain/testing/aaa/analyzer.analysis.js +82 -0
  161. package/dist/domain/testing/aaa/analyzer.analysis.unsupported.d.ts +4 -0
  162. package/dist/domain/testing/aaa/analyzer.analysis.unsupported.d.ts.map +1 -0
  163. package/dist/domain/testing/aaa/analyzer.analysis.unsupported.js +4 -0
  164. package/dist/domain/testing/aaa/analyzer.assertions.d.ts +18 -0
  165. package/dist/domain/testing/aaa/analyzer.assertions.d.ts.map +1 -0
  166. package/dist/domain/testing/aaa/analyzer.assertions.destructured.d.ts +4 -0
  167. package/dist/domain/testing/aaa/analyzer.assertions.destructured.d.ts.map +1 -0
  168. package/dist/domain/testing/aaa/analyzer.assertions.destructured.js +4 -0
  169. package/dist/domain/testing/aaa/analyzer.assertions.helpers.d.ts +95 -0
  170. package/dist/domain/testing/aaa/analyzer.assertions.helpers.d.ts.map +1 -0
  171. package/dist/domain/testing/aaa/analyzer.assertions.helpers.js +185 -0
  172. package/dist/domain/testing/aaa/analyzer.assertions.js +33 -0
  173. package/dist/domain/testing/aaa/analyzer.assertions.operands.d.ts +64 -0
  174. package/dist/domain/testing/aaa/analyzer.assertions.operands.d.ts.map +1 -0
  175. package/dist/domain/testing/aaa/analyzer.assertions.operands.js +105 -0
  176. package/dist/domain/testing/aaa/analyzer.classification.d.ts +16 -0
  177. package/dist/domain/testing/aaa/analyzer.classification.d.ts.map +1 -0
  178. package/dist/domain/testing/aaa/analyzer.classification.helpers.d.ts +77 -0
  179. package/dist/domain/testing/aaa/analyzer.classification.helpers.d.ts.map +1 -0
  180. package/dist/domain/testing/aaa/analyzer.classification.helpers.js +203 -0
  181. package/dist/domain/testing/aaa/analyzer.classification.js +31 -0
  182. package/dist/domain/testing/aaa/analyzer.classification.member-patterns.d.ts +9 -0
  183. package/dist/domain/testing/aaa/analyzer.classification.member-patterns.d.ts.map +1 -0
  184. package/dist/domain/testing/aaa/analyzer.classification.member-patterns.js +10 -0
  185. package/dist/domain/testing/aaa/analyzer.classification.mutations.d.ts +4 -0
  186. package/dist/domain/testing/aaa/analyzer.classification.mutations.d.ts.map +1 -0
  187. package/dist/domain/testing/aaa/analyzer.classification.mutations.js +4 -0
  188. package/dist/domain/testing/aaa/analyzer.classification.traversal.d.ts +15 -0
  189. package/dist/domain/testing/aaa/analyzer.classification.traversal.d.ts.map +1 -0
  190. package/dist/domain/testing/aaa/analyzer.classification.traversal.js +34 -0
  191. package/dist/domain/testing/aaa/analyzer.d.ts +46 -0
  192. package/dist/domain/testing/aaa/analyzer.d.ts.map +1 -0
  193. package/dist/domain/testing/aaa/analyzer.js +59 -0
  194. package/dist/domain/testing/aaa/analyzer.super.d.ts +106 -0
  195. package/dist/domain/testing/aaa/analyzer.super.d.ts.map +1 -0
  196. package/dist/domain/testing/aaa/analyzer.super.helpers.d.ts +27 -0
  197. package/dist/domain/testing/aaa/analyzer.super.helpers.d.ts.map +1 -0
  198. package/dist/domain/testing/aaa/analyzer.super.helpers.js +66 -0
  199. package/dist/domain/testing/aaa/analyzer.super.js +211 -0
  200. package/dist/{testing → domain/testing}/aaa/index.d.ts +2 -2
  201. package/dist/domain/testing/aaa/index.d.ts.map +1 -0
  202. package/dist/domain/testing/aaa/index.js +2 -0
  203. package/dist/domain/testing/aaa/types.d.ts +58 -0
  204. package/dist/domain/testing/aaa/types.d.ts.map +1 -0
  205. package/dist/domain/testing/aaa/types.js +2 -0
  206. package/dist/domain/testing/assert-actual-expected-names/index.d.ts +2 -0
  207. package/dist/domain/testing/assert-actual-expected-names/index.d.ts.map +1 -0
  208. package/dist/domain/testing/assert-actual-expected-names/index.js +2 -0
  209. package/dist/{testing → domain/testing}/assert-actual-expected-names/rule.d.ts +1 -0
  210. package/dist/domain/testing/assert-actual-expected-names/rule.d.ts.map +1 -0
  211. package/dist/domain/testing/assert-actual-expected-names/rule.js +116 -0
  212. package/dist/domain/testing/enforce-aaa-phase-purity/index.d.ts +2 -0
  213. package/dist/domain/testing/enforce-aaa-phase-purity/index.d.ts.map +1 -0
  214. package/dist/domain/testing/enforce-aaa-phase-purity/index.js +2 -0
  215. package/dist/domain/testing/enforce-aaa-phase-purity/pattern-identifiers.d.ts +13 -0
  216. package/dist/domain/testing/enforce-aaa-phase-purity/pattern-identifiers.d.ts.map +1 -0
  217. package/dist/domain/testing/enforce-aaa-phase-purity/pattern-identifiers.js +134 -0
  218. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-identifiers.d.ts +25 -0
  219. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-identifiers.d.ts.map +1 -0
  220. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-identifiers.js +138 -0
  221. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.combined.d.ts +4 -0
  222. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.combined.d.ts.map +1 -0
  223. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.combined.js +4 -0
  224. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.companion.d.ts +4 -0
  225. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.companion.d.ts.map +1 -0
  226. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.companion.js +4 -0
  227. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.d.ts +4 -0
  228. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.d.ts.map +1 -0
  229. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.js +4 -0
  230. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.d.ts +14 -0
  231. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.d.ts.map +1 -0
  232. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.js +180 -0
  233. package/dist/domain/testing/enforce-aaa-phase-purity/rule-test-helpers.d.ts +42 -0
  234. package/dist/domain/testing/enforce-aaa-phase-purity/rule-test-helpers.d.ts.map +1 -0
  235. package/dist/domain/testing/enforce-aaa-phase-purity/rule-test-helpers.js +188 -0
  236. package/dist/{testing → domain/testing}/enforce-aaa-phase-purity/rule.d.ts +1 -0
  237. package/dist/domain/testing/enforce-aaa-phase-purity/rule.d.ts.map +1 -0
  238. package/dist/domain/testing/enforce-aaa-phase-purity/rule.js +37 -0
  239. package/dist/domain/testing/enforce-aaa-structure/index.d.ts +2 -0
  240. package/dist/domain/testing/enforce-aaa-structure/index.d.ts.map +1 -0
  241. package/dist/domain/testing/enforce-aaa-structure/index.js +2 -0
  242. package/dist/{testing → domain/testing}/enforce-aaa-structure/rule.d.ts +1 -0
  243. package/dist/domain/testing/enforce-aaa-structure/rule.d.ts.map +1 -0
  244. package/dist/domain/testing/enforce-aaa-structure/rule.js +88 -0
  245. package/dist/{testing → domain/testing}/index.d.ts +9 -8
  246. package/dist/domain/testing/index.d.ts.map +1 -0
  247. package/dist/domain/testing/index.js +10 -0
  248. package/dist/domain/testing/prefer-vi-mocked-import/fix-import-statements.d.ts +29 -0
  249. package/dist/domain/testing/prefer-vi-mocked-import/fix-import-statements.d.ts.map +1 -0
  250. package/dist/domain/testing/prefer-vi-mocked-import/fix-import-statements.js +90 -0
  251. package/dist/domain/testing/prefer-vi-mocked-import/fix-import-updates.d.ts +31 -0
  252. package/dist/domain/testing/prefer-vi-mocked-import/fix-import-updates.d.ts.map +1 -0
  253. package/dist/domain/testing/prefer-vi-mocked-import/fix-import-updates.js +43 -0
  254. package/dist/domain/testing/prefer-vi-mocked-import/fix-imports.d.ts +16 -0
  255. package/dist/domain/testing/prefer-vi-mocked-import/fix-imports.d.ts.map +1 -0
  256. package/dist/domain/testing/prefer-vi-mocked-import/fix-imports.js +205 -0
  257. package/dist/domain/testing/prefer-vi-mocked-import/fix.d.ts +28 -0
  258. package/dist/domain/testing/prefer-vi-mocked-import/fix.d.ts.map +1 -0
  259. package/dist/domain/testing/prefer-vi-mocked-import/fix.js +171 -0
  260. package/dist/domain/testing/prefer-vi-mocked-import/index.d.ts +2 -0
  261. package/dist/domain/testing/prefer-vi-mocked-import/index.d.ts.map +1 -0
  262. package/dist/domain/testing/prefer-vi-mocked-import/index.js +2 -0
  263. package/dist/{testing → domain/testing}/prefer-vi-mocked-import/match-bindings.d.ts +1 -1
  264. package/dist/domain/testing/prefer-vi-mocked-import/match-bindings.d.ts.map +1 -0
  265. package/dist/domain/testing/prefer-vi-mocked-import/match-bindings.js +52 -0
  266. package/dist/{testing → domain/testing}/prefer-vi-mocked-import/match-declarations.d.ts +2 -1
  267. package/dist/domain/testing/prefer-vi-mocked-import/match-declarations.d.ts.map +1 -0
  268. package/dist/domain/testing/prefer-vi-mocked-import/match-declarations.js +131 -0
  269. package/dist/domain/testing/prefer-vi-mocked-import/match-helpers.d.ts.map +1 -0
  270. package/dist/domain/testing/prefer-vi-mocked-import/match-helpers.js +102 -0
  271. package/dist/{testing → domain/testing}/prefer-vi-mocked-import/match-imports.d.ts +1 -1
  272. package/dist/domain/testing/prefer-vi-mocked-import/match-imports.d.ts.map +1 -0
  273. package/dist/domain/testing/prefer-vi-mocked-import/match-imports.js +156 -0
  274. package/dist/{testing → domain/testing}/prefer-vi-mocked-import/match-rewrites.d.ts +1 -1
  275. package/dist/domain/testing/prefer-vi-mocked-import/match-rewrites.d.ts.map +1 -0
  276. package/dist/domain/testing/prefer-vi-mocked-import/match-rewrites.js +119 -0
  277. package/dist/domain/testing/prefer-vi-mocked-import/match-walk.d.ts.map +1 -0
  278. package/dist/domain/testing/prefer-vi-mocked-import/match-walk.js +62 -0
  279. package/dist/domain/testing/prefer-vi-mocked-import/match.d.ts +26 -0
  280. package/dist/domain/testing/prefer-vi-mocked-import/match.d.ts.map +1 -0
  281. package/dist/domain/testing/prefer-vi-mocked-import/match.js +198 -0
  282. package/dist/domain/testing/prefer-vi-mocked-import/rule-test-helpers.d.ts +20 -0
  283. package/dist/domain/testing/prefer-vi-mocked-import/rule-test-helpers.d.ts.map +1 -0
  284. package/dist/domain/testing/prefer-vi-mocked-import/rule-test-helpers.js +39 -0
  285. package/dist/domain/testing/prefer-vi-mocked-import/rule.d.ts.map +1 -0
  286. package/dist/domain/testing/prefer-vi-mocked-import/rule.js +39 -0
  287. package/dist/{testing → domain/testing}/prefer-vi-mocked-import/types.d.ts +1 -1
  288. package/dist/domain/testing/prefer-vi-mocked-import/types.d.ts.map +1 -0
  289. package/dist/domain/testing/prefer-vi-mocked-import/types.js +2 -0
  290. package/dist/domain/testing/prefer-vitest-incremental-casts/ast-helpers.d.ts +97 -0
  291. package/dist/domain/testing/prefer-vitest-incremental-casts/ast-helpers.d.ts.map +1 -0
  292. package/dist/domain/testing/prefer-vitest-incremental-casts/ast-helpers.js +174 -0
  293. package/dist/domain/testing/prefer-vitest-incremental-casts/index.d.ts +2 -0
  294. package/dist/domain/testing/prefer-vitest-incremental-casts/index.d.ts.map +1 -0
  295. package/dist/domain/testing/prefer-vitest-incremental-casts/index.js +2 -0
  296. package/dist/domain/testing/prefer-vitest-incremental-casts/match-input.d.ts +14 -0
  297. package/dist/domain/testing/prefer-vitest-incremental-casts/match-input.d.ts.map +1 -0
  298. package/dist/domain/testing/prefer-vitest-incremental-casts/match-input.js +84 -0
  299. package/dist/domain/testing/prefer-vitest-incremental-casts/match.d.ts +13 -0
  300. package/dist/domain/testing/prefer-vitest-incremental-casts/match.d.ts.map +1 -0
  301. package/dist/domain/testing/prefer-vitest-incremental-casts/match.js +195 -0
  302. package/dist/domain/testing/prefer-vitest-incremental-casts/replacement-helpers.d.ts +25 -0
  303. package/dist/domain/testing/prefer-vitest-incremental-casts/replacement-helpers.d.ts.map +1 -0
  304. package/dist/domain/testing/prefer-vitest-incremental-casts/replacement-helpers.js +96 -0
  305. package/dist/domain/testing/prefer-vitest-incremental-casts/rule-test-helpers.d.ts +32 -0
  306. package/dist/domain/testing/prefer-vitest-incremental-casts/rule-test-helpers.d.ts.map +1 -0
  307. package/dist/domain/testing/prefer-vitest-incremental-casts/rule-test-helpers.js +164 -0
  308. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.d.ts +5 -0
  309. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.d.ts.map +1 -0
  310. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.guardrails.d.ts +4 -0
  311. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.guardrails.d.ts.map +1 -0
  312. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.guardrails.js +4 -0
  313. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.input-shapes.d.ts +4 -0
  314. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.input-shapes.d.ts.map +1 -0
  315. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.input-shapes.js +4 -0
  316. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.js +88 -0
  317. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.signature-fallback.d.ts +4 -0
  318. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.signature-fallback.d.ts.map +1 -0
  319. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.signature-fallback.js +4 -0
  320. package/dist/domain/testing/prefer-vitest-incremental-casts/type-helpers.d.ts +24 -0
  321. package/dist/domain/testing/prefer-vitest-incremental-casts/type-helpers.d.ts.map +1 -0
  322. package/dist/domain/testing/prefer-vitest-incremental-casts/type-helpers.js +113 -0
  323. package/dist/domain/testing/prefer-vitest-incremental-casts/type-shape-helpers.d.ts +36 -0
  324. package/dist/domain/testing/prefer-vitest-incremental-casts/type-shape-helpers.d.ts.map +1 -0
  325. package/dist/domain/testing/prefer-vitest-incremental-casts/type-shape-helpers.js +138 -0
  326. package/dist/domain/testing/prefer-vitest-incremental-casts/types.d.ts +187 -0
  327. package/dist/domain/testing/prefer-vitest-incremental-casts/types.d.ts.map +1 -0
  328. package/dist/domain/testing/prefer-vitest-incremental-casts/types.js +2 -0
  329. package/dist/domain/testing/require-aaa-sections/index.d.ts +2 -0
  330. package/dist/domain/testing/require-aaa-sections/index.d.ts.map +1 -0
  331. package/dist/domain/testing/require-aaa-sections/index.js +2 -0
  332. package/dist/domain/testing/require-aaa-sections/missing-section-fixes.d.ts +17 -0
  333. package/dist/domain/testing/require-aaa-sections/missing-section-fixes.d.ts.map +1 -0
  334. package/dist/domain/testing/require-aaa-sections/missing-section-fixes.js +150 -0
  335. package/dist/{testing → domain/testing}/require-aaa-sections/rule.d.ts +1 -0
  336. package/dist/domain/testing/require-aaa-sections/rule.d.ts.map +1 -0
  337. package/dist/domain/testing/require-aaa-sections/rule.js +134 -0
  338. package/dist/domain/testing/require-aaa-sections/rule.reporting.d.ts +104 -0
  339. package/dist/domain/testing/require-aaa-sections/rule.reporting.d.ts.map +1 -0
  340. package/dist/domain/testing/require-aaa-sections/rule.reporting.js +216 -0
  341. package/dist/domain/testing/require-act-result-capture/index.d.ts +2 -0
  342. package/dist/domain/testing/require-act-result-capture/index.d.ts.map +1 -0
  343. package/dist/domain/testing/require-act-result-capture/index.js +2 -0
  344. package/dist/{testing → domain/testing}/require-act-result-capture/rule.d.ts +1 -0
  345. package/dist/domain/testing/require-act-result-capture/rule.d.ts.map +1 -0
  346. package/dist/domain/testing/require-act-result-capture/rule.js +109 -0
  347. package/dist/domain/testing/require-test-companion/index.d.ts +3 -0
  348. package/dist/domain/testing/require-test-companion/index.d.ts.map +1 -0
  349. package/dist/domain/testing/require-test-companion/index.js +3 -0
  350. package/dist/{testing → domain/testing}/require-test-companion/require-test-companion-listeners.d.ts +1 -1
  351. package/dist/domain/testing/require-test-companion/require-test-companion-listeners.d.ts.map +1 -0
  352. package/dist/domain/testing/require-test-companion/require-test-companion-listeners.js +145 -0
  353. package/dist/domain/testing/require-test-companion/require-test-companion-options.d.ts.map +1 -0
  354. package/dist/domain/testing/require-test-companion/require-test-companion-options.js +113 -0
  355. package/dist/{testing → domain/testing}/require-test-companion/require-test-companion-test-helpers.d.ts +1 -1
  356. package/dist/domain/testing/require-test-companion/require-test-companion-test-helpers.d.ts.map +1 -0
  357. package/dist/domain/testing/require-test-companion/require-test-companion-test-helpers.js +184 -0
  358. package/dist/{testing → domain/testing}/require-test-companion/require-test-companion-utilities.d.ts +1 -1
  359. package/dist/domain/testing/require-test-companion/require-test-companion-utilities.d.ts.map +1 -0
  360. package/dist/domain/testing/require-test-companion/require-test-companion-utilities.js +26 -0
  361. package/dist/domain/testing/require-test-companion/rule.d.ts.map +1 -0
  362. package/dist/domain/testing/require-test-companion/rule.js +82 -0
  363. package/dist/domain/testing/require-test-companion/types.d.ts.map +1 -0
  364. package/dist/domain/testing/require-test-companion/types.js +2 -0
  365. package/dist/domain/testing/single-act-statement/index.d.ts +2 -0
  366. package/dist/domain/testing/single-act-statement/index.d.ts.map +1 -0
  367. package/dist/domain/testing/single-act-statement/index.js +2 -0
  368. package/dist/{testing → domain/testing}/single-act-statement/rule.d.ts +1 -0
  369. package/dist/domain/testing/single-act-statement/rule.d.ts.map +1 -0
  370. package/dist/domain/testing/single-act-statement/rule.js +37 -0
  371. package/dist/index.d.ts +4 -5
  372. package/dist/index.d.ts.map +1 -1
  373. package/dist/index.js +3 -6
  374. package/dist/{codeperfect-plugin.d.ts → infrastructure/codeperfect-plugin.d.ts} +2 -0
  375. package/dist/infrastructure/codeperfect-plugin.d.ts.map +1 -0
  376. package/dist/infrastructure/codeperfect-plugin.js +30 -0
  377. package/dist/infrastructure/index.d.ts +5 -0
  378. package/dist/infrastructure/index.d.ts.map +1 -0
  379. package/dist/infrastructure/index.js +4 -0
  380. package/dist/infrastructure/presets.d.ts +18 -0
  381. package/dist/infrastructure/presets.d.ts.map +1 -0
  382. package/dist/infrastructure/presets.js +81 -0
  383. package/package.json +67 -32
  384. package/dist/architecture/consistent-barrel-files/consistent-barrel-files-listeners.d.ts.map +0 -1
  385. package/dist/architecture/consistent-barrel-files/consistent-barrel-files-listeners.js +0 -131
  386. package/dist/architecture/consistent-barrel-files/consistent-barrel-files-options.d.ts +0 -48
  387. package/dist/architecture/consistent-barrel-files/consistent-barrel-files-options.d.ts.map +0 -1
  388. package/dist/architecture/consistent-barrel-files/consistent-barrel-files-options.js +0 -126
  389. package/dist/architecture/consistent-barrel-files/exports-only-rule-test-utilities.d.ts.map +0 -1
  390. package/dist/architecture/consistent-barrel-files/exports-only-rule-test-utilities.js +0 -90
  391. package/dist/architecture/consistent-barrel-files/exports-only-rule.d.ts.map +0 -1
  392. package/dist/architecture/consistent-barrel-files/exports-only-rule.js +0 -218
  393. package/dist/architecture/consistent-barrel-files/index.d.ts +0 -5
  394. package/dist/architecture/consistent-barrel-files/index.d.ts.map +0 -1
  395. package/dist/architecture/consistent-barrel-files/index.js +0 -4
  396. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.d.ts.map +0 -1
  397. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.js +0 -100
  398. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-test-utilities.d.ts.map +0 -1
  399. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-test-utilities.js +0 -90
  400. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-utilities.d.ts.map +0 -1
  401. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-utilities.js +0 -154
  402. package/dist/architecture/consistent-barrel-files/rule.d.ts.map +0 -1
  403. package/dist/architecture/consistent-barrel-files/rule.js +0 -58
  404. package/dist/architecture/consistent-barrel-files/test-helpers.d.ts.map +0 -1
  405. package/dist/architecture/consistent-barrel-files/test-helpers.js +0 -229
  406. package/dist/architecture/consistent-barrel-files/types.d.ts +0 -25
  407. package/dist/architecture/consistent-barrel-files/types.d.ts.map +0 -1
  408. package/dist/architecture/consistent-barrel-files/types.js +0 -2
  409. package/dist/architecture/index.d.ts.map +0 -1
  410. package/dist/architecture/index.js +0 -2
  411. package/dist/benchmark-rules.d.ts +0 -83
  412. package/dist/benchmark-rules.d.ts.map +0 -1
  413. package/dist/benchmark-rules.js +0 -175
  414. package/dist/codeperfect-plugin.d.ts.map +0 -1
  415. package/dist/codeperfect-plugin.js +0 -29
  416. package/dist/core/index.d.ts.map +0 -1
  417. package/dist/core/index.js +0 -3
  418. package/dist/core/no-multiple-declarators/index.d.ts +0 -2
  419. package/dist/core/no-multiple-declarators/index.d.ts.map +0 -1
  420. package/dist/core/no-multiple-declarators/index.js +0 -2
  421. package/dist/core/no-multiple-declarators/rule.d.ts.map +0 -1
  422. package/dist/core/no-multiple-declarators/rule.js +0 -100
  423. package/dist/core/prefer-interface-types/index.d.ts +0 -2
  424. package/dist/core/prefer-interface-types/index.d.ts.map +0 -1
  425. package/dist/core/prefer-interface-types/index.js +0 -2
  426. package/dist/core/prefer-interface-types/rule.d.ts.map +0 -1
  427. package/dist/core/prefer-interface-types/rule.js +0 -145
  428. package/dist/core/prefer-interface-types/test-helpers.d.ts.map +0 -1
  429. package/dist/core/prefer-interface-types/test-helpers.js +0 -116
  430. package/dist/custom-rule-documentation.d.ts.map +0 -1
  431. package/dist/custom-rule-documentation.js +0 -35
  432. package/dist/custom-rules.d.ts.map +0 -1
  433. package/dist/custom-rules.js +0 -70
  434. package/dist/docs/index.d.ts +0 -4
  435. package/dist/docs/index.d.ts.map +0 -1
  436. package/dist/docs/index.js +0 -4
  437. package/dist/docs/no-interface-member-docs/comment-utilities-test-helpers.d.ts.map +0 -1
  438. package/dist/docs/no-interface-member-docs/comment-utilities-test-helpers.js +0 -129
  439. package/dist/docs/no-interface-member-docs/comment-utilities.d.ts.map +0 -1
  440. package/dist/docs/no-interface-member-docs/comment-utilities.js +0 -146
  441. package/dist/docs/no-interface-member-docs/index.d.ts +0 -2
  442. package/dist/docs/no-interface-member-docs/index.d.ts.map +0 -1
  443. package/dist/docs/no-interface-member-docs/index.js +0 -2
  444. package/dist/docs/no-interface-member-docs/parameter-tags.d.ts.map +0 -1
  445. package/dist/docs/no-interface-member-docs/parameter-tags.js +0 -101
  446. package/dist/docs/no-interface-member-docs/parameter-utilities.d.ts.map +0 -1
  447. package/dist/docs/no-interface-member-docs/parameter-utilities.js +0 -125
  448. package/dist/docs/no-interface-member-docs/rule.d.ts.map +0 -1
  449. package/dist/docs/no-interface-member-docs/rule.js +0 -168
  450. package/dist/docs/no-interface-member-docs/test-helpers.d.ts.map +0 -1
  451. package/dist/docs/no-interface-member-docs/types.d.ts.map +0 -1
  452. package/dist/docs/no-interface-member-docs/types.js +0 -2
  453. package/dist/docs/require-example-language/empty-fence-fixes.d.ts.map +0 -1
  454. package/dist/docs/require-example-language/empty-fence-fixes.js +0 -169
  455. package/dist/docs/require-example-language/example-utilities.d.ts.map +0 -1
  456. package/dist/docs/require-example-language/example-utilities.js +0 -76
  457. package/dist/docs/require-example-language/examples.d.ts.map +0 -1
  458. package/dist/docs/require-example-language/examples.js +0 -181
  459. package/dist/docs/require-example-language/fixes.d.ts.map +0 -1
  460. package/dist/docs/require-example-language/fixes.js +0 -182
  461. package/dist/docs/require-example-language/index.d.ts +0 -3
  462. package/dist/docs/require-example-language/index.d.ts.map +0 -1
  463. package/dist/docs/require-example-language/index.js +0 -2
  464. package/dist/docs/require-example-language/reporting.d.ts.map +0 -1
  465. package/dist/docs/require-example-language/reporting.js +0 -145
  466. package/dist/docs/require-example-language/rule.d.ts.map +0 -1
  467. package/dist/docs/require-example-language/rule.js +0 -34
  468. package/dist/docs/require-example-language/types.d.ts.map +0 -1
  469. package/dist/docs/require-example-language/types.js +0 -2
  470. package/dist/docs/single-line-jsdoc/index.d.ts +0 -2
  471. package/dist/docs/single-line-jsdoc/index.d.ts.map +0 -1
  472. package/dist/docs/single-line-jsdoc/index.js +0 -2
  473. package/dist/docs/single-line-jsdoc/rule.d.ts +0 -5
  474. package/dist/docs/single-line-jsdoc/rule.d.ts.map +0 -1
  475. package/dist/docs/single-line-jsdoc/rule.js +0 -196
  476. package/dist/docs/single-line-jsdoc/single-line-jsdoc-content.d.ts.map +0 -1
  477. package/dist/docs/single-line-jsdoc/single-line-jsdoc-content.js +0 -95
  478. package/dist/docs/single-line-jsdoc/single-line-jsdoc-utilities.d.ts.map +0 -1
  479. package/dist/docs/single-line-jsdoc/single-line-jsdoc-utilities.js +0 -140
  480. package/dist/docs/test-helpers.d.ts.map +0 -1
  481. package/dist/docs/test-helpers.js +0 -107
  482. package/dist/presets.d.ts +0 -10
  483. package/dist/presets.d.ts.map +0 -1
  484. package/dist/presets.js +0 -50
  485. package/dist/rules/index.d.ts +0 -5
  486. package/dist/rules/index.d.ts.map +0 -1
  487. package/dist/rules/index.js +0 -6
  488. package/dist/testing/aaa/analyzer.d.ts +0 -36
  489. package/dist/testing/aaa/analyzer.d.ts.map +0 -1
  490. package/dist/testing/aaa/analyzer.js +0 -490
  491. package/dist/testing/aaa/index.d.ts.map +0 -1
  492. package/dist/testing/aaa/index.js +0 -2
  493. package/dist/testing/aaa/types.d.ts +0 -31
  494. package/dist/testing/aaa/types.d.ts.map +0 -1
  495. package/dist/testing/aaa/types.js +0 -2
  496. package/dist/testing/assert-actual-expected-names/index.d.ts +0 -2
  497. package/dist/testing/assert-actual-expected-names/index.d.ts.map +0 -1
  498. package/dist/testing/assert-actual-expected-names/index.js +0 -2
  499. package/dist/testing/assert-actual-expected-names/rule.d.ts.map +0 -1
  500. package/dist/testing/assert-actual-expected-names/rule.js +0 -54
  501. package/dist/testing/enforce-aaa-phase-purity/index.d.ts +0 -2
  502. package/dist/testing/enforce-aaa-phase-purity/index.d.ts.map +0 -1
  503. package/dist/testing/enforce-aaa-phase-purity/index.js +0 -2
  504. package/dist/testing/enforce-aaa-phase-purity/rule.d.ts.map +0 -1
  505. package/dist/testing/enforce-aaa-phase-purity/rule.js +0 -110
  506. package/dist/testing/enforce-aaa-structure/index.d.ts +0 -2
  507. package/dist/testing/enforce-aaa-structure/index.d.ts.map +0 -1
  508. package/dist/testing/enforce-aaa-structure/index.js +0 -2
  509. package/dist/testing/enforce-aaa-structure/rule.d.ts.map +0 -1
  510. package/dist/testing/enforce-aaa-structure/rule.js +0 -48
  511. package/dist/testing/index.d.ts.map +0 -1
  512. package/dist/testing/index.js +0 -9
  513. package/dist/testing/prefer-vi-mocked-import/fix.d.ts +0 -16
  514. package/dist/testing/prefer-vi-mocked-import/fix.d.ts.map +0 -1
  515. package/dist/testing/prefer-vi-mocked-import/fix.js +0 -224
  516. package/dist/testing/prefer-vi-mocked-import/index.d.ts +0 -2
  517. package/dist/testing/prefer-vi-mocked-import/index.d.ts.map +0 -1
  518. package/dist/testing/prefer-vi-mocked-import/index.js +0 -2
  519. package/dist/testing/prefer-vi-mocked-import/match-bindings.d.ts.map +0 -1
  520. package/dist/testing/prefer-vi-mocked-import/match-bindings.js +0 -52
  521. package/dist/testing/prefer-vi-mocked-import/match-declarations.d.ts.map +0 -1
  522. package/dist/testing/prefer-vi-mocked-import/match-declarations.js +0 -99
  523. package/dist/testing/prefer-vi-mocked-import/match-helpers.d.ts.map +0 -1
  524. package/dist/testing/prefer-vi-mocked-import/match-helpers.js +0 -102
  525. package/dist/testing/prefer-vi-mocked-import/match-imports.d.ts.map +0 -1
  526. package/dist/testing/prefer-vi-mocked-import/match-imports.js +0 -156
  527. package/dist/testing/prefer-vi-mocked-import/match-rewrites.d.ts.map +0 -1
  528. package/dist/testing/prefer-vi-mocked-import/match-rewrites.js +0 -119
  529. package/dist/testing/prefer-vi-mocked-import/match-walk.d.ts.map +0 -1
  530. package/dist/testing/prefer-vi-mocked-import/match-walk.js +0 -62
  531. package/dist/testing/prefer-vi-mocked-import/match.d.ts +0 -15
  532. package/dist/testing/prefer-vi-mocked-import/match.d.ts.map +0 -1
  533. package/dist/testing/prefer-vi-mocked-import/match.js +0 -193
  534. package/dist/testing/prefer-vi-mocked-import/rule.d.ts.map +0 -1
  535. package/dist/testing/prefer-vi-mocked-import/rule.js +0 -32
  536. package/dist/testing/prefer-vi-mocked-import/types.d.ts.map +0 -1
  537. package/dist/testing/prefer-vi-mocked-import/types.js +0 -2
  538. package/dist/testing/require-aaa-sections/index.d.ts +0 -2
  539. package/dist/testing/require-aaa-sections/index.d.ts.map +0 -1
  540. package/dist/testing/require-aaa-sections/index.js +0 -2
  541. package/dist/testing/require-aaa-sections/rule.d.ts.map +0 -1
  542. package/dist/testing/require-aaa-sections/rule.js +0 -111
  543. package/dist/testing/require-act-result-capture/index.d.ts +0 -2
  544. package/dist/testing/require-act-result-capture/index.d.ts.map +0 -1
  545. package/dist/testing/require-act-result-capture/index.js +0 -2
  546. package/dist/testing/require-act-result-capture/rule.d.ts.map +0 -1
  547. package/dist/testing/require-act-result-capture/rule.js +0 -34
  548. package/dist/testing/require-test-companion/index.d.ts +0 -3
  549. package/dist/testing/require-test-companion/index.d.ts.map +0 -1
  550. package/dist/testing/require-test-companion/index.js +0 -3
  551. package/dist/testing/require-test-companion/require-test-companion-listeners.d.ts.map +0 -1
  552. package/dist/testing/require-test-companion/require-test-companion-listeners.js +0 -145
  553. package/dist/testing/require-test-companion/require-test-companion-options.d.ts.map +0 -1
  554. package/dist/testing/require-test-companion/require-test-companion-options.js +0 -112
  555. package/dist/testing/require-test-companion/require-test-companion-test-helpers.d.ts.map +0 -1
  556. package/dist/testing/require-test-companion/require-test-companion-test-helpers.js +0 -183
  557. package/dist/testing/require-test-companion/require-test-companion-utilities.d.ts.map +0 -1
  558. package/dist/testing/require-test-companion/require-test-companion-utilities.js +0 -26
  559. package/dist/testing/require-test-companion/rule.d.ts.map +0 -1
  560. package/dist/testing/require-test-companion/rule.js +0 -57
  561. package/dist/testing/require-test-companion/types.d.ts.map +0 -1
  562. package/dist/testing/require-test-companion/types.js +0 -2
  563. package/dist/testing/single-act-statement/index.d.ts +0 -2
  564. package/dist/testing/single-act-statement/index.d.ts.map +0 -1
  565. package/dist/testing/single-act-statement/index.js +0 -2
  566. package/dist/testing/single-act-statement/rule.d.ts.map +0 -1
  567. package/dist/testing/single-act-statement/rule.js +0 -33
  568. /package/dist/{architecture → domain/architecture}/consistent-barrel-files/exports-only-rule.d.ts +0 -0
  569. /package/dist/{architecture → domain/architecture}/consistent-barrel-files/no-reexports-outside-barrels-rule.d.ts +0 -0
  570. /package/dist/{architecture → domain/architecture}/consistent-barrel-files/rule.d.ts +0 -0
  571. /package/dist/{core → domain/core}/prefer-interface-types/rule.d.ts +0 -0
  572. /package/dist/{core → domain/core}/prefer-interface-types/test-helpers.d.ts +0 -0
  573. /package/dist/{docs → domain/docs}/no-interface-member-docs/comment-utilities-test-helpers.d.ts +0 -0
  574. /package/dist/{docs → domain/docs}/no-interface-member-docs/rule.d.ts +0 -0
  575. /package/dist/{docs → domain/docs}/no-interface-member-docs/test-helpers.d.ts +0 -0
  576. /package/dist/{docs → domain/docs}/require-example-language/empty-fence-fixes.d.ts +0 -0
  577. /package/dist/{docs → domain/docs}/require-example-language/example-utilities.d.ts +0 -0
  578. /package/dist/{docs → domain/docs}/require-example-language/rule.d.ts +0 -0
  579. /package/dist/{docs → domain/docs}/require-example-language/types.d.ts +0 -0
  580. /package/dist/{docs → domain/docs}/single-line-jsdoc/single-line-jsdoc-content.d.ts +0 -0
  581. /package/dist/{docs → domain/docs}/test-helpers.d.ts +0 -0
  582. /package/dist/{testing → domain/testing}/prefer-vi-mocked-import/match-helpers.d.ts +0 -0
  583. /package/dist/{testing → domain/testing}/prefer-vi-mocked-import/match-walk.d.ts +0 -0
  584. /package/dist/{testing → domain/testing}/prefer-vi-mocked-import/rule.d.ts +0 -0
  585. /package/dist/{testing → domain/testing}/require-test-companion/require-test-companion-options.d.ts +0 -0
  586. /package/dist/{testing → domain/testing}/require-test-companion/rule.d.ts +0 -0
  587. /package/dist/{testing → domain/testing}/require-test-companion/types.d.ts +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consistent-barrel-files-options.d.ts","sourceRoot":"","sources":["../../../../src/domain/architecture/consistent-barrel-files/consistent-barrel-files-options.ts"],"names":[],"mappings":"AASA,qCAAqC;AACrC,UAAU,0BAA0B;IAClC,gCAAgC;IAChC,YAAY,EAAE,MAAM,EAAE,CAAC;IAEvB,mCAAmC;IACnC,eAAe,EAAE,MAAM,CAAC;IAExB,mCAAmC;IACnC,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAE7B,2BAA2B;IAC3B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;GAQG;AACH,QAAA,MAAM,UAAU,GACd,SAAS,SAAS,OAAO,EAAE,KAC1B,0BAYF,CAAC;AAEF;;;;;;;;GAQG;AACH,QAAA,MAAM,kBAAkB,GAAI,UAAU,MAAM,KAAG,OACf,CAAC;AAkBjC;;;;;;;;;GASG;AACH,QAAA,MAAM,cAAc,GAAI,UAAU,MAAM,EAAE,cAAc,MAAM,EAAE,KAAG,OAMlE,CAAC;AAEF,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,cAAc,EAAE,CAAC;AAC1D,YAAY,EAAE,0BAA0B,EAAE,CAAC"}
@@ -0,0 +1,64 @@
1
+ import path from "node:path";
2
+ import { isLintableModuleFile, normalizeAllowedBarrelNames, } from "./barrel-file-utilities.js";
3
+ /**
4
+ * Builds normalized rule options from raw rule input.
5
+ * @param options Raw rule options.
6
+ * @returns The normalized rule state.
7
+ * @example
8
+ * ```typescript
9
+ * const state = getOptions([{}]);
10
+ * ```
11
+ */
12
+ const getOptions = (options) => {
13
+ const rawOptions = options[0];
14
+ const enforce = rawOptions?.enforce ?? true;
15
+ const allowedNames = normalizeAllowedBarrelNames(rawOptions?.allowedNames);
16
+ const allowedNamesKey = allowedNames.toSorted().join("|");
17
+ return {
18
+ allowedNames,
19
+ allowedNamesKey,
20
+ allowedNamesSet: new Set(allowedNames),
21
+ enforce,
22
+ };
23
+ };
24
+ /**
25
+ * Determines whether a filename is eligible for linting.
26
+ * @param filename Filename to inspect.
27
+ * @returns True when the filename is a lintable module file.
28
+ * @example
29
+ * ```typescript
30
+ * const lintable = isLintableFilename(`${cwd()}/src/index.ts`);
31
+ * ```
32
+ */
33
+ const isLintableFilename = (filename) => isLintableModuleFile(filename);
34
+ /**
35
+ * Checks whether a path is nested inside a src directory.
36
+ * @param filename Filename to inspect.
37
+ * @returns True when the file path contains a src path segment.
38
+ * @example
39
+ * ```typescript
40
+ * const inSrc = isInSourceDirectory(`${cwd()}/src/index.ts`);
41
+ * ```
42
+ */
43
+ const isInSourceDirectory = (filename) => {
44
+ const normalizedPath = path.normalize(filename);
45
+ const pathSegments = normalizedPath.split(path.sep).filter(Boolean);
46
+ return pathSegments.includes("src");
47
+ };
48
+ /**
49
+ * Determines whether the rule should lint a file.
50
+ * @param filename Filename to inspect.
51
+ * @param allowedNames Allowed barrel names for the rule run.
52
+ * @returns True when the file should be checked.
53
+ * @example
54
+ * ```typescript
55
+ * const shouldLint = shouldLintFile(`${cwd()}/src/index.ts`, ["index"]);
56
+ * ```
57
+ */
58
+ const shouldLintFile = (filename, allowedNames) => {
59
+ return (isLintableFilename(filename) &&
60
+ isInSourceDirectory(filename) &&
61
+ allowedNames.length > 0);
62
+ };
63
+ export { getOptions, isLintableFilename, shouldLintFile };
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc2lzdGVudC1iYXJyZWwtZmlsZXMtb3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb21haW4vYXJjaGl0ZWN0dXJlL2NvbnNpc3RlbnQtYmFycmVsLWZpbGVzL2NvbnNpc3RlbnQtYmFycmVsLWZpbGVzLW9wdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBSTdCLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsMkJBQTJCLEdBQzVCLE1BQU0seUJBQXlCLENBQUM7QUFpQmpDOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLEdBQUcsQ0FDakIsT0FBMkIsRUFDQyxFQUFFO0lBQzlCLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQTZDLENBQUM7SUFDMUUsTUFBTSxPQUFPLEdBQUcsVUFBVSxFQUFFLE9BQU8sSUFBSSxJQUFJLENBQUM7SUFDNUMsTUFBTSxZQUFZLEdBQUcsMkJBQTJCLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQzNFLE1BQU0sZUFBZSxHQUFHLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFMUQsT0FBTztRQUNMLFlBQVk7UUFDWixlQUFlO1FBQ2YsZUFBZSxFQUFFLElBQUksR0FBRyxDQUFDLFlBQVksQ0FBQztRQUN0QyxPQUFPO0tBQ1IsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLFFBQWdCLEVBQVcsRUFBRSxDQUN2RCxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUVqQzs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxRQUFnQixFQUFXLEVBQUU7SUFDeEQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoRCxNQUFNLFlBQVksR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFcEUsT0FBTyxZQUFZLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3RDLENBQUMsQ0FBQztBQUVGOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sY0FBYyxHQUFHLENBQUMsUUFBZ0IsRUFBRSxZQUFzQixFQUFXLEVBQUU7SUFDM0UsT0FBTyxDQUNMLGtCQUFrQixDQUFDLFFBQVEsQ0FBQztRQUM1QixtQkFBbUIsQ0FBQyxRQUFRLENBQUM7UUFDN0IsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQ3hCLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixPQUFPLEVBQUUsVUFBVSxFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuXG5pbXBvcnQgdHlwZSB7IENvbnNpc3RlbnRCYXJyZWxGaWxlc09wdGlvbnMgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG5pbXBvcnQge1xuICBpc0xpbnRhYmxlTW9kdWxlRmlsZSxcbiAgbm9ybWFsaXplQWxsb3dlZEJhcnJlbE5hbWVzLFxufSBmcm9tIFwiLi9iYXJyZWwtZmlsZS11dGlsaXRpZXNcIjtcblxuLyoqIFR5cGUgZGVmaW5pdGlvbiBmb3IgcnVsZSBkYXRhLiAqL1xuaW50ZXJmYWNlIENvbnNpc3RlbnRCYXJyZWxGaWxlc1N0YXRlIHtcbiAgLyoqIEFsbG93ZWROYW1lcyBmaWVsZCB2YWx1ZS4gKi9cbiAgYWxsb3dlZE5hbWVzOiBzdHJpbmdbXTtcblxuICAvKiogQWxsb3dlZE5hbWVzS2V5IGZpZWxkIHZhbHVlLiAqL1xuICBhbGxvd2VkTmFtZXNLZXk6IHN0cmluZztcblxuICAvKiogQWxsb3dlZE5hbWVzU2V0IGZpZWxkIHZhbHVlLiAqL1xuICBhbGxvd2VkTmFtZXNTZXQ6IFNldDxzdHJpbmc+O1xuXG4gIC8qKiBFbmZvcmNlIGZpZWxkIHZhbHVlLiAqL1xuICBlbmZvcmNlOiBib29sZWFuO1xufVxuXG4vKipcbiAqIEJ1aWxkcyBub3JtYWxpemVkIHJ1bGUgb3B0aW9ucyBmcm9tIHJhdyBydWxlIGlucHV0LlxuICogQHBhcmFtIG9wdGlvbnMgUmF3IHJ1bGUgb3B0aW9ucy5cbiAqIEByZXR1cm5zIFRoZSBub3JtYWxpemVkIHJ1bGUgc3RhdGUuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3Qgc3RhdGUgPSBnZXRPcHRpb25zKFt7fV0pO1xuICogYGBgXG4gKi9cbmNvbnN0IGdldE9wdGlvbnMgPSAoXG4gIG9wdGlvbnM6IHJlYWRvbmx5IHVua25vd25bXSxcbik6IENvbnNpc3RlbnRCYXJyZWxGaWxlc1N0YXRlID0+IHtcbiAgY29uc3QgcmF3T3B0aW9ucyA9IG9wdGlvbnNbMF0gYXMgQ29uc2lzdGVudEJhcnJlbEZpbGVzT3B0aW9ucyB8IHVuZGVmaW5lZDtcbiAgY29uc3QgZW5mb3JjZSA9IHJhd09wdGlvbnM/LmVuZm9yY2UgPz8gdHJ1ZTtcbiAgY29uc3QgYWxsb3dlZE5hbWVzID0gbm9ybWFsaXplQWxsb3dlZEJhcnJlbE5hbWVzKHJhd09wdGlvbnM/LmFsbG93ZWROYW1lcyk7XG4gIGNvbnN0IGFsbG93ZWROYW1lc0tleSA9IGFsbG93ZWROYW1lcy50b1NvcnRlZCgpLmpvaW4oXCJ8XCIpO1xuXG4gIHJldHVybiB7XG4gICAgYWxsb3dlZE5hbWVzLFxuICAgIGFsbG93ZWROYW1lc0tleSxcbiAgICBhbGxvd2VkTmFtZXNTZXQ6IG5ldyBTZXQoYWxsb3dlZE5hbWVzKSxcbiAgICBlbmZvcmNlLFxuICB9O1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSBmaWxlbmFtZSBpcyBlbGlnaWJsZSBmb3IgbGludGluZy5cbiAqIEBwYXJhbSBmaWxlbmFtZSBGaWxlbmFtZSB0byBpbnNwZWN0LlxuICogQHJldHVybnMgVHJ1ZSB3aGVuIHRoZSBmaWxlbmFtZSBpcyBhIGxpbnRhYmxlIG1vZHVsZSBmaWxlLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGxpbnRhYmxlID0gaXNMaW50YWJsZUZpbGVuYW1lKGAke2N3ZCgpfS9zcmMvaW5kZXgudHNgKTtcbiAqIGBgYFxuICovXG5jb25zdCBpc0xpbnRhYmxlRmlsZW5hbWUgPSAoZmlsZW5hbWU6IHN0cmluZyk6IGJvb2xlYW4gPT5cbiAgaXNMaW50YWJsZU1vZHVsZUZpbGUoZmlsZW5hbWUpO1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGEgcGF0aCBpcyBuZXN0ZWQgaW5zaWRlIGEgc3JjIGRpcmVjdG9yeS5cbiAqIEBwYXJhbSBmaWxlbmFtZSBGaWxlbmFtZSB0byBpbnNwZWN0LlxuICogQHJldHVybnMgVHJ1ZSB3aGVuIHRoZSBmaWxlIHBhdGggY29udGFpbnMgYSBzcmMgcGF0aCBzZWdtZW50LlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGluU3JjID0gaXNJblNvdXJjZURpcmVjdG9yeShgJHtjd2QoKX0vc3JjL2luZGV4LnRzYCk7XG4gKiBgYGBcbiAqL1xuY29uc3QgaXNJblNvdXJjZURpcmVjdG9yeSA9IChmaWxlbmFtZTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gcGF0aC5ub3JtYWxpemUoZmlsZW5hbWUpO1xuICBjb25zdCBwYXRoU2VnbWVudHMgPSBub3JtYWxpemVkUGF0aC5zcGxpdChwYXRoLnNlcCkuZmlsdGVyKEJvb2xlYW4pO1xuXG4gIHJldHVybiBwYXRoU2VnbWVudHMuaW5jbHVkZXMoXCJzcmNcIik7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgcnVsZSBzaG91bGQgbGludCBhIGZpbGUuXG4gKiBAcGFyYW0gZmlsZW5hbWUgRmlsZW5hbWUgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSBhbGxvd2VkTmFtZXMgQWxsb3dlZCBiYXJyZWwgbmFtZXMgZm9yIHRoZSBydWxlIHJ1bi5cbiAqIEByZXR1cm5zIFRydWUgd2hlbiB0aGUgZmlsZSBzaG91bGQgYmUgY2hlY2tlZC5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBzaG91bGRMaW50ID0gc2hvdWxkTGludEZpbGUoYCR7Y3dkKCl9L3NyYy9pbmRleC50c2AsIFtcImluZGV4XCJdKTtcbiAqIGBgYFxuICovXG5jb25zdCBzaG91bGRMaW50RmlsZSA9IChmaWxlbmFtZTogc3RyaW5nLCBhbGxvd2VkTmFtZXM6IHN0cmluZ1tdKTogYm9vbGVhbiA9PiB7XG4gIHJldHVybiAoXG4gICAgaXNMaW50YWJsZUZpbGVuYW1lKGZpbGVuYW1lKSAmJlxuICAgIGlzSW5Tb3VyY2VEaXJlY3RvcnkoZmlsZW5hbWUpICYmXG4gICAgYWxsb3dlZE5hbWVzLmxlbmd0aCA+IDBcbiAgKTtcbn07XG5cbmV4cG9ydCB7IGdldE9wdGlvbnMsIGlzTGludGFibGVGaWxlbmFtZSwgc2hvdWxkTGludEZpbGUgfTtcbmV4cG9ydCB0eXBlIHsgQ29uc2lzdGVudEJhcnJlbEZpbGVzU3RhdGUgfTtcbiJdfQ==
@@ -1,5 +1,4 @@
1
1
  import type * as ESTree from "estree";
2
- import type { BarrelFilesExportsOnlyOptions } from "./types";
3
2
  /** Type definition for rule data. */
4
3
  interface RuleReport {
5
4
  /** MessageId helper value. */
@@ -9,10 +8,12 @@ interface RuleReport {
9
8
  interface TemporaryRunner {
10
9
  /** RunDefaultIndex field value. */
11
10
  runDefaultIndex: (body: ESTree.Program["body"]) => RuleReport[];
11
+ /** RunTemporaryBarrel field value. */
12
+ runTemporaryBarrel: (filename: string, body: ESTree.Program["body"], options?: readonly unknown[]) => RuleReport[];
12
13
  /** RunTemporaryFeature field value. */
13
- runTemporaryFeature: (body: ESTree.Program["body"], options?: BarrelFilesExportsOnlyOptions) => RuleReport[];
14
+ runTemporaryFeature: (body: ESTree.Program["body"]) => RuleReport[];
14
15
  /** RunTemporaryIndex field value. */
15
- runTemporaryIndex: (body: ESTree.Program["body"], options?: BarrelFilesExportsOnlyOptions) => RuleReport[];
16
+ runTemporaryIndex: (body: ESTree.Program["body"]) => RuleReport[];
16
17
  }
17
18
  /**
18
19
  * Runs the rule against the provided AST body.
@@ -25,7 +26,7 @@ interface TemporaryRunner {
25
26
  * const reports = runRule("index.ts", createBody());
26
27
  * ```
27
28
  */
28
- declare const runRule: (filename: string, body: ESTree.Program["body"], options?: BarrelFilesExportsOnlyOptions) => RuleReport[];
29
+ declare const runRule: (filename: string, body: ESTree.Program["body"], options?: readonly unknown[]) => RuleReport[];
29
30
  /**
30
31
  * Creates temporary file runners for the rule.
31
32
  * @param temporaryDirectories Directories created during the run.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exports-only-rule-test-utilities.d.ts","sourceRoot":"","sources":["../../../../src/domain/architecture/consistent-barrel-files/exports-only-rule-test-utilities.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,MAAM,QAAQ,CAAC;AA8BtC,qCAAqC;AACrC,UAAU,UAAU;IAClB,8BAA8B;IAC9B,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B;AAiBD,qCAAqC;AACrC,UAAU,eAAe;IACvB,mCAAmC;IACnC,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,UAAU,EAAE,CAAC;IAEhE,sCAAsC;IACtC,kBAAkB,EAAE,CAClB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAC5B,OAAO,CAAC,EAAE,SAAS,OAAO,EAAE,KACzB,UAAU,EAAE,CAAC;IAElB,uCAAuC;IACvC,mBAAmB,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,UAAU,EAAE,CAAC;IAEpE,qCAAqC;IACrC,iBAAiB,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,UAAU,EAAE,CAAC;CACnE;AAkCD;;;;;;;;;;GAUG;AACH,QAAA,MAAM,OAAO,GACX,UAAU,MAAM,EAChB,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAC5B,UAAS,SAAS,OAAO,EAAO,KAC/B,UAAU,EAeZ,CAAC;AAEF;;;;;;;;GAQG;AACH,QAAA,MAAM,qBAAqB,GACzB,sBAAsB,MAAM,EAAE,KAC7B,eA+BF,CAAC;AAEF,OAAO,EAAE,qBAAqB,EAAE,OAAO,EAAE,CAAC"}
@@ -0,0 +1,87 @@
1
+ import { SourceCode } from "eslint";
2
+ import path from "node:path";
3
+ import { cwd } from "node:process";
4
+ import { barrelFilesExportsOnlyRule } from "./exports-only-rule.js";
5
+ import { createProgram, createRepoDirectory } from "./test-helpers.js";
6
+ /**
7
+ * Builds a rule context for running the rule.
8
+ * @param parameters Context parameters and report sink.
9
+ * @returns The ESLint rule context.
10
+ * @example
11
+ * ```typescript
12
+ * const context = createRuleContext({ filename, reports, sourceCode });
13
+ * ```
14
+ */
15
+ const createRuleContext = (parameters) => ({
16
+ cwd: cwd(),
17
+ filename: parameters.filename,
18
+ id: "barrel-files-exports-only",
19
+ languageOptions: {
20
+ ecmaVersion: "latest",
21
+ sourceType: "module",
22
+ },
23
+ options: parameters.options,
24
+ parserOptions: {},
25
+ parserPath: void 0,
26
+ physicalFilename: parameters.filename,
27
+ report: (report) => {
28
+ const { messageId } = report;
29
+ parameters.reports.push({ messageId });
30
+ },
31
+ settings: {},
32
+ sourceCode: parameters.sourceCode,
33
+ });
34
+ /**
35
+ * Runs the rule against the provided AST body.
36
+ * @param filename Target filename.
37
+ * @param body AST program body.
38
+ * @param options Rule options when provided.
39
+ * @returns The captured rule reports.
40
+ * @example
41
+ * ```typescript
42
+ * const reports = runRule("index.ts", createBody());
43
+ * ```
44
+ */
45
+ const runRule = (filename, body, options = []) => {
46
+ const reports = [];
47
+ const sourceCode = new SourceCode("", createProgram(body));
48
+ const context = createRuleContext({
49
+ filename,
50
+ options,
51
+ reports,
52
+ sourceCode,
53
+ });
54
+ const listeners = barrelFilesExportsOnlyRule.create(context);
55
+ const programListener = listeners.Program;
56
+ programListener?.(context.sourceCode.ast);
57
+ return reports;
58
+ };
59
+ /**
60
+ * Creates temporary file runners for the rule.
61
+ * @param temporaryDirectories Directories created during the run.
62
+ * @returns Helpers for running the rule in temp folders.
63
+ * @example
64
+ * ```typescript
65
+ * const runner = createTemporaryRunner([]);
66
+ * ```
67
+ */
68
+ const createTemporaryRunner = (temporaryDirectories) => {
69
+ const runForTemporaryFile = (options) => {
70
+ const directory = createRepoDirectory(options.root);
71
+ temporaryDirectories.push(directory);
72
+ const filePath = path.join(directory, options.filename);
73
+ return runRule(filePath, options.body, options.options);
74
+ };
75
+ const runDefaultIndex = (body) => runForTemporaryFile({ body, filename: "index.ts", root: "src" });
76
+ const runTemporaryBarrel = (filename, body, options = []) => runForTemporaryFile({ body, filename, options, root: "tmp" });
77
+ const runTemporaryIndex = (body) => runForTemporaryFile({ body, filename: "index.ts", root: "tmp" });
78
+ const runTemporaryFeature = (body) => runForTemporaryFile({ body, filename: "feature.ts", root: "tmp" });
79
+ return {
80
+ runDefaultIndex,
81
+ runTemporaryBarrel,
82
+ runTemporaryFeature,
83
+ runTemporaryIndex,
84
+ };
85
+ };
86
+ export { createTemporaryRunner, runRule };
87
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0cy1vbmx5LXJ1bGUtdGVzdC11dGlsaXRpZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZG9tYWluL2FyY2hpdGVjdHVyZS9jb25zaXN0ZW50LWJhcnJlbC1maWxlcy9leHBvcnRzLW9ubHktcnVsZS10ZXN0LXV0aWxpdGllcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3BDLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUM3QixPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRW5DLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQStEcEU7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLGlCQUFpQixHQUFHLENBQ3hCLFVBQWlDLEVBQ2YsRUFBRSxDQUNwQixDQUFDO0lBQ0MsR0FBRyxFQUFFLEdBQUcsRUFBRTtJQUNWLFFBQVEsRUFBRSxVQUFVLENBQUMsUUFBUTtJQUM3QixFQUFFLEVBQUUsMkJBQTJCO0lBQy9CLGVBQWUsRUFBRTtRQUNmLFdBQVcsRUFBRSxRQUFRO1FBQ3JCLFVBQVUsRUFBRSxRQUFRO0tBQ3JCO0lBQ0QsT0FBTyxFQUFFLFVBQVUsQ0FBQyxPQUFPO0lBQzNCLGFBQWEsRUFBRSxFQUFFO0lBQ2pCLFVBQVUsRUFBRSxLQUFLLENBQUM7SUFDbEIsZ0JBQWdCLEVBQUUsVUFBVSxDQUFDLFFBQVE7SUFDckMsTUFBTSxFQUFFLENBQUMsTUFBNkIsRUFBUSxFQUFFO1FBQzlDLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxNQUF1QyxDQUFDO1FBQzlELFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBQ0QsUUFBUSxFQUFFLEVBQUU7SUFDWixVQUFVLEVBQUUsVUFBVSxDQUFDLFVBQVU7Q0FDbEMsQ0FBZ0MsQ0FBQztBQUVwQzs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxPQUFPLEdBQUcsQ0FDZCxRQUFnQixFQUNoQixJQUE0QixFQUM1QixVQUE4QixFQUFFLEVBQ2xCLEVBQUU7SUFDaEIsTUFBTSxPQUFPLEdBQWlCLEVBQUUsQ0FBQztJQUNqQyxNQUFNLFVBQVUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxFQUFFLEVBQUUsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDM0QsTUFBTSxPQUFPLEdBQUcsaUJBQWlCLENBQUM7UUFDaEMsUUFBUTtRQUNSLE9BQU87UUFDUCxPQUFPO1FBQ1AsVUFBVTtLQUNYLENBQUMsQ0FBQztJQUNILE1BQU0sU0FBUyxHQUFHLDBCQUEwQixDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3RCxNQUFNLGVBQWUsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDO0lBRTFDLGVBQWUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFMUMsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQyxDQUFDO0FBRUY7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLHFCQUFxQixHQUFHLENBQzVCLG9CQUE4QixFQUNiLEVBQUU7SUFDbkIsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLE9BQTZCLEVBQWdCLEVBQUU7UUFDMUUsTUFBTSxTQUFTLEdBQUcsbUJBQW1CLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BELG9CQUFvQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNyQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFeEQsT0FBTyxPQUFPLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzFELENBQUMsQ0FBQztJQUVGLE1BQU0sZUFBZSxHQUFHLENBQUMsSUFBNEIsRUFBZ0IsRUFBRSxDQUNyRSxtQkFBbUIsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBRW5FLE1BQU0sa0JBQWtCLEdBQUcsQ0FDekIsUUFBZ0IsRUFDaEIsSUFBNEIsRUFDNUIsVUFBOEIsRUFBRSxFQUNsQixFQUFFLENBQ2hCLG1CQUFtQixDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFFaEUsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLElBQTRCLEVBQWdCLEVBQUUsQ0FDdkUsbUJBQW1CLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUVuRSxNQUFNLG1CQUFtQixHQUFHLENBQUMsSUFBNEIsRUFBZ0IsRUFBRSxDQUN6RSxtQkFBbUIsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBRXJFLE9BQU87UUFDTCxlQUFlO1FBQ2Ysa0JBQWtCO1FBQ2xCLG1CQUFtQjtRQUNuQixpQkFBaUI7S0FDbEIsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxPQUFPLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUnVsZSB9IGZyb20gXCJlc2xpbnRcIjtcbmltcG9ydCB0eXBlICogYXMgRVNUcmVlIGZyb20gXCJlc3RyZWVcIjtcblxuaW1wb3J0IHsgU291cmNlQ29kZSB9IGZyb20gXCJlc2xpbnRcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IGN3ZCB9IGZyb20gXCJub2RlOnByb2Nlc3NcIjtcblxuaW1wb3J0IHsgYmFycmVsRmlsZXNFeHBvcnRzT25seVJ1bGUgfSBmcm9tIFwiLi9leHBvcnRzLW9ubHktcnVsZVwiO1xuaW1wb3J0IHsgY3JlYXRlUHJvZ3JhbSwgY3JlYXRlUmVwb0RpcmVjdG9yeSB9IGZyb20gXCIuL3Rlc3QtaGVscGVyc1wiO1xuXG4vKiogVHlwZSBkZWZpbml0aW9uIGZvciBydWxlIGRhdGEuICovXG5pbnRlcmZhY2UgUmVwb3J0RGVzY3JpcHRvcldpdGhNZXNzYWdlSWQge1xuICAvKiogTWVzc2FnZUlkIGZpZWxkIHZhbHVlLiAqL1xuICBtZXNzYWdlSWQ/OiBzdHJpbmc7XG59XG5cbi8qKiBUeXBlIGRlZmluaXRpb24gZm9yIHJ1bGUgZGF0YS4gKi9cbmludGVyZmFjZSBSdWxlQ29udGV4dFBhcmFtZXRlcnMge1xuICAvKiogRmlsZW5hbWUgZmllbGQgdmFsdWUuICovXG4gIGZpbGVuYW1lOiBzdHJpbmc7XG5cbiAgLyoqIE9wdGlvbnMgZmllbGQgdmFsdWUuICovXG4gIG9wdGlvbnM6IHJlYWRvbmx5IHVua25vd25bXTtcblxuICAvKiogUmVwb3J0cyBmaWVsZCB2YWx1ZS4gKi9cbiAgcmVwb3J0czogUnVsZVJlcG9ydFtdO1xuXG4gIC8qKiBTb3VyY2VDb2RlIGZpZWxkIHZhbHVlLiAqL1xuICBzb3VyY2VDb2RlOiBTb3VyY2VDb2RlO1xufVxuXG4vKiogVHlwZSBkZWZpbml0aW9uIGZvciBydWxlIGRhdGEuICovXG5pbnRlcmZhY2UgUnVsZVJlcG9ydCB7XG4gIC8qKiBNZXNzYWdlSWQgaGVscGVyIHZhbHVlLiAqL1xuICBtZXNzYWdlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuLyoqIFR5cGUgZGVmaW5pdGlvbiBmb3IgcnVsZSBkYXRhLiAqL1xuaW50ZXJmYWNlIFRlbXBvcmFyeUZpbGVPcHRpb25zIHtcbiAgLyoqIEJvZHkgZmllbGQgdmFsdWUuICovXG4gIGJvZHk6IEVTVHJlZS5Qcm9ncmFtW1wiYm9keVwiXTtcblxuICAvKiogRmlsZW5hbWUgZmllbGQgdmFsdWUuICovXG4gIGZpbGVuYW1lOiBzdHJpbmc7XG5cbiAgLyoqIE9wdGlvbnMgZmllbGQgdmFsdWUuICovXG4gIG9wdGlvbnM/OiByZWFkb25seSB1bmtub3duW107XG5cbiAgLyoqIFJvb3QgZmllbGQgdmFsdWUuICovXG4gIHJvb3Q6IFwic3JjXCIgfCBcInRtcFwiO1xufVxuXG4vKiogVHlwZSBkZWZpbml0aW9uIGZvciBydWxlIGRhdGEuICovXG5pbnRlcmZhY2UgVGVtcG9yYXJ5UnVubmVyIHtcbiAgLyoqIFJ1bkRlZmF1bHRJbmRleCBmaWVsZCB2YWx1ZS4gKi9cbiAgcnVuRGVmYXVsdEluZGV4OiAoYm9keTogRVNUcmVlLlByb2dyYW1bXCJib2R5XCJdKSA9PiBSdWxlUmVwb3J0W107XG5cbiAgLyoqIFJ1blRlbXBvcmFyeUJhcnJlbCBmaWVsZCB2YWx1ZS4gKi9cbiAgcnVuVGVtcG9yYXJ5QmFycmVsOiAoXG4gICAgZmlsZW5hbWU6IHN0cmluZyxcbiAgICBib2R5OiBFU1RyZWUuUHJvZ3JhbVtcImJvZHlcIl0sXG4gICAgb3B0aW9ucz86IHJlYWRvbmx5IHVua25vd25bXSxcbiAgKSA9PiBSdWxlUmVwb3J0W107XG5cbiAgLyoqIFJ1blRlbXBvcmFyeUZlYXR1cmUgZmllbGQgdmFsdWUuICovXG4gIHJ1blRlbXBvcmFyeUZlYXR1cmU6IChib2R5OiBFU1RyZWUuUHJvZ3JhbVtcImJvZHlcIl0pID0+IFJ1bGVSZXBvcnRbXTtcblxuICAvKiogUnVuVGVtcG9yYXJ5SW5kZXggZmllbGQgdmFsdWUuICovXG4gIHJ1blRlbXBvcmFyeUluZGV4OiAoYm9keTogRVNUcmVlLlByb2dyYW1bXCJib2R5XCJdKSA9PiBSdWxlUmVwb3J0W107XG59XG5cbi8qKlxuICogQnVpbGRzIGEgcnVsZSBjb250ZXh0IGZvciBydW5uaW5nIHRoZSBydWxlLlxuICogQHBhcmFtIHBhcmFtZXRlcnMgQ29udGV4dCBwYXJhbWV0ZXJzIGFuZCByZXBvcnQgc2luay5cbiAqIEByZXR1cm5zIFRoZSBFU0xpbnQgcnVsZSBjb250ZXh0LlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGNvbnRleHQgPSBjcmVhdGVSdWxlQ29udGV4dCh7IGZpbGVuYW1lLCByZXBvcnRzLCBzb3VyY2VDb2RlIH0pO1xuICogYGBgXG4gKi9cbmNvbnN0IGNyZWF0ZVJ1bGVDb250ZXh0ID0gKFxuICBwYXJhbWV0ZXJzOiBSdWxlQ29udGV4dFBhcmFtZXRlcnMsXG4pOiBSdWxlLlJ1bGVDb250ZXh0ID0+XG4gICh7XG4gICAgY3dkOiBjd2QoKSxcbiAgICBmaWxlbmFtZTogcGFyYW1ldGVycy5maWxlbmFtZSxcbiAgICBpZDogXCJiYXJyZWwtZmlsZXMtZXhwb3J0cy1vbmx5XCIsXG4gICAgbGFuZ3VhZ2VPcHRpb25zOiB7XG4gICAgICBlY21hVmVyc2lvbjogXCJsYXRlc3RcIixcbiAgICAgIHNvdXJjZVR5cGU6IFwibW9kdWxlXCIsXG4gICAgfSxcbiAgICBvcHRpb25zOiBwYXJhbWV0ZXJzLm9wdGlvbnMsXG4gICAgcGFyc2VyT3B0aW9uczoge30sXG4gICAgcGFyc2VyUGF0aDogdm9pZCAwLFxuICAgIHBoeXNpY2FsRmlsZW5hbWU6IHBhcmFtZXRlcnMuZmlsZW5hbWUsXG4gICAgcmVwb3J0OiAocmVwb3J0OiBSdWxlLlJlcG9ydERlc2NyaXB0b3IpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IHsgbWVzc2FnZUlkIH0gPSByZXBvcnQgYXMgUmVwb3J0RGVzY3JpcHRvcldpdGhNZXNzYWdlSWQ7XG4gICAgICBwYXJhbWV0ZXJzLnJlcG9ydHMucHVzaCh7IG1lc3NhZ2VJZCB9KTtcbiAgICB9LFxuICAgIHNldHRpbmdzOiB7fSxcbiAgICBzb3VyY2VDb2RlOiBwYXJhbWV0ZXJzLnNvdXJjZUNvZGUsXG4gIH0pIGFzIHVua25vd24gYXMgUnVsZS5SdWxlQ29udGV4dDtcblxuLyoqXG4gKiBSdW5zIHRoZSBydWxlIGFnYWluc3QgdGhlIHByb3ZpZGVkIEFTVCBib2R5LlxuICogQHBhcmFtIGZpbGVuYW1lIFRhcmdldCBmaWxlbmFtZS5cbiAqIEBwYXJhbSBib2R5IEFTVCBwcm9ncmFtIGJvZHkuXG4gKiBAcGFyYW0gb3B0aW9ucyBSdWxlIG9wdGlvbnMgd2hlbiBwcm92aWRlZC5cbiAqIEByZXR1cm5zIFRoZSBjYXB0dXJlZCBydWxlIHJlcG9ydHMuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgcmVwb3J0cyA9IHJ1blJ1bGUoXCJpbmRleC50c1wiLCBjcmVhdGVCb2R5KCkpO1xuICogYGBgXG4gKi9cbmNvbnN0IHJ1blJ1bGUgPSAoXG4gIGZpbGVuYW1lOiBzdHJpbmcsXG4gIGJvZHk6IEVTVHJlZS5Qcm9ncmFtW1wiYm9keVwiXSxcbiAgb3B0aW9uczogcmVhZG9ubHkgdW5rbm93bltdID0gW10sXG4pOiBSdWxlUmVwb3J0W10gPT4ge1xuICBjb25zdCByZXBvcnRzOiBSdWxlUmVwb3J0W10gPSBbXTtcbiAgY29uc3Qgc291cmNlQ29kZSA9IG5ldyBTb3VyY2VDb2RlKFwiXCIsIGNyZWF0ZVByb2dyYW0oYm9keSkpO1xuICBjb25zdCBjb250ZXh0ID0gY3JlYXRlUnVsZUNvbnRleHQoe1xuICAgIGZpbGVuYW1lLFxuICAgIG9wdGlvbnMsXG4gICAgcmVwb3J0cyxcbiAgICBzb3VyY2VDb2RlLFxuICB9KTtcbiAgY29uc3QgbGlzdGVuZXJzID0gYmFycmVsRmlsZXNFeHBvcnRzT25seVJ1bGUuY3JlYXRlKGNvbnRleHQpO1xuICBjb25zdCBwcm9ncmFtTGlzdGVuZXIgPSBsaXN0ZW5lcnMuUHJvZ3JhbTtcblxuICBwcm9ncmFtTGlzdGVuZXI/Lihjb250ZXh0LnNvdXJjZUNvZGUuYXN0KTtcblxuICByZXR1cm4gcmVwb3J0cztcbn07XG5cbi8qKlxuICogQ3JlYXRlcyB0ZW1wb3JhcnkgZmlsZSBydW5uZXJzIGZvciB0aGUgcnVsZS5cbiAqIEBwYXJhbSB0ZW1wb3JhcnlEaXJlY3RvcmllcyBEaXJlY3RvcmllcyBjcmVhdGVkIGR1cmluZyB0aGUgcnVuLlxuICogQHJldHVybnMgSGVscGVycyBmb3IgcnVubmluZyB0aGUgcnVsZSBpbiB0ZW1wIGZvbGRlcnMuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgcnVubmVyID0gY3JlYXRlVGVtcG9yYXJ5UnVubmVyKFtdKTtcbiAqIGBgYFxuICovXG5jb25zdCBjcmVhdGVUZW1wb3JhcnlSdW5uZXIgPSAoXG4gIHRlbXBvcmFyeURpcmVjdG9yaWVzOiBzdHJpbmdbXSxcbik6IFRlbXBvcmFyeVJ1bm5lciA9PiB7XG4gIGNvbnN0IHJ1bkZvclRlbXBvcmFyeUZpbGUgPSAob3B0aW9uczogVGVtcG9yYXJ5RmlsZU9wdGlvbnMpOiBSdWxlUmVwb3J0W10gPT4ge1xuICAgIGNvbnN0IGRpcmVjdG9yeSA9IGNyZWF0ZVJlcG9EaXJlY3Rvcnkob3B0aW9ucy5yb290KTtcbiAgICB0ZW1wb3JhcnlEaXJlY3Rvcmllcy5wdXNoKGRpcmVjdG9yeSk7XG4gICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4oZGlyZWN0b3J5LCBvcHRpb25zLmZpbGVuYW1lKTtcblxuICAgIHJldHVybiBydW5SdWxlKGZpbGVQYXRoLCBvcHRpb25zLmJvZHksIG9wdGlvbnMub3B0aW9ucyk7XG4gIH07XG5cbiAgY29uc3QgcnVuRGVmYXVsdEluZGV4ID0gKGJvZHk6IEVTVHJlZS5Qcm9ncmFtW1wiYm9keVwiXSk6IFJ1bGVSZXBvcnRbXSA9PlxuICAgIHJ1bkZvclRlbXBvcmFyeUZpbGUoeyBib2R5LCBmaWxlbmFtZTogXCJpbmRleC50c1wiLCByb290OiBcInNyY1wiIH0pO1xuXG4gIGNvbnN0IHJ1blRlbXBvcmFyeUJhcnJlbCA9IChcbiAgICBmaWxlbmFtZTogc3RyaW5nLFxuICAgIGJvZHk6IEVTVHJlZS5Qcm9ncmFtW1wiYm9keVwiXSxcbiAgICBvcHRpb25zOiByZWFkb25seSB1bmtub3duW10gPSBbXSxcbiAgKTogUnVsZVJlcG9ydFtdID0+XG4gICAgcnVuRm9yVGVtcG9yYXJ5RmlsZSh7IGJvZHksIGZpbGVuYW1lLCBvcHRpb25zLCByb290OiBcInRtcFwiIH0pO1xuXG4gIGNvbnN0IHJ1blRlbXBvcmFyeUluZGV4ID0gKGJvZHk6IEVTVHJlZS5Qcm9ncmFtW1wiYm9keVwiXSk6IFJ1bGVSZXBvcnRbXSA9PlxuICAgIHJ1bkZvclRlbXBvcmFyeUZpbGUoeyBib2R5LCBmaWxlbmFtZTogXCJpbmRleC50c1wiLCByb290OiBcInRtcFwiIH0pO1xuXG4gIGNvbnN0IHJ1blRlbXBvcmFyeUZlYXR1cmUgPSAoYm9keTogRVNUcmVlLlByb2dyYW1bXCJib2R5XCJdKTogUnVsZVJlcG9ydFtdID0+XG4gICAgcnVuRm9yVGVtcG9yYXJ5RmlsZSh7IGJvZHksIGZpbGVuYW1lOiBcImZlYXR1cmUudHNcIiwgcm9vdDogXCJ0bXBcIiB9KTtcblxuICByZXR1cm4ge1xuICAgIHJ1bkRlZmF1bHRJbmRleCxcbiAgICBydW5UZW1wb3JhcnlCYXJyZWwsXG4gICAgcnVuVGVtcG9yYXJ5RmVhdHVyZSxcbiAgICBydW5UZW1wb3JhcnlJbmRleCxcbiAgfTtcbn07XG5cbmV4cG9ydCB7IGNyZWF0ZVRlbXBvcmFyeVJ1bm5lciwgcnVuUnVsZSB9O1xuIl19
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exports-only-rule.d.ts","sourceRoot":"","sources":["../../../../src/domain/architecture/consistent-barrel-files/exports-only-rule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAO,IAAI,EAAE,MAAM,QAAQ,CAAC;AAkJxC;;;;;;GAMG;AACH,QAAA,MAAM,0BAA0B,EAAE,IAAI,CAAC,UA8CtC,CAAC;AAEF,OAAO,EAAE,0BAA0B,EAAE,CAAC"}
@@ -0,0 +1,145 @@
1
+ import { isBarrelFile, isLintableModuleFile, normalizeAllowedBarrelNames, } from "./barrel-file-utilities.js";
2
+ /**
3
+ * Builds normalized rule options from raw input.
4
+ * @param options Raw rule options.
5
+ * @returns The normalized exports-only rule state.
6
+ * @example
7
+ * ```typescript
8
+ * const state = getOptions([{}]);
9
+ * ```
10
+ */
11
+ const getOptions = (options) => {
12
+ const rawOptions = options[0];
13
+ const allowedBarrelNames = normalizeAllowedBarrelNames(rawOptions?.allowedBarrelNames);
14
+ return {
15
+ allowedBarrelNames,
16
+ allowedBarrelNamesSet: new Set(allowedBarrelNames),
17
+ };
18
+ };
19
+ /**
20
+ * Determines whether a declaration is type-only.
21
+ * @param value Declaration candidate to inspect.
22
+ * @returns True when the declaration is type-only.
23
+ * @example
24
+ * ```typescript
25
+ * const ok = isTypeOnlyDeclaration({ type: "TSInterfaceDeclaration" });
26
+ * ```
27
+ */
28
+ const isTypeOnlyDeclaration = (value) => {
29
+ if (value === null || typeof value !== "object") {
30
+ return false;
31
+ }
32
+ const declarationType = value.type;
33
+ return (declarationType === "TSInterfaceDeclaration" ||
34
+ declarationType === "TSTypeAliasDeclaration");
35
+ };
36
+ /**
37
+ * Checks whether a statement is allowed in a barrel file.
38
+ * @param statement Program statement node.
39
+ * @returns True when the statement is permitted.
40
+ * @example
41
+ * ```typescript
42
+ * const ok = isAllowedBarrelStatement(statement);
43
+ * ```
44
+ */
45
+ const isAllowedBarrelStatement = (statement) => {
46
+ if (statement.type === "ExportAllDeclaration") {
47
+ return true;
48
+ }
49
+ if (statement.type !== "ExportNamedDeclaration") {
50
+ return false;
51
+ }
52
+ const declaration = statement.declaration ?? void 0;
53
+ if (declaration !== void 0) {
54
+ return isTypeOnlyDeclaration(declaration);
55
+ }
56
+ const source = statement.source ?? void 0;
57
+ return source !== void 0;
58
+ };
59
+ /**
60
+ * Builds a rule listener for the supplied file.
61
+ * @param context Rule execution context.
62
+ * @param filename Absolute filename to lint.
63
+ * @param options Normalized rule options.
64
+ * @returns The rule listener for the file.
65
+ * @example
66
+ * ```typescript
67
+ * const listener = buildListenerForFile(context, filename, state);
68
+ * ```
69
+ */
70
+ const buildListenerForFile = (context, filename, options) => {
71
+ if (!isLintableModuleFile(filename) ||
72
+ !isBarrelFile(filename, options.allowedBarrelNamesSet)) {
73
+ return {};
74
+ }
75
+ return {
76
+ /**
77
+ * Reports the first invalid barrel statement in the program.
78
+ * @param node Program node to inspect.
79
+ * @example
80
+ * ```typescript
81
+ * listener.Program(programNode);
82
+ * ```
83
+ */
84
+ Program(node) {
85
+ for (const statement of node.body) {
86
+ if (!isAllowedBarrelStatement(statement)) {
87
+ context.report({
88
+ messageId: "invalidBarrelContent",
89
+ node: statement,
90
+ });
91
+ break;
92
+ }
93
+ }
94
+ },
95
+ };
96
+ };
97
+ /**
98
+ * ESLint rule enforcing re-export-only barrel files.
99
+ * @example
100
+ * ```typescript
101
+ * const rule = barrelFilesExportsOnlyRule;
102
+ * ```
103
+ */
104
+ const barrelFilesExportsOnlyRule = {
105
+ /**
106
+ * Creates listeners for the current lint context.
107
+ * @param context ESLint rule context.
108
+ * @returns The listeners for the context.
109
+ * @example
110
+ * ```typescript
111
+ * const listeners = barrelFilesExportsOnlyRule.create(context);
112
+ * ```
113
+ */
114
+ create(context) {
115
+ return buildListenerForFile(context, context.filename, getOptions(context.options));
116
+ },
117
+ meta: {
118
+ defaultOptions: [{ allowedBarrelNames: ["index"] }],
119
+ docs: {
120
+ description: "Require barrel files to only contain re-export statements or type-only declarations.",
121
+ recommended: false,
122
+ url: "https://github.com/parloti/eslint-plugin/blob/main/docs/rules/barrel-files-exports-only.md",
123
+ },
124
+ messages: {
125
+ invalidBarrelContent: "Barrel files must only contain re-export statements or type-only declarations.",
126
+ },
127
+ schema: [
128
+ {
129
+ additionalProperties: false,
130
+ properties: {
131
+ allowedBarrelNames: {
132
+ description: "Allowed barrel basenames that should be treated as barrel files.",
133
+ items: { type: "string" },
134
+ minItems: 1,
135
+ type: "array",
136
+ },
137
+ },
138
+ type: "object",
139
+ },
140
+ ],
141
+ type: "problem",
142
+ },
143
+ };
144
+ export { barrelFilesExportsOnlyRule };
145
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0cy1vbmx5LXJ1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZG9tYWluL2FyY2hpdGVjdHVyZS9jb25zaXN0ZW50LWJhcnJlbC1maWxlcy9leHBvcnRzLW9ubHktcnVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQ0wsWUFBWSxFQUNaLG9CQUFvQixFQUNwQiwyQkFBMkIsR0FDNUIsTUFBTSx5QkFBeUIsQ0FBQztBQWdCakM7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsR0FBRyxDQUNqQixPQUEyQixFQUNFLEVBQUU7SUFDL0IsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBOEMsQ0FBQztJQUMzRSxNQUFNLGtCQUFrQixHQUFHLDJCQUEyQixDQUNwRCxVQUFVLEVBQUUsa0JBQWtCLENBQy9CLENBQUM7SUFFRixPQUFPO1FBQ0wsa0JBQWtCO1FBQ2xCLHFCQUFxQixFQUFFLElBQUksR0FBRyxDQUFDLGtCQUFrQixDQUFDO0tBQ25ELENBQUM7QUFDSixDQUFDLENBQUM7QUFFRjs7Ozs7Ozs7R0FRRztBQUNILE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxLQUFjLEVBQVcsRUFBRTtJQUN4RCxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDaEQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsTUFBTSxlQUFlLEdBQUksS0FBc0MsQ0FBQyxJQUFJLENBQUM7SUFFckUsT0FBTyxDQUNMLGVBQWUsS0FBSyx3QkFBd0I7UUFDNUMsZUFBZSxLQUFLLHdCQUF3QixDQUM3QyxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUY7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLHdCQUF3QixHQUFHLENBQy9CLFNBQXNDLEVBQzdCLEVBQUU7SUFDWCxJQUFJLFNBQVMsQ0FBQyxJQUFJLEtBQUssc0JBQXNCLEVBQUUsQ0FBQztRQUM5QyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxJQUFJLFNBQVMsQ0FBQyxJQUFJLEtBQUssd0JBQXdCLEVBQUUsQ0FBQztRQUNoRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxDQUFDO0lBRXBELElBQUksV0FBVyxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDM0IsT0FBTyxxQkFBcUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsQ0FBQztJQUUxQyxPQUFPLE1BQU0sS0FBSyxLQUFLLENBQUMsQ0FBQztBQUMzQixDQUFDLENBQUM7QUFFRjs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxvQkFBb0IsR0FBRyxDQUMzQixPQUF5QixFQUN6QixRQUFnQixFQUNoQixPQUFvQyxFQUNqQixFQUFFO0lBQ3JCLElBQ0UsQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUM7UUFDL0IsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxFQUN0RCxDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsT0FBTztRQUNMOzs7Ozs7O1dBT0c7UUFDSCxPQUFPLENBQUMsSUFBaUI7WUFDdkIsS0FBSyxNQUFNLFNBQVMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO29CQUN6QyxPQUFPLENBQUMsTUFBTSxDQUFDO3dCQUNiLFNBQVMsRUFBRSxzQkFBc0I7d0JBQ2pDLElBQUksRUFBRSxTQUFTO3FCQUNoQixDQUFDLENBQUM7b0JBQ0gsTUFBTTtnQkFDUixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUY7Ozs7OztHQU1HO0FBQ0gsTUFBTSwwQkFBMEIsR0FBb0I7SUFDbEQ7Ozs7Ozs7O09BUUc7SUFDSCxNQUFNLENBQUMsT0FBeUI7UUFDOUIsT0FBTyxvQkFBb0IsQ0FDekIsT0FBTyxFQUNQLE9BQU8sQ0FBQyxRQUFRLEVBQ2hCLFVBQVUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQzVCLENBQUM7SUFDSixDQUFDO0lBQ0QsSUFBSSxFQUFFO1FBQ0osY0FBYyxFQUFFLENBQUMsRUFBRSxrQkFBa0IsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDbkQsSUFBSSxFQUFFO1lBQ0osV0FBVyxFQUNULHNGQUFzRjtZQUN4RixXQUFXLEVBQUUsS0FBSztZQUNsQixHQUFHLEVBQUUsNEZBQTRGO1NBQ2xHO1FBQ0QsUUFBUSxFQUFFO1lBQ1Isb0JBQW9CLEVBQ2xCLGdGQUFnRjtTQUNuRjtRQUNELE1BQU0sRUFBRTtZQUNOO2dCQUNFLG9CQUFvQixFQUFFLEtBQUs7Z0JBQzNCLFVBQVUsRUFBRTtvQkFDVixrQkFBa0IsRUFBRTt3QkFDbEIsV0FBVyxFQUNULGtFQUFrRTt3QkFDcEUsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTt3QkFDekIsUUFBUSxFQUFFLENBQUM7d0JBQ1gsSUFBSSxFQUFFLE9BQU87cUJBQ2Q7aUJBQ0Y7Z0JBQ0QsSUFBSSxFQUFFLFFBQVE7YUFDZjtTQUNGO1FBQ0QsSUFBSSxFQUFFLFNBQVM7S0FDaEI7Q0FDRixDQUFDO0FBRUYsT0FBTyxFQUFFLDBCQUEwQixFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFTVCwgUnVsZSB9IGZyb20gXCJlc2xpbnRcIjtcblxuaW1wb3J0IHR5cGUgeyBCYXJyZWxGaWxlc0V4cG9ydHNPbmx5T3B0aW9ucyB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbmltcG9ydCB7XG4gIGlzQmFycmVsRmlsZSxcbiAgaXNMaW50YWJsZU1vZHVsZUZpbGUsXG4gIG5vcm1hbGl6ZUFsbG93ZWRCYXJyZWxOYW1lcyxcbn0gZnJvbSBcIi4vYmFycmVsLWZpbGUtdXRpbGl0aWVzXCI7XG5cbi8qKiBTdG9yZXMgbm9ybWFsaXplZCBydWxlIG9wdGlvbnMgZm9yIHRoZSBleHBvcnRzLW9ubHkgcnVsZS4gKi9cbmludGVyZmFjZSBCYXJyZWxGaWxlc0V4cG9ydHNPbmx5U3RhdGUge1xuICAvKiogQWxsb3dlZCBiYXJyZWwgYmFzZW5hbWVzIGZvciB0aGUgY3VycmVudCBydWxlIHJ1bi4gKi9cbiAgYWxsb3dlZEJhcnJlbE5hbWVzOiBzdHJpbmdbXTtcbiAgLyoqIEFsbG93ZWQgYmFycmVsIGJhc2VuYW1lcyBpbiBzZXQgZm9ybSBmb3IgcXVpY2sgbG9va3Vwcy4gKi9cbiAgYWxsb3dlZEJhcnJlbE5hbWVzU2V0OiBTZXQ8c3RyaW5nPjtcbn1cblxuLyoqIERlc2NyaWJlcyBhIGRlY2xhcmF0aW9uLWxpa2UgdmFsdWUgdGhhdCBtYXkgZXhwb3NlIGEgYHR5cGVgIGZpZWxkLiAqL1xuaW50ZXJmYWNlIFR5cGVPbmx5RGVjbGFyYXRpb25DYW5kaWRhdGUge1xuICAvKiogQ2FuZGlkYXRlIGRlY2xhcmF0aW9uIHR5cGUuICovXG4gIHR5cGU/OiB1bmtub3duO1xufVxuXG4vKipcbiAqIEJ1aWxkcyBub3JtYWxpemVkIHJ1bGUgb3B0aW9ucyBmcm9tIHJhdyBpbnB1dC5cbiAqIEBwYXJhbSBvcHRpb25zIFJhdyBydWxlIG9wdGlvbnMuXG4gKiBAcmV0dXJucyBUaGUgbm9ybWFsaXplZCBleHBvcnRzLW9ubHkgcnVsZSBzdGF0ZS5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBzdGF0ZSA9IGdldE9wdGlvbnMoW3t9XSk7XG4gKiBgYGBcbiAqL1xuY29uc3QgZ2V0T3B0aW9ucyA9IChcbiAgb3B0aW9uczogcmVhZG9ubHkgdW5rbm93bltdLFxuKTogQmFycmVsRmlsZXNFeHBvcnRzT25seVN0YXRlID0+IHtcbiAgY29uc3QgcmF3T3B0aW9ucyA9IG9wdGlvbnNbMF0gYXMgQmFycmVsRmlsZXNFeHBvcnRzT25seU9wdGlvbnMgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IGFsbG93ZWRCYXJyZWxOYW1lcyA9IG5vcm1hbGl6ZUFsbG93ZWRCYXJyZWxOYW1lcyhcbiAgICByYXdPcHRpb25zPy5hbGxvd2VkQmFycmVsTmFtZXMsXG4gICk7XG5cbiAgcmV0dXJuIHtcbiAgICBhbGxvd2VkQmFycmVsTmFtZXMsXG4gICAgYWxsb3dlZEJhcnJlbE5hbWVzU2V0OiBuZXcgU2V0KGFsbG93ZWRCYXJyZWxOYW1lcyksXG4gIH07XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciBhIGRlY2xhcmF0aW9uIGlzIHR5cGUtb25seS5cbiAqIEBwYXJhbSB2YWx1ZSBEZWNsYXJhdGlvbiBjYW5kaWRhdGUgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIFRydWUgd2hlbiB0aGUgZGVjbGFyYXRpb24gaXMgdHlwZS1vbmx5LlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IG9rID0gaXNUeXBlT25seURlY2xhcmF0aW9uKHsgdHlwZTogXCJUU0ludGVyZmFjZURlY2xhcmF0aW9uXCIgfSk7XG4gKiBgYGBcbiAqL1xuY29uc3QgaXNUeXBlT25seURlY2xhcmF0aW9uID0gKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiA9PiB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBkZWNsYXJhdGlvblR5cGUgPSAodmFsdWUgYXMgVHlwZU9ubHlEZWNsYXJhdGlvbkNhbmRpZGF0ZSkudHlwZTtcblxuICByZXR1cm4gKFxuICAgIGRlY2xhcmF0aW9uVHlwZSA9PT0gXCJUU0ludGVyZmFjZURlY2xhcmF0aW9uXCIgfHxcbiAgICBkZWNsYXJhdGlvblR5cGUgPT09IFwiVFNUeXBlQWxpYXNEZWNsYXJhdGlvblwiXG4gICk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGEgc3RhdGVtZW50IGlzIGFsbG93ZWQgaW4gYSBiYXJyZWwgZmlsZS5cbiAqIEBwYXJhbSBzdGF0ZW1lbnQgUHJvZ3JhbSBzdGF0ZW1lbnQgbm9kZS5cbiAqIEByZXR1cm5zIFRydWUgd2hlbiB0aGUgc3RhdGVtZW50IGlzIHBlcm1pdHRlZC5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBvayA9IGlzQWxsb3dlZEJhcnJlbFN0YXRlbWVudChzdGF0ZW1lbnQpO1xuICogYGBgXG4gKi9cbmNvbnN0IGlzQWxsb3dlZEJhcnJlbFN0YXRlbWVudCA9IChcbiAgc3RhdGVtZW50OiBBU1QuUHJvZ3JhbVtcImJvZHlcIl1bbnVtYmVyXSxcbik6IGJvb2xlYW4gPT4ge1xuICBpZiAoc3RhdGVtZW50LnR5cGUgPT09IFwiRXhwb3J0QWxsRGVjbGFyYXRpb25cIikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHN0YXRlbWVudC50eXBlICE9PSBcIkV4cG9ydE5hbWVkRGVjbGFyYXRpb25cIikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGRlY2xhcmF0aW9uID0gc3RhdGVtZW50LmRlY2xhcmF0aW9uID8/IHZvaWQgMDtcblxuICBpZiAoZGVjbGFyYXRpb24gIT09IHZvaWQgMCkge1xuICAgIHJldHVybiBpc1R5cGVPbmx5RGVjbGFyYXRpb24oZGVjbGFyYXRpb24pO1xuICB9XG5cbiAgY29uc3Qgc291cmNlID0gc3RhdGVtZW50LnNvdXJjZSA/PyB2b2lkIDA7XG5cbiAgcmV0dXJuIHNvdXJjZSAhPT0gdm9pZCAwO1xufTtcblxuLyoqXG4gKiBCdWlsZHMgYSBydWxlIGxpc3RlbmVyIGZvciB0aGUgc3VwcGxpZWQgZmlsZS5cbiAqIEBwYXJhbSBjb250ZXh0IFJ1bGUgZXhlY3V0aW9uIGNvbnRleHQuXG4gKiBAcGFyYW0gZmlsZW5hbWUgQWJzb2x1dGUgZmlsZW5hbWUgdG8gbGludC5cbiAqIEBwYXJhbSBvcHRpb25zIE5vcm1hbGl6ZWQgcnVsZSBvcHRpb25zLlxuICogQHJldHVybnMgVGhlIHJ1bGUgbGlzdGVuZXIgZm9yIHRoZSBmaWxlLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGxpc3RlbmVyID0gYnVpbGRMaXN0ZW5lckZvckZpbGUoY29udGV4dCwgZmlsZW5hbWUsIHN0YXRlKTtcbiAqIGBgYFxuICovXG5jb25zdCBidWlsZExpc3RlbmVyRm9yRmlsZSA9IChcbiAgY29udGV4dDogUnVsZS5SdWxlQ29udGV4dCxcbiAgZmlsZW5hbWU6IHN0cmluZyxcbiAgb3B0aW9uczogQmFycmVsRmlsZXNFeHBvcnRzT25seVN0YXRlLFxuKTogUnVsZS5SdWxlTGlzdGVuZXIgPT4ge1xuICBpZiAoXG4gICAgIWlzTGludGFibGVNb2R1bGVGaWxlKGZpbGVuYW1lKSB8fFxuICAgICFpc0JhcnJlbEZpbGUoZmlsZW5hbWUsIG9wdGlvbnMuYWxsb3dlZEJhcnJlbE5hbWVzU2V0KVxuICApIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC8qKlxuICAgICAqIFJlcG9ydHMgdGhlIGZpcnN0IGludmFsaWQgYmFycmVsIHN0YXRlbWVudCBpbiB0aGUgcHJvZ3JhbS5cbiAgICAgKiBAcGFyYW0gbm9kZSBQcm9ncmFtIG5vZGUgdG8gaW5zcGVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsaXN0ZW5lci5Qcm9ncmFtKHByb2dyYW1Ob2RlKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBQcm9ncmFtKG5vZGU6IEFTVC5Qcm9ncmFtKTogdm9pZCB7XG4gICAgICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiBub2RlLmJvZHkpIHtcbiAgICAgICAgaWYgKCFpc0FsbG93ZWRCYXJyZWxTdGF0ZW1lbnQoc3RhdGVtZW50KSkge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIG1lc3NhZ2VJZDogXCJpbnZhbGlkQmFycmVsQ29udGVudFwiLFxuICAgICAgICAgICAgbm9kZTogc3RhdGVtZW50LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgfTtcbn07XG5cbi8qKlxuICogRVNMaW50IHJ1bGUgZW5mb3JjaW5nIHJlLWV4cG9ydC1vbmx5IGJhcnJlbCBmaWxlcy5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBydWxlID0gYmFycmVsRmlsZXNFeHBvcnRzT25seVJ1bGU7XG4gKiBgYGBcbiAqL1xuY29uc3QgYmFycmVsRmlsZXNFeHBvcnRzT25seVJ1bGU6IFJ1bGUuUnVsZU1vZHVsZSA9IHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgbGlzdGVuZXJzIGZvciB0aGUgY3VycmVudCBsaW50IGNvbnRleHQuXG4gICAqIEBwYXJhbSBjb250ZXh0IEVTTGludCBydWxlIGNvbnRleHQuXG4gICAqIEByZXR1cm5zIFRoZSBsaXN0ZW5lcnMgZm9yIHRoZSBjb250ZXh0LlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IGxpc3RlbmVycyA9IGJhcnJlbEZpbGVzRXhwb3J0c09ubHlSdWxlLmNyZWF0ZShjb250ZXh0KTtcbiAgICogYGBgXG4gICAqL1xuICBjcmVhdGUoY29udGV4dDogUnVsZS5SdWxlQ29udGV4dCk6IFJ1bGUuUnVsZUxpc3RlbmVyIHtcbiAgICByZXR1cm4gYnVpbGRMaXN0ZW5lckZvckZpbGUoXG4gICAgICBjb250ZXh0LFxuICAgICAgY29udGV4dC5maWxlbmFtZSxcbiAgICAgIGdldE9wdGlvbnMoY29udGV4dC5vcHRpb25zKSxcbiAgICApO1xuICB9LFxuICBtZXRhOiB7XG4gICAgZGVmYXVsdE9wdGlvbnM6IFt7IGFsbG93ZWRCYXJyZWxOYW1lczogW1wiaW5kZXhcIl0gfV0sXG4gICAgZG9jczoge1xuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiUmVxdWlyZSBiYXJyZWwgZmlsZXMgdG8gb25seSBjb250YWluIHJlLWV4cG9ydCBzdGF0ZW1lbnRzIG9yIHR5cGUtb25seSBkZWNsYXJhdGlvbnMuXCIsXG4gICAgICByZWNvbW1lbmRlZDogZmFsc2UsXG4gICAgICB1cmw6IFwiaHR0cHM6Ly9naXRodWIuY29tL3BhcmxvdGkvZXNsaW50LXBsdWdpbi9ibG9iL21haW4vZG9jcy9ydWxlcy9iYXJyZWwtZmlsZXMtZXhwb3J0cy1vbmx5Lm1kXCIsXG4gICAgfSxcbiAgICBtZXNzYWdlczoge1xuICAgICAgaW52YWxpZEJhcnJlbENvbnRlbnQ6XG4gICAgICAgIFwiQmFycmVsIGZpbGVzIG11c3Qgb25seSBjb250YWluIHJlLWV4cG9ydCBzdGF0ZW1lbnRzIG9yIHR5cGUtb25seSBkZWNsYXJhdGlvbnMuXCIsXG4gICAgfSxcbiAgICBzY2hlbWE6IFtcbiAgICAgIHtcbiAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgYWxsb3dlZEJhcnJlbE5hbWVzOiB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAgICAgXCJBbGxvd2VkIGJhcnJlbCBiYXNlbmFtZXMgdGhhdCBzaG91bGQgYmUgdHJlYXRlZCBhcyBiYXJyZWwgZmlsZXMuXCIsXG4gICAgICAgICAgICBpdGVtczogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICBtaW5JdGVtczogMSxcbiAgICAgICAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIHR5cGU6IFwicHJvYmxlbVwiLFxuICB9LFxufTtcblxuZXhwb3J0IHsgYmFycmVsRmlsZXNFeHBvcnRzT25seVJ1bGUgfTtcbiJdfQ==
@@ -0,0 +1,5 @@
1
+ export { barrelFilesExportsOnlyRule } from "./exports-only-rule.js";
2
+ export { noReexportsOutsideBarrelsRule } from "./no-reexports-outside-barrels-rule.js";
3
+ export { consistentBarrelFilesRule } from "./rule.js";
4
+ export type { BarrelFilesExportsOnlyOptions, ConsistentBarrelFilesOptions, NoReexportsOutsideBarrelsOptions, } from "./types.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/domain/architecture/consistent-barrel-files/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,6BAA6B,EAAE,MAAM,qCAAqC,CAAC;AACpF,OAAO,EAAE,yBAAyB,EAAE,MAAM,QAAQ,CAAC;AACnD,YAAY,EACV,6BAA6B,EAC7B,4BAA4B,EAC5B,gCAAgC,GACjC,MAAM,SAAS,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { barrelFilesExportsOnlyRule } from "./exports-only-rule.js";
2
+ export { noReexportsOutsideBarrelsRule } from "./no-reexports-outside-barrels-rule.js";
3
+ export { consistentBarrelFilesRule } from "./rule.js";
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZG9tYWluL2FyY2hpdGVjdHVyZS9jb25zaXN0ZW50LWJhcnJlbC1maWxlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNwRixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBiYXJyZWxGaWxlc0V4cG9ydHNPbmx5UnVsZSB9IGZyb20gXCIuL2V4cG9ydHMtb25seS1ydWxlXCI7XG5leHBvcnQgeyBub1JlZXhwb3J0c091dHNpZGVCYXJyZWxzUnVsZSB9IGZyb20gXCIuL25vLXJlZXhwb3J0cy1vdXRzaWRlLWJhcnJlbHMtcnVsZVwiO1xuZXhwb3J0IHsgY29uc2lzdGVudEJhcnJlbEZpbGVzUnVsZSB9IGZyb20gXCIuL3J1bGVcIjtcbmV4cG9ydCB0eXBlIHtcbiAgQmFycmVsRmlsZXNFeHBvcnRzT25seU9wdGlvbnMsXG4gIENvbnNpc3RlbnRCYXJyZWxGaWxlc09wdGlvbnMsXG4gIE5vUmVleHBvcnRzT3V0c2lkZUJhcnJlbHNPcHRpb25zLFxufSBmcm9tIFwiLi90eXBlc1wiO1xuIl19
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-reexports-outside-barrels-rule.d.ts","sourceRoot":"","sources":["../../../../src/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAO,IAAI,EAAE,MAAM,QAAQ,CAAC;AAmExC;;;;;;GAMG;AACH,QAAA,MAAM,6BAA6B,EAAE,IAAI,CAAC,UAuCzC,CAAC;AAEF,OAAO,EAAE,6BAA6B,EAAE,CAAC"}
@@ -0,0 +1,90 @@
1
+ import { collectImportedNames, getOptions, hasImportedExport, isBarrelFile, shouldLintFile, } from "./no-reexports-outside-barrels-utilities.js";
2
+ /**
3
+ * Builds a rule listener for the supplied file.
4
+ * @param context Rule execution context.
5
+ * @param filename Absolute filename to lint.
6
+ * @param options Normalized rule options.
7
+ * @returns The rule listener for the file.
8
+ * @example
9
+ * ```typescript
10
+ * const listener = buildListenerForFile(context, filename, state);
11
+ * ```
12
+ */
13
+ const buildListenerForFile = (context, filename, options) => {
14
+ if (!shouldLintFile(filename, options) || isBarrelFile(filename, options)) {
15
+ return {};
16
+ }
17
+ return {
18
+ Program(node) {
19
+ const importedNames = collectImportedNames(node.body);
20
+ for (const statement of node.body) {
21
+ const isExportFrom = statement.type === "ExportAllDeclaration" ||
22
+ (statement.type === "ExportNamedDeclaration" &&
23
+ statement.source !== null &&
24
+ statement.source !== void 0);
25
+ const isImportedDefaultExport = statement.type === "ExportDefaultDeclaration" &&
26
+ statement.declaration.type === "Identifier" &&
27
+ importedNames.has(statement.declaration.name);
28
+ if (isExportFrom) {
29
+ context.report({
30
+ messageId: "reexportNotAllowed",
31
+ node: statement,
32
+ });
33
+ }
34
+ else if (hasImportedExport(statement, importedNames)) {
35
+ context.report({
36
+ messageId: "reexportedImport",
37
+ node: statement,
38
+ });
39
+ }
40
+ else if (isImportedDefaultExport) {
41
+ context.report({
42
+ messageId: "reexportedImport",
43
+ node: statement,
44
+ });
45
+ }
46
+ }
47
+ },
48
+ };
49
+ };
50
+ /**
51
+ * ESLint rule preventing re-exports outside barrel files.
52
+ * @example
53
+ * ```typescript
54
+ * const rule = noReexportsOutsideBarrelsRule;
55
+ * ```
56
+ */
57
+ const noReexportsOutsideBarrelsRule = {
58
+ create(context) {
59
+ return buildListenerForFile(context, context.filename, getOptions(context.options));
60
+ },
61
+ meta: {
62
+ defaultOptions: [{ allowedBarrelNames: ["index"] }],
63
+ docs: {
64
+ description: "Require non-barrel files to export only locally defined values.",
65
+ recommended: false,
66
+ url: "https://github.com/parloti/eslint-plugin/blob/main/docs/rules/no-reexports-outside-barrels.md",
67
+ },
68
+ messages: {
69
+ reexportedImport: "Non-barrel files must not export identifiers imported from other modules.",
70
+ reexportNotAllowed: "Non-barrel files must not re-export from other modules.",
71
+ },
72
+ schema: [
73
+ {
74
+ additionalProperties: false,
75
+ properties: {
76
+ allowedBarrelNames: {
77
+ description: "Allowed barrel basenames that should be exempt from the re-export restriction.",
78
+ items: { type: "string" },
79
+ minItems: 1,
80
+ type: "array",
81
+ },
82
+ },
83
+ type: "object",
84
+ },
85
+ ],
86
+ type: "problem",
87
+ },
88
+ };
89
+ export { noReexportsOutsideBarrelsRule };
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm8tcmVleHBvcnRzLW91dHNpZGUtYmFycmVscy1ydWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2RvbWFpbi9hcmNoaXRlY3R1cmUvY29uc2lzdGVudC1iYXJyZWwtZmlsZXMvbm8tcmVleHBvcnRzLW91dHNpZGUtYmFycmVscy1ydWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsVUFBVSxFQUNWLGlCQUFpQixFQUNqQixZQUFZLEVBQ1osY0FBYyxHQUNmLE1BQU0sMENBQTBDLENBQUM7QUFFbEQ7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sb0JBQW9CLEdBQUcsQ0FDM0IsT0FBeUIsRUFDekIsUUFBZ0IsRUFDaEIsT0FBc0MsRUFDbkIsRUFBRTtJQUNyQixJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsSUFBSSxZQUFZLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDMUUsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsT0FBTztRQUNMLE9BQU8sQ0FBQyxJQUFpQjtZQUN2QixNQUFNLGFBQWEsR0FBRyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFdEQsS0FBSyxNQUFNLFNBQVMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2xDLE1BQU0sWUFBWSxHQUNoQixTQUFTLENBQUMsSUFBSSxLQUFLLHNCQUFzQjtvQkFDekMsQ0FBQyxTQUFTLENBQUMsSUFBSSxLQUFLLHdCQUF3Qjt3QkFDMUMsU0FBUyxDQUFDLE1BQU0sS0FBSyxJQUFJO3dCQUN6QixTQUFTLENBQUMsTUFBTSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBRWpDLE1BQU0sdUJBQXVCLEdBQzNCLFNBQVMsQ0FBQyxJQUFJLEtBQUssMEJBQTBCO29CQUM3QyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyxZQUFZO29CQUMzQyxhQUFhLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBRWhELElBQUksWUFBWSxFQUFFLENBQUM7b0JBQ2pCLE9BQU8sQ0FBQyxNQUFNLENBQUM7d0JBQ2IsU0FBUyxFQUFFLG9CQUFvQjt3QkFDL0IsSUFBSSxFQUFFLFNBQVM7cUJBQ2hCLENBQUMsQ0FBQztnQkFDTCxDQUFDO3FCQUFNLElBQUksaUJBQWlCLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxFQUFFLENBQUM7b0JBQ3ZELE9BQU8sQ0FBQyxNQUFNLENBQUM7d0JBQ2IsU0FBUyxFQUFFLGtCQUFrQjt3QkFDN0IsSUFBSSxFQUFFLFNBQVM7cUJBQ2hCLENBQUMsQ0FBQztnQkFDTCxDQUFDO3FCQUFNLElBQUksdUJBQXVCLEVBQUUsQ0FBQztvQkFDbkMsT0FBTyxDQUFDLE1BQU0sQ0FBQzt3QkFDYixTQUFTLEVBQUUsa0JBQWtCO3dCQUM3QixJQUFJLEVBQUUsU0FBUztxQkFDaEIsQ0FBQyxDQUFDO2dCQUNMLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRjs7Ozs7O0dBTUc7QUFDSCxNQUFNLDZCQUE2QixHQUFvQjtJQUNyRCxNQUFNLENBQUMsT0FBeUI7UUFDOUIsT0FBTyxvQkFBb0IsQ0FDekIsT0FBTyxFQUNQLE9BQU8sQ0FBQyxRQUFRLEVBQ2hCLFVBQVUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQzVCLENBQUM7SUFDSixDQUFDO0lBQ0QsSUFBSSxFQUFFO1FBQ0osY0FBYyxFQUFFLENBQUMsRUFBRSxrQkFBa0IsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDbkQsSUFBSSxFQUFFO1lBQ0osV0FBVyxFQUNULGlFQUFpRTtZQUNuRSxXQUFXLEVBQUUsS0FBSztZQUNsQixHQUFHLEVBQUUsK0ZBQStGO1NBQ3JHO1FBQ0QsUUFBUSxFQUFFO1lBQ1IsZ0JBQWdCLEVBQ2QsMkVBQTJFO1lBQzdFLGtCQUFrQixFQUNoQix5REFBeUQ7U0FDNUQ7UUFDRCxNQUFNLEVBQUU7WUFDTjtnQkFDRSxvQkFBb0IsRUFBRSxLQUFLO2dCQUMzQixVQUFVLEVBQUU7b0JBQ1Ysa0JBQWtCLEVBQUU7d0JBQ2xCLFdBQVcsRUFDVCxnRkFBZ0Y7d0JBQ2xGLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7d0JBQ3pCLFFBQVEsRUFBRSxDQUFDO3dCQUNYLElBQUksRUFBRSxPQUFPO3FCQUNkO2lCQUNGO2dCQUNELElBQUksRUFBRSxRQUFRO2FBQ2Y7U0FDRjtRQUNELElBQUksRUFBRSxTQUFTO0tBQ2hCO0NBQ0YsQ0FBQztBQUVGLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBU1QsIFJ1bGUgfSBmcm9tIFwiZXNsaW50XCI7XG5cbmltcG9ydCB7XG4gIGNvbGxlY3RJbXBvcnRlZE5hbWVzLFxuICBnZXRPcHRpb25zLFxuICBoYXNJbXBvcnRlZEV4cG9ydCxcbiAgaXNCYXJyZWxGaWxlLFxuICBzaG91bGRMaW50RmlsZSxcbn0gZnJvbSBcIi4vbm8tcmVleHBvcnRzLW91dHNpZGUtYmFycmVscy11dGlsaXRpZXNcIjtcblxuLyoqXG4gKiBCdWlsZHMgYSBydWxlIGxpc3RlbmVyIGZvciB0aGUgc3VwcGxpZWQgZmlsZS5cbiAqIEBwYXJhbSBjb250ZXh0IFJ1bGUgZXhlY3V0aW9uIGNvbnRleHQuXG4gKiBAcGFyYW0gZmlsZW5hbWUgQWJzb2x1dGUgZmlsZW5hbWUgdG8gbGludC5cbiAqIEBwYXJhbSBvcHRpb25zIE5vcm1hbGl6ZWQgcnVsZSBvcHRpb25zLlxuICogQHJldHVybnMgVGhlIHJ1bGUgbGlzdGVuZXIgZm9yIHRoZSBmaWxlLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGxpc3RlbmVyID0gYnVpbGRMaXN0ZW5lckZvckZpbGUoY29udGV4dCwgZmlsZW5hbWUsIHN0YXRlKTtcbiAqIGBgYFxuICovXG5jb25zdCBidWlsZExpc3RlbmVyRm9yRmlsZSA9IChcbiAgY29udGV4dDogUnVsZS5SdWxlQ29udGV4dCxcbiAgZmlsZW5hbWU6IHN0cmluZyxcbiAgb3B0aW9uczogUmV0dXJuVHlwZTx0eXBlb2YgZ2V0T3B0aW9ucz4sXG4pOiBSdWxlLlJ1bGVMaXN0ZW5lciA9PiB7XG4gIGlmICghc2hvdWxkTGludEZpbGUoZmlsZW5hbWUsIG9wdGlvbnMpIHx8IGlzQmFycmVsRmlsZShmaWxlbmFtZSwgb3B0aW9ucykpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICByZXR1cm4ge1xuICAgIFByb2dyYW0obm9kZTogQVNULlByb2dyYW0pOiB2b2lkIHtcbiAgICAgIGNvbnN0IGltcG9ydGVkTmFtZXMgPSBjb2xsZWN0SW1wb3J0ZWROYW1lcyhub2RlLmJvZHkpO1xuXG4gICAgICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiBub2RlLmJvZHkpIHtcbiAgICAgICAgY29uc3QgaXNFeHBvcnRGcm9tID1cbiAgICAgICAgICBzdGF0ZW1lbnQudHlwZSA9PT0gXCJFeHBvcnRBbGxEZWNsYXJhdGlvblwiIHx8XG4gICAgICAgICAgKHN0YXRlbWVudC50eXBlID09PSBcIkV4cG9ydE5hbWVkRGVjbGFyYXRpb25cIiAmJlxuICAgICAgICAgICAgc3RhdGVtZW50LnNvdXJjZSAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgc3RhdGVtZW50LnNvdXJjZSAhPT0gdm9pZCAwKTtcblxuICAgICAgICBjb25zdCBpc0ltcG9ydGVkRGVmYXVsdEV4cG9ydCA9XG4gICAgICAgICAgc3RhdGVtZW50LnR5cGUgPT09IFwiRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uXCIgJiZcbiAgICAgICAgICBzdGF0ZW1lbnQuZGVjbGFyYXRpb24udHlwZSA9PT0gXCJJZGVudGlmaWVyXCIgJiZcbiAgICAgICAgICBpbXBvcnRlZE5hbWVzLmhhcyhzdGF0ZW1lbnQuZGVjbGFyYXRpb24ubmFtZSk7XG5cbiAgICAgICAgaWYgKGlzRXhwb3J0RnJvbSkge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIG1lc3NhZ2VJZDogXCJyZWV4cG9ydE5vdEFsbG93ZWRcIixcbiAgICAgICAgICAgIG5vZGU6IHN0YXRlbWVudCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChoYXNJbXBvcnRlZEV4cG9ydChzdGF0ZW1lbnQsIGltcG9ydGVkTmFtZXMpKSB7XG4gICAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgICAgbWVzc2FnZUlkOiBcInJlZXhwb3J0ZWRJbXBvcnRcIixcbiAgICAgICAgICAgIG5vZGU6IHN0YXRlbWVudCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0ltcG9ydGVkRGVmYXVsdEV4cG9ydCkge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIG1lc3NhZ2VJZDogXCJyZWV4cG9ydGVkSW1wb3J0XCIsXG4gICAgICAgICAgICBub2RlOiBzdGF0ZW1lbnQsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICB9O1xufTtcblxuLyoqXG4gKiBFU0xpbnQgcnVsZSBwcmV2ZW50aW5nIHJlLWV4cG9ydHMgb3V0c2lkZSBiYXJyZWwgZmlsZXMuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgcnVsZSA9IG5vUmVleHBvcnRzT3V0c2lkZUJhcnJlbHNSdWxlO1xuICogYGBgXG4gKi9cbmNvbnN0IG5vUmVleHBvcnRzT3V0c2lkZUJhcnJlbHNSdWxlOiBSdWxlLlJ1bGVNb2R1bGUgPSB7XG4gIGNyZWF0ZShjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0KTogUnVsZS5SdWxlTGlzdGVuZXIge1xuICAgIHJldHVybiBidWlsZExpc3RlbmVyRm9yRmlsZShcbiAgICAgIGNvbnRleHQsXG4gICAgICBjb250ZXh0LmZpbGVuYW1lLFxuICAgICAgZ2V0T3B0aW9ucyhjb250ZXh0Lm9wdGlvbnMpLFxuICAgICk7XG4gIH0sXG4gIG1ldGE6IHtcbiAgICBkZWZhdWx0T3B0aW9uczogW3sgYWxsb3dlZEJhcnJlbE5hbWVzOiBbXCJpbmRleFwiXSB9XSxcbiAgICBkb2NzOiB7XG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJSZXF1aXJlIG5vbi1iYXJyZWwgZmlsZXMgdG8gZXhwb3J0IG9ubHkgbG9jYWxseSBkZWZpbmVkIHZhbHVlcy5cIixcbiAgICAgIHJlY29tbWVuZGVkOiBmYWxzZSxcbiAgICAgIHVybDogXCJodHRwczovL2dpdGh1Yi5jb20vcGFybG90aS9lc2xpbnQtcGx1Z2luL2Jsb2IvbWFpbi9kb2NzL3J1bGVzL25vLXJlZXhwb3J0cy1vdXRzaWRlLWJhcnJlbHMubWRcIixcbiAgICB9LFxuICAgIG1lc3NhZ2VzOiB7XG4gICAgICByZWV4cG9ydGVkSW1wb3J0OlxuICAgICAgICBcIk5vbi1iYXJyZWwgZmlsZXMgbXVzdCBub3QgZXhwb3J0IGlkZW50aWZpZXJzIGltcG9ydGVkIGZyb20gb3RoZXIgbW9kdWxlcy5cIixcbiAgICAgIHJlZXhwb3J0Tm90QWxsb3dlZDpcbiAgICAgICAgXCJOb24tYmFycmVsIGZpbGVzIG11c3Qgbm90IHJlLWV4cG9ydCBmcm9tIG90aGVyIG1vZHVsZXMuXCIsXG4gICAgfSxcbiAgICBzY2hlbWE6IFtcbiAgICAgIHtcbiAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgYWxsb3dlZEJhcnJlbE5hbWVzOiB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAgICAgXCJBbGxvd2VkIGJhcnJlbCBiYXNlbmFtZXMgdGhhdCBzaG91bGQgYmUgZXhlbXB0IGZyb20gdGhlIHJlLWV4cG9ydCByZXN0cmljdGlvbi5cIixcbiAgICAgICAgICAgIGl0ZW1zOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICAgIG1pbkl0ZW1zOiAxLFxuICAgICAgICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgdHlwZTogXCJwcm9ibGVtXCIsXG4gIH0sXG59O1xuXG5leHBvcnQgeyBub1JlZXhwb3J0c091dHNpZGVCYXJyZWxzUnVsZSB9O1xuIl19
@@ -1,5 +1,5 @@
1
1
  import type * as ESTree from "estree";
2
- import type { NoReexportsOutsideBarrelsOptions } from "./types";
2
+ import type { NoReexportsOutsideBarrelsOptions } from "./types.js";
3
3
  /** Type definition for rule data. */
4
4
  interface RuleReport {
5
5
  /** MessageId helper value. */
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-reexports-outside-barrels-test-utilities.d.ts","sourceRoot":"","sources":["../../../../src/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-test-utilities.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,MAAM,QAAQ,CAAC;AAMtC,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,SAAS,CAAC;AA0BhE,qCAAqC;AACrC,UAAU,UAAU;IAClB,8BAA8B;IAC9B,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B;AAiBD,qCAAqC;AACrC,UAAU,eAAe;IACvB,qCAAqC;IACrC,iBAAiB,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,UAAU,EAAE,CAAC;IAElE,uCAAuC;IACvC,mBAAmB,EAAE,CACnB,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAC5B,OAAO,CAAC,EAAE,gCAAgC,KACvC,UAAU,EAAE,CAAC;IAElB,qCAAqC;IACrC,iBAAiB,EAAE,CACjB,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAC5B,OAAO,CAAC,EAAE,gCAAgC,KACvC,UAAU,EAAE,CAAC;CACnB;AAkCD;;;;;;;;;;GAUG;AACH,QAAA,MAAM,OAAO,GACX,UAAU,MAAM,EAChB,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAC5B,UAAU,gCAAgC,KACzC,UAAU,EAeZ,CAAC;AAEF;;;;;;;;GAQG;AACH,QAAA,MAAM,qBAAqB,GACzB,sBAAsB,MAAM,EAAE,KAC7B,eAmCF,CAAC;AAEF,OAAO,EAAE,qBAAqB,EAAE,OAAO,EAAE,CAAC"}
@@ -0,0 +1,91 @@
1
+ import { SourceCode } from "eslint";
2
+ import path from "node:path";
3
+ import { cwd } from "node:process";
4
+ import { noReexportsOutsideBarrelsRule } from "./no-reexports-outside-barrels-rule.js";
5
+ import { createProgram, createRepoDirectory } from "./test-helpers.js";
6
+ /**
7
+ * Builds a rule context for running the rule.
8
+ * @param parameters Context parameters and report sink.
9
+ * @returns The ESLint rule context.
10
+ * @example
11
+ * ```typescript
12
+ * const context = createRuleContext({ filename, reports, sourceCode });
13
+ * ```
14
+ */
15
+ const createRuleContext = (parameters) => ({
16
+ cwd: cwd(),
17
+ filename: parameters.filename,
18
+ id: "no-reexports-outside-barrels",
19
+ languageOptions: {
20
+ ecmaVersion: "latest",
21
+ sourceType: "module",
22
+ },
23
+ options: parameters.options === void 0 ? [] : [parameters.options],
24
+ parserOptions: {},
25
+ parserPath: void 0,
26
+ physicalFilename: parameters.filename,
27
+ report: (report) => {
28
+ const { messageId } = report;
29
+ parameters.reports.push({ messageId });
30
+ },
31
+ settings: {},
32
+ sourceCode: parameters.sourceCode,
33
+ });
34
+ /**
35
+ * Runs the rule against the provided AST body.
36
+ * @param filename Target filename.
37
+ * @param body AST program body.
38
+ * @param options Rule options when provided.
39
+ * @returns The captured rule reports.
40
+ * @example
41
+ * ```typescript
42
+ * const reports = runRule("feature.ts", createBody());
43
+ * ```
44
+ */
45
+ const runRule = (filename, body, options) => {
46
+ const reports = [];
47
+ const sourceCode = new SourceCode("", createProgram(body));
48
+ const context = createRuleContext({
49
+ filename,
50
+ reports,
51
+ sourceCode,
52
+ ...(options === void 0 ? {} : { options }),
53
+ });
54
+ const listeners = noReexportsOutsideBarrelsRule.create(context);
55
+ const programListener = listeners.Program;
56
+ programListener?.(context.sourceCode.ast);
57
+ return reports;
58
+ };
59
+ /**
60
+ * Creates temporary file runners for the rule.
61
+ * @param temporaryDirectories Directories created during the run.
62
+ * @returns Helpers for running the rule in temp folders.
63
+ * @example
64
+ * ```typescript
65
+ * const runner = createTemporaryRunner([]);
66
+ * ```
67
+ */
68
+ const createTemporaryRunner = (temporaryDirectories) => {
69
+ const runForTemporaryFile = (options) => {
70
+ const directory = createRepoDirectory(options.root);
71
+ temporaryDirectories.push(directory);
72
+ const filePath = path.join(directory, options.filename);
73
+ return runRule(filePath, options.body, options.options);
74
+ };
75
+ const runDefaultFeature = (body) => runForTemporaryFile({ body, filename: "feature.ts", root: "src" });
76
+ const runTemporaryFeature = (body, options) => runForTemporaryFile({
77
+ body,
78
+ filename: "feature.ts",
79
+ root: "tmp",
80
+ ...(options === void 0 ? {} : { options }),
81
+ });
82
+ const runTemporaryIndex = (body, options) => runForTemporaryFile({
83
+ body,
84
+ filename: "index.ts",
85
+ root: "tmp",
86
+ ...(options === void 0 ? {} : { options }),
87
+ });
88
+ return { runDefaultFeature, runTemporaryFeature, runTemporaryIndex };
89
+ };
90
+ export { createTemporaryRunner, runRule };
91
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm8tcmVleHBvcnRzLW91dHNpZGUtYmFycmVscy10ZXN0LXV0aWxpdGllcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb21haW4vYXJjaGl0ZWN0dXJlL2NvbnNpc3RlbnQtYmFycmVsLWZpbGVzL25vLXJlZXhwb3J0cy1vdXRzaWRlLWJhcnJlbHMtdGVzdC11dGlsaXRpZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNwQyxPQUFPLElBQUksTUFBTSxXQUFXLENBQUM7QUFDN0IsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUluQyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNwRixPQUFPLEVBQUUsYUFBYSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUE4RHBFOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxpQkFBaUIsR0FBRyxDQUN4QixVQUFpQyxFQUNmLEVBQUUsQ0FDcEIsQ0FBQztJQUNDLEdBQUcsRUFBRSxHQUFHLEVBQUU7SUFDVixRQUFRLEVBQUUsVUFBVSxDQUFDLFFBQVE7SUFDN0IsRUFBRSxFQUFFLDhCQUE4QjtJQUNsQyxlQUFlLEVBQUU7UUFDZixXQUFXLEVBQUUsUUFBUTtRQUNyQixVQUFVLEVBQUUsUUFBUTtLQUNyQjtJQUNELE9BQU8sRUFBRSxVQUFVLENBQUMsT0FBTyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQztJQUNsRSxhQUFhLEVBQUUsRUFBRTtJQUNqQixVQUFVLEVBQUUsS0FBSyxDQUFDO0lBQ2xCLGdCQUFnQixFQUFFLFVBQVUsQ0FBQyxRQUFRO0lBQ3JDLE1BQU0sRUFBRSxDQUFDLE1BQTZCLEVBQVEsRUFBRTtRQUM5QyxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsTUFBdUMsQ0FBQztRQUM5RCxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUNELFFBQVEsRUFBRSxFQUFFO0lBQ1osVUFBVSxFQUFFLFVBQVUsQ0FBQyxVQUFVO0NBQ2xDLENBQWdDLENBQUM7QUFFcEM7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sT0FBTyxHQUFHLENBQ2QsUUFBZ0IsRUFDaEIsSUFBNEIsRUFDNUIsT0FBMEMsRUFDNUIsRUFBRTtJQUNoQixNQUFNLE9BQU8sR0FBaUIsRUFBRSxDQUFDO0lBQ2pDLE1BQU0sVUFBVSxHQUFHLElBQUksVUFBVSxDQUFDLEVBQUUsRUFBRSxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMzRCxNQUFNLE9BQU8sR0FBRyxpQkFBaUIsQ0FBQztRQUNoQyxRQUFRO1FBQ1IsT0FBTztRQUNQLFVBQVU7UUFDVixHQUFHLENBQUMsT0FBTyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUM7S0FDM0MsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxTQUFTLEdBQUcsNkJBQTZCLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hFLE1BQU0sZUFBZSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUM7SUFFMUMsZUFBZSxFQUFFLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUUxQyxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDLENBQUM7QUFFRjs7Ozs7Ozs7R0FRRztBQUNILE1BQU0scUJBQXFCLEdBQUcsQ0FDNUIsb0JBQThCLEVBQ2IsRUFBRTtJQUNuQixNQUFNLG1CQUFtQixHQUFHLENBQUMsT0FBNkIsRUFBZ0IsRUFBRTtRQUMxRSxNQUFNLFNBQVMsR0FBRyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEQsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUV4RCxPQUFPLE9BQU8sQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDMUQsQ0FBQyxDQUFDO0lBRUYsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLElBQTRCLEVBQWdCLEVBQUUsQ0FDdkUsbUJBQW1CLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUVyRSxNQUFNLG1CQUFtQixHQUFHLENBQzFCLElBQTRCLEVBQzVCLE9BQTBDLEVBQzVCLEVBQUUsQ0FDaEIsbUJBQW1CLENBQUM7UUFDbEIsSUFBSTtRQUNKLFFBQVEsRUFBRSxZQUFZO1FBQ3RCLElBQUksRUFBRSxLQUFLO1FBQ1gsR0FBRyxDQUFDLE9BQU8sS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDO0tBQzNDLENBQUMsQ0FBQztJQUVMLE1BQU0saUJBQWlCLEdBQUcsQ0FDeEIsSUFBNEIsRUFDNUIsT0FBMEMsRUFDNUIsRUFBRSxDQUNoQixtQkFBbUIsQ0FBQztRQUNsQixJQUFJO1FBQ0osUUFBUSxFQUFFLFVBQVU7UUFDcEIsSUFBSSxFQUFFLEtBQUs7UUFDWCxHQUFHLENBQUMsT0FBTyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUM7S0FDM0MsQ0FBQyxDQUFDO0lBRUwsT0FBTyxFQUFFLGlCQUFpQixFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLENBQUM7QUFDdkUsQ0FBQyxDQUFDO0FBRUYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE9BQU8sRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBSdWxlIH0gZnJvbSBcImVzbGludFwiO1xuaW1wb3J0IHR5cGUgKiBhcyBFU1RyZWUgZnJvbSBcImVzdHJlZVwiO1xuXG5pbXBvcnQgeyBTb3VyY2VDb2RlIH0gZnJvbSBcImVzbGludFwiO1xuaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgY3dkIH0gZnJvbSBcIm5vZGU6cHJvY2Vzc1wiO1xuXG5pbXBvcnQgdHlwZSB7IE5vUmVleHBvcnRzT3V0c2lkZUJhcnJlbHNPcHRpb25zIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuaW1wb3J0IHsgbm9SZWV4cG9ydHNPdXRzaWRlQmFycmVsc1J1bGUgfSBmcm9tIFwiLi9uby1yZWV4cG9ydHMtb3V0c2lkZS1iYXJyZWxzLXJ1bGVcIjtcbmltcG9ydCB7IGNyZWF0ZVByb2dyYW0sIGNyZWF0ZVJlcG9EaXJlY3RvcnkgfSBmcm9tIFwiLi90ZXN0LWhlbHBlcnNcIjtcblxuLyoqIFR5cGUgZGVmaW5pdGlvbiBmb3IgcnVsZSBkYXRhLiAqL1xuaW50ZXJmYWNlIFJlcG9ydERlc2NyaXB0b3JXaXRoTWVzc2FnZUlkIHtcbiAgLyoqIE1lc3NhZ2VJZCBmaWVsZCB2YWx1ZS4gKi9cbiAgbWVzc2FnZUlkPzogc3RyaW5nO1xufVxuXG4vKiogVHlwZSBkZWZpbml0aW9uIGZvciBydWxlIGRhdGEuICovXG5pbnRlcmZhY2UgUnVsZUNvbnRleHRQYXJhbWV0ZXJzIHtcbiAgLyoqIEZpbGVuYW1lIGZpZWxkIHZhbHVlLiAqL1xuICBmaWxlbmFtZTogc3RyaW5nO1xuXG4gIC8qKiBPcHRpb25zIGhlbHBlciB2YWx1ZS4gKi9cbiAgb3B0aW9ucz86IE5vUmVleHBvcnRzT3V0c2lkZUJhcnJlbHNPcHRpb25zO1xuXG4gIC8qKiBSZXBvcnRzIGZpZWxkIHZhbHVlLiAqL1xuICByZXBvcnRzOiBSdWxlUmVwb3J0W107XG5cbiAgLyoqIFNvdXJjZUNvZGUgZmllbGQgdmFsdWUuICovXG4gIHNvdXJjZUNvZGU6IFNvdXJjZUNvZGU7XG59XG5cbi8qKiBUeXBlIGRlZmluaXRpb24gZm9yIHJ1bGUgZGF0YS4gKi9cbmludGVyZmFjZSBSdWxlUmVwb3J0IHtcbiAgLyoqIE1lc3NhZ2VJZCBoZWxwZXIgdmFsdWUuICovXG4gIG1lc3NhZ2VJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG4vKiogVHlwZSBkZWZpbml0aW9uIGZvciBydWxlIGRhdGEuICovXG5pbnRlcmZhY2UgVGVtcG9yYXJ5RmlsZU9wdGlvbnMge1xuICAvKiogQm9keSBmaWVsZCB2YWx1ZS4gKi9cbiAgYm9keTogRVNUcmVlLlByb2dyYW1bXCJib2R5XCJdO1xuXG4gIC8qKiBGaWxlbmFtZSBmaWVsZCB2YWx1ZS4gKi9cbiAgZmlsZW5hbWU6IHN0cmluZztcblxuICAvKiogT3B0aW9ucyBoZWxwZXIgdmFsdWUuICovXG4gIG9wdGlvbnM/OiBOb1JlZXhwb3J0c091dHNpZGVCYXJyZWxzT3B0aW9ucztcblxuICAvKiogUm9vdCBmaWVsZCB2YWx1ZS4gKi9cbiAgcm9vdDogXCJzcmNcIiB8IFwidG1wXCI7XG59XG5cbi8qKiBUeXBlIGRlZmluaXRpb24gZm9yIHJ1bGUgZGF0YS4gKi9cbmludGVyZmFjZSBUZW1wb3JhcnlSdW5uZXIge1xuICAvKiogUnVuRGVmYXVsdEZlYXR1cmUgZmllbGQgdmFsdWUuICovXG4gIHJ1bkRlZmF1bHRGZWF0dXJlOiAoYm9keTogRVNUcmVlLlByb2dyYW1bXCJib2R5XCJdKSA9PiBSdWxlUmVwb3J0W107XG5cbiAgLyoqIFJ1blRlbXBvcmFyeUZlYXR1cmUgZmllbGQgdmFsdWUuICovXG4gIHJ1blRlbXBvcmFyeUZlYXR1cmU6IChcbiAgICBib2R5OiBFU1RyZWUuUHJvZ3JhbVtcImJvZHlcIl0sXG4gICAgb3B0aW9ucz86IE5vUmVleHBvcnRzT3V0c2lkZUJhcnJlbHNPcHRpb25zLFxuICApID0+IFJ1bGVSZXBvcnRbXTtcblxuICAvKiogUnVuVGVtcG9yYXJ5SW5kZXggZmllbGQgdmFsdWUuICovXG4gIHJ1blRlbXBvcmFyeUluZGV4OiAoXG4gICAgYm9keTogRVNUcmVlLlByb2dyYW1bXCJib2R5XCJdLFxuICAgIG9wdGlvbnM/OiBOb1JlZXhwb3J0c091dHNpZGVCYXJyZWxzT3B0aW9ucyxcbiAgKSA9PiBSdWxlUmVwb3J0W107XG59XG5cbi8qKlxuICogQnVpbGRzIGEgcnVsZSBjb250ZXh0IGZvciBydW5uaW5nIHRoZSBydWxlLlxuICogQHBhcmFtIHBhcmFtZXRlcnMgQ29udGV4dCBwYXJhbWV0ZXJzIGFuZCByZXBvcnQgc2luay5cbiAqIEByZXR1cm5zIFRoZSBFU0xpbnQgcnVsZSBjb250ZXh0LlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGNvbnRleHQgPSBjcmVhdGVSdWxlQ29udGV4dCh7IGZpbGVuYW1lLCByZXBvcnRzLCBzb3VyY2VDb2RlIH0pO1xuICogYGBgXG4gKi9cbmNvbnN0IGNyZWF0ZVJ1bGVDb250ZXh0ID0gKFxuICBwYXJhbWV0ZXJzOiBSdWxlQ29udGV4dFBhcmFtZXRlcnMsXG4pOiBSdWxlLlJ1bGVDb250ZXh0ID0+XG4gICh7XG4gICAgY3dkOiBjd2QoKSxcbiAgICBmaWxlbmFtZTogcGFyYW1ldGVycy5maWxlbmFtZSxcbiAgICBpZDogXCJuby1yZWV4cG9ydHMtb3V0c2lkZS1iYXJyZWxzXCIsXG4gICAgbGFuZ3VhZ2VPcHRpb25zOiB7XG4gICAgICBlY21hVmVyc2lvbjogXCJsYXRlc3RcIixcbiAgICAgIHNvdXJjZVR5cGU6IFwibW9kdWxlXCIsXG4gICAgfSxcbiAgICBvcHRpb25zOiBwYXJhbWV0ZXJzLm9wdGlvbnMgPT09IHZvaWQgMCA/IFtdIDogW3BhcmFtZXRlcnMub3B0aW9uc10sXG4gICAgcGFyc2VyT3B0aW9uczoge30sXG4gICAgcGFyc2VyUGF0aDogdm9pZCAwLFxuICAgIHBoeXNpY2FsRmlsZW5hbWU6IHBhcmFtZXRlcnMuZmlsZW5hbWUsXG4gICAgcmVwb3J0OiAocmVwb3J0OiBSdWxlLlJlcG9ydERlc2NyaXB0b3IpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IHsgbWVzc2FnZUlkIH0gPSByZXBvcnQgYXMgUmVwb3J0RGVzY3JpcHRvcldpdGhNZXNzYWdlSWQ7XG4gICAgICBwYXJhbWV0ZXJzLnJlcG9ydHMucHVzaCh7IG1lc3NhZ2VJZCB9KTtcbiAgICB9LFxuICAgIHNldHRpbmdzOiB7fSxcbiAgICBzb3VyY2VDb2RlOiBwYXJhbWV0ZXJzLnNvdXJjZUNvZGUsXG4gIH0pIGFzIHVua25vd24gYXMgUnVsZS5SdWxlQ29udGV4dDtcblxuLyoqXG4gKiBSdW5zIHRoZSBydWxlIGFnYWluc3QgdGhlIHByb3ZpZGVkIEFTVCBib2R5LlxuICogQHBhcmFtIGZpbGVuYW1lIFRhcmdldCBmaWxlbmFtZS5cbiAqIEBwYXJhbSBib2R5IEFTVCBwcm9ncmFtIGJvZHkuXG4gKiBAcGFyYW0gb3B0aW9ucyBSdWxlIG9wdGlvbnMgd2hlbiBwcm92aWRlZC5cbiAqIEByZXR1cm5zIFRoZSBjYXB0dXJlZCBydWxlIHJlcG9ydHMuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgcmVwb3J0cyA9IHJ1blJ1bGUoXCJmZWF0dXJlLnRzXCIsIGNyZWF0ZUJvZHkoKSk7XG4gKiBgYGBcbiAqL1xuY29uc3QgcnVuUnVsZSA9IChcbiAgZmlsZW5hbWU6IHN0cmluZyxcbiAgYm9keTogRVNUcmVlLlByb2dyYW1bXCJib2R5XCJdLFxuICBvcHRpb25zPzogTm9SZWV4cG9ydHNPdXRzaWRlQmFycmVsc09wdGlvbnMsXG4pOiBSdWxlUmVwb3J0W10gPT4ge1xuICBjb25zdCByZXBvcnRzOiBSdWxlUmVwb3J0W10gPSBbXTtcbiAgY29uc3Qgc291cmNlQ29kZSA9IG5ldyBTb3VyY2VDb2RlKFwiXCIsIGNyZWF0ZVByb2dyYW0oYm9keSkpO1xuICBjb25zdCBjb250ZXh0ID0gY3JlYXRlUnVsZUNvbnRleHQoe1xuICAgIGZpbGVuYW1lLFxuICAgIHJlcG9ydHMsXG4gICAgc291cmNlQ29kZSxcbiAgICAuLi4ob3B0aW9ucyA9PT0gdm9pZCAwID8ge30gOiB7IG9wdGlvbnMgfSksXG4gIH0pO1xuICBjb25zdCBsaXN0ZW5lcnMgPSBub1JlZXhwb3J0c091dHNpZGVCYXJyZWxzUnVsZS5jcmVhdGUoY29udGV4dCk7XG4gIGNvbnN0IHByb2dyYW1MaXN0ZW5lciA9IGxpc3RlbmVycy5Qcm9ncmFtO1xuXG4gIHByb2dyYW1MaXN0ZW5lcj8uKGNvbnRleHQuc291cmNlQ29kZS5hc3QpO1xuXG4gIHJldHVybiByZXBvcnRzO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIHRlbXBvcmFyeSBmaWxlIHJ1bm5lcnMgZm9yIHRoZSBydWxlLlxuICogQHBhcmFtIHRlbXBvcmFyeURpcmVjdG9yaWVzIERpcmVjdG9yaWVzIGNyZWF0ZWQgZHVyaW5nIHRoZSBydW4uXG4gKiBAcmV0dXJucyBIZWxwZXJzIGZvciBydW5uaW5nIHRoZSBydWxlIGluIHRlbXAgZm9sZGVycy5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBydW5uZXIgPSBjcmVhdGVUZW1wb3JhcnlSdW5uZXIoW10pO1xuICogYGBgXG4gKi9cbmNvbnN0IGNyZWF0ZVRlbXBvcmFyeVJ1bm5lciA9IChcbiAgdGVtcG9yYXJ5RGlyZWN0b3JpZXM6IHN0cmluZ1tdLFxuKTogVGVtcG9yYXJ5UnVubmVyID0+IHtcbiAgY29uc3QgcnVuRm9yVGVtcG9yYXJ5RmlsZSA9IChvcHRpb25zOiBUZW1wb3JhcnlGaWxlT3B0aW9ucyk6IFJ1bGVSZXBvcnRbXSA9PiB7XG4gICAgY29uc3QgZGlyZWN0b3J5ID0gY3JlYXRlUmVwb0RpcmVjdG9yeShvcHRpb25zLnJvb3QpO1xuICAgIHRlbXBvcmFyeURpcmVjdG9yaWVzLnB1c2goZGlyZWN0b3J5KTtcbiAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbihkaXJlY3RvcnksIG9wdGlvbnMuZmlsZW5hbWUpO1xuXG4gICAgcmV0dXJuIHJ1blJ1bGUoZmlsZVBhdGgsIG9wdGlvbnMuYm9keSwgb3B0aW9ucy5vcHRpb25zKTtcbiAgfTtcblxuICBjb25zdCBydW5EZWZhdWx0RmVhdHVyZSA9IChib2R5OiBFU1RyZWUuUHJvZ3JhbVtcImJvZHlcIl0pOiBSdWxlUmVwb3J0W10gPT5cbiAgICBydW5Gb3JUZW1wb3JhcnlGaWxlKHsgYm9keSwgZmlsZW5hbWU6IFwiZmVhdHVyZS50c1wiLCByb290OiBcInNyY1wiIH0pO1xuXG4gIGNvbnN0IHJ1blRlbXBvcmFyeUZlYXR1cmUgPSAoXG4gICAgYm9keTogRVNUcmVlLlByb2dyYW1bXCJib2R5XCJdLFxuICAgIG9wdGlvbnM/OiBOb1JlZXhwb3J0c091dHNpZGVCYXJyZWxzT3B0aW9ucyxcbiAgKTogUnVsZVJlcG9ydFtdID0+XG4gICAgcnVuRm9yVGVtcG9yYXJ5RmlsZSh7XG4gICAgICBib2R5LFxuICAgICAgZmlsZW5hbWU6IFwiZmVhdHVyZS50c1wiLFxuICAgICAgcm9vdDogXCJ0bXBcIixcbiAgICAgIC4uLihvcHRpb25zID09PSB2b2lkIDAgPyB7fSA6IHsgb3B0aW9ucyB9KSxcbiAgICB9KTtcblxuICBjb25zdCBydW5UZW1wb3JhcnlJbmRleCA9IChcbiAgICBib2R5OiBFU1RyZWUuUHJvZ3JhbVtcImJvZHlcIl0sXG4gICAgb3B0aW9ucz86IE5vUmVleHBvcnRzT3V0c2lkZUJhcnJlbHNPcHRpb25zLFxuICApOiBSdWxlUmVwb3J0W10gPT5cbiAgICBydW5Gb3JUZW1wb3JhcnlGaWxlKHtcbiAgICAgIGJvZHksXG4gICAgICBmaWxlbmFtZTogXCJpbmRleC50c1wiLFxuICAgICAgcm9vdDogXCJ0bXBcIixcbiAgICAgIC4uLihvcHRpb25zID09PSB2b2lkIDAgPyB7fSA6IHsgb3B0aW9ucyB9KSxcbiAgICB9KTtcblxuICByZXR1cm4geyBydW5EZWZhdWx0RmVhdHVyZSwgcnVuVGVtcG9yYXJ5RmVhdHVyZSwgcnVuVGVtcG9yYXJ5SW5kZXggfTtcbn07XG5cbmV4cG9ydCB7IGNyZWF0ZVRlbXBvcmFyeVJ1bm5lciwgcnVuUnVsZSB9O1xuIl19