@codeperfect/eslint-plugin 2.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 (118) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/codeperfect-eslint-plugin-1.0.0.tgz +0 -0
  3. package/dist/domain/architecture/consistent-barrel-files/exports-only-rule.d.ts.map +1 -1
  4. package/dist/domain/architecture/consistent-barrel-files/exports-only-rule.js +8 -3
  5. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.d.ts.map +1 -1
  6. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.js +8 -3
  7. package/dist/domain/architecture/consistent-barrel-files/rule.d.ts.map +1 -1
  8. package/dist/domain/architecture/consistent-barrel-files/rule.js +12 -4
  9. package/dist/domain/core/no-multiple-declarators/rule.d.ts.map +1 -1
  10. package/dist/domain/core/no-multiple-declarators/rule.js +6 -3
  11. package/dist/domain/core/prefer-interface-types/rule.d.ts.map +1 -1
  12. package/dist/domain/core/prefer-interface-types/rule.js +6 -3
  13. package/dist/domain/core/prefer-interface-types/test-helpers.d.ts.map +1 -1
  14. package/dist/domain/core/prefer-interface-types/test-helpers.js +1 -1
  15. package/dist/domain/custom-rule-documentation.d.ts +2 -0
  16. package/dist/domain/custom-rule-documentation.d.ts.map +1 -1
  17. package/dist/domain/custom-rule-documentation.js +2 -1
  18. package/dist/domain/docs/no-interface-member-docs/comment-utilities-test-helpers.d.ts.map +1 -1
  19. package/dist/domain/docs/no-interface-member-docs/comment-utilities-test-helpers.js +1 -1
  20. package/dist/domain/docs/no-interface-member-docs/parameter-utilities.js +1 -1
  21. package/dist/domain/docs/no-interface-member-docs/rule.d.ts.map +1 -1
  22. package/dist/domain/docs/no-interface-member-docs/rule.js +6 -3
  23. package/dist/domain/docs/no-interface-member-docs/test-helpers.js +1 -1
  24. package/dist/domain/docs/require-example-language/create-fixer.js +1 -1
  25. package/dist/domain/docs/require-example-language/fixes.d.ts.map +1 -1
  26. package/dist/domain/docs/require-example-language/fixes.js +1 -1
  27. package/dist/domain/docs/require-example-language/reporting.js +1 -1
  28. package/dist/domain/docs/require-example-language/rule.d.ts.map +1 -1
  29. package/dist/domain/docs/require-example-language/rule.js +6 -3
  30. package/dist/domain/docs/single-line-jsdoc/rule.d.ts +1 -2
  31. package/dist/domain/docs/single-line-jsdoc/rule.d.ts.map +1 -1
  32. package/dist/domain/docs/single-line-jsdoc/rule.edge-cases.js +1 -1
  33. package/dist/domain/docs/single-line-jsdoc/rule.js +11 -6
  34. package/dist/domain/docs/single-line-jsdoc/rule.node-lookups.js +1 -1
  35. package/dist/domain/testing/aaa/analyzer.analysis.d.ts +14 -72
  36. package/dist/domain/testing/aaa/analyzer.analysis.d.ts.map +1 -1
  37. package/dist/domain/testing/aaa/analyzer.analysis.helpers.d.ts +144 -3
  38. package/dist/domain/testing/aaa/analyzer.analysis.helpers.d.ts.map +1 -1
  39. package/dist/domain/testing/aaa/analyzer.analysis.helpers.js +202 -3
  40. package/dist/domain/testing/aaa/analyzer.analysis.js +36 -201
  41. package/dist/domain/testing/aaa/analyzer.analysis.unsupported.d.ts +4 -0
  42. package/dist/domain/testing/aaa/analyzer.analysis.unsupported.d.ts.map +1 -0
  43. package/dist/domain/testing/aaa/analyzer.analysis.unsupported.js +4 -0
  44. package/dist/domain/testing/aaa/analyzer.assertions.d.ts +16 -91
  45. package/dist/domain/testing/aaa/analyzer.assertions.d.ts.map +1 -1
  46. package/dist/domain/testing/aaa/analyzer.assertions.destructured.d.ts +4 -0
  47. package/dist/domain/testing/aaa/analyzer.assertions.destructured.d.ts.map +1 -0
  48. package/dist/domain/testing/aaa/analyzer.assertions.destructured.js +4 -0
  49. package/dist/domain/testing/aaa/analyzer.assertions.helpers.d.ts +95 -0
  50. package/dist/domain/testing/aaa/analyzer.assertions.helpers.d.ts.map +1 -0
  51. package/dist/domain/testing/aaa/analyzer.assertions.helpers.js +185 -0
  52. package/dist/domain/testing/aaa/analyzer.assertions.js +32 -282
  53. package/dist/domain/testing/aaa/analyzer.assertions.operands.d.ts +64 -0
  54. package/dist/domain/testing/aaa/analyzer.assertions.operands.d.ts.map +1 -0
  55. package/dist/domain/testing/aaa/analyzer.assertions.operands.js +105 -0
  56. package/dist/domain/testing/aaa/analyzer.classification.d.ts +14 -73
  57. package/dist/domain/testing/aaa/analyzer.classification.d.ts.map +1 -1
  58. package/dist/domain/testing/aaa/analyzer.classification.helpers.d.ts +77 -0
  59. package/dist/domain/testing/aaa/analyzer.classification.helpers.d.ts.map +1 -0
  60. package/dist/domain/testing/aaa/analyzer.classification.helpers.js +203 -0
  61. package/dist/domain/testing/aaa/analyzer.classification.js +30 -200
  62. package/dist/domain/testing/aaa/analyzer.classification.mutations.d.ts +4 -0
  63. package/dist/domain/testing/aaa/analyzer.classification.mutations.d.ts.map +1 -0
  64. package/dist/domain/testing/aaa/analyzer.classification.mutations.js +4 -0
  65. package/dist/domain/testing/aaa/analyzer.classification.traversal.d.ts +15 -0
  66. package/dist/domain/testing/aaa/analyzer.classification.traversal.d.ts.map +1 -0
  67. package/dist/domain/testing/aaa/analyzer.classification.traversal.js +34 -0
  68. package/dist/domain/testing/aaa/analyzer.d.ts +2 -2
  69. package/dist/domain/testing/aaa/analyzer.d.ts.map +1 -1
  70. package/dist/domain/testing/aaa/analyzer.super.d.ts +8 -9
  71. package/dist/domain/testing/aaa/analyzer.super.d.ts.map +1 -1
  72. package/dist/domain/testing/aaa/analyzer.super.helpers.d.ts +27 -0
  73. package/dist/domain/testing/aaa/analyzer.super.helpers.d.ts.map +1 -0
  74. package/dist/domain/testing/aaa/analyzer.super.helpers.js +66 -0
  75. package/dist/domain/testing/aaa/analyzer.super.js +43 -60
  76. package/dist/domain/testing/assert-actual-expected-names/rule.d.ts.map +1 -1
  77. package/dist/domain/testing/assert-actual-expected-names/rule.js +6 -3
  78. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.combined.d.ts +4 -0
  79. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.combined.d.ts.map +1 -0
  80. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.combined.js +4 -0
  81. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.companion.d.ts +4 -0
  82. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.companion.d.ts.map +1 -0
  83. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.companion.js +4 -0
  84. package/dist/domain/testing/enforce-aaa-phase-purity/rule-test-helpers.js +1 -1
  85. package/dist/domain/testing/enforce-aaa-phase-purity/rule.d.ts.map +1 -1
  86. package/dist/domain/testing/enforce-aaa-phase-purity/rule.js +6 -3
  87. package/dist/domain/testing/enforce-aaa-structure/rule.d.ts.map +1 -1
  88. package/dist/domain/testing/enforce-aaa-structure/rule.js +6 -3
  89. package/dist/domain/testing/prefer-vi-mocked-import/rule.d.ts.map +1 -1
  90. package/dist/domain/testing/prefer-vi-mocked-import/rule.js +6 -3
  91. package/dist/domain/testing/prefer-vitest-incremental-casts/ast-helpers.d.ts +12 -1
  92. package/dist/domain/testing/prefer-vitest-incremental-casts/ast-helpers.d.ts.map +1 -1
  93. package/dist/domain/testing/prefer-vitest-incremental-casts/ast-helpers.js +26 -2
  94. package/dist/domain/testing/prefer-vitest-incremental-casts/match-input.d.ts.map +1 -1
  95. package/dist/domain/testing/prefer-vitest-incremental-casts/match-input.js +13 -10
  96. package/dist/domain/testing/prefer-vitest-incremental-casts/match.d.ts.map +1 -1
  97. package/dist/domain/testing/prefer-vitest-incremental-casts/match.js +8 -2
  98. package/dist/domain/testing/prefer-vitest-incremental-casts/replacement-helpers.d.ts.map +1 -1
  99. package/dist/domain/testing/prefer-vitest-incremental-casts/replacement-helpers.js +9 -5
  100. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.d.ts.map +1 -1
  101. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.js +28 -2
  102. package/dist/domain/testing/prefer-vitest-incremental-casts/type-helpers.d.ts.map +1 -1
  103. package/dist/domain/testing/prefer-vitest-incremental-casts/type-helpers.js +1 -1
  104. package/dist/domain/testing/prefer-vitest-incremental-casts/types.d.ts +9 -25
  105. package/dist/domain/testing/prefer-vitest-incremental-casts/types.d.ts.map +1 -1
  106. package/dist/domain/testing/prefer-vitest-incremental-casts/types.js +1 -1
  107. package/dist/domain/testing/require-aaa-sections/rule.d.ts.map +1 -1
  108. package/dist/domain/testing/require-aaa-sections/rule.js +9 -4
  109. package/dist/domain/testing/require-aaa-sections/rule.reporting.d.ts.map +1 -1
  110. package/dist/domain/testing/require-aaa-sections/rule.reporting.js +3 -4
  111. package/dist/domain/testing/require-act-result-capture/rule.d.ts.map +1 -1
  112. package/dist/domain/testing/require-act-result-capture/rule.js +6 -3
  113. package/dist/domain/testing/require-test-companion/rule.d.ts.map +1 -1
  114. package/dist/domain/testing/require-test-companion/rule.js +31 -6
  115. package/dist/domain/testing/single-act-statement/rule.d.ts.map +1 -1
  116. package/dist/domain/testing/single-act-statement/rule.js +6 -3
  117. package/dist/infrastructure/presets.js +1 -1
  118. package/package.json +37 -29
