@codeperfect/eslint-plugin 1.0.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/LICENSE +21 -0
- package/README.md +128 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/architecture/consistent-barrel-files/consistent-barrel-files-listeners.d.ts +16 -0
- package/dist/architecture/consistent-barrel-files/consistent-barrel-files-listeners.d.ts.map +1 -0
- package/dist/architecture/consistent-barrel-files/consistent-barrel-files-listeners.js +131 -0
- package/dist/architecture/consistent-barrel-files/consistent-barrel-files-options.d.ts +48 -0
- package/dist/architecture/consistent-barrel-files/consistent-barrel-files-options.d.ts.map +1 -0
- package/dist/architecture/consistent-barrel-files/consistent-barrel-files-options.js +126 -0
- package/dist/architecture/consistent-barrel-files/exports-only-rule-test-utilities.d.ts +40 -0
- package/dist/architecture/consistent-barrel-files/exports-only-rule-test-utilities.d.ts.map +1 -0
- package/dist/architecture/consistent-barrel-files/exports-only-rule-test-utilities.js +90 -0
- package/dist/architecture/consistent-barrel-files/exports-only-rule.d.ts +11 -0
- package/dist/architecture/consistent-barrel-files/exports-only-rule.d.ts.map +1 -0
- package/dist/architecture/consistent-barrel-files/exports-only-rule.js +218 -0
- package/dist/architecture/consistent-barrel-files/index.d.ts +5 -0
- package/dist/architecture/consistent-barrel-files/index.d.ts.map +1 -0
- package/dist/architecture/consistent-barrel-files/index.js +4 -0
- package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.d.ts +11 -0
- package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.d.ts.map +1 -0
- package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.js +100 -0
- package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-test-utilities.d.ts +40 -0
- package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-test-utilities.d.ts.map +1 -0
- package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-test-utilities.js +90 -0
- package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-utilities.d.ts +65 -0
- package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-utilities.d.ts.map +1 -0
- package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-utilities.js +154 -0
- package/dist/architecture/consistent-barrel-files/rule.d.ts +11 -0
- package/dist/architecture/consistent-barrel-files/rule.d.ts.map +1 -0
- package/dist/architecture/consistent-barrel-files/rule.js +58 -0
- package/dist/architecture/consistent-barrel-files/test-helpers.d.ts +141 -0
- package/dist/architecture/consistent-barrel-files/test-helpers.d.ts.map +1 -0
- package/dist/architecture/consistent-barrel-files/test-helpers.js +229 -0
- package/dist/architecture/consistent-barrel-files/types.d.ts +25 -0
- package/dist/architecture/consistent-barrel-files/types.d.ts.map +1 -0
- package/dist/architecture/consistent-barrel-files/types.js +2 -0
- package/dist/architecture/index.d.ts +2 -0
- package/dist/architecture/index.d.ts.map +1 -0
- package/dist/architecture/index.js +2 -0
- package/dist/benchmark-rules.d.ts +83 -0
- package/dist/benchmark-rules.d.ts.map +1 -0
- package/dist/benchmark-rules.js +175 -0
- package/dist/codeperfect-eslint-plugin-1.0.0.tgz +0 -0
- package/dist/codeperfect-plugin.d.ts +46 -0
- package/dist/codeperfect-plugin.d.ts.map +1 -0
- package/dist/codeperfect-plugin.js +29 -0
- package/dist/core/index.d.ts +3 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +3 -0
- package/dist/core/no-multiple-declarators/index.d.ts +2 -0
- package/dist/core/no-multiple-declarators/index.d.ts.map +1 -0
- package/dist/core/no-multiple-declarators/index.js +2 -0
- package/dist/core/no-multiple-declarators/rule.d.ts +4 -0
- package/dist/core/no-multiple-declarators/rule.d.ts.map +1 -0
- package/dist/core/no-multiple-declarators/rule.js +100 -0
- package/dist/core/prefer-interface-types/index.d.ts +2 -0
- package/dist/core/prefer-interface-types/index.d.ts.map +1 -0
- package/dist/core/prefer-interface-types/index.js +2 -0
- package/dist/core/prefer-interface-types/rule.d.ts +5 -0
- package/dist/core/prefer-interface-types/rule.d.ts.map +1 -0
- package/dist/core/prefer-interface-types/rule.js +145 -0
- package/dist/core/prefer-interface-types/test-helpers.d.ts +110 -0
- package/dist/core/prefer-interface-types/test-helpers.d.ts.map +1 -0
- package/dist/core/prefer-interface-types/test-helpers.js +116 -0
- package/dist/custom-rule-documentation.d.ts +36 -0
- package/dist/custom-rule-documentation.d.ts.map +1 -0
- package/dist/custom-rule-documentation.js +35 -0
- package/dist/custom-rules.d.ts +61 -0
- package/dist/custom-rules.d.ts.map +1 -0
- package/dist/custom-rules.js +70 -0
- package/dist/docs/index.d.ts +4 -0
- package/dist/docs/index.d.ts.map +1 -0
- package/dist/docs/index.js +4 -0
- package/dist/docs/no-interface-member-docs/comment-utilities-test-helpers.d.ts +89 -0
- package/dist/docs/no-interface-member-docs/comment-utilities-test-helpers.d.ts.map +1 -0
- package/dist/docs/no-interface-member-docs/comment-utilities-test-helpers.js +129 -0
- package/dist/docs/no-interface-member-docs/comment-utilities.d.ts +48 -0
- package/dist/docs/no-interface-member-docs/comment-utilities.d.ts.map +1 -0
- package/dist/docs/no-interface-member-docs/comment-utilities.js +146 -0
- package/dist/docs/no-interface-member-docs/index.d.ts +2 -0
- package/dist/docs/no-interface-member-docs/index.d.ts.map +1 -0
- package/dist/docs/no-interface-member-docs/index.js +2 -0
- package/dist/docs/no-interface-member-docs/parameter-tags.d.ts +13 -0
- package/dist/docs/no-interface-member-docs/parameter-tags.d.ts.map +1 -0
- package/dist/docs/no-interface-member-docs/parameter-tags.js +101 -0
- package/dist/docs/no-interface-member-docs/parameter-utilities.d.ts +24 -0
- package/dist/docs/no-interface-member-docs/parameter-utilities.d.ts.map +1 -0
- package/dist/docs/no-interface-member-docs/parameter-utilities.js +125 -0
- package/dist/docs/no-interface-member-docs/rule.d.ts +5 -0
- package/dist/docs/no-interface-member-docs/rule.d.ts.map +1 -0
- package/dist/docs/no-interface-member-docs/rule.js +168 -0
- package/dist/docs/no-interface-member-docs/test-helpers.d.ts +103 -0
- package/dist/docs/no-interface-member-docs/test-helpers.d.ts.map +1 -0
- package/dist/docs/no-interface-member-docs/test-helpers.js +157 -0
- package/dist/docs/no-interface-member-docs/types.d.ts +30 -0
- package/dist/docs/no-interface-member-docs/types.d.ts.map +1 -0
- package/dist/docs/no-interface-member-docs/types.js +2 -0
- package/dist/docs/require-example-language/empty-fence-fixes.d.ts +29 -0
- package/dist/docs/require-example-language/empty-fence-fixes.d.ts.map +1 -0
- package/dist/docs/require-example-language/empty-fence-fixes.js +169 -0
- package/dist/docs/require-example-language/example-utilities.d.ts +70 -0
- package/dist/docs/require-example-language/example-utilities.d.ts.map +1 -0
- package/dist/docs/require-example-language/example-utilities.js +76 -0
- package/dist/docs/require-example-language/examples.d.ts +36 -0
- package/dist/docs/require-example-language/examples.d.ts.map +1 -0
- package/dist/docs/require-example-language/examples.js +181 -0
- package/dist/docs/require-example-language/fixes.d.ts +49 -0
- package/dist/docs/require-example-language/fixes.d.ts.map +1 -0
- package/dist/docs/require-example-language/fixes.js +182 -0
- package/dist/docs/require-example-language/index.d.ts +3 -0
- package/dist/docs/require-example-language/index.d.ts.map +1 -0
- package/dist/docs/require-example-language/index.js +2 -0
- package/dist/docs/require-example-language/reporting.d.ts +60 -0
- package/dist/docs/require-example-language/reporting.d.ts.map +1 -0
- package/dist/docs/require-example-language/reporting.js +145 -0
- package/dist/docs/require-example-language/rule.d.ts +7 -0
- package/dist/docs/require-example-language/rule.d.ts.map +1 -0
- package/dist/docs/require-example-language/rule.js +34 -0
- package/dist/docs/require-example-language/types.d.ts +22 -0
- package/dist/docs/require-example-language/types.d.ts.map +1 -0
- package/dist/docs/require-example-language/types.js +2 -0
- package/dist/docs/single-line-jsdoc/index.d.ts +2 -0
- package/dist/docs/single-line-jsdoc/index.d.ts.map +1 -0
- package/dist/docs/single-line-jsdoc/index.js +2 -0
- package/dist/docs/single-line-jsdoc/rule.d.ts +5 -0
- package/dist/docs/single-line-jsdoc/rule.d.ts.map +1 -0
- package/dist/docs/single-line-jsdoc/rule.js +196 -0
- package/dist/docs/single-line-jsdoc/single-line-jsdoc-content.d.ts +16 -0
- package/dist/docs/single-line-jsdoc/single-line-jsdoc-content.d.ts.map +1 -0
- package/dist/docs/single-line-jsdoc/single-line-jsdoc-content.js +95 -0
- package/dist/docs/single-line-jsdoc/single-line-jsdoc-utilities.d.ts +25 -0
- package/dist/docs/single-line-jsdoc/single-line-jsdoc-utilities.d.ts.map +1 -0
- package/dist/docs/single-line-jsdoc/single-line-jsdoc-utilities.js +140 -0
- package/dist/docs/test-helpers.d.ts +50 -0
- package/dist/docs/test-helpers.d.ts.map +1 -0
- package/dist/docs/test-helpers.js +107 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/presets.d.ts +10 -0
- package/dist/presets.d.ts.map +1 -0
- package/dist/presets.js +50 -0
- package/dist/rules/index.d.ts +5 -0
- package/dist/rules/index.d.ts.map +1 -0
- package/dist/rules/index.js +6 -0
- package/dist/testing/aaa/analyzer.d.ts +36 -0
- package/dist/testing/aaa/analyzer.d.ts.map +1 -0
- package/dist/testing/aaa/analyzer.js +490 -0
- package/dist/testing/aaa/index.d.ts +3 -0
- package/dist/testing/aaa/index.d.ts.map +1 -0
- package/dist/testing/aaa/index.js +2 -0
- package/dist/testing/aaa/types.d.ts +31 -0
- package/dist/testing/aaa/types.d.ts.map +1 -0
- package/dist/testing/aaa/types.js +2 -0
- package/dist/testing/assert-actual-expected-names/index.d.ts +2 -0
- package/dist/testing/assert-actual-expected-names/index.d.ts.map +1 -0
- package/dist/testing/assert-actual-expected-names/index.js +2 -0
- package/dist/testing/assert-actual-expected-names/rule.d.ts +4 -0
- package/dist/testing/assert-actual-expected-names/rule.d.ts.map +1 -0
- package/dist/testing/assert-actual-expected-names/rule.js +54 -0
- package/dist/testing/enforce-aaa-phase-purity/index.d.ts +2 -0
- package/dist/testing/enforce-aaa-phase-purity/index.d.ts.map +1 -0
- package/dist/testing/enforce-aaa-phase-purity/index.js +2 -0
- package/dist/testing/enforce-aaa-phase-purity/rule.d.ts +4 -0
- package/dist/testing/enforce-aaa-phase-purity/rule.d.ts.map +1 -0
- package/dist/testing/enforce-aaa-phase-purity/rule.js +110 -0
- package/dist/testing/enforce-aaa-structure/index.d.ts +2 -0
- package/dist/testing/enforce-aaa-structure/index.d.ts.map +1 -0
- package/dist/testing/enforce-aaa-structure/index.js +2 -0
- package/dist/testing/enforce-aaa-structure/rule.d.ts +4 -0
- package/dist/testing/enforce-aaa-structure/rule.d.ts.map +1 -0
- package/dist/testing/enforce-aaa-structure/rule.js +48 -0
- package/dist/testing/index.d.ts +9 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +9 -0
- package/dist/testing/prefer-vi-mocked-import/fix.d.ts +16 -0
- package/dist/testing/prefer-vi-mocked-import/fix.d.ts.map +1 -0
- package/dist/testing/prefer-vi-mocked-import/fix.js +224 -0
- package/dist/testing/prefer-vi-mocked-import/index.d.ts +2 -0
- package/dist/testing/prefer-vi-mocked-import/index.d.ts.map +1 -0
- package/dist/testing/prefer-vi-mocked-import/index.js +2 -0
- package/dist/testing/prefer-vi-mocked-import/match-bindings.d.ts +16 -0
- package/dist/testing/prefer-vi-mocked-import/match-bindings.d.ts.map +1 -0
- package/dist/testing/prefer-vi-mocked-import/match-bindings.js +52 -0
- package/dist/testing/prefer-vi-mocked-import/match-declarations.d.ts +16 -0
- package/dist/testing/prefer-vi-mocked-import/match-declarations.d.ts.map +1 -0
- package/dist/testing/prefer-vi-mocked-import/match-declarations.js +99 -0
- package/dist/testing/prefer-vi-mocked-import/match-helpers.d.ts +66 -0
- package/dist/testing/prefer-vi-mocked-import/match-helpers.d.ts.map +1 -0
- package/dist/testing/prefer-vi-mocked-import/match-helpers.js +102 -0
- package/dist/testing/prefer-vi-mocked-import/match-imports.d.ts +17 -0
- package/dist/testing/prefer-vi-mocked-import/match-imports.d.ts.map +1 -0
- package/dist/testing/prefer-vi-mocked-import/match-imports.js +156 -0
- package/dist/testing/prefer-vi-mocked-import/match-rewrites.d.ts +42 -0
- package/dist/testing/prefer-vi-mocked-import/match-rewrites.d.ts.map +1 -0
- package/dist/testing/prefer-vi-mocked-import/match-rewrites.js +119 -0
- package/dist/testing/prefer-vi-mocked-import/match-walk.d.ts +13 -0
- package/dist/testing/prefer-vi-mocked-import/match-walk.d.ts.map +1 -0
- package/dist/testing/prefer-vi-mocked-import/match-walk.js +62 -0
- package/dist/testing/prefer-vi-mocked-import/match.d.ts +15 -0
- package/dist/testing/prefer-vi-mocked-import/match.d.ts.map +1 -0
- package/dist/testing/prefer-vi-mocked-import/match.js +193 -0
- package/dist/testing/prefer-vi-mocked-import/rule.d.ts +5 -0
- package/dist/testing/prefer-vi-mocked-import/rule.d.ts.map +1 -0
- package/dist/testing/prefer-vi-mocked-import/rule.js +32 -0
- package/dist/testing/prefer-vi-mocked-import/types.d.ts +83 -0
- package/dist/testing/prefer-vi-mocked-import/types.d.ts.map +1 -0
- package/dist/testing/prefer-vi-mocked-import/types.js +2 -0
- package/dist/testing/require-aaa-sections/index.d.ts +2 -0
- package/dist/testing/require-aaa-sections/index.d.ts.map +1 -0
- package/dist/testing/require-aaa-sections/index.js +2 -0
- package/dist/testing/require-aaa-sections/rule.d.ts +4 -0
- package/dist/testing/require-aaa-sections/rule.d.ts.map +1 -0
- package/dist/testing/require-aaa-sections/rule.js +111 -0
- package/dist/testing/require-act-result-capture/index.d.ts +2 -0
- package/dist/testing/require-act-result-capture/index.d.ts.map +1 -0
- package/dist/testing/require-act-result-capture/index.js +2 -0
- package/dist/testing/require-act-result-capture/rule.d.ts +4 -0
- package/dist/testing/require-act-result-capture/rule.d.ts.map +1 -0
- package/dist/testing/require-act-result-capture/rule.js +34 -0
- package/dist/testing/require-test-companion/index.d.ts +3 -0
- package/dist/testing/require-test-companion/index.d.ts.map +1 -0
- package/dist/testing/require-test-companion/index.js +3 -0
- package/dist/testing/require-test-companion/require-test-companion-listeners.d.ts +16 -0
- package/dist/testing/require-test-companion/require-test-companion-listeners.d.ts.map +1 -0
- package/dist/testing/require-test-companion/require-test-companion-listeners.js +145 -0
- package/dist/testing/require-test-companion/require-test-companion-options.d.ts +54 -0
- package/dist/testing/require-test-companion/require-test-companion-options.d.ts.map +1 -0
- package/dist/testing/require-test-companion/require-test-companion-options.js +112 -0
- package/dist/testing/require-test-companion/require-test-companion-test-helpers.d.ts +51 -0
- package/dist/testing/require-test-companion/require-test-companion-test-helpers.d.ts.map +1 -0
- package/dist/testing/require-test-companion/require-test-companion-test-helpers.js +183 -0
- package/dist/testing/require-test-companion/require-test-companion-utilities.d.ts +28 -0
- package/dist/testing/require-test-companion/require-test-companion-utilities.d.ts.map +1 -0
- package/dist/testing/require-test-companion/require-test-companion-utilities.js +26 -0
- package/dist/testing/require-test-companion/rule.d.ts +5 -0
- package/dist/testing/require-test-companion/rule.d.ts.map +1 -0
- package/dist/testing/require-test-companion/rule.js +57 -0
- package/dist/testing/require-test-companion/types.d.ts +11 -0
- package/dist/testing/require-test-companion/types.d.ts.map +1 -0
- package/dist/testing/require-test-companion/types.js +2 -0
- package/dist/testing/single-act-statement/index.d.ts +2 -0
- package/dist/testing/single-act-statement/index.d.ts.map +1 -0
- package/dist/testing/single-act-statement/index.js +2 -0
- package/dist/testing/single-act-statement/rule.d.ts +4 -0
- package/dist/testing/single-act-statement/rule.d.ts.map +1 -0
- package/dist/testing/single-act-statement/rule.js +33 -0
- package/package.json +106 -0
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { createRuleDocumentation } from "../../custom-rule-documentation";
|
|
2
|
+
import { buildRemovalRange, getCommentLines, getCommentText, getJsdocComment, } from "./comment-utilities";
|
|
3
|
+
import { parseParameterTagLine } from "./parameter-tags";
|
|
4
|
+
import { getParameterTypeLookup, isNamedTypeReference, } from "./parameter-utilities";
|
|
5
|
+
/**
|
|
6
|
+
* Checks whether a parameter member tag matches a named type reference.
|
|
7
|
+
* @param tag Parsed parameter member tag.
|
|
8
|
+
* @param parameterTypes Parameter type lookup.
|
|
9
|
+
* @returns True when the tag matches a named type reference.
|
|
10
|
+
* @example
|
|
11
|
+
* ```typescript
|
|
12
|
+
* const ok = isMatchingMemberTag(tag, parameterTypes);
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
const isMatchingMemberTag = (tag, parameterTypes) => {
|
|
16
|
+
if (tag === void 0) {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
const parameterType = parameterTypes.get(tag.baseName);
|
|
20
|
+
return isNamedTypeReference(parameterType);
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Collects member tags from a JSDoc comment.
|
|
24
|
+
* @param commentText Full comment text.
|
|
25
|
+
* @param parameterTypes Parameter type lookup.
|
|
26
|
+
* @returns Member tags that match named type references.
|
|
27
|
+
* @example
|
|
28
|
+
* ```typescript
|
|
29
|
+
* const tags = collectMemberTags(commentText, parameterTypes);
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
const collectMemberTags = (commentText, parameterTypes) => getCommentLines(commentText)
|
|
33
|
+
.map((line) => parseParameterTagLine(line))
|
|
34
|
+
.filter((tag) => isMatchingMemberTag(tag, parameterTypes));
|
|
35
|
+
/**
|
|
36
|
+
* Reports interface member documentation entries for removal.
|
|
37
|
+
* @param context Rule execution context.
|
|
38
|
+
* @param details Collected rule details.
|
|
39
|
+
* @example
|
|
40
|
+
* ```typescript
|
|
41
|
+
* reportMemberDocumentation(context, details);
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
const reportMemberDocumentation = (context, details) => {
|
|
45
|
+
const { commentStart, commentText, memberTags, node } = details;
|
|
46
|
+
for (const tag of memberTags) {
|
|
47
|
+
const removalRange = buildRemovalRange(commentStart, commentText, tag.line);
|
|
48
|
+
context.report({
|
|
49
|
+
data: { parameterName: tag.fullName },
|
|
50
|
+
fix: (fixer) => fixer.removeRange(removalRange),
|
|
51
|
+
messageId: "interfaceMemberDoc",
|
|
52
|
+
node,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Gets parameter type references for a node.
|
|
58
|
+
* @param node Function-like node to inspect.
|
|
59
|
+
* @returns Parameter type lookup when present.
|
|
60
|
+
* @example
|
|
61
|
+
* ```typescript
|
|
62
|
+
* const lookup = getParameterTypes(node);
|
|
63
|
+
* ```
|
|
64
|
+
*/
|
|
65
|
+
const getParameterTypes = (node) => {
|
|
66
|
+
const parameterTypes = getParameterTypeLookup(node);
|
|
67
|
+
return parameterTypes.size > 0 ? parameterTypes : void 0;
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* Resolves the JSDoc comment data for a node.
|
|
71
|
+
* @param sourceCode SourceCode wrapper.
|
|
72
|
+
* @param node Node to inspect.
|
|
73
|
+
* @returns JSDoc data when available.
|
|
74
|
+
* @example
|
|
75
|
+
* ```typescript
|
|
76
|
+
* const data = getJsdocData(sourceCode, node);
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
79
|
+
const getJsdocData = (sourceCode, node) => {
|
|
80
|
+
const comment = getJsdocComment(sourceCode, node);
|
|
81
|
+
if (comment === void 0) {
|
|
82
|
+
return void 0;
|
|
83
|
+
}
|
|
84
|
+
const commentStart = comment.range?.[0];
|
|
85
|
+
if (typeof commentStart !== "number") {
|
|
86
|
+
return void 0;
|
|
87
|
+
}
|
|
88
|
+
const text = getCommentText(sourceCode, comment);
|
|
89
|
+
return { comment, commentStart, text };
|
|
90
|
+
};
|
|
91
|
+
/**
|
|
92
|
+
* Resolves the member tag context for a node.
|
|
93
|
+
* @param context Rule execution context.
|
|
94
|
+
* @param node Node to inspect.
|
|
95
|
+
* @returns Member tag context when available.
|
|
96
|
+
* @example
|
|
97
|
+
* ```typescript
|
|
98
|
+
* const context = resolveMemberTagContext(context, node);
|
|
99
|
+
* ```
|
|
100
|
+
*/
|
|
101
|
+
const resolveMemberTagContext = (context, node) => {
|
|
102
|
+
const parameterTypes = getParameterTypes(node);
|
|
103
|
+
const jsdocData = getJsdocData(context.sourceCode, node);
|
|
104
|
+
if (parameterTypes === void 0 || jsdocData === void 0) {
|
|
105
|
+
return void 0;
|
|
106
|
+
}
|
|
107
|
+
const memberTags = collectMemberTags(jsdocData.text, parameterTypes);
|
|
108
|
+
return memberTags.length > 0
|
|
109
|
+
? {
|
|
110
|
+
comment: jsdocData.comment,
|
|
111
|
+
commentStart: jsdocData.commentStart,
|
|
112
|
+
commentText: jsdocData.text,
|
|
113
|
+
memberTags,
|
|
114
|
+
}
|
|
115
|
+
: void 0;
|
|
116
|
+
};
|
|
117
|
+
/**
|
|
118
|
+
* Handles function-like nodes for this rule.
|
|
119
|
+
* @param context Rule execution context.
|
|
120
|
+
* @param node Node to inspect.
|
|
121
|
+
* @example
|
|
122
|
+
* ```typescript
|
|
123
|
+
* handleFunctionLike(context, node);
|
|
124
|
+
* ```
|
|
125
|
+
*/
|
|
126
|
+
const handleFunctionLike = (context, node) => {
|
|
127
|
+
const resolved = resolveMemberTagContext(context, node);
|
|
128
|
+
if (resolved === void 0) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
reportMemberDocumentation(context, {
|
|
132
|
+
comment: resolved.comment,
|
|
133
|
+
commentStart: resolved.commentStart,
|
|
134
|
+
commentText: resolved.commentText,
|
|
135
|
+
memberTags: resolved.memberTags,
|
|
136
|
+
node,
|
|
137
|
+
sourceCode: context.sourceCode,
|
|
138
|
+
});
|
|
139
|
+
};
|
|
140
|
+
/** ESLint rule disallowing interface member documentation in `@param` tags. */
|
|
141
|
+
const noInterfaceMemberDocumentationRule = {
|
|
142
|
+
create(context) {
|
|
143
|
+
const listener = (node) => {
|
|
144
|
+
handleFunctionLike(context, node);
|
|
145
|
+
};
|
|
146
|
+
return {
|
|
147
|
+
ArrowFunctionExpression: listener,
|
|
148
|
+
FunctionDeclaration: listener,
|
|
149
|
+
FunctionExpression: listener,
|
|
150
|
+
TSCallSignatureDeclaration: listener,
|
|
151
|
+
TSConstructSignatureDeclaration: listener,
|
|
152
|
+
TSDeclareFunction: listener,
|
|
153
|
+
TSFunctionType: listener,
|
|
154
|
+
TSMethodSignature: listener,
|
|
155
|
+
};
|
|
156
|
+
},
|
|
157
|
+
meta: {
|
|
158
|
+
docs: createRuleDocumentation("no-interface-member-docs", "Disallow documenting interface members in @param tags; document them on the interface instead."),
|
|
159
|
+
fixable: "code",
|
|
160
|
+
messages: {
|
|
161
|
+
interfaceMemberDoc: "Document interface members on the interface instead of using @param for {{parameterName}}.",
|
|
162
|
+
},
|
|
163
|
+
schema: [],
|
|
164
|
+
type: "problem",
|
|
165
|
+
},
|
|
166
|
+
};
|
|
167
|
+
export { noInterfaceMemberDocumentationRule };
|
|
168
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kb2NzL25vLWludGVyZmFjZS1tZW1iZXItZG9jcy9ydWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzFFLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsZUFBZSxFQUNmLGNBQWMsRUFDZCxlQUFlLEdBQ2hCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDekQsT0FBTyxFQUNMLHNCQUFzQixFQUN0QixvQkFBb0IsR0FDckIsTUFBTSx1QkFBdUIsQ0FBQztBQXVCL0I7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxtQkFBbUIsR0FBRyxDQUMxQixHQUFtQyxFQUNuQyxjQUErQyxFQUNwQixFQUFFO0lBQzdCLElBQUksR0FBRyxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDbkIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsTUFBTSxhQUFhLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFdkQsT0FBTyxvQkFBb0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUM3QyxDQUFDLENBQUM7QUFFRjs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLGlCQUFpQixHQUFHLENBQ3hCLFdBQW1CLEVBQ25CLGNBQStDLEVBQ3pCLEVBQUUsQ0FDeEIsZUFBZSxDQUFDLFdBQVcsQ0FBQztLQUN6QixHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsbUJBQW1CLENBQUMsR0FBRyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7QUFFL0Q7Ozs7Ozs7O0dBUUc7QUFD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QUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUnVsZSB9IGZyb20gXCJlc2xpbnRcIjtcblxuaW1wb3J0IHR5cGUgeyBDb21tZW50LCBQYXJhbWV0ZXJNZW1iZXJUYWcsIFR5cGVBbm5vdGF0aW9uTm9kZSB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbmltcG9ydCB7IGNyZWF0ZVJ1bGVEb2N1bWVudGF0aW9uIH0gZnJvbSBcIi4uLy4uL2N1c3RvbS1ydWxlLWRvY3VtZW50YXRpb25cIjtcbmltcG9ydCB7XG4gIGJ1aWxkUmVtb3ZhbFJhbmdlLFxuICBnZXRDb21tZW50TGluZXMsXG4gIGdldENvbW1lbnRUZXh0LFxuICBnZXRKc2RvY0NvbW1lbnQsXG59IGZyb20gXCIuL2NvbW1lbnQtdXRpbGl0aWVzXCI7XG5pbXBvcnQgeyBwYXJzZVBhcmFtZXRlclRhZ0xpbmUgfSBmcm9tIFwiLi9wYXJhbWV0ZXItdGFnc1wiO1xuaW1wb3J0IHtcbiAgZ2V0UGFyYW1ldGVyVHlwZUxvb2t1cCxcbiAgaXNOYW1lZFR5cGVSZWZlcmVuY2UsXG59IGZyb20gXCIuL3BhcmFtZXRlci11dGlsaXRpZXNcIjtcblxuLyoqIFR5cGUgZGVmaW5pdGlvbiBmb3IgcnVsZSBkYXRhLiAqL1xuaW50ZXJmYWNlIFJlcG9ydE1lbWJlckRvY3VtZW50YXRpb25Db250ZXh0IHtcbiAgLyoqIENvbW1lbnQgZmllbGQgdmFsdWUuICovXG4gIGNvbW1lbnQ6IENvbW1lbnQ7XG5cbiAgLyoqIENvbW1lbnRTdGFydCBmaWVsZCB2YWx1ZS4gKi9cbiAgY29tbWVudFN0YXJ0OiBudW1iZXI7XG5cbiAgLyoqIENvbW1lbnRUZXh0IGZpZWxkIHZhbHVlLiAqL1xuICBjb21tZW50VGV4dDogc3RyaW5nO1xuXG4gIC8qKiBNZW1iZXJUYWdzIGZpZWxkIHZhbHVlLiAqL1xuICBtZW1iZXJUYWdzOiBQYXJhbWV0ZXJNZW1iZXJUYWdbXTtcblxuICAvKiogTm9kZSBmaWVsZCB2YWx1ZS4gKi9cbiAgbm9kZTogUnVsZS5Ob2RlO1xuXG4gIC8qKiBTb3VyY2VDb2RlIGZpZWxkIHZhbHVlLiAqL1xuICBzb3VyY2VDb2RlOiBSdWxlLlJ1bGVDb250ZXh0W1wic291cmNlQ29kZVwiXTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhIHBhcmFtZXRlciBtZW1iZXIgdGFnIG1hdGNoZXMgYSBuYW1lZCB0eXBlIHJlZmVyZW5jZS5cbiAqIEBwYXJhbSB0YWcgUGFyc2VkIHBhcmFtZXRlciBtZW1iZXIgdGFnLlxuICogQHBhcmFtIHBhcmFtZXRlclR5cGVzIFBhcmFtZXRlciB0eXBlIGxvb2t1cC5cbiAqIEByZXR1cm5zIFRydWUgd2hlbiB0aGUgdGFnIG1hdGNoZXMgYSBuYW1lZCB0eXBlIHJlZmVyZW5jZS5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBvayA9IGlzTWF0Y2hpbmdNZW1iZXJUYWcodGFnLCBwYXJhbWV0ZXJUeXBlcyk7XG4gKiBgYGBcbiAqL1xuY29uc3QgaXNNYXRjaGluZ01lbWJlclRhZyA9IChcbiAgdGFnOiBQYXJhbWV0ZXJNZW1iZXJUYWcgfCB1bmRlZmluZWQsXG4gIHBhcmFtZXRlclR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlQW5ub3RhdGlvbk5vZGU+LFxuKTogdGFnIGlzIFBhcmFtZXRlck1lbWJlclRhZyA9PiB7XG4gIGlmICh0YWcgPT09IHZvaWQgMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHBhcmFtZXRlclR5cGUgPSBwYXJhbWV0ZXJUeXBlcy5nZXQodGFnLmJhc2VOYW1lKTtcblxuICByZXR1cm4gaXNOYW1lZFR5cGVSZWZlcmVuY2UocGFyYW1ldGVyVHlwZSk7XG59O1xuXG4vKipcbiAqIENvbGxlY3RzIG1lbWJlciB0YWdzIGZyb20gYSBKU0RvYyBjb21tZW50LlxuICogQHBhcmFtIGNvbW1lbnRUZXh0IEZ1bGwgY29tbWVudCB0ZXh0LlxuICogQHBhcmFtIHBhcmFtZXRlclR5cGVzIFBhcmFtZXRlciB0eXBlIGxvb2t1cC5cbiAqIEByZXR1cm5zIE1lbWJlciB0YWdzIHRoYXQgbWF0Y2ggbmFtZWQgdHlwZSByZWZlcmVuY2VzLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHRhZ3MgPSBjb2xsZWN0TWVtYmVyVGFncyhjb21tZW50VGV4dCwgcGFyYW1ldGVyVHlwZXMpO1xuICogYGBgXG4gKi9cbmNvbnN0IGNvbGxlY3RNZW1iZXJUYWdzID0gKFxuICBjb21tZW50VGV4dDogc3RyaW5nLFxuICBwYXJhbWV0ZXJUeXBlczogTWFwPHN0cmluZywgVHlwZUFubm90YXRpb25Ob2RlPixcbik6IFBhcmFtZXRlck1lbWJlclRhZ1tdID0+XG4gIGdldENvbW1lbnRMaW5lcyhjb21tZW50VGV4dClcbiAgICAubWFwKChsaW5lKSA9PiBwYXJzZVBhcmFtZXRlclRhZ0xpbmUobGluZSkpXG4gICAgLmZpbHRlcigodGFnKSA9PiBpc01hdGNoaW5nTWVtYmVyVGFnKHRhZywgcGFyYW1ldGVyVHlwZXMpKTtcblxuLyoqXG4gKiBSZXBvcnRzIGludGVyZmFjZSBtZW1iZXIgZG9jdW1lbnRhdGlvbiBlbnRyaWVzIGZvciByZW1vdmFsLlxuICogQHBhcmFtIGNvbnRleHQgUnVsZSBleGVjdXRpb24gY29udGV4dC5cbiAqIEBwYXJhbSBkZXRhaWxzIENvbGxlY3RlZCBydWxlIGRldGFpbHMuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogcmVwb3J0TWVtYmVyRG9jdW1lbnRhdGlvbihjb250ZXh0LCBkZXRhaWxzKTtcbiAqIGBgYFxuICovXG5jb25zdCByZXBvcnRNZW1iZXJEb2N1bWVudGF0aW9uID0gKFxuICBjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0LFxuICBkZXRhaWxzOiBSZXBvcnRNZW1iZXJEb2N1bWVudGF0aW9uQ29udGV4dCxcbik6IHZvaWQgPT4ge1xuICBjb25zdCB7IGNvbW1lbnRTdGFydCwgY29tbWVudFRleHQsIG1lbWJlclRhZ3MsIG5vZGUgfSA9IGRldGFpbHM7XG5cbiAgZm9yIChjb25zdCB0YWcgb2YgbWVtYmVyVGFncykge1xuICAgIGNvbnN0IHJlbW92YWxSYW5nZSA9IGJ1aWxkUmVtb3ZhbFJhbmdlKGNvbW1lbnRTdGFydCwgY29tbWVudFRleHQsIHRhZy5saW5lKTtcblxuICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgIGRhdGE6IHsgcGFyYW1ldGVyTmFtZTogdGFnLmZ1bGxOYW1lIH0sXG4gICAgICBmaXg6IChmaXhlcjogUnVsZS5SdWxlRml4ZXIpOiBSdWxlLkZpeCA9PiBmaXhlci5yZW1vdmVSYW5nZShyZW1vdmFsUmFuZ2UpLFxuICAgICAgbWVzc2FnZUlkOiBcImludGVyZmFjZU1lbWJlckRvY1wiLFxuICAgICAgbm9kZSxcbiAgICB9KTtcbiAgfVxufTtcblxuLyoqXG4gKiBHZXRzIHBhcmFtZXRlciB0eXBlIHJlZmVyZW5jZXMgZm9yIGEgbm9kZS5cbiAqIEBwYXJhbSBub2RlIEZ1bmN0aW9uLWxpa2Ugbm9kZSB0byBpbnNwZWN0LlxuICogQHJldHVybnMgUGFyYW1ldGVyIHR5cGUgbG9va3VwIHdoZW4gcHJlc2VudC5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBsb29rdXAgPSBnZXRQYXJhbWV0ZXJUeXBlcyhub2RlKTtcbiAqIGBgYFxuICovXG5jb25zdCBnZXRQYXJhbWV0ZXJUeXBlcyA9IChcbiAgbm9kZTogUnVsZS5Ob2RlLFxuKTogTWFwPHN0cmluZywgVHlwZUFubm90YXRpb25Ob2RlPiB8IHVuZGVmaW5lZCA9PiB7XG4gIGNvbnN0IHBhcmFtZXRlclR5cGVzID0gZ2V0UGFyYW1ldGVyVHlwZUxvb2t1cChub2RlKTtcblxuICByZXR1cm4gcGFyYW1ldGVyVHlwZXMuc2l6ZSA+IDAgPyBwYXJhbWV0ZXJUeXBlcyA6IHZvaWQgMDtcbn07XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIEpTRG9jIGNvbW1lbnQgZGF0YSBmb3IgYSBub2RlLlxuICogQHBhcmFtIHNvdXJjZUNvZGUgU291cmNlQ29kZSB3cmFwcGVyLlxuICogQHBhcmFtIG5vZGUgTm9kZSB0byBpbnNwZWN0LlxuICogQHJldHVybnMgSlNEb2MgZGF0YSB3aGVuIGF2YWlsYWJsZS5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBkYXRhID0gZ2V0SnNkb2NEYXRhKHNvdXJjZUNvZGUsIG5vZGUpO1xuICogYGBgXG4gKi9cbmNvbnN0IGdldEpzZG9jRGF0YSA9IChcbiAgc291cmNlQ29kZTogUnVsZS5SdWxlQ29udGV4dFtcInNvdXJjZUNvZGVcIl0sXG4gIG5vZGU6IFJ1bGUuTm9kZSxcbik6XG4gIHwgdW5kZWZpbmVkXG4gIHwge1xuICAgICAgLyoqIENvbW1lbnQgZmllbGQgdmFsdWUuICovXG4gICAgICBjb21tZW50OiBDb21tZW50O1xuXG4gICAgICAvKiogQ29tbWVudFN0YXJ0IGZpZWxkIHZhbHVlLiAqL1xuICAgICAgY29tbWVudFN0YXJ0OiBudW1iZXI7XG5cbiAgICAgIC8qKiBUZXh0IGZpZWxkIHZhbHVlLiAqL1xuICAgICAgdGV4dDogc3RyaW5nO1xuICAgIH0gPT4ge1xuICBjb25zdCBjb21tZW50ID0gZ2V0SnNkb2NDb21tZW50KHNvdXJjZUNvZGUsIG5vZGUpO1xuXG4gIGlmIChjb21tZW50ID09PSB2b2lkIDApIHtcbiAgICByZXR1cm4gdm9pZCAwO1xuICB9XG5cbiAgY29uc3QgY29tbWVudFN0YXJ0ID0gY29tbWVudC5yYW5nZT8uWzBdO1xuXG4gIGlmICh0eXBlb2YgY29tbWVudFN0YXJ0ICE9PSBcIm51bWJlclwiKSB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfVxuXG4gIGNvbnN0IHRleHQgPSBnZXRDb21tZW50VGV4dChzb3VyY2VDb2RlLCBjb21tZW50KTtcblxuICByZXR1cm4geyBjb21tZW50LCBjb21tZW50U3RhcnQsIHRleHQgfTtcbn07XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIG1lbWJlciB0YWcgY29udGV4dCBmb3IgYSBub2RlLlxuICogQHBhcmFtIGNvbnRleHQgUnVsZSBleGVjdXRpb24gY29udGV4dC5cbiAqIEBwYXJhbSBub2RlIE5vZGUgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIE1lbWJlciB0YWcgY29udGV4dCB3aGVuIGF2YWlsYWJsZS5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBjb250ZXh0ID0gcmVzb2x2ZU1lbWJlclRhZ0NvbnRleHQoY29udGV4dCwgbm9kZSk7XG4gKiBgYGBcbiAqL1xuY29uc3QgcmVzb2x2ZU1lbWJlclRhZ0NvbnRleHQgPSAoXG4gIGNvbnRleHQ6IFJ1bGUuUnVsZUNvbnRleHQsXG4gIG5vZGU6IFJ1bGUuTm9kZSxcbik6XG4gIHwgdW5kZWZpbmVkXG4gIHwge1xuICAgICAgLyoqIENvbW1lbnQgZmllbGQgdmFsdWUuICovXG4gICAgICBjb21tZW50OiBDb21tZW50O1xuXG4gICAgICAvKiogQ29tbWVudFN0YXJ0IGZpZWxkIHZhbHVlLiAqL1xuICAgICAgY29tbWVudFN0YXJ0OiBudW1iZXI7XG5cbiAgICAgIC8qKiBDb21tZW50VGV4dCBmaWVsZCB2YWx1ZS4gKi9cbiAgICAgIGNvbW1lbnRUZXh0OiBzdHJpbmc7XG5cbiAgICAgIC8qKiBNZW1iZXJUYWdzIGZpZWxkIHZhbHVlLiAqL1xuICAgICAgbWVtYmVyVGFnczogUGFyYW1ldGVyTWVtYmVyVGFnW107XG4gICAgfSA9PiB7XG4gIGNvbnN0IHBhcmFtZXRlclR5cGVzID0gZ2V0UGFyYW1ldGVyVHlwZXMobm9kZSk7XG4gIGNvbnN0IGpzZG9jRGF0YSA9IGdldEpzZG9jRGF0YShjb250ZXh0LnNvdXJjZUNvZGUsIG5vZGUpO1xuXG4gIGlmIChwYXJhbWV0ZXJUeXBlcyA9PT0gdm9pZCAwIHx8IGpzZG9jRGF0YSA9PT0gdm9pZCAwKSB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfVxuXG4gIGNvbnN0IG1lbWJlclRhZ3MgPSBjb2xsZWN0TWVtYmVyVGFncyhqc2RvY0RhdGEudGV4dCwgcGFyYW1ldGVyVHlwZXMpO1xuXG4gIHJldHVybiBtZW1iZXJUYWdzLmxlbmd0aCA+IDBcbiAgICA/IHtcbiAgICAgICAgY29tbWVudDoganNkb2NEYXRhLmNvbW1lbnQsXG4gICAgICAgIGNvbW1lbnRTdGFydDoganNkb2NEYXRhLmNvbW1lbnRTdGFydCxcbiAgICAgICAgY29tbWVudFRleHQ6IGpzZG9jRGF0YS50ZXh0LFxuICAgICAgICBtZW1iZXJUYWdzLFxuICAgICAgfVxuICAgIDogdm9pZCAwO1xufTtcblxuLyoqXG4gKiBIYW5kbGVzIGZ1bmN0aW9uLWxpa2Ugbm9kZXMgZm9yIHRoaXMgcnVsZS5cbiAqIEBwYXJhbSBjb250ZXh0IFJ1bGUgZXhlY3V0aW9uIGNvbnRleHQuXG4gKiBAcGFyYW0gbm9kZSBOb2RlIHRvIGluc3BlY3QuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaGFuZGxlRnVuY3Rpb25MaWtlKGNvbnRleHQsIG5vZGUpO1xuICogYGBgXG4gKi9cbmNvbnN0IGhhbmRsZUZ1bmN0aW9uTGlrZSA9IChcbiAgY29udGV4dDogUnVsZS5SdWxlQ29udGV4dCxcbiAgbm9kZTogUnVsZS5Ob2RlLFxuKTogdm9pZCA9PiB7XG4gIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZU1lbWJlclRhZ0NvbnRleHQoY29udGV4dCwgbm9kZSk7XG5cbiAgaWYgKHJlc29sdmVkID09PSB2b2lkIDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICByZXBvcnRNZW1iZXJEb2N1bWVudGF0aW9uKGNvbnRleHQsIHtcbiAgICBjb21tZW50OiByZXNvbHZlZC5jb21tZW50LFxuICAgIGNvbW1lbnRTdGFydDogcmVzb2x2ZWQuY29tbWVudFN0YXJ0LFxuICAgIGNvbW1lbnRUZXh0OiByZXNvbHZlZC5jb21tZW50VGV4dCxcbiAgICBtZW1iZXJUYWdzOiByZXNvbHZlZC5tZW1iZXJUYWdzLFxuICAgIG5vZGUsXG4gICAgc291cmNlQ29kZTogY29udGV4dC5zb3VyY2VDb2RlLFxuICB9KTtcbn07XG5cbi8qKiBFU0xpbnQgcnVsZSBkaXNhbGxvd2luZyBpbnRlcmZhY2UgbWVtYmVyIGRvY3VtZW50YXRpb24gaW4gYEBwYXJhbWAgdGFncy4gKi9cbmNvbnN0IG5vSW50ZXJmYWNlTWVtYmVyRG9jdW1lbnRhdGlvblJ1bGU6IFJ1bGUuUnVsZU1vZHVsZSA9IHtcbiAgY3JlYXRlKGNvbnRleHQ6IFJ1bGUuUnVsZUNvbnRleHQpOiBSdWxlLlJ1bGVMaXN0ZW5lciB7XG4gICAgY29uc3QgbGlzdGVuZXIgPSAobm9kZTogUnVsZS5Ob2RlKTogdm9pZCA9PiB7XG4gICAgICBoYW5kbGVGdW5jdGlvbkxpa2UoY29udGV4dCwgbm9kZSk7XG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICBBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbjogbGlzdGVuZXIsXG4gICAgICBGdW5jdGlvbkRlY2xhcmF0aW9uOiBsaXN0ZW5lcixcbiAgICAgIEZ1bmN0aW9uRXhwcmVzc2lvbjogbGlzdGVuZXIsXG4gICAgICBUU0NhbGxTaWduYXR1cmVEZWNsYXJhdGlvbjogbGlzdGVuZXIsXG4gICAgICBUU0NvbnN0cnVjdFNpZ25hdHVyZURlY2xhcmF0aW9uOiBsaXN0ZW5lcixcbiAgICAgIFRTRGVjbGFyZUZ1bmN0aW9uOiBsaXN0ZW5lcixcbiAgICAgIFRTRnVuY3Rpb25UeXBlOiBsaXN0ZW5lcixcbiAgICAgIFRTTWV0aG9kU2lnbmF0dXJlOiBsaXN0ZW5lcixcbiAgICB9O1xuICB9LFxuICBtZXRhOiB7XG4gICAgZG9jczogY3JlYXRlUnVsZURvY3VtZW50YXRpb24oXG4gICAgICBcIm5vLWludGVyZmFjZS1tZW1iZXItZG9jc1wiLFxuICAgICAgXCJEaXNhbGxvdyBkb2N1bWVudGluZyBpbnRlcmZhY2UgbWVtYmVycyBpbiBAcGFyYW0gdGFnczsgZG9jdW1lbnQgdGhlbSBvbiB0aGUgaW50ZXJmYWNlIGluc3RlYWQuXCIsXG4gICAgKSxcbiAgICBmaXhhYmxlOiBcImNvZGVcIixcbiAgICBtZXNzYWdlczoge1xuICAgICAgaW50ZXJmYWNlTWVtYmVyRG9jOlxuICAgICAgICBcIkRvY3VtZW50IGludGVyZmFjZSBtZW1iZXJzIG9uIHRoZSBpbnRlcmZhY2UgaW5zdGVhZCBvZiB1c2luZyBAcGFyYW0gZm9yIHt7cGFyYW1ldGVyTmFtZX19LlwiLFxuICAgIH0sXG4gICAgc2NoZW1hOiBbXSxcbiAgICB0eXBlOiBcInByb2JsZW1cIixcbiAgfSxcbn07XG5cbmV4cG9ydCB7IG5vSW50ZXJmYWNlTWVtYmVyRG9jdW1lbnRhdGlvblJ1bGUgfTtcbiJdfQ==
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import type { Rule } from "eslint";
|
|
2
|
+
/** Type definition for rule data. */
|
|
3
|
+
type Comment = ReturnType<Rule.RuleContext["sourceCode"]["getAllComments"]>[number];
|
|
4
|
+
/** Type definition for rule data. */
|
|
5
|
+
interface InterfaceSample {
|
|
6
|
+
/** Context field value. */
|
|
7
|
+
context: Rule.RuleContext;
|
|
8
|
+
/** Node field value. */
|
|
9
|
+
node: Rule.Node;
|
|
10
|
+
/** Reports field value. */
|
|
11
|
+
reports: ReportEntry[];
|
|
12
|
+
/** SourceText field value. */
|
|
13
|
+
sourceText: string;
|
|
14
|
+
}
|
|
15
|
+
/** Type definition for rule data. */
|
|
16
|
+
interface ReportEntry {
|
|
17
|
+
/** Fix helper value. */
|
|
18
|
+
fix?: null | Rule.ReportFixer | undefined;
|
|
19
|
+
/** MessageId helper value. */
|
|
20
|
+
messageId: string | undefined;
|
|
21
|
+
}
|
|
22
|
+
/** Type definition for rule data. */
|
|
23
|
+
interface RuleContextState {
|
|
24
|
+
/** Context field value. */
|
|
25
|
+
context: Rule.RuleContext;
|
|
26
|
+
/** Reports field value. */
|
|
27
|
+
reports: ReportEntry[];
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Creates a rule context state for the given source text.
|
|
31
|
+
* @param sourceText Source text to analyze.
|
|
32
|
+
* @param comments Comment nodes for the source.
|
|
33
|
+
* @returns Context state for tests.
|
|
34
|
+
* @example
|
|
35
|
+
* ```typescript
|
|
36
|
+
* const state = createContext("", []);
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
declare const createContext: (sourceText: string, comments: Comment[]) => RuleContextState;
|
|
40
|
+
/**
|
|
41
|
+
* Creates a JSDoc block comment for the given source text.
|
|
42
|
+
* @param commentValue Comment value without delimiters.
|
|
43
|
+
* @param sourceText Source text containing the comment.
|
|
44
|
+
* @returns Comment node for the source text.
|
|
45
|
+
* @example
|
|
46
|
+
* ```typescript
|
|
47
|
+
* const comment = createComment("*\n * ok\n ", "function demo() {}");
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
declare const createComment: (commentValue: string, sourceText: string) => Comment;
|
|
51
|
+
/**
|
|
52
|
+
* Creates a function node for the given source text.
|
|
53
|
+
* @param sourceText Source text containing the function.
|
|
54
|
+
* @param parameters Parameter nodes for the function.
|
|
55
|
+
* @returns Function declaration node.
|
|
56
|
+
* @example
|
|
57
|
+
* ```typescript
|
|
58
|
+
* const node = createFunctionNode("function demo() {}", []);
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
declare const createFunctionNode: (sourceText: string, parameters: unknown[]) => Rule.Node;
|
|
62
|
+
/**
|
|
63
|
+
* Creates a parameter node with a type annotation.
|
|
64
|
+
* @param type Type annotation kind to assign.
|
|
65
|
+
* @returns Parameter node for tests.
|
|
66
|
+
* @example
|
|
67
|
+
* ```typescript
|
|
68
|
+
* const param = createParameter("TSTypeReference");
|
|
69
|
+
* ```
|
|
70
|
+
*/
|
|
71
|
+
declare const createParameter: (type: string) => unknown;
|
|
72
|
+
/**
|
|
73
|
+
* Runs the rule listener for a function declaration node.
|
|
74
|
+
* @param context Rule execution context.
|
|
75
|
+
* @param node Function node to inspect.
|
|
76
|
+
* @example
|
|
77
|
+
* ```typescript
|
|
78
|
+
* runFunctionListener(context, node);
|
|
79
|
+
* ```
|
|
80
|
+
*/
|
|
81
|
+
declare const runFunctionListener: (context: Rule.RuleContext, node: Rule.Node) => void;
|
|
82
|
+
/**
|
|
83
|
+
* Builds source text with a leading JSDoc comment.
|
|
84
|
+
* @param commentValue Comment value used in the source.
|
|
85
|
+
* @returns Source text containing the comment and function.
|
|
86
|
+
* @example
|
|
87
|
+
* ```typescript
|
|
88
|
+
* const text = buildSourceText("*\n * ok\n ");
|
|
89
|
+
* ```
|
|
90
|
+
*/
|
|
91
|
+
declare const buildSourceText: (commentValue: string) => string;
|
|
92
|
+
/**
|
|
93
|
+
* Creates a sample test fixture for interface member docs.
|
|
94
|
+
* @returns Sample context, node, and reports.
|
|
95
|
+
* @example
|
|
96
|
+
* ```typescript
|
|
97
|
+
* const sample = createInterfaceSample();
|
|
98
|
+
* ```
|
|
99
|
+
*/
|
|
100
|
+
declare const createInterfaceSample: () => InterfaceSample;
|
|
101
|
+
export { buildSourceText, createComment, createContext, createFunctionNode, createInterfaceSample, createParameter, runFunctionListener, };
|
|
102
|
+
export type { Comment };
|
|
103
|
+
//# sourceMappingURL=test-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-helpers.d.ts","sourceRoot":"","sources":["../../../src/docs/no-interface-member-docs/test-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAInC,qCAAqC;AACrC,KAAK,OAAO,GAAG,UAAU,CACvB,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,gBAAgB,CAAC,CACjD,CAAC,MAAM,CAAC,CAAC;AAEV,qCAAqC;AACrC,UAAU,eAAe;IACvB,2BAA2B;IAC3B,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC;IAE1B,wBAAwB;IACxB,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC;IAEhB,2BAA2B;IAC3B,OAAO,EAAE,WAAW,EAAE,CAAC;IAEvB,8BAA8B;IAC9B,UAAU,EAAE,MAAM,CAAC;CACpB;AAWD,qCAAqC;AACrC,UAAU,WAAW;IACnB,wBAAwB;IACxB,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;IAE1C,8BAA8B;IAC9B,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B;AAED,qCAAqC;AACrC,UAAU,gBAAgB;IACxB,2BAA2B;IAC3B,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC;IAE1B,2BAA2B;IAC3B,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB;AA+CD;;;;;;;;;GASG;AACH,QAAA,MAAM,aAAa,GACjB,YAAY,MAAM,EAClB,UAAU,OAAO,EAAE,KAClB,gBAKF,CAAC;AAEF;;;;;;;;;GASG;AACH,QAAA,MAAM,aAAa,GAAI,cAAc,MAAM,EAAE,YAAY,MAAM,KAAG,OAQjE,CAAC;AAEF;;;;;;;;;GASG;AACH,QAAA,MAAM,kBAAkB,GACtB,YAAY,MAAM,EAClB,YAAY,OAAO,EAAE,KACpB,IAAI,CAAC,IAKS,CAAC;AAElB;;;;;;;;GAQG;AACH,QAAA,MAAM,eAAe,GAAI,MAAM,MAAM,KAAG,OAMtC,CAAC;AAEH;;;;;;;;GAQG;AACH,QAAA,MAAM,mBAAmB,GACvB,SAAS,IAAI,CAAC,WAAW,EACzB,MAAM,IAAI,CAAC,IAAI,KACd,IAOF,CAAC;AAEF;;;;;;;;GAQG;AACH,QAAA,MAAM,eAAe,GAAI,cAAc,MAAM,KAAG,MAMlC,CAAC;AAEf;;;;;;;GAOG;AACH,QAAA,MAAM,qBAAqB,QAAO,eAmBjC,CAAC;AAEF,OAAO,EACL,eAAe,EACf,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,qBAAqB,EACrB,eAAe,EACf,mBAAmB,GACpB,CAAC;AACF,YAAY,EAAE,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { noInterfaceMemberDocumentationRule } from "./rule";
|
|
2
|
+
/**
|
|
3
|
+
* Creates a SourceCode stub with the provided comments.
|
|
4
|
+
* @param text Source text to attach.
|
|
5
|
+
* @param comments Comment nodes to expose.
|
|
6
|
+
* @returns SourceCode stub for tests.
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* const sourceCode = createSourceCode("", []);
|
|
10
|
+
* ```
|
|
11
|
+
*/
|
|
12
|
+
const createSourceCode = (text, comments) => ({
|
|
13
|
+
getAllComments: () => comments,
|
|
14
|
+
text,
|
|
15
|
+
});
|
|
16
|
+
/**
|
|
17
|
+
* Builds a rule context for collecting reports.
|
|
18
|
+
* @param sourceCode SourceCode stub.
|
|
19
|
+
* @param reports Report sink.
|
|
20
|
+
* @returns Rule context that records reports.
|
|
21
|
+
* @example
|
|
22
|
+
* ```typescript
|
|
23
|
+
* const context = buildRuleContext(sourceCode, reports);
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
const buildRuleContext = (sourceCode, reports) => ({
|
|
27
|
+
id: "no-interface-member-docs",
|
|
28
|
+
options: [],
|
|
29
|
+
report: (descriptor) => {
|
|
30
|
+
const { fix, messageId } = descriptor;
|
|
31
|
+
const entry = { fix, messageId };
|
|
32
|
+
reports.push(entry);
|
|
33
|
+
},
|
|
34
|
+
sourceCode,
|
|
35
|
+
});
|
|
36
|
+
/**
|
|
37
|
+
* Creates a rule context state for the given source text.
|
|
38
|
+
* @param sourceText Source text to analyze.
|
|
39
|
+
* @param comments Comment nodes for the source.
|
|
40
|
+
* @returns Context state for tests.
|
|
41
|
+
* @example
|
|
42
|
+
* ```typescript
|
|
43
|
+
* const state = createContext("", []);
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
const createContext = (sourceText, comments) => {
|
|
47
|
+
const reports = [];
|
|
48
|
+
const sourceCode = createSourceCode(sourceText, comments);
|
|
49
|
+
return { context: buildRuleContext(sourceCode, reports), reports };
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Creates a JSDoc block comment for the given source text.
|
|
53
|
+
* @param commentValue Comment value without delimiters.
|
|
54
|
+
* @param sourceText Source text containing the comment.
|
|
55
|
+
* @returns Comment node for the source text.
|
|
56
|
+
* @example
|
|
57
|
+
* ```typescript
|
|
58
|
+
* const comment = createComment("*\n * ok\n ", "function demo() {}");
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
const createComment = (commentValue, sourceText) => {
|
|
62
|
+
const end = sourceText.indexOf("*/") + 2;
|
|
63
|
+
return {
|
|
64
|
+
range: [0, end],
|
|
65
|
+
type: "Block",
|
|
66
|
+
value: commentValue,
|
|
67
|
+
};
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* Creates a function node for the given source text.
|
|
71
|
+
* @param sourceText Source text containing the function.
|
|
72
|
+
* @param parameters Parameter nodes for the function.
|
|
73
|
+
* @returns Function declaration node.
|
|
74
|
+
* @example
|
|
75
|
+
* ```typescript
|
|
76
|
+
* const node = createFunctionNode("function demo() {}", []);
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
79
|
+
const createFunctionNode = (sourceText, parameters) => ({
|
|
80
|
+
params: parameters,
|
|
81
|
+
range: [sourceText.indexOf("function"), sourceText.length],
|
|
82
|
+
type: "FunctionDeclaration",
|
|
83
|
+
});
|
|
84
|
+
/**
|
|
85
|
+
* Creates a parameter node with a type annotation.
|
|
86
|
+
* @param type Type annotation kind to assign.
|
|
87
|
+
* @returns Parameter node for tests.
|
|
88
|
+
* @example
|
|
89
|
+
* ```typescript
|
|
90
|
+
* const param = createParameter("TSTypeReference");
|
|
91
|
+
* ```
|
|
92
|
+
*/
|
|
93
|
+
const createParameter = (type) => ({
|
|
94
|
+
name: "context",
|
|
95
|
+
type: "Identifier",
|
|
96
|
+
typeAnnotation: {
|
|
97
|
+
typeAnnotation: { type },
|
|
98
|
+
},
|
|
99
|
+
});
|
|
100
|
+
/**
|
|
101
|
+
* Runs the rule listener for a function declaration node.
|
|
102
|
+
* @param context Rule execution context.
|
|
103
|
+
* @param node Function node to inspect.
|
|
104
|
+
* @example
|
|
105
|
+
* ```typescript
|
|
106
|
+
* runFunctionListener(context, node);
|
|
107
|
+
* ```
|
|
108
|
+
*/
|
|
109
|
+
const runFunctionListener = (context, node) => {
|
|
110
|
+
const listeners = noInterfaceMemberDocumentationRule.create(context);
|
|
111
|
+
const listener = listeners.FunctionDeclaration;
|
|
112
|
+
listener?.(node);
|
|
113
|
+
};
|
|
114
|
+
/**
|
|
115
|
+
* Builds source text with a leading JSDoc comment.
|
|
116
|
+
* @param commentValue Comment value used in the source.
|
|
117
|
+
* @returns Source text containing the comment and function.
|
|
118
|
+
* @example
|
|
119
|
+
* ```typescript
|
|
120
|
+
* const text = buildSourceText("*\n * ok\n ");
|
|
121
|
+
* ```
|
|
122
|
+
*/
|
|
123
|
+
const buildSourceText = (commentValue) => [
|
|
124
|
+
"/**",
|
|
125
|
+
commentValue.trimEnd(),
|
|
126
|
+
"*/",
|
|
127
|
+
"function getLineMeta(context: LineMetaContext): void {}",
|
|
128
|
+
].join("\n");
|
|
129
|
+
/**
|
|
130
|
+
* Creates a sample test fixture for interface member docs.
|
|
131
|
+
* @returns Sample context, node, and reports.
|
|
132
|
+
* @example
|
|
133
|
+
* ```typescript
|
|
134
|
+
* const sample = createInterfaceSample();
|
|
135
|
+
* ```
|
|
136
|
+
*/
|
|
137
|
+
const createInterfaceSample = () => {
|
|
138
|
+
const commentValue = [
|
|
139
|
+
"*",
|
|
140
|
+
" * Compute line metadata from the raw comment value.",
|
|
141
|
+
" * @param context The metadata context.",
|
|
142
|
+
" * @param context.commentValue The full comment value.",
|
|
143
|
+
" * @param context.full The full matched example text.",
|
|
144
|
+
" * @param context.startOffset The match start offset.",
|
|
145
|
+
" * @returns The line metadata for the example.",
|
|
146
|
+
" ",
|
|
147
|
+
].join("\n");
|
|
148
|
+
const sourceText = buildSourceText(commentValue);
|
|
149
|
+
const comment = createComment(commentValue, sourceText);
|
|
150
|
+
const { context, reports } = createContext(sourceText, [comment]);
|
|
151
|
+
const node = createFunctionNode(sourceText, [
|
|
152
|
+
createParameter("TSTypeReference"),
|
|
153
|
+
]);
|
|
154
|
+
return { context, node, reports, sourceText };
|
|
155
|
+
};
|
|
156
|
+
export { buildSourceText, createComment, createContext, createFunctionNode, createInterfaceSample, createParameter, runFunctionListener, };
|
|
157
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2RvY3Mvbm8taW50ZXJmYWNlLW1lbWJlci1kb2NzL3Rlc3QtaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFpRDVEOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sZ0JBQWdCLEdBQUcsQ0FDdkIsSUFBWSxFQUNaLFFBQW1CLEVBQ2EsRUFBRSxDQUNsQyxDQUFDO0lBQ0MsY0FBYyxFQUFFLEdBQWMsRUFBRSxDQUFDLFFBQVE7SUFDekMsSUFBSTtDQUNMLENBQW1DLENBQUM7QUFFdkM7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxnQkFBZ0IsR0FBRyxDQUN2QixVQUEwQyxFQUMxQyxPQUFzQixFQUNKLEVBQUUsQ0FDcEIsQ0FBQztJQUNDLEVBQUUsRUFBRSwwQkFBMEI7SUFDOUIsT0FBTyxFQUFFLEVBQUU7SUFDWCxNQUFNLEVBQUUsQ0FBQyxVQUFpQyxFQUFRLEVBQUU7UUFDbEQsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxVQUFxQyxDQUFDO1FBQ2pFLE1BQU0sS0FBSyxHQUFnQixFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsQ0FBQztRQUU5QyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RCLENBQUM7SUFDRCxVQUFVO0NBQ1gsQ0FBZ0MsQ0FBQztBQUVwQzs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLGFBQWEsR0FBRyxDQUNwQixVQUFrQixFQUNsQixRQUFtQixFQUNELEVBQUU7SUFDcEIsTUFBTSxPQUFPLEdBQWtCLEVBQUUsQ0FBQztJQUNsQyxNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFFMUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFDckUsQ0FBQyxDQUFDO0FBRUY7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxhQUFhLEdBQUcsQ0FBQyxZQUFvQixFQUFFLFVBQWtCLEVBQVcsRUFBRTtJQUMxRSxNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUV6QyxPQUFPO1FBQ0wsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQztRQUNmLElBQUksRUFBRSxPQUFPO1FBQ2IsS0FBSyxFQUFFLFlBQVk7S0FDVCxDQUFDO0FBQ2YsQ0FBQyxDQUFDO0FBRUY7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxrQkFBa0IsR0FBRyxDQUN6QixVQUFrQixFQUNsQixVQUFxQixFQUNWLEVBQUUsQ0FDYixDQUFDO0lBQ0MsTUFBTSxFQUFFLFVBQVU7SUFDbEIsS0FBSyxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDO0lBQzFELElBQUksRUFBRSxxQkFBcUI7Q0FDNUIsQ0FBYyxDQUFDO0FBRWxCOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxlQUFlLEdBQUcsQ0FBQyxJQUFZLEVBQVcsRUFBRSxDQUFDLENBQUM7SUFDbEQsSUFBSSxFQUFFLFNBQVM7SUFDZixJQUFJLEVBQUUsWUFBWTtJQUNsQixjQUFjLEVBQUU7UUFDZCxjQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUU7S0FDekI7Q0FDRixDQUFDLENBQUM7QUFFSDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sbUJBQW1CLEdBQUcsQ0FDMUIsT0FBeUIsRUFDekIsSUFBZSxFQUNULEVBQUU7SUFDUixNQUFNLFNBQVMsR0FBRyxrQ0FBa0MsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDckUsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLG1CQUVkLENBQUM7SUFFZCxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNuQixDQUFDLENBQUM7QUFFRjs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sZUFBZSxHQUFHLENBQUMsWUFBb0IsRUFBVSxFQUFFLENBQ3ZEO0lBQ0UsS0FBSztJQUNMLFlBQVksQ0FBQyxPQUFPLEVBQUU7SUFDdEIsSUFBSTtJQUNKLHlEQUF5RDtDQUMxRCxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUVmOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLHFCQUFxQixHQUFHLEdBQW9CLEVBQUU7SUFDbEQsTUFBTSxZQUFZLEdBQUc7UUFDbkIsR0FBRztRQUNILHNEQUFzRDtRQUN0RCx5Q0FBeUM7UUFDekMsd0RBQXdEO1FBQ3hELHVEQUF1RDtRQUN2RCx1REFBdUQ7UUFDdkQsZ0RBQWdEO1FBQ2hELEdBQUc7S0FDSixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNiLE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNqRCxNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3hELE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsYUFBYSxDQUFDLFVBQVUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDbEUsTUFBTSxJQUFJLEdBQUcsa0JBQWtCLENBQUMsVUFBVSxFQUFFO1FBQzFDLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQztLQUNuQyxDQUFDLENBQUM7SUFFSCxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDaEQsQ0FBQyxDQUFDO0FBRUYsT0FBTyxFQUNMLGVBQWUsRUFDZixhQUFhLEVBQ2IsYUFBYSxFQUNiLGtCQUFrQixFQUNsQixxQkFBcUIsRUFDckIsZUFBZSxFQUNmLG1CQUFtQixHQUNwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBSdWxlIH0gZnJvbSBcImVzbGludFwiO1xuXG5pbXBvcnQgeyBub0ludGVyZmFjZU1lbWJlckRvY3VtZW50YXRpb25SdWxlIH0gZnJvbSBcIi4vcnVsZVwiO1xuXG4vKiogVHlwZSBkZWZpbml0aW9uIGZvciBydWxlIGRhdGEuICovXG50eXBlIENvbW1lbnQgPSBSZXR1cm5UeXBlPFxuICBSdWxlLlJ1bGVDb250ZXh0W1wic291cmNlQ29kZVwiXVtcImdldEFsbENvbW1lbnRzXCJdXG4+W251bWJlcl07XG5cbi8qKiBUeXBlIGRlZmluaXRpb24gZm9yIHJ1bGUgZGF0YS4gKi9cbmludGVyZmFjZSBJbnRlcmZhY2VTYW1wbGUge1xuICAvKiogQ29udGV4dCBmaWVsZCB2YWx1ZS4gKi9cbiAgY29udGV4dDogUnVsZS5SdWxlQ29udGV4dDtcblxuICAvKiogTm9kZSBmaWVsZCB2YWx1ZS4gKi9cbiAgbm9kZTogUnVsZS5Ob2RlO1xuXG4gIC8qKiBSZXBvcnRzIGZpZWxkIHZhbHVlLiAqL1xuICByZXBvcnRzOiBSZXBvcnRFbnRyeVtdO1xuXG4gIC8qKiBTb3VyY2VUZXh0IGZpZWxkIHZhbHVlLiAqL1xuICBzb3VyY2VUZXh0OiBzdHJpbmc7XG59XG5cbi8qKiBUeXBlIGRlZmluaXRpb24gZm9yIHJ1bGUgZGF0YS4gKi9cbmludGVyZmFjZSBSZXBvcnREZXNjcmlwdG9yRGV0YWlscyB7XG4gIC8qKiBGaXggZmllbGQgdmFsdWUuICovXG4gIGZpeD86IG51bGwgfCBSdWxlLlJlcG9ydEZpeGVyIHwgdW5kZWZpbmVkO1xuXG4gIC8qKiBNZXNzYWdlSWQgZmllbGQgdmFsdWUuICovXG4gIG1lc3NhZ2VJZD86IHN0cmluZztcbn1cblxuLyoqIFR5cGUgZGVmaW5pdGlvbiBmb3IgcnVsZSBkYXRhLiAqL1xuaW50ZXJmYWNlIFJlcG9ydEVudHJ5IHtcbiAgLyoqIEZpeCBoZWxwZXIgdmFsdWUuICovXG4gIGZpeD86IG51bGwgfCBSdWxlLlJlcG9ydEZpeGVyIHwgdW5kZWZpbmVkO1xuXG4gIC8qKiBNZXNzYWdlSWQgaGVscGVyIHZhbHVlLiAqL1xuICBtZXNzYWdlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuLyoqIFR5cGUgZGVmaW5pdGlvbiBmb3IgcnVsZSBkYXRhLiAqL1xuaW50ZXJmYWNlIFJ1bGVDb250ZXh0U3RhdGUge1xuICAvKiogQ29udGV4dCBmaWVsZCB2YWx1ZS4gKi9cbiAgY29udGV4dDogUnVsZS5SdWxlQ29udGV4dDtcblxuICAvKiogUmVwb3J0cyBmaWVsZCB2YWx1ZS4gKi9cbiAgcmVwb3J0czogUmVwb3J0RW50cnlbXTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgU291cmNlQ29kZSBzdHViIHdpdGggdGhlIHByb3ZpZGVkIGNvbW1lbnRzLlxuICogQHBhcmFtIHRleHQgU291cmNlIHRleHQgdG8gYXR0YWNoLlxuICogQHBhcmFtIGNvbW1lbnRzIENvbW1lbnQgbm9kZXMgdG8gZXhwb3NlLlxuICogQHJldHVybnMgU291cmNlQ29kZSBzdHViIGZvciB0ZXN0cy5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBzb3VyY2VDb2RlID0gY3JlYXRlU291cmNlQ29kZShcIlwiLCBbXSk7XG4gKiBgYGBcbiAqL1xuY29uc3QgY3JlYXRlU291cmNlQ29kZSA9IChcbiAgdGV4dDogc3RyaW5nLFxuICBjb21tZW50czogQ29tbWVudFtdLFxuKTogUnVsZS5SdWxlQ29udGV4dFtcInNvdXJjZUNvZGVcIl0gPT5cbiAgKHtcbiAgICBnZXRBbGxDb21tZW50czogKCk6IENvbW1lbnRbXSA9PiBjb21tZW50cyxcbiAgICB0ZXh0LFxuICB9KSBhcyBSdWxlLlJ1bGVDb250ZXh0W1wic291cmNlQ29kZVwiXTtcblxuLyoqXG4gKiBCdWlsZHMgYSBydWxlIGNvbnRleHQgZm9yIGNvbGxlY3RpbmcgcmVwb3J0cy5cbiAqIEBwYXJhbSBzb3VyY2VDb2RlIFNvdXJjZUNvZGUgc3R1Yi5cbiAqIEBwYXJhbSByZXBvcnRzIFJlcG9ydCBzaW5rLlxuICogQHJldHVybnMgUnVsZSBjb250ZXh0IHRoYXQgcmVjb3JkcyByZXBvcnRzLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGNvbnRleHQgPSBidWlsZFJ1bGVDb250ZXh0KHNvdXJjZUNvZGUsIHJlcG9ydHMpO1xuICogYGBgXG4gKi9cbmNvbnN0IGJ1aWxkUnVsZUNvbnRleHQgPSAoXG4gIHNvdXJjZUNvZGU6IFJ1bGUuUnVsZUNvbnRleHRbXCJzb3VyY2VDb2RlXCJdLFxuICByZXBvcnRzOiBSZXBvcnRFbnRyeVtdLFxuKTogUnVsZS5SdWxlQ29udGV4dCA9PlxuICAoe1xuICAgIGlkOiBcIm5vLWludGVyZmFjZS1tZW1iZXItZG9jc1wiLFxuICAgIG9wdGlvbnM6IFtdLFxuICAgIHJlcG9ydDogKGRlc2NyaXB0b3I6IFJ1bGUuUmVwb3J0RGVzY3JpcHRvcik6IHZvaWQgPT4ge1xuICAgICAgY29uc3QgeyBmaXgsIG1lc3NhZ2VJZCB9ID0gZGVzY3JpcHRvciBhcyBSZXBvcnREZXNjcmlwdG9yRGV0YWlscztcbiAgICAgIGNvbnN0IGVudHJ5OiBSZXBvcnRFbnRyeSA9IHsgZml4LCBtZXNzYWdlSWQgfTtcblxuICAgICAgcmVwb3J0cy5wdXNoKGVudHJ5KTtcbiAgICB9LFxuICAgIHNvdXJjZUNvZGUsXG4gIH0pIGFzIHVua25vd24gYXMgUnVsZS5SdWxlQ29udGV4dDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgcnVsZSBjb250ZXh0IHN0YXRlIGZvciB0aGUgZ2l2ZW4gc291cmNlIHRleHQuXG4gKiBAcGFyYW0gc291cmNlVGV4dCBTb3VyY2UgdGV4dCB0byBhbmFseXplLlxuICogQHBhcmFtIGNvbW1lbnRzIENvbW1lbnQgbm9kZXMgZm9yIHRoZSBzb3VyY2UuXG4gKiBAcmV0dXJucyBDb250ZXh0IHN0YXRlIGZvciB0ZXN0cy5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBzdGF0ZSA9IGNyZWF0ZUNvbnRleHQoXCJcIiwgW10pO1xuICogYGBgXG4gKi9cbmNvbnN0IGNyZWF0ZUNvbnRleHQgPSAoXG4gIHNvdXJjZVRleHQ6IHN0cmluZyxcbiAgY29tbWVudHM6IENvbW1lbnRbXSxcbik6IFJ1bGVDb250ZXh0U3RhdGUgPT4ge1xuICBjb25zdCByZXBvcnRzOiBSZXBvcnRFbnRyeVtdID0gW107XG4gIGNvbnN0IHNvdXJjZUNvZGUgPSBjcmVhdGVTb3VyY2VDb2RlKHNvdXJjZVRleHQsIGNvbW1lbnRzKTtcblxuICByZXR1cm4geyBjb250ZXh0OiBidWlsZFJ1bGVDb250ZXh0KHNvdXJjZUNvZGUsIHJlcG9ydHMpLCByZXBvcnRzIH07XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBKU0RvYyBibG9jayBjb21tZW50IGZvciB0aGUgZ2l2ZW4gc291cmNlIHRleHQuXG4gKiBAcGFyYW0gY29tbWVudFZhbHVlIENvbW1lbnQgdmFsdWUgd2l0aG91dCBkZWxpbWl0ZXJzLlxuICogQHBhcmFtIHNvdXJjZVRleHQgU291cmNlIHRleHQgY29udGFpbmluZyB0aGUgY29tbWVudC5cbiAqIEByZXR1cm5zIENvbW1lbnQgbm9kZSBmb3IgdGhlIHNvdXJjZSB0ZXh0LlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGNvbW1lbnQgPSBjcmVhdGVDb21tZW50KFwiKlxcbiAqIG9rXFxuIFwiLCBcImZ1bmN0aW9uIGRlbW8oKSB7fVwiKTtcbiAqIGBgYFxuICovXG5jb25zdCBjcmVhdGVDb21tZW50ID0gKGNvbW1lbnRWYWx1ZTogc3RyaW5nLCBzb3VyY2VUZXh0OiBzdHJpbmcpOiBDb21tZW50ID0+IHtcbiAgY29uc3QgZW5kID0gc291cmNlVGV4dC5pbmRleE9mKFwiKi9cIikgKyAyO1xuXG4gIHJldHVybiB7XG4gICAgcmFuZ2U6IFswLCBlbmRdLFxuICAgIHR5cGU6IFwiQmxvY2tcIixcbiAgICB2YWx1ZTogY29tbWVudFZhbHVlLFxuICB9IGFzIENvbW1lbnQ7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiBub2RlIGZvciB0aGUgZ2l2ZW4gc291cmNlIHRleHQuXG4gKiBAcGFyYW0gc291cmNlVGV4dCBTb3VyY2UgdGV4dCBjb250YWluaW5nIHRoZSBmdW5jdGlvbi5cbiAqIEBwYXJhbSBwYXJhbWV0ZXJzIFBhcmFtZXRlciBub2RlcyBmb3IgdGhlIGZ1bmN0aW9uLlxuICogQHJldHVybnMgRnVuY3Rpb24gZGVjbGFyYXRpb24gbm9kZS5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBub2RlID0gY3JlYXRlRnVuY3Rpb25Ob2RlKFwiZnVuY3Rpb24gZGVtbygpIHt9XCIsIFtdKTtcbiAqIGBgYFxuICovXG5jb25zdCBjcmVhdGVGdW5jdGlvbk5vZGUgPSAoXG4gIHNvdXJjZVRleHQ6IHN0cmluZyxcbiAgcGFyYW1ldGVyczogdW5rbm93bltdLFxuKTogUnVsZS5Ob2RlID0+XG4gICh7XG4gICAgcGFyYW1zOiBwYXJhbWV0ZXJzLFxuICAgIHJhbmdlOiBbc291cmNlVGV4dC5pbmRleE9mKFwiZnVuY3Rpb25cIiksIHNvdXJjZVRleHQubGVuZ3RoXSxcbiAgICB0eXBlOiBcIkZ1bmN0aW9uRGVjbGFyYXRpb25cIixcbiAgfSkgYXMgUnVsZS5Ob2RlO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBwYXJhbWV0ZXIgbm9kZSB3aXRoIGEgdHlwZSBhbm5vdGF0aW9uLlxuICogQHBhcmFtIHR5cGUgVHlwZSBhbm5vdGF0aW9uIGtpbmQgdG8gYXNzaWduLlxuICogQHJldHVybnMgUGFyYW1ldGVyIG5vZGUgZm9yIHRlc3RzLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHBhcmFtID0gY3JlYXRlUGFyYW1ldGVyKFwiVFNUeXBlUmVmZXJlbmNlXCIpO1xuICogYGBgXG4gKi9cbmNvbnN0IGNyZWF0ZVBhcmFtZXRlciA9ICh0eXBlOiBzdHJpbmcpOiB1bmtub3duID0+ICh7XG4gIG5hbWU6IFwiY29udGV4dFwiLFxuICB0eXBlOiBcIklkZW50aWZpZXJcIixcbiAgdHlwZUFubm90YXRpb246IHtcbiAgICB0eXBlQW5ub3RhdGlvbjogeyB0eXBlIH0sXG4gIH0sXG59KTtcblxuLyoqXG4gKiBSdW5zIHRoZSBydWxlIGxpc3RlbmVyIGZvciBhIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIG5vZGUuXG4gKiBAcGFyYW0gY29udGV4dCBSdWxlIGV4ZWN1dGlvbiBjb250ZXh0LlxuICogQHBhcmFtIG5vZGUgRnVuY3Rpb24gbm9kZSB0byBpbnNwZWN0LlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHJ1bkZ1bmN0aW9uTGlzdGVuZXIoY29udGV4dCwgbm9kZSk7XG4gKiBgYGBcbiAqL1xuY29uc3QgcnVuRnVuY3Rpb25MaXN0ZW5lciA9IChcbiAgY29udGV4dDogUnVsZS5SdWxlQ29udGV4dCxcbiAgbm9kZTogUnVsZS5Ob2RlLFxuKTogdm9pZCA9PiB7XG4gIGNvbnN0IGxpc3RlbmVycyA9IG5vSW50ZXJmYWNlTWVtYmVyRG9jdW1lbnRhdGlvblJ1bGUuY3JlYXRlKGNvbnRleHQpO1xuICBjb25zdCBsaXN0ZW5lciA9IGxpc3RlbmVycy5GdW5jdGlvbkRlY2xhcmF0aW9uIGFzXG4gICAgfCAoKG5vZGU6IFJ1bGUuTm9kZSkgPT4gdm9pZClcbiAgICB8IHVuZGVmaW5lZDtcblxuICBsaXN0ZW5lcj8uKG5vZGUpO1xufTtcblxuLyoqXG4gKiBCdWlsZHMgc291cmNlIHRleHQgd2l0aCBhIGxlYWRpbmcgSlNEb2MgY29tbWVudC5cbiAqIEBwYXJhbSBjb21tZW50VmFsdWUgQ29tbWVudCB2YWx1ZSB1c2VkIGluIHRoZSBzb3VyY2UuXG4gKiBAcmV0dXJucyBTb3VyY2UgdGV4dCBjb250YWluaW5nIHRoZSBjb21tZW50IGFuZCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCB0ZXh0ID0gYnVpbGRTb3VyY2VUZXh0KFwiKlxcbiAqIG9rXFxuIFwiKTtcbiAqIGBgYFxuICovXG5jb25zdCBidWlsZFNvdXJjZVRleHQgPSAoY29tbWVudFZhbHVlOiBzdHJpbmcpOiBzdHJpbmcgPT5cbiAgW1xuICAgIFwiLyoqXCIsXG4gICAgY29tbWVudFZhbHVlLnRyaW1FbmQoKSxcbiAgICBcIiovXCIsXG4gICAgXCJmdW5jdGlvbiBnZXRMaW5lTWV0YShjb250ZXh0OiBMaW5lTWV0YUNvbnRleHQpOiB2b2lkIHt9XCIsXG4gIF0uam9pbihcIlxcblwiKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc2FtcGxlIHRlc3QgZml4dHVyZSBmb3IgaW50ZXJmYWNlIG1lbWJlciBkb2NzLlxuICogQHJldHVybnMgU2FtcGxlIGNvbnRleHQsIG5vZGUsIGFuZCByZXBvcnRzLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHNhbXBsZSA9IGNyZWF0ZUludGVyZmFjZVNhbXBsZSgpO1xuICogYGBgXG4gKi9cbmNvbnN0IGNyZWF0ZUludGVyZmFjZVNhbXBsZSA9ICgpOiBJbnRlcmZhY2VTYW1wbGUgPT4ge1xuICBjb25zdCBjb21tZW50VmFsdWUgPSBbXG4gICAgXCIqXCIsXG4gICAgXCIgKiBDb21wdXRlIGxpbmUgbWV0YWRhdGEgZnJvbSB0aGUgcmF3IGNvbW1lbnQgdmFsdWUuXCIsXG4gICAgXCIgKiBAcGFyYW0gY29udGV4dCBUaGUgbWV0YWRhdGEgY29udGV4dC5cIixcbiAgICBcIiAqIEBwYXJhbSBjb250ZXh0LmNvbW1lbnRWYWx1ZSBUaGUgZnVsbCBjb21tZW50IHZhbHVlLlwiLFxuICAgIFwiICogQHBhcmFtIGNvbnRleHQuZnVsbCBUaGUgZnVsbCBtYXRjaGVkIGV4YW1wbGUgdGV4dC5cIixcbiAgICBcIiAqIEBwYXJhbSBjb250ZXh0LnN0YXJ0T2Zmc2V0IFRoZSBtYXRjaCBzdGFydCBvZmZzZXQuXCIsXG4gICAgXCIgKiBAcmV0dXJucyBUaGUgbGluZSBtZXRhZGF0YSBmb3IgdGhlIGV4YW1wbGUuXCIsXG4gICAgXCIgXCIsXG4gIF0uam9pbihcIlxcblwiKTtcbiAgY29uc3Qgc291cmNlVGV4dCA9IGJ1aWxkU291cmNlVGV4dChjb21tZW50VmFsdWUpO1xuICBjb25zdCBjb21tZW50ID0gY3JlYXRlQ29tbWVudChjb21tZW50VmFsdWUsIHNvdXJjZVRleHQpO1xuICBjb25zdCB7IGNvbnRleHQsIHJlcG9ydHMgfSA9IGNyZWF0ZUNvbnRleHQoc291cmNlVGV4dCwgW2NvbW1lbnRdKTtcbiAgY29uc3Qgbm9kZSA9IGNyZWF0ZUZ1bmN0aW9uTm9kZShzb3VyY2VUZXh0LCBbXG4gICAgY3JlYXRlUGFyYW1ldGVyKFwiVFNUeXBlUmVmZXJlbmNlXCIpLFxuICBdKTtcblxuICByZXR1cm4geyBjb250ZXh0LCBub2RlLCByZXBvcnRzLCBzb3VyY2VUZXh0IH07XG59O1xuXG5leHBvcnQge1xuICBidWlsZFNvdXJjZVRleHQsXG4gIGNyZWF0ZUNvbW1lbnQsXG4gIGNyZWF0ZUNvbnRleHQsXG4gIGNyZWF0ZUZ1bmN0aW9uTm9kZSxcbiAgY3JlYXRlSW50ZXJmYWNlU2FtcGxlLFxuICBjcmVhdGVQYXJhbWV0ZXIsXG4gIHJ1bkZ1bmN0aW9uTGlzdGVuZXIsXG59O1xuZXhwb3J0IHR5cGUgeyBDb21tZW50IH07XG4iXX0=
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { Rule } from "eslint";
|
|
2
|
+
/** Type definition for rule data. */
|
|
3
|
+
type Comment = ReturnType<Rule.RuleContext["sourceCode"]["getAllComments"]>[number];
|
|
4
|
+
/** Type definition for rule data. */
|
|
5
|
+
interface CommentLine {
|
|
6
|
+
/** End field value. */
|
|
7
|
+
end: number;
|
|
8
|
+
/** LineBreakLength field value. */
|
|
9
|
+
lineBreakLength: number;
|
|
10
|
+
/** Start field value. */
|
|
11
|
+
start: number;
|
|
12
|
+
/** Text field value. */
|
|
13
|
+
text: string;
|
|
14
|
+
}
|
|
15
|
+
/** Type definition for rule data. */
|
|
16
|
+
interface ParameterMemberTag {
|
|
17
|
+
/** BaseName field value. */
|
|
18
|
+
baseName: string;
|
|
19
|
+
/** FullName field value. */
|
|
20
|
+
fullName: string;
|
|
21
|
+
/** Line field value. */
|
|
22
|
+
line: CommentLine;
|
|
23
|
+
}
|
|
24
|
+
/** Type definition for rule data. */
|
|
25
|
+
interface TypeAnnotationNode {
|
|
26
|
+
/** Type field value. */
|
|
27
|
+
type: string;
|
|
28
|
+
}
|
|
29
|
+
export type { Comment, CommentLine, ParameterMemberTag, TypeAnnotationNode };
|
|
30
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/docs/no-interface-member-docs/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAEnC,qCAAqC;AACrC,KAAK,OAAO,GAAG,UAAU,CACvB,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,gBAAgB,CAAC,CACjD,CAAC,MAAM,CAAC,CAAC;AAEV,qCAAqC;AACrC,UAAU,WAAW;IACnB,uBAAuB;IACvB,GAAG,EAAE,MAAM,CAAC;IAEZ,mCAAmC;IACnC,eAAe,EAAE,MAAM,CAAC;IAExB,yBAAyB;IACzB,KAAK,EAAE,MAAM,CAAC;IAEd,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qCAAqC;AACrC,UAAU,kBAAkB;IAC1B,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,CAAC;IAEjB,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,CAAC;IAEjB,wBAAwB;IACxB,IAAI,EAAE,WAAW,CAAC;CACnB;AAED,qCAAqC;AACrC,UAAU,kBAAkB;IAC1B,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZG9jcy9uby1pbnRlcmZhY2UtbWVtYmVyLWRvY3MvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUnVsZSB9IGZyb20gXCJlc2xpbnRcIjtcblxuLyoqIFR5cGUgZGVmaW5pdGlvbiBmb3IgcnVsZSBkYXRhLiAqL1xudHlwZSBDb21tZW50ID0gUmV0dXJuVHlwZTxcbiAgUnVsZS5SdWxlQ29udGV4dFtcInNvdXJjZUNvZGVcIl1bXCJnZXRBbGxDb21tZW50c1wiXVxuPltudW1iZXJdO1xuXG4vKiogVHlwZSBkZWZpbml0aW9uIGZvciBydWxlIGRhdGEuICovXG5pbnRlcmZhY2UgQ29tbWVudExpbmUge1xuICAvKiogRW5kIGZpZWxkIHZhbHVlLiAqL1xuICBlbmQ6IG51bWJlcjtcblxuICAvKiogTGluZUJyZWFrTGVuZ3RoIGZpZWxkIHZhbHVlLiAqL1xuICBsaW5lQnJlYWtMZW5ndGg6IG51bWJlcjtcblxuICAvKiogU3RhcnQgZmllbGQgdmFsdWUuICovXG4gIHN0YXJ0OiBudW1iZXI7XG5cbiAgLyoqIFRleHQgZmllbGQgdmFsdWUuICovXG4gIHRleHQ6IHN0cmluZztcbn1cblxuLyoqIFR5cGUgZGVmaW5pdGlvbiBmb3IgcnVsZSBkYXRhLiAqL1xuaW50ZXJmYWNlIFBhcmFtZXRlck1lbWJlclRhZyB7XG4gIC8qKiBCYXNlTmFtZSBmaWVsZCB2YWx1ZS4gKi9cbiAgYmFzZU5hbWU6IHN0cmluZztcblxuICAvKiogRnVsbE5hbWUgZmllbGQgdmFsdWUuICovXG4gIGZ1bGxOYW1lOiBzdHJpbmc7XG5cbiAgLyoqIExpbmUgZmllbGQgdmFsdWUuICovXG4gIGxpbmU6IENvbW1lbnRMaW5lO1xufVxuXG4vKiogVHlwZSBkZWZpbml0aW9uIGZvciBydWxlIGRhdGEuICovXG5pbnRlcmZhY2UgVHlwZUFubm90YXRpb25Ob2RlIHtcbiAgLyoqIFR5cGUgZmllbGQgdmFsdWUuICovXG4gIHR5cGU6IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgeyBDb21tZW50LCBDb21tZW50TGluZSwgUGFyYW1ldGVyTWVtYmVyVGFnLCBUeXBlQW5ub3RhdGlvbk5vZGUgfTtcbiJdfQ==
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/** Type definition for rule data. */
|
|
2
|
+
interface FenceLineInfo {
|
|
3
|
+
/** Language field value. */
|
|
4
|
+
language: string;
|
|
5
|
+
/** Leading field value. */
|
|
6
|
+
leading: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Parses a fence line for its leading prefix and language.
|
|
10
|
+
* @param line Fence line to parse.
|
|
11
|
+
* @returns Parsed fence info when matched.
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* const info = parseFenceLine(" * ```typescript");
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
declare function parseFenceLine(line: string): FenceLineInfo | undefined;
|
|
18
|
+
/**
|
|
19
|
+
* Removes fenced blocks that contain no content.
|
|
20
|
+
* @param original Original comment text.
|
|
21
|
+
* @returns Updated comment text when a fence is removed.
|
|
22
|
+
* @example
|
|
23
|
+
* ```typescript
|
|
24
|
+
* const updated = removeEmptyFences("* ```typescript\n* ```\n* ok");
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
declare function removeEmptyFences(original: string): string | undefined;
|
|
28
|
+
export { parseFenceLine, removeEmptyFences };
|
|
29
|
+
//# sourceMappingURL=empty-fence-fixes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"empty-fence-fixes.d.ts","sourceRoot":"","sources":["../../../src/docs/require-example-language/empty-fence-fixes.ts"],"names":[],"mappings":"AAqBA,qCAAqC;AACrC,UAAU,aAAa;IACrB,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,CAAC;IAEjB,2BAA2B;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB;AAuFD;;;;;;;;GAQG;AACH,iBAAS,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAe/D;AAED;;;;;;;;GAQG;AACH,iBAAS,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CA0B/D;AAgDD,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,CAAC"}
|