@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,229 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ /**
4
+ * Creates a temporary repo directory under the given root.
5
+ * @param root Root folder for temp files.
6
+ * @returns The generated directory path.
7
+ * @example
8
+ * ```typescript
9
+ * const directory = createRepoDirectory("tmp");
10
+ * ```
11
+ */
12
+ const createRepoDirectory = (root) => {
13
+ const baseDirectory = path.join(process.cwd(), root);
14
+ fs.mkdirSync(baseDirectory, { recursive: true });
15
+ return fs.mkdtempSync(path.join(baseDirectory, "barrel-files-"));
16
+ };
17
+ /**
18
+ * Creates a program wrapper around the supplied AST body.
19
+ * @param body Program body statements.
20
+ * @returns The AST program.
21
+ * @example
22
+ * ```typescript
23
+ * const program = createProgram([]);
24
+ * ```
25
+ */
26
+ const createProgram = (body) => ({
27
+ body,
28
+ comments: [],
29
+ loc: {
30
+ end: { column: 0, line: 1 },
31
+ start: { column: 0, line: 1 },
32
+ },
33
+ range: [0, 0],
34
+ sourceType: "module",
35
+ tokens: [],
36
+ type: "Program",
37
+ });
38
+ /**
39
+ * Creates an ESTree literal node.
40
+ * @param value Literal string to wrap.
41
+ * @returns The literal node.
42
+ * @example
43
+ * ```typescript
44
+ * const literal = createLiteral("./feature");
45
+ * ```
46
+ */
47
+ const createLiteral = (value) => ({
48
+ raw: `'${value}'`,
49
+ type: "Literal",
50
+ value,
51
+ });
52
+ /**
53
+ * Creates an ESTree identifier node.
54
+ * @param name Identifier to create.
55
+ * @returns The identifier node.
56
+ * @example
57
+ * ```typescript
58
+ * const id = createIdentifier("all");
59
+ * ```
60
+ */
61
+ const createIdentifier = (name) => ({ name, type: "Identifier" });
62
+ /**
63
+ * Creates an ESTree export specifier.
64
+ * @param localName Local identifier name.
65
+ * @param exportedName Exported identifier name.
66
+ * @returns Export specifier node.
67
+ * @example
68
+ * ```typescript
69
+ * const specifier = createExportSpecifier("feature");
70
+ * ```
71
+ */
72
+ const createExportSpecifier = (localName, exportedName = localName) => ({
73
+ exported: createIdentifier(exportedName),
74
+ local: createIdentifier(localName),
75
+ type: "ExportSpecifier",
76
+ });
77
+ /**
78
+ * Creates an ESTree import specifier.
79
+ * @param localName Local identifier name.
80
+ * @param importedName Imported identifier name.
81
+ * @returns Import specifier node.
82
+ * @example
83
+ * ```typescript
84
+ * const specifier = createImportSpecifier("feature");
85
+ * ```
86
+ */
87
+ const createImportSpecifier = (localName, importedName = localName) => ({
88
+ imported: createIdentifier(importedName),
89
+ local: createIdentifier(localName),
90
+ type: "ImportSpecifier",
91
+ });
92
+ /**
93
+ * Creates an ESTree import default specifier.
94
+ * @param localName Local identifier name.
95
+ * @returns Import default specifier node.
96
+ * @example
97
+ * ```typescript
98
+ * const specifier = createImportDefaultSpecifier("feature");
99
+ * ```
100
+ */
101
+ const createImportDefaultSpecifier = (localName) => ({
102
+ local: createIdentifier(localName),
103
+ type: "ImportDefaultSpecifier",
104
+ });
105
+ /**
106
+ * Creates an import declaration for test fixtures.
107
+ * @param specifiers Specifiers to include.
108
+ * @returns Import declaration node for tests.
109
+ * @example
110
+ * ```typescript
111
+ * const node = createImportDeclaration([createImportSpecifier("feature")]);
112
+ * ```
113
+ */
114
+ const createImportDeclaration = (specifiers = []) => ({
115
+ attributes: [],
116
+ source: createLiteral("./feature"),
117
+ specifiers,
118
+ type: "ImportDeclaration",
119
+ });
120
+ /**
121
+ * Creates an export-all declaration for test fixtures.
122
+ * @returns The export-all declaration node.
123
+ * @example
124
+ * ```typescript
125
+ * const node = createExportAll();
126
+ * ```
127
+ */
128
+ const createExportAll = () => ({
129
+ attributes: [],
130
+ exported: createIdentifier("all"),
131
+ source: createLiteral("./feature"),
132
+ type: "ExportAllDeclaration",
133
+ });
134
+ /**
135
+ * Creates a named export-from declaration for test fixtures.
136
+ * @returns Export declaration node for tests.
137
+ * @example
138
+ * ```typescript
139
+ * const node = createExportNamedFrom();
140
+ * ```
141
+ */
142
+ const createExportNamedFrom = () => ({
143
+ attributes: [],
144
+ source: createLiteral("./feature"),
145
+ specifiers: [],
146
+ type: "ExportNamedDeclaration",
147
+ });
148
+ /**
149
+ * Creates a named export with a local declaration.
150
+ * @returns Export declaration node for tests.
151
+ * @example
152
+ * ```typescript
153
+ * const node = createExportWithDeclaration();
154
+ * ```
155
+ */
156
+ const createExportWithDeclaration = () => {
157
+ const declaration = {
158
+ declarations: [],
159
+ kind: "const",
160
+ type: "VariableDeclaration",
161
+ };
162
+ return {
163
+ attributes: [],
164
+ declaration,
165
+ specifiers: [],
166
+ type: "ExportNamedDeclaration",
167
+ };
168
+ };
169
+ /**
170
+ * Creates a named export without a source value.
171
+ * @param specifiers Export specifiers to include.
172
+ * @returns Export declaration node for tests.
173
+ * @example
174
+ * ```typescript
175
+ * const node = createExportWithoutSource([createExportSpecifier("feature")]);
176
+ * ```
177
+ */
178
+ const createExportWithoutSource = (specifiers = []) => ({
179
+ attributes: [],
180
+ specifiers,
181
+ type: "ExportNamedDeclaration",
182
+ });
183
+ /**
184
+ * Creates a default export for an identifier.
185
+ * @param name Identifier to export.
186
+ * @returns Export default declaration node for tests.
187
+ * @example
188
+ * ```typescript
189
+ * const node = createExportDefaultIdentifier("feature");
190
+ * ```
191
+ */
192
+ const createExportDefaultIdentifier = (name) => ({
193
+ declaration: createIdentifier(name),
194
+ type: "ExportDefaultDeclaration",
195
+ });
196
+ /**
197
+ * Collects statements into a program body array.
198
+ * @param statements Statements to include in the program.
199
+ * @returns The program body array.
200
+ * @example
201
+ * ```typescript
202
+ * const body = createBody(createImportDeclaration());
203
+ * ```
204
+ */
205
+ const createBody = (...statements) => statements;
206
+ /**
207
+ * Writes a barrel file to the given path.
208
+ * @param filePath Path for the barrel file.
209
+ * @example
210
+ * ```typescript
211
+ * writeBarrel("/tmp/index.ts");
212
+ * ```
213
+ */
214
+ const writeBarrel = (filePath) => {
215
+ fs.writeFileSync(filePath, "export * from './feature';", "utf8");
216
+ };
217
+ /**
218
+ * Writes a feature file to the given path.
219
+ * @param filePath Path for the feature file.
220
+ * @example
221
+ * ```typescript
222
+ * writeFeature("/tmp/feature.ts");
223
+ * ```
224
+ */
225
+ const writeFeature = (filePath) => {
226
+ fs.writeFileSync(filePath, "export const feature = 1;", "utf8");
227
+ };
228
+ export { createBody, createExportAll, createExportDefaultIdentifier, createExportNamedFrom, createExportSpecifier, createExportWithDeclaration, createExportWithoutSource, createImportDeclaration, createImportDefaultSpecifier, createImportSpecifier, createProgram, createRepoDirectory, writeBarrel, writeFeature, };
229
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FyY2hpdGVjdHVyZS9jb25zaXN0ZW50LWJhcnJlbC1maWxlcy90ZXN0LWhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3pCLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUU3Qjs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxJQUFtQixFQUFVLEVBQUU7SUFDMUQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDckQsRUFBRSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNqRCxPQUFPLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQztBQUNuRSxDQUFDLENBQUM7QUFFRjs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sYUFBYSxHQUFHLENBQUMsSUFBNEIsRUFBZSxFQUFFLENBQUMsQ0FBQztJQUNwRSxJQUFJO0lBQ0osUUFBUSxFQUFFLEVBQUU7SUFDWixHQUFHLEVBQUU7UUFDSCxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUU7UUFDM0IsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFO0tBQzlCO0lBQ0QsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNiLFVBQVUsRUFBRSxRQUFRO0lBQ3BCLE1BQU0sRUFBRSxFQUFFO0lBQ1YsSUFBSSxFQUFFLFNBQVM7Q0FDaEIsQ0FBQyxDQUFDO0FBRUg7Ozs7Ozs7O0dB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NkJBQTZCLEdBQUcsQ0FDcEMsSUFBWSxFQUNxQixFQUFFLENBQ25DLENBQUM7SUFDQyxXQUFXLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDO0lBQ25DLElBQUksRUFBRSwwQkFBMEI7Q0FDakMsQ0FBMkMsQ0FBQztBQUUvQzs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxHQUFHLENBQ2pCLEdBQUcsVUFBNEMsRUFDdkIsRUFBRSxDQUFDLFVBQVUsQ0FBQztBQUV4Qzs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxXQUFXLEdBQUcsQ0FBQyxRQUFnQixFQUFRLEVBQUU7SUFDN0MsRUFBRSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDbkUsQ0FBQyxDQUFDO0FBRUY7Ozs7Ozs7R0FPRztBQUNILE1BQU0sWUFBWSxHQUFHLENBQUMsUUFBZ0IsRUFBUSxFQUFFO0lBQzlDLEVBQUUsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLDJCQUEyQixFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ2xFLENBQUMsQ0FBQztBQUVGLE9BQU8sRUFDTCxVQUFVLEVBQ1YsZUFBZSxFQUNmLDZCQUE2QixFQUM3QixxQkFBcUIsRUFDckIscUJBQXFCLEVBQ3JCLDJCQUEyQixFQUMzQix5QkFBeUIsRUFDekIsdUJBQXVCLEVBQ3ZCLDRCQUE0QixFQUM1QixxQkFBcUIsRUFDckIsYUFBYSxFQUNiLG1CQUFtQixFQUNuQixXQUFXLEVBQ1gsWUFBWSxHQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFTVCB9IGZyb20gXCJlc2xpbnRcIjtcbmltcG9ydCB0eXBlICogYXMgRVNUcmVlIGZyb20gXCJlc3RyZWVcIjtcblxuaW1wb3J0IGZzIGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHRlbXBvcmFyeSByZXBvIGRpcmVjdG9yeSB1bmRlciB0aGUgZ2l2ZW4gcm9vdC5cbiAqIEBwYXJhbSByb290IFJvb3QgZm9sZGVyIGZvciB0ZW1wIGZpbGVzLlxuICogQHJldHVybnMgVGhlIGdlbmVyYXRlZCBkaXJlY3RvcnkgcGF0aC5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBkaXJlY3RvcnkgPSBjcmVhdGVSZXBvRGlyZWN0b3J5KFwidG1wXCIpO1xuICogYGBgXG4gKi9cbmNvbnN0IGNyZWF0ZVJlcG9EaXJlY3RvcnkgPSAocm9vdDogXCJzcmNcIiB8IFwidG1wXCIpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBiYXNlRGlyZWN0b3J5ID0gcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIHJvb3QpO1xuICBmcy5ta2RpclN5bmMoYmFzZURpcmVjdG9yeSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIHJldHVybiBmcy5ta2R0ZW1wU3luYyhwYXRoLmpvaW4oYmFzZURpcmVjdG9yeSwgXCJiYXJyZWwtZmlsZXMtXCIpKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIHByb2dyYW0gd3JhcHBlciBhcm91bmQgdGhlIHN1cHBsaWVkIEFTVCBib2R5LlxuICogQHBhcmFtIGJvZHkgUHJvZ3JhbSBib2R5IHN0YXRlbWVudHMuXG4gKiBAcmV0dXJucyBUaGUgQVNUIHByb2dyYW0uXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgcHJvZ3JhbSA9IGNyZWF0ZVByb2dyYW0oW10pO1xuICogYGBgXG4gKi9cbmNvbnN0IGNyZWF0ZVByb2dyYW0gPSAoYm9keTogRVNUcmVlLlByb2dyYW1bXCJib2R5XCJdKTogQVNULlByb2dyYW0gPT4gKHtcbiAgYm9keSxcbiAgY29tbWVudHM6IFtdLFxuICBsb2M6IHtcbiAgICBlbmQ6IHsgY29sdW1uOiAwLCBsaW5lOiAxIH0sXG4gICAgc3RhcnQ6IHsgY29sdW1uOiAwLCBsaW5lOiAxIH0sXG4gIH0sXG4gIHJhbmdlOiBbMCwgMF0sXG4gIHNvdXJjZVR5cGU6IFwibW9kdWxlXCIsXG4gIHRva2VuczogW10sXG4gIHR5cGU6IFwiUHJvZ3JhbVwiLFxufSk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBFU1RyZWUgbGl0ZXJhbCBub2RlLlxuICogQHBhcmFtIHZhbHVlIExpdGVyYWwgc3RyaW5nIHRvIHdyYXAuXG4gKiBAcmV0dXJucyBUaGUgbGl0ZXJhbCBub2RlLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGxpdGVyYWwgPSBjcmVhdGVMaXRlcmFsKFwiLi9mZWF0dXJlXCIpO1xuICogYGBgXG4gKi9cbmNvbnN0IGNyZWF0ZUxpdGVyYWwgPSAodmFsdWU6IHN0cmluZyk6IEVTVHJlZS5MaXRlcmFsID0+XG4gICh7XG4gICAgcmF3OiBgJyR7dmFsdWV9J2AsXG4gICAgdHlwZTogXCJMaXRlcmFsXCIsXG4gICAgdmFsdWUsXG4gIH0pIHNhdGlzZmllcyBFU1RyZWUuTGl0ZXJhbDtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIEVTVHJlZSBpZGVudGlmaWVyIG5vZGUuXG4gKiBAcGFyYW0gbmFtZSBJZGVudGlmaWVyIHRvIGNyZWF0ZS5cbiAqIEByZXR1cm5zIFRoZSBpZGVudGlmaWVyIG5vZGUuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgaWQgPSBjcmVhdGVJZGVudGlmaWVyKFwiYWxsXCIpO1xuICogYGBgXG4gKi9cbmNvbnN0IGNyZWF0ZUlkZW50aWZpZXIgPSAobmFtZTogc3RyaW5nKTogRVNUcmVlLklkZW50aWZpZXIgPT5cbiAgKHsgbmFtZSwgdHlwZTogXCJJZGVudGlmaWVyXCIgfSkgc2F0aXNmaWVzIEVTVHJlZS5JZGVudGlmaWVyO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gRVNUcmVlIGV4cG9ydCBzcGVjaWZpZXIuXG4gKiBAcGFyYW0gbG9jYWxOYW1lIExvY2FsIGlkZW50aWZpZXIgbmFtZS5cbiAqIEBwYXJhbSBleHBvcnRlZE5hbWUgRXhwb3J0ZWQgaWRlbnRpZmllciBuYW1lLlxuICogQHJldHVybnMgRXhwb3J0IHNwZWNpZmllciBub2RlLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHNwZWNpZmllciA9IGNyZWF0ZUV4cG9ydFNwZWNpZmllcihcImZlYXR1cmVcIik7XG4gKiBgYGBcbiAqL1xuY29uc3QgY3JlYXRlRXhwb3J0U3BlY2lmaWVyID0gKFxuICBsb2NhbE5hbWU6IHN0cmluZyxcbiAgZXhwb3J0ZWROYW1lID0gbG9jYWxOYW1lLFxuKTogRVNUcmVlLkV4cG9ydFNwZWNpZmllciA9PlxuICAoe1xuICAgIGV4cG9ydGVkOiBjcmVhdGVJZGVudGlmaWVyKGV4cG9ydGVkTmFtZSksXG4gICAgbG9jYWw6IGNyZWF0ZUlkZW50aWZpZXIobG9jYWxOYW1lKSxcbiAgICB0eXBlOiBcIkV4cG9ydFNwZWNpZmllclwiLFxuICB9KSBzYXRpc2ZpZXMgRVNUcmVlLkV4cG9ydFNwZWNpZmllcjtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIEVTVHJlZSBpbXBvcnQgc3BlY2lmaWVyLlxuICogQHBhcmFtIGxvY2FsTmFtZSBMb2NhbCBpZGVudGlmaWVyIG5hbWUuXG4gKiBAcGFyYW0gaW1wb3J0ZWROYW1lIEltcG9ydGVkIGlkZW50aWZpZXIgbmFtZS5cbiAqIEByZXR1cm5zIEltcG9ydCBzcGVjaWZpZXIgbm9kZS5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBzcGVjaWZpZXIgPSBjcmVhdGVJbXBvcnRTcGVjaWZpZXIoXCJmZWF0dXJlXCIpO1xuICogYGBgXG4gKi9cbmNvbnN0IGNyZWF0ZUltcG9ydFNwZWNpZmllciA9IChcbiAgbG9jYWxOYW1lOiBzdHJpbmcsXG4gIGltcG9ydGVkTmFtZSA9IGxvY2FsTmFtZSxcbik6IEVTVHJlZS5JbXBvcnRTcGVjaWZpZXIgPT5cbiAgKHtcbiAgICBpbXBvcnRlZDogY3JlYXRlSWRlbnRpZmllcihpbXBvcnRlZE5hbWUpLFxuICAgIGxvY2FsOiBjcmVhdGVJZGVudGlmaWVyKGxvY2FsTmFtZSksXG4gICAgdHlwZTogXCJJbXBvcnRTcGVjaWZpZXJcIixcbiAgfSkgc2F0aXNmaWVzIEVTVHJlZS5JbXBvcnRTcGVjaWZpZXI7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBFU1RyZWUgaW1wb3J0IGRlZmF1bHQgc3BlY2lmaWVyLlxuICogQHBhcmFtIGxvY2FsTmFtZSBMb2NhbCBpZGVudGlmaWVyIG5hbWUuXG4gKiBAcmV0dXJucyBJbXBvcnQgZGVmYXVsdCBzcGVjaWZpZXIgbm9kZS5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBzcGVjaWZpZXIgPSBjcmVhdGVJbXBvcnREZWZhdWx0U3BlY2lmaWVyKFwiZmVhdHVyZVwiKTtcbiAqIGBgYFxuICovXG5jb25zdCBjcmVhdGVJbXBvcnREZWZhdWx0U3BlY2lmaWVyID0gKFxuICBsb2NhbE5hbWU6IHN0cmluZyxcbik6IEVTVHJlZS5JbXBvcnREZWZhdWx0U3BlY2lmaWVyID0+XG4gICh7XG4gICAgbG9jYWw6IGNyZWF0ZUlkZW50aWZpZXIobG9jYWxOYW1lKSxcbiAgICB0eXBlOiBcIkltcG9ydERlZmF1bHRTcGVjaWZpZXJcIixcbiAgfSkgc2F0aXNmaWVzIEVTVHJlZS5JbXBvcnREZWZhdWx0U3BlY2lmaWVyO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gaW1wb3J0IGRlY2xhcmF0aW9uIGZvciB0ZXN0IGZpeHR1cmVzLlxuICogQHBhcmFtIHNwZWNpZmllcnMgU3BlY2lmaWVycyB0byBpbmNsdWRlLlxuICogQHJldHVybnMgSW1wb3J0IGRlY2xhcmF0aW9uIG5vZGUgZm9yIHRlc3RzLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IG5vZGUgPSBjcmVhdGVJbXBvcnREZWNsYXJhdGlvbihbY3JlYXRlSW1wb3J0U3BlY2lmaWVyKFwiZmVhdHVyZVwiKV0pO1xuICogYGBgXG4gKi9cbmNvbnN0IGNyZWF0ZUltcG9ydERlY2xhcmF0aW9uID0gKFxuICBzcGVjaWZpZXJzOiBFU1RyZWUuSW1wb3J0RGVjbGFyYXRpb25bXCJzcGVjaWZpZXJzXCJdID0gW10sXG4pOiBFU1RyZWUuSW1wb3J0RGVjbGFyYXRpb24gPT5cbiAgKHtcbiAgICBhdHRyaWJ1dGVzOiBbXSxcbiAgICBzb3VyY2U6IGNyZWF0ZUxpdGVyYWwoXCIuL2ZlYXR1cmVcIiksXG4gICAgc3BlY2lmaWVycyxcbiAgICB0eXBlOiBcIkltcG9ydERlY2xhcmF0aW9uXCIsXG4gIH0pIHNhdGlzZmllcyBFU1RyZWUuSW1wb3J0RGVjbGFyYXRpb247XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBleHBvcnQtYWxsIGRlY2xhcmF0aW9uIGZvciB0ZXN0IGZpeHR1cmVzLlxuICogQHJldHVybnMgVGhlIGV4cG9ydC1hbGwgZGVjbGFyYXRpb24gbm9kZS5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBub2RlID0gY3JlYXRlRXhwb3J0QWxsKCk7XG4gKiBgYGBcbiAqL1xuY29uc3QgY3JlYXRlRXhwb3J0QWxsID0gKCk6IEVTVHJlZS5FeHBvcnRBbGxEZWNsYXJhdGlvbiA9PlxuICAoe1xuICAgIGF0dHJpYnV0ZXM6IFtdLFxuICAgIGV4cG9ydGVkOiBjcmVhdGVJZGVudGlmaWVyKFwiYWxsXCIpLFxuICAgIHNvdXJjZTogY3JlYXRlTGl0ZXJhbChcIi4vZmVhdHVyZVwiKSxcbiAgICB0eXBlOiBcIkV4cG9ydEFsbERlY2xhcmF0aW9uXCIsXG4gIH0pIHNhdGlzZmllcyBFU1RyZWUuRXhwb3J0QWxsRGVjbGFyYXRpb247XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5hbWVkIGV4cG9ydC1mcm9tIGRlY2xhcmF0aW9uIGZvciB0ZXN0IGZpeHR1cmVzLlxuICogQHJldHVybnMgRXhwb3J0IGRlY2xhcmF0aW9uIG5vZGUgZm9yIHRlc3RzLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IG5vZGUgPSBjcmVhdGVFeHBvcnROYW1lZEZyb20oKTtcbiAqIGBgYFxuICovXG5jb25zdCBjcmVhdGVFeHBvcnROYW1lZEZyb20gPSAoKTogRVNUcmVlLkV4cG9ydE5hbWVkRGVjbGFyYXRpb24gPT5cbiAgKHtcbiAgICBhdHRyaWJ1dGVzOiBbXSxcbiAgICBzb3VyY2U6IGNyZWF0ZUxpdGVyYWwoXCIuL2ZlYXR1cmVcIiksXG4gICAgc3BlY2lmaWVyczogW10sXG4gICAgdHlwZTogXCJFeHBvcnROYW1lZERlY2xhcmF0aW9uXCIsXG4gIH0pIHNhdGlzZmllcyBFU1RyZWUuRXhwb3J0TmFtZWREZWNsYXJhdGlvbjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmFtZWQgZXhwb3J0IHdpdGggYSBsb2NhbCBkZWNsYXJhdGlvbi5cbiAqIEByZXR1cm5zIEV4cG9ydCBkZWNsYXJhdGlvbiBub2RlIGZvciB0ZXN0cy5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBub2RlID0gY3JlYXRlRXhwb3J0V2l0aERlY2xhcmF0aW9uKCk7XG4gKiBgYGBcbiAqL1xuY29uc3QgY3JlYXRlRXhwb3J0V2l0aERlY2xhcmF0aW9uID0gKCk6IEVTVHJlZS5FeHBvcnROYW1lZERlY2xhcmF0aW9uID0+IHtcbiAgY29uc3QgZGVjbGFyYXRpb24gPSB7XG4gICAgZGVjbGFyYXRpb25zOiBbXSxcbiAgICBraW5kOiBcImNvbnN0XCIsXG4gICAgdHlwZTogXCJWYXJpYWJsZURlY2xhcmF0aW9uXCIsXG4gIH0gc2F0aXNmaWVzIEVTVHJlZS5WYXJpYWJsZURlY2xhcmF0aW9uO1xuXG4gIHJldHVybiB7XG4gICAgYXR0cmlidXRlczogW10sXG4gICAgZGVjbGFyYXRpb24sXG4gICAgc3BlY2lmaWVyczogW10sXG4gICAgdHlwZTogXCJFeHBvcnROYW1lZERlY2xhcmF0aW9uXCIsXG4gIH0gc2F0aXNmaWVzIEVTVHJlZS5FeHBvcnROYW1lZERlY2xhcmF0aW9uO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmFtZWQgZXhwb3J0IHdpdGhvdXQgYSBzb3VyY2UgdmFsdWUuXG4gKiBAcGFyYW0gc3BlY2lmaWVycyBFeHBvcnQgc3BlY2lmaWVycyB0byBpbmNsdWRlLlxuICogQHJldHVybnMgRXhwb3J0IGRlY2xhcmF0aW9uIG5vZGUgZm9yIHRlc3RzLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IG5vZGUgPSBjcmVhdGVFeHBvcnRXaXRob3V0U291cmNlKFtjcmVhdGVFeHBvcnRTcGVjaWZpZXIoXCJmZWF0dXJlXCIpXSk7XG4gKiBgYGBcbiAqL1xuY29uc3QgY3JlYXRlRXhwb3J0V2l0aG91dFNvdXJjZSA9IChcbiAgc3BlY2lmaWVyczogRVNUcmVlLkV4cG9ydFNwZWNpZmllcltdID0gW10sXG4pOiBFU1RyZWUuRXhwb3J0TmFtZWREZWNsYXJhdGlvbiA9PlxuICAoe1xuICAgIGF0dHJpYnV0ZXM6IFtdLFxuICAgIHNwZWNpZmllcnMsXG4gICAgdHlwZTogXCJFeHBvcnROYW1lZERlY2xhcmF0aW9uXCIsXG4gIH0pIHNhdGlzZmllcyBFU1RyZWUuRXhwb3J0TmFtZWREZWNsYXJhdGlvbjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZGVmYXVsdCBleHBvcnQgZm9yIGFuIGlkZW50aWZpZXIuXG4gKiBAcGFyYW0gbmFtZSBJZGVudGlmaWVyIHRvIGV4cG9ydC5cbiAqIEByZXR1cm5zIEV4cG9ydCBkZWZhdWx0IGRlY2xhcmF0aW9uIG5vZGUgZm9yIHRlc3RzLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IG5vZGUgPSBjcmVhdGVFeHBvcnREZWZhdWx0SWRlbnRpZmllcihcImZlYXR1cmVcIik7XG4gKiBgYGBcbiAqL1xuY29uc3QgY3JlYXRlRXhwb3J0RGVmYXVsdElkZW50aWZpZXIgPSAoXG4gIG5hbWU6IHN0cmluZyxcbik6IEVTVHJlZS5FeHBvcnREZWZhdWx0RGVjbGFyYXRpb24gPT5cbiAgKHtcbiAgICBkZWNsYXJhdGlvbjogY3JlYXRlSWRlbnRpZmllcihuYW1lKSxcbiAgICB0eXBlOiBcIkV4cG9ydERlZmF1bHREZWNsYXJhdGlvblwiLFxuICB9KSBzYXRpc2ZpZXMgRVNUcmVlLkV4cG9ydERlZmF1bHREZWNsYXJhdGlvbjtcblxuLyoqXG4gKiBDb2xsZWN0cyBzdGF0ZW1lbnRzIGludG8gYSBwcm9ncmFtIGJvZHkgYXJyYXkuXG4gKiBAcGFyYW0gc3RhdGVtZW50cyBTdGF0ZW1lbnRzIHRvIGluY2x1ZGUgaW4gdGhlIHByb2dyYW0uXG4gKiBAcmV0dXJucyBUaGUgcHJvZ3JhbSBib2R5IGFycmF5LlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGJvZHkgPSBjcmVhdGVCb2R5KGNyZWF0ZUltcG9ydERlY2xhcmF0aW9uKCkpO1xuICogYGBgXG4gKi9cbmNvbnN0IGNyZWF0ZUJvZHkgPSAoXG4gIC4uLnN0YXRlbWVudHM6IEVTVHJlZS5Qcm9ncmFtW1wiYm9keVwiXVtudW1iZXJdW11cbik6IEVTVHJlZS5Qcm9ncmFtW1wiYm9keVwiXSA9PiBzdGF0ZW1lbnRzO1xuXG4vKipcbiAqIFdyaXRlcyBhIGJhcnJlbCBmaWxlIHRvIHRoZSBnaXZlbiBwYXRoLlxuICogQHBhcmFtIGZpbGVQYXRoIFBhdGggZm9yIHRoZSBiYXJyZWwgZmlsZS5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiB3cml0ZUJhcnJlbChcIi90bXAvaW5kZXgudHNcIik7XG4gKiBgYGBcbiAqL1xuY29uc3Qgd3JpdGVCYXJyZWwgPSAoZmlsZVBhdGg6IHN0cmluZyk6IHZvaWQgPT4ge1xuICBmcy53cml0ZUZpbGVTeW5jKGZpbGVQYXRoLCBcImV4cG9ydCAqIGZyb20gJy4vZmVhdHVyZSc7XCIsIFwidXRmOFwiKTtcbn07XG5cbi8qKlxuICogV3JpdGVzIGEgZmVhdHVyZSBmaWxlIHRvIHRoZSBnaXZlbiBwYXRoLlxuICogQHBhcmFtIGZpbGVQYXRoIFBhdGggZm9yIHRoZSBmZWF0dXJlIGZpbGUuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogd3JpdGVGZWF0dXJlKFwiL3RtcC9mZWF0dXJlLnRzXCIpO1xuICogYGBgXG4gKi9cbmNvbnN0IHdyaXRlRmVhdHVyZSA9IChmaWxlUGF0aDogc3RyaW5nKTogdm9pZCA9PiB7XG4gIGZzLndyaXRlRmlsZVN5bmMoZmlsZVBhdGgsIFwiZXhwb3J0IGNvbnN0IGZlYXR1cmUgPSAxO1wiLCBcInV0ZjhcIik7XG59O1xuXG5leHBvcnQge1xuICBjcmVhdGVCb2R5LFxuICBjcmVhdGVFeHBvcnRBbGwsXG4gIGNyZWF0ZUV4cG9ydERlZmF1bHRJZGVudGlmaWVyLFxuICBjcmVhdGVFeHBvcnROYW1lZEZyb20sXG4gIGNyZWF0ZUV4cG9ydFNwZWNpZmllcixcbiAgY3JlYXRlRXhwb3J0V2l0aERlY2xhcmF0aW9uLFxuICBjcmVhdGVFeHBvcnRXaXRob3V0U291cmNlLFxuICBjcmVhdGVJbXBvcnREZWNsYXJhdGlvbixcbiAgY3JlYXRlSW1wb3J0RGVmYXVsdFNwZWNpZmllcixcbiAgY3JlYXRlSW1wb3J0U3BlY2lmaWVyLFxuICBjcmVhdGVQcm9ncmFtLFxuICBjcmVhdGVSZXBvRGlyZWN0b3J5LFxuICB3cml0ZUJhcnJlbCxcbiAgd3JpdGVGZWF0dXJlLFxufTtcbiJdfQ==
@@ -0,0 +1,25 @@
1
+ /** Type definition for rule data. */
2
+ interface BarrelFilesExportsOnlyOptions {
3
+ /** Folders helper value. */
4
+ folders?: string | string[];
5
+ /** Names helper value. */
6
+ names?: string | string[];
7
+ }
8
+ /** Type definition for rule data. */
9
+ interface ConsistentBarrelFilesOptions {
10
+ /** Enforce helper value. */
11
+ enforce?: boolean;
12
+ /** Folders helper value. */
13
+ folders?: string | string[];
14
+ /** Names helper value. */
15
+ names?: string | string[];
16
+ }
17
+ /** Type definition for rule data. */
18
+ interface NoReexportsOutsideBarrelsOptions {
19
+ /** Folders helper value. */
20
+ folders?: string | string[];
21
+ /** Names helper value. */
22
+ names?: string | string[];
23
+ }
24
+ export type { BarrelFilesExportsOnlyOptions, ConsistentBarrelFilesOptions, NoReexportsOutsideBarrelsOptions, };
25
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/architecture/consistent-barrel-files/types.ts"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,UAAU,6BAA6B;IACrC,4BAA4B;IAC5B,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAE5B,0BAA0B;IAC1B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAC3B;AAED,qCAAqC;AACrC,UAAU,4BAA4B;IACpC,4BAA4B;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,4BAA4B;IAC5B,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAE5B,0BAA0B;IAC1B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAC3B;AAED,qCAAqC;AACrC,UAAU,gCAAgC;IACxC,4BAA4B;IAC5B,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAE5B,0BAA0B;IAC1B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAC3B;AAED,YAAY,EACV,6BAA6B,EAC7B,4BAA4B,EAC5B,gCAAgC,GACjC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXJjaGl0ZWN0dXJlL2NvbnNpc3RlbnQtYmFycmVsLWZpbGVzL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogVHlwZSBkZWZpbml0aW9uIGZvciBydWxlIGRhdGEuICovXG5pbnRlcmZhY2UgQmFycmVsRmlsZXNFeHBvcnRzT25seU9wdGlvbnMge1xuICAvKiogRm9sZGVycyBoZWxwZXIgdmFsdWUuICovXG4gIGZvbGRlcnM/OiBzdHJpbmcgfCBzdHJpbmdbXTtcblxuICAvKiogTmFtZXMgaGVscGVyIHZhbHVlLiAqL1xuICBuYW1lcz86IHN0cmluZyB8IHN0cmluZ1tdO1xufVxuXG4vKiogVHlwZSBkZWZpbml0aW9uIGZvciBydWxlIGRhdGEuICovXG5pbnRlcmZhY2UgQ29uc2lzdGVudEJhcnJlbEZpbGVzT3B0aW9ucyB7XG4gIC8qKiBFbmZvcmNlIGhlbHBlciB2YWx1ZS4gKi9cbiAgZW5mb3JjZT86IGJvb2xlYW47XG5cbiAgLyoqIEZvbGRlcnMgaGVscGVyIHZhbHVlLiAqL1xuICBmb2xkZXJzPzogc3RyaW5nIHwgc3RyaW5nW107XG5cbiAgLyoqIE5hbWVzIGhlbHBlciB2YWx1ZS4gKi9cbiAgbmFtZXM/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbn1cblxuLyoqIFR5cGUgZGVmaW5pdGlvbiBmb3IgcnVsZSBkYXRhLiAqL1xuaW50ZXJmYWNlIE5vUmVleHBvcnRzT3V0c2lkZUJhcnJlbHNPcHRpb25zIHtcbiAgLyoqIEZvbGRlcnMgaGVscGVyIHZhbHVlLiAqL1xuICBmb2xkZXJzPzogc3RyaW5nIHwgc3RyaW5nW107XG5cbiAgLyoqIE5hbWVzIGhlbHBlciB2YWx1ZS4gKi9cbiAgbmFtZXM/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IHR5cGUge1xuICBCYXJyZWxGaWxlc0V4cG9ydHNPbmx5T3B0aW9ucyxcbiAgQ29uc2lzdGVudEJhcnJlbEZpbGVzT3B0aW9ucyxcbiAgTm9SZWV4cG9ydHNPdXRzaWRlQmFycmVsc09wdGlvbnMsXG59O1xuIl19
@@ -0,0 +1,2 @@
1
+ export { barrelFilesExportsOnlyRule, consistentBarrelFilesRule, noReexportsOutsideBarrelsRule, } from "./consistent-barrel-files";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/architecture/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,EAC1B,yBAAyB,EACzB,6BAA6B,GAC9B,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { barrelFilesExportsOnlyRule, consistentBarrelFilesRule, noReexportsOutsideBarrelsRule, } from "./consistent-barrel-files";
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXJjaGl0ZWN0dXJlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCwwQkFBMEIsRUFDMUIseUJBQXlCLEVBQ3pCLDZCQUE2QixHQUM5QixNQUFNLDJCQUEyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHtcbiAgYmFycmVsRmlsZXNFeHBvcnRzT25seVJ1bGUsXG4gIGNvbnNpc3RlbnRCYXJyZWxGaWxlc1J1bGUsXG4gIG5vUmVleHBvcnRzT3V0c2lkZUJhcnJlbHNSdWxlLFxufSBmcm9tIFwiLi9jb25zaXN0ZW50LWJhcnJlbC1maWxlc1wiO1xuIl19
@@ -0,0 +1,83 @@
1
+ /** Shape of a benchmark case. */
2
+ interface BenchmarkCase {
3
+ /** Source code passed to ESLint. */
4
+ code: string;
5
+ /** Filename used for the lint run. */
6
+ filename: string;
7
+ /** Rule id inside the internal plugin. */
8
+ ruleName: string;
9
+ }
10
+ /** Summary returned by a benchmark run. */
11
+ interface BenchmarkSummary {
12
+ /** Elapsed milliseconds across all iterations. */
13
+ elapsedMilliseconds: number;
14
+ /** Iteration count used by the run. */
15
+ iterations: number;
16
+ /** Rule name under test. */
17
+ ruleName: string;
18
+ }
19
+ /** Benchmark cases covering the heavier package-owned rules. */
20
+ declare const benchmarkCases: readonly [{
21
+ readonly code: string;
22
+ readonly filename: "src/features.ts";
23
+ readonly ruleName: "prefer-interface-types";
24
+ }, {
25
+ readonly code: string;
26
+ readonly filename: "src/docs.ts";
27
+ readonly ruleName: "require-example-language";
28
+ }, {
29
+ readonly code: string;
30
+ readonly filename: "src/example.spec.ts";
31
+ readonly ruleName: "prefer-vi-mocked-import";
32
+ }, {
33
+ readonly code: string;
34
+ readonly filename: "src/index.ts";
35
+ readonly ruleName: "consistent-barrel-files";
36
+ }];
37
+ /**
38
+ * Formats a benchmark summary for console output.
39
+ * @param summary Summary to format.
40
+ * @returns Return value output.
41
+ * @example
42
+ * ```typescript
43
+ * const line = formatBenchmarkSummary({
44
+ * elapsedMilliseconds: 10,
45
+ * iterations: 1,
46
+ * ruleName: "prefer-interface-types",
47
+ * });
48
+ * ```
49
+ */
50
+ declare function formatBenchmarkSummary(summary: BenchmarkSummary): string;
51
+ /**
52
+ * Runs the benchmark command and prints each summary.
53
+ * @param iterationsOverride Optional iteration count used by the run.
54
+ * @example
55
+ * ```typescript
56
+ * main(1);
57
+ * ```
58
+ */
59
+ declare function main(iterationsOverride?: number): void;
60
+ /**
61
+ * Runs a benchmark case and returns the elapsed milliseconds.
62
+ * @param benchmarkCase Benchmark definition.
63
+ * @param iterationsOverride Optional iteration count used by the run.
64
+ * @returns Return value output.
65
+ * @example
66
+ * ```typescript
67
+ * const summary = runBenchmark(benchmarkCases[0], 1);
68
+ * ```
69
+ */
70
+ declare function runBenchmark(benchmarkCase: BenchmarkCase, iterationsOverride?: number): BenchmarkSummary;
71
+ /**
72
+ * Runs all benchmark cases and returns their summaries.
73
+ * @param iterationsOverride Optional iteration count used by the run.
74
+ * @returns Return value output.
75
+ * @example
76
+ * ```typescript
77
+ * const summaries = runBenchmarks(1);
78
+ * ```
79
+ */
80
+ declare function runBenchmarks(iterationsOverride?: number): BenchmarkSummary[];
81
+ export { benchmarkCases, formatBenchmarkSummary, main, runBenchmark, runBenchmarks, };
82
+ export type { BenchmarkCase, BenchmarkSummary };
83
+ //# sourceMappingURL=benchmark-rules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"benchmark-rules.d.ts","sourceRoot":"","sources":["../src/benchmark-rules.ts"],"names":[],"mappings":"AAcA,iCAAiC;AACjC,UAAU,aAAa;IACrB,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IAEb,sCAAsC;IACtC,QAAQ,EAAE,MAAM,CAAC;IAEjB,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,2CAA2C;AAC3C,UAAU,gBAAgB;IACxB,kDAAkD;IAClD,mBAAmB,EAAE,MAAM,CAAC;IAE5B,uCAAuC;IACvC,UAAU,EAAE,MAAM,CAAC;IAEnB,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAYD,gEAAgE;AAChE,QAAA,MAAM,cAAc;;;;;;;;;;;;;;;;EAwC6C,CAAC;AAElE;;;;;;;;;;;;GAYG;AACH,iBAAS,sBAAsB,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAEjE;AAgCD;;;;;;;GAOG;AACH,iBAAS,IAAI,CAAC,kBAAkB,SAAa,GAAG,IAAI,CAInD;AAED;;;;;;;;;GASG;AACH,iBAAS,YAAY,CACnB,aAAa,EAAE,aAAa,EAC5B,kBAAkB,SAAa,GAC9B,gBAAgB,CAiClB;AAED;;;;;;;;GAQG;AACH,iBAAS,aAAa,CAAC,kBAAkB,SAAa,GAAG,gBAAgB,EAAE,CAI1E;AAqBD,OAAO,EACL,cAAc,EACd,sBAAsB,EACtB,IAAI,EACJ,YAAY,EACZ,aAAa,GACd,CAAC;AACF,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,CAAC"}
@@ -0,0 +1,175 @@
1
+ import { Linter } from "eslint";
2
+ import { performance } from "node:perf_hooks";
3
+ import { pathToFileURL } from "node:url";
4
+ import { parser } from "typescript-eslint";
5
+ import { consistentBarrelFilesRule, preferInterfaceTypesRule, preferViMockedImportRule, requireExampleLanguageRule, } from "./rules";
6
+ /** Iteration count for each benchmark case. */
7
+ const iterations = 25;
8
+ /** Shared TypeScript language options for benchmark runs. */
9
+ const languageOptions = {
10
+ ecmaVersion: 2022,
11
+ parser,
12
+ sourceType: "module",
13
+ };
14
+ /** Benchmark cases covering the heavier package-owned rules. */
15
+ const benchmarkCases = [
16
+ {
17
+ code: Array.from({ length: 200 }, (_unused, index) => {
18
+ return `export interface Feature${index} { value: string }`;
19
+ }).join("\n"),
20
+ filename: "src/features.ts",
21
+ ruleName: "prefer-interface-types",
22
+ },
23
+ {
24
+ code: Array.from({ length: 150 }, (_unused, index) => {
25
+ return [
26
+ "/**",
27
+ ` * @example feature${index}()`,
28
+ " * ```typescript",
29
+ ` * feature${index}();`,
30
+ " * ```",
31
+ " */",
32
+ `export function feature${index}(): void {}`,
33
+ ].join("\n");
34
+ }).join("\n"),
35
+ filename: "src/docs.ts",
36
+ ruleName: "require-example-language",
37
+ },
38
+ {
39
+ code: Array.from({ length: 100 }, (_unused, index) => {
40
+ return [
41
+ `const mockedFeature${index} = vi.fn();`,
42
+ `vi.mock("./feature-${index}", () => ({ feature${index}: mockedFeature${index} }));`,
43
+ ].join("\n");
44
+ }).join("\n"),
45
+ filename: "src/example.spec.ts",
46
+ ruleName: "prefer-vi-mocked-import",
47
+ },
48
+ {
49
+ code: Array.from({ length: 150 }, (_unused, index) => {
50
+ return `export * from "./feature-${index}";`;
51
+ }).join("\n"),
52
+ filename: "src/index.ts",
53
+ ruleName: "consistent-barrel-files",
54
+ },
55
+ ];
56
+ /**
57
+ * Formats a benchmark summary for console output.
58
+ * @param summary Summary to format.
59
+ * @returns Return value output.
60
+ * @example
61
+ * ```typescript
62
+ * const line = formatBenchmarkSummary({
63
+ * elapsedMilliseconds: 10,
64
+ * iterations: 1,
65
+ * ruleName: "prefer-interface-types",
66
+ * });
67
+ * ```
68
+ */
69
+ function formatBenchmarkSummary(summary) {
70
+ return `${summary.ruleName}: ${summary.elapsedMilliseconds}ms total for ${summary.iterations} iterations`;
71
+ }
72
+ /**
73
+ * Resolves the rule module used for a benchmark case.
74
+ * @param ruleName Internal rule name.
75
+ * @returns Return value output.
76
+ * @throws {TypeError} When the benchmark case references an unsupported rule.
77
+ * @example
78
+ * ```typescript
79
+ * const rule = getRuleModule("prefer-interface-types");
80
+ * ```
81
+ */
82
+ function getRuleModule(ruleName) {
83
+ switch (ruleName) {
84
+ case "consistent-barrel-files": {
85
+ return consistentBarrelFilesRule;
86
+ }
87
+ case "prefer-interface-types": {
88
+ return preferInterfaceTypesRule;
89
+ }
90
+ case "prefer-vi-mocked-import": {
91
+ return preferViMockedImportRule;
92
+ }
93
+ case "require-example-language": {
94
+ return requireExampleLanguageRule;
95
+ }
96
+ default: {
97
+ throw new TypeError(`Unsupported benchmark rule: ${ruleName}`);
98
+ }
99
+ }
100
+ }
101
+ /**
102
+ * Runs the benchmark command and prints each summary.
103
+ * @param iterationsOverride Optional iteration count used by the run.
104
+ * @example
105
+ * ```typescript
106
+ * main(1);
107
+ * ```
108
+ */
109
+ function main(iterationsOverride = iterations) {
110
+ for (const summary of runBenchmarks(iterationsOverride)) {
111
+ process.stdout.write(`${formatBenchmarkSummary(summary)}\n`);
112
+ }
113
+ }
114
+ /**
115
+ * Runs a benchmark case and returns the elapsed milliseconds.
116
+ * @param benchmarkCase Benchmark definition.
117
+ * @param iterationsOverride Optional iteration count used by the run.
118
+ * @returns Return value output.
119
+ * @example
120
+ * ```typescript
121
+ * const summary = runBenchmark(benchmarkCases[0], 1);
122
+ * ```
123
+ */
124
+ function runBenchmark(benchmarkCase, iterationsOverride = iterations) {
125
+ const linter = new Linter({ configType: "flat" });
126
+ const pluginRules = Object.fromEntries([
127
+ [benchmarkCase.ruleName, getRuleModule(benchmarkCase.ruleName)],
128
+ ]);
129
+ const start = performance.now();
130
+ for (let iteration = 0; iteration < iterationsOverride; iteration += 1) {
131
+ void linter.verify(benchmarkCase.code, [
132
+ {
133
+ files: ["**/*.ts"],
134
+ languageOptions,
135
+ plugins: {
136
+ codeperfect: {
137
+ rules: pluginRules,
138
+ },
139
+ },
140
+ rules: {
141
+ [`codeperfect/${benchmarkCase.ruleName}`]: "error",
142
+ },
143
+ },
144
+ ], benchmarkCase.filename);
145
+ }
146
+ return {
147
+ elapsedMilliseconds: Number((performance.now() - start).toFixed(2)),
148
+ iterations: iterationsOverride,
149
+ ruleName: benchmarkCase.ruleName,
150
+ };
151
+ }
152
+ /**
153
+ * Runs all benchmark cases and returns their summaries.
154
+ * @param iterationsOverride Optional iteration count used by the run.
155
+ * @returns Return value output.
156
+ * @example
157
+ * ```typescript
158
+ * const summaries = runBenchmarks(1);
159
+ * ```
160
+ */
161
+ function runBenchmarks(iterationsOverride = iterations) {
162
+ return benchmarkCases.map((benchmarkCase) => runBenchmark(benchmarkCase, iterationsOverride));
163
+ }
164
+ /** Current CLI entry file when invoked from the terminal. */
165
+ const [, currentEntry] = process.argv;
166
+ /** Iteration count used by the CLI entry point. */
167
+ const cliIterations = Number(process.env["BENCHMARK_RULE_ITERATIONS"] ?? iterations);
168
+ if (currentEntry !== void 0 &&
169
+ import.meta.url === pathToFileURL(currentEntry).href) {
170
+ main(Number.isNaN(cliIterations) || cliIterations < 1
171
+ ? iterations
172
+ : cliIterations);
173
+ }
174
+ export { benchmarkCases, formatBenchmarkSummary, main, runBenchmark, runBenchmarks, };
175
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVuY2htYXJrLXJ1bGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2JlbmNobWFyay1ydWxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUUzQyxPQUFPLEVBQ0wseUJBQXlCLEVBQ3pCLHdCQUF3QixFQUN4Qix3QkFBd0IsRUFDeEIsMEJBQTBCLEdBQzNCLE1BQU0sU0FBUyxDQUFDO0FBMEJqQiwrQ0FBK0M7QUFDL0MsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDO0FBRXRCLDZEQUE2RDtBQUM3RCxNQUFNLGVBQWUsR0FBRztJQUN0QixXQUFXLEVBQUUsSUFBSTtJQUNqQixNQUFNO0lBQ04sVUFBVSxFQUFFLFFBQVE7Q0FDWixDQUFDO0FBRVgsZ0VBQWdFO0FBQ2hFLE1BQU0sY0FBYyxHQUFHO0lBQ3JCO1FBQ0UsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDbkQsT0FBTywyQkFBMkIsS0FBSyxvQkFBb0IsQ0FBQztRQUM5RCxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ2IsUUFBUSxFQUFFLGlCQUFpQjtRQUMzQixRQUFRLEVBQUUsd0JBQXdCO0tBQ25DO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUNuRCxPQUFPO2dCQUNMLEtBQUs7Z0JBQ0ws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QU0sQ0FDMUIsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLFVBQVUsQ0FDdkQsQ0FBQztBQUVGLElBQ0UsWUFBWSxLQUFLLEtBQUssQ0FBQztJQUN2QixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxFQUNwRCxDQUFDO0lBQ0QsSUFBSSxDQUNGLE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksYUFBYSxHQUFHLENBQUM7UUFDOUMsQ0FBQyxDQUFDLFVBQVU7UUFDWixDQUFDLENBQUMsYUFBYSxDQUNsQixDQUFDO0FBQ0osQ0FBQztBQUVELE9BQU8sRUFDTCxjQUFjLEVBQ2Qsc0JBQXNCLEVBQ3RCLElBQUksRUFDSixZQUFZLEVBQ1osYUFBYSxHQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFJ1bGUgfSBmcm9tIFwiZXNsaW50XCI7XG5cbmltcG9ydCB7IExpbnRlciB9IGZyb20gXCJlc2xpbnRcIjtcbmltcG9ydCB7IHBlcmZvcm1hbmNlIH0gZnJvbSBcIm5vZGU6cGVyZl9ob29rc1wiO1xuaW1wb3J0IHsgcGF0aFRvRmlsZVVSTCB9IGZyb20gXCJub2RlOnVybFwiO1xuaW1wb3J0IHsgcGFyc2VyIH0gZnJvbSBcInR5cGVzY3JpcHQtZXNsaW50XCI7XG5cbmltcG9ydCB7XG4gIGNvbnNpc3RlbnRCYXJyZWxGaWxlc1J1bGUsXG4gIHByZWZlckludGVyZmFjZVR5cGVzUnVsZSxcbiAgcHJlZmVyVmlNb2NrZWRJbXBvcnRSdWxlLFxuICByZXF1aXJlRXhhbXBsZUxhbmd1YWdlUnVsZSxcbn0gZnJvbSBcIi4vcnVsZXNcIjtcblxuLyoqIFNoYXBlIG9mIGEgYmVuY2htYXJrIGNhc2UuICovXG5pbnRlcmZhY2UgQmVuY2htYXJrQ2FzZSB7XG4gIC8qKiBTb3VyY2UgY29kZSBwYXNzZWQgdG8gRVNMaW50LiAqL1xuICBjb2RlOiBzdHJpbmc7XG5cbiAgLyoqIEZpbGVuYW1lIHVzZWQgZm9yIHRoZSBsaW50IHJ1bi4gKi9cbiAgZmlsZW5hbWU6IHN0cmluZztcblxuICAvKiogUnVsZSBpZCBpbnNpZGUgdGhlIGludGVybmFsIHBsdWdpbi4gKi9cbiAgcnVsZU5hbWU6IHN0cmluZztcbn1cblxuLyoqIFN1bW1hcnkgcmV0dXJuZWQgYnkgYSBiZW5jaG1hcmsgcnVuLiAqL1xuaW50ZXJmYWNlIEJlbmNobWFya1N1bW1hcnkge1xuICAvKiogRWxhcHNlZCBtaWxsaXNlY29uZHMgYWNyb3NzIGFsbCBpdGVyYXRpb25zLiAqL1xuICBlbGFwc2VkTWlsbGlzZWNvbmRzOiBudW1iZXI7XG5cbiAgLyoqIEl0ZXJhdGlvbiBjb3VudCB1c2VkIGJ5IHRoZSBydW4uICovXG4gIGl0ZXJhdGlvbnM6IG51bWJlcjtcblxuICAvKiogUnVsZSBuYW1lIHVuZGVyIHRlc3QuICovXG4gIHJ1bGVOYW1lOiBzdHJpbmc7XG59XG5cbi8qKiBJdGVyYXRpb24gY291bnQgZm9yIGVhY2ggYmVuY2htYXJrIGNhc2UuICovXG5jb25zdCBpdGVyYXRpb25zID0gMjU7XG5cbi8qKiBTaGFyZWQgVHlwZVNjcmlwdCBsYW5ndWFnZSBvcHRpb25zIGZvciBiZW5jaG1hcmsgcnVucy4gKi9cbmNvbnN0IGxhbmd1YWdlT3B0aW9ucyA9IHtcbiAgZWNtYVZlcnNpb246IDIwMjIsXG4gIHBhcnNlcixcbiAgc291cmNlVHlwZTogXCJtb2R1bGVcIixcbn0gYXMgY29uc3Q7XG5cbi8qKiBCZW5jaG1hcmsgY2FzZXMgY292ZXJpbmcgdGhlIGhlYXZpZXIgcGFja2FnZS1vd25lZCBydWxlcy4gKi9cbmNvbnN0IGJlbmNobWFya0Nhc2VzID0gW1xuICB7XG4gICAgY29kZTogQXJyYXkuZnJvbSh7IGxlbmd0aDogMjAwIH0sIChfdW51c2VkLCBpbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIGBleHBvcnQgaW50ZXJmYWNlIEZlYXR1cmUke2luZGV4fSB7IHZhbHVlOiBzdHJpbmcgfWA7XG4gICAgfSkuam9pbihcIlxcblwiKSxcbiAgICBmaWxlbmFtZTogXCJzcmMvZmVhdHVyZXMudHNcIixcbiAgICBydWxlTmFtZTogXCJwcmVmZXItaW50ZXJmYWNlLXR5cGVzXCIsXG4gIH0sXG4gIHtcbiAgICBjb2RlOiBBcnJheS5mcm9tKHsgbGVuZ3RoOiAxNTAgfSwgKF91bnVzZWQsIGluZGV4KSA9PiB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICBcIi8qKlwiLFxuICAgICAgICBgICogQGV4YW1wbGUgZmVhdHVyZSR7aW5kZXh9KClgLFxuICAgICAgICBcIiAqIGBgYHR5cGVzY3JpcHRcIixcbiAgICAgICAgYCAqIGZlYXR1cmUke2luZGV4fSgpO2AsXG4gICAgICAgIFwiICogYGBgXCIsXG4gICAgICAgIFwiICovXCIsXG4gICAgICAgIGBleHBvcnQgZnVuY3Rpb24gZmVhdHVyZSR7aW5kZXh9KCk6IHZvaWQge31gLFxuICAgICAgXS5qb2luKFwiXFxuXCIpO1xuICAgIH0pLmpvaW4oXCJcXG5cIiksXG4gICAgZmlsZW5hbWU6IFwic3JjL2RvY3MudHNcIixcbiAgICBydWxlTmFtZTogXCJyZXF1aXJlLWV4YW1wbGUtbGFuZ3VhZ2VcIixcbiAgfSxcbiAge1xuICAgIGNvZGU6IEFycmF5LmZyb20oeyBsZW5ndGg6IDEwMCB9LCAoX3VudXNlZCwgaW5kZXgpID0+IHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIGBjb25zdCBtb2NrZWRGZWF0dXJlJHtpbmRleH0gPSB2aS5mbigpO2AsXG4gICAgICAgIGB2aS5tb2NrKFwiLi9mZWF0dXJlLSR7aW5kZXh9XCIsICgpID0+ICh7IGZlYXR1cmUke2luZGV4fTogbW9ja2VkRmVhdHVyZSR7aW5kZXh9IH0pKTtgLFxuICAgICAgXS5qb2luKFwiXFxuXCIpO1xuICAgIH0pLmpvaW4oXCJcXG5cIiksXG4gICAgZmlsZW5hbWU6IFwic3JjL2V4YW1wbGUuc3BlYy50c1wiLFxuICAgIHJ1bGVOYW1lOiBcInByZWZlci12aS1tb2NrZWQtaW1wb3J0XCIsXG4gIH0sXG4gIHtcbiAgICBjb2RlOiBBcnJheS5mcm9tKHsgbGVuZ3RoOiAxNTAgfSwgKF91bnVzZWQsIGluZGV4KSA9PiB7XG4gICAgICByZXR1cm4gYGV4cG9ydCAqIGZyb20gXCIuL2ZlYXR1cmUtJHtpbmRleH1cIjtgO1xuICAgIH0pLmpvaW4oXCJcXG5cIiksXG4gICAgZmlsZW5hbWU6IFwic3JjL2luZGV4LnRzXCIsXG4gICAgcnVsZU5hbWU6IFwiY29uc2lzdGVudC1iYXJyZWwtZmlsZXNcIixcbiAgfSxcbl0gYXMgY29uc3Qgc2F0aXNmaWVzIHJlYWRvbmx5IFtCZW5jaG1hcmtDYXNlLCAuLi5CZW5jaG1hcmtDYXNlW11dO1xuXG4vKipcbiAqIEZvcm1hdHMgYSBiZW5jaG1hcmsgc3VtbWFyeSBmb3IgY29uc29sZSBvdXRwdXQuXG4gKiBAcGFyYW0gc3VtbWFyeSBTdW1tYXJ5IHRvIGZvcm1hdC5cbiAqIEByZXR1cm5zIFJldHVybiB2YWx1ZSBvdXRwdXQuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgbGluZSA9IGZvcm1hdEJlbmNobWFya1N1bW1hcnkoe1xuICogICBlbGFwc2VkTWlsbGlzZWNvbmRzOiAxMCxcbiAqICAgaXRlcmF0aW9uczogMSxcbiAqICAgcnVsZU5hbWU6IFwicHJlZmVyLWludGVyZmFjZS10eXBlc1wiLFxuICogfSk7XG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gZm9ybWF0QmVuY2htYXJrU3VtbWFyeShzdW1tYXJ5OiBCZW5jaG1hcmtTdW1tYXJ5KTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke3N1bW1hcnkucnVsZU5hbWV9OiAke3N1bW1hcnkuZWxhcHNlZE1pbGxpc2Vjb25kc31tcyB0b3RhbCBmb3IgJHtzdW1tYXJ5Lml0ZXJhdGlvbnN9IGl0ZXJhdGlvbnNgO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBydWxlIG1vZHVsZSB1c2VkIGZvciBhIGJlbmNobWFyayBjYXNlLlxuICogQHBhcmFtIHJ1bGVOYW1lIEludGVybmFsIHJ1bGUgbmFtZS5cbiAqIEByZXR1cm5zIFJldHVybiB2YWx1ZSBvdXRwdXQuXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IFdoZW4gdGhlIGJlbmNobWFyayBjYXNlIHJlZmVyZW5jZXMgYW4gdW5zdXBwb3J0ZWQgcnVsZS5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBydWxlID0gZ2V0UnVsZU1vZHVsZShcInByZWZlci1pbnRlcmZhY2UtdHlwZXNcIik7XG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gZ2V0UnVsZU1vZHVsZShydWxlTmFtZTogQmVuY2htYXJrQ2FzZVtcInJ1bGVOYW1lXCJdKTogUnVsZS5SdWxlTW9kdWxlIHtcbiAgc3dpdGNoIChydWxlTmFtZSkge1xuICAgIGNhc2UgXCJjb25zaXN0ZW50LWJhcnJlbC1maWxlc1wiOiB7XG4gICAgICByZXR1cm4gY29uc2lzdGVudEJhcnJlbEZpbGVzUnVsZTtcbiAgICB9XG4gICAgY2FzZSBcInByZWZlci1pbnRlcmZhY2UtdHlwZXNcIjoge1xuICAgICAgcmV0dXJuIHByZWZlckludGVyZmFjZVR5cGVzUnVsZTtcbiAgICB9XG4gICAgY2FzZSBcInByZWZlci12aS1tb2NrZWQtaW1wb3J0XCI6IHtcbiAgICAgIHJldHVybiBwcmVmZXJWaU1vY2tlZEltcG9ydFJ1bGU7XG4gICAgfVxuICAgIGNhc2UgXCJyZXF1aXJlLWV4YW1wbGUtbGFuZ3VhZ2VcIjoge1xuICAgICAgcmV0dXJuIHJlcXVpcmVFeGFtcGxlTGFuZ3VhZ2VSdWxlO1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBVbnN1cHBvcnRlZCBiZW5jaG1hcmsgcnVsZTogJHtydWxlTmFtZX1gKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSdW5zIHRoZSBiZW5jaG1hcmsgY29tbWFuZCBhbmQgcHJpbnRzIGVhY2ggc3VtbWFyeS5cbiAqIEBwYXJhbSBpdGVyYXRpb25zT3ZlcnJpZGUgT3B0aW9uYWwgaXRlcmF0aW9uIGNvdW50IHVzZWQgYnkgdGhlIHJ1bi5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBtYWluKDEpO1xuICogYGBgXG4gKi9cbmZ1bmN0aW9uIG1haW4oaXRlcmF0aW9uc092ZXJyaWRlID0gaXRlcmF0aW9ucyk6IHZvaWQge1xuICBmb3IgKGNvbnN0IHN1bW1hcnkgb2YgcnVuQmVuY2htYXJrcyhpdGVyYXRpb25zT3ZlcnJpZGUpKSB7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYCR7Zm9ybWF0QmVuY2htYXJrU3VtbWFyeShzdW1tYXJ5KX1cXG5gKTtcbiAgfVxufVxuXG4vKipcbiAqIFJ1bnMgYSBiZW5jaG1hcmsgY2FzZSBhbmQgcmV0dXJucyB0aGUgZWxhcHNlZCBtaWxsaXNlY29uZHMuXG4gKiBAcGFyYW0gYmVuY2htYXJrQ2FzZSBCZW5jaG1hcmsgZGVmaW5pdGlvbi5cbiAqIEBwYXJhbSBpdGVyYXRpb25zT3ZlcnJpZGUgT3B0aW9uYWwgaXRlcmF0aW9uIGNvdW50IHVzZWQgYnkgdGhlIHJ1bi5cbiAqIEByZXR1cm5zIFJldHVybiB2YWx1ZSBvdXRwdXQuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3Qgc3VtbWFyeSA9IHJ1bkJlbmNobWFyayhiZW5jaG1hcmtDYXNlc1swXSwgMSk7XG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gcnVuQmVuY2htYXJrKFxuICBiZW5jaG1hcmtDYXNlOiBCZW5jaG1hcmtDYXNlLFxuICBpdGVyYXRpb25zT3ZlcnJpZGUgPSBpdGVyYXRpb25zLFxuKTogQmVuY2htYXJrU3VtbWFyeSB7XG4gIGNvbnN0IGxpbnRlciA9IG5ldyBMaW50ZXIoeyBjb25maWdUeXBlOiBcImZsYXRcIiB9KTtcbiAgY29uc3QgcGx1Z2luUnVsZXMgPSBPYmplY3QuZnJvbUVudHJpZXMoW1xuICAgIFtiZW5jaG1hcmtDYXNlLnJ1bGVOYW1lLCBnZXRSdWxlTW9kdWxlKGJlbmNobWFya0Nhc2UucnVsZU5hbWUpXSxcbiAgXSkgYXMgUmVjb3JkPHN0cmluZywgUnVsZS5SdWxlTW9kdWxlPjtcbiAgY29uc3Qgc3RhcnQgPSBwZXJmb3JtYW5jZS5ub3coKTtcblxuICBmb3IgKGxldCBpdGVyYXRpb24gPSAwOyBpdGVyYXRpb24gPCBpdGVyYXRpb25zT3ZlcnJpZGU7IGl0ZXJhdGlvbiArPSAxKSB7XG4gICAgdm9pZCBsaW50ZXIudmVyaWZ5KFxuICAgICAgYmVuY2htYXJrQ2FzZS5jb2RlLFxuICAgICAgW1xuICAgICAgICB7XG4gICAgICAgICAgZmlsZXM6IFtcIioqLyoudHNcIl0sXG4gICAgICAgICAgbGFuZ3VhZ2VPcHRpb25zLFxuICAgICAgICAgIHBsdWdpbnM6IHtcbiAgICAgICAgICAgIGNvZGVwZXJmZWN0OiB7XG4gICAgICAgICAgICAgIHJ1bGVzOiBwbHVnaW5SdWxlcyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBydWxlczoge1xuICAgICAgICAgICAgW2Bjb2RlcGVyZmVjdC8ke2JlbmNobWFya0Nhc2UucnVsZU5hbWV9YF06IFwiZXJyb3JcIixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGJlbmNobWFya0Nhc2UuZmlsZW5hbWUsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZWxhcHNlZE1pbGxpc2Vjb25kczogTnVtYmVyKChwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0KS50b0ZpeGVkKDIpKSxcbiAgICBpdGVyYXRpb25zOiBpdGVyYXRpb25zT3ZlcnJpZGUsXG4gICAgcnVsZU5hbWU6IGJlbmNobWFya0Nhc2UucnVsZU5hbWUsXG4gIH07XG59XG5cbi8qKlxuICogUnVucyBhbGwgYmVuY2htYXJrIGNhc2VzIGFuZCByZXR1cm5zIHRoZWlyIHN1bW1hcmllcy5cbiAqIEBwYXJhbSBpdGVyYXRpb25zT3ZlcnJpZGUgT3B0aW9uYWwgaXRlcmF0aW9uIGNvdW50IHVzZWQgYnkgdGhlIHJ1bi5cbiAqIEByZXR1cm5zIFJldHVybiB2YWx1ZSBvdXRwdXQuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3Qgc3VtbWFyaWVzID0gcnVuQmVuY2htYXJrcygxKTtcbiAqIGBgYFxuICovXG5mdW5jdGlvbiBydW5CZW5jaG1hcmtzKGl0ZXJhdGlvbnNPdmVycmlkZSA9IGl0ZXJhdGlvbnMpOiBCZW5jaG1hcmtTdW1tYXJ5W10ge1xuICByZXR1cm4gYmVuY2htYXJrQ2FzZXMubWFwKChiZW5jaG1hcmtDYXNlKSA9PlxuICAgIHJ1bkJlbmNobWFyayhiZW5jaG1hcmtDYXNlLCBpdGVyYXRpb25zT3ZlcnJpZGUpLFxuICApO1xufVxuXG4vKiogQ3VycmVudCBDTEkgZW50cnkgZmlsZSB3aGVuIGludm9rZWQgZnJvbSB0aGUgdGVybWluYWwuICovXG5jb25zdCBbLCBjdXJyZW50RW50cnldID0gcHJvY2Vzcy5hcmd2O1xuXG4vKiogSXRlcmF0aW9uIGNvdW50IHVzZWQgYnkgdGhlIENMSSBlbnRyeSBwb2ludC4gKi9cbmNvbnN0IGNsaUl0ZXJhdGlvbnMgPSBOdW1iZXIoXG4gIHByb2Nlc3MuZW52W1wiQkVOQ0hNQVJLX1JVTEVfSVRFUkFUSU9OU1wiXSA/PyBpdGVyYXRpb25zLFxuKTtcblxuaWYgKFxuICBjdXJyZW50RW50cnkgIT09IHZvaWQgMCAmJlxuICBpbXBvcnQubWV0YS51cmwgPT09IHBhdGhUb0ZpbGVVUkwoY3VycmVudEVudHJ5KS5ocmVmXG4pIHtcbiAgbWFpbihcbiAgICBOdW1iZXIuaXNOYU4oY2xpSXRlcmF0aW9ucykgfHwgY2xpSXRlcmF0aW9ucyA8IDFcbiAgICAgID8gaXRlcmF0aW9uc1xuICAgICAgOiBjbGlJdGVyYXRpb25zLFxuICApO1xufVxuXG5leHBvcnQge1xuICBiZW5jaG1hcmtDYXNlcyxcbiAgZm9ybWF0QmVuY2htYXJrU3VtbWFyeSxcbiAgbWFpbixcbiAgcnVuQmVuY2htYXJrLFxuICBydW5CZW5jaG1hcmtzLFxufTtcbmV4cG9ydCB0eXBlIHsgQmVuY2htYXJrQ2FzZSwgQmVuY2htYXJrU3VtbWFyeSB9O1xuIl19
@@ -0,0 +1,46 @@
1
+ import type { Rule } from "eslint";
2
+ /** Rule registry exposed by the package plugin. */
3
+ declare const codeperfectRules: {
4
+ readonly "assert-actual-expected-names": Rule.RuleModule;
5
+ readonly "barrel-files-exports-only": Rule.RuleModule;
6
+ readonly "consistent-barrel-files": Rule.RuleModule;
7
+ readonly "enforce-aaa-phase-purity": Rule.RuleModule;
8
+ readonly "enforce-aaa-structure": Rule.RuleModule;
9
+ readonly "no-interface-member-docs": Rule.RuleModule;
10
+ readonly "no-multiple-declarators": Rule.RuleModule;
11
+ readonly "no-reexports-outside-barrels": Rule.RuleModule;
12
+ readonly "prefer-interface-types": Rule.RuleModule;
13
+ readonly "prefer-vi-mocked-import": Rule.RuleModule;
14
+ readonly "require-aaa-sections": Rule.RuleModule;
15
+ readonly "require-act-result-capture": Rule.RuleModule;
16
+ readonly "require-example-language": Rule.RuleModule;
17
+ readonly "require-test-companion": Rule.RuleModule;
18
+ readonly "single-act-statement": Rule.RuleModule;
19
+ readonly "single-line-jsdoc": Rule.RuleModule;
20
+ };
21
+ /** ESLint plugin object exported by the package. */
22
+ declare const codeperfectPlugin: {
23
+ meta: {
24
+ name: string;
25
+ };
26
+ rules: {
27
+ readonly "assert-actual-expected-names": Rule.RuleModule;
28
+ readonly "barrel-files-exports-only": Rule.RuleModule;
29
+ readonly "consistent-barrel-files": Rule.RuleModule;
30
+ readonly "enforce-aaa-phase-purity": Rule.RuleModule;
31
+ readonly "enforce-aaa-structure": Rule.RuleModule;
32
+ readonly "no-interface-member-docs": Rule.RuleModule;
33
+ readonly "no-multiple-declarators": Rule.RuleModule;
34
+ readonly "no-reexports-outside-barrels": Rule.RuleModule;
35
+ readonly "prefer-interface-types": Rule.RuleModule;
36
+ readonly "prefer-vi-mocked-import": Rule.RuleModule;
37
+ readonly "require-aaa-sections": Rule.RuleModule;
38
+ readonly "require-act-result-capture": Rule.RuleModule;
39
+ readonly "require-example-language": Rule.RuleModule;
40
+ readonly "require-test-companion": Rule.RuleModule;
41
+ readonly "single-act-statement": Rule.RuleModule;
42
+ readonly "single-line-jsdoc": Rule.RuleModule;
43
+ };
44
+ };
45
+ export { codeperfectPlugin, codeperfectRules };
46
+ //# sourceMappingURL=codeperfect-plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codeperfect-plugin.d.ts","sourceRoot":"","sources":["../src/codeperfect-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAU,IAAI,EAAE,MAAM,QAAQ,CAAC;AAqB3C,mDAAmD;AACnD,QAAA,MAAM,gBAAgB;;;;;;;;;;;;;;;;;CAiB8B,CAAC;AAErD,oDAAoD;AACpD,QAAA,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;CAKkC,CAAC;AAE1D,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,CAAC"}