@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,4 +1,3 @@
|
|
|
1
|
-
import { createRuleDocumentation } from "../../custom-rule-documentation.js";
|
|
2
1
|
import { normalizeMaxLineLength, reportIfSingleLine, } from "./single-line-jsdoc-utilities.js";
|
|
3
2
|
/**
|
|
4
3
|
* Resolves the token after a comment when available.
|
|
@@ -43,7 +42,8 @@ const functionLikeTypes = new Set([
|
|
|
43
42
|
* isFunctionExpression({ type: "FunctionExpression" } as EstreeNode);
|
|
44
43
|
* ```
|
|
45
44
|
*/
|
|
46
|
-
const isFunctionExpression = (node) => node?.type === "FunctionExpression" ||
|
|
45
|
+
const isFunctionExpression = (node) => node?.type === "FunctionExpression" ||
|
|
46
|
+
node?.type === "ArrowFunctionExpression";
|
|
47
47
|
/**
|
|
48
48
|
* Checks if a node is a function declaration or TS declaration signature.
|
|
49
49
|
* @param node Node to inspect.
|
|
@@ -159,7 +159,7 @@ const shouldSkipForFunction = (context, comment) => {
|
|
|
159
159
|
return isFunctionLikeNode(node);
|
|
160
160
|
};
|
|
161
161
|
/** Rule module enforcing single-line JSDoc when it fits. */
|
|
162
|
-
const singleLineJsdocRule = {
|
|
162
|
+
export const singleLineJsdocRule = {
|
|
163
163
|
create(context) {
|
|
164
164
|
const { options, sourceCode } = context;
|
|
165
165
|
const maxLineLength = normalizeMaxLineLength(options);
|
|
@@ -172,7 +172,12 @@ const singleLineJsdocRule = {
|
|
|
172
172
|
return {};
|
|
173
173
|
},
|
|
174
174
|
meta: {
|
|
175
|
-
|
|
175
|
+
defaultOptions: [{ maxLineLength: 80 }],
|
|
176
|
+
docs: {
|
|
177
|
+
description: "Require JSDoc comments to use a single line when they fit.",
|
|
178
|
+
recommended: false,
|
|
179
|
+
url: "https://github.com/parloti/eslint-plugin/blob/main/docs/rules/single-line-jsdoc.md",
|
|
180
|
+
},
|
|
176
181
|
fixable: "code",
|
|
177
182
|
messages: {
|
|
178
183
|
singleLine: "Use a single-line JSDoc comment when it fits on one line.",
|
|
@@ -182,6 +187,7 @@ const singleLineJsdocRule = {
|
|
|
182
187
|
additionalProperties: false,
|
|
183
188
|
properties: {
|
|
184
189
|
maxLineLength: {
|
|
190
|
+
description: "Maximum line length that still allows a JSDoc block to be collapsed to a single line.",
|
|
185
191
|
minimum: 1,
|
|
186
192
|
type: "number",
|
|
187
193
|
},
|
|
@@ -192,5 +198,4 @@ const singleLineJsdocRule = {
|
|
|
192
198
|
type: "layout",
|
|
193
199
|
},
|
|
194
200
|
};
|
|
195
|
-
export { singleLineJsdocRule };
|
|
196
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb21haW4vZG9jcy9zaW5nbGUtbGluZS1qc2RvYy9ydWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzFFLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsa0JBQWtCLEdBQ25CLE1BQU0sK0JBQStCLENBQUM7QUEwRHZDOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sa0JBQWtCLEdBQUcsQ0FDekIsVUFBNEIsRUFDNUIsT0FBc0IsRUFDTSxFQUFFO0lBQzlCLElBQUksT0FBTyxVQUFVLENBQUMsYUFBYSxLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQ25ELE9BQU8sS0FBSyxDQUFDLENBQUM7SUFDaEIsQ0FBQztJQUVELE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFO1FBQ25ELGVBQWUsRUFBRSxLQUFLO0tBQ3ZCLENBQUMsQ0FBQztJQUVILElBQUksVUFBVSxFQUFFLEtBQUssS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ2pDLE9BQU8sS0FBSyxDQUFDLENBQUM7SUFDaEIsQ0FBQztJQUVELE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3JDLENBQUMsQ0FBQztBQUVGOzs7Ozs7R0FNRztBQUNILE1BQU0saUJBQWlCLEdBQUcsSUFBSSxHQUFHLENBQVM7SUFDeEMsNEJBQTRCO0lBQzVCLGlDQUFpQztJQUNqQyxnQkFBZ0I7Q0FDakIsQ0FBQyxDQUFDO0FBRUg7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLG9CQUFvQixHQUFHLENBQUMsSUFBZSxFQUFXLEVBQUUsQ0FDeEQsSUFBSSxFQUFFLElBQUksS0FBSyxvQkFBb0IsSUFBSSxJQUFJLEVBQUUsSUFBSSxLQUFLLHlCQUF5QixDQUFDO0FBRWxGOzs7Ozs7OztHQVFHO0FB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RCxJQUFJLEVBQUUsUUFBUTtLQUNmO0NBQ0YsQ0FBQztBQUVGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBSdWxlIH0gZnJvbSBcImVzbGludFwiO1xuaW1wb3J0IHR5cGUgeyBDb21tZW50IGFzIEVzdHJlZUNvbW1lbnQsIE5vZGUgYXMgRXN0cmVlTm9kZSB9IGZyb20gXCJlc3RyZWVcIjtcblxuaW1wb3J0IHsgY3JlYXRlUnVsZURvY3VtZW50YXRpb24gfSBmcm9tIFwiLi4vLi4vY3VzdG9tLXJ1bGUtZG9jdW1lbnRhdGlvblwiO1xuaW1wb3J0IHtcbiAgbm9ybWFsaXplTWF4TGluZUxlbmd0aCxcbiAgcmVwb3J0SWZTaW5nbGVMaW5lLFxufSBmcm9tIFwiLi9zaW5nbGUtbGluZS1qc2RvYy11dGlsaXRpZXNcIjtcbi8qKiBUeXBlIHVuaW9uIGZvciBub2RlcyB0aGF0IG1heSBiZSBtaXNzaW5nLiAqL1xudHlwZSBNYXliZU5vZGUgPSBFc3RyZWVOb2RlIHwgTm9kZVdpdGhUeXBlIHwgbnVsbCB8IHVuZGVmaW5lZDtcblxuLyoqIFNoYXBlIGZvciBleHBvcnQgbm9kZXMgdGhhdCB3cmFwIGEgZGVjbGFyYXRpb24uICovXG5pbnRlcmZhY2UgTm9kZVdpdGhEZWNsYXJhdGlvbiB7XG4gIC8qKiBEZWNsYXJhdGlvbiB3cmFwcGVkIGJ5IHRoZSBleHBvcnQuICovXG4gIGRlY2xhcmF0aW9uPzogTWF5YmVOb2RlO1xufVxuLyoqIFNoYXBlIGZvciBub2RlcyB0aGF0IGhhdmUgZGVjbGFyYXRpb25zLiAqL1xuaW50ZXJmYWNlIE5vZGVXaXRoRGVjbGFyYXRpb25zIHtcbiAgLyoqIFZhcmlhYmxlIGRlY2xhcmF0aW9ucyBmb3IgYSBkZWNsYXJhdGlvbiBsaXN0LiAqL1xuICBkZWNsYXJhdGlvbnM/OiBWYXJpYWJsZURlY2xhcmF0aW9uRW50cnlbXTtcbn1cbi8qKiBTaGFwZSBmb3IgbWluaW1hbCBub2RlcyB0aGF0IG9ubHkgZXhwb3NlIGEgdHlwZS4gKi9cbmludGVyZmFjZSBOb2RlV2l0aFR5cGUge1xuICAvKiogTm9kZSB0eXBlIGRpc2NyaW1pbmF0b3IuICovXG4gIHR5cGU6IHN0cmluZztcbn1cbi8qKiBTaGFwZSBmb3Igbm9kZXMgdGhhdCBoYXZlIGEgdmFsdWUuICovXG5pbnRlcmZhY2UgTm9kZVdpdGhWYWx1ZSB7XG4gIC8qKiBWYWx1ZSBub2RlIHVzZWQgZm9yIHByb3BlcnR5IGluaXRpYWxpemVycy4gKi9cbiAgdmFsdWU/OiBNYXliZU5vZGU7XG59XG4vKiogU291cmNlQ29kZSBhY2Nlc3NvcnMgdXNlZCBieSB0aGlzIHJ1bGUuICovXG5pbnRlcmZhY2UgU291cmNlQ29kZUFjY2VzcyB7XG4gIC8qKiBSZXR1cm5zIHRoZSBub2RlIGF0IGEgcmFuZ2UgaW5kZXguICovXG4gIGdldE5vZGVCeVJhbmdlSW5kZXg6IChpbmRleDogbnVtYmVyKSA9PiBFc3RyZWVOb2RlIHwgbnVsbDtcblxuICAvKiogUmV0dXJucyB0aGUgZmlyc3QgdG9rZW4gYWZ0ZXIgYSBjb21tZW50LiAqL1xuICBnZXRUb2tlbkFmdGVyOiAoXG4gICAgbm9kZTogRXN0cmVlQ29tbWVudCxcbiAgICBvcHRpb25zPzogVG9rZW5BZnRlck9wdGlvbnMsXG4gICkgPT4gbnVsbCB8IFRva2VuV2l0aE9wdGlvbmFsUmFuZ2U7XG59XG4vKiogVHlwZSBhbGlhcyBmb3IgY29tbWVudCBub2RlcyBwcm92aWRlZCBieSBFU0xpbnQuICovXG50eXBlIFNvdXJjZUNvbW1lbnQgPSBFc3RyZWVDb21tZW50O1xuLyoqIE9wdGlvbnMgdXNlZCB3aGVuIGZldGNoaW5nIHRva2VucyBhZnRlciBjb21tZW50cy4gKi9cbmludGVyZmFjZSBUb2tlbkFmdGVyT3B0aW9ucyB7XG4gIC8qKiBXaGV0aGVyIHRvIGluY2x1ZGUgY29tbWVudCB0b2tlbnMuICovXG4gIGluY2x1ZGVDb21tZW50cz86IGJvb2xlYW47XG59XG4vKiogU2hhcGUgZm9yIHRva2VucyB0aGF0IG1heSBpbmNsdWRlIGEgcmFuZ2UuICovXG5pbnRlcmZhY2UgVG9rZW5XaXRoT3B0aW9uYWxSYW5nZSB7XG4gIC8qKiBUb2tlbiByYW5nZSB1c2VkIGZvciBsb29rdXBzLiAqL1xuICByYW5nZT86IFtudW1iZXIsIG51bWJlcl07XG59XG4vKiogU2hhcGUgZm9yIHRva2VucyB3aXRoIHJhbmdlIG1ldGFkYXRhLiAqL1xuaW50ZXJmYWNlIFRva2VuV2l0aFJhbmdlIHtcbiAgLyoqIFRva2VuIHJhbmdlIHVzZWQgZm9yIGxvb2t1cHMuICovXG4gIHJhbmdlOiBbbnVtYmVyLCBudW1iZXJdO1xufVxuLyoqIFNoYXBlIGZvciB2YXJpYWJsZSBkZWNsYXJhdGlvbiBlbnRyaWVzLiAqL1xuaW50ZXJmYWNlIFZhcmlhYmxlRGVjbGFyYXRpb25FbnRyeSB7XG4gIC8qKiBPcHRpb25hbCBpbml0aWFsaXplciBmb3IgdGhlIGRlY2xhcmF0aW9uLiAqL1xuICBpbml0PzogTWF5YmVOb2RlO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHRoZSB0b2tlbiBhZnRlciBhIGNvbW1lbnQgd2hlbiBhdmFpbGFibGUuXG4gKiBAcGFyYW0gc291cmNlQ29kZSBTb3VyY2UgY29kZSBhY2Nlc3NvcnMuXG4gKiBAcGFyYW0gY29tbWVudCBDb21tZW50IG5vZGUgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIFRva2VuIHJhbmdlIG1ldGFkYXRhIHdoZW4gYXZhaWxhYmxlLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGdldFRva2VuQWZ0ZXJSYW5nZSh7fSBhcyBTb3VyY2VDb2RlQWNjZXNzLCB7fSBhcyBTb3VyY2VDb21tZW50KTtcbiAqIGBgYFxuICovXG5jb25zdCBnZXRUb2tlbkFmdGVyUmFuZ2UgPSAoXG4gIHNvdXJjZUNvZGU6IFNvdXJjZUNvZGVBY2Nlc3MsXG4gIGNvbW1lbnQ6IFNvdXJjZUNvbW1lbnQsXG4pOiBUb2tlbldpdGhSYW5nZSB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmICh0eXBlb2Ygc291cmNlQ29kZS5nZXRUb2tlbkFmdGVyICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4gdm9pZCAwO1xuICB9XG5cbiAgY29uc3QgdG9rZW5BZnRlciA9IHNvdXJjZUNvZGUuZ2V0VG9rZW5BZnRlcihjb21tZW50LCB7XG4gICAgaW5jbHVkZUNvbW1lbnRzOiBmYWxzZSxcbiAgfSk7XG5cbiAgaWYgKHRva2VuQWZ0ZXI/LnJhbmdlID09PSB2b2lkIDApIHtcbiAgICByZXR1cm4gdm9pZCAwO1xuICB9XG5cbiAgcmV0dXJuIHsgcmFuZ2U6IHRva2VuQWZ0ZXIucmFuZ2UgfTtcbn07XG5cbi8qKlxuICogRnVuY3Rpb24tbGlrZSBub2RlIHR5cGVzIGhhbmRsZWQgZGlyZWN0bHkuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogZnVuY3Rpb25MaWtlVHlwZXMuaGFzKFwiVFNGdW5jdGlvblR5cGVcIik7XG4gKiBgYGBcbiAqL1xuY29uc3QgZnVuY3Rpb25MaWtlVHlwZXMgPSBuZXcgU2V0PHN0cmluZz4oW1xuICBcIlRTQ2FsbFNpZ25hdHVyZURlY2xhcmF0aW9uXCIsXG4gIFwiVFNDb25zdHJ1Y3RTaWduYXR1cmVEZWNsYXJhdGlvblwiLFxuICBcIlRTRnVuY3Rpb25UeXBlXCIsXG5dKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBub2RlIGlzIGEgZnVuY3Rpb24gZXhwcmVzc2lvbiBvciBhcnJvdyBmdW5jdGlvbi5cbiAqIEBwYXJhbSBub2RlIE5vZGUgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIFRydWUgd2hlbiB0aGUgbm9kZSBpcyBhIGZ1bmN0aW9uIGV4cHJlc3Npb24uXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaXNGdW5jdGlvbkV4cHJlc3Npb24oeyB0eXBlOiBcIkZ1bmN0aW9uRXhwcmVzc2lvblwiIH0gYXMgRXN0cmVlTm9kZSk7XG4gKiBgYGBcbiAqL1xuY29uc3QgaXNGdW5jdGlvbkV4cHJlc3Npb24gPSAobm9kZTogTWF5YmVOb2RlKTogYm9vbGVhbiA9PlxuICBub2RlPy50eXBlID09PSBcIkZ1bmN0aW9uRXhwcmVzc2lvblwiIHx8IG5vZGU/LnR5cGUgPT09IFwiQXJyb3dGdW5jdGlvbkV4cHJlc3Npb25cIjtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBub2RlIGlzIGEgZnVuY3Rpb24gZGVjbGFyYXRpb24gb3IgVFMgZGVjbGFyYXRpb24gc2lnbmF0dXJlLlxuICogQHBhcmFtIG5vZGUgTm9kZSB0byBpbnNwZWN0LlxuICogQHJldHVybnMgVHJ1ZSB3aGVuIHRoZSBub2RlIGlzIGEgZnVuY3Rpb24gZGVjbGFyYXRpb24uXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaXNGdW5jdGlvbkRlY2xhcmF0aW9uKHsgdHlwZTogXCJGdW5jdGlvbkRlY2xhcmF0aW9uXCIgfSBhcyBFc3RyZWVOb2RlKTtcbiAqIGBgYFxuICovXG5jb25zdCBpc0Z1bmN0aW9uRGVjbGFyYXRpb24gPSAobm9kZTogTWF5YmVOb2RlKTogYm9vbGVhbiA9PlxuICBub2RlPy50eXBlID09PSBcIkZ1bmN0aW9uRGVjbGFyYXRpb25cIiB8fCBub2RlPy50eXBlID09PSBcIlRTRGVjbGFyZUZ1bmN0aW9uXCI7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbm9kZSBpcyBhIG1ldGhvZC1saWtlIGRlY2xhcmF0aW9uLlxuICogQHBhcmFtIG5vZGUgTm9kZSB0byBpbnNwZWN0LlxuICogQHJldHVybnMgVHJ1ZSB3aGVuIHRoZSBub2RlIGlzIGEgbWV0aG9kLWxpa2UgZGVjbGFyYXRpb24uXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaXNNZXRob2RMaWtlKHsgdHlwZTogXCJNZXRob2REZWZpbml0aW9uXCIgfSBhcyBFc3RyZWVOb2RlKTtcbiAqIGBgYFxuICovXG5jb25zdCBpc01ldGhvZExpa2UgPSAobm9kZTogTWF5YmVOb2RlKTogYm9vbGVhbiA9PlxuICBub2RlPy50eXBlID09PSBcIk1ldGhvZERlZmluaXRpb25cIiB8fCBub2RlPy50eXBlID09PSBcIlRTTWV0aG9kU2lnbmF0dXJlXCI7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbm9kZSBpcyBhIHByb3BlcnR5IHdpdGggYSBmdW5jdGlvbiBpbml0aWFsaXplci5cbiAqIEBwYXJhbSBub2RlIE5vZGUgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIFRydWUgd2hlbiB0aGUgcHJvcGVydHkgdmFsdWUgaXMgYSBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpc1Byb3BlcnR5V2l0aEZ1bmN0aW9uVmFsdWUoeyB0eXBlOiBcIlByb3BlcnR5XCIgfSBhcyBFc3RyZWVOb2RlKTtcbiAqIGBgYFxuICovXG5jb25zdCBpc1Byb3BlcnR5V2l0aEZ1bmN0aW9uVmFsdWUgPSAobm9kZTogRXN0cmVlTm9kZSk6IGJvb2xlYW4gPT4ge1xuICBpZiAobm9kZS50eXBlICE9PSBcIlByb3BlcnR5RGVmaW5pdGlvblwiICYmIG5vZGUudHlwZSAhPT0gXCJQcm9wZXJ0eVwiKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgeyB2YWx1ZSB9ID0gbm9kZSBhcyBOb2RlV2l0aFZhbHVlO1xuXG4gIHJldHVybiBpc0Z1bmN0aW9uRXhwcmVzc2lvbih2YWx1ZSk7XG59O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIHZhcmlhYmxlIGRlY2xhcmF0aW9uIGNvbnRhaW5zIGEgZnVuY3Rpb24gaW5pdGlhbGl6ZXIuXG4gKiBAcGFyYW0gbm9kZSBOb2RlIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyBUcnVlIHdoZW4gYW55IGluaXRpYWxpemVyIGlzIGEgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaXNWYXJpYWJsZVdpdGhGdW5jdGlvbkluaXQoeyB0eXBlOiBcIlZhcmlhYmxlRGVjbGFyYXRpb25cIiB9IGFzIEVzdHJlZU5vZGUpO1xuICogYGBgXG4gKi9cbmNvbnN0IGlzVmFyaWFibGVXaXRoRnVuY3Rpb25Jbml0ID0gKG5vZGU6IEVzdHJlZU5vZGUpOiBib29sZWFuID0+IHtcbiAgaWYgKG5vZGUudHlwZSAhPT0gXCJWYXJpYWJsZURlY2xhcmF0aW9uXCIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCB7IGRlY2xhcmF0aW9ucyB9ID0gbm9kZSBhcyBOb2RlV2l0aERlY2xhcmF0aW9ucztcbiAgY29uc3QgaW5pdGlhbGl6ZWQgPSBkZWNsYXJhdGlvbnMgPz8gW107XG5cbiAgcmV0dXJuIGluaXRpYWxpemVkLnNvbWUoKGRlY2xhcmF0aW9uKSA9PlxuICAgIGlzRnVuY3Rpb25FeHByZXNzaW9uKGRlY2xhcmF0aW9uLmluaXQpLFxuICApO1xufTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYW4gZXhwb3J0IHdyYXBzIGEgZnVuY3Rpb24tbGlrZSBkZWNsYXJhdGlvbi5cbiAqIEBwYXJhbSBub2RlIE5vZGUgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIFRydWUgd2hlbiB0aGUgZXhwb3J0ZWQgZGVjbGFyYXRpb24gaXMgZnVuY3Rpb24tbGlrZS5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpc0V4cG9ydGVkRnVuY3Rpb25MaWtlKHsgdHlwZTogXCJFeHBvcnROYW1lZERlY2xhcmF0aW9uXCIgfSBhcyBFc3RyZWVOb2RlKTtcbiAqIGBgYFxuICovXG5jb25zdCBpc0V4cG9ydGVkRnVuY3Rpb25MaWtlID0gKG5vZGU6IEVzdHJlZU5vZGUpOiBib29sZWFuID0+IHtcbiAgaWYgKFxuICAgIG5vZGUudHlwZSAhPT0gXCJFeHBvcnROYW1lZERlY2xhcmF0aW9uXCIgJiZcbiAgICBub2RlLnR5cGUgIT09IFwiRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uXCJcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgeyBkZWNsYXJhdGlvbiB9ID0gbm9kZSBhcyBOb2RlV2l0aERlY2xhcmF0aW9uO1xuXG4gIHJldHVybiBpc0Z1bmN0aW9uTGlrZU5vZGUoZGVjbGFyYXRpb24pO1xufTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBub2RlIHJlcHJlc2VudHMgYW55IHN1cHBvcnRlZCBmdW5jdGlvbi1saWtlIGRlY2xhcmF0aW9uLlxuICogQHBhcmFtIG5vZGUgTm9kZSB0byBpbnNwZWN0LlxuICogQHJldHVybnMgVHJ1ZSB3aGVuIHRoZSBub2RlIGlzIGZ1bmN0aW9uLWxpa2UuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaXNGdW5jdGlvbkxpa2VOb2RlKHsgdHlwZTogXCJGdW5jdGlvbkRlY2xhcmF0aW9uXCIgfSBhcyBFc3RyZWVOb2RlKTtcbiAqIGBgYFxuICovXG5jb25zdCBpc0Z1bmN0aW9uTGlrZU5vZGUgPSAobm9kZTogTWF5YmVOb2RlKTogYm9vbGVhbiA9PiB7XG4gIGlmIChub2RlID09PSBudWxsIHx8IG5vZGUgPT09IHZvaWQgMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgaXNGdW5jdGlvbkRlY2xhcmF0aW9uKG5vZGUpIHx8XG4gICAgaXNGdW5jdGlvbkV4cHJlc3Npb24obm9kZSkgfHxcbiAgICBpc01ldGhvZExpa2Uobm9kZSkgfHxcbiAgICBmdW5jdGlvbkxpa2VUeXBlcy5oYXMobm9kZS50eXBlKSB8fFxuICAgIGlzUHJvcGVydHlXaXRoRnVuY3Rpb25WYWx1ZShub2RlIGFzIEVzdHJlZU5vZGUpIHx8XG4gICAgaXNWYXJpYWJsZVdpdGhGdW5jdGlvbkluaXQobm9kZSBhcyBFc3RyZWVOb2RlKSB8fFxuICAgIGlzRXhwb3J0ZWRGdW5jdGlvbkxpa2Uobm9kZSBhcyBFc3RyZWVOb2RlKVxuICApO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSBKU0RvYyBjb21tZW50IHNob3VsZCBiZSBza2lwcGVkIGZvciBmdW5jdGlvbiB0YXJnZXRzLlxuICogQHBhcmFtIGNvbnRleHQgUnVsZSBjb250ZXh0LlxuICogQHBhcmFtIGNvbW1lbnQgQ29tbWVudCBub2RlIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyBUcnVlIHdoZW4gdGhlIGNvbW1lbnQgdGFyZ2V0cyBhIGZ1bmN0aW9uLWxpa2Ugbm9kZS5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBzaG91bGRTa2lwRm9yRnVuY3Rpb24oe30gYXMgUnVsZS5SdWxlQ29udGV4dCwge30gYXMgU291cmNlQ29tbWVudCk7XG4gKiBgYGBcbiAqL1xuY29uc3Qgc2hvdWxkU2tpcEZvckZ1bmN0aW9uID0gKFxuICBjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0LFxuICBjb21tZW50OiBTb3VyY2VDb21tZW50LFxuKTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IHNvdXJjZUNvZGUgPSBjb250ZXh0LnNvdXJjZUNvZGUgYXMgU291cmNlQ29kZUFjY2VzcztcbiAgaWYgKHR5cGVvZiBzb3VyY2VDb2RlLmdldE5vZGVCeVJhbmdlSW5kZXggIT09IFwiZnVuY3Rpb25cIikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHRva2VuQWZ0ZXIgPSBnZXRUb2tlbkFmdGVyUmFuZ2Uoc291cmNlQ29kZSwgY29tbWVudCk7XG4gIGlmICh0b2tlbkFmdGVyID09PSB2b2lkIDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBbcmFuZ2VTdGFydF0gPSB0b2tlbkFmdGVyLnJhbmdlO1xuICBjb25zdCBub2RlID0gc291cmNlQ29kZS5nZXROb2RlQnlSYW5nZUluZGV4KHJhbmdlU3RhcnQpO1xuICByZXR1cm4gaXNGdW5jdGlvbkxpa2VOb2RlKG5vZGUpO1xufTtcblxuLyoqIFJ1bGUgbW9kdWxlIGVuZm9yY2luZyBzaW5nbGUtbGluZSBKU0RvYyB3aGVuIGl0IGZpdHMuICovXG5jb25zdCBzaW5nbGVMaW5lSnNkb2NSdWxlOiBSdWxlLlJ1bGVNb2R1bGUgPSB7XG4gIGNyZWF0ZShjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0KTogUnVsZS5SdWxlTGlzdGVuZXIge1xuICAgIGNvbnN0IHsgb3B0aW9ucywgc291cmNlQ29kZSB9ID0gY29udGV4dDtcbiAgICBjb25zdCBtYXhMaW5lTGVuZ3RoID0gbm9ybWFsaXplTWF4TGluZUxlbmd0aChvcHRpb25zKTtcblxuICAgIGNvbnN0IGNvbW1lbnRzID0gc291cmNlQ29kZS5nZXRBbGxDb21tZW50cygpO1xuXG4gICAgZm9yIChjb25zdCBjb21tZW50IG9mIGNvbW1lbnRzKSB7XG4gICAgICBpZiAoIXNob3VsZFNraXBGb3JGdW5jdGlvbihjb250ZXh0LCBjb21tZW50KSkge1xuICAgICAgICByZXBvcnRJZlNpbmdsZUxpbmUoY29udGV4dCwgY29tbWVudCwgbWF4TGluZUxlbmd0aCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHt9O1xuICB9LFxuICBtZXRhOiB7XG4gICAgZG9jczogY3JlYXRlUnVsZURvY3VtZW50YXRpb24oXCJzaW5nbGUtbGluZS1qc2RvY1wiLCBcIlJlcXVpcmUgSlNEb2MgY29tbWVudHMgdG8gdXNlIGEgc2luZ2xlIGxpbmUgd2hlbiB0aGV5IGZpdC5cIiksXG4gICAgZml4YWJsZTogXCJjb2RlXCIsXG4gICAgbWVzc2FnZXM6IHtcbiAgICAgIHNpbmdsZUxpbmU6IFwiVXNlIGEgc2luZ2xlLWxpbmUgSlNEb2MgY29tbWVudCB3aGVuIGl0IGZpdHMgb24gb25lIGxpbmUuXCIsXG4gICAgfSxcbiAgICBzY2hlbWE6IFtcbiAgICAgIHtcbiAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgbWF4TGluZUxlbmd0aDoge1xuICAgICAgICAgICAgbWluaW11bTogMSxcbiAgICAgICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICB0eXBlOiBcImxheW91dFwiLFxuICB9LFxufTtcblxuZXhwb3J0IHsgc2luZ2xlTGluZUpzZG9jUnVsZSB9OyJdfQ==
|
|
201
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb21haW4vZG9jcy9zaW5nbGUtbGluZS1qc2RvYy9ydWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsa0JBQWtCLEdBQ25CLE1BQU0sK0JBQStCLENBQUM7QUEwRHZDOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sa0JBQWtCLEdBQUcsQ0FDekIsVUFBNEIsRUFDNUIsT0FBc0IsRUFDTSxFQUFFO0lBQzlCLElBQUksT0FBTyxVQUFVLENBQUMsYUFBYSxLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQ25ELE9BQU8sS0FBSyxDQUFDLENBQUM7SUFDaEIsQ0FBQztJQUVELE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFO1FBQ25ELGVBQWUsRUFBRSxLQUFLO0tBQ3ZCLENBQUMsQ0FBQztJQUNILElBQUksVUFBVSxFQUFFLEtBQUssS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ2pDLE9BQU8sS0FBSyxDQUFDLENBQUM7SUFDaEIsQ0FBQztJQUNELE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3JDLENBQUMsQ0FBQztBQUVGOzs7Ozs7R0FNRztBQUNILE1BQU0saUJBQWlCLEdBQUcsSUFBSSxHQUFHLENBQVM7SUFDeEMsNEJBQTRCO0lBQzVCLGlDQUFpQztJQUNqQyxnQkFBZ0I7Q0FDakIsQ0FBQyxDQUFDO0FBRUg7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLG9CQUFvQixHQUFHLENBQUMsSUFBZSxFQUFXLEVBQUUsQ0FDeEQsSUFBSSxFQUFFLElBQUksS0FBSyxvQkFBb0I7SUFDbkMsSUFBSSxFQUFFLElBQUksS0FBSyx5QkFBeUIsQ0FBQztBQUUzQzs7Ozs7Ozs7R0FRRztBQUNILE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxJQUFlLEVBQVcsRUFBRSxDQUN6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QUFFLENBQUM7d0JBQ1YsSUFBSSxFQUFFLFFBQVE7cUJBQ2Y7aUJBQ0Y7Z0JBQ0QsSUFBSSxFQUFFLFFBQVE7YUFDZjtTQUNGO1FBQ0QsSUFBSSxFQUFFLFFBQVE7S0FDZjtDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFJ1bGUgfSBmcm9tIFwiZXNsaW50XCI7XG5pbXBvcnQgdHlwZSB7IENvbW1lbnQgYXMgRXN0cmVlQ29tbWVudCwgTm9kZSBhcyBFc3RyZWVOb2RlIH0gZnJvbSBcImVzdHJlZVwiO1xuXG5pbXBvcnQge1xuICBub3JtYWxpemVNYXhMaW5lTGVuZ3RoLFxuICByZXBvcnRJZlNpbmdsZUxpbmUsXG59IGZyb20gXCIuL3NpbmdsZS1saW5lLWpzZG9jLXV0aWxpdGllc1wiO1xuXG4vKiogVHlwZSB1bmlvbiBmb3Igbm9kZXMgdGhhdCBtYXkgYmUgbWlzc2luZy4gKi9cbnR5cGUgTWF5YmVOb2RlID0gRXN0cmVlTm9kZSB8IE5vZGVXaXRoVHlwZSB8IG51bGwgfCB1bmRlZmluZWQ7XG5cbi8qKiBTaGFwZSBmb3IgZXhwb3J0IG5vZGVzIHRoYXQgd3JhcCBhIGRlY2xhcmF0aW9uLiAqL1xuaW50ZXJmYWNlIE5vZGVXaXRoRGVjbGFyYXRpb24ge1xuICAvKiogRGVjbGFyYXRpb24gd3JhcHBlZCBieSB0aGUgZXhwb3J0LiAqL1xuICBkZWNsYXJhdGlvbj86IE1heWJlTm9kZTtcbn1cbi8qKiBTaGFwZSBmb3Igbm9kZXMgdGhhdCBoYXZlIGRlY2xhcmF0aW9ucy4gKi9cbmludGVyZmFjZSBOb2RlV2l0aERlY2xhcmF0aW9ucyB7XG4gIC8qKiBWYXJpYWJsZSBkZWNsYXJhdGlvbnMgZm9yIGEgZGVjbGFyYXRpb24gbGlzdC4gKi9cbiAgZGVjbGFyYXRpb25zPzogVmFyaWFibGVEZWNsYXJhdGlvbkVudHJ5W107XG59XG4vKiogU2hhcGUgZm9yIG1pbmltYWwgbm9kZXMgdGhhdCBvbmx5IGV4cG9zZSBhIHR5cGUuICovXG5pbnRlcmZhY2UgTm9kZVdpdGhUeXBlIHtcbiAgLyoqIE5vZGUgdHlwZSBkaXNjcmltaW5hdG9yLiAqL1xuICB0eXBlOiBzdHJpbmc7XG59XG4vKiogU2hhcGUgZm9yIG5vZGVzIHRoYXQgaGF2ZSBhIHZhbHVlLiAqL1xuaW50ZXJmYWNlIE5vZGVXaXRoVmFsdWUge1xuICAvKiogVmFsdWUgbm9kZSB1c2VkIGZvciBwcm9wZXJ0eSBpbml0aWFsaXplcnMuICovXG4gIHZhbHVlPzogTWF5YmVOb2RlO1xufVxuLyoqIFNvdXJjZUNvZGUgYWNjZXNzb3JzIHVzZWQgYnkgdGhpcyBydWxlLiAqL1xuaW50ZXJmYWNlIFNvdXJjZUNvZGVBY2Nlc3Mge1xuICAvKiogUmV0dXJucyB0aGUgbm9kZSBhdCBhIHJhbmdlIGluZGV4LiAqL1xuICBnZXROb2RlQnlSYW5nZUluZGV4OiAoaW5kZXg6IG51bWJlcikgPT4gRXN0cmVlTm9kZSB8IG51bGw7XG4gIC8qKiBSZXR1cm5zIHRoZSBmaXJzdCB0b2tlbiBhZnRlciBhIGNvbW1lbnQuICovXG4gIGdldFRva2VuQWZ0ZXI6IChcbiAgICBub2RlOiBFc3RyZWVDb21tZW50LFxuICAgIG9wdGlvbnM/OiBUb2tlbkFmdGVyT3B0aW9ucyxcbiAgKSA9PiBudWxsIHwgVG9rZW5XaXRoT3B0aW9uYWxSYW5nZTtcbn1cbi8qKiBUeXBlIGFsaWFzIGZvciBjb21tZW50IG5vZGVzIHByb3ZpZGVkIGJ5IEVTTGludC4gKi9cbnR5cGUgU291cmNlQ29tbWVudCA9IEVzdHJlZUNvbW1lbnQ7XG4vKiogT3B0aW9ucyB1c2VkIHdoZW4gZmV0Y2hpbmcgdG9rZW5zIGFmdGVyIGNvbW1lbnRzLiAqL1xuaW50ZXJmYWNlIFRva2VuQWZ0ZXJPcHRpb25zIHtcbiAgLyoqIFdoZXRoZXIgdG8gaW5jbHVkZSBjb21tZW50IHRva2Vucy4gKi9cbiAgaW5jbHVkZUNvbW1lbnRzPzogYm9vbGVhbjtcbn1cbi8qKiBTaGFwZSBmb3IgdG9rZW5zIHRoYXQgbWF5IGluY2x1ZGUgYSByYW5nZS4gKi9cbmludGVyZmFjZSBUb2tlbldpdGhPcHRpb25hbFJhbmdlIHtcbiAgLyoqIFRva2VuIHJhbmdlIHVzZWQgZm9yIGxvb2t1cHMuICovXG4gIHJhbmdlPzogW251bWJlciwgbnVtYmVyXTtcbn1cbi8qKiBTaGFwZSBmb3IgdG9rZW5zIHdpdGggcmFuZ2UgbWV0YWRhdGEuICovXG5pbnRlcmZhY2UgVG9rZW5XaXRoUmFuZ2Uge1xuICAvKiogVG9rZW4gcmFuZ2UgdXNlZCBmb3IgbG9va3Vwcy4gKi9cbiAgcmFuZ2U6IFtudW1iZXIsIG51bWJlcl07XG59XG4vKiogU2hhcGUgZm9yIHZhcmlhYmxlIGRlY2xhcmF0aW9uIGVudHJpZXMuICovXG5pbnRlcmZhY2UgVmFyaWFibGVEZWNsYXJhdGlvbkVudHJ5IHtcbiAgLyoqIE9wdGlvbmFsIGluaXRpYWxpemVyIGZvciB0aGUgZGVjbGFyYXRpb24uICovXG4gIGluaXQ/OiBNYXliZU5vZGU7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIHRva2VuIGFmdGVyIGEgY29tbWVudCB3aGVuIGF2YWlsYWJsZS5cbiAqIEBwYXJhbSBzb3VyY2VDb2RlIFNvdXJjZSBjb2RlIGFjY2Vzc29ycy5cbiAqIEBwYXJhbSBjb21tZW50IENvbW1lbnQgbm9kZSB0byBpbnNwZWN0LlxuICogQHJldHVybnMgVG9rZW4gcmFuZ2UgbWV0YWRhdGEgd2hlbiBhdmFpbGFibGUuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogZ2V0VG9rZW5BZnRlclJhbmdlKHt9IGFzIFNvdXJjZUNvZGVBY2Nlc3MsIHt9IGFzIFNvdXJjZUNvbW1lbnQpO1xuICogYGBgXG4gKi9cbmNvbnN0IGdldFRva2VuQWZ0ZXJSYW5nZSA9IChcbiAgc291cmNlQ29kZTogU291cmNlQ29kZUFjY2VzcyxcbiAgY29tbWVudDogU291cmNlQ29tbWVudCxcbik6IFRva2VuV2l0aFJhbmdlIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKHR5cGVvZiBzb3VyY2VDb2RlLmdldFRva2VuQWZ0ZXIgIT09IFwiZnVuY3Rpb25cIikge1xuICAgIHJldHVybiB2b2lkIDA7XG4gIH1cblxuICBjb25zdCB0b2tlbkFmdGVyID0gc291cmNlQ29kZS5nZXRUb2tlbkFmdGVyKGNvbW1lbnQsIHtcbiAgICBpbmNsdWRlQ29tbWVudHM6IGZhbHNlLFxuICB9KTtcbiAgaWYgKHRva2VuQWZ0ZXI/LnJhbmdlID09PSB2b2lkIDApIHtcbiAgICByZXR1cm4gdm9pZCAwO1xuICB9XG4gIHJldHVybiB7IHJhbmdlOiB0b2tlbkFmdGVyLnJhbmdlIH07XG59O1xuXG4vKipcbiAqIEZ1bmN0aW9uLWxpa2Ugbm9kZSB0eXBlcyBoYW5kbGVkIGRpcmVjdGx5LlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGZ1bmN0aW9uTGlrZVR5cGVzLmhhcyhcIlRTRnVuY3Rpb25UeXBlXCIpO1xuICogYGBgXG4gKi9cbmNvbnN0IGZ1bmN0aW9uTGlrZVR5cGVzID0gbmV3IFNldDxzdHJpbmc+KFtcbiAgXCJUU0NhbGxTaWduYXR1cmVEZWNsYXJhdGlvblwiLFxuICBcIlRTQ29uc3RydWN0U2lnbmF0dXJlRGVjbGFyYXRpb25cIixcbiAgXCJUU0Z1bmN0aW9uVHlwZVwiLFxuXSk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbm9kZSBpcyBhIGZ1bmN0aW9uIGV4cHJlc3Npb24gb3IgYXJyb3cgZnVuY3Rpb24uXG4gKiBAcGFyYW0gbm9kZSBOb2RlIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyBUcnVlIHdoZW4gdGhlIG5vZGUgaXMgYSBmdW5jdGlvbiBleHByZXNzaW9uLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGlzRnVuY3Rpb25FeHByZXNzaW9uKHsgdHlwZTogXCJGdW5jdGlvbkV4cHJlc3Npb25cIiB9IGFzIEVzdHJlZU5vZGUpO1xuICogYGBgXG4gKi9cbmNvbnN0IGlzRnVuY3Rpb25FeHByZXNzaW9uID0gKG5vZGU6IE1heWJlTm9kZSk6IGJvb2xlYW4gPT5cbiAgbm9kZT8udHlwZSA9PT0gXCJGdW5jdGlvbkV4cHJlc3Npb25cIiB8fFxuICBub2RlPy50eXBlID09PSBcIkFycm93RnVuY3Rpb25FeHByZXNzaW9uXCI7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbm9kZSBpcyBhIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIG9yIFRTIGRlY2xhcmF0aW9uIHNpZ25hdHVyZS5cbiAqIEBwYXJhbSBub2RlIE5vZGUgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIFRydWUgd2hlbiB0aGUgbm9kZSBpcyBhIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGlzRnVuY3Rpb25EZWNsYXJhdGlvbih7IHR5cGU6IFwiRnVuY3Rpb25EZWNsYXJhdGlvblwiIH0gYXMgRXN0cmVlTm9kZSk7XG4gKiBgYGBcbiAqL1xuY29uc3QgaXNGdW5jdGlvbkRlY2xhcmF0aW9uID0gKG5vZGU6IE1heWJlTm9kZSk6IGJvb2xlYW4gPT5cbiAgbm9kZT8udHlwZSA9PT0gXCJGdW5jdGlvbkRlY2xhcmF0aW9uXCIgfHwgbm9kZT8udHlwZSA9PT0gXCJUU0RlY2xhcmVGdW5jdGlvblwiO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIG5vZGUgaXMgYSBtZXRob2QtbGlrZSBkZWNsYXJhdGlvbi5cbiAqIEBwYXJhbSBub2RlIE5vZGUgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIFRydWUgd2hlbiB0aGUgbm9kZSBpcyBhIG1ldGhvZC1saWtlIGRlY2xhcmF0aW9uLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGlzTWV0aG9kTGlrZSh7IHR5cGU6IFwiTWV0aG9kRGVmaW5pdGlvblwiIH0gYXMgRXN0cmVlTm9kZSk7XG4gKiBgYGBcbiAqL1xuY29uc3QgaXNNZXRob2RMaWtlID0gKG5vZGU6IE1heWJlTm9kZSk6IGJvb2xlYW4gPT5cbiAgbm9kZT8udHlwZSA9PT0gXCJNZXRob2REZWZpbml0aW9uXCIgfHwgbm9kZT8udHlwZSA9PT0gXCJUU01ldGhvZFNpZ25hdHVyZVwiO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIG5vZGUgaXMgYSBwcm9wZXJ0eSB3aXRoIGEgZnVuY3Rpb24gaW5pdGlhbGl6ZXIuXG4gKiBAcGFyYW0gbm9kZSBOb2RlIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyBUcnVlIHdoZW4gdGhlIHByb3BlcnR5IHZhbHVlIGlzIGEgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaXNQcm9wZXJ0eVdpdGhGdW5jdGlvblZhbHVlKHsgdHlwZTogXCJQcm9wZXJ0eVwiIH0gYXMgRXN0cmVlTm9kZSk7XG4gKiBgYGBcbiAqL1xuY29uc3QgaXNQcm9wZXJ0eVdpdGhGdW5jdGlvblZhbHVlID0gKG5vZGU6IEVzdHJlZU5vZGUpOiBib29sZWFuID0+IHtcbiAgaWYgKG5vZGUudHlwZSAhPT0gXCJQcm9wZXJ0eURlZmluaXRpb25cIiAmJiBub2RlLnR5cGUgIT09IFwiUHJvcGVydHlcIikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHsgdmFsdWUgfSA9IG5vZGUgYXMgTm9kZVdpdGhWYWx1ZTtcbiAgcmV0dXJuIGlzRnVuY3Rpb25FeHByZXNzaW9uKHZhbHVlKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgdmFyaWFibGUgZGVjbGFyYXRpb24gY29udGFpbnMgYSBmdW5jdGlvbiBpbml0aWFsaXplci5cbiAqIEBwYXJhbSBub2RlIE5vZGUgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIFRydWUgd2hlbiBhbnkgaW5pdGlhbGl6ZXIgaXMgYSBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpc1ZhcmlhYmxlV2l0aEZ1bmN0aW9uSW5pdCh7IHR5cGU6IFwiVmFyaWFibGVEZWNsYXJhdGlvblwiIH0gYXMgRXN0cmVlTm9kZSk7XG4gKiBgYGBcbiAqL1xuY29uc3QgaXNWYXJpYWJsZVdpdGhGdW5jdGlvbkluaXQgPSAobm9kZTogRXN0cmVlTm9kZSk6IGJvb2xlYW4gPT4ge1xuICBpZiAobm9kZS50eXBlICE9PSBcIlZhcmlhYmxlRGVjbGFyYXRpb25cIikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHsgZGVjbGFyYXRpb25zIH0gPSBub2RlIGFzIE5vZGVXaXRoRGVjbGFyYXRpb25zO1xuICBjb25zdCBpbml0aWFsaXplZCA9IGRlY2xhcmF0aW9ucyA/PyBbXTtcblxuICByZXR1cm4gaW5pdGlhbGl6ZWQuc29tZSgoZGVjbGFyYXRpb24pID0+XG4gICAgaXNGdW5jdGlvbkV4cHJlc3Npb24oZGVjbGFyYXRpb24uaW5pdCksXG4gICk7XG59O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhbiBleHBvcnQgd3JhcHMgYSBmdW5jdGlvbi1saWtlIGRlY2xhcmF0aW9uLlxuICogQHBhcmFtIG5vZGUgTm9kZSB0byBpbnNwZWN0LlxuICogQHJldHVybnMgVHJ1ZSB3aGVuIHRoZSBleHBvcnRlZCBkZWNsYXJhdGlvbiBpcyBmdW5jdGlvbi1saWtlLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGlzRXhwb3J0ZWRGdW5jdGlvbkxpa2UoeyB0eXBlOiBcIkV4cG9ydE5hbWVkRGVjbGFyYXRpb25cIiB9IGFzIEVzdHJlZU5vZGUpO1xuICogYGBgXG4gKi9cbmNvbnN0IGlzRXhwb3J0ZWRGdW5jdGlvbkxpa2UgPSAobm9kZTogRXN0cmVlTm9kZSk6IGJvb2xlYW4gPT4ge1xuICBpZiAoXG4gICAgbm9kZS50eXBlICE9PSBcIkV4cG9ydE5hbWVkRGVjbGFyYXRpb25cIiAmJlxuICAgIG5vZGUudHlwZSAhPT0gXCJFeHBvcnREZWZhdWx0RGVjbGFyYXRpb25cIlxuICApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCB7IGRlY2xhcmF0aW9uIH0gPSBub2RlIGFzIE5vZGVXaXRoRGVjbGFyYXRpb247XG5cbiAgcmV0dXJuIGlzRnVuY3Rpb25MaWtlTm9kZShkZWNsYXJhdGlvbik7XG59O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIG5vZGUgcmVwcmVzZW50cyBhbnkgc3VwcG9ydGVkIGZ1bmN0aW9uLWxpa2UgZGVjbGFyYXRpb24uXG4gKiBAcGFyYW0gbm9kZSBOb2RlIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyBUcnVlIHdoZW4gdGhlIG5vZGUgaXMgZnVuY3Rpb24tbGlrZS5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpc0Z1bmN0aW9uTGlrZU5vZGUoeyB0eXBlOiBcIkZ1bmN0aW9uRGVjbGFyYXRpb25cIiB9IGFzIEVzdHJlZU5vZGUpO1xuICogYGBgXG4gKi9cbmNvbnN0IGlzRnVuY3Rpb25MaWtlTm9kZSA9IChub2RlOiBNYXliZU5vZGUpOiBib29sZWFuID0+IHtcbiAgaWYgKG5vZGUgPT09IG51bGwgfHwgbm9kZSA9PT0gdm9pZCAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICBpc0Z1bmN0aW9uRGVjbGFyYXRpb24obm9kZSkgfHxcbiAgICBpc0Z1bmN0aW9uRXhwcmVzc2lvbihub2RlKSB8fFxuICAgIGlzTWV0aG9kTGlrZShub2RlKSB8fFxuICAgIGZ1bmN0aW9uTGlrZVR5cGVzLmhhcyhub2RlLnR5cGUpIHx8XG4gICAgaXNQcm9wZXJ0eVdpdGhGdW5jdGlvblZhbHVlKG5vZGUgYXMgRXN0cmVlTm9kZSkgfHxcbiAgICBpc1ZhcmlhYmxlV2l0aEZ1bmN0aW9uSW5pdChub2RlIGFzIEVzdHJlZU5vZGUpIHx8XG4gICAgaXNFeHBvcnRlZEZ1bmN0aW9uTGlrZShub2RlIGFzIEVzdHJlZU5vZGUpXG4gICk7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciBhIEpTRG9jIGNvbW1lbnQgc2hvdWxkIGJlIHNraXBwZWQgZm9yIGZ1bmN0aW9uIHRhcmdldHMuXG4gKiBAcGFyYW0gY29udGV4dCBSdWxlIGNvbnRleHQuXG4gKiBAcGFyYW0gY29tbWVudCBDb21tZW50IG5vZGUgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIFRydWUgd2hlbiB0aGUgY29tbWVudCB0YXJnZXRzIGEgZnVuY3Rpb24tbGlrZSBub2RlLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHNob3VsZFNraXBGb3JGdW5jdGlvbih7fSBhcyBSdWxlLlJ1bGVDb250ZXh0LCB7fSBhcyBTb3VyY2VDb21tZW50KTtcbiAqIGBgYFxuICovXG5jb25zdCBzaG91bGRTa2lwRm9yRnVuY3Rpb24gPSAoXG4gIGNvbnRleHQ6IFJ1bGUuUnVsZUNvbnRleHQsXG4gIGNvbW1lbnQ6IFNvdXJjZUNvbW1lbnQsXG4pOiBib29sZWFuID0+IHtcbiAgY29uc3Qgc291cmNlQ29kZSA9IGNvbnRleHQuc291cmNlQ29kZSBhcyBTb3VyY2VDb2RlQWNjZXNzO1xuICBpZiAodHlwZW9mIHNvdXJjZUNvZGUuZ2V0Tm9kZUJ5UmFuZ2VJbmRleCAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgdG9rZW5BZnRlciA9IGdldFRva2VuQWZ0ZXJSYW5nZShzb3VyY2VDb2RlLCBjb21tZW50KTtcbiAgaWYgKHRva2VuQWZ0ZXIgPT09IHZvaWQgMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IFtyYW5nZVN0YXJ0XSA9IHRva2VuQWZ0ZXIucmFuZ2U7XG4gIGNvbnN0IG5vZGUgPSBzb3VyY2VDb2RlLmdldE5vZGVCeVJhbmdlSW5kZXgocmFuZ2VTdGFydCk7XG4gIHJldHVybiBpc0Z1bmN0aW9uTGlrZU5vZGUobm9kZSk7XG59O1xuXG4vKiogUnVsZSBtb2R1bGUgZW5mb3JjaW5nIHNpbmdsZS1saW5lIEpTRG9jIHdoZW4gaXQgZml0cy4gKi9cbmV4cG9ydCBjb25zdCBzaW5nbGVMaW5lSnNkb2NSdWxlOiBSdWxlLlJ1bGVNb2R1bGUgPSB7XG4gIGNyZWF0ZShjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0KTogUnVsZS5SdWxlTGlzdGVuZXIge1xuICAgIGNvbnN0IHsgb3B0aW9ucywgc291cmNlQ29kZSB9ID0gY29udGV4dDtcbiAgICBjb25zdCBtYXhMaW5lTGVuZ3RoID0gbm9ybWFsaXplTWF4TGluZUxlbmd0aChvcHRpb25zKTtcbiAgICBjb25zdCBjb21tZW50cyA9IHNvdXJjZUNvZGUuZ2V0QWxsQ29tbWVudHMoKTtcblxuICAgIGZvciAoY29uc3QgY29tbWVudCBvZiBjb21tZW50cykge1xuICAgICAgaWYgKCFzaG91bGRTa2lwRm9yRnVuY3Rpb24oY29udGV4dCwgY29tbWVudCkpIHtcbiAgICAgICAgcmVwb3J0SWZTaW5nbGVMaW5lKGNvbnRleHQsIGNvbW1lbnQsIG1heExpbmVMZW5ndGgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7fTtcbiAgfSxcbiAgbWV0YToge1xuICAgIGRlZmF1bHRPcHRpb25zOiBbeyBtYXhMaW5lTGVuZ3RoOiA4MCB9XSxcbiAgICBkb2NzOiB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJSZXF1aXJlIEpTRG9jIGNvbW1lbnRzIHRvIHVzZSBhIHNpbmdsZSBsaW5lIHdoZW4gdGhleSBmaXQuXCIsXG4gICAgICByZWNvbW1lbmRlZDogZmFsc2UsXG4gICAgICB1cmw6IFwiaHR0cHM6Ly9naXRodWIuY29tL3BhcmxvdGkvZXNsaW50LXBsdWdpbi9ibG9iL21haW4vZG9jcy9ydWxlcy9zaW5nbGUtbGluZS1qc2RvYy5tZFwiLFxuICAgIH0sXG4gICAgZml4YWJsZTogXCJjb2RlXCIsXG4gICAgbWVzc2FnZXM6IHtcbiAgICAgIHNpbmdsZUxpbmU6IFwiVXNlIGEgc2luZ2xlLWxpbmUgSlNEb2MgY29tbWVudCB3aGVuIGl0IGZpdHMgb24gb25lIGxpbmUuXCIsXG4gICAgfSxcbiAgICBzY2hlbWE6IFtcbiAgICAgIHtcbiAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgbWF4TGluZUxlbmd0aDoge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICAgIFwiTWF4aW11bSBsaW5lIGxlbmd0aCB0aGF0IHN0aWxsIGFsbG93cyBhIEpTRG9jIGJsb2NrIHRvIGJlIGNvbGxhcHNlZCB0byBhIHNpbmdsZSBsaW5lLlwiLFxuICAgICAgICAgICAgbWluaW11bTogMSxcbiAgICAgICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICB0eXBlOiBcImxheW91dFwiLFxuICB9LFxufTtcbiJdfQ==
|
|
@@ -2,4 +2,4 @@ import { singleLineJsdocRule } from "./rule.js";
|
|
|
2
2
|
/** Companion module for single-line-jsdoc lookup edge-case tests. */
|
|
3
3
|
const singleLineJsdocRuleNodeLookups = singleLineJsdocRule;
|
|
4
4
|
export { singleLineJsdocRuleNodeLookups };
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS5ub2RlLWxvb2t1cHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZG9tYWluL2RvY3Mvc2luZ2xlLWxpbmUtanNkb2MvcnVsZS5ub2RlLWxvb2t1cHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRTdDLHFFQUFxRTtBQUNyRSxNQUFNLDhCQUE4QixHQUFHLG1CQUFtQixDQUFDO0FBRTNELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc2luZ2xlTGluZUpzZG9jUnVsZSB9IGZyb20gXCIuL3J1bGVcIjtcclxuXHJcbi8qKiBDb21wYW5pb24gbW9kdWxlIGZvciBzaW5nbGUtbGluZS1qc2RvYyBsb29rdXAgZWRnZS1jYXNlIHRlc3RzLiAqL1xyXG5jb25zdCBzaW5nbGVMaW5lSnNkb2NSdWxlTm9kZUxvb2t1cHMgPSBzaW5nbGVMaW5lSnNkb2NSdWxlO1xyXG5cclxuZXhwb3J0IHsgc2luZ2xlTGluZUpzZG9jUnVsZU5vZGVMb29rdXBzIH07XHJcbiJdfQ==
|
|
@@ -1,19 +1,24 @@
|
|
|
1
1
|
import type { Rule } from "eslint";
|
|
2
2
|
import type * as ESTree from "estree";
|
|
3
|
-
import type {
|
|
4
|
-
/**
|
|
3
|
+
import type { TestBlockAnalysis } from "./types.js";
|
|
4
|
+
/** Ordered list of AAA phase names. */
|
|
5
5
|
declare const aaaPhaseOrder: {
|
|
6
6
|
readonly Act: 1;
|
|
7
7
|
readonly Arrange: 0;
|
|
8
8
|
readonly Assert: 2;
|
|
9
9
|
};
|
|
10
|
-
/**
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
10
|
+
/** Counts Act-phase statements in a test block analysis. */
|
|
11
|
+
declare const countActStatements: (analysis: TestBlockAnalysis) => number;
|
|
12
|
+
/** Flattens multi-phase section comments into one entry per phase. */
|
|
13
|
+
declare const getFlattenedSections: (analysis: Pick<TestBlockAnalysis, "sectionComments">) => import("./analyzer.analysis.helpers.js").FlattenedSection[];
|
|
14
|
+
/** Resolves the leading whitespace for the line containing a source offset. */
|
|
15
|
+
declare const getIndentationAtOffset: (sourceText: string, offset: number) => string;
|
|
16
|
+
/** Returns the start-of-line range for a given source offset. */
|
|
17
|
+
declare const getLineStartRange: (sourceText: string, line: number) => [number, number];
|
|
18
|
+
/** Extracts the phase-boundary section comments from a test block analysis. */
|
|
19
|
+
declare const getPhaseBoundaryComments: (analysis: Pick<TestBlockAnalysis, "sectionComments">) => import("./types.js").SectionComment[];
|
|
20
|
+
/** Parses AAA phase names from a section comment value. */
|
|
21
|
+
declare const getSectionPhases: (commentValue: string) => import("./types.js").AaaPhase[];
|
|
17
22
|
/**
|
|
18
23
|
* Analyzes supported AAA test blocks.
|
|
19
24
|
* @param context Input context value.
|
|
@@ -25,68 +30,5 @@ interface FlattenedSection {
|
|
|
25
30
|
* ```
|
|
26
31
|
*/
|
|
27
32
|
declare function analyzeTestBlock(context: Rule.RuleContext, node: ESTree.CallExpression): TestBlockAnalysis | undefined;
|
|
28
|
-
/**
|
|
29
|
-
* Counts Act statements.
|
|
30
|
-
* @param analysis Input analysis value.
|
|
31
|
-
* @returns Return value output.
|
|
32
|
-
* @example
|
|
33
|
-
* ```typescript
|
|
34
|
-
* countActStatements(analysis);
|
|
35
|
-
* ```
|
|
36
|
-
*/
|
|
37
|
-
declare function countActStatements(analysis: TestBlockAnalysis): number;
|
|
38
|
-
/**
|
|
39
|
-
* Flattens section comments.
|
|
40
|
-
* @param analysis Input analysis value.
|
|
41
|
-
* @returns Return value output.
|
|
42
|
-
* @example
|
|
43
|
-
* ```typescript
|
|
44
|
-
* getFlattenedSections(analysis);
|
|
45
|
-
* ```
|
|
46
|
-
*/
|
|
47
|
-
declare function getFlattenedSections(analysis: Pick<TestBlockAnalysis, "sectionComments">): FlattenedSection[];
|
|
48
|
-
/**
|
|
49
|
-
* Gets indentation at an offset.
|
|
50
|
-
* @param sourceText Input sourceText value.
|
|
51
|
-
* @param offset Input offset value.
|
|
52
|
-
* @returns Return value output.
|
|
53
|
-
* @example
|
|
54
|
-
* ```typescript
|
|
55
|
-
* getIndentationAtOffset(sourceText, 4);
|
|
56
|
-
* ```
|
|
57
|
-
*/
|
|
58
|
-
declare function getIndentationAtOffset(sourceText: string, offset: number): string;
|
|
59
|
-
/**
|
|
60
|
-
* Gets the start range for a line.
|
|
61
|
-
* @param sourceText Input sourceText value.
|
|
62
|
-
* @param line Input line value.
|
|
63
|
-
* @returns Return value output.
|
|
64
|
-
* @example
|
|
65
|
-
* ```typescript
|
|
66
|
-
* getLineStartRange(sourceText, 2);
|
|
67
|
-
* ```
|
|
68
|
-
*/
|
|
69
|
-
declare function getLineStartRange(sourceText: string, line: number): [number, number];
|
|
70
|
-
/**
|
|
71
|
-
* Gets phase-boundary comments.
|
|
72
|
-
* @param analysis Input analysis value.
|
|
73
|
-
* @returns Return value output.
|
|
74
|
-
* @example
|
|
75
|
-
* ```typescript
|
|
76
|
-
* getPhaseBoundaryComments(analysis);
|
|
77
|
-
* ```
|
|
78
|
-
*/
|
|
79
|
-
declare function getPhaseBoundaryComments(analysis: Pick<TestBlockAnalysis, "sectionComments">): TestBlockAnalysis["sectionComments"];
|
|
80
|
-
/**
|
|
81
|
-
* Parses AAA phases from a comment.
|
|
82
|
-
* @param commentValue Input commentValue value.
|
|
83
|
-
* @returns Return value output.
|
|
84
|
-
* @example
|
|
85
|
-
* ```typescript
|
|
86
|
-
* getSectionPhases("Arrange & Act");
|
|
87
|
-
* ```
|
|
88
|
-
*/
|
|
89
|
-
declare function getSectionPhases(commentValue: string): AaaPhase[];
|
|
90
33
|
export { aaaPhaseOrder, analyzeTestBlock, countActStatements, getFlattenedSections, getIndentationAtOffset, getLineStartRange, getPhaseBoundaryComments, getSectionPhases, };
|
|
91
|
-
export type { FlattenedSection };
|
|
92
34
|
//# sourceMappingURL=analyzer.analysis.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyzer.analysis.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/aaa/analyzer.analysis.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"analyzer.analysis.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/aaa/analyzer.analysis.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,KAAK,KAAK,MAAM,MAAM,QAAQ,CAAC;AAEtC,OAAO,KAAK,EAA+B,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAiC9E,uCAAuC;AACvC,QAAA,MAAM,aAAa;;;;CAA8B,CAAC;AAElD,4DAA4D;AAC5D,QAAA,MAAM,kBAAkB,yCAA4C,CAAC;AAErE,sEAAsE;AACtE,QAAA,MAAM,oBAAoB,oHAA8C,CAAC;AAEzE,+EAA+E;AAC/E,QAAA,MAAM,sBAAsB,gDAAgD,CAAC;AAE7E,iEAAiE;AACjE,QAAA,MAAM,iBAAiB,wDAA2C,CAAC;AAKnE,+EAA+E;AAC/E,QAAA,MAAM,wBAAwB,8FAE7B,CAAC;AAEF,2DAA2D;AAC3D,QAAA,MAAM,gBAAgB,wDAA0C,CAAC;AAQjE;;;;;;;;;GASG;AACH,iBAAS,gBAAgB,CACvB,OAAO,EAAE,IAAI,CAAC,WAAW,EACzB,IAAI,EAAE,MAAM,CAAC,cAAc,GAC1B,iBAAiB,GAAG,SAAS,CAuC/B;AAED,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,sBAAsB,EACtB,iBAAiB,EACjB,wBAAwB,EACxB,gBAAgB,GACjB,CAAC"}
|
|
@@ -1,4 +1,145 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import type * as ESTree from "estree";
|
|
2
|
+
import type { AaaPhase, LocatedNode, SourceComment, TestBlockAnalysis } from "./types.js";
|
|
3
|
+
/** Canonical ordering used when comparing AAA phases. */
|
|
4
|
+
declare const aaaPhaseOrder: {
|
|
5
|
+
readonly Act: 1;
|
|
6
|
+
readonly Arrange: 0;
|
|
7
|
+
readonly Assert: 2;
|
|
8
|
+
};
|
|
9
|
+
/** Helper state for flattened section comments. */
|
|
10
|
+
interface FlattenedSection {
|
|
11
|
+
/** Original source comment for the section marker. */
|
|
12
|
+
comment: SourceComment;
|
|
13
|
+
/** Phase represented by the flattened section entry. */
|
|
14
|
+
phase: AaaPhase;
|
|
15
|
+
}
|
|
16
|
+
/** Supported call-expression wrapper for analyzed test blocks. */
|
|
17
|
+
interface SupportedTestCall {
|
|
18
|
+
/** Callback argument that owns the test body. */
|
|
19
|
+
callback: SupportedTestCallback;
|
|
20
|
+
/** Original `it` or `test` invocation. */
|
|
21
|
+
callExpression: LocatedNode<ESTree.CallExpression>;
|
|
22
|
+
}
|
|
23
|
+
/** Supported test callback shape for `it` and `test` calls. */
|
|
24
|
+
type SupportedTestCallback = LocatedNode<ESTree.ArrowFunctionExpression | ESTree.FunctionExpression> & {
|
|
25
|
+
/** Callback body block used for section analysis. */
|
|
26
|
+
body: LocatedNode<ESTree.BlockStatement>;
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Counts Act statements.
|
|
30
|
+
* @param analysis Input analysis value.
|
|
31
|
+
* @returns Return value output.
|
|
32
|
+
* @example
|
|
33
|
+
* ```typescript
|
|
34
|
+
* countActStatements(analysis);
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
declare function countActStatements(analysis: TestBlockAnalysis): number;
|
|
38
|
+
/**
|
|
39
|
+
* Flattens section comments.
|
|
40
|
+
* @param analysis Input analysis value.
|
|
41
|
+
* @returns Return value output.
|
|
42
|
+
* @example
|
|
43
|
+
* ```typescript
|
|
44
|
+
* getFlattenedSections(analysis);
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
declare function getFlattenedSections(analysis: Pick<TestBlockAnalysis, "sectionComments">): FlattenedSection[];
|
|
48
|
+
/**
|
|
49
|
+
* Gets indentation at an offset.
|
|
50
|
+
* @param sourceText Input sourceText value.
|
|
51
|
+
* @param offset Input offset value.
|
|
52
|
+
* @returns Return value output.
|
|
53
|
+
* @example
|
|
54
|
+
* ```typescript
|
|
55
|
+
* getIndentationAtOffset(sourceText, 4);
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
declare function getIndentationAtOffset(sourceText: string, offset: number): string;
|
|
59
|
+
/**
|
|
60
|
+
* Gets the start range for a line.
|
|
61
|
+
* @param sourceText Input sourceText value.
|
|
62
|
+
* @param line Input line value.
|
|
63
|
+
* @returns Return value output.
|
|
64
|
+
* @example
|
|
65
|
+
* ```typescript
|
|
66
|
+
* getLineStartRange(sourceText, 2);
|
|
67
|
+
* ```
|
|
68
|
+
*/
|
|
69
|
+
declare function getLineStartRange(sourceText: string, line: number): [number, number];
|
|
70
|
+
/**
|
|
71
|
+
* Gets the newline sequence.
|
|
72
|
+
* @param text Input text value.
|
|
73
|
+
* @returns Return value output.
|
|
74
|
+
* @example
|
|
75
|
+
* ```typescript
|
|
76
|
+
* getNewline(sourceText);
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
79
|
+
declare function getNewline(text: string): "\n" | "\r\n";
|
|
80
|
+
/**
|
|
81
|
+
* Gets phase-boundary comments.
|
|
82
|
+
* @param analysis Input analysis value.
|
|
83
|
+
* @returns Return value output.
|
|
84
|
+
* @example
|
|
85
|
+
* ```typescript
|
|
86
|
+
* getPhaseBoundaryComments(analysis);
|
|
87
|
+
* ```
|
|
88
|
+
*/
|
|
89
|
+
declare function getPhaseBoundaryComments(analysis: Pick<TestBlockAnalysis, "sectionComments">): TestBlockAnalysis["sectionComments"];
|
|
90
|
+
/**
|
|
91
|
+
* Parses AAA phases from a comment.
|
|
92
|
+
* @param commentValue Input commentValue value.
|
|
93
|
+
* @returns Return value output.
|
|
94
|
+
* @example
|
|
95
|
+
* ```typescript
|
|
96
|
+
* getSectionPhases("Arrange & Act");
|
|
97
|
+
* ```
|
|
98
|
+
*/
|
|
99
|
+
declare function getSectionPhases(commentValue: string): AaaPhase[];
|
|
100
|
+
/**
|
|
101
|
+
* Gets the active phases for a statement.
|
|
102
|
+
* @param statement Input statement value.
|
|
103
|
+
* @param sectionComments Input sectionComments value.
|
|
104
|
+
* @returns Return value output.
|
|
105
|
+
* @example
|
|
106
|
+
* ```typescript
|
|
107
|
+
* getStatementPhases(statement, sectionComments);
|
|
108
|
+
* ```
|
|
109
|
+
*/
|
|
110
|
+
declare function getStatementPhases(statement: ESTree.Statement, sectionComments: TestBlockAnalysis["sectionComments"]): AaaPhase[];
|
|
111
|
+
/**
|
|
112
|
+
* Gets supported test call metadata.
|
|
113
|
+
* @param node Input node value.
|
|
114
|
+
* @returns Return value output.
|
|
115
|
+
* @example
|
|
116
|
+
* ```typescript
|
|
117
|
+
* getSupportedTestCall(node);
|
|
118
|
+
* ```
|
|
119
|
+
*/
|
|
120
|
+
declare function getSupportedTestCall(node: ESTree.CallExpression): SupportedTestCall | undefined;
|
|
121
|
+
/**
|
|
122
|
+
* Gets the root test callee name.
|
|
123
|
+
* @param callee Input callee value.
|
|
124
|
+
* @returns Return value output.
|
|
125
|
+
* @example
|
|
126
|
+
* ```typescript
|
|
127
|
+
* getTestRootName(callExpression.callee);
|
|
128
|
+
* ```
|
|
129
|
+
*/
|
|
130
|
+
declare function getTestRootName(callee: ESTree.CallExpression["callee"]): string | undefined;
|
|
131
|
+
/**
|
|
132
|
+
* Checks whether a value is an AAA phase.
|
|
133
|
+
* @param value Input value value.
|
|
134
|
+
* @returns Return value output.
|
|
135
|
+
* @example
|
|
136
|
+
* ```typescript
|
|
137
|
+
* isAaaPhase("Arrange");
|
|
138
|
+
* ```
|
|
139
|
+
*/
|
|
140
|
+
declare function isAaaPhase(value: string): value is AaaPhase;
|
|
141
|
+
/** Companion marker for test isolation. */
|
|
142
|
+
declare const analyzerAnalysisHelpersCompanion: true;
|
|
143
|
+
export { aaaPhaseOrder, analyzerAnalysisHelpersCompanion, countActStatements, getFlattenedSections, getIndentationAtOffset, getLineStartRange, getNewline, getPhaseBoundaryComments, getSectionPhases, getStatementPhases, getSupportedTestCall, getTestRootName, isAaaPhase, };
|
|
144
|
+
export type { FlattenedSection };
|
|
4
145
|
//# sourceMappingURL=analyzer.analysis.helpers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyzer.analysis.helpers.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/aaa/analyzer.analysis.helpers.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"analyzer.analysis.helpers.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/aaa/analyzer.analysis.helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,MAAM,QAAQ,CAAC;AAEtC,OAAO,KAAK,EACV,QAAQ,EACR,WAAW,EACX,aAAa,EACb,iBAAiB,EAClB,MAAM,SAAS,CAAC;AAEjB,yDAAyD;AACzD,QAAA,MAAM,aAAa;;;;CAI0B,CAAC;AAS9C,mDAAmD;AACnD,UAAU,gBAAgB;IACxB,sDAAsD;IACtD,OAAO,EAAE,aAAa,CAAC;IACvB,wDAAwD;IACxD,KAAK,EAAE,QAAQ,CAAC;CACjB;AAED,kEAAkE;AAClE,UAAU,iBAAiB;IACzB,iDAAiD;IACjD,QAAQ,EAAE,qBAAqB,CAAC;IAChC,0CAA0C;IAC1C,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;CACpD;AAED,+DAA+D;AAC/D,KAAK,qBAAqB,GAAG,WAAW,CACtC,MAAM,CAAC,uBAAuB,GAAG,MAAM,CAAC,kBAAkB,CAC3D,GAAG;IACF,qDAAqD;IACrD,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;CAC1C,CAAC;AAEF;;;;;;;;GAQG;AACH,iBAAS,kBAAkB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,MAAM,CAO/D;AAED;;;;;;;;GAQG;AACH,iBAAS,oBAAoB,CAC3B,QAAQ,EAAE,IAAI,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,GACnD,gBAAgB,EAAE,CAOpB;AAED;;;;;;;;;GASG;AACH,iBAAS,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAM1E;AAED;;;;;;;;;GASG;AACH,iBAAS,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAa7E;AAED;;;;;;;;GAQG;AACH,iBAAS,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAE/C;AAED;;;;;;;;GAQG;AACH,iBAAS,wBAAwB,CAC/B,QAAQ,EAAE,IAAI,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,GACnD,iBAAiB,CAAC,iBAAiB,CAAC,CAMtC;AAED;;;;;;;;GAQG;AACH,iBAAS,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,QAAQ,EAAE,CAO1D;AAED;;;;;;;;;GASG;AACH,iBAAS,kBAAkB,CACzB,SAAS,EAAE,MAAM,CAAC,SAAS,EAC3B,eAAe,EAAE,iBAAiB,CAAC,iBAAiB,CAAC,GACpD,QAAQ,EAAE,CAaZ;AAED;;;;;;;;GAQG;AACH,iBAAS,oBAAoB,CAC3B,IAAI,EAAE,MAAM,CAAC,cAAc,GAC1B,iBAAiB,GAAG,SAAS,CAqB/B;AAED;;;;;;;;GAQG;AACH,iBAAS,eAAe,CACtB,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,GACtC,MAAM,GAAG,SAAS,CAQpB;AAED;;;;;;;;GAQG;AACH,iBAAS,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,QAAQ,CAEpD;AAED,2CAA2C;AAC3C,QAAA,MAAM,gCAAgC,EAAG,IAAa,CAAC;AAEvD,OAAO,EACL,aAAa,EACb,gCAAgC,EAChC,kBAAkB,EAClB,oBAAoB,EACpB,sBAAsB,EACtB,iBAAiB,EACjB,UAAU,EACV,wBAAwB,EACxB,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,UAAU,GACX,CAAC;AACF,YAAY,EAAE,gBAAgB,EAAE,CAAC"}
|
|
@@ -1,4 +1,203 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/** Canonical ordering used when comparing AAA phases. */
|
|
2
|
+
const aaaPhaseOrder = {
|
|
3
|
+
Act: 1,
|
|
4
|
+
Arrange: 0,
|
|
5
|
+
Assert: 2,
|
|
6
|
+
};
|
|
7
|
+
/** Recognized AAA phase names. */
|
|
8
|
+
const phaseNames = ["Arrange", "Act", "Assert"];
|
|
9
|
+
/**
|
|
10
|
+
* Counts Act statements.
|
|
11
|
+
* @param analysis Input analysis value.
|
|
12
|
+
* @returns Return value output.
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* countActStatements(analysis);
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
function countActStatements(analysis) {
|
|
19
|
+
return analysis.statements.filter((statement) => statement.phases.includes("Act") &&
|
|
20
|
+
(statement.node.type === "ExpressionStatement" ||
|
|
21
|
+
statement.node.type === "VariableDeclaration")).length;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Flattens section comments.
|
|
25
|
+
* @param analysis Input analysis value.
|
|
26
|
+
* @returns Return value output.
|
|
27
|
+
* @example
|
|
28
|
+
* ```typescript
|
|
29
|
+
* getFlattenedSections(analysis);
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
function getFlattenedSections(analysis) {
|
|
33
|
+
return analysis.sectionComments.flatMap((sectionComment) => sectionComment.phases.map((phase) => ({
|
|
34
|
+
comment: sectionComment.comment,
|
|
35
|
+
phase,
|
|
36
|
+
})));
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Gets indentation at an offset.
|
|
40
|
+
* @param sourceText Input sourceText value.
|
|
41
|
+
* @param offset Input offset value.
|
|
42
|
+
* @returns Return value output.
|
|
43
|
+
* @example
|
|
44
|
+
* ```typescript
|
|
45
|
+
* getIndentationAtOffset(sourceText, 4);
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
function getIndentationAtOffset(sourceText, offset) {
|
|
49
|
+
const lineStart = sourceText.lastIndexOf("\n", Math.max(0, offset - 1)) + 1;
|
|
50
|
+
const linePrefix = sourceText.slice(lineStart, offset);
|
|
51
|
+
const trimmedPrefix = linePrefix.trimStart();
|
|
52
|
+
return linePrefix.slice(0, linePrefix.length - trimmedPrefix.length);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Gets the start range for a line.
|
|
56
|
+
* @param sourceText Input sourceText value.
|
|
57
|
+
* @param line Input line value.
|
|
58
|
+
* @returns Return value output.
|
|
59
|
+
* @example
|
|
60
|
+
* ```typescript
|
|
61
|
+
* getLineStartRange(sourceText, 2);
|
|
62
|
+
* ```
|
|
63
|
+
*/
|
|
64
|
+
function getLineStartRange(sourceText, line) {
|
|
65
|
+
let currentLine = 1;
|
|
66
|
+
let currentOffset = 0;
|
|
67
|
+
for (const character of sourceText) {
|
|
68
|
+
if (currentLine === line) {
|
|
69
|
+
return [currentOffset, currentOffset];
|
|
70
|
+
}
|
|
71
|
+
if (character === "\n") {
|
|
72
|
+
currentLine += 1;
|
|
73
|
+
}
|
|
74
|
+
currentOffset += 1;
|
|
75
|
+
}
|
|
76
|
+
return [sourceText.length, sourceText.length];
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Gets the newline sequence.
|
|
80
|
+
* @param text Input text value.
|
|
81
|
+
* @returns Return value output.
|
|
82
|
+
* @example
|
|
83
|
+
* ```typescript
|
|
84
|
+
* getNewline(sourceText);
|
|
85
|
+
* ```
|
|
86
|
+
*/
|
|
87
|
+
function getNewline(text) {
|
|
88
|
+
return text.includes("\r\n") ? "\r\n" : "\n";
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Gets phase-boundary comments.
|
|
92
|
+
* @param analysis Input analysis value.
|
|
93
|
+
* @returns Return value output.
|
|
94
|
+
* @example
|
|
95
|
+
* ```typescript
|
|
96
|
+
* getPhaseBoundaryComments(analysis);
|
|
97
|
+
* ```
|
|
98
|
+
*/
|
|
99
|
+
function getPhaseBoundaryComments(analysis) {
|
|
100
|
+
return analysis.sectionComments.filter((sectionComment) => sectionComment.phases.some((phase) => phase === "Act" || phase === "Assert"));
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Parses AAA phases from a comment.
|
|
104
|
+
* @param commentValue Input commentValue value.
|
|
105
|
+
* @returns Return value output.
|
|
106
|
+
* @example
|
|
107
|
+
* ```typescript
|
|
108
|
+
* getSectionPhases("Arrange & Act");
|
|
109
|
+
* ```
|
|
110
|
+
*/
|
|
111
|
+
function getSectionPhases(commentValue) {
|
|
112
|
+
const trimmedComment = commentValue.trim();
|
|
113
|
+
if (trimmedComment.length === 0) {
|
|
114
|
+
return [];
|
|
115
|
+
}
|
|
116
|
+
const parts = trimmedComment.split(/\s*&\s*/u);
|
|
117
|
+
return parts.every((part) => isAaaPhase(part)) ? parts : [];
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Gets the active phases for a statement.
|
|
121
|
+
* @param statement Input statement value.
|
|
122
|
+
* @param sectionComments Input sectionComments value.
|
|
123
|
+
* @returns Return value output.
|
|
124
|
+
* @example
|
|
125
|
+
* ```typescript
|
|
126
|
+
* getStatementPhases(statement, sectionComments);
|
|
127
|
+
* ```
|
|
128
|
+
*/
|
|
129
|
+
function getStatementPhases(statement, sectionComments) {
|
|
130
|
+
const statementLine = statement.loc?.start.line;
|
|
131
|
+
if (statementLine === void 0) {
|
|
132
|
+
return [];
|
|
133
|
+
}
|
|
134
|
+
let currentPhases = [];
|
|
135
|
+
for (const sectionComment of sectionComments) {
|
|
136
|
+
if (sectionComment.comment.loc.start.line > statementLine) {
|
|
137
|
+
break;
|
|
138
|
+
}
|
|
139
|
+
currentPhases = sectionComment.phases;
|
|
140
|
+
}
|
|
141
|
+
return currentPhases;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Gets supported test call metadata.
|
|
145
|
+
* @param node Input node value.
|
|
146
|
+
* @returns Return value output.
|
|
147
|
+
* @example
|
|
148
|
+
* ```typescript
|
|
149
|
+
* getSupportedTestCall(node);
|
|
150
|
+
* ```
|
|
151
|
+
*/
|
|
152
|
+
function getSupportedTestCall(node) {
|
|
153
|
+
const rootName = getTestRootName(node.callee);
|
|
154
|
+
if (rootName !== "it" && rootName !== "test") {
|
|
155
|
+
return void 0;
|
|
156
|
+
}
|
|
157
|
+
const callbackArgument = node.arguments.at(-1);
|
|
158
|
+
if (callbackArgument === void 0 ||
|
|
159
|
+
callbackArgument.type === "SpreadElement" ||
|
|
160
|
+
(callbackArgument.type !== "ArrowFunctionExpression" &&
|
|
161
|
+
callbackArgument.type !== "FunctionExpression") ||
|
|
162
|
+
callbackArgument.body.type !== "BlockStatement") {
|
|
163
|
+
return void 0;
|
|
164
|
+
}
|
|
165
|
+
return {
|
|
166
|
+
callback: callbackArgument,
|
|
167
|
+
callExpression: node,
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Gets the root test callee name.
|
|
172
|
+
* @param callee Input callee value.
|
|
173
|
+
* @returns Return value output.
|
|
174
|
+
* @example
|
|
175
|
+
* ```typescript
|
|
176
|
+
* getTestRootName(callExpression.callee);
|
|
177
|
+
* ```
|
|
178
|
+
*/
|
|
179
|
+
function getTestRootName(callee) {
|
|
180
|
+
if (callee.type === "Identifier") {
|
|
181
|
+
return callee.name;
|
|
182
|
+
}
|
|
183
|
+
if (callee.type === "MemberExpression" && callee.object.type !== "Super") {
|
|
184
|
+
return getTestRootName(callee.object);
|
|
185
|
+
}
|
|
186
|
+
return void 0;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Checks whether a value is an AAA phase.
|
|
190
|
+
* @param value Input value value.
|
|
191
|
+
* @returns Return value output.
|
|
192
|
+
* @example
|
|
193
|
+
* ```typescript
|
|
194
|
+
* isAaaPhase("Arrange");
|
|
195
|
+
* ```
|
|
196
|
+
*/
|
|
197
|
+
function isAaaPhase(value) {
|
|
198
|
+
return phaseNames.includes(value);
|
|
199
|
+
}
|
|
200
|
+
/** Companion marker for test isolation. */
|
|
2
201
|
const analyzerAnalysisHelpersCompanion = true;
|
|
3
|
-
export { analyzerAnalysisHelpersCompanion };
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbHl6ZXIuYW5hbHlzaXMuaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb21haW4vdGVzdGluZy9hYWEvYW5hbHl6ZXIuYW5hbHlzaXMuaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxnRUFBZ0U7QUFDaEUsTUFBTSxnQ0FBZ0MsR0FBRyxJQUFJLENBQUM7QUFFOUMsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogQ29tcGFuaW9uIG1hcmtlciBmb3IgdGhlIGFuYWx5emVyIGFuYWx5c2lzIGhlbHBlcnMgdGVzdHMuICovXHJcbmNvbnN0IGFuYWx5emVyQW5hbHlzaXNIZWxwZXJzQ29tcGFuaW9uID0gdHJ1ZTtcclxuXHJcbmV4cG9ydCB7IGFuYWx5emVyQW5hbHlzaXNIZWxwZXJzQ29tcGFuaW9uIH07XHJcbiJdfQ==
|
|
202
|
+
export { aaaPhaseOrder, analyzerAnalysisHelpersCompanion, countActStatements, getFlattenedSections, getIndentationAtOffset, getLineStartRange, getNewline, getPhaseBoundaryComments, getSectionPhases, getStatementPhases, getSupportedTestCall, getTestRootName, isAaaPhase, };
|
|
203
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbHl6ZXIuYW5hbHlzaXMuaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb21haW4vdGVzdGluZy9hYWEvYW5hbHl6ZXIuYW5hbHlzaXMuaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFTQSx5REFBeUQ7QUFDekQsTUFBTSxhQUFhLEdBQUc7SUFDcEIsR0FBRyxFQUFFLENBQUM7SUFDTixPQUFPLEVBQUUsQ0FBQztJQUNWLE1BQU0sRUFBRSxDQUFDO0NBQ2tDLENBQUM7QUFFOUMsa0NBQWtDO0FBQ2xDLE1BQU0sVUFBVSxHQUFHLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxRQUFRLENBSTdDLENBQUM7QUEwQkY7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFTLGtCQUFrQixDQUFDLFFBQTJCO0lBQ3JELE9BQU8sUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQy9CLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FDWixTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFDaEMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxxQkFBcUI7WUFDNUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUsscUJBQXFCLENBQUMsQ0FDbkQsQ0FBQyxNQUFNLENBQUM7QUFDWCxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFTLG9CQUFvQixDQUMzQixRQUFvRDtJQUVwRCxPQUFPLFFBQVEsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FDekQsY0FBYyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDcEMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxPQUFPO1FBQy9CLEtBQUs7S0FDTixDQUFDLENBQUMsQ0FDSixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNI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QUFrQixJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO1FBQ3pFLE9BQU8sZUFBZSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUMsQ0FBQztBQUNoQixDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFTLFVBQVUsQ0FBQyxLQUFhO0lBQy9CLE9BQU8sVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFpQixDQUFDLENBQUM7QUFDaEQsQ0FBQztBQUVELDJDQUEyQztBQUMzQyxNQUFNLGdDQUFnQyxHQUFHLElBQWEsQ0FBQztBQUV2RCxPQUFPLEVBQ0wsYUFBYSxFQUNiLGdDQUFnQyxFQUNoQyxrQkFBa0IsRUFDbEIsb0JBQW9CLEVBQ3BCLHNCQUFzQixFQUN0QixpQkFBaUIsRUFDakIsVUFBVSxFQUNWLHdCQUF3QixFQUN4QixnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBQ2xCLG9CQUFvQixFQUNwQixlQUFlLEVBQ2YsVUFBVSxHQUNYLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSAqIGFzIEVTVHJlZSBmcm9tIFwiZXN0cmVlXCI7XHJcblxyXG5pbXBvcnQgdHlwZSB7XHJcbiAgQWFhUGhhc2UsXHJcbiAgTG9jYXRlZE5vZGUsXHJcbiAgU291cmNlQ29tbWVudCxcclxuICBUZXN0QmxvY2tBbmFseXNpcyxcclxufSBmcm9tIFwiLi90eXBlc1wiO1xyXG5cclxuLyoqIENhbm9uaWNhbCBvcmRlcmluZyB1c2VkIHdoZW4gY29tcGFyaW5nIEFBQSBwaGFzZXMuICovXHJcbmNvbnN0IGFhYVBoYXNlT3JkZXIgPSB7XHJcbiAgQWN0OiAxLFxyXG4gIEFycmFuZ2U6IDAsXHJcbiAgQXNzZXJ0OiAyLFxyXG59IGFzIGNvbnN0IHNhdGlzZmllcyBSZWNvcmQ8QWFhUGhhc2UsIG51bWJlcj47XHJcblxyXG4vKiogUmVjb2duaXplZCBBQUEgcGhhc2UgbmFtZXMuICovXHJcbmNvbnN0IHBoYXNlTmFtZXMgPSBbXCJBcnJhbmdlXCIsIFwiQWN0XCIsIFwiQXNzZXJ0XCJdIGFzIGNvbnN0IHNhdGlzZmllcyByZWFkb25seSBbXHJcbiAgQWFhUGhhc2UsXHJcbiAgQWFhUGhhc2UsXHJcbiAgQWFhUGhhc2UsXHJcbl07XHJcblxyXG4vKiogSGVscGVyIHN0YXRlIGZvciBmbGF0dGVuZWQgc2VjdGlvbiBjb21tZW50cy4gKi9cclxuaW50ZXJmYWNlIEZsYXR0ZW5lZFNlY3Rpb24ge1xyXG4gIC8qKiBPcmlnaW5hbCBzb3VyY2UgY29tbWVudCBmb3IgdGhlIHNlY3Rpb24gbWFya2VyLiAqL1xyXG4gIGNvbW1lbnQ6IFNvdXJjZUNvbW1lbnQ7XHJcbiAgLyoqIFBoYXNlIHJlcHJlc2VudGVkIGJ5IHRoZSBmbGF0dGVuZWQgc2VjdGlvbiBlbnRyeS4gKi9cclxuICBwaGFzZTogQWFhUGhhc2U7XHJcbn1cclxuXHJcbi8qKiBTdXBwb3J0ZWQgY2FsbC1leHByZXNzaW9uIHdyYXBwZXIgZm9yIGFuYWx5emVkIHRlc3QgYmxvY2tzLiAqL1xyXG5pbnRlcmZhY2UgU3VwcG9ydGVkVGVzdENhbGwge1xyXG4gIC8qKiBDYWxsYmFjayBhcmd1bWVudCB0aGF0IG93bnMgdGhlIHRlc3QgYm9keS4gKi9cclxuICBjYWxsYmFjazogU3VwcG9ydGVkVGVzdENhbGxiYWNrO1xyXG4gIC8qKiBPcmlnaW5hbCBgaXRgIG9yIGB0ZXN0YCBpbnZvY2F0aW9uLiAqL1xyXG4gIGNhbGxFeHByZXNzaW9uOiBMb2NhdGVkTm9kZTxFU1RyZWUuQ2FsbEV4cHJlc3Npb24+O1xyXG59XHJcblxyXG4vKiogU3VwcG9ydGVkIHRlc3QgY2FsbGJhY2sgc2hhcGUgZm9yIGBpdGAgYW5kIGB0ZXN0YCBjYWxscy4gKi9cclxudHlwZSBTdXBwb3J0ZWRUZXN0Q2FsbGJhY2sgPSBMb2NhdGVkTm9kZTxcclxuICBFU1RyZWUuQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24gfCBFU1RyZWUuRnVuY3Rpb25FeHByZXNzaW9uXHJcbj4gJiB7XHJcbiAgLyoqIENhbGxiYWNrIGJvZHkgYmxvY2sgdXNlZCBmb3Igc2VjdGlvbiBhbmFseXNpcy4gKi9cclxuICBib2R5OiBMb2NhdGVkTm9kZTxFU1RyZWUuQmxvY2tTdGF0ZW1lbnQ+O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvdW50cyBBY3Qgc3RhdGVtZW50cy5cclxuICogQHBhcmFtIGFuYWx5c2lzIElucHV0IGFuYWx5c2lzIHZhbHVlLlxyXG4gKiBAcmV0dXJucyBSZXR1cm4gdmFsdWUgb3V0cHV0LlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGNvdW50QWN0U3RhdGVtZW50cyhhbmFseXNpcyk7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gY291bnRBY3RTdGF0ZW1lbnRzKGFuYWx5c2lzOiBUZXN0QmxvY2tBbmFseXNpcyk6IG51bWJlciB7XHJcbiAgcmV0dXJuIGFuYWx5c2lzLnN0YXRlbWVudHMuZmlsdGVyKFxyXG4gICAgKHN0YXRlbWVudCkgPT5cclxuICAgICAgc3RhdGVtZW50LnBoYXNlcy5pbmNsdWRlcyhcIkFjdFwiKSAmJlxyXG4gICAgICAoc3RhdGVtZW50Lm5vZGUudHlwZSA9PT0gXCJFeHByZXNzaW9uU3RhdGVtZW50XCIgfHxcclxuICAgICAgICBzdGF0ZW1lbnQubm9kZS50eXBlID09PSBcIlZhcmlhYmxlRGVjbGFyYXRpb25cIiksXHJcbiAgKS5sZW5ndGg7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBGbGF0dGVucyBzZWN0aW9uIGNvbW1lbnRzLlxyXG4gKiBAcGFyYW0gYW5hbHlzaXMgSW5wdXQgYW5hbHlzaXMgdmFsdWUuXHJcbiAqIEByZXR1cm5zIFJldHVybiB2YWx1ZSBvdXRwdXQuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogZ2V0RmxhdHRlbmVkU2VjdGlvbnMoYW5hbHlzaXMpO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIGdldEZsYXR0ZW5lZFNlY3Rpb25zKFxyXG4gIGFuYWx5c2lzOiBQaWNrPFRlc3RCbG9ja0FuYWx5c2lzLCBcInNlY3Rpb25Db21tZW50c1wiPixcclxuKTogRmxhdHRlbmVkU2VjdGlvbltdIHtcclxuICByZXR1cm4gYW5hbHlzaXMuc2VjdGlvbkNvbW1lbnRzLmZsYXRNYXAoKHNlY3Rpb25Db21tZW50KSA9PlxyXG4gICAgc2VjdGlvbkNvbW1lbnQucGhhc2VzLm1hcCgocGhhc2UpID0+ICh7XHJcbiAgICAgIGNvbW1lbnQ6IHNlY3Rpb25Db21tZW50LmNvbW1lbnQsXHJcbiAgICAgIHBoYXNlLFxyXG4gICAgfSkpLFxyXG4gICk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXRzIGluZGVudGF0aW9uIGF0IGFuIG9mZnNldC5cclxuICogQHBhcmFtIHNvdXJjZVRleHQgSW5wdXQgc291cmNlVGV4dCB2YWx1ZS5cclxuICogQHBhcmFtIG9mZnNldCBJbnB1dCBvZmZzZXQgdmFsdWUuXHJcbiAqIEByZXR1cm5zIFJldHVybiB2YWx1ZSBvdXRwdXQuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogZ2V0SW5kZW50YXRpb25BdE9mZnNldChzb3VyY2VUZXh0LCA0KTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRJbmRlbnRhdGlvbkF0T2Zmc2V0KHNvdXJjZVRleHQ6IHN0cmluZywgb2Zmc2V0OiBudW1iZXIpOiBzdHJpbmcge1xyXG4gIGNvbnN0IGxpbmVTdGFydCA9IHNvdXJjZVRleHQubGFzdEluZGV4T2YoXCJcXG5cIiwgTWF0aC5tYXgoMCwgb2Zmc2V0IC0gMSkpICsgMTtcclxuICBjb25zdCBsaW5lUHJlZml4ID0gc291cmNlVGV4dC5zbGljZShsaW5lU3RhcnQsIG9mZnNldCk7XHJcbiAgY29uc3QgdHJpbW1lZFByZWZpeCA9IGxpbmVQcmVmaXgudHJpbVN0YXJ0KCk7XHJcblxyXG4gIHJldHVybiBsaW5lUHJlZml4LnNsaWNlKDAsIGxpbmVQcmVmaXgubGVuZ3RoIC0gdHJpbW1lZFByZWZpeC5sZW5ndGgpO1xyXG59XHJcblxyXG4vKipcclxuICogR2V0cyB0aGUgc3RhcnQgcmFuZ2UgZm9yIGEgbGluZS5cclxuICogQHBhcmFtIHNvdXJjZVRleHQgSW5wdXQgc291cmNlVGV4dCB2YWx1ZS5cclxuICogQHBhcmFtIGxpbmUgSW5wdXQgbGluZSB2YWx1ZS5cclxuICogQHJldHVybnMgUmV0dXJuIHZhbHVlIG91dHB1dC5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBnZXRMaW5lU3RhcnRSYW5nZShzb3VyY2VUZXh0LCAyKTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRMaW5lU3RhcnRSYW5nZShzb3VyY2VUZXh0OiBzdHJpbmcsIGxpbmU6IG51bWJlcik6IFtudW1iZXIsIG51bWJlcl0ge1xyXG4gIGxldCBjdXJyZW50TGluZSA9IDE7XHJcbiAgbGV0IGN1cnJlbnRPZmZzZXQgPSAwO1xyXG4gIGZvciAoY29uc3QgY2hhcmFjdGVyIG9mIHNvdXJjZVRleHQpIHtcclxuICAgIGlmIChjdXJyZW50TGluZSA9PT0gbGluZSkge1xyXG4gICAgICByZXR1cm4gW2N1cnJlbnRPZmZzZXQsIGN1cnJlbnRPZmZzZXRdO1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYXJhY3RlciA9PT0gXCJcXG5cIikge1xyXG4gICAgICBjdXJyZW50TGluZSArPSAxO1xyXG4gICAgfVxyXG4gICAgY3VycmVudE9mZnNldCArPSAxO1xyXG4gIH1cclxuICByZXR1cm4gW3NvdXJjZVRleHQubGVuZ3RoLCBzb3VyY2VUZXh0Lmxlbmd0aF07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXRzIHRoZSBuZXdsaW5lIHNlcXVlbmNlLlxyXG4gKiBAcGFyYW0gdGV4dCBJbnB1dCB0ZXh0IHZhbHVlLlxyXG4gKiBAcmV0dXJucyBSZXR1cm4gdmFsdWUgb3V0cHV0LlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGdldE5ld2xpbmUoc291cmNlVGV4dCk7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0TmV3bGluZSh0ZXh0OiBzdHJpbmcpOiBcIlxcblwiIHwgXCJcXHJcXG5cIiB7XHJcbiAgcmV0dXJuIHRleHQuaW5jbHVkZXMoXCJcXHJcXG5cIikgPyBcIlxcclxcblwiIDogXCJcXG5cIjtcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldHMgcGhhc2UtYm91bmRhcnkgY29tbWVudHMuXHJcbiAqIEBwYXJhbSBhbmFseXNpcyBJbnB1dCBhbmFseXNpcyB2YWx1ZS5cclxuICogQHJldHVybnMgUmV0dXJuIHZhbHVlIG91dHB1dC5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBnZXRQaGFzZUJvdW5kYXJ5Q29tbWVudHMoYW5hbHlzaXMpO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIGdldFBoYXNlQm91bmRhcnlDb21tZW50cyhcclxuICBhbmFseXNpczogUGljazxUZXN0QmxvY2tBbmFseXNpcywgXCJzZWN0aW9uQ29tbWVudHNcIj4sXHJcbik6IFRlc3RCbG9ja0FuYWx5c2lzW1wic2VjdGlvbkNvbW1lbnRzXCJdIHtcclxuICByZXR1cm4gYW5hbHlzaXMuc2VjdGlvbkNvbW1lbnRzLmZpbHRlcigoc2VjdGlvbkNvbW1lbnQpID0+XHJcbiAgICBzZWN0aW9uQ29tbWVudC5waGFzZXMuc29tZShcclxuICAgICAgKHBoYXNlKSA9PiBwaGFzZSA9PT0gXCJBY3RcIiB8fCBwaGFzZSA9PT0gXCJBc3NlcnRcIixcclxuICAgICksXHJcbiAgKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFBhcnNlcyBBQUEgcGhhc2VzIGZyb20gYSBjb21tZW50LlxyXG4gKiBAcGFyYW0gY29tbWVudFZhbHVlIElucHV0IGNvbW1lbnRWYWx1ZSB2YWx1ZS5cclxuICogQHJldHVybnMgUmV0dXJuIHZhbHVlIG91dHB1dC5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBnZXRTZWN0aW9uUGhhc2VzKFwiQXJyYW5nZSAmIEFjdFwiKTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRTZWN0aW9uUGhhc2VzKGNvbW1lbnRWYWx1ZTogc3RyaW5nKTogQWFhUGhhc2VbXSB7XHJcbiAgY29uc3QgdHJpbW1lZENvbW1lbnQgPSBjb21tZW50VmFsdWUudHJpbSgpO1xyXG4gIGlmICh0cmltbWVkQ29tbWVudC5sZW5ndGggPT09IDApIHtcclxuICAgIHJldHVybiBbXTtcclxuICB9XHJcbiAgY29uc3QgcGFydHMgPSB0cmltbWVkQ29tbWVudC5zcGxpdCgvXFxzKiZcXHMqL3UpO1xyXG4gIHJldHVybiBwYXJ0cy5ldmVyeSgocGFydCkgPT4gaXNBYWFQaGFzZShwYXJ0KSkgPyBwYXJ0cyA6IFtdO1xyXG59XHJcblxyXG4vKipcclxuICogR2V0cyB0aGUgYWN0aXZlIHBoYXNlcyBmb3IgYSBzdGF0ZW1lbnQuXHJcbiAqIEBwYXJhbSBzdGF0ZW1lbnQgSW5wdXQgc3RhdGVtZW50IHZhbHVlLlxyXG4gKiBAcGFyYW0gc2VjdGlvbkNvbW1lbnRzIElucHV0IHNlY3Rpb25Db21tZW50cyB2YWx1ZS5cclxuICogQHJldHVybnMgUmV0dXJuIHZhbHVlIG91dHB1dC5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBnZXRTdGF0ZW1lbnRQaGFzZXMoc3RhdGVtZW50LCBzZWN0aW9uQ29tbWVudHMpO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIGdldFN0YXRlbWVudFBoYXNlcyhcclxuICBzdGF0ZW1lbnQ6IEVTVHJlZS5TdGF0ZW1lbnQsXHJcbiAgc2VjdGlvbkNvbW1lbnRzOiBUZXN0QmxvY2tBbmFseXNpc1tcInNlY3Rpb25Db21tZW50c1wiXSxcclxuKTogQWFhUGhhc2VbXSB7XHJcbiAgY29uc3Qgc3RhdGVtZW50TGluZSA9IHN0YXRlbWVudC5sb2M/LnN0YXJ0LmxpbmU7XHJcbiAgaWYgKHN0YXRlbWVudExpbmUgPT09IHZvaWQgMCkge1xyXG4gICAgcmV0dXJuIFtdO1xyXG4gIH1cclxuICBsZXQgY3VycmVudFBoYXNlczogQWFhUGhhc2VbXSA9IFtdO1xyXG4gIGZvciAoY29uc3Qgc2VjdGlvbkNvbW1lbnQgb2Ygc2VjdGlvbkNvbW1lbnRzKSB7XHJcbiAgICBpZiAoc2VjdGlvbkNvbW1lbnQuY29tbWVudC5sb2Muc3RhcnQubGluZSA+IHN0YXRlbWVudExpbmUpIHtcclxuICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICBjdXJyZW50UGhhc2VzID0gc2VjdGlvbkNvbW1lbnQucGhhc2VzO1xyXG4gIH1cclxuICByZXR1cm4gY3VycmVudFBoYXNlcztcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldHMgc3VwcG9ydGVkIHRlc3QgY2FsbCBtZXRhZGF0YS5cclxuICogQHBhcmFtIG5vZGUgSW5wdXQgbm9kZSB2YWx1ZS5cclxuICogQHJldHVybnMgUmV0dXJuIHZhbHVlIG91dHB1dC5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBnZXRTdXBwb3J0ZWRUZXN0Q2FsbChub2RlKTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRTdXBwb3J0ZWRUZXN0Q2FsbChcclxuICBub2RlOiBFU1RyZWUuQ2FsbEV4cHJlc3Npb24sXHJcbik6IFN1cHBvcnRlZFRlc3RDYWxsIHwgdW5kZWZpbmVkIHtcclxuICBjb25zdCByb290TmFtZSA9IGdldFRlc3RSb290TmFtZShub2RlLmNhbGxlZSk7XHJcbiAgaWYgKHJvb3ROYW1lICE9PSBcIml0XCIgJiYgcm9vdE5hbWUgIT09IFwidGVzdFwiKSB7XHJcbiAgICByZXR1cm4gdm9pZCAwO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgY2FsbGJhY2tBcmd1bWVudCA9IG5vZGUuYXJndW1lbnRzLmF0KC0xKTtcclxuICBpZiAoXHJcbiAgICBjYWxsYmFja0FyZ3VtZW50ID09PSB2b2lkIDAgfHxcclxuICAgIGNhbGxiYWNrQXJndW1lbnQudHlwZSA9PT0gXCJTcHJlYWRFbGVtZW50XCIgfHxcclxuICAgIChjYWxsYmFja0FyZ3VtZW50LnR5cGUgIT09IFwiQXJyb3dGdW5jdGlvbkV4cHJlc3Npb25cIiAmJlxyXG4gICAgICBjYWxsYmFja0FyZ3VtZW50LnR5cGUgIT09IFwiRnVuY3Rpb25FeHByZXNzaW9uXCIpIHx8XHJcbiAgICBjYWxsYmFja0FyZ3VtZW50LmJvZHkudHlwZSAhPT0gXCJCbG9ja1N0YXRlbWVudFwiXHJcbiAgKSB7XHJcbiAgICByZXR1cm4gdm9pZCAwO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIGNhbGxiYWNrOiBjYWxsYmFja0FyZ3VtZW50IGFzIFN1cHBvcnRlZFRlc3RDYWxsYmFjayxcclxuICAgIGNhbGxFeHByZXNzaW9uOiBub2RlIGFzIExvY2F0ZWROb2RlPEVTVHJlZS5DYWxsRXhwcmVzc2lvbj4sXHJcbiAgfTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldHMgdGhlIHJvb3QgdGVzdCBjYWxsZWUgbmFtZS5cclxuICogQHBhcmFtIGNhbGxlZSBJbnB1dCBjYWxsZWUgdmFsdWUuXHJcbiAqIEByZXR1cm5zIFJldHVybiB2YWx1ZSBvdXRwdXQuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogZ2V0VGVzdFJvb3ROYW1lKGNhbGxFeHByZXNzaW9uLmNhbGxlZSk7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0VGVzdFJvb3ROYW1lKFxyXG4gIGNhbGxlZTogRVNUcmVlLkNhbGxFeHByZXNzaW9uW1wiY2FsbGVlXCJdLFxyXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gIGlmIChjYWxsZWUudHlwZSA9PT0gXCJJZGVudGlmaWVyXCIpIHtcclxuICAgIHJldHVybiBjYWxsZWUubmFtZTtcclxuICB9XHJcbiAgaWYgKGNhbGxlZS50eXBlID09PSBcIk1lbWJlckV4cHJlc3Npb25cIiAmJiBjYWxsZWUub2JqZWN0LnR5cGUgIT09IFwiU3VwZXJcIikge1xyXG4gICAgcmV0dXJuIGdldFRlc3RSb290TmFtZShjYWxsZWUub2JqZWN0KTtcclxuICB9XHJcbiAgcmV0dXJuIHZvaWQgMDtcclxufVxyXG5cclxuLyoqXHJcbiAqIENoZWNrcyB3aGV0aGVyIGEgdmFsdWUgaXMgYW4gQUFBIHBoYXNlLlxyXG4gKiBAcGFyYW0gdmFsdWUgSW5wdXQgdmFsdWUgdmFsdWUuXHJcbiAqIEByZXR1cm5zIFJldHVybiB2YWx1ZSBvdXRwdXQuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogaXNBYWFQaGFzZShcIkFycmFuZ2VcIik7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gaXNBYWFQaGFzZSh2YWx1ZTogc3RyaW5nKTogdmFsdWUgaXMgQWFhUGhhc2Uge1xyXG4gIHJldHVybiBwaGFzZU5hbWVzLmluY2x1ZGVzKHZhbHVlIGFzIEFhYVBoYXNlKTtcclxufVxyXG5cclxuLyoqIENvbXBhbmlvbiBtYXJrZXIgZm9yIHRlc3QgaXNvbGF0aW9uLiAqL1xyXG5jb25zdCBhbmFseXplckFuYWx5c2lzSGVscGVyc0NvbXBhbmlvbiA9IHRydWUgYXMgY29uc3Q7XHJcblxyXG5leHBvcnQge1xyXG4gIGFhYVBoYXNlT3JkZXIsXHJcbiAgYW5hbHl6ZXJBbmFseXNpc0hlbHBlcnNDb21wYW5pb24sXHJcbiAgY291bnRBY3RTdGF0ZW1lbnRzLFxyXG4gIGdldEZsYXR0ZW5lZFNlY3Rpb25zLFxyXG4gIGdldEluZGVudGF0aW9uQXRPZmZzZXQsXHJcbiAgZ2V0TGluZVN0YXJ0UmFuZ2UsXHJcbiAgZ2V0TmV3bGluZSxcclxuICBnZXRQaGFzZUJvdW5kYXJ5Q29tbWVudHMsXHJcbiAgZ2V0U2VjdGlvblBoYXNlcyxcclxuICBnZXRTdGF0ZW1lbnRQaGFzZXMsXHJcbiAgZ2V0U3VwcG9ydGVkVGVzdENhbGwsXHJcbiAgZ2V0VGVzdFJvb3ROYW1lLFxyXG4gIGlzQWFhUGhhc2UsXHJcbn07XHJcbmV4cG9ydCB0eXBlIHsgRmxhdHRlbmVkU2VjdGlvbiB9O1xyXG4iXX0=
|