@codeperfect/eslint-plugin 1.0.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (587) hide show
  1. package/README.md +26 -4
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/{custom-rules.d.ts → application/custom-rules.d.ts} +3 -0
  4. package/dist/application/custom-rules.d.ts.map +1 -0
  5. package/dist/application/custom-rules.js +74 -0
  6. package/dist/application/index.d.ts +4 -0
  7. package/dist/application/index.d.ts.map +1 -0
  8. package/dist/application/index.js +3 -0
  9. package/dist/codeperfect-eslint-plugin-1.0.0.tgz +0 -0
  10. package/dist/domain/architecture/consistent-barrel-files/barrel-file-utilities.d.ts +56 -0
  11. package/dist/domain/architecture/consistent-barrel-files/barrel-file-utilities.d.ts.map +1 -0
  12. package/dist/domain/architecture/consistent-barrel-files/barrel-file-utilities.js +149 -0
  13. package/dist/{architecture → domain/architecture}/consistent-barrel-files/consistent-barrel-files-listeners.d.ts +4 -4
  14. package/dist/domain/architecture/consistent-barrel-files/consistent-barrel-files-listeners.d.ts.map +1 -0
  15. package/dist/domain/architecture/consistent-barrel-files/consistent-barrel-files-listeners.js +98 -0
  16. package/dist/domain/architecture/consistent-barrel-files/consistent-barrel-files-options.d.ts +45 -0
  17. package/dist/domain/architecture/consistent-barrel-files/consistent-barrel-files-options.d.ts.map +1 -0
  18. package/dist/domain/architecture/consistent-barrel-files/consistent-barrel-files-options.js +64 -0
  19. package/dist/{architecture → domain/architecture}/consistent-barrel-files/exports-only-rule-test-utilities.d.ts +5 -4
  20. package/dist/domain/architecture/consistent-barrel-files/exports-only-rule-test-utilities.d.ts.map +1 -0
  21. package/dist/domain/architecture/consistent-barrel-files/exports-only-rule-test-utilities.js +87 -0
  22. package/dist/domain/architecture/consistent-barrel-files/exports-only-rule.d.ts.map +1 -0
  23. package/dist/domain/architecture/consistent-barrel-files/exports-only-rule.js +145 -0
  24. package/dist/domain/architecture/consistent-barrel-files/index.d.ts +5 -0
  25. package/dist/domain/architecture/consistent-barrel-files/index.d.ts.map +1 -0
  26. package/dist/domain/architecture/consistent-barrel-files/index.js +4 -0
  27. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.d.ts.map +1 -0
  28. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.js +90 -0
  29. package/dist/{architecture → domain/architecture}/consistent-barrel-files/no-reexports-outside-barrels-test-utilities.d.ts +1 -1
  30. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-test-utilities.d.ts.map +1 -0
  31. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-test-utilities.js +91 -0
  32. package/dist/{architecture → domain/architecture}/consistent-barrel-files/no-reexports-outside-barrels-utilities.d.ts +4 -6
  33. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-utilities.d.ts.map +1 -0
  34. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-utilities.js +95 -0
  35. package/dist/domain/architecture/consistent-barrel-files/rule.d.ts.map +1 -0
  36. package/dist/domain/architecture/consistent-barrel-files/rule.js +51 -0
  37. package/dist/domain/architecture/consistent-barrel-files/rule.repeat-runs.d.ts +4 -0
  38. package/dist/domain/architecture/consistent-barrel-files/rule.repeat-runs.d.ts.map +1 -0
  39. package/dist/domain/architecture/consistent-barrel-files/rule.repeat-runs.js +4 -0
  40. package/dist/{architecture → domain/architecture}/consistent-barrel-files/test-helpers.d.ts +48 -48
  41. package/dist/domain/architecture/consistent-barrel-files/test-helpers.d.ts.map +1 -0
  42. package/dist/domain/architecture/consistent-barrel-files/test-helpers.file-writers.d.ts +20 -0
  43. package/dist/domain/architecture/consistent-barrel-files/test-helpers.file-writers.d.ts.map +1 -0
  44. package/dist/domain/architecture/consistent-barrel-files/test-helpers.file-writers.js +25 -0
  45. package/dist/domain/architecture/consistent-barrel-files/test-helpers.js +235 -0
  46. package/dist/domain/architecture/consistent-barrel-files/types.d.ts +19 -0
  47. package/dist/domain/architecture/consistent-barrel-files/types.d.ts.map +1 -0
  48. package/dist/domain/architecture/consistent-barrel-files/types.js +2 -0
  49. package/dist/{architecture → domain/architecture}/index.d.ts +1 -1
  50. package/dist/domain/architecture/index.d.ts.map +1 -0
  51. package/dist/domain/architecture/index.js +2 -0
  52. package/dist/{core → domain/core}/index.d.ts +2 -2
  53. package/dist/domain/core/index.d.ts.map +1 -0
  54. package/dist/domain/core/index.js +3 -0
  55. package/dist/domain/core/no-multiple-declarators/index.d.ts +2 -0
  56. package/dist/domain/core/no-multiple-declarators/index.d.ts.map +1 -0
  57. package/dist/domain/core/no-multiple-declarators/index.js +2 -0
  58. package/dist/domain/core/no-multiple-declarators/rule-test-helpers.d.ts +101 -0
  59. package/dist/domain/core/no-multiple-declarators/rule-test-helpers.d.ts.map +1 -0
  60. package/dist/domain/core/no-multiple-declarators/rule-test-helpers.js +108 -0
  61. package/dist/{core → domain/core}/no-multiple-declarators/rule.d.ts +1 -0
  62. package/dist/domain/core/no-multiple-declarators/rule.d.ts.map +1 -0
  63. package/dist/domain/core/no-multiple-declarators/rule.fixes.d.ts +35 -0
  64. package/dist/domain/core/no-multiple-declarators/rule.fixes.d.ts.map +1 -0
  65. package/dist/domain/core/no-multiple-declarators/rule.fixes.js +95 -0
  66. package/dist/domain/core/no-multiple-declarators/rule.guardrails.d.ts +4 -0
  67. package/dist/domain/core/no-multiple-declarators/rule.guardrails.d.ts.map +1 -0
  68. package/dist/domain/core/no-multiple-declarators/rule.guardrails.js +4 -0
  69. package/dist/domain/core/no-multiple-declarators/rule.js +222 -0
  70. package/dist/domain/core/no-multiple-declarators/rule.mocked-types.d.ts +4 -0
  71. package/dist/domain/core/no-multiple-declarators/rule.mocked-types.d.ts.map +1 -0
  72. package/dist/domain/core/no-multiple-declarators/rule.mocked-types.js +4 -0
  73. package/dist/domain/core/no-multiple-declarators/types.d.ts +77 -0
  74. package/dist/domain/core/no-multiple-declarators/types.d.ts.map +1 -0
  75. package/dist/domain/core/no-multiple-declarators/types.js +38 -0
  76. package/dist/domain/core/prefer-interface-types/index.d.ts +2 -0
  77. package/dist/domain/core/prefer-interface-types/index.d.ts.map +1 -0
  78. package/dist/domain/core/prefer-interface-types/index.js +2 -0
  79. package/dist/domain/core/prefer-interface-types/rule.d.ts.map +1 -0
  80. package/dist/domain/core/prefer-interface-types/rule.js +148 -0
  81. package/dist/domain/core/prefer-interface-types/test-helpers.d.ts.map +1 -0
  82. package/dist/domain/core/prefer-interface-types/test-helpers.js +116 -0
  83. package/dist/{custom-rule-documentation.d.ts → domain/custom-rule-documentation.d.ts} +3 -1
  84. package/dist/domain/custom-rule-documentation.d.ts.map +1 -0
  85. package/dist/domain/custom-rule-documentation.js +36 -0
  86. package/dist/domain/docs/index.d.ts +4 -0
  87. package/dist/domain/docs/index.d.ts.map +1 -0
  88. package/dist/domain/docs/index.js +4 -0
  89. package/dist/domain/docs/no-interface-member-docs/comment-utilities-test-helpers.d.ts.map +1 -0
  90. package/dist/domain/docs/no-interface-member-docs/comment-utilities-test-helpers.js +129 -0
  91. package/dist/{docs → domain/docs}/no-interface-member-docs/comment-utilities.d.ts +1 -1
  92. package/dist/domain/docs/no-interface-member-docs/comment-utilities.d.ts.map +1 -0
  93. package/dist/domain/docs/no-interface-member-docs/comment-utilities.js +146 -0
  94. package/dist/domain/docs/no-interface-member-docs/index.d.ts +2 -0
  95. package/dist/domain/docs/no-interface-member-docs/index.d.ts.map +1 -0
  96. package/dist/domain/docs/no-interface-member-docs/index.js +2 -0
  97. package/dist/{docs → domain/docs}/no-interface-member-docs/parameter-tags.d.ts +1 -1
  98. package/dist/domain/docs/no-interface-member-docs/parameter-tags.d.ts.map +1 -0
  99. package/dist/domain/docs/no-interface-member-docs/parameter-tags.js +101 -0
  100. package/dist/{docs → domain/docs}/no-interface-member-docs/parameter-utilities.d.ts +1 -1
  101. package/dist/domain/docs/no-interface-member-docs/parameter-utilities.d.ts.map +1 -0
  102. package/dist/domain/docs/no-interface-member-docs/parameter-utilities.js +125 -0
  103. package/dist/domain/docs/no-interface-member-docs/rule.d.ts.map +1 -0
  104. package/dist/domain/docs/no-interface-member-docs/rule.js +171 -0
  105. package/dist/domain/docs/no-interface-member-docs/test-helpers.d.ts.map +1 -0
  106. package/dist/{docs → domain/docs}/no-interface-member-docs/test-helpers.js +2 -2
  107. package/dist/{docs → domain/docs}/no-interface-member-docs/types.d.ts +2 -2
  108. package/dist/domain/docs/no-interface-member-docs/types.d.ts.map +1 -0
  109. package/dist/domain/docs/no-interface-member-docs/types.js +2 -0
  110. package/dist/domain/docs/require-example-language/create-fixer.d.ts +5 -0
  111. package/dist/domain/docs/require-example-language/create-fixer.d.ts.map +1 -0
  112. package/dist/domain/docs/require-example-language/create-fixer.js +5 -0
  113. package/dist/domain/docs/require-example-language/empty-fence-fixes.d.ts.map +1 -0
  114. package/dist/domain/docs/require-example-language/empty-fence-fixes.js +169 -0
  115. package/dist/domain/docs/require-example-language/example-utilities.d.ts.map +1 -0
  116. package/dist/domain/docs/require-example-language/example-utilities.js +76 -0
  117. package/dist/{docs → domain/docs}/require-example-language/examples.d.ts +1 -1
  118. package/dist/domain/docs/require-example-language/examples.d.ts.map +1 -0
  119. package/dist/domain/docs/require-example-language/examples.js +181 -0
  120. package/dist/{docs → domain/docs}/require-example-language/fixes.d.ts +2 -2
  121. package/dist/domain/docs/require-example-language/fixes.d.ts.map +1 -0
  122. package/dist/domain/docs/require-example-language/fixes.js +182 -0
  123. package/dist/domain/docs/require-example-language/index.d.ts +3 -0
  124. package/dist/domain/docs/require-example-language/index.d.ts.map +1 -0
  125. package/dist/domain/docs/require-example-language/index.js +2 -0
  126. package/dist/{docs → domain/docs}/require-example-language/reporting.d.ts +1 -1
  127. package/dist/domain/docs/require-example-language/reporting.d.ts.map +1 -0
  128. package/dist/domain/docs/require-example-language/reporting.js +148 -0
  129. package/dist/domain/docs/require-example-language/rule.d.ts.map +1 -0
  130. package/dist/domain/docs/require-example-language/rule.js +37 -0
  131. package/dist/domain/docs/require-example-language/types.d.ts.map +1 -0
  132. package/dist/domain/docs/require-example-language/types.js +2 -0
  133. package/dist/domain/docs/single-line-jsdoc/index.d.ts +2 -0
  134. package/dist/domain/docs/single-line-jsdoc/index.d.ts.map +1 -0
  135. package/dist/domain/docs/single-line-jsdoc/index.js +2 -0
  136. package/dist/domain/docs/single-line-jsdoc/rule.d.ts +4 -0
  137. package/dist/domain/docs/single-line-jsdoc/rule.d.ts.map +1 -0
  138. package/dist/domain/docs/single-line-jsdoc/rule.edge-cases.d.ts +4 -0
  139. package/dist/domain/docs/single-line-jsdoc/rule.edge-cases.d.ts.map +1 -0
  140. package/dist/domain/docs/single-line-jsdoc/rule.edge-cases.js +5 -0
  141. package/dist/domain/docs/single-line-jsdoc/rule.js +201 -0
  142. package/dist/domain/docs/single-line-jsdoc/rule.node-lookups.d.ts +4 -0
  143. package/dist/domain/docs/single-line-jsdoc/rule.node-lookups.d.ts.map +1 -0
  144. package/dist/domain/docs/single-line-jsdoc/rule.node-lookups.js +5 -0
  145. package/dist/domain/docs/single-line-jsdoc/single-line-jsdoc-content.d.ts.map +1 -0
  146. package/dist/domain/docs/single-line-jsdoc/single-line-jsdoc-content.js +95 -0
  147. package/dist/{docs → domain/docs}/single-line-jsdoc/single-line-jsdoc-utilities.d.ts +1 -1
  148. package/dist/domain/docs/single-line-jsdoc/single-line-jsdoc-utilities.d.ts.map +1 -0
  149. package/dist/domain/docs/single-line-jsdoc/single-line-jsdoc-utilities.js +140 -0
  150. package/dist/domain/docs/test-helpers.d.ts.map +1 -0
  151. package/dist/domain/docs/test-helpers.js +107 -0
  152. package/dist/domain/index.d.ts +6 -0
  153. package/dist/domain/index.d.ts.map +1 -0
  154. package/dist/domain/index.js +6 -0
  155. package/dist/domain/testing/aaa/analyzer.analysis.d.ts +34 -0
  156. package/dist/domain/testing/aaa/analyzer.analysis.d.ts.map +1 -0
  157. package/dist/domain/testing/aaa/analyzer.analysis.helpers.d.ts +145 -0
  158. package/dist/domain/testing/aaa/analyzer.analysis.helpers.d.ts.map +1 -0
  159. package/dist/domain/testing/aaa/analyzer.analysis.helpers.js +203 -0
  160. package/dist/domain/testing/aaa/analyzer.analysis.js +82 -0
  161. package/dist/domain/testing/aaa/analyzer.analysis.unsupported.d.ts +4 -0
  162. package/dist/domain/testing/aaa/analyzer.analysis.unsupported.d.ts.map +1 -0
  163. package/dist/domain/testing/aaa/analyzer.analysis.unsupported.js +4 -0
  164. package/dist/domain/testing/aaa/analyzer.assertions.d.ts +18 -0
  165. package/dist/domain/testing/aaa/analyzer.assertions.d.ts.map +1 -0
  166. package/dist/domain/testing/aaa/analyzer.assertions.destructured.d.ts +4 -0
  167. package/dist/domain/testing/aaa/analyzer.assertions.destructured.d.ts.map +1 -0
  168. package/dist/domain/testing/aaa/analyzer.assertions.destructured.js +4 -0
  169. package/dist/domain/testing/aaa/analyzer.assertions.helpers.d.ts +95 -0
  170. package/dist/domain/testing/aaa/analyzer.assertions.helpers.d.ts.map +1 -0
  171. package/dist/domain/testing/aaa/analyzer.assertions.helpers.js +185 -0
  172. package/dist/domain/testing/aaa/analyzer.assertions.js +33 -0
  173. package/dist/domain/testing/aaa/analyzer.assertions.operands.d.ts +64 -0
  174. package/dist/domain/testing/aaa/analyzer.assertions.operands.d.ts.map +1 -0
  175. package/dist/domain/testing/aaa/analyzer.assertions.operands.js +105 -0
  176. package/dist/domain/testing/aaa/analyzer.classification.d.ts +16 -0
  177. package/dist/domain/testing/aaa/analyzer.classification.d.ts.map +1 -0
  178. package/dist/domain/testing/aaa/analyzer.classification.helpers.d.ts +77 -0
  179. package/dist/domain/testing/aaa/analyzer.classification.helpers.d.ts.map +1 -0
  180. package/dist/domain/testing/aaa/analyzer.classification.helpers.js +203 -0
  181. package/dist/domain/testing/aaa/analyzer.classification.js +31 -0
  182. package/dist/domain/testing/aaa/analyzer.classification.member-patterns.d.ts +9 -0
  183. package/dist/domain/testing/aaa/analyzer.classification.member-patterns.d.ts.map +1 -0
  184. package/dist/domain/testing/aaa/analyzer.classification.member-patterns.js +10 -0
  185. package/dist/domain/testing/aaa/analyzer.classification.mutations.d.ts +4 -0
  186. package/dist/domain/testing/aaa/analyzer.classification.mutations.d.ts.map +1 -0
  187. package/dist/domain/testing/aaa/analyzer.classification.mutations.js +4 -0
  188. package/dist/domain/testing/aaa/analyzer.classification.traversal.d.ts +15 -0
  189. package/dist/domain/testing/aaa/analyzer.classification.traversal.d.ts.map +1 -0
  190. package/dist/domain/testing/aaa/analyzer.classification.traversal.js +34 -0
  191. package/dist/domain/testing/aaa/analyzer.d.ts +46 -0
  192. package/dist/domain/testing/aaa/analyzer.d.ts.map +1 -0
  193. package/dist/domain/testing/aaa/analyzer.js +59 -0
  194. package/dist/domain/testing/aaa/analyzer.super.d.ts +106 -0
  195. package/dist/domain/testing/aaa/analyzer.super.d.ts.map +1 -0
  196. package/dist/domain/testing/aaa/analyzer.super.helpers.d.ts +27 -0
  197. package/dist/domain/testing/aaa/analyzer.super.helpers.d.ts.map +1 -0
  198. package/dist/domain/testing/aaa/analyzer.super.helpers.js +66 -0
  199. package/dist/domain/testing/aaa/analyzer.super.js +211 -0
  200. package/dist/{testing → domain/testing}/aaa/index.d.ts +2 -2
  201. package/dist/domain/testing/aaa/index.d.ts.map +1 -0
  202. package/dist/domain/testing/aaa/index.js +2 -0
  203. package/dist/domain/testing/aaa/types.d.ts +58 -0
  204. package/dist/domain/testing/aaa/types.d.ts.map +1 -0
  205. package/dist/domain/testing/aaa/types.js +2 -0
  206. package/dist/domain/testing/assert-actual-expected-names/index.d.ts +2 -0
  207. package/dist/domain/testing/assert-actual-expected-names/index.d.ts.map +1 -0
  208. package/dist/domain/testing/assert-actual-expected-names/index.js +2 -0
  209. package/dist/{testing → domain/testing}/assert-actual-expected-names/rule.d.ts +1 -0
  210. package/dist/domain/testing/assert-actual-expected-names/rule.d.ts.map +1 -0
  211. package/dist/domain/testing/assert-actual-expected-names/rule.js +116 -0
  212. package/dist/domain/testing/enforce-aaa-phase-purity/index.d.ts +2 -0
  213. package/dist/domain/testing/enforce-aaa-phase-purity/index.d.ts.map +1 -0
  214. package/dist/domain/testing/enforce-aaa-phase-purity/index.js +2 -0
  215. package/dist/domain/testing/enforce-aaa-phase-purity/pattern-identifiers.d.ts +13 -0
  216. package/dist/domain/testing/enforce-aaa-phase-purity/pattern-identifiers.d.ts.map +1 -0
  217. package/dist/domain/testing/enforce-aaa-phase-purity/pattern-identifiers.js +134 -0
  218. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-identifiers.d.ts +25 -0
  219. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-identifiers.d.ts.map +1 -0
  220. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-identifiers.js +138 -0
  221. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.combined.d.ts +4 -0
  222. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.combined.d.ts.map +1 -0
  223. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.combined.js +4 -0
  224. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.companion.d.ts +4 -0
  225. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.companion.d.ts.map +1 -0
  226. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.companion.js +4 -0
  227. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.d.ts +4 -0
  228. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.d.ts.map +1 -0
  229. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.js +4 -0
  230. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.d.ts +14 -0
  231. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.d.ts.map +1 -0
  232. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.js +180 -0
  233. package/dist/domain/testing/enforce-aaa-phase-purity/rule-test-helpers.d.ts +42 -0
  234. package/dist/domain/testing/enforce-aaa-phase-purity/rule-test-helpers.d.ts.map +1 -0
  235. package/dist/domain/testing/enforce-aaa-phase-purity/rule-test-helpers.js +188 -0
  236. package/dist/{testing → domain/testing}/enforce-aaa-phase-purity/rule.d.ts +1 -0
  237. package/dist/domain/testing/enforce-aaa-phase-purity/rule.d.ts.map +1 -0
  238. package/dist/domain/testing/enforce-aaa-phase-purity/rule.js +37 -0
  239. package/dist/domain/testing/enforce-aaa-structure/index.d.ts +2 -0
  240. package/dist/domain/testing/enforce-aaa-structure/index.d.ts.map +1 -0
  241. package/dist/domain/testing/enforce-aaa-structure/index.js +2 -0
  242. package/dist/{testing → domain/testing}/enforce-aaa-structure/rule.d.ts +1 -0
  243. package/dist/domain/testing/enforce-aaa-structure/rule.d.ts.map +1 -0
  244. package/dist/domain/testing/enforce-aaa-structure/rule.js +88 -0
  245. package/dist/{testing → domain/testing}/index.d.ts +9 -8
  246. package/dist/domain/testing/index.d.ts.map +1 -0
  247. package/dist/domain/testing/index.js +10 -0
  248. package/dist/domain/testing/prefer-vi-mocked-import/fix-import-statements.d.ts +29 -0
  249. package/dist/domain/testing/prefer-vi-mocked-import/fix-import-statements.d.ts.map +1 -0
  250. package/dist/domain/testing/prefer-vi-mocked-import/fix-import-statements.js +90 -0
  251. package/dist/domain/testing/prefer-vi-mocked-import/fix-import-updates.d.ts +31 -0
  252. package/dist/domain/testing/prefer-vi-mocked-import/fix-import-updates.d.ts.map +1 -0
  253. package/dist/domain/testing/prefer-vi-mocked-import/fix-import-updates.js +43 -0
  254. package/dist/domain/testing/prefer-vi-mocked-import/fix-imports.d.ts +16 -0
  255. package/dist/domain/testing/prefer-vi-mocked-import/fix-imports.d.ts.map +1 -0
  256. package/dist/domain/testing/prefer-vi-mocked-import/fix-imports.js +205 -0
  257. package/dist/domain/testing/prefer-vi-mocked-import/fix.d.ts +28 -0
  258. package/dist/domain/testing/prefer-vi-mocked-import/fix.d.ts.map +1 -0
  259. package/dist/domain/testing/prefer-vi-mocked-import/fix.js +171 -0
  260. package/dist/domain/testing/prefer-vi-mocked-import/index.d.ts +2 -0
  261. package/dist/domain/testing/prefer-vi-mocked-import/index.d.ts.map +1 -0
  262. package/dist/domain/testing/prefer-vi-mocked-import/index.js +2 -0
  263. package/dist/{testing → domain/testing}/prefer-vi-mocked-import/match-bindings.d.ts +1 -1
  264. package/dist/domain/testing/prefer-vi-mocked-import/match-bindings.d.ts.map +1 -0
  265. package/dist/domain/testing/prefer-vi-mocked-import/match-bindings.js +52 -0
  266. package/dist/{testing → domain/testing}/prefer-vi-mocked-import/match-declarations.d.ts +2 -1
  267. package/dist/domain/testing/prefer-vi-mocked-import/match-declarations.d.ts.map +1 -0
  268. package/dist/domain/testing/prefer-vi-mocked-import/match-declarations.js +131 -0
  269. package/dist/domain/testing/prefer-vi-mocked-import/match-helpers.d.ts.map +1 -0
  270. package/dist/domain/testing/prefer-vi-mocked-import/match-helpers.js +102 -0
  271. package/dist/{testing → domain/testing}/prefer-vi-mocked-import/match-imports.d.ts +1 -1
  272. package/dist/domain/testing/prefer-vi-mocked-import/match-imports.d.ts.map +1 -0
  273. package/dist/domain/testing/prefer-vi-mocked-import/match-imports.js +156 -0
  274. package/dist/{testing → domain/testing}/prefer-vi-mocked-import/match-rewrites.d.ts +1 -1
  275. package/dist/domain/testing/prefer-vi-mocked-import/match-rewrites.d.ts.map +1 -0
  276. package/dist/domain/testing/prefer-vi-mocked-import/match-rewrites.js +119 -0
  277. package/dist/domain/testing/prefer-vi-mocked-import/match-walk.d.ts.map +1 -0
  278. package/dist/domain/testing/prefer-vi-mocked-import/match-walk.js +62 -0
  279. package/dist/domain/testing/prefer-vi-mocked-import/match.d.ts +26 -0
  280. package/dist/domain/testing/prefer-vi-mocked-import/match.d.ts.map +1 -0
  281. package/dist/domain/testing/prefer-vi-mocked-import/match.js +198 -0
  282. package/dist/domain/testing/prefer-vi-mocked-import/rule-test-helpers.d.ts +20 -0
  283. package/dist/domain/testing/prefer-vi-mocked-import/rule-test-helpers.d.ts.map +1 -0
  284. package/dist/domain/testing/prefer-vi-mocked-import/rule-test-helpers.js +39 -0
  285. package/dist/domain/testing/prefer-vi-mocked-import/rule.d.ts.map +1 -0
  286. package/dist/domain/testing/prefer-vi-mocked-import/rule.js +39 -0
  287. package/dist/{testing → domain/testing}/prefer-vi-mocked-import/types.d.ts +1 -1
  288. package/dist/domain/testing/prefer-vi-mocked-import/types.d.ts.map +1 -0
  289. package/dist/domain/testing/prefer-vi-mocked-import/types.js +2 -0
  290. package/dist/domain/testing/prefer-vitest-incremental-casts/ast-helpers.d.ts +97 -0
  291. package/dist/domain/testing/prefer-vitest-incremental-casts/ast-helpers.d.ts.map +1 -0
  292. package/dist/domain/testing/prefer-vitest-incremental-casts/ast-helpers.js +174 -0
  293. package/dist/domain/testing/prefer-vitest-incremental-casts/index.d.ts +2 -0
  294. package/dist/domain/testing/prefer-vitest-incremental-casts/index.d.ts.map +1 -0
  295. package/dist/domain/testing/prefer-vitest-incremental-casts/index.js +2 -0
  296. package/dist/domain/testing/prefer-vitest-incremental-casts/match-input.d.ts +14 -0
  297. package/dist/domain/testing/prefer-vitest-incremental-casts/match-input.d.ts.map +1 -0
  298. package/dist/domain/testing/prefer-vitest-incremental-casts/match-input.js +84 -0
  299. package/dist/domain/testing/prefer-vitest-incremental-casts/match.d.ts +13 -0
  300. package/dist/domain/testing/prefer-vitest-incremental-casts/match.d.ts.map +1 -0
  301. package/dist/domain/testing/prefer-vitest-incremental-casts/match.js +195 -0
  302. package/dist/domain/testing/prefer-vitest-incremental-casts/replacement-helpers.d.ts +25 -0
  303. package/dist/domain/testing/prefer-vitest-incremental-casts/replacement-helpers.d.ts.map +1 -0
  304. package/dist/domain/testing/prefer-vitest-incremental-casts/replacement-helpers.js +96 -0
  305. package/dist/domain/testing/prefer-vitest-incremental-casts/rule-test-helpers.d.ts +32 -0
  306. package/dist/domain/testing/prefer-vitest-incremental-casts/rule-test-helpers.d.ts.map +1 -0
  307. package/dist/domain/testing/prefer-vitest-incremental-casts/rule-test-helpers.js +164 -0
  308. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.d.ts +5 -0
  309. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.d.ts.map +1 -0
  310. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.guardrails.d.ts +4 -0
  311. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.guardrails.d.ts.map +1 -0
  312. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.guardrails.js +4 -0
  313. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.input-shapes.d.ts +4 -0
  314. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.input-shapes.d.ts.map +1 -0
  315. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.input-shapes.js +4 -0
  316. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.js +88 -0
  317. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.signature-fallback.d.ts +4 -0
  318. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.signature-fallback.d.ts.map +1 -0
  319. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.signature-fallback.js +4 -0
  320. package/dist/domain/testing/prefer-vitest-incremental-casts/type-helpers.d.ts +24 -0
  321. package/dist/domain/testing/prefer-vitest-incremental-casts/type-helpers.d.ts.map +1 -0
  322. package/dist/domain/testing/prefer-vitest-incremental-casts/type-helpers.js +113 -0
  323. package/dist/domain/testing/prefer-vitest-incremental-casts/type-shape-helpers.d.ts +36 -0
  324. package/dist/domain/testing/prefer-vitest-incremental-casts/type-shape-helpers.d.ts.map +1 -0
  325. package/dist/domain/testing/prefer-vitest-incremental-casts/type-shape-helpers.js +138 -0
  326. package/dist/domain/testing/prefer-vitest-incremental-casts/types.d.ts +187 -0
  327. package/dist/domain/testing/prefer-vitest-incremental-casts/types.d.ts.map +1 -0
  328. package/dist/domain/testing/prefer-vitest-incremental-casts/types.js +2 -0
  329. package/dist/domain/testing/require-aaa-sections/index.d.ts +2 -0
  330. package/dist/domain/testing/require-aaa-sections/index.d.ts.map +1 -0
  331. package/dist/domain/testing/require-aaa-sections/index.js +2 -0
  332. package/dist/domain/testing/require-aaa-sections/missing-section-fixes.d.ts +17 -0
  333. package/dist/domain/testing/require-aaa-sections/missing-section-fixes.d.ts.map +1 -0
  334. package/dist/domain/testing/require-aaa-sections/missing-section-fixes.js +150 -0
  335. package/dist/{testing → domain/testing}/require-aaa-sections/rule.d.ts +1 -0
  336. package/dist/domain/testing/require-aaa-sections/rule.d.ts.map +1 -0
  337. package/dist/domain/testing/require-aaa-sections/rule.js +134 -0
  338. package/dist/domain/testing/require-aaa-sections/rule.reporting.d.ts +104 -0
  339. package/dist/domain/testing/require-aaa-sections/rule.reporting.d.ts.map +1 -0
  340. package/dist/domain/testing/require-aaa-sections/rule.reporting.js +216 -0
  341. package/dist/domain/testing/require-act-result-capture/index.d.ts +2 -0
  342. package/dist/domain/testing/require-act-result-capture/index.d.ts.map +1 -0
  343. package/dist/domain/testing/require-act-result-capture/index.js +2 -0
  344. package/dist/{testing → domain/testing}/require-act-result-capture/rule.d.ts +1 -0
  345. package/dist/domain/testing/require-act-result-capture/rule.d.ts.map +1 -0
  346. package/dist/domain/testing/require-act-result-capture/rule.js +109 -0
  347. package/dist/domain/testing/require-test-companion/index.d.ts +3 -0
  348. package/dist/domain/testing/require-test-companion/index.d.ts.map +1 -0
  349. package/dist/domain/testing/require-test-companion/index.js +3 -0
  350. package/dist/{testing → domain/testing}/require-test-companion/require-test-companion-listeners.d.ts +1 -1
  351. package/dist/domain/testing/require-test-companion/require-test-companion-listeners.d.ts.map +1 -0
  352. package/dist/domain/testing/require-test-companion/require-test-companion-listeners.js +145 -0
  353. package/dist/domain/testing/require-test-companion/require-test-companion-options.d.ts.map +1 -0
  354. package/dist/domain/testing/require-test-companion/require-test-companion-options.js +113 -0
  355. package/dist/{testing → domain/testing}/require-test-companion/require-test-companion-test-helpers.d.ts +1 -1
  356. package/dist/domain/testing/require-test-companion/require-test-companion-test-helpers.d.ts.map +1 -0
  357. package/dist/domain/testing/require-test-companion/require-test-companion-test-helpers.js +184 -0
  358. package/dist/{testing → domain/testing}/require-test-companion/require-test-companion-utilities.d.ts +1 -1
  359. package/dist/domain/testing/require-test-companion/require-test-companion-utilities.d.ts.map +1 -0
  360. package/dist/domain/testing/require-test-companion/require-test-companion-utilities.js +26 -0
  361. package/dist/domain/testing/require-test-companion/rule.d.ts.map +1 -0
  362. package/dist/domain/testing/require-test-companion/rule.js +82 -0
  363. package/dist/domain/testing/require-test-companion/types.d.ts.map +1 -0
  364. package/dist/domain/testing/require-test-companion/types.js +2 -0
  365. package/dist/domain/testing/single-act-statement/index.d.ts +2 -0
  366. package/dist/domain/testing/single-act-statement/index.d.ts.map +1 -0
  367. package/dist/domain/testing/single-act-statement/index.js +2 -0
  368. package/dist/{testing → domain/testing}/single-act-statement/rule.d.ts +1 -0
  369. package/dist/domain/testing/single-act-statement/rule.d.ts.map +1 -0
  370. package/dist/domain/testing/single-act-statement/rule.js +37 -0
  371. package/dist/index.d.ts +4 -5
  372. package/dist/index.d.ts.map +1 -1
  373. package/dist/index.js +3 -6
  374. package/dist/{codeperfect-plugin.d.ts → infrastructure/codeperfect-plugin.d.ts} +2 -0
  375. package/dist/infrastructure/codeperfect-plugin.d.ts.map +1 -0
  376. package/dist/infrastructure/codeperfect-plugin.js +30 -0
  377. package/dist/infrastructure/index.d.ts +5 -0
  378. package/dist/infrastructure/index.d.ts.map +1 -0
  379. package/dist/infrastructure/index.js +4 -0
  380. package/dist/infrastructure/presets.d.ts +18 -0
  381. package/dist/infrastructure/presets.d.ts.map +1 -0
  382. package/dist/infrastructure/presets.js +81 -0
  383. package/package.json +67 -32
  384. package/dist/architecture/consistent-barrel-files/consistent-barrel-files-listeners.d.ts.map +0 -1
  385. package/dist/architecture/consistent-barrel-files/consistent-barrel-files-listeners.js +0 -131
  386. package/dist/architecture/consistent-barrel-files/consistent-barrel-files-options.d.ts +0 -48
  387. package/dist/architecture/consistent-barrel-files/consistent-barrel-files-options.d.ts.map +0 -1
  388. package/dist/architecture/consistent-barrel-files/consistent-barrel-files-options.js +0 -126
  389. package/dist/architecture/consistent-barrel-files/exports-only-rule-test-utilities.d.ts.map +0 -1
  390. package/dist/architecture/consistent-barrel-files/exports-only-rule-test-utilities.js +0 -90
  391. package/dist/architecture/consistent-barrel-files/exports-only-rule.d.ts.map +0 -1
  392. package/dist/architecture/consistent-barrel-files/exports-only-rule.js +0 -218
  393. package/dist/architecture/consistent-barrel-files/index.d.ts +0 -5
  394. package/dist/architecture/consistent-barrel-files/index.d.ts.map +0 -1
  395. package/dist/architecture/consistent-barrel-files/index.js +0 -4
  396. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.d.ts.map +0 -1
  397. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.js +0 -100
  398. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-test-utilities.d.ts.map +0 -1
  399. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-test-utilities.js +0 -90
  400. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-utilities.d.ts.map +0 -1
  401. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-utilities.js +0 -154
  402. package/dist/architecture/consistent-barrel-files/rule.d.ts.map +0 -1
  403. package/dist/architecture/consistent-barrel-files/rule.js +0 -58
  404. package/dist/architecture/consistent-barrel-files/test-helpers.d.ts.map +0 -1
  405. package/dist/architecture/consistent-barrel-files/test-helpers.js +0 -229
  406. package/dist/architecture/consistent-barrel-files/types.d.ts +0 -25
  407. package/dist/architecture/consistent-barrel-files/types.d.ts.map +0 -1
  408. package/dist/architecture/consistent-barrel-files/types.js +0 -2
  409. package/dist/architecture/index.d.ts.map +0 -1
  410. package/dist/architecture/index.js +0 -2
  411. package/dist/benchmark-rules.d.ts +0 -83
  412. package/dist/benchmark-rules.d.ts.map +0 -1
  413. package/dist/benchmark-rules.js +0 -175
  414. package/dist/codeperfect-plugin.d.ts.map +0 -1
  415. package/dist/codeperfect-plugin.js +0 -29
  416. package/dist/core/index.d.ts.map +0 -1
  417. package/dist/core/index.js +0 -3
  418. package/dist/core/no-multiple-declarators/index.d.ts +0 -2
  419. package/dist/core/no-multiple-declarators/index.d.ts.map +0 -1
  420. package/dist/core/no-multiple-declarators/index.js +0 -2
  421. package/dist/core/no-multiple-declarators/rule.d.ts.map +0 -1
  422. package/dist/core/no-multiple-declarators/rule.js +0 -100
  423. package/dist/core/prefer-interface-types/index.d.ts +0 -2
  424. package/dist/core/prefer-interface-types/index.d.ts.map +0 -1
  425. package/dist/core/prefer-interface-types/index.js +0 -2
  426. package/dist/core/prefer-interface-types/rule.d.ts.map +0 -1
  427. package/dist/core/prefer-interface-types/rule.js +0 -145
  428. package/dist/core/prefer-interface-types/test-helpers.d.ts.map +0 -1
  429. package/dist/core/prefer-interface-types/test-helpers.js +0 -116
  430. package/dist/custom-rule-documentation.d.ts.map +0 -1
  431. package/dist/custom-rule-documentation.js +0 -35
  432. package/dist/custom-rules.d.ts.map +0 -1
  433. package/dist/custom-rules.js +0 -70
  434. package/dist/docs/index.d.ts +0 -4
  435. package/dist/docs/index.d.ts.map +0 -1
  436. package/dist/docs/index.js +0 -4
  437. package/dist/docs/no-interface-member-docs/comment-utilities-test-helpers.d.ts.map +0 -1
  438. package/dist/docs/no-interface-member-docs/comment-utilities-test-helpers.js +0 -129
  439. package/dist/docs/no-interface-member-docs/comment-utilities.d.ts.map +0 -1
  440. package/dist/docs/no-interface-member-docs/comment-utilities.js +0 -146
  441. package/dist/docs/no-interface-member-docs/index.d.ts +0 -2
  442. package/dist/docs/no-interface-member-docs/index.d.ts.map +0 -1
  443. package/dist/docs/no-interface-member-docs/index.js +0 -2
  444. package/dist/docs/no-interface-member-docs/parameter-tags.d.ts.map +0 -1
  445. package/dist/docs/no-interface-member-docs/parameter-tags.js +0 -101
  446. package/dist/docs/no-interface-member-docs/parameter-utilities.d.ts.map +0 -1
  447. package/dist/docs/no-interface-member-docs/parameter-utilities.js +0 -125
  448. package/dist/docs/no-interface-member-docs/rule.d.ts.map +0 -1
  449. package/dist/docs/no-interface-member-docs/rule.js +0 -168
  450. package/dist/docs/no-interface-member-docs/test-helpers.d.ts.map +0 -1
  451. package/dist/docs/no-interface-member-docs/types.d.ts.map +0 -1
  452. package/dist/docs/no-interface-member-docs/types.js +0 -2
  453. package/dist/docs/require-example-language/empty-fence-fixes.d.ts.map +0 -1
  454. package/dist/docs/require-example-language/empty-fence-fixes.js +0 -169
  455. package/dist/docs/require-example-language/example-utilities.d.ts.map +0 -1
  456. package/dist/docs/require-example-language/example-utilities.js +0 -76
  457. package/dist/docs/require-example-language/examples.d.ts.map +0 -1
  458. package/dist/docs/require-example-language/examples.js +0 -181
  459. package/dist/docs/require-example-language/fixes.d.ts.map +0 -1
  460. package/dist/docs/require-example-language/fixes.js +0 -182
  461. package/dist/docs/require-example-language/index.d.ts +0 -3
  462. package/dist/docs/require-example-language/index.d.ts.map +0 -1
  463. package/dist/docs/require-example-language/index.js +0 -2
  464. package/dist/docs/require-example-language/reporting.d.ts.map +0 -1
  465. package/dist/docs/require-example-language/reporting.js +0 -145
  466. package/dist/docs/require-example-language/rule.d.ts.map +0 -1
  467. package/dist/docs/require-example-language/rule.js +0 -34
  468. package/dist/docs/require-example-language/types.d.ts.map +0 -1
  469. package/dist/docs/require-example-language/types.js +0 -2
  470. package/dist/docs/single-line-jsdoc/index.d.ts +0 -2
  471. package/dist/docs/single-line-jsdoc/index.d.ts.map +0 -1
  472. package/dist/docs/single-line-jsdoc/index.js +0 -2
  473. package/dist/docs/single-line-jsdoc/rule.d.ts +0 -5
  474. package/dist/docs/single-line-jsdoc/rule.d.ts.map +0 -1
  475. package/dist/docs/single-line-jsdoc/rule.js +0 -196
  476. package/dist/docs/single-line-jsdoc/single-line-jsdoc-content.d.ts.map +0 -1
  477. package/dist/docs/single-line-jsdoc/single-line-jsdoc-content.js +0 -95
  478. package/dist/docs/single-line-jsdoc/single-line-jsdoc-utilities.d.ts.map +0 -1
  479. package/dist/docs/single-line-jsdoc/single-line-jsdoc-utilities.js +0 -140
  480. package/dist/docs/test-helpers.d.ts.map +0 -1
  481. package/dist/docs/test-helpers.js +0 -107
  482. package/dist/presets.d.ts +0 -10
  483. package/dist/presets.d.ts.map +0 -1
  484. package/dist/presets.js +0 -50
  485. package/dist/rules/index.d.ts +0 -5
  486. package/dist/rules/index.d.ts.map +0 -1
  487. package/dist/rules/index.js +0 -6
  488. package/dist/testing/aaa/analyzer.d.ts +0 -36
  489. package/dist/testing/aaa/analyzer.d.ts.map +0 -1
  490. package/dist/testing/aaa/analyzer.js +0 -490
  491. package/dist/testing/aaa/index.d.ts.map +0 -1
  492. package/dist/testing/aaa/index.js +0 -2
  493. package/dist/testing/aaa/types.d.ts +0 -31
  494. package/dist/testing/aaa/types.d.ts.map +0 -1
  495. package/dist/testing/aaa/types.js +0 -2
  496. package/dist/testing/assert-actual-expected-names/index.d.ts +0 -2
  497. package/dist/testing/assert-actual-expected-names/index.d.ts.map +0 -1
  498. package/dist/testing/assert-actual-expected-names/index.js +0 -2
  499. package/dist/testing/assert-actual-expected-names/rule.d.ts.map +0 -1
  500. package/dist/testing/assert-actual-expected-names/rule.js +0 -54
  501. package/dist/testing/enforce-aaa-phase-purity/index.d.ts +0 -2
  502. package/dist/testing/enforce-aaa-phase-purity/index.d.ts.map +0 -1
  503. package/dist/testing/enforce-aaa-phase-purity/index.js +0 -2
  504. package/dist/testing/enforce-aaa-phase-purity/rule.d.ts.map +0 -1
  505. package/dist/testing/enforce-aaa-phase-purity/rule.js +0 -110
  506. package/dist/testing/enforce-aaa-structure/index.d.ts +0 -2
  507. package/dist/testing/enforce-aaa-structure/index.d.ts.map +0 -1
  508. package/dist/testing/enforce-aaa-structure/index.js +0 -2
  509. package/dist/testing/enforce-aaa-structure/rule.d.ts.map +0 -1
  510. package/dist/testing/enforce-aaa-structure/rule.js +0 -48
  511. package/dist/testing/index.d.ts.map +0 -1
  512. package/dist/testing/index.js +0 -9
  513. package/dist/testing/prefer-vi-mocked-import/fix.d.ts +0 -16
  514. package/dist/testing/prefer-vi-mocked-import/fix.d.ts.map +0 -1
  515. package/dist/testing/prefer-vi-mocked-import/fix.js +0 -224
  516. package/dist/testing/prefer-vi-mocked-import/index.d.ts +0 -2
  517. package/dist/testing/prefer-vi-mocked-import/index.d.ts.map +0 -1
  518. package/dist/testing/prefer-vi-mocked-import/index.js +0 -2
  519. package/dist/testing/prefer-vi-mocked-import/match-bindings.d.ts.map +0 -1
  520. package/dist/testing/prefer-vi-mocked-import/match-bindings.js +0 -52
  521. package/dist/testing/prefer-vi-mocked-import/match-declarations.d.ts.map +0 -1
  522. package/dist/testing/prefer-vi-mocked-import/match-declarations.js +0 -99
  523. package/dist/testing/prefer-vi-mocked-import/match-helpers.d.ts.map +0 -1
  524. package/dist/testing/prefer-vi-mocked-import/match-helpers.js +0 -102
  525. package/dist/testing/prefer-vi-mocked-import/match-imports.d.ts.map +0 -1
  526. package/dist/testing/prefer-vi-mocked-import/match-imports.js +0 -156
  527. package/dist/testing/prefer-vi-mocked-import/match-rewrites.d.ts.map +0 -1
  528. package/dist/testing/prefer-vi-mocked-import/match-rewrites.js +0 -119
  529. package/dist/testing/prefer-vi-mocked-import/match-walk.d.ts.map +0 -1
  530. package/dist/testing/prefer-vi-mocked-import/match-walk.js +0 -62
  531. package/dist/testing/prefer-vi-mocked-import/match.d.ts +0 -15
  532. package/dist/testing/prefer-vi-mocked-import/match.d.ts.map +0 -1
  533. package/dist/testing/prefer-vi-mocked-import/match.js +0 -193
  534. package/dist/testing/prefer-vi-mocked-import/rule.d.ts.map +0 -1
  535. package/dist/testing/prefer-vi-mocked-import/rule.js +0 -32
  536. package/dist/testing/prefer-vi-mocked-import/types.d.ts.map +0 -1
  537. package/dist/testing/prefer-vi-mocked-import/types.js +0 -2
  538. package/dist/testing/require-aaa-sections/index.d.ts +0 -2
  539. package/dist/testing/require-aaa-sections/index.d.ts.map +0 -1
  540. package/dist/testing/require-aaa-sections/index.js +0 -2
  541. package/dist/testing/require-aaa-sections/rule.d.ts.map +0 -1
  542. package/dist/testing/require-aaa-sections/rule.js +0 -111
  543. package/dist/testing/require-act-result-capture/index.d.ts +0 -2
  544. package/dist/testing/require-act-result-capture/index.d.ts.map +0 -1
  545. package/dist/testing/require-act-result-capture/index.js +0 -2
  546. package/dist/testing/require-act-result-capture/rule.d.ts.map +0 -1
  547. package/dist/testing/require-act-result-capture/rule.js +0 -34
  548. package/dist/testing/require-test-companion/index.d.ts +0 -3
  549. package/dist/testing/require-test-companion/index.d.ts.map +0 -1
  550. package/dist/testing/require-test-companion/index.js +0 -3
  551. package/dist/testing/require-test-companion/require-test-companion-listeners.d.ts.map +0 -1
  552. package/dist/testing/require-test-companion/require-test-companion-listeners.js +0 -145
  553. package/dist/testing/require-test-companion/require-test-companion-options.d.ts.map +0 -1
  554. package/dist/testing/require-test-companion/require-test-companion-options.js +0 -112
  555. package/dist/testing/require-test-companion/require-test-companion-test-helpers.d.ts.map +0 -1
  556. package/dist/testing/require-test-companion/require-test-companion-test-helpers.js +0 -183
  557. package/dist/testing/require-test-companion/require-test-companion-utilities.d.ts.map +0 -1
  558. package/dist/testing/require-test-companion/require-test-companion-utilities.js +0 -26
  559. package/dist/testing/require-test-companion/rule.d.ts.map +0 -1
  560. package/dist/testing/require-test-companion/rule.js +0 -57
  561. package/dist/testing/require-test-companion/types.d.ts.map +0 -1
  562. package/dist/testing/require-test-companion/types.js +0 -2
  563. package/dist/testing/single-act-statement/index.d.ts +0 -2
  564. package/dist/testing/single-act-statement/index.d.ts.map +0 -1
  565. package/dist/testing/single-act-statement/index.js +0 -2
  566. package/dist/testing/single-act-statement/rule.d.ts.map +0 -1
  567. package/dist/testing/single-act-statement/rule.js +0 -33
  568. /package/dist/{architecture → domain/architecture}/consistent-barrel-files/exports-only-rule.d.ts +0 -0
  569. /package/dist/{architecture → domain/architecture}/consistent-barrel-files/no-reexports-outside-barrels-rule.d.ts +0 -0
  570. /package/dist/{architecture → domain/architecture}/consistent-barrel-files/rule.d.ts +0 -0
  571. /package/dist/{core → domain/core}/prefer-interface-types/rule.d.ts +0 -0
  572. /package/dist/{core → domain/core}/prefer-interface-types/test-helpers.d.ts +0 -0
  573. /package/dist/{docs → domain/docs}/no-interface-member-docs/comment-utilities-test-helpers.d.ts +0 -0
  574. /package/dist/{docs → domain/docs}/no-interface-member-docs/rule.d.ts +0 -0
  575. /package/dist/{docs → domain/docs}/no-interface-member-docs/test-helpers.d.ts +0 -0
  576. /package/dist/{docs → domain/docs}/require-example-language/empty-fence-fixes.d.ts +0 -0
  577. /package/dist/{docs → domain/docs}/require-example-language/example-utilities.d.ts +0 -0
  578. /package/dist/{docs → domain/docs}/require-example-language/rule.d.ts +0 -0
  579. /package/dist/{docs → domain/docs}/require-example-language/types.d.ts +0 -0
  580. /package/dist/{docs → domain/docs}/single-line-jsdoc/single-line-jsdoc-content.d.ts +0 -0
  581. /package/dist/{docs → domain/docs}/test-helpers.d.ts +0 -0
  582. /package/dist/{testing → domain/testing}/prefer-vi-mocked-import/match-helpers.d.ts +0 -0
  583. /package/dist/{testing → domain/testing}/prefer-vi-mocked-import/match-walk.d.ts +0 -0
  584. /package/dist/{testing → domain/testing}/prefer-vi-mocked-import/rule.d.ts +0 -0
  585. /package/dist/{testing → domain/testing}/require-test-companion/require-test-companion-options.d.ts +0 -0
  586. /package/dist/{testing → domain/testing}/require-test-companion/rule.d.ts +0 -0
  587. /package/dist/{testing → domain/testing}/require-test-companion/types.d.ts +0 -0