@@ -1,201 +1,31 @@
1
- import { getStatementExpression, hasAssertion, isActionExpression, unwrapExpression, } from "./analyzer.assertions.js";
2
- import { arrayMutationMethods, getExpressionName, getInvokedName, isCallableExpression, isLocatedComment, isUtilityConstructor, isUtilityNamedCall, isUtilityNamespaceCall, visitNode, voidLikeMethodNames, voidLikeNamePattern, } from "./analyzer.super.js";
3
- /**
4
- * Checks for async logic.
5
- * @param statement Input statement value.
6
- * @returns Return value output.
7
- * @example
8
- * ```typescript
9
- * hasAsyncLogic(statement);
10
- * ```
11
- */
12
- function hasAsyncLogic(statement) {
13
- let foundAsyncLogic = false;
14
- visitNode(statement, (node) => {
15
- if (node.type === "AwaitExpression") {
16
- foundAsyncLogic = true;
17
- return;
18
- }
19
- if (node.type === "CallExpression" &&
20
- node.callee.type === "MemberExpression" &&
21
- node.callee.property.type === "Identifier" &&
22
- ["catch", "finally", "then"].includes(node.callee.property.name)) {
23
- foundAsyncLogic = true;
24
- return;
25
- }
26
- if (node.type === "NewExpression" &&
27
- getExpressionName(node.callee) === "Promise") {
28
- foundAsyncLogic = true;
29
- }
30
- });
31
- return foundAsyncLogic;
32
- }
33
- /**
34
- * Checks for await usage.
35
- * @param statement Input statement value.
36
- * @returns Return value output.
37
- * @example
38
- * ```typescript
39
- * hasAwait(statement);
40
- * ```
41
- */
42
- function hasAwait(statement) {
43
- let foundAwait = false;
44
- visitNode(statement, (node) => {
45
- if (node.type === "AwaitExpression") {
46
- foundAwait = true;
47
- }
48
- });
49
- return foundAwait;
50
- }
51
- /**
52
- * Checks for blank lines before comments.
53
- * @param sourceText Input sourceText value.
54
- * @param comment Input comment value.
55
- * @returns Return value output.
56
- * @example
57
- * ```typescript
58
- * hasBlankLineBeforeComment(sourceText, comment);
59
- * ```
60
- */
61
- function hasBlankLineBeforeComment(sourceText, comment) {
62
- if (!isLocatedComment(comment)) {
63
- return true;
64
- }
65
- const lines = sourceText.split(/\r\n|\n/u);
66
- const previousLine = lines[comment.loc.start.line - 2];
67
- return previousLine === void 0 || previousLine.trim().length === 0;
68
- }
69
- /**
70
- * Checks for capturable Act results.
71
- * @param statement Input statement value.
72
- * @returns Return value output.
73
- * @example
74
- * ```typescript
75
- * hasCapturableActResult(statement);
76
- * ```
77
- */
78
- function hasCapturableActResult(statement) {
79
- if (statement.type !== "ExpressionStatement") {
80
- return false;
81
- }
82
- const expression = unwrapExpression(statement.expression);
83
- if (!isActionExpression(expression) || isUtilityLikeExpression(expression)) {
84
- return false;
85
- }
86
- const calleeName = getInvokedName(expression);
87
- return (calleeName === void 0 ||
88
- (!voidLikeMethodNames.has(calleeName) &&
89
- !voidLikeNamePattern.test(calleeName)));
90
- }
91
- /**
92
- * Checks for mutation.
93
- * @param statement Input statement value.
94
- * @returns Return value output.
95
- * @example
96
- * ```typescript
97
- * hasMutation(statement);
98
- * ```
99
- */
100
- function hasMutation(statement) {
101
- let foundMutation = false;
102
- visitNode(statement, (node) => {
103
- if (node.type === "AssignmentExpression" ||
104
- node.type === "UpdateExpression" ||
105
- node.type === "UnaryExpression") {
106
- if (node.type !== "UnaryExpression" || node.operator === "delete") {
107
- foundMutation = true;
108
- }
109
- return;
110
- }
111
- if (node.type === "CallExpression" &&
112
- node.callee.type === "MemberExpression" &&
113
- node.callee.property.type === "Identifier" &&
114
- arrayMutationMethods.has(node.callee.property.name)) {
115
- foundMutation = true;
116
- }
117
- });
118
- return foundMutation;
119
- }
120
- /**
121
- * Checks for meaningful Act statements.
122
- * @param statement Input statement value.
123
- * @returns Return value output.
124
- * @example
125
- * ```typescript
126
- * isMeaningfulActStatement(statement);
127
- * ```
128
- */
129
- function isMeaningfulActStatement(statement) {
130
- const expression = getStatementExpression(statement);
131
- if (expression === void 0) {
132
- return false;
133
- }
134
- return (isActionExpression(expression) &&
135
- !isUtilityLikeExpression(expression) &&
136
- !hasAssertion(statement));
137
- }
138
- /**
139
- * Checks for rule create calls.
140
- * @param expression Input expression value.
141
- * @returns Return value output.
142
- * @example
143
- * ```typescript
144
- * isRuleCreateInvocation(expression);
145
- * ```
146
- */
147
- function isRuleCreateInvocation(expression) {
148
- return (expression.type === "CallExpression" &&
149
- expression.callee.type === "MemberExpression" &&
150
- expression.callee.object.type === "Identifier" &&
151
- expression.callee.property.type === "Identifier" &&
152
- expression.callee.property.name === "create" &&
153
- expression.callee.object.name.endsWith("Rule"));
154
- }
155
- /**
156
- * Checks for setup-like statements.
157
- * @param statement Input statement value.
158
- * @returns Return value output.
159
- * @example
160
- * ```typescript
161
- * isSetupLikeStatement(statement);
162
- * ```
163
- */
164
- function isSetupLikeStatement(statement) {
165
- if (statement.type === "VariableDeclaration") {
166
- return statement.declarations.every((declaration) => {
167
- if (declaration.init === null) {
168
- return true;
169
- }
170
- const init = unwrapExpression(declaration.init);
171
- return !isActionExpression(init) || isUtilityLikeExpression(init);
172
- });
173
- }
174
- const expression = getStatementExpression(statement);
175
- return expression !== void 0 && isUtilityLikeExpression(expression);
176
- }
177
- /**
178
- * Checks for utility-like expressions.
179
- * @param expression Input expression value.
180
- * @returns Return value output.
181
- * @example
182
- * ```typescript
183
- * isUtilityLikeExpression(expression);
184
- * ```
185
- */
186
- function isUtilityLikeExpression(expression) {
187
- const unwrappedExpression = unwrapExpression(expression);
188
- if (!isCallableExpression(unwrappedExpression)) {
189
- return false;
190
- }
191
- const calleeName = getExpressionName(unwrappedExpression.callee);
192
- if (calleeName === void 0) {
193
- return false;
194
- }
195
- return (!isRuleCreateInvocation(unwrappedExpression) &&
196
- (isUtilityConstructor(unwrappedExpression, calleeName) ||
197
- isUtilityNamedCall(calleeName) ||
198
- isUtilityNamespaceCall(unwrappedExpression)));
199
- }
1
+ import { hasAsyncLogic as hasAsyncLogicImplementation, hasAwait as hasAwaitImplementation, hasBlankLineBeforeComment as hasBlankLineBeforeCommentImplementation, hasCapturableActResult as hasCapturableActResultImplementation, hasMutation as hasMutationImplementation, isMeaningfulActStatement as isMeaningfulActStatementImplementation, isSetupLikeStatement as isSetupLikeStatementImplementation, } from "./analyzer.classification.helpers.js";
2
+ /**
3
+ * Creates a local forwarding function for an imported analyzer helper.
4
+ * @template TParameters Forwarded parameter tuple.
5
+ * @template TResult Forwarded return type.
6
+ * @param implementation Imported helper implementation.
7
+ * @returns Local function that forwards all arguments to the implementation.
8
+ * @example
9
+ * ```typescript
10
+ * const localHelper = forward(implementation);
11
+ * ```
12
+ */
13
+ function forward(implementation) {
14
+ return (...parameters) => implementation(...parameters);
15
+ }
16
+ /** Checks whether a statement contains any async or await logic. */
17
+ const hasAsyncLogic = forward(hasAsyncLogicImplementation);
18
+ /** Checks whether a node contains an `await` expression. */
19
+ const hasAwait = forward(hasAwaitImplementation);
20
+ /** Checks whether there is a blank line immediately before a comment node. */
21
+ const hasBlankLineBeforeComment = forward(hasBlankLineBeforeCommentImplementation);
22
+ /** Checks whether an Act statement produces a result worth capturing. */
23
+ const hasCapturableActResult = forward(hasCapturableActResultImplementation);
24
+ /** Checks whether a statement performs an observable state mutation. */
25
+ const hasMutation = forward(hasMutationImplementation);
26
+ /** Checks whether a statement is a meaningful Act step (not setup or assertion). */
27
+ const isMeaningfulActStatement = forward(isMeaningfulActStatementImplementation);
28
+ /** Checks whether a statement looks like an Arrange-phase setup step. */
29
+ const isSetupLikeStatement = forward(isSetupLikeStatementImplementation);
200
30
  export { hasAsyncLogic, hasAwait, hasBlankLineBeforeComment, hasCapturableActResult, hasMutation, isMeaningfulActStatement, isSetupLikeStatement, };
