@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.
- package/dist/.tsbuildinfo +1 -1
- package/dist/codeperfect-eslint-plugin-1.0.0.tgz +0 -0
- package/dist/domain/architecture/consistent-barrel-files/exports-only-rule.d.ts.map +1 -1
- package/dist/domain/architecture/consistent-barrel-files/exports-only-rule.js +8 -3
- package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.d.ts.map +1 -1
- package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.js +8 -3
- package/dist/domain/architecture/consistent-barrel-files/rule.d.ts.map +1 -1
- package/dist/domain/architecture/consistent-barrel-files/rule.js +12 -4
- package/dist/domain/core/no-multiple-declarators/rule.d.ts.map +1 -1
- package/dist/domain/core/no-multiple-declarators/rule.js +6 -3
- package/dist/domain/core/prefer-interface-types/rule.d.ts.map +1 -1
- package/dist/domain/core/prefer-interface-types/rule.js +6 -3
- package/dist/domain/core/prefer-interface-types/test-helpers.d.ts.map +1 -1
- package/dist/domain/core/prefer-interface-types/test-helpers.js +1 -1
- package/dist/domain/custom-rule-documentation.d.ts +2 -0
- package/dist/domain/custom-rule-documentation.d.ts.map +1 -1
- package/dist/domain/custom-rule-documentation.js +2 -1
- package/dist/domain/docs/no-interface-member-docs/comment-utilities-test-helpers.d.ts.map +1 -1
- package/dist/domain/docs/no-interface-member-docs/comment-utilities-test-helpers.js +1 -1
- package/dist/domain/docs/no-interface-member-docs/parameter-utilities.js +1 -1
- package/dist/domain/docs/no-interface-member-docs/rule.d.ts.map +1 -1
- package/dist/domain/docs/no-interface-member-docs/rule.js +6 -3
- package/dist/domain/docs/no-interface-member-docs/test-helpers.js +1 -1
- package/dist/domain/docs/require-example-language/create-fixer.js +1 -1
- package/dist/domain/docs/require-example-language/fixes.d.ts.map +1 -1
- package/dist/domain/docs/require-example-language/fixes.js +1 -1
- package/dist/domain/docs/require-example-language/reporting.js +1 -1
- package/dist/domain/docs/require-example-language/rule.d.ts.map +1 -1
- package/dist/domain/docs/require-example-language/rule.js +6 -3
- package/dist/domain/docs/single-line-jsdoc/rule.d.ts +1 -2
- package/dist/domain/docs/single-line-jsdoc/rule.d.ts.map +1 -1
- package/dist/domain/docs/single-line-jsdoc/rule.edge-cases.js +1 -1
- package/dist/domain/docs/single-line-jsdoc/rule.js +11 -6
- package/dist/domain/docs/single-line-jsdoc/rule.node-lookups.js +1 -1
- package/dist/domain/testing/aaa/analyzer.analysis.d.ts +14 -72
- package/dist/domain/testing/aaa/analyzer.analysis.d.ts.map +1 -1
- package/dist/domain/testing/aaa/analyzer.analysis.helpers.d.ts +144 -3
- package/dist/domain/testing/aaa/analyzer.analysis.helpers.d.ts.map +1 -1
- package/dist/domain/testing/aaa/analyzer.analysis.helpers.js +202 -3
- package/dist/domain/testing/aaa/analyzer.analysis.js +36 -201
- package/dist/domain/testing/aaa/analyzer.analysis.unsupported.d.ts +4 -0
- package/dist/domain/testing/aaa/analyzer.analysis.unsupported.d.ts.map +1 -0
- package/dist/domain/testing/aaa/analyzer.analysis.unsupported.js +4 -0
- package/dist/domain/testing/aaa/analyzer.assertions.d.ts +16 -91
- package/dist/domain/testing/aaa/analyzer.assertions.d.ts.map +1 -1
- package/dist/domain/testing/aaa/analyzer.assertions.destructured.d.ts +4 -0
- package/dist/domain/testing/aaa/analyzer.assertions.destructured.d.ts.map +1 -0
- package/dist/domain/testing/aaa/analyzer.assertions.destructured.js +4 -0
- package/dist/domain/testing/aaa/analyzer.assertions.helpers.d.ts +95 -0
- package/dist/domain/testing/aaa/analyzer.assertions.helpers.d.ts.map +1 -0
- package/dist/domain/testing/aaa/analyzer.assertions.helpers.js +185 -0
- package/dist/domain/testing/aaa/analyzer.assertions.js +32 -282
- package/dist/domain/testing/aaa/analyzer.assertions.operands.d.ts +64 -0
- package/dist/domain/testing/aaa/analyzer.assertions.operands.d.ts.map +1 -0
- package/dist/domain/testing/aaa/analyzer.assertions.operands.js +105 -0
- package/dist/domain/testing/aaa/analyzer.classification.d.ts +14 -73
- package/dist/domain/testing/aaa/analyzer.classification.d.ts.map +1 -1
- package/dist/domain/testing/aaa/analyzer.classification.helpers.d.ts +77 -0
- package/dist/domain/testing/aaa/analyzer.classification.helpers.d.ts.map +1 -0
- package/dist/domain/testing/aaa/analyzer.classification.helpers.js +203 -0
- package/dist/domain/testing/aaa/analyzer.classification.js +30 -200
- package/dist/domain/testing/aaa/analyzer.classification.mutations.d.ts +4 -0
- package/dist/domain/testing/aaa/analyzer.classification.mutations.d.ts.map +1 -0
- package/dist/domain/testing/aaa/analyzer.classification.mutations.js +4 -0
- package/dist/domain/testing/aaa/analyzer.classification.traversal.d.ts +15 -0
- package/dist/domain/testing/aaa/analyzer.classification.traversal.d.ts.map +1 -0
- package/dist/domain/testing/aaa/analyzer.classification.traversal.js +34 -0
- package/dist/domain/testing/aaa/analyzer.d.ts +2 -2
- package/dist/domain/testing/aaa/analyzer.d.ts.map +1 -1
- package/dist/domain/testing/aaa/analyzer.super.d.ts +8 -9
- package/dist/domain/testing/aaa/analyzer.super.d.ts.map +1 -1
- package/dist/domain/testing/aaa/analyzer.super.helpers.d.ts +27 -0
- package/dist/domain/testing/aaa/analyzer.super.helpers.d.ts.map +1 -0
- package/dist/domain/testing/aaa/analyzer.super.helpers.js +66 -0
- package/dist/domain/testing/aaa/analyzer.super.js +43 -60
- package/dist/domain/testing/assert-actual-expected-names/rule.d.ts.map +1 -1
- package/dist/domain/testing/assert-actual-expected-names/rule.js +6 -3
- package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.combined.d.ts +4 -0
- package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.combined.d.ts.map +1 -0
- package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.combined.js +4 -0
- package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.companion.d.ts +4 -0
- package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.companion.d.ts.map +1 -0
- package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.companion.js +4 -0
- package/dist/domain/testing/enforce-aaa-phase-purity/rule-test-helpers.js +1 -1
- package/dist/domain/testing/enforce-aaa-phase-purity/rule.d.ts.map +1 -1
- package/dist/domain/testing/enforce-aaa-phase-purity/rule.js +6 -3
- package/dist/domain/testing/enforce-aaa-structure/rule.d.ts.map +1 -1
- package/dist/domain/testing/enforce-aaa-structure/rule.js +6 -3
- package/dist/domain/testing/prefer-vi-mocked-import/rule.d.ts.map +1 -1
- package/dist/domain/testing/prefer-vi-mocked-import/rule.js +6 -3
- package/dist/domain/testing/prefer-vitest-incremental-casts/ast-helpers.d.ts +12 -1
- package/dist/domain/testing/prefer-vitest-incremental-casts/ast-helpers.d.ts.map +1 -1
- package/dist/domain/testing/prefer-vitest-incremental-casts/ast-helpers.js +26 -2
- package/dist/domain/testing/prefer-vitest-incremental-casts/match-input.d.ts.map +1 -1
- package/dist/domain/testing/prefer-vitest-incremental-casts/match-input.js +13 -10
- package/dist/domain/testing/prefer-vitest-incremental-casts/match.d.ts.map +1 -1
- package/dist/domain/testing/prefer-vitest-incremental-casts/match.js +8 -2
- package/dist/domain/testing/prefer-vitest-incremental-casts/replacement-helpers.d.ts.map +1 -1
- package/dist/domain/testing/prefer-vitest-incremental-casts/replacement-helpers.js +9 -5
- package/dist/domain/testing/prefer-vitest-incremental-casts/rule.d.ts.map +1 -1
- package/dist/domain/testing/prefer-vitest-incremental-casts/rule.js +28 -2
- package/dist/domain/testing/prefer-vitest-incremental-casts/type-helpers.d.ts.map +1 -1
- package/dist/domain/testing/prefer-vitest-incremental-casts/type-helpers.js +1 -1
- package/dist/domain/testing/prefer-vitest-incremental-casts/types.d.ts +9 -25
- package/dist/domain/testing/prefer-vitest-incremental-casts/types.d.ts.map +1 -1
- package/dist/domain/testing/prefer-vitest-incremental-casts/types.js +1 -1
- package/dist/domain/testing/require-aaa-sections/rule.d.ts.map +1 -1
- package/dist/domain/testing/require-aaa-sections/rule.js +9 -4
- package/dist/domain/testing/require-aaa-sections/rule.reporting.d.ts.map +1 -1
- package/dist/domain/testing/require-aaa-sections/rule.reporting.js +3 -4
- package/dist/domain/testing/require-act-result-capture/rule.d.ts.map +1 -1
- package/dist/domain/testing/require-act-result-capture/rule.js +6 -3
- package/dist/domain/testing/require-test-companion/rule.d.ts.map +1 -1
- package/dist/domain/testing/require-test-companion/rule.js +31 -6
- package/dist/domain/testing/single-act-statement/rule.d.ts.map +1 -1
- package/dist/domain/testing/single-act-statement/rule.js +6 -3
- package/dist/infrastructure/presets.js +1 -1
- package/package.json +37 -29
|
@@ -1,13 +1,39 @@
|
|
|
1
|
-
|
|
1
|
+
import { aaaPhaseOrder as aaaPhaseOrderImplementation, countActStatements as countActStatementsImplementation, getFlattenedSections as getFlattenedSectionsImplementation, getIndentationAtOffset as getIndentationAtOffsetImplementation, getLineStartRange as getLineStartRangeImplementation, getNewline as getNewlineImplementation, getPhaseBoundaryComments as getPhaseBoundaryCommentsImplementation, getSectionPhases as getSectionPhasesImplementation, getStatementPhases as getStatementPhasesImplementation, getSupportedTestCall as getSupportedTestCallImplementation, } from "./analyzer.analysis.helpers.js";
|
|
2
2
|
import { isLocatedComment, isRangeWithin } from "./analyzer.super.js";
|
|
3
|
-
/**
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
3
|
+
/**
|
|
4
|
+
* Creates a local forwarding function for an imported analyzer helper.
|
|
5
|
+
* @template TParameters Forwarded parameter tuple.
|
|
6
|
+
* @template TResult Forwarded return type.
|
|
7
|
+
* @param implementation Imported helper implementation.
|
|
8
|
+
* @returns Local function that forwards all arguments to the implementation.
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* const localHelper = forward(implementation);
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
function forward(implementation) {
|
|
15
|
+
return (...parameters) => implementation(...parameters);
|
|
16
|
+
}
|
|
17
|
+
/** Ordered list of AAA phase names. */
|
|
18
|
+
const aaaPhaseOrder = aaaPhaseOrderImplementation;
|
|
19
|
+
/** Counts Act-phase statements in a test block analysis. */
|
|
20
|
+
const countActStatements = forward(countActStatementsImplementation);
|
|
21
|
+
/** Flattens multi-phase section comments into one entry per phase. */
|
|
22
|
+
const getFlattenedSections = forward(getFlattenedSectionsImplementation);
|
|
23
|
+
/** Resolves the leading whitespace for the line containing a source offset. */
|
|
24
|
+
const getIndentationAtOffset = forward(getIndentationAtOffsetImplementation);
|
|
25
|
+
/** Returns the start-of-line range for a given source offset. */
|
|
26
|
+
const getLineStartRange = forward(getLineStartRangeImplementation);
|
|
27
|
+
/** Detects the line-ending style used in a source text. */
|
|
28
|
+
const getNewline = forward(getNewlineImplementation);
|
|
29
|
+
/** Extracts the phase-boundary section comments from a test block analysis. */
|
|
30
|
+
const getPhaseBoundaryComments = forward(getPhaseBoundaryCommentsImplementation);
|
|
31
|
+
/** Parses AAA phase names from a section comment value. */
|
|
32
|
+
const getSectionPhases = forward(getSectionPhasesImplementation);
|
|
33
|
+
/** Resolves the AAA phases applicable to a statement. */
|
|
34
|
+
const getStatementPhases = forward(getStatementPhasesImplementation);
|
|
35
|
+
/** Extracts the test call and callback from a supported `it` or `test` call expression. */
|
|
36
|
+
const getSupportedTestCall = forward(getSupportedTestCallImplementation);
|
|
11
37
|
/**
|
|
12
38
|
* Analyzes supported AAA test blocks.
|
|
13
39
|
* @param context Input context value.
|
|
@@ -52,196 +78,5 @@ function analyzeTestBlock(context, node) {
|
|
|
52
78
|
}),
|
|
53
79
|
};
|
|
54
80
|
}
|
|
55
|
-
/**
|
|
56
|
-
* Counts Act statements.
|
|
57
|
-
* @param analysis Input analysis value.
|
|
58
|
-
* @returns Return value output.
|
|
59
|
-
* @example
|
|
60
|
-
* ```typescript
|
|
61
|
-
* countActStatements(analysis);
|
|
62
|
-
* ```
|
|
63
|
-
*/
|
|
64
|
-
function countActStatements(analysis) {
|
|
65
|
-
return analysis.statements.filter((statement) => statement.phases.includes("Act") &&
|
|
66
|
-
(statement.node.type === "ExpressionStatement" ||
|
|
67
|
-
statement.node.type === "VariableDeclaration")).length;
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Flattens section comments.
|
|
71
|
-
* @param analysis Input analysis value.
|
|
72
|
-
* @returns Return value output.
|
|
73
|
-
* @example
|
|
74
|
-
* ```typescript
|
|
75
|
-
* getFlattenedSections(analysis);
|
|
76
|
-
* ```
|
|
77
|
-
*/
|
|
78
|
-
function getFlattenedSections(analysis) {
|
|
79
|
-
return analysis.sectionComments.flatMap((sectionComment) => sectionComment.phases.map((phase) => ({
|
|
80
|
-
comment: sectionComment.comment,
|
|
81
|
-
phase,
|
|
82
|
-
})));
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* Gets indentation at an offset.
|
|
86
|
-
* @param sourceText Input sourceText value.
|
|
87
|
-
* @param offset Input offset value.
|
|
88
|
-
* @returns Return value output.
|
|
89
|
-
* @example
|
|
90
|
-
* ```typescript
|
|
91
|
-
* getIndentationAtOffset(sourceText, 4);
|
|
92
|
-
* ```
|
|
93
|
-
*/
|
|
94
|
-
function getIndentationAtOffset(sourceText, offset) {
|
|
95
|
-
const lineStart = sourceText.lastIndexOf("\n", Math.max(0, offset - 1)) + 1;
|
|
96
|
-
const linePrefix = sourceText.slice(lineStart, offset);
|
|
97
|
-
const trimmedPrefix = linePrefix.trimStart();
|
|
98
|
-
return linePrefix.slice(0, linePrefix.length - trimmedPrefix.length);
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* Gets the start range for a line.
|
|
102
|
-
* @param sourceText Input sourceText value.
|
|
103
|
-
* @param line Input line value.
|
|
104
|
-
* @returns Return value output.
|
|
105
|
-
* @example
|
|
106
|
-
* ```typescript
|
|
107
|
-
* getLineStartRange(sourceText, 2);
|
|
108
|
-
* ```
|
|
109
|
-
*/
|
|
110
|
-
function getLineStartRange(sourceText, line) {
|
|
111
|
-
let currentLine = 1;
|
|
112
|
-
let currentOffset = 0;
|
|
113
|
-
for (const character of sourceText) {
|
|
114
|
-
if (currentLine === line) {
|
|
115
|
-
return [currentOffset, currentOffset];
|
|
116
|
-
}
|
|
117
|
-
if (character === "\n") {
|
|
118
|
-
currentLine += 1;
|
|
119
|
-
}
|
|
120
|
-
currentOffset += 1;
|
|
121
|
-
}
|
|
122
|
-
return [sourceText.length, sourceText.length];
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* Gets the newline sequence.
|
|
126
|
-
* @param text Input text value.
|
|
127
|
-
* @returns Return value output.
|
|
128
|
-
* @example
|
|
129
|
-
* ```typescript
|
|
130
|
-
* getNewline(sourceText);
|
|
131
|
-
* ```
|
|
132
|
-
*/
|
|
133
|
-
function getNewline(text) {
|
|
134
|
-
return text.includes("\r\n") ? "\r\n" : "\n";
|
|
135
|
-
}
|
|
136
|
-
/**
|
|
137
|
-
* Gets phase-boundary comments.
|
|
138
|
-
* @param analysis Input analysis value.
|
|
139
|
-
* @returns Return value output.
|
|
140
|
-
* @example
|
|
141
|
-
* ```typescript
|
|
142
|
-
* getPhaseBoundaryComments(analysis);
|
|
143
|
-
* ```
|
|
144
|
-
*/
|
|
145
|
-
function getPhaseBoundaryComments(analysis) {
|
|
146
|
-
return analysis.sectionComments.filter((sectionComment) => sectionComment.phases.some((phase) => phase === "Act" || phase === "Assert"));
|
|
147
|
-
}
|
|
148
|
-
/**
|
|
149
|
-
* Parses AAA phases from a comment.
|
|
150
|
-
* @param commentValue Input commentValue value.
|
|
151
|
-
* @returns Return value output.
|
|
152
|
-
* @example
|
|
153
|
-
* ```typescript
|
|
154
|
-
* getSectionPhases("Arrange & Act");
|
|
155
|
-
* ```
|
|
156
|
-
*/
|
|
157
|
-
function getSectionPhases(commentValue) {
|
|
158
|
-
const trimmedComment = commentValue.trim();
|
|
159
|
-
if (trimmedComment.length === 0) {
|
|
160
|
-
return [];
|
|
161
|
-
}
|
|
162
|
-
const parts = trimmedComment.split(/\s*&\s*/u);
|
|
163
|
-
return parts.every((part) => isAaaPhase(part)) ? parts : [];
|
|
164
|
-
}
|
|
165
|
-
/**
|
|
166
|
-
* Gets the active phases for a statement.
|
|
167
|
-
* @param statement Input statement value.
|
|
168
|
-
* @param sectionComments Input sectionComments value.
|
|
169
|
-
* @returns Return value output.
|
|
170
|
-
* @example
|
|
171
|
-
* ```typescript
|
|
172
|
-
* getStatementPhases(statement, sectionComments);
|
|
173
|
-
* ```
|
|
174
|
-
*/
|
|
175
|
-
function getStatementPhases(statement, sectionComments) {
|
|
176
|
-
const statementLine = statement.loc?.start.line;
|
|
177
|
-
if (statementLine === void 0) {
|
|
178
|
-
return [];
|
|
179
|
-
}
|
|
180
|
-
let currentPhases = [];
|
|
181
|
-
for (const sectionComment of sectionComments) {
|
|
182
|
-
if (sectionComment.comment.loc.start.line > statementLine) {
|
|
183
|
-
break;
|
|
184
|
-
}
|
|
185
|
-
currentPhases = sectionComment.phases;
|
|
186
|
-
}
|
|
187
|
-
return currentPhases;
|
|
188
|
-
}
|
|
189
|
-
/**
|
|
190
|
-
* Gets supported test call metadata.
|
|
191
|
-
* @param node Input node value.
|
|
192
|
-
* @returns Return value output.
|
|
193
|
-
* @example
|
|
194
|
-
* ```typescript
|
|
195
|
-
* getSupportedTestCall(node);
|
|
196
|
-
* ```
|
|
197
|
-
*/
|
|
198
|
-
function getSupportedTestCall(node) {
|
|
199
|
-
const rootName = getTestRootName(node.callee);
|
|
200
|
-
if (rootName !== "it" && rootName !== "test") {
|
|
201
|
-
return void 0;
|
|
202
|
-
}
|
|
203
|
-
const callbackArgument = node.arguments.at(-1);
|
|
204
|
-
if (callbackArgument === void 0 ||
|
|
205
|
-
callbackArgument.type === "SpreadElement" ||
|
|
206
|
-
(callbackArgument.type !== "ArrowFunctionExpression" &&
|
|
207
|
-
callbackArgument.type !== "FunctionExpression") ||
|
|
208
|
-
callbackArgument.body.type !== "BlockStatement") {
|
|
209
|
-
return void 0;
|
|
210
|
-
}
|
|
211
|
-
return {
|
|
212
|
-
callback: callbackArgument,
|
|
213
|
-
callExpression: node,
|
|
214
|
-
};
|
|
215
|
-
}
|
|
216
|
-
/**
|
|
217
|
-
* Gets the root test callee name.
|
|
218
|
-
* @param callee Input callee value.
|
|
219
|
-
* @returns Return value output.
|
|
220
|
-
* @example
|
|
221
|
-
* ```typescript
|
|
222
|
-
* getTestRootName(callExpression.callee);
|
|
223
|
-
* ```
|
|
224
|
-
*/
|
|
225
|
-
function getTestRootName(callee) {
|
|
226
|
-
if (callee.type === "Identifier") {
|
|
227
|
-
return callee.name;
|
|
228
|
-
}
|
|
229
|
-
if (callee.type === "MemberExpression" && callee.object.type !== "Super") {
|
|
230
|
-
return getTestRootName(callee.object);
|
|
231
|
-
}
|
|
232
|
-
return void 0;
|
|
233
|
-
}
|
|
234
|
-
/**
|
|
235
|
-
* Checks whether a value is an AAA phase.
|
|
236
|
-
* @param value Input value value.
|
|
237
|
-
* @returns Return value output.
|
|
238
|
-
* @example
|
|
239
|
-
* ```typescript
|
|
240
|
-
* isAaaPhase("Arrange");
|
|
241
|
-
* ```
|
|
242
|
-
*/
|
|
243
|
-
function isAaaPhase(value) {
|
|
244
|
-
return phaseNames.includes(value);
|
|
245
|
-
}
|
|
246
81
|
export { aaaPhaseOrder, analyzeTestBlock, countActStatements, getFlattenedSections, getIndentationAtOffset, getLineStartRange, getPhaseBoundaryComments, getSectionPhases, };
|
|
247
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbHl6ZXIuYW5hbHlzaXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZG9tYWluL3Rlc3RpbmcvYWFhL2FuYWx5emVyLmFuYWx5c2lzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVJQUF1STtBQWF2SSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFbkUseURBQXlEO0FBQ3pELE1BQU0sYUFBYSxHQUFHO0lBQ3BCLEdBQUcsRUFBRSxDQUFDO0lBQ04sT0FBTyxFQUFFLENBQUM7SUFDVixNQUFNLEVBQUUsQ0FBQztDQUNrQyxDQUFDO0FBRTlDLGtDQUFrQztBQUNsQyxNQUFNLFVBQVUsR0FBRyxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUk3QyxDQUFDO0FBMEJGOzs7Ozs7Ozs7R0FTRztBQUNILFNBQVMsZ0JBQWdCLENBQ3ZCLE9BQXlCLEVBQ3pCLElBQTJCO0lBRTNCLE1BQU0sUUFBUSxHQUFHLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVDLElBQUksUUFBUSxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDeEIsT0FBTyxLQUFLLENBQUMsQ0FBQztJQUNoQixDQUFDO0lBRUQsTUFBTSxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsR0FBRyxRQUFRLENBQUM7SUFDOUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUMvQixNQUFNLGVBQWUsR0FBeUMsVUFBVTtTQUNyRSxjQUFjLEVBQUU7U0FDaEIsTUFBTSxDQUNMLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FDVixnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7UUFDekIsT0FBTyxDQUFDLElBQUksS0FBSyxNQUFNO1FBQ3ZCLGFBQWEsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ2pELGdCQUFnQixDQUFDLE9B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Z0JBQWdCLENBQUMsSUFBSSxLQUFLLG9CQUFvQixDQUFDO1FBQ2pELGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLEVBQy9DLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQyxDQUFDO0lBQ2hCLENBQUM7SUFFRCxPQUFPO1FBQ0wsUUFBUSxFQUFFLGdCQUF5QztRQUNuRCxjQUFjLEVBQUUsSUFBMEM7S0FDM0QsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQVMsZUFBZSxDQUN0QixNQUF1QztJQUV2QyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssWUFBWSxFQUFFLENBQUM7UUFDakMsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ3JCLENBQUM7SUFDRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssa0JBQWtCLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7UUFDekUsT0FBTyxlQUFlLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQyxDQUFDO0FBQ2hCLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQVMsVUFBVSxDQUFDLEtBQWE7SUFDL0IsT0FBTyxVQUFVLENBQUMsUUFBUSxDQUFDLEtBQWlCLENBQUMsQ0FBQztBQUNoRCxDQUFDO0FBRUQsT0FBTyxFQUNMLGFBQWEsRUFDYixnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBQ2xCLG9CQUFvQixFQUNwQixzQkFBc0IsRUFDdEIsaUJBQWlCLEVBQ2pCLHdCQUF3QixFQUN4QixnQkFBZ0IsR0FDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludCBtYXgtbGluZXM6IFtcImVycm9yXCIsIDM1MF0gLS0gTWFuZGF0b3J5IG11bHRpbGluZSBKU0RvYyBmb3IgaW50ZXJuYWwgaGVscGVycyBwdXNoZXMgdGhpcyBzcGxpdCBmaWxlIG92ZXIgdGhlIGRlZmF1bHQgbGltaXQuICovXHJcblxyXG5pbXBvcnQgdHlwZSB7IFJ1bGUgfSBmcm9tIFwiZXNsaW50XCI7XHJcbmltcG9ydCB0eXBlICogYXMgRVNUcmVlIGZyb20gXCJlc3RyZWVcIjtcclxuXHJcbmltcG9ydCB0eXBlIHtcclxuICBBYWFQaGFzZSxcclxuICBMb2NhdGVkQ29tbWVudCxcclxuICBMb2NhdGVkTm9kZSxcclxuICBTb3VyY2VDb21tZW50LFxyXG4gIFRlc3RCbG9ja0FuYWx5c2lzLFxyXG59IGZyb20gXCIuL3R5cGVzXCI7XHJcblxyXG5pbXBvcnQgeyBpc0xvY2F0ZWRDb21tZW50LCBpc1JhbmdlV2l0aGluIH0gZnJvbSBcIi4vYW5hbHl6ZXIuc3VwZXJcIjtcclxuXHJcbi8qKiBDYW5vbmljYWwgb3JkZXJpbmcgdXNlZCB3aGVuIGNvbXBhcmluZyBBQUEgcGhhc2VzLiAqL1xyXG5jb25zdCBhYWFQaGFzZU9yZGVyID0ge1xyXG4gIEFjdDogMSxcclxuICBBcnJhbmdlOiAwLFxyXG4gIEFzc2VydDogMixcclxufSBhcyBjb25zdCBzYXRpc2ZpZXMgUmVjb3JkPEFhYVBoYXNlLCBudW1iZXI+O1xyXG5cclxuLyoqIFJlY29nbml6ZWQgQUFBIHBoYXNlIG5hbWVzLiAqL1xyXG5jb25zdCBwaGFzZU5hbWVzID0gW1wiQXJyYW5nZVwiLCBcIkFjdFwiLCBcIkFzc2VydFwiXSBhcyBjb25zdCBzYXRpc2ZpZXMgcmVhZG9ubHkgW1xyXG4gIEFhYVBoYXNlLFxyXG4gIEFhYVBoYXNlLFxyXG4gIEFhYVBoYXNlLFxyXG5dO1xyXG5cclxuLyoqIEhlbHBlciBzdGF0ZSBmb3IgZmxhdHRlbmVkIHNlY3Rpb24gY29tbWVudHMuICovXHJcbmludGVyZmFjZSBGbGF0dGVuZWRTZWN0aW9uIHtcclxuICAvKiogT3JpZ2luYWwgc291cmNlIGNvbW1lbnQgZm9yIHRoZSBzZWN0aW9uIG1hcmtlci4gKi9cclxuICBjb21tZW50OiBTb3VyY2VDb21tZW50O1xyXG4gIC8qKiBQaGFzZSByZXByZXNlbnRlZCBieSB0aGUgZmxhdHRlbmVkIHNlY3Rpb24gZW50cnkuICovXHJcbiAgcGhhc2U6IEFhYVBoYXNlO1xyXG59XHJcblxyXG4vKiogU3VwcG9ydGVkIGNhbGwtZXhwcmVzc2lvbiB3cmFwcGVyIGZvciBhbmFseXplZCB0ZXN0IGJsb2Nrcy4gKi9cclxuaW50ZXJmYWNlIFN1cHBvcnRlZFRlc3RDYWxsIHtcclxuICAvKiogQ2FsbGJhY2sgYXJndW1lbnQgdGhhdCBvd25zIHRoZSB0ZXN0IGJvZHkuICovXHJcbiAgY2FsbGJhY2s6IFN1cHBvcnRlZFRlc3RDYWxsYmFjaztcclxuICAvKiogT3JpZ2luYWwgYGl0YCBvciBgdGVzdGAgaW52b2NhdGlvbi4gKi9cclxuICBjYWxsRXhwcmVzc2lvbjogTG9jYXRlZE5vZGU8RVNUcmVlLkNhbGxFeHByZXNzaW9uPjtcclxufVxyXG5cclxuLyoqIFN1cHBvcnRlZCB0ZXN0IGNhbGxiYWNrIHNoYXBlIGZvciBgaXRgIGFuZCBgdGVzdGAgY2FsbHMuICovXHJcbnR5cGUgU3VwcG9ydGVkVGVzdENhbGxiYWNrID0gTG9jYXRlZE5vZGU8XHJcbiAgRVNUcmVlLkFycm93RnVuY3Rpb25FeHByZXNzaW9uIHwgRVNUcmVlLkZ1bmN0aW9uRXhwcmVzc2lvblxyXG4+ICYge1xyXG4gIC8qKiBDYWxsYmFjayBib2R5IGJsb2NrIHVzZWQgZm9yIHNlY3Rpb24gYW5hbHlzaXMuICovXHJcbiAgYm9keTogTG9jYXRlZE5vZGU8RVNUcmVlLkJsb2NrU3RhdGVtZW50PjtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbmFseXplcyBzdXBwb3J0ZWQgQUFBIHRlc3QgYmxvY2tzLlxyXG4gKiBAcGFyYW0gY29udGV4dCBJbnB1dCBjb250ZXh0IHZhbHVlLlxyXG4gKiBAcGFyYW0gbm9kZSBJbnB1dCBub2RlIHZhbHVlLlxyXG4gKiBAcmV0dXJucyBSZXR1cm4gdmFsdWUgb3V0cHV0LlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGFuYWx5emVUZXN0QmxvY2soY29udGV4dCwgbm9kZSk7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gYW5hbHl6ZVRlc3RCbG9jayhcclxuICBjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0LFxyXG4gIG5vZGU6IEVTVHJlZS5DYWxsRXhwcmVzc2lvbixcclxuKTogVGVzdEJsb2NrQW5hbHlzaXMgfCB1bmRlZmluZWQge1xyXG4gIGNvbnN0IHRlc3RDYWxsID0gZ2V0U3VwcG9ydGVkVGVzdENhbGwobm9kZSk7XHJcbiAgaWYgKHRlc3RDYWxsID09PSB2b2lkIDApIHtcclxuICAgIHJldHVybiB2b2lkIDA7XHJcbiAgfVxyXG5cclxuICBjb25zdCB7IGNhbGxiYWNrLCBjYWxsRXhwcmVzc2lvbiB9ID0gdGVzdENhbGw7XHJcbiAgY29uc3QgeyBzb3VyY2VDb2RlIH0gPSBjb250ZXh0O1xyXG4gIGNvbnN0IHNlY3Rpb25Db21tZW50czogVGVzdEJsb2NrQW5hbHlzaXNbXCJzZWN0aW9uQ29tbWVudHNcIl0gPSBzb3VyY2VDb2RlXHJcbiAgICAuZ2V0QWxsQ29tbWVudHMoKVxyXG4gICAgLmZpbHRlcihcclxuICAgICAgKGNvbW1lbnQpID0+XHJcbiAgICAgICAgaXNMb2NhdGVkQ29tbWVudChjb21tZW50KSAmJlxyXG4gICAgICAgIGNvbW1lbnQudHlwZSA9PT0gXCJMaW5lXCIgJiZcclxuICAgICAgICBpc1JhbmdlV2l0aGluKGNvbW1lbnQucmFuZ2UsIGNhbGxiYWNrLmJvZHkucmFuZ2UpICYmXHJcbiAgICAgICAgZ2V0U2VjdGlvblBoYXNlcyhjb21tZW50LnZhbHVlKS5sZW5ndGggPiAwLFxyXG4gICAgKVxyXG4gICAgLm1hcCgoY29tbWVudCkgPT4gKHtcclxuICAgICAgY29tbWVudDogY29tbWVudCBhcyBMb2NhdGVkQ29tbWVudCxcclxuICAgICAgcGhhc2VzOiBnZXRTZWN0aW9uUGhhc2VzKGNvbW1lbnQudmFsdWUpLFxyXG4gICAgfSkpO1xyXG5cclxuICByZXR1cm4ge1xyXG4gICAgYm9keTogY2FsbGJhY2suYm9keSxcclxuICAgIGJvZHlMaW5lQ291bnQ6XHJcbiAgICAgIGNhbGxiYWNrLmJvZHkubG9jLmVuZC5saW5lIC0gY2FsbGJhY2suYm9keS5sb2Muc3RhcnQubGluZSAtIDEsXHJcbiAgICBjYWxsRXhwcmVzc2lvbixcclxuICAgIG5ld2xpbmU6IGdldE5ld2xpbmUoc291cmNlQ29kZS50ZXh0KSxcclxuICAgIHNlY3Rpb25Db21tZW50cyxcclxuICAgIHNvdXJjZVRleHQ6IHNvdXJjZUNvZGUudGV4dCxcclxuICAgIHN0YXRlbWVudHM6IGNhbGxiYWNrLmJvZHkuYm9keS5tYXAoKHN0YXRlbWVudCkgPT4ge1xyXG4gICAgICBjb25zdCBwaGFzZXMgPSBnZXRTdGF0ZW1lbnRQaGFzZXMoc3RhdGVtZW50LCBzZWN0aW9uQ29tbWVudHMpO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIG5vZGU6IHN0YXRlbWVudCBhcyBMb2NhdGVkTm9kZTxFU1RyZWUuU3RhdGVtZW50PixcclxuICAgICAgICBwaGFzZTogcGhhc2VzLmF0KC0xKSxcclxuICAgICAgICBwaGFzZXMsXHJcbiAgICAgIH07XHJcbiAgICB9KSxcclxuICB9O1xyXG59XHJcblxyXG4vKipcclxuICogQ291bnRzIEFjdCBzdGF0ZW1lbnRzLlxyXG4gKiBAcGFyYW0gYW5hbHlzaXMgSW5wdXQgYW5hbHlzaXMgdmFsdWUuXHJcbiAqIEByZXR1cm5zIFJldHVybiB2YWx1ZSBvdXRwdXQuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogY291bnRBY3RTdGF0ZW1lbnRzKGFuYWx5c2lzKTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBjb3VudEFjdFN0YXRlbWVudHMoYW5hbHlzaXM6IFRlc3RCbG9ja0FuYWx5c2lzKTogbnVtYmVyIHtcclxuICByZXR1cm4gYW5hbHlzaXMuc3RhdGVtZW50cy5maWx0ZXIoXHJcbiAgICAoc3RhdGVtZW50KSA9PlxyXG4gICAgICBzdGF0ZW1lbnQucGhhc2VzLmluY2x1ZGVzKFwiQWN0XCIpICYmXHJcbiAgICAgIChzdGF0ZW1lbnQubm9kZS50eXBlID09PSBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIiB8fFxyXG4gICAgICAgIHN0YXRlbWVudC5ub2RlLnR5cGUgPT09IFwiVmFyaWFibGVEZWNsYXJhdGlvblwiKSxcclxuICApLmxlbmd0aDtcclxufVxyXG5cclxuLyoqXHJcbiAqIEZsYXR0ZW5zIHNlY3Rpb24gY29tbWVudHMuXHJcbiAqIEBwYXJhbSBhbmFseXNpcyBJbnB1dCBhbmFseXNpcyB2YWx1ZS5cclxuICogQHJldHVybnMgUmV0dXJuIHZhbHVlIG91dHB1dC5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBnZXRGbGF0dGVuZWRTZWN0aW9ucyhhbmFseXNpcyk7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0RmxhdHRlbmVkU2VjdGlvbnMoXHJcbiAgYW5hbHlzaXM6IFBpY2s8VGVzdEJsb2NrQW5hbHlzaXMsIFwic2VjdGlvbkNvbW1lbnRzXCI+LFxyXG4pOiBGbGF0dGVuZWRTZWN0aW9uW10ge1xyXG4gIHJldHVybiBhbmFseXNpcy5zZWN0aW9uQ29tbWVudHMuZmxhdE1hcCgoc2VjdGlvbkNvbW1lbnQpID0+XHJcbiAgICBzZWN0aW9uQ29tbWVudC5waGFzZXMubWFwKChwaGFzZSkgPT4gKHtcclxuICAgICAgY29tbWVudDogc2VjdGlvbkNvbW1lbnQuY29tbWVudCxcclxuICAgICAgcGhhc2UsXHJcbiAgICB9KSksXHJcbiAgKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldHMgaW5kZW50YXRpb24gYXQgYW4gb2Zmc2V0LlxyXG4gKiBAcGFyYW0gc291cmNlVGV4dCBJbnB1dCBzb3VyY2VUZXh0IHZhbHVlLlxyXG4gKiBAcGFyYW0gb2Zmc2V0IElucHV0IG9mZnNldCB2YWx1ZS5cclxuICogQHJldHVybnMgUmV0dXJuIHZhbHVlIG91dHB1dC5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBnZXRJbmRlbnRhdGlvbkF0T2Zmc2V0KHNvdXJjZVRleHQsIDQpO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIGdldEluZGVudGF0aW9uQXRPZmZzZXQoc291cmNlVGV4dDogc3RyaW5nLCBvZmZzZXQ6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgY29uc3QgbGluZVN0YXJ0ID0gc291cmNlVGV4dC5sYXN0SW5kZXhPZihcIlxcblwiLCBNYXRoLm1heCgwLCBvZmZzZXQgLSAxKSkgKyAxO1xyXG4gIGNvbnN0IGxpbmVQcmVmaXggPSBzb3VyY2VUZXh0LnNsaWNlKGxpbmVTdGFydCwgb2Zmc2V0KTtcclxuICBjb25zdCB0cmltbWVkUHJlZml4ID0gbGluZVByZWZpeC50cmltU3RhcnQoKTtcclxuXHJcbiAgcmV0dXJuIGxpbmVQcmVmaXguc2xpY2UoMCwgbGluZVByZWZpeC5sZW5ndGggLSB0cmltbWVkUHJlZml4Lmxlbmd0aCk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXRzIHRoZSBzdGFydCByYW5nZSBmb3IgYSBsaW5lLlxyXG4gKiBAcGFyYW0gc291cmNlVGV4dCBJbnB1dCBzb3VyY2VUZXh0IHZhbHVlLlxyXG4gKiBAcGFyYW0gbGluZSBJbnB1dCBsaW5lIHZhbHVlLlxyXG4gKiBAcmV0dXJucyBSZXR1cm4gdmFsdWUgb3V0cHV0LlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGdldExpbmVTdGFydFJhbmdlKHNvdXJjZVRleHQsIDIpO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIGdldExpbmVTdGFydFJhbmdlKHNvdXJjZVRleHQ6IHN0cmluZywgbGluZTogbnVtYmVyKTogW251bWJlciwgbnVtYmVyXSB7XHJcbiAgbGV0IGN1cnJlbnRMaW5lID0gMTtcclxuICBsZXQgY3VycmVudE9mZnNldCA9IDA7XHJcbiAgZm9yIChjb25zdCBjaGFyYWN0ZXIgb2Ygc291cmNlVGV4dCkge1xyXG4gICAgaWYgKGN1cnJlbnRMaW5lID09PSBsaW5lKSB7XHJcbiAgICAgIHJldHVybiBbY3VycmVudE9mZnNldCwgY3VycmVudE9mZnNldF07XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhcmFjdGVyID09PSBcIlxcblwiKSB7XHJcbiAgICAgIGN1cnJlbnRMaW5lICs9IDE7XHJcbiAgICB9XHJcbiAgICBjdXJyZW50T2Zmc2V0ICs9IDE7XHJcbiAgfVxyXG4gIHJldHVybiBbc291cmNlVGV4dC5sZW5ndGgsIHNvdXJjZVRleHQubGVuZ3RoXTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldHMgdGhlIG5ld2xpbmUgc2VxdWVuY2UuXHJcbiAqIEBwYXJhbSB0ZXh0IElucHV0IHRleHQgdmFsdWUuXHJcbiAqIEByZXR1cm5zIFJldHVybiB2YWx1ZSBvdXRwdXQuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogZ2V0TmV3bGluZShzb3VyY2VUZXh0KTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXROZXdsaW5lKHRleHQ6IHN0cmluZyk6IFwiXFxuXCIgfCBcIlxcclxcblwiIHtcclxuICByZXR1cm4gdGV4dC5pbmNsdWRlcyhcIlxcclxcblwiKSA/IFwiXFxyXFxuXCIgOiBcIlxcblwiO1xyXG59XHJcblxyXG4vKipcclxuICogR2V0cyBwaGFzZS1ib3VuZGFyeSBjb21tZW50cy5cclxuICogQHBhcmFtIGFuYWx5c2lzIElucHV0IGFuYWx5c2lzIHZhbHVlLlxyXG4gKiBAcmV0dXJucyBSZXR1cm4gdmFsdWUgb3V0cHV0LlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGdldFBoYXNlQm91bmRhcnlDb21tZW50cyhhbmFseXNpcyk7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0UGhhc2VCb3VuZGFyeUNvbW1lbnRzKFxyXG4gIGFuYWx5c2lzOiBQaWNrPFRlc3RCbG9ja0FuYWx5c2lzLCBcInNlY3Rpb25Db21tZW50c1wiPixcclxuKTogVGVzdEJsb2NrQW5hbHlzaXNbXCJzZWN0aW9uQ29tbWVudHNcIl0ge1xyXG4gIHJldHVybiBhbmFseXNpcy5zZWN0aW9uQ29tbWVudHMuZmlsdGVyKChzZWN0aW9uQ29tbWVudCkgPT5cclxuICAgIHNlY3Rpb25Db21tZW50LnBoYXNlcy5zb21lKFxyXG4gICAgICAocGhhc2UpID0+IHBoYXNlID09PSBcIkFjdFwiIHx8IHBoYXNlID09PSBcIkFzc2VydFwiLFxyXG4gICAgKSxcclxuICApO1xyXG59XHJcblxyXG4vKipcclxuICogUGFyc2VzIEFBQSBwaGFzZXMgZnJvbSBhIGNvbW1lbnQuXHJcbiAqIEBwYXJhbSBjb21tZW50VmFsdWUgSW5wdXQgY29tbWVudFZhbHVlIHZhbHVlLlxyXG4gKiBAcmV0dXJucyBSZXR1cm4gdmFsdWUgb3V0cHV0LlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGdldFNlY3Rpb25QaGFzZXMoXCJBcnJhbmdlICYgQWN0XCIpO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIGdldFNlY3Rpb25QaGFzZXMoY29tbWVudFZhbHVlOiBzdHJpbmcpOiBBYWFQaGFzZVtdIHtcclxuICBjb25zdCB0cmltbWVkQ29tbWVudCA9IGNvbW1lbnRWYWx1ZS50cmltKCk7XHJcbiAgaWYgKHRyaW1tZWRDb21tZW50Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgcmV0dXJuIFtdO1xyXG4gIH1cclxuICBjb25zdCBwYXJ0cyA9IHRyaW1tZWRDb21tZW50LnNwbGl0KC9cXHMqJlxccyovdSk7XHJcbiAgcmV0dXJuIHBhcnRzLmV2ZXJ5KChwYXJ0KSA9PiBpc0FhYVBoYXNlKHBhcnQpKSA/IHBhcnRzIDogW107XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXRzIHRoZSBhY3RpdmUgcGhhc2VzIGZvciBhIHN0YXRlbWVudC5cclxuICogQHBhcmFtIHN0YXRlbWVudCBJbnB1dCBzdGF0ZW1lbnQgdmFsdWUuXHJcbiAqIEBwYXJhbSBzZWN0aW9uQ29tbWVudHMgSW5wdXQgc2VjdGlvbkNvbW1lbnRzIHZhbHVlLlxyXG4gKiBAcmV0dXJucyBSZXR1cm4gdmFsdWUgb3V0cHV0LlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGdldFN0YXRlbWVudFBoYXNlcyhzdGF0ZW1lbnQsIHNlY3Rpb25Db21tZW50cyk7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0U3RhdGVtZW50UGhhc2VzKFxyXG4gIHN0YXRlbWVudDogRVNUcmVlLlN0YXRlbWVudCxcclxuICBzZWN0aW9uQ29tbWVudHM6IFRlc3RCbG9ja0FuYWx5c2lzW1wic2VjdGlvbkNvbW1lbnRzXCJdLFxyXG4pOiBBYWFQaGFzZVtdIHtcclxuICBjb25zdCBzdGF0ZW1lbnRMaW5lID0gc3RhdGVtZW50LmxvYz8uc3RhcnQubGluZTtcclxuICBpZiAoc3RhdGVtZW50TGluZSA9PT0gdm9pZCAwKSB7XHJcbiAgICByZXR1cm4gW107XHJcbiAgfVxyXG4gIGxldCBjdXJyZW50UGhhc2VzOiBBYWFQaGFzZVtdID0gW107XHJcbiAgZm9yIChjb25zdCBzZWN0aW9uQ29tbWVudCBvZiBzZWN0aW9uQ29tbWVudHMpIHtcclxuICAgIGlmIChzZWN0aW9uQ29tbWVudC5jb21tZW50LmxvYy5zdGFydC5saW5lID4gc3RhdGVtZW50TGluZSkge1xyXG4gICAgICBicmVhaztcclxuICAgIH1cclxuICAgIGN1cnJlbnRQaGFzZXMgPSBzZWN0aW9uQ29tbWVudC5waGFzZXM7XHJcbiAgfVxyXG4gIHJldHVybiBjdXJyZW50UGhhc2VzO1xyXG59XHJcblxyXG4vKipcclxuICogR2V0cyBzdXBwb3J0ZWQgdGVzdCBjYWxsIG1ldGFkYXRhLlxyXG4gKiBAcGFyYW0gbm9kZSBJbnB1dCBub2RlIHZhbHVlLlxyXG4gKiBAcmV0dXJucyBSZXR1cm4gdmFsdWUgb3V0cHV0LlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGdldFN1cHBvcnRlZFRlc3RDYWxsKG5vZGUpO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIGdldFN1cHBvcnRlZFRlc3RDYWxsKFxyXG4gIG5vZGU6IEVTVHJlZS5DYWxsRXhwcmVzc2lvbixcclxuKTogU3VwcG9ydGVkVGVzdENhbGwgfCB1bmRlZmluZWQge1xyXG4gIGNvbnN0IHJvb3ROYW1lID0gZ2V0VGVzdFJvb3ROYW1lKG5vZGUuY2FsbGVlKTtcclxuICBpZiAocm9vdE5hbWUgIT09IFwiaXRcIiAmJiByb290TmFtZSAhPT0gXCJ0ZXN0XCIpIHtcclxuICAgIHJldHVybiB2b2lkIDA7XHJcbiAgfVxyXG5cclxuICBjb25zdCBjYWxsYmFja0FyZ3VtZW50ID0gbm9kZS5hcmd1bWVudHMuYXQoLTEpO1xyXG4gIGlmIChcclxuICAgIGNhbGxiYWNrQXJndW1lbnQgPT09IHZvaWQgMCB8fFxyXG4gICAgY2FsbGJhY2tBcmd1bWVudC50eXBlID09PSBcIlNwcmVhZEVsZW1lbnRcIiB8fFxyXG4gICAgKGNhbGxiYWNrQXJndW1lbnQudHlwZSAhPT0gXCJBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvblwiICYmXHJcbiAgICAgIGNhbGxiYWNrQXJndW1lbnQudHlwZSAhPT0gXCJGdW5jdGlvbkV4cHJlc3Npb25cIikgfHxcclxuICAgIGNhbGxiYWNrQXJndW1lbnQuYm9keS50eXBlICE9PSBcIkJsb2NrU3RhdGVtZW50XCJcclxuICApIHtcclxuICAgIHJldHVybiB2b2lkIDA7XHJcbiAgfVxyXG5cclxuICByZXR1cm4ge1xyXG4gICAgY2FsbGJhY2s6IGNhbGxiYWNrQXJndW1lbnQgYXMgU3VwcG9ydGVkVGVzdENhbGxiYWNrLFxyXG4gICAgY2FsbEV4cHJlc3Npb246IG5vZGUgYXMgTG9jYXRlZE5vZGU8RVNUcmVlLkNhbGxFeHByZXNzaW9uPixcclxuICB9O1xyXG59XHJcblxyXG4vKipcclxuICogR2V0cyB0aGUgcm9vdCB0ZXN0IGNhbGxlZSBuYW1lLlxyXG4gKiBAcGFyYW0gY2FsbGVlIElucHV0IGNhbGxlZSB2YWx1ZS5cclxuICogQHJldHVybnMgUmV0dXJuIHZhbHVlIG91dHB1dC5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBnZXRUZXN0Um9vdE5hbWUoY2FsbEV4cHJlc3Npb24uY2FsbGVlKTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRUZXN0Um9vdE5hbWUoXHJcbiAgY2FsbGVlOiBFU1RyZWUuQ2FsbEV4cHJlc3Npb25bXCJjYWxsZWVcIl0sXHJcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgaWYgKGNhbGxlZS50eXBlID09PSBcIklkZW50aWZpZXJcIikge1xyXG4gICAgcmV0dXJuIGNhbGxlZS5uYW1lO1xyXG4gIH1cclxuICBpZiAoY2FsbGVlLnR5cGUgPT09IFwiTWVtYmVyRXhwcmVzc2lvblwiICYmIGNhbGxlZS5vYmplY3QudHlwZSAhPT0gXCJTdXBlclwiKSB7XHJcbiAgICByZXR1cm4gZ2V0VGVzdFJvb3ROYW1lKGNhbGxlZS5vYmplY3QpO1xyXG4gIH1cclxuICByZXR1cm4gdm9pZCAwO1xyXG59XHJcblxyXG4vKipcclxuICogQ2hlY2tzIHdoZXRoZXIgYSB2YWx1ZSBpcyBhbiBBQUEgcGhhc2UuXHJcbiAqIEBwYXJhbSB2YWx1ZSBJbnB1dCB2YWx1ZSB2YWx1ZS5cclxuICogQHJldHVybnMgUmV0dXJuIHZhbHVlIG91dHB1dC5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBpc0FhYVBoYXNlKFwiQXJyYW5nZVwiKTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBpc0FhYVBoYXNlKHZhbHVlOiBzdHJpbmcpOiB2YWx1ZSBpcyBBYWFQaGFzZSB7XHJcbiAgcmV0dXJuIHBoYXNlTmFtZXMuaW5jbHVkZXModmFsdWUgYXMgQWFhUGhhc2UpO1xyXG59XHJcblxyXG5leHBvcnQge1xyXG4gIGFhYVBoYXNlT3JkZXIsXHJcbiAgYW5hbHl6ZVRlc3RCbG9jayxcclxuICBjb3VudEFjdFN0YXRlbWVudHMsXHJcbiAgZ2V0RmxhdHRlbmVkU2VjdGlvbnMsXHJcbiAgZ2V0SW5kZW50YXRpb25BdE9mZnNldCxcclxuICBnZXRMaW5lU3RhcnRSYW5nZSxcclxuICBnZXRQaGFzZUJvdW5kYXJ5Q29tbWVudHMsXHJcbiAgZ2V0U2VjdGlvblBoYXNlcyxcclxufTtcclxuZXhwb3J0IHR5cGUgeyBGbGF0dGVuZWRTZWN0aW9uIH07XHJcbiJdfQ==
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbHl6ZXIuYW5hbHlzaXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZG9tYWluL3Rlc3RpbmcvYWFhL2FuYWx5emVyLmFuYWx5c2lzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtBLE9BQU8sRUFDTCxhQUFhLElBQUksMkJBQTJCLEVBQzVDLGtCQUFrQixJQUFJLGdDQUFnQyxFQUN0RCxvQkFBb0IsSUFBSSxrQ0FBa0MsRUFDMUQsc0JBQXNCLElBQUksb0NBQW9DLEVBQzlELGlCQUFpQixJQUFJLCtCQUErQixFQUNwRCxVQUFVLElBQUksd0JBQXdCLEVBQ3RDLHdCQUF3QixJQUFJLHNDQUFzQyxFQUNsRSxnQkFBZ0IsSUFBSSw4QkFBOEIsRUFDbEQsa0JBQWtCLElBQUksZ0NBQWdDLEVBQ3RELG9CQUFvQixJQUFJLGtDQUFrQyxHQUMzRCxNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVuRTs7Ozs7Ozs7OztHQVVHO0FBQ0gsU0FBUyxPQUFPLENBQ2QsY0FBdUQ7SUFFdkQsT0FBTyxDQUFDLEdBQUcsVUFBVSxFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQztBQUMxRCxDQUFDO0FBRUQsdUNBQXVDO0FBQ3ZDLE1BQU0sYUFBYSxHQUFHLDJCQUEyQixDQUFDO0FBRWxELDREQUE0RDtBQUM1RCxNQUFNLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO0FBRXJFLHNFQUFzRTtBQUN0RSxNQUFNLG9CQUFvQixHQUFHLE9BQU8sQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO0FBRXpFLCtFQUErRTtBQUMvRSxNQUFNLHNCQUFzQixHQUFHLE9BQU8sQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO0FBRTdFLGlFQUFpRTtBQUNqRSxNQUFNLGlCQUFpQixHQUFHLE9BQU8sQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO0FBRW5FLDJEQUEyRDtBQUMzRCxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsd0JBQXdCLENBQUMsQ0FBQztBQUVyRCwrRUFBK0U7QUFDL0UsTUFBTSx3QkFBd0IsR0FBRyxPQUFPLENBQ3RDLHNDQUFzQyxDQUN2QyxDQUFDO0FBRUYsMkRBQTJEO0FBQzNELE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLDhCQUE4QixDQUFDLENBQUM7QUFFakUseURBQXlEO0FBQ3pELE1BQU0sa0JBQWtCLEdBQUcsT0FBTyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7QUFFckUsMkZBQTJGO0FBQzNGLE1BQU0sb0JBQW9CLEdBQUcsT0FBTyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7QUFFekU7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FDdkIsT0FBeUIsRUFDekIsSUFBMkI7SUFFM0IsTUFBTSxRQUFRLEdBQUcsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUMsSUFBSSxRQUFRLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN4QixPQUFPLEtBQUssQ0FBQyxDQUFDO0lBQ2hCLENBQUM7SUFFRCxNQUFNLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxHQUFHLFFBQVEsQ0FBQztJQUM5QyxNQUFNLEVBQUUsVUFBVSxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBQy9CLE1BQU0sZUFBZSxHQUF5QyxVQUFVO1NBQ3JFLGNBQWMsRUFBRTtTQUNoQixNQUFNLENBQ0wsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUNWLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztRQUN6QixPQUFPLENBQUMsSUFBSSxLQUFLLE1BQU07UUFDdkIsYUFBYSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDakQsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQzdDO1NBQ0EsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pCLE9BQU8sRUFBRSxPQUF5QjtRQUNsQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztLQUN4QyxDQUFDLENBQUMsQ0FBQztJQUVOLE9BQU87UUFDTCxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUk7UUFDbkIsYUFBYSxFQUNYLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDO1FBQy9ELGNBQWM7UUFDZCxPQUFPLEVBQUUsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7UUFDcEMsZUFBZTtRQUNmLFVBQVUsRUFBRSxVQUFVLENBQUMsSUFBSTtRQUMzQixVQUFVLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDL0MsTUFBTSxNQUFNLEdBQUcsa0JBQWtCLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1lBQzlELE9BQU87Z0JBQ0wsSUFBSSxFQUFFLFNBQTBDO2dCQUNoRCxLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDcEIsTUFBTTthQUNQLENBQUM7UUFDSixDQUFDLENBQUM7S0FDSCxDQUFDO0FBQ0osQ0FBQztBQUVELE9BQU8sRUFDTCxhQUFhLEVBQ2IsZ0JBQWdCLEVBQ2hCLGtCQUFrQixFQUNsQixvQkFBb0IsRUFDcEIsc0JBQXNCLEVBQ3RCLGlCQUFpQixFQUNqQix3QkFBd0IsRUFDeEIsZ0JBQWdCLEdBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFJ1bGUgfSBmcm9tIFwiZXNsaW50XCI7XHJcbmltcG9ydCB0eXBlICogYXMgRVNUcmVlIGZyb20gXCJlc3RyZWVcIjtcclxuXHJcbmltcG9ydCB0eXBlIHsgTG9jYXRlZENvbW1lbnQsIExvY2F0ZWROb2RlLCBUZXN0QmxvY2tBbmFseXNpcyB9IGZyb20gXCIuL3R5cGVzXCI7XHJcblxyXG5pbXBvcnQge1xyXG4gIGFhYVBoYXNlT3JkZXIgYXMgYWFhUGhhc2VPcmRlckltcGxlbWVudGF0aW9uLFxyXG4gIGNvdW50QWN0U3RhdGVtZW50cyBhcyBjb3VudEFjdFN0YXRlbWVudHNJbXBsZW1lbnRhdGlvbixcclxuICBnZXRGbGF0dGVuZWRTZWN0aW9ucyBhcyBnZXRGbGF0dGVuZWRTZWN0aW9uc0ltcGxlbWVudGF0aW9uLFxyXG4gIGdldEluZGVudGF0aW9uQXRPZmZzZXQgYXMgZ2V0SW5kZW50YXRpb25BdE9mZnNldEltcGxlbWVudGF0aW9uLFxyXG4gIGdldExpbmVTdGFydFJhbmdlIGFzIGdldExpbmVTdGFydFJhbmdlSW1wbGVtZW50YXRpb24sXHJcbiAgZ2V0TmV3bGluZSBhcyBnZXROZXdsaW5lSW1wbGVtZW50YXRpb24sXHJcbiAgZ2V0UGhhc2VCb3VuZGFyeUNvbW1lbnRzIGFzIGdldFBoYXNlQm91bmRhcnlDb21tZW50c0ltcGxlbWVudGF0aW9uLFxyXG4gIGdldFNlY3Rpb25QaGFzZXMgYXMgZ2V0U2VjdGlvblBoYXNlc0ltcGxlbWVudGF0aW9uLFxyXG4gIGdldFN0YXRlbWVudFBoYXNlcyBhcyBnZXRTdGF0ZW1lbnRQaGFzZXNJbXBsZW1lbnRhdGlvbixcclxuICBnZXRTdXBwb3J0ZWRUZXN0Q2FsbCBhcyBnZXRTdXBwb3J0ZWRUZXN0Q2FsbEltcGxlbWVudGF0aW9uLFxyXG59IGZyb20gXCIuL2FuYWx5emVyLmFuYWx5c2lzLmhlbHBlcnNcIjtcclxuaW1wb3J0IHsgaXNMb2NhdGVkQ29tbWVudCwgaXNSYW5nZVdpdGhpbiB9IGZyb20gXCIuL2FuYWx5emVyLnN1cGVyXCI7XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIGxvY2FsIGZvcndhcmRpbmcgZnVuY3Rpb24gZm9yIGFuIGltcG9ydGVkIGFuYWx5emVyIGhlbHBlci5cclxuICogQHRlbXBsYXRlIFRQYXJhbWV0ZXJzIEZvcndhcmRlZCBwYXJhbWV0ZXIgdHVwbGUuXHJcbiAqIEB0ZW1wbGF0ZSBUUmVzdWx0IEZvcndhcmRlZCByZXR1cm4gdHlwZS5cclxuICogQHBhcmFtIGltcGxlbWVudGF0aW9uIEltcG9ydGVkIGhlbHBlciBpbXBsZW1lbnRhdGlvbi5cclxuICogQHJldHVybnMgTG9jYWwgZnVuY3Rpb24gdGhhdCBmb3J3YXJkcyBhbGwgYXJndW1lbnRzIHRvIHRoZSBpbXBsZW1lbnRhdGlvbi5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBjb25zdCBsb2NhbEhlbHBlciA9IGZvcndhcmQoaW1wbGVtZW50YXRpb24pO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIGZvcndhcmQ8VFBhcmFtZXRlcnMgZXh0ZW5kcyB1bmtub3duW10sIFRSZXN1bHQ+KFxyXG4gIGltcGxlbWVudGF0aW9uOiAoLi4ucGFyYW1ldGVyczogVFBhcmFtZXRlcnMpID0+IFRSZXN1bHQsXHJcbik6ICguLi5wYXJhbWV0ZXJzOiBUUGFyYW1ldGVycykgPT4gVFJlc3VsdCB7XHJcbiAgcmV0dXJuICguLi5wYXJhbWV0ZXJzKSA9PiBpbXBsZW1lbnRhdGlvbiguLi5wYXJhbWV0ZXJzKTtcclxufVxyXG5cclxuLyoqIE9yZGVyZWQgbGlzdCBvZiBBQUEgcGhhc2UgbmFtZXMuICovXHJcbmNvbnN0IGFhYVBoYXNlT3JkZXIgPSBhYWFQaGFzZU9yZGVySW1wbGVtZW50YXRpb247XHJcblxyXG4vKiogQ291bnRzIEFjdC1waGFzZSBzdGF0ZW1lbnRzIGluIGEgdGVzdCBibG9jayBhbmFseXNpcy4gKi9cclxuY29uc3QgY291bnRBY3RTdGF0ZW1lbnRzID0gZm9yd2FyZChjb3VudEFjdFN0YXRlbWVudHNJbXBsZW1lbnRhdGlvbik7XHJcblxyXG4vKiogRmxhdHRlbnMgbXVsdGktcGhhc2Ugc2VjdGlvbiBjb21tZW50cyBpbnRvIG9uZSBlbnRyeSBwZXIgcGhhc2UuICovXHJcbmNvbnN0IGdldEZsYXR0ZW5lZFNlY3Rpb25zID0gZm9yd2FyZChnZXRGbGF0dGVuZWRTZWN0aW9uc0ltcGxlbWVudGF0aW9uKTtcclxuXHJcbi8qKiBSZXNvbHZlcyB0aGUgbGVhZGluZyB3aGl0ZXNwYWNlIGZvciB0aGUgbGluZSBjb250YWluaW5nIGEgc291cmNlIG9mZnNldC4gKi9cclxuY29uc3QgZ2V0SW5kZW50YXRpb25BdE9mZnNldCA9IGZvcndhcmQoZ2V0SW5kZW50YXRpb25BdE9mZnNldEltcGxlbWVudGF0aW9uKTtcclxuXHJcbi8qKiBSZXR1cm5zIHRoZSBzdGFydC1vZi1saW5lIHJhbmdlIGZvciBhIGdpdmVuIHNvdXJjZSBvZmZzZXQuICovXHJcbmNvbnN0IGdldExpbmVTdGFydFJhbmdlID0gZm9yd2FyZChnZXRMaW5lU3RhcnRSYW5nZUltcGxlbWVudGF0aW9uKTtcclxuXHJcbi8qKiBEZXRlY3RzIHRoZSBsaW5lLWVuZGluZyBzdHlsZSB1c2VkIGluIGEgc291cmNlIHRleHQuICovXHJcbmNvbnN0IGdldE5ld2xpbmUgPSBmb3J3YXJkKGdldE5ld2xpbmVJbXBsZW1lbnRhdGlvbik7XHJcblxyXG4vKiogRXh0cmFjdHMgdGhlIHBoYXNlLWJvdW5kYXJ5IHNlY3Rpb24gY29tbWVudHMgZnJvbSBhIHRlc3QgYmxvY2sgYW5hbHlzaXMuICovXHJcbmNvbnN0IGdldFBoYXNlQm91bmRhcnlDb21tZW50cyA9IGZvcndhcmQoXHJcbiAgZ2V0UGhhc2VCb3VuZGFyeUNvbW1lbnRzSW1wbGVtZW50YXRpb24sXHJcbik7XHJcblxyXG4vKiogUGFyc2VzIEFBQSBwaGFzZSBuYW1lcyBmcm9tIGEgc2VjdGlvbiBjb21tZW50IHZhbHVlLiAqL1xyXG5jb25zdCBnZXRTZWN0aW9uUGhhc2VzID0gZm9yd2FyZChnZXRTZWN0aW9uUGhhc2VzSW1wbGVtZW50YXRpb24pO1xyXG5cclxuLyoqIFJlc29sdmVzIHRoZSBBQUEgcGhhc2VzIGFwcGxpY2FibGUgdG8gYSBzdGF0ZW1lbnQuICovXHJcbmNvbnN0IGdldFN0YXRlbWVudFBoYXNlcyA9IGZvcndhcmQoZ2V0U3RhdGVtZW50UGhhc2VzSW1wbGVtZW50YXRpb24pO1xyXG5cclxuLyoqIEV4dHJhY3RzIHRoZSB0ZXN0IGNhbGwgYW5kIGNhbGxiYWNrIGZyb20gYSBzdXBwb3J0ZWQgYGl0YCBvciBgdGVzdGAgY2FsbCBleHByZXNzaW9uLiAqL1xyXG5jb25zdCBnZXRTdXBwb3J0ZWRUZXN0Q2FsbCA9IGZvcndhcmQoZ2V0U3VwcG9ydGVkVGVzdENhbGxJbXBsZW1lbnRhdGlvbik7XHJcblxyXG4vKipcclxuICogQW5hbHl6ZXMgc3VwcG9ydGVkIEFBQSB0ZXN0IGJsb2Nrcy5cclxuICogQHBhcmFtIGNvbnRleHQgSW5wdXQgY29udGV4dCB2YWx1ZS5cclxuICogQHBhcmFtIG5vZGUgSW5wdXQgbm9kZSB2YWx1ZS5cclxuICogQHJldHVybnMgUmV0dXJuIHZhbHVlIG91dHB1dC5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBhbmFseXplVGVzdEJsb2NrKGNvbnRleHQsIG5vZGUpO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIGFuYWx5emVUZXN0QmxvY2soXHJcbiAgY29udGV4dDogUnVsZS5SdWxlQ29udGV4dCxcclxuICBub2RlOiBFU1RyZWUuQ2FsbEV4cHJlc3Npb24sXHJcbik6IFRlc3RCbG9ja0FuYWx5c2lzIHwgdW5kZWZpbmVkIHtcclxuICBjb25zdCB0ZXN0Q2FsbCA9IGdldFN1cHBvcnRlZFRlc3RDYWxsKG5vZGUpO1xyXG4gIGlmICh0ZXN0Q2FsbCA9PT0gdm9pZCAwKSB7XHJcbiAgICByZXR1cm4gdm9pZCAwO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgeyBjYWxsYmFjaywgY2FsbEV4cHJlc3Npb24gfSA9IHRlc3RDYWxsO1xyXG4gIGNvbnN0IHsgc291cmNlQ29kZSB9ID0gY29udGV4dDtcclxuICBjb25zdCBzZWN0aW9uQ29tbWVudHM6IFRlc3RCbG9ja0FuYWx5c2lzW1wic2VjdGlvbkNvbW1lbnRzXCJdID0gc291cmNlQ29kZVxyXG4gICAgLmdldEFsbENvbW1lbnRzKClcclxuICAgIC5maWx0ZXIoXHJcbiAgICAgIChjb21tZW50KSA9PlxyXG4gICAgICAgIGlzTG9jYXRlZENvbW1lbnQoY29tbWVudCkgJiZcclxuICAgICAgICBjb21tZW50LnR5cGUgPT09IFwiTGluZVwiICYmXHJcbiAgICAgICAgaXNSYW5nZVdpdGhpbihjb21tZW50LnJhbmdlLCBjYWxsYmFjay5ib2R5LnJhbmdlKSAmJlxyXG4gICAgICAgIGdldFNlY3Rpb25QaGFzZXMoY29tbWVudC52YWx1ZSkubGVuZ3RoID4gMCxcclxuICAgIClcclxuICAgIC5tYXAoKGNvbW1lbnQpID0+ICh7XHJcbiAgICAgIGNvbW1lbnQ6IGNvbW1lbnQgYXMgTG9jYXRlZENvbW1lbnQsXHJcbiAgICAgIHBoYXNlczogZ2V0U2VjdGlvblBoYXNlcyhjb21tZW50LnZhbHVlKSxcclxuICAgIH0pKTtcclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIGJvZHk6IGNhbGxiYWNrLmJvZHksXHJcbiAgICBib2R5TGluZUNvdW50OlxyXG4gICAgICBjYWxsYmFjay5ib2R5LmxvYy5lbmQubGluZSAtIGNhbGxiYWNrLmJvZHkubG9jLnN0YXJ0LmxpbmUgLSAxLFxyXG4gICAgY2FsbEV4cHJlc3Npb24sXHJcbiAgICBuZXdsaW5lOiBnZXROZXdsaW5lKHNvdXJjZUNvZGUudGV4dCksXHJcbiAgICBzZWN0aW9uQ29tbWVudHMsXHJcbiAgICBzb3VyY2VUZXh0OiBzb3VyY2VDb2RlLnRleHQsXHJcbiAgICBzdGF0ZW1lbnRzOiBjYWxsYmFjay5ib2R5LmJvZHkubWFwKChzdGF0ZW1lbnQpID0+IHtcclxuICAgICAgY29uc3QgcGhhc2VzID0gZ2V0U3RhdGVtZW50UGhhc2VzKHN0YXRlbWVudCwgc2VjdGlvbkNvbW1lbnRzKTtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBub2RlOiBzdGF0ZW1lbnQgYXMgTG9jYXRlZE5vZGU8RVNUcmVlLlN0YXRlbWVudD4sXHJcbiAgICAgICAgcGhhc2U6IHBoYXNlcy5hdCgtMSksXHJcbiAgICAgICAgcGhhc2VzLFxyXG4gICAgICB9O1xyXG4gICAgfSksXHJcbiAgfTtcclxufVxyXG5cclxuZXhwb3J0IHtcclxuICBhYWFQaGFzZU9yZGVyLFxyXG4gIGFuYWx5emVUZXN0QmxvY2ssXHJcbiAgY291bnRBY3RTdGF0ZW1lbnRzLFxyXG4gIGdldEZsYXR0ZW5lZFNlY3Rpb25zLFxyXG4gIGdldEluZGVudGF0aW9uQXRPZmZzZXQsXHJcbiAgZ2V0TGluZVN0YXJ0UmFuZ2UsXHJcbiAgZ2V0UGhhc2VCb3VuZGFyeUNvbW1lbnRzLFxyXG4gIGdldFNlY3Rpb25QaGFzZXMsXHJcbn07XHJcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyzer.analysis.unsupported.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/aaa/analyzer.analysis.unsupported.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,QAAA,MAAM,oCAAoC,EAAG,IAAa,CAAC;AAE3D,OAAO,EAAE,oCAAoC,EAAE,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** Companion module for unsupported analysis spec coverage. */
|
|
2
|
+
const analyzerAnalysisUnsupportedCompanion = true;
|
|
3
|
+
export { analyzerAnalysisUnsupportedCompanion };
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbHl6ZXIuYW5hbHlzaXMudW5zdXBwb3J0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZG9tYWluL3Rlc3RpbmcvYWFhL2FuYWx5emVyLmFuYWx5c2lzLnVuc3VwcG9ydGVkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtEQUErRDtBQUMvRCxNQUFNLG9DQUFvQyxHQUFHLElBQWEsQ0FBQztBQUUzRCxPQUFPLEVBQUUsb0NBQW9DLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBDb21wYW5pb24gbW9kdWxlIGZvciB1bnN1cHBvcnRlZCBhbmFseXNpcyBzcGVjIGNvdmVyYWdlLiAqL1xyXG5jb25zdCBhbmFseXplckFuYWx5c2lzVW5zdXBwb3J0ZWRDb21wYW5pb24gPSB0cnVlIGFzIGNvbnN0O1xyXG5cclxuZXhwb3J0IHsgYW5hbHl6ZXJBbmFseXNpc1Vuc3VwcG9ydGVkQ29tcGFuaW9uIH07XHJcbiJdfQ==
|
|
@@ -1,93 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
* ```
|
|
18
|
-
*/
|
|
19
|
-
declare function getAssertDeclaredIdentifiers(analysis: TestBlockAnalysis): Map<string, LocatedNode<ESTree.Identifier>>;
|
|
20
|
-
/**
|
|
21
|
-
* Extracts assertion identifiers.
|
|
22
|
-
* @param statement Input statement value.
|
|
23
|
-
* @returns Return value output.
|
|
24
|
-
* @example
|
|
25
|
-
* ```typescript
|
|
26
|
-
* getAssertionIdentifiers(statement);
|
|
27
|
-
* ```
|
|
28
|
-
*/
|
|
29
|
-
declare function getAssertionIdentifiers(statement: ESTree.Statement): AssertionIdentifiers;
|
|
30
|
-
/**
|
|
31
|
-
* Gets a statement expression.
|
|
32
|
-
* @param statement Input statement value.
|
|
33
|
-
* @returns Return value output.
|
|
34
|
-
* @example
|
|
35
|
-
* ```typescript
|
|
36
|
-
* getStatementExpression(statement);
|
|
37
|
-
* ```
|
|
38
|
-
*/
|
|
39
|
-
declare function getStatementExpression(statement: ESTree.Statement): ESTree.Expression | undefined;
|
|
40
|
-
/**
|
|
41
|
-
* Checks for assertions.
|
|
42
|
-
* @param statement Input statement value.
|
|
43
|
-
* @returns Return value output.
|
|
44
|
-
* @example
|
|
45
|
-
* ```typescript
|
|
46
|
-
* hasAssertion(statement);
|
|
47
|
-
* ```
|
|
48
|
-
*/
|
|
49
|
-
declare function hasAssertion(statement: ESTree.Statement): boolean;
|
|
50
|
-
/**
|
|
51
|
-
* Checks for action expressions.
|
|
52
|
-
* @param expression Input expression value.
|
|
53
|
-
* @returns Return value output.
|
|
54
|
-
* @example
|
|
55
|
-
* ```typescript
|
|
56
|
-
* isActionExpression(expression);
|
|
57
|
-
* ```
|
|
58
|
-
*/
|
|
59
|
-
declare function isActionExpression(expression: ESTree.Expression | undefined): boolean;
|
|
60
|
-
/**
|
|
61
|
-
* Checks Assert statement validity.
|
|
62
|
-
* @param statement Input statement value.
|
|
63
|
-
* @returns Return value output.
|
|
64
|
-
* @example
|
|
65
|
-
* ```typescript
|
|
66
|
-
* isValidAssertStatement(statement);
|
|
67
|
-
* ```
|
|
68
|
-
*/
|
|
69
|
-
declare function isValidAssertStatement(statement: ESTree.Statement): boolean;
|
|
70
|
-
/**
|
|
71
|
-
* Unwraps nested expressions.
|
|
72
|
-
* @param expression Input expression value.
|
|
73
|
-
* @returns Return value output.
|
|
74
|
-
* @example
|
|
75
|
-
* ```typescript
|
|
76
|
-
* unwrapExpression(expression);
|
|
77
|
-
* ```
|
|
78
|
-
*/
|
|
79
|
-
declare function unwrapExpression(expression: ESTree.Expression | undefined): ESTree.Expression | undefined;
|
|
80
|
-
/**
|
|
81
|
-
* Checks AAA naming prefixes.
|
|
82
|
-
* @param name Input name value.
|
|
83
|
-
* @param prefix Input prefix value.
|
|
84
|
-
* @returns Return value output.
|
|
85
|
-
* @example
|
|
86
|
-
* ```typescript
|
|
87
|
-
* usesPrefix("actualResult", "actual");
|
|
88
|
-
* ```
|
|
89
|
-
*/
|
|
90
|
-
declare function usesPrefix(name: string, prefix: "actual" | "expected"): boolean;
|
|
1
|
+
/** Collects all declared identifiers from an assert statement. */
|
|
2
|
+
declare const getAssertDeclaredIdentifiers: (analysis: import("./types.js").TestBlockAnalysis) => Map<string, import("./types.js").LocatedNode<import("estree").Identifier>>;
|
|
3
|
+
/** Resolves the identifier names used in an assertion call. */
|
|
4
|
+
declare const getAssertionIdentifiers: (statement: import("estree").Statement) => import("./analyzer.assertions.helpers.js").AssertionIdentifiers;
|
|
5
|
+
/** Extracts the expression from an expression statement node. */
|
|
6
|
+
declare const getStatementExpression: (statement: import("estree").Statement) => import("estree").Expression | undefined;
|
|
7
|
+
/** Checks whether a statement contains an assertion call. */
|
|
8
|
+
declare const hasAssertion: (statement: import("estree").Statement) => boolean;
|
|
9
|
+
/** Checks whether an expression is an Act-phase action expression. */
|
|
10
|
+
declare const isActionExpression: (expression: import("estree").Expression | undefined) => boolean;
|
|
11
|
+
/** Checks whether a statement is a valid Assert-phase assertion. */
|
|
12
|
+
declare const isValidAssertStatement: (statement: import("estree").Statement) => boolean;
|
|
13
|
+
/** Unwraps a nested or chained expression to its root call. */
|
|
14
|
+
declare const unwrapExpression: (expression: import("estree").Expression | undefined) => import("estree").Expression | undefined;
|
|
15
|
+
/** Checks whether an assertion call uses a known assertion prefix. */
|
|
16
|
+
declare const usesPrefix: (name: string, prefix: "actual" | "expected") => boolean;
|
|
91
17
|
export { getAssertDeclaredIdentifiers, getAssertionIdentifiers, getStatementExpression, hasAssertion, isActionExpression, isValidAssertStatement, unwrapExpression, usesPrefix, };
|
|
92
|
-
export type { AssertionIdentifiers };
|
|
93
18
|
//# sourceMappingURL=analyzer.assertions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyzer.assertions.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/aaa/analyzer.assertions.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"analyzer.assertions.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/aaa/analyzer.assertions.ts"],"names":[],"mappings":"AA4BA,kEAAkE;AAClE,QAAA,MAAM,4BAA4B,4HAEjC,CAAC;AAEF,+DAA+D;AAC/D,QAAA,MAAM,uBAAuB,yGAAiD,CAAC;AAE/E,iEAAiE;AACjE,QAAA,MAAM,sBAAsB,oFAAgD,CAAC;AAE7E,6DAA6D;AAC7D,QAAA,MAAM,YAAY,oDAAsC,CAAC;AAEzD,sEAAsE;AACtE,QAAA,MAAM,kBAAkB,kEAA4C,CAAC;AAErE,oEAAoE;AACpE,QAAA,MAAM,sBAAsB,oDAAgD,CAAC;AAE7E,+DAA+D;AAC/D,QAAA,MAAM,gBAAgB,kGAA0C,CAAC;AAEjE,sEAAsE;AACtE,QAAA,MAAM,UAAU,0DAAoC,CAAC;AAErD,OAAO,EACL,4BAA4B,EAC5B,uBAAuB,EACvB,sBAAsB,EACtB,YAAY,EACZ,kBAAkB,EAClB,sBAAsB,EACtB,gBAAgB,EAChB,UAAU,GACX,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyzer.assertions.destructured.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/aaa/analyzer.assertions.destructured.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,QAAA,MAAM,uCAAuC,EAAG,IAAa,CAAC;AAE9D,OAAO,EAAE,uCAAuC,EAAE,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** Companion module for destructured assertion declaration spec coverage. */
|
|
2
|
+
const analyzerAssertionsDestructuredCompanion = true;
|
|
3
|
+
export { analyzerAssertionsDestructuredCompanion };
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbHl6ZXIuYXNzZXJ0aW9ucy5kZXN0cnVjdHVyZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZG9tYWluL3Rlc3RpbmcvYWFhL2FuYWx5emVyLmFzc2VydGlvbnMuZGVzdHJ1Y3R1cmVkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDZFQUE2RTtBQUM3RSxNQUFNLHVDQUF1QyxHQUFHLElBQWEsQ0FBQztBQUU5RCxPQUFPLEVBQUUsdUNBQXVDLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBDb21wYW5pb24gbW9kdWxlIGZvciBkZXN0cnVjdHVyZWQgYXNzZXJ0aW9uIGRlY2xhcmF0aW9uIHNwZWMgY292ZXJhZ2UuICovXHJcbmNvbnN0IGFuYWx5emVyQXNzZXJ0aW9uc0Rlc3RydWN0dXJlZENvbXBhbmlvbiA9IHRydWUgYXMgY29uc3Q7XHJcblxyXG5leHBvcnQgeyBhbmFseXplckFzc2VydGlvbnNEZXN0cnVjdHVyZWRDb21wYW5pb24gfTtcclxuIl19
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import type * as ESTree from "estree";
|
|
2
|
+
import type { LocatedNode, TestBlockAnalysis } from "./types.js";
|
|
3
|
+
/** Identifier names extracted from an assertion statement. */
|
|
4
|
+
interface AssertionIdentifiers {
|
|
5
|
+
/** Identifier used as the actual value. */
|
|
6
|
+
actual: string | undefined;
|
|
7
|
+
/** Identifier used as the expected value. */
|
|
8
|
+
expected: string | undefined;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Collects Assert declarations.
|
|
12
|
+
* @param analysis Input analysis value.
|
|
13
|
+
* @returns Return value output.
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* getAssertDeclaredIdentifiers(analysis);
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
declare function getAssertDeclaredIdentifiers(analysis: TestBlockAnalysis): Map<string, LocatedNode<ESTree.Identifier>>;
|
|
20
|
+
/**
|
|
21
|
+
* Extracts assertion identifiers.
|
|
22
|
+
* @param statement Input statement value.
|
|
23
|
+
* @returns Return value output.
|
|
24
|
+
* @example
|
|
25
|
+
* ```typescript
|
|
26
|
+
* getAssertionIdentifiers(statement);
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
declare function getAssertionIdentifiers(statement: ESTree.Statement): AssertionIdentifiers;
|
|
30
|
+
/**
|
|
31
|
+
* Gets a statement expression.
|
|
32
|
+
* @param statement Input statement value.
|
|
33
|
+
* @returns Return value output.
|
|
34
|
+
* @example
|
|
35
|
+
* ```typescript
|
|
36
|
+
* getStatementExpression(statement);
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
declare function getStatementExpression(statement: ESTree.Statement): ESTree.Expression | undefined;
|
|
40
|
+
/**
|
|
41
|
+
* Checks for assertions.
|
|
42
|
+
* @param statement Input statement value.
|
|
43
|
+
* @returns Return value output.
|
|
44
|
+
* @example
|
|
45
|
+
* ```typescript
|
|
46
|
+
* hasAssertion(statement);
|
|
47
|
+
* ```
|
|
48
|
+
*/
|
|
49
|
+
declare function hasAssertion(statement: ESTree.Statement): boolean;
|
|
50
|
+
/**
|
|
51
|
+
* Checks for action expressions.
|
|
52
|
+
* @param expression Input expression value.
|
|
53
|
+
* @returns Return value output.
|
|
54
|
+
* @example
|
|
55
|
+
* ```typescript
|
|
56
|
+
* isActionExpression(expression);
|
|
57
|
+
* ```
|
|
58
|
+
*/
|
|
59
|
+
declare function isActionExpression(expression: ESTree.Expression | undefined): boolean;
|
|
60
|
+
/**
|
|
61
|
+
* Checks Assert statement validity.
|
|
62
|
+
* @param statement Input statement value.
|
|
63
|
+
* @returns Return value output.
|
|
64
|
+
* @example
|
|
65
|
+
* ```typescript
|
|
66
|
+
* isValidAssertStatement(statement);
|
|
67
|
+
* ```
|
|
68
|
+
*/
|
|
69
|
+
declare function isValidAssertStatement(statement: ESTree.Statement): boolean;
|
|
70
|
+
/**
|
|
71
|
+
* Unwraps nested expressions.
|
|
72
|
+
* @param expression Input expression value.
|
|
73
|
+
* @returns Return value output.
|
|
74
|
+
* @example
|
|
75
|
+
* ```typescript
|
|
76
|
+
* unwrapExpression(expression);
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
79
|
+
declare function unwrapExpression(expression: ESTree.Expression | undefined): ESTree.Expression | undefined;
|
|
80
|
+
/**
|
|
81
|
+
* Checks AAA naming prefixes.
|
|
82
|
+
* @param name Input name value.
|
|
83
|
+
* @param prefix Input prefix value.
|
|
84
|
+
* @returns Return value output.
|
|
85
|
+
* @example
|
|
86
|
+
* ```typescript
|
|
87
|
+
* usesPrefix("actualResult", "actual");
|
|
88
|
+
* ```
|
|
89
|
+
*/
|
|
90
|
+
declare function usesPrefix(name: string, prefix: "actual" | "expected"): boolean;
|
|
91
|
+
/** Companion marker for test isolation. */
|
|
92
|
+
declare const analyzerAssertionsHelpersCompanion: true;
|
|
93
|
+
export { analyzerAssertionsHelpersCompanion, getAssertDeclaredIdentifiers, getAssertionIdentifiers, getStatementExpression, hasAssertion, isActionExpression, isValidAssertStatement, unwrapExpression, usesPrefix, };
|
|
94
|
+
export type { AssertionIdentifiers };
|
|
95
|
+
//# sourceMappingURL=analyzer.assertions.helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyzer.assertions.helpers.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/aaa/analyzer.assertions.helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,MAAM,QAAQ,CAAC;AAEtC,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAW9D,8DAA8D;AAC9D,UAAU,oBAAoB;IAC5B,2CAA2C;IAC3C,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,6CAA6C;IAC7C,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B;AAED;;;;;;;;GAQG;AACH,iBAAS,4BAA4B,CACnC,QAAQ,EAAE,iBAAiB,GAC1B,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAkB7C;AAwBD;;;;;;;;GAQG;AACH,iBAAS,uBAAuB,CAC9B,SAAS,EAAE,MAAM,CAAC,SAAS,GAC1B,oBAAoB,CAqBtB;AAED;;;;;;;;GAQG;AACH,iBAAS,sBAAsB,CAC7B,SAAS,EAAE,MAAM,CAAC,SAAS,GAC1B,MAAM,CAAC,UAAU,GAAG,SAAS,CAY/B;AAED;;;;;;;;GAQG;AACH,iBAAS,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,GAAG,OAAO,CAQ1D;AAED;;;;;;;;GAQG;AACH,iBAAS,kBAAkB,CACzB,UAAU,EAAE,MAAM,CAAC,UAAU,GAAG,SAAS,GACxC,OAAO,CAOT;AAED;;;;;;;;GAQG;AACH,iBAAS,sBAAsB,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,GAAG,OAAO,CAmBpE;AAED;;;;;;;;GAQG;AACH,iBAAS,gBAAgB,CACvB,UAAU,EAAE,MAAM,CAAC,UAAU,GAAG,SAAS,GACxC,MAAM,CAAC,UAAU,GAAG,SAAS,CAQ/B;AAED;;;;;;;;;GASG;AACH,iBAAS,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,UAAU,GAAG,OAAO,CAExE;AAED,2CAA2C;AAC3C,QAAA,MAAM,kCAAkC,EAAG,IAAa,CAAC;AAEzD,OAAO,EACL,kCAAkC,EAClC,4BAA4B,EAC5B,uBAAuB,EACvB,sBAAsB,EACtB,YAAY,EACZ,kBAAkB,EAClB,sBAAsB,EACtB,gBAAgB,EAChB,UAAU,GACX,CAAC;AACF,YAAY,EAAE,oBAAoB,EAAE,CAAC"}
|