@@ -0,0 +1,134 @@
1
+ /**
2
+ * Collects identifiers from an array pattern.
3
+ * @param pattern Array pattern to inspect.
4
+ * @param identifiers Identifier set updated in place.
5
+ * @example
6
+ * ```typescript
7
+ * collectArrayPatternIdentifiers({ elements: [], type: "ArrayPattern" }, new Set<string>());
8
+ * ```
9
+ */
10
+ function collectArrayPatternIdentifiers(pattern, identifiers) {
11
+ const elements = pattern.elements;
12
+ for (const element of elements) {
13
+ if (element !== null && element !== void 0) {
14
+ collectPatternIdentifiers(element, identifiers);
15
+ }
16
+ }
17
+ }
18
+ /**
19
+ * Collects identifiers from an assignment pattern.
20
+ * @param pattern Assignment pattern to inspect.
21
+ * @param identifiers Identifier set updated in place.
22
+ * @example
23
+ * ```typescript
24
+ * collectAssignmentPatternIdentifiers({ left: { name: "value", type: "Identifier" }, right: { name: "fallback", type: "Identifier" }, type: "AssignmentPattern" } as ESTree.AssignmentPattern, new Set<string>());
25
+ * ```
26
+ */
27
+ function collectAssignmentPatternIdentifiers(pattern, identifiers) {
28
+ collectPatternIdentifiers(pattern.left, identifiers);
29
+ }
30
+ /**
31
+ * Collects identifiers from a plain identifier pattern.
32
+ * @param pattern Identifier pattern to inspect.
33
+ * @param identifiers Identifier set updated in place.
34
+ * @example
35
+ * ```typescript
36
+ * collectIdentifierPatternIdentifiers({ name: "value", type: "Identifier" }, new Set<string>());
37
+ * ```
38
+ */
39
+ function collectIdentifierPatternIdentifiers(pattern, identifiers) {
40
+ identifiers.add(pattern.name);
41
+ }
42
+ /**
43
+ * Collects identifiers from an object pattern.
44
+ * @param pattern Object pattern to inspect.
45
+ * @param identifiers Identifier set updated in place.
46
+ * @example
47
+ * ```typescript
48
+ * collectObjectPatternIdentifiers({ properties: [], type: "ObjectPattern" }, new Set<string>());
49
+ * ```
50
+ */
51
+ function collectObjectPatternIdentifiers(pattern, identifiers) {
52
+ for (const property of pattern.properties) {
53
+ if (property.type === "Property") {
54
+ collectPatternIdentifiers(property.value, identifiers);
55
+ }
56
+ else {
57
+ collectPatternIdentifiers(property.argument, identifiers);
58
+ }
59
+ }
60
+ }
61
+ /**
62
+ * Collects all identifier names declared by a destructuring or identifier pattern.
63
+ * @param pattern Pattern node to inspect.
64
+ * @param identifiers Identifier set updated in place.
65
+ * @example
66
+ * ```typescript
67
+ * collectPatternIdentifiers({ name: "value", type: "Identifier" }, new Set<string>());
68
+ * ```
69
+ */
70
+ function collectPatternIdentifiers(pattern, identifiers) {
71
+ getPatternIdentifierCollector(pattern)(pattern, identifiers);
72
+ }
73
+ /**
74
+ * Collects identifiers from a rest element pattern.
75
+ * @param pattern Rest element to inspect.
76
+ * @param identifiers Identifier set updated in place.
77
+ * @example
78
+ * ```typescript
79
+ * collectRestPatternIdentifiers({ argument: { name: "value", type: "Identifier" }, type: "RestElement" }, new Set<string>());
80
+ * ```
81
+ */
82
+ function collectRestPatternIdentifiers(pattern, identifiers) {
83
+ collectPatternIdentifiers(pattern.argument, identifiers);
84
+ }
85
+ /**
86
+ * Ignores pattern kinds that do not declare identifiers.
87
+ * @param pattern Pattern to ignore.
88
+ * @param identifiers Identifier set left unchanged.
89
+ * @example
90
+ * ```typescript
91
+ * collectUnsupportedPatternIdentifiers({ object: { name: "value", type: "Identifier" }, property: { name: "member", type: "Identifier" }, computed: false, optional: false, type: "MemberExpression" }, new Set<string>());
92
+ * ```
93
+ */
94
+ function collectUnsupportedPatternIdentifiers(pattern, identifiers) {
95
+ void pattern;
96
+ void identifiers;
97
+ }
98
+ /**
99
+ * Gets the identifier collector for one supported pattern kind.
100
+ * @param pattern Pattern whose collector is needed.
101
+ * @returns Collector for the pattern, when one exists.
102
+ * @example
103
+ * ```typescript
104
+ * const collector = getPatternIdentifierCollector({ name: "value", type: "Identifier" });
105
+ * void collector;
106
+ * ```
107
+ */
108
+ function getPatternIdentifierCollector(pattern) {
109
+ switch (pattern.type) {
110
+ case "ArrayPattern": {
111
+ return collectArrayPatternIdentifiers;
112
+ }
113
+ case "AssignmentPattern": {
114
+ return collectAssignmentPatternIdentifiers;
115
+ }
116
+ case "Identifier": {
117
+ return collectIdentifierPatternIdentifiers;
118
+ }
119
+ case "MemberExpression": {
120
+ return collectUnsupportedPatternIdentifiers;
121
+ }
122
+ case "ObjectPattern": {
123
+ return collectObjectPatternIdentifiers;
124
+ }
125
+ case "RestElement": {
126
+ return collectRestPatternIdentifiers;
127
+ }
128
+ default: {
129
+ return collectUnsupportedPatternIdentifiers;
130
+ }
131
+ }
132
+ }
133
+ export { collectPatternIdentifiers };
134
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0dGVybi1pZGVudGlmaWVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb21haW4vdGVzdGluZy9lbmZvcmNlLWFhYS1waGFzZS1wdXJpdHkvcGF0dGVybi1pZGVudGlmaWVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFRQTs7Ozs7Ozs7R0FRRztBQUNILFNBQVMsOEJBQThCLENBQ3JDLE9BQXVCLEVBQ3ZCLFdBQXdCO0lBRXhCLE1BQU0sUUFBUSxHQUFJLE9BQStCLENBQUMsUUFJL0MsQ0FBQztJQUVKLEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxFQUFFLENBQUM7UUFDL0IsSUFBSSxPQUFPLEtBQUssSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzNDLHlCQUF5QixDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNsRCxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQVMsbUNBQW1DLENBQzFDLE9BQXVCLEVBQ3ZCLFdBQXdCO0lBRXhCLHlCQUF5QixDQUN0QixPQUFvQyxDQUFDLElBQUksRUFDMUMsV0FBVyxDQUNaLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFTLG1DQUFtQyxDQUMxQyxPQUF1QixFQUN2QixXQUF3QjtJQUV4QixXQUFXLENBQUMsR0FBRyxDQUFFLE9BQTZCLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkQsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBUywrQkFBK0IsQ0FDdEMsT0FBdUIsRUFDdkIsV0FBd0I7SUFFeEIsS0FBSyxNQUFNLFFBQVEsSUFBSyxPQUFnQyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3BFLElBQUksUUFBUSxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUNqQyx5QkFBeUIsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3pELENBQUM7YUFBTSxDQUFDO1lBQ04seUJBQXlCLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUM1RCxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQVMseUJBQXlCLENBQ2hDLE9BQXVCLEVBQ3ZCLFdBQXdCO0lBRXhCLDZCQUE2QixDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztBQUMvRCxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFTLDZCQUE2QixDQUNwQyxPQUF1QixFQUN2QixXQUF3QjtJQUV4Qix5QkFBeUIsQ0FDdEIsT0FBOEIsQ0FBQyxRQUFRLEVBQ3hDLFdBQVcsQ0FDWixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBUyxvQ0FBb0MsQ0FDM0MsT0FBdUIsRUFDdkIsV0FBd0I7SUFFeEIsS0FBSyxPQUFPLENBQUM7SUFDYixLQUFLLFdBQVcsQ0FBQztBQUNuQixDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBUyw2QkFBNkIsQ0FDcEMsT0FBdUI7SUFFdkIsUUFBUSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsS0FBSyxjQUFjLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLE9BQU8sOEJBQThCLENBQUM7UUFDeEMsQ0FBQztRQUNELEtBQUssbUJBQW1CLENBQUMsQ0FBQyxDQUFDO1lBQ3pCLE9BQU8sbUNBQW1DLENBQUM7UUFDN0MsQ0FBQztRQUNELEtBQUssWUFBWSxDQUFDLENBQUMsQ0FBQztZQUNsQixPQUFPLG1DQUFtQyxDQUFDO1FBQzdDLENBQUM7UUFDRCxLQUFLLGtCQUFrQixDQUFDLENBQUMsQ0FBQztZQUN4QixPQUFPLG9DQUFvQyxDQUFDO1FBQzlDLENBQUM7UUFDRCxLQUFLLGVBQWUsQ0FBQyxDQUFDLENBQUM7WUFDckIsT0FBTywrQkFBK0IsQ0FBQztRQUN6QyxDQUFDO1FBQ0QsS0FBSyxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBQ25CLE9BQU8sNkJBQTZCLENBQUM7UUFDdkMsQ0FBQztRQUNELE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDUixPQUFPLG9DQUFvQyxDQUFDO1FBQzlDLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQUVELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgKiBhcyBFU1RyZWUgZnJvbSBcImVzdHJlZVwiO1xyXG5cclxuLyoqIEZ1bmN0aW9uIHNpZ25hdHVyZSBmb3IgcGF0dGVybiBpZGVudGlmaWVyIGNvbGxlY3RvcnMuICovXHJcbnR5cGUgUGF0dGVybklkZW50aWZpZXJDb2xsZWN0b3IgPSAoXHJcbiAgcGF0dGVybjogRVNUcmVlLlBhdHRlcm4sXHJcbiAgaWRlbnRpZmllcnM6IFNldDxzdHJpbmc+LFxyXG4pID0+IHZvaWQ7XHJcblxyXG4vKipcclxuICogQ29sbGVjdHMgaWRlbnRpZmllcnMgZnJvbSBhbiBhcnJheSBwYXR0ZXJuLlxyXG4gKiBAcGFyYW0gcGF0dGVybiBBcnJheSBwYXR0ZXJuIHRvIGluc3BlY3QuXHJcbiAqIEBwYXJhbSBpZGVudGlmaWVycyBJZGVudGlmaWVyIHNldCB1cGRhdGVkIGluIHBsYWNlLlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGNvbGxlY3RBcnJheVBhdHRlcm5JZGVudGlmaWVycyh7IGVsZW1lbnRzOiBbXSwgdHlwZTogXCJBcnJheVBhdHRlcm5cIiB9LCBuZXcgU2V0PHN0cmluZz4oKSk7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gY29sbGVjdEFycmF5UGF0dGVybklkZW50aWZpZXJzKFxyXG4gIHBhdHRlcm46IEVTVHJlZS5QYXR0ZXJuLFxyXG4gIGlkZW50aWZpZXJzOiBTZXQ8c3RyaW5nPixcclxuKTogdm9pZCB7XHJcbiAgY29uc3QgZWxlbWVudHMgPSAocGF0dGVybiBhcyBFU1RyZWUuQXJyYXlQYXR0ZXJuKS5lbGVtZW50cyBhcyAoXHJcbiAgICB8IEVTVHJlZS5QYXR0ZXJuXHJcbiAgICB8IG51bGxcclxuICAgIHwgdW5kZWZpbmVkXHJcbiAgKVtdO1xyXG5cclxuICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgZWxlbWVudHMpIHtcclxuICAgIGlmIChlbGVtZW50ICE9PSBudWxsICYmIGVsZW1lbnQgIT09IHZvaWQgMCkge1xyXG4gICAgICBjb2xsZWN0UGF0dGVybklkZW50aWZpZXJzKGVsZW1lbnQsIGlkZW50aWZpZXJzKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDb2xsZWN0cyBpZGVudGlmaWVycyBmcm9tIGFuIGFzc2lnbm1lbnQgcGF0dGVybi5cclxuICogQHBhcmFtIHBhdHRlcm4gQXNzaWdubWVudCBwYXR0ZXJuIHRvIGluc3BlY3QuXHJcbiAqIEBwYXJhbSBpZGVudGlmaWVycyBJZGVudGlmaWVyIHNldCB1cGRhdGVkIGluIHBsYWNlLlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGNvbGxlY3RBc3NpZ25tZW50UGF0dGVybklkZW50aWZpZXJzKHsgbGVmdDogeyBuYW1lOiBcInZhbHVlXCIsIHR5cGU6IFwiSWRlbnRpZmllclwiIH0sIHJpZ2h0OiB7IG5hbWU6IFwiZmFsbGJhY2tcIiwgdHlwZTogXCJJZGVudGlmaWVyXCIgfSwgdHlwZTogXCJBc3NpZ25tZW50UGF0dGVyblwiIH0gYXMgRVNUcmVlLkFzc2lnbm1lbnRQYXR0ZXJuLCBuZXcgU2V0PHN0cmluZz4oKSk7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gY29sbGVjdEFzc2lnbm1lbnRQYXR0ZXJuSWRlbnRpZmllcnMoXHJcbiAgcGF0dGVybjogRVNUcmVlLlBhdHRlcm4sXHJcbiAgaWRlbnRpZmllcnM6IFNldDxzdHJpbmc+LFxyXG4pOiB2b2lkIHtcclxuICBjb2xsZWN0UGF0dGVybklkZW50aWZpZXJzKFxyXG4gICAgKHBhdHRlcm4gYXMgRVNUcmVlLkFzc2lnbm1lbnRQYXR0ZXJuKS5sZWZ0LFxyXG4gICAgaWRlbnRpZmllcnMsXHJcbiAgKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENvbGxlY3RzIGlkZW50aWZpZXJzIGZyb20gYSBwbGFpbiBpZGVudGlmaWVyIHBhdHRlcm4uXHJcbiAqIEBwYXJhbSBwYXR0ZXJuIElkZW50aWZpZXIgcGF0dGVybiB0byBpbnNwZWN0LlxyXG4gKiBAcGFyYW0gaWRlbnRpZmllcnMgSWRlbnRpZmllciBzZXQgdXBkYXRlZCBpbiBwbGFjZS5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBjb2xsZWN0SWRlbnRpZmllclBhdHRlcm5JZGVudGlmaWVycyh7IG5hbWU6IFwidmFsdWVcIiwgdHlwZTogXCJJZGVudGlmaWVyXCIgfSwgbmV3IFNldDxzdHJpbmc+KCkpO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIGNvbGxlY3RJZGVudGlmaWVyUGF0dGVybklkZW50aWZpZXJzKFxyXG4gIHBhdHRlcm46IEVTVHJlZS5QYXR0ZXJuLFxyXG4gIGlkZW50aWZpZXJzOiBTZXQ8c3RyaW5nPixcclxuKTogdm9pZCB7XHJcbiAgaWRlbnRpZmllcnMuYWRkKChwYXR0ZXJuIGFzIEVTVHJlZS5JZGVudGlmaWVyKS5uYW1lKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENvbGxlY3RzIGlkZW50aWZpZXJzIGZyb20gYW4gb2JqZWN0IHBhdHRlcm4uXHJcbiAqIEBwYXJhbSBwYXR0ZXJuIE9iamVjdCBwYXR0ZXJuIHRvIGluc3BlY3QuXHJcbiAqIEBwYXJhbSBpZGVudGlmaWVycyBJZGVudGlmaWVyIHNldCB1cGRhdGVkIGluIHBsYWNlLlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGNvbGxlY3RPYmplY3RQYXR0ZXJuSWRlbnRpZmllcnMoeyBwcm9wZXJ0aWVzOiBbXSwgdHlwZTogXCJPYmplY3RQYXR0ZXJuXCIgfSwgbmV3IFNldDxzdHJpbmc+KCkpO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIGNvbGxlY3RPYmplY3RQYXR0ZXJuSWRlbnRpZmllcnMoXHJcbiAgcGF0dGVybjogRVNUcmVlLlBhdHRlcm4sXHJcbiAgaWRlbnRpZmllcnM6IFNldDxzdHJpbmc+LFxyXG4pOiB2b2lkIHtcclxuICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIChwYXR0ZXJuIGFzIEVTVHJlZS5PYmplY3RQYXR0ZXJuKS5wcm9wZXJ0aWVzKSB7XHJcbiAgICBpZiAocHJvcGVydHkudHlwZSA9PT0gXCJQcm9wZXJ0eVwiKSB7XHJcbiAgICAgIGNvbGxlY3RQYXR0ZXJuSWRlbnRpZmllcnMocHJvcGVydHkudmFsdWUsIGlkZW50aWZpZXJzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbGxlY3RQYXR0ZXJuSWRlbnRpZmllcnMocHJvcGVydHkuYXJndW1lbnQsIGlkZW50aWZpZXJzKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDb2xsZWN0cyBhbGwgaWRlbnRpZmllciBuYW1lcyBkZWNsYXJlZCBieSBhIGRlc3RydWN0dXJpbmcgb3IgaWRlbnRpZmllciBwYXR0ZXJuLlxyXG4gKiBAcGFyYW0gcGF0dGVybiBQYXR0ZXJuIG5vZGUgdG8gaW5zcGVjdC5cclxuICogQHBhcmFtIGlkZW50aWZpZXJzIElkZW50aWZpZXIgc2V0IHVwZGF0ZWQgaW4gcGxhY2UuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogY29sbGVjdFBhdHRlcm5JZGVudGlmaWVycyh7IG5hbWU6IFwidmFsdWVcIiwgdHlwZTogXCJJZGVudGlmaWVyXCIgfSwgbmV3IFNldDxzdHJpbmc+KCkpO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIGNvbGxlY3RQYXR0ZXJuSWRlbnRpZmllcnMoXHJcbiAgcGF0dGVybjogRVNUcmVlLlBhdHRlcm4sXHJcbiAgaWRlbnRpZmllcnM6IFNldDxzdHJpbmc+LFxyXG4pOiB2b2lkIHtcclxuICBnZXRQYXR0ZXJuSWRlbnRpZmllckNvbGxlY3RvcihwYXR0ZXJuKShwYXR0ZXJuLCBpZGVudGlmaWVycyk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDb2xsZWN0cyBpZGVudGlmaWVycyBmcm9tIGEgcmVzdCBlbGVtZW50IHBhdHRlcm4uXHJcbiAqIEBwYXJhbSBwYXR0ZXJuIFJlc3QgZWxlbWVudCB0byBpbnNwZWN0LlxyXG4gKiBAcGFyYW0gaWRlbnRpZmllcnMgSWRlbnRpZmllciBzZXQgdXBkYXRlZCBpbiBwbGFjZS5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBjb2xsZWN0UmVzdFBhdHRlcm5JZGVudGlmaWVycyh7IGFyZ3VtZW50OiB7IG5hbWU6IFwidmFsdWVcIiwgdHlwZTogXCJJZGVudGlmaWVyXCIgfSwgdHlwZTogXCJSZXN0RWxlbWVudFwiIH0sIG5ldyBTZXQ8c3RyaW5nPigpKTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBjb2xsZWN0UmVzdFBhdHRlcm5JZGVudGlmaWVycyhcclxuICBwYXR0ZXJuOiBFU1RyZWUuUGF0dGVybixcclxuICBpZGVudGlmaWVyczogU2V0PHN0cmluZz4sXHJcbik6IHZvaWQge1xyXG4gIGNvbGxlY3RQYXR0ZXJuSWRlbnRpZmllcnMoXHJcbiAgICAocGF0dGVybiBhcyBFU1RyZWUuUmVzdEVsZW1lbnQpLmFyZ3VtZW50LFxyXG4gICAgaWRlbnRpZmllcnMsXHJcbiAgKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIElnbm9yZXMgcGF0dGVybiBraW5kcyB0aGF0IGRvIG5vdCBkZWNsYXJlIGlkZW50aWZpZXJzLlxyXG4gKiBAcGFyYW0gcGF0dGVybiBQYXR0ZXJuIHRvIGlnbm9yZS5cclxuICogQHBhcmFtIGlkZW50aWZpZXJzIElkZW50aWZpZXIgc2V0IGxlZnQgdW5jaGFuZ2VkLlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGNvbGxlY3RVbnN1cHBvcnRlZFBhdHRlcm5JZGVudGlmaWVycyh7IG9iamVjdDogeyBuYW1lOiBcInZhbHVlXCIsIHR5cGU6IFwiSWRlbnRpZmllclwiIH0sIHByb3BlcnR5OiB7IG5hbWU6IFwibWVtYmVyXCIsIHR5cGU6IFwiSWRlbnRpZmllclwiIH0sIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IGZhbHNlLCB0eXBlOiBcIk1lbWJlckV4cHJlc3Npb25cIiB9LCBuZXcgU2V0PHN0cmluZz4oKSk7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gY29sbGVjdFVuc3VwcG9ydGVkUGF0dGVybklkZW50aWZpZXJzKFxyXG4gIHBhdHRlcm46IEVTVHJlZS5QYXR0ZXJuLFxyXG4gIGlkZW50aWZpZXJzOiBTZXQ8c3RyaW5nPixcclxuKTogdm9pZCB7XHJcbiAgdm9pZCBwYXR0ZXJuO1xyXG4gIHZvaWQgaWRlbnRpZmllcnM7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXRzIHRoZSBpZGVudGlmaWVyIGNvbGxlY3RvciBmb3Igb25lIHN1cHBvcnRlZCBwYXR0ZXJuIGtpbmQuXHJcbiAqIEBwYXJhbSBwYXR0ZXJuIFBhdHRlcm4gd2hvc2UgY29sbGVjdG9yIGlzIG5lZWRlZC5cclxuICogQHJldHVybnMgQ29sbGVjdG9yIGZvciB0aGUgcGF0dGVybiwgd2hlbiBvbmUgZXhpc3RzLlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGNvbnN0IGNvbGxlY3RvciA9IGdldFBhdHRlcm5JZGVudGlmaWVyQ29sbGVjdG9yKHsgbmFtZTogXCJ2YWx1ZVwiLCB0eXBlOiBcIklkZW50aWZpZXJcIiB9KTtcclxuICogdm9pZCBjb2xsZWN0b3I7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0UGF0dGVybklkZW50aWZpZXJDb2xsZWN0b3IoXHJcbiAgcGF0dGVybjogRVNUcmVlLlBhdHRlcm4sXHJcbik6IFBhdHRlcm5JZGVudGlmaWVyQ29sbGVjdG9yIHtcclxuICBzd2l0Y2ggKHBhdHRlcm4udHlwZSkge1xyXG4gICAgY2FzZSBcIkFycmF5UGF0dGVyblwiOiB7XHJcbiAgICAgIHJldHVybiBjb2xsZWN0QXJyYXlQYXR0ZXJuSWRlbnRpZmllcnM7XHJcbiAgICB9XHJcbiAgICBjYXNlIFwiQXNzaWdubWVudFBhdHRlcm5cIjoge1xyXG4gICAgICByZXR1cm4gY29sbGVjdEFzc2lnbm1lbnRQYXR0ZXJuSWRlbnRpZmllcnM7XHJcbiAgICB9XHJcbiAgICBjYXNlIFwiSWRlbnRpZmllclwiOiB7XHJcbiAgICAgIHJldHVybiBjb2xsZWN0SWRlbnRpZmllclBhdHRlcm5JZGVudGlmaWVycztcclxuICAgIH1cclxuICAgIGNhc2UgXCJNZW1iZXJFeHByZXNzaW9uXCI6IHtcclxuICAgICAgcmV0dXJuIGNvbGxlY3RVbnN1cHBvcnRlZFBhdHRlcm5JZGVudGlmaWVycztcclxuICAgIH1cclxuICAgIGNhc2UgXCJPYmplY3RQYXR0ZXJuXCI6IHtcclxuICAgICAgcmV0dXJuIGNvbGxlY3RPYmplY3RQYXR0ZXJuSWRlbnRpZmllcnM7XHJcbiAgICB9XHJcbiAgICBjYXNlIFwiUmVzdEVsZW1lbnRcIjoge1xyXG4gICAgICByZXR1cm4gY29sbGVjdFJlc3RQYXR0ZXJuSWRlbnRpZmllcnM7XHJcbiAgICB9XHJcbiAgICBkZWZhdWx0OiB7XHJcbiAgICAgIHJldHVybiBjb2xsZWN0VW5zdXBwb3J0ZWRQYXR0ZXJuSWRlbnRpZmllcnM7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgeyBjb2xsZWN0UGF0dGVybklkZW50aWZpZXJzIH07XHJcbiJdfQ==
@@ -0,0 +1,25 @@
1
+ import type * as ESTree from "estree";
2
+ import type { TestBlockAnalysis } from "../aaa/index.js";
3
+ /**
4
+ * Collects all identifiers referenced from the Assert phase.
5
+ * @param analysis Parsed test-block analysis.
6
+ * @returns Referenced identifier names from Assert statements.
7
+ * @example
8
+ * ```typescript
9
+ * getAssertReferencedIdentifiers({ statements: [] } as never);
10
+ * ```
11
+ */
12
+ declare function getAssertReferencedIdentifiers(analysis: TestBlockAnalysis): Set<string>;
13
+ /**
14
+ * Checks whether an Act-phase declaration is later referenced from Assert.
15
+ * @param assertReferencedIdentifiers Referenced identifiers collected from Assert.
16
+ * @param statement Statement to inspect.
17
+ * @returns True when one declared identifier is asserted later.
18
+ * @example
19
+ * ```typescript
20
+ * isActResultAsserted(new Set<string>(), { type: "ExpressionStatement" } as never);
21
+ * ```
22
+ */
23
+ declare function isActResultAsserted(assertReferencedIdentifiers: Set<string>, statement: ESTree.Statement): boolean;
24
+ export { getAssertReferencedIdentifiers, isActResultAsserted };
25
+ //# sourceMappingURL=phase-purity-identifiers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phase-purity-identifiers.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/enforce-aaa-phase-purity/phase-purity-identifiers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,MAAM,QAAQ,CAAC;AAEtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAsHhD;;;;;;;;GAQG;AACH,iBAAS,8BAA8B,CACrC,QAAQ,EAAE,iBAAiB,GAC1B,GAAG,CAAC,MAAM,CAAC,CAQb;AAED;;;;;;;;;GASG;AACH,iBAAS,mBAAmB,CAC1B,2BAA2B,EAAE,GAAG,CAAC,MAAM,CAAC,EACxC,SAAS,EAAE,MAAM,CAAC,SAAS,GAC1B,OAAO,CAQT;AAoBD,OAAO,EAAE,8BAA8B,EAAE,mBAAmB,EAAE,CAAC"}
@@ -0,0 +1,138 @@
1
+ import { collectPatternIdentifiers } from "./pattern-identifiers.js";
2
+ /**
3
+ * Collects referenced identifiers from one Assert-phase statement.
4
+ * @param statement Statement to inspect.
5
+ * @param identifiers Identifier set updated in place.
6
+ * @example
7
+ * ```typescript
8
+ * collectAssertStatementIdentifiers({ type: "ExpressionStatement" } as never, new Set<string>());
9
+ * ```
10
+ */
11
+ function collectAssertStatementIdentifiers(statement, identifiers) {
12
+ if (!statement.phases.includes("Assert")) {
13
+ return;
14
+ }
15
+ if (statement.node.type !== "VariableDeclaration") {
16
+ collectReferencedIdentifiers(statement.node, identifiers);
17
+ return;
18
+ }
19
+ for (const declaration of statement.node.declarations) {
20
+ if (declaration.init !== null && declaration.init !== void 0) {
21
+ collectReferencedIdentifiers(declaration.init, identifiers);
22
+ }
23
+ }
24
+ }
25
+ /**
26
+ * Collects referenced identifier names from an ESTree node.
27
+ * @param node Node to inspect.
28
+ * @param identifiers Identifier set updated in place.
29
+ * @example
30
+ * ```typescript
31
+ * collectReferencedIdentifiers({ name: "value", type: "Identifier" }, new Set<string>());
32
+ * ```
33
+ */
34
+ function collectReferencedIdentifiers(node, identifiers) {
35
+ if (node.type === "Identifier") {
36
+ identifiers.add(node.name);
37
+ return;
38
+ }
39
+ for (const [key, value] of Object.entries(node)) {
40
+ collectReferencedValue(key, value, identifiers);
41
+ }
42
+ }
43
+ /**
44
+ * Collects referenced identifiers from one object entry on an ESTree node.
45
+ * @param key Entry key being inspected.
46
+ * @param value Entry value being inspected.
47
+ * @param identifiers Identifier set updated in place.
48
+ * @example
49
+ * ```typescript
50
+ * collectReferencedValue("type", "Identifier", new Set<string>());
51
+ * ```
52
+ */
53
+ function collectReferencedValue(key, value, identifiers) {
54
+ if (key === "parent") {
55
+ return;
56
+ }
57
+ if (Array.isArray(value)) {
58
+ for (const item of value) {
59
+ if (isNode(item)) {
60
+ collectReferencedIdentifiers(item, identifiers);
61
+ }
62
+ }
63
+ return;
64
+ }
65
+ if (isNode(value)) {
66
+ collectReferencedIdentifiers(value, identifiers);
67
+ }
68
+ }
69
+ /**
70
+ * Gets identifiers declared by an Act-phase variable declaration.
71
+ * @param statement Statement to inspect.
72
+ * @returns Declared identifier names.
73
+ * @example
74
+ * ```typescript
75
+ * getActDeclaredIdentifiers({ declarations: [], kind: "const", type: "VariableDeclaration" } as never);
76
+ * ```
77
+ */
78
+ function getActDeclaredIdentifiers(statement) {
79
+ const identifiers = new Set();
80
+ if (statement.type !== "VariableDeclaration") {
81
+ return identifiers;
82
+ }
83
+ for (const declaration of statement.declarations) {
84
+ collectPatternIdentifiers(declaration.id, identifiers);
85
+ }
86
+ return identifiers;
87
+ }
88
+ /**
89
+ * Collects all identifiers referenced from the Assert phase.
90
+ * @param analysis Parsed test-block analysis.
91
+ * @returns Referenced identifier names from Assert statements.
92
+ * @example
93
+ * ```typescript
94
+ * getAssertReferencedIdentifiers({ statements: [] } as never);
95
+ * ```
96
+ */
97
+ function getAssertReferencedIdentifiers(analysis) {
98
+ const identifiers = new Set();
99
+ for (const statement of analysis.statements) {
100
+ collectAssertStatementIdentifiers(statement, identifiers);
101
+ }
102
+ return identifiers;
103
+ }
104
+ /**
105
+ * Checks whether an Act-phase declaration is later referenced from Assert.
106
+ * @param assertReferencedIdentifiers Referenced identifiers collected from Assert.
107
+ * @param statement Statement to inspect.
108
+ * @returns True when one declared identifier is asserted later.
109
+ * @example
110
+ * ```typescript
111
+ * isActResultAsserted(new Set<string>(), { type: "ExpressionStatement" } as never);
112
+ * ```
113
+ */
114
+ function isActResultAsserted(assertReferencedIdentifiers, statement) {
115
+ for (const identifier of getActDeclaredIdentifiers(statement)) {
116
+ if (assertReferencedIdentifiers.has(identifier)) {
117
+ return true;
118
+ }
119
+ }
120
+ return false;
121
+ }
122
+ /**
123
+ * Checks whether an unknown value is an ESTree node.
124
+ * @param value Unknown value to inspect.
125
+ * @returns True when the value has the shape of an ESTree node.
126
+ * @example
127
+ * ```typescript
128
+ * isNode({ type: "Identifier" });
129
+ * ```
130
+ */
131
+ function isNode(value) {
132
+ return (typeof value === "object" &&
133
+ value !== null &&
134
+ "type" in value &&
135
+ typeof value.type === "string");
136
+ }
137
+ export { getAssertReferencedIdentifiers, isActResultAsserted };
138
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhhc2UtcHVyaXR5LWlkZW50aWZpZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2RvbWFpbi90ZXN0aW5nL2VuZm9yY2UtYWFhLXBoYXNlLXB1cml0eS9waGFzZS1wdXJpdHktaWRlbnRpZmllcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFRbEU7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFTLGlDQUFpQyxDQUN4QyxTQUFrRCxFQUNsRCxXQUF3QjtJQUV4QixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUN6QyxPQUFPO0lBQ1QsQ0FBQztJQUVELElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUsscUJBQXFCLEVBQUUsQ0FBQztRQUNsRCw0QkFBNEIsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQzFELE9BQU87SUFDVCxDQUFDO0lBRUQsS0FBSyxNQUFNLFdBQVcsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RELElBQUksV0FBVyxDQUFDLElBQUksS0FBSyxJQUFJLElBQUksV0FBVyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzdELDRCQUE0QixDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDOUQsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFTLDRCQUE0QixDQUNuQyxJQUFpQixFQUNqQixXQUF3QjtJQUV4QixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssWUFBWSxFQUFFLENBQUM7UUFDL0IsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0IsT0FBTztJQUNULENBQUM7SUFFRCxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2hELHNCQUFzQixDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDbEQsQ0FBQztBQUNILENBQUM7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxTQUFTLHNCQUFzQixDQUM3QixHQUFXLEVBQ1gsS0FBYyxFQUNkLFdBQXdCO0lBRXhCLElBQUksR0FBRyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3JCLE9BQU87SUFDVCxDQUFDO0lBRUQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDekIsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN6QixJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNqQiw0QkFBNEIsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDbEQsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPO0lBQ1QsQ0FBQztJQUVELElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDbEIsNEJBQTRCLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ25ELENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFTLHlCQUF5QixDQUFDLFNBQTJCO0lBQzVELE1BQU0sV0FBVyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFFdEMsSUFBSSxTQUFTLENBQUMsSUFBSSxLQUFLLHFCQUFxQixFQUFFLENBQUM7UUFDN0MsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVELEtBQUssTUFBTSxXQUFXLElBQUksU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ2pELHlCQUF5QixDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVELE9BQU8sV0FBVyxDQUFDO0FBQ3JCLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQVMsOEJBQThCLENBQ3JDLFFBQTJCO0lBRTNCLE1BQU0sV0FBVyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFFdEMsS0FBSyxNQUFNLFNBQVMsSUFBSSxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDNUMsaUNBQWlDLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxPQUFPLFdBQVcsQ0FBQztBQUNyQixDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBUyxtQkFBbUIsQ0FDMUIsMkJBQXdDLEVBQ3hDLFNBQTJCO0lBRTNCLEtBQUssTUFBTSxVQUFVLElBQUkseUJBQXlCLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUM5RCxJQUFJLDJCQUEyQixDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ2hELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQVMsTUFBTSxDQUFDLEtBQWM7SUFDNUIsT0FBTyxDQUNMLE9BQU8sS0FBSyxLQUFLLFFBQVE7UUFDekIsS0FBSyxLQUFLLElBQUk7UUFDZCxNQUFNLElBQUksS0FBSztRQUNmLE9BQVEsS0FBdUIsQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUNsRCxDQUFDO0FBQ0osQ0FBQztBQUVELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxtQkFBbUIsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgKiBhcyBFU1RyZWUgZnJvbSBcImVzdHJlZVwiO1xyXG5cclxuaW1wb3J0IHR5cGUgeyBUZXN0QmxvY2tBbmFseXNpcyB9IGZyb20gXCIuLi9hYWFcIjtcclxuXHJcbmltcG9ydCB7IGNvbGxlY3RQYXR0ZXJuSWRlbnRpZmllcnMgfSBmcm9tIFwiLi9wYXR0ZXJuLWlkZW50aWZpZXJzXCI7XHJcblxyXG4vKiogVHlwZSBkZWZpbml0aW9uIGZvciBydWxlIGRhdGEuICovXHJcbmludGVyZmFjZSBOb2RlQ2FuZGlkYXRlIHtcclxuICAvKiogT3B0aW9uYWwgRVNUcmVlIG5vZGUgdHlwZSBtYXJrZXIuICovXHJcbiAgdHlwZT86IHVua25vd247XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDb2xsZWN0cyByZWZlcmVuY2VkIGlkZW50aWZpZXJzIGZyb20gb25lIEFzc2VydC1waGFzZSBzdGF0ZW1lbnQuXHJcbiAqIEBwYXJhbSBzdGF0ZW1lbnQgU3RhdGVtZW50IHRvIGluc3BlY3QuXHJcbiAqIEBwYXJhbSBpZGVudGlmaWVycyBJZGVudGlmaWVyIHNldCB1cGRhdGVkIGluIHBsYWNlLlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGNvbGxlY3RBc3NlcnRTdGF0ZW1lbnRJZGVudGlmaWVycyh7IHR5cGU6IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiIH0gYXMgbmV2ZXIsIG5ldyBTZXQ8c3RyaW5nPigpKTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBjb2xsZWN0QXNzZXJ0U3RhdGVtZW50SWRlbnRpZmllcnMoXHJcbiAgc3RhdGVtZW50OiBUZXN0QmxvY2tBbmFseXNpc1tcInN0YXRlbWVudHNcIl1bbnVtYmVyXSxcclxuICBpZGVudGlmaWVyczogU2V0PHN0cmluZz4sXHJcbik6IHZvaWQge1xyXG4gIGlmICghc3RhdGVtZW50LnBoYXNlcy5pbmNsdWRlcyhcIkFzc2VydFwiKSkge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgaWYgKHN0YXRlbWVudC5ub2RlLnR5cGUgIT09IFwiVmFyaWFibGVEZWNsYXJhdGlvblwiKSB7XHJcbiAgICBjb2xsZWN0UmVmZXJlbmNlZElkZW50aWZpZXJzKHN0YXRlbWVudC5ub2RlLCBpZGVudGlmaWVycyk7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIHN0YXRlbWVudC5ub2RlLmRlY2xhcmF0aW9ucykge1xyXG4gICAgaWYgKGRlY2xhcmF0aW9uLmluaXQgIT09IG51bGwgJiYgZGVjbGFyYXRpb24uaW5pdCAhPT0gdm9pZCAwKSB7XHJcbiAgICAgIGNvbGxlY3RSZWZlcmVuY2VkSWRlbnRpZmllcnMoZGVjbGFyYXRpb24uaW5pdCwgaWRlbnRpZmllcnMpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIENvbGxlY3RzIHJlZmVyZW5jZWQgaWRlbnRpZmllciBuYW1lcyBmcm9tIGFuIEVTVHJlZSBub2RlLlxyXG4gKiBAcGFyYW0gbm9kZSBOb2RlIHRvIGluc3BlY3QuXHJcbiAqIEBwYXJhbSBpZGVudGlmaWVycyBJZGVudGlmaWVyIHNldCB1cGRhdGVkIGluIHBsYWNlLlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGNvbGxlY3RSZWZlcmVuY2VkSWRlbnRpZmllcnMoeyBuYW1lOiBcInZhbHVlXCIsIHR5cGU6IFwiSWRlbnRpZmllclwiIH0sIG5ldyBTZXQ8c3RyaW5nPigpKTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBjb2xsZWN0UmVmZXJlbmNlZElkZW50aWZpZXJzKFxyXG4gIG5vZGU6IEVTVHJlZS5Ob2RlLFxyXG4gIGlkZW50aWZpZXJzOiBTZXQ8c3RyaW5nPixcclxuKTogdm9pZCB7XHJcbiAgaWYgKG5vZGUudHlwZSA9PT0gXCJJZGVudGlmaWVyXCIpIHtcclxuICAgIGlkZW50aWZpZXJzLmFkZChub2RlLm5hbWUpO1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobm9kZSkpIHtcclxuICAgIGNvbGxlY3RSZWZlcmVuY2VkVmFsdWUoa2V5LCB2YWx1ZSwgaWRlbnRpZmllcnMpO1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIENvbGxlY3RzIHJlZmVyZW5jZWQgaWRlbnRpZmllcnMgZnJvbSBvbmUgb2JqZWN0IGVudHJ5IG9uIGFuIEVTVHJlZSBub2RlLlxyXG4gKiBAcGFyYW0ga2V5IEVudHJ5IGtleSBiZWluZyBpbnNwZWN0ZWQuXHJcbiAqIEBwYXJhbSB2YWx1ZSBFbnRyeSB2YWx1ZSBiZWluZyBpbnNwZWN0ZWQuXHJcbiAqIEBwYXJhbSBpZGVudGlmaWVycyBJZGVudGlmaWVyIHNldCB1cGRhdGVkIGluIHBsYWNlLlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGNvbGxlY3RSZWZlcmVuY2VkVmFsdWUoXCJ0eXBlXCIsIFwiSWRlbnRpZmllclwiLCBuZXcgU2V0PHN0cmluZz4oKSk7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gY29sbGVjdFJlZmVyZW5jZWRWYWx1ZShcclxuICBrZXk6IHN0cmluZyxcclxuICB2YWx1ZTogdW5rbm93bixcclxuICBpZGVudGlmaWVyczogU2V0PHN0cmluZz4sXHJcbik6IHZvaWQge1xyXG4gIGlmIChrZXkgPT09IFwicGFyZW50XCIpIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHZhbHVlKSB7XHJcbiAgICAgIGlmIChpc05vZGUoaXRlbSkpIHtcclxuICAgICAgICBjb2xsZWN0UmVmZXJlbmNlZElkZW50aWZpZXJzKGl0ZW0sIGlkZW50aWZpZXJzKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgaWYgKGlzTm9kZSh2YWx1ZSkpIHtcclxuICAgIGNvbGxlY3RSZWZlcmVuY2VkSWRlbnRpZmllcnModmFsdWUsIGlkZW50aWZpZXJzKTtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXRzIGlkZW50aWZpZXJzIGRlY2xhcmVkIGJ5IGFuIEFjdC1waGFzZSB2YXJpYWJsZSBkZWNsYXJhdGlvbi5cclxuICogQHBhcmFtIHN0YXRlbWVudCBTdGF0ZW1lbnQgdG8gaW5zcGVjdC5cclxuICogQHJldHVybnMgRGVjbGFyZWQgaWRlbnRpZmllciBuYW1lcy5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBnZXRBY3REZWNsYXJlZElkZW50aWZpZXJzKHsgZGVjbGFyYXRpb25zOiBbXSwga2luZDogXCJjb25zdFwiLCB0eXBlOiBcIlZhcmlhYmxlRGVjbGFyYXRpb25cIiB9IGFzIG5ldmVyKTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRBY3REZWNsYXJlZElkZW50aWZpZXJzKHN0YXRlbWVudDogRVNUcmVlLlN0YXRlbWVudCk6IFNldDxzdHJpbmc+IHtcclxuICBjb25zdCBpZGVudGlmaWVycyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xyXG5cclxuICBpZiAoc3RhdGVtZW50LnR5cGUgIT09IFwiVmFyaWFibGVEZWNsYXJhdGlvblwiKSB7XHJcbiAgICByZXR1cm4gaWRlbnRpZmllcnM7XHJcbiAgfVxyXG5cclxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIHN0YXRlbWVudC5kZWNsYXJhdGlvbnMpIHtcclxuICAgIGNvbGxlY3RQYXR0ZXJuSWRlbnRpZmllcnMoZGVjbGFyYXRpb24uaWQsIGlkZW50aWZpZXJzKTtcclxuICB9XHJcblxyXG4gIHJldHVybiBpZGVudGlmaWVycztcclxufVxyXG5cclxuLyoqXHJcbiAqIENvbGxlY3RzIGFsbCBpZGVudGlmaWVycyByZWZlcmVuY2VkIGZyb20gdGhlIEFzc2VydCBwaGFzZS5cclxuICogQHBhcmFtIGFuYWx5c2lzIFBhcnNlZCB0ZXN0LWJsb2NrIGFuYWx5c2lzLlxyXG4gKiBAcmV0dXJucyBSZWZlcmVuY2VkIGlkZW50aWZpZXIgbmFtZXMgZnJvbSBBc3NlcnQgc3RhdGVtZW50cy5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBnZXRBc3NlcnRSZWZlcmVuY2VkSWRlbnRpZmllcnMoeyBzdGF0ZW1lbnRzOiBbXSB9IGFzIG5ldmVyKTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRBc3NlcnRSZWZlcmVuY2VkSWRlbnRpZmllcnMoXHJcbiAgYW5hbHlzaXM6IFRlc3RCbG9ja0FuYWx5c2lzLFxyXG4pOiBTZXQ8c3RyaW5nPiB7XHJcbiAgY29uc3QgaWRlbnRpZmllcnMgPSBuZXcgU2V0PHN0cmluZz4oKTtcclxuXHJcbiAgZm9yIChjb25zdCBzdGF0ZW1lbnQgb2YgYW5hbHlzaXMuc3RhdGVtZW50cykge1xyXG4gICAgY29sbGVjdEFzc2VydFN0YXRlbWVudElkZW50aWZpZXJzKHN0YXRlbWVudCwgaWRlbnRpZmllcnMpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGlkZW50aWZpZXJzO1xyXG59XHJcblxyXG4vKipcclxuICogQ2hlY2tzIHdoZXRoZXIgYW4gQWN0LXBoYXNlIGRlY2xhcmF0aW9uIGlzIGxhdGVyIHJlZmVyZW5jZWQgZnJvbSBBc3NlcnQuXHJcbiAqIEBwYXJhbSBhc3NlcnRSZWZlcmVuY2VkSWRlbnRpZmllcnMgUmVmZXJlbmNlZCBpZGVudGlmaWVycyBjb2xsZWN0ZWQgZnJvbSBBc3NlcnQuXHJcbiAqIEBwYXJhbSBzdGF0ZW1lbnQgU3RhdGVtZW50IHRvIGluc3BlY3QuXHJcbiAqIEByZXR1cm5zIFRydWUgd2hlbiBvbmUgZGVjbGFyZWQgaWRlbnRpZmllciBpcyBhc3NlcnRlZCBsYXRlci5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBpc0FjdFJlc3VsdEFzc2VydGVkKG5ldyBTZXQ8c3RyaW5nPigpLCB7IHR5cGU6IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiIH0gYXMgbmV2ZXIpO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIGlzQWN0UmVzdWx0QXNzZXJ0ZWQoXHJcbiAgYXNzZXJ0UmVmZXJlbmNlZElkZW50aWZpZXJzOiBTZXQ8c3RyaW5nPixcclxuICBzdGF0ZW1lbnQ6IEVTVHJlZS5TdGF0ZW1lbnQsXHJcbik6IGJvb2xlYW4ge1xyXG4gIGZvciAoY29uc3QgaWRlbnRpZmllciBvZiBnZXRBY3REZWNsYXJlZElkZW50aWZpZXJzKHN0YXRlbWVudCkpIHtcclxuICAgIGlmIChhc3NlcnRSZWZlcmVuY2VkSWRlbnRpZmllcnMuaGFzKGlkZW50aWZpZXIpKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG4vKipcclxuICogQ2hlY2tzIHdoZXRoZXIgYW4gdW5rbm93biB2YWx1ZSBpcyBhbiBFU1RyZWUgbm9kZS5cclxuICogQHBhcmFtIHZhbHVlIFVua25vd24gdmFsdWUgdG8gaW5zcGVjdC5cclxuICogQHJldHVybnMgVHJ1ZSB3aGVuIHRoZSB2YWx1ZSBoYXMgdGhlIHNoYXBlIG9mIGFuIEVTVHJlZSBub2RlLlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGlzTm9kZSh7IHR5cGU6IFwiSWRlbnRpZmllclwiIH0pO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIGlzTm9kZSh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIEVTVHJlZS5Ob2RlIHtcclxuICByZXR1cm4gKFxyXG4gICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXHJcbiAgICB2YWx1ZSAhPT0gbnVsbCAmJlxyXG4gICAgXCJ0eXBlXCIgaW4gdmFsdWUgJiZcclxuICAgIHR5cGVvZiAodmFsdWUgYXMgTm9kZUNhbmRpZGF0ZSkudHlwZSA9PT0gXCJzdHJpbmdcIlxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCB7IGdldEFzc2VydFJlZmVyZW5jZWRJZGVudGlmaWVycywgaXNBY3RSZXN1bHRBc3NlcnRlZCB9O1xyXG4iXX0=
@@ -0,0 +1,4 @@
1
+ /** Companion module for combined-section phase purity behavior spec coverage. */
2
+ declare const phasePurityReportingBehaviorCombinedCompanion: true;
3
+ export { phasePurityReportingBehaviorCombinedCompanion };
4
+ //# sourceMappingURL=phase-purity-reporting.behavior.combined.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phase-purity-reporting.behavior.combined.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.combined.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,QAAA,MAAM,6CAA6C,EAAG,IAAa,CAAC;AAEpE,OAAO,EAAE,6CAA6C,EAAE,CAAC"}
@@ -0,0 +1,4 @@
1
+ /** Companion module for combined-section phase purity behavior spec coverage. */
2
+ const phasePurityReportingBehaviorCombinedCompanion = true;
3
+ export { phasePurityReportingBehaviorCombinedCompanion };
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhhc2UtcHVyaXR5LXJlcG9ydGluZy5iZWhhdmlvci5jb21iaW5lZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb21haW4vdGVzdGluZy9lbmZvcmNlLWFhYS1waGFzZS1wdXJpdHkvcGhhc2UtcHVyaXR5LXJlcG9ydGluZy5iZWhhdmlvci5jb21iaW5lZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpRkFBaUY7QUFDakYsTUFBTSw2Q0FBNkMsR0FBRyxJQUFhLENBQUM7QUFFcEUsT0FBTyxFQUFFLDZDQUE2QyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogQ29tcGFuaW9uIG1vZHVsZSBmb3IgY29tYmluZWQtc2VjdGlvbiBwaGFzZSBwdXJpdHkgYmVoYXZpb3Igc3BlYyBjb3ZlcmFnZS4gKi9cclxuY29uc3QgcGhhc2VQdXJpdHlSZXBvcnRpbmdCZWhhdmlvckNvbWJpbmVkQ29tcGFuaW9uID0gdHJ1ZSBhcyBjb25zdDtcclxuXHJcbmV4cG9ydCB7IHBoYXNlUHVyaXR5UmVwb3J0aW5nQmVoYXZpb3JDb21iaW5lZENvbXBhbmlvbiB9O1xyXG4iXX0=
@@ -0,0 +1,4 @@
1
+ /** Companion module for phase purity reporting companion marker spec coverage. */
2
+ declare const phasePurityReportingBehaviorCompanionCompanion: true;
3
+ export { phasePurityReportingBehaviorCompanionCompanion };
4
+ //# sourceMappingURL=phase-purity-reporting.behavior.companion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phase-purity-reporting.behavior.companion.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.companion.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,QAAA,MAAM,8CAA8C,EAAG,IAAa,CAAC;AAErE,OAAO,EAAE,8CAA8C,EAAE,CAAC"}
@@ -0,0 +1,4 @@
1
+ /** Companion module for phase purity reporting companion marker spec coverage. */
2
+ const phasePurityReportingBehaviorCompanionCompanion = true;
3
+ export { phasePurityReportingBehaviorCompanionCompanion };
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhhc2UtcHVyaXR5LXJlcG9ydGluZy5iZWhhdmlvci5jb21wYW5pb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZG9tYWluL3Rlc3RpbmcvZW5mb3JjZS1hYWEtcGhhc2UtcHVyaXR5L3BoYXNlLXB1cml0eS1yZXBvcnRpbmcuYmVoYXZpb3IuY29tcGFuaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGtGQUFrRjtBQUNsRixNQUFNLDhDQUE4QyxHQUFHLElBQWEsQ0FBQztBQUVyRSxPQUFPLEVBQUUsOENBQThDLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBDb21wYW5pb24gbW9kdWxlIGZvciBwaGFzZSBwdXJpdHkgcmVwb3J0aW5nIGNvbXBhbmlvbiBtYXJrZXIgc3BlYyBjb3ZlcmFnZS4gKi9cclxuY29uc3QgcGhhc2VQdXJpdHlSZXBvcnRpbmdCZWhhdmlvckNvbXBhbmlvbkNvbXBhbmlvbiA9IHRydWUgYXMgY29uc3Q7XHJcblxyXG5leHBvcnQgeyBwaGFzZVB1cml0eVJlcG9ydGluZ0JlaGF2aW9yQ29tcGFuaW9uQ29tcGFuaW9uIH07XHJcbiJdfQ==
@@ -0,0 +1,4 @@
1
+ /** Companion marker for the phase-purity reporting behavior tests. */
2
+ declare const phasePurityReportingBehaviorCompanion = true;
3
+ export { phasePurityReportingBehaviorCompanion };
4
+ //# sourceMappingURL=phase-purity-reporting.behavior.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phase-purity-reporting.behavior.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,QAAA,MAAM,qCAAqC,OAAO,CAAC;AAEnD,OAAO,EAAE,qCAAqC,EAAE,CAAC"}
@@ -0,0 +1,4 @@
1
+ /** Companion marker for the phase-purity reporting behavior tests. */
2
+ const phasePurityReportingBehaviorCompanion = true;
3
+ export { phasePurityReportingBehaviorCompanion };
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhhc2UtcHVyaXR5LXJlcG9ydGluZy5iZWhhdmlvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb21haW4vdGVzdGluZy9lbmZvcmNlLWFhYS1waGFzZS1wdXJpdHkvcGhhc2UtcHVyaXR5LXJlcG9ydGluZy5iZWhhdmlvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxzRUFBc0U7QUFDdEUsTUFBTSxxQ0FBcUMsR0FBRyxJQUFJLENBQUM7QUFFbkQsT0FBTyxFQUFFLHFDQUFxQyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogQ29tcGFuaW9uIG1hcmtlciBmb3IgdGhlIHBoYXNlLXB1cml0eSByZXBvcnRpbmcgYmVoYXZpb3IgdGVzdHMuICovXHJcbmNvbnN0IHBoYXNlUHVyaXR5UmVwb3J0aW5nQmVoYXZpb3JDb21wYW5pb24gPSB0cnVlO1xyXG5cclxuZXhwb3J0IHsgcGhhc2VQdXJpdHlSZXBvcnRpbmdCZWhhdmlvckNvbXBhbmlvbiB9O1xyXG4iXX0=
@@ -0,0 +1,14 @@
1
+ import type { Rule } from "eslint";
2
+ import type { TestBlockAnalysis } from "../aaa/index.js";
3
+ /**
4
+ * Reports all enforce-aaa-phase-purity violations for one test block.
5
+ * @param context ESLint rule context.
6
+ * @param analysis Parsed test-block analysis.
7
+ * @example
8
+ * ```typescript
9
+ * reportPhasePurityViolations({ report() {} } as never, { sectionComments: [], statements: [] } as never);
10
+ * ```
11
+ */
12
+ declare function reportPhasePurityViolations(context: Rule.RuleContext, analysis: TestBlockAnalysis): void;
13
+ export { reportPhasePurityViolations };
14
+ //# sourceMappingURL=phase-purity-reporting.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phase-purity-reporting.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAEnC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAqNhD;;;;;;;;GAQG;AACH,iBAAS,2BAA2B,CAClC,OAAO,EAAE,IAAI,CAAC,WAAW,EACzB,QAAQ,EAAE,iBAAiB,GAC1B,IAAI,CAyBN;AAgCD,OAAO,EAAE,2BAA2B,EAAE,CAAC"}
@@ -0,0 +1,180 @@
1
+ import { hasAssertion, hasAsyncLogic, hasAwait, hasCapturableActResult, hasMutation, isMeaningfulActStatement, isSetupLikeStatement, isValidAssertStatement, } from "../aaa/index.js";
2
+ import { getAssertReferencedIdentifiers, isActResultAsserted, } from "./phase-purity-identifiers.js";
3
+ /**
4
+ * Collects the phase-purity state for one analyzed statement.
5
+ * @param assertReferencedIdentifiers Referenced identifiers collected from Assert.
6
+ * @param statement Statement entry to classify.
7
+ * @returns Phase-purity state for the statement.
8
+ * @example
9
+ * ```typescript
10
+ * const state = getStatementPurityState(new Set<string>(), { node: { type: "ExpressionStatement" } as never, phases: [] });
11
+ * void state;
12
+ * ```
13
+ */
14
+ function getStatementPurityState(assertReferencedIdentifiers, statement) {
15
+ const allowsArrange = statement.phases.includes("Arrange");
16
+ const allowsAct = statement.phases.includes("Act");
17
+ const allowsAssert = statement.phases.includes("Assert");
18
+ const containsAssertion = hasAssertion(statement.node);
19
+ const containsAsyncLogic = hasAsyncLogic(statement.node);
20
+ const containsAwait = hasAwait(statement.node);
21
+ const containsMutation = hasMutation(statement.node);
22
+ const isMeaningfulAct = isMeaningfulActStatement(statement.node);
23
+ const isMeaningfulActContent = isMeaningfulAct ||
24
+ hasCapturableActResult(statement.node) ||
25
+ isActResultAsserted(assertReferencedIdentifiers, statement.node);
26
+ return {
27
+ allowsAct,
28
+ allowsArrange,
29
+ allowsAssert,
30
+ containsAssertion,
31
+ containsAsyncLogic,
32
+ containsAwait,
33
+ containsMutation,
34
+ isMeaningfulAct,
35
+ isMeaningfulActContent,
36
+ isSetupLike: isSetupLikeStatement(statement.node),
37
+ isValidAssert: isValidAssertStatement(statement.node),
38
+ };
39
+ }
40
+ /**
41
+ * Checks whether the analyzed test block declares all AAA section comments.
42
+ * @param analysis Parsed test-block analysis.
43
+ * @returns True when Arrange, Act, and Assert are all present.
44
+ * @example
45
+ * ```typescript
46
+ * const complete = hasAllAaaSections({ sectionComments: [] } as never);
47
+ * void complete;
48
+ * ```
49
+ */
50
+ function hasAllAaaSections(analysis) {
51
+ return ["Arrange", "Act", "Assert"].every((phase) => analysis.sectionComments.some((sectionComment) => sectionComment.phases.includes(phase)));
52
+ }
53
+ /**
54
+ * Reports Act-only phase violations for one statement.
55
+ * @param context ESLint rule context.
56
+ * @param statement Statement entry to report against.
57
+ * @param purityState Phase-purity state for the statement.
58
+ * @example
59
+ * ```typescript
60
+ * reportActOnlyStatement({ report() {} } as never, { node: {} as never, phases: [] }, {} as never);
61
+ * ```
62
+ */
63
+ function reportActOnlyStatement(context, statement, purityState) {
64
+ if (purityState.containsAssertion && !purityState.allowsAssert) {
65
+ context.report({
66
+ messageId: "assertionOutsideAssert",
67
+ node: statement.node,
68
+ });
69
+ }
70
+ if (purityState.allowsAssert &&
71
+ purityState.containsAssertion &&
72
+ !purityState.isValidAssert) {
73
+ context.report({ messageId: "nonAssertionInAssert", node: statement.node });
74
+ }
75
+ if (purityState.isSetupLike && !purityState.isMeaningfulActContent) {
76
+ context.report({ messageId: "setupAfterAct", node: statement.node });
77
+ }
78
+ }
79
+ /**
80
+ * Reports Arrange-only phase violations for one statement.
81
+ * @param context ESLint rule context.
82
+ * @param statement Statement entry to report against.
83
+ * @param purityState Phase-purity state for the statement.
84
+ * @example
85
+ * ```typescript
86
+ * reportArrangeOnlyStatement({ report() {} } as never, { node: {} as never, phases: [] }, {} as never);
87
+ * ```
88
+ */
89
+ function reportArrangeOnlyStatement(context, statement, purityState) {
90
+ if (purityState.containsAssertion && !purityState.allowsAssert) {
91
+ context.report({
92
+ messageId: "assertionOutsideAssert",
93
+ node: statement.node,
94
+ });
95
+ }
96
+ if (purityState.containsAwait) {
97
+ context.report({ messageId: "awaitOutsideAct", node: statement.node });
98
+ }
99
+ if (purityState.containsAsyncLogic) {
100
+ context.report({ messageId: "asyncInArrange", node: statement.node });
101
+ }
102
+ if (purityState.isMeaningfulAct) {
103
+ context.report({ messageId: "actionInArrange", node: statement.node });
104
+ }
105
+ }
106
+ /**
107
+ * Reports Assert-only phase violations for one statement.
108
+ * @param context ESLint rule context.
109
+ * @param statement Statement entry to report against.
110
+ * @param purityState Phase-purity state for the statement.
111
+ * @example
112
+ * ```typescript
113
+ * reportAssertOnlyStatement({ report() {} } as never, { node: {} as never, phases: [] }, {} as never);
114
+ * ```
115
+ */
116
+ function reportAssertOnlyStatement(context, statement, purityState) {
117
+ if (purityState.containsAwait) {
118
+ context.report({ messageId: "awaitOutsideAct", node: statement.node });
119
+ }
120
+ if (purityState.containsMutation) {
121
+ context.report({ messageId: "mutationAfterAct", node: statement.node });
122
+ return;
123
+ }
124
+ if (!purityState.isValidAssert) {
125
+ context.report({ messageId: "nonAssertionInAssert", node: statement.node });
126
+ }
127
+ }
128
+ /**
129
+ * Reports all enforce-aaa-phase-purity violations for one test block.
130
+ * @param context ESLint rule context.
131
+ * @param analysis Parsed test-block analysis.
132
+ * @example
133
+ * ```typescript
134
+ * reportPhasePurityViolations({ report() {} } as never, { sectionComments: [], statements: [] } as never);
135
+ * ```
136
+ */
137
+ function reportPhasePurityViolations(context, analysis) {
138
+ if (!hasAllAaaSections(analysis)) {
139
+ return;
140
+ }
141
+ let hasMeaningfulAct = false;
142
+ const assertReferencedIdentifiers = getAssertReferencedIdentifiers(analysis);
143
+ for (const statement of analysis.statements) {
144
+ const purityState = getStatementPurityState(assertReferencedIdentifiers, statement);
145
+ hasMeaningfulAct ||=
146
+ purityState.allowsAct && purityState.isMeaningfulActContent;
147
+ reportStatementViolations(context, statement, purityState);
148
+ }
149
+ if (!hasMeaningfulAct) {
150
+ context.report({
151
+ messageId: "missingMeaningfulAct",
152
+ node: analysis.callExpression,
153
+ });
154
+ }
155
+ }
156
+ /**
157
+ * Reports any phase-purity violations for one statement.
158
+ * @param context ESLint rule context.
159
+ * @param statement Statement entry to report against.
160
+ * @param purityState Phase-purity state for the statement.
161
+ * @example
162
+ * ```typescript
163
+ * reportStatementViolations({ report() {} } as never, { node: {} as never, phases: [] }, {} as never);
164
+ * ```
165
+ */
166
+ function reportStatementViolations(context, statement, purityState) {
167
+ if (purityState.allowsArrange && !purityState.allowsAct) {
168
+ reportArrangeOnlyStatement(context, statement, purityState);
169
+ return;
170
+ }
171
+ if (purityState.allowsAct && !purityState.allowsArrange) {
172
+ reportActOnlyStatement(context, statement, purityState);
173
+ return;
174
+ }
175
+ if (purityState.allowsAssert && !purityState.allowsAct) {
176
+ reportAssertOnlyStatement(context, statement, purityState);
177
+ }
178
+ }
179
+ export { reportPhasePurityViolations };
180
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhhc2UtcHVyaXR5LXJlcG9ydGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb21haW4vdGVzdGluZy9lbmZvcmNlLWFhYS1waGFzZS1wdXJpdHkvcGhhc2UtcHVyaXR5LXJlcG9ydGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQ0wsWUFBWSxFQUNaLGFBQWEsRUFDYixRQUFRLEVBQ1Isc0JBQXNCLEVBQ3RCLFdBQVcsRUFDWCx3QkFBd0IsRUFDeEIsb0JBQW9CLEVBQ3BCLHNCQUFzQixHQUN2QixNQUFNLFFBQVEsQ0FBQztBQUNoQixPQUFPLEVBQ0wsOEJBQThCLEVBQzlCLG1CQUFtQixHQUNwQixNQUFNLDRCQUE0QixDQUFDO0FBc0NwQzs7Ozs7Ozs7OztHQVVHO0FBQ0gsU0FBUyx1QkFBdUIsQ0FDOUIsMkJBQXdDLEVBQ3hDLFNBQWtEO0lBRWxELE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzNELE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25ELE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3pELE1BQU0saUJBQWlCLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2RCxNQUFNLGtCQUFrQixHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekQsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQyxNQUFNLGdCQUFnQixHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckQsTUFBTSxlQUFlLEdBQUcsd0JBQXdCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pFLE1BQU0sc0JBQXNCLEdBQzFCLGVBQWU7UUFDZixzQkFBc0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQ3RDLG1CQUFtQixDQUFDLDJCQUEyQixFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVuRSxPQUFPO1FBQ0wsU0FBUztRQUNULGFBQWE7UUFDYixZQUFZO1FBQ1osaUJBQWlCO1FBQ2pCLGtCQUFrQjtRQUNsQixhQUFhO1FBQ2IsZ0JBQWdCO1FBQ2hCLGVBQWU7UUFDZixzQkFBc0I7UUFDdEIsV0FBVyxFQUFFLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7UUFDakQsYUFBYSxFQUFFLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7S0FDdEQsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxTQUFTLGlCQUFpQixDQUFDLFFBQTJCO0lBQ3BELE9BQU8sQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQ2xELFFBQVEsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FDL0MsY0FBYyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBYyxDQUFDLENBQy9DLENBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxTQUFTLHNCQUFzQixDQUM3QixPQUF5QixFQUN6QixTQUFrRCxFQUNsRCxXQUFpQztJQUVqQyxJQUFJLFdBQVcsQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMvRCxPQUFPLENBQUMsTUFBTSxDQUFDO1lBQ2IsU0FBUyxFQUFFLHdCQUF3QjtZQUNuQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUk7U0FDckIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELElBQ0UsV0FBVyxDQUFDLFlBQVk7UUFDeEIsV0FBVyxDQUFDLGlCQUFpQjtRQUM3QixDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQzFCLENBQUM7UUFDRCxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsU0FBUyxFQUFFLHNCQUFzQixFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBRUQsSUFBSSxXQUFXLENBQUMsV0FBVyxJQUFJLENBQUMsV0FBVyxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDbkUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBUywwQkFBMEIsQ0FDakMsT0FBeUIsRUFDekIsU0FBa0QsRUFDbEQsV0FBaUM7SUFFakMsSUFBSSxXQUFXLENBQUMsaUJBQWlCLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDL0QsT0FBTyxDQUFDLE1BQU0sQ0FBQztZQUNiLFNBQVMsRUFBRSx3QkFBd0I7WUFDbkMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJO1NBQ3JCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFJLFdBQVcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM5QixPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQsSUFBSSxXQUFXLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUNuQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQsSUFBSSxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDaEMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDekUsQ0FBQztBQUNILENBQUM7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxTQUFTLHlCQUF5QixDQUNoQyxPQUF5QixFQUN6QixTQUFrRCxFQUNsRCxXQUFpQztJQUVqQyxJQUFJLFdBQVcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM5QixPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQsSUFBSSxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUNqQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN4RSxPQUFPO0lBQ1QsQ0FBQztJQUVELElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDL0IsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLFNBQVMsRUFBRSxzQkFBc0IsRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDOUUsQ0FBQztBQUNILENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQVMsMkJBQTJCLENBQ2xDLE9BQXlCLEVBQ3pCLFFBQTJCO0lBRTNCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQ2pDLE9BQU87SUFDVCxDQUFDO0lBRUQsSUFBSSxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7SUFDN0IsTUFBTSwyQkFBMkIsR0FBRyw4QkFBOEIsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUU3RSxLQUFLLE1BQU0sU0FBUyxJQUFJLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUM1QyxNQUFNLFdBQVcsR0FBRyx1QkFBdUIsQ0FDekMsMkJBQTJCLEVBQzNCLFNBQVMsQ0FDVixDQUFDO1FBRUYsZ0JBQWdCO1lBQ2QsV0FBVyxDQUFDLFNBQVMsSUFBSSxXQUFXLENBQUMsc0JBQXNCLENBQUM7UUFDOUQseUJBQXlCLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDdEIsT0FBTyxDQUFDLE1BQU0sQ0FBQztZQUNiLFNBQVMsRUFBRSxzQkFBc0I7WUFDakMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxjQUFjO1NBQzlCLENBQUMsQ0FBQztJQUNMLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBUyx5QkFBeUIsQ0FDaEMsT0FBeUIsRUFDekIsU0FBa0QsRUFDbEQsV0FBaUM7SUFFakMsSUFBSSxXQUFXLENBQUMsYUFBYSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3hELDBCQUEwQixDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDNUQsT0FBTztJQUNULENBQUM7SUFFRCxJQUFJLFdBQVcsQ0FBQyxTQUFTLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDeEQsc0JBQXNCLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN4RCxPQUFPO0lBQ1QsQ0FBQztJQUVELElBQUksV0FBVyxDQUFDLFlBQVksSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUN2RCx5QkFBeUIsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzdELENBQUM7QUFDSCxDQUFDO0FBRUQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFJ1bGUgfSBmcm9tIFwiZXNsaW50XCI7XHJcblxyXG5pbXBvcnQgdHlwZSB7IFRlc3RCbG9ja0FuYWx5c2lzIH0gZnJvbSBcIi4uL2FhYVwiO1xyXG5cclxuaW1wb3J0IHtcclxuICBoYXNBc3NlcnRpb24sXHJcbiAgaGFzQXN5bmNMb2dpYyxcclxuICBoYXNBd2FpdCxcclxuICBoYXNDYXB0dXJhYmxlQWN0UmVzdWx0LFxyXG4gIGhhc011dGF0aW9uLFxyXG4gIGlzTWVhbmluZ2Z1bEFjdFN0YXRlbWVudCxcclxuICBpc1NldHVwTGlrZVN0YXRlbWVudCxcclxuICBpc1ZhbGlkQXNzZXJ0U3RhdGVtZW50LFxyXG59IGZyb20gXCIuLi9hYWFcIjtcclxuaW1wb3J0IHtcclxuICBnZXRBc3NlcnRSZWZlcmVuY2VkSWRlbnRpZmllcnMsXHJcbiAgaXNBY3RSZXN1bHRBc3NlcnRlZCxcclxufSBmcm9tIFwiLi9waGFzZS1wdXJpdHktaWRlbnRpZmllcnNcIjtcclxuXHJcbi8qKiBUeXBlIGRlZmluaXRpb24gZm9yIHJ1bGUgZGF0YS4gKi9cclxuaW50ZXJmYWNlIFN0YXRlbWVudFB1cml0eVN0YXRlIHtcclxuICAvKiogV2hldGhlciB0aGUgc3RhdGVtZW50IGJlbG9uZ3MgdG8gQWN0LiAqL1xyXG4gIGFsbG93c0FjdDogYm9vbGVhbjtcclxuXHJcbiAgLyoqIFdoZXRoZXIgdGhlIHN0YXRlbWVudCBiZWxvbmdzIHRvIEFycmFuZ2UuICovXHJcbiAgYWxsb3dzQXJyYW5nZTogYm9vbGVhbjtcclxuXHJcbiAgLyoqIFdoZXRoZXIgdGhlIHN0YXRlbWVudCBiZWxvbmdzIHRvIEFzc2VydC4gKi9cclxuICBhbGxvd3NBc3NlcnQ6IGJvb2xlYW47XHJcblxyXG4gIC8qKiBXaGV0aGVyIHRoZSBzdGF0ZW1lbnQgY29udGFpbnMgYW4gYXNzZXJ0aW9uLiAqL1xyXG4gIGNvbnRhaW5zQXNzZXJ0aW9uOiBib29sZWFuO1xyXG5cclxuICAvKiogV2hldGhlciB0aGUgc3RhdGVtZW50IGNvbnRhaW5zIGFzeW5jIGxvZ2ljLiAqL1xyXG4gIGNvbnRhaW5zQXN5bmNMb2dpYzogYm9vbGVhbjtcclxuXHJcbiAgLyoqIFdoZXRoZXIgdGhlIHN0YXRlbWVudCBjb250YWlucyBhbiBhd2FpdCBleHByZXNzaW9uLiAqL1xyXG4gIGNvbnRhaW5zQXdhaXQ6IGJvb2xlYW47XHJcblxyXG4gIC8qKiBXaGV0aGVyIHRoZSBzdGF0ZW1lbnQgbXV0YXRlcyBzdGF0ZS4gKi9cclxuICBjb250YWluc011dGF0aW9uOiBib29sZWFuO1xyXG5cclxuICAvKiogV2hldGhlciB0aGUgc3RhdGVtZW50IHBlcmZvcm1zIG1lYW5pbmdmdWwgQWN0IHdvcmsuICovXHJcbiAgaXNNZWFuaW5nZnVsQWN0OiBib29sZWFuO1xyXG5cclxuICAvKiogV2hldGhlciB0aGUgc3RhdGVtZW50IGNvdW50cyBhcyBtZWFuaW5nZnVsIEFjdCBjb250ZW50IG92ZXJhbGwuICovXHJcbiAgaXNNZWFuaW5nZnVsQWN0Q29udGVudDogYm9vbGVhbjtcclxuXHJcbiAgLyoqIFdoZXRoZXIgdGhlIHN0YXRlbWVudCBsb29rcyBsaWtlIHNldHVwLiAqL1xyXG4gIGlzU2V0dXBMaWtlOiBib29sZWFuO1xyXG5cclxuICAvKiogV2hldGhlciB0aGUgc3RhdGVtZW50IGlzIGEgdmFsaWQgYXNzZXJ0LXBoYXNlIHN0YXRlbWVudC4gKi9cclxuICBpc1ZhbGlkQXNzZXJ0OiBib29sZWFuO1xyXG59XHJcblxyXG4vKipcclxuICogQ29sbGVjdHMgdGhlIHBoYXNlLXB1cml0eSBzdGF0ZSBmb3Igb25lIGFuYWx5emVkIHN0YXRlbWVudC5cclxuICogQHBhcmFtIGFzc2VydFJlZmVyZW5jZWRJZGVudGlmaWVycyBSZWZlcmVuY2VkIGlkZW50aWZpZXJzIGNvbGxlY3RlZCBmcm9tIEFzc2VydC5cclxuICogQHBhcmFtIHN0YXRlbWVudCBTdGF0ZW1lbnQgZW50cnkgdG8gY2xhc3NpZnkuXHJcbiAqIEByZXR1cm5zIFBoYXNlLXB1cml0eSBzdGF0ZSBmb3IgdGhlIHN0YXRlbWVudC5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBjb25zdCBzdGF0ZSA9IGdldFN0YXRlbWVudFB1cml0eVN0YXRlKG5ldyBTZXQ8c3RyaW5nPigpLCB7IG5vZGU6IHsgdHlwZTogXCJFeHByZXNzaW9uU3RhdGVtZW50XCIgfSBhcyBuZXZlciwgcGhhc2VzOiBbXSB9KTtcclxuICogdm9pZCBzdGF0ZTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRTdGF0ZW1lbnRQdXJpdHlTdGF0ZShcclxuICBhc3NlcnRSZWZlcmVuY2VkSWRlbnRpZmllcnM6IFNldDxzdHJpbmc+LFxyXG4gIHN0YXRlbWVudDogVGVzdEJsb2NrQW5hbHlzaXNbXCJzdGF0ZW1lbnRzXCJdW251bWJlcl0sXHJcbik6IFN0YXRlbWVudFB1cml0eVN0YXRlIHtcclxuICBjb25zdCBhbGxvd3NBcnJhbmdlID0gc3RhdGVtZW50LnBoYXNlcy5pbmNsdWRlcyhcIkFycmFuZ2VcIik7XHJcbiAgY29uc3QgYWxsb3dzQWN0ID0gc3RhdGVtZW50LnBoYXNlcy5pbmNsdWRlcyhcIkFjdFwiKTtcclxuICBjb25zdCBhbGxvd3NBc3NlcnQgPSBzdGF0ZW1lbnQucGhhc2VzLmluY2x1ZGVzKFwiQXNzZXJ0XCIpO1xyXG4gIGNvbnN0IGNvbnRhaW5zQXNzZXJ0aW9uID0gaGFzQXNzZXJ0aW9uKHN0YXRlbWVudC5ub2RlKTtcclxuICBjb25zdCBjb250YWluc0FzeW5jTG9naWMgPSBoYXNBc3luY0xvZ2ljKHN0YXRlbWVudC5ub2RlKTtcclxuICBjb25zdCBjb250YWluc0F3YWl0ID0gaGFzQXdhaXQoc3RhdGVtZW50Lm5vZGUpO1xyXG4gIGNvbnN0IGNvbnRhaW5zTXV0YXRpb24gPSBoYXNNdXRhdGlvbihzdGF0ZW1lbnQubm9kZSk7XHJcbiAgY29uc3QgaXNNZWFuaW5nZnVsQWN0ID0gaXNNZWFuaW5nZnVsQWN0U3RhdGVtZW50KHN0YXRlbWVudC5ub2RlKTtcclxuICBjb25zdCBpc01lYW5pbmdmdWxBY3RDb250ZW50ID1cclxuICAgIGlzTWVhbmluZ2Z1bEFjdCB8fFxyXG4gICAgaGFzQ2FwdHVyYWJsZUFjdFJlc3VsdChzdGF0ZW1lbnQubm9kZSkgfHxcclxuICAgIGlzQWN0UmVzdWx0QXNzZXJ0ZWQoYXNzZXJ0UmVmZXJlbmNlZElkZW50aWZpZXJzLCBzdGF0ZW1lbnQubm9kZSk7XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICBhbGxvd3NBY3QsXHJcbiAgICBhbGxvd3NBcnJhbmdlLFxyXG4gICAgYWxsb3dzQXNzZXJ0LFxyXG4gICAgY29udGFpbnNBc3NlcnRpb24sXHJcbiAgICBjb250YWluc0FzeW5jTG9naWMsXHJcbiAgICBjb250YWluc0F3YWl0LFxyXG4gICAgY29udGFpbnNNdXRhdGlvbixcclxuICAgIGlzTWVhbmluZ2Z1bEFjdCxcclxuICAgIGlzTWVhbmluZ2Z1bEFjdENvbnRlbnQsXHJcbiAgICBpc1NldHVwTGlrZTogaXNTZXR1cExpa2VTdGF0ZW1lbnQoc3RhdGVtZW50Lm5vZGUpLFxyXG4gICAgaXNWYWxpZEFzc2VydDogaXNWYWxpZEFzc2VydFN0YXRlbWVudChzdGF0ZW1lbnQubm9kZSksXHJcbiAgfTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBhbmFseXplZCB0ZXN0IGJsb2NrIGRlY2xhcmVzIGFsbCBBQUEgc2VjdGlvbiBjb21tZW50cy5cclxuICogQHBhcmFtIGFuYWx5c2lzIFBhcnNlZCB0ZXN0LWJsb2NrIGFuYWx5c2lzLlxyXG4gKiBAcmV0dXJucyBUcnVlIHdoZW4gQXJyYW5nZSwgQWN0LCBhbmQgQXNzZXJ0IGFyZSBhbGwgcHJlc2VudC5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBjb25zdCBjb21wbGV0ZSA9IGhhc0FsbEFhYVNlY3Rpb25zKHsgc2VjdGlvbkNvbW1lbnRzOiBbXSB9IGFzIG5ldmVyKTtcclxuICogdm9pZCBjb21wbGV0ZTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBoYXNBbGxBYWFTZWN0aW9ucyhhbmFseXNpczogVGVzdEJsb2NrQW5hbHlzaXMpOiBib29sZWFuIHtcclxuICByZXR1cm4gW1wiQXJyYW5nZVwiLCBcIkFjdFwiLCBcIkFzc2VydFwiXS5ldmVyeSgocGhhc2UpID0+XHJcbiAgICBhbmFseXNpcy5zZWN0aW9uQ29tbWVudHMuc29tZSgoc2VjdGlvbkNvbW1lbnQpID0+XHJcbiAgICAgIHNlY3Rpb25Db21tZW50LnBoYXNlcy5pbmNsdWRlcyhwaGFzZSBhcyBuZXZlciksXHJcbiAgICApLFxyXG4gICk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXBvcnRzIEFjdC1vbmx5IHBoYXNlIHZpb2xhdGlvbnMgZm9yIG9uZSBzdGF0ZW1lbnQuXHJcbiAqIEBwYXJhbSBjb250ZXh0IEVTTGludCBydWxlIGNvbnRleHQuXHJcbiAqIEBwYXJhbSBzdGF0ZW1lbnQgU3RhdGVtZW50IGVudHJ5IHRvIHJlcG9ydCBhZ2FpbnN0LlxyXG4gKiBAcGFyYW0gcHVyaXR5U3RhdGUgUGhhc2UtcHVyaXR5IHN0YXRlIGZvciB0aGUgc3RhdGVtZW50LlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIHJlcG9ydEFjdE9ubHlTdGF0ZW1lbnQoeyByZXBvcnQoKSB7fSB9IGFzIG5ldmVyLCB7IG5vZGU6IHt9IGFzIG5ldmVyLCBwaGFzZXM6IFtdIH0sIHt9IGFzIG5ldmVyKTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiByZXBvcnRBY3RPbmx5U3RhdGVtZW50KFxyXG4gIGNvbnRleHQ6IFJ1bGUuUnVsZUNvbnRleHQsXHJcbiAgc3RhdGVtZW50OiBUZXN0QmxvY2tBbmFseXNpc1tcInN0YXRlbWVudHNcIl1bbnVtYmVyXSxcclxuICBwdXJpdHlTdGF0ZTogU3RhdGVtZW50UHVyaXR5U3RhdGUsXHJcbik6IHZvaWQge1xyXG4gIGlmIChwdXJpdHlTdGF0ZS5jb250YWluc0Fzc2VydGlvbiAmJiAhcHVyaXR5U3RhdGUuYWxsb3dzQXNzZXJ0KSB7XHJcbiAgICBjb250ZXh0LnJlcG9ydCh7XHJcbiAgICAgIG1lc3NhZ2VJZDogXCJhc3NlcnRpb25PdXRzaWRlQXNzZXJ0XCIsXHJcbiAgICAgIG5vZGU6IHN0YXRlbWVudC5ub2RlLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBpZiAoXHJcbiAgICBwdXJpdHlTdGF0ZS5hbGxvd3NBc3NlcnQgJiZcclxuICAgIHB1cml0eVN0YXRlLmNvbnRhaW5zQXNzZXJ0aW9uICYmXHJcbiAgICAhcHVyaXR5U3RhdGUuaXNWYWxpZEFzc2VydFxyXG4gICkge1xyXG4gICAgY29udGV4dC5yZXBvcnQoeyBtZXNzYWdlSWQ6IFwibm9uQXNzZXJ0aW9uSW5Bc3NlcnRcIiwgbm9kZTogc3RhdGVtZW50Lm5vZGUgfSk7XHJcbiAgfVxyXG5cclxuICBpZiAocHVyaXR5U3RhdGUuaXNTZXR1cExpa2UgJiYgIXB1cml0eVN0YXRlLmlzTWVhbmluZ2Z1bEFjdENvbnRlbnQpIHtcclxuICAgIGNvbnRleHQucmVwb3J0KHsgbWVzc2FnZUlkOiBcInNldHVwQWZ0ZXJBY3RcIiwgbm9kZTogc3RhdGVtZW50Lm5vZGUgfSk7XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogUmVwb3J0cyBBcnJhbmdlLW9ubHkgcGhhc2UgdmlvbGF0aW9ucyBmb3Igb25lIHN0YXRlbWVudC5cclxuICogQHBhcmFtIGNvbnRleHQgRVNMaW50IHJ1bGUgY29udGV4dC5cclxuICogQHBhcmFtIHN0YXRlbWVudCBTdGF0ZW1lbnQgZW50cnkgdG8gcmVwb3J0IGFnYWluc3QuXHJcbiAqIEBwYXJhbSBwdXJpdHlTdGF0ZSBQaGFzZS1wdXJpdHkgc3RhdGUgZm9yIHRoZSBzdGF0ZW1lbnQuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogcmVwb3J0QXJyYW5nZU9ubHlTdGF0ZW1lbnQoeyByZXBvcnQoKSB7fSB9IGFzIG5ldmVyLCB7IG5vZGU6IHt9IGFzIG5ldmVyLCBwaGFzZXM6IFtdIH0sIHt9IGFzIG5ldmVyKTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiByZXBvcnRBcnJhbmdlT25seVN0YXRlbWVudChcclxuICBjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0LFxyXG4gIHN0YXRlbWVudDogVGVzdEJsb2NrQW5hbHlzaXNbXCJzdGF0ZW1lbnRzXCJdW251bWJlcl0sXHJcbiAgcHVyaXR5U3RhdGU6IFN0YXRlbWVudFB1cml0eVN0YXRlLFxyXG4pOiB2b2lkIHtcclxuICBpZiAocHVyaXR5U3RhdGUuY29udGFpbnNBc3NlcnRpb24gJiYgIXB1cml0eVN0YXRlLmFsbG93c0Fzc2VydCkge1xyXG4gICAgY29udGV4dC5yZXBvcnQoe1xyXG4gICAgICBtZXNzYWdlSWQ6IFwiYXNzZXJ0aW9uT3V0c2lkZUFzc2VydFwiLFxyXG4gICAgICBub2RlOiBzdGF0ZW1lbnQubm9kZSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaWYgKHB1cml0eVN0YXRlLmNvbnRhaW5zQXdhaXQpIHtcclxuICAgIGNvbnRleHQucmVwb3J0KHsgbWVzc2FnZUlkOiBcImF3YWl0T3V0c2lkZUFjdFwiLCBub2RlOiBzdGF0ZW1lbnQubm9kZSB9KTtcclxuICB9XHJcblxyXG4gIGlmIChwdXJpdHlTdGF0ZS5jb250YWluc0FzeW5jTG9naWMpIHtcclxuICAgIGNvbnRleHQucmVwb3J0KHsgbWVzc2FnZUlkOiBcImFzeW5jSW5BcnJhbmdlXCIsIG5vZGU6IHN0YXRlbWVudC5ub2RlIH0pO1xyXG4gIH1cclxuXHJcbiAgaWYgKHB1cml0eVN0YXRlLmlzTWVhbmluZ2Z1bEFjdCkge1xyXG4gICAgY29udGV4dC5yZXBvcnQoeyBtZXNzYWdlSWQ6IFwiYWN0aW9uSW5BcnJhbmdlXCIsIG5vZGU6IHN0YXRlbWVudC5ub2RlIH0pO1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIFJlcG9ydHMgQXNzZXJ0LW9ubHkgcGhhc2UgdmlvbGF0aW9ucyBmb3Igb25lIHN0YXRlbWVudC5cclxuICogQHBhcmFtIGNvbnRleHQgRVNMaW50IHJ1bGUgY29udGV4dC5cclxuICogQHBhcmFtIHN0YXRlbWVudCBTdGF0ZW1lbnQgZW50cnkgdG8gcmVwb3J0IGFnYWluc3QuXHJcbiAqIEBwYXJhbSBwdXJpdHlTdGF0ZSBQaGFzZS1wdXJpdHkgc3RhdGUgZm9yIHRoZSBzdGF0ZW1lbnQuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogcmVwb3J0QXNzZXJ0T25seVN0YXRlbWVudCh7IHJlcG9ydCgpIHt9IH0gYXMgbmV2ZXIsIHsgbm9kZToge30gYXMgbmV2ZXIsIHBoYXNlczogW10gfSwge30gYXMgbmV2ZXIpO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIHJlcG9ydEFzc2VydE9ubHlTdGF0ZW1lbnQoXHJcbiAgY29udGV4dDogUnVsZS5SdWxlQ29udGV4dCxcclxuICBzdGF0ZW1lbnQ6IFRlc3RCbG9ja0FuYWx5c2lzW1wic3RhdGVtZW50c1wiXVtudW1iZXJdLFxyXG4gIHB1cml0eVN0YXRlOiBTdGF0ZW1lbnRQdXJpdHlTdGF0ZSxcclxuKTogdm9pZCB7XHJcbiAgaWYgKHB1cml0eVN0YXRlLmNvbnRhaW5zQXdhaXQpIHtcclxuICAgIGNvbnRleHQucmVwb3J0KHsgbWVzc2FnZUlkOiBcImF3YWl0T3V0c2lkZUFjdFwiLCBub2RlOiBzdGF0ZW1lbnQubm9kZSB9KTtcclxuICB9XHJcblxyXG4gIGlmIChwdXJpdHlTdGF0ZS5jb250YWluc011dGF0aW9uKSB7XHJcbiAgICBjb250ZXh0LnJlcG9ydCh7IG1lc3NhZ2VJZDogXCJtdXRhdGlvbkFmdGVyQWN0XCIsIG5vZGU6IHN0YXRlbWVudC5ub2RlIH0pO1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgaWYgKCFwdXJpdHlTdGF0ZS5pc1ZhbGlkQXNzZXJ0KSB7XHJcbiAgICBjb250ZXh0LnJlcG9ydCh7IG1lc3NhZ2VJZDogXCJub25Bc3NlcnRpb25JbkFzc2VydFwiLCBub2RlOiBzdGF0ZW1lbnQubm9kZSB9KTtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXBvcnRzIGFsbCBlbmZvcmNlLWFhYS1waGFzZS1wdXJpdHkgdmlvbGF0aW9ucyBmb3Igb25lIHRlc3QgYmxvY2suXHJcbiAqIEBwYXJhbSBjb250ZXh0IEVTTGludCBydWxlIGNvbnRleHQuXHJcbiAqIEBwYXJhbSBhbmFseXNpcyBQYXJzZWQgdGVzdC1ibG9jayBhbmFseXNpcy5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiByZXBvcnRQaGFzZVB1cml0eVZpb2xhdGlvbnMoeyByZXBvcnQoKSB7fSB9IGFzIG5ldmVyLCB7IHNlY3Rpb25Db21tZW50czogW10sIHN0YXRlbWVudHM6IFtdIH0gYXMgbmV2ZXIpO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIHJlcG9ydFBoYXNlUHVyaXR5VmlvbGF0aW9ucyhcclxuICBjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0LFxyXG4gIGFuYWx5c2lzOiBUZXN0QmxvY2tBbmFseXNpcyxcclxuKTogdm9pZCB7XHJcbiAgaWYgKCFoYXNBbGxBYWFTZWN0aW9ucyhhbmFseXNpcykpIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGxldCBoYXNNZWFuaW5nZnVsQWN0ID0gZmFsc2U7XHJcbiAgY29uc3QgYXNzZXJ0UmVmZXJlbmNlZElkZW50aWZpZXJzID0gZ2V0QXNzZXJ0UmVmZXJlbmNlZElkZW50aWZpZXJzKGFuYWx5c2lzKTtcclxuXHJcbiAgZm9yIChjb25zdCBzdGF0ZW1lbnQgb2YgYW5hbHlzaXMuc3RhdGVtZW50cykge1xyXG4gICAgY29uc3QgcHVyaXR5U3RhdGUgPSBnZXRTdGF0ZW1lbnRQdXJpdHlTdGF0ZShcclxuICAgICAgYXNzZXJ0UmVmZXJlbmNlZElkZW50aWZpZXJzLFxyXG4gICAgICBzdGF0ZW1lbnQsXHJcbiAgICApO1xyXG5cclxuICAgIGhhc01lYW5pbmdmdWxBY3QgfHw9XHJcbiAgICAgIHB1cml0eVN0YXRlLmFsbG93c0FjdCAmJiBwdXJpdHlTdGF0ZS5pc01lYW5pbmdmdWxBY3RDb250ZW50O1xyXG4gICAgcmVwb3J0U3RhdGVtZW50VmlvbGF0aW9ucyhjb250ZXh0LCBzdGF0ZW1lbnQsIHB1cml0eVN0YXRlKTtcclxuICB9XHJcblxyXG4gIGlmICghaGFzTWVhbmluZ2Z1bEFjdCkge1xyXG4gICAgY29udGV4dC5yZXBvcnQoe1xyXG4gICAgICBtZXNzYWdlSWQ6IFwibWlzc2luZ01lYW5pbmdmdWxBY3RcIixcclxuICAgICAgbm9kZTogYW5hbHlzaXMuY2FsbEV4cHJlc3Npb24sXHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXBvcnRzIGFueSBwaGFzZS1wdXJpdHkgdmlvbGF0aW9ucyBmb3Igb25lIHN0YXRlbWVudC5cclxuICogQHBhcmFtIGNvbnRleHQgRVNMaW50IHJ1bGUgY29udGV4dC5cclxuICogQHBhcmFtIHN0YXRlbWVudCBTdGF0ZW1lbnQgZW50cnkgdG8gcmVwb3J0IGFnYWluc3QuXHJcbiAqIEBwYXJhbSBwdXJpdHlTdGF0ZSBQaGFzZS1wdXJpdHkgc3RhdGUgZm9yIHRoZSBzdGF0ZW1lbnQuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogcmVwb3J0U3RhdGVtZW50VmlvbGF0aW9ucyh7IHJlcG9ydCgpIHt9IH0gYXMgbmV2ZXIsIHsgbm9kZToge30gYXMgbmV2ZXIsIHBoYXNlczogW10gfSwge30gYXMgbmV2ZXIpO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIHJlcG9ydFN0YXRlbWVudFZpb2xhdGlvbnMoXHJcbiAgY29udGV4dDogUnVsZS5SdWxlQ29udGV4dCxcclxuICBzdGF0ZW1lbnQ6IFRlc3RCbG9ja0FuYWx5c2lzW1wic3RhdGVtZW50c1wiXVtudW1iZXJdLFxyXG4gIHB1cml0eVN0YXRlOiBTdGF0ZW1lbnRQdXJpdHlTdGF0ZSxcclxuKTogdm9pZCB7XHJcbiAgaWYgKHB1cml0eVN0YXRlLmFsbG93c0FycmFuZ2UgJiYgIXB1cml0eVN0YXRlLmFsbG93c0FjdCkge1xyXG4gICAgcmVwb3J0QXJyYW5nZU9ubHlTdGF0ZW1lbnQoY29udGV4dCwgc3RhdGVtZW50LCBwdXJpdHlTdGF0ZSk7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBpZiAocHVyaXR5U3RhdGUuYWxsb3dzQWN0ICYmICFwdXJpdHlTdGF0ZS5hbGxvd3NBcnJhbmdlKSB7XHJcbiAgICByZXBvcnRBY3RPbmx5U3RhdGVtZW50KGNvbnRleHQsIHN0YXRlbWVudCwgcHVyaXR5U3RhdGUpO1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgaWYgKHB1cml0eVN0YXRlLmFsbG93c0Fzc2VydCAmJiAhcHVyaXR5U3RhdGUuYWxsb3dzQWN0KSB7XHJcbiAgICByZXBvcnRBc3NlcnRPbmx5U3RhdGVtZW50KGNvbnRleHQsIHN0YXRlbWVudCwgcHVyaXR5U3RhdGUpO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IHsgcmVwb3J0UGhhc2VQdXJpdHlWaW9sYXRpb25zIH07XHJcbiJdfQ==