201
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbHl6ZXIuY2xhc3NpZmljYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZG9tYWluL3Rlc3RpbmcvYWFhL2FuYWx5emVyLmNsYXNzaWZpY2F0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsWUFBWSxFQUNaLGtCQUFrQixFQUNsQixnQkFBZ0IsR0FDakIsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQixPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLGlCQUFpQixFQUNqQixjQUFjLEVBQ2Qsb0JBQW9CLEVBQ3BCLGdCQUFnQixFQUNoQixvQkFBb0IsRUFDcEIsa0JBQWtCLEVBQ2xCLHNCQUFzQixFQUN0QixTQUFTLEVBQ1QsbUJBQW1CLEVBQ25CLG1CQUFtQixHQUNwQixNQUFNLGtCQUFrQixDQUFDO0FBRTFCOzs7Ozs7OztHQVFHO0FBQ0gsU0FBUyxhQUFhLENBQUMsU0FBMkI7SUFDaEQsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDO0lBRTVCLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUM1QixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssaUJBQWlCLEVBQUUsQ0FBQztZQUNwQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1lBQ3ZCLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFDRSxJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFnQjtZQUM5QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxrQkFBa0I7WUFDdkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLFlBQVk7WUFDMUMsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFDaEUsQ0FBQztZQUNELGVBQWUsR0FBRyxJQUFJLENBQUM7WUFDdkIs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QyxDQUFDLENBQy9DLENBQUM7QUFDSixDQUFDO0FBRUQsT0FBTyxFQUNMLGFBQWEsRUFDYixRQUFRLEVBQ1IseUJBQXlCLEVBQ3pCLHNCQUFzQixFQUN0QixXQUFXLEVBQ1gsd0JBQXdCLEVBQ3hCLG9CQUFvQixHQUNyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgKiBhcyBFU1RyZWUgZnJvbSBcImVzdHJlZVwiO1xyXG5cclxuaW1wb3J0IHR5cGUgeyBTb3VyY2VDb21tZW50IH0gZnJvbSBcIi4vdHlwZXNcIjtcclxuXHJcbmltcG9ydCB7XHJcbiAgZ2V0U3RhdGVtZW50RXhwcmVzc2lvbixcclxuICBoYXNBc3NlcnRpb24sXHJcbiAgaXNBY3Rpb25FeHByZXNzaW9uLFxyXG4gIHVud3JhcEV4cHJlc3Npb24sXHJcbn0gZnJvbSBcIi4vYW5hbHl6ZXIuYXNzZXJ0aW9uc1wiO1xyXG5pbXBvcnQge1xyXG4gIGFycmF5TXV0YXRpb25NZXRob2RzLFxyXG4gIGdldEV4cHJlc3Npb25OYW1lLFxyXG4gIGdldEludm9rZWROYW1lLFxyXG4gIGlzQ2FsbGFibGVFeHByZXNzaW9uLFxyXG4gIGlzTG9jYXRlZENvbW1lbnQsXHJcbiAgaXNVdGlsaXR5Q29uc3RydWN0b3IsXHJcbiAgaXNVdGlsaXR5TmFtZWRDYWxsLFxyXG4gIGlzVXRpbGl0eU5hbWVzcGFjZUNhbGwsXHJcbiAgdmlzaXROb2RlLFxyXG4gIHZvaWRMaWtlTWV0aG9kTmFtZXMsXHJcbiAgdm9pZExpa2VOYW1lUGF0dGVybixcclxufSBmcm9tIFwiLi9hbmFseXplci5zdXBlclwiO1xyXG5cclxuLyoqXHJcbiAqIENoZWNrcyBmb3IgYXN5bmMgbG9naWMuXHJcbiAqIEBwYXJhbSBzdGF0ZW1lbnQgSW5wdXQgc3RhdGVtZW50IHZhbHVlLlxyXG4gKiBAcmV0dXJucyBSZXR1cm4gdmFsdWUgb3V0cHV0LlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGhhc0FzeW5jTG9naWMoc3RhdGVtZW50KTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBoYXNBc3luY0xvZ2ljKHN0YXRlbWVudDogRVNUcmVlLlN0YXRlbWVudCk6IGJvb2xlYW4ge1xyXG4gIGxldCBmb3VuZEFzeW5jTG9naWMgPSBmYWxzZTtcclxuXHJcbiAgdmlzaXROb2RlKHN0YXRlbWVudCwgKG5vZGUpID0+IHtcclxuICAgIGlmIChub2RlLnR5cGUgPT09IFwiQXdhaXRFeHByZXNzaW9uXCIpIHtcclxuICAgICAgZm91bmRBc3luY0xvZ2ljID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChcclxuICAgICAgbm9kZS50eXBlID09PSBcIkNhbGxFeHByZXNzaW9uXCIgJiZcclxuICAgICAgbm9kZS5jYWxsZWUudHlwZSA9PT0gXCJNZW1iZXJFeHByZXNzaW9uXCIgJiZcclxuICAgICAgbm9kZS5jYWxsZWUucHJvcGVydHkudHlwZSA9PT0gXCJJZGVudGlmaWVyXCIgJiZcclxuICAgICAgW1wiY2F0Y2hcIiwgXCJmaW5hbGx5XCIsIFwidGhlblwiXS5pbmNsdWRlcyhub2RlLmNhbGxlZS5wcm9wZXJ0eS5uYW1lKVxyXG4gICAgKSB7XHJcbiAgICAgIGZvdW5kQXN5bmNMb2dpYyA9IHRydWU7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIG5vZGUudHlwZSA9PT0gXCJOZXdFeHByZXNzaW9uXCIgJiZcclxuICAgICAgZ2V0RXhwcmVzc2lvbk5hbWUobm9kZS5jYWxsZWUpID09PSBcIlByb21pc2VcIlxyXG4gICAgKSB7XHJcbiAgICAgIGZvdW5kQXN5bmNMb2dpYyA9IHRydWU7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIHJldHVybiBmb3VuZEFzeW5jTG9naWM7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDaGVja3MgZm9yIGF3YWl0IHVzYWdlLlxyXG4gKiBAcGFyYW0gc3RhdGVtZW50IElucHV0IHN0YXRlbWVudCB2YWx1ZS5cclxuICogQHJldHVybnMgUmV0dXJuIHZhbHVlIG91dHB1dC5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBoYXNBd2FpdChzdGF0ZW1lbnQpO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIGhhc0F3YWl0KHN0YXRlbWVudDogRVNUcmVlLlN0YXRlbWVudCk6IGJvb2xlYW4ge1xyXG4gIGxldCBmb3VuZEF3YWl0ID0gZmFsc2U7XHJcblxyXG4gIHZpc2l0Tm9kZShzdGF0ZW1lbnQsIChub2RlKSA9PiB7XHJcbiAgICBpZiAobm9kZS50eXBlID09PSBcIkF3YWl0RXhwcmVzc2lvblwiKSB7XHJcbiAgICAgIGZvdW5kQXdhaXQgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICByZXR1cm4gZm91bmRBd2FpdDtcclxufVxyXG5cclxuLyoqXHJcbiAqIENoZWNrcyBmb3IgYmxhbmsgbGluZXMgYmVmb3JlIGNvbW1lbnRzLlxyXG4gKiBAcGFyYW0gc291cmNlVGV4dCBJbnB1dCBzb3VyY2VUZXh0IHZhbHVlLlxyXG4gKiBAcGFyYW0gY29tbWVudCBJbnB1dCBjb21tZW50IHZhbHVlLlxyXG4gKiBAcmV0dXJucyBSZXR1cm4gdmFsdWUgb3V0cHV0LlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGhhc0JsYW5rTGluZUJlZm9yZUNvbW1lbnQoc291cmNlVGV4dCwgY29tbWVudCk7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gaGFzQmxhbmtMaW5lQmVmb3JlQ29tbWVudChcclxuICBzb3VyY2VUZXh0OiBzdHJpbmcsXHJcbiAgY29tbWVudDogU291cmNlQ29tbWVudCxcclxuKTogYm9vbGVhbiB7XHJcbiAgaWYgKCFpc0xvY2F0ZWRDb21tZW50KGNvbW1lbnQpKSB7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGNvbnN0IGxpbmVzID0gc291cmNlVGV4dC5zcGxpdCgvXFxyXFxufFxcbi91KTtcclxuICBjb25zdCBwcmV2aW91c0xpbmUgPSBsaW5lc1tjb21tZW50LmxvYy5zdGFydC5saW5lIC0gMl07XHJcblxyXG4gIHJldHVybiBwcmV2aW91c0xpbmUgPT09IHZvaWQgMCB8fCBwcmV2aW91c0xpbmUudHJpbSgpLmxlbmd0aCA9PT0gMDtcclxufVxyXG5cclxuLyoqXHJcbiAqIENoZWNrcyBmb3IgY2FwdHVyYWJsZSBBY3QgcmVzdWx0cy5cclxuICogQHBhcmFtIHN0YXRlbWVudCBJbnB1dCBzdGF0ZW1lbnQgdmFsdWUuXHJcbiAqIEByZXR1cm5zIFJldHVybiB2YWx1ZSBvdXRwdXQuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogaGFzQ2FwdHVyYWJsZUFjdFJlc3VsdChzdGF0ZW1lbnQpO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIGhhc0NhcHR1cmFibGVBY3RSZXN1bHQoc3RhdGVtZW50OiBFU1RyZWUuU3RhdGVtZW50KTogYm9vbGVhbiB7XHJcbiAgaWYgKHN0YXRlbWVudC50eXBlICE9PSBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIikge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgZXhwcmVzc2lvbiA9IHVud3JhcEV4cHJlc3Npb24oc3RhdGVtZW50LmV4cHJlc3Npb24pO1xyXG4gIGlmICghaXNBY3Rpb25FeHByZXNzaW9uKGV4cHJlc3Npb24pIHx8IGlzVXRpbGl0eUxpa2VFeHByZXNzaW9uKGV4cHJlc3Npb24pKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBjb25zdCBjYWxsZWVOYW1lID0gZ2V0SW52b2tlZE5hbWUoXHJcbiAgICBleHByZXNzaW9uIGFzIEVTVHJlZS5DYWxsRXhwcmVzc2lvbiB8IEVTVHJlZS5OZXdFeHByZXNzaW9uLFxyXG4gICk7XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICBjYWxsZWVOYW1lID09PSB2b2lkIDAgfHxcclxuICAgICghdm9pZExpa2VNZXRob2ROYW1lcy5oYXMoY2FsbGVlTmFtZSkgJiZcclxuICAgICAgIXZvaWRMaWtlTmFtZVBhdHRlcm4udGVzdChjYWxsZWVOYW1lKSlcclxuICApO1xyXG59XHJcblxyXG4vKipcclxuICogQ2hlY2tzIGZvciBtdXRhdGlvbi5cclxuICogQHBhcmFtIHN0YXRlbWVudCBJbnB1dCBzdGF0ZW1lbnQgdmFsdWUuXHJcbiAqIEByZXR1cm5zIFJldHVybiB2YWx1ZSBvdXRwdXQuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogaGFzTXV0YXRpb24oc3RhdGVtZW50KTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBoYXNNdXRhdGlvbihzdGF0ZW1lbnQ6IEVTVHJlZS5TdGF0ZW1lbnQpOiBib29sZWFuIHtcclxuICBsZXQgZm91bmRNdXRhdGlvbiA9IGZhbHNlO1xyXG5cclxuICB2aXNpdE5vZGUoc3RhdGVtZW50LCAobm9kZSkgPT4ge1xyXG4gICAgaWYgKFxyXG4gICAgICBub2RlLnR5cGUgPT09IFwiQXNzaWdubWVudEV4cHJlc3Npb25cIiB8fFxyXG4gICAgICBub2RlLnR5cGUgPT09IFwiVXBkYXRlRXhwcmVzc2lvblwiIHx8XHJcbiAgICAgIG5vZGUudHlwZSA9PT0gXCJVbmFyeUV4cHJlc3Npb25cIlxyXG4gICAgKSB7XHJcbiAgICAgIGlmIChub2RlLnR5cGUgIT09IFwiVW5hcnlFeHByZXNzaW9uXCIgfHwgbm9kZS5vcGVyYXRvciA9PT0gXCJkZWxldGVcIikge1xyXG4gICAgICAgIGZvdW5kTXV0YXRpb24gPSB0cnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICBub2RlLnR5cGUgPT09IFwiQ2FsbEV4cHJlc3Npb25cIiAmJlxyXG4gICAgICBub2RlLmNhbGxlZS50eXBlID09PSBcIk1lbWJlckV4cHJlc3Npb25cIiAmJlxyXG4gICAgICBub2RlLmNhbGxlZS5wcm9wZXJ0eS50eXBlID09PSBcIklkZW50aWZpZXJcIiAmJlxyXG4gICAgICBhcnJheU11dGF0aW9uTWV0aG9kcy5oYXMobm9kZS5jYWxsZWUucHJvcGVydHkubmFtZSlcclxuICAgICkge1xyXG4gICAgICBmb3VuZE11dGF0aW9uID0gdHJ1ZTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgcmV0dXJuIGZvdW5kTXV0YXRpb247XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDaGVja3MgZm9yIG1lYW5pbmdmdWwgQWN0IHN0YXRlbWVudHMuXHJcbiAqIEBwYXJhbSBzdGF0ZW1lbnQgSW5wdXQgc3RhdGVtZW50IHZhbHVlLlxyXG4gKiBAcmV0dXJucyBSZXR1cm4gdmFsdWUgb3V0cHV0LlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGlzTWVhbmluZ2Z1bEFjdFN0YXRlbWVudChzdGF0ZW1lbnQpO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIGlzTWVhbmluZ2Z1bEFjdFN0YXRlbWVudChzdGF0ZW1lbnQ6IEVTVHJlZS5TdGF0ZW1lbnQpOiBib29sZWFuIHtcclxuICBjb25zdCBleHByZXNzaW9uID0gZ2V0U3RhdGVtZW50RXhwcmVzc2lvbihzdGF0ZW1lbnQpO1xyXG4gIGlmIChleHByZXNzaW9uID09PSB2b2lkIDApIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICBpc0FjdGlvbkV4cHJlc3Npb24oZXhwcmVzc2lvbikgJiZcclxuICAgICFpc1V0aWxpdHlMaWtlRXhwcmVzc2lvbihleHByZXNzaW9uKSAmJlxyXG4gICAgIWhhc0Fzc2VydGlvbihzdGF0ZW1lbnQpXHJcbiAgKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENoZWNrcyBmb3IgcnVsZSBjcmVhdGUgY2FsbHMuXHJcbiAqIEBwYXJhbSBleHByZXNzaW9uIElucHV0IGV4cHJlc3Npb24gdmFsdWUuXHJcbiAqIEByZXR1cm5zIFJldHVybiB2YWx1ZSBvdXRwdXQuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogaXNSdWxlQ3JlYXRlSW52b2NhdGlvbihleHByZXNzaW9uKTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBpc1J1bGVDcmVhdGVJbnZvY2F0aW9uKFxyXG4gIGV4cHJlc3Npb246IEVTVHJlZS5DYWxsRXhwcmVzc2lvbiB8IEVTVHJlZS5OZXdFeHByZXNzaW9uLFxyXG4pOiBib29sZWFuIHtcclxuICByZXR1cm4gKFxyXG4gICAgZXhwcmVzc2lvbi50eXBlID09PSBcIkNhbGxFeHByZXNzaW9uXCIgJiZcclxuICAgIGV4cHJlc3Npb24uY2FsbGVlLnR5cGUgPT09IFwiTWVtYmVyRXhwcmVzc2lvblwiICYmXHJcbiAgICBleHByZXNzaW9uLmNhbGxlZS5vYmplY3QudHlwZSA9PT0gXCJJZGVudGlmaWVyXCIgJiZcclxuICAgIGV4cHJlc3Npb24uY2FsbGVlLnByb3BlcnR5LnR5cGUgPT09IFwiSWRlbnRpZmllclwiICYmXHJcbiAgICBleHByZXNzaW9uLmNhbGxlZS5wcm9wZXJ0eS5uYW1lID09PSBcImNyZWF0ZVwiICYmXHJcbiAgICBleHByZXNzaW9uLmNhbGxlZS5vYmplY3QubmFtZS5lbmRzV2l0aChcIlJ1bGVcIilcclxuICApO1xyXG59XHJcblxyXG4vKipcclxuICogQ2hlY2tzIGZvciBzZXR1cC1saWtlIHN0YXRlbWVudHMuXHJcbiAqIEBwYXJhbSBzdGF0ZW1lbnQgSW5wdXQgc3RhdGVtZW50IHZhbHVlLlxyXG4gKiBAcmV0dXJucyBSZXR1cm4gdmFsdWUgb3V0cHV0LlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGlzU2V0dXBMaWtlU3RhdGVtZW50KHN0YXRlbWVudCk7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gaXNTZXR1cExpa2VTdGF0ZW1lbnQoc3RhdGVtZW50OiBFU1RyZWUuU3RhdGVtZW50KTogYm9vbGVhbiB7XHJcbiAgaWYgKHN0YXRlbWVudC50eXBlID09PSBcIlZhcmlhYmxlRGVjbGFyYXRpb25cIikge1xyXG4gICAgcmV0dXJuIHN0YXRlbWVudC5kZWNsYXJhdGlvbnMuZXZlcnkoKGRlY2xhcmF0aW9uKSA9PiB7XHJcbiAgICAgIGlmIChkZWNsYXJhdGlvbi5pbml0ID09PSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGluaXQgPSB1bndyYXBFeHByZXNzaW9uKGRlY2xhcmF0aW9uLmluaXQpO1xyXG5cclxuICAgICAgcmV0dXJuICFpc0FjdGlvbkV4cHJlc3Npb24oaW5pdCkgfHwgaXNVdGlsaXR5TGlrZUV4cHJlc3Npb24oaW5pdCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNvbnN0IGV4cHJlc3Npb24gPSBnZXRTdGF0ZW1lbnRFeHByZXNzaW9uKHN0YXRlbWVudCk7XHJcblxyXG4gIHJldHVybiBleHByZXNzaW9uICE9PSB2b2lkIDAgJiYgaXNVdGlsaXR5TGlrZUV4cHJlc3Npb24oZXhwcmVzc2lvbik7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDaGVja3MgZm9yIHV0aWxpdHktbGlrZSBleHByZXNzaW9ucy5cclxuICogQHBhcmFtIGV4cHJlc3Npb24gSW5wdXQgZXhwcmVzc2lvbiB2YWx1ZS5cclxuICogQHJldHVybnMgUmV0dXJuIHZhbHVlIG91dHB1dC5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBpc1V0aWxpdHlMaWtlRXhwcmVzc2lvbihleHByZXNzaW9uKTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBpc1V0aWxpdHlMaWtlRXhwcmVzc2lvbihcclxuICBleHByZXNzaW9uOiBFU1RyZWUuRXhwcmVzc2lvbiB8IHVuZGVmaW5lZCxcclxuKTogYm9vbGVhbiB7XHJcbiAgY29uc3QgdW53cmFwcGVkRXhwcmVzc2lvbiA9IHVud3JhcEV4cHJlc3Npb24oZXhwcmVzc2lvbik7XHJcbiAgaWYgKCFpc0NhbGxhYmxlRXhwcmVzc2lvbih1bndyYXBwZWRFeHByZXNzaW9uKSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgY2FsbGVlTmFtZSA9IGdldEV4cHJlc3Npb25OYW1lKHVud3JhcHBlZEV4cHJlc3Npb24uY2FsbGVlKTtcclxuICBpZiAoY2FsbGVlTmFtZSA9PT0gdm9pZCAwKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gKFxyXG4gICAgIWlzUnVsZUNyZWF0ZUludm9jYXRpb24odW53cmFwcGVkRXhwcmVzc2lvbikgJiZcclxuICAgIChpc1V0aWxpdHlDb25zdHJ1Y3Rvcih1bndyYXBwZWRFeHByZXNzaW9uLCBjYWxsZWVOYW1lKSB8fFxyXG4gICAgICBpc1V0aWxpdHlOYW1lZENhbGwoY2FsbGVlTmFtZSkgfHxcclxuICAgICAgaXNVdGlsaXR5TmFtZXNwYWNlQ2FsbCh1bndyYXBwZWRFeHByZXNzaW9uKSlcclxuICApO1xyXG59XHJcblxyXG5leHBvcnQge1xyXG4gIGhhc0FzeW5jTG9naWMsXHJcbiAgaGFzQXdhaXQsXHJcbiAgaGFzQmxhbmtMaW5lQmVmb3JlQ29tbWVudCxcclxuICBoYXNDYXB0dXJhYmxlQWN0UmVzdWx0LFxyXG4gIGhhc011dGF0aW9uLFxyXG4gIGlzTWVhbmluZ2Z1bEFjdFN0YXRlbWVudCxcclxuICBpc1NldHVwTGlrZVN0YXRlbWVudCxcclxufTtcclxuIl19
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbHl6ZXIuY2xhc3NpZmljYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZG9tYWluL3Rlc3RpbmcvYWFhL2FuYWx5emVyLmNsYXNzaWZpY2F0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxhQUFhLElBQUksMkJBQTJCLEVBQzVDLFFBQVEsSUFBSSxzQkFBc0IsRUFDbEMseUJBQXlCLElBQUksdUNBQXVDLEVBQ3BFLHNCQUFzQixJQUFJLG9DQUFvQyxFQUM5RCxXQUFXLElBQUkseUJBQXlCLEVBQ3hDLHdCQUF3QixJQUFJLHNDQUFzQyxFQUNsRSxvQkFBb0IsSUFBSSxrQ0FBa0MsR0FDM0QsTUFBTSxtQ0FBbUMsQ0FBQztBQUUzQzs7Ozs7Ozs7OztHQVVHO0FBQ0gsU0FBUyxPQUFPLENBQ2QsY0FBdUQ7SUFFdkQsT0FBTyxDQUFDLEdBQUcsVUFBVSxFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQztBQUMxRCxDQUFDO0FBRUQsb0VBQW9FO0FBQ3BFLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0FBRTNELDREQUE0RDtBQUM1RCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsc0JBQXNCLENBQUMsQ0FBQztBQUVqRCw4RUFBOEU7QUFDOUUsTUFBTSx5QkFBeUIsR0FBRyxPQUFPLENBQ3ZDLHVDQUF1QyxDQUN4QyxDQUFDO0FBRUYseUVBQXlFO0FBQ3pFLE1BQU0sc0JBQXNCLEdBQUcsT0FBTyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7QUFFN0Usd0VBQXdFO0FBQ3hFLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0FBRXZELG9GQUFvRjtBQUNwRixNQUFNLHdCQUF3QixHQUFHLE9BQU8sQ0FDdEMsc0NBQXNDLENBQ3ZDLENBQUM7QUFFRix5RUFBeUU7QUFDekUsTUFBTSxvQkFBb0IsR0FBRyxPQUFPLENBQUMsa0NBQWtDLENBQUMsQ0FBQztBQUV6RSxPQUFPLEVBQ0wsYUFBYSxFQUNiLFFBQVEsRUFDUix5QkFBeUIsRUFDekIsc0JBQXNCLEVBQ3RCLFdBQVcsRUFDWCx3QkFBd0IsRUFDeEIsb0JBQW9CLEdBQ3JCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIGhhc0FzeW5jTG9naWMgYXMgaGFzQXN5bmNMb2dpY0ltcGxlbWVudGF0aW9uLFxyXG4gIGhhc0F3YWl0IGFzIGhhc0F3YWl0SW1wbGVtZW50YXRpb24sXHJcbiAgaGFzQmxhbmtMaW5lQmVmb3JlQ29tbWVudCBhcyBoYXNCbGFua0xpbmVCZWZvcmVDb21tZW50SW1wbGVtZW50YXRpb24sXHJcbiAgaGFzQ2FwdHVyYWJsZUFjdFJlc3VsdCBhcyBoYXNDYXB0dXJhYmxlQWN0UmVzdWx0SW1wbGVtZW50YXRpb24sXHJcbiAgaGFzTXV0YXRpb24gYXMgaGFzTXV0YXRpb25JbXBsZW1lbnRhdGlvbixcclxuICBpc01lYW5pbmdmdWxBY3RTdGF0ZW1lbnQgYXMgaXNNZWFuaW5nZnVsQWN0U3RhdGVtZW50SW1wbGVtZW50YXRpb24sXHJcbiAgaXNTZXR1cExpa2VTdGF0ZW1lbnQgYXMgaXNTZXR1cExpa2VTdGF0ZW1lbnRJbXBsZW1lbnRhdGlvbixcclxufSBmcm9tIFwiLi9hbmFseXplci5jbGFzc2lmaWNhdGlvbi5oZWxwZXJzXCI7XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIGxvY2FsIGZvcndhcmRpbmcgZnVuY3Rpb24gZm9yIGFuIGltcG9ydGVkIGFuYWx5emVyIGhlbHBlci5cclxuICogQHRlbXBsYXRlIFRQYXJhbWV0ZXJzIEZvcndhcmRlZCBwYXJhbWV0ZXIgdHVwbGUuXHJcbiAqIEB0ZW1wbGF0ZSBUUmVzdWx0IEZvcndhcmRlZCByZXR1cm4gdHlwZS5cclxuICogQHBhcmFtIGltcGxlbWVudGF0aW9uIEltcG9ydGVkIGhlbHBlciBpbXBsZW1lbnRhdGlvbi5cclxuICogQHJldHVybnMgTG9jYWwgZnVuY3Rpb24gdGhhdCBmb3J3YXJkcyBhbGwgYXJndW1lbnRzIHRvIHRoZSBpbXBsZW1lbnRhdGlvbi5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBjb25zdCBsb2NhbEhlbHBlciA9IGZvcndhcmQoaW1wbGVtZW50YXRpb24pO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIGZvcndhcmQ8VFBhcmFtZXRlcnMgZXh0ZW5kcyB1bmtub3duW10sIFRSZXN1bHQ+KFxyXG4gIGltcGxlbWVudGF0aW9uOiAoLi4ucGFyYW1ldGVyczogVFBhcmFtZXRlcnMpID0+IFRSZXN1bHQsXHJcbik6ICguLi5wYXJhbWV0ZXJzOiBUUGFyYW1ldGVycykgPT4gVFJlc3VsdCB7XHJcbiAgcmV0dXJuICguLi5wYXJhbWV0ZXJzKSA9PiBpbXBsZW1lbnRhdGlvbiguLi5wYXJhbWV0ZXJzKTtcclxufVxyXG5cclxuLyoqIENoZWNrcyB3aGV0aGVyIGEgc3RhdGVtZW50IGNvbnRhaW5zIGFueSBhc3luYyBvciBhd2FpdCBsb2dpYy4gKi9cclxuY29uc3QgaGFzQXN5bmNMb2dpYyA9IGZvcndhcmQoaGFzQXN5bmNMb2dpY0ltcGxlbWVudGF0aW9uKTtcclxuXHJcbi8qKiBDaGVja3Mgd2hldGhlciBhIG5vZGUgY29udGFpbnMgYW4gYGF3YWl0YCBleHByZXNzaW9uLiAqL1xyXG5jb25zdCBoYXNBd2FpdCA9IGZvcndhcmQoaGFzQXdhaXRJbXBsZW1lbnRhdGlvbik7XHJcblxyXG4vKiogQ2hlY2tzIHdoZXRoZXIgdGhlcmUgaXMgYSBibGFuayBsaW5lIGltbWVkaWF0ZWx5IGJlZm9yZSBhIGNvbW1lbnQgbm9kZS4gKi9cclxuY29uc3QgaGFzQmxhbmtMaW5lQmVmb3JlQ29tbWVudCA9IGZvcndhcmQoXHJcbiAgaGFzQmxhbmtMaW5lQmVmb3JlQ29tbWVudEltcGxlbWVudGF0aW9uLFxyXG4pO1xyXG5cclxuLyoqIENoZWNrcyB3aGV0aGVyIGFuIEFjdCBzdGF0ZW1lbnQgcHJvZHVjZXMgYSByZXN1bHQgd29ydGggY2FwdHVyaW5nLiAqL1xyXG5jb25zdCBoYXNDYXB0dXJhYmxlQWN0UmVzdWx0ID0gZm9yd2FyZChoYXNDYXB0dXJhYmxlQWN0UmVzdWx0SW1wbGVtZW50YXRpb24pO1xyXG5cclxuLyoqIENoZWNrcyB3aGV0aGVyIGEgc3RhdGVtZW50IHBlcmZvcm1zIGFuIG9ic2VydmFibGUgc3RhdGUgbXV0YXRpb24uICovXHJcbmNvbnN0IGhhc011dGF0aW9uID0gZm9yd2FyZChoYXNNdXRhdGlvbkltcGxlbWVudGF0aW9uKTtcclxuXHJcbi8qKiBDaGVja3Mgd2hldGhlciBhIHN0YXRlbWVudCBpcyBhIG1lYW5pbmdmdWwgQWN0IHN0ZXAgKG5vdCBzZXR1cCBvciBhc3NlcnRpb24pLiAqL1xyXG5jb25zdCBpc01lYW5pbmdmdWxBY3RTdGF0ZW1lbnQgPSBmb3J3YXJkKFxyXG4gIGlzTWVhbmluZ2Z1bEFjdFN0YXRlbWVudEltcGxlbWVudGF0aW9uLFxyXG4pO1xyXG5cclxuLyoqIENoZWNrcyB3aGV0aGVyIGEgc3RhdGVtZW50IGxvb2tzIGxpa2UgYW4gQXJyYW5nZS1waGFzZSBzZXR1cCBzdGVwLiAqL1xyXG5jb25zdCBpc1NldHVwTGlrZVN0YXRlbWVudCA9IGZvcndhcmQoaXNTZXR1cExpa2VTdGF0ZW1lbnRJbXBsZW1lbnRhdGlvbik7XHJcblxyXG5leHBvcnQge1xyXG4gIGhhc0FzeW5jTG9naWMsXHJcbiAgaGFzQXdhaXQsXHJcbiAgaGFzQmxhbmtMaW5lQmVmb3JlQ29tbWVudCxcclxuICBoYXNDYXB0dXJhYmxlQWN0UmVzdWx0LFxyXG4gIGhhc011dGF0aW9uLFxyXG4gIGlzTWVhbmluZ2Z1bEFjdFN0YXRlbWVudCxcclxuICBpc1NldHVwTGlrZVN0YXRlbWVudCxcclxufTtcclxuIl19
@@ -0,0 +1,4 @@
1
+ /** Companion module for classification mutation spec coverage. */
2
+ declare const analyzerClassificationMutationsCompanion: true;
3
+ export { analyzerClassificationMutationsCompanion };
4
+ //# sourceMappingURL=analyzer.classification.mutations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzer.classification.mutations.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/aaa/analyzer.classification.mutations.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,QAAA,MAAM,wCAAwC,EAAG,IAAa,CAAC;AAE/D,OAAO,EAAE,wCAAwC,EAAE,CAAC"}
@@ -0,0 +1,4 @@
1
+ /** Companion module for classification mutation spec coverage. */
2
+ const analyzerClassificationMutationsCompanion = true;
3
+ export { analyzerClassificationMutationsCompanion };
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbHl6ZXIuY2xhc3NpZmljYXRpb24ubXV0YXRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2RvbWFpbi90ZXN0aW5nL2FhYS9hbmFseXplci5jbGFzc2lmaWNhdGlvbi5tdXRhdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsa0VBQWtFO0FBQ2xFLE1BQU0sd0NBQXdDLEdBQUcsSUFBYSxDQUFDO0FBRS9ELE9BQU8sRUFBRSx3Q0FBd0MsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqIENvbXBhbmlvbiBtb2R1bGUgZm9yIGNsYXNzaWZpY2F0aW9uIG11dGF0aW9uIHNwZWMgY292ZXJhZ2UuICovXHJcbmNvbnN0IGFuYWx5emVyQ2xhc3NpZmljYXRpb25NdXRhdGlvbnNDb21wYW5pb24gPSB0cnVlIGFzIGNvbnN0O1xyXG5cclxuZXhwb3J0IHsgYW5hbHl6ZXJDbGFzc2lmaWNhdGlvbk11dGF0aW9uc0NvbXBhbmlvbiB9O1xyXG4iXX0=
@@ -0,0 +1,15 @@
1
+ import type * as ESTree from "estree";
2
+ /**
3
+ * Visits a statement while skipping nested function bodies that execute later.
4
+ * @param statement Input statement value.
5
+ * @param callback Input callback value.
6
+ * @example
7
+ * ```typescript
8
+ * visitStatementWithoutDeferredBodies(statement, () => {});
9
+ * ```
10
+ */
11
+ declare function visitStatementWithoutDeferredBodies(statement: ESTree.Statement, callback: (node: ESTree.Node) => void): void;
12
+ /** Companion marker for test isolation. */
13
+ declare const analyzerClassificationTraversalCompanion: true;
14
+ export { analyzerClassificationTraversalCompanion, visitStatementWithoutDeferredBodies, };
15
+ //# sourceMappingURL=analyzer.classification.traversal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzer.classification.traversal.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/aaa/analyzer.classification.traversal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,MAAM,QAAQ,CAAC;AAqBtC;;;;;;;;GAQG;AACH,iBAAS,mCAAmC,CAC1C,SAAS,EAAE,MAAM,CAAC,SAAS,EAC3B,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,KAAK,IAAI,GACpC,IAAI,CAKN;AAED,2CAA2C;AAC3C,QAAA,MAAM,wCAAwC,EAAG,IAAa,CAAC;AAE/D,OAAO,EACL,wCAAwC,EACxC,mCAAmC,GACpC,CAAC"}
@@ -0,0 +1,34 @@
1
+ import { visitNode } from "./analyzer.super.js";
2
+ /**
3
+ * Checks whether a node introduces deferred execution.
4
+ * @param node Input node value.
5
+ * @returns Return value output.
6
+ * @example
7
+ * ```typescript
8
+ * isDeferredFunctionNode({ type: "ArrowFunctionExpression" } as ESTree.Node);
9
+ * ```
10
+ */
11
+ function isDeferredFunctionNode(node) {
12
+ return (node.type === "ArrowFunctionExpression" ||
13
+ node.type === "FunctionDeclaration" ||
14
+ node.type === "FunctionExpression");
15
+ }
16
+ /**
17
+ * Visits a statement while skipping nested function bodies that execute later.
18
+ * @param statement Input statement value.
19
+ * @param callback Input callback value.
20
+ * @example
21
+ * ```typescript
22
+ * visitStatementWithoutDeferredBodies(statement, () => {});
23
+ * ```
24
+ */
25
+ function visitStatementWithoutDeferredBodies(statement, callback) {
26
+ visitNode(statement, (node) => {
27
+ callback(node);
28
+ return node === statement || !isDeferredFunctionNode(node);
29
+ });
30
+ }
31
+ /** Companion marker for test isolation. */
32
+ const analyzerClassificationTraversalCompanion = true;
33
+ export { analyzerClassificationTraversalCompanion, visitStatementWithoutDeferredBodies, };
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbHl6ZXIuY2xhc3NpZmljYXRpb24udHJhdmVyc2FsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2RvbWFpbi90ZXN0aW5nL2FhYS9hbmFseXplci5jbGFzc2lmaWNhdGlvbi50cmF2ZXJzYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTdDOzs7Ozs7OztHQVFHO0FBQ0gsU0FBUyxzQkFBc0IsQ0FBQyxJQUFpQjtJQUMvQyxPQUFPLENBQ0wsSUFBSSxDQUFDLElBQUksS0FBSyx5QkFBeUI7UUFDdkMsSUFBSSxDQUFDLElBQUksS0FBSyxxQkFBcUI7UUFDbkMsSUFBSSxDQUFDLElBQUksS0FBSyxvQkFBb0IsQ0FDbkMsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQVMsbUNBQW1DLENBQzFDLFNBQTJCLEVBQzNCLFFBQXFDO0lBRXJDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUM1QixRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDZixPQUFPLElBQUksS0FBSyxTQUFTLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3RCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCwyQ0FBMkM7QUFDM0MsTUFBTSx3Q0FBd0MsR0FBRyxJQUFhLENBQUM7QUFFL0QsT0FBTyxFQUNMLHdDQUF3QyxFQUN4QyxtQ0FBbUMsR0FDcEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlICogYXMgRVNUcmVlIGZyb20gXCJlc3RyZWVcIjtcclxuXHJcbmltcG9ydCB7IHZpc2l0Tm9kZSB9IGZyb20gXCIuL2FuYWx5emVyLnN1cGVyXCI7XHJcblxyXG4vKipcclxuICogQ2hlY2tzIHdoZXRoZXIgYSBub2RlIGludHJvZHVjZXMgZGVmZXJyZWQgZXhlY3V0aW9uLlxyXG4gKiBAcGFyYW0gbm9kZSBJbnB1dCBub2RlIHZhbHVlLlxyXG4gKiBAcmV0dXJucyBSZXR1cm4gdmFsdWUgb3V0cHV0LlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGlzRGVmZXJyZWRGdW5jdGlvbk5vZGUoeyB0eXBlOiBcIkFycm93RnVuY3Rpb25FeHByZXNzaW9uXCIgfSBhcyBFU1RyZWUuTm9kZSk7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gaXNEZWZlcnJlZEZ1bmN0aW9uTm9kZShub2RlOiBFU1RyZWUuTm9kZSk6IGJvb2xlYW4ge1xyXG4gIHJldHVybiAoXHJcbiAgICBub2RlLnR5cGUgPT09IFwiQXJyb3dGdW5jdGlvbkV4cHJlc3Npb25cIiB8fFxyXG4gICAgbm9kZS50eXBlID09PSBcIkZ1bmN0aW9uRGVjbGFyYXRpb25cIiB8fFxyXG4gICAgbm9kZS50eXBlID09PSBcIkZ1bmN0aW9uRXhwcmVzc2lvblwiXHJcbiAgKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFZpc2l0cyBhIHN0YXRlbWVudCB3aGlsZSBza2lwcGluZyBuZXN0ZWQgZnVuY3Rpb24gYm9kaWVzIHRoYXQgZXhlY3V0ZSBsYXRlci5cclxuICogQHBhcmFtIHN0YXRlbWVudCBJbnB1dCBzdGF0ZW1lbnQgdmFsdWUuXHJcbiAqIEBwYXJhbSBjYWxsYmFjayBJbnB1dCBjYWxsYmFjayB2YWx1ZS5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiB2aXNpdFN0YXRlbWVudFdpdGhvdXREZWZlcnJlZEJvZGllcyhzdGF0ZW1lbnQsICgpID0+IHt9KTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiB2aXNpdFN0YXRlbWVudFdpdGhvdXREZWZlcnJlZEJvZGllcyhcclxuICBzdGF0ZW1lbnQ6IEVTVHJlZS5TdGF0ZW1lbnQsXHJcbiAgY2FsbGJhY2s6IChub2RlOiBFU1RyZWUuTm9kZSkgPT4gdm9pZCxcclxuKTogdm9pZCB7XHJcbiAgdmlzaXROb2RlKHN0YXRlbWVudCwgKG5vZGUpID0+IHtcclxuICAgIGNhbGxiYWNrKG5vZGUpO1xyXG4gICAgcmV0dXJuIG5vZGUgPT09IHN0YXRlbWVudCB8fCAhaXNEZWZlcnJlZEZ1bmN0aW9uTm9kZShub2RlKTtcclxuICB9KTtcclxufVxyXG5cclxuLyoqIENvbXBhbmlvbiBtYXJrZXIgZm9yIHRlc3QgaXNvbGF0aW9uLiAqL1xyXG5jb25zdCBhbmFseXplckNsYXNzaWZpY2F0aW9uVHJhdmVyc2FsQ29tcGFuaW9uID0gdHJ1ZSBhcyBjb25zdDtcclxuXHJcbmV4cG9ydCB7XHJcbiAgYW5hbHl6ZXJDbGFzc2lmaWNhdGlvblRyYXZlcnNhbENvbXBhbmlvbixcclxuICB2aXNpdFN0YXRlbWVudFdpdGhvdXREZWZlcnJlZEJvZGllcyxcclxufTtcclxuIl19
@@ -11,9 +11,9 @@ declare const countActStatements: (analysis: import("./types.js").TestBlockAnaly
11
11
  /** Collects identifiers declared inside Assert sections. */
12
12
  declare const getAssertDeclaredIdentifiers: (analysis: import("./types.js").TestBlockAnalysis) => Map<string, import("./types.js").LocatedNode<import("estree").Identifier>>;
13
13
  /** Extracts `actual` and `expected` identifiers from assertion statements. */
14
- declare const getAssertionIdentifiers: (statement: import("estree").Statement) => import("./analyzer.assertions.js").AssertionIdentifiers;
14
+ declare const getAssertionIdentifiers: (statement: import("estree").Statement) => import("./analyzer.assertions.helpers.js").AssertionIdentifiers;
15
15
  /** Flattens section comments into one entry per resolved phase. */
16
- declare const getFlattenedSections: (analysis: Pick<import("./types.js").TestBlockAnalysis, "sectionComments">) => import("./analyzer.analysis.js").FlattenedSection[];
16
+ declare const getFlattenedSections: (analysis: Pick<import("./types.js").TestBlockAnalysis, "sectionComments">) => import("./analyzer.analysis.helpers.js").FlattenedSection[];
17
17
  /** Returns the indentation prefix that appears before a given offset. */
18
18
  declare const getIndentationAtOffset: (sourceText: string, offset: number) => string;
19
19
  /** Resolves the starting range for a specific source line. */
@@ -1 +1 @@
1
- {"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/aaa/analyzer.ts"],"names":[],"mappings":"AA2BA,yDAAyD;AACzD,QAAA,MAAM,aAAa;;;;CAA8B,CAAC;AAmBlD,qEAAqE;AACrE,QAAA,MAAM,gBAAgB,wIAA0C,CAAC;AAEjE,kEAAkE;AAClE,QAAA,MAAM,kBAAkB,2DAA4C,CAAC;AAErE,4DAA4D;AAC5D,QAAA,MAAM,4BAA4B,4HAEjC,CAAC;AAEF,8EAA8E;AAC9E,QAAA,MAAM,uBAAuB,iGAAiD,CAAC;AAE/E,mEAAmE;AACnE,QAAA,MAAM,oBAAoB,8HAA8C,CAAC;AAEzE,yEAAyE;AACzE,QAAA,MAAM,sBAAsB,gDAAgD,CAAC;AAE7E,8DAA8D;AAC9D,QAAA,MAAM,iBAAiB,wDAA2C,CAAC;AAEnE,mFAAmF;AACnF,QAAA,MAAM,wBAAwB,gHAE7B,CAAC;AAEF,sDAAsD;AACtD,QAAA,MAAM,gBAAgB,wDAA0C,CAAC;AAEjE,+DAA+D;AAC/D,QAAA,MAAM,YAAY,oDAAsC,CAAC;AAEzD,kFAAkF;AAClF,QAAA,MAAM,aAAa,oDAAuC,CAAC;AAE3D,kEAAkE;AAClE,QAAA,MAAM,QAAQ,oDAAkC,CAAC;AAEjD,qEAAqE;AACrE,QAAA,MAAM,yBAAyB,oEAE9B,CAAC;AAEF,uEAAuE;AACvE,QAAA,MAAM,sBAAsB,oDAAgD,CAAC;AAE7E,oEAAoE;AACpE,QAAA,MAAM,WAAW,oDAAqC,CAAC;AAEvD,8DAA8D;AAC9D,QAAA,MAAM,wBAAwB,oDAE7B,CAAC;AAEF,uEAAuE;AACvE,QAAA,MAAM,oBAAoB,oDAA8C,CAAC;AAEzE,gEAAgE;AAChE,QAAA,MAAM,sBAAsB,oDAAgD,CAAC;AAE7E,2EAA2E;AAC3E,QAAA,MAAM,UAAU,0DAAoC,CAAC;AAErD,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,kBAAkB,EAClB,4BAA4B,EAC5B,uBAAuB,EACvB,oBAAoB,EACpB,sBAAsB,EACtB,iBAAiB,EACjB,wBAAwB,EACxB,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,QAAQ,EACR,yBAAyB,EACzB,sBAAsB,EACtB,WAAW,EACX,wBAAwB,EACxB,oBAAoB,EACpB,sBAAsB,EACtB,UAAU,GACX,CAAC"}
1
+ {"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/aaa/analyzer.ts"],"names":[],"mappings":"AA2BA,yDAAyD;AACzD,QAAA,MAAM,aAAa;;;;CAA8B,CAAC;AAmBlD,qEAAqE;AACrE,QAAA,MAAM,gBAAgB,wIAA0C,CAAC;AAEjE,kEAAkE;AAClE,QAAA,MAAM,kBAAkB,2DAA4C,CAAC;AAErE,4DAA4D;AAC5D,QAAA,MAAM,4BAA4B,4HAEjC,CAAC;AAEF,8EAA8E;AAC9E,QAAA,MAAM,uBAAuB,yGAAiD,CAAC;AAE/E,mEAAmE;AACnE,QAAA,MAAM,oBAAoB,sIAA8C,CAAC;AAEzE,yEAAyE;AACzE,QAAA,MAAM,sBAAsB,gDAAgD,CAAC;AAE7E,8DAA8D;AAC9D,QAAA,MAAM,iBAAiB,wDAA2C,CAAC;AAEnE,mFAAmF;AACnF,QAAA,MAAM,wBAAwB,gHAE7B,CAAC;AAEF,sDAAsD;AACtD,QAAA,MAAM,gBAAgB,wDAA0C,CAAC;AAEjE,+DAA+D;AAC/D,QAAA,MAAM,YAAY,oDAAsC,CAAC;AAEzD,kFAAkF;AAClF,QAAA,MAAM,aAAa,oDAAuC,CAAC;AAE3D,kEAAkE;AAClE,QAAA,MAAM,QAAQ,oDAAkC,CAAC;AAEjD,qEAAqE;AACrE,QAAA,MAAM,yBAAyB,oEAE9B,CAAC;AAEF,uEAAuE;AACvE,QAAA,MAAM,sBAAsB,oDAAgD,CAAC;AAE7E,oEAAoE;AACpE,QAAA,MAAM,WAAW,oDAAqC,CAAC;AAEvD,8DAA8D;AAC9D,QAAA,MAAM,wBAAwB,oDAE7B,CAAC;AAEF,uEAAuE;AACvE,QAAA,MAAM,oBAAoB,oDAA8C,CAAC;AAEzE,gEAAgE;AAChE,QAAA,MAAM,sBAAsB,oDAAgD,CAAC;AAE7E,2EAA2E;AAC3E,QAAA,MAAM,UAAU,0DAAoC,CAAC;AAErD,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,kBAAkB,EAClB,4BAA4B,EAC5B,uBAAuB,EACvB,oBAAoB,EACpB,sBAAsB,EACtB,iBAAiB,EACjB,wBAAwB,EACxB,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,QAAQ,EACR,yBAAyB,EACzB,sBAAsB,EACtB,WAAW,EACX,wBAAwB,EACxB,oBAAoB,EACpB,sBAAsB,EACtB,UAAU,GACX,CAAC"}
@@ -1,5 +1,7 @@
1
1
  import type * as ESTree from "estree";
