@codeperfect/eslint-plugin 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (248) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +128 -0
  3. package/dist/.tsbuildinfo +1 -0
  4. package/dist/architecture/consistent-barrel-files/consistent-barrel-files-listeners.d.ts +16 -0
  5. package/dist/architecture/consistent-barrel-files/consistent-barrel-files-listeners.d.ts.map +1 -0
  6. package/dist/architecture/consistent-barrel-files/consistent-barrel-files-listeners.js +131 -0
  7. package/dist/architecture/consistent-barrel-files/consistent-barrel-files-options.d.ts +48 -0
  8. package/dist/architecture/consistent-barrel-files/consistent-barrel-files-options.d.ts.map +1 -0
  9. package/dist/architecture/consistent-barrel-files/consistent-barrel-files-options.js +126 -0
  10. package/dist/architecture/consistent-barrel-files/exports-only-rule-test-utilities.d.ts +40 -0
  11. package/dist/architecture/consistent-barrel-files/exports-only-rule-test-utilities.d.ts.map +1 -0
  12. package/dist/architecture/consistent-barrel-files/exports-only-rule-test-utilities.js +90 -0
  13. package/dist/architecture/consistent-barrel-files/exports-only-rule.d.ts +11 -0
  14. package/dist/architecture/consistent-barrel-files/exports-only-rule.d.ts.map +1 -0
  15. package/dist/architecture/consistent-barrel-files/exports-only-rule.js +218 -0
  16. package/dist/architecture/consistent-barrel-files/index.d.ts +5 -0
  17. package/dist/architecture/consistent-barrel-files/index.d.ts.map +1 -0
  18. package/dist/architecture/consistent-barrel-files/index.js +4 -0
  19. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.d.ts +11 -0
  20. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.d.ts.map +1 -0
  21. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.js +100 -0
  22. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-test-utilities.d.ts +40 -0
  23. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-test-utilities.d.ts.map +1 -0
  24. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-test-utilities.js +90 -0
  25. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-utilities.d.ts +65 -0
  26. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-utilities.d.ts.map +1 -0
  27. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-utilities.js +154 -0
  28. package/dist/architecture/consistent-barrel-files/rule.d.ts +11 -0
  29. package/dist/architecture/consistent-barrel-files/rule.d.ts.map +1 -0
  30. package/dist/architecture/consistent-barrel-files/rule.js +58 -0
  31. package/dist/architecture/consistent-barrel-files/test-helpers.d.ts +141 -0
  32. package/dist/architecture/consistent-barrel-files/test-helpers.d.ts.map +1 -0
  33. package/dist/architecture/consistent-barrel-files/test-helpers.js +229 -0
  34. package/dist/architecture/consistent-barrel-files/types.d.ts +25 -0
  35. package/dist/architecture/consistent-barrel-files/types.d.ts.map +1 -0
  36. package/dist/architecture/consistent-barrel-files/types.js +2 -0
  37. package/dist/architecture/index.d.ts +2 -0
  38. package/dist/architecture/index.d.ts.map +1 -0
  39. package/dist/architecture/index.js +2 -0
  40. package/dist/benchmark-rules.d.ts +83 -0
  41. package/dist/benchmark-rules.d.ts.map +1 -0
  42. package/dist/benchmark-rules.js +175 -0
  43. package/dist/codeperfect-eslint-plugin-1.0.0.tgz +0 -0
  44. package/dist/codeperfect-plugin.d.ts +46 -0
  45. package/dist/codeperfect-plugin.d.ts.map +1 -0
  46. package/dist/codeperfect-plugin.js +29 -0
  47. package/dist/core/index.d.ts +3 -0
  48. package/dist/core/index.d.ts.map +1 -0
  49. package/dist/core/index.js +3 -0
  50. package/dist/core/no-multiple-declarators/index.d.ts +2 -0
  51. package/dist/core/no-multiple-declarators/index.d.ts.map +1 -0
  52. package/dist/core/no-multiple-declarators/index.js +2 -0
  53. package/dist/core/no-multiple-declarators/rule.d.ts +4 -0
  54. package/dist/core/no-multiple-declarators/rule.d.ts.map +1 -0
  55. package/dist/core/no-multiple-declarators/rule.js +100 -0
  56. package/dist/core/prefer-interface-types/index.d.ts +2 -0
  57. package/dist/core/prefer-interface-types/index.d.ts.map +1 -0
  58. package/dist/core/prefer-interface-types/index.js +2 -0
  59. package/dist/core/prefer-interface-types/rule.d.ts +5 -0
  60. package/dist/core/prefer-interface-types/rule.d.ts.map +1 -0
  61. package/dist/core/prefer-interface-types/rule.js +145 -0
  62. package/dist/core/prefer-interface-types/test-helpers.d.ts +110 -0
  63. package/dist/core/prefer-interface-types/test-helpers.d.ts.map +1 -0
  64. package/dist/core/prefer-interface-types/test-helpers.js +116 -0
  65. package/dist/custom-rule-documentation.d.ts +36 -0
  66. package/dist/custom-rule-documentation.d.ts.map +1 -0
  67. package/dist/custom-rule-documentation.js +35 -0
  68. package/dist/custom-rules.d.ts +61 -0
  69. package/dist/custom-rules.d.ts.map +1 -0
  70. package/dist/custom-rules.js +70 -0
  71. package/dist/docs/index.d.ts +4 -0
  72. package/dist/docs/index.d.ts.map +1 -0
  73. package/dist/docs/index.js +4 -0
  74. package/dist/docs/no-interface-member-docs/comment-utilities-test-helpers.d.ts +89 -0
  75. package/dist/docs/no-interface-member-docs/comment-utilities-test-helpers.d.ts.map +1 -0
  76. package/dist/docs/no-interface-member-docs/comment-utilities-test-helpers.js +129 -0
  77. package/dist/docs/no-interface-member-docs/comment-utilities.d.ts +48 -0
  78. package/dist/docs/no-interface-member-docs/comment-utilities.d.ts.map +1 -0
  79. package/dist/docs/no-interface-member-docs/comment-utilities.js +146 -0
  80. package/dist/docs/no-interface-member-docs/index.d.ts +2 -0
  81. package/dist/docs/no-interface-member-docs/index.d.ts.map +1 -0
  82. package/dist/docs/no-interface-member-docs/index.js +2 -0
  83. package/dist/docs/no-interface-member-docs/parameter-tags.d.ts +13 -0
  84. package/dist/docs/no-interface-member-docs/parameter-tags.d.ts.map +1 -0
  85. package/dist/docs/no-interface-member-docs/parameter-tags.js +101 -0
  86. package/dist/docs/no-interface-member-docs/parameter-utilities.d.ts +24 -0
  87. package/dist/docs/no-interface-member-docs/parameter-utilities.d.ts.map +1 -0
  88. package/dist/docs/no-interface-member-docs/parameter-utilities.js +125 -0
  89. package/dist/docs/no-interface-member-docs/rule.d.ts +5 -0
  90. package/dist/docs/no-interface-member-docs/rule.d.ts.map +1 -0
  91. package/dist/docs/no-interface-member-docs/rule.js +168 -0
  92. package/dist/docs/no-interface-member-docs/test-helpers.d.ts +103 -0
  93. package/dist/docs/no-interface-member-docs/test-helpers.d.ts.map +1 -0
  94. package/dist/docs/no-interface-member-docs/test-helpers.js +157 -0
  95. package/dist/docs/no-interface-member-docs/types.d.ts +30 -0
  96. package/dist/docs/no-interface-member-docs/types.d.ts.map +1 -0
  97. package/dist/docs/no-interface-member-docs/types.js +2 -0
  98. package/dist/docs/require-example-language/empty-fence-fixes.d.ts +29 -0
  99. package/dist/docs/require-example-language/empty-fence-fixes.d.ts.map +1 -0
  100. package/dist/docs/require-example-language/empty-fence-fixes.js +169 -0
  101. package/dist/docs/require-example-language/example-utilities.d.ts +70 -0
  102. package/dist/docs/require-example-language/example-utilities.d.ts.map +1 -0
  103. package/dist/docs/require-example-language/example-utilities.js +76 -0
  104. package/dist/docs/require-example-language/examples.d.ts +36 -0
  105. package/dist/docs/require-example-language/examples.d.ts.map +1 -0
  106. package/dist/docs/require-example-language/examples.js +181 -0
  107. package/dist/docs/require-example-language/fixes.d.ts +49 -0
  108. package/dist/docs/require-example-language/fixes.d.ts.map +1 -0
  109. package/dist/docs/require-example-language/fixes.js +182 -0
  110. package/dist/docs/require-example-language/index.d.ts +3 -0
  111. package/dist/docs/require-example-language/index.d.ts.map +1 -0
  112. package/dist/docs/require-example-language/index.js +2 -0
  113. package/dist/docs/require-example-language/reporting.d.ts +60 -0
  114. package/dist/docs/require-example-language/reporting.d.ts.map +1 -0
  115. package/dist/docs/require-example-language/reporting.js +145 -0
  116. package/dist/docs/require-example-language/rule.d.ts +7 -0
  117. package/dist/docs/require-example-language/rule.d.ts.map +1 -0
  118. package/dist/docs/require-example-language/rule.js +34 -0
  119. package/dist/docs/require-example-language/types.d.ts +22 -0
  120. package/dist/docs/require-example-language/types.d.ts.map +1 -0
  121. package/dist/docs/require-example-language/types.js +2 -0
  122. package/dist/docs/single-line-jsdoc/index.d.ts +2 -0
  123. package/dist/docs/single-line-jsdoc/index.d.ts.map +1 -0
  124. package/dist/docs/single-line-jsdoc/index.js +2 -0
  125. package/dist/docs/single-line-jsdoc/rule.d.ts +5 -0
  126. package/dist/docs/single-line-jsdoc/rule.d.ts.map +1 -0
  127. package/dist/docs/single-line-jsdoc/rule.js +196 -0
  128. package/dist/docs/single-line-jsdoc/single-line-jsdoc-content.d.ts +16 -0
  129. package/dist/docs/single-line-jsdoc/single-line-jsdoc-content.d.ts.map +1 -0
  130. package/dist/docs/single-line-jsdoc/single-line-jsdoc-content.js +95 -0
  131. package/dist/docs/single-line-jsdoc/single-line-jsdoc-utilities.d.ts +25 -0
  132. package/dist/docs/single-line-jsdoc/single-line-jsdoc-utilities.d.ts.map +1 -0
  133. package/dist/docs/single-line-jsdoc/single-line-jsdoc-utilities.js +140 -0
  134. package/dist/docs/test-helpers.d.ts +50 -0
  135. package/dist/docs/test-helpers.d.ts.map +1 -0
  136. package/dist/docs/test-helpers.js +107 -0
  137. package/dist/index.d.ts +6 -0
  138. package/dist/index.d.ts.map +1 -0
  139. package/dist/index.js +6 -0
  140. package/dist/presets.d.ts +10 -0
  141. package/dist/presets.d.ts.map +1 -0
  142. package/dist/presets.js +50 -0
  143. package/dist/rules/index.d.ts +5 -0
  144. package/dist/rules/index.d.ts.map +1 -0
  145. package/dist/rules/index.js +6 -0
  146. package/dist/testing/aaa/analyzer.d.ts +36 -0
  147. package/dist/testing/aaa/analyzer.d.ts.map +1 -0
  148. package/dist/testing/aaa/analyzer.js +490 -0
  149. package/dist/testing/aaa/index.d.ts +3 -0
  150. package/dist/testing/aaa/index.d.ts.map +1 -0
  151. package/dist/testing/aaa/index.js +2 -0
  152. package/dist/testing/aaa/types.d.ts +31 -0
  153. package/dist/testing/aaa/types.d.ts.map +1 -0
  154. package/dist/testing/aaa/types.js +2 -0
  155. package/dist/testing/assert-actual-expected-names/index.d.ts +2 -0
  156. package/dist/testing/assert-actual-expected-names/index.d.ts.map +1 -0
  157. package/dist/testing/assert-actual-expected-names/index.js +2 -0
  158. package/dist/testing/assert-actual-expected-names/rule.d.ts +4 -0
  159. package/dist/testing/assert-actual-expected-names/rule.d.ts.map +1 -0
  160. package/dist/testing/assert-actual-expected-names/rule.js +54 -0
  161. package/dist/testing/enforce-aaa-phase-purity/index.d.ts +2 -0
  162. package/dist/testing/enforce-aaa-phase-purity/index.d.ts.map +1 -0
  163. package/dist/testing/enforce-aaa-phase-purity/index.js +2 -0
  164. package/dist/testing/enforce-aaa-phase-purity/rule.d.ts +4 -0
  165. package/dist/testing/enforce-aaa-phase-purity/rule.d.ts.map +1 -0
  166. package/dist/testing/enforce-aaa-phase-purity/rule.js +110 -0
  167. package/dist/testing/enforce-aaa-structure/index.d.ts +2 -0
  168. package/dist/testing/enforce-aaa-structure/index.d.ts.map +1 -0
  169. package/dist/testing/enforce-aaa-structure/index.js +2 -0
  170. package/dist/testing/enforce-aaa-structure/rule.d.ts +4 -0
  171. package/dist/testing/enforce-aaa-structure/rule.d.ts.map +1 -0
  172. package/dist/testing/enforce-aaa-structure/rule.js +48 -0
  173. package/dist/testing/index.d.ts +9 -0
  174. package/dist/testing/index.d.ts.map +1 -0
  175. package/dist/testing/index.js +9 -0
  176. package/dist/testing/prefer-vi-mocked-import/fix.d.ts +16 -0
  177. package/dist/testing/prefer-vi-mocked-import/fix.d.ts.map +1 -0
  178. package/dist/testing/prefer-vi-mocked-import/fix.js +224 -0
  179. package/dist/testing/prefer-vi-mocked-import/index.d.ts +2 -0
  180. package/dist/testing/prefer-vi-mocked-import/index.d.ts.map +1 -0
  181. package/dist/testing/prefer-vi-mocked-import/index.js +2 -0
  182. package/dist/testing/prefer-vi-mocked-import/match-bindings.d.ts +16 -0
  183. package/dist/testing/prefer-vi-mocked-import/match-bindings.d.ts.map +1 -0
  184. package/dist/testing/prefer-vi-mocked-import/match-bindings.js +52 -0
  185. package/dist/testing/prefer-vi-mocked-import/match-declarations.d.ts +16 -0
  186. package/dist/testing/prefer-vi-mocked-import/match-declarations.d.ts.map +1 -0
  187. package/dist/testing/prefer-vi-mocked-import/match-declarations.js +99 -0
  188. package/dist/testing/prefer-vi-mocked-import/match-helpers.d.ts +66 -0
  189. package/dist/testing/prefer-vi-mocked-import/match-helpers.d.ts.map +1 -0
  190. package/dist/testing/prefer-vi-mocked-import/match-helpers.js +102 -0
  191. package/dist/testing/prefer-vi-mocked-import/match-imports.d.ts +17 -0
  192. package/dist/testing/prefer-vi-mocked-import/match-imports.d.ts.map +1 -0
  193. package/dist/testing/prefer-vi-mocked-import/match-imports.js +156 -0
  194. package/dist/testing/prefer-vi-mocked-import/match-rewrites.d.ts +42 -0
  195. package/dist/testing/prefer-vi-mocked-import/match-rewrites.d.ts.map +1 -0
  196. package/dist/testing/prefer-vi-mocked-import/match-rewrites.js +119 -0
  197. package/dist/testing/prefer-vi-mocked-import/match-walk.d.ts +13 -0
  198. package/dist/testing/prefer-vi-mocked-import/match-walk.d.ts.map +1 -0
  199. package/dist/testing/prefer-vi-mocked-import/match-walk.js +62 -0
  200. package/dist/testing/prefer-vi-mocked-import/match.d.ts +15 -0
  201. package/dist/testing/prefer-vi-mocked-import/match.d.ts.map +1 -0
  202. package/dist/testing/prefer-vi-mocked-import/match.js +193 -0
  203. package/dist/testing/prefer-vi-mocked-import/rule.d.ts +5 -0
  204. package/dist/testing/prefer-vi-mocked-import/rule.d.ts.map +1 -0
  205. package/dist/testing/prefer-vi-mocked-import/rule.js +32 -0
  206. package/dist/testing/prefer-vi-mocked-import/types.d.ts +83 -0
  207. package/dist/testing/prefer-vi-mocked-import/types.d.ts.map +1 -0
  208. package/dist/testing/prefer-vi-mocked-import/types.js +2 -0
  209. package/dist/testing/require-aaa-sections/index.d.ts +2 -0
  210. package/dist/testing/require-aaa-sections/index.d.ts.map +1 -0
  211. package/dist/testing/require-aaa-sections/index.js +2 -0
  212. package/dist/testing/require-aaa-sections/rule.d.ts +4 -0
  213. package/dist/testing/require-aaa-sections/rule.d.ts.map +1 -0
  214. package/dist/testing/require-aaa-sections/rule.js +111 -0
  215. package/dist/testing/require-act-result-capture/index.d.ts +2 -0
  216. package/dist/testing/require-act-result-capture/index.d.ts.map +1 -0
  217. package/dist/testing/require-act-result-capture/index.js +2 -0
  218. package/dist/testing/require-act-result-capture/rule.d.ts +4 -0
  219. package/dist/testing/require-act-result-capture/rule.d.ts.map +1 -0
  220. package/dist/testing/require-act-result-capture/rule.js +34 -0
  221. package/dist/testing/require-test-companion/index.d.ts +3 -0
  222. package/dist/testing/require-test-companion/index.d.ts.map +1 -0
  223. package/dist/testing/require-test-companion/index.js +3 -0
  224. package/dist/testing/require-test-companion/require-test-companion-listeners.d.ts +16 -0
  225. package/dist/testing/require-test-companion/require-test-companion-listeners.d.ts.map +1 -0
  226. package/dist/testing/require-test-companion/require-test-companion-listeners.js +145 -0
  227. package/dist/testing/require-test-companion/require-test-companion-options.d.ts +54 -0
  228. package/dist/testing/require-test-companion/require-test-companion-options.d.ts.map +1 -0
  229. package/dist/testing/require-test-companion/require-test-companion-options.js +112 -0
  230. package/dist/testing/require-test-companion/require-test-companion-test-helpers.d.ts +51 -0
  231. package/dist/testing/require-test-companion/require-test-companion-test-helpers.d.ts.map +1 -0
  232. package/dist/testing/require-test-companion/require-test-companion-test-helpers.js +183 -0
  233. package/dist/testing/require-test-companion/require-test-companion-utilities.d.ts +28 -0
  234. package/dist/testing/require-test-companion/require-test-companion-utilities.d.ts.map +1 -0
  235. package/dist/testing/require-test-companion/require-test-companion-utilities.js +26 -0
  236. package/dist/testing/require-test-companion/rule.d.ts +5 -0
  237. package/dist/testing/require-test-companion/rule.d.ts.map +1 -0
  238. package/dist/testing/require-test-companion/rule.js +57 -0
  239. package/dist/testing/require-test-companion/types.d.ts +11 -0
  240. package/dist/testing/require-test-companion/types.d.ts.map +1 -0
  241. package/dist/testing/require-test-companion/types.js +2 -0
  242. package/dist/testing/single-act-statement/index.d.ts +2 -0
  243. package/dist/testing/single-act-statement/index.d.ts.map +1 -0
  244. package/dist/testing/single-act-statement/index.js +2 -0
  245. package/dist/testing/single-act-statement/rule.d.ts +4 -0
  246. package/dist/testing/single-act-statement/rule.d.ts.map +1 -0
  247. package/dist/testing/single-act-statement/rule.js +33 -0
  248. package/package.json +106 -0
