@codeperfect/eslint-config 1.1.0 → 1.3.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 (177) hide show
  1. package/README.md +21 -3
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/codeperfect-eslint-config-1.0.0.tgz +0 -0
  4. package/dist/domain/config-composition.d.ts +8 -0
  5. package/dist/domain/config-composition.d.ts.map +1 -0
  6. package/dist/domain/config-composition.js +55 -0
  7. package/dist/domain/index.d.ts +3 -1
  8. package/dist/domain/index.d.ts.map +1 -1
  9. package/dist/domain/index.js +3 -2
  10. package/dist/{module-taxonomy.d.ts → domain/module-taxonomy.d.ts} +6 -3
  11. package/dist/domain/module-taxonomy.d.ts.map +1 -0
  12. package/dist/domain/module-taxonomy.js +22 -0
  13. package/dist/domain/types.d.ts +66 -0
  14. package/dist/domain/types.d.ts.map +1 -0
  15. package/dist/domain/types.js +2 -0
  16. package/dist/index.d.ts +2 -14
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +2 -42
  19. package/dist/infrastructure/architecture/boundaries.d.ts +22 -0
  20. package/dist/infrastructure/architecture/boundaries.d.ts.map +1 -0
  21. package/dist/infrastructure/architecture/boundaries.js +175 -0
  22. package/dist/infrastructure/architecture/import-x.d.ts.map +1 -0
  23. package/dist/infrastructure/architecture/import-x.js +80 -0
  24. package/dist/infrastructure/architecture/index.d.ts +3 -0
  25. package/dist/infrastructure/architecture/index.d.ts.map +1 -0
  26. package/dist/infrastructure/architecture/index.js +3 -0
  27. package/dist/infrastructure/config-factory.d.ts +14 -0
  28. package/dist/infrastructure/config-factory.d.ts.map +1 -0
  29. package/dist/infrastructure/config-factory.js +44 -0
  30. package/dist/infrastructure/configs/index.d.ts +7 -0
  31. package/dist/infrastructure/configs/index.d.ts.map +1 -0
  32. package/dist/infrastructure/configs/index.js +7 -0
  33. package/dist/infrastructure/core/codeperfect.d.ts +11 -0
  34. package/dist/infrastructure/core/codeperfect.d.ts.map +1 -0
  35. package/dist/infrastructure/core/codeperfect.js +14 -0
  36. package/dist/infrastructure/core/eslint.d.ts.map +1 -0
  37. package/dist/infrastructure/core/eslint.js +58 -0
  38. package/dist/infrastructure/core/index.d.ts +5 -0
  39. package/dist/infrastructure/core/index.d.ts.map +1 -0
  40. package/dist/infrastructure/core/index.js +5 -0
  41. package/dist/infrastructure/core/resolver.d.ts.map +1 -0
  42. package/dist/infrastructure/core/resolver.js +27 -0
  43. package/dist/infrastructure/core/typescript.d.ts.map +1 -0
  44. package/dist/infrastructure/core/typescript.js +63 -0
  45. package/dist/{diagnostics.d.ts → infrastructure/diagnostics.d.ts} +13 -3
  46. package/dist/infrastructure/diagnostics.d.ts.map +1 -0
  47. package/dist/infrastructure/diagnostics.js +90 -0
  48. package/dist/infrastructure/docs/comments.d.ts.map +1 -0
  49. package/dist/infrastructure/docs/comments.js +30 -0
  50. package/dist/infrastructure/docs/index.d.ts +3 -0
  51. package/dist/infrastructure/docs/index.d.ts.map +1 -0
  52. package/dist/infrastructure/docs/index.js +3 -0
  53. package/dist/{docs → infrastructure/docs}/jsdoc.d.ts +3 -1
  54. package/dist/infrastructure/docs/jsdoc.d.ts.map +1 -0
  55. package/dist/infrastructure/docs/jsdoc.js +126 -0
  56. package/dist/infrastructure/index.d.ts +5 -0
  57. package/dist/infrastructure/index.d.ts.map +1 -0
  58. package/dist/infrastructure/index.js +4 -0
  59. package/dist/{plugin-loaders.d.ts → infrastructure/plugin-loaders.d.ts} +7 -2
  60. package/dist/infrastructure/plugin-loaders.d.ts.map +1 -0
  61. package/dist/infrastructure/plugin-loaders.js +115 -0
  62. package/dist/infrastructure/plugin-state.d.ts +26 -0
  63. package/dist/infrastructure/plugin-state.d.ts.map +1 -0
  64. package/dist/infrastructure/plugin-state.js +54 -0
  65. package/dist/infrastructure/rxjs-x.d.ts.map +1 -0
  66. package/dist/infrastructure/rxjs-x.js +27 -0
  67. package/dist/infrastructure/style/index.d.ts +5 -0
  68. package/dist/infrastructure/style/index.d.ts.map +1 -0
  69. package/dist/infrastructure/style/index.js +5 -0
  70. package/dist/infrastructure/style/perfectionist.d.ts.map +1 -0
  71. package/dist/infrastructure/style/perfectionist.js +31 -0
  72. package/dist/infrastructure/style/prettier.d.ts.map +1 -0
  73. package/dist/infrastructure/style/prettier.js +15 -0
  74. package/dist/infrastructure/style/stylistic.d.ts.map +1 -0
  75. package/dist/infrastructure/style/stylistic.js +17 -0
  76. package/dist/infrastructure/style/unicorn.d.ts.map +1 -0
  77. package/dist/infrastructure/style/unicorn.js +15 -0
  78. package/dist/infrastructure/testing/index.d.ts +5 -0
  79. package/dist/infrastructure/testing/index.d.ts.map +1 -0
  80. package/dist/infrastructure/testing/index.js +5 -0
  81. package/dist/infrastructure/testing/jasmine.d.ts.map +1 -0
  82. package/dist/infrastructure/testing/jasmine.js +26 -0
  83. package/dist/infrastructure/testing/jest.d.ts.map +1 -0
  84. package/dist/infrastructure/testing/jest.js +27 -0
  85. package/dist/infrastructure/testing/playwright.d.ts.map +1 -0
  86. package/dist/infrastructure/testing/playwright.js +29 -0
  87. package/dist/infrastructure/testing/vitest.d.ts.map +1 -0
  88. package/dist/infrastructure/testing/vitest.js +33 -0
  89. package/dist/{utilities.d.ts → infrastructure/utilities.d.ts} +2 -13
  90. package/dist/infrastructure/utilities.d.ts.map +1 -0
  91. package/dist/infrastructure/utilities.js +112 -0
  92. package/package.json +47 -44
  93. package/dist/architecture/boundaries.d.ts +0 -17
  94. package/dist/architecture/boundaries.d.ts.map +0 -1
  95. package/dist/architecture/boundaries.js +0 -69
  96. package/dist/architecture/import-x.d.ts.map +0 -1
  97. package/dist/architecture/import-x.js +0 -79
  98. package/dist/architecture/index.d.ts +0 -3
  99. package/dist/architecture/index.d.ts.map +0 -1
  100. package/dist/architecture/index.js +0 -3
  101. package/dist/config-composition.d.ts +0 -6
  102. package/dist/config-composition.d.ts.map +0 -1
  103. package/dist/config-composition.js +0 -37
  104. package/dist/configs/index.d.ts +0 -7
  105. package/dist/configs/index.d.ts.map +0 -1
  106. package/dist/configs/index.js +0 -7
  107. package/dist/core/eslint.d.ts.map +0 -1
  108. package/dist/core/eslint.js +0 -58
  109. package/dist/core/index.d.ts +0 -4
  110. package/dist/core/index.d.ts.map +0 -1
  111. package/dist/core/index.js +0 -4
  112. package/dist/core/resolver.d.ts.map +0 -1
  113. package/dist/core/resolver.js +0 -27
  114. package/dist/core/typescript.d.ts.map +0 -1
  115. package/dist/core/typescript.js +0 -63
  116. package/dist/diagnostics.d.ts.map +0 -1
  117. package/dist/diagnostics.js +0 -74
  118. package/dist/docs/comments.d.ts.map +0 -1
  119. package/dist/docs/comments.js +0 -30
  120. package/dist/docs/index.d.ts +0 -3
  121. package/dist/docs/index.d.ts.map +0 -1
  122. package/dist/docs/index.js +0 -3
  123. package/dist/docs/jsdoc-examples.d.ts +0 -56
  124. package/dist/docs/jsdoc-examples.d.ts.map +0 -1
  125. package/dist/docs/jsdoc-examples.js +0 -186
  126. package/dist/docs/jsdoc-processor.d.ts +0 -63
  127. package/dist/docs/jsdoc-processor.d.ts.map +0 -1
  128. package/dist/docs/jsdoc-processor.js +0 -112
  129. package/dist/docs/jsdoc.d.ts.map +0 -1
  130. package/dist/docs/jsdoc.js +0 -122
  131. package/dist/domain/rxjs-x.d.ts.map +0 -1
  132. package/dist/domain/rxjs-x.js +0 -27
  133. package/dist/module-taxonomy.d.ts.map +0 -1
  134. package/dist/module-taxonomy.js +0 -21
  135. package/dist/plugin-loaders.d.ts.map +0 -1
  136. package/dist/plugin-loaders.js +0 -110
  137. package/dist/style/index.d.ts +0 -5
  138. package/dist/style/index.d.ts.map +0 -1
  139. package/dist/style/index.js +0 -5
  140. package/dist/style/perfectionist.d.ts.map +0 -1
  141. package/dist/style/perfectionist.js +0 -17
  142. package/dist/style/prettier.d.ts.map +0 -1
  143. package/dist/style/prettier.js +0 -15
  144. package/dist/style/stylistic.d.ts.map +0 -1
  145. package/dist/style/stylistic.js +0 -15
  146. package/dist/style/unicorn.d.ts.map +0 -1
  147. package/dist/style/unicorn.js +0 -15
  148. package/dist/testing/index.d.ts +0 -5
  149. package/dist/testing/index.d.ts.map +0 -1
  150. package/dist/testing/index.js +0 -5
  151. package/dist/testing/jasmine.d.ts.map +0 -1
  152. package/dist/testing/jasmine.js +0 -25
  153. package/dist/testing/jest.d.ts.map +0 -1
  154. package/dist/testing/jest.js +0 -27
  155. package/dist/testing/playwright.d.ts.map +0 -1
  156. package/dist/testing/playwright.js +0 -29
  157. package/dist/testing/vitest.d.ts.map +0 -1
  158. package/dist/testing/vitest.js +0 -32
  159. package/dist/types.d.ts +0 -41
  160. package/dist/types.d.ts.map +0 -1
  161. package/dist/types.js +0 -2
  162. package/dist/utilities.d.ts.map +0 -1
  163. package/dist/utilities.js +0 -125
  164. /package/dist/{architecture → infrastructure/architecture}/import-x.d.ts +0 -0
  165. /package/dist/{core → infrastructure/core}/eslint.d.ts +0 -0
  166. /package/dist/{core → infrastructure/core}/resolver.d.ts +0 -0
  167. /package/dist/{core → infrastructure/core}/typescript.d.ts +0 -0
  168. /package/dist/{docs → infrastructure/docs}/comments.d.ts +0 -0
  169. /package/dist/{domain → infrastructure}/rxjs-x.d.ts +0 -0
  170. /package/dist/{style → infrastructure/style}/perfectionist.d.ts +0 -0
  171. /package/dist/{style → infrastructure/style}/prettier.d.ts +0 -0
  172. /package/dist/{style → infrastructure/style}/stylistic.d.ts +0 -0
  173. /package/dist/{style → infrastructure/style}/unicorn.d.ts +0 -0
  174. /package/dist/{testing → infrastructure/testing}/jasmine.d.ts +0 -0
  175. /package/dist/{testing → infrastructure/testing}/jest.d.ts +0 -0
  176. /package/dist/{testing → infrastructure/testing}/playwright.d.ts +0 -0
  177. /package/dist/{testing → infrastructure/testing}/vitest.d.ts +0 -0