2
2
  import type { LocatedComment, SourceComment } from "./types.js";
3
+ /** Visits an ESTree node graph while ignoring cycles. */
4
+ declare const visitNode: (node: ESTree.Node, callback: (node: ESTree.Node) => boolean | undefined, seenNodes?: WeakSet<object> | undefined) => void;
3
5
  /** Array mutator methods that imply observable state changes. */
4
6
  declare const arrayMutationMethods: Set<string>;
5
7
  /** Names that usually signal Arrange-oriented helper calls. */
@@ -8,8 +10,6 @@ declare const setupLikeNames: RegExp;
8
10
  declare const utilityMethodNames: Set<string>;
9
11
  /** Method names that usually behave like void side-effect helpers. */
10
12
  declare const voidLikeMethodNames: Set<string>;
11
- /** Name pattern used for void-like method detection. */
12
- declare const voidLikeNamePattern: RegExp;
13
13
  /**
14
14
  * Gets an expression name when it can be resolved statically.
15
15
  * @param expression Input expression value.
@@ -93,15 +93,14 @@ declare function isUtilityNamedCall(calleeName: string): boolean;
93
93
  */
94
94
  declare function isUtilityNamespaceCall(expression: ESTree.CallExpression | ESTree.NewExpression): boolean;
95
95
  /**
96
- * Visits an ESTree node graph while ignoring cycles.
97
- * @param node Input node value.
98
- * @param callback Input callback value.
99
- * @param seenNodes Input seenNodes value.
96
+ * Checks whether a call name is built from void-like verb tokens.
97
+ * @param calleeName Input calleeName value.
98
+ * @returns Return value output.
100
99
  * @example
101
100
  * ```typescript
102
- * visitNode(node, () => {});
101
+ * isVoidLikeMethodName("scheduleAndFlush");
103
102
  * ```
104
103
  */
