@codeperfect/eslint-config 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -1
- package/dist/codeperfect-eslint-config-1.0.0.tgz +0 -0
- package/dist/docs/jsdoc-examples.d.ts +56 -0
- package/dist/docs/jsdoc-examples.d.ts.map +1 -0
- package/dist/docs/jsdoc-examples.js +186 -0
- package/dist/docs/jsdoc-processor.d.ts +63 -0
- package/dist/docs/jsdoc-processor.d.ts.map +1 -0
- package/dist/docs/jsdoc-processor.js +112 -0
- package/dist/docs/jsdoc.d.ts +2 -4
- package/dist/docs/jsdoc.d.ts.map +1 -1
- package/dist/docs/jsdoc.js +62 -17
- package/package.json +1 -1
- package/dist/index-spec-helpers.d.ts +0 -44
- package/dist/index-spec-helpers.d.ts.map +0 -1
- package/dist/index-spec-helpers.js +0 -175
package/dist/.tsbuildinfo
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["../src/config-composition.ts","../src/diagnostics.ts","../src/index
|
|
1
|
+
{"root":["../src/config-composition.ts","../src/diagnostics.ts","../src/index.ts","../src/module-taxonomy.ts","../src/plugin-loaders.ts","../src/types.ts","../src/utilities.ts","../src/architecture/boundaries.ts","../src/architecture/import-x.ts","../src/architecture/index.ts","../src/configs/index.ts","../src/core/eslint.ts","../src/core/index.ts","../src/core/resolver.ts","../src/core/typescript.ts","../src/docs/comments.ts","../src/docs/index.ts","../src/docs/jsdoc-examples.ts","../src/docs/jsdoc-processor.ts","../src/docs/jsdoc.ts","../src/domain/index.ts","../src/domain/rxjs-x.ts","../src/style/index.ts","../src/style/perfectionist.ts","../src/style/prettier.ts","../src/style/stylistic.ts","../src/style/unicorn.ts","../src/testing/index.ts","../src/testing/jasmine.ts","../src/testing/jest.ts","../src/testing/playwright.ts","../src/testing/vitest.ts","../conventional-changelog-conventionalcommits.d.ts","../eslint-plugin-jasmine.d.ts"],"version":"5.9.3"}
|
|
Binary file
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { Linter } from "eslint";
|
|
2
|
+
import type { getJsdocProcessorPlugin as getJsdocProcessorPluginType } from "eslint-plugin-jsdoc";
|
|
3
|
+
import type { parser as parserType, configs as typeScriptConfigsType, plugin as typeScriptPluginType } from "typescript-eslint";
|
|
4
|
+
/** Options for building TypeScript example configs. */
|
|
5
|
+
interface BuildTypeScriptExampleConfigOptions {
|
|
6
|
+
/** Rule overrides that disable typed-only checks for snippets. */
|
|
7
|
+
disableTypeCheckedRules: Linter.RulesRecord;
|
|
8
|
+
/** Upstream processor factory when the plugin exports it. */
|
|
9
|
+
getJsdocProcessorPlugin: JsdocProcessorPluginFactory | undefined;
|
|
10
|
+
/** Parser used for host files and snippet files. */
|
|
11
|
+
parser: Parser;
|
|
12
|
+
/** TypeScript ESLint plugin used by the virtual snippet configs. */
|
|
13
|
+
typeScriptPlugin: TypeScriptPlugin;
|
|
14
|
+
}
|
|
15
|
+
/** Function signature for the JSDoc processor factory. */
|
|
16
|
+
type JsdocProcessorPluginFactory = typeof getJsdocProcessorPluginType;
|
|
17
|
+
/** Parser accepted by the JSDoc example processor. */
|
|
18
|
+
type Parser = typeof parserType;
|
|
19
|
+
/** TypeScript ESLint config map. */
|
|
20
|
+
type TypeScriptConfigs = typeof typeScriptConfigsType;
|
|
21
|
+
/** TypeScript ESLint plugin instance used for snippet-only rule configs. */
|
|
22
|
+
type TypeScriptPlugin = typeof typeScriptPluginType;
|
|
23
|
+
/**
|
|
24
|
+
* Build TypeScript-aware processor configs for JSDoc examples and default expressions.
|
|
25
|
+
* @param options Config input for the TypeScript snippet support.
|
|
26
|
+
* @param options.disableTypeCheckedRules Rule overrides that disable typed-only checks.
|
|
27
|
+
* @param options.getJsdocProcessorPlugin Upstream processor factory when present.
|
|
28
|
+
* @param options.parser Parser used for host files and snippets.
|
|
29
|
+
* @param options.typeScriptPlugin TypeScript ESLint plugin instance.
|
|
30
|
+
* @returns The processor and virtual-file configs.
|
|
31
|
+
* @example
|
|
32
|
+
* console.log(buildTypeScriptExampleConfigs({ disableTypeCheckedRules: {}, getJsdocProcessorPlugin: void 0, parser: {} as Parser, typeScriptPlugin: {} as TypeScriptPlugin }).length);
|
|
33
|
+
*/
|
|
34
|
+
declare function buildTypeScriptExampleConfigs({ disableTypeCheckedRules, getJsdocProcessorPlugin, parser, typeScriptPlugin, }: BuildTypeScriptExampleConfigOptions): Linter.Config[];
|
|
35
|
+
/**
|
|
36
|
+
* Resolve the TypeScript rule overrides that disable typed-only linting for snippets.
|
|
37
|
+
* @param typeScriptConfigs The exported TypeScript ESLint config map.
|
|
38
|
+
* @returns The disable-type-checked rule overrides.
|
|
39
|
+
* @example
|
|
40
|
+
* console.log(resolveDisableTypeCheckedRules({ disableTypeChecked: { rules: { example: "off" } } } as TypeScriptConfigs).example);
|
|
41
|
+
*/
|
|
42
|
+
declare function resolveDisableTypeCheckedRules(typeScriptConfigs: TypeScriptConfigs): Linter.RulesRecord;
|
|
43
|
+
/**
|
|
44
|
+
* Resolve the optional processor factory from the JSDoc plugin module.
|
|
45
|
+
* @param jsdocModule The loaded JSDoc plugin module.
|
|
46
|
+
* @returns The processor factory when the module exports it.
|
|
47
|
+
* @example
|
|
48
|
+
* console.log(resolveJsdocProcessorPlugin({}) === void 0);
|
|
49
|
+
*/
|
|
50
|
+
declare function resolveJsdocProcessorPlugin(jsdocModule: Readonly<{
|
|
51
|
+
/** Optional exported JSDoc processor factory. */
|
|
52
|
+
getJsdocProcessorPlugin?: JsdocProcessorPluginFactory;
|
|
53
|
+
}>): JsdocProcessorPluginFactory | undefined;
|
|
54
|
+
export { buildTypeScriptExampleConfigs, resolveDisableTypeCheckedRules, resolveJsdocProcessorPlugin, };
|
|
55
|
+
export type { Parser, TypeScriptConfigs, TypeScriptPlugin };
|
|
56
|
+
//# sourceMappingURL=jsdoc-examples.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsdoc-examples.d.ts","sourceRoot":"","sources":["../../src/docs/jsdoc-examples.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,EACV,MAAM,IAAI,UAAU,EACpB,OAAO,IAAI,qBAAqB,EAChC,MAAM,IAAI,oBAAoB,EAC/B,MAAM,mBAAmB,CAAC;AAI3B,uDAAuD;AACvD,UAAU,mCAAmC;IAC3C,kEAAkE;IAClE,uBAAuB,EAAE,MAAM,CAAC,WAAW,CAAC;IAE5C,6DAA6D;IAC7D,uBAAuB,EAAE,2BAA2B,GAAG,SAAS,CAAC;IAEjE,oDAAoD;IACpD,MAAM,EAAE,MAAM,CAAC;IAEf,oEAAoE;IACpE,gBAAgB,EAAE,gBAAgB,CAAC;CACpC;AAED,0DAA0D;AAC1D,KAAK,2BAA2B,GAAG,OAAO,2BAA2B,CAAC;AAEtE,sDAAsD;AACtD,KAAK,MAAM,GAAG,OAAO,UAAU,CAAC;AAEhC,oCAAoC;AACpC,KAAK,iBAAiB,GAAG,OAAO,qBAAqB,CAAC;AAEtD,4EAA4E;AAC5E,KAAK,gBAAgB,GAAG,OAAO,oBAAoB,CAAC;AAkFpD;;;;;;;;;;GAUG;AACH,iBAAS,6BAA6B,CAAC,EACrC,uBAAuB,EACvB,uBAAuB,EACvB,MAAM,EACN,gBAAgB,GACjB,EAAE,mCAAmC,GAAG,MAAM,CAAC,MAAM,EAAE,CA4BvD;AAgFD;;;;;;GAMG;AACH,iBAAS,8BAA8B,CACrC,iBAAiB,EAAE,iBAAiB,GACnC,MAAM,CAAC,WAAW,CAGpB;AAED;;;;;;GAMG;AACH,iBAAS,2BAA2B,CAClC,WAAW,EAAE,QAAQ,CAAC;IACpB,iDAAiD;IACjD,uBAAuB,CAAC,EAAE,2BAA2B,CAAC;CACvD,CAAC,GACD,2BAA2B,GAAG,SAAS,CAIzC;AAED,OAAO,EACL,6BAA6B,EAC7B,8BAA8B,EAC9B,2BAA2B,GAC5B,CAAC;AACF,YAAY,EAAE,MAAM,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,CAAC"}
|
|
@@ -0,0 +1,186 @@
|
|
|
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=
|
|
@@ -0,0 +1,63 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,112 @@
|
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNkb2MtcHJvY2Vzc29yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RvY3MvanNkb2MtcHJvY2Vzc29yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQTRFQTs7Ozs7O0dBTUc7QUFDSCxTQUFTLDZCQUE2QixDQUNwQyxPQUFpRDtJQUVqRCxPQUFPO1FBQ0wsYUFBYSxFQUFFLE9BQU8sQ0FBQyxhQUFhO1FBQ3BDLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVztRQUNoQyxlQUFlLEVBQUUsT0FBTyxDQUFDLGVBQWU7UUFDeEMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1FBQ3RCLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVTtLQUMvQixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQVMsaUNBQWlDLENBQ3hDLE9BQWlEO0lBRWpELE1BQU0sZUFBZSxHQUFHLDZCQUE2QixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQy9ELE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyx1QkFBdUIsQ0FDaEQsZUFBZSxDQUNJLENBQUM7SUFDdEIsTUFBTSxhQUFhLEdBQUcsd0JBQXdCLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2xFLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxHQUFHLEVBQTBCLENBQUM7SUFFL0QsT0FBTztRQUNMLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNoRSxVQUFVLEVBQUU7WUFDVixRQUFRLEVBQUU7Z0JBQ1IsR0FBRyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN0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bnQiOlsiaW1wb3J0IHR5cGUgeyBMaW50ZXIgfSBmcm9tIFwiZXNsaW50XCI7XG5pbXBvcnQgdHlwZSB7IGdldEpzZG9jUHJvY2Vzc29yUGx1Z2luIGFzIGdldEpzZG9jUHJvY2Vzc29yUGx1Z2luVHlwZSB9IGZyb20gXCJlc2xpbnQtcGx1Z2luLWpzZG9jXCI7XG5pbXBvcnQgdHlwZSB7IHBhcnNlciBhcyBwYXJzZXJUeXBlIH0gZnJvbSBcInR5cGVzY3JpcHQtZXNsaW50XCI7XG5cbi8qKiBPcHRpb25zIGZvciBjcmVhdGluZyB0aGUgd3JhcHBlZCBKU0RvYyBwcm9jZXNzb3IgcGx1Z2luLiAqL1xuaW50ZXJmYWNlIENyZWF0ZVdyYXBwZWRKc2RvY1Byb2Nlc3NvclBsdWdpbk9wdGlvbnMge1xuICAvKiogV2hldGhlciB0byBsaW50IGRlZmF1bHQgdmFsdWUgc25pcHBldHMuICovXG4gIGNoZWNrRGVmYXVsdHM6IGJvb2xlYW47XG5cbiAgLyoqIFdoZXRoZXIgdG8gbGludCBwYXJhbWV0ZXIgZGVmYXVsdCBzbmlwcGV0cy4gKi9cbiAgY2hlY2tQYXJhbXM6IGJvb2xlYW47XG5cbiAgLyoqIFdoZXRoZXIgdG8gbGludCBwcm9wZXJ0eSBkZWZhdWx0IHNuaXBwZXRzLiAqL1xuICBjaGVja1Byb3BlcnRpZXM6IGJvb2xlYW47XG5cbiAgLyoqIFVwc3RyZWFtIEpTRG9jIHByb2Nlc3NvciBmYWN0b3J5LiAqL1xuICBnZXRKc2RvY1Byb2Nlc3NvclBsdWdpbjogSnNkb2NQcm9jZXNzb3JQbHVnaW5GYWN0b3J5O1xuXG4gIC8qKiBQYXJzZXIgcGFzc2VkIHRocm91Z2ggdG8gdGhlIHVwc3RyZWFtIHByb2Nlc3Nvci4gKi9cbiAgcGFyc2VyOiBQYXJzZXI7XG5cbiAgLyoqIFNvdXJjZSB0eXBlIGZvciBleHRyYWN0ZWQgc25pcHBldHMuICovXG4gIHNvdXJjZVR5cGU6IFwibW9kdWxlXCIgfCBcInNjcmlwdFwiO1xufVxuXG4vKiogTWluaW1hbCB1cHN0cmVhbSBleGFtcGxlIHByb2Nlc3NvciBjb250cmFjdCB1c2VkIGJ5IHRoZSB3cmFwcGVyLiAqL1xuaW50ZXJmYWNlIElFeGFtcGxlUHJvY2Vzc29yIHtcbiAgLyoqIE9wdGlvbmFsIHByb2Nlc3NvciBtZXRhZGF0YS4gKi9cbiAgbWV0YT86IElQcm9jZXNzb3JNZXRhO1xuXG4gIC8qKiBSZW1hcCB2aXJ0dWFsLWZpbGUgbGludCBtZXNzYWdlcyBiYWNrIG9udG8gdGhlIGhvc3QgZmlsZS4gKi9cbiAgcG9zdHByb2Nlc3M6IChcbiAgICBtZXNzYWdlczogTGludGVyLkxpbnRNZXNzYWdlW11bXSxcbiAgICBmaWxlbmFtZTogc3RyaW5nLFxuICApID0+IExpbnRlci5MaW50TWVzc2FnZVtdO1xuXG4gIC8qKiBFeHRyYWN0IHZpcnR1YWwgc25pcHBldCBmaWxlcyBmcm9tIGEgaG9zdCBmaWxlLiAqL1xuICBwcmVwcm9jZXNzOiAodGV4dDogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nKSA9PiBQcm9jZXNzb3JGaWxlW107XG5cbiAgLyoqIFdoZXRoZXIgdGhlIHVwc3RyZWFtIHByb2Nlc3NvciBzdXBwb3J0cyBhdXRvZml4LiAqL1xuICBzdXBwb3J0c0F1dG9maXg/OiBib29sZWFuO1xufVxuXG4vKiogTWluaW1hbCBtZXRhIHNoYXBlIHVzZWQgYnkgdGhlIHdyYXBwZWQgcHJvY2Vzc29yLiAqL1xuaW50ZXJmYWNlIElQcm9jZXNzb3JNZXRhIHtcbiAgLyoqIFByb2Nlc3NvciBuYW1lIHNob3duIHRvIEVTTGludC4gKi9cbiAgbmFtZT86IHN0cmluZztcblxuICAvKiogUHJvY2Vzc29yIHZlcnNpb24gc2hvd24gdG8gRVNMaW50LiAqL1xuICB2ZXJzaW9uPzogc3RyaW5nO1xufVxuXG4vKiogTWluaW1hbCB1cHN0cmVhbSBwbHVnaW4gY29udHJhY3QgdXNlZCBieSB0aGUgd3JhcHBlci4gKi9cbmludGVyZmFjZSBJUHJvY2Vzc29yUGx1Z2luIHtcbiAgLyoqIE9wdGlvbmFsIHBsdWdpbiBtZXRhZGF0YS4gKi9cbiAgbWV0YT86IElQcm9jZXNzb3JNZXRhO1xuXG4gIC8qKiBBdmFpbGFibGUgcHJvY2Vzc29ycyBleHBvcnRlZCBieSB0aGUgcGx1Z2luLiAqL1xuICBwcm9jZXNzb3JzPzoge1xuICAgIC8qKiBKU0RvYyBleGFtcGxlL2RlZmF1bHQtZXhwcmVzc2lvbiBwcm9jZXNzb3IuICovXG4gICAgZXhhbXBsZXM/OiBQYXJ0aWFsPElFeGFtcGxlUHJvY2Vzc29yPjtcbiAgfTtcbn1cblxuLyoqIEZ1bmN0aW9uIHNpZ25hdHVyZSBmb3IgdGhlIHVwc3RyZWFtIEpTRG9jIHByb2Nlc3NvciBmYWN0b3J5LiAqL1xudHlwZSBKc2RvY1Byb2Nlc3NvclBsdWdpbkZhY3RvcnkgPSB0eXBlb2YgZ2V0SnNkb2NQcm9jZXNzb3JQbHVnaW5UeXBlO1xuXG4vKiogUGFyc2VyIGFjY2VwdGVkIGJ5IHRoZSB1cHN0cmVhbSBKU0RvYyBwcm9jZXNzb3IuICovXG50eXBlIFBhcnNlciA9IHR5cGVvZiBwYXJzZXJUeXBlO1xuXG4vKiogVmlydHVhbCBmaWxlcyBlbWl0dGVkIGJ5IGEgcHJvY2Vzc29yIHByZXByb2Nlc3Mgc3RlcC4gKi9cbnR5cGUgUHJvY2Vzc29yRmlsZSA9IExpbnRlci5Qcm9jZXNzb3JGaWxlIHwgc3RyaW5nO1xuXG4vKiogTm9uLWVtcHR5IHF1ZXVlIG9mIHByb2Nlc3NvciBpbnN0YW5jZXMgZm9yIG9uZSBmaWxlbmFtZS4gKi9cbnR5cGUgUHJvY2Vzc29yUXVldWUgPSBbSUV4YW1wbGVQcm9jZXNzb3IsIC4uLklFeGFtcGxlUHJvY2Vzc29yW11dO1xuXG4vKipcbiAqIEJ1aWxkIHRoZSBvcHRpb25zIG9iamVjdCBmb3J3YXJkZWQgdG8gdGhlIHVwc3RyZWFtIHByb2Nlc3NvciBmYWN0b3J5LlxuICogQHBhcmFtIG9wdGlvbnMgVGhlIHdyYXBwZXIgb3B0aW9ucy5cbiAqIEByZXR1cm5zIEEgc2hhbGxvdyBvcHRpb25zIG9iamVjdCBmb3IgdGhlIHVwc3RyZWFtIHByb2Nlc3Nvci5cbiAqIEBleGFtcGxlXG4gKiBjb25zb2xlLmxvZyhidWlsZFVwc3RyZWFtUHJvY2Vzc29yT3B0aW9ucyh7IGNoZWNrRGVmYXVsdHM6IHRydWUsIGNoZWNrUGFyYW1zOiB0cnVlLCBjaGVja1Byb3BlcnRpZXM6IHRydWUsIGdldEpzZG9jUHJvY2Vzc29yUGx1Z2luOiAoKCkgPT4gKHsgcHJvY2Vzc29yczogeyBleGFtcGxlczoge30gfSB9KSkgYXMgSnNkb2NQcm9jZXNzb3JQbHVnaW5GYWN0b3J5LCBwYXJzZXI6IHt9IGFzIFBhcnNlciwgc291cmNlVHlwZTogXCJtb2R1bGVcIiB9KS5zb3VyY2VUeXBlKTtcbiAqL1xuZnVuY3Rpb24gYnVpbGRVcHN0cmVhbVByb2Nlc3Nvck9wdGlvbnMoXG4gIG9wdGlvbnM6IENyZWF0ZVdyYXBwZWRKc2RvY1Byb2Nlc3NvclBsdWdpbk9wdGlvbnMsXG4pOiBQYXJhbWV0ZXJzPEpzZG9jUHJvY2Vzc29yUGx1Z2luRmFjdG9yeT5bMF0ge1xuICByZXR1cm4ge1xuICAgIGNoZWNrRGVmYXVsdHM6IG9wdGlvbnMuY2hlY2tEZWZhdWx0cyxcbiAgICBjaGVja1BhcmFtczogb3B0aW9ucy5jaGVja1BhcmFtcyxcbiAgICBjaGVja1Byb3BlcnRpZXM6IG9wdGlvbnMuY2hlY2tQcm9wZXJ0aWVzLFxuICAgIHBhcnNlcjogb3B0aW9ucy5wYXJzZXIsXG4gICAgc291cmNlVHlwZTogb3B0aW9ucy5zb3VyY2VUeXBlLFxuICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIHdyYXBwZWQgSlNEb2MgcHJvY2Vzc29yIHBsdWdpbiB3aXRoIHBlci1maWxlIHVwc3RyZWFtIGlzb2xhdGlvbi5cbiAqIEBwYXJhbSBvcHRpb25zIFRoZSB3cmFwcGVyIG9wdGlvbnMuXG4gKiBAcmV0dXJucyBBIHBsdWdpbiB3aG9zZSBleGFtcGxlcyBwcm9jZXNzb3IgdXNlcyBmcmVzaCB1cHN0cmVhbSBzdGF0ZSBwZXIgZmlsZS5cbiAqIEBleGFtcGxlXG4gKiBjb25zb2xlLmxvZyhjcmVhdGVXcmFwcGVkSnNkb2NQcm9jZXNzb3JQbHVnaW4oeyBjaGVja0RlZmF1bHRzOiB0cnVlLCBjaGVja1BhcmFtczogdHJ1ZSwgY2hlY2tQcm9wZXJ0aWVzOiB0cnVlLCBnZXRKc2RvY1Byb2Nlc3NvclBsdWdpbjogKCgpID0+ICh7IHByb2Nlc3NvcnM6IHsgZXhhbXBsZXM6IHt9IH0gfSkpIGFzIEpzZG9jUHJvY2Vzc29yUGx1Z2luRmFjdG9yeSwgcGFyc2VyOiB7fSBhcyBQYXJzZXIsIHNvdXJjZVR5cGU6IFwibW9kdWxlXCIgfSkucHJvY2Vzc29ycz8uZXhhbXBsZXMgIT09IHZvaWQgMCk7XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVdyYXBwZWRKc2RvY1Byb2Nlc3NvclBsdWdpbihcbiAgb3B0aW9uczogQ3JlYXRlV3JhcHBlZEpzZG9jUHJvY2Vzc29yUGx1Z2luT3B0aW9ucyxcbik6IElQcm9jZXNzb3JQbHVnaW4ge1xuICBjb25zdCB1cHN0cmVhbU9wdGlvbnMgPSBidWlsZFVwc3RyZWFtUHJvY2Vzc29yT3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3QgYmFzZVBsdWdpbiA9IG9wdGlvbnMuZ2V0SnNkb2NQcm9jZXNzb3JQbHVnaW4oXG4gICAgdXBzdHJlYW1PcHRpb25zLFxuICApIGFzIElQcm9jZXNzb3JQbHVnaW47XG4gIGNvbnN0IGJhc2VQcm9jZXNzb3IgPSByZXNvbHZlRXhhbXBsZXNQcm9jZXNzb3IoYmFzZVBsdWdpbiwgZmFsc2UpO1xuICBjb25zdCBwcm9jZXNzb3JzQnlGaWxlbmFtZSA9IG5ldyBNYXA8c3RyaW5nLCBQcm9jZXNzb3JRdWV1ZT4oKTtcblxuICByZXR1cm4ge1xuICAgIC4uLihiYXNlUGx1Z2luLm1ldGEgPT09IHZvaWQgMCA/IHt9IDogeyBtZXRhOiBiYXNlUGx1Z2luLm1ldGEgfSksXG4gICAgcHJvY2Vzc29yczoge1xuICAgICAgZXhhbXBsZXM6IHtcbiAgICAgICAgLi4uKGJhc2VQcm9jZXNzb3IubWV0YSA9PT0gdm9pZCAwID8ge30gOiB7IG1ldGE6IGJhc2VQcm9jZXNzb3IubWV0YSB9KSxcbiAgICAgICAgcG9zdHByb2Nlc3MoXG4gICAgICAgICAgbWVzc2FnZXM6IExpbnRlci5MaW50TWVzc2FnZVtdW10sXG4gICAgICAgICAgZmlsZW5hbWU6IHN0cmluZyxcbiAgICAgICAgKTogTGludGVyLkxpbnRNZXNzYWdlW10ge1xuICAgICAgICAgIHJldHVybiBkZXF1ZXVlUHJvY2Vzc29yKHByb2Nlc3NvcnNCeUZpbGVuYW1lLCBmaWxlbmFtZSkucG9zdHByb2Nlc3MoXG4gICAgICAgICAgICBtZXNzYWdlcyxcbiAgICAgICAgICAgIGZpbGVuYW1lLFxuICAgICAgICAgICk7XG4gICAgICAgIH0sXG4gICAgICAgIHByZXByb2Nlc3ModGV4dDogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nKTogUHJvY2Vzc29yRmlsZVtdIHtcbiAgICAgICAgICBjb25zdCBwbHVnaW4gPSBvcHRpb25zLmdldEpzZG9jUHJvY2Vzc29yUGx1Z2luKFxuICAgICAgICAgICAgdXBzdHJlYW1PcHRpb25zLFxuICAgICAgICAgICkgYXMgSVByb2Nlc3NvclBsdWdpbjtcbiAgICAgICAgICBjb25zdCBwcm9jZXNzb3IgPSByZXNvbHZlRXhhbXBsZXNQcm9jZXNzb3IoXG4gICAgICAgICAgICBwbHVnaW4sXG4gICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICkgYXMgSUV4YW1wbGVQcm9jZXNzb3I7XG4gICAgICAgICAgY29uc3QgcHJvY2Vzc2VkRmlsZXMgPSBwcm9jZXNzb3IucHJlcHJvY2Vzcyh0ZXh0LCBmaWxlbmFtZSk7XG5cbiAgICAgICAgICBxdWV1ZVByb2Nlc3Nvcihwcm9jZXNzb3JzQnlGaWxlbmFtZSwgZmlsZW5hbWUsIHByb2Nlc3Nvcik7XG5cbiAgICAgICAgICByZXR1cm4gcHJvY2Vzc2VkRmlsZXM7XG4gICAgICAgIH0sXG4gICAgICAgIC4uLihiYXNlUHJvY2Vzc29yLnN1cHBvcnRzQXV0b2ZpeCA9PT0gdm9pZCAwXG4gICAgICAgICAgPyB7fVxuICAgICAgICAgIDogeyBzdXBwb3J0c0F1dG9maXg6IGJhc2VQcm9jZXNzb3Iuc3VwcG9ydHNBdXRvZml4IH0pLFxuICAgICAgfSxcbiAgICB9LFxuICB9O1xufVxuXG4vKipcbiAqIERlcXVldWUgdGhlIG5leHQgcHJvY2Vzc29yIGluc3RhbmNlIGZvciBhIGZpbGVuYW1lLlxuICogQHBhcmFtIHByb2Nlc3NvcnNCeUZpbGVuYW1lIFF1ZXVlZCBwcm9jZXNzb3JzIGtleWVkIGJ5IHNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSBmaWxlbmFtZSBUaGUgaG9zdCBmaWxlbmFtZSBmb3IgdGhlIHByb2Nlc3NvciBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIFRoZSBuZXh0IHVwc3RyZWFtIHByb2Nlc3NvciBpbnN0YW5jZS5cbiAqIEB0aHJvd3Mge0Vycm9yfSBUaHJvd24gd2hlbiBwb3N0cHJvY2VzcyBpcyBjYWxsZWQgd2l0aG91dCBhIHF1ZXVlZCBwcm9jZXNzb3IuXG4gKiBAZXhhbXBsZVxuICogY29uc29sZS5sb2coXCJkZXF1ZXVlUHJvY2Vzc29yXCIpO1xuICovXG5mdW5jdGlvbiBkZXF1ZXVlUHJvY2Vzc29yKFxuICBwcm9jZXNzb3JzQnlGaWxlbmFtZTogTWFwPHN0cmluZywgUHJvY2Vzc29yUXVldWU+LFxuICBmaWxlbmFtZTogc3RyaW5nLFxuKTogSUV4YW1wbGVQcm9jZXNzb3Ige1xuICBjb25zdCBxdWV1ZWRQcm9jZXNzb3JzID0gcHJvY2Vzc29yc0J5RmlsZW5hbWUuZ2V0KGZpbGVuYW1lKTtcblxuICBpZiAocXVldWVkUHJvY2Vzc29ycyA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFdyYXBwZWQgSlNEb2MgcHJvY2Vzc29yIGxvc3QgbGlmZWN5Y2xlIHN0YXRlIGZvciAke2ZpbGVuYW1lfWAsXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IFtwcm9jZXNzb3JdID0gcXVldWVkUHJvY2Vzc29ycztcblxuICBpZiAocXVldWVkUHJvY2Vzc29ycy5sZW5ndGggPT09IDEpIHtcbiAgICBwcm9jZXNzb3JzQnlGaWxlbmFtZS5kZWxldGUoZmlsZW5hbWUpO1xuICB9IGVsc2Uge1xuICAgIHF1ZXVlZFByb2Nlc3NvcnMuc2hpZnQoKTtcbiAgfVxuXG4gIHJldHVybiBwcm9jZXNzb3I7XG59XG5cbi8qKlxuICogUXVldWUgYSBwcm9jZXNzb3IgaW5zdGFuY2UgZm9yIGEgbGF0ZXIgcG9zdHByb2Nlc3MgY2FsbC5cbiAqIEBwYXJhbSBwcm9jZXNzb3JzQnlGaWxlbmFtZSBRdWV1ZWQgcHJvY2Vzc29ycyBrZXllZCBieSBzb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0gZmlsZW5hbWUgVGhlIGhvc3QgZmlsZW5hbWUgZm9yIHRoZSBwcm9jZXNzb3IgaW5zdGFuY2UuXG4gKiBAcGFyYW0gcHJvY2Vzc29yIFRoZSB1cHN0cmVhbSBwcm9jZXNzb3IgaW5zdGFuY2UuXG4gKiBAZXhhbXBsZVxuICogY29uc29sZS5sb2coXCJxdWV1ZVByb2Nlc3NvclwiKTtcbiAqL1xuZnVuY3Rpb24gcXVldWVQcm9jZXNzb3IoXG4gIHByb2Nlc3NvcnNCeUZpbGVuYW1lOiBNYXA8c3RyaW5nLCBQcm9jZXNzb3JRdWV1ZT4sXG4gIGZpbGVuYW1lOiBzdHJpbmcsXG4gIHByb2Nlc3NvcjogSUV4YW1wbGVQcm9jZXNzb3IsXG4pOiB2b2lkIHtcbiAgY29uc3QgcXVldWVkUHJvY2Vzc29ycyA9IHByb2Nlc3NvcnNCeUZpbGVuYW1lLmdldChmaWxlbmFtZSk7XG5cbiAgaWYgKHF1ZXVlZFByb2Nlc3NvcnMgPT09IHZvaWQgMCkge1xuICAgIHByb2Nlc3NvcnNCeUZpbGVuYW1lLnNldChmaWxlbmFtZSwgW3Byb2Nlc3Nvcl0pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHF1ZXVlZFByb2Nlc3NvcnMucHVzaChwcm9jZXNzb3IpO1xufVxuXG4vKipcbiAqIFJlc29sdmUgdGhlIHVwc3RyZWFtIGV4YW1wbGVzIHByb2Nlc3NvciBmcm9tIGEgcGx1Z2luIGluc3RhbmNlLlxuICogQHBhcmFtIHBsdWdpbiBUaGUgdXBzdHJlYW0gcGx1Z2luIGluc3RhbmNlLlxuICogQHBhcmFtIHNob3VsZFJlcXVpcmVMaWZlY3ljbGVNZXRob2RzIFdoZXRoZXIgcHJlcHJvY2Vzcy9wb3N0cHJvY2VzcyBtdXN0IGJlIHByZXNlbnQuXG4gKiBAcmV0dXJucyBUaGUgdXBzdHJlYW0gZXhhbXBsZXMgcHJvY2Vzc29yLlxuICogQHRocm93cyB7VHlwZUVycm9yfSBUaHJvd24gd2hlbiB0aGUgdXBzdHJlYW0gcGx1Z2luIG9taXRzIHRoZSBleGFtcGxlcyBwcm9jZXNzb3Igb3IgaXRzIGxpZmVjeWNsZSBtZXRob2RzLlxuICogQGV4YW1wbGVcbiAqIGNvbnNvbGUubG9nKHJlc29sdmVFeGFtcGxlc1Byb2Nlc3Nvcih7IHByb2Nlc3NvcnM6IHsgZXhhbXBsZXM6IHt9IH0gfSwgZmFsc2UpICE9PSB2b2lkIDApO1xuICovXG5mdW5jdGlvbiByZXNvbHZlRXhhbXBsZXNQcm9jZXNzb3IoXG4gIHBsdWdpbjogSVByb2Nlc3NvclBsdWdpbixcbiAgc2hvdWxkUmVxdWlyZUxpZmVjeWNsZU1ldGhvZHM6IGJvb2xlYW4sXG4pOiBQYXJ0aWFsPElFeGFtcGxlUHJvY2Vzc29yPiB7XG4gIGNvbnN0IHByb2Nlc3NvciA9IHBsdWdpbi5wcm9jZXNzb3JzPy5leGFtcGxlcztcblxuICBpZiAocHJvY2Vzc29yID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgXCJlc2xpbnQtcGx1Z2luLWpzZG9jIGRpZCBub3QgcHJvdmlkZSBwcm9jZXNzb3JzLmV4YW1wbGVzXCIsXG4gICAgKTtcbiAgfVxuXG4gIGlmIChcbiAgICBzaG91bGRSZXF1aXJlTGlmZWN5Y2xlTWV0aG9kcyAmJlxuICAgICh0eXBlb2YgcHJvY2Vzc29yLnByZXByb2Nlc3MgIT09IFwiZnVuY3Rpb25cIiB8fFxuICAgICAgdHlwZW9mIHByb2Nlc3Nvci5wb3N0cHJvY2VzcyAhPT0gXCJmdW5jdGlvblwiKVxuICApIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgXCJlc2xpbnQtcGx1Z2luLWpzZG9jIHByb2Nlc3NvcnMuZXhhbXBsZXMgbXVzdCBwcm92aWRlIHByZXByb2Nlc3MgYW5kIHBvc3Rwcm9jZXNzXCIsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBwcm9jZXNzb3I7XG59XG5cbmV4cG9ydCB7IGNyZWF0ZVdyYXBwZWRKc2RvY1Byb2Nlc3NvclBsdWdpbiB9O1xuZXhwb3J0IHR5cGUgeyBKc2RvY1Byb2Nlc3NvclBsdWdpbkZhY3RvcnksIFBhcnNlciB9O1xuIl19
|
package/dist/docs/jsdoc.d.ts
CHANGED
|
@@ -3,10 +3,8 @@ import type { Linter } from "eslint";
|
|
|
3
3
|
* Build the jsdoc plugin configuration and any overrides needed by this project.
|
|
4
4
|
* @returns Return value output.
|
|
5
5
|
* @example
|
|
6
|
-
*
|
|
7
|
-
* await jsdoc();
|
|
8
|
-
* ```
|
|
6
|
+
* console.log(await jsdoc());
|
|
9
7
|
*/
|
|
10
|
-
declare
|
|
8
|
+
declare function jsdoc(): Promise<Linter.Config[]>;
|
|
11
9
|
export { jsdoc };
|
|
12
10
|
//# sourceMappingURL=jsdoc.d.ts.map
|
package/dist/docs/jsdoc.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsdoc.d.ts","sourceRoot":"","sources":["../../src/docs/jsdoc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;
|
|
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"}
|
package/dist/docs/jsdoc.js
CHANGED
|
@@ -1,12 +1,19 @@
|
|
|
1
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
|
+
];
|
|
2
11
|
/**
|
|
3
12
|
* Build the custom jsdoc error rules based on available plugin rules.
|
|
4
13
|
* @param availableRules Set of available jsdoc rule names.
|
|
5
14
|
* @returns The rules record for ESLint.
|
|
6
15
|
* @example
|
|
7
|
-
*
|
|
8
|
-
* const rules = buildCustomErrorRules(new Set(["require-throws"]));
|
|
9
|
-
* ```
|
|
16
|
+
* console.log(buildCustomErrorRules(new Set(["require-throws"])));
|
|
10
17
|
*/
|
|
11
18
|
const buildCustomErrorRules = (availableRules) => {
|
|
12
19
|
const ruleNames = [
|
|
@@ -38,19 +45,33 @@ const requireJsdocContexts = [
|
|
|
38
45
|
"TSIndexSignature",
|
|
39
46
|
];
|
|
40
47
|
/**
|
|
41
|
-
*
|
|
42
|
-
* @
|
|
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.
|
|
43
51
|
* @example
|
|
44
|
-
*
|
|
45
|
-
* await jsdoc();
|
|
46
|
-
* ```
|
|
52
|
+
* console.log(buildPresetConfigs({ "flat/recommended-typescript-error": {} as Linter.Config }).length);
|
|
47
53
|
*/
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
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, {
|
|
54
75
|
name: "jsdoc/custom",
|
|
55
76
|
rules: {
|
|
56
77
|
...customError,
|
|
@@ -59,7 +80,10 @@ const jsdoc = async () => {
|
|
|
59
80
|
}, {
|
|
60
81
|
name: "jsdoc/require-jsdoc-alias",
|
|
61
82
|
rules: {
|
|
62
|
-
"jsdoc/require-description": [
|
|
83
|
+
"jsdoc/require-description": [
|
|
84
|
+
"error",
|
|
85
|
+
{ contexts: requireJsdocContexts },
|
|
86
|
+
],
|
|
63
87
|
"jsdoc/require-jsdoc": ["error", { contexts: requireJsdocContexts }],
|
|
64
88
|
},
|
|
65
89
|
}, {
|
|
@@ -72,6 +96,27 @@ const jsdoc = async () => {
|
|
|
72
96
|
],
|
|
73
97
|
},
|
|
74
98
|
});
|
|
75
|
-
}
|
|
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
|
+
}
|
|
76
121
|
export { jsdoc };
|
|
77
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNkb2MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZG9jcy9qc2RvYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTdDOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxxQkFBcUIsR0FBRyxDQUM1QixjQUEyQixFQUNQLEVBQUU7SUFDdEIsTUFBTSxTQUFTLEdBQUc7UUFDaEIsbUJBQW1CO1FBQ25CLDJCQUEyQjtRQUMzQixxQkFBcUI7UUFDckIsdUNBQXVDO1FBQ3ZDLGtCQUFrQjtRQUNsQixnQkFBZ0I7UUFDaEIsV0FBVztLQUNaLENBQUM7SUFFRixPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQ3ZCLFNBQVM7U0FDTixNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDMUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsSUFBSSxFQUFFLEVBQUUsT0FBTyxDQUFVLENBQUMsQ0FDdEQsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLDRDQUE0QztBQUM1QyxNQUFNLG9CQUFvQixHQUFHO0lBQzNCLCtCQUErQjtJQUMvQiwwREFBMEQ7SUFDMUQsd0RBQXdEO0lBQ3hELCtCQUErQjtJQUMvQix3REFBd0Q7SUFDeEQsd0JBQXdCO0lBQ3hCLHdCQUF3QjtJQUN4QixxQkFBcUI7SUFDckIsbUJBQW1CO0lBQ25CLDRCQUE0QjtJQUM1QixpQ0FBaUM7SUFDakMsa0JBQWtCO0NBQ25CLENBQUM7QUFFRjs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxLQUFLLEdBQUcsS0FBSyxJQUE4QixFQUFFO0lBQ2pELE1BQU0sV0FBVyxHQUFHLE1BQU0sTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDeEQsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDO0lBRS9DLE1BQU0sY0FBYyxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDekQsTUFBTSxXQUFXLEdBQUcscUJBQXFCLENBQUMsY0FBYyxDQUFDLENBQUM7SUFFMUQsT0FBTyxZQUFZLENBQ2pCLE9BQU8sQ0FBQyxtQ0FBbUMsQ0FBQyxFQUM1QyxPQUFPLENBQUMsZ0NBQWdDLENBQUMsRUFDekMsT0FBTyxDQUFDLCtCQUErQixDQUFDLEVBQ3hDLE9BQU8sQ0FBQyxvQ0FBb0MsQ0FBQyxFQUM3QyxPQUFPLENBQUMsaUNBQWlDLENBQUMsRUFDMUM7UUFDRSxJQUFJLEVBQUUsY0FBYztRQUNwQixLQUFLLEVBQUU7WUFDTCxHQUFHLFdBQVc7WUFDZCxxQkFBcUIsRUFBRSxLQUFLO1NBQzdCO0tBQ0YsRUFDRDtRQUNFLElBQUksRUFBRSwyQkFBMkI7UUFDakMsS0FBSyxFQUFFO1lBQ0wsMkJBQTJCLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxRQUFRLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQztZQUMxRSxxQkFBcUIsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLFFBQVEsRUFBRSxvQkFBb0IsRUFBRSxDQUFDO1NBQ3JFO0tBQ0YsRUFDRDtRQUNFLEtBQUssRUFBRSxDQUFDLGNBQWMsQ0FBQztRQUN2QixJQUFJLEVBQUUsbUJBQW1CO1FBQ3pCLEtBQUssRUFBRTtZQUNMLGlDQUFpQyxFQUFFO2dCQUNqQyxPQUFPO2dCQUNQLEVBQUUsZUFBZSxFQUFFLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxFQUFFO2FBQ3hDO1NBQ0Y7S0FDRixDQUNGLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IExpbnRlciB9IGZyb20gXCJlc2xpbnRcIjtcclxuXHJcbmltcG9ydCB7IGRlZmluZUNvbmZpZyB9IGZyb20gXCJlc2xpbnQvY29uZmlnXCI7XHJcblxyXG4vKipcclxuICogQnVpbGQgdGhlIGN1c3RvbSBqc2RvYyBlcnJvciBydWxlcyBiYXNlZCBvbiBhdmFpbGFibGUgcGx1Z2luIHJ1bGVzLlxyXG4gKiBAcGFyYW0gYXZhaWxhYmxlUnVsZXMgU2V0IG9mIGF2YWlsYWJsZSBqc2RvYyBydWxlIG5hbWVzLlxyXG4gKiBAcmV0dXJucyBUaGUgcnVsZXMgcmVjb3JkIGZvciBFU0xpbnQuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogY29uc3QgcnVsZXMgPSBidWlsZEN1c3RvbUVycm9yUnVsZXMobmV3IFNldChbXCJyZXF1aXJlLXRocm93c1wiXSkpO1xyXG4gKiBgYGBcclxuICovXHJcbmNvbnN0IGJ1aWxkQ3VzdG9tRXJyb3JSdWxlcyA9IChcclxuICBhdmFpbGFibGVSdWxlczogU2V0PHN0cmluZz4sXHJcbik6IExpbnRlci5SdWxlc1JlY29yZCA9PiB7XHJcbiAgY29uc3QgcnVsZU5hbWVzID0gW1xyXG4gICAgXCJjaGVjay1pbmRlbnRhdGlvblwiLFxyXG4gICAgXCJjb252ZXJ0LXRvLWpzZG9jLWNvbW1lbnRzXCIsXHJcbiAgICBcInJlcXVpcmUtZGVzY3JpcHRpb25cIixcclxuICAgIFwicmVxdWlyZS1kZXNjcmlwdGlvbi1jb21wbGV0ZS1zZW50ZW5jZVwiLFxyXG4gICAgXCJyZXF1aXJlLXRlbXBsYXRlXCIsXHJcbiAgICBcInJlcXVpcmUtdGhyb3dzXCIsXHJcbiAgICBcInNvcnQtdGFnc1wiLFxyXG4gIF07XHJcblxyXG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXHJcbiAgICBydWxlTmFtZXNcclxuICAgICAgLmZpbHRlcigocnVsZSkgPT4gYXZhaWxhYmxlUnVsZXMuaGFzKHJ1bGUpKVxyXG4gICAgICAubWFwKChydWxlKSA9PiBbYGpzZG9jLyR7cnVsZX1gLCBcImVycm9yXCJdIGFzIGNvbnN0KSxcclxuICApO1xyXG59O1xyXG5cclxuLyoqIEFTVCBjb250ZXh0cyB0aGF0IG11c3QgaW5jbHVkZSBKU0RvYy4gKi9cclxuY29uc3QgcmVxdWlyZUpzZG9jQ29udGV4dHMgPSBbXHJcbiAgXCJQcm9ncmFtID4gRnVuY3Rpb25EZWNsYXJhdGlvblwiLFxyXG4gIFwiUHJvZ3JhbSA+IEV4cG9ydERlZmF1bHREZWNsYXJhdGlvbiA+IEZ1bmN0aW9uRGVjbGFyYXRpb25cIixcclxuICBcIlByb2dyYW0gPiBFeHBvcnROYW1lZERlY2xhcmF0aW9uID4gRnVuY3Rpb25EZWNsYXJhdGlvblwiLFxyXG4gIFwiUHJvZ3JhbSA+IFZhcmlhYmxlRGVjbGFyYXRpb25cIixcclxuICBcIlByb2dyYW0gPiBFeHBvcnROYW1lZERlY2xhcmF0aW9uID4gVmFyaWFibGVEZWNsYXJhdGlvblwiLFxyXG4gIFwiVFNJbnRlcmZhY2VEZWNsYXJhdGlvblwiLFxyXG4gIFwiVFNUeXBlQWxpYXNEZWNsYXJhdGlvblwiLFxyXG4gIFwiVFNQcm9wZXJ0eVNpZ25hdHVyZVwiLFxyXG4gIFwiVFNNZXRob2RTaWduYXR1cmVcIixcclxuICBcIlRTQ2FsbFNpZ25hdHVyZURlY2xhcmF0aW9uXCIsXHJcbiAgXCJUU0NvbnN0cnVjdFNpZ25hdHVyZURlY2xhcmF0aW9uXCIsXHJcbiAgXCJUU0luZGV4U2lnbmF0dXJlXCIsXHJcbl07XHJcblxyXG4vKipcclxuICogQnVpbGQgdGhlIGpzZG9jIHBsdWdpbiBjb25maWd1cmF0aW9uIGFuZCBhbnkgb3ZlcnJpZGVzIG5lZWRlZCBieSB0aGlzIHByb2plY3QuXHJcbiAqIEByZXR1cm5zIFJldHVybiB2YWx1ZSBvdXRwdXQuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogYXdhaXQganNkb2MoKTtcclxuICogYGBgXHJcbiAqL1xyXG5jb25zdCBqc2RvYyA9IGFzeW5jICgpOiBQcm9taXNlPExpbnRlci5Db25maWdbXT4gPT4ge1xyXG4gIGNvbnN0IGpzZG9jTW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiZXNsaW50LXBsdWdpbi1qc2RvY1wiKTtcclxuICBjb25zdCB7IGNvbmZpZ3MsIHJ1bGVzIH0gPSBqc2RvY01vZHVsZS5kZWZhdWx0O1xyXG5cclxuICBjb25zdCBhdmFpbGFibGVSdWxlcyA9IG5ldyBTZXQoT2JqZWN0LmtleXMocnVsZXMgPz8ge30pKTtcclxuICBjb25zdCBjdXN0b21FcnJvciA9IGJ1aWxkQ3VzdG9tRXJyb3JSdWxlcyhhdmFpbGFibGVSdWxlcyk7XHJcblxyXG4gIHJldHVybiBkZWZpbmVDb25maWcoXHJcbiAgICBjb25maWdzW1wiZmxhdC9yZWNvbW1lbmRlZC10eXBlc2NyaXB0LWVycm9yXCJdLFxyXG4gICAgY29uZmlnc1tcImZsYXQvY29udGVudHMtdHlwZXNjcmlwdC1lcnJvclwiXSxcclxuICAgIGNvbmZpZ3NbXCJmbGF0L2xvZ2ljYWwtdHlwZXNjcmlwdC1lcnJvclwiXSxcclxuICAgIGNvbmZpZ3NbXCJmbGF0L3JlcXVpcmVtZW50cy10eXBlc2NyaXB0LWVycm9yXCJdLFxyXG4gICAgY29uZmlnc1tcImZsYXQvc3R5bGlzdGljLXR5cGVzY3JpcHQtZXJyb3JcIl0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6IFwianNkb2MvY3VzdG9tXCIsXHJcbiAgICAgIHJ1bGVzOiB7XHJcbiAgICAgICAgLi4uY3VzdG9tRXJyb3IsXHJcbiAgICAgICAgXCJqc2RvYy90ZXh0LWVzY2FwaW5nXCI6IFwib2ZmXCIsXHJcbiAgICAgIH0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiBcImpzZG9jL3JlcXVpcmUtanNkb2MtYWxpYXNcIixcclxuICAgICAgcnVsZXM6IHtcclxuICAgICAgICBcImpzZG9jL3JlcXVpcmUtZGVzY3JpcHRpb25cIjogW1wiZXJyb3JcIiwgeyBjb250ZXh0czogcmVxdWlyZUpzZG9jQ29udGV4dHMgfV0sXHJcbiAgICAgICAgXCJqc2RvYy9yZXF1aXJlLWpzZG9jXCI6IFtcImVycm9yXCIsIHsgY29udGV4dHM6IHJlcXVpcmVKc2RvY0NvbnRleHRzIH1dLFxyXG4gICAgICB9LFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgZmlsZXM6IFtcIioqLyouc3BlYy50c1wiXSxcclxuICAgICAgbmFtZTogXCJqc2RvYy9jdXN0b20tc3BlY1wiLFxyXG4gICAgICBydWxlczoge1xyXG4gICAgICAgIFwianNkb2MvY29udmVydC10by1qc2RvYy1jb21tZW50c1wiOiBbXHJcbiAgICAgICAgICBcImVycm9yXCIsXHJcbiAgICAgICAgICB7IGFsbG93ZWRQcmVmaXhlczogW1wiQXJyYW5nZVwiLCBcIkFjdFwiXSB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgIH0sXHJcbiAgICB9LFxyXG4gICk7XHJcbn07XHJcblxyXG5leHBvcnQgeyBqc2RvYyB9O1xyXG4iXX0=
|
|
122
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNkb2MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZG9jcy9qc2RvYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTdDLE9BQU8sRUFDTCw2QkFBNkIsRUFDN0IsOEJBQThCLEVBQzlCLDJCQUEyQixHQUM1QixNQUFNLHFCQUFxQixDQUFDO0FBRTdCLGdFQUFnRTtBQUNoRSxNQUFNLGdCQUFnQixHQUFHO0lBQ3ZCLG1DQUFtQztJQUNuQyxnQ0FBZ0M7SUFDaEMsK0JBQStCO0lBQy9CLG9DQUFvQztJQUNwQyxpQ0FBaUM7Q0FDekIsQ0FBQztBQUVYOzs7Ozs7R0FNRztBQUNILE1BQU0scUJBQXFCLEdBQUcsQ0FDNUIsY0FBMkIsRUFDUCxFQUFFO0lBQ3RCLE1BQU0sU0FBUyxHQUFHO1FBQ2hCLG1CQUFtQjtRQUNuQiwyQkFBMkI7UUFDM0IscUJBQXFCO1FBQ3JCLHVDQUF1QztRQUN2QyxrQkFBa0I7UUFDbEIsZ0JBQWdCO1FBQ2hCLFdBQVc7S0FDWixDQUFDO0lBRUYsT0FBTyxNQUFNLENBQUMsV0FBVyxDQUN2QixTQUFTO1NBQ04sTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxTQUFTLElBQUksRUFBRSxFQUFFLE9BQU8sQ0FBVSxDQUFDLENBQ3RELENBQUM7QUFDSixDQUFDLENBQUM7QUFFRiw0Q0FBNEM7QUFDNUMsTUFBTSxvQkFBb0IsR0FBRztJQUMzQiwrQkFBK0I7SUFDL0IsMERBQTBEO0lBQzFELHdEQUF3RDtJQUN4RCwrQkFBK0I7SUFDL0Isd0RBQXdEO0lBQ3hELHdCQUF3QjtJQUN4Qix3QkFBd0I7SUFDeEIscUJBQXFCO0lBQ3JCLG1CQUFtQjtJQUNuQiw0QkFBNEI7SUFDNUIs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cG9ydCB7IGRlZmluZUNvbmZpZyB9IGZyb20gXCJlc2xpbnQvY29uZmlnXCI7XHJcblxyXG5pbXBvcnQge1xyXG4gIGJ1aWxkVHlwZVNjcmlwdEV4YW1wbGVDb25maWdzLFxyXG4gIHJlc29sdmVEaXNhYmxlVHlwZUNoZWNrZWRSdWxlcyxcclxuICByZXNvbHZlSnNkb2NQcm9jZXNzb3JQbHVnaW4sXHJcbn0gZnJvbSBcIi4vanNkb2MtZXhhbXBsZXMuanNcIjtcclxuXHJcbi8qKiBVcHN0cmVhbSBKU0RvYyBmbGF0IHByZXNldCBuYW1lcyBjb25zdW1lZCBieSB0aGlzIGNvbmZpZy4gKi9cclxuY29uc3QganNkb2NQcmVzZXROYW1lcyA9IFtcclxuICBcImZsYXQvcmVjb21tZW5kZWQtdHlwZXNjcmlwdC1lcnJvclwiLFxyXG4gIFwiZmxhdC9jb250ZW50cy10eXBlc2NyaXB0LWVycm9yXCIsXHJcbiAgXCJmbGF0L2xvZ2ljYWwtdHlwZXNjcmlwdC1lcnJvclwiLFxyXG4gIFwiZmxhdC9yZXF1aXJlbWVudHMtdHlwZXNjcmlwdC1lcnJvclwiLFxyXG4gIFwiZmxhdC9zdHlsaXN0aWMtdHlwZXNjcmlwdC1lcnJvclwiLFxyXG5dIGFzIGNvbnN0O1xyXG5cclxuLyoqXHJcbiAqIEJ1aWxkIHRoZSBjdXN0b20ganNkb2MgZXJyb3IgcnVsZXMgYmFzZWQgb24gYXZhaWxhYmxlIHBsdWdpbiBydWxlcy5cclxuICogQHBhcmFtIGF2YWlsYWJsZVJ1bGVzIFNldCBvZiBhdmFpbGFibGUganNkb2MgcnVsZSBuYW1lcy5cclxuICogQHJldHVybnMgVGhlIHJ1bGVzIHJlY29yZCBmb3IgRVNMaW50LlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBjb25zb2xlLmxvZyhidWlsZEN1c3RvbUVycm9yUnVsZXMobmV3IFNldChbXCJyZXF1aXJlLXRocm93c1wiXSkpKTtcclxuICovXHJcbmNvbnN0IGJ1aWxkQ3VzdG9tRXJyb3JSdWxlcyA9IChcclxuICBhdmFpbGFibGVSdWxlczogU2V0PHN0cmluZz4sXHJcbik6IExpbnRlci5SdWxlc1JlY29yZCA9PiB7XHJcbiAgY29uc3QgcnVsZU5hbWVzID0gW1xyXG4gICAgXCJjaGVjay1pbmRlbnRhdGlvblwiLFxyXG4gICAgXCJjb252ZXJ0LXRvLWpzZG9jLWNvbW1lbnRzXCIsXHJcbiAgICBcInJlcXVpcmUtZGVzY3JpcHRpb25cIixcclxuICAgIFwicmVxdWlyZS1kZXNjcmlwdGlvbi1jb21wbGV0ZS1zZW50ZW5jZVwiLFxyXG4gICAgXCJyZXF1aXJlLXRlbXBsYXRlXCIsXHJcbiAgICBcInJlcXVpcmUtdGhyb3dzXCIsXHJcbiAgICBcInNvcnQtdGFnc1wiLFxyXG4gIF07XHJcblxyXG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXHJcbiAgICBydWxlTmFtZXNcclxuICAgICAgLmZpbHRlcigocnVsZSkgPT4gYXZhaWxhYmxlUnVsZXMuaGFzKHJ1bGUpKVxyXG4gICAgICAubWFwKChydWxlKSA9PiBbYGpzZG9jLyR7cnVsZX1gLCBcImVycm9yXCJdIGFzIGNvbnN0KSxcclxuICApO1xyXG59O1xyXG5cclxuLyoqIEFTVCBjb250ZXh0cyB0aGF0IG11c3QgaW5jbHVkZSBKU0RvYy4gKi9cclxuY29uc3QgcmVxdWlyZUpzZG9jQ29udGV4dHMgPSBbXHJcbiAgXCJQcm9ncmFtID4gRnVuY3Rpb25EZWNsYXJhdGlvblwiLFxyXG4gIFwiUHJvZ3JhbSA+IEV4cG9ydERlZmF1bHREZWNsYXJhdGlvbiA+IEZ1bmN0aW9uRGVjbGFyYXRpb25cIixcclxuICBcIlByb2dyYW0gPiBFeHBvcnROYW1lZERlY2xhcmF0aW9uID4gRnVuY3Rpb25EZWNsYXJhdGlvblwiLFxyXG4gIFwiUHJvZ3JhbSA+IFZhcmlhYmxlRGVjbGFyYXRpb25cIixcclxuICBcIlByb2dyYW0gPiBFeHBvcnROYW1lZERlY2xhcmF0aW9uID4gVmFyaWFibGVEZWNsYXJhdGlvblwiLFxyXG4gIFwiVFNJbnRlcmZhY2VEZWNsYXJhdGlvblwiLFxyXG4gIFwiVFNUeXBlQWxpYXNEZWNsYXJhdGlvblwiLFxyXG4gIFwiVFNQcm9wZXJ0eVNpZ25hdHVyZVwiLFxyXG4gIFwiVFNNZXRob2RTaWduYXR1cmVcIixcclxuICBcIlRTQ2FsbFNpZ25hdHVyZURlY2xhcmF0aW9uXCIsXHJcbiAgXCJUU0NvbnN0cnVjdFNpZ25hdHVyZURlY2xhcmF0aW9uXCIsXHJcbiAgXCJUU0luZGV4U2lnbmF0dXJlXCIsXHJcbl07XHJcblxyXG4vKipcclxuICogU2VsZWN0IG9ubHkgdGhlIHVwc3RyZWFtIGZsYXQgcHJlc2V0cyB0aGF0IGFyZSBhdmFpbGFibGUgaW4gdGhlIGN1cnJlbnQgcGx1Z2luIHZlcnNpb24uXHJcbiAqIEBwYXJhbSBjb25maWdzIFVwc3RyZWFtIEpTRG9jIGNvbmZpZyBtYXAuXHJcbiAqIEByZXR1cm5zIFRoZSBhdmFpbGFibGUgZmxhdCBwcmVzZXRzLlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBjb25zb2xlLmxvZyhidWlsZFByZXNldENvbmZpZ3MoeyBcImZsYXQvcmVjb21tZW5kZWQtdHlwZXNjcmlwdC1lcnJvclwiOiB7fSBhcyBMaW50ZXIuQ29uZmlnIH0pLmxlbmd0aCk7XHJcbiAqL1xyXG5mdW5jdGlvbiBidWlsZFByZXNldENvbmZpZ3MoY29uZmlnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBMaW50ZXIuQ29uZmlnW10ge1xyXG4gIHJldHVybiBqc2RvY1ByZXNldE5hbWVzLmZsYXRNYXAoKGNvbmZpZ05hbWUpID0+IHtcclxuICAgIGNvbnN0IGNvbmZpZyA9IGNvbmZpZ3NbY29uZmlnTmFtZV07XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICBjb25maWcgPT09IHZvaWQgMCB8fFxyXG4gICAgICBBcnJheS5pc0FycmF5KGNvbmZpZykgfHxcclxuICAgICAgdHlwZW9mIGNvbmZpZyAhPT0gXCJvYmplY3RcIlxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gW2NvbmZpZyBhcyBMaW50ZXIuQ29uZmlnXTtcclxuICB9KTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEJ1aWxkIHRoZSBmaW5hbCByZXBvLW93bmVkIEpTRG9jIGNvbmZpZ3Mgb24gdG9wIG9mIHRoZSB1cHN0cmVhbSBwcmVzZXRzLlxyXG4gKiBAcGFyYW0gY3VzdG9tRXJyb3IgUmVwby1vd25lZCBKU0RvYyBydWxlIG92ZXJyaWRlcy5cclxuICogQHBhcmFtIHR5cGVTY3JpcHRFeGFtcGxlQ29uZmlncyBQcm9jZXNzb3ItYmFja2VkIFR5cGVTY3JpcHQgZXhhbXBsZSBjb25maWdzLlxyXG4gKiBAcmV0dXJucyBUaGUgZmluYWwgRVNMaW50IGNvbmZpZyBhcnJheS5cclxuICogQGV4YW1wbGVcclxuICogY29uc29sZS5sb2coYnVpbGRSZXBvSnNkb2NDb25maWdzKHt9LCBbXSkubGVuZ3RoKTtcclxuICovXHJcbmZ1bmN0aW9uIGJ1aWxkUmVwb0pzZG9jQ29uZmlncyhcclxuICBjdXN0b21FcnJvcjogTGludGVyLlJ1bGVzUmVjb3JkLFxyXG4gIHR5cGVTY3JpcHRFeGFtcGxlQ29uZmlnczogTGludGVyLkNvbmZpZ1tdLFxyXG4pOiBMaW50ZXIuQ29uZmlnW10ge1xyXG4gIHJldHVybiBkZWZpbmVDb25maWcoXHJcbiAgICAuLi50eXBlU2NyaXB0RXhhbXBsZUNvbmZpZ3MsXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6IFwianNkb2MvY3VzdG9tXCIsXHJcbiAgICAgIHJ1bGVzOiB7XHJcbiAgICAgICAgLi4uY3VzdG9tRXJyb3IsXHJcbiAgICAgICAgXCJqc2RvYy90ZXh0LWVzY2FwaW5nXCI6IFwib2ZmXCIsXHJcbiAgICAgIH0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiBcImpzZG9jL3JlcXVpcmUtanNkb2MtYWxpYXNcIixcclxuICAgICAgcnVsZXM6IHtcclxuICAgICAgICBcImpzZG9jL3JlcXVpcmUtZGVzY3JpcHRpb25cIjogW1xyXG4gICAgICAgICAgXCJlcnJvclwiLFxyXG4gICAgICAgICAgeyBjb250ZXh0czogcmVxdWlyZUpzZG9jQ29udGV4dHMgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIFwianNkb2MvcmVxdWlyZS1qc2RvY1wiOiBbXCJlcnJvclwiLCB7IGNvbnRleHRzOiByZXF1aXJlSnNkb2NDb250ZXh0cyB9XSxcclxuICAgICAgfSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGZpbGVzOiBbXCIqKi8qLnNwZWMudHNcIl0sXHJcbiAgICAgIG5hbWU6IFwianNkb2MvY3VzdG9tLXNwZWNcIixcclxuICAgICAgcnVsZXM6IHtcclxuICAgICAgICBcImpzZG9jL2NvbnZlcnQtdG8tanNkb2MtY29tbWVudHNcIjogW1xyXG4gICAgICAgICAgXCJlcnJvclwiLFxyXG4gICAgICAgICAgeyBhbGxvd2VkUHJlZml4ZXM6IFtcIkFycmFuZ2VcIiwgXCJBY3RcIl0gfSxcclxuICAgICAgICBdLFxyXG4gICAgICB9LFxyXG4gICAgfSxcclxuICApO1xyXG59XHJcblxyXG4vKipcclxuICogQnVpbGQgdGhlIGpzZG9jIHBsdWdpbiBjb25maWd1cmF0aW9uIGFuZCBhbnkgb3ZlcnJpZGVzIG5lZWRlZCBieSB0aGlzIHByb2plY3QuXHJcbiAqIEByZXR1cm5zIFJldHVybiB2YWx1ZSBvdXRwdXQuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGNvbnNvbGUubG9nKGF3YWl0IGpzZG9jKCkpO1xyXG4gKi9cclxuYXN5bmMgZnVuY3Rpb24ganNkb2MoKTogUHJvbWlzZTxMaW50ZXIuQ29uZmlnW10+IHtcclxuICBjb25zdCBqc2RvY01vZHVsZSA9IGF3YWl0IGltcG9ydChcImVzbGludC1wbHVnaW4tanNkb2NcIik7XHJcbiAgY29uc3QgdHlwZVNjcmlwdE1vZHVsZSA9IGF3YWl0IGltcG9ydChcInR5cGVzY3JpcHQtZXNsaW50XCIpO1xyXG4gIGNvbnN0IHsgZGVmYXVsdDoganNkb2NQbHVnaW4gfSA9IGpzZG9jTW9kdWxlO1xyXG4gIGNvbnN0IHsgY29uZmlncywgcnVsZXMgfSA9IGpzZG9jUGx1Z2luO1xyXG4gIGNvbnN0IGdldEpzZG9jUHJvY2Vzc29yUGx1Z2luID0gcmVzb2x2ZUpzZG9jUHJvY2Vzc29yUGx1Z2luKGpzZG9jTW9kdWxlKTtcclxuICBjb25zdCB7XHJcbiAgICBjb25maWdzOiB0eXBlU2NyaXB0Q29uZmlncyxcclxuICAgIHBhcnNlcixcclxuICAgIHBsdWdpbjogdHlwZVNjcmlwdFBsdWdpbixcclxuICB9ID0gdHlwZVNjcmlwdE1vZHVsZTtcclxuXHJcbiAgY29uc3QgYXZhaWxhYmxlUnVsZXMgPSBuZXcgU2V0KE9iamVjdC5rZXlzKHJ1bGVzID8/IHt9KSksXHJcbiAgICBjdXN0b21FcnJvciA9IGJ1aWxkQ3VzdG9tRXJyb3JSdWxlcyhhdmFpbGFibGVSdWxlcyksXHJcbiAgICBkaXNhYmxlVHlwZUNoZWNrZWRSdWxlcyA9IHJlc29sdmVEaXNhYmxlVHlwZUNoZWNrZWRSdWxlcyh0eXBlU2NyaXB0Q29uZmlncyksXHJcbiAgICBwcmVzZXRDb25maWdzID0gYnVpbGRQcmVzZXRDb25maWdzKGNvbmZpZ3MpLFxyXG4gICAgdHlwZVNjcmlwdEV4YW1wbGVDb25maWdzID0gYnVpbGRUeXBlU2NyaXB0RXhhbXBsZUNvbmZpZ3Moe1xyXG4gICAgICBkaXNhYmxlVHlwZUNoZWNrZWRSdWxlcyxcclxuICAgICAgZ2V0SnNkb2NQcm9jZXNzb3JQbHVnaW4sXHJcbiAgICAgIHBhcnNlcixcclxuICAgICAgdHlwZVNjcmlwdFBsdWdpbixcclxuICAgIH0pO1xyXG5cclxuICByZXR1cm4gZGVmaW5lQ29uZmlnKFxyXG4gICAgLi4ucHJlc2V0Q29uZmlncyxcclxuICAgIC4uLmJ1aWxkUmVwb0pzZG9jQ29uZmlncyhjdXN0b21FcnJvciwgdHlwZVNjcmlwdEV4YW1wbGVDb25maWdzKSxcclxuICApO1xyXG59XHJcblxyXG5leHBvcnQgeyBqc2RvYyB9O1xyXG4iXX0=
|
package/package.json
CHANGED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
/** List of supported plugin names used in config tests. */
|
|
2
|
-
declare const allPlugins: ["eslint", "resolver", "typescript", "boundaries", "import-x", "comments", "jsdoc", "jasmine", "jest", "playwright", "vitest", "rxjs-x", "perfectionist", "prettier", "stylistic", "unicorn"];
|
|
3
|
-
/**
|
|
4
|
-
* Mock all plugin loaders to return empty configurations.
|
|
5
|
-
* @example
|
|
6
|
-
* ```typescript
|
|
7
|
-
* mockAllEmpty();
|
|
8
|
-
* ```
|
|
9
|
-
*/
|
|
10
|
-
declare function mockAllEmpty(): void;
|
|
11
|
-
/**
|
|
12
|
-
* Mock all plugin loaders to return small sample configurations.
|
|
13
|
-
* @example
|
|
14
|
-
* ```typescript
|
|
15
|
-
* mockAllEnabled();
|
|
16
|
-
* ```
|
|
17
|
-
*/
|
|
18
|
-
declare function mockAllEnabled(): void;
|
|
19
|
-
/**
|
|
20
|
-
* Mock architecture loaders so `boundaries` only activates with repository input.
|
|
21
|
-
* @example
|
|
22
|
-
* ```typescript
|
|
23
|
-
* mockBoundariesAware();
|
|
24
|
-
* ```
|
|
25
|
-
*/
|
|
26
|
-
declare function mockBoundariesAware(): void;
|
|
27
|
-
/**
|
|
28
|
-
* Mock non-core plugin loaders to return empty configs.
|
|
29
|
-
* @example
|
|
30
|
-
* ```typescript
|
|
31
|
-
* mockNonCoreEmpty();
|
|
32
|
-
* ```
|
|
33
|
-
*/
|
|
34
|
-
declare function mockNonCoreEmpty(): void;
|
|
35
|
-
/**
|
|
36
|
-
* Mock a config composition where required loaders succeed and one optional loader fails.
|
|
37
|
-
* @example
|
|
38
|
-
* ```typescript
|
|
39
|
-
* mockOptionalResolverFailure();
|
|
40
|
-
* ```
|
|
41
|
-
*/
|
|
42
|
-
declare function mockOptionalResolverFailure(): void;
|
|
43
|
-
export { allPlugins, mockAllEmpty, mockAllEnabled, mockBoundariesAware, mockNonCoreEmpty, mockOptionalResolverFailure, };
|
|
44
|
-
//# sourceMappingURL=index-spec-helpers.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-spec-helpers.d.ts","sourceRoot":"","sources":["../src/index-spec-helpers.ts"],"names":[],"mappings":"AAOA,2DAA2D;AAC3D,QAAA,MAAM,UAAU,+LAiBiB,CAAC;AAElC;;;;;;GAMG;AACH,iBAAS,YAAY,IAAI,IAAI,CAuB5B;AAED;;;;;;GAMG;AACH,iBAAS,cAAc,IAAI,IAAI,CAuB9B;AAED;;;;;;GAMG;AACH,iBAAS,mBAAmB,IAAI,IAAI,CAwBnC;AAED;;;;;;GAMG;AACH,iBAAS,gBAAgB,IAAI,IAAI,CAyBhC;AAED;;;;;;GAMG;AACH,iBAAS,2BAA2B,IAAI,IAAI,CA2B3C;AAED,OAAO,EACL,UAAU,EACV,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,gBAAgB,EAChB,2BAA2B,GAC5B,CAAC"}
|
|
@@ -1,175 +0,0 @@
|
|
|
1
|
-
import { vi } from "vitest";
|
|
2
|
-
/** List of supported plugin names used in config tests. */
|
|
3
|
-
const allPlugins = [
|
|
4
|
-
"eslint",
|
|
5
|
-
"resolver",
|
|
6
|
-
"typescript",
|
|
7
|
-
"boundaries",
|
|
8
|
-
"import-x",
|
|
9
|
-
"comments",
|
|
10
|
-
"jsdoc",
|
|
11
|
-
"jasmine",
|
|
12
|
-
"jest",
|
|
13
|
-
"playwright",
|
|
14
|
-
"vitest",
|
|
15
|
-
"rxjs-x",
|
|
16
|
-
"perfectionist",
|
|
17
|
-
"prettier",
|
|
18
|
-
"stylistic",
|
|
19
|
-
"unicorn",
|
|
20
|
-
];
|
|
21
|
-
/**
|
|
22
|
-
* Mock all plugin loaders to return empty configurations.
|
|
23
|
-
* @example
|
|
24
|
-
* ```typescript
|
|
25
|
-
* mockAllEmpty();
|
|
26
|
-
* ```
|
|
27
|
-
*/
|
|
28
|
-
function mockAllEmpty() {
|
|
29
|
-
vi.doMock("./configs", () => ({
|
|
30
|
-
boundaries: () => [],
|
|
31
|
-
comments: () => [],
|
|
32
|
-
eslint: () => [],
|
|
33
|
-
importX: () => [],
|
|
34
|
-
jasmine: () => [],
|
|
35
|
-
jest: () => [],
|
|
36
|
-
jsdoc: () => [],
|
|
37
|
-
perfectionist: () => [],
|
|
38
|
-
playwright: () => [],
|
|
39
|
-
prettier: () => [],
|
|
40
|
-
resolver: () => [],
|
|
41
|
-
rxjsX: () => [],
|
|
42
|
-
stylistic: () => [],
|
|
43
|
-
typescript: () => [],
|
|
44
|
-
unicorn: async () => {
|
|
45
|
-
const configs = await Promise.resolve([]);
|
|
46
|
-
return configs;
|
|
47
|
-
},
|
|
48
|
-
vitest: () => [],
|
|
49
|
-
}));
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Mock all plugin loaders to return small sample configurations.
|
|
53
|
-
* @example
|
|
54
|
-
* ```typescript
|
|
55
|
-
* mockAllEnabled();
|
|
56
|
-
* ```
|
|
57
|
-
*/
|
|
58
|
-
function mockAllEnabled() {
|
|
59
|
-
vi.doMock("./configs", () => ({
|
|
60
|
-
boundaries: () => [{ name: "architecture-boundaries" }],
|
|
61
|
-
comments: () => [{ name: "docs-comments" }],
|
|
62
|
-
eslint: () => [{ name: "core-eslint" }],
|
|
63
|
-
importX: () => [{ name: "architecture-import-x" }],
|
|
64
|
-
jasmine: () => [{ name: "testing-jasmine" }],
|
|
65
|
-
jest: () => [{ name: "testing-jest" }],
|
|
66
|
-
jsdoc: () => [{ name: "docs-jsdoc" }],
|
|
67
|
-
perfectionist: () => [{ name: "style-perfectionist" }],
|
|
68
|
-
playwright: () => [{ name: "testing-playwright" }],
|
|
69
|
-
prettier: () => [{ name: "style-prettier" }],
|
|
70
|
-
resolver: () => [{ name: "core-resolver" }],
|
|
71
|
-
rxjsX: () => [{ name: "domain-rxjs" }],
|
|
72
|
-
stylistic: () => [{ name: "style-stylistic" }],
|
|
73
|
-
typescript: () => [{ name: "core-typescript" }],
|
|
74
|
-
unicorn: async () => {
|
|
75
|
-
const configs = await Promise.resolve([{ name: "style-unicorn" }]);
|
|
76
|
-
return configs;
|
|
77
|
-
},
|
|
78
|
-
vitest: () => [{ name: "testing-vitest" }],
|
|
79
|
-
}));
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Mock architecture loaders so `boundaries` only activates with repository input.
|
|
83
|
-
* @example
|
|
84
|
-
* ```typescript
|
|
85
|
-
* mockBoundariesAware();
|
|
86
|
-
* ```
|
|
87
|
-
*/
|
|
88
|
-
function mockBoundariesAware() {
|
|
89
|
-
vi.doMock("./configs", () => ({
|
|
90
|
-
boundaries: (boundaries) => boundaries === void 0 ? [] : [{ name: "architecture-boundaries" }],
|
|
91
|
-
comments: () => [{ name: "docs-comments" }],
|
|
92
|
-
eslint: () => [{ name: "core-eslint" }],
|
|
93
|
-
importX: () => [{ name: "architecture-import-x" }],
|
|
94
|
-
jasmine: () => [{ name: "testing-jasmine" }],
|
|
95
|
-
jest: () => [{ name: "testing-jest" }],
|
|
96
|
-
jsdoc: () => [{ name: "docs-jsdoc" }],
|
|
97
|
-
perfectionist: () => [{ name: "style-perfectionist" }],
|
|
98
|
-
playwright: () => [{ name: "testing-playwright" }],
|
|
99
|
-
prettier: () => [{ name: "style-prettier" }],
|
|
100
|
-
resolver: () => [{ name: "core-resolver" }],
|
|
101
|
-
rxjsX: () => [{ name: "domain-rxjs" }],
|
|
102
|
-
stylistic: () => [{ name: "style-stylistic" }],
|
|
103
|
-
typescript: () => [{ name: "core-typescript" }],
|
|
104
|
-
unicorn: async () => {
|
|
105
|
-
const configs = await Promise.resolve([{ name: "style-unicorn" }]);
|
|
106
|
-
return configs;
|
|
107
|
-
},
|
|
108
|
-
vitest: () => [{ name: "testing-vitest" }],
|
|
109
|
-
}));
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* Mock non-core plugin loaders to return empty configs.
|
|
113
|
-
* @example
|
|
114
|
-
* ```typescript
|
|
115
|
-
* mockNonCoreEmpty();
|
|
116
|
-
* ```
|
|
117
|
-
*/
|
|
118
|
-
function mockNonCoreEmpty() {
|
|
119
|
-
vi.doMock("./configs", async () => {
|
|
120
|
-
const actual = await vi.importActual("./configs");
|
|
121
|
-
return {
|
|
122
|
-
...actual,
|
|
123
|
-
boundaries: () => [],
|
|
124
|
-
comments: () => [],
|
|
125
|
-
importX: () => [],
|
|
126
|
-
jasmine: () => [],
|
|
127
|
-
jest: () => [],
|
|
128
|
-
jsdoc: () => [],
|
|
129
|
-
perfectionist: () => [],
|
|
130
|
-
playwright: () => [],
|
|
131
|
-
prettier: () => [],
|
|
132
|
-
rxjsX: () => [],
|
|
133
|
-
stylistic: () => [],
|
|
134
|
-
unicorn: async () => {
|
|
135
|
-
const configs = await Promise.resolve([]);
|
|
136
|
-
return configs;
|
|
137
|
-
},
|
|
138
|
-
vitest: () => [],
|
|
139
|
-
};
|
|
140
|
-
});
|
|
141
|
-
}
|
|
142
|
-
/**
|
|
143
|
-
* Mock a config composition where required loaders succeed and one optional loader fails.
|
|
144
|
-
* @example
|
|
145
|
-
* ```typescript
|
|
146
|
-
* mockOptionalResolverFailure();
|
|
147
|
-
* ```
|
|
148
|
-
*/
|
|
149
|
-
function mockOptionalResolverFailure() {
|
|
150
|
-
vi.doMock("./configs", () => {
|
|
151
|
-
return {
|
|
152
|
-
boundaries: () => [],
|
|
153
|
-
comments: () => [],
|
|
154
|
-
eslint: () => [{ name: "core-eslint" }],
|
|
155
|
-
importX: () => [],
|
|
156
|
-
jasmine: () => [],
|
|
157
|
-
jest: () => [],
|
|
158
|
-
jsdoc: () => [],
|
|
159
|
-
perfectionist: () => [],
|
|
160
|
-
playwright: () => [],
|
|
161
|
-
prettier: () => [],
|
|
162
|
-
resolver: async () => {
|
|
163
|
-
await Promise.resolve();
|
|
164
|
-
throw new Error("Cannot find module 'eslint-import-resolver-typescript'");
|
|
165
|
-
},
|
|
166
|
-
rxjsX: () => [],
|
|
167
|
-
stylistic: () => [],
|
|
168
|
-
typescript: () => [{ name: "core-typescript" }],
|
|
169
|
-
unicorn: () => [],
|
|
170
|
-
vitest: () => [],
|
|
171
|
-
};
|
|
172
|
-
});
|
|
173
|
-
}
|
|
174
|
-
export { allPlugins, mockAllEmpty, mockAllEnabled, mockBoundariesAware, mockNonCoreEmpty, mockOptionalResolverFailure, };
|
|
175
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgtc3BlYy1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2luZGV4LXNwZWMtaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBSzVCLDJEQUEyRDtBQUMzRCxNQUFNLFVBQVUsR0FBRztJQUNqQixRQUFRO0lBQ1IsVUFBVTtJQUNWLFlBQVk7SUFDWixZQUFZO0lBQ1osVUFBVTtJQUNWLFVBQVU7SUFDVixPQUFPO0lBQ1AsU0FBUztJQUNULE1BQU07SUFDTixZQUFZO0lBQ1osUUFBUTtJQUNSLFFBQVE7SUFDUixlQUFlO0lBQ2YsVUFBVTtJQUNWLFdBQVc7SUFDWCxTQUFTO0NBQ3NCLENBQUM7QUFFbEM7Ozs7OztHQU1HO0FBQ0gsU0FBUyxZQUFZO0lBQ25CLEVBQUUsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDNUIsVUFBVSxFQUFFLEdBQW9CLEVBQUUsQ0FBQyxFQUFFO1FBQ3JDLFFBQVEsRUFBRSxHQUFvQixFQUFFLENBQUMsRUFBRTtRQUNuQyxNQUFNLEVBQUUsR0FBb0IsRUFBRSxDQUFDLEVBQUU7UUFDakMsT0FBTyxFQUFFLEdBQW9CLEVBQUUsQ0FBQyxFQUFFO1FBQ2xDLE9BQU8sRUFBRSxHQUFvQixFQUFFLENBQUMsRUFBRTtRQUNsQyxJQUFJLEVBQUUsR0FBb0IsRUFBRSxDQUFDLEVBQUU7UUFDL0IsS0FBSyxFQUFFLEdBQW9CLEVBQUUsQ0FBQyxFQUFFO1FBQ2hDLGFBQWEsRUFBRSxHQUFvQixFQUFFLENBQUMsRUFBRTtRQUN4QyxVQUFVLEVBQUUsR0FBb0IsRUFBRSxDQUFDLEVBQUU7UUFDckMsUUFBUSxFQUFFLEdBQW9CLEVBQUUsQ0FBQyxFQUFFO1FBQ25DLFFBQVEsRUFBRSxHQUFvQixFQUFFLENBQUMsRUFBRTtRQUNuQyxLQUFLLEVBQUUsR0FBb0IsRUFBRSxDQUFDLEVB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WUFDbEMsTUFBTSxFQUFFLEdBQW9CLEVBQUUsQ0FBQyxFQUFFO1NBQ2xDLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxPQUFPLEVBQ0wsVUFBVSxFQUNWLFlBQVksRUFDWixjQUFjLEVBQ2QsbUJBQW1CLEVBQ25CLGdCQUFnQixFQUNoQiwyQkFBMkIsR0FDNUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgTGludGVyIH0gZnJvbSBcImVzbGludFwiO1xuXG5pbXBvcnQgeyB2aSB9IGZyb20gXCJ2aXRlc3RcIjtcblxuaW1wb3J0IHR5cGUgKiBhcyBDb25maWdzTW9kdWxlIGZyb20gXCIuL2NvbmZpZ3NcIjtcbmltcG9ydCB0eXBlIHsgUGx1Z2luTmFtZSB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbi8qKiBMaXN0IG9mIHN1cHBvcnRlZCBwbHVnaW4gbmFtZXMgdXNlZCBpbiBjb25maWcgdGVzdHMuICovXG5jb25zdCBhbGxQbHVnaW5zID0gW1xuICBcImVzbGludFwiLFxuICBcInJlc29sdmVyXCIsXG4gIFwidHlwZXNjcmlwdFwiLFxuICBcImJvdW5kYXJpZXNcIixcbiAgXCJpbXBvcnQteFwiLFxuICBcImNvbW1lbnRzXCIsXG4gIFwianNkb2NcIixcbiAgXCJqYXNtaW5lXCIsXG4gIFwiamVzdFwiLFxuICBcInBsYXl3cmlnaHRcIixcbiAgXCJ2aXRlc3RcIixcbiAgXCJyeGpzLXhcIixcbiAgXCJwZXJmZWN0aW9uaXN0XCIsXG4gIFwicHJldHRpZXJcIixcbiAgXCJzdHlsaXN0aWNcIixcbiAgXCJ1bmljb3JuXCIsXG5dIGFzIGNvbnN0IHNhdGlzZmllcyBQbHVnaW5OYW1lW107XG5cbi8qKlxuICogTW9jayBhbGwgcGx1Z2luIGxvYWRlcnMgdG8gcmV0dXJuIGVtcHR5IGNvbmZpZ3VyYXRpb25zLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIG1vY2tBbGxFbXB0eSgpO1xuICogYGBgXG4gKi9cbmZ1bmN0aW9uIG1vY2tBbGxFbXB0eSgpOiB2b2lkIHtcbiAgdmkuZG9Nb2NrKFwiLi9jb25maWdzXCIsICgpID0+ICh7XG4gICAgYm91bmRhcmllczogKCk6IExpbnRlci5Db25maWdbXSA9PiBbXSxcbiAgICBjb21tZW50czogKCk6IExpbnRlci5Db25maWdbXSA9PiBbXSxcbiAgICBlc2xpbnQ6ICgpOiBMaW50ZXIuQ29uZmlnW10gPT4gW10sXG4gICAgaW1wb3J0WDogKCk6IExpbnRlci5Db25maWdbXSA9PiBbXSxcbiAgICBqYXNtaW5lOiAoKTogTGludGVyLkNvbmZpZ1tdID0+IFtdLFxuICAgIGplc3Q6ICgpOiBMaW50ZXIuQ29uZmlnW10gPT4gW10sXG4gICAganNkb2M6ICgpOiBMaW50ZXIuQ29uZmlnW10gPT4gW10sXG4gICAgcGVyZmVjdGlvbmlzdDogKCk6IExpbnRlci5Db25maWdbXSA9PiBbXSxcbiAgICBwbGF5d3JpZ2h0OiAoKTogTGludGVyLkNvbmZpZ1tdID0+IFtdLFxuICAgIHByZXR0aWVyOiAoKTogTGludGVyLkNvbmZpZ1tdID0+IFtdLFxuICAgIHJlc29sdmVyOiAoKTogTGludGVyLkNvbmZpZ1tdID0+IFtdLFxuICAgIHJ4anNYOiAoKTogTGludGVyLkNvbmZpZ1tdID0+IFtdLFxuICAgIHN0eWxpc3RpYzogKCk6IExpbnRlci5Db25maWdbXSA9PiBbXSxcbiAgICB0eXBlc2NyaXB0OiAoKTogTGludGVyLkNvbmZpZ1tdID0+IFtdLFxuICAgIHVuaWNvcm46IGFzeW5jICgpOiBQcm9taXNlPExpbnRlci5Db25maWdbXT4gPT4ge1xuICAgICAgY29uc3QgY29uZmlncyA9IGF3YWl0IFByb21pc2UucmVzb2x2ZShbXSBhcyBMaW50ZXIuQ29uZmlnW10pO1xuXG4gICAgICByZXR1cm4gY29uZmlncztcbiAgICB9LFxuICAgIHZpdGVzdDogKCk6IExpbnRlci5Db25maWdbXSA9PiBbXSxcbiAgfSkpO1xufVxuXG4vKipcbiAqIE1vY2sgYWxsIHBsdWdpbiBsb2FkZXJzIHRvIHJldHVybiBzbWFsbCBzYW1wbGUgY29uZmlndXJhdGlvbnMuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogbW9ja0FsbEVuYWJsZWQoKTtcbiAqIGBgYFxuICovXG5mdW5jdGlvbiBtb2NrQWxsRW5hYmxlZCgpOiB2b2lkIHtcbiAgdmkuZG9Nb2NrKFwiLi9jb25maWdzXCIsICgpID0+ICh7XG4gICAgYm91bmRhcmllczogKCk6IExpbnRlci5Db25maWdbXSA9PiBbeyBuYW1lOiBcImFyY2hpdGVjdHVyZS1ib3VuZGFyaWVzXCIgfV0sXG4gICAgY29tbWVudHM6ICgpOiBMaW50ZXIuQ29uZmlnW10gPT4gW3sgbmFtZTogXCJkb2NzLWNvbW1lbnRzXCIgfV0sXG4gICAgZXNsaW50OiAoKTogTGludGVyLkNvbmZpZ1tdID0+IFt7IG5hbWU6IFwiY29yZS1lc2xpbnRcIiB9XSxcbiAgICBpbXBvcnRYOiAoKTogTGludGVyLkNvbmZpZ1tdID0+IFt7IG5hbWU6IFwiYXJjaGl0ZWN0dXJlLWltcG9ydC14XCIgfV0sXG4gICAgamFzbWluZTogKCk6IExpbnRlci5Db25maWdbXSA9PiBbeyBuYW1lOiBcInRlc3RpbmctamFzbWluZVwiIH1dLFxuICAgIGplc3Q6ICgpOiBMaW50ZXIuQ29uZmlnW10gPT4gW3sgbmFtZTogXCJ0ZXN0aW5nLWplc3RcIiB9XSxcbiAgICBqc2RvYzogKCk6IExpbnRlci5Db25maWdbXSA9PiBbeyBuYW1lOiBcImRvY3MtanNkb2NcIiB9XSxcbiAgICBwZXJmZWN0aW9uaXN0OiAoKTogTGludGVyLkNvbmZpZ1tdID0+IFt7IG5hbWU6IFwic3R5bGUtcGVyZmVjdGlvbmlzdFwiIH1dLFxuICAgIHBsYXl3cmlnaHQ6ICgpOiBMaW50ZXIuQ29uZmlnW10gPT4gW3sgbmFtZTogXCJ0ZXN0aW5nLXBsYXl3cmlnaHRcIiB9XSxcbiAgICBwcmV0dGllcjogKCk6IExpbnRlci5Db25maWdbXSA9PiBbeyBuYW1lOiBcInN0eWxlLXByZXR0aWVyXCIgfV0sXG4gICAgcmVzb2x2ZXI6ICgpOiBMaW50ZXIuQ29uZmlnW10gPT4gW3sgbmFtZTogXCJjb3JlLXJlc29sdmVyXCIgfV0sXG4gICAgcnhqc1g6ICgpOiBMaW50ZXIuQ29uZmlnW10gPT4gW3sgbmFtZTogXCJkb21haW4tcnhqc1wiIH1dLFxuICAgIHN0eWxpc3RpYzogKCk6IExpbnRlci5Db25maWdbXSA9PiBbeyBuYW1lOiBcInN0eWxlLXN0eWxpc3RpY1wiIH1dLFxuICAgIHR5cGVzY3JpcHQ6ICgpOiBMaW50ZXIuQ29uZmlnW10gPT4gW3sgbmFtZTogXCJjb3JlLXR5cGVzY3JpcHRcIiB9XSxcbiAgICB1bmljb3JuOiBhc3luYyAoKTogUHJvbWlzZTxMaW50ZXIuQ29uZmlnW10+ID0+IHtcbiAgICAgIGNvbnN0IGNvbmZpZ3MgPSBhd2FpdCBQcm9taXNlLnJlc29sdmUoW3sgbmFtZTogXCJzdHlsZS11bmljb3JuXCIgfV0pO1xuXG4gICAgICByZXR1cm4gY29uZmlncztcbiAgICB9LFxuICAgIHZpdGVzdDogKCk6IExpbnRlci5Db25maWdbXSA9PiBbeyBuYW1lOiBcInRlc3Rpbmctdml0ZXN0XCIgfV0sXG4gIH0pKTtcbn1cblxuLyoqXG4gKiBNb2NrIGFyY2hpdGVjdHVyZSBsb2FkZXJzIHNvIGBib3VuZGFyaWVzYCBvbmx5IGFjdGl2YXRlcyB3aXRoIHJlcG9zaXRvcnkgaW5wdXQuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogbW9ja0JvdW5kYXJpZXNBd2FyZSgpO1xuICogYGBgXG4gKi9cbmZ1bmN0aW9uIG1vY2tCb3VuZGFyaWVzQXdhcmUoKTogdm9pZCB7XG4gIHZpLmRvTW9jayhcIi4vY29uZmlnc1wiLCAoKSA9PiAoe1xuICAgIGJvdW5kYXJpZXM6IChib3VuZGFyaWVzOiB1bmtub3duKTogTGludGVyLkNvbmZpZ1tdID0+XG4gICAgICBib3VuZGFyaWVzID09PSB2b2lkIDAgPyBbXSA6IFt7IG5hbWU6IFwiYXJjaGl0ZWN0dXJlLWJvdW5kYXJpZXNcIiB9XSxcbiAgICBjb21tZW50czogKCk6IExpbnRlci5Db25maWdbXSA9PiBbeyBuYW1lOiBcImRvY3MtY29tbWVudHNcIiB9XSxcbiAgICBlc2xpbnQ6ICgpOiBMaW50ZXIuQ29uZmlnW10gPT4gW3sgbmFtZTogXCJjb3JlLWVzbGludFwiIH1dLFxuICAgIGltcG9ydFg6ICgpOiBMaW50ZXIuQ29uZmlnW10gPT4gW3sgbmFtZTogXCJhcmNoaXRlY3R1cmUtaW1wb3J0LXhcIiB9XSxcbiAgICBqYXNtaW5lOiAoKTogTGludGVyLkNvbmZpZ1tdID0+IFt7IG5hbWU6IFwidGVzdGluZy1qYXNtaW5lXCIgfV0sXG4gICAgamVzdDogKCk6IExpbnRlci5Db25maWdbXSA9PiBbeyBuYW1lOiBcInRlc3RpbmctamVzdFwiIH1dLFxuICAgIGpzZG9jOiAoKTogTGludGVyLkNvbmZpZ1tdID0+IFt7IG5hbWU6IFwiZG9jcy1qc2RvY1wiIH1dLFxuICAgIHBlcmZlY3Rpb25pc3Q6ICgpOiBMaW50ZXIuQ29uZmlnW10gPT4gW3sgbmFtZTogXCJzdHlsZS1wZXJmZWN0aW9uaXN0XCIgfV0sXG4gICAgcGxheXdyaWdodDogKCk6IExpbnRlci5Db25maWdbXSA9PiBbeyBuYW1lOiBcInRlc3RpbmctcGxheXdyaWdodFwiIH1dLFxuICAgIHByZXR0aWVyOiAoKTogTGludGVyLkNvbmZpZ1tdID0+IFt7IG5hbWU6IFwic3R5bGUtcHJldHRpZXJcIiB9XSxcbiAgICByZXNvbHZlcjogKCk6IExpbnRlci5Db25maWdbXSA9PiBbeyBuYW1lOiBcImNvcmUtcmVzb2x2ZXJcIiB9XSxcbiAgICByeGpzWDogKCk6IExpbnRlci5Db25maWdbXSA9PiBbeyBuYW1lOiBcImRvbWFpbi1yeGpzXCIgfV0sXG4gICAgc3R5bGlzdGljOiAoKTogTGludGVyLkNvbmZpZ1tdID0+IFt7IG5hbWU6IFwic3R5bGUtc3R5bGlzdGljXCIgfV0sXG4gICAgdHlwZXNjcmlwdDogKCk6IExpbnRlci5Db25maWdbXSA9PiBbeyBuYW1lOiBcImNvcmUtdHlwZXNjcmlwdFwiIH1dLFxuICAgIHVuaWNvcm46IGFzeW5jICgpOiBQcm9taXNlPExpbnRlci5Db25maWdbXT4gPT4ge1xuICAgICAgY29uc3QgY29uZmlncyA9IGF3YWl0IFByb21pc2UucmVzb2x2ZShbeyBuYW1lOiBcInN0eWxlLXVuaWNvcm5cIiB9XSk7XG5cbiAgICAgIHJldHVybiBjb25maWdzO1xuICAgIH0sXG4gICAgdml0ZXN0OiAoKTogTGludGVyLkNvbmZpZ1tdID0+IFt7IG5hbWU6IFwidGVzdGluZy12aXRlc3RcIiB9XSxcbiAgfSkpO1xufVxuXG4vKipcbiAqIE1vY2sgbm9uLWNvcmUgcGx1Z2luIGxvYWRlcnMgdG8gcmV0dXJuIGVtcHR5IGNvbmZpZ3MuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogbW9ja05vbkNvcmVFbXB0eSgpO1xuICogYGBgXG4gKi9cbmZ1bmN0aW9uIG1vY2tOb25Db3JlRW1wdHkoKTogdm9pZCB7XG4gIHZpLmRvTW9jayhcIi4vY29uZmlnc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYWN0dWFsID0gYXdhaXQgdmkuaW1wb3J0QWN0dWFsPHR5cGVvZiBDb25maWdzTW9kdWxlPihcIi4vY29uZmlnc1wiKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5hY3R1YWwsXG4gICAgICBib3VuZGFyaWVzOiAoKTogTGludGVyLkNvbmZpZ1tdID0+IFtdLFxuICAgICAgY29tbWVudHM6ICgpOiBMaW50ZXIuQ29uZmlnW10gPT4gW10sXG4gICAgICBpbXBvcnRYOiAoKTogTGludGVyLkNvbmZpZ1tdID0+IFtdLFxuICAgICAgamFzbWluZTogKCk6IExpbnRlci5Db25maWdbXSA9PiBbXSxcbiAgICAgIGplc3Q6ICgpOiBMaW50ZXIuQ29uZmlnW10gPT4gW10sXG4gICAgICBqc2RvYzogKCk6IExpbnRlci5Db25maWdbXSA9PiBbXSxcbiAgICAgIHBlcmZlY3Rpb25pc3Q6ICgpOiBMaW50ZXIuQ29uZmlnW10gPT4gW10sXG4gICAgICBwbGF5d3JpZ2h0OiAoKTogTGludGVyLkNvbmZpZ1tdID0+IFtdLFxuICAgICAgcHJldHRpZXI6ICgpOiBMaW50ZXIuQ29uZmlnW10gPT4gW10sXG4gICAgICByeGpzWDogKCk6IExpbnRlci5Db25maWdbXSA9PiBbXSxcbiAgICAgIHN0eWxpc3RpYzogKCk6IExpbnRlci5Db25maWdbXSA9PiBbXSxcbiAgICAgIHVuaWNvcm46IGFzeW5jICgpOiBQcm9taXNlPExpbnRlci5Db25maWdbXT4gPT4ge1xuICAgICAgICBjb25zdCBjb25maWdzID0gYXdhaXQgUHJvbWlzZS5yZXNvbHZlKFtdIGFzIExpbnRlci5Db25maWdbXSk7XG5cbiAgICAgICAgcmV0dXJuIGNvbmZpZ3M7XG4gICAgICB9LFxuICAgICAgdml0ZXN0OiAoKTogTGludGVyLkNvbmZpZ1tdID0+IFtdLFxuICAgIH07XG4gIH0pO1xufVxuXG4vKipcbiAqIE1vY2sgYSBjb25maWcgY29tcG9zaXRpb24gd2hlcmUgcmVxdWlyZWQgbG9hZGVycyBzdWNjZWVkIGFuZCBvbmUgb3B0aW9uYWwgbG9hZGVyIGZhaWxzLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIG1vY2tPcHRpb25hbFJlc29sdmVyRmFpbHVyZSgpO1xuICogYGBgXG4gKi9cbmZ1bmN0aW9uIG1vY2tPcHRpb25hbFJlc29sdmVyRmFpbHVyZSgpOiB2b2lkIHtcbiAgdmkuZG9Nb2NrKFwiLi9jb25maWdzXCIsICgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgYm91bmRhcmllczogKCk6IExpbnRlci5Db25maWdbXSA9PiBbXSxcbiAgICAgIGNvbW1lbnRzOiAoKTogTGludGVyLkNvbmZpZ1tdID0+IFtdLFxuICAgICAgZXNsaW50OiAoKTogTGludGVyLkNvbmZpZ1tdID0+IFt7IG5hbWU6IFwiY29yZS1lc2xpbnRcIiB9XSxcbiAgICAgIGltcG9ydFg6ICgpOiBMaW50ZXIuQ29uZmlnW10gPT4gW10sXG4gICAgICBqYXNtaW5lOiAoKTogTGludGVyLkNvbmZpZ1tdID0+IFtdLFxuICAgICAgamVzdDogKCk6IExpbnRlci5Db25maWdbXSA9PiBbXSxcbiAgICAgIGpzZG9jOiAoKTogTGludGVyLkNvbmZpZ1tdID0+IFtdLFxuICAgICAgcGVyZmVjdGlvbmlzdDogKCk6IExpbnRlci5Db25maWdbXSA9PiBbXSxcbiAgICAgIHBsYXl3cmlnaHQ6ICgpOiBMaW50ZXIuQ29uZmlnW10gPT4gW10sXG4gICAgICBwcmV0dGllcjogKCk6IExpbnRlci5Db25maWdbXSA9PiBbXSxcbiAgICAgIHJlc29sdmVyOiBhc3luYyAoKTogUHJvbWlzZTxMaW50ZXIuQ29uZmlnW10+ID0+IHtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiQ2Fubm90IGZpbmQgbW9kdWxlICdlc2xpbnQtaW1wb3J0LXJlc29sdmVyLXR5cGVzY3JpcHQnXCIsXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgcnhqc1g6ICgpOiBMaW50ZXIuQ29uZmlnW10gPT4gW10sXG4gICAgICBzdHlsaXN0aWM6ICgpOiBMaW50ZXIuQ29uZmlnW10gPT4gW10sXG4gICAgICB0eXBlc2NyaXB0OiAoKTogTGludGVyLkNvbmZpZ1tdID0+IFt7IG5hbWU6IFwiY29yZS10eXBlc2NyaXB0XCIgfV0sXG4gICAgICB1bmljb3JuOiAoKTogTGludGVyLkNvbmZpZ1tdID0+IFtdLFxuICAgICAgdml0ZXN0OiAoKTogTGludGVyLkNvbmZpZ1tdID0+IFtdLFxuICAgIH07XG4gIH0pO1xufVxuXG5leHBvcnQge1xuICBhbGxQbHVnaW5zLFxuICBtb2NrQWxsRW1wdHksXG4gIG1vY2tBbGxFbmFibGVkLFxuICBtb2NrQm91bmRhcmllc0F3YXJlLFxuICBtb2NrTm9uQ29yZUVtcHR5LFxuICBtb2NrT3B0aW9uYWxSZXNvbHZlckZhaWx1cmUsXG59O1xuIl19
|