@@ -0,0 +1,90 @@
1
+ import { SourceCode } from "eslint";
2
+ import path from "node:path";
3
+ import { barrelFilesExportsOnlyRule } from "./exports-only-rule";
4
+ import { createProgram, createRepoDirectory } from "./test-helpers";
5
+ /**
6
+ * Builds a rule context for running the rule.
7
+ * @param parameters Context parameters and report sink.
8
+ * @returns The ESLint rule context.
9
+ * @example
10
+ * ```typescript
11
+ * const context = createRuleContext({ filename, reports, sourceCode });
12
+ * ```
13
+ */
14
+ const createRuleContext = (parameters) => ({
15
+ cwd: process.cwd(),
16
+ filename: parameters.filename,
17
+ id: "barrel-files-exports-only",
18
+ languageOptions: {
19
+ ecmaVersion: "latest",
20
+ sourceType: "module",
21
+ },
22
+ options: parameters.options === void 0 ? [] : [parameters.options],
23
+ parserOptions: {},
24
+ parserPath: void 0,
25
+ physicalFilename: parameters.filename,
26
+ report: (report) => {
27
+ const { messageId } = report;
28
+ parameters.reports.push({ messageId });
29
+ },
30
+ settings: {},
31
+ sourceCode: parameters.sourceCode,
32
+ });
33
+ /**
34
+ * Runs the rule against the provided AST body.
35
+ * @param filename Target filename.
36
+ * @param body AST program body.
37
+ * @param options Rule options when provided.
38
+ * @returns The captured rule reports.
39
+ * @example
40
+ * ```typescript
41
+ * const reports = runRule("index.ts", createBody());
42
+ * ```
43
+ */
44
+ const runRule = (filename, body, options) => {
45
+ const reports = [];
46
+ const sourceCode = new SourceCode("", createProgram(body));
47
+ const context = createRuleContext({
48
+ filename,
49
+ reports,
50
+ sourceCode,
51
+ ...(options === void 0 ? {} : { options }),
52
+ });
53
+ const listeners = barrelFilesExportsOnlyRule.create(context);
54
+ const programListener = listeners.Program;
55
+ programListener?.(context.sourceCode.ast);
56
+ return reports;
57
+ };
58
+ /**
59
+ * Creates temporary file runners for the rule.
60
+ * @param temporaryDirectories Directories created during the run.
61
+ * @returns Helpers for running the rule in temp folders.
62
+ * @example
63
+ * ```typescript
64
+ * const runner = createTemporaryRunner([]);
65
+ * ```
66
+ */
67
+ const createTemporaryRunner = (temporaryDirectories) => {
68
+ const runForTemporaryFile = (options) => {
69
+ const directory = createRepoDirectory(options.root);
70
+ temporaryDirectories.push(directory);
71
+ const filePath = path.join(directory, options.filename);
72
+ return runRule(filePath, options.body, options.options);
73
+ };
74
+ const runDefaultIndex = (body) => runForTemporaryFile({ body, filename: "index.ts", root: "src" });
75
+ const runTemporaryIndex = (body, options) => runForTemporaryFile({
76
+ body,
77
+ filename: "index.ts",
78
+ root: "tmp",
79
+ ...(options === void 0 ? {} : { options }),
80
+ });
81
+ const runTemporaryFeature = (body, options) => runForTemporaryFile({
82
+ body,
83
+ filename: "feature.ts",
84
+ root: "tmp",
85
+ ...(options === void 0 ? {} : { options }),
86
+ });
87
+ return { runDefaultIndex, runTemporaryFeature, runTemporaryIndex };
88
+ };
89
+ export { createTemporaryRunner, runRule };
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0cy1vbmx5LXJ1bGUtdGVzdC11dGlsaXRpZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXJjaGl0ZWN0dXJlL2NvbnNpc3RlbnQtYmFycmVsLWZpbGVzL2V4cG9ydHMtb25seS1ydWxlLXRlc3QtdXRpbGl0aWVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDcEMsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBSTdCLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQThEcEU7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLGlCQUFpQixHQUFHLENBQ3hCLFVBQWlDLEVBQ2YsRUFBRSxDQUNwQixDQUFDO0lBQ0MsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHLEVBQUU7SUFDbEIsUUFBUSxFQUFFLFVBQVUsQ0FBQyxRQUFRO0lBQzdCLEVBQUUsRUFBRSwyQkFBMkI7SUFDL0IsZUFBZSxFQUFFO1FBQ2YsV0FBVyxFQUFFLFFBQVE7UUFDckIsVUFBVSxFQUFFLFFBQVE7S0FDckI7SUFDRCxPQUFPLEVBQUUsVUFBVSxDQUFDLE9BQU8sS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUM7SUFDbEUsYUFBYSxFQUFFLEVBQUU7SUFDakIsVUFBVSxFQUFFLEtBQUssQ0FBQztJQUNsQixnQkFBZ0IsRUFBRSxVQUFVLENBQUMsUUFBUTtJQUNyQyxNQUFNLEVBQUUsQ0FBQyxNQUE2QixFQUFRLEVBQUU7UUFDOUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQXVDLENBQUM7UUFDOUQsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFDRCxRQUFRLEVBQUUsRUFBRTtJQUNaLFVBQVUsRUFBRSxVQUFVLENBQUMsVUFBVTtDQUNsQyxDQUFnQyxDQUFDO0FBRXBDOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLE9BQU8sR0FBRyxDQUNkLFFBQWdCLEVBQ2hCLElBQTRCLEVBQzVCLE9BQXVDLEVBQ3pCLEVBQUU7SUFDaEIsTUFBTSxPQUFPLEdBQWlCLEVBQUUsQ0FBQztJQUNqQyxNQUFNLFVBQVUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxFQUFFLEVBQUUsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDM0QsTUFBTSxPQUFPLEdBQUcsaUJBQWlCLENBQUM7UUFDaEMsUUFBUTtRQUNSLE9BQU87UUFDUCxVQUFVO1FBQ1YsR0FBRyxDQUFDLE9BQU8sS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDO0tBQzNDLENBQUMsQ0FBQztJQUNILE1BQU0sU0FBUyxHQUFHLDBCQUEwQixDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3RCxNQUFNLGVBQWUsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDO0lBRTFDLGVBQWUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFMUMsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQyxDQUFDO0FBRUY7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLHFCQUFxQixHQUFHLENBQzVCLG9CQUE4QixFQUNiLEVBQUU7SUFDbkIsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLE9BQTZCLEVBQWdCLEVBQUU7UUFDMUUsTUFBTSxTQUFTLEdBQUcsbUJBQW1CLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BELG9CQUFvQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNyQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFeEQsT0FBTyxPQUFPLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzFELENBQUMsQ0FBQztJQUVGLE1BQU0sZUFBZSxHQUFHLENBQUMsSUFBNEIsRUFBZ0IsRUFBRSxDQUNyRSxtQkFBbUIsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBRW5FLE1BQU0saUJBQWlCLEdBQUcsQ0FDeEIsSUFBNEIsRUFDNUIsT0FBdUMsRUFDekIsRUFBRSxDQUNoQixtQkFBbUIsQ0FBQztRQUNsQixJQUFJO1FBQ0osUUFBUSxFQUFFLFVBQVU7UUFDcEIsSUFBSSxFQUFFLEtBQUs7UUFDWCxHQUFHLENBQUMsT0FBTyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUM7S0FDM0MsQ0FBQyxDQUFDO0lBRUwsTUFBTSxtQkFBbUIsR0FBRyxDQUMxQixJQUE0QixFQUM1QixPQUF1QyxFQUN6QixFQUFFLENBQ2hCLG1CQUFtQixDQUFDO1FBQ2xCLElBQUk7UUFDSixRQUFRLEVBQUUsWUFBWTtRQUN0QixJQUFJLEVBQUUsS0FBSztRQUNYLEdBQUcsQ0FBQyxPQUFPLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQztLQUMzQyxDQUFDLENBQUM7SUFFTCxPQUFPLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLENBQUM7QUFDckUsQ0FBQyxDQUFDO0FBRUYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE9BQU8sRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBSdWxlIH0gZnJvbSBcImVzbGludFwiO1xuaW1wb3J0IHR5cGUgKiBhcyBFU1RyZWUgZnJvbSBcImVzdHJlZVwiO1xuXG5pbXBvcnQgeyBTb3VyY2VDb2RlIH0gZnJvbSBcImVzbGludFwiO1xuaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuXG5pbXBvcnQgdHlwZSB7IEJhcnJlbEZpbGVzRXhwb3J0c09ubHlPcHRpb25zIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuaW1wb3J0IHsgYmFycmVsRmlsZXNFeHBvcnRzT25seVJ1bGUgfSBmcm9tIFwiLi9leHBvcnRzLW9ubHktcnVsZVwiO1xuaW1wb3J0IHsgY3JlYXRlUHJvZ3JhbSwgY3JlYXRlUmVwb0RpcmVjdG9yeSB9IGZyb20gXCIuL3Rlc3QtaGVscGVyc1wiO1xuXG4vKiogVHlwZSBkZWZpbml0aW9uIGZvciBydWxlIGRhdGEuICovXG5pbnRlcmZhY2UgUmVwb3J0RGVzY3JpcHRvcldpdGhNZXNzYWdlSWQge1xuICAvKiogTWVzc2FnZUlkIGZpZWxkIHZhbHVlLiAqL1xuICBtZXNzYWdlSWQ/OiBzdHJpbmc7XG59XG5cbi8qKiBUeXBlIGRlZmluaXRpb24gZm9yIHJ1bGUgZGF0YS4gKi9cbmludGVyZmFjZSBSdWxlQ29udGV4dFBhcmFtZXRlcnMge1xuICAvKiogRmlsZW5hbWUgZmllbGQgdmFsdWUuICovXG4gIGZpbGVuYW1lOiBzdHJpbmc7XG5cbiAgLyoqIE9wdGlvbnMgaGVscGVyIHZhbHVlLiAqL1xuICBvcHRpb25zPzogQmFycmVsRmlsZXNFeHBvcnRzT25seU9wdGlvbnM7XG5cbiAgLyoqIFJlcG9ydHMgZmllbGQgdmFsdWUuICovXG4gIHJlcG9ydHM6IFJ1bGVSZXBvcnRbXTtcblxuICAvKiogU291cmNlQ29kZSBmaWVsZCB2YWx1ZS4gKi9cbiAgc291cmNlQ29kZTogU291cmNlQ29kZTtcbn1cblxuLyoqIFR5cGUgZGVmaW5pdGlvbiBmb3IgcnVsZSBkYXRhLiAqL1xuaW50ZXJmYWNlIFJ1bGVSZXBvcnQge1xuICAvKiogTWVzc2FnZUlkIGhlbHBlciB2YWx1ZS4gKi9cbiAgbWVzc2FnZUlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbi8qKiBUeXBlIGRlZmluaXRpb24gZm9yIHJ1bGUgZGF0YS4gKi9cbmludGVyZmFjZSBUZW1wb3JhcnlGaWxlT3B0aW9ucyB7XG4gIC8qKiBCb2R5IGZpZWxkIHZhbHVlLiAqL1xuICBib2R5OiBFU1RyZWUuUHJvZ3JhbVtcImJvZHlcIl07XG5cbiAgLyoqIEZpbGVuYW1lIGZpZWxkIHZhbHVlLiAqL1xuICBmaWxlbmFtZTogc3RyaW5nO1xuXG4gIC8qKiBPcHRpb25zIGhlbHBlciB2YWx1ZS4gKi9cbiAgb3B0aW9ucz86IEJhcnJlbEZpbGVzRXhwb3J0c09ubHlPcHRpb25zO1xuXG4gIC8qKiBSb290IGZpZWxkIHZhbHVlLiAqL1xuICByb290OiBcInNyY1wiIHwgXCJ0bXBcIjtcbn1cblxuLyoqIFR5cGUgZGVmaW5pdGlvbiBmb3IgcnVsZSBkYXRhLiAqL1xuaW50ZXJmYWNlIFRlbXBvcmFyeVJ1bm5lciB7XG4gIC8qKiBSdW5EZWZhdWx0SW5kZXggZmllbGQgdmFsdWUuICovXG4gIHJ1bkRlZmF1bHRJbmRleDogKGJvZHk6IEVTVHJlZS5Qcm9ncmFtW1wiYm9keVwiXSkgPT4gUnVsZVJlcG9ydFtdO1xuXG4gIC8qKiBSdW5UZW1wb3JhcnlGZWF0dXJlIGZpZWxkIHZhbHVlLiAqL1xuICBydW5UZW1wb3JhcnlGZWF0dXJlOiAoXG4gICAgYm9keTogRVNUcmVlLlByb2dyYW1bXCJib2R5XCJdLFxuICAgIG9wdGlvbnM/OiBCYXJyZWxGaWxlc0V4cG9ydHNPbmx5T3B0aW9ucyxcbiAgKSA9PiBSdWxlUmVwb3J0W107XG5cbiAgLyoqIFJ1blRlbXBvcmFyeUluZGV4IGZpZWxkIHZhbHVlLiAqL1xuICBydW5UZW1wb3JhcnlJbmRleDogKFxuICAgIGJvZHk6IEVTVHJlZS5Qcm9ncmFtW1wiYm9keVwiXSxcbiAgICBvcHRpb25zPzogQmFycmVsRmlsZXNFeHBvcnRzT25seU9wdGlvbnMsXG4gICkgPT4gUnVsZVJlcG9ydFtdO1xufVxuXG4vKipcbiAqIEJ1aWxkcyBhIHJ1bGUgY29udGV4dCBmb3IgcnVubmluZyB0aGUgcnVsZS5cbiAqIEBwYXJhbSBwYXJhbWV0ZXJzIENvbnRleHQgcGFyYW1ldGVycyBhbmQgcmVwb3J0IHNpbmsuXG4gKiBAcmV0dXJucyBUaGUgRVNMaW50IHJ1bGUgY29udGV4dC5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBjb250ZXh0ID0gY3JlYXRlUnVsZUNvbnRleHQoeyBmaWxlbmFtZSwgcmVwb3J0cywgc291cmNlQ29kZSB9KTtcbiAqIGBgYFxuICovXG5jb25zdCBjcmVhdGVSdWxlQ29udGV4dCA9IChcbiAgcGFyYW1ldGVyczogUnVsZUNvbnRleHRQYXJhbWV0ZXJzLFxuKTogUnVsZS5SdWxlQ29udGV4dCA9PlxuICAoe1xuICAgIGN3ZDogcHJvY2Vzcy5jd2QoKSxcbiAgICBmaWxlbmFtZTogcGFyYW1ldGVycy5maWxlbmFtZSxcbiAgICBpZDogXCJiYXJyZWwtZmlsZXMtZXhwb3J0cy1vbmx5XCIsXG4gICAgbGFuZ3VhZ2VPcHRpb25zOiB7XG4gICAgICBlY21hVmVyc2lvbjogXCJsYXRlc3RcIixcbiAgICAgIHNvdXJjZVR5cGU6IFwibW9kdWxlXCIsXG4gICAgfSxcbiAgICBvcHRpb25zOiBwYXJhbWV0ZXJzLm9wdGlvbnMgPT09IHZvaWQgMCA/IFtdIDogW3BhcmFtZXRlcnMub3B0aW9uc10sXG4gICAgcGFyc2VyT3B0aW9uczoge30sXG4gICAgcGFyc2VyUGF0aDogdm9pZCAwLFxuICAgIHBoeXNpY2FsRmlsZW5hbWU6IHBhcmFtZXRlcnMuZmlsZW5hbWUsXG4gICAgcmVwb3J0OiAocmVwb3J0OiBSdWxlLlJlcG9ydERlc2NyaXB0b3IpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IHsgbWVzc2FnZUlkIH0gPSByZXBvcnQgYXMgUmVwb3J0RGVzY3JpcHRvcldpdGhNZXNzYWdlSWQ7XG4gICAgICBwYXJhbWV0ZXJzLnJlcG9ydHMucHVzaCh7IG1lc3NhZ2VJZCB9KTtcbiAgICB9LFxuICAgIHNldHRpbmdzOiB7fSxcbiAgICBzb3VyY2VDb2RlOiBwYXJhbWV0ZXJzLnNvdXJjZUNvZGUsXG4gIH0pIGFzIHVua25vd24gYXMgUnVsZS5SdWxlQ29udGV4dDtcblxuLyoqXG4gKiBSdW5zIHRoZSBydWxlIGFnYWluc3QgdGhlIHByb3ZpZGVkIEFTVCBib2R5LlxuICogQHBhcmFtIGZpbGVuYW1lIFRhcmdldCBmaWxlbmFtZS5cbiAqIEBwYXJhbSBib2R5IEFTVCBwcm9ncmFtIGJvZHkuXG4gKiBAcGFyYW0gb3B0aW9ucyBSdWxlIG9wdGlvbnMgd2hlbiBwcm92aWRlZC5cbiAqIEByZXR1cm5zIFRoZSBjYXB0dXJlZCBydWxlIHJlcG9ydHMuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgcmVwb3J0cyA9IHJ1blJ1bGUoXCJpbmRleC50c1wiLCBjcmVhdGVCb2R5KCkpO1xuICogYGBgXG4gKi9cbmNvbnN0IHJ1blJ1bGUgPSAoXG4gIGZpbGVuYW1lOiBzdHJpbmcsXG4gIGJvZHk6IEVTVHJlZS5Qcm9ncmFtW1wiYm9keVwiXSxcbiAgb3B0aW9ucz86IEJhcnJlbEZpbGVzRXhwb3J0c09ubHlPcHRpb25zLFxuKTogUnVsZVJlcG9ydFtdID0+IHtcbiAgY29uc3QgcmVwb3J0czogUnVsZVJlcG9ydFtdID0gW107XG4gIGNvbnN0IHNvdXJjZUNvZGUgPSBuZXcgU291cmNlQ29kZShcIlwiLCBjcmVhdGVQcm9ncmFtKGJvZHkpKTtcbiAgY29uc3QgY29udGV4dCA9IGNyZWF0ZVJ1bGVDb250ZXh0KHtcbiAgICBmaWxlbmFtZSxcbiAgICByZXBvcnRzLFxuICAgIHNvdXJjZUNvZGUsXG4gICAgLi4uKG9wdGlvbnMgPT09IHZvaWQgMCA/IHt9IDogeyBvcHRpb25zIH0pLFxuICB9KTtcbiAgY29uc3QgbGlzdGVuZXJzID0gYmFycmVsRmlsZXNFeHBvcnRzT25seVJ1bGUuY3JlYXRlKGNvbnRleHQpO1xuICBjb25zdCBwcm9ncmFtTGlzdGVuZXIgPSBsaXN0ZW5lcnMuUHJvZ3JhbTtcblxuICBwcm9ncmFtTGlzdGVuZXI/Lihjb250ZXh0LnNvdXJjZUNvZGUuYXN0KTtcblxuICByZXR1cm4gcmVwb3J0cztcbn07XG5cbi8qKlxuICogQ3JlYXRlcyB0ZW1wb3JhcnkgZmlsZSBydW5uZXJzIGZvciB0aGUgcnVsZS5cbiAqIEBwYXJhbSB0ZW1wb3JhcnlEaXJlY3RvcmllcyBEaXJlY3RvcmllcyBjcmVhdGVkIGR1cmluZyB0aGUgcnVuLlxuICogQHJldHVybnMgSGVscGVycyBmb3IgcnVubmluZyB0aGUgcnVsZSBpbiB0ZW1wIGZvbGRlcnMuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgcnVubmVyID0gY3JlYXRlVGVtcG9yYXJ5UnVubmVyKFtdKTtcbiAqIGBgYFxuICovXG5jb25zdCBjcmVhdGVUZW1wb3JhcnlSdW5uZXIgPSAoXG4gIHRlbXBvcmFyeURpcmVjdG9yaWVzOiBzdHJpbmdbXSxcbik6IFRlbXBvcmFyeVJ1bm5lciA9PiB7XG4gIGNvbnN0IHJ1bkZvclRlbXBvcmFyeUZpbGUgPSAob3B0aW9uczogVGVtcG9yYXJ5RmlsZU9wdGlvbnMpOiBSdWxlUmVwb3J0W10gPT4ge1xuICAgIGNvbnN0IGRpcmVjdG9yeSA9IGNyZWF0ZVJlcG9EaXJlY3Rvcnkob3B0aW9ucy5yb290KTtcbiAgICB0ZW1wb3JhcnlEaXJlY3Rvcmllcy5wdXNoKGRpcmVjdG9yeSk7XG4gICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4oZGlyZWN0b3J5LCBvcHRpb25zLmZpbGVuYW1lKTtcblxuICAgIHJldHVybiBydW5SdWxlKGZpbGVQYXRoLCBvcHRpb25zLmJvZHksIG9wdGlvbnMub3B0aW9ucyk7XG4gIH07XG5cbiAgY29uc3QgcnVuRGVmYXVsdEluZGV4ID0gKGJvZHk6IEVTVHJlZS5Qcm9ncmFtW1wiYm9keVwiXSk6IFJ1bGVSZXBvcnRbXSA9PlxuICAgIHJ1bkZvclRlbXBvcmFyeUZpbGUoeyBib2R5LCBmaWxlbmFtZTogXCJpbmRleC50c1wiLCByb290OiBcInNyY1wiIH0pO1xuXG4gIGNvbnN0IHJ1blRlbXBvcmFyeUluZGV4ID0gKFxuICAgIGJvZHk6IEVTVHJlZS5Qcm9ncmFtW1wiYm9keVwiXSxcbiAgICBvcHRpb25zPzogQmFycmVsRmlsZXNFeHBvcnRzT25seU9wdGlvbnMsXG4gICk6IFJ1bGVSZXBvcnRbXSA9PlxuICAgIHJ1bkZvclRlbXBvcmFyeUZpbGUoe1xuICAgICAgYm9keSxcbiAgICAgIGZpbGVuYW1lOiBcImluZGV4LnRzXCIsXG4gICAgICByb290OiBcInRtcFwiLFxuICAgICAgLi4uKG9wdGlvbnMgPT09IHZvaWQgMCA/IHt9IDogeyBvcHRpb25zIH0pLFxuICAgIH0pO1xuXG4gIGNvbnN0IHJ1blRlbXBvcmFyeUZlYXR1cmUgPSAoXG4gICAgYm9keTogRVNUcmVlLlByb2dyYW1bXCJib2R5XCJdLFxuICAgIG9wdGlvbnM/OiBCYXJyZWxGaWxlc0V4cG9ydHNPbmx5T3B0aW9ucyxcbiAgKTogUnVsZVJlcG9ydFtdID0+XG4gICAgcnVuRm9yVGVtcG9yYXJ5RmlsZSh7XG4gICAgICBib2R5LFxuICAgICAgZmlsZW5hbWU6IFwiZmVhdHVyZS50c1wiLFxuICAgICAgcm9vdDogXCJ0bXBcIixcbiAgICAgIC4uLihvcHRpb25zID09PSB2b2lkIDAgPyB7fSA6IHsgb3B0aW9ucyB9KSxcbiAgICB9KTtcblxuICByZXR1cm4geyBydW5EZWZhdWx0SW5kZXgsIHJ1blRlbXBvcmFyeUZlYXR1cmUsIHJ1blRlbXBvcmFyeUluZGV4IH07XG59O1xuXG5leHBvcnQgeyBjcmVhdGVUZW1wb3JhcnlSdW5uZXIsIHJ1blJ1bGUgfTtcbiJdfQ==
@@ -0,0 +1,11 @@
1
+ import type { Rule } from "eslint";
2
+ /**
3
+ * ESLint rule enforcing re-export-only barrel files.
4
+ * @example
5
+ * ```typescript
6
+ * const rule = barrelFilesExportsOnlyRule;
7
+ * ```
8
+ */
9
+ declare const barrelFilesExportsOnlyRule: Rule.RuleModule;
10
+ export { barrelFilesExportsOnlyRule };
11
+ //# sourceMappingURL=exports-only-rule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exports-only-rule.d.ts","sourceRoot":"","sources":["../../../src/architecture/consistent-barrel-files/exports-only-rule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAO,IAAI,EAAE,MAAM,QAAQ,CAAC;AAsOxC;;;;;;GAMG;AACH,QAAA,MAAM,0BAA0B,EAAE,IAAI,CAAC,UA+CtC,CAAC;AAEF,OAAO,EAAE,0BAA0B,EAAE,CAAC"}
@@ -0,0 +1,218 @@
1
+ import { minimatch } from "minimatch";
2
+ import path from "node:path";
3
+ import { createRuleDocumentation } from "../../custom-rule-documentation";
4
+ /** Default value used by this module. */
5
+ const DEFAULT_BARREL_NAMES = ["index.ts", "index.tsx", "index.js", "index.jsx"];
6
+ /** Default folder globs for barrel exports-only checks. */
7
+ const DEFAULT_FOLDER_GLOBS = ["src/*/**"];
8
+ /**
9
+ * Normalizes a string list option into a clean list.
10
+ * @param value Raw option value.
11
+ * @param defaults Default list when the option is empty.
12
+ * @returns Normalized string list.
13
+ * @example
14
+ * ```typescript
15
+ * const names = normalizeList("index.ts", ["index.ts"]);
16
+ * ```
17
+ */
18
+ const normalizeList = (value, defaults) => {
19
+ if (Array.isArray(value)) {
20
+ return value
21
+ .filter((entry) => typeof entry === "string")
22
+ .map((entry) => entry.trim())
23
+ .filter((entry) => entry.length > 0);
24
+ }
25
+ if (typeof value === "string") {
26
+ const trimmed = value.trim();
27
+ return trimmed.length === 0 ? [] : [trimmed];
28
+ }
29
+ return [...defaults];
30
+ };
31
+ /**
32
+ * Builds the rule options state from raw options.
33
+ * @param options Raw rule options.
34
+ * @returns Normalized rule options.
35
+ * @example
36
+ * ```typescript
37
+ * const state = getOptions([{}]);
38
+ * ```
39
+ */
40
+ const getOptions = (options) => {
41
+ const rawOptions = options[0];
42
+ const folders = normalizeList(rawOptions?.folders, DEFAULT_FOLDER_GLOBS);
43
+ const names = normalizeList(rawOptions?.names, DEFAULT_BARREL_NAMES);
44
+ return { folders, names, namesSet: new Set(names) };
45
+ };
46
+ /**
47
+ * Checks whether the filename is valid for linting.
48
+ * @param filename Absolute filename.
49
+ * @returns True when the filename is lintable.
50
+ * @example
51
+ * ```typescript
52
+ * const ok = isLintableFilename("/repo/src/index.ts");
53
+ * ```
54
+ */
55
+ const isLintableFilename = (filename) => filename.length > 0 && path.isAbsolute(filename);
56
+ /**
57
+ * Normalizes a filename to a repo-relative path.
58
+ * @param filename Absolute filename.
59
+ * @returns Relative path using forward slashes.
60
+ * @example
61
+ * ```typescript
62
+ * const relative = normalizeRelativePath("/repo/src/index.ts");
63
+ * ```
64
+ */
65
+ const normalizeRelativePath = (filename) => path.relative(process.cwd(), filename).split(path.sep).join("/");
66
+ /**
67
+ * Checks whether a file path matches any configured folder globs.
68
+ * @param filename Absolute filename.
69
+ * @param folders Folder glob patterns.
70
+ * @returns True when the filename is within configured folders.
71
+ * @example
72
+ * ```typescript
73
+ * const ok = isPathInFolders("/repo/src/index.ts", ["src/**"]);
74
+ * ```
75
+ */
76
+ const isPathInFolders = (filename, folders) => {
77
+ const relativePath = normalizeRelativePath(filename);
78
+ if (relativePath.startsWith("..") || path.isAbsolute(relativePath)) {
79
+ return false;
80
+ }
81
+ return folders.some((folder) => minimatch(relativePath, folder, { dot: true }));
82
+ };
83
+ /**
84
+ * Determines whether a file should be linted by this rule.
85
+ * @param filename Absolute filename.
86
+ * @param options Normalized rule options.
87
+ * @returns True when the file should be checked.
88
+ * @example
89
+ * ```typescript
90
+ * const ok = shouldLintFile("/repo/src/index.ts", state);
91
+ * ```
92
+ */
93
+ const shouldLintFile = (filename, options) => {
94
+ if (!isLintableFilename(filename)) {
95
+ return false;
96
+ }
97
+ if (options.folders.length === 0 || options.names.length === 0) {
98
+ return false;
99
+ }
100
+ return isPathInFolders(filename, options.folders);
101
+ };
102
+ /**
103
+ * Determines whether a file is a barrel file under the rule options.
104
+ * @param filename Absolute filename.
105
+ * @param options Normalized rule options.
106
+ * @returns True when the file is a barrel file.
107
+ * @example
108
+ * ```typescript
109
+ * const ok = isBarrelFile("/repo/src/index.ts", state);
110
+ * ```
111
+ */
112
+ const isBarrelFile = (filename, options) => {
113
+ if (!shouldLintFile(filename, options)) {
114
+ return false;
115
+ }
116
+ return options.namesSet.has(path.basename(filename));
117
+ };
118
+ /**
119
+ * Checks whether a statement is allowed in a barrel file.
120
+ * @param statement Program statement node.
121
+ * @returns True when the statement is permitted.
122
+ * @example
123
+ * ```typescript
124
+ * const ok = isAllowedBarrelStatement(statement);
125
+ * ```
126
+ */
127
+ const isAllowedBarrelStatement = (statement) => {
128
+ if (statement.type === "ExportAllDeclaration") {
129
+ return true;
130
+ }
131
+ if (statement.type !== "ExportNamedDeclaration") {
132
+ return false;
133
+ }
134
+ const declaration = statement.declaration ?? void 0;
135
+ if (declaration !== void 0) {
136
+ return false;
137
+ }
138
+ const source = statement.source ?? void 0;
139
+ return source !== void 0;
140
+ };
141
+ /**
142
+ * Builds a rule listener for the supplied file.
143
+ * @param context Rule execution context.
144
+ * @param filename Absolute filename to lint.
145
+ * @param options Normalized rule options.
146
+ * @returns The rule listener for the file.
147
+ * @example
148
+ * ```typescript
149
+ * const listener = buildListenerForFile(context, filename, state);
150
+ * ```
151
+ */
152
+ const buildListenerForFile = (context, filename, options) => {
153
+ if (!isBarrelFile(filename, options)) {
154
+ return {};
155
+ }
156
+ return {
157
+ Program(node) {
158
+ for (const statement of node.body) {
159
+ if (!isAllowedBarrelStatement(statement)) {
160
+ context.report({
161
+ messageId: "invalidBarrelContent",
162
+ node: statement,
163
+ });
164
+ break;
165
+ }
166
+ }
167
+ },
168
+ };
169
+ };
170
+ /**
171
+ * ESLint rule enforcing re-export-only barrel files.
172
+ * @example
173
+ * ```typescript
174
+ * const rule = barrelFilesExportsOnlyRule;
175
+ * ```
176
+ */
177
+ const barrelFilesExportsOnlyRule = {
178
+ create(context) {
179
+ return buildListenerForFile(context, context.filename, getOptions(context.options));
180
+ },
181
+ meta: {
182
+ docs: createRuleDocumentation("barrel-files-exports-only", "Require barrel files to only contain re-export statements."),
183
+ messages: {
184
+ invalidBarrelContent: "Barrel files must only re-export from other modules and contain no imports or declarations.",
185
+ },
186
+ schema: [
187
+ {
188
+ additionalProperties: false,
189
+ properties: {
190
+ folders: {
191
+ oneOf: [
192
+ { type: "string" },
193
+ {
194
+ items: { type: "string" },
195
+ minItems: 1,
196
+ type: "array",
197
+ },
198
+ ],
199
+ },
200
+ names: {
201
+ oneOf: [
202
+ { type: "string" },
203
+ {
204
+ items: { type: "string" },
205
+ minItems: 1,
206
+ type: "array",
207
+ },
208
+ ],
209
+ },
210
+ },
211
+ type: "object",
212
+ },
213
+ ],
214
+ type: "problem",
215
+ },
216
+ };
217
+ export { barrelFilesExportsOnlyRule };
218
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0cy1vbmx5LXJ1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXJjaGl0ZWN0dXJlL2NvbnNpc3RlbnQtYmFycmVsLWZpbGVzL2V4cG9ydHMtb25seS1ydWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDdEMsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBSTdCLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRTFFLHlDQUF5QztBQUN6QyxNQUFNLG9CQUFvQixHQUFHLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFFaEYsMkRBQTJEO0FBQzNELE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQWMxQzs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLGFBQWEsR0FBRyxDQUFDLEtBQWMsRUFBRSxRQUFrQixFQUFZLEVBQUU7SUFDckUsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDekIsT0FBTyxLQUFLO2FBQ1QsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFtQixFQUFFLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDO2FBQzdELEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO2FBQzVCLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM5QixNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDN0IsT0FBTyxPQUFPLENBQUMsTUFBTSxLQUFLLENB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QTBCLEdBQW9CO0lBQ2xELE1BQU0sQ0FBQyxPQUF5QjtRQUM5QixPQUFPLG9CQUFvQixDQUN6QixPQUFPLEVBQ1AsT0FBTyxDQUFDLFFBQVEsRUFDaEIsVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FDNUIsQ0FBQztJQUNKLENBQUM7SUFDRCxJQUFJLEVBQUU7UUFDSixJQUFJLEVBQUUsdUJBQXVCLENBQzNCLDJCQUEyQixFQUMzQiw0REFBNEQsQ0FDN0Q7UUFDRCxRQUFRLEVBQUU7WUFDUixvQkFBb0IsRUFDbEIsNkZBQTZGO1NBQ2hHO1FBQ0QsTUFBTSxFQUFFO1lBQ047Z0JBQ0Usb0JBQW9CLEVBQUUsS0FBSztnQkFDM0IsVUFBVSxFQUFFO29CQUNWLE9BQU8sRUFBRTt3QkFDUCxLQUFLLEVBQUU7NEJBQ0wsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFOzRCQUNsQjtnQ0FDRSxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO2dDQUN6QixRQUFRLEVBQUUsQ0FBQztnQ0FDWCxJQUFJLEVBQUUsT0FBTzs2QkFDZDt5QkFDRjtxQkFDRjtvQkFDRCxLQUFLLEVBQUU7d0JBQ0wsS0FBSyxFQUFFOzRCQUNMLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTs0QkFDbEI7Z0NBQ0UsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtnQ0FDekIsUUFBUSxFQUFFLENBQUM7Z0NBQ1gsSUFBSSxFQUFFLE9BQU87NkJBQ2Q7eUJBQ0Y7cUJBQ0Y7aUJBQ0Y7Z0JBQ0QsSUFBSSxFQUFFLFFBQVE7YUFDZjtTQUNGO1FBQ0QsSUFBSSxFQUFFLFNBQVM7S0FDaEI7Q0FDRixDQUFDO0FBRUYsT0FBTyxFQUFFLDBCQUEwQixFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFTVCwgUnVsZSB9IGZyb20gXCJlc2xpbnRcIjtcblxuaW1wb3J0IHsgbWluaW1hdGNoIH0gZnJvbSBcIm1pbmltYXRjaFwiO1xuaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuXG5pbXBvcnQgdHlwZSB7IEJhcnJlbEZpbGVzRXhwb3J0c09ubHlPcHRpb25zIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuaW1wb3J0IHsgY3JlYXRlUnVsZURvY3VtZW50YXRpb24gfSBmcm9tIFwiLi4vLi4vY3VzdG9tLXJ1bGUtZG9jdW1lbnRhdGlvblwiO1xuXG4vKiogRGVmYXVsdCB2YWx1ZSB1c2VkIGJ5IHRoaXMgbW9kdWxlLiAqL1xuY29uc3QgREVGQVVMVF9CQVJSRUxfTkFNRVMgPSBbXCJpbmRleC50c1wiLCBcImluZGV4LnRzeFwiLCBcImluZGV4LmpzXCIsIFwiaW5kZXguanN4XCJdO1xuXG4vKiogRGVmYXVsdCBmb2xkZXIgZ2xvYnMgZm9yIGJhcnJlbCBleHBvcnRzLW9ubHkgY2hlY2tzLiAqL1xuY29uc3QgREVGQVVMVF9GT0xERVJfR0xPQlMgPSBbXCJzcmMvKi8qKlwiXTtcblxuLyoqIFR5cGUgZGVmaW5pdGlvbiBmb3IgcnVsZSBkYXRhLiAqL1xuaW50ZXJmYWNlIEJhcnJlbEZpbGVzRXhwb3J0c09ubHlTdGF0ZSB7XG4gIC8qKiBGb2xkZXJzIGZpZWxkIHZhbHVlLiAqL1xuICBmb2xkZXJzOiBzdHJpbmdbXTtcblxuICAvKiogTmFtZXMgZmllbGQgdmFsdWUuICovXG4gIG5hbWVzOiBzdHJpbmdbXTtcblxuICAvKiogTmFtZXNTZXQgZmllbGQgdmFsdWUuICovXG4gIG5hbWVzU2V0OiBTZXQ8c3RyaW5nPjtcbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGEgc3RyaW5nIGxpc3Qgb3B0aW9uIGludG8gYSBjbGVhbiBsaXN0LlxuICogQHBhcmFtIHZhbHVlIFJhdyBvcHRpb24gdmFsdWUuXG4gKiBAcGFyYW0gZGVmYXVsdHMgRGVmYXVsdCBsaXN0IHdoZW4gdGhlIG9wdGlvbiBpcyBlbXB0eS5cbiAqIEByZXR1cm5zIE5vcm1hbGl6ZWQgc3RyaW5nIGxpc3QuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgbmFtZXMgPSBub3JtYWxpemVMaXN0KFwiaW5kZXgudHNcIiwgW1wiaW5kZXgudHNcIl0pO1xuICogYGBgXG4gKi9cbmNvbnN0IG5vcm1hbGl6ZUxpc3QgPSAodmFsdWU6IHVua25vd24sIGRlZmF1bHRzOiBzdHJpbmdbXSk6IHN0cmluZ1tdID0+IHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlXG4gICAgICAuZmlsdGVyKChlbnRyeSk6IGVudHJ5IGlzIHN0cmluZyA9PiB0eXBlb2YgZW50cnkgPT09IFwic3RyaW5nXCIpXG4gICAgICAubWFwKChlbnRyeSkgPT4gZW50cnkudHJpbSgpKVxuICAgICAgLmZpbHRlcigoZW50cnkpID0+IGVudHJ5Lmxlbmd0aCA+IDApO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgIGNvbnN0IHRyaW1tZWQgPSB2YWx1ZS50cmltKCk7XG4gICAgcmV0dXJuIHRyaW1tZWQubGVuZ3RoID09PSAwID8gW10gOiBbdHJpbW1lZF07XG4gIH1cblxuICByZXR1cm4gWy4uLmRlZmF1bHRzXTtcbn07XG5cbi8qKlxuICogQnVpbGRzIHRoZSBydWxlIG9wdGlvbnMgc3RhdGUgZnJvbSByYXcgb3B0aW9ucy5cbiAqIEBwYXJhbSBvcHRpb25zIFJhdyBydWxlIG9wdGlvbnMuXG4gKiBAcmV0dXJucyBOb3JtYWxpemVkIHJ1bGUgb3B0aW9ucy5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBzdGF0ZSA9IGdldE9wdGlvbnMoW3t9XSk7XG4gKiBgYGBcbiAqL1xuY29uc3QgZ2V0T3B0aW9ucyA9IChcbiAgb3B0aW9uczogcmVhZG9ubHkgdW5rbm93bltdLFxuKTogQmFycmVsRmlsZXNFeHBvcnRzT25seVN0YXRlID0+IHtcbiAgY29uc3QgcmF3T3B0aW9ucyA9IG9wdGlvbnNbMF0gYXMgQmFycmVsRmlsZXNFeHBvcnRzT25seU9wdGlvbnMgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IGZvbGRlcnMgPSBub3JtYWxpemVMaXN0KHJhd09wdGlvbnM/LmZvbGRlcnMsIERFRkFVTFRfRk9MREVSX0dMT0JTKTtcbiAgY29uc3QgbmFtZXMgPSBub3JtYWxpemVMaXN0KHJhd09wdGlvbnM/Lm5hbWVzLCBERUZBVUxUX0JBUlJFTF9OQU1FUyk7XG5cbiAgcmV0dXJuIHsgZm9sZGVycywgbmFtZXMsIG5hbWVzU2V0OiBuZXcgU2V0KG5hbWVzKSB9O1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgZmlsZW5hbWUgaXMgdmFsaWQgZm9yIGxpbnRpbmcuXG4gKiBAcGFyYW0gZmlsZW5hbWUgQWJzb2x1dGUgZmlsZW5hbWUuXG4gKiBAcmV0dXJucyBUcnVlIHdoZW4gdGhlIGZpbGVuYW1lIGlzIGxpbnRhYmxlLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IG9rID0gaXNMaW50YWJsZUZpbGVuYW1lKFwiL3JlcG8vc3JjL2luZGV4LnRzXCIpO1xuICogYGBgXG4gKi9cbmNvbnN0IGlzTGludGFibGVGaWxlbmFtZSA9IChmaWxlbmFtZTogc3RyaW5nKTogYm9vbGVhbiA9PlxuICBmaWxlbmFtZS5sZW5ndGggPiAwICYmIHBhdGguaXNBYnNvbHV0ZShmaWxlbmFtZSk7XG5cbi8qKlxuICogTm9ybWFsaXplcyBhIGZpbGVuYW1lIHRvIGEgcmVwby1yZWxhdGl2ZSBwYXRoLlxuICogQHBhcmFtIGZpbGVuYW1lIEFic29sdXRlIGZpbGVuYW1lLlxuICogQHJldHVybnMgUmVsYXRpdmUgcGF0aCB1c2luZyBmb3J3YXJkIHNsYXNoZXMuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgcmVsYXRpdmUgPSBub3JtYWxpemVSZWxhdGl2ZVBhdGgoXCIvcmVwby9zcmMvaW5kZXgudHNcIik7XG4gKiBgYGBcbiAqL1xuY29uc3Qgbm9ybWFsaXplUmVsYXRpdmVQYXRoID0gKGZpbGVuYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT5cbiAgcGF0aC5yZWxhdGl2ZShwcm9jZXNzLmN3ZCgpLCBmaWxlbmFtZSkuc3BsaXQocGF0aC5zZXApLmpvaW4oXCIvXCIpO1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGEgZmlsZSBwYXRoIG1hdGNoZXMgYW55IGNvbmZpZ3VyZWQgZm9sZGVyIGdsb2JzLlxuICogQHBhcmFtIGZpbGVuYW1lIEFic29sdXRlIGZpbGVuYW1lLlxuICogQHBhcmFtIGZvbGRlcnMgRm9sZGVyIGdsb2IgcGF0dGVybnMuXG4gKiBAcmV0dXJucyBUcnVlIHdoZW4gdGhlIGZpbGVuYW1lIGlzIHdpdGhpbiBjb25maWd1cmVkIGZvbGRlcnMuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3Qgb2sgPSBpc1BhdGhJbkZvbGRlcnMoXCIvcmVwby9zcmMvaW5kZXgudHNcIiwgW1wic3JjLyoqXCJdKTtcbiAqIGBgYFxuICovXG5jb25zdCBpc1BhdGhJbkZvbGRlcnMgPSAoZmlsZW5hbWU6IHN0cmluZywgZm9sZGVyczogc3RyaW5nW10pOiBib29sZWFuID0+IHtcbiAgY29uc3QgcmVsYXRpdmVQYXRoID0gbm9ybWFsaXplUmVsYXRpdmVQYXRoKGZpbGVuYW1lKTtcblxuICBpZiAocmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgoXCIuLlwiKSB8fCBwYXRoLmlzQWJzb2x1dGUocmVsYXRpdmVQYXRoKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBmb2xkZXJzLnNvbWUoKGZvbGRlcikgPT5cbiAgICBtaW5pbWF0Y2gocmVsYXRpdmVQYXRoLCBmb2xkZXIsIHsgZG90OiB0cnVlIH0pLFxuICApO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSBmaWxlIHNob3VsZCBiZSBsaW50ZWQgYnkgdGhpcyBydWxlLlxuICogQHBhcmFtIGZpbGVuYW1lIEFic29sdXRlIGZpbGVuYW1lLlxuICogQHBhcmFtIG9wdGlvbnMgTm9ybWFsaXplZCBydWxlIG9wdGlvbnMuXG4gKiBAcmV0dXJucyBUcnVlIHdoZW4gdGhlIGZpbGUgc2hvdWxkIGJlIGNoZWNrZWQuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3Qgb2sgPSBzaG91bGRMaW50RmlsZShcIi9yZXBvL3NyYy9pbmRleC50c1wiLCBzdGF0ZSk7XG4gKiBgYGBcbiAqL1xuY29uc3Qgc2hvdWxkTGludEZpbGUgPSAoXG4gIGZpbGVuYW1lOiBzdHJpbmcsXG4gIG9wdGlvbnM6IFJldHVyblR5cGU8dHlwZW9mIGdldE9wdGlvbnM+LFxuKTogYm9vbGVhbiA9PiB7XG4gIGlmICghaXNMaW50YWJsZUZpbGVuYW1lKGZpbGVuYW1lKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChvcHRpb25zLmZvbGRlcnMubGVuZ3RoID09PSAwIHx8IG9wdGlvbnMubmFtZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGlzUGF0aEluRm9sZGVycyhmaWxlbmFtZSwgb3B0aW9ucy5mb2xkZXJzKTtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgZmlsZSBpcyBhIGJhcnJlbCBmaWxlIHVuZGVyIHRoZSBydWxlIG9wdGlvbnMuXG4gKiBAcGFyYW0gZmlsZW5hbWUgQWJzb2x1dGUgZmlsZW5hbWUuXG4gKiBAcGFyYW0gb3B0aW9ucyBOb3JtYWxpemVkIHJ1bGUgb3B0aW9ucy5cbiAqIEByZXR1cm5zIFRydWUgd2hlbiB0aGUgZmlsZSBpcyBhIGJhcnJlbCBmaWxlLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IG9rID0gaXNCYXJyZWxGaWxlKFwiL3JlcG8vc3JjL2luZGV4LnRzXCIsIHN0YXRlKTtcbiAqIGBgYFxuICovXG5jb25zdCBpc0JhcnJlbEZpbGUgPSAoXG4gIGZpbGVuYW1lOiBzdHJpbmcsXG4gIG9wdGlvbnM6IFJldHVyblR5cGU8dHlwZW9mIGdldE9wdGlvbnM+LFxuKTogYm9vbGVhbiA9PiB7XG4gIGlmICghc2hvdWxkTGludEZpbGUoZmlsZW5hbWUsIG9wdGlvbnMpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIG9wdGlvbnMubmFtZXNTZXQuaGFzKHBhdGguYmFzZW5hbWUoZmlsZW5hbWUpKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYSBzdGF0ZW1lbnQgaXMgYWxsb3dlZCBpbiBhIGJhcnJlbCBmaWxlLlxuICogQHBhcmFtIHN0YXRlbWVudCBQcm9ncmFtIHN0YXRlbWVudCBub2RlLlxuICogQHJldHVybnMgVHJ1ZSB3aGVuIHRoZSBzdGF0ZW1lbnQgaXMgcGVybWl0dGVkLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IG9rID0gaXNBbGxvd2VkQmFycmVsU3RhdGVtZW50KHN0YXRlbWVudCk7XG4gKiBgYGBcbiAqL1xuY29uc3QgaXNBbGxvd2VkQmFycmVsU3RhdGVtZW50ID0gKFxuICBzdGF0ZW1lbnQ6IEFTVC5Qcm9ncmFtW1wiYm9keVwiXVtudW1iZXJdLFxuKTogYm9vbGVhbiA9PiB7XG4gIGlmIChzdGF0ZW1lbnQudHlwZSA9PT0gXCJFeHBvcnRBbGxEZWNsYXJhdGlvblwiKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoc3RhdGVtZW50LnR5cGUgIT09IFwiRXhwb3J0TmFtZWREZWNsYXJhdGlvblwiKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgZGVjbGFyYXRpb24gPSBzdGF0ZW1lbnQuZGVjbGFyYXRpb24gPz8gdm9pZCAwO1xuXG4gIGlmIChkZWNsYXJhdGlvbiAhPT0gdm9pZCAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3Qgc291cmNlID0gc3RhdGVtZW50LnNvdXJjZSA/PyB2b2lkIDA7XG5cbiAgcmV0dXJuIHNvdXJjZSAhPT0gdm9pZCAwO1xufTtcblxuLyoqXG4gKiBCdWlsZHMgYSBydWxlIGxpc3RlbmVyIGZvciB0aGUgc3VwcGxpZWQgZmlsZS5cbiAqIEBwYXJhbSBjb250ZXh0IFJ1bGUgZXhlY3V0aW9uIGNvbnRleHQuXG4gKiBAcGFyYW0gZmlsZW5hbWUgQWJzb2x1dGUgZmlsZW5hbWUgdG8gbGludC5cbiAqIEBwYXJhbSBvcHRpb25zIE5vcm1hbGl6ZWQgcnVsZSBvcHRpb25zLlxuICogQHJldHVybnMgVGhlIHJ1bGUgbGlzdGVuZXIgZm9yIHRoZSBmaWxlLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGxpc3RlbmVyID0gYnVpbGRMaXN0ZW5lckZvckZpbGUoY29udGV4dCwgZmlsZW5hbWUsIHN0YXRlKTtcbiAqIGBgYFxuICovXG5jb25zdCBidWlsZExpc3RlbmVyRm9yRmlsZSA9IChcbiAgY29udGV4dDogUnVsZS5SdWxlQ29udGV4dCxcbiAgZmlsZW5hbWU6IHN0cmluZyxcbiAgb3B0aW9uczogUmV0dXJuVHlwZTx0eXBlb2YgZ2V0T3B0aW9ucz4sXG4pOiBSdWxlLlJ1bGVMaXN0ZW5lciA9PiB7XG4gIGlmICghaXNCYXJyZWxGaWxlKGZpbGVuYW1lLCBvcHRpb25zKSkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgUHJvZ3JhbShub2RlOiBBU1QuUHJvZ3JhbSk6IHZvaWQge1xuICAgICAgZm9yIChjb25zdCBzdGF0ZW1lbnQgb2Ygbm9kZS5ib2R5KSB7XG4gICAgICAgIGlmICghaXNBbGxvd2VkQmFycmVsU3RhdGVtZW50KHN0YXRlbWVudCkpIHtcbiAgICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgICBtZXNzYWdlSWQ6IFwiaW52YWxpZEJhcnJlbENvbnRlbnRcIixcbiAgICAgICAgICAgIG5vZGU6IHN0YXRlbWVudCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gIH07XG59O1xuXG4vKipcbiAqIEVTTGludCBydWxlIGVuZm9yY2luZyByZS1leHBvcnQtb25seSBiYXJyZWwgZmlsZXMuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgcnVsZSA9IGJhcnJlbEZpbGVzRXhwb3J0c09ubHlSdWxlO1xuICogYGBgXG4gKi9cbmNvbnN0IGJhcnJlbEZpbGVzRXhwb3J0c09ubHlSdWxlOiBSdWxlLlJ1bGVNb2R1bGUgPSB7XG4gIGNyZWF0ZShjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0KTogUnVsZS5SdWxlTGlzdGVuZXIge1xuICAgIHJldHVybiBidWlsZExpc3RlbmVyRm9yRmlsZShcbiAgICAgIGNvbnRleHQsXG4gICAgICBjb250ZXh0LmZpbGVuYW1lLFxuICAgICAgZ2V0T3B0aW9ucyhjb250ZXh0Lm9wdGlvbnMpLFxuICAgICk7XG4gIH0sXG4gIG1ldGE6IHtcbiAgICBkb2NzOiBjcmVhdGVSdWxlRG9jdW1lbnRhdGlvbihcbiAgICAgIFwiYmFycmVsLWZpbGVzLWV4cG9ydHMtb25seVwiLFxuICAgICAgXCJSZXF1aXJlIGJhcnJlbCBmaWxlcyB0byBvbmx5IGNvbnRhaW4gcmUtZXhwb3J0IHN0YXRlbWVudHMuXCIsXG4gICAgKSxcbiAgICBtZXNzYWdlczoge1xuICAgICAgaW52YWxpZEJhcnJlbENvbnRlbnQ6XG4gICAgICAgIFwiQmFycmVsIGZpbGVzIG11c3Qgb25seSByZS1leHBvcnQgZnJvbSBvdGhlciBtb2R1bGVzIGFuZCBjb250YWluIG5vIGltcG9ydHMgb3IgZGVjbGFyYXRpb25zLlwiLFxuICAgIH0sXG4gICAgc2NoZW1hOiBbXG4gICAgICB7XG4gICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGZvbGRlcnM6IHtcbiAgICAgICAgICAgIG9uZU9mOiBbXG4gICAgICAgICAgICAgIHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaXRlbXM6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgICAgICAgIG1pbkl0ZW1zOiAxLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBuYW1lczoge1xuICAgICAgICAgICAgb25lT2Y6IFtcbiAgICAgICAgICAgICAgeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpdGVtczogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICAgICAgbWluSXRlbXM6IDEsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIHR5cGU6IFwicHJvYmxlbVwiLFxuICB9LFxufTtcblxuZXhwb3J0IHsgYmFycmVsRmlsZXNFeHBvcnRzT25seVJ1bGUgfTtcbiJdfQ==
@@ -0,0 +1,5 @@
1
+ export { barrelFilesExportsOnlyRule } from "./exports-only-rule";
2
+ export { noReexportsOutsideBarrelsRule } from "./no-reexports-outside-barrels-rule";
3
+ export { consistentBarrelFilesRule } from "./rule";
4
+ export type { BarrelFilesExportsOnlyOptions, ConsistentBarrelFilesOptions, NoReexportsOutsideBarrelsOptions, } from "./types";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/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";
2
+ export { noReexportsOutsideBarrelsRule } from "./no-reexports-outside-barrels-rule";
3
+ export { consistentBarrelFilesRule } from "./rule";
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXJjaGl0ZWN0dXJlL2NvbnNpc3RlbnQtYmFycmVsLWZpbGVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IGJhcnJlbEZpbGVzRXhwb3J0c09ubHlSdWxlIH0gZnJvbSBcIi4vZXhwb3J0cy1vbmx5LXJ1bGVcIjtcbmV4cG9ydCB7IG5vUmVleHBvcnRzT3V0c2lkZUJhcnJlbHNSdWxlIH0gZnJvbSBcIi4vbm8tcmVleHBvcnRzLW91dHNpZGUtYmFycmVscy1ydWxlXCI7XG5leHBvcnQgeyBjb25zaXN0ZW50QmFycmVsRmlsZXNSdWxlIH0gZnJvbSBcIi4vcnVsZVwiO1xuZXhwb3J0IHR5cGUge1xuICBCYXJyZWxGaWxlc0V4cG9ydHNPbmx5T3B0aW9ucyxcbiAgQ29uc2lzdGVudEJhcnJlbEZpbGVzT3B0aW9ucyxcbiAgTm9SZWV4cG9ydHNPdXRzaWRlQmFycmVsc09wdGlvbnMsXG59IGZyb20gXCIuL3R5cGVzXCI7XG4iXX0=
@@ -0,0 +1,11 @@
1
+ import type { Rule } from "eslint";
2
+ /**
3
+ * ESLint rule preventing re-exports outside barrel files.
4
+ * @example
5
+ * ```typescript
6
+ * const rule = noReexportsOutsideBarrelsRule;
7
+ * ```
8
+ */
9
+ declare const noReexportsOutsideBarrelsRule: Rule.RuleModule;
10
+ export { noReexportsOutsideBarrelsRule };
11
+ //# sourceMappingURL=no-reexports-outside-barrels-rule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-reexports-outside-barrels-rule.d.ts","sourceRoot":"","sources":["../../../src/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAO,IAAI,EAAE,MAAM,QAAQ,CAAC;AAoExC;;;;;;GAMG;AACH,QAAA,MAAM,6BAA6B,EAAE,IAAI,CAAC,UAiDzC,CAAC;AAEF,OAAO,EAAE,6BAA6B,EAAE,CAAC"}
@@ -0,0 +1,100 @@
1
+ import { createRuleDocumentation } from "../../custom-rule-documentation";
2
+ import { collectImportedNames, getOptions, hasImportedExport, isBarrelFile, shouldLintFile, } from "./no-reexports-outside-barrels-utilities";
3
+ /**
4
+ * Builds a rule listener for the supplied file.
5
+ * @param context Rule execution context.
6
+ * @param filename Absolute filename to lint.
7
+ * @param options Normalized rule options.
8
+ * @returns The rule listener for the file.
9
+ * @example
10
+ * ```typescript
11
+ * const listener = buildListenerForFile(context, filename, state);
12
+ * ```
13
+ */
14
+ const buildListenerForFile = (context, filename, options) => {
15
+ if (!shouldLintFile(filename, options) || isBarrelFile(filename, options)) {
16
+ return {};
17
+ }
18
+ return {
19
+ Program(node) {
20
+ const importedNames = collectImportedNames(node.body);
21
+ for (const statement of node.body) {
22
+ const isExportFrom = statement.type === "ExportAllDeclaration" ||
23
+ (statement.type === "ExportNamedDeclaration" &&
24
+ statement.source !== null &&
25
+ statement.source !== void 0);
26
+ const isImportedDefaultExport = statement.type === "ExportDefaultDeclaration" &&
27
+ statement.declaration.type === "Identifier" &&
28
+ importedNames.has(statement.declaration.name);
29
+ if (isExportFrom) {
30
+ context.report({
31
+ messageId: "reexportNotAllowed",
32
+ node: statement,
33
+ });
34
+ }
35
+ else if (hasImportedExport(statement, importedNames)) {
36
+ context.report({
37
+ messageId: "reexportedImport",
38
+ node: statement,
39
+ });
40
+ }
41
+ else if (isImportedDefaultExport) {
42
+ context.report({
43
+ messageId: "reexportedImport",
44
+ node: statement,
45
+ });
46
+ }
47
+ }
48
+ },
49
+ };
50
+ };
51
+ /**
52
+ * ESLint rule preventing re-exports outside barrel files.
53
+ * @example
54
+ * ```typescript
55
+ * const rule = noReexportsOutsideBarrelsRule;
56
+ * ```
57
+ */
58
+ const noReexportsOutsideBarrelsRule = {
59
+ create(context) {
60
+ return buildListenerForFile(context, context.filename, getOptions(context.options));
61
+ },
62
+ meta: {
63
+ docs: createRuleDocumentation("no-reexports-outside-barrels", "Require non-barrel files to export only locally defined values."),
64
+ messages: {
65
+ reexportedImport: "Non-barrel files must not export identifiers imported from other modules.",
66
+ reexportNotAllowed: "Non-barrel files must not re-export from other modules.",
67
+ },
68
+ schema: [
69
+ {
70
+ additionalProperties: false,
71
+ properties: {
72
+ folders: {
73
+ oneOf: [
74
+ { type: "string" },
75
+ {
76
+ items: { type: "string" },
77
+ minItems: 1,
78
+ type: "array",
79
+ },
80
+ ],
81
+ },
82
+ names: {
83
+ oneOf: [
84
+ { type: "string" },
85
+ {
86
+ items: { type: "string" },
87
+ minItems: 1,
88
+ type: "array",
89
+ },
90
+ ],
91
+ },
92
+ },
93
+ type: "object",
94
+ },
95
+ ],
96
+ type: "problem",
97
+ },
98
+ };
99
+ export { noReexportsOutsideBarrelsRule };
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm8tcmVleHBvcnRzLW91dHNpZGUtYmFycmVscy1ydWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FyY2hpdGVjdHVyZS9jb25zaXN0ZW50LWJhcnJlbC1maWxlcy9uby1yZWV4cG9ydHMtb3V0c2lkZS1iYXJyZWxzLXJ1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDMUUsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixVQUFVLEVBQ1YsaUJBQWlCLEVBQ2pCLFlBQVksRUFDWixjQUFjLEdBQ2YsTUFBTSwwQ0FBMEMsQ0FBQztBQUVsRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxvQkFBb0IsR0FBRyxDQUMzQixPQUF5QixFQUN6QixRQUFnQixFQUNoQixPQUFzQyxFQUNuQixFQUFFO0lBQ3JCLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxJQUFJLFlBQVksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUMxRSxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxPQUFPO1FBQ0wsT0FBTyxDQUFDLElBQWlCO1lBQ3ZCLE1BQU0sYUFBYSxHQUFHLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUV0RCxLQUFLLE1BQU0sU0FBUyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDbEMsTUFBTSxZQUFZLEdBQ2hCLFNBQVMsQ0FBQyxJQUFJLEtBQUssc0JBQXNCO29CQUN6QyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEtBQUssd0JBQXdCO3dCQUMxQyxTQUFTLENBQUMsTUFBTSxLQUFLLElBQUk7d0JBQ3pCLFNBQVMsQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFFakMsTUFBTSx1QkFBdUIsR0FDM0IsU0FBUyxDQUFDLElBQUksS0FBSywwQkFBMEI7b0JBQzdDLFNBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLFlBQVk7b0JBQzNDLGFBQWEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFFaEQsSUFBSSxZQUFZLEVBQUUsQ0FBQztvQkFDakIsT0FBTyxDQUFDLE1BQU0sQ0FBQzt3QkFDYixTQUFTLEVBQUUsb0JBQW9CO3dCQUMvQixJQUFJLEVBQUUsU0FBUztxQkFDaEIsQ0FBQyxDQUFDO2dCQUNMLENBQUM7cUJBQU0sSUFBSSxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDLEVBQUUsQ0FBQztvQkFDdkQsT0FBTyxDQUFDLE1BQU0sQ0FBQzt3QkFDYixTQUFTLEVBQUUsa0JBQWtCO3dCQUM3QixJQUFJLEVBQUUsU0FBUztxQkFDaEIsQ0FBQyxDQUFDO2dCQUNMLENBQUM7cUJBQU0sSUFBSSx1QkFBdUIsRUFBRSxDQUFDO29CQUNuQyxPQUFPLENBQUMsTUFBTSxDQUFDO3dCQUNiLFNBQVMsRUFBRSxrQkFBa0I7d0JBQzdCLElBQUksRUFBRSxTQUFTO3FCQUNoQixDQUFDLENBQUM7Z0JBQ0wsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGOzs7Ozs7R0FNRztBQUNILE1BQU0sNkJBQTZCLEdBQW9CO0lBQ3JELE1BQU0sQ0FBQyxPQUF5QjtRQUM5QixPQUFPLG9CQUFvQixDQUN6QixPQUFPLEVBQ1AsT0FBTyxDQUFDLFFBQVEsRUFDaEIsVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FDNUIsQ0FBQztJQUNKLENBQUM7SUFDRCxJQUFJLEVBQUU7UUFDSixJQUFJLEVBQUUsdUJBQXVCLENBQzNCLDhCQUE4QixFQUM5QixpRUFBaUUsQ0FDbEU7UUFDRCxRQUFRLEVBQUU7WUFDUixnQkFBZ0IsRUFDZCwyRUFBMkU7WUFDN0Usa0JBQWtCLEVBQ2hCLHlEQUF5RDtTQUM1RDtRQUNELE1BQU0sRUFBRTtZQUNOO2dCQUNFLG9CQUFvQixFQUFFLEtBQUs7Z0JBQzNCLFVBQVUsRUFBRTtvQkFDVixPQUFPLEVBQUU7d0JBQ1AsS0FBSyxFQUFFOzRCQUNMLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTs0QkFDbEI7Z0NBQ0UsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtnQ0FDekIsUUFBUSxFQUFFLENBQUM7Z0NBQ1gsSUFBSSxFQUFFLE9BQU87NkJBQ2Q7eUJBQ0Y7cUJBQ0Y7b0JBQ0QsS0FBSyxFQUFFO3dCQUNMLEtBQUssRUFBRTs0QkFDTCxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7NEJBQ2xCO2dDQUNFLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7Z0NBQ3pCLFFBQVEsRUFBRSxDQUFDO2dDQUNYLElBQUksRUFBRSxPQUFPOzZCQUNkO3lCQUNGO3FCQUNGO2lCQUNGO2dCQUNELElBQUksRUFBRSxRQUFRO2FBQ2Y7U0FDRjtRQUNELElBQUksRUFBRSxTQUFTO0tBQ2hCO0NBQ0YsQ0FBQztBQUVGLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBU1QsIFJ1bGUgfSBmcm9tIFwiZXNsaW50XCI7XG5cbmltcG9ydCB7IGNyZWF0ZVJ1bGVEb2N1bWVudGF0aW9uIH0gZnJvbSBcIi4uLy4uL2N1c3RvbS1ydWxlLWRvY3VtZW50YXRpb25cIjtcbmltcG9ydCB7XG4gIGNvbGxlY3RJbXBvcnRlZE5hbWVzLFxuICBnZXRPcHRpb25zLFxuICBoYXNJbXBvcnRlZEV4cG9ydCxcbiAgaXNCYXJyZWxGaWxlLFxuICBzaG91bGRMaW50RmlsZSxcbn0gZnJvbSBcIi4vbm8tcmVleHBvcnRzLW91dHNpZGUtYmFycmVscy11dGlsaXRpZXNcIjtcblxuLyoqXG4gKiBCdWlsZHMgYSBydWxlIGxpc3RlbmVyIGZvciB0aGUgc3VwcGxpZWQgZmlsZS5cbiAqIEBwYXJhbSBjb250ZXh0IFJ1bGUgZXhlY3V0aW9uIGNvbnRleHQuXG4gKiBAcGFyYW0gZmlsZW5hbWUgQWJzb2x1dGUgZmlsZW5hbWUgdG8gbGludC5cbiAqIEBwYXJhbSBvcHRpb25zIE5vcm1hbGl6ZWQgcnVsZSBvcHRpb25zLlxuICogQHJldHVybnMgVGhlIHJ1bGUgbGlzdGVuZXIgZm9yIHRoZSBmaWxlLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGxpc3RlbmVyID0gYnVpbGRMaXN0ZW5lckZvckZpbGUoY29udGV4dCwgZmlsZW5hbWUsIHN0YXRlKTtcbiAqIGBgYFxuICovXG5jb25zdCBidWlsZExpc3RlbmVyRm9yRmlsZSA9IChcbiAgY29udGV4dDogUnVsZS5SdWxlQ29udGV4dCxcbiAgZmlsZW5hbWU6IHN0cmluZyxcbiAgb3B0aW9uczogUmV0dXJuVHlwZTx0eXBlb2YgZ2V0T3B0aW9ucz4sXG4pOiBSdWxlLlJ1bGVMaXN0ZW5lciA9PiB7XG4gIGlmICghc2hvdWxkTGludEZpbGUoZmlsZW5hbWUsIG9wdGlvbnMpIHx8IGlzQmFycmVsRmlsZShmaWxlbmFtZSwgb3B0aW9ucykpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICByZXR1cm4ge1xuICAgIFByb2dyYW0obm9kZTogQVNULlByb2dyYW0pOiB2b2lkIHtcbiAgICAgIGNvbnN0IGltcG9ydGVkTmFtZXMgPSBjb2xsZWN0SW1wb3J0ZWROYW1lcyhub2RlLmJvZHkpO1xuXG4gICAgICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiBub2RlLmJvZHkpIHtcbiAgICAgICAgY29uc3QgaXNFeHBvcnRGcm9tID1cbiAgICAgICAgICBzdGF0ZW1lbnQudHlwZSA9PT0gXCJFeHBvcnRBbGxEZWNsYXJhdGlvblwiIHx8XG4gICAgICAgICAgKHN0YXRlbWVudC50eXBlID09PSBcIkV4cG9ydE5hbWVkRGVjbGFyYXRpb25cIiAmJlxuICAgICAgICAgICAgc3RhdGVtZW50LnNvdXJjZSAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgc3RhdGVtZW50LnNvdXJjZSAhPT0gdm9pZCAwKTtcblxuICAgICAgICBjb25zdCBpc0ltcG9ydGVkRGVmYXVsdEV4cG9ydCA9XG4gICAgICAgICAgc3RhdGVtZW50LnR5cGUgPT09IFwiRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uXCIgJiZcbiAgICAgICAgICBzdGF0ZW1lbnQuZGVjbGFyYXRpb24udHlwZSA9PT0gXCJJZGVudGlmaWVyXCIgJiZcbiAgICAgICAgICBpbXBvcnRlZE5hbWVzLmhhcyhzdGF0ZW1lbnQuZGVjbGFyYXRpb24ubmFtZSk7XG5cbiAgICAgICAgaWYgKGlzRXhwb3J0RnJvbSkge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIG1lc3NhZ2VJZDogXCJyZWV4cG9ydE5vdEFsbG93ZWRcIixcbiAgICAgICAgICAgIG5vZGU6IHN0YXRlbWVudCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChoYXNJbXBvcnRlZEV4cG9ydChzdGF0ZW1lbnQsIGltcG9ydGVkTmFtZXMpKSB7XG4gICAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgICAgbWVzc2FnZUlkOiBcInJlZXhwb3J0ZWRJbXBvcnRcIixcbiAgICAgICAgICAgIG5vZGU6IHN0YXRlbWVudCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0ltcG9ydGVkRGVmYXVsdEV4cG9ydCkge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIG1lc3NhZ2VJZDogXCJyZWV4cG9ydGVkSW1wb3J0XCIsXG4gICAgICAgICAgICBub2RlOiBzdGF0ZW1lbnQsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICB9O1xufTtcblxuLyoqXG4gKiBFU0xpbnQgcnVsZSBwcmV2ZW50aW5nIHJlLWV4cG9ydHMgb3V0c2lkZSBiYXJyZWwgZmlsZXMuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgcnVsZSA9IG5vUmVleHBvcnRzT3V0c2lkZUJhcnJlbHNSdWxlO1xuICogYGBgXG4gKi9cbmNvbnN0IG5vUmVleHBvcnRzT3V0c2lkZUJhcnJlbHNSdWxlOiBSdWxlLlJ1bGVNb2R1bGUgPSB7XG4gIGNyZWF0ZShjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0KTogUnVsZS5SdWxlTGlzdGVuZXIge1xuICAgIHJldHVybiBidWlsZExpc3RlbmVyRm9yRmlsZShcbiAgICAgIGNvbnRleHQsXG4gICAgICBjb250ZXh0LmZpbGVuYW1lLFxuICAgICAgZ2V0T3B0aW9ucyhjb250ZXh0Lm9wdGlvbnMpLFxuICAgICk7XG4gIH0sXG4gIG1ldGE6IHtcbiAgICBkb2NzOiBjcmVhdGVSdWxlRG9jdW1lbnRhdGlvbihcbiAgICAgIFwibm8tcmVleHBvcnRzLW91dHNpZGUtYmFycmVsc1wiLFxuICAgICAgXCJSZXF1aXJlIG5vbi1iYXJyZWwgZmlsZXMgdG8gZXhwb3J0IG9ubHkgbG9jYWxseSBkZWZpbmVkIHZhbHVlcy5cIixcbiAgICApLFxuICAgIG1lc3NhZ2VzOiB7XG4gICAgICByZWV4cG9ydGVkSW1wb3J0OlxuICAgICAgICBcIk5vbi1iYXJyZWwgZmlsZXMgbXVzdCBub3QgZXhwb3J0IGlkZW50aWZpZXJzIGltcG9ydGVkIGZyb20gb3RoZXIgbW9kdWxlcy5cIixcbiAgICAgIHJlZXhwb3J0Tm90QWxsb3dlZDpcbiAgICAgICAgXCJOb24tYmFycmVsIGZpbGVzIG11c3Qgbm90IHJlLWV4cG9ydCBmcm9tIG90aGVyIG1vZHVsZXMuXCIsXG4gICAgfSxcbiAgICBzY2hlbWE6IFtcbiAgICAgIHtcbiAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgZm9sZGVyczoge1xuICAgICAgICAgICAgb25lT2Y6IFtcbiAgICAgICAgICAgICAgeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpdGVtczogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICAgICAgbWluSXRlbXM6IDEsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG5hbWVzOiB7XG4gICAgICAgICAgICBvbmVPZjogW1xuICAgICAgICAgICAgICB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGl0ZW1zOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICAgICAgICBtaW5JdGVtczogMSxcbiAgICAgICAgICAgICAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgdHlwZTogXCJwcm9ibGVtXCIsXG4gIH0sXG59O1xuXG5leHBvcnQgeyBub1JlZXhwb3J0c091dHNpZGVCYXJyZWxzUnVsZSB9O1xuIl19
@@ -0,0 +1,40 @@
1
+ import type * as ESTree from "estree";
2
+ import type { NoReexportsOutsideBarrelsOptions } from "./types";
3
+ /** Type definition for rule data. */
4
+ interface RuleReport {
5
+ /** MessageId helper value. */
6
+ messageId: string | undefined;
7
+ }
8
+ /** Type definition for rule data. */
9
+ interface TemporaryRunner {
10
+ /** RunDefaultFeature field value. */
11
+ runDefaultFeature: (body: ESTree.Program["body"]) => RuleReport[];
12
+ /** RunTemporaryFeature field value. */
13
+ runTemporaryFeature: (body: ESTree.Program["body"], options?: NoReexportsOutsideBarrelsOptions) => RuleReport[];
14
+ /** RunTemporaryIndex field value. */
15
+ runTemporaryIndex: (body: ESTree.Program["body"], options?: NoReexportsOutsideBarrelsOptions) => RuleReport[];
16
+ }
17
+ /**
18
+ * Runs the rule against the provided AST body.
19
+ * @param filename Target filename.
20
+ * @param body AST program body.
21
+ * @param options Rule options when provided.
22
+ * @returns The captured rule reports.
23
+ * @example
24
+ * ```typescript
25
+ * const reports = runRule("feature.ts", createBody());
26
+ * ```
27
+ */
28
+ declare const runRule: (filename: string, body: ESTree.Program["body"], options?: NoReexportsOutsideBarrelsOptions) => RuleReport[];
29
+ /**
30
+ * Creates temporary file runners for the rule.
31
+ * @param temporaryDirectories Directories created during the run.
32
+ * @returns Helpers for running the rule in temp folders.
33
+ * @example
34
+ * ```typescript
35
+ * const runner = createTemporaryRunner([]);
36
+ * ```
37
+ */
38
+ declare const createTemporaryRunner: (temporaryDirectories: string[]) => TemporaryRunner;
39
+ export { createTemporaryRunner, runRule };
40
+ //# sourceMappingURL=no-reexports-outside-barrels-test-utilities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-reexports-outside-barrels-test-utilities.d.ts","sourceRoot":"","sources":["../../../src/architecture/consistent-barrel-files/no-reexports-outside-barrels-test-utilities.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,MAAM,QAAQ,CAAC;AAKtC,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"}