105
- declare function visitNode(node: ESTree.Node, callback: (node: ESTree.Node) => void, seenNodes?: WeakSet<object>): void;
106
- export { arrayMutationMethods, getExpressionName, getInvokedName, isCallableExpression, isLocatedComment, isRangeWithin, isUtilityConstructor, isUtilityNamedCall, isUtilityNamespaceCall, setupLikeNames, utilityMethodNames, visitNode, voidLikeMethodNames, voidLikeNamePattern, };
104
+ declare function isVoidLikeMethodName(calleeName: string): boolean;
105
+ export { arrayMutationMethods, getExpressionName, getInvokedName, isCallableExpression, isLocatedComment, isRangeWithin, isUtilityConstructor, isUtilityNamedCall, isUtilityNamespaceCall, isVoidLikeMethodName, setupLikeNames, utilityMethodNames, visitNode, voidLikeMethodNames, };
107
106
  //# sourceMappingURL=analyzer.super.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"analyzer.super.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/aaa/analyzer.super.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,MAAM,QAAQ,CAAC;AAEtC,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7D,iEAAiE;AACjE,QAAA,MAAM,oBAAoB,aAUxB,CAAC;AAEH,+DAA+D;AAC/D,QAAA,MAAM,cAAc,QACsE,CAAC;AAE3F,oFAAoF;AACpF,QAAA,MAAM,kBAAkB,aAiBtB,CAAC;AAEH,sEAAsE;AACtE,QAAA,MAAM,mBAAmB,aAavB,CAAC;AAEH,wDAAwD;AACxD,QAAA,MAAM,mBAAmB,QACwD,CAAC;AAQlF;;;;;;;;GAQG;AACH,iBAAS,iBAAiB,CACxB,UAAU,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,iBAAiB,GAAG,MAAM,CAAC,KAAK,GACtE,MAAM,GAAG,SAAS,CAiBpB;AAED;;;;;;;;GAQG;AACH,iBAAS,cAAc,CACrB,UAAU,EAAE,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,aAAa,GACvD,MAAM,GAAG,SAAS,CAEpB;AAED;;;;;;;;GAQG;AACH,iBAAS,oBAAoB,CAC3B,UAAU,EAAE,MAAM,CAAC,UAAU,GAAG,SAAS,GACxC,UAAU,IAAI,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,aAAa,CAK5D;AAED;;;;;;;;GAQG;AACH,iBAAS,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,IAAI,cAAc,CAI3E;AAoBD;;;;;;;;;GASG;AACH,iBAAS,aAAa,CACpB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EACvB,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GAC1B,OAAO,CAET;AAED;;;;;;;;;GASG;AACH,iBAAS,oBAAoB,CAC3B,UAAU,EAAE,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,aAAa,EACxD,UAAU,EAAE,MAAM,GACjB,OAAO,CAQT;AAED;;;;;;;;GAQG;AACH,iBAAS,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED;;;;;;;;GAQG;AACH,iBAAS,sBAAsB,CAC7B,UAAU,EAAE,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,aAAa,GACvD,OAAO,CAMT;AAED;;;;;;;;;GASG;AACH,iBAAS,SAAS,CAChB,IAAI,EAAE,MAAM,CAAC,IAAI,EACjB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,KAAK,IAAI,EACrC,SAAS,kBAAwB,GAChC,IAAI,CAaN;AAgCD,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,cAAc,EACd,oBAAoB,EACpB,gBAAgB,EAChB,aAAa,EACb,oBAAoB,EACpB,kBAAkB,EAClB,sBAAsB,EACtB,cAAc,EACd,kBAAkB,EAClB,SAAS,EACT,mBAAmB,EACnB,mBAAmB,GACpB,CAAC"}
