@codeperfect/eslint-plugin 1.0.0 → 2.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 (557) hide show
  1. package/README.md +26 -4
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/{custom-rules.d.ts → application/custom-rules.d.ts} +3 -0
  4. package/dist/application/custom-rules.d.ts.map +1 -0
  5. package/dist/application/custom-rules.js +74 -0
  6. package/dist/application/index.d.ts +4 -0
  7. package/dist/application/index.d.ts.map +1 -0
  8. package/dist/application/index.js +3 -0
  9. package/dist/codeperfect-eslint-plugin-1.0.0.tgz +0 -0
  10. package/dist/domain/architecture/consistent-barrel-files/barrel-file-utilities.d.ts +56 -0
  11. package/dist/domain/architecture/consistent-barrel-files/barrel-file-utilities.d.ts.map +1 -0
  12. package/dist/domain/architecture/consistent-barrel-files/barrel-file-utilities.js +149 -0
  13. package/dist/{architecture → domain/architecture}/consistent-barrel-files/consistent-barrel-files-listeners.d.ts +4 -4
  14. package/dist/domain/architecture/consistent-barrel-files/consistent-barrel-files-listeners.d.ts.map +1 -0
  15. package/dist/domain/architecture/consistent-barrel-files/consistent-barrel-files-listeners.js +98 -0
  16. package/dist/domain/architecture/consistent-barrel-files/consistent-barrel-files-options.d.ts +45 -0
  17. package/dist/domain/architecture/consistent-barrel-files/consistent-barrel-files-options.d.ts.map +1 -0
  18. package/dist/domain/architecture/consistent-barrel-files/consistent-barrel-files-options.js +64 -0
  19. package/dist/{architecture → domain/architecture}/consistent-barrel-files/exports-only-rule-test-utilities.d.ts +5 -4
  20. package/dist/domain/architecture/consistent-barrel-files/exports-only-rule-test-utilities.d.ts.map +1 -0
  21. package/dist/domain/architecture/consistent-barrel-files/exports-only-rule-test-utilities.js +87 -0
  22. package/dist/domain/architecture/consistent-barrel-files/exports-only-rule.d.ts.map +1 -0
  23. package/dist/domain/architecture/consistent-barrel-files/exports-only-rule.js +140 -0
  24. package/dist/domain/architecture/consistent-barrel-files/index.d.ts +5 -0
  25. package/dist/domain/architecture/consistent-barrel-files/index.d.ts.map +1 -0
  26. package/dist/domain/architecture/consistent-barrel-files/index.js +4 -0
  27. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.d.ts.map +1 -0
  28. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.js +85 -0
  29. package/dist/{architecture → domain/architecture}/consistent-barrel-files/no-reexports-outside-barrels-test-utilities.d.ts +1 -1
  30. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-test-utilities.d.ts.map +1 -0
  31. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-test-utilities.js +91 -0
  32. package/dist/{architecture → domain/architecture}/consistent-barrel-files/no-reexports-outside-barrels-utilities.d.ts +4 -6
  33. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-utilities.d.ts.map +1 -0
  34. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-utilities.js +95 -0
  35. package/dist/domain/architecture/consistent-barrel-files/rule.d.ts.map +1 -0
  36. package/dist/domain/architecture/consistent-barrel-files/rule.js +43 -0
  37. package/dist/domain/architecture/consistent-barrel-files/rule.repeat-runs.d.ts +4 -0
  38. package/dist/domain/architecture/consistent-barrel-files/rule.repeat-runs.d.ts.map +1 -0
  39. package/dist/domain/architecture/consistent-barrel-files/rule.repeat-runs.js +4 -0
  40. package/dist/{architecture → domain/architecture}/consistent-barrel-files/test-helpers.d.ts +48 -48
  41. package/dist/domain/architecture/consistent-barrel-files/test-helpers.d.ts.map +1 -0
  42. package/dist/domain/architecture/consistent-barrel-files/test-helpers.file-writers.d.ts +20 -0
  43. package/dist/domain/architecture/consistent-barrel-files/test-helpers.file-writers.d.ts.map +1 -0
  44. package/dist/domain/architecture/consistent-barrel-files/test-helpers.file-writers.js +25 -0
  45. package/dist/domain/architecture/consistent-barrel-files/test-helpers.js +235 -0
  46. package/dist/domain/architecture/consistent-barrel-files/types.d.ts +19 -0
  47. package/dist/domain/architecture/consistent-barrel-files/types.d.ts.map +1 -0
  48. package/dist/domain/architecture/consistent-barrel-files/types.js +2 -0
  49. package/dist/{architecture → domain/architecture}/index.d.ts +1 -1
  50. package/dist/domain/architecture/index.d.ts.map +1 -0
  51. package/dist/domain/architecture/index.js +2 -0
  52. package/dist/{core → domain/core}/index.d.ts +2 -2
  53. package/dist/domain/core/index.d.ts.map +1 -0
  54. package/dist/domain/core/index.js +3 -0
  55. package/dist/domain/core/no-multiple-declarators/index.d.ts +2 -0
  56. package/dist/domain/core/no-multiple-declarators/index.d.ts.map +1 -0
  57. package/dist/domain/core/no-multiple-declarators/index.js +2 -0
  58. package/dist/domain/core/no-multiple-declarators/rule-test-helpers.d.ts +101 -0
  59. package/dist/domain/core/no-multiple-declarators/rule-test-helpers.d.ts.map +1 -0
  60. package/dist/domain/core/no-multiple-declarators/rule-test-helpers.js +108 -0
  61. package/dist/{core → domain/core}/no-multiple-declarators/rule.d.ts +1 -0
  62. package/dist/domain/core/no-multiple-declarators/rule.d.ts.map +1 -0
  63. package/dist/domain/core/no-multiple-declarators/rule.fixes.d.ts +35 -0
  64. package/dist/domain/core/no-multiple-declarators/rule.fixes.d.ts.map +1 -0
  65. package/dist/domain/core/no-multiple-declarators/rule.fixes.js +95 -0
  66. package/dist/domain/core/no-multiple-declarators/rule.guardrails.d.ts +4 -0
  67. package/dist/domain/core/no-multiple-declarators/rule.guardrails.d.ts.map +1 -0
  68. package/dist/domain/core/no-multiple-declarators/rule.guardrails.js +4 -0
  69. package/dist/domain/core/no-multiple-declarators/rule.js +219 -0
  70. package/dist/domain/core/no-multiple-declarators/rule.mocked-types.d.ts +4 -0
  71. package/dist/domain/core/no-multiple-declarators/rule.mocked-types.d.ts.map +1 -0
  72. package/dist/domain/core/no-multiple-declarators/rule.mocked-types.js +4 -0
  73. package/dist/domain/core/no-multiple-declarators/types.d.ts +77 -0
  74. package/dist/domain/core/no-multiple-declarators/types.d.ts.map +1 -0
  75. package/dist/domain/core/no-multiple-declarators/types.js +38 -0
  76. package/dist/domain/core/prefer-interface-types/index.d.ts +2 -0
  77. package/dist/domain/core/prefer-interface-types/index.d.ts.map +1 -0
  78. package/dist/domain/core/prefer-interface-types/index.js +2 -0
  79. package/dist/domain/core/prefer-interface-types/rule.d.ts.map +1 -0
  80. package/dist/domain/core/prefer-interface-types/rule.js +145 -0
  81. package/dist/domain/core/prefer-interface-types/test-helpers.d.ts.map +1 -0
  82. package/dist/domain/core/prefer-interface-types/test-helpers.js +116 -0
  83. package/dist/{custom-rule-documentation.d.ts → domain/custom-rule-documentation.d.ts} +1 -1
  84. package/dist/domain/custom-rule-documentation.d.ts.map +1 -0
  85. package/dist/domain/custom-rule-documentation.js +35 -0
  86. package/dist/domain/docs/index.d.ts +4 -0
  87. package/dist/domain/docs/index.d.ts.map +1 -0
  88. package/dist/domain/docs/index.js +4 -0
  89. package/dist/domain/docs/no-interface-member-docs/comment-utilities-test-helpers.d.ts.map +1 -0
  90. package/dist/domain/docs/no-interface-member-docs/comment-utilities-test-helpers.js +129 -0
  91. package/dist/{docs → domain/docs}/no-interface-member-docs/comment-utilities.d.ts +1 -1
  92. package/dist/domain/docs/no-interface-member-docs/comment-utilities.d.ts.map +1 -0
  93. package/dist/domain/docs/no-interface-member-docs/comment-utilities.js +146 -0
  94. package/dist/domain/docs/no-interface-member-docs/index.d.ts +2 -0
  95. package/dist/domain/docs/no-interface-member-docs/index.d.ts.map +1 -0
  96. package/dist/domain/docs/no-interface-member-docs/index.js +2 -0
  97. package/dist/{docs → domain/docs}/no-interface-member-docs/parameter-tags.d.ts +1 -1
  98. package/dist/domain/docs/no-interface-member-docs/parameter-tags.d.ts.map +1 -0
  99. package/dist/domain/docs/no-interface-member-docs/parameter-tags.js +101 -0
  100. package/dist/{docs → domain/docs}/no-interface-member-docs/parameter-utilities.d.ts +1 -1
  101. package/dist/domain/docs/no-interface-member-docs/parameter-utilities.d.ts.map +1 -0
  102. package/dist/domain/docs/no-interface-member-docs/parameter-utilities.js +125 -0
  103. package/dist/domain/docs/no-interface-member-docs/rule.d.ts.map +1 -0
  104. package/dist/domain/docs/no-interface-member-docs/rule.js +168 -0
  105. package/dist/domain/docs/no-interface-member-docs/test-helpers.d.ts.map +1 -0
  106. package/dist/domain/docs/no-interface-member-docs/test-helpers.js +157 -0
  107. package/dist/{docs → domain/docs}/no-interface-member-docs/types.d.ts +2 -2
  108. package/dist/domain/docs/no-interface-member-docs/types.d.ts.map +1 -0
  109. package/dist/domain/docs/no-interface-member-docs/types.js +2 -0
  110. package/dist/domain/docs/require-example-language/create-fixer.d.ts +5 -0
  111. package/dist/domain/docs/require-example-language/create-fixer.d.ts.map +1 -0
  112. package/dist/domain/docs/require-example-language/create-fixer.js +5 -0
  113. package/dist/domain/docs/require-example-language/empty-fence-fixes.d.ts.map +1 -0
  114. package/dist/domain/docs/require-example-language/empty-fence-fixes.js +169 -0
  115. package/dist/domain/docs/require-example-language/example-utilities.d.ts.map +1 -0
  116. package/dist/domain/docs/require-example-language/example-utilities.js +76 -0
  117. package/dist/{docs → domain/docs}/require-example-language/examples.d.ts +1 -1
  118. package/dist/domain/docs/require-example-language/examples.d.ts.map +1 -0
  119. package/dist/domain/docs/require-example-language/examples.js +181 -0
  120. package/dist/{docs → domain/docs}/require-example-language/fixes.d.ts +2 -2
  121. package/dist/domain/docs/require-example-language/fixes.d.ts.map +1 -0
  122. package/dist/domain/docs/require-example-language/fixes.js +182 -0
  123. package/dist/domain/docs/require-example-language/index.d.ts +3 -0
  124. package/dist/domain/docs/require-example-language/index.d.ts.map +1 -0
  125. package/dist/domain/docs/require-example-language/index.js +2 -0
  126. package/dist/{docs → domain/docs}/require-example-language/reporting.d.ts +1 -1
  127. package/dist/domain/docs/require-example-language/reporting.d.ts.map +1 -0
  128. package/dist/domain/docs/require-example-language/reporting.js +148 -0
  129. package/dist/domain/docs/require-example-language/rule.d.ts.map +1 -0
  130. package/dist/domain/docs/require-example-language/rule.js +34 -0
  131. package/dist/domain/docs/require-example-language/types.d.ts.map +1 -0
  132. package/dist/domain/docs/require-example-language/types.js +2 -0
  133. package/dist/domain/docs/single-line-jsdoc/index.d.ts +2 -0
  134. package/dist/domain/docs/single-line-jsdoc/index.d.ts.map +1 -0
  135. package/dist/domain/docs/single-line-jsdoc/index.js +2 -0
  136. package/dist/domain/docs/single-line-jsdoc/rule.d.ts.map +1 -0
  137. package/dist/domain/docs/single-line-jsdoc/rule.edge-cases.d.ts +4 -0
  138. package/dist/domain/docs/single-line-jsdoc/rule.edge-cases.d.ts.map +1 -0
  139. package/dist/domain/docs/single-line-jsdoc/rule.edge-cases.js +5 -0
  140. package/dist/domain/docs/single-line-jsdoc/rule.js +196 -0
  141. package/dist/domain/docs/single-line-jsdoc/rule.node-lookups.d.ts +4 -0
  142. package/dist/domain/docs/single-line-jsdoc/rule.node-lookups.d.ts.map +1 -0
  143. package/dist/domain/docs/single-line-jsdoc/rule.node-lookups.js +5 -0
  144. package/dist/domain/docs/single-line-jsdoc/single-line-jsdoc-content.d.ts.map +1 -0
  145. package/dist/domain/docs/single-line-jsdoc/single-line-jsdoc-content.js +95 -0
  146. package/dist/{docs → domain/docs}/single-line-jsdoc/single-line-jsdoc-utilities.d.ts +1 -1
  147. package/dist/domain/docs/single-line-jsdoc/single-line-jsdoc-utilities.d.ts.map +1 -0
  148. package/dist/domain/docs/single-line-jsdoc/single-line-jsdoc-utilities.js +140 -0
  149. package/dist/domain/docs/test-helpers.d.ts.map +1 -0
  150. package/dist/domain/docs/test-helpers.js +107 -0
  151. package/dist/domain/index.d.ts +6 -0
  152. package/dist/domain/index.d.ts.map +1 -0
  153. package/dist/domain/index.js +6 -0
  154. package/dist/domain/testing/aaa/analyzer.analysis.d.ts +92 -0
  155. package/dist/domain/testing/aaa/analyzer.analysis.d.ts.map +1 -0
  156. package/dist/domain/testing/aaa/analyzer.analysis.helpers.d.ts +4 -0
  157. package/dist/domain/testing/aaa/analyzer.analysis.helpers.d.ts.map +1 -0
  158. package/dist/domain/testing/aaa/analyzer.analysis.helpers.js +4 -0
  159. package/dist/domain/testing/aaa/analyzer.analysis.js +247 -0
  160. package/dist/domain/testing/aaa/analyzer.assertions.d.ts +93 -0
  161. package/dist/domain/testing/aaa/analyzer.assertions.d.ts.map +1 -0
  162. package/dist/domain/testing/aaa/analyzer.assertions.js +283 -0
  163. package/dist/domain/testing/aaa/analyzer.classification.d.ts +75 -0
  164. package/dist/domain/testing/aaa/analyzer.classification.d.ts.map +1 -0
  165. package/dist/domain/testing/aaa/analyzer.classification.js +201 -0
  166. package/dist/domain/testing/aaa/analyzer.classification.member-patterns.d.ts +9 -0
  167. package/dist/domain/testing/aaa/analyzer.classification.member-patterns.d.ts.map +1 -0
  168. package/dist/domain/testing/aaa/analyzer.classification.member-patterns.js +10 -0
  169. package/dist/domain/testing/aaa/analyzer.d.ts +46 -0
  170. package/dist/domain/testing/aaa/analyzer.d.ts.map +1 -0
  171. package/dist/domain/testing/aaa/analyzer.js +59 -0
  172. package/dist/domain/testing/aaa/analyzer.super.d.ts +107 -0
  173. package/dist/domain/testing/aaa/analyzer.super.d.ts.map +1 -0
  174. package/dist/domain/testing/aaa/analyzer.super.js +228 -0
  175. package/dist/{testing → domain/testing}/aaa/index.d.ts +2 -2
  176. package/dist/domain/testing/aaa/index.d.ts.map +1 -0
  177. package/dist/domain/testing/aaa/index.js +2 -0
  178. package/dist/domain/testing/aaa/types.d.ts +58 -0
  179. package/dist/domain/testing/aaa/types.d.ts.map +1 -0
  180. package/dist/domain/testing/aaa/types.js +2 -0
  181. package/dist/domain/testing/assert-actual-expected-names/index.d.ts +2 -0
  182. package/dist/domain/testing/assert-actual-expected-names/index.d.ts.map +1 -0
  183. package/dist/domain/testing/assert-actual-expected-names/index.js +2 -0
  184. package/dist/{testing → domain/testing}/assert-actual-expected-names/rule.d.ts +1 -0
  185. package/dist/domain/testing/assert-actual-expected-names/rule.d.ts.map +1 -0
  186. package/dist/domain/testing/assert-actual-expected-names/rule.js +113 -0
  187. package/dist/domain/testing/enforce-aaa-phase-purity/index.d.ts +2 -0
  188. package/dist/domain/testing/enforce-aaa-phase-purity/index.d.ts.map +1 -0
  189. package/dist/domain/testing/enforce-aaa-phase-purity/index.js +2 -0
  190. package/dist/domain/testing/enforce-aaa-phase-purity/pattern-identifiers.d.ts +13 -0
  191. package/dist/domain/testing/enforce-aaa-phase-purity/pattern-identifiers.d.ts.map +1 -0
  192. package/dist/domain/testing/enforce-aaa-phase-purity/pattern-identifiers.js +134 -0
  193. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-identifiers.d.ts +25 -0
  194. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-identifiers.d.ts.map +1 -0
  195. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-identifiers.js +138 -0
  196. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.d.ts +4 -0
  197. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.d.ts.map +1 -0
  198. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.js +4 -0
  199. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.d.ts +14 -0
  200. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.d.ts.map +1 -0
  201. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.js +180 -0
  202. package/dist/domain/testing/enforce-aaa-phase-purity/rule-test-helpers.d.ts +42 -0
  203. package/dist/domain/testing/enforce-aaa-phase-purity/rule-test-helpers.d.ts.map +1 -0
  204. package/dist/domain/testing/enforce-aaa-phase-purity/rule-test-helpers.js +188 -0
  205. package/dist/{testing → domain/testing}/enforce-aaa-phase-purity/rule.d.ts +1 -0
  206. package/dist/domain/testing/enforce-aaa-phase-purity/rule.d.ts.map +1 -0
  207. package/dist/domain/testing/enforce-aaa-phase-purity/rule.js +34 -0
  208. package/dist/domain/testing/enforce-aaa-structure/index.d.ts +2 -0
  209. package/dist/domain/testing/enforce-aaa-structure/index.d.ts.map +1 -0
  210. package/dist/domain/testing/enforce-aaa-structure/index.js +2 -0
  211. package/dist/{testing → domain/testing}/enforce-aaa-structure/rule.d.ts +1 -0
  212. package/dist/domain/testing/enforce-aaa-structure/rule.d.ts.map +1 -0
  213. package/dist/domain/testing/enforce-aaa-structure/rule.js +85 -0
  214. package/dist/{testing → domain/testing}/index.d.ts +9 -8
  215. package/dist/domain/testing/index.d.ts.map +1 -0
  216. package/dist/domain/testing/index.js +10 -0
  217. package/dist/domain/testing/prefer-vi-mocked-import/fix-import-statements.d.ts +29 -0
  218. package/dist/domain/testing/prefer-vi-mocked-import/fix-import-statements.d.ts.map +1 -0
  219. package/dist/domain/testing/prefer-vi-mocked-import/fix-import-statements.js +90 -0
  220. package/dist/domain/testing/prefer-vi-mocked-import/fix-import-updates.d.ts +31 -0
  221. package/dist/domain/testing/prefer-vi-mocked-import/fix-import-updates.d.ts.map +1 -0
  222. package/dist/domain/testing/prefer-vi-mocked-import/fix-import-updates.js +43 -0
  223. package/dist/domain/testing/prefer-vi-mocked-import/fix-imports.d.ts +16 -0
  224. package/dist/domain/testing/prefer-vi-mocked-import/fix-imports.d.ts.map +1 -0
  225. package/dist/domain/testing/prefer-vi-mocked-import/fix-imports.js +205 -0
  226. package/dist/domain/testing/prefer-vi-mocked-import/fix.d.ts +28 -0
  227. package/dist/domain/testing/prefer-vi-mocked-import/fix.d.ts.map +1 -0
  228. package/dist/domain/testing/prefer-vi-mocked-import/fix.js +171 -0
  229. package/dist/domain/testing/prefer-vi-mocked-import/index.d.ts +2 -0
  230. package/dist/domain/testing/prefer-vi-mocked-import/index.d.ts.map +1 -0
  231. package/dist/domain/testing/prefer-vi-mocked-import/index.js +2 -0
  232. package/dist/{testing → domain/testing}/prefer-vi-mocked-import/match-bindings.d.ts +1 -1
  233. package/dist/domain/testing/prefer-vi-mocked-import/match-bindings.d.ts.map +1 -0
  234. package/dist/domain/testing/prefer-vi-mocked-import/match-bindings.js +52 -0
  235. package/dist/{testing → domain/testing}/prefer-vi-mocked-import/match-declarations.d.ts +2 -1
  236. package/dist/domain/testing/prefer-vi-mocked-import/match-declarations.d.ts.map +1 -0
  237. package/dist/domain/testing/prefer-vi-mocked-import/match-declarations.js +131 -0
  238. package/dist/domain/testing/prefer-vi-mocked-import/match-helpers.d.ts.map +1 -0
  239. package/dist/domain/testing/prefer-vi-mocked-import/match-helpers.js +102 -0
  240. package/dist/{testing → domain/testing}/prefer-vi-mocked-import/match-imports.d.ts +1 -1
  241. package/dist/domain/testing/prefer-vi-mocked-import/match-imports.d.ts.map +1 -0
  242. package/dist/domain/testing/prefer-vi-mocked-import/match-imports.js +156 -0
  243. package/dist/{testing → domain/testing}/prefer-vi-mocked-import/match-rewrites.d.ts +1 -1
  244. package/dist/domain/testing/prefer-vi-mocked-import/match-rewrites.d.ts.map +1 -0
  245. package/dist/domain/testing/prefer-vi-mocked-import/match-rewrites.js +119 -0
  246. package/dist/domain/testing/prefer-vi-mocked-import/match-walk.d.ts.map +1 -0
  247. package/dist/domain/testing/prefer-vi-mocked-import/match-walk.js +62 -0
  248. package/dist/domain/testing/prefer-vi-mocked-import/match.d.ts +26 -0
  249. package/dist/domain/testing/prefer-vi-mocked-import/match.d.ts.map +1 -0
  250. package/dist/domain/testing/prefer-vi-mocked-import/match.js +198 -0
  251. package/dist/domain/testing/prefer-vi-mocked-import/rule-test-helpers.d.ts +20 -0
  252. package/dist/domain/testing/prefer-vi-mocked-import/rule-test-helpers.d.ts.map +1 -0
  253. package/dist/domain/testing/prefer-vi-mocked-import/rule-test-helpers.js +39 -0
  254. package/dist/domain/testing/prefer-vi-mocked-import/rule.d.ts.map +1 -0
  255. package/dist/domain/testing/prefer-vi-mocked-import/rule.js +36 -0
  256. package/dist/{testing → domain/testing}/prefer-vi-mocked-import/types.d.ts +1 -1
  257. package/dist/domain/testing/prefer-vi-mocked-import/types.d.ts.map +1 -0
  258. package/dist/domain/testing/prefer-vi-mocked-import/types.js +2 -0
  259. package/dist/domain/testing/prefer-vitest-incremental-casts/ast-helpers.d.ts +86 -0
  260. package/dist/domain/testing/prefer-vitest-incremental-casts/ast-helpers.d.ts.map +1 -0
  261. package/dist/domain/testing/prefer-vitest-incremental-casts/ast-helpers.js +150 -0
  262. package/dist/domain/testing/prefer-vitest-incremental-casts/index.d.ts +2 -0
  263. package/dist/domain/testing/prefer-vitest-incremental-casts/index.d.ts.map +1 -0
  264. package/dist/domain/testing/prefer-vitest-incremental-casts/index.js +2 -0
  265. package/dist/domain/testing/prefer-vitest-incremental-casts/match-input.d.ts +14 -0
  266. package/dist/domain/testing/prefer-vitest-incremental-casts/match-input.d.ts.map +1 -0
  267. package/dist/domain/testing/prefer-vitest-incremental-casts/match-input.js +81 -0
  268. package/dist/domain/testing/prefer-vitest-incremental-casts/match.d.ts +13 -0
  269. package/dist/domain/testing/prefer-vitest-incremental-casts/match.d.ts.map +1 -0
  270. package/dist/domain/testing/prefer-vitest-incremental-casts/match.js +189 -0
  271. package/dist/domain/testing/prefer-vitest-incremental-casts/replacement-helpers.d.ts +25 -0
  272. package/dist/domain/testing/prefer-vitest-incremental-casts/replacement-helpers.d.ts.map +1 -0
  273. package/dist/domain/testing/prefer-vitest-incremental-casts/replacement-helpers.js +92 -0
  274. package/dist/domain/testing/prefer-vitest-incremental-casts/rule-test-helpers.d.ts +32 -0
  275. package/dist/domain/testing/prefer-vitest-incremental-casts/rule-test-helpers.d.ts.map +1 -0
  276. package/dist/domain/testing/prefer-vitest-incremental-casts/rule-test-helpers.js +164 -0
  277. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.d.ts +5 -0
  278. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.d.ts.map +1 -0
  279. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.guardrails.d.ts +4 -0
  280. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.guardrails.d.ts.map +1 -0
  281. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.guardrails.js +4 -0
  282. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.input-shapes.d.ts +4 -0
  283. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.input-shapes.d.ts.map +1 -0
  284. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.input-shapes.js +4 -0
  285. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.js +62 -0
  286. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.signature-fallback.d.ts +4 -0
  287. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.signature-fallback.d.ts.map +1 -0
  288. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.signature-fallback.js +4 -0
  289. package/dist/domain/testing/prefer-vitest-incremental-casts/type-helpers.d.ts +24 -0
  290. package/dist/domain/testing/prefer-vitest-incremental-casts/type-helpers.d.ts.map +1 -0
  291. package/dist/domain/testing/prefer-vitest-incremental-casts/type-helpers.js +113 -0
  292. package/dist/domain/testing/prefer-vitest-incremental-casts/type-shape-helpers.d.ts +36 -0
  293. package/dist/domain/testing/prefer-vitest-incremental-casts/type-shape-helpers.d.ts.map +1 -0
  294. package/dist/domain/testing/prefer-vitest-incremental-casts/type-shape-helpers.js +138 -0
  295. package/dist/domain/testing/prefer-vitest-incremental-casts/types.d.ts +203 -0
  296. package/dist/domain/testing/prefer-vitest-incremental-casts/types.d.ts.map +1 -0
  297. package/dist/domain/testing/prefer-vitest-incremental-casts/types.js +2 -0
  298. package/dist/domain/testing/require-aaa-sections/index.d.ts +2 -0
  299. package/dist/domain/testing/require-aaa-sections/index.d.ts.map +1 -0
  300. package/dist/domain/testing/require-aaa-sections/index.js +2 -0
  301. package/dist/domain/testing/require-aaa-sections/missing-section-fixes.d.ts +17 -0
  302. package/dist/domain/testing/require-aaa-sections/missing-section-fixes.d.ts.map +1 -0
  303. package/dist/domain/testing/require-aaa-sections/missing-section-fixes.js +150 -0
  304. package/dist/{testing → domain/testing}/require-aaa-sections/rule.d.ts +1 -0
  305. package/dist/domain/testing/require-aaa-sections/rule.d.ts.map +1 -0
  306. package/dist/domain/testing/require-aaa-sections/rule.js +129 -0
  307. package/dist/domain/testing/require-aaa-sections/rule.reporting.d.ts +104 -0
  308. package/dist/domain/testing/require-aaa-sections/rule.reporting.d.ts.map +1 -0
  309. package/dist/domain/testing/require-aaa-sections/rule.reporting.js +217 -0
  310. package/dist/domain/testing/require-act-result-capture/index.d.ts +2 -0
  311. package/dist/domain/testing/require-act-result-capture/index.d.ts.map +1 -0
  312. package/dist/domain/testing/require-act-result-capture/index.js +2 -0
  313. package/dist/{testing → domain/testing}/require-act-result-capture/rule.d.ts +1 -0
  314. package/dist/domain/testing/require-act-result-capture/rule.d.ts.map +1 -0
  315. package/dist/domain/testing/require-act-result-capture/rule.js +106 -0
  316. package/dist/domain/testing/require-test-companion/index.d.ts +3 -0
  317. package/dist/domain/testing/require-test-companion/index.d.ts.map +1 -0
  318. package/dist/domain/testing/require-test-companion/index.js +3 -0
  319. package/dist/{testing → domain/testing}/require-test-companion/require-test-companion-listeners.d.ts +1 -1
  320. package/dist/domain/testing/require-test-companion/require-test-companion-listeners.d.ts.map +1 -0
  321. package/dist/domain/testing/require-test-companion/require-test-companion-listeners.js +145 -0
  322. package/dist/domain/testing/require-test-companion/require-test-companion-options.d.ts.map +1 -0
  323. package/dist/domain/testing/require-test-companion/require-test-companion-options.js +113 -0
  324. package/dist/{testing → domain/testing}/require-test-companion/require-test-companion-test-helpers.d.ts +1 -1
  325. package/dist/domain/testing/require-test-companion/require-test-companion-test-helpers.d.ts.map +1 -0
  326. package/dist/domain/testing/require-test-companion/require-test-companion-test-helpers.js +184 -0
  327. package/dist/{testing → domain/testing}/require-test-companion/require-test-companion-utilities.d.ts +1 -1
  328. package/dist/domain/testing/require-test-companion/require-test-companion-utilities.d.ts.map +1 -0
  329. package/dist/domain/testing/require-test-companion/require-test-companion-utilities.js +26 -0
  330. package/dist/domain/testing/require-test-companion/rule.d.ts.map +1 -0
  331. package/dist/domain/testing/require-test-companion/rule.js +57 -0
  332. package/dist/domain/testing/require-test-companion/types.d.ts.map +1 -0
  333. package/dist/domain/testing/require-test-companion/types.js +2 -0
  334. package/dist/domain/testing/single-act-statement/index.d.ts +2 -0
  335. package/dist/domain/testing/single-act-statement/index.d.ts.map +1 -0
  336. package/dist/domain/testing/single-act-statement/index.js +2 -0
  337. package/dist/{testing → domain/testing}/single-act-statement/rule.d.ts +1 -0
  338. package/dist/domain/testing/single-act-statement/rule.d.ts.map +1 -0
  339. package/dist/domain/testing/single-act-statement/rule.js +34 -0
  340. package/dist/index.d.ts +4 -5
  341. package/dist/index.d.ts.map +1 -1
  342. package/dist/index.js +3 -6
  343. package/dist/{codeperfect-plugin.d.ts → infrastructure/codeperfect-plugin.d.ts} +2 -0
  344. package/dist/infrastructure/codeperfect-plugin.d.ts.map +1 -0
  345. package/dist/infrastructure/codeperfect-plugin.js +30 -0
  346. package/dist/infrastructure/index.d.ts +5 -0
  347. package/dist/infrastructure/index.d.ts.map +1 -0
  348. package/dist/infrastructure/index.js +4 -0
  349. package/dist/infrastructure/presets.d.ts +18 -0
  350. package/dist/infrastructure/presets.d.ts.map +1 -0
  351. package/dist/infrastructure/presets.js +81 -0
  352. package/package.json +54 -27
  353. package/dist/architecture/consistent-barrel-files/consistent-barrel-files-listeners.d.ts.map +0 -1
  354. package/dist/architecture/consistent-barrel-files/consistent-barrel-files-listeners.js +0 -131
  355. package/dist/architecture/consistent-barrel-files/consistent-barrel-files-options.d.ts +0 -48
  356. package/dist/architecture/consistent-barrel-files/consistent-barrel-files-options.d.ts.map +0 -1
  357. package/dist/architecture/consistent-barrel-files/consistent-barrel-files-options.js +0 -126
  358. package/dist/architecture/consistent-barrel-files/exports-only-rule-test-utilities.d.ts.map +0 -1
  359. package/dist/architecture/consistent-barrel-files/exports-only-rule-test-utilities.js +0 -90
  360. package/dist/architecture/consistent-barrel-files/exports-only-rule.d.ts.map +0 -1
  361. package/dist/architecture/consistent-barrel-files/exports-only-rule.js +0 -218
  362. package/dist/architecture/consistent-barrel-files/index.d.ts +0 -5
  363. package/dist/architecture/consistent-barrel-files/index.d.ts.map +0 -1
  364. package/dist/architecture/consistent-barrel-files/index.js +0 -4
  365. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.d.ts.map +0 -1
  366. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.js +0 -100
  367. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-test-utilities.d.ts.map +0 -1
  368. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-test-utilities.js +0 -90
  369. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-utilities.d.ts.map +0 -1
  370. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-utilities.js +0 -154
  371. package/dist/architecture/consistent-barrel-files/rule.d.ts.map +0 -1
  372. package/dist/architecture/consistent-barrel-files/rule.js +0 -58
  373. package/dist/architecture/consistent-barrel-files/test-helpers.d.ts.map +0 -1
  374. package/dist/architecture/consistent-barrel-files/test-helpers.js +0 -229
  375. package/dist/architecture/consistent-barrel-files/types.d.ts +0 -25
  376. package/dist/architecture/consistent-barrel-files/types.d.ts.map +0 -1
  377. package/dist/architecture/consistent-barrel-files/types.js +0 -2
  378. package/dist/architecture/index.d.ts.map +0 -1
  379. package/dist/architecture/index.js +0 -2
  380. package/dist/benchmark-rules.d.ts +0 -83
  381. package/dist/benchmark-rules.d.ts.map +0 -1
  382. package/dist/benchmark-rules.js +0 -175
  383. package/dist/codeperfect-plugin.d.ts.map +0 -1
  384. package/dist/codeperfect-plugin.js +0 -29
  385. package/dist/core/index.d.ts.map +0 -1
  386. package/dist/core/index.js +0 -3
  387. package/dist/core/no-multiple-declarators/index.d.ts +0 -2
  388. package/dist/core/no-multiple-declarators/index.d.ts.map +0 -1
  389. package/dist/core/no-multiple-declarators/index.js +0 -2
  390. package/dist/core/no-multiple-declarators/rule.d.ts.map +0 -1
  391. package/dist/core/no-multiple-declarators/rule.js +0 -100
  392. package/dist/core/prefer-interface-types/index.d.ts +0 -2
  393. package/dist/core/prefer-interface-types/index.d.ts.map +0 -1
  394. package/dist/core/prefer-interface-types/index.js +0 -2
  395. package/dist/core/prefer-interface-types/rule.d.ts.map +0 -1
  396. package/dist/core/prefer-interface-types/rule.js +0 -145
  397. package/dist/core/prefer-interface-types/test-helpers.d.ts.map +0 -1
  398. package/dist/core/prefer-interface-types/test-helpers.js +0 -116
  399. package/dist/custom-rule-documentation.d.ts.map +0 -1
  400. package/dist/custom-rule-documentation.js +0 -35
  401. package/dist/custom-rules.d.ts.map +0 -1
  402. package/dist/custom-rules.js +0 -70
  403. package/dist/docs/index.d.ts +0 -4
  404. package/dist/docs/index.d.ts.map +0 -1
  405. package/dist/docs/index.js +0 -4
  406. package/dist/docs/no-interface-member-docs/comment-utilities-test-helpers.d.ts.map +0 -1
  407. package/dist/docs/no-interface-member-docs/comment-utilities-test-helpers.js +0 -129
  408. package/dist/docs/no-interface-member-docs/comment-utilities.d.ts.map +0 -1
  409. package/dist/docs/no-interface-member-docs/comment-utilities.js +0 -146
  410. package/dist/docs/no-interface-member-docs/index.d.ts +0 -2
  411. package/dist/docs/no-interface-member-docs/index.d.ts.map +0 -1
  412. package/dist/docs/no-interface-member-docs/index.js +0 -2
  413. package/dist/docs/no-interface-member-docs/parameter-tags.d.ts.map +0 -1
  414. package/dist/docs/no-interface-member-docs/parameter-tags.js +0 -101
  415. package/dist/docs/no-interface-member-docs/parameter-utilities.d.ts.map +0 -1
  416. package/dist/docs/no-interface-member-docs/parameter-utilities.js +0 -125
  417. package/dist/docs/no-interface-member-docs/rule.d.ts.map +0 -1
  418. package/dist/docs/no-interface-member-docs/rule.js +0 -168
  419. package/dist/docs/no-interface-member-docs/test-helpers.d.ts.map +0 -1
  420. package/dist/docs/no-interface-member-docs/test-helpers.js +0 -157
  421. package/dist/docs/no-interface-member-docs/types.d.ts.map +0 -1
  422. package/dist/docs/no-interface-member-docs/types.js +0 -2
  423. package/dist/docs/require-example-language/empty-fence-fixes.d.ts.map +0 -1
  424. package/dist/docs/require-example-language/empty-fence-fixes.js +0 -169
  425. package/dist/docs/require-example-language/example-utilities.d.ts.map +0 -1
  426. package/dist/docs/require-example-language/example-utilities.js +0 -76
  427. package/dist/docs/require-example-language/examples.d.ts.map +0 -1
  428. package/dist/docs/require-example-language/examples.js +0 -181
  429. package/dist/docs/require-example-language/fixes.d.ts.map +0 -1
  430. package/dist/docs/require-example-language/fixes.js +0 -182
  431. package/dist/docs/require-example-language/index.d.ts +0 -3
  432. package/dist/docs/require-example-language/index.d.ts.map +0 -1
  433. package/dist/docs/require-example-language/index.js +0 -2
  434. package/dist/docs/require-example-language/reporting.d.ts.map +0 -1
  435. package/dist/docs/require-example-language/reporting.js +0 -145
  436. package/dist/docs/require-example-language/rule.d.ts.map +0 -1
  437. package/dist/docs/require-example-language/rule.js +0 -34
  438. package/dist/docs/require-example-language/types.d.ts.map +0 -1
  439. package/dist/docs/require-example-language/types.js +0 -2
  440. package/dist/docs/single-line-jsdoc/index.d.ts +0 -2
  441. package/dist/docs/single-line-jsdoc/index.d.ts.map +0 -1
  442. package/dist/docs/single-line-jsdoc/index.js +0 -2
  443. package/dist/docs/single-line-jsdoc/rule.d.ts.map +0 -1
  444. package/dist/docs/single-line-jsdoc/rule.js +0 -196
  445. package/dist/docs/single-line-jsdoc/single-line-jsdoc-content.d.ts.map +0 -1
  446. package/dist/docs/single-line-jsdoc/single-line-jsdoc-content.js +0 -95
  447. package/dist/docs/single-line-jsdoc/single-line-jsdoc-utilities.d.ts.map +0 -1
  448. package/dist/docs/single-line-jsdoc/single-line-jsdoc-utilities.js +0 -140
  449. package/dist/docs/test-helpers.d.ts.map +0 -1
  450. package/dist/docs/test-helpers.js +0 -107
  451. package/dist/presets.d.ts +0 -10
  452. package/dist/presets.d.ts.map +0 -1
  453. package/dist/presets.js +0 -50
  454. package/dist/rules/index.d.ts +0 -5
  455. package/dist/rules/index.d.ts.map +0 -1
  456. package/dist/rules/index.js +0 -6
  457. package/dist/testing/aaa/analyzer.d.ts +0 -36
  458. package/dist/testing/aaa/analyzer.d.ts.map +0 -1
  459. package/dist/testing/aaa/analyzer.js +0 -490
  460. package/dist/testing/aaa/index.d.ts.map +0 -1
  461. package/dist/testing/aaa/index.js +0 -2
  462. package/dist/testing/aaa/types.d.ts +0 -31
  463. package/dist/testing/aaa/types.d.ts.map +0 -1
  464. package/dist/testing/aaa/types.js +0 -2
  465. package/dist/testing/assert-actual-expected-names/index.d.ts +0 -2
  466. package/dist/testing/assert-actual-expected-names/index.d.ts.map +0 -1
  467. package/dist/testing/assert-actual-expected-names/index.js +0 -2
  468. package/dist/testing/assert-actual-expected-names/rule.d.ts.map +0 -1
  469. package/dist/testing/assert-actual-expected-names/rule.js +0 -54
  470. package/dist/testing/enforce-aaa-phase-purity/index.d.ts +0 -2
  471. package/dist/testing/enforce-aaa-phase-purity/index.d.ts.map +0 -1
  472. package/dist/testing/enforce-aaa-phase-purity/index.js +0 -2
  473. package/dist/testing/enforce-aaa-phase-purity/rule.d.ts.map +0 -1
  474. package/dist/testing/enforce-aaa-phase-purity/rule.js +0 -110
  475. package/dist/testing/enforce-aaa-structure/index.d.ts +0 -2
  476. package/dist/testing/enforce-aaa-structure/index.d.ts.map +0 -1
  477. package/dist/testing/enforce-aaa-structure/index.js +0 -2
  478. package/dist/testing/enforce-aaa-structure/rule.d.ts.map +0 -1
  479. package/dist/testing/enforce-aaa-structure/rule.js +0 -48
  480. package/dist/testing/index.d.ts.map +0 -1
  481. package/dist/testing/index.js +0 -9
  482. package/dist/testing/prefer-vi-mocked-import/fix.d.ts +0 -16
  483. package/dist/testing/prefer-vi-mocked-import/fix.d.ts.map +0 -1
  484. package/dist/testing/prefer-vi-mocked-import/fix.js +0 -224
  485. package/dist/testing/prefer-vi-mocked-import/index.d.ts +0 -2
  486. package/dist/testing/prefer-vi-mocked-import/index.d.ts.map +0 -1
  487. package/dist/testing/prefer-vi-mocked-import/index.js +0 -2
  488. package/dist/testing/prefer-vi-mocked-import/match-bindings.d.ts.map +0 -1
  489. package/dist/testing/prefer-vi-mocked-import/match-bindings.js +0 -52
  490. package/dist/testing/prefer-vi-mocked-import/match-declarations.d.ts.map +0 -1
  491. package/dist/testing/prefer-vi-mocked-import/match-declarations.js +0 -99
  492. package/dist/testing/prefer-vi-mocked-import/match-helpers.d.ts.map +0 -1
  493. package/dist/testing/prefer-vi-mocked-import/match-helpers.js +0 -102
  494. package/dist/testing/prefer-vi-mocked-import/match-imports.d.ts.map +0 -1
  495. package/dist/testing/prefer-vi-mocked-import/match-imports.js +0 -156
  496. package/dist/testing/prefer-vi-mocked-import/match-rewrites.d.ts.map +0 -1
  497. package/dist/testing/prefer-vi-mocked-import/match-rewrites.js +0 -119
  498. package/dist/testing/prefer-vi-mocked-import/match-walk.d.ts.map +0 -1
  499. package/dist/testing/prefer-vi-mocked-import/match-walk.js +0 -62
  500. package/dist/testing/prefer-vi-mocked-import/match.d.ts +0 -15
  501. package/dist/testing/prefer-vi-mocked-import/match.d.ts.map +0 -1
  502. package/dist/testing/prefer-vi-mocked-import/match.js +0 -193
  503. package/dist/testing/prefer-vi-mocked-import/rule.d.ts.map +0 -1
  504. package/dist/testing/prefer-vi-mocked-import/rule.js +0 -32
  505. package/dist/testing/prefer-vi-mocked-import/types.d.ts.map +0 -1
  506. package/dist/testing/prefer-vi-mocked-import/types.js +0 -2
  507. package/dist/testing/require-aaa-sections/index.d.ts +0 -2
  508. package/dist/testing/require-aaa-sections/index.d.ts.map +0 -1
  509. package/dist/testing/require-aaa-sections/index.js +0 -2
  510. package/dist/testing/require-aaa-sections/rule.d.ts.map +0 -1
  511. package/dist/testing/require-aaa-sections/rule.js +0 -111
  512. package/dist/testing/require-act-result-capture/index.d.ts +0 -2
  513. package/dist/testing/require-act-result-capture/index.d.ts.map +0 -1
  514. package/dist/testing/require-act-result-capture/index.js +0 -2
  515. package/dist/testing/require-act-result-capture/rule.d.ts.map +0 -1
  516. package/dist/testing/require-act-result-capture/rule.js +0 -34
  517. package/dist/testing/require-test-companion/index.d.ts +0 -3
  518. package/dist/testing/require-test-companion/index.d.ts.map +0 -1
  519. package/dist/testing/require-test-companion/index.js +0 -3
  520. package/dist/testing/require-test-companion/require-test-companion-listeners.d.ts.map +0 -1
  521. package/dist/testing/require-test-companion/require-test-companion-listeners.js +0 -145
  522. package/dist/testing/require-test-companion/require-test-companion-options.d.ts.map +0 -1
  523. package/dist/testing/require-test-companion/require-test-companion-options.js +0 -112
  524. package/dist/testing/require-test-companion/require-test-companion-test-helpers.d.ts.map +0 -1
  525. package/dist/testing/require-test-companion/require-test-companion-test-helpers.js +0 -183
  526. package/dist/testing/require-test-companion/require-test-companion-utilities.d.ts.map +0 -1
  527. package/dist/testing/require-test-companion/require-test-companion-utilities.js +0 -26
  528. package/dist/testing/require-test-companion/rule.d.ts.map +0 -1
  529. package/dist/testing/require-test-companion/rule.js +0 -57
  530. package/dist/testing/require-test-companion/types.d.ts.map +0 -1
  531. package/dist/testing/require-test-companion/types.js +0 -2
  532. package/dist/testing/single-act-statement/index.d.ts +0 -2
  533. package/dist/testing/single-act-statement/index.d.ts.map +0 -1
  534. package/dist/testing/single-act-statement/index.js +0 -2
  535. package/dist/testing/single-act-statement/rule.d.ts.map +0 -1
  536. package/dist/testing/single-act-statement/rule.js +0 -33
  537. /package/dist/{architecture → domain/architecture}/consistent-barrel-files/exports-only-rule.d.ts +0 -0
  538. /package/dist/{architecture → domain/architecture}/consistent-barrel-files/no-reexports-outside-barrels-rule.d.ts +0 -0
  539. /package/dist/{architecture → domain/architecture}/consistent-barrel-files/rule.d.ts +0 -0
  540. /package/dist/{core → domain/core}/prefer-interface-types/rule.d.ts +0 -0
  541. /package/dist/{core → domain/core}/prefer-interface-types/test-helpers.d.ts +0 -0
  542. /package/dist/{docs → domain/docs}/no-interface-member-docs/comment-utilities-test-helpers.d.ts +0 -0
  543. /package/dist/{docs → domain/docs}/no-interface-member-docs/rule.d.ts +0 -0
  544. /package/dist/{docs → domain/docs}/no-interface-member-docs/test-helpers.d.ts +0 -0
  545. /package/dist/{docs → domain/docs}/require-example-language/empty-fence-fixes.d.ts +0 -0
  546. /package/dist/{docs → domain/docs}/require-example-language/example-utilities.d.ts +0 -0
  547. /package/dist/{docs → domain/docs}/require-example-language/rule.d.ts +0 -0
  548. /package/dist/{docs → domain/docs}/require-example-language/types.d.ts +0 -0
  549. /package/dist/{docs → domain/docs}/single-line-jsdoc/rule.d.ts +0 -0
  550. /package/dist/{docs → domain/docs}/single-line-jsdoc/single-line-jsdoc-content.d.ts +0 -0
  551. /package/dist/{docs → domain/docs}/test-helpers.d.ts +0 -0
  552. /package/dist/{testing → domain/testing}/prefer-vi-mocked-import/match-helpers.d.ts +0 -0
  553. /package/dist/{testing → domain/testing}/prefer-vi-mocked-import/match-walk.d.ts +0 -0
  554. /package/dist/{testing → domain/testing}/prefer-vi-mocked-import/rule.d.ts +0 -0
  555. /package/dist/{testing → domain/testing}/require-test-companion/require-test-companion-options.d.ts +0 -0
  556. /package/dist/{testing → domain/testing}/require-test-companion/rule.d.ts +0 -0
  557. /package/dist/{testing → domain/testing}/require-test-companion/types.d.ts +0 -0