@@ -1,186 +0,0 @@
1
- import { createWrappedJsdocProcessorPlugin } from "./jsdoc-processor.js";
2
- /** TypeScript source files that should run through the JSDoc snippet processor. */
3
- const typeScriptSourceFiles = ["**/*.cts", "**/*.mts", "**/*.ts", "**/*.tsx"];
4
- /** Virtual example files emitted by the upstream JSDoc processor. */
5
- const typeScriptExampleFiles = ["**/*.md/*.js"];
6
- /** Virtual files emitted for JSDoc default-expression checks. */
7
- const typeScriptDefaultExpressionFiles = [
8
- "**/*.jsdoc-defaults",
9
- "**/*.jsdoc-params",
10
- "**/*.jsdoc-properties",
11
- ];
12
- /**
13
- * Build relaxed rules for extracted default-expression snippets.
14
- * @returns The snippet rule overrides.
15
- * @example
16
- * console.log(buildDefaultExpressionSnippetRules());
17
- */
18
- function buildDefaultExpressionSnippetRules() {
19
- return {
20
- ...buildExampleSnippetRules(),
21
- "@stylistic/quotes": ["error", "double"],
22
- "@stylistic/semi": ["error", "never"],
23
- "@typescript-eslint/no-unused-expressions": "off",
24
- "chai-friendly/no-unused-expressions": "off",
25
- "no-empty-function": "off",
26
- "no-new": "off",
27
- "no-unused-expressions": "off",
28
- strict: "off",
29
- };
30
- }
31
- /**
32
- * Build relaxed rules for extracted example snippets.
33
- * @returns The snippet rule overrides.
34
- * @example
35
- * console.log(buildExampleSnippetRules());
36
- */
37
- function buildExampleSnippetRules() {
38
- return {
39
- "@stylistic/eol-last": "off",
40
- "@stylistic/no-multiple-empty-lines": "off",
41
- "@stylistic/padded-blocks": "off",
42
- "@typescript-eslint/no-unused-expressions": "off",
43
- "@typescript-eslint/no-unused-vars": "off",
44
- "chai-friendly/no-unused-expressions": "off",
45
- "import/no-unresolved": "off",
46
- "import/unambiguous": "off",
47
- "jsdoc/require-file-overview": "off",
48
- "jsdoc/require-jsdoc": "off",
49
- "n/no-missing-import": "off",
50
- "n/no-missing-require": "off",
51
- "no-console": "off",
52
- "no-undef": "off",
53
- "no-unused-expressions": "off",
54
- "no-unused-vars": "off",
55
- "node/no-missing-import": "off",
56
- "node/no-missing-require": "off",
57
- };
58
- }
59
- /**
60
- * Build TypeScript-aware processor configs for JSDoc examples and default expressions.
61
- * @param options Config input for the TypeScript snippet support.
62
- * @param options.disableTypeCheckedRules Rule overrides that disable typed-only checks.
63
- * @param options.getJsdocProcessorPlugin Upstream processor factory when present.
64
- * @param options.parser Parser used for host files and snippets.
65
- * @param options.typeScriptPlugin TypeScript ESLint plugin instance.
66
- * @returns The processor and virtual-file configs.
67
- * @example
68
- * console.log(buildTypeScriptExampleConfigs({ disableTypeCheckedRules: {}, getJsdocProcessorPlugin: void 0, parser: {} as Parser, typeScriptPlugin: {} as TypeScriptPlugin }).length);
69
- */
70
- function buildTypeScriptExampleConfigs({ disableTypeCheckedRules, getJsdocProcessorPlugin, parser, typeScriptPlugin, }) {
71
- if (getJsdocProcessorPlugin === void 0) {
72
- return [];
73
- }
74
- return [
75
- buildTypeScriptProcessorConfig(getJsdocProcessorPlugin, parser),
76
- buildTypeScriptSnippetRuleConfig({
77
- files: typeScriptExampleFiles,
78
- name: "jsdoc/typescript-examples/rules",
79
- parser,
80
- rules: {
81
- ...disableTypeCheckedRules,
82
- ...buildExampleSnippetRules(),
83
- },
84
- typeScriptPlugin,
85
- }),
86
- buildTypeScriptSnippetRuleConfig({
87
- files: typeScriptDefaultExpressionFiles,
88
- name: "jsdoc/typescript-default-expressions/rules",
89
- parser,
90
- rules: {
91
- ...disableTypeCheckedRules,
92
- ...buildDefaultExpressionSnippetRules(),
93
- },
94
- typeScriptPlugin,
95
- }),
96
- ];
97
- }
98
- /**
99
- * Build the processor config for TypeScript source files.
100
- * @param getJsdocProcessorPlugin Upstream JSDoc processor factory.
101
- * @param parser Parser used for host TypeScript files.
102
- * @returns The processor-backed ESLint config entry.
103
- * @example
104
- * console.log(buildTypeScriptProcessorConfig(((_config) => ({ processors: { examples: {} } })) as JsdocProcessorPluginFactory, {} as Parser).processor);
105
- */
106
- function buildTypeScriptProcessorConfig(getJsdocProcessorPlugin, parser) {
107
- return {
108
- files: typeScriptSourceFiles,
109
- name: "jsdoc/typescript-examples-and-default-expressions/processor",
110
- plugins: {
111
- examples: createWrappedJsdocProcessorPlugin({
112
- checkDefaults: true,
113
- checkParams: true,
114
- checkProperties: true,
115
- getJsdocProcessorPlugin,
116
- parser,
117
- sourceType: "module",
118
- }),
119
- },
120
- processor: "examples/examples",
121
- };
122
- }
123
- /**
124
- * Build language options for extracted TypeScript snippets.
125
- * @param parser Parser used for snippet files.
126
- * @returns The language options for virtual snippet files.
127
- * @example
128
- * console.log(buildTypeScriptSnippetLanguageOptions({} as Parser).sourceType);
129
- */
130
- function buildTypeScriptSnippetLanguageOptions(parser) {
131
- return {
132
- parser,
133
- parserOptions: {
134
- projectService: false,
135
- },
136
- sourceType: "module",
137
- };
138
- }
139
- /**
140
- * Build a TypeScript snippet rule config for virtual files.
141
- * @param options Config input for the snippet rule block.
142
- * @param options.files Virtual file globs targeted by the config.
143
- * @param options.name Config name shown in ESLint diagnostics.
144
- * @param options.parser Parser used for extracted snippet content.
145
- * @param options.rules Rule overrides applied to the virtual snippet files.
146
- * @param options.typeScriptPlugin TypeScript ESLint plugin instance.
147
- * @returns The ESLint config for the virtual snippet files.
148
- * @example
149
- * console.log(buildTypeScriptSnippetRuleConfig({ files: ["virtual-example-file"], name: "example", parser: {} as Parser, rules: {}, typeScriptPlugin: {} as TypeScriptPlugin }).name);
150
- */
151
- function buildTypeScriptSnippetRuleConfig({ files, name, parser, rules, typeScriptPlugin, }) {
152
- return {
153
- files,
154
- languageOptions: buildTypeScriptSnippetLanguageOptions(parser),
155
- name,
156
- plugins: {
157
- "@typescript-eslint": typeScriptPlugin,
158
- },
159
- rules,
160
- };
161
- }
162
- /**
163
- * Resolve the TypeScript rule overrides that disable typed-only linting for snippets.
164
- * @param typeScriptConfigs The exported TypeScript ESLint config map.
165
- * @returns The disable-type-checked rule overrides.
166
- * @example
167
- * console.log(resolveDisableTypeCheckedRules({ disableTypeChecked: { rules: { example: "off" } } } as TypeScriptConfigs).example);
168
- */
169
- function resolveDisableTypeCheckedRules(typeScriptConfigs) {
170
- return (typeScriptConfigs.disableTypeChecked.rules ??
171
- {});
172
- }
173
- /**
174
- * Resolve the optional processor factory from the JSDoc plugin module.
175
- * @param jsdocModule The loaded JSDoc plugin module.
176
- * @returns The processor factory when the module exports it.
177
- * @example
178
- * console.log(resolveJsdocProcessorPlugin({}) === void 0);
179
- */
180
- function resolveJsdocProcessorPlugin(jsdocModule) {
181
- return "getJsdocProcessorPlugin" in jsdocModule
182
- ? jsdocModule.getJsdocProcessorPlugin
183
- : void 0;
184
- }
185
- export { buildTypeScriptExampleConfigs, resolveDisableTypeCheckedRules, resolveJsdocProcessorPlugin, };
186
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNkb2MtZXhhbXBsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZG9jcy9qc2RvYy1leGFtcGxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFRQSxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQStDekUsbUZBQW1GO0FBQ25GLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUU5RSxxRUFBcUU7QUFDckUsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBRWhELGlFQUFpRTtBQUNqRSxNQUFNLGdDQUFnQyxHQUFHO0lBQ3ZDLHFCQUFxQjtJQUNyQixtQkFBbUI7SUFDbkIsdUJBQXVCO0NBQ3hCLENBQUM7QUFFRjs7Ozs7R0FLRztBQUNILFNBQVMsa0NBQWtDO0lBQ3pDLE9BQU87UUFDTCxHQUFHLHdCQUF3QixFQUFFO1FBQzdCLG1CQUFtQixFQUFFLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQztRQUN4QyxpQkFBaUIsRUFBRSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUM7UUFDckMsMENBQTBDLEVBQUUsS0FBSztRQUNqRCxxQ0FBcUMsRUFBRSxLQUFLO1FBQzVDLG1CQUFtQixFQUFFLEtBQUs7UUFDMUIsUUFBUSxFQUFFLEtBQUs7UUFDZix1QkFBdUIsRUFBRSxLQUFLO1FBQzlCLE1BQU0sRUFBRSxLQUFLO0tBQ2QsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsd0JBQXdCO0lBQy9CLE9BQU87UUFDTCxxQkFBcUIsRUFBRSxLQUFLO1FBQzVCLG9DQUFvQyxFQUFFLEtBQUs7UUFDM0MsMEJBQTBCLEVBQUUsS0FBSztRQUNqQywwQ0FBMEMsRUFBRSxLQUFLO1FBQ2pELG1DQUFtQyxFQUFFLEtBQUs7UUFDMUMscUNBQXFDLEVBQUUsS0FBSztRQUM1QyxzQkFBc0IsRUFBRSxL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QUMsQ0FBQztBQUNiLENBQUM7QUFFRCxPQUFPLEVBQ0wsNkJBQTZCLEVBQzdCLDhCQUE4QixFQUM5QiwyQkFBMkIsR0FDNUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgTGludGVyIH0gZnJvbSBcImVzbGludFwiO1xuaW1wb3J0IHR5cGUgeyBnZXRKc2RvY1Byb2Nlc3NvclBsdWdpbiBhcyBnZXRKc2RvY1Byb2Nlc3NvclBsdWdpblR5cGUgfSBmcm9tIFwiZXNsaW50LXBsdWdpbi1qc2RvY1wiO1xuaW1wb3J0IHR5cGUge1xuICBwYXJzZXIgYXMgcGFyc2VyVHlwZSxcbiAgY29uZmlncyBhcyB0eXBlU2NyaXB0Q29uZmlnc1R5cGUsXG4gIHBsdWdpbiBhcyB0eXBlU2NyaXB0UGx1Z2luVHlwZSxcbn0gZnJvbSBcInR5cGVzY3JpcHQtZXNsaW50XCI7XG5cbmltcG9ydCB7IGNyZWF0ZVdyYXBwZWRKc2RvY1Byb2Nlc3NvclBsdWdpbiB9IGZyb20gXCIuL2pzZG9jLXByb2Nlc3Nvci5qc1wiO1xuXG4vKiogT3B0aW9ucyBmb3IgYnVpbGRpbmcgVHlwZVNjcmlwdCBleGFtcGxlIGNvbmZpZ3MuICovXG5pbnRlcmZhY2UgQnVpbGRUeXBlU2NyaXB0RXhhbXBsZUNvbmZpZ09wdGlvbnMge1xuICAvKiogUnVsZSBvdmVycmlkZXMgdGhhdCBkaXNhYmxlIHR5cGVkLW9ubHkgY2hlY2tzIGZvciBzbmlwcGV0cy4gKi9cbiAgZGlzYWJsZVR5cGVDaGVja2VkUnVsZXM6IExpbnRlci5SdWxlc1JlY29yZDtcblxuICAvKiogVXBzdHJlYW0gcHJvY2Vzc29yIGZhY3Rvcnkgd2hlbiB0aGUgcGx1Z2luIGV4cG9ydHMgaXQuICovXG4gIGdldEpzZG9jUHJvY2Vzc29yUGx1Z2luOiBKc2RvY1Byb2Nlc3NvclBsdWdpbkZhY3RvcnkgfCB1bmRlZmluZWQ7XG5cbiAgLyoqIFBhcnNlciB1c2VkIGZvciBob3N0IGZpbGVzIGFuZCBzbmlwcGV0IGZpbGVzLiAqL1xuICBwYXJzZXI6IFBhcnNlcjtcblxuICAvKiogVHlwZVNjcmlwdCBFU0xpbnQgcGx1Z2luIHVzZWQgYnkgdGhlIHZpcnR1YWwgc25pcHBldCBjb25maWdzLiAqL1xuICB0eXBlU2NyaXB0UGx1Z2luOiBUeXBlU2NyaXB0UGx1Z2luO1xufVxuXG4vKiogRnVuY3Rpb24gc2lnbmF0dXJlIGZvciB0aGUgSlNEb2MgcHJvY2Vzc29yIGZhY3RvcnkuICovXG50eXBlIEpzZG9jUHJvY2Vzc29yUGx1Z2luRmFjdG9yeSA9IHR5cGVvZiBnZXRKc2RvY1Byb2Nlc3NvclBsdWdpblR5cGU7XG5cbi8qKiBQYXJzZXIgYWNjZXB0ZWQgYnkgdGhlIEpTRG9jIGV4YW1wbGUgcHJvY2Vzc29yLiAqL1xudHlwZSBQYXJzZXIgPSB0eXBlb2YgcGFyc2VyVHlwZTtcblxuLyoqIFR5cGVTY3JpcHQgRVNMaW50IGNvbmZpZyBtYXAuICovXG50eXBlIFR5cGVTY3JpcHRDb25maWdzID0gdHlwZW9mIHR5cGVTY3JpcHRDb25maWdzVHlwZTtcblxuLyoqIFR5cGVTY3JpcHQgRVNMaW50IHBsdWdpbiBpbnN0YW5jZSB1c2VkIGZvciBzbmlwcGV0LW9ubHkgcnVsZSBjb25maWdzLiAqL1xudHlwZSBUeXBlU2NyaXB0UGx1Z2luID0gdHlwZW9mIHR5cGVTY3JpcHRQbHVnaW5UeXBlO1xuXG4vKiogT3B0aW9ucyBmb3IgYSBUeXBlU2NyaXB0IHZpcnR1YWwgc25pcHBldCBydWxlIGNvbmZpZy4gKi9cbmludGVyZmFjZSBUeXBlU2NyaXB0U25pcHBldFJ1bGVDb25maWdPcHRpb25zIHtcbiAgLyoqIFZpcnR1YWwgZmlsZSBnbG9icyB0YXJnZXRlZCBieSB0aGUgY29uZmlnLiAqL1xuICBmaWxlczogc3RyaW5nW107XG5cbiAgLyoqIENvbmZpZyBuYW1lIHNob3duIGluIEVTTGludCBkaWFnbm9zdGljcy4gKi9cbiAgbmFtZTogc3RyaW5nO1xuXG4gIC8qKiBQYXJzZXIgdXNlZCBmb3IgdGhlIGV4dHJhY3RlZCBzbmlwcGV0IGNvbnRlbnQuICovXG4gIHBhcnNlcjogUGFyc2VyO1xuXG4gIC8qKiBSdWxlIG92ZXJyaWRlcyBhcHBsaWVkIHRvIHRoZSBleHRyYWN0ZWQgc25pcHBldCBmaWxlcy4gKi9cbiAgcnVsZXM6IExpbnRlci5SdWxlc1JlY29yZDtcblxuICAvKiogVHlwZVNjcmlwdCBFU0xpbnQgcGx1Z2luIGluc3RhbmNlLiAqL1xuICB0eXBlU2NyaXB0UGx1Z2luOiBUeXBlU2NyaXB0UGx1Z2luO1xufVxuXG4vKiogVHlwZVNjcmlwdCBzb3VyY2UgZmlsZXMgdGhhdCBzaG91bGQgcnVuIHRocm91Z2ggdGhlIEpTRG9jIHNuaXBwZXQgcHJvY2Vzc29yLiAqL1xuY29uc3QgdHlwZVNjcmlwdFNvdXJjZUZpbGVzID0gW1wiKiovKi5jdHNcIiwgXCIqKi8qLm10c1wiLCBcIioqLyoudHNcIiwgXCIqKi8qLnRzeFwiXTtcblxuLyoqIFZpcnR1YWwgZXhhbXBsZSBmaWxlcyBlbWl0dGVkIGJ5IHRoZSB1cHN0cmVhbSBKU0RvYyBwcm9jZXNzb3IuICovXG5jb25zdCB0eXBlU2NyaXB0RXhhbXBsZUZpbGVzID0gW1wiKiovKi5tZC8qLmpzXCJdO1xuXG4vKiogVmlydHVhbCBmaWxlcyBlbWl0dGVkIGZvciBKU0RvYyBkZWZhdWx0LWV4cHJlc3Npb24gY2hlY2tzLiAqL1xuY29uc3QgdHlwZVNjcmlwdERlZmF1bHRFeHByZXNzaW9uRmlsZXMgPSBbXG4gIFwiKiovKi5qc2RvYy1kZWZhdWx0c1wiLFxuICBcIioqLyouanNkb2MtcGFyYW1zXCIsXG4gIFwiKiovKi5qc2RvYy1wcm9wZXJ0aWVzXCIsXG5dO1xuXG4vKipcbiAqIEJ1aWxkIHJlbGF4ZWQgcnVsZXMgZm9yIGV4dHJhY3RlZCBkZWZhdWx0LWV4cHJlc3Npb24gc25pcHBldHMuXG4gKiBAcmV0dXJucyBUaGUgc25pcHBldCBydWxlIG92ZXJyaWRlcy5cbiAqIEBleGFtcGxlXG4gKiBjb25zb2xlLmxvZyhidWlsZERlZmF1bHRFeHByZXNzaW9uU25pcHBldFJ1bGVzKCkpO1xuICovXG5mdW5jdGlvbiBidWlsZERlZmF1bHRFeHByZXNzaW9uU25pcHBldFJ1bGVzKCk6IExpbnRlci5SdWxlc1JlY29yZCB7XG4gIHJldHVybiB7XG4gICAgLi4uYnVpbGRFeGFtcGxlU25pcHBldFJ1bGVzKCksXG4gICAgXCJAc3R5bGlzdGljL3F1b3Rlc1wiOiBbXCJlcnJvclwiLCBcImRvdWJsZVwiXSxcbiAgICBcIkBzdHlsaXN0aWMvc2VtaVwiOiBbXCJlcnJvclwiLCBcIm5ldmVyXCJdLFxuICAgIFwiQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC1leHByZXNzaW9uc1wiOiBcIm9mZlwiLFxuICAgIFwiY2hhaS1mcmllbmRseS9uby11bnVzZWQtZXhwcmVzc2lvbnNcIjogXCJvZmZcIixcbiAgICBcIm5vLWVtcHR5LWZ1bmN0aW9uXCI6IFwib2ZmXCIsXG4gICAgXCJuby1uZXdcIjogXCJvZmZcIixcbiAgICBcIm5vLXVudXNlZC1leHByZXNzaW9uc1wiOiBcIm9mZlwiLFxuICAgIHN0cmljdDogXCJvZmZcIixcbiAgfTtcbn1cblxuLyoqXG4gKiBCdWlsZCByZWxheGVkIHJ1bGVzIGZvciBleHRyYWN0ZWQgZXhhbXBsZSBzbmlwcGV0cy5cbiAqIEByZXR1cm5zIFRoZSBzbmlwcGV0IHJ1bGUgb3ZlcnJpZGVzLlxuICogQGV4YW1wbGVcbiAqIGNvbnNvbGUubG9nKGJ1aWxkRXhhbXBsZVNuaXBwZXRSdWxlcygpKTtcbiAqL1xuZnVuY3Rpb24gYnVpbGRFeGFtcGxlU25pcHBldFJ1bGVzKCk6IExpbnRlci5SdWxlc1JlY29yZCB7XG4gIHJldHVybiB7XG4gICAgXCJAc3R5bGlzdGljL2VvbC1sYXN0XCI6IFwib2ZmXCIsXG4gICAgXCJAc3R5bGlzdGljL25vLW11bHRpcGxlLWVtcHR5LWxpbmVzXCI6IFwib2ZmXCIsXG4gICAgXCJAc3R5bGlzdGljL3BhZGRlZC1ibG9ja3NcIjogXCJvZmZcIixcbiAgICBcIkB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtZXhwcmVzc2lvbnNcIjogXCJvZmZcIixcbiAgICBcIkB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1wiOiBcIm9mZlwiLFxuICAgIFwiY2hhaS1mcmllbmRseS9uby11bnVzZWQtZXhwcmVzc2lvbnNcIjogXCJvZmZcIixcbiAgICBcImltcG9ydC9uby11bnJlc29sdmVkXCI6IFwib2ZmXCIsXG4gICAgXCJpbXBvcnQvdW5hbWJpZ3VvdXNcIjogXCJvZmZcIixcbiAgICBcImpzZG9jL3JlcXVpcmUtZmlsZS1vdmVydmlld1wiOiBcIm9mZlwiLFxuICAgIFwianNkb2MvcmVxdWlyZS1qc2RvY1wiOiBcIm9mZlwiLFxuICAgIFwibi9uby1taXNzaW5nLWltcG9ydFwiOiBcIm9mZlwiLFxuICAgIFwibi9uby1taXNzaW5nLXJlcXVpcmVcIjogXCJvZmZcIixcbiAgICBcIm5vLWNvbnNvbGVcIjogXCJvZmZcIixcbiAgICBcIm5vLXVuZGVmXCI6IFwib2ZmXCIsXG4gICAgXCJuby11bnVzZWQtZXhwcmVzc2lvbnNcIjogXCJvZmZcIixcbiAgICBcIm5vLXVudXNlZC12YXJzXCI6IFwib2ZmXCIsXG4gICAgXCJub2RlL25vLW1pc3NpbmctaW1wb3J0XCI6IFwib2ZmXCIsXG4gICAgXCJub2RlL25vLW1pc3NpbmctcmVxdWlyZVwiOiBcIm9mZlwiLFxuICB9O1xufVxuXG4vKipcbiAqIEJ1aWxkIFR5cGVTY3JpcHQtYXdhcmUgcHJvY2Vzc29yIGNvbmZpZ3MgZm9yIEpTRG9jIGV4YW1wbGVzIGFuZCBkZWZhdWx0IGV4cHJlc3Npb25zLlxuICogQHBhcmFtIG9wdGlvbnMgQ29uZmlnIGlucHV0IGZvciB0aGUgVHlwZVNjcmlwdCBzbmlwcGV0IHN1cHBvcnQuXG4gKiBAcGFyYW0gb3B0aW9ucy5kaXNhYmxlVHlwZUNoZWNrZWRSdWxlcyBSdWxlIG92ZXJyaWRlcyB0aGF0IGRpc2FibGUgdHlwZWQtb25seSBjaGVja3MuXG4gKiBAcGFyYW0gb3B0aW9ucy5nZXRKc2RvY1Byb2Nlc3NvclBsdWdpbiBVcHN0cmVhbSBwcm9jZXNzb3IgZmFjdG9yeSB3aGVuIHByZXNlbnQuXG4gKiBAcGFyYW0gb3B0aW9ucy5wYXJzZXIgUGFyc2VyIHVzZWQgZm9yIGhvc3QgZmlsZXMgYW5kIHNuaXBwZXRzLlxuICogQHBhcmFtIG9wdGlvbnMudHlwZVNjcmlwdFBsdWdpbiBUeXBlU2NyaXB0IEVTTGludCBwbHVnaW4gaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBUaGUgcHJvY2Vzc29yIGFuZCB2aXJ0dWFsLWZpbGUgY29uZmlncy5cbiAqIEBleGFtcGxlXG4gKiBjb25zb2xlLmxvZyhidWlsZFR5cGVTY3JpcHRFeGFtcGxlQ29uZmlncyh7IGRpc2FibGVUeXBlQ2hlY2tlZFJ1bGVzOiB7fSwgZ2V0SnNkb2NQcm9jZXNzb3JQbHVnaW46IHZvaWQgMCwgcGFyc2VyOiB7fSBhcyBQYXJzZXIsIHR5cGVTY3JpcHRQbHVnaW46IHt9IGFzIFR5cGVTY3JpcHRQbHVnaW4gfSkubGVuZ3RoKTtcbiAqL1xuZnVuY3Rpb24gYnVpbGRUeXBlU2NyaXB0RXhhbXBsZUNvbmZpZ3Moe1xuICBkaXNhYmxlVHlwZUNoZWNrZWRSdWxlcyxcbiAgZ2V0SnNkb2NQcm9jZXNzb3JQbHVnaW4sXG4gIHBhcnNlcixcbiAgdHlwZVNjcmlwdFBsdWdpbixcbn06IEJ1aWxkVHlwZVNjcmlwdEV4YW1wbGVDb25maWdPcHRpb25zKTogTGludGVyLkNvbmZpZ1tdIHtcbiAgaWYgKGdldEpzZG9jUHJvY2Vzc29yUGx1Z2luID09PSB2b2lkIDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICByZXR1cm4gW1xuICAgIGJ1aWxkVHlwZVNjcmlwdFByb2Nlc3NvckNvbmZpZyhnZXRKc2RvY1Byb2Nlc3NvclBsdWdpbiwgcGFyc2VyKSxcbiAgICBidWlsZFR5cGVTY3JpcHRTbmlwcGV0UnVsZUNvbmZpZyh7XG4gICAgICBmaWxlczogdHlwZVNjcmlwdEV4YW1wbGVGaWxlcyxcbiAgICAgIG5hbWU6IFwianNkb2MvdHlwZXNjcmlwdC1leGFtcGxlcy9ydWxlc1wiLFxuICAgICAgcGFyc2VyLFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgLi4uZGlzYWJsZVR5cGVDaGVja2VkUnVsZXMsXG4gICAgICAgIC4uLmJ1aWxkRXhhbXBsZVNuaXBwZXRSdWxlcygpLFxuICAgICAgfSxcbiAgICAgIHR5cGVTY3JpcHRQbHVnaW4sXG4gICAgfSksXG4gICAgYnVpbGRUeXBlU2NyaXB0U25pcHBldFJ1bGVDb25maWcoe1xuICAgICAgZmlsZXM6IHR5cGVTY3JpcHREZWZhdWx0RXhwcmVzc2lvbkZpbGVzLFxuICAgICAgbmFtZTogXCJqc2RvYy90eXBlc2NyaXB0LWRlZmF1bHQtZXhwcmVzc2lvbnMvcnVsZXNcIixcbiAgICAgIHBhcnNlcixcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgIC4uLmRpc2FibGVUeXBlQ2hlY2tlZFJ1bGVzLFxuICAgICAgICAuLi5idWlsZERlZmF1bHRFeHByZXNzaW9uU25pcHBldFJ1bGVzKCksXG4gICAgICB9LFxuICAgICAgdHlwZVNjcmlwdFBsdWdpbixcbiAgICB9KSxcbiAgXTtcbn1cblxuLyoqXG4gKiBCdWlsZCB0aGUgcHJvY2Vzc29yIGNvbmZpZyBmb3IgVHlwZVNjcmlwdCBzb3VyY2UgZmlsZXMuXG4gKiBAcGFyYW0gZ2V0SnNkb2NQcm9jZXNzb3JQbHVnaW4gVXBzdHJlYW0gSlNEb2MgcHJvY2Vzc29yIGZhY3RvcnkuXG4gKiBAcGFyYW0gcGFyc2VyIFBhcnNlciB1c2VkIGZvciBob3N0IFR5cGVTY3JpcHQgZmlsZXMuXG4gKiBAcmV0dXJucyBUaGUgcHJvY2Vzc29yLWJhY2tlZCBFU0xpbnQgY29uZmlnIGVudHJ5LlxuICogQGV4YW1wbGVcbiAqIGNvbnNvbGUubG9nKGJ1aWxkVHlwZVNjcmlwdFByb2Nlc3NvckNvbmZpZygoKF9jb25maWcpID0+ICh7IHByb2Nlc3NvcnM6IHsgZXhhbXBsZXM6IHt9IH0gfSkpIGFzIEpzZG9jUHJvY2Vzc29yUGx1Z2luRmFjdG9yeSwge30gYXMgUGFyc2VyKS5wcm9jZXNzb3IpO1xuICovXG5mdW5jdGlvbiBidWlsZFR5cGVTY3JpcHRQcm9jZXNzb3JDb25maWcoXG4gIGdldEpzZG9jUHJvY2Vzc29yUGx1Z2luOiBKc2RvY1Byb2Nlc3NvclBsdWdpbkZhY3RvcnksXG4gIHBhcnNlcjogUGFyc2VyLFxuKTogTGludGVyLkNvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgZmlsZXM6IHR5cGVTY3JpcHRTb3VyY2VGaWxlcyxcbiAgICBuYW1lOiBcImpzZG9jL3R5cGVzY3JpcHQtZXhhbXBsZXMtYW5kLWRlZmF1bHQtZXhwcmVzc2lvbnMvcHJvY2Vzc29yXCIsXG4gICAgcGx1Z2luczoge1xuICAgICAgZXhhbXBsZXM6IGNyZWF0ZVdyYXBwZWRKc2RvY1Byb2Nlc3NvclBsdWdpbih7XG4gICAgICAgIGNoZWNrRGVmYXVsdHM6IHRydWUsXG4gICAgICAgIGNoZWNrUGFyYW1zOiB0cnVlLFxuICAgICAgICBjaGVja1Byb3BlcnRpZXM6IHRydWUsXG4gICAgICAgIGdldEpzZG9jUHJvY2Vzc29yUGx1Z2luLFxuICAgICAgICBwYXJzZXIsXG4gICAgICAgIHNvdXJjZVR5cGU6IFwibW9kdWxlXCIsXG4gICAgICB9KSxcbiAgICB9LFxuICAgIHByb2Nlc3NvcjogXCJleGFtcGxlcy9leGFtcGxlc1wiLFxuICB9O1xufVxuXG4vKipcbiAqIEJ1aWxkIGxhbmd1YWdlIG9wdGlvbnMgZm9yIGV4dHJhY3RlZCBUeXBlU2NyaXB0IHNuaXBwZXRzLlxuICogQHBhcmFtIHBhcnNlciBQYXJzZXIgdXNlZCBmb3Igc25pcHBldCBmaWxlcy5cbiAqIEByZXR1cm5zIFRoZSBsYW5ndWFnZSBvcHRpb25zIGZvciB2aXJ0dWFsIHNuaXBwZXQgZmlsZXMuXG4gKiBAZXhhbXBsZVxuICogY29uc29sZS5sb2coYnVpbGRUeXBlU2NyaXB0U25pcHBldExhbmd1YWdlT3B0aW9ucyh7fSBhcyBQYXJzZXIpLnNvdXJjZVR5cGUpO1xuICovXG5mdW5jdGlvbiBidWlsZFR5cGVTY3JpcHRTbmlwcGV0TGFuZ3VhZ2VPcHRpb25zKFxuICBwYXJzZXI6IFBhcnNlcixcbik6IE5vbk51bGxhYmxlPExpbnRlci5Db25maWdbXCJsYW5ndWFnZU9wdGlvbnNcIl0+IHtcbiAgcmV0dXJuIHtcbiAgICBwYXJzZXIsXG4gICAgcGFyc2VyT3B0aW9uczoge1xuICAgICAgcHJvamVjdFNlcnZpY2U6IGZhbHNlLFxuICAgIH0sXG4gICAgc291cmNlVHlwZTogXCJtb2R1bGVcIixcbiAgfTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIFR5cGVTY3JpcHQgc25pcHBldCBydWxlIGNvbmZpZyBmb3IgdmlydHVhbCBmaWxlcy5cbiAqIEBwYXJhbSBvcHRpb25zIENvbmZpZyBpbnB1dCBmb3IgdGhlIHNuaXBwZXQgcnVsZSBibG9jay5cbiAqIEBwYXJhbSBvcHRpb25zLmZpbGVzIFZpcnR1YWwgZmlsZSBnbG9icyB0YXJnZXRlZCBieSB0aGUgY29uZmlnLlxuICogQHBhcmFtIG9wdGlvbnMubmFtZSBDb25maWcgbmFtZSBzaG93biBpbiBFU0xpbnQgZGlhZ25vc3RpY3MuXG4gKiBAcGFyYW0gb3B0aW9ucy5wYXJzZXIgUGFyc2VyIHVzZWQgZm9yIGV4dHJhY3RlZCBzbmlwcGV0IGNvbnRlbnQuXG4gKiBAcGFyYW0gb3B0aW9ucy5ydWxlcyBSdWxlIG92ZXJyaWRlcyBhcHBsaWVkIHRvIHRoZSB2aXJ0dWFsIHNuaXBwZXQgZmlsZXMuXG4gKiBAcGFyYW0gb3B0aW9ucy50eXBlU2NyaXB0UGx1Z2luIFR5cGVTY3JpcHQgRVNMaW50IHBsdWdpbiBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIFRoZSBFU0xpbnQgY29uZmlnIGZvciB0aGUgdmlydHVhbCBzbmlwcGV0IGZpbGVzLlxuICogQGV4YW1wbGVcbiAqIGNvbnNvbGUubG9nKGJ1aWxkVHlwZVNjcmlwdFNuaXBwZXRSdWxlQ29uZmlnKHsgZmlsZXM6IFtcInZpcnR1YWwtZXhhbXBsZS1maWxlXCJdLCBuYW1lOiBcImV4YW1wbGVcIiwgcGFyc2VyOiB7fSBhcyBQYXJzZXIsIHJ1bGVzOiB7fSwgdHlwZVNjcmlwdFBsdWdpbjoge30gYXMgVHlwZVNjcmlwdFBsdWdpbiB9KS5uYW1lKTtcbiAqL1xuZnVuY3Rpb24gYnVpbGRUeXBlU2NyaXB0U25pcHBldFJ1bGVDb25maWcoe1xuICBmaWxlcyxcbiAgbmFtZSxcbiAgcGFyc2VyLFxuICBydWxlcyxcbiAgdHlwZVNjcmlwdFBsdWdpbixcbn06IFR5cGVTY3JpcHRTbmlwcGV0UnVsZUNvbmZpZ09wdGlvbnMpOiBMaW50ZXIuQ29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICBmaWxlcyxcbiAgICBsYW5ndWFnZU9wdGlvbnM6IGJ1aWxkVHlwZVNjcmlwdFNuaXBwZXRMYW5ndWFnZU9wdGlvbnMocGFyc2VyKSxcbiAgICBuYW1lLFxuICAgIHBsdWdpbnM6IHtcbiAgICAgIFwiQHR5cGVzY3JpcHQtZXNsaW50XCI6IHR5cGVTY3JpcHRQbHVnaW4sXG4gICAgfSxcbiAgICBydWxlcyxcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIHRoZSBUeXBlU2NyaXB0IHJ1bGUgb3ZlcnJpZGVzIHRoYXQgZGlzYWJsZSB0eXBlZC1vbmx5IGxpbnRpbmcgZm9yIHNuaXBwZXRzLlxuICogQHBhcmFtIHR5cGVTY3JpcHRDb25maWdzIFRoZSBleHBvcnRlZCBUeXBlU2NyaXB0IEVTTGludCBjb25maWcgbWFwLlxuICogQHJldHVybnMgVGhlIGRpc2FibGUtdHlwZS1jaGVja2VkIHJ1bGUgb3ZlcnJpZGVzLlxuICogQGV4YW1wbGVcbiAqIGNvbnNvbGUubG9nKHJlc29sdmVEaXNhYmxlVHlwZUNoZWNrZWRSdWxlcyh7IGRpc2FibGVUeXBlQ2hlY2tlZDogeyBydWxlczogeyBleGFtcGxlOiBcIm9mZlwiIH0gfSB9IGFzIFR5cGVTY3JpcHRDb25maWdzKS5leGFtcGxlKTtcbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZURpc2FibGVUeXBlQ2hlY2tlZFJ1bGVzKFxuICB0eXBlU2NyaXB0Q29uZmlnczogVHlwZVNjcmlwdENvbmZpZ3MsXG4pOiBMaW50ZXIuUnVsZXNSZWNvcmQge1xuICByZXR1cm4gKHR5cGVTY3JpcHRDb25maWdzLmRpc2FibGVUeXBlQ2hlY2tlZC5ydWxlcyA/P1xuICAgIHt9KSBhcyBMaW50ZXIuUnVsZXNSZWNvcmQ7XG59XG5cbi8qKlxuICogUmVzb2x2ZSB0aGUgb3B0aW9uYWwgcHJvY2Vzc29yIGZhY3RvcnkgZnJvbSB0aGUgSlNEb2MgcGx1Z2luIG1vZHVsZS5cbiAqIEBwYXJhbSBqc2RvY01vZHVsZSBUaGUgbG9hZGVkIEpTRG9jIHBsdWdpbiBtb2R1bGUuXG4gKiBAcmV0dXJucyBUaGUgcHJvY2Vzc29yIGZhY3Rvcnkgd2hlbiB0aGUgbW9kdWxlIGV4cG9ydHMgaXQuXG4gKiBAZXhhbXBsZVxuICogY29uc29sZS5sb2cocmVzb2x2ZUpzZG9jUHJvY2Vzc29yUGx1Z2luKHt9KSA9PT0gdm9pZCAwKTtcbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUpzZG9jUHJvY2Vzc29yUGx1Z2luKFxuICBqc2RvY01vZHVsZTogUmVhZG9ubHk8e1xuICAgIC8qKiBPcHRpb25hbCBleHBvcnRlZCBKU0RvYyBwcm9jZXNzb3IgZmFjdG9yeS4gKi9cbiAgICBnZXRKc2RvY1Byb2Nlc3NvclBsdWdpbj86IEpzZG9jUHJvY2Vzc29yUGx1Z2luRmFjdG9yeTtcbiAgfT4sXG4pOiBKc2RvY1Byb2Nlc3NvclBsdWdpbkZhY3RvcnkgfCB1bmRlZmluZWQge1xuICByZXR1cm4gXCJnZXRKc2RvY1Byb2Nlc3NvclBsdWdpblwiIGluIGpzZG9jTW9kdWxlXG4gICAgPyBqc2RvY01vZHVsZS5nZXRKc2RvY1Byb2Nlc3NvclBsdWdpblxuICAgIDogdm9pZCAwO1xufVxuXG5leHBvcnQge1xuICBidWlsZFR5cGVTY3JpcHRFeGFtcGxlQ29uZmlncyxcbiAgcmVzb2x2ZURpc2FibGVUeXBlQ2hlY2tlZFJ1bGVzLFxuICByZXNvbHZlSnNkb2NQcm9jZXNzb3JQbHVnaW4sXG59O1xuZXhwb3J0IHR5cGUgeyBQYXJzZXIsIFR5cGVTY3JpcHRDb25maWdzLCBUeXBlU2NyaXB0UGx1Z2luIH07XG4iXX0=
@@ -1,63 +0,0 @@
1
- import type { Linter } from "eslint";
2
- import type { getJsdocProcessorPlugin as getJsdocProcessorPluginType } from "eslint-plugin-jsdoc";
3
- import type { parser as parserType } from "typescript-eslint";
4
- /** Options for creating the wrapped JSDoc processor plugin. */
5
- interface CreateWrappedJsdocProcessorPluginOptions {
6
- /** Whether to lint default value snippets. */
7
- checkDefaults: boolean;
8
- /** Whether to lint parameter default snippets. */
9
- checkParams: boolean;
10
- /** Whether to lint property default snippets. */
11
- checkProperties: boolean;
12
- /** Upstream JSDoc processor factory. */
13
- getJsdocProcessorPlugin: JsdocProcessorPluginFactory;
14
- /** Parser passed through to the upstream processor. */
15
- parser: Parser;
16
- /** Source type for extracted snippets. */
17
- sourceType: "module" | "script";
18
- }
19
- /** Minimal upstream example processor contract used by the wrapper. */
20
- interface IExampleProcessor {
21
- /** Optional processor metadata. */
22
- meta?: IProcessorMeta;
23
- /** Remap virtual-file lint messages back onto the host file. */
24
- postprocess: (messages: Linter.LintMessage[][], filename: string) => Linter.LintMessage[];
25
- /** Extract virtual snippet files from a host file. */
26
- preprocess: (text: string, filename: string) => ProcessorFile[];
27
- /** Whether the upstream processor supports autofix. */
28
- supportsAutofix?: boolean;
29
- }
30
- /** Minimal meta shape used by the wrapped processor. */
31
- interface IProcessorMeta {
32
- /** Processor name shown to ESLint. */
33
- name?: string;
34
- /** Processor version shown to ESLint. */
35
- version?: string;
36
- }
37
- /** Minimal upstream plugin contract used by the wrapper. */
38
- interface IProcessorPlugin {
39
- /** Optional plugin metadata. */
40
- meta?: IProcessorMeta;
41
- /** Available processors exported by the plugin. */
42
- processors?: {
43
- /** JSDoc example/default-expression processor. */
44
- examples?: Partial<IExampleProcessor>;
45
- };
46
- }
47
- /** Function signature for the upstream JSDoc processor factory. */
48
- type JsdocProcessorPluginFactory = typeof getJsdocProcessorPluginType;
49
- /** Parser accepted by the upstream JSDoc processor. */
50
- type Parser = typeof parserType;
51
- /** Virtual files emitted by a processor preprocess step. */
52
- type ProcessorFile = Linter.ProcessorFile | string;
53
- /**
54
- * Create a wrapped JSDoc processor plugin with per-file upstream isolation.
55
- * @param options The wrapper options.
56
- * @returns A plugin whose examples processor uses fresh upstream state per file.
57
- * @example
58
- * console.log(createWrappedJsdocProcessorPlugin({ checkDefaults: true, checkParams: true, checkProperties: true, getJsdocProcessorPlugin: (() => ({ processors: { examples: {} } })) as JsdocProcessorPluginFactory, parser: {} as Parser, sourceType: "module" }).processors?.examples !== void 0);
59
- */
60
- declare function createWrappedJsdocProcessorPlugin(options: CreateWrappedJsdocProcessorPluginOptions): IProcessorPlugin;
61
- export { createWrappedJsdocProcessorPlugin };
62
- export type { JsdocProcessorPluginFactory, Parser };
63
- //# sourceMappingURL=jsdoc-processor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"jsdoc-processor.d.ts","sourceRoot":"","sources":["../../src/docs/jsdoc-processor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,KAAK,EAAE,uBAAuB,IAAI,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAClG,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE9D,+DAA+D;AAC/D,UAAU,wCAAwC;IAChD,8CAA8C;IAC9C,aAAa,EAAE,OAAO,CAAC;IAEvB,kDAAkD;IAClD,WAAW,EAAE,OAAO,CAAC;IAErB,iDAAiD;IACjD,eAAe,EAAE,OAAO,CAAC;IAEzB,wCAAwC;IACxC,uBAAuB,EAAE,2BAA2B,CAAC;IAErD,uDAAuD;IACvD,MAAM,EAAE,MAAM,CAAC;IAEf,0CAA0C;IAC1C,UAAU,EAAE,QAAQ,GAAG,QAAQ,CAAC;CACjC;AAED,uEAAuE;AACvE,UAAU,iBAAiB;IACzB,mCAAmC;IACnC,IAAI,CAAC,EAAE,cAAc,CAAC;IAEtB,gEAAgE;IAChE,WAAW,EAAE,CACX,QAAQ,EAAE,MAAM,CAAC,WAAW,EAAE,EAAE,EAChC,QAAQ,EAAE,MAAM,KACb,MAAM,CAAC,WAAW,EAAE,CAAC;IAE1B,sDAAsD;IACtD,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,aAAa,EAAE,CAAC;IAEhE,uDAAuD;IACvD,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,wDAAwD;AACxD,UAAU,cAAc;IACtB,sCAAsC;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,yCAAyC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,4DAA4D;AAC5D,UAAU,gBAAgB;IACxB,gCAAgC;IAChC,IAAI,CAAC,EAAE,cAAc,CAAC;IAEtB,mDAAmD;IACnD,UAAU,CAAC,EAAE;QACX,kDAAkD;QAClD,QAAQ,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;KACvC,CAAC;CACH;AAED,mEAAmE;AACnE,KAAK,2BAA2B,GAAG,OAAO,2BAA2B,CAAC;AAEtE,uDAAuD;AACvD,KAAK,MAAM,GAAG,OAAO,UAAU,CAAC;AAEhC,4DAA4D;AAC5D,KAAK,aAAa,GAAG,MAAM,CAAC,aAAa,GAAG,MAAM,CAAC;AAwBnD;;;;;;GAMG;AACH,iBAAS,iCAAiC,CACxC,OAAO,EAAE,wCAAwC,GAChD,gBAAgB,CA0ClB;AA2FD,OAAO,EAAE,iCAAiC,EAAE,CAAC;AAC7C,YAAY,EAAE,2BAA2B,EAAE,MAAM,EAAE,CAAC"}
@@ -1,112 +0,0 @@
1
- /**
2
- * Build the options object forwarded to the upstream processor factory.
3
- * @param options The wrapper options.
4
- * @returns A shallow options object for the upstream processor.
5
- * @example
6
- * console.log(buildUpstreamProcessorOptions({ checkDefaults: true, checkParams: true, checkProperties: true, getJsdocProcessorPlugin: (() => ({ processors: { examples: {} } })) as JsdocProcessorPluginFactory, parser: {} as Parser, sourceType: "module" }).sourceType);
7
- */
8
- function buildUpstreamProcessorOptions(options) {
9
- return {
10
- checkDefaults: options.checkDefaults,
11
- checkParams: options.checkParams,
12
- checkProperties: options.checkProperties,
13
- parser: options.parser,
14
- sourceType: options.sourceType,
15
- };
16
- }
17
- /**
18
- * Create a wrapped JSDoc processor plugin with per-file upstream isolation.
19
- * @param options The wrapper options.
20
- * @returns A plugin whose examples processor uses fresh upstream state per file.
21
- * @example
22
- * console.log(createWrappedJsdocProcessorPlugin({ checkDefaults: true, checkParams: true, checkProperties: true, getJsdocProcessorPlugin: (() => ({ processors: { examples: {} } })) as JsdocProcessorPluginFactory, parser: {} as Parser, sourceType: "module" }).processors?.examples !== void 0);
23
- */
24
- function createWrappedJsdocProcessorPlugin(options) {
25
- const upstreamOptions = buildUpstreamProcessorOptions(options);
26
- const basePlugin = options.getJsdocProcessorPlugin(upstreamOptions);
27
- const baseProcessor = resolveExamplesProcessor(basePlugin, false);
28
- const processorsByFilename = new Map();
29
- return {
30
- ...(basePlugin.meta === void 0 ? {} : { meta: basePlugin.meta }),
31
- processors: {
32
- examples: {
33
- ...(baseProcessor.meta === void 0 ? {} : { meta: baseProcessor.meta }),
34
- postprocess(messages, filename) {
35
- return dequeueProcessor(processorsByFilename, filename).postprocess(messages, filename);
36
- },
37
- preprocess(text, filename) {
38
- const plugin = options.getJsdocProcessorPlugin(upstreamOptions);
39
- const processor = resolveExamplesProcessor(plugin, true);
40
- const processedFiles = processor.preprocess(text, filename);
41
- queueProcessor(processorsByFilename, filename, processor);
42
- return processedFiles;
43
- },
44
- ...(baseProcessor.supportsAutofix === void 0
45
- ? {}
46
- : { supportsAutofix: baseProcessor.supportsAutofix }),
47
- },
48
- },
49
- };
50
- }
51
- /**
52
- * Dequeue the next processor instance for a filename.
53
- * @param processorsByFilename Queued processors keyed by source filename.
54
- * @param filename The host filename for the processor instance.
55
- * @returns The next upstream processor instance.
56
- * @throws {Error} Thrown when postprocess is called without a queued processor.
57
- * @example
58
- * console.log("dequeueProcessor");
59
- */
60
- function dequeueProcessor(processorsByFilename, filename) {
61
- const queuedProcessors = processorsByFilename.get(filename);
62
- if (queuedProcessors === void 0) {
63
- throw new Error(`Wrapped JSDoc processor lost lifecycle state for ${filename}`);
64
- }
65
- const [processor] = queuedProcessors;
66
- if (queuedProcessors.length === 1) {
67
- processorsByFilename.delete(filename);
68
- }
69
- else {
70
- queuedProcessors.shift();
71
- }
72
- return processor;
73
- }
74
- /**
75
- * Queue a processor instance for a later postprocess call.
76
- * @param processorsByFilename Queued processors keyed by source filename.
77
- * @param filename The host filename for the processor instance.
78
- * @param processor The upstream processor instance.
79
- * @example
80
- * console.log("queueProcessor");
81
- */
82
- function queueProcessor(processorsByFilename, filename, processor) {
83
- const queuedProcessors = processorsByFilename.get(filename);
84
- if (queuedProcessors === void 0) {
85
- processorsByFilename.set(filename, [processor]);
86
- return;
87
- }
88
- queuedProcessors.push(processor);
89
- }
90
- /**
91
- * Resolve the upstream examples processor from a plugin instance.
92
- * @param plugin The upstream plugin instance.
93
- * @param shouldRequireLifecycleMethods Whether preprocess/postprocess must be present.
94
- * @returns The upstream examples processor.
95
- * @throws {TypeError} Thrown when the upstream plugin omits the examples processor or its lifecycle methods.
96
- * @example
97
- * console.log(resolveExamplesProcessor({ processors: { examples: {} } }, false) !== void 0);
98
- */
99
- function resolveExamplesProcessor(plugin, shouldRequireLifecycleMethods) {
100
- const processor = plugin.processors?.examples;
101
- if (processor === void 0) {
102
- throw new TypeError("eslint-plugin-jsdoc did not provide processors.examples");
103
- }
104
- if (shouldRequireLifecycleMethods &&
105
- (typeof processor.preprocess !== "function" ||
106
- typeof processor.postprocess !== "function")) {
107
- throw new TypeError("eslint-plugin-jsdoc processors.examples must provide preprocess and postprocess");
108
- }
109
- return processor;
110
- }
111
- export { createWrappedJsdocProcessorPlugin };
112
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNkb2MtcHJvY2Vzc29yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RvY3MvanNkb2MtcHJvY2Vzc29yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQTRFQTs7Ozs7O0dBTUc7QUFDSCxTQUFTLDZCQUE2QixDQUNwQyxPQUFpRDtJQUVqRCxPQUFPO1FBQ0wsYUFBYSxFQUFFLE9BQU8sQ0FBQyxhQUFhO1FBQ3BDLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVztRQUNoQyxlQUFlLEVBQUUsT0FBTyxDQUFDLGVBQWU7UUFDeEMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1FBQ3RCLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVTtLQUMvQixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQVMsaUNBQWlDLENBQ3hDLE9BQWlEO0lBRWpELE1BQU0sZUFBZSxHQUFHLDZCQUE2QixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQy9ELE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyx1QkFBdUIsQ0FDaEQsZUFBZSxDQUNJLENBQUM7SUFDdEIsTUFBTSxhQUFhLEdBQUcsd0JBQXdCLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2xFLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxHQUFHLEVBQTBCLENBQUM7SUFFL0QsT0FBTztRQUNMLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNoRSxVQUFVLEVBQUU7WUFDVixRQUFRLEVBQUU7Z0JBQ1IsR0FBRyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN0RSxXQUFXLENBQ1QsUUFBZ0MsRUFDaEMsUUFBZ0I7b0JBRWhCLE9BQU8sZ0JBQWdCLENBQUMsb0JBQW9CLEVBQUUsUUFBUSxDQUFDLENBQUMsV0FBVyxDQUNqRSxRQUFRLEVBQ1IsUUFBUSxDQUNULENBQUM7Z0JBQ0osQ0FBQztnQkFDRCxVQUFVLENBQUMsSUFBWSxFQUFFLFFBQWdCO29CQUN2QyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsdUJBQXVCLENBQzVDLGVBQWUsQ0FDSSxDQUFDO29CQUN0QixNQUFNLFNBQVMsR0FBRyx3QkFBd0IsQ0FDeEMsTUFBTSxFQUNOLElBQUksQ0FDZ0IsQ0FBQztvQkFDdkIsTUFBTSxjQUFjLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7b0JBRTVELGNBQWMsQ0FBQyxvQkFBb0IsRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7b0JBRTFELE9BQU8sY0FBYyxDQUFDO2dCQUN4QixDQUFDO2dCQUNELEdBQUcsQ0FBQyxhQUFhLENBQUMsZUFBZSxLQUFLLEtBQUssQ0FBQztvQkFDMUMsQ0FBQyxDQUFDLEVBQUU7b0JBQ0osQ0FBQyxDQUFDLEVBQUUsZUFBZSxFQUFFLGFBQWEsQ0FBQyxlQUFlLEVBQUUsQ0FBQzthQUN4RDtTQUNGO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQVMsZ0JBQWdCLENBQ3ZCLG9CQUFpRCxFQUNqRCxRQUFnQjtJQUVoQixNQUFNLGdCQUFnQixHQUFHLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUU1RCxJQUFJLGdCQUFnQixLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDaEMsTUFBTSxJQUFJLEtBQUssQ0FDYixvREFBb0QsUUFBUSxFQUFFLENBQy9ELENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLGdCQUFnQixDQUFDO0lBRXJDLElBQUksZ0JBQWdCLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ2xDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN4QyxDQUFDO1NBQU0sQ0FBQztRQUNOLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQVMsY0FBYyxDQUNyQixvQkFBaUQsRUFDakQsUUFBZ0IsRUFDaEIsU0FBNEI7SUFFNUIsTUFBTSxnQkFBZ0IsR0FBRyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFNUQsSUFBSSxnQkFBZ0IsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ2hDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ2hELE9BQU87SUFDVCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ25DLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQVMsd0JBQXdCLENBQy9CLE1BQXdCLEVBQ3hCLDZCQUFzQztJQUV0QyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQztJQUU5QyxJQUFJLFNBQVMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sSUFBSSxTQUFTLENBQ2pCLHlEQUF5RCxDQUMxRCxDQUFDO0lBQ0osQ0FBQztJQUVELElBQ0UsNkJBQTZCO1FBQzdCLENBQUMsT0FBTyxTQUFTLENBQUMsVUFBVSxLQUFLLFVBQVU7WUFDekMsT0FBTyxTQUFTLENBQUMsV0FBVyxLQUFLLFVBQVUsQ0FBQyxFQUM5QyxDQUFDO1FBQ0QsTUFBTSxJQUFJLFNBQVMsQ0FDakIsaUZBQWlGLENBQ2xGLENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQUVELE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBMaW50ZXIgfSBmcm9tIFwiZXNsaW50XCI7XG5pbXBvcnQgdHlwZSB7IGdldEpzZG9jUHJvY2Vzc29yUGx1Z2luIGFzIGdldEpzZG9jUHJvY2Vzc29yUGx1Z2luVHlwZSB9IGZyb20gXCJlc2xpbnQtcGx1Z2luLWpzZG9jXCI7XG5pbXBvcnQgdHlwZSB7IHBhcnNlciBhcyBwYXJzZXJUeXBlIH0gZnJvbSBcInR5cGVzY3JpcHQtZXNsaW50XCI7XG5cbi8qKiBPcHRpb25zIGZvciBjcmVhdGluZyB0aGUgd3JhcHBlZCBKU0RvYyBwcm9jZXNzb3IgcGx1Z2luLiAqL1xuaW50ZXJmYWNlIENyZWF0ZVdyYXBwZWRKc2RvY1Byb2Nlc3NvclBsdWdpbk9wdGlvbnMge1xuICAvKiogV2hldGhlciB0byBsaW50IGRlZmF1bHQgdmFsdWUgc25pcHBldHMuICovXG4gIGNoZWNrRGVmYXVsdHM6IGJvb2xlYW47XG5cbiAgLyoqIFdoZXRoZXIgdG8gbGludCBwYXJhbWV0ZXIgZGVmYXVsdCBzbmlwcGV0cy4gKi9cbiAgY2hlY2tQYXJhbXM6IGJvb2xlYW47XG5cbiAgLyoqIFdoZXRoZXIgdG8gbGludCBwcm9wZXJ0eSBkZWZhdWx0IHNuaXBwZXRzLiAqL1xuICBjaGVja1Byb3BlcnRpZXM6IGJvb2xlYW47XG5cbiAgLyoqIFVwc3RyZWFtIEpTRG9jIHByb2Nlc3NvciBmYWN0b3J5LiAqL1xuICBnZXRKc2RvY1Byb2Nlc3NvclBsdWdpbjogSnNkb2NQcm9jZXNzb3JQbHVnaW5GYWN0b3J5O1xuXG4gIC8qKiBQYXJzZXIgcGFzc2VkIHRocm91Z2ggdG8gdGhlIHVwc3RyZWFtIHByb2Nlc3Nvci4gKi9cbiAgcGFyc2VyOiBQYXJzZXI7XG5cbiAgLyoqIFNvdXJjZSB0eXBlIGZvciBleHRyYWN0ZWQgc25pcHBldHMuICovXG4gIHNvdXJjZVR5cGU6IFwibW9kdWxlXCIgfCBcInNjcmlwdFwiO1xufVxuXG4vKiogTWluaW1hbCB1cHN0cmVhbSBleGFtcGxlIHByb2Nlc3NvciBjb250cmFjdCB1c2VkIGJ5IHRoZSB3cmFwcGVyLiAqL1xuaW50ZXJmYWNlIElFeGFtcGxlUHJvY2Vzc29yIHtcbiAgLyoqIE9wdGlvbmFsIHByb2Nlc3NvciBtZXRhZGF0YS4gKi9cbiAgbWV0YT86IElQcm9jZXNzb3JNZXRhO1xuXG4gIC8qKiBSZW1hcCB2aXJ0dWFsLWZpbGUgbGludCBtZXNzYWdlcyBiYWNrIG9udG8gdGhlIGhvc3QgZmlsZS4gKi9cbiAgcG9zdHByb2Nlc3M6IChcbiAgICBtZXNzYWdlczogTGludGVyLkxpbnRNZXNzYWdlW11bXSxcbiAgICBmaWxlbmFtZTogc3RyaW5nLFxuICApID0+IExpbnRlci5MaW50TWVzc2FnZVtdO1xuXG4gIC8qKiBFeHRyYWN0IHZpcnR1YWwgc25pcHBldCBmaWxlcyBmcm9tIGEgaG9zdCBmaWxlLiAqL1xuICBwcmVwcm9jZXNzOiAodGV4dDogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nKSA9PiBQcm9jZXNzb3JGaWxlW107XG5cbiAgLyoqIFdoZXRoZXIgdGhlIHVwc3RyZWFtIHByb2Nlc3NvciBzdXBwb3J0cyBhdXRvZml4LiAqL1xuICBzdXBwb3J0c0F1dG9maXg/OiBib29sZWFuO1xufVxuXG4vKiogTWluaW1hbCBtZXRhIHNoYXBlIHVzZWQgYnkgdGhlIHdyYXBwZWQgcHJvY2Vzc29yLiAqL1xuaW50ZXJmYWNlIElQcm9jZXNzb3JNZXRhIHtcbiAgLyoqIFByb2Nlc3NvciBuYW1lIHNob3duIHRvIEVTTGludC4gKi9cbiAgbmFtZT86IHN0cmluZztcblxuICAvKiogUHJvY2Vzc29yIHZlcnNpb24gc2hvd24gdG8gRVNMaW50LiAqL1xuICB2ZXJzaW9uPzogc3RyaW5nO1xufVxuXG4vKiogTWluaW1hbCB1cHN0cmVhbSBwbHVnaW4gY29udHJhY3QgdXNlZCBieSB0aGUgd3JhcHBlci4gKi9cbmludGVyZmFjZSBJUHJvY2Vzc29yUGx1Z2luIHtcbiAgLyoqIE9wdGlvbmFsIHBsdWdpbiBtZXRhZGF0YS4gKi9cbiAgbWV0YT86IElQcm9jZXNzb3JNZXRhO1xuXG4gIC8qKiBBdmFpbGFibGUgcHJvY2Vzc29ycyBleHBvcnRlZCBieSB0aGUgcGx1Z2luLiAqL1xuICBwcm9jZXNzb3JzPzoge1xuICAgIC8qKiBKU0RvYyBleGFtcGxlL2RlZmF1bHQtZXhwcmVzc2lvbiBwcm9jZXNzb3IuICovXG4gICAgZXhhbXBsZXM/OiBQYXJ0aWFsPElFeGFtcGxlUHJvY2Vzc29yPjtcbiAgfTtcbn1cblxuLyoqIEZ1bmN0aW9uIHNpZ25hdHVyZSBmb3IgdGhlIHVwc3RyZWFtIEpTRG9jIHByb2Nlc3NvciBmYWN0b3J5LiAqL1xudHlwZSBKc2RvY1Byb2Nlc3NvclBsdWdpbkZhY3RvcnkgPSB0eXBlb2YgZ2V0SnNkb2NQcm9jZXNzb3JQbHVnaW5UeXBlO1xuXG4vKiogUGFyc2VyIGFjY2VwdGVkIGJ5IHRoZSB1cHN0cmVhbSBKU0RvYyBwcm9jZXNzb3IuICovXG50eXBlIFBhcnNlciA9IHR5cGVvZiBwYXJzZXJUeXBlO1xuXG4vKiogVmlydHVhbCBmaWxlcyBlbWl0dGVkIGJ5IGEgcHJvY2Vzc29yIHByZXByb2Nlc3Mgc3RlcC4gKi9cbnR5cGUgUHJvY2Vzc29yRmlsZSA9IExpbnRlci5Qcm9jZXNzb3JGaWxlIHwgc3RyaW5nO1xuXG4vKiogTm9uLWVtcHR5IHF1ZXVlIG9mIHByb2Nlc3NvciBpbnN0YW5jZXMgZm9yIG9uZSBmaWxlbmFtZS4gKi9cbnR5cGUgUHJvY2Vzc29yUXVldWUgPSBbSUV4YW1wbGVQcm9jZXNzb3IsIC4uLklFeGFtcGxlUHJvY2Vzc29yW11dO1xuXG4vKipcbiAqIEJ1aWxkIHRoZSBvcHRpb25zIG9iamVjdCBmb3J3YXJkZWQgdG8gdGhlIHVwc3RyZWFtIHByb2Nlc3NvciBmYWN0b3J5LlxuICogQHBhcmFtIG9wdGlvbnMgVGhlIHdyYXBwZXIgb3B0aW9ucy5cbiAqIEByZXR1cm5zIEEgc2hhbGxvdyBvcHRpb25zIG9iamVjdCBmb3IgdGhlIHVwc3RyZWFtIHByb2Nlc3Nvci5cbiAqIEBleGFtcGxlXG4gKiBjb25zb2xlLmxvZyhidWlsZFVwc3RyZWFtUHJvY2Vzc29yT3B0aW9ucyh7IGNoZWNrRGVmYXVsdHM6IHRydWUsIGNoZWNrUGFyYW1zOiB0cnVlLCBjaGVja1Byb3BlcnRpZXM6IHRydWUsIGdldEpzZG9jUHJvY2Vzc29yUGx1Z2luOiAoKCkgPT4gKHsgcHJvY2Vzc29yczogeyBleGFtcGxlczoge30gfSB9KSkgYXMgSnNkb2NQcm9jZXNzb3JQbHVnaW5GYWN0b3J5LCBwYXJzZXI6IHt9IGFzIFBhcnNlciwgc291cmNlVHlwZTogXCJtb2R1bGVcIiB9KS5zb3VyY2VUeXBlKTtcbiAqL1xuZnVuY3Rpb24gYnVpbGRVcHN0cmVhbVByb2Nlc3Nvck9wdGlvbnMoXG4gIG9wdGlvbnM6IENyZWF0ZVdyYXBwZWRKc2RvY1Byb2Nlc3NvclBsdWdpbk9wdGlvbnMsXG4pOiBQYXJhbWV0ZXJzPEpzZG9jUHJvY2Vzc29yUGx1Z2luRmFjdG9yeT5bMF0ge1xuICByZXR1cm4ge1xuICAgIGNoZWNrRGVmYXVsdHM6IG9wdGlvbnMuY2hlY2tEZWZhdWx0cyxcbiAgICBjaGVja1BhcmFtczogb3B0aW9ucy5jaGVja1BhcmFtcyxcbiAgICBjaGVja1Byb3BlcnRpZXM6IG9wdGlvbnMuY2hlY2tQcm9wZXJ0aWVzLFxuICAgIHBhcnNlcjogb3B0aW9ucy5wYXJzZXIsXG4gICAgc291cmNlVHlwZTogb3B0aW9ucy5zb3VyY2VUeXBlLFxuICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIHdyYXBwZWQgSlNEb2MgcHJvY2Vzc29yIHBsdWdpbiB3aXRoIHBlci1maWxlIHVwc3RyZWFtIGlzb2xhdGlvbi5cbiAqIEBwYXJhbSBvcHRpb25zIFRoZSB3cmFwcGVyIG9wdGlvbnMuXG4gKiBAcmV0dXJucyBBIHBsdWdpbiB3aG9zZSBleGFtcGxlcyBwcm9jZXNzb3IgdXNlcyBmcmVzaCB1cHN0cmVhbSBzdGF0ZSBwZXIgZmlsZS5cbiAqIEBleGFtcGxlXG4gKiBjb25zb2xlLmxvZyhjcmVhdGVXcmFwcGVkSnNkb2NQcm9jZXNzb3JQbHVnaW4oeyBjaGVja0RlZmF1bHRzOiB0cnVlLCBjaGVja1BhcmFtczogdHJ1ZSwgY2hlY2tQcm9wZXJ0aWVzOiB0cnVlLCBnZXRKc2RvY1Byb2Nlc3NvclBsdWdpbjogKCgpID0+ICh7IHByb2Nlc3NvcnM6IHsgZXhhbXBsZXM6IHt9IH0gfSkpIGFzIEpzZG9jUHJvY2Vzc29yUGx1Z2luRmFjdG9yeSwgcGFyc2VyOiB7fSBhcyBQYXJzZXIsIHNvdXJjZVR5cGU6IFwibW9kdWxlXCIgfSkucHJvY2Vzc29ycz8uZXhhbXBsZXMgIT09IHZvaWQgMCk7XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVdyYXBwZWRKc2RvY1Byb2Nlc3NvclBsdWdpbihcbiAgb3B0aW9uczogQ3JlYXRlV3JhcHBlZEpzZG9jUHJvY2Vzc29yUGx1Z2luT3B0aW9ucyxcbik6IElQcm9jZXNzb3JQbHVnaW4ge1xuICBjb25zdCB1cHN0cmVhbU9wdGlvbnMgPSBidWlsZFVwc3RyZWFtUHJvY2Vzc29yT3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3QgYmFzZVBsdWdpbiA9IG9wdGlvbnMuZ2V0SnNkb2NQcm9jZXNzb3JQbHVnaW4oXG4gICAgdXBzdHJlYW1PcHRpb25zLFxuICApIGFzIElQcm9jZXNzb3JQbHVnaW47XG4gIGNvbnN0IGJhc2VQcm9jZXNzb3IgPSByZXNvbHZlRXhhbXBsZXNQcm9jZXNzb3IoYmFzZVBsdWdpbiwgZmFsc2UpO1xuICBjb25zdCBwcm9jZXNzb3JzQnlGaWxlbmFtZSA9IG5ldyBNYXA8c3RyaW5nLCBQcm9jZXNzb3JRdWV1ZT4oKTtcblxuICByZXR1cm4ge1xuICAgIC4uLihiYXNlUGx1Z2luLm1ldGEgPT09IHZvaWQgMCA/IHt9IDogeyBtZXRhOiBiYXNlUGx1Z2luLm1ldGEgfSksXG4gICAgcHJvY2Vzc29yczoge1xuICAgICAgZXhhbXBsZXM6IHtcbiAgICAgICAgLi4uKGJhc2VQcm9jZXNzb3IubWV0YSA9PT0gdm9pZCAwID8ge30gOiB7IG1ldGE6IGJhc2VQcm9jZXNzb3IubWV0YSB9KSxcbiAgICAgICAgcG9zdHByb2Nlc3MoXG4gICAgICAgICAgbWVzc2FnZXM6IExpbnRlci5MaW50TWVzc2FnZVtdW10sXG4gICAgICAgICAgZmlsZW5hbWU6IHN0cmluZyxcbiAgICAgICAgKTogTGludGVyLkxpbnRNZXNzYWdlW10ge1xuICAgICAgICAgIHJldHVybiBkZXF1ZXVlUHJvY2Vzc29yKHByb2Nlc3NvcnNCeUZpbGVuYW1lLCBmaWxlbmFtZSkucG9zdHByb2Nlc3MoXG4gICAgICAgICAgICBtZXNzYWdlcyxcbiAgICAgICAgICAgIGZpbGVuYW1lLFxuICAgICAgICAgICk7XG4gICAgICAgIH0sXG4gICAgICAgIHByZXByb2Nlc3ModGV4dDogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nKTogUHJvY2Vzc29yRmlsZVtdIHtcbiAgICAgICAgICBjb25zdCBwbHVnaW4gPSBvcHRpb25zLmdldEpzZG9jUHJvY2Vzc29yUGx1Z2luKFxuICAgICAgICAgICAgdXBzdHJlYW1PcHRpb25zLFxuICAgICAgICAgICkgYXMgSVByb2Nlc3NvclBsdWdpbjtcbiAgICAgICAgICBjb25zdCBwcm9jZXNzb3IgPSByZXNvbHZlRXhhbXBsZXNQcm9jZXNzb3IoXG4gICAgICAgICAgICBwbHVnaW4sXG4gICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICkgYXMgSUV4YW1wbGVQcm9jZXNzb3I7XG4gICAgICAgICAgY29uc3QgcHJvY2Vzc2VkRmlsZXMgPSBwcm9jZXNzb3IucHJlcHJvY2Vzcyh0ZXh0LCBmaWxlbmFtZSk7XG5cbiAgICAgICAgICBxdWV1ZVByb2Nlc3Nvcihwcm9jZXNzb3JzQnlGaWxlbmFtZSwgZmlsZW5hbWUsIHByb2Nlc3Nvcik7XG5cbiAgICAgICAgICByZXR1cm4gcHJvY2Vzc2VkRmlsZXM7XG4gICAgICAgIH0sXG4gICAgICAgIC4uLihiYXNlUHJvY2Vzc29yLnN1cHBvcnRzQXV0b2ZpeCA9PT0gdm9pZCAwXG4gICAgICAgICAgPyB7fVxuICAgICAgICAgIDogeyBzdXBwb3J0c0F1dG9maXg6IGJhc2VQcm9jZXNzb3Iuc3VwcG9ydHNBdXRvZml4IH0pLFxuICAgICAgfSxcbiAgICB9LFxuICB9O1xufVxuXG4vKipcbiAqIERlcXVldWUgdGhlIG5leHQgcHJvY2Vzc29yIGluc3RhbmNlIGZvciBhIGZpbGVuYW1lLlxuICogQHBhcmFtIHByb2Nlc3NvcnNCeUZpbGVuYW1lIFF1ZXVlZCBwcm9jZXNzb3JzIGtleWVkIGJ5IHNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSBmaWxlbmFtZSBUaGUgaG9zdCBmaWxlbmFtZSBmb3IgdGhlIHByb2Nlc3NvciBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIFRoZSBuZXh0IHVwc3RyZWFtIHByb2Nlc3NvciBpbnN0YW5jZS5cbiAqIEB0aHJvd3Mge0Vycm9yfSBUaHJvd24gd2hlbiBwb3N0cHJvY2VzcyBpcyBjYWxsZWQgd2l0aG91dCBhIHF1ZXVlZCBwcm9jZXNzb3IuXG4gKiBAZXhhbXBsZVxuICogY29uc29sZS5sb2coXCJkZXF1ZXVlUHJvY2Vzc29yXCIpO1xuICovXG5mdW5jdGlvbiBkZXF1ZXVlUHJvY2Vzc29yKFxuICBwcm9jZXNzb3JzQnlGaWxlbmFtZTogTWFwPHN0cmluZywgUHJvY2Vzc29yUXVldWU+LFxuICBmaWxlbmFtZTogc3RyaW5nLFxuKTogSUV4YW1wbGVQcm9jZXNzb3Ige1xuICBjb25zdCBxdWV1ZWRQcm9jZXNzb3JzID0gcHJvY2Vzc29yc0J5RmlsZW5hbWUuZ2V0KGZpbGVuYW1lKTtcblxuICBpZiAocXVldWVkUHJvY2Vzc29ycyA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFdyYXBwZWQgSlNEb2MgcHJvY2Vzc29yIGxvc3QgbGlmZWN5Y2xlIHN0YXRlIGZvciAke2ZpbGVuYW1lfWAsXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IFtwcm9jZXNzb3JdID0gcXVldWVkUHJvY2Vzc29ycztcblxuICBpZiAocXVldWVkUHJvY2Vzc29ycy5sZW5ndGggPT09IDEpIHtcbiAgICBwcm9jZXNzb3JzQnlGaWxlbmFtZS5kZWxldGUoZmlsZW5hbWUpO1xuICB9IGVsc2Uge1xuICAgIHF1ZXVlZFByb2Nlc3NvcnMuc2hpZnQoKTtcbiAgfVxuXG4gIHJldHVybiBwcm9jZXNzb3I7XG59XG5cbi8qKlxuICogUXVldWUgYSBwcm9jZXNzb3IgaW5zdGFuY2UgZm9yIGEgbGF0ZXIgcG9zdHByb2Nlc3MgY2FsbC5cbiAqIEBwYXJhbSBwcm9jZXNzb3JzQnlGaWxlbmFtZSBRdWV1ZWQgcHJvY2Vzc29ycyBrZXllZCBieSBzb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0gZmlsZW5hbWUgVGhlIGhvc3QgZmlsZW5hbWUgZm9yIHRoZSBwcm9jZXNzb3IgaW5zdGFuY2UuXG4gKiBAcGFyYW0gcHJvY2Vzc29yIFRoZSB1cHN0cmVhbSBwcm9jZXNzb3IgaW5zdGFuY2UuXG4gKiBAZXhhbXBsZVxuICogY29uc29sZS5sb2coXCJxdWV1ZVByb2Nlc3NvclwiKTtcbiAqL1xuZnVuY3Rpb24gcXVldWVQcm9jZXNzb3IoXG4gIHByb2Nlc3NvcnNCeUZpbGVuYW1lOiBNYXA8c3RyaW5nLCBQcm9jZXNzb3JRdWV1ZT4sXG4gIGZpbGVuYW1lOiBzdHJpbmcsXG4gIHByb2Nlc3NvcjogSUV4YW1wbGVQcm9jZXNzb3IsXG4pOiB2b2lkIHtcbiAgY29uc3QgcXVldWVkUHJvY2Vzc29ycyA9IHByb2Nlc3NvcnNCeUZpbGVuYW1lLmdldChmaWxlbmFtZSk7XG5cbiAgaWYgKHF1ZXVlZFByb2Nlc3NvcnMgPT09IHZvaWQgMCkge1xuICAgIHByb2Nlc3NvcnNCeUZpbGVuYW1lLnNldChmaWxlbmFtZSwgW3Byb2Nlc3Nvcl0pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHF1ZXVlZFByb2Nlc3NvcnMucHVzaChwcm9jZXNzb3IpO1xufVxuXG4vKipcbiAqIFJlc29sdmUgdGhlIHVwc3RyZWFtIGV4YW1wbGVzIHByb2Nlc3NvciBmcm9tIGEgcGx1Z2luIGluc3RhbmNlLlxuICogQHBhcmFtIHBsdWdpbiBUaGUgdXBzdHJlYW0gcGx1Z2luIGluc3RhbmNlLlxuICogQHBhcmFtIHNob3VsZFJlcXVpcmVMaWZlY3ljbGVNZXRob2RzIFdoZXRoZXIgcHJlcHJvY2Vzcy9wb3N0cHJvY2VzcyBtdXN0IGJlIHByZXNlbnQuXG4gKiBAcmV0dXJucyBUaGUgdXBzdHJlYW0gZXhhbXBsZXMgcHJvY2Vzc29yLlxuICogQHRocm93cyB7VHlwZUVycm9yfSBUaHJvd24gd2hlbiB0aGUgdXBzdHJlYW0gcGx1Z2luIG9taXRzIHRoZSBleGFtcGxlcyBwcm9jZXNzb3Igb3IgaXRzIGxpZmVjeWNsZSBtZXRob2RzLlxuICogQGV4YW1wbGVcbiAqIGNvbnNvbGUubG9nKHJlc29sdmVFeGFtcGxlc1Byb2Nlc3Nvcih7IHByb2Nlc3NvcnM6IHsgZXhhbXBsZXM6IHt9IH0gfSwgZmFsc2UpICE9PSB2b2lkIDApO1xuICovXG5mdW5jdGlvbiByZXNvbHZlRXhhbXBsZXNQcm9jZXNzb3IoXG4gIHBsdWdpbjogSVByb2Nlc3NvclBsdWdpbixcbiAgc2hvdWxkUmVxdWlyZUxpZmVjeWNsZU1ldGhvZHM6IGJvb2xlYW4sXG4pOiBQYXJ0aWFsPElFeGFtcGxlUHJvY2Vzc29yPiB7XG4gIGNvbnN0IHByb2Nlc3NvciA9IHBsdWdpbi5wcm9jZXNzb3JzPy5leGFtcGxlcztcblxuICBpZiAocHJvY2Vzc29yID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgXCJlc2xpbnQtcGx1Z2luLWpzZG9jIGRpZCBub3QgcHJvdmlkZSBwcm9jZXNzb3JzLmV4YW1wbGVzXCIsXG4gICAgKTtcbiAgfVxuXG4gIGlmIChcbiAgICBzaG91bGRSZXF1aXJlTGlmZWN5Y2xlTWV0aG9kcyAmJlxuICAgICh0eXBlb2YgcHJvY2Vzc29yLnByZXByb2Nlc3MgIT09IFwiZnVuY3Rpb25cIiB8fFxuICAgICAgdHlwZW9mIHByb2Nlc3Nvci5wb3N0cHJvY2VzcyAhPT0gXCJmdW5jdGlvblwiKVxuICApIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgXCJlc2xpbnQtcGx1Z2luLWpzZG9jIHByb2Nlc3NvcnMuZXhhbXBsZXMgbXVzdCBwcm92aWRlIHByZXByb2Nlc3MgYW5kIHBvc3Rwcm9jZXNzXCIsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBwcm9jZXNzb3I7XG59XG5cbmV4cG9ydCB7IGNyZWF0ZVdyYXBwZWRKc2RvY1Byb2Nlc3NvclBsdWdpbiB9O1xuZXhwb3J0IHR5cGUgeyBKc2RvY1Byb2Nlc3NvclBsdWdpbkZhY3RvcnksIFBhcnNlciB9O1xuIl19
@@ -1 +0,0 @@
1
- {"version":3,"file":"jsdoc.d.ts","sourceRoot":"","sources":["../../src/docs/jsdoc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAiIrC;;;;;GAKG;AACH,iBAAe,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CA2B/C;AAED,OAAO,EAAE,KAAK,EAAE,CAAC"}
@@ -1,122 +0,0 @@
1
- import { defineConfig } from "eslint/config";
2
- import { buildTypeScriptExampleConfigs, resolveDisableTypeCheckedRules, resolveJsdocProcessorPlugin, } from "./jsdoc-examples.js";
3
- /** Upstream JSDoc flat preset names consumed by this config. */
4
- const jsdocPresetNames = [
5
- "flat/recommended-typescript-error",
6
- "flat/contents-typescript-error",
7
- "flat/logical-typescript-error",
8
- "flat/requirements-typescript-error",
9
- "flat/stylistic-typescript-error",
10
- ];
11
- /**
12
- * Build the custom jsdoc error rules based on available plugin rules.
13
- * @param availableRules Set of available jsdoc rule names.
14
- * @returns The rules record for ESLint.
15
- * @example
16
- * console.log(buildCustomErrorRules(new Set(["require-throws"])));
17
- */
18
- const buildCustomErrorRules = (availableRules) => {
19
- const ruleNames = [
20
- "check-indentation",
21
- "convert-to-jsdoc-comments",
22
- "require-description",
23
- "require-description-complete-sentence",
24
- "require-template",
25
- "require-throws",
26
- "sort-tags",
27
- ];
28
- return Object.fromEntries(ruleNames
29
- .filter((rule) => availableRules.has(rule))
30
- .map((rule) => [`jsdoc/${rule}`, "error"]));
31
- };
32
- /** AST contexts that must include JSDoc. */
33
- const requireJsdocContexts = [
34
- "Program > FunctionDeclaration",
35
- "Program > ExportDefaultDeclaration > FunctionDeclaration",
36
- "Program > ExportNamedDeclaration > FunctionDeclaration",
37
- "Program > VariableDeclaration",
38
- "Program > ExportNamedDeclaration > VariableDeclaration",
39
- "TSInterfaceDeclaration",
40
- "TSTypeAliasDeclaration",
41
- "TSPropertySignature",
42
- "TSMethodSignature",
43
- "TSCallSignatureDeclaration",
44
- "TSConstructSignatureDeclaration",
45
- "TSIndexSignature",
46
- ];
47
- /**
48
- * Select only the upstream flat presets that are available in the current plugin version.
49
- * @param configs Upstream JSDoc config map.
50
- * @returns The available flat presets.
51
- * @example
52
- * console.log(buildPresetConfigs({ "flat/recommended-typescript-error": {} as Linter.Config }).length);
53
- */
54
- function buildPresetConfigs(configs) {
55
- return jsdocPresetNames.flatMap((configName) => {
56
- const config = configs[configName];
57
- if (config === void 0 ||
58
- Array.isArray(config) ||
59
- typeof config !== "object") {
60
- return [];
61
- }
62
- return [config];
63
- });
64
- }
65
- /**
66
- * Build the final repo-owned JSDoc configs on top of the upstream presets.
67
- * @param customError Repo-owned JSDoc rule overrides.
68
- * @param typeScriptExampleConfigs Processor-backed TypeScript example configs.
69
- * @returns The final ESLint config array.
70
- * @example
71
- * console.log(buildRepoJsdocConfigs({}, []).length);
72
- */
73
- function buildRepoJsdocConfigs(customError, typeScriptExampleConfigs) {
74
- return defineConfig(...typeScriptExampleConfigs, {
75
- name: "jsdoc/custom",
76
- rules: {
77
- ...customError,
78
- "jsdoc/text-escaping": "off",
79
- },
80
- }, {
81
- name: "jsdoc/require-jsdoc-alias",
82
- rules: {
83
- "jsdoc/require-description": [
84
- "error",
85
- { contexts: requireJsdocContexts },
86
- ],
87
- "jsdoc/require-jsdoc": ["error", { contexts: requireJsdocContexts }],
88
- },
89
- }, {
90
- files: ["**/*.spec.ts"],
91
- name: "jsdoc/custom-spec",
92
- rules: {
93
- "jsdoc/convert-to-jsdoc-comments": [
94
- "error",
95
- { allowedPrefixes: ["Arrange", "Act"] },
96
- ],
97
- },
98
- });
99
- }
100
- /**
101
- * Build the jsdoc plugin configuration and any overrides needed by this project.
102
- * @returns Return value output.
103
- * @example
104
- * console.log(await jsdoc());
105
- */
106
- async function jsdoc() {
107
- const jsdocModule = await import("eslint-plugin-jsdoc");
108
- const typeScriptModule = await import("typescript-eslint");
109
- const { default: jsdocPlugin } = jsdocModule;
110
- const { configs, rules } = jsdocPlugin;
111
- const getJsdocProcessorPlugin = resolveJsdocProcessorPlugin(jsdocModule);
112
- const { configs: typeScriptConfigs, parser, plugin: typeScriptPlugin, } = typeScriptModule;
113
- const availableRules = new Set(Object.keys(rules ?? {})), customError = buildCustomErrorRules(availableRules), disableTypeCheckedRules = resolveDisableTypeCheckedRules(typeScriptConfigs), presetConfigs = buildPresetConfigs(configs), typeScriptExampleConfigs = buildTypeScriptExampleConfigs({
114
- disableTypeCheckedRules,
115
- getJsdocProcessorPlugin,
116
- parser,
117
- typeScriptPlugin,
118
- });
119
- return defineConfig(...presetConfigs, ...buildRepoJsdocConfigs(customError, typeScriptExampleConfigs));
120
- }
121
- export { jsdoc };
122
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNkb2MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZG9jcy9qc2RvYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTdDLE9BQU8sRUFDTCw2QkFBNkIsRUFDN0IsOEJBQThCLEVBQzlCLDJCQUEyQixHQUM1QixNQUFNLHFCQUFxQixDQUFDO0FBRTdCLGdFQUFnRTtBQUNoRSxNQUFNLGdCQUFnQixHQUFHO0lBQ3ZCLG1DQUFtQztJQUNuQyxnQ0FBZ0M7SUFDaEMsK0JBQStCO0lBQy9CLG9DQUFvQztJQUNwQyxpQ0FBaUM7Q0FDekIsQ0FBQztBQUVYOzs7Ozs7R0FNRztBQUNILE1BQU0scUJBQXFCLEdBQUcsQ0FDNUIsY0FBMkIsRUFDUCxFQUFFO0lBQ3RCLE1BQU0sU0FBUyxHQUFHO1FBQ2hCLG1CQUFtQjtRQUNuQiwyQkFBMkI7UUFDM0IscUJBQXFCO1FBQ3JCLHVDQUF1QztRQUN2QyxrQkFBa0I7UUFDbEIsZ0JBQWdCO1FBQ2hCLFdBQVc7S0FDWixDQUFDO0lBRUYsT0FBTyxNQUFNLENBQUMsV0FBVyxDQUN2QixTQUFTO1NBQ04sTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxTQUFTLElBQUksRUFBRSxFQUFFLE9BQU8sQ0FBVSxDQUFDLENBQ3RELENBQUM7QUFDSixDQUFDLENBQUM7QUFFRiw0Q0FBNEM7QUFDNUMsTUFBTSxvQkFBb0IsR0FBRztJQUMzQiwrQkFBK0I7SUFDL0IsMERBQTBEO0lBQzFELHdEQUF3RDtJQUN4RCwrQkFBK0I7SUFDL0Isd0RBQXdEO0lBQ3hELHdCQUF3QjtJQUN4Qix3QkFBd0I7SUFDeEIscUJBQXFCO0lBQ3JCLG1CQUFtQjtJQUNuQiw0QkFBNEI7SUFDNUIs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cG9ydCB7IGRlZmluZUNvbmZpZyB9IGZyb20gXCJlc2xpbnQvY29uZmlnXCI7XHJcblxyXG5pbXBvcnQge1xyXG4gIGJ1aWxkVHlwZVNjcmlwdEV4YW1wbGVDb25maWdzLFxyXG4gIHJlc29sdmVEaXNhYmxlVHlwZUNoZWNrZWRSdWxlcyxcclxuICByZXNvbHZlSnNkb2NQcm9jZXNzb3JQbHVnaW4sXHJcbn0gZnJvbSBcIi4vanNkb2MtZXhhbXBsZXMuanNcIjtcclxuXHJcbi8qKiBVcHN0cmVhbSBKU0RvYyBmbGF0IHByZXNldCBuYW1lcyBjb25zdW1lZCBieSB0aGlzIGNvbmZpZy4gKi9cclxuY29uc3QganNkb2NQcmVzZXROYW1lcyA9IFtcclxuICBcImZsYXQvcmVjb21tZW5kZWQtdHlwZXNjcmlwdC1lcnJvclwiLFxyXG4gIFwiZmxhdC9jb250ZW50cy10eXBlc2NyaXB0LWVycm9yXCIsXHJcbiAgXCJmbGF0L2xvZ2ljYWwtdHlwZXNjcmlwdC1lcnJvclwiLFxyXG4gIFwiZmxhdC9yZXF1aXJlbWVudHMtdHlwZXNjcmlwdC1lcnJvclwiLFxyXG4gIFwiZmxhdC9zdHlsaXN0aWMtdHlwZXNjcmlwdC1lcnJvclwiLFxyXG5dIGFzIGNvbnN0O1xyXG5cclxuLyoqXHJcbiAqIEJ1aWxkIHRoZSBjdXN0b20ganNkb2MgZXJyb3IgcnVsZXMgYmFzZWQgb24gYXZhaWxhYmxlIHBsdWdpbiBydWxlcy5cclxuICogQHBhcmFtIGF2YWlsYWJsZVJ1bGVzIFNldCBvZiBhdmFpbGFibGUganNkb2MgcnVsZSBuYW1lcy5cclxuICogQHJldHVybnMgVGhlIHJ1bGVzIHJlY29yZCBmb3IgRVNMaW50LlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBjb25zb2xlLmxvZyhidWlsZEN1c3RvbUVycm9yUnVsZXMobmV3IFNldChbXCJyZXF1aXJlLXRocm93c1wiXSkpKTtcclxuICovXHJcbmNvbnN0IGJ1aWxkQ3VzdG9tRXJyb3JSdWxlcyA9IChcclxuICBhdmFpbGFibGVSdWxlczogU2V0PHN0cmluZz4sXHJcbik6IExpbnRlci5SdWxlc1JlY29yZCA9PiB7XHJcbiAgY29uc3QgcnVsZU5hbWVzID0gW1xyXG4gICAgXCJjaGVjay1pbmRlbnRhdGlvblwiLFxyXG4gICAgXCJjb252ZXJ0LXRvLWpzZG9jLWNvbW1lbnRzXCIsXHJcbiAgICBcInJlcXVpcmUtZGVzY3JpcHRpb25cIixcclxuICAgIFwicmVxdWlyZS1kZXNjcmlwdGlvbi1jb21wbGV0ZS1zZW50ZW5jZVwiLFxyXG4gICAgXCJyZXF1aXJlLXRlbXBsYXRlXCIsXHJcbiAgICBcInJlcXVpcmUtdGhyb3dzXCIsXHJcbiAgICBcInNvcnQtdGFnc1wiLFxyXG4gIF07XHJcblxyXG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXHJcbiAgICBydWxlTmFtZXNcclxuICAgICAgLmZpbHRlcigocnVsZSkgPT4gYXZhaWxhYmxlUnVsZXMuaGFzKHJ1bGUpKVxyXG4gICAgICAubWFwKChydWxlKSA9PiBbYGpzZG9jLyR7cnVsZX1gLCBcImVycm9yXCJdIGFzIGNvbnN0KSxcclxuICApO1xyXG59O1xyXG5cclxuLyoqIEFTVCBjb250ZXh0cyB0aGF0IG11c3QgaW5jbHVkZSBKU0RvYy4gKi9cclxuY29uc3QgcmVxdWlyZUpzZG9jQ29udGV4dHMgPSBbXHJcbiAgXCJQcm9ncmFtID4gRnVuY3Rpb25EZWNsYXJhdGlvblwiLFxyXG4gIFwiUHJvZ3JhbSA+IEV4cG9ydERlZmF1bHREZWNsYXJhdGlvbiA+IEZ1bmN0aW9uRGVjbGFyYXRpb25cIixcclxuICBcIlByb2dyYW0gPiBFeHBvcnROYW1lZERlY2xhcmF0aW9uID4gRnVuY3Rpb25EZWNsYXJhdGlvblwiLFxyXG4gIFwiUHJvZ3JhbSA+IFZhcmlhYmxlRGVjbGFyYXRpb25cIixcclxuICBcIlByb2dyYW0gPiBFeHBvcnROYW1lZERlY2xhcmF0aW9uID4gVmFyaWFibGVEZWNsYXJhdGlvblwiLFxyXG4gIFwiVFNJbnRlcmZhY2VEZWNsYXJhdGlvblwiLFxyXG4gIFwiVFNUeXBlQWxpYXNEZWNsYXJhdGlvblwiLFxyXG4gIFwiVFNQcm9wZXJ0eVNpZ25hdHVyZVwiLFxyXG4gIFwiVFNNZXRob2RTaWduYXR1cmVcIixcclxuICBcIlRTQ2FsbFNpZ25hdHVyZURlY2xhcmF0aW9uXCIsXHJcbiAgXCJUU0NvbnN0cnVjdFNpZ25hdHVyZURlY2xhcmF0aW9uXCIsXHJcbiAgXCJUU0luZGV4U2lnbmF0dXJlXCIsXHJcbl07XHJcblxyXG4vKipcclxuICogU2VsZWN0IG9ubHkgdGhlIHVwc3RyZWFtIGZsYXQgcHJlc2V0cyB0aGF0IGFyZSBhdmFpbGFibGUgaW4gdGhlIGN1cnJlbnQgcGx1Z2luIHZlcnNpb24uXHJcbiAqIEBwYXJhbSBjb25maWdzIFVwc3RyZWFtIEpTRG9jIGNvbmZpZyBtYXAuXHJcbiAqIEByZXR1cm5zIFRoZSBhdmFpbGFibGUgZmxhdCBwcmVzZXRzLlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBjb25zb2xlLmxvZyhidWlsZFByZXNldENvbmZpZ3MoeyBcImZsYXQvcmVjb21tZW5kZWQtdHlwZXNjcmlwdC1lcnJvclwiOiB7fSBhcyBMaW50ZXIuQ29uZmlnIH0pLmxlbmd0aCk7XHJcbiAqL1xyXG5mdW5jdGlvbiBidWlsZFByZXNldENvbmZpZ3MoY29uZmlnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBMaW50ZXIuQ29uZmlnW10ge1xyXG4gIHJldHVybiBqc2RvY1ByZXNldE5hbWVzLmZsYXRNYXAoKGNvbmZpZ05hbWUpID0+IHtcclxuICAgIGNvbnN0IGNvbmZpZyA9IGNvbmZpZ3NbY29uZmlnTmFtZV07XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICBjb25maWcgPT09IHZvaWQgMCB8fFxyXG4gICAgICBBcnJheS5pc0FycmF5KGNvbmZpZykgfHxcclxuICAgICAgdHlwZW9mIGNvbmZpZyAhPT0gXCJvYmplY3RcIlxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gW2NvbmZpZyBhcyBMaW50ZXIuQ29uZmlnXTtcclxuICB9KTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEJ1aWxkIHRoZSBmaW5hbCByZXBvLW93bmVkIEpTRG9jIGNvbmZpZ3Mgb24gdG9wIG9mIHRoZSB1cHN0cmVhbSBwcmVzZXRzLlxyXG4gKiBAcGFyYW0gY3VzdG9tRXJyb3IgUmVwby1vd25lZCBKU0RvYyBydWxlIG92ZXJyaWRlcy5cclxuICogQHBhcmFtIHR5cGVTY3JpcHRFeGFtcGxlQ29uZmlncyBQcm9jZXNzb3ItYmFja2VkIFR5cGVTY3JpcHQgZXhhbXBsZSBjb25maWdzLlxyXG4gKiBAcmV0dXJucyBUaGUgZmluYWwgRVNMaW50IGNvbmZpZyBhcnJheS5cclxuICogQGV4YW1wbGVcclxuICogY29uc29sZS5sb2coYnVpbGRSZXBvSnNkb2NDb25maWdzKHt9LCBbXSkubGVuZ3RoKTtcclxuICovXHJcbmZ1bmN0aW9uIGJ1aWxkUmVwb0pzZG9jQ29uZmlncyhcclxuICBjdXN0b21FcnJvcjogTGludGVyLlJ1bGVzUmVjb3JkLFxyXG4gIHR5cGVTY3JpcHRFeGFtcGxlQ29uZmlnczogTGludGVyLkNvbmZpZ1tdLFxyXG4pOiBMaW50ZXIuQ29uZmlnW10ge1xyXG4gIHJldHVybiBkZWZpbmVDb25maWcoXHJcbiAgICAuLi50eXBlU2NyaXB0RXhhbXBsZUNvbmZpZ3MsXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6IFwianNkb2MvY3VzdG9tXCIsXHJcbiAgICAgIHJ1bGVzOiB7XHJcbiAgICAgICAgLi4uY3VzdG9tRXJyb3IsXHJcbiAgICAgICAgXCJqc2RvYy90ZXh0LWVzY2FwaW5nXCI6IFwib2ZmXCIsXHJcbiAgICAgIH0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiBcImpzZG9jL3JlcXVpcmUtanNkb2MtYWxpYXNcIixcclxuICAgICAgcnVsZXM6IHtcclxuICAgICAgICBcImpzZG9jL3JlcXVpcmUtZGVzY3JpcHRpb25cIjogW1xyXG4gICAgICAgICAgXCJlcnJvclwiLFxyXG4gICAgICAgICAgeyBjb250ZXh0czogcmVxdWlyZUpzZG9jQ29udGV4dHMgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIFwianNkb2MvcmVxdWlyZS1qc2RvY1wiOiBbXCJlcnJvclwiLCB7IGNvbnRleHRzOiByZXF1aXJlSnNkb2NDb250ZXh0cyB9XSxcclxuICAgICAgfSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGZpbGVzOiBbXCIqKi8qLnNwZWMudHNcIl0sXHJcbiAgICAgIG5hbWU6IFwianNkb2MvY3VzdG9tLXNwZWNcIixcclxuICAgICAgcnVsZXM6IHtcclxuICAgICAgICBcImpzZG9jL2NvbnZlcnQtdG8tanNkb2MtY29tbWVudHNcIjogW1xyXG4gICAgICAgICAgXCJlcnJvclwiLFxyXG4gICAgICAgICAgeyBhbGxvd2VkUHJlZml4ZXM6IFtcIkFycmFuZ2VcIiwgXCJBY3RcIl0gfSxcclxuICAgICAgICBdLFxyXG4gICAgICB9LFxyXG4gICAgfSxcclxuICApO1xyXG59XHJcblxyXG4vKipcclxuICogQnVpbGQgdGhlIGpzZG9jIHBsdWdpbiBjb25maWd1cmF0aW9uIGFuZCBhbnkgb3ZlcnJpZGVzIG5lZWRlZCBieSB0aGlzIHByb2plY3QuXHJcbiAqIEByZXR1cm5zIFJldHVybiB2YWx1ZSBvdXRwdXQuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGNvbnNvbGUubG9nKGF3YWl0IGpzZG9jKCkpO1xyXG4gKi9cclxuYXN5bmMgZnVuY3Rpb24ganNkb2MoKTogUHJvbWlzZTxMaW50ZXIuQ29uZmlnW10+IHtcclxuICBjb25zdCBqc2RvY01vZHVsZSA9IGF3YWl0IGltcG9ydChcImVzbGludC1wbHVnaW4tanNkb2NcIik7XHJcbiAgY29uc3QgdHlwZVNjcmlwdE1vZHVsZSA9IGF3YWl0IGltcG9ydChcInR5cGVzY3JpcHQtZXNsaW50XCIpO1xyXG4gIGNvbnN0IHsgZGVmYXVsdDoganNkb2NQbHVnaW4gfSA9IGpzZG9jTW9kdWxlO1xyXG4gIGNvbnN0IHsgY29uZmlncywgcnVsZXMgfSA9IGpzZG9jUGx1Z2luO1xyXG4gIGNvbnN0IGdldEpzZG9jUHJvY2Vzc29yUGx1Z2luID0gcmVzb2x2ZUpzZG9jUHJvY2Vzc29yUGx1Z2luKGpzZG9jTW9kdWxlKTtcclxuICBjb25zdCB7XHJcbiAgICBjb25maWdzOiB0eXBlU2NyaXB0Q29uZmlncyxcclxuICAgIHBhcnNlcixcclxuICAgIHBsdWdpbjogdHlwZVNjcmlwdFBsdWdpbixcclxuICB9ID0gdHlwZVNjcmlwdE1vZHVsZTtcclxuXHJcbiAgY29uc3QgYXZhaWxhYmxlUnVsZXMgPSBuZXcgU2V0KE9iamVjdC5rZXlzKHJ1bGVzID8/IHt9KSksXHJcbiAgICBjdXN0b21FcnJvciA9IGJ1aWxkQ3VzdG9tRXJyb3JSdWxlcyhhdmFpbGFibGVSdWxlcyksXHJcbiAgICBkaXNhYmxlVHlwZUNoZWNrZWRSdWxlcyA9IHJlc29sdmVEaXNhYmxlVHlwZUNoZWNrZWRSdWxlcyh0eXBlU2NyaXB0Q29uZmlncyksXHJcbiAgICBwcmVzZXRDb25maWdzID0gYnVpbGRQcmVzZXRDb25maWdzKGNvbmZpZ3MpLFxyXG4gICAgdHlwZVNjcmlwdEV4YW1wbGVDb25maWdzID0gYnVpbGRUeXBlU2NyaXB0RXhhbXBsZUNvbmZpZ3Moe1xyXG4gICAgICBkaXNhYmxlVHlwZUNoZWNrZWRSdWxlcyxcclxuICAgICAgZ2V0SnNkb2NQcm9jZXNzb3JQbHVnaW4sXHJcbiAgICAgIHBhcnNlcixcclxuICAgICAgdHlwZVNjcmlwdFBsdWdpbixcclxuICAgIH0pO1xyXG5cclxuICByZXR1cm4gZGVmaW5lQ29uZmlnKFxyXG4gICAgLi4ucHJlc2V0Q29uZmlncyxcclxuICAgIC4uLmJ1aWxkUmVwb0pzZG9jQ29uZmlncyhjdXN0b21FcnJvciwgdHlwZVNjcmlwdEV4YW1wbGVDb25maWdzKSxcclxuICApO1xyXG59XHJcblxyXG5leHBvcnQgeyBqc2RvYyB9O1xyXG4iXX0=
@@ -1 +0,0 @@
1
- {"version":3,"file":"rxjs-x.d.ts","sourceRoot":"","sources":["../../src/domain/rxjs-x.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIrC;;;;;;;GAOG;AACH,wBAAsB,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAqBtD"}
@@ -1,27 +0,0 @@
1
- import { defineConfig } from "eslint/config";
2
- /**
3
- * Build and return rxjs-x plugin configurations with package-level adjustments.
4
- * @returns Return value output.
5
- * @example
6
- * ```typescript
7
- * await rxjsX();
8
- * ```
9
- */
10
- export async function rxjsX() {
11
- const pluginModule = await import("eslint-plugin-rxjs-x");
12
- return defineConfig(pluginModule.default.configs.strict, {
13
- name: "rxjs-x/custom",
14
- rules: {
15
- "rxjs-x/no-ignored-default-value": "off",
16
- "rxjs-x/no-subclass": "off",
17
- "rxjs-x/no-unbound-methods": "off",
18
- },
19
- }, {
20
- files: ["**/*.spec.ts"],
21
- name: "rxjs-x/custom-spec",
22
- rules: {
23
- "rxjs-x/no-ignored-error": "off",
24
- },
25
- });
26
- }
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnhqcy14LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RvbWFpbi9yeGpzLXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU3Qzs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxLQUFLO0lBQ3pCLE1BQU0sWUFBWSxHQUFHLE1BQU0sTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFFMUQsT0FBTyxZQUFZLENBQ2pCLFlBQVksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQXVCLEVBQ3BEO1FBQ0UsSUFBSSxFQUFFLGVBQWU7UUFDckIsS0FBSyxFQUFFO1lBQ0wsaUNBQWlDLEVBQUUsS0FBSztZQUN4QyxvQkFBb0IsRUFBRSxLQUFLO1lBQzNCLDJCQUEyQixFQUFFLEtBQUs7U0FDbkM7S0FDRixFQUNEO1FBQ0UsS0FBSyxFQUFFLENBQUMsY0FBYyxDQUFDO1FBQ3ZCLElBQUksRUFBRSxvQkFBb0I7UUFDMUIsS0FBSyxFQUFFO1lBQ0wseUJBQXlCLEVBQUUsS0FBSztTQUNqQztLQUNGLENBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IExpbnRlciB9IGZyb20gXCJlc2xpbnRcIjtcblxuaW1wb3J0IHsgZGVmaW5lQ29uZmlnIH0gZnJvbSBcImVzbGludC9jb25maWdcIjtcblxuLyoqXG4gKiBCdWlsZCBhbmQgcmV0dXJuIHJ4anMteCBwbHVnaW4gY29uZmlndXJhdGlvbnMgd2l0aCBwYWNrYWdlLWxldmVsIGFkanVzdG1lbnRzLlxuICogQHJldHVybnMgUmV0dXJuIHZhbHVlIG91dHB1dC5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBhd2FpdCByeGpzWCgpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByeGpzWCgpOiBQcm9taXNlPExpbnRlci5Db25maWdbXT4ge1xuICBjb25zdCBwbHVnaW5Nb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJlc2xpbnQtcGx1Z2luLXJ4anMteFwiKTtcblxuICByZXR1cm4gZGVmaW5lQ29uZmlnKFxuICAgIHBsdWdpbk1vZHVsZS5kZWZhdWx0LmNvbmZpZ3Muc3RyaWN0IGFzIExpbnRlci5Db25maWcsXG4gICAge1xuICAgICAgbmFtZTogXCJyeGpzLXgvY3VzdG9tXCIsXG4gICAgICBydWxlczoge1xuICAgICAgICBcInJ4anMteC9uby1pZ25vcmVkLWRlZmF1bHQtdmFsdWVcIjogXCJvZmZcIixcbiAgICAgICAgXCJyeGpzLXgvbm8tc3ViY2xhc3NcIjogXCJvZmZcIixcbiAgICAgICAgXCJyeGpzLXgvbm8tdW5ib3VuZC1tZXRob2RzXCI6IFwib2ZmXCIsXG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgZmlsZXM6IFtcIioqLyouc3BlYy50c1wiXSxcbiAgICAgIG5hbWU6IFwicnhqcy14L2N1c3RvbS1zcGVjXCIsXG4gICAgICBydWxlczoge1xuICAgICAgICBcInJ4anMteC9uby1pZ25vcmVkLWVycm9yXCI6IFwib2ZmXCIsXG4gICAgICB9LFxuICAgIH0sXG4gICk7XG59XG4iXX0=
@@ -1 +0,0 @@
1
- {"version":3,"file":"module-taxonomy.d.ts","sourceRoot":"","sources":["../src/module-taxonomy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C,8CAA8C;AAC9C,KAAK,cAAc,GACf,cAAc,GACd,MAAM,GACN,eAAe,GACf,QAAQ,GACR,yBAAyB,GACzB,OAAO,GACP,SAAS,CAAC;AAEd,mDAAmD;AACnD,UAAU,mBAAmB;IAC3B,kCAAkC;IAClC,QAAQ,EAAE,cAAc,CAAC;IAEzB,iEAAiE;IACjE,UAAU,EAAE,UAAU,CAAC;CACxB;AAED,iDAAiD;AACjD,QAAA,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiB+B,CAAC;AAEpD,OAAO,EAAE,cAAc,EAAE,CAAC;AAC1B,YAAY,EAAE,cAAc,EAAE,mBAAmB,EAAE,CAAC"}
@@ -1,21 +0,0 @@
1
- /** Ordered module taxonomy matching RFC-0003. */
2
- const moduleTaxonomy = [
3
- { category: "core", pluginName: "eslint" },
4
- { category: "core", pluginName: "resolver" },
5
- { category: "core", pluginName: "typescript" },
6
- { category: "architecture", pluginName: "import-x" },
7
- { category: "documentation", pluginName: "comments" },
8
- { category: "documentation", pluginName: "jsdoc" },
9
- { category: "testing", pluginName: "jasmine" },
10
- { category: "testing", pluginName: "jest" },
11
- { category: "testing", pluginName: "playwright" },
12
- { category: "testing", pluginName: "vitest" },
13
- { category: "domain", pluginName: "rxjs-x" },
14
- { category: "style", pluginName: "stylistic" },
15
- { category: "style", pluginName: "perfectionist" },
16
- { category: "style", pluginName: "unicorn" },
17
- { category: "style", pluginName: "prettier" },
18
- { category: "repository-architecture", pluginName: "boundaries" },
19
- ];
20
- export { moduleTaxonomy };
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLXRheG9ub215LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL21vZHVsZS10YXhvbm9teS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFxQkEsaURBQWlEO0FBQ2pELE1BQU0sY0FBYyxHQUFHO0lBQ3JCLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFO0lBQzFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFO0lBQzVDLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFO0lBQzlDLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFO0lBQ3BELEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFO0lBQ3JELEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFO0lBQ2xELEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFO0lBQzlDLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFO0lBQzNDLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFO0lBQ2pELEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFO0lBQzdDLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFO0lBQzVDLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFO0lBQzlDLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFO0lBQ2xELEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFO0lBQzVDLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFO0lBQzdDLEVBQUUsUUFBUSxFQUFFLHlCQUF5QixFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUU7Q0FDaEIsQ0FBQztBQUVwRCxPQUFPLEVBQUUsY0FBYyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFBsdWdpbk5hbWUgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG4vKiogVGF4b25vbXkgY2F0ZWdvcmllcyBmb3IgY29uZmlnIG1vZHVsZXMuICovXG50eXBlIE1vZHVsZUNhdGVnb3J5ID1cbiAgfCBcImFyY2hpdGVjdHVyZVwiXG4gIHwgXCJjb3JlXCJcbiAgfCBcImRvY3VtZW50YXRpb25cIlxuICB8IFwiZG9tYWluXCJcbiAgfCBcInJlcG9zaXRvcnktYXJjaGl0ZWN0dXJlXCJcbiAgfCBcInN0eWxlXCJcbiAgfCBcInRlc3RpbmdcIjtcblxuLyoqIEVudHJ5IGRlc2NyaWJpbmcgYSBkb2N1bWVudGVkIGNvbmZpZyBtb2R1bGUuICovXG5pbnRlcmZhY2UgTW9kdWxlVGF4b25vbXlFbnRyeSB7XG4gIC8qKiBDYXRlZ29yeSBvd25pbmcgdGhlIG1vZHVsZS4gKi9cbiAgY2F0ZWdvcnk6IE1vZHVsZUNhdGVnb3J5O1xuXG4gIC8qKiBQdWJsaWMgbW9kdWxlIG5hbWUgdXNlZCBpbiBjb25maWcgb3B0aW9ucyBhbmQgZGlhZ25vc3RpY3MuICovXG4gIHBsdWdpbk5hbWU6IFBsdWdpbk5hbWU7XG59XG5cbi8qKiBPcmRlcmVkIG1vZHVsZSB0YXhvbm9teSBtYXRjaGluZyBSRkMtMDAwMy4gKi9cbmNvbnN0IG1vZHVsZVRheG9ub215ID0gW1xuICB7IGNhdGVnb3J5OiBcImNvcmVcIiwgcGx1Z2luTmFtZTogXCJlc2xpbnRcIiB9LFxuICB7IGNhdGVnb3J5OiBcImNvcmVcIiwgcGx1Z2luTmFtZTogXCJyZXNvbHZlclwiIH0sXG4gIHsgY2F0ZWdvcnk6IFwiY29yZVwiLCBwbHVnaW5OYW1lOiBcInR5cGVzY3JpcHRcIiB9LFxuICB7IGNhdGVnb3J5OiBcImFyY2hpdGVjdHVyZVwiLCBwbHVnaW5OYW1lOiBcImltcG9ydC14XCIgfSxcbiAgeyBjYXRlZ29yeTogXCJkb2N1bWVudGF0aW9uXCIsIHBsdWdpbk5hbWU6IFwiY29tbWVudHNcIiB9LFxuICB7IGNhdGVnb3J5OiBcImRvY3VtZW50YXRpb25cIiwgcGx1Z2luTmFtZTogXCJqc2RvY1wiIH0sXG4gIHsgY2F0ZWdvcnk6IFwidGVzdGluZ1wiLCBwbHVnaW5OYW1lOiBcImphc21pbmVcIiB9LFxuICB7IGNhdGVnb3J5OiBcInRlc3RpbmdcIiwgcGx1Z2luTmFtZTogXCJqZXN0XCIgfSxcbiAgeyBjYXRlZ29yeTogXCJ0ZXN0aW5nXCIsIHBsdWdpbk5hbWU6IFwicGxheXdyaWdodFwiIH0sXG4gIHsgY2F0ZWdvcnk6IFwidGVzdGluZ1wiLCBwbHVnaW5OYW1lOiBcInZpdGVzdFwiIH0sXG4gIHsgY2F0ZWdvcnk6IFwiZG9tYWluXCIsIHBsdWdpbk5hbWU6IFwicnhqcy14XCIgfSxcbiAgeyBjYXRlZ29yeTogXCJzdHlsZVwiLCBwbHVnaW5OYW1lOiBcInN0eWxpc3RpY1wiIH0sXG4gIHsgY2F0ZWdvcnk6IFwic3R5bGVcIiwgcGx1Z2luTmFtZTogXCJwZXJmZWN0aW9uaXN0XCIgfSxcbiAgeyBjYXRlZ29yeTogXCJzdHlsZVwiLCBwbHVnaW5OYW1lOiBcInVuaWNvcm5cIiB9LFxuICB7IGNhdGVnb3J5OiBcInN0eWxlXCIsIHBsdWdpbk5hbWU6IFwicHJldHRpZXJcIiB9LFxuICB7IGNhdGVnb3J5OiBcInJlcG9zaXRvcnktYXJjaGl0ZWN0dXJlXCIsIHBsdWdpbk5hbWU6IFwiYm91bmRhcmllc1wiIH0sXG5dIGFzIGNvbnN0IHNhdGlzZmllcyByZWFkb25seSBNb2R1bGVUYXhvbm9teUVudHJ5W107XG5cbmV4cG9ydCB7IG1vZHVsZVRheG9ub215IH07XG5leHBvcnQgdHlwZSB7IE1vZHVsZUNhdGVnb3J5LCBNb2R1bGVUYXhvbm9teUVudHJ5IH07XG4iXX0=