1
+ {"version":3,"file":"analyzer.super.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/aaa/analyzer.super.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,MAAM,QAAQ,CAAC;AAEtC,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAqB7D,yDAAyD;AACzD,QAAA,MAAM,SAAS,4HAAmC,CAAC;AAEnD,iEAAiE;AACjE,QAAA,MAAM,oBAAoB,aAUxB,CAAC;AAEH,+DAA+D;AAC/D,QAAA,MAAM,cAAc,QACsE,CAAC;AAE3F,oFAAoF;AACpF,QAAA,MAAM,kBAAkB,aAiBtB,CAAC;AAEH,sEAAsE;AACtE,QAAA,MAAM,mBAAmB,aAcvB,CAAC;AAEH;;;;;;;;GAQG;AACH,iBAAS,iBAAiB,CACxB,UAAU,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,iBAAiB,GAAG,MAAM,CAAC,KAAK,GACtE,MAAM,GAAG,SAAS,CAiBpB;AAED;;;;;;;;GAQG;AACH,iBAAS,cAAc,CACrB,UAAU,EAAE,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,aAAa,GACvD,MAAM,GAAG,SAAS,CAEpB;AAkBD;;;;;;;;GAQG;AACH,iBAAS,oBAAoB,CAC3B,UAAU,EAAE,MAAM,CAAC,UAAU,GAAG,SAAS,GACxC,UAAU,IAAI,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,aAAa,CAK5D;AAED;;;;;;;;GAQG;AACH,iBAAS,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,IAAI,cAAc,CAI3E;AAED;;;;;;;;;GASG;AACH,iBAAS,aAAa,CACpB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EACvB,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GAC1B,OAAO,CAET;AAED;;;;;;;;;GASG;AACH,iBAAS,oBAAoB,CAC3B,UAAU,EAAE,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,aAAa,EACxD,UAAU,EAAE,MAAM,GACjB,OAAO,CAST;AAED;;;;;;;;GAQG;AACH,iBAAS,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED;;;;;;;;GAQG;AACH,iBAAS,sBAAsB,CAC7B,UAAU,EAAE,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,aAAa,GACvD,OAAO,CAMT;AAED;;;;;;;;GAQG;AACH,iBAAS,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,cAAc,EACd,oBAAoB,EACpB,gBAAgB,EAChB,aAAa,EACb,oBAAoB,EACpB,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EACpB,cAAc,EACd,kBAAkB,EAClB,SAAS,EACT,mBAAmB,GACpB,CAAC"}
@@ -0,0 +1,27 @@
1
+ import type * as ESTree from "estree";
2
+ /**
3
+ * Visits an ESTree node graph while ignoring cycles.
4
+ * @param node Input node value.
5
+ * @param callback Input callback value.
6
+ * @param seenNodes Input seenNodes value.
7
+ * @example
8
+ * ```typescript
9
+ * visitNode(node, () => {});
10
+ * ```
11
+ */
12
+ declare function visitNode(node: ESTree.Node, callback: (node: ESTree.Node) => boolean | undefined, seenNodes?: WeakSet<object>): void;
13
+ /**
14
+ * Visits child values that may contain nested ESTree nodes.
15
+ * @param value Input value value.
16
+ * @param callback Input callback value.
17
+ * @param seenNodes Input seenNodes value.
18
+ * @example
19
+ * ```typescript
20
+ * visitValue(value, () => {}, new WeakSet<object>());
21
+ * ```
22
+ */
23
+ declare function visitValue(value: unknown, callback: (node: ESTree.Node) => boolean | undefined, seenNodes: WeakSet<object>): void;
24
+ /** Companion marker for test isolation. */
25
+ declare const analyzerSuperHelpersCompanion: true;
26
+ export { analyzerSuperHelpersCompanion, visitNode, visitValue };
27
+ //# sourceMappingURL=analyzer.super.helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzer.super.helpers.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/aaa/analyzer.super.helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,MAAM,QAAQ,CAAC;AAyBtC;;;;;;;;;GASG;AACH,iBAAS,SAAS,CAChB,IAAI,EAAE,MAAM,CAAC,IAAI,EACjB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,KAAK,OAAO,GAAG,SAAS,EACpD,SAAS,kBAAwB,GAChC,IAAI,CAeN;AAED;;;;;;;;;GASG;AACH,iBAAS,UAAU,CACjB,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,KAAK,OAAO,GAAG,SAAS,EACpD,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,GACzB,IAAI,CAcN;AAED,2CAA2C;AAC3C,QAAA,MAAM,6BAA6B,EAAG,IAAa,CAAC;AAEpD,OAAO,EAAE,6BAA6B,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Checks whether a value is an ESTree node.
3
+ * @param value The value to test.
4
+ * @returns `true` when value is an ESTree node, `false` otherwise.
5
+ * @example
6
+ * ```typescript
7
+ * isNode({ type: "Identifier" }); // true
8
+ * ```
9
+ */
10
+ function isNode(value) {
11
+ return (typeof value === "object" &&
12
+ value !== null &&
13
+ "type" in value &&
14
+ typeof value.type === "string");
15
+ }
16
+ /**
17
+ * Visits an ESTree node graph while ignoring cycles.
18
+ * @param node Input node value.
19
+ * @param callback Input callback value.
20
+ * @param seenNodes Input seenNodes value.
21
+ * @example
22
+ * ```typescript
23
+ * visitNode(node, () => {});
24
+ * ```
25
+ */
26
+ function visitNode(node, callback, seenNodes = new WeakSet()) {
27
+ if (seenNodes.has(node)) {
28
+ return;
29
+ }
30
+ seenNodes.add(node);
31
+ if (callback(node) === false) {
32
+ return;
33
+ }
34
+ for (const [key, value] of Object.entries(node)) {
35
+ if (key !== "parent") {
36
+ visitValue(value, callback, seenNodes);
37
+ }
38
+ }
39
+ }
40
+ /**
41
+ * Visits child values that may contain nested ESTree nodes.
42
+ * @param value Input value value.
43
+ * @param callback Input callback value.
44
+ * @param seenNodes Input seenNodes value.
45
+ * @example
46
+ * ```typescript
47
+ * visitValue(value, () => {}, new WeakSet<object>());
48
+ * ```
49
+ */
50
+ function visitValue(value, callback, seenNodes) {
51
+ if (Array.isArray(value)) {
52
+ for (const item of value) {
53
+ if (isNode(item)) {
54
+ visitNode(item, callback, seenNodes);
55
+ }
56
+ }
57
+ return;
58
+ }
59
+ if (isNode(value)) {
60
+ visitNode(value, callback, seenNodes);
61
+ }
62
+ }
63
+ /** Companion marker for test isolation. */
64
+ const analyzerSuperHelpersCompanion = true;
65
+ export { analyzerSuperHelpersCompanion, visitNode, visitValue };
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbHl6ZXIuc3VwZXIuaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb21haW4vdGVzdGluZy9hYWEvYW5hbHl6ZXIuc3VwZXIuaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQTs7Ozs7Ozs7R0FRRztBQUNILFNBQVMsTUFBTSxDQUFDLEtBQWM7SUFDNUIsT0FBTyxDQUNMLE9BQU8sS0FBSyxLQUFLLFFBQVE7UUFDekIsS0FBSyxLQUFLLElBQUk7UUFDZCxNQUFNLElBQUksS0FBSztRQUNmLE9BQ0UsS0FJRCxDQUFDLElBQUksS0FBSyxRQUFRLENBQ3BCLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBUyxTQUFTLENBQ2hCLElBQWlCLEVBQ2pCLFFBQW9ELEVBQ3BELFlBQVksSUFBSSxPQUFPLEVBQVU7SUFFakMsSUFBSSxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDeEIsT0FBTztJQUNULENBQUM7SUFFRCxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BCLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDO1FBQzdCLE9BQU87SUFDVCxDQUFDO0lBRUQsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNoRCxJQUFJLEdBQUcsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNyQixVQUFVLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN6QyxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUM7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxTQUFTLFVBQVUsQ0FDakIsS0FBYyxFQUNkLFFBQW9ELEVBQ3BELFNBQTBCO0lBRTFCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3pCLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7WUFDekIsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDakIsU0FBUyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDdkMsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPO0lBQ1QsQ0FBQztJQUVELElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDbEIsU0FBUyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDeEMsQ0FBQztBQUNILENBQUM7QUFFRCwyQ0FBMkM7QUFDM0MsTUFBTSw2QkFBNkIsR0FBRyxJQUFhLENBQUM7QUFFcEQsT0FBTyxFQUFFLDZCQUE2QixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlICogYXMgRVNUcmVlIGZyb20gXCJlc3RyZWVcIjtcclxuXHJcbi8qKlxyXG4gKiBDaGVja3Mgd2hldGhlciBhIHZhbHVlIGlzIGFuIEVTVHJlZSBub2RlLlxyXG4gKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIHRlc3QuXHJcbiAqIEByZXR1cm5zIGB0cnVlYCB3aGVuIHZhbHVlIGlzIGFuIEVTVHJlZSBub2RlLCBgZmFsc2VgIG90aGVyd2lzZS5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBpc05vZGUoeyB0eXBlOiBcIklkZW50aWZpZXJcIiB9KTsgLy8gdHJ1ZVxyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIGlzTm9kZSh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIEVTVHJlZS5Ob2RlIHtcclxuICByZXR1cm4gKFxyXG4gICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXHJcbiAgICB2YWx1ZSAhPT0gbnVsbCAmJlxyXG4gICAgXCJ0eXBlXCIgaW4gdmFsdWUgJiZcclxuICAgIHR5cGVvZiAoXHJcbiAgICAgIHZhbHVlIGFzIHtcclxuICAgICAgICAvKiogUG90ZW50aWFsIEVTVHJlZSBub2RlIHR5cGUgZmllbGQuICovXHJcbiAgICAgICAgdHlwZT86IHVua25vd247XHJcbiAgICAgIH1cclxuICAgICkudHlwZSA9PT0gXCJzdHJpbmdcIlxyXG4gICk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBWaXNpdHMgYW4gRVNUcmVlIG5vZGUgZ3JhcGggd2hpbGUgaWdub3JpbmcgY3ljbGVzLlxyXG4gKiBAcGFyYW0gbm9kZSBJbnB1dCBub2RlIHZhbHVlLlxyXG4gKiBAcGFyYW0gY2FsbGJhY2sgSW5wdXQgY2FsbGJhY2sgdmFsdWUuXHJcbiAqIEBwYXJhbSBzZWVuTm9kZXMgSW5wdXQgc2Vlbk5vZGVzIHZhbHVlLlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIHZpc2l0Tm9kZShub2RlLCAoKSA9PiB7fSk7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gdmlzaXROb2RlKFxyXG4gIG5vZGU6IEVTVHJlZS5Ob2RlLFxyXG4gIGNhbGxiYWNrOiAobm9kZTogRVNUcmVlLk5vZGUpID0+IGJvb2xlYW4gfCB1bmRlZmluZWQsXHJcbiAgc2Vlbk5vZGVzID0gbmV3IFdlYWtTZXQ8b2JqZWN0PigpLFxyXG4pOiB2b2lkIHtcclxuICBpZiAoc2Vlbk5vZGVzLmhhcyhub2RlKSkge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgc2Vlbk5vZGVzLmFkZChub2RlKTtcclxuICBpZiAoY2FsbGJhY2sobm9kZSkgPT09IGZhbHNlKSB7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhub2RlKSkge1xyXG4gICAgaWYgKGtleSAhPT0gXCJwYXJlbnRcIikge1xyXG4gICAgICB2aXNpdFZhbHVlKHZhbHVlLCBjYWxsYmFjaywgc2Vlbk5vZGVzKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBWaXNpdHMgY2hpbGQgdmFsdWVzIHRoYXQgbWF5IGNvbnRhaW4gbmVzdGVkIEVTVHJlZSBub2Rlcy5cclxuICogQHBhcmFtIHZhbHVlIElucHV0IHZhbHVlIHZhbHVlLlxyXG4gKiBAcGFyYW0gY2FsbGJhY2sgSW5wdXQgY2FsbGJhY2sgdmFsdWUuXHJcbiAqIEBwYXJhbSBzZWVuTm9kZXMgSW5wdXQgc2Vlbk5vZGVzIHZhbHVlLlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIHZpc2l0VmFsdWUodmFsdWUsICgpID0+IHt9LCBuZXcgV2Vha1NldDxvYmplY3Q+KCkpO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIHZpc2l0VmFsdWUoXHJcbiAgdmFsdWU6IHVua25vd24sXHJcbiAgY2FsbGJhY2s6IChub2RlOiBFU1RyZWUuTm9kZSkgPT4gYm9vbGVhbiB8IHVuZGVmaW5lZCxcclxuICBzZWVuTm9kZXM6IFdlYWtTZXQ8b2JqZWN0PixcclxuKTogdm9pZCB7XHJcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XHJcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdmFsdWUpIHtcclxuICAgICAgaWYgKGlzTm9kZShpdGVtKSkge1xyXG4gICAgICAgIHZpc2l0Tm9kZShpdGVtLCBjYWxsYmFjaywgc2Vlbk5vZGVzKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGlmIChpc05vZGUodmFsdWUpKSB7XHJcbiAgICB2aXNpdE5vZGUodmFsdWUsIGNhbGxiYWNrLCBzZWVuTm9kZXMpO1xyXG4gIH1cclxufVxyXG5cclxuLyoqIENvbXBhbmlvbiBtYXJrZXIgZm9yIHRlc3QgaXNvbGF0aW9uLiAqL1xyXG5jb25zdCBhbmFseXplclN1cGVySGVscGVyc0NvbXBhbmlvbiA9IHRydWUgYXMgY29uc3Q7XHJcblxyXG5leHBvcnQgeyBhbmFseXplclN1cGVySGVscGVyc0NvbXBhbmlvbiwgdmlzaXROb2RlLCB2aXNpdFZhbHVlIH07XHJcbiJdfQ==