@@ -1,490 +0,0 @@
1
- const aaaPhaseOrder = {
2
- Act: 1,
3
- Arrange: 0,
4
- Assert: 2,
5
- };
6
- const arrayMutationMethods = new Set([
7
- "copyWithin",
8
- "fill",
9
- "pop",
10
- "push",
11
- "reverse",
12
- "shift",
13
- "sort",
14
- "splice",
15
- "unshift",
16
- ]);
17
- const phaseNames = ["Arrange", "Act", "Assert"];
18
- const setupLikeNames = /^(arrange|build|create|fixture|given|make|mock|seed|setup|spy|stub)/u;
19
- const utilityMethodNames = new Set([
20
- "advanceTimersByTime",
21
- "clearAllMocks",
22
- "debug",
23
- "fn",
24
- "info",
25
- "log",
26
- "mockImplementation",
27
- "mockRejectedValue",
28
- "mockResolvedValue",
29
- "mockReturnValue",
30
- "resetAllMocks",
31
- "useFakeTimers",
32
- "warn",
33
- ]);
34
- const voidLikeMethodNames = new Set([
35
- "clear",
36
- "debug",
37
- "dispatch",
38
- "emit",
39
- "info",
40
- "log",
41
- "print",
42
- "publish",
43
- "reset",
44
- "set",
45
- "trigger",
46
- "warn",
47
- ]);
48
- function getSectionPhases(commentValue) {
49
- const trimmedComment = commentValue.trim();
50
- if (trimmedComment.length === 0) {
51
- return [];
52
- }
53
- const parts = trimmedComment.split(/\s*&\s*/u);
54
- return parts.every(isAaaPhase) ? parts : [];
55
- }
56
- function analyzeTestBlock(context, node) {
57
- const testCall = getSupportedTestCall(node);
58
- if (testCall === void 0) {
59
- return void 0;
60
- }
61
- const { callback, callExpression } = testCall;
62
- const { sourceCode } = context;
63
- const sectionComments = sourceCode
64
- .getAllComments()
65
- .filter((comment) => isLocatedComment(comment) &&
66
- comment.type === "Line" &&
67
- isRangeWithin(comment.range, callback.body.range) &&
68
- getSectionPhases(comment.value).length > 0)
69
- .map((comment) => ({
70
- comment: comment,
71
- phases: getSectionPhases(comment.value),
72
- }));
73
- const flattenedSections = sectionComments.flatMap((sectionComment) => sectionComment.phases.map((phase) => ({
74
- line: sectionComment.comment.loc.start.line,
75
- phase,
76
- })));
77
- return {
78
- body: callback.body,
79
- bodyLineCount: callback.body.loc.end.line - callback.body.loc.start.line - 1,
80
- callExpression,
81
- newline: getNewline(sourceCode.text),
82
- sectionComments,
83
- sourceText: sourceCode.text,
84
- statements: callback.body.body.map((statement) => ({
85
- node: statement,
86
- phase: getStatementPhase(statement, flattenedSections),
87
- })),
88
- };
89
- }
90
- function countActStatements(analysis) {
91
- return analysis.statements.filter((statement) => statement.phase === "Act" &&
92
- (statement.node.type === "ExpressionStatement" ||
93
- statement.node.type === "VariableDeclaration")).length;
94
- }
95
- function getAssertionIdentifiers(statement) {
96
- if (statement.type !== "ExpressionStatement") {
97
- return { actual: void 0, expected: void 0 };
98
- }
99
- const expression = unwrapExpression(statement.expression);
100
- if (expression?.type !== "CallExpression") {
101
- return { actual: void 0, expected: void 0 };
102
- }
103
- const expectOperands = getExpectOperands(expression);
104
- if (expectOperands !== void 0) {
105
- return {
106
- actual: getIdentifierName(expectOperands.actual),
107
- expected: getIdentifierName(expectOperands.expected),
108
- };
109
- }
110
- const assertOperands = getAssertOperands(expression);
111
- return {
112
- actual: getIdentifierName(assertOperands?.actual),
113
- expected: getIdentifierName(assertOperands?.expected),
114
- };
115
- }
116
- function getAssertDeclaredIdentifiers(analysis) {
117
- const declaredIdentifiers = new Map();
118
- for (const statement of analysis.statements) {
119
- if (statement.phase !== "Assert" ||
120
- statement.node.type !== "VariableDeclaration") {
121
- continue;
122
- }
123
- for (const declaration of statement.node.declarations) {
124
- if (declaration.id.type === "Identifier") {
125
- declaredIdentifiers.set(declaration.id.name, declaration.id);
126
- }
127
- }
128
- }
129
- return declaredIdentifiers;
130
- }
131
- function getFlattenedSections(analysis) {
132
- return analysis.sectionComments.flatMap((sectionComment) => sectionComment.phases.map((phase) => ({
133
- comment: sectionComment.comment,
134
- phase,
135
- })));
136
- }
137
- function getPhaseBoundaryComments(analysis) {
138
- return analysis.sectionComments.filter((sectionComment) => sectionComment.phases.some((phase) => phase === "Act" || phase === "Assert"));
139
- }
140
- function hasAssertion(statement) {
141
- let foundAssertion = false;
142
- visitNode(statement, (node) => {
143
- if (node.type === "CallExpression" && isAssertionCall(node)) {
144
- foundAssertion = true;
145
- }
146
- });
147
- return foundAssertion;
148
- }
149
- function hasAsyncLogic(statement) {
150
- let foundAsyncLogic = false;
151
- visitNode(statement, (node) => {
152
- if (node.type === "AwaitExpression") {
153
- foundAsyncLogic = true;
154
- return;
155
- }
156
- if (node.type === "CallExpression" &&
157
- node.callee.type === "MemberExpression" &&
158
- node.callee.property.type === "Identifier" &&
159
- ["catch", "finally", "then"].includes(node.callee.property.name)) {
160
- foundAsyncLogic = true;
161
- return;
162
- }
163
- if (node.type === "NewExpression" &&
164
- getExpressionName(node.callee) === "Promise") {
165
- foundAsyncLogic = true;
166
- }
167
- });
168
- return foundAsyncLogic;
169
- }
170
- function hasAwait(statement) {
171
- let foundAwait = false;
172
- visitNode(statement, (node) => {
173
- if (node.type === "AwaitExpression") {
174
- foundAwait = true;
175
- }
176
- });
177
- return foundAwait;
178
- }
179
- function hasBlankLineBeforeComment(sourceText, comment) {
180
- if (!isLocatedComment(comment)) {
181
- return true;
182
- }
183
- const lines = sourceText.split(/\r\n|\n/u);
184
- const previousLine = lines[comment.loc.start.line - 2];
185
- return previousLine === void 0 || previousLine.trim().length === 0;
186
- }
187
- function hasCapturableActResult(statement) {
188
- if (statement.type !== "ExpressionStatement") {
189
- return false;
190
- }
191
- const expression = unwrapExpression(statement.expression);
192
- if (!isActionExpression(expression) || isUtilityLikeExpression(expression)) {
193
- return false;
194
- }
195
- const calleeName = getInvokedName(expression);
196
- return (calleeName === void 0 ||
197
- (!voidLikeMethodNames.has(calleeName) &&
198
- !/^(clear|debug|dispatch|emit|info|log|print|publish|reset|set|trigger|warn)/u.test(calleeName)));
199
- }
200
- function hasMutation(statement) {
201
- let foundMutation = false;
202
- visitNode(statement, (node) => {
203
- if (node.type === "AssignmentExpression" ||
204
- node.type === "UpdateExpression" ||
205
- node.type === "UnaryExpression") {
206
- if (node.type !== "UnaryExpression" || node.operator === "delete") {
207
- foundMutation = true;
208
- }
209
- return;
210
- }
211
- if (node.type === "CallExpression" &&
212
- node.callee.type === "MemberExpression" &&
213
- node.callee.property.type === "Identifier" &&
214
- arrayMutationMethods.has(node.callee.property.name)) {
215
- foundMutation = true;
216
- }
217
- });
218
- return foundMutation;
219
- }
220
- function isMeaningfulActStatement(statement) {
221
- const expression = getStatementExpression(statement);
222
- if (expression === void 0) {
223
- return false;
224
- }
225
- return (isActionExpression(expression) &&
226
- !isUtilityLikeExpression(expression) &&
227
- !hasAssertion(statement));
228
- }
229
- function isSetupLikeStatement(statement) {
230
- if (statement.type === "VariableDeclaration") {
231
- return statement.declarations.every((declaration) => {
232
- if (declaration.init === null) {
233
- return true;
234
- }
235
- const init = unwrapExpression(declaration.init);
236
- return !isActionExpression(init) || isUtilityLikeExpression(init);
237
- });
238
- }
239
- const expression = getStatementExpression(statement);
240
- return expression !== void 0 && isUtilityLikeExpression(expression);
241
- }
242
- function isValidAssertStatement(statement) {
243
- if (hasAssertion(statement)) {
244
- return true;
245
- }
246
- if (statement.type !== "VariableDeclaration") {
247
- return false;
248
- }
249
- return statement.declarations.every((declaration) => {
250
- /* v8 ignore start -- the parser used in this repo emits undefined rather than null for uninitialized declarators. */
251
- if (declaration.init === null) {
252
- return true;
253
- }
254
- /* v8 ignore stop */
255
- const init = unwrapExpression(declaration.init);
256
- return !isActionExpression(init);
257
- });
258
- }
259
- function usesPrefix(name, prefix) {
260
- return name === prefix || name.startsWith(prefix);
261
- }
262
- /* v8 ignore start -- valid analyzer callers always request an existing statement line. */
263
- function getLineStartRange(sourceText, line) {
264
- let currentLine = 1;
265
- for (let index = 0; index < sourceText.length; index += 1) {
266
- if (currentLine === line) {
267
- return [index, index];
268
- }
269
- if (sourceText[index] === "\n") {
270
- currentLine += 1;
271
- }
272
- }
273
- return [sourceText.length, sourceText.length];
274
- }
275
- /* v8 ignore stop */
276
- /* v8 ignore start -- the indentation regex always matches, but the fallback keeps the helper total-safe. */
277
- function getIndentationAtOffset(sourceText, offset) {
278
- const lineStart = sourceText.lastIndexOf("\n", Math.max(0, offset - 1)) + 1;
279
- const linePrefix = sourceText.slice(lineStart, offset);
280
- const indentation = /^\s*/u.exec(linePrefix);
281
- return indentation?.[0] ?? "";
282
- }
283
- /* v8 ignore stop */
284
- function getAssertOperands(expression) {
285
- if (expression.callee.type === "MemberExpression" &&
286
- expression.callee.object.type === "Identifier" &&
287
- expression.callee.object.name === "assert") {
288
- const [actual, expected] = expression.arguments;
289
- if (actual?.type !== "SpreadElement" &&
290
- expected?.type !== "SpreadElement") {
291
- return { actual, expected };
292
- }
293
- }
294
- return void 0;
295
- }
296
- function getExpectOperands(expression) {
297
- if (expression.callee.type === "Identifier" &&
298
- expression.callee.name === "expect") {
299
- const [actual] = expression.arguments;
300
- return actual?.type === "SpreadElement"
301
- ? { actual: void 0, expected: void 0 }
302
- : { actual, expected: void 0 };
303
- }
304
- if (expression.callee.type === "MemberExpression" &&
305
- expression.callee.object.type === "CallExpression") {
306
- const nestedOperands = getExpectOperands(expression.callee.object);
307
- if (nestedOperands === void 0) {
308
- return void 0;
309
- }
310
- const [expected] = expression.arguments;
311
- return expected?.type === "SpreadElement"
312
- ? nestedOperands
313
- : { actual: nestedOperands.actual, expected };
314
- }
315
- return void 0;
316
- }
317
- /* v8 ignore start -- the fallback branches are retained for helper totality but are not reachable from current analyzer entry points. */
318
- function getExpressionName(expression) {
319
- if (expression.type === "Super") {
320
- return void 0;
321
- }
322
- if (expression.type === "Identifier") {
323
- return expression.name;
324
- }
325
- if (expression.type === "MemberExpression" &&
326
- expression.property.type === "Identifier") {
327
- return expression.property.name;
328
- }
329
- return void 0;
330
- }
331
- /* v8 ignore stop */
332
- function getIdentifierName(expression) {
333
- return expression?.type === "Identifier" ? expression.name : void 0;
334
- }
335
- /* v8 ignore start -- callers only ask for invoked names after action-expression checks that narrow to call/new expressions. */
336
- function getInvokedName(expression) {
337
- const unwrappedExpression = unwrapExpression(expression);
338
- if (unwrappedExpression?.type === "CallExpression" ||
339
- unwrappedExpression?.type === "NewExpression") {
340
- return getExpressionName(unwrappedExpression.callee);
341
- }
342
- return void 0;
343
- }
344
- /* v8 ignore stop */
345
- function getNewline(text) {
346
- return text.includes("\r\n") ? "\r\n" : "\n";
347
- }
348
- function getStatementExpression(statement) {
349
- if (statement.type === "ExpressionStatement") {
350
- return statement.expression;
351
- }
352
- if (statement.type === "VariableDeclaration" &&
353
- statement.declarations.length === 1) {
354
- /* v8 ignore start -- valid ESTree variable declarations always carry the matched declarator. */
355
- return statement.declarations[0]?.init ?? void 0;
356
- /* v8 ignore stop */
357
- }
358
- return void 0;
359
- }
360
- function getStatementPhase(statement, flattenedSections) {
361
- const statementLine = statement.loc?.start.line;
362
- if (statementLine === void 0) {
363
- return void 0;
364
- }
365
- let currentPhase;
366
- for (const section of flattenedSections) {
367
- if (section.line > statementLine) {
368
- break;
369
- }
370
- currentPhase = section.phase;
371
- }
372
- return currentPhase;
373
- }
374
- function getSupportedTestCall(node) {
375
- const rootName = getTestRootName(node.callee);
376
- if (rootName !== "it" && rootName !== "test") {
377
- return void 0;
378
- }
379
- const callbackArgument = node.arguments.at(-1);
380
- if (callbackArgument === void 0 ||
381
- callbackArgument.type === "SpreadElement" ||
382
- (callbackArgument.type !== "ArrowFunctionExpression" &&
383
- callbackArgument.type !== "FunctionExpression") ||
384
- callbackArgument.body.type !== "BlockStatement") {
385
- return void 0;
386
- }
387
- return {
388
- callback: callbackArgument,
389
- callExpression: node,
390
- };
391
- }
392
- function getTestRootName(callee) {
393
- if (callee.type === "Identifier") {
394
- return callee.name;
395
- }
396
- if (callee.type === "MemberExpression" && callee.object.type !== "Super") {
397
- return getTestRootName(callee.object);
398
- }
399
- return void 0;
400
- }
401
- function isActionExpression(expression) {
402
- const unwrappedExpression = unwrapExpression(expression);
403
- return (unwrappedExpression?.type === "AwaitExpression" ||
404
- unwrappedExpression?.type === "CallExpression" ||
405
- unwrappedExpression?.type === "NewExpression");
406
- }
407
- function isAaaPhase(value) {
408
- return phaseNames.includes(value);
409
- }
410
- function isAssertionCall(node) {
411
- if (node.callee.type === "Identifier") {
412
- return node.callee.name === "expect" || node.callee.name === "assert";
413
- }
414
- if (node.callee.type !== "MemberExpression") {
415
- return false;
416
- }
417
- if (node.callee.object.type === "Identifier" &&
418
- node.callee.object.name === "assert") {
419
- return true;
420
- }
421
- if (node.callee.object.type === "CallExpression") {
422
- return isAssertionCall(node.callee.object);
423
- }
424
- return false;
425
- }
426
- function isRangeWithin(range, container) {
427
- return range[0] >= container[0] && range[1] <= container[1];
428
- }
429
- function isUtilityLikeExpression(expression) {
430
- const unwrappedExpression = unwrapExpression(expression);
431
- if (unwrappedExpression?.type !== "CallExpression" &&
432
- unwrappedExpression?.type !== "NewExpression") {
433
- return false;
434
- }
435
- const calleeName = getExpressionName(unwrappedExpression.callee);
436
- if (calleeName === void 0) {
437
- return false;
438
- }
439
- if (utilityMethodNames.has(calleeName) || setupLikeNames.test(calleeName)) {
440
- return true;
441
- }
442
- return (unwrappedExpression.callee.type === "MemberExpression" &&
443
- unwrappedExpression.callee.object.type === "Identifier" &&
444
- ["console", "vi"].includes(unwrappedExpression.callee.object.name));
445
- }
446
- function unwrapExpression(expression) {
447
- if (expression?.type === "ChainExpression") {
448
- return unwrapExpression(expression.expression);
449
- }
450
- if (expression?.type === "AwaitExpression") {
451
- return expression.argument;
452
- }
453
- return expression;
454
- }
455
- function visitNode(node, callback, seenNodes = new WeakSet()) {
456
- if (seenNodes.has(node)) {
457
- return;
458
- }
459
- seenNodes.add(node);
460
- callback(node);
461
- for (const [key, value] of Object.entries(node)) {
462
- if (key === "parent") {
463
- continue;
464
- }
465
- if (Array.isArray(value)) {
466
- for (const item of value) {
467
- if (isNode(item)) {
468
- visitNode(item, callback, seenNodes);
469
- }
470
- }
471
- continue;
472
- }
473
- if (isNode(value)) {
474
- visitNode(value, callback, seenNodes);
475
- }
476
- }
477
- }
478
- function isNode(value) {
479
- return (typeof value === "object" &&
480
- value !== null &&
481
- "type" in value &&
482
- typeof value.type === "string");
483
- }
484
- function isLocatedComment(comment) {
485
- return (comment.loc !== null &&
486
- comment.loc !== undefined &&
487
- comment.range !== undefined);
488
- }
489
- export { aaaPhaseOrder, analyzeTestBlock, countActStatements, getAssertDeclaredIdentifiers, getAssertionIdentifiers, getFlattenedSections, getIndentationAtOffset, getLineStartRange, getPhaseBoundaryComments, getSectionPhases, hasAssertion, hasAsyncLogic, hasAwait, hasBlankLineBeforeComment, hasCapturableActResult, hasMutation, isMeaningfulActStatement, isSetupLikeStatement, isValidAssertStatement, usesPrefix, };
490
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbHl6ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVzdGluZy9hYWEvYW5hbHl6ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBV0EsTUFBTSxhQUFhLEdBQUc7SUFDcEIsR0FBRyxFQUFFLENBQUM7SUFDTixPQUFPLEVBQUUsQ0FBQztJQUNWLE1BQU0sRUFBRSxDQUFDO0NBQ2tDLENBQUM7QUFFOUMsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNuQyxZQUFZO0lBQ1osTUFBTTtJQUNOLEtBQUs7SUFDTCxNQUFNO0lBQ04sU0FBUztJQUNULE9BQU87SUFDUCxNQUFNO0lBQ04sUUFBUTtJQUNSLFNBQVM7Q0FDVixDQUFDLENBQUM7QUFDSCxNQUFNLFVBQVUsR0FBRyxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUk3QyxDQUFDO0FBQ0YsTUFBTSxjQUFjLEdBQ2xCLHNFQUFzRSxDQUFDO0FBQ3pFLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDakMscUJBQXFCO0lBQ3JCLGVBQWU7SUFDZixPQUFPO0lBQ1AsSUFBSTtJQUNKLE1BQU07SUFDTixLQUFLO0lBQ0wsb0JBQW9CO0lBQ3BCLG1CQUFtQjtJQUNuQixtQkFBbUI7SUFDbkIsaUJBQWlCO0lBQ2pCLGVBQWU7SUFDZixlQUFlO0lBQ2YsTUFBTTtDQUNQLENBQUMsQ0FBQztBQUNILE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbEMsT0FBTztJQUNQLE9BQU87SUFDUCxVQUFVO0lBQ1YsTUFBTTtJQUNOLE1BQU07SUFDTixLQUFLO0lBQ0wsT0FBTztJQUNQLFNBQVM7SUFDVCxPQUFPO0lBQ1AsS0FBSztJQUNMLFNBQVM7SUFDVCxNQUFNO0NBQ1AsQ0FBQyxDQUFDO0FBRUgsU0FBUyxnQkFBZ0IsQ0FBQyxZQUFvQjtJQUM1QyxNQUFNLGNBQWMsR0FBRyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7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QUFVLEdBQ1gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUnVsZSB9IGZyb20gXCJlc2xpbnRcIjtcbmltcG9ydCB0eXBlICogYXMgRVNUcmVlIGZyb20gXCJlc3RyZWVcIjtcblxuaW1wb3J0IHR5cGUge1xuICBBYWFQaGFzZSxcbiAgTG9jYXRlZENvbW1lbnQsXG4gIExvY2F0ZWROb2RlLFxuICBTb3VyY2VDb21tZW50LFxuICBUZXN0QmxvY2tBbmFseXNpcyxcbn0gZnJvbSBcIi4vdHlwZXNcIjtcblxuY29uc3QgYWFhUGhhc2VPcmRlciA9IHtcbiAgQWN0OiAxLFxuICBBcnJhbmdlOiAwLFxuICBBc3NlcnQ6IDIsXG59IGFzIGNvbnN0IHNhdGlzZmllcyBSZWNvcmQ8QWFhUGhhc2UsIG51bWJlcj47XG5cbmNvbnN0IGFycmF5TXV0YXRpb25NZXRob2RzID0gbmV3IFNldChbXG4gIFwiY29weVdpdGhpblwiLFxuICBcImZpbGxcIixcbiAgXCJwb3BcIixcbiAgXCJwdXNoXCIsXG4gIFwicmV2ZXJzZVwiLFxuICBcInNoaWZ0XCIsXG4gIFwic29ydFwiLFxuICBcInNwbGljZVwiLFxuICBcInVuc2hpZnRcIixcbl0pO1xuY29uc3QgcGhhc2VOYW1lcyA9IFtcIkFycmFuZ2VcIiwgXCJBY3RcIiwgXCJBc3NlcnRcIl0gYXMgY29uc3Qgc2F0aXNmaWVzIHJlYWRvbmx5IFtcbiAgQWFhUGhhc2UsXG4gIEFhYVBoYXNlLFxuICBBYWFQaGFzZSxcbl07XG5jb25zdCBzZXR1cExpa2VOYW1lcyA9XG4gIC9eKGFycmFuZ2V8YnVpbGR8Y3JlYXRlfGZpeHR1cmV8Z2l2ZW58bWFrZXxtb2NrfHNlZWR8c2V0dXB8c3B5fHN0dWIpL3U7XG5jb25zdCB1dGlsaXR5TWV0aG9kTmFtZXMgPSBuZXcgU2V0KFtcbiAgXCJhZHZhbmNlVGltZXJzQnlUaW1lXCIsXG4gIFwiY2xlYXJBbGxNb2Nrc1wiLFxuICBcImRlYnVnXCIsXG4gIFwiZm5cIixcbiAgXCJpbmZvXCIsXG4gIFwibG9nXCIsXG4gIFwibW9ja0ltcGxlbWVudGF0aW9uXCIsXG4gIFwibW9ja1JlamVjdGVkVmFsdWVcIixcbiAgXCJtb2NrUmVzb2x2ZWRWYWx1ZVwiLFxuICBcIm1vY2tSZXR1cm5WYWx1ZVwiLFxuICBcInJlc2V0QWxsTW9ja3NcIixcbiAgXCJ1c2VGYWtlVGltZXJzXCIsXG4gIFwid2FyblwiLFxuXSk7XG5jb25zdCB2b2lkTGlrZU1ldGhvZE5hbWVzID0gbmV3IFNldChbXG4gIFwiY2xlYXJcIixcbiAgXCJkZWJ1Z1wiLFxuICBcImRpc3BhdGNoXCIsXG4gIFwiZW1pdFwiLFxuICBcImluZm9cIixcbiAgXCJsb2dcIixcbiAgXCJwcmludFwiLFxuICBcInB1Ymxpc2hcIixcbiAgXCJyZXNldFwiLFxuICBcInNldFwiLFxuICBcInRyaWdnZXJcIixcbiAgXCJ3YXJuXCIsXG5dKTtcblxuZnVuY3Rpb24gZ2V0U2VjdGlvblBoYXNlcyhjb21tZW50VmFsdWU6IHN0cmluZyk6IEFhYVBoYXNlW10ge1xuICBjb25zdCB0cmltbWVkQ29tbWVudCA9IGNvbW1lbnRWYWx1ZS50cmltKCk7XG4gIGlmICh0cmltbWVkQ29tbWVudC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCBwYXJ0cyA9IHRyaW1tZWRDb21tZW50LnNwbGl0KC9cXHMqJlxccyovdSk7XG4gIHJldHVybiBwYXJ0cy5ldmVyeShpc0FhYVBoYXNlKSA/IHBhcnRzIDogW107XG59XG5cbmZ1bmN0aW9uIGFuYWx5emVUZXN0QmxvY2soXG4gIGNvbnRleHQ6IFJ1bGUuUnVsZUNvbnRleHQsXG4gIG5vZGU6IEVTVHJlZS5DYWxsRXhwcmVzc2lvbixcbik6IFRlc3RCbG9ja0FuYWx5c2lzIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgdGVzdENhbGwgPSBnZXRTdXBwb3J0ZWRUZXN0Q2FsbChub2RlKTtcbiAgaWYgKHRlc3RDYWxsID09PSB2b2lkIDApIHtcbiAgICByZXR1cm4gdm9pZCAwO1xuICB9XG5cbiAgY29uc3QgeyBjYWxsYmFjaywgY2FsbEV4cHJlc3Npb24gfSA9IHRlc3RDYWxsO1xuICBjb25zdCB7IHNvdXJjZUNvZGUgfSA9IGNvbnRleHQ7XG4gIGNvbnN0IHNlY3Rpb25Db21tZW50czogVGVzdEJsb2NrQW5hbHlzaXNbXCJzZWN0aW9uQ29tbWVudHNcIl0gPSBzb3VyY2VDb2RlXG4gICAgLmdldEFsbENvbW1lbnRzKClcbiAgICAuZmlsdGVyKFxuICAgICAgKGNvbW1lbnQpID0+XG4gICAgICAgIGlzTG9jYXRlZENvbW1lbnQoY29tbWVudCkgJiZcbiAgICAgICAgY29tbWVudC50eXBlID09PSBcIkxpbmVcIiAmJlxuICAgICAgICBpc1JhbmdlV2l0aGluKGNvbW1lbnQucmFuZ2UsIGNhbGxiYWNrLmJvZHkucmFuZ2UpICYmXG4gICAgICAgIGdldFNlY3Rpb25QaGFzZXMoY29tbWVudC52YWx1ZSkubGVuZ3RoID4gMCxcbiAgICApXG4gICAgLm1hcCgoY29tbWVudCkgPT4gKHtcbiAgICAgIGNvbW1lbnQ6IGNvbW1lbnQgYXMgTG9jYXRlZENvbW1lbnQsXG4gICAgICBwaGFzZXM6IGdldFNlY3Rpb25QaGFzZXMoY29tbWVudC52YWx1ZSksXG4gICAgfSkpO1xuICBjb25zdCBmbGF0dGVuZWRTZWN0aW9ucyA9IHNlY3Rpb25Db21tZW50cy5mbGF0TWFwKChzZWN0aW9uQ29tbWVudCkgPT5cbiAgICBzZWN0aW9uQ29tbWVudC5waGFzZXMubWFwKChwaGFzZSkgPT4gKHtcbiAgICAgIGxpbmU6IHNlY3Rpb25Db21tZW50LmNvbW1lbnQubG9jLnN0YXJ0LmxpbmUsXG4gICAgICBwaGFzZSxcbiAgICB9KSksXG4gICk7XG5cbiAgcmV0dXJuIHtcbiAgICBib2R5OiBjYWxsYmFjay5ib2R5LFxuICAgIGJvZHlMaW5lQ291bnQ6XG4gICAgICBjYWxsYmFjay5ib2R5LmxvYy5lbmQubGluZSAtIGNhbGxiYWNrLmJvZHkubG9jLnN0YXJ0LmxpbmUgLSAxLFxuICAgIGNhbGxFeHByZXNzaW9uLFxuICAgIG5ld2xpbmU6IGdldE5ld2xpbmUoc291cmNlQ29kZS50ZXh0KSxcbiAgICBzZWN0aW9uQ29tbWVudHMsXG4gICAgc291cmNlVGV4dDogc291cmNlQ29kZS50ZXh0LFxuICAgIHN0YXRlbWVudHM6IGNhbGxiYWNrLmJvZHkuYm9keS5tYXAoKHN0YXRlbWVudCkgPT4gKHtcbiAgICAgIG5vZGU6IHN0YXRlbWVudCBhcyBMb2NhdGVkTm9kZTxFU1RyZWUuU3RhdGVtZW50PixcbiAgICAgIHBoYXNlOiBnZXRTdGF0ZW1lbnRQaGFzZShzdGF0ZW1lbnQsIGZsYXR0ZW5lZFNlY3Rpb25zKSxcbiAgICB9KSksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvdW50QWN0U3RhdGVtZW50cyhhbmFseXNpczogVGVzdEJsb2NrQW5hbHlzaXMpOiBudW1iZXIge1xuICByZXR1cm4gYW5hbHlzaXMuc3RhdGVtZW50cy5maWx0ZXIoXG4gICAgKHN0YXRlbWVudCkgPT5cbiAgICAgIHN0YXRlbWVudC5waGFzZSA9PT0gXCJBY3RcIiAmJlxuICAgICAgKHN0YXRlbWVudC5ub2RlLnR5cGUgPT09IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiIHx8XG4gICAgICAgIHN0YXRlbWVudC5ub2RlLnR5cGUgPT09IFwiVmFyaWFibGVEZWNsYXJhdGlvblwiKSxcbiAgKS5sZW5ndGg7XG59XG5cbmludGVyZmFjZSBBc3NlcnRpb25JZGVudGlmaWVycyB7XG4gIGFjdHVhbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBleHBlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBnZXRBc3NlcnRpb25JZGVudGlmaWVycyhcbiAgc3RhdGVtZW50OiBFU1RyZWUuU3RhdGVtZW50LFxuKTogQXNzZXJ0aW9uSWRlbnRpZmllcnMge1xuICBpZiAoc3RhdGVtZW50LnR5cGUgIT09IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiKSB7XG4gICAgcmV0dXJuIHsgYWN0dWFsOiB2b2lkIDAsIGV4cGVjdGVkOiB2b2lkIDAgfTtcbiAgfVxuXG4gIGNvbnN0IGV4cHJlc3Npb24gPSB1bndyYXBFeHByZXNzaW9uKHN0YXRlbWVudC5leHByZXNzaW9uKTtcbiAgaWYgKGV4cHJlc3Npb24/LnR5cGUgIT09IFwiQ2FsbEV4cHJlc3Npb25cIikge1xuICAgIHJldHVybiB7IGFjdHVhbDogdm9pZCAwLCBleHBlY3RlZDogdm9pZCAwIH07XG4gIH1cblxuICBjb25zdCBleHBlY3RPcGVyYW5kcyA9IGdldEV4cGVjdE9wZXJhbmRzKGV4cHJlc3Npb24pO1xuICBpZiAoZXhwZWN0T3BlcmFuZHMgIT09IHZvaWQgMCkge1xuICAgIHJldHVybiB7XG4gICAgICBhY3R1YWw6IGdldElkZW50aWZpZXJOYW1lKGV4cGVjdE9wZXJhbmRzLmFjdHVhbCksXG4gICAgICBleHBlY3RlZDogZ2V0SWRlbnRpZmllck5hbWUoZXhwZWN0T3BlcmFuZHMuZXhwZWN0ZWQpLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBhc3NlcnRPcGVyYW5kcyA9IGdldEFzc2VydE9wZXJhbmRzKGV4cHJlc3Npb24pO1xuICByZXR1cm4ge1xuICAgIGFjdHVhbDogZ2V0SWRlbnRpZmllck5hbWUoYXNzZXJ0T3BlcmFuZHM/LmFjdHVhbCksXG4gICAgZXhwZWN0ZWQ6IGdldElkZW50aWZpZXJOYW1lKGFzc2VydE9wZXJhbmRzPy5leHBlY3RlZCksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldEFzc2VydERlY2xhcmVkSWRlbnRpZmllcnMoXG4gIGFuYWx5c2lzOiBUZXN0QmxvY2tBbmFseXNpcyxcbik6IE1hcDxzdHJpbmcsIExvY2F0ZWROb2RlPEVTVHJlZS5JZGVudGlmaWVyPj4ge1xuICBjb25zdCBkZWNsYXJlZElkZW50aWZpZXJzID0gbmV3IE1hcDxzdHJpbmcsIExvY2F0ZWROb2RlPEVTVHJlZS5JZGVudGlmaWVyPj4oKTtcblxuICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiBhbmFseXNpcy5zdGF0ZW1lbnRzKSB7XG4gICAgaWYgKFxuICAgICAgc3RhdGVtZW50LnBoYXNlICE9PSBcIkFzc2VydFwiIHx8XG4gICAgICBzdGF0ZW1lbnQubm9kZS50eXBlICE9PSBcIlZhcmlhYmxlRGVjbGFyYXRpb25cIlxuICAgICkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBzdGF0ZW1lbnQubm9kZS5kZWNsYXJhdGlvbnMpIHtcbiAgICAgIGlmIChkZWNsYXJhdGlvbi5pZC50eXBlID09PSBcIklkZW50aWZpZXJcIikge1xuICAgICAgICBkZWNsYXJlZElkZW50aWZpZXJzLnNldChcbiAgICAgICAgICBkZWNsYXJhdGlvbi5pZC5uYW1lLFxuICAgICAgICAgIGRlY2xhcmF0aW9uLmlkIGFzIExvY2F0ZWROb2RlPEVTVHJlZS5JZGVudGlmaWVyPixcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGVjbGFyZWRJZGVudGlmaWVycztcbn1cblxuZnVuY3Rpb24gZ2V0RmxhdHRlbmVkU2VjdGlvbnMoXG4gIGFuYWx5c2lzOiBQaWNrPFRlc3RCbG9ja0FuYWx5c2lzLCBcInNlY3Rpb25Db21tZW50c1wiPixcbik6IEFycmF5PHsgY29tbWVudDogU291cmNlQ29tbWVudDsgcGhhc2U6IEFhYVBoYXNlIH0+IHtcbiAgcmV0dXJuIGFuYWx5c2lzLnNlY3Rpb25Db21tZW50cy5mbGF0TWFwKChzZWN0aW9uQ29tbWVudCkgPT5cbiAgICBzZWN0aW9uQ29tbWVudC5waGFzZXMubWFwKChwaGFzZSkgPT4gKHtcbiAgICAgIGNvbW1lbnQ6IHNlY3Rpb25Db21tZW50LmNvbW1lbnQsXG4gICAgICBwaGFzZSxcbiAgICB9KSksXG4gICk7XG59XG5cbmZ1bmN0aW9uIGdldFBoYXNlQm91bmRhcnlDb21tZW50cyhcbiAgYW5hbHlzaXM6IFBpY2s8VGVzdEJsb2NrQW5hbHlzaXMsIFwic2VjdGlvbkNvbW1lbnRzXCI+LFxuKSB7XG4gIHJldHVybiBhbmFseXNpcy5zZWN0aW9uQ29tbWVudHMuZmlsdGVyKChzZWN0aW9uQ29tbWVudCkgPT5cbiAgICBzZWN0aW9uQ29tbWVudC5waGFzZXMuc29tZShcbiAgICAgIChwaGFzZSkgPT4gcGhhc2UgPT09IFwiQWN0XCIgfHwgcGhhc2UgPT09IFwiQXNzZXJ0XCIsXG4gICAgKSxcbiAgKTtcbn1cblxuZnVuY3Rpb24gaGFzQXNzZXJ0aW9uKHN0YXRlbWVudDogRVNUcmVlLlN0YXRlbWVudCk6IGJvb2xlYW4ge1xuICBsZXQgZm91bmRBc3NlcnRpb24gPSBmYWxzZTtcblxuICB2aXNpdE5vZGUoc3RhdGVtZW50LCAobm9kZSkgPT4ge1xuICAgIGlmIChub2RlLnR5cGUgPT09IFwiQ2FsbEV4cHJlc3Npb25cIiAmJiBpc0Fzc2VydGlvbkNhbGwobm9kZSkpIHtcbiAgICAgIGZvdW5kQXNzZXJ0aW9uID0gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBmb3VuZEFzc2VydGlvbjtcbn1cblxuZnVuY3Rpb24gaGFzQXN5bmNMb2dpYyhzdGF0ZW1lbnQ6IEVTVHJlZS5TdGF0ZW1lbnQpOiBib29sZWFuIHtcbiAgbGV0IGZvdW5kQXN5bmNMb2dpYyA9IGZhbHNlO1xuXG4gIHZpc2l0Tm9kZShzdGF0ZW1lbnQsIChub2RlKSA9PiB7XG4gICAgaWYgKG5vZGUudHlwZSA9PT0gXCJBd2FpdEV4cHJlc3Npb25cIikge1xuICAgICAgZm91bmRBc3luY0xvZ2ljID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBub2RlLnR5cGUgPT09IFwiQ2FsbEV4cHJlc3Npb25cIiAmJlxuICAgICAgbm9kZS5jYWxsZWUudHlwZSA9PT0gXCJNZW1iZXJFeHByZXNzaW9uXCIgJiZcbiAgICAgIG5vZGUuY2FsbGVlLnByb3BlcnR5LnR5cGUgPT09IFwiSWRlbnRpZmllclwiICYmXG4gICAgICBbXCJjYXRjaFwiLCBcImZpbmFsbHlcIiwgXCJ0aGVuXCJdLmluY2x1ZGVzKG5vZGUuY2FsbGVlLnByb3BlcnR5Lm5hbWUpXG4gICAgKSB7XG4gICAgICBmb3VuZEFzeW5jTG9naWMgPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIG5vZGUudHlwZSA9PT0gXCJOZXdFeHByZXNzaW9uXCIgJiZcbiAgICAgIGdldEV4cHJlc3Npb25OYW1lKG5vZGUuY2FsbGVlKSA9PT0gXCJQcm9taXNlXCJcbiAgICApIHtcbiAgICAgIGZvdW5kQXN5bmNMb2dpYyA9IHRydWU7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZm91bmRBc3luY0xvZ2ljO1xufVxuXG5mdW5jdGlvbiBoYXNBd2FpdChzdGF0ZW1lbnQ6IEVTVHJlZS5TdGF0ZW1lbnQpOiBib29sZWFuIHtcbiAgbGV0IGZvdW5kQXdhaXQgPSBmYWxzZTtcblxuICB2aXNpdE5vZGUoc3RhdGVtZW50LCAobm9kZSkgPT4ge1xuICAgIGlmIChub2RlLnR5cGUgPT09IFwiQXdhaXRFeHByZXNzaW9uXCIpIHtcbiAgICAgIGZvdW5kQXdhaXQgPSB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGZvdW5kQXdhaXQ7XG59XG5cbmZ1bmN0aW9uIGhhc0JsYW5rTGluZUJlZm9yZUNvbW1lbnQoXG4gIHNvdXJjZVRleHQ6IHN0cmluZyxcbiAgY29tbWVudDogU291cmNlQ29tbWVudCxcbik6IGJvb2xlYW4ge1xuICBpZiAoIWlzTG9jYXRlZENvbW1lbnQoY29tbWVudCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0IGxpbmVzID0gc291cmNlVGV4dC5zcGxpdCgvXFxyXFxufFxcbi91KTtcbiAgY29uc3QgcHJldmlvdXNMaW5lID0gbGluZXNbY29tbWVudC5sb2Muc3RhcnQubGluZSAtIDJdO1xuICByZXR1cm4gcHJldmlvdXNMaW5lID09PSB2b2lkIDAgfHwgcHJldmlvdXNMaW5lLnRyaW0oKS5sZW5ndGggPT09IDA7XG59XG5cbmZ1bmN0aW9uIGhhc0NhcHR1cmFibGVBY3RSZXN1bHQoc3RhdGVtZW50OiBFU1RyZWUuU3RhdGVtZW50KTogYm9vbGVhbiB7XG4gIGlmIChzdGF0ZW1lbnQudHlwZSAhPT0gXCJFeHByZXNzaW9uU3RhdGVtZW50XCIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBleHByZXNzaW9uID0gdW53cmFwRXhwcmVzc2lvbihzdGF0ZW1lbnQuZXhwcmVzc2lvbik7XG4gIGlmICghaXNBY3Rpb25FeHByZXNzaW9uKGV4cHJlc3Npb24pIHx8IGlzVXRpbGl0eUxpa2VFeHByZXNzaW9uKGV4cHJlc3Npb24pKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgY2FsbGVlTmFtZSA9IGdldEludm9rZWROYW1lKGV4cHJlc3Npb24pO1xuICByZXR1cm4gKFxuICAgIGNhbGxlZU5hbWUgPT09IHZvaWQgMCB8fFxuICAgICghdm9pZExpa2VNZXRob2ROYW1lcy5oYXMoY2FsbGVlTmFtZSkgJiZcbiAgICAgICEvXihjbGVhcnxkZWJ1Z3xkaXNwYXRjaHxlbWl0fGluZm98bG9nfHByaW50fHB1Ymxpc2h8cmVzZXR8c2V0fHRyaWdnZXJ8d2FybikvdS50ZXN0KFxuICAgICAgICBjYWxsZWVOYW1lLFxuICAgICAgKSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gaGFzTXV0YXRpb24oc3RhdGVtZW50OiBFU1RyZWUuU3RhdGVtZW50KTogYm9vbGVhbiB7XG4gIGxldCBmb3VuZE11dGF0aW9uID0gZmFsc2U7XG5cbiAgdmlzaXROb2RlKHN0YXRlbWVudCwgKG5vZGUpID0+IHtcbiAgICBpZiAoXG4gICAgICBub2RlLnR5cGUgPT09IFwiQXNzaWdubWVudEV4cHJlc3Npb25cIiB8fFxuICAgICAgbm9kZS50eXBlID09PSBcIlVwZGF0ZUV4cHJlc3Npb25cIiB8fFxuICAgICAgbm9kZS50eXBlID09PSBcIlVuYXJ5RXhwcmVzc2lvblwiXG4gICAgKSB7XG4gICAgICBpZiAobm9kZS50eXBlICE9PSBcIlVuYXJ5RXhwcmVzc2lvblwiIHx8IG5vZGUub3BlcmF0b3IgPT09IFwiZGVsZXRlXCIpIHtcbiAgICAgICAgZm91bmRNdXRhdGlvbiA9IHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgbm9kZS50eXBlID09PSBcIkNhbGxFeHByZXNzaW9uXCIgJiZcbiAgICAgIG5vZGUuY2FsbGVlLnR5cGUgPT09IFwiTWVtYmVyRXhwcmVzc2lvblwiICYmXG4gICAgICBub2RlLmNhbGxlZS5wcm9wZXJ0eS50eXBlID09PSBcIklkZW50aWZpZXJcIiAmJlxuICAgICAgYXJyYXlNdXRhdGlvbk1ldGhvZHMuaGFzKG5vZGUuY2FsbGVlLnByb3BlcnR5Lm5hbWUpXG4gICAgKSB7XG4gICAgICBmb3VuZE11dGF0aW9uID0gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBmb3VuZE11dGF0aW9uO1xufVxuXG5mdW5jdGlvbiBpc01lYW5pbmdmdWxBY3RTdGF0ZW1lbnQoc3RhdGVtZW50OiBFU1RyZWUuU3RhdGVtZW50KTogYm9vbGVhbiB7XG4gIGNvbnN0IGV4cHJlc3Npb24gPSBnZXRTdGF0ZW1lbnRFeHByZXNzaW9uKHN0YXRlbWVudCk7XG4gIGlmIChleHByZXNzaW9uID09PSB2b2lkIDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIGlzQWN0aW9uRXhwcmVzc2lvbihleHByZXNzaW9uKSAmJlxuICAgICFpc1V0aWxpdHlMaWtlRXhwcmVzc2lvbihleHByZXNzaW9uKSAmJlxuICAgICFoYXNBc3NlcnRpb24oc3RhdGVtZW50KVxuICApO1xufVxuXG5mdW5jdGlvbiBpc1NldHVwTGlrZVN0YXRlbWVudChzdGF0ZW1lbnQ6IEVTVHJlZS5TdGF0ZW1lbnQpOiBib29sZWFuIHtcbiAgaWYgKHN0YXRlbWVudC50eXBlID09PSBcIlZhcmlhYmxlRGVjbGFyYXRpb25cIikge1xuICAgIHJldHVybiBzdGF0ZW1lbnQuZGVjbGFyYXRpb25zLmV2ZXJ5KChkZWNsYXJhdGlvbikgPT4ge1xuICAgICAgaWYgKGRlY2xhcmF0aW9uLmluaXQgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGluaXQgPSB1bndyYXBFeHByZXNzaW9uKGRlY2xhcmF0aW9uLmluaXQpO1xuICAgICAgcmV0dXJuICFpc0FjdGlvbkV4cHJlc3Npb24oaW5pdCkgfHwgaXNVdGlsaXR5TGlrZUV4cHJlc3Npb24oaW5pdCk7XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBleHByZXNzaW9uID0gZ2V0U3RhdGVtZW50RXhwcmVzc2lvbihzdGF0ZW1lbnQpO1xuICByZXR1cm4gZXhwcmVzc2lvbiAhPT0gdm9pZCAwICYmIGlzVXRpbGl0eUxpa2VFeHByZXNzaW9uKGV4cHJlc3Npb24pO1xufVxuXG5mdW5jdGlvbiBpc1ZhbGlkQXNzZXJ0U3RhdGVtZW50KHN0YXRlbWVudDogRVNUcmVlLlN0YXRlbWVudCk6IGJvb2xlYW4ge1xuICBpZiAoaGFzQXNzZXJ0aW9uKHN0YXRlbWVudCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChzdGF0ZW1lbnQudHlwZSAhPT0gXCJWYXJpYWJsZURlY2xhcmF0aW9uXCIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50LmRlY2xhcmF0aW9ucy5ldmVyeSgoZGVjbGFyYXRpb24pID0+IHtcbiAgICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gdGhlIHBhcnNlciB1c2VkIGluIHRoaXMgcmVwbyBlbWl0cyB1bmRlZmluZWQgcmF0aGVyIHRoYW4gbnVsbCBmb3IgdW5pbml0aWFsaXplZCBkZWNsYXJhdG9ycy4gKi9cbiAgICBpZiAoZGVjbGFyYXRpb24uaW5pdCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8qIHY4IGlnbm9yZSBzdG9wICovXG5cbiAgICBjb25zdCBpbml0ID0gdW53cmFwRXhwcmVzc2lvbihkZWNsYXJhdGlvbi5pbml0KTtcbiAgICByZXR1cm4gIWlzQWN0aW9uRXhwcmVzc2lvbihpbml0KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHVzZXNQcmVmaXgobmFtZTogc3RyaW5nLCBwcmVmaXg6IFwiYWN0dWFsXCIgfCBcImV4cGVjdGVkXCIpOiBib29sZWFuIHtcbiAgcmV0dXJuIG5hbWUgPT09IHByZWZpeCB8fCBuYW1lLnN0YXJ0c1dpdGgocHJlZml4KTtcbn1cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIHZhbGlkIGFuYWx5emVyIGNhbGxlcnMgYWx3YXlzIHJlcXVlc3QgYW4gZXhpc3Rpbmcgc3RhdGVtZW50IGxpbmUuICovXG5mdW5jdGlvbiBnZXRMaW5lU3RhcnRSYW5nZShzb3VyY2VUZXh0OiBzdHJpbmcsIGxpbmU6IG51bWJlcik6IFtudW1iZXIsIG51bWJlcl0ge1xuICBsZXQgY3VycmVudExpbmUgPSAxO1xuXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBzb3VyY2VUZXh0Lmxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIGlmIChjdXJyZW50TGluZSA9PT0gbGluZSkge1xuICAgICAgcmV0dXJuIFtpbmRleCwgaW5kZXhdO1xuICAgIH1cblxuICAgIGlmIChzb3VyY2VUZXh0W2luZGV4XSA9PT0gXCJcXG5cIikge1xuICAgICAgY3VycmVudExpbmUgKz0gMTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFtzb3VyY2VUZXh0Lmxlbmd0aCwgc291cmNlVGV4dC5sZW5ndGhdO1xufVxuLyogdjggaWdub3JlIHN0b3AgKi9cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIHRoZSBpbmRlbnRhdGlvbiByZWdleCBhbHdheXMgbWF0Y2hlcywgYnV0IHRoZSBmYWxsYmFjayBrZWVwcyB0aGUgaGVscGVyIHRvdGFsLXNhZmUuICovXG5mdW5jdGlvbiBnZXRJbmRlbnRhdGlvbkF0T2Zmc2V0KHNvdXJjZVRleHQ6IHN0cmluZywgb2Zmc2V0OiBudW1iZXIpOiBzdHJpbmcge1xuICBjb25zdCBsaW5lU3RhcnQgPSBzb3VyY2VUZXh0Lmxhc3RJbmRleE9mKFwiXFxuXCIsIE1hdGgubWF4KDAsIG9mZnNldCAtIDEpKSArIDE7XG4gIGNvbnN0IGxpbmVQcmVmaXggPSBzb3VyY2VUZXh0LnNsaWNlKGxpbmVTdGFydCwgb2Zmc2V0KTtcbiAgY29uc3QgaW5kZW50YXRpb24gPSAvXlxccyovdS5leGVjKGxpbmVQcmVmaXgpO1xuICByZXR1cm4gaW5kZW50YXRpb24/LlswXSA/PyBcIlwiO1xufVxuLyogdjggaWdub3JlIHN0b3AgKi9cblxuZnVuY3Rpb24gZ2V0QXNzZXJ0T3BlcmFuZHMoZXhwcmVzc2lvbjogRVNUcmVlLkNhbGxFeHByZXNzaW9uKTpcbiAgfCB7XG4gICAgICBhY3R1YWw6IEVTVHJlZS5FeHByZXNzaW9uIHwgdW5kZWZpbmVkO1xuICAgICAgZXhwZWN0ZWQ6IEVTVHJlZS5FeHByZXNzaW9uIHwgdW5kZWZpbmVkO1xuICAgIH1cbiAgfCB1bmRlZmluZWQge1xuICBpZiAoXG4gICAgZXhwcmVzc2lvbi5jYWxsZWUudHlwZSA9PT0gXCJNZW1iZXJFeHByZXNzaW9uXCIgJiZcbiAgICBleHByZXNzaW9uLmNhbGxlZS5vYmplY3QudHlwZSA9PT0gXCJJZGVudGlmaWVyXCIgJiZcbiAgICBleHByZXNzaW9uLmNhbGxlZS5vYmplY3QubmFtZSA9PT0gXCJhc3NlcnRcIlxuICApIHtcbiAgICBjb25zdCBbYWN0dWFsLCBleHBlY3RlZF0gPSBleHByZXNzaW9uLmFyZ3VtZW50cztcbiAgICBpZiAoXG4gICAgICBhY3R1YWw/LnR5cGUgIT09IFwiU3ByZWFkRWxlbWVudFwiICYmXG4gICAgICBleHBlY3RlZD8udHlwZSAhPT0gXCJTcHJlYWRFbGVtZW50XCJcbiAgICApIHtcbiAgICAgIHJldHVybiB7IGFjdHVhbCwgZXhwZWN0ZWQgfTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdm9pZCAwO1xufVxuXG5mdW5jdGlvbiBnZXRFeHBlY3RPcGVyYW5kcyhleHByZXNzaW9uOiBFU1RyZWUuQ2FsbEV4cHJlc3Npb24pOlxuICB8IHtcbiAgICAgIGFjdHVhbDogRVNUcmVlLkV4cHJlc3Npb24gfCB1bmRlZmluZWQ7XG4gICAgICBleHBlY3RlZDogRVNUcmVlLkV4cHJlc3Npb24gfCB1bmRlZmluZWQ7XG4gICAgfVxuICB8IHVuZGVmaW5lZCB7XG4gIGlmIChcbiAgICBleHByZXNzaW9uLmNhbGxlZS50eXBlID09PSBcIklkZW50aWZpZXJcIiAmJlxuICAgIGV4cHJlc3Npb24uY2FsbGVlLm5hbWUgPT09IFwiZXhwZWN0XCJcbiAgKSB7XG4gICAgY29uc3QgW2FjdHVhbF0gPSBleHByZXNzaW9uLmFyZ3VtZW50cztcbiAgICByZXR1cm4gYWN0dWFsPy50eXBlID09PSBcIlNwcmVhZEVsZW1lbnRcIlxuICAgICAgPyB7IGFjdHVhbDogdm9pZCAwLCBleHBlY3RlZDogdm9pZCAwIH1cbiAgICAgIDogeyBhY3R1YWwsIGV4cGVjdGVkOiB2b2lkIDAgfTtcbiAgfVxuXG4gIGlmIChcbiAgICBleHByZXNzaW9uLmNhbGxlZS50eXBlID09PSBcIk1lbWJlckV4cHJlc3Npb25cIiAmJlxuICAgIGV4cHJlc3Npb24uY2FsbGVlLm9iamVjdC50eXBlID09PSBcIkNhbGxFeHByZXNzaW9uXCJcbiAgKSB7XG4gICAgY29uc3QgbmVzdGVkT3BlcmFuZHMgPSBnZXRFeHBlY3RPcGVyYW5kcyhleHByZXNzaW9uLmNhbGxlZS5vYmplY3QpO1xuICAgIGlmIChuZXN0ZWRPcGVyYW5kcyA9PT0gdm9pZCAwKSB7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cblxuICAgIGNvbnN0IFtleHBlY3RlZF0gPSBleHByZXNzaW9uLmFyZ3VtZW50cztcbiAgICByZXR1cm4gZXhwZWN0ZWQ/LnR5cGUgPT09IFwiU3ByZWFkRWxlbWVudFwiXG4gICAgICA/IG5lc3RlZE9wZXJhbmRzXG4gICAgICA6IHsgYWN0dWFsOiBuZXN0ZWRPcGVyYW5kcy5hY3R1YWwsIGV4cGVjdGVkIH07XG4gIH1cblxuICByZXR1cm4gdm9pZCAwO1xufVxuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gdGhlIGZhbGxiYWNrIGJyYW5jaGVzIGFyZSByZXRhaW5lZCBmb3IgaGVscGVyIHRvdGFsaXR5IGJ1dCBhcmUgbm90IHJlYWNoYWJsZSBmcm9tIGN1cnJlbnQgYW5hbHl6ZXIgZW50cnkgcG9pbnRzLiAqL1xuZnVuY3Rpb24gZ2V0RXhwcmVzc2lvbk5hbWUoXG4gIGV4cHJlc3Npb246IEVTVHJlZS5FeHByZXNzaW9uIHwgRVNUcmVlLlByaXZhdGVJZGVudGlmaWVyIHwgRVNUcmVlLlN1cGVyLFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGV4cHJlc3Npb24udHlwZSA9PT0gXCJTdXBlclwiKSB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfVxuXG4gIGlmIChleHByZXNzaW9uLnR5cGUgPT09IFwiSWRlbnRpZmllclwiKSB7XG4gICAgcmV0dXJuIGV4cHJlc3Npb24ubmFtZTtcbiAgfVxuXG4gIGlmIChcbiAgICBleHByZXNzaW9uLnR5cGUgPT09IFwiTWVtYmVyRXhwcmVzc2lvblwiICYmXG4gICAgZXhwcmVzc2lvbi5wcm9wZXJ0eS50eXBlID09PSBcIklkZW50aWZpZXJcIlxuICApIHtcbiAgICByZXR1cm4gZXhwcmVzc2lvbi5wcm9wZXJ0eS5uYW1lO1xuICB9XG5cbiAgcmV0dXJuIHZvaWQgMDtcbn1cbi8qIHY4IGlnbm9yZSBzdG9wICovXG5cbmZ1bmN0aW9uIGdldElkZW50aWZpZXJOYW1lKFxuICBleHByZXNzaW9uOiBFU1RyZWUuRXhwcmVzc2lvbiB8IHVuZGVmaW5lZCxcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBleHByZXNzaW9uPy50eXBlID09PSBcIklkZW50aWZpZXJcIiA/IGV4cHJlc3Npb24ubmFtZSA6IHZvaWQgMDtcbn1cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIGNhbGxlcnMgb25seSBhc2sgZm9yIGludm9rZWQgbmFtZXMgYWZ0ZXIgYWN0aW9uLWV4cHJlc3Npb24gY2hlY2tzIHRoYXQgbmFycm93IHRvIGNhbGwvbmV3IGV4cHJlc3Npb25zLiAqL1xuZnVuY3Rpb24gZ2V0SW52b2tlZE5hbWUoXG4gIGV4cHJlc3Npb246IEVTVHJlZS5FeHByZXNzaW9uIHwgdW5kZWZpbmVkLFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgdW53cmFwcGVkRXhwcmVzc2lvbiA9IHVud3JhcEV4cHJlc3Npb24oZXhwcmVzc2lvbik7XG4gIGlmIChcbiAgICB1bndyYXBwZWRFeHByZXNzaW9uPy50eXBlID09PSBcIkNhbGxFeHByZXNzaW9uXCIgfHxcbiAgICB1bndyYXBwZWRFeHByZXNzaW9uPy50eXBlID09PSBcIk5ld0V4cHJlc3Npb25cIlxuICApIHtcbiAgICByZXR1cm4gZ2V0RXhwcmVzc2lvbk5hbWUodW53cmFwcGVkRXhwcmVzc2lvbi5jYWxsZWUpO1xuICB9XG4gIHJldHVybiB2b2lkIDA7XG59XG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuXG5mdW5jdGlvbiBnZXROZXdsaW5lKHRleHQ6IHN0cmluZyk6IFwiXFxuXCIgfCBcIlxcclxcblwiIHtcbiAgcmV0dXJuIHRleHQuaW5jbHVkZXMoXCJcXHJcXG5cIikgPyBcIlxcclxcblwiIDogXCJcXG5cIjtcbn1cblxuZnVuY3Rpb24gZ2V0U3RhdGVtZW50RXhwcmVzc2lvbihcbiAgc3RhdGVtZW50OiBFU1RyZWUuU3RhdGVtZW50LFxuKTogRVNUcmVlLkV4cHJlc3Npb24gfCB1bmRlZmluZWQge1xuICBpZiAoc3RhdGVtZW50LnR5cGUgPT09IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiKSB7XG4gICAgcmV0dXJuIHN0YXRlbWVudC5leHByZXNzaW9uO1xuICB9XG5cbiAgaWYgKFxuICAgIHN0YXRlbWVudC50eXBlID09PSBcIlZhcmlhYmxlRGVjbGFyYXRpb25cIiAmJlxuICAgIHN0YXRlbWVudC5kZWNsYXJhdGlvbnMubGVuZ3RoID09PSAxXG4gICkge1xuICAgIC8qIHY4IGlnbm9yZSBzdGFydCAtLSB2YWxpZCBFU1RyZWUgdmFyaWFibGUgZGVjbGFyYXRpb25zIGFsd2F5cyBjYXJyeSB0aGUgbWF0Y2hlZCBkZWNsYXJhdG9yLiAqL1xuICAgIHJldHVybiBzdGF0ZW1lbnQuZGVjbGFyYXRpb25zWzBdPy5pbml0ID8/IHZvaWQgMDtcbiAgICAvKiB2OCBpZ25vcmUgc3RvcCAqL1xuICB9XG5cbiAgcmV0dXJuIHZvaWQgMDtcbn1cblxuZnVuY3Rpb24gZ2V0U3RhdGVtZW50UGhhc2UoXG4gIHN0YXRlbWVudDogRVNUcmVlLlN0YXRlbWVudCxcbiAgZmxhdHRlbmVkU2VjdGlvbnM6IEFycmF5PHsgbGluZTogbnVtYmVyOyBwaGFzZTogQWFhUGhhc2UgfT4sXG4pOiBBYWFQaGFzZSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHN0YXRlbWVudExpbmUgPSBzdGF0ZW1lbnQubG9jPy5zdGFydC5saW5lO1xuICBpZiAoc3RhdGVtZW50TGluZSA9PT0gdm9pZCAwKSB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfVxuXG4gIGxldCBjdXJyZW50UGhhc2U6IEFhYVBoYXNlIHwgdW5kZWZpbmVkO1xuICBmb3IgKGNvbnN0IHNlY3Rpb24gb2YgZmxhdHRlbmVkU2VjdGlvbnMpIHtcbiAgICBpZiAoc2VjdGlvbi5saW5lID4gc3RhdGVtZW50TGluZSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY3VycmVudFBoYXNlID0gc2VjdGlvbi5waGFzZTtcbiAgfVxuXG4gIHJldHVybiBjdXJyZW50UGhhc2U7XG59XG5cbmZ1bmN0aW9uIGdldFN1cHBvcnRlZFRlc3RDYWxsKG5vZGU6IEVTVHJlZS5DYWxsRXhwcmVzc2lvbik6XG4gIHwge1xuICAgICAgY2FsbGJhY2s6IExvY2F0ZWROb2RlPFxuICAgICAgICBFU1RyZWUuQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24gfCBFU1RyZWUuRnVuY3Rpb25FeHByZXNzaW9uXG4gICAgICA+ICYge1xuICAgICAgICBib2R5OiBMb2NhdGVkTm9kZTxFU1RyZWUuQmxvY2tTdGF0ZW1lbnQ+O1xuICAgICAgfTtcbiAgICAgIGNhbGxFeHByZXNzaW9uOiBMb2NhdGVkTm9kZTxFU1RyZWUuQ2FsbEV4cHJlc3Npb24+O1xuICAgIH1cbiAgfCB1bmRlZmluZWQge1xuICBjb25zdCByb290TmFtZSA9IGdldFRlc3RSb290TmFtZShub2RlLmNhbGxlZSk7XG4gIGlmIChyb290TmFtZSAhPT0gXCJpdFwiICYmIHJvb3ROYW1lICE9PSBcInRlc3RcIikge1xuICAgIHJldHVybiB2b2lkIDA7XG4gIH1cblxuICBjb25zdCBjYWxsYmFja0FyZ3VtZW50ID0gbm9kZS5hcmd1bWVudHMuYXQoLTEpO1xuICBpZiAoXG4gICAgY2FsbGJhY2tBcmd1bWVudCA9PT0gdm9pZCAwIHx8XG4gICAgY2FsbGJhY2tBcmd1bWVudC50eXBlID09PSBcIlNwcmVhZEVsZW1lbnRcIiB8fFxuICAgIChjYWxsYmFja0FyZ3VtZW50LnR5cGUgIT09IFwiQXJyb3dGdW5jdGlvbkV4cHJlc3Npb25cIiAmJlxuICAgICAgY2FsbGJhY2tBcmd1bWVudC50eXBlICE9PSBcIkZ1bmN0aW9uRXhwcmVzc2lvblwiKSB8fFxuICAgIGNhbGxiYWNrQXJndW1lbnQuYm9keS50eXBlICE9PSBcIkJsb2NrU3RhdGVtZW50XCJcbiAgKSB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY2FsbGJhY2s6IGNhbGxiYWNrQXJndW1lbnQgYXMgTG9jYXRlZE5vZGU8XG4gICAgICBFU1RyZWUuQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24gfCBFU1RyZWUuRnVuY3Rpb25FeHByZXNzaW9uXG4gICAgPiAmIHsgYm9keTogTG9jYXRlZE5vZGU8RVNUcmVlLkJsb2NrU3RhdGVtZW50PiB9LFxuICAgIGNhbGxFeHByZXNzaW9uOiBub2RlIGFzIExvY2F0ZWROb2RlPEVTVHJlZS5DYWxsRXhwcmVzc2lvbj4sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFRlc3RSb290TmFtZShcbiAgY2FsbGVlOiBFU1RyZWUuQ2FsbEV4cHJlc3Npb25bXCJjYWxsZWVcIl0sXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoY2FsbGVlLnR5cGUgPT09IFwiSWRlbnRpZmllclwiKSB7XG4gICAgcmV0dXJuIGNhbGxlZS5uYW1lO1xuICB9XG5cbiAgaWYgKGNhbGxlZS50eXBlID09PSBcIk1lbWJlckV4cHJlc3Npb25cIiAmJiBjYWxsZWUub2JqZWN0LnR5cGUgIT09IFwiU3VwZXJcIikge1xuICAgIHJldHVybiBnZXRUZXN0Um9vdE5hbWUoY2FsbGVlLm9iamVjdCBhcyBFU1RyZWUuRXhwcmVzc2lvbik7XG4gIH1cblxuICByZXR1cm4gdm9pZCAwO1xufVxuXG5mdW5jdGlvbiBpc0FjdGlvbkV4cHJlc3Npb24oXG4gIGV4cHJlc3Npb246IEVTVHJlZS5FeHByZXNzaW9uIHwgdW5kZWZpbmVkLFxuKTogYm9vbGVhbiB7XG4gIGNvbnN0IHVud3JhcHBlZEV4cHJlc3Npb24gPSB1bndyYXBFeHByZXNzaW9uKGV4cHJlc3Npb24pO1xuICByZXR1cm4gKFxuICAgIHVud3JhcHBlZEV4cHJlc3Npb24/LnR5cGUgPT09IFwiQXdhaXRFeHByZXNzaW9uXCIgfHxcbiAgICB1bndyYXBwZWRFeHByZXNzaW9uPy50eXBlID09PSBcIkNhbGxFeHByZXNzaW9uXCIgfHxcbiAgICB1bndyYXBwZWRFeHByZXNzaW9uPy50eXBlID09PSBcIk5ld0V4cHJlc3Npb25cIlxuICApO1xufVxuXG5mdW5jdGlvbiBpc0FhYVBoYXNlKHZhbHVlOiBzdHJpbmcpOiB2YWx1ZSBpcyBBYWFQaGFzZSB7XG4gIHJldHVybiBwaGFzZU5hbWVzLmluY2x1ZGVzKHZhbHVlIGFzIEFhYVBoYXNlKTtcbn1cblxuZnVuY3Rpb24gaXNBc3NlcnRpb25DYWxsKG5vZGU6IEVTVHJlZS5DYWxsRXhwcmVzc2lvbik6IGJvb2xlYW4ge1xuICBpZiAobm9kZS5jYWxsZWUudHlwZSA9PT0gXCJJZGVudGlmaWVyXCIpIHtcbiAgICByZXR1cm4gbm9kZS5jYWxsZWUubmFtZSA9PT0gXCJleHBlY3RcIiB8fCBub2RlLmNhbGxlZS5uYW1lID09PSBcImFzc2VydFwiO1xuICB9XG5cbiAgaWYgKG5vZGUuY2FsbGVlLnR5cGUgIT09IFwiTWVtYmVyRXhwcmVzc2lvblwiKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKFxuICAgIG5vZGUuY2FsbGVlLm9iamVjdC50eXBlID09PSBcIklkZW50aWZpZXJcIiAmJlxuICAgIG5vZGUuY2FsbGVlLm9iamVjdC5uYW1lID09PSBcImFzc2VydFwiXG4gICkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKG5vZGUuY2FsbGVlLm9iamVjdC50eXBlID09PSBcIkNhbGxFeHByZXNzaW9uXCIpIHtcbiAgICByZXR1cm4gaXNBc3NlcnRpb25DYWxsKG5vZGUuY2FsbGVlLm9iamVjdCk7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzUmFuZ2VXaXRoaW4oXG4gIHJhbmdlOiBbbnVtYmVyLCBudW1iZXJdLFxuICBjb250YWluZXI6IFtudW1iZXIsIG51bWJlcl0sXG4pOiBib29sZWFuIHtcbiAgcmV0dXJuIHJhbmdlWzBdID49IGNvbnRhaW5lclswXSAmJiByYW5nZVsxXSA8PSBjb250YWluZXJbMV07XG59XG5cbmZ1bmN0aW9uIGlzVXRpbGl0eUxpa2VFeHByZXNzaW9uKFxuICBleHByZXNzaW9uOiBFU1RyZWUuRXhwcmVzc2lvbiB8IHVuZGVmaW5lZCxcbik6IGJvb2xlYW4ge1xuICBjb25zdCB1bndyYXBwZWRFeHByZXNzaW9uID0gdW53cmFwRXhwcmVzc2lvbihleHByZXNzaW9uKTtcbiAgaWYgKFxuICAgIHVud3JhcHBlZEV4cHJlc3Npb24/LnR5cGUgIT09IFwiQ2FsbEV4cHJlc3Npb25cIiAmJlxuICAgIHVud3JhcHBlZEV4cHJlc3Npb24/LnR5cGUgIT09IFwiTmV3RXhwcmVzc2lvblwiXG4gICkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGNhbGxlZU5hbWUgPSBnZXRFeHByZXNzaW9uTmFtZSh1bndyYXBwZWRFeHByZXNzaW9uLmNhbGxlZSk7XG4gIGlmIChjYWxsZWVOYW1lID09PSB2b2lkIDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAodXRpbGl0eU1ldGhvZE5hbWVzLmhhcyhjYWxsZWVOYW1lKSB8fCBzZXR1cExpa2VOYW1lcy50ZXN0KGNhbGxlZU5hbWUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIHVud3JhcHBlZEV4cHJlc3Npb24uY2FsbGVlLnR5cGUgPT09IFwiTWVtYmVyRXhwcmVzc2lvblwiICYmXG4gICAgdW53cmFwcGVkRXhwcmVzc2lvbi5jYWxsZWUub2JqZWN0LnR5cGUgPT09IFwiSWRlbnRpZmllclwiICYmXG4gICAgW1wiY29uc29sZVwiLCBcInZpXCJdLmluY2x1ZGVzKHVud3JhcHBlZEV4cHJlc3Npb24uY2FsbGVlLm9iamVjdC5uYW1lKVxuICApO1xufVxuXG5mdW5jdGlvbiB1bndyYXBFeHByZXNzaW9uKFxuICBleHByZXNzaW9uOiBFU1RyZWUuRXhwcmVzc2lvbiB8IHVuZGVmaW5lZCxcbik6IEVTVHJlZS5FeHByZXNzaW9uIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGV4cHJlc3Npb24/LnR5cGUgPT09IFwiQ2hhaW5FeHByZXNzaW9uXCIpIHtcbiAgICByZXR1cm4gdW53cmFwRXhwcmVzc2lvbihleHByZXNzaW9uLmV4cHJlc3Npb24pO1xuICB9XG5cbiAgaWYgKGV4cHJlc3Npb24/LnR5cGUgPT09IFwiQXdhaXRFeHByZXNzaW9uXCIpIHtcbiAgICByZXR1cm4gZXhwcmVzc2lvbi5hcmd1bWVudDtcbiAgfVxuXG4gIHJldHVybiBleHByZXNzaW9uO1xufVxuXG5mdW5jdGlvbiB2aXNpdE5vZGUoXG4gIG5vZGU6IEVTVHJlZS5Ob2RlLFxuICBjYWxsYmFjazogKG5vZGU6IEVTVHJlZS5Ob2RlKSA9PiB2b2lkLFxuICBzZWVuTm9kZXMgPSBuZXcgV2Vha1NldDxvYmplY3Q+KCksXG4pOiB2b2lkIHtcbiAgaWYgKHNlZW5Ob2Rlcy5oYXMobm9kZSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBzZWVuTm9kZXMuYWRkKG5vZGUpO1xuICBjYWxsYmFjayhub2RlKTtcblxuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhub2RlKSkge1xuICAgIGlmIChrZXkgPT09IFwicGFyZW50XCIpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHZhbHVlKSB7XG4gICAgICAgIGlmIChpc05vZGUoaXRlbSkpIHtcbiAgICAgICAgICB2aXNpdE5vZGUoaXRlbSwgY2FsbGJhY2ssIHNlZW5Ob2Rlcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChpc05vZGUodmFsdWUpKSB7XG4gICAgICB2aXNpdE5vZGUodmFsdWUsIGNhbGxiYWNrLCBzZWVuTm9kZXMpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc05vZGUodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBFU1RyZWUuTm9kZSB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG4gICAgdmFsdWUgIT09IG51bGwgJiZcbiAgICBcInR5cGVcIiBpbiB2YWx1ZSAmJlxuICAgIHR5cGVvZiAodmFsdWUgYXMgeyB0eXBlPzogdW5rbm93biB9KS50eXBlID09PSBcInN0cmluZ1wiXG4gICk7XG59XG5cbmZ1bmN0aW9uIGlzTG9jYXRlZENvbW1lbnQoY29tbWVudDogU291cmNlQ29tbWVudCk6IGNvbW1lbnQgaXMgTG9jYXRlZENvbW1lbnQge1xuICByZXR1cm4gKFxuICAgIGNvbW1lbnQubG9jICE9PSBudWxsICYmXG4gICAgY29tbWVudC5sb2MgIT09IHVuZGVmaW5lZCAmJlxuICAgIGNvbW1lbnQucmFuZ2UgIT09IHVuZGVmaW5lZFxuICApO1xufVxuXG5leHBvcnQge1xuICBhYWFQaGFzZU9yZGVyLFxuICBhbmFseXplVGVzdEJsb2NrLFxuICBjb3VudEFjdFN0YXRlbWVudHMsXG4gIGdldEFzc2VydERlY2xhcmVkSWRlbnRpZmllcnMsXG4gIGdldEFzc2VydGlvbklkZW50aWZpZXJzLFxuICBnZXRGbGF0dGVuZWRTZWN0aW9ucyxcbiAgZ2V0SW5kZW50YXRpb25BdE9mZnNldCxcbiAgZ2V0TGluZVN0YXJ0UmFuZ2UsXG4gIGdldFBoYXNlQm91bmRhcnlDb21tZW50cyxcbiAgZ2V0U2VjdGlvblBoYXNlcyxcbiAgaGFzQXNzZXJ0aW9uLFxuICBoYXNBc3luY0xvZ2ljLFxuICBoYXNBd2FpdCxcbiAgaGFzQmxhbmtMaW5lQmVmb3JlQ29tbWVudCxcbiAgaGFzQ2FwdHVyYWJsZUFjdFJlc3VsdCxcbiAgaGFzTXV0YXRpb24sXG4gIGlzTWVhbmluZ2Z1bEFjdFN0YXRlbWVudCxcbiAgaXNTZXR1cExpa2VTdGF0ZW1lbnQsXG4gIGlzVmFsaWRBc3NlcnRTdGF0ZW1lbnQsXG4gIHVzZXNQcmVmaXgsXG59O1xuIl19
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/testing/aaa/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,kBAAkB,EAClB,4BAA4B,EAC5B,uBAAuB,EACvB,oBAAoB,EACpB,sBAAsB,EACtB,iBAAiB,EACjB,wBAAwB,EACxB,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,QAAQ,EACR,yBAAyB,EACzB,sBAAsB,EACtB,WAAW,EACX,wBAAwB,EACxB,oBAAoB,EACpB,sBAAsB,EACtB,UAAU,GACX,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,QAAQ,EACR,cAAc,EACd,WAAW,EACX,cAAc,EACd,aAAa,EACb,cAAc,EACd,iBAAiB,GAClB,MAAM,SAAS,CAAC"}
@@ -1,2 +0,0 @@
1
- export { aaaPhaseOrder, analyzeTestBlock, countActStatements, getAssertDeclaredIdentifiers, getAssertionIdentifiers, getFlattenedSections, getIndentationAtOffset, getLineStartRange, getPhaseBoundaryComments, getSectionPhases, hasAssertion, hasAsyncLogic, hasAwait, hasBlankLineBeforeComment, hasCapturableActResult, hasMutation, isMeaningfulActStatement, isSetupLikeStatement, isValidAssertStatement, usesPrefix, } from "./analyzer";
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVzdGluZy9hYWEvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGFBQWEsRUFDYixnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBQ2xCLDRCQUE0QixFQUM1Qix1QkFBdUIsRUFDdkIsb0JBQW9CLEVBQ3BCLHNCQUFzQixFQUN0QixpQkFBaUIsRUFDakIsd0JBQXdCLEVBQ3hCLGdCQUFnQixFQUNoQixZQUFZLEVBQ1osYUFBYSxFQUNiLFFBQVEsRUFDUix5QkFBeUIsRUFDekIsc0JBQXNCLEVBQ3RCLFdBQVcsRUFDWCx3QkFBd0IsRUFDeEIsb0JBQW9CLEVBQ3BCLHNCQUFzQixFQUN0QixVQUFVLEdBQ1gsTUFBTSxZQUFZLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQge1xuICBhYWFQaGFzZU9yZGVyLFxuICBhbmFseXplVGVzdEJsb2NrLFxuICBjb3VudEFjdFN0YXRlbWVudHMsXG4gIGdldEFzc2VydERlY2xhcmVkSWRlbnRpZmllcnMsXG4gIGdldEFzc2VydGlvbklkZW50aWZpZXJzLFxuICBnZXRGbGF0dGVuZWRTZWN0aW9ucyxcbiAgZ2V0SW5kZW50YXRpb25BdE9mZnNldCxcbiAgZ2V0TGluZVN0YXJ0UmFuZ2UsXG4gIGdldFBoYXNlQm91bmRhcnlDb21tZW50cyxcbiAgZ2V0U2VjdGlvblBoYXNlcyxcbiAgaGFzQXNzZXJ0aW9uLFxuICBoYXNBc3luY0xvZ2ljLFxuICBoYXNBd2FpdCxcbiAgaGFzQmxhbmtMaW5lQmVmb3JlQ29tbWVudCxcbiAgaGFzQ2FwdHVyYWJsZUFjdFJlc3VsdCxcbiAgaGFzTXV0YXRpb24sXG4gIGlzTWVhbmluZ2Z1bEFjdFN0YXRlbWVudCxcbiAgaXNTZXR1cExpa2VTdGF0ZW1lbnQsXG4gIGlzVmFsaWRBc3NlcnRTdGF0ZW1lbnQsXG4gIHVzZXNQcmVmaXgsXG59IGZyb20gXCIuL2FuYWx5emVyXCI7XG5leHBvcnQgdHlwZSB7XG4gIEFhYVBoYXNlLFxuICBMb2NhdGVkQ29tbWVudCxcbiAgTG9jYXRlZE5vZGUsXG4gIFNlY3Rpb25Db21tZW50LFxuICBTb3VyY2VDb21tZW50LFxuICBTdGF0ZW1lbnRQaGFzZSxcbiAgVGVzdEJsb2NrQW5hbHlzaXMsXG59IGZyb20gXCIuL3R5cGVzXCI7XG4iXX0=
@@ -1,31 +0,0 @@
1
- import type { Rule } from "eslint";
2
- import type * as ESTree from "estree";
3
- type AaaPhase = "Arrange" | "Act" | "Assert";
4
- type SourceComment = ReturnType<Rule.RuleContext["sourceCode"]["getAllComments"]>[number];
5
- type LocatedComment = SourceComment & {
6
- loc: NonNullable<SourceComment["loc"]>;
7
- range: [number, number];
8
- };
9
- type LocatedNode<TNode extends ESTree.Node = ESTree.Node> = TNode & {
10
- loc: NonNullable<ESTree.Node["loc"]>;
11
- range: [number, number];
12
- };
13
- interface SectionComment {
14
- comment: LocatedComment;
15
- phases: AaaPhase[];
16
- }
17
- interface StatementPhase {
18
- node: LocatedNode<ESTree.Statement>;
19
- phase: AaaPhase | undefined;
20
- }
21
- interface TestBlockAnalysis {
22
- body: LocatedNode<ESTree.BlockStatement>;
23
- bodyLineCount: number;
24
- callExpression: LocatedNode<ESTree.CallExpression>;
25
- newline: "\n" | "\r\n";
26
- sectionComments: SectionComment[];
27
- sourceText: string;
28
- statements: StatementPhase[];
29
- }
30
- export type { AaaPhase, LocatedComment, LocatedNode, SectionComment, SourceComment, StatementPhase, TestBlockAnalysis, };
31
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/testing/aaa/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,KAAK,KAAK,MAAM,MAAM,QAAQ,CAAC;AAEtC,KAAK,QAAQ,GAAG,SAAS,GAAG,KAAK,GAAG,QAAQ,CAAC;AAE7C,KAAK,aAAa,GAAG,UAAU,CAC7B,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,gBAAgB,CAAC,CACjD,CAAC,MAAM,CAAC,CAAC;AAEV,KAAK,cAAc,GAAG,aAAa,GAAG;IACpC,GAAG,EAAE,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IACvC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzB,CAAC;AAEF,KAAK,WAAW,CAAC,KAAK,SAAS,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,KAAK,GAAG;IAClE,GAAG,EAAE,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACrC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzB,CAAC;AAEF,UAAU,cAAc;IACtB,OAAO,EAAE,cAAc,CAAC;IACxB,MAAM,EAAE,QAAQ,EAAE,CAAC;CACpB;AAED,UAAU,cAAc;IACtB,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACpC,KAAK,EAAE,QAAQ,GAAG,SAAS,CAAC;CAC7B;AAED,UAAU,iBAAiB;IACzB,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IACzC,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IACnD,OAAO,EAAE,IAAI,GAAG,MAAM,CAAC;IACvB,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,cAAc,EAAE,CAAC;CAC9B;AAED,YAAY,EACV,QAAQ,EACR,cAAc,EACd,WAAW,EACX,cAAc,EACd,aAAa,EACb,cAAc,EACd,iBAAiB,GAClB,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVzdGluZy9hYWEvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUnVsZSB9IGZyb20gXCJlc2xpbnRcIjtcbmltcG9ydCB0eXBlICogYXMgRVNUcmVlIGZyb20gXCJlc3RyZWVcIjtcblxudHlwZSBBYWFQaGFzZSA9IFwiQXJyYW5nZVwiIHwgXCJBY3RcIiB8IFwiQXNzZXJ0XCI7XG5cbnR5cGUgU291cmNlQ29tbWVudCA9IFJldHVyblR5cGU8XG4gIFJ1bGUuUnVsZUNvbnRleHRbXCJzb3VyY2VDb2RlXCJdW1wiZ2V0QWxsQ29tbWVudHNcIl1cbj5bbnVtYmVyXTtcblxudHlwZSBMb2NhdGVkQ29tbWVudCA9IFNvdXJjZUNvbW1lbnQgJiB7XG4gIGxvYzogTm9uTnVsbGFibGU8U291cmNlQ29tbWVudFtcImxvY1wiXT47XG4gIHJhbmdlOiBbbnVtYmVyLCBudW1iZXJdO1xufTtcblxudHlwZSBMb2NhdGVkTm9kZTxUTm9kZSBleHRlbmRzIEVTVHJlZS5Ob2RlID0gRVNUcmVlLk5vZGU+ID0gVE5vZGUgJiB7XG4gIGxvYzogTm9uTnVsbGFibGU8RVNUcmVlLk5vZGVbXCJsb2NcIl0+O1xuICByYW5nZTogW251bWJlciwgbnVtYmVyXTtcbn07XG5cbmludGVyZmFjZSBTZWN0aW9uQ29tbWVudCB7XG4gIGNvbW1lbnQ6IExvY2F0ZWRDb21tZW50O1xuICBwaGFzZXM6IEFhYVBoYXNlW107XG59XG5cbmludGVyZmFjZSBTdGF0ZW1lbnRQaGFzZSB7XG4gIG5vZGU6IExvY2F0ZWROb2RlPEVTVHJlZS5TdGF0ZW1lbnQ+O1xuICBwaGFzZTogQWFhUGhhc2UgfCB1bmRlZmluZWQ7XG59XG5cbmludGVyZmFjZSBUZXN0QmxvY2tBbmFseXNpcyB7XG4gIGJvZHk6IExvY2F0ZWROb2RlPEVTVHJlZS5CbG9ja1N0YXRlbWVudD47XG4gIGJvZHlMaW5lQ291bnQ6IG51bWJlcjtcbiAgY2FsbEV4cHJlc3Npb246IExvY2F0ZWROb2RlPEVTVHJlZS5DYWxsRXhwcmVzc2lvbj47XG4gIG5ld2xpbmU6IFwiXFxuXCIgfCBcIlxcclxcblwiO1xuICBzZWN0aW9uQ29tbWVudHM6IFNlY3Rpb25Db21tZW50W107XG4gIHNvdXJjZVRleHQ6IHN0cmluZztcbiAgc3RhdGVtZW50czogU3RhdGVtZW50UGhhc2VbXTtcbn1cblxuZXhwb3J0IHR5cGUge1xuICBBYWFQaGFzZSxcbiAgTG9jYXRlZENvbW1lbnQsXG4gIExvY2F0ZWROb2RlLFxuICBTZWN0aW9uQ29tbWVudCxcbiAgU291cmNlQ29tbWVudCxcbiAgU3RhdGVtZW50UGhhc2UsXG4gIFRlc3RCbG9ja0FuYWx5c2lzLFxufTtcbiJdfQ==
@@ -1,2 +0,0 @@
1
- export { assertActualExpectedNamesRule } from "./rule";
2
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/testing/assert-actual-expected-names/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,QAAQ,CAAC"}
@@ -1,2 +0,0 @@
1
- export { assertActualExpectedNamesRule } from "./rule";
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVzdGluZy9hc3NlcnQtYWN0dWFsLWV4cGVjdGVkLW5hbWVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IGFzc2VydEFjdHVhbEV4cGVjdGVkTmFtZXNSdWxlIH0gZnJvbSBcIi4vcnVsZVwiO1xuIl19
@@ -1 +0,0 @@
1
- {"version":3,"file":"rule.d.ts","sourceRoot":"","sources":["../../../src/testing/assert-actual-expected-names/rule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAWnC,QAAA,MAAM,6BAA6B,EAAE,IAAI,CAAC,UA8DzC,CAAC;AAEF,OAAO,EAAE,6BAA6B,EAAE,CAAC"}