@codeperfect/eslint-plugin 2.0.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/codeperfect-eslint-plugin-1.0.0.tgz +0 -0
  3. package/dist/domain/architecture/consistent-barrel-files/exports-only-rule.d.ts.map +1 -1
  4. package/dist/domain/architecture/consistent-barrel-files/exports-only-rule.js +8 -3
  5. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.d.ts.map +1 -1
  6. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.js +8 -3
  7. package/dist/domain/architecture/consistent-barrel-files/rule.d.ts.map +1 -1
  8. package/dist/domain/architecture/consistent-barrel-files/rule.js +12 -4
  9. package/dist/domain/core/no-multiple-declarators/rule.d.ts.map +1 -1
  10. package/dist/domain/core/no-multiple-declarators/rule.js +6 -3
  11. package/dist/domain/core/prefer-interface-types/rule.d.ts.map +1 -1
  12. package/dist/domain/core/prefer-interface-types/rule.js +6 -3
  13. package/dist/domain/core/prefer-interface-types/test-helpers.d.ts.map +1 -1
  14. package/dist/domain/core/prefer-interface-types/test-helpers.js +1 -1
  15. package/dist/domain/custom-rule-documentation.d.ts +2 -0
  16. package/dist/domain/custom-rule-documentation.d.ts.map +1 -1
  17. package/dist/domain/custom-rule-documentation.js +2 -1
  18. package/dist/domain/docs/no-interface-member-docs/comment-utilities-test-helpers.d.ts.map +1 -1
  19. package/dist/domain/docs/no-interface-member-docs/comment-utilities-test-helpers.js +1 -1
  20. package/dist/domain/docs/no-interface-member-docs/parameter-utilities.js +1 -1
  21. package/dist/domain/docs/no-interface-member-docs/rule.d.ts.map +1 -1
  22. package/dist/domain/docs/no-interface-member-docs/rule.js +6 -3
  23. package/dist/domain/docs/no-interface-member-docs/test-helpers.js +1 -1
  24. package/dist/domain/docs/require-example-language/create-fixer.js +1 -1
  25. package/dist/domain/docs/require-example-language/fixes.d.ts.map +1 -1
  26. package/dist/domain/docs/require-example-language/fixes.js +1 -1
  27. package/dist/domain/docs/require-example-language/reporting.js +1 -1
  28. package/dist/domain/docs/require-example-language/rule.d.ts.map +1 -1
  29. package/dist/domain/docs/require-example-language/rule.js +6 -3
  30. package/dist/domain/docs/single-line-jsdoc/rule.d.ts +1 -2
  31. package/dist/domain/docs/single-line-jsdoc/rule.d.ts.map +1 -1
  32. package/dist/domain/docs/single-line-jsdoc/rule.edge-cases.js +1 -1
  33. package/dist/domain/docs/single-line-jsdoc/rule.js +11 -6
  34. package/dist/domain/docs/single-line-jsdoc/rule.node-lookups.js +1 -1
  35. package/dist/domain/testing/aaa/analyzer.analysis.d.ts +14 -72
  36. package/dist/domain/testing/aaa/analyzer.analysis.d.ts.map +1 -1
  37. package/dist/domain/testing/aaa/analyzer.analysis.helpers.d.ts +144 -3
  38. package/dist/domain/testing/aaa/analyzer.analysis.helpers.d.ts.map +1 -1
  39. package/dist/domain/testing/aaa/analyzer.analysis.helpers.js +202 -3
  40. package/dist/domain/testing/aaa/analyzer.analysis.js +36 -201
  41. package/dist/domain/testing/aaa/analyzer.analysis.unsupported.d.ts +4 -0
  42. package/dist/domain/testing/aaa/analyzer.analysis.unsupported.d.ts.map +1 -0
  43. package/dist/domain/testing/aaa/analyzer.analysis.unsupported.js +4 -0
  44. package/dist/domain/testing/aaa/analyzer.assertions.d.ts +16 -91
  45. package/dist/domain/testing/aaa/analyzer.assertions.d.ts.map +1 -1
  46. package/dist/domain/testing/aaa/analyzer.assertions.destructured.d.ts +4 -0
  47. package/dist/domain/testing/aaa/analyzer.assertions.destructured.d.ts.map +1 -0
  48. package/dist/domain/testing/aaa/analyzer.assertions.destructured.js +4 -0
  49. package/dist/domain/testing/aaa/analyzer.assertions.helpers.d.ts +95 -0
  50. package/dist/domain/testing/aaa/analyzer.assertions.helpers.d.ts.map +1 -0
  51. package/dist/domain/testing/aaa/analyzer.assertions.helpers.js +185 -0
  52. package/dist/domain/testing/aaa/analyzer.assertions.js +32 -282
  53. package/dist/domain/testing/aaa/analyzer.assertions.operands.d.ts +64 -0
  54. package/dist/domain/testing/aaa/analyzer.assertions.operands.d.ts.map +1 -0
  55. package/dist/domain/testing/aaa/analyzer.assertions.operands.js +105 -0
  56. package/dist/domain/testing/aaa/analyzer.classification.d.ts +14 -73
  57. package/dist/domain/testing/aaa/analyzer.classification.d.ts.map +1 -1
  58. package/dist/domain/testing/aaa/analyzer.classification.helpers.d.ts +77 -0
  59. package/dist/domain/testing/aaa/analyzer.classification.helpers.d.ts.map +1 -0
  60. package/dist/domain/testing/aaa/analyzer.classification.helpers.js +203 -0
  61. package/dist/domain/testing/aaa/analyzer.classification.js +30 -200
  62. package/dist/domain/testing/aaa/analyzer.classification.mutations.d.ts +4 -0
  63. package/dist/domain/testing/aaa/analyzer.classification.mutations.d.ts.map +1 -0
  64. package/dist/domain/testing/aaa/analyzer.classification.mutations.js +4 -0
  65. package/dist/domain/testing/aaa/analyzer.classification.traversal.d.ts +15 -0
  66. package/dist/domain/testing/aaa/analyzer.classification.traversal.d.ts.map +1 -0
  67. package/dist/domain/testing/aaa/analyzer.classification.traversal.js +34 -0
  68. package/dist/domain/testing/aaa/analyzer.d.ts +2 -2
  69. package/dist/domain/testing/aaa/analyzer.d.ts.map +1 -1
  70. package/dist/domain/testing/aaa/analyzer.super.d.ts +8 -9
  71. package/dist/domain/testing/aaa/analyzer.super.d.ts.map +1 -1
  72. package/dist/domain/testing/aaa/analyzer.super.helpers.d.ts +27 -0
  73. package/dist/domain/testing/aaa/analyzer.super.helpers.d.ts.map +1 -0
  74. package/dist/domain/testing/aaa/analyzer.super.helpers.js +66 -0
  75. package/dist/domain/testing/aaa/analyzer.super.js +43 -60
  76. package/dist/domain/testing/assert-actual-expected-names/rule.d.ts.map +1 -1
  77. package/dist/domain/testing/assert-actual-expected-names/rule.js +6 -3
  78. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.combined.d.ts +4 -0
  79. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.combined.d.ts.map +1 -0
  80. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.combined.js +4 -0
  81. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.companion.d.ts +4 -0
  82. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.companion.d.ts.map +1 -0
  83. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.companion.js +4 -0
  84. package/dist/domain/testing/enforce-aaa-phase-purity/rule-test-helpers.js +1 -1
  85. package/dist/domain/testing/enforce-aaa-phase-purity/rule.d.ts.map +1 -1
  86. package/dist/domain/testing/enforce-aaa-phase-purity/rule.js +6 -3
  87. package/dist/domain/testing/enforce-aaa-structure/rule.d.ts.map +1 -1
  88. package/dist/domain/testing/enforce-aaa-structure/rule.js +6 -3
  89. package/dist/domain/testing/prefer-vi-mocked-import/rule.d.ts.map +1 -1
  90. package/dist/domain/testing/prefer-vi-mocked-import/rule.js +6 -3
  91. package/dist/domain/testing/prefer-vitest-incremental-casts/ast-helpers.d.ts +12 -1
  92. package/dist/domain/testing/prefer-vitest-incremental-casts/ast-helpers.d.ts.map +1 -1
  93. package/dist/domain/testing/prefer-vitest-incremental-casts/ast-helpers.js +26 -2
  94. package/dist/domain/testing/prefer-vitest-incremental-casts/match-input.d.ts.map +1 -1
  95. package/dist/domain/testing/prefer-vitest-incremental-casts/match-input.js +13 -10
  96. package/dist/domain/testing/prefer-vitest-incremental-casts/match.d.ts.map +1 -1
  97. package/dist/domain/testing/prefer-vitest-incremental-casts/match.js +8 -2
  98. package/dist/domain/testing/prefer-vitest-incremental-casts/replacement-helpers.d.ts.map +1 -1
  99. package/dist/domain/testing/prefer-vitest-incremental-casts/replacement-helpers.js +9 -5
  100. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.d.ts.map +1 -1
  101. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.js +28 -2
  102. package/dist/domain/testing/prefer-vitest-incremental-casts/type-helpers.d.ts.map +1 -1
  103. package/dist/domain/testing/prefer-vitest-incremental-casts/type-helpers.js +1 -1
  104. package/dist/domain/testing/prefer-vitest-incremental-casts/types.d.ts +9 -25
  105. package/dist/domain/testing/prefer-vitest-incremental-casts/types.d.ts.map +1 -1
  106. package/dist/domain/testing/prefer-vitest-incremental-casts/types.js +1 -1
  107. package/dist/domain/testing/require-aaa-sections/rule.d.ts.map +1 -1
  108. package/dist/domain/testing/require-aaa-sections/rule.js +9 -4
  109. package/dist/domain/testing/require-aaa-sections/rule.reporting.d.ts.map +1 -1
  110. package/dist/domain/testing/require-aaa-sections/rule.reporting.js +3 -4
  111. package/dist/domain/testing/require-act-result-capture/rule.d.ts.map +1 -1
  112. package/dist/domain/testing/require-act-result-capture/rule.js +6 -3
  113. package/dist/domain/testing/require-test-companion/rule.d.ts.map +1 -1
  114. package/dist/domain/testing/require-test-companion/rule.js +31 -6
  115. package/dist/domain/testing/single-act-statement/rule.d.ts.map +1 -1
  116. package/dist/domain/testing/single-act-statement/rule.js +6 -3
  117. package/dist/infrastructure/presets.js +1 -1
  118. package/package.json +37 -29
@@ -1,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" || node?.type === "ArrowFunctionExpression";
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
- docs: createRuleDocumentation("single-line-jsdoc", "Require JSDoc comments to use a single line when they fit."),
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS5ub2RlLWxvb2t1cHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZG9tYWluL2RvY3Mvc2luZ2xlLWxpbmUtanNkb2MvcnVsZS5ub2RlLWxvb2t1cHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRTdDLHFFQUFxRTtBQUNyRSxNQUFNLDhCQUE4QixHQUFHLG1CQUFtQixDQUFDO0FBRTNELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc2luZ2xlTGluZUpzZG9jUnVsZSB9IGZyb20gXCIuL3J1bGVcIjtcclxuXHJcbi8qKiBDb21wYW5pb24gbW9kdWxlIGZvciBzaW5nbGUtbGluZS1qc2RvYyBsb29rdXAgZWRnZS1jYXNlIHRlc3RzLiAqL1xyXG5jb25zdCBzaW5nbGVMaW5lSnNkb2NSdWxlTm9kZUxvb2t1cHMgPSBzaW5nbGVMaW5lSnNkb2NSdWxlO1xyXG5cclxuZXhwb3J0IHsgc2luZ2xlTGluZUpzZG9jUnVsZU5vZGVMb29rdXBzIH07Il19
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 { AaaPhase, SourceComment, TestBlockAnalysis } from "./types.js";
4
- /** Canonical ordering used when comparing AAA phases. */
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
- /** Helper state for flattened section comments. */
11
- interface FlattenedSection {
12
- /** Original source comment for the section marker. */
13
- comment: SourceComment;
14
- /** Phase represented by the flattened section entry. */
15
- phase: AaaPhase;
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":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,KAAK,KAAK,MAAM,MAAM,QAAQ,CAAC;AAEtC,OAAO,KAAK,EACV,QAAQ,EAGR,aAAa,EACb,iBAAiB,EAClB,MAAM,SAAS,CAAC;AAIjB,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;AAkBD;;;;;;;;;GASG;AACH,iBAAS,gBAAgB,CACvB,OAAO,EAAE,IAAI,CAAC,WAAW,EACzB,IAAI,EAAE,MAAM,CAAC,cAAc,GAC1B,iBAAiB,GAAG,SAAS,CAuC/B;AAED;;;;;;;;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,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;AAkGD,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,sBAAsB,EACtB,iBAAiB,EACjB,wBAAwB,EACxB,gBAAgB,GACjB,CAAC;AACF,YAAY,EAAE,gBAAgB,EAAE,CAAC"}
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
- /** Companion marker for the analyzer analysis helpers tests. */
2
- declare const analyzerAnalysisHelpersCompanion = true;
3
- export { analyzerAnalysisHelpersCompanion };
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,gEAAgE;AAChE,QAAA,MAAM,gCAAgC,OAAO,CAAC;AAE9C,OAAO,EAAE,gCAAgC,EAAE,CAAC"}
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
- /** Companion marker for the analyzer analysis helpers tests. */
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=