@codeperfect/eslint-plugin 3.2.1 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -11,16 +11,29 @@ import type { ExportKind } from "./types.js";
11
11
  * ```
12
12
  */
13
13
  declare const getTypeScriptProgram: (context: Rule.RuleContext) => ts.Program | undefined;
14
+ /** Syntax position that can satisfy one export usage. */
15
+ type UsagePosition = "any" | ExportKind;
14
16
  /**
15
- * Checks whether one identifier is one concrete usage candidate for the export kind.
17
+ * Resolves which syntax positions consume one exported symbol.
18
+ * @param exportKind Export kind declared by the export site.
19
+ * @param symbol Canonical exported symbol.
20
+ * @returns `any` for value exports that also declare a type, such as classes and enums.
21
+ * @example
22
+ * ```typescript
23
+ * const position = resolveUsagePosition("value", classSymbol);
24
+ * ```
25
+ */
26
+ declare const resolveUsagePosition: (exportKind: ExportKind, symbol: ts.Symbol) => UsagePosition;
27
+ /**
28
+ * Checks whether one identifier is one concrete usage candidate for the usage position.
16
29
  * @param identifier Identifier node.
17
- * @param exportKind Whether type-only or value usage is required.
30
+ * @param usagePosition Whether type, value, or either usage is required.
18
31
  * @returns True when the identifier can satisfy usage.
19
32
  * @example
20
33
  * ```typescript
21
34
  * const concrete = isConcreteUsageIdentifier(identifier, "value");
22
35
  * ```
23
36
  */
24
- declare const isConcreteUsageIdentifier: (identifier: ts.Identifier, exportKind: ExportKind) => boolean;
25
- export { getTypeScriptProgram, isConcreteUsageIdentifier };
37
+ declare const isConcreteUsageIdentifier: (identifier: ts.Identifier, usagePosition: UsagePosition) => boolean;
38
+ export { getTypeScriptProgram, isConcreteUsageIdentifier, resolveUsagePosition, };
26
39
  //# sourceMappingURL=no-unused-exports-identifier-utilities.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"no-unused-exports-identifier-utilities.d.ts","sourceRoot":"","sources":["../../../../src/domain/architecture/no-unused-exports/no-unused-exports-identifier-utilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAGnC,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAEjC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C;;;;;;;;GAQG;AACH,QAAA,MAAM,oBAAoB,GACxB,SAAS,IAAI,CAAC,WAAW,KACxB,EAAE,CAAC,OAAO,GAAG,SAOf,CAAC;AAgEF;;;;;;;;;GASG;AACH,QAAA,MAAM,yBAAyB,GAC7B,YAAY,EAAE,CAAC,UAAU,EACzB,YAAY,UAAU,KACrB,OAQF,CAAC;AAEF,OAAO,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,CAAC"}
1
+ {"version":3,"file":"no-unused-exports-identifier-utilities.d.ts","sourceRoot":"","sources":["../../../../src/domain/architecture/no-unused-exports/no-unused-exports-identifier-utilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAGnC,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAEjC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C;;;;;;;;GAQG;AACH,QAAA,MAAM,oBAAoB,GACxB,SAAS,IAAI,CAAC,WAAW,KACxB,EAAE,CAAC,OAAO,GAAG,SAOf,CAAC;AA+EF,yDAAyD;AACzD,KAAK,aAAa,GAAG,KAAK,GAAG,UAAU,CAAC;AAExC;;;;;;;;;GASG;AACH,QAAA,MAAM,oBAAoB,GACxB,YAAY,UAAU,EACtB,QAAQ,EAAE,CAAC,MAAM,KAChB,aAKF,CAAC;AAEF;;;;;;;;;GASG;AACH,QAAA,MAAM,yBAAyB,GAC7B,YAAY,EAAE,CAAC,UAAU,EACzB,eAAe,aAAa,KAC3B,OAYF,CAAC;AAEF,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EACzB,oBAAoB,GACrB,CAAC"}
@@ -42,6 +42,19 @@ const isDeclarationOnlyIdentifier = (identifier) => {
42
42
  (ts.isClassDeclaration(parent) && parent.name === identifier) ||
43
43
  (ts.isParameter(parent) && parent.name === identifier));
44
44
  };
45
+ /**
46
+ * Checks whether one node is the base expression of a class `extends` clause.
47
+ * @param node Candidate node.
48
+ * @returns True when the node is evaluated at runtime as a class base.
49
+ * @example
50
+ * ```typescript
51
+ * const classBase = isClassExtendsExpression(node);
52
+ * ```
53
+ */
54
+ const isClassExtendsExpression = (node) => ts.isExpressionWithTypeArguments(node) &&
55
+ ts.isHeritageClause(node.parent) &&
56
+ node.parent.token === ts.SyntaxKind.ExtendsKeyword &&
57
+ ts.isClassLike(node.parent.parent);
45
58
  /**
46
59
  * Checks whether one identifier node appears under a type node.
47
60
  * @param identifier Candidate identifier.
@@ -53,7 +66,7 @@ const isDeclarationOnlyIdentifier = (identifier) => {
53
66
  */
54
67
  const isTypePositionIdentifier = (identifier) => {
55
68
  const visitNode = (current) => {
56
- if (ts.isTypeQueryNode(current)) {
69
+ if (ts.isTypeQueryNode(current) || isClassExtendsExpression(current)) {
57
70
  return false;
58
71
  }
59
72
  if (ts.isTypeNode(current)) {
@@ -71,21 +84,38 @@ const isTypePositionIdentifier = (identifier) => {
71
84
  return visitNode(identifier);
72
85
  };
73
86
  /**
74
- * Checks whether one identifier is one concrete usage candidate for the export kind.
87
+ * Resolves which syntax positions consume one exported symbol.
88
+ * @param exportKind Export kind declared by the export site.
89
+ * @param symbol Canonical exported symbol.
90
+ * @returns `any` for value exports that also declare a type, such as classes and enums.
91
+ * @example
92
+ * ```typescript
93
+ * const position = resolveUsagePosition("value", classSymbol);
94
+ * ```
95
+ */
96
+ const resolveUsagePosition = (exportKind, symbol) => {
97
+ const declaresTypeAndValue = (symbol.flags & (ts.SymbolFlags.Class | ts.SymbolFlags.Enum)) !== 0;
98
+ return exportKind === "value" && declaresTypeAndValue ? "any" : exportKind;
99
+ };
100
+ /**
101
+ * Checks whether one identifier is one concrete usage candidate for the usage position.
75
102
  * @param identifier Identifier node.
76
- * @param exportKind Whether type-only or value usage is required.
103
+ * @param usagePosition Whether type, value, or either usage is required.
77
104
  * @returns True when the identifier can satisfy usage.
78
105
  * @example
79
106
  * ```typescript
80
107
  * const concrete = isConcreteUsageIdentifier(identifier, "value");
81
108
  * ```
82
109
  */
83
- const isConcreteUsageIdentifier = (identifier, exportKind) => {
110
+ const isConcreteUsageIdentifier = (identifier, usagePosition) => {
84
111
  if (isDeclarationOnlyIdentifier(identifier)) {
85
112
  return false;
86
113
  }
114
+ if (usagePosition === "any") {
115
+ return true;
116
+ }
87
117
  const isInTypePosition = isTypePositionIdentifier(identifier);
88
- return exportKind === "type" ? isInTypePosition : !isInTypePosition;
118
+ return usagePosition === "type" ? isInTypePosition : !isInTypePosition;
89
119
  };
90
- export { getTypeScriptProgram, isConcreteUsageIdentifier };
91
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm8tdW51c2VkLWV4cG9ydHMtaWRlbnRpZmllci11dGlsaXRpZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZG9tYWluL2FyY2hpdGVjdHVyZS9uby11bnVzZWQtZXhwb3J0cy9uby11bnVzZWQtZXhwb3J0cy1pZGVudGlmaWVyLXV0aWxpdGllcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxLQUFLLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFJakM7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLG9CQUFvQixHQUFHLENBQzNCLE9BQXlCLEVBQ0QsRUFBRTtJQUMxQixJQUFJLENBQUM7UUFDSCxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsaUJBQWlCLENBQUMsT0FBZ0IsQ0FBQyxDQUFDO1FBQ2pFLE9BQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQztJQUMxQixDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxLQUFLLENBQUMsQ0FBQztJQUNoQixDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBRUY7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLDJCQUEyQixHQUFHLENBQUMsVUFBeUIsRUFBVyxFQUFFO0lBQ3pFLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7SUFFakMsT0FBTyxDQUNMLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUM7UUFDNUIsRUFBRSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUM7UUFDekIsRUFBRSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQztRQUM1QixFQUFFLENBQUMseUJBQXlCLENBQUMsTUFBTSxDQUFDO1FBQ3BDLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUM7UUFDNUIsRUFBRSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQztRQUNqQyxFQUFFLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDO1FBQ2pDLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQyxNQUFNLENBQUM7UUFDckMsQ0FBQyxFQUFFLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxVQUFVLENBQUM7UUFDaEUsQ0FBQyxFQUFFLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxVQUFVLENBQUM7UUFDaEUsQ0FBQyxFQUFFLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxVQUFVLENBQUM7UUFDN0QsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDLENBQ3ZELENBQUM7QUFDSixDQUFDLENBQUM7QUFFRjs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxVQUF5QixFQUFXLEVBQUU7SUFDdEUsTUFBTSxTQUFTLEdBQUcsQ0FBQyxPQUFnQixFQUFXLEVBQUU7UUFDOUMsSUFBSSxFQUFFLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDaEMsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDM0IsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsTUFBTSxlQUFlLEdBQ25CLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUM7WUFDakMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztZQUM1QixFQUFFLENBQUMsMEJBQTBCLENBQUMsT0FBTyxDQUFDO1lBQ3RDLEVBQUUsQ0FBQyx5QkFBeUIsQ0FBQyxPQUFPLENBQUM7WUFDckMsRUFBRSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQztZQUNqQyxFQUFFLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDO1lBQzdCLEVBQUUsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFM0IsT0FBTyxDQUFDLGVBQWUsSUFBSSxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZELENBQUMsQ0FBQztJQUVGLE9BQU8sU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQy9CLENBQUMsQ0FBQztBQUVGOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0seUJBQXlCLEdBQUcsQ0FDaEMsVUFBeUIsRUFDekIsVUFBc0IsRUFDYixFQUFFO0lBQ1gsSUFBSSwyQkFBMkIsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQzVDLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELE1BQU0sZ0JBQWdCLEdBQUcsd0JBQXdCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFOUQsT0FBTyxVQUFVLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQztBQUN0RSxDQUFDLENBQUM7QUFFRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUseUJBQXlCLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUnVsZSB9IGZyb20gXCJlc2xpbnRcIjtcblxuaW1wb3J0IHsgRVNMaW50VXRpbHMgfSBmcm9tIFwiQHR5cGVzY3JpcHQtZXNsaW50L3V0aWxzXCI7XG5pbXBvcnQgKiBhcyB0cyBmcm9tIFwidHlwZXNjcmlwdFwiO1xuXG5pbXBvcnQgdHlwZSB7IEV4cG9ydEtpbmQgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG4vKipcbiAqIFJlc29sdmVzIFR5cGVTY3JpcHQgcGFyc2VyIHNlcnZpY2VzIHByb2dyYW0gd2hlbiBhdmFpbGFibGUuXG4gKiBAcGFyYW0gY29udGV4dCBSdWxlIGNvbnRleHQuXG4gKiBAcmV0dXJucyBUeXBlU2NyaXB0IHByb2dyYW0gd2hlbiBhdmFpbGFibGUuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgcHJvZ3JhbSA9IGdldFR5cGVTY3JpcHRQcm9ncmFtKGNvbnRleHQpO1xuICogYGBgXG4gKi9cbmNvbnN0IGdldFR5cGVTY3JpcHRQcm9ncmFtID0gKFxuICBjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0LFxuKTogdHMuUHJvZ3JhbSB8IHVuZGVmaW5lZCA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3Qgc2VydmljZXMgPSBFU0xpbnRVdGlscy5nZXRQYXJzZXJTZXJ2aWNlcyhjb250ZXh0IGFzIG5ldmVyKTtcbiAgICByZXR1cm4gc2VydmljZXMucHJvZ3JhbTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfVxufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhbiBpZGVudGlmaWVyIHBhcnRpY2lwYXRlcyBpbiBvbmUgZGVjbGFyYXRpb24vaW1wb3J0L2V4cG9ydCBzaXRlLlxuICogQHBhcmFtIGlkZW50aWZpZXIgSWRlbnRpZmllciBub2RlIHRvIGV2YWx1YXRlLlxuICogQHJldHVybnMgVHJ1ZSB3aGVuIHRoZSBpZGVudGlmaWVyIGlzIGRlY2xhcmF0aW9uLW9ubHkgc3ludGF4LlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGRlY2xhcmF0aW9uID0gaXNEZWNsYXJhdGlvbk9ubHlJZGVudGlmaWVyKGlkZW50aWZpZXIpO1xuICogYGBgXG4gKi9cbmNvbnN0IGlzRGVjbGFyYXRpb25Pbmx5SWRlbnRpZmllciA9IChpZGVudGlmaWVyOiB0cy5JZGVudGlmaWVyKTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IHBhcmVudCA9IGlkZW50aWZpZXIucGFyZW50O1xuXG4gIHJldHVybiAoXG4gICAgdHMuaXNJbXBvcnRTcGVjaWZpZXIocGFyZW50KSB8fFxuICAgIHRzLmlzSW1wb3J0Q2xhdXNlKHBhcmVudCkgfHxcbiAgICB0cy5pc05hbWVzcGFjZUltcG9ydChwYXJlbnQpIHx8XG4gICAgdHMuaXNJbXBvcnRFcXVhbHNEZWNsYXJhdGlvbihwYXJlbnQpIHx8XG4gICAgdHMuaXNFeHBvcnRTcGVjaWZpZXIocGFyZW50KSB8fFxuICAgIHRzLmlzVHlwZUFsaWFzRGVjbGFyYXRpb24ocGFyZW50KSB8fFxuICAgIHRzLmlzSW50ZXJmYWNlRGVjbGFyYXRpb24ocGFyZW50KSB8fFxuICAgIHRzLmlzVHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uKHBhcmVudCkgfHxcbiAgICAodHMuaXNWYXJpYWJsZURlY2xhcmF0aW9uKHBhcmVudCkgJiYgcGFyZW50Lm5hbWUgPT09IGlkZW50aWZpZXIpIHx8XG4gICAgKHRzLmlzRnVuY3Rpb25EZWNsYXJhdGlvbihwYXJlbnQpICYmIHBhcmVudC5uYW1lID09PSBpZGVudGlmaWVyKSB8fFxuICAgICh0cy5pc0NsYXNzRGVjbGFyYXRpb24ocGFyZW50KSAmJiBwYXJlbnQubmFtZSA9PT0gaWRlbnRpZmllcikgfHxcbiAgICAodHMuaXNQYXJhbWV0ZXIocGFyZW50KSAmJiBwYXJlbnQubmFtZSA9PT0gaWRlbnRpZmllcilcbiAgKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgb25lIGlkZW50aWZpZXIgbm9kZSBhcHBlYXJzIHVuZGVyIGEgdHlwZSBub2RlLlxuICogQHBhcmFtIGlkZW50aWZpZXIgQ2FuZGlkYXRlIGlkZW50aWZpZXIuXG4gKiBAcmV0dXJucyBUcnVlIHdoZW4gdGhlIGlkZW50aWZpZXIgaXMgaW5zaWRlIHR5cGUtb25seSBzeW50YXguXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgdHlwZVBvc2l0aW9uID0gaXNUeXBlUG9zaXRpb25JZGVudGlmaWVyKGlkZW50aWZpZXIpO1xuICogYGBgXG4gKi9cbmNvbnN0IGlzVHlwZVBvc2l0aW9uSWRlbnRpZmllciA9IChpZGVudGlmaWVyOiB0cy5JZGVudGlmaWVyKTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IHZpc2l0Tm9kZSA9IChjdXJyZW50OiB0cy5Ob2RlKTogYm9vbGVhbiA9PiB7XG4gICAgaWYgKHRzLmlzVHlwZVF1ZXJ5Tm9kZShjdXJyZW50KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0cy5pc1R5cGVOb2RlKGN1cnJlbnQpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBpc1ZhbHVlUG9zaXRpb24gPVxuICAgICAgdHMuaXNFeHByZXNzaW9uU3RhdGVtZW50KGN1cnJlbnQpIHx8XG4gICAgICB0cy5pc0NhbGxFeHByZXNzaW9uKGN1cnJlbnQpIHx8XG4gICAgICB0cy5pc1Byb3BlcnR5QWNjZXNzRXhwcmVzc2lvbihjdXJyZW50KSB8fFxuICAgICAgdHMuaXNFbGVtZW50QWNjZXNzRXhwcmVzc2lvbihjdXJyZW50KSB8fFxuICAgICAgdHMuaXNWYXJpYWJsZURlY2xhcmF0aW9uKGN1cnJlbnQpIHx8XG4gICAgICB0cy5pc1JldHVyblN0YXRlbWVudChjdXJyZW50KSB8fFxuICAgICAgdHMuaXNTb3VyY2VGaWxlKGN1cnJlbnQpO1xuXG4gICAgcmV0dXJuICFpc1ZhbHVlUG9zaXRpb24gJiYgdmlzaXROb2RlKGN1cnJlbnQucGFyZW50KTtcbiAgfTtcblxuICByZXR1cm4gdmlzaXROb2RlKGlkZW50aWZpZXIpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBvbmUgaWRlbnRpZmllciBpcyBvbmUgY29uY3JldGUgdXNhZ2UgY2FuZGlkYXRlIGZvciB0aGUgZXhwb3J0IGtpbmQuXG4gKiBAcGFyYW0gaWRlbnRpZmllciBJZGVudGlmaWVyIG5vZGUuXG4gKiBAcGFyYW0gZXhwb3J0S2luZCBXaGV0aGVyIHR5cGUtb25seSBvciB2YWx1ZSB1c2FnZSBpcyByZXF1aXJlZC5cbiAqIEByZXR1cm5zIFRydWUgd2hlbiB0aGUgaWRlbnRpZmllciBjYW4gc2F0aXNmeSB1c2FnZS5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBjb25jcmV0ZSA9IGlzQ29uY3JldGVVc2FnZUlkZW50aWZpZXIoaWRlbnRpZmllciwgXCJ2YWx1ZVwiKTtcbiAqIGBgYFxuICovXG5jb25zdCBpc0NvbmNyZXRlVXNhZ2VJZGVudGlmaWVyID0gKFxuICBpZGVudGlmaWVyOiB0cy5JZGVudGlmaWVyLFxuICBleHBvcnRLaW5kOiBFeHBvcnRLaW5kLFxuKTogYm9vbGVhbiA9PiB7XG4gIGlmIChpc0RlY2xhcmF0aW9uT25seUlkZW50aWZpZXIoaWRlbnRpZmllcikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBpc0luVHlwZVBvc2l0aW9uID0gaXNUeXBlUG9zaXRpb25JZGVudGlmaWVyKGlkZW50aWZpZXIpO1xuXG4gIHJldHVybiBleHBvcnRLaW5kID09PSBcInR5cGVcIiA/IGlzSW5UeXBlUG9zaXRpb24gOiAhaXNJblR5cGVQb3NpdGlvbjtcbn07XG5cbmV4cG9ydCB7IGdldFR5cGVTY3JpcHRQcm9ncmFtLCBpc0NvbmNyZXRlVXNhZ2VJZGVudGlmaWVyIH07XG4iXX0=
120
+ export { getTypeScriptProgram, isConcreteUsageIdentifier, resolveUsagePosition, };
121
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm8tdW51c2VkLWV4cG9ydHMtaWRlbnRpZmllci11dGlsaXRpZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZG9tYWluL2FyY2hpdGVjdHVyZS9uby11bnVzZWQtZXhwb3J0cy9uby11bnVzZWQtZXhwb3J0cy1pZGVudGlmaWVyLXV0aWxpdGllcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxLQUFLLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFJakM7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLG9CQUFvQixHQUFHLENBQzNCLE9BQXlCLEVBQ0QsRUFBRTtJQUMxQixJQUFJLENBQUM7UUFDSCxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsaUJBQWlCLENBQUMsT0FBZ0IsQ0FBQyxDQUFDO1FBQ2pFLE9BQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQztJQUMxQixDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxLQUFLLENBQUMsQ0FBQztJQUNoQixDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBRUY7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLDJCQUEyQixHQUFHLENBQUMsVUFBeUIsRUFBVyxFQUFFO0lBQ3pFLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7SUFFakMsT0FBTyxDQUNMLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUM7UUFDNUIsRUFBRSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUM7UUFDekIsRUFBRSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQztRQUM1QixFQUFFLENBQUMseUJBQXlCLENBQUMsTUFBTSxDQUFDO1FBQ3BDLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUM7UUFDNUIsRUFBRSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQztRQUNqQyxFQUFFLENBQUMsc0JBQXNCLENBQUMs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O0lBQ2YsQ0FBQztJQUVELElBQUksYUFBYSxLQUFLLEtBQUssRUFBRSxDQUFDO1FBQzVCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE1BQU0sZ0JBQWdCLEdBQUcsd0JBQXdCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFOUQsT0FBTyxhQUFhLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQztBQUN6RSxDQUFDLENBQUM7QUFFRixPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLHlCQUF5QixFQUN6QixvQkFBb0IsR0FDckIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUnVsZSB9IGZyb20gXCJlc2xpbnRcIjtcblxuaW1wb3J0IHsgRVNMaW50VXRpbHMgfSBmcm9tIFwiQHR5cGVzY3JpcHQtZXNsaW50L3V0aWxzXCI7XG5pbXBvcnQgKiBhcyB0cyBmcm9tIFwidHlwZXNjcmlwdFwiO1xuXG5pbXBvcnQgdHlwZSB7IEV4cG9ydEtpbmQgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG4vKipcbiAqIFJlc29sdmVzIFR5cGVTY3JpcHQgcGFyc2VyIHNlcnZpY2VzIHByb2dyYW0gd2hlbiBhdmFpbGFibGUuXG4gKiBAcGFyYW0gY29udGV4dCBSdWxlIGNvbnRleHQuXG4gKiBAcmV0dXJucyBUeXBlU2NyaXB0IHByb2dyYW0gd2hlbiBhdmFpbGFibGUuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgcHJvZ3JhbSA9IGdldFR5cGVTY3JpcHRQcm9ncmFtKGNvbnRleHQpO1xuICogYGBgXG4gKi9cbmNvbnN0IGdldFR5cGVTY3JpcHRQcm9ncmFtID0gKFxuICBjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0LFxuKTogdHMuUHJvZ3JhbSB8IHVuZGVmaW5lZCA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3Qgc2VydmljZXMgPSBFU0xpbnRVdGlscy5nZXRQYXJzZXJTZXJ2aWNlcyhjb250ZXh0IGFzIG5ldmVyKTtcbiAgICByZXR1cm4gc2VydmljZXMucHJvZ3JhbTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfVxufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhbiBpZGVudGlmaWVyIHBhcnRpY2lwYXRlcyBpbiBvbmUgZGVjbGFyYXRpb24vaW1wb3J0L2V4cG9ydCBzaXRlLlxuICogQHBhcmFtIGlkZW50aWZpZXIgSWRlbnRpZmllciBub2RlIHRvIGV2YWx1YXRlLlxuICogQHJldHVybnMgVHJ1ZSB3aGVuIHRoZSBpZGVudGlmaWVyIGlzIGRlY2xhcmF0aW9uLW9ubHkgc3ludGF4LlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGRlY2xhcmF0aW9uID0gaXNEZWNsYXJhdGlvbk9ubHlJZGVudGlmaWVyKGlkZW50aWZpZXIpO1xuICogYGBgXG4gKi9cbmNvbnN0IGlzRGVjbGFyYXRpb25Pbmx5SWRlbnRpZmllciA9IChpZGVudGlmaWVyOiB0cy5JZGVudGlmaWVyKTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IHBhcmVudCA9IGlkZW50aWZpZXIucGFyZW50O1xuXG4gIHJldHVybiAoXG4gICAgdHMuaXNJbXBvcnRTcGVjaWZpZXIocGFyZW50KSB8fFxuICAgIHRzLmlzSW1wb3J0Q2xhdXNlKHBhcmVudCkgfHxcbiAgICB0cy5pc05hbWVzcGFjZUltcG9ydChwYXJlbnQpIHx8XG4gICAgdHMuaXNJbXBvcnRFcXVhbHNEZWNsYXJhdGlvbihwYXJlbnQpIHx8XG4gICAgdHMuaXNFeHBvcnRTcGVjaWZpZXIocGFyZW50KSB8fFxuICAgIHRzLmlzVHlwZUFsaWFzRGVjbGFyYXRpb24ocGFyZW50KSB8fFxuICAgIHRzLmlzSW50ZXJmYWNlRGVjbGFyYXRpb24ocGFyZW50KSB8fFxuICAgIHRzLmlzVHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uKHBhcmVudCkgfHxcbiAgICAodHMuaXNWYXJpYWJsZURlY2xhcmF0aW9uKHBhcmVudCkgJiYgcGFyZW50Lm5hbWUgPT09IGlkZW50aWZpZXIpIHx8XG4gICAgKHRzLmlzRnVuY3Rpb25EZWNsYXJhdGlvbihwYXJlbnQpICYmIHBhcmVudC5uYW1lID09PSBpZGVudGlmaWVyKSB8fFxuICAgICh0cy5pc0NsYXNzRGVjbGFyYXRpb24ocGFyZW50KSAmJiBwYXJlbnQubmFtZSA9PT0gaWRlbnRpZmllcikgfHxcbiAgICAodHMuaXNQYXJhbWV0ZXIocGFyZW50KSAmJiBwYXJlbnQubmFtZSA9PT0gaWRlbnRpZmllcilcbiAgKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgb25lIG5vZGUgaXMgdGhlIGJhc2UgZXhwcmVzc2lvbiBvZiBhIGNsYXNzIGBleHRlbmRzYCBjbGF1c2UuXG4gKiBAcGFyYW0gbm9kZSBDYW5kaWRhdGUgbm9kZS5cbiAqIEByZXR1cm5zIFRydWUgd2hlbiB0aGUgbm9kZSBpcyBldmFsdWF0ZWQgYXQgcnVudGltZSBhcyBhIGNsYXNzIGJhc2UuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgY2xhc3NCYXNlID0gaXNDbGFzc0V4dGVuZHNFeHByZXNzaW9uKG5vZGUpO1xuICogYGBgXG4gKi9cbmNvbnN0IGlzQ2xhc3NFeHRlbmRzRXhwcmVzc2lvbiA9IChub2RlOiB0cy5Ob2RlKTogYm9vbGVhbiA9PlxuICB0cy5pc0V4cHJlc3Npb25XaXRoVHlwZUFyZ3VtZW50cyhub2RlKSAmJlxuICB0cy5pc0hlcml0YWdlQ2xhdXNlKG5vZGUucGFyZW50KSAmJlxuICBub2RlLnBhcmVudC50b2tlbiA9PT0gdHMuU3ludGF4S2luZC5FeHRlbmRzS2V5d29yZCAmJlxuICB0cy5pc0NsYXNzTGlrZShub2RlLnBhcmVudC5wYXJlbnQpO1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIG9uZSBpZGVudGlmaWVyIG5vZGUgYXBwZWFycyB1bmRlciBhIHR5cGUgbm9kZS5cbiAqIEBwYXJhbSBpZGVudGlmaWVyIENhbmRpZGF0ZSBpZGVudGlmaWVyLlxuICogQHJldHVybnMgVHJ1ZSB3aGVuIHRoZSBpZGVudGlmaWVyIGlzIGluc2lkZSB0eXBlLW9ubHkgc3ludGF4LlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHR5cGVQb3NpdGlvbiA9IGlzVHlwZVBvc2l0aW9uSWRlbnRpZmllcihpZGVudGlmaWVyKTtcbiAqIGBgYFxuICovXG5jb25zdCBpc1R5cGVQb3NpdGlvbklkZW50aWZpZXIgPSAoaWRlbnRpZmllcjogdHMuSWRlbnRpZmllcik6IGJvb2xlYW4gPT4ge1xuICBjb25zdCB2aXNpdE5vZGUgPSAoY3VycmVudDogdHMuTm9kZSk6IGJvb2xlYW4gPT4ge1xuICAgIGlmICh0cy5pc1R5cGVRdWVyeU5vZGUoY3VycmVudCkgfHwgaXNDbGFzc0V4dGVuZHNFeHByZXNzaW9uKGN1cnJlbnQpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRzLmlzVHlwZU5vZGUoY3VycmVudCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGlzVmFsdWVQb3NpdGlvbiA9XG4gICAgICB0cy5pc0V4cHJlc3Npb25TdGF0ZW1lbnQoY3VycmVudCkgfHxcbiAgICAgIHRzLmlzQ2FsbEV4cHJlc3Npb24oY3VycmVudCkgfHxcbiAgICAgIHRzLmlzUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKGN1cnJlbnQpIHx8XG4gICAgICB0cy5pc0VsZW1lbnRBY2Nlc3NFeHByZXNzaW9uKGN1cnJlbnQpIHx8XG4gICAgICB0cy5pc1ZhcmlhYmxlRGVjbGFyYXRpb24oY3VycmVudCkgfHxcbiAgICAgIHRzLmlzUmV0dXJuU3RhdGVtZW50KGN1cnJlbnQpIHx8XG4gICAgICB0cy5pc1NvdXJjZUZpbGUoY3VycmVudCk7XG5cbiAgICByZXR1cm4gIWlzVmFsdWVQb3NpdGlvbiAmJiB2aXNpdE5vZGUoY3VycmVudC5wYXJlbnQpO1xuICB9O1xuXG4gIHJldHVybiB2aXNpdE5vZGUoaWRlbnRpZmllcik7XG59O1xuXG4vKiogU3ludGF4IHBvc2l0aW9uIHRoYXQgY2FuIHNhdGlzZnkgb25lIGV4cG9ydCB1c2FnZS4gKi9cbnR5cGUgVXNhZ2VQb3NpdGlvbiA9IFwiYW55XCIgfCBFeHBvcnRLaW5kO1xuXG4vKipcbiAqIFJlc29sdmVzIHdoaWNoIHN5bnRheCBwb3NpdGlvbnMgY29uc3VtZSBvbmUgZXhwb3J0ZWQgc3ltYm9sLlxuICogQHBhcmFtIGV4cG9ydEtpbmQgRXhwb3J0IGtpbmQgZGVjbGFyZWQgYnkgdGhlIGV4cG9ydCBzaXRlLlxuICogQHBhcmFtIHN5bWJvbCBDYW5vbmljYWwgZXhwb3J0ZWQgc3ltYm9sLlxuICogQHJldHVybnMgYGFueWAgZm9yIHZhbHVlIGV4cG9ydHMgdGhhdCBhbHNvIGRlY2xhcmUgYSB0eXBlLCBzdWNoIGFzIGNsYXNzZXMgYW5kIGVudW1zLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHBvc2l0aW9uID0gcmVzb2x2ZVVzYWdlUG9zaXRpb24oXCJ2YWx1ZVwiLCBjbGFzc1N5bWJvbCk7XG4gKiBgYGBcbiAqL1xuY29uc3QgcmVzb2x2ZVVzYWdlUG9zaXRpb24gPSAoXG4gIGV4cG9ydEtpbmQ6IEV4cG9ydEtpbmQsXG4gIHN5bWJvbDogdHMuU3ltYm9sLFxuKTogVXNhZ2VQb3NpdGlvbiA9PiB7XG4gIGNvbnN0IGRlY2xhcmVzVHlwZUFuZFZhbHVlID1cbiAgICAoc3ltYm9sLmZsYWdzICYgKHRzLlN5bWJvbEZsYWdzLkNsYXNzIHwgdHMuU3ltYm9sRmxhZ3MuRW51bSkpICE9PSAwO1xuXG4gIHJldHVybiBleHBvcnRLaW5kID09PSBcInZhbHVlXCIgJiYgZGVjbGFyZXNUeXBlQW5kVmFsdWUgPyBcImFueVwiIDogZXhwb3J0S2luZDtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgb25lIGlkZW50aWZpZXIgaXMgb25lIGNvbmNyZXRlIHVzYWdlIGNhbmRpZGF0ZSBmb3IgdGhlIHVzYWdlIHBvc2l0aW9uLlxuICogQHBhcmFtIGlkZW50aWZpZXIgSWRlbnRpZmllciBub2RlLlxuICogQHBhcmFtIHVzYWdlUG9zaXRpb24gV2hldGhlciB0eXBlLCB2YWx1ZSwgb3IgZWl0aGVyIHVzYWdlIGlzIHJlcXVpcmVkLlxuICogQHJldHVybnMgVHJ1ZSB3aGVuIHRoZSBpZGVudGlmaWVyIGNhbiBzYXRpc2Z5IHVzYWdlLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGNvbmNyZXRlID0gaXNDb25jcmV0ZVVzYWdlSWRlbnRpZmllcihpZGVudGlmaWVyLCBcInZhbHVlXCIpO1xuICogYGBgXG4gKi9cbmNvbnN0IGlzQ29uY3JldGVVc2FnZUlkZW50aWZpZXIgPSAoXG4gIGlkZW50aWZpZXI6IHRzLklkZW50aWZpZXIsXG4gIHVzYWdlUG9zaXRpb246IFVzYWdlUG9zaXRpb24sXG4pOiBib29sZWFuID0+IHtcbiAgaWYgKGlzRGVjbGFyYXRpb25Pbmx5SWRlbnRpZmllcihpZGVudGlmaWVyKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICh1c2FnZVBvc2l0aW9uID09PSBcImFueVwiKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb25zdCBpc0luVHlwZVBvc2l0aW9uID0gaXNUeXBlUG9zaXRpb25JZGVudGlmaWVyKGlkZW50aWZpZXIpO1xuXG4gIHJldHVybiB1c2FnZVBvc2l0aW9uID09PSBcInR5cGVcIiA/IGlzSW5UeXBlUG9zaXRpb24gOiAhaXNJblR5cGVQb3NpdGlvbjtcbn07XG5cbmV4cG9ydCB7XG4gIGdldFR5cGVTY3JpcHRQcm9ncmFtLFxuICBpc0NvbmNyZXRlVXNhZ2VJZGVudGlmaWVyLFxuICByZXNvbHZlVXNhZ2VQb3NpdGlvbixcbn07XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"no-unused-exports-usage-utilities.d.ts","sourceRoot":"","sources":["../../../../src/domain/architecture/no-unused-exports/no-unused-exports-usage-utilities.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAEjC,OAAO,KAAK,EACV,eAAe,EACf,WAAW,EACX,oBAAoB,EACrB,MAAM,SAAS,CAAC;AAuEjB;;;;;;;;;;;;GAYG;AACH,QAAA,MAAM,sBAAsB,GAC1B,SAAS,EAAE,CAAC,OAAO,EACnB,gBAAgB,MAAM,EACtB,OAAO,oBAAoB,EAC3B,UAAU,MAAM,EAChB,iBAAiB,eAAe,KAC/B,WAAW,EAoDb,CAAC;AAEF;;;;;;;;GAQG;AACH,QAAA,MAAM,mBAAmB,GACvB,QAAQ,WAAW,EAAE,KACpB,YAAY,GAAG,WAAW,GAAG,QAY/B,CAAC;AAEF,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,CAAC"}
1
+ {"version":3,"file":"no-unused-exports-usage-utilities.d.ts","sourceRoot":"","sources":["../../../../src/domain/architecture/no-unused-exports/no-unused-exports-usage-utilities.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAEjC,OAAO,KAAK,EACV,eAAe,EACf,WAAW,EACX,oBAAoB,EACrB,MAAM,SAAS,CAAC;AA+EjB;;;;;;;;;;;;GAYG;AACH,QAAA,MAAM,sBAAsB,GAC1B,SAAS,EAAE,CAAC,OAAO,EACnB,gBAAgB,MAAM,EACtB,OAAO,oBAAoB,EAC3B,UAAU,MAAM,EAChB,iBAAiB,eAAe,KAC/B,WAAW,EAoDb,CAAC;AAEF;;;;;;;;GAQG;AACH,QAAA,MAAM,mBAAmB,GACvB,QAAQ,WAAW,EAAE,KACpB,YAAY,GAAG,WAAW,GAAG,QAY/B,CAAC;AAEF,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import path from "node:path";
2
2
  import * as ts from "typescript";
3
- import { isConcreteUsageIdentifier } from "./no-unused-exports-identifier-utilities.js";
3
+ import { isConcreteUsageIdentifier, resolveUsagePosition, } from "./no-unused-exports-identifier-utilities.js";
4
4
  import { isTestFile } from "./no-unused-exports-options.js";
5
5
  import { collectPublicApiExposureUsages } from "./no-unused-exports-public-api-usage-utilities.js";
6
6
  import { getExportedSymbol, isSameSymbol, resolveCanonicalSymbol, toComparableAbsolutePath, } from "./no-unused-exports-symbol-utilities.js";
@@ -18,12 +18,13 @@ import { getExportedSymbol, isSameSymbol, resolveCanonicalSymbol, toComparableAb
18
18
  * ```
19
19
  */
20
20
  const collectConcreteUsagesFromSourceFile = (sourceFile, checker, targetSymbol, exportedElement, consumerIsTestFile, usages) => {
21
+ const usagePosition = resolveUsagePosition(exportedElement.exportKind, targetSymbol);
21
22
  const visitNode = (node) => {
22
23
  if (!ts.isIdentifier(node)) {
23
24
  ts.forEachChild(node, visitNode);
24
25
  return;
25
26
  }
26
- if (!isConcreteUsageIdentifier(node, exportedElement.exportKind)) {
27
+ if (!isConcreteUsageIdentifier(node, usagePosition)) {
27
28
  ts.forEachChild(node, visitNode);
28
29
  return;
29
30
  }
@@ -103,4 +104,4 @@ const classifyExportUsage = (usages) => {
103
104
  return "test-only";
104
105
  };
105
106
  export { classifyExportUsage, collectCrossFileUsages };
106
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm8tdW51c2VkLWV4cG9ydHMtdXNhZ2UtdXRpbGl0aWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2RvbWFpbi9hcmNoaXRlY3R1cmUvbm8tdW51c2VkLWV4cG9ydHMvbm8tdW51c2VkLWV4cG9ydHMtdXNhZ2UtdXRpbGl0aWVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUM3QixPQUFPLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQztBQVFqQyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNyRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDekQsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDaEcsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixZQUFZLEVBQ1osc0JBQXNCLEVBQ3RCLHdCQUF3QixHQUN6QixNQUFNLHNDQUFzQyxDQUFDO0FBRTlDOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILE1BQU0sbUNBQW1DLEdBQUcsQ0FDMUMsVUFBeUIsRUFDekIsT0FBdUIsRUFDdkIsWUFBdUIsRUFDdkIsZUFBZ0MsRUFDaEMsa0JBQTJCLEVBQzNCLE1BQXFCLEVBQ2YsRUFBRTtJQUNSLE1BQU0sU0FBUyxHQUFHLENBQUMsSUFBYSxFQUFRLEVBQUU7UUFDeEMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUMzQixFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNqQyxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDakUsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFD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a0IsRUFBRTtJQUN6QyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDeEIsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN0QixPQUFPLFlBQVksQ0FBQztRQUN0QixDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sV0FBVyxDQUFDO0FBQ3JCLENBQUMsQ0FBQztBQUVGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxzQkFBc0IsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0ICogYXMgdHMgZnJvbSBcInR5cGVzY3JpcHRcIjtcblxuaW1wb3J0IHR5cGUge1xuICBFeHBvcnRlZEVsZW1lbnQsXG4gIEV4cG9ydFVzYWdlLFxuICBOb1VudXNlZEV4cG9ydHNTdGF0ZSxcbn0gZnJvbSBcIi4vdHlwZXNcIjtcblxuaW1wb3J0IHsgaXNDb25jcmV0ZVVzYWdlSWRlbnRpZmllciB9IGZyb20gXCIuL25vLXVudXNlZC1leHBvcnRzLWlkZW50aWZpZXItdXRpbGl0aWVzXCI7XG5pbXBvcnQgeyBpc1Rlc3RGaWxlIH0gZnJvbSBcIi4vbm8tdW51c2VkLWV4cG9ydHMtb3B0aW9uc1wiO1xuaW1wb3J0IHsgY29sbGVjdFB1YmxpY0FwaUV4cG9zdXJlVXNhZ2VzIH0gZnJvbSBcIi4vbm8tdW51c2VkLWV4cG9ydHMtcHVibGljLWFwaS11c2FnZS11dGlsaXRpZXNcIjtcbmltcG9ydCB7XG4gIGdldEV4cG9ydGVkU3ltYm9sLFxuICBpc1NhbWVTeW1ib2wsXG4gIHJlc29sdmVDYW5vbmljYWxTeW1ib2wsXG4gIHRvQ29tcGFyYWJsZUFic29sdXRlUGF0aCxcbn0gZnJvbSBcIi4vbm8tdW51c2VkLWV4cG9ydHMtc3ltYm9sLXV0aWxpdGllc1wiO1xuXG4vKipcbiAqIEFwcGVuZHMgY29uY3JldGUgdXNhZ2VzIGZyb20gb25lIHNvdXJjZSBmaWxlIGludG8gdGhlIGFjY3VtdWxhdG9yLlxuICogQHBhcmFtIHNvdXJjZUZpbGUgU291cmNlIGZpbGUgdG8gc2Nhbi5cbiAqIEBwYXJhbSBjaGVja2VyIFR5cGVTY3JpcHQgY2hlY2tlci5cbiAqIEBwYXJhbSB0YXJnZXRTeW1ib2wgRXhwb3J0IHN5bWJvbCBiZWluZyBjbGFzc2lmaWVkLlxuICogQHBhcmFtIGV4cG9ydGVkRWxlbWVudCBFeHBvcnQgbWV0YWRhdGEuXG4gKiBAcGFyYW0gY29uc3VtZXJJc1Rlc3RGaWxlIFdoZXRoZXIgc291cmNlIGZpbGUgaXMgYSB0ZXN0IGZpbGUuXG4gKiBAcGFyYW0gdXNhZ2VzIE11dGFibGUgdXNhZ2UgYWNjdW11bGF0b3IuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29sbGVjdENvbmNyZXRlVXNhZ2VzRnJvbVNvdXJjZUZpbGUoc291cmNlRmlsZSwgY2hlY2tlciwgdGFyZ2V0U3ltYm9sS2V5LCBleHBvcnRlZEVsZW1lbnQsIGZhbHNlLCB1c2FnZXMpO1xuICogYGBgXG4gKi9cbmNvbnN0IGNvbGxlY3RDb25jcmV0ZVVzYWdlc0Zyb21Tb3VyY2VGaWxlID0gKFxuICBzb3VyY2VGaWxlOiB0cy5Tb3VyY2VGaWxlLFxuICBjaGVja2VyOiB0cy5UeXBlQ2hlY2tlcixcbiAgdGFyZ2V0U3ltYm9sOiB0cy5TeW1ib2wsXG4gIGV4cG9ydGVkRWxlbWVudDogRXhwb3J0ZWRFbGVtZW50LFxuICBjb25zdW1lcklzVGVzdEZpbGU6IGJvb2xlYW4sXG4gIHVzYWdlczogRXhwb3J0VXNhZ2VbXSxcbik6IHZvaWQgPT4ge1xuICBjb25zdCB2aXNpdE5vZGUgPSAobm9kZTogdHMuTm9kZSk6IHZvaWQgPT4ge1xuICAgIGlmICghdHMuaXNJZGVudGlmaWVyKG5vZGUpKSB7XG4gICAgICB0cy5mb3JFYWNoQ2hpbGQobm9kZSwgdmlzaXROb2RlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWlzQ29uY3JldGVVc2FnZUlkZW50aWZpZXIobm9kZSwgZXhwb3J0ZWRFbGVtZW50LmV4cG9ydEtpbmQpKSB7XG4gICAgICB0cy5mb3JFYWNoQ2hpbGQobm9kZSwgdmlzaXROb2RlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpc1Nob3J0aGFuZE5hbWUgPVxuICAgICAgdHMuaXNTaG9ydGhhbmRQcm9wZXJ0eUFzc2lnbm1lbnQobm9kZS5wYXJlbnQpICYmXG4gICAgICBub2RlLnBhcmVudC5uYW1lID09PSBub2RlO1xuXG4gICAgY29uc3QgY2FuZGlkYXRlU3ltYm9sID0gaXNTaG9ydGhhbmROYW1lXG4gICAgICA/IGNoZWNrZXIuZ2V0U2hvcnRoYW5kQXNzaWdubWVudFZhbHVlU3ltYm9sKG5vZGUucGFyZW50KVxuICAgICAgOiBjaGVja2VyLmdldFN5bWJvbEF0TG9jYXRpb24obm9kZSk7XG5cbiAgICBpZiAoY2FuZGlkYXRlU3ltYm9sID09PSB2b2lkIDApIHtcbiAgICAgIHRzLmZvckVhY2hDaGlsZChub2RlLCB2aXNpdE5vZGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc29sdmVkU3ltYm9sID0gcmVzb2x2ZUNhbm9uaWNhbFN5bWJvbChjYW5kaWRhdGVTeW1ib2wsIGNoZWNrZXIpO1xuXG4gICAgaWYgKCFpc1NhbWVTeW1ib2wocmVzb2x2ZWRTeW1ib2wsIHRhcmdldFN5bWJvbCkpIHtcbiAgICAgIHRzLmZvckVhY2hDaGlsZChub2RlLCB2aXNpdE5vZGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHVzYWdlcy5wdXNoKHsgaXNUZXN0RmlsZTogY29uc3VtZXJJc1Rlc3RGaWxlIH0pO1xuICAgIHRzLmZvckVhY2hDaGlsZChub2RlLCB2aXNpdE5vZGUpO1xuICB9O1xuXG4gIHZpc2l0Tm9kZShzb3VyY2VGaWxlKTtcbn07XG5cbi8qKlxuICogQ29sbGVjdHMgY29uY3JldGUgdXNhZ2VzIG9mIG9uZSBleHBvcnRlZCBlbGVtZW50IGFjcm9zcyB0aGUgcHJvZ3JhbS5cbiAqIEBwYXJhbSBwcm9ncmFtIFR5cGVTY3JpcHQgcHJvZ3JhbS5cbiAqIEBwYXJhbSBzb3VyY2VGaWxlbmFtZSBTb3VyY2UgZmlsZW5hbWUgd2hlcmUgZXhwb3J0IGlzIGRlZmluZWQuXG4gKiBAcGFyYW0gc3RhdGUgTm9ybWFsaXplZCBydWxlIG9wdGlvbnMuXG4gKiBAcGFyYW0gcmVwb1Jvb3QgQWJzb2x1dGUgcmVwb3NpdG9yeSByb290IHVzZWQgZm9yIHRlc3QtZmlsZSBjbGFzc2lmaWNhdGlvbi5cbiAqIEBwYXJhbSBleHBvcnRlZEVsZW1lbnQgRXhwb3J0ZWQgZWxlbWVudCB0byBjbGFzc2lmeS5cbiAqIEByZXR1cm5zIENvbmNyZXRlIHVzYWdlcyBmb3IgdGhlIGV4cG9ydGVkIGVsZW1lbnQuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgdXNhZ2VzID0gY29sbGVjdENyb3NzRmlsZVVzYWdlcyhwcm9ncmFtLCBcIi9yZXBvL3NyYy9mZWF0dXJlLnRzXCIsIHN0YXRlLCBcIi9yZXBvXCIsIGV4cG9ydGVkRWxlbWVudCk7XG4gKiBgYGBcbiAqL1xuY29uc3QgY29sbGVjdENyb3NzRmlsZVVzYWdlcyA9IChcbiAgcHJvZ3JhbTogdHMuUHJvZ3JhbSxcbiAgc291cmNlRmlsZW5hbWU6IHN0cmluZyxcbiAgc3RhdGU6IE5vVW51c2VkRXhwb3J0c1N0YXRlLFxuICByZXBvUm9vdDogc3RyaW5nLFxuICBleHBvcnRlZEVsZW1lbnQ6IEV4cG9ydGVkRWxlbWVudCxcbik6IEV4cG9ydFVzYWdlW10gPT4ge1xuICBjb25zdCBjaGVja2VyID0gcHJvZ3JhbS5nZXRUeXBlQ2hlY2tlcigpO1xuICBjb25zdCB0YXJnZXRTeW1ib2wgPSBnZXRFeHBvcnRlZFN5bWJvbChcbiAgICBwcm9ncmFtLFxuICAgIHNvdXJjZUZpbGVuYW1lLFxuICAgIGV4cG9ydGVkRWxlbWVudC5leHBvcnRlZE5hbWUsXG4gICk7XG5cbiAgaWYgKHRhcmdldFN5bWJvbCA9PT0gdm9pZCAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3Qgbm9ybWFsaXplZFNvdXJjZUZpbGVuYW1lID0gdG9Db21wYXJhYmxlQWJzb2x1dGVQYXRoKHNvdXJjZUZpbGVuYW1lKTtcbiAgY29uc3Qgbm9ybWFsaXplZFJlcG9Sb290ID0gcGF0aC5yZXNvbHZlKHJlcG9Sb290KTtcbiAgY29uc3QgdXNhZ2VzOiBFeHBvcnRVc2FnZVtdID0gY29sbGVjdFB1YmxpY0FwaUV4cG9zdXJlVXNhZ2VzKFxuICAgIHByb2dyYW0sXG4gICAgc291cmNlRmlsZW5hbWUsXG4gICAgc3RhdGUsXG4gICAgcmVwb1Jvb3QsXG4gICAgdGFyZ2V0U3ltYm9sLFxuICApO1xuXG4gIGZvciAoY29uc3Qgc291cmNlRmlsZSBvZiBwcm9ncmFtLmdldFNvdXJjZUZpbGVzKCkpIHtcbiAgICBpZiAoc291cmNlRmlsZS5pc0RlY2xhcmF0aW9uRmlsZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgY29uc3VtZXJGaWxlbmFtZSA9IHBhdGgucmVzb2x2ZShzb3VyY2VGaWxlLmZpbGVOYW1lKTtcbiAgICBjb25zdCBub3JtYWxpemVkQ29uc3VtZXJGaWxlbmFtZSA9XG4gICAgICB0b0NvbXBhcmFibGVBYnNvbHV0ZVBhdGgoY29uc3VtZXJGaWxlbmFtZSk7XG5cbiAgICBpZiAobm9ybWFsaXplZENvbnN1bWVyRmlsZW5hbWUgPT09IG5vcm1hbGl6ZWRTb3VyY2VGaWxlbmFtZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgaXNDb25zdW1lclRlc3RGaWxlID0gaXNUZXN0RmlsZShcbiAgICAgIGNvbnN1bWVyRmlsZW5hbWUsXG4gICAgICBzdGF0ZSxcbiAgICAgIG5vcm1hbGl6ZWRSZXBvUm9vdCxcbiAgICApO1xuXG4gICAgY29sbGVjdENvbmNyZXRlVXNhZ2VzRnJvbVNvdXJjZUZpbGUoXG4gICAgICBzb3VyY2VGaWxlLFxuICAgICAgY2hlY2tlcixcbiAgICAgIHRhcmdldFN5bWJvbCxcbiAgICAgIGV4cG9ydGVkRWxlbWVudCxcbiAgICAgIGlzQ29uc3VtZXJUZXN0RmlsZSxcbiAgICAgIHVzYWdlcyxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHVzYWdlcztcbn07XG5cbi8qKlxuICogQ2xhc3NpZmllcyBvbmUgZXhwb3J0ZWQgbmFtZSBiYXNlZCBvbiBjcm9zcy1maWxlIHVzYWdlcy5cbiAqIEBwYXJhbSB1c2FnZXMgQ29sbGVjdGVkIHVzYWdlcy5cbiAqIEByZXR1cm5zIENsYXNzaWZpY2F0aW9uIGxhYmVsLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGNsYXNzaWZpY2F0aW9uID0gY2xhc3NpZnlFeHBvcnRVc2FnZShcImZlYXR1cmVcIiwgdXNhZ2VzKTtcbiAqIGBgYFxuICovXG5jb25zdCBjbGFzc2lmeUV4cG9ydFVzYWdlID0gKFxuICB1c2FnZXM6IEV4cG9ydFVzYWdlW10sXG4pOiBcInByb2R1Y3Rpb25cIiB8IFwidGVzdC1vbmx5XCIgfCBcInVudXNlZFwiID0+IHtcbiAgaWYgKHVzYWdlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gXCJ1bnVzZWRcIjtcbiAgfVxuXG4gIGZvciAoY29uc3QgdXNhZ2Ugb2YgdXNhZ2VzKSB7XG4gICAgaWYgKCF1c2FnZS5pc1Rlc3RGaWxlKSB7XG4gICAgICByZXR1cm4gXCJwcm9kdWN0aW9uXCI7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIFwidGVzdC1vbmx5XCI7XG59O1xuXG5leHBvcnQgeyBjbGFzc2lmeUV4cG9ydFVzYWdlLCBjb2xsZWN0Q3Jvc3NGaWxlVXNhZ2VzIH07XG4iXX0=
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm8tdW51c2VkLWV4cG9ydHMtdXNhZ2UtdXRpbGl0aWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2RvbWFpbi9hcmNoaXRlY3R1cmUvbm8tdW51c2VkLWV4cG9ydHMvbm8tdW51c2VkLWV4cG9ydHMtdXNhZ2UtdXRpbGl0aWVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUM3QixPQUFPLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQztBQVFqQyxPQUFPLEVBQ0wseUJBQXlCLEVBQ3pCLG9CQUFvQixHQUNyQixNQUFNLDBDQUEwQyxDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUNoRyxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLFlBQVksRUFDWixzQkFBc0IsRUFDdEIsd0JBQXdCLEdBQ3pCLE1BQU0sc0NBQXNDLENBQUM7QUFFOUM7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxtQ0FBbUMsR0FBRyxDQUMxQyxVQUF5QixFQUN6QixPQUF1QixFQUN2QixZQUF1QixFQUN2QixlQUFnQyxFQUNoQyxrQkFBMkIsRUFDM0IsTUFBcUIsRUFDZixFQUFFO0lBQ1IsTUFBTSxhQUFhLEdBQUcsb0JBQW9CLENBQ3hDLGVBQWUsQ0FBQyxVQUFVLEVBQzFCLFlBQVksQ0FDYixDQUFDO0lBRUYsTUFBTSxTQUFTLEdBQUcsQ0FBQyxJQUFhLEVBQVEsRUFBRTtRQUN4QyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzNCLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ2pDLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksRUFBRSxh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QUM7QUFDaEIsQ0FBQyxDQUFDO0FBRUY7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLG1CQUFtQixHQUFHLENBQzFCLE1BQXFCLEVBQ2tCLEVBQUU7SUFDekMsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3hCLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDdEIsT0FBTyxZQUFZLENBQUM7UUFDdEIsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLFdBQVcsQ0FBQztBQUNyQixDQUFDLENBQUM7QUFFRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCAqIGFzIHRzIGZyb20gXCJ0eXBlc2NyaXB0XCI7XG5cbmltcG9ydCB0eXBlIHtcbiAgRXhwb3J0ZWRFbGVtZW50LFxuICBFeHBvcnRVc2FnZSxcbiAgTm9VbnVzZWRFeHBvcnRzU3RhdGUsXG59IGZyb20gXCIuL3R5cGVzXCI7XG5cbmltcG9ydCB7XG4gIGlzQ29uY3JldGVVc2FnZUlkZW50aWZpZXIsXG4gIHJlc29sdmVVc2FnZVBvc2l0aW9uLFxufSBmcm9tIFwiLi9uby11bnVzZWQtZXhwb3J0cy1pZGVudGlmaWVyLXV0aWxpdGllc1wiO1xuaW1wb3J0IHsgaXNUZXN0RmlsZSB9IGZyb20gXCIuL25vLXVudXNlZC1leHBvcnRzLW9wdGlvbnNcIjtcbmltcG9ydCB7IGNvbGxlY3RQdWJsaWNBcGlFeHBvc3VyZVVzYWdlcyB9IGZyb20gXCIuL25vLXVudXNlZC1leHBvcnRzLXB1YmxpYy1hcGktdXNhZ2UtdXRpbGl0aWVzXCI7XG5pbXBvcnQge1xuICBnZXRFeHBvcnRlZFN5bWJvbCxcbiAgaXNTYW1lU3ltYm9sLFxuICByZXNvbHZlQ2Fub25pY2FsU3ltYm9sLFxuICB0b0NvbXBhcmFibGVBYnNvbHV0ZVBhdGgsXG59IGZyb20gXCIuL25vLXVudXNlZC1leHBvcnRzLXN5bWJvbC11dGlsaXRpZXNcIjtcblxuLyoqXG4gKiBBcHBlbmRzIGNvbmNyZXRlIHVzYWdlcyBmcm9tIG9uZSBzb3VyY2UgZmlsZSBpbnRvIHRoZSBhY2N1bXVsYXRvci5cbiAqIEBwYXJhbSBzb3VyY2VGaWxlIFNvdXJjZSBmaWxlIHRvIHNjYW4uXG4gKiBAcGFyYW0gY2hlY2tlciBUeXBlU2NyaXB0IGNoZWNrZXIuXG4gKiBAcGFyYW0gdGFyZ2V0U3ltYm9sIEV4cG9ydCBzeW1ib2wgYmVpbmcgY2xhc3NpZmllZC5cbiAqIEBwYXJhbSBleHBvcnRlZEVsZW1lbnQgRXhwb3J0IG1ldGFkYXRhLlxuICogQHBhcmFtIGNvbnN1bWVySXNUZXN0RmlsZSBXaGV0aGVyIHNvdXJjZSBmaWxlIGlzIGEgdGVzdCBmaWxlLlxuICogQHBhcmFtIHVzYWdlcyBNdXRhYmxlIHVzYWdlIGFjY3VtdWxhdG9yLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbGxlY3RDb25jcmV0ZVVzYWdlc0Zyb21Tb3VyY2VGaWxlKHNvdXJjZUZpbGUsIGNoZWNrZXIsIHRhcmdldFN5bWJvbEtleSwgZXhwb3J0ZWRFbGVtZW50LCBmYWxzZSwgdXNhZ2VzKTtcbiAqIGBgYFxuICovXG5jb25zdCBjb2xsZWN0Q29uY3JldGVVc2FnZXNGcm9tU291cmNlRmlsZSA9IChcbiAgc291cmNlRmlsZTogdHMuU291cmNlRmlsZSxcbiAgY2hlY2tlcjogdHMuVHlwZUNoZWNrZXIsXG4gIHRhcmdldFN5bWJvbDogdHMuU3ltYm9sLFxuICBleHBvcnRlZEVsZW1lbnQ6IEV4cG9ydGVkRWxlbWVudCxcbiAgY29uc3VtZXJJc1Rlc3RGaWxlOiBib29sZWFuLFxuICB1c2FnZXM6IEV4cG9ydFVzYWdlW10sXG4pOiB2b2lkID0+IHtcbiAgY29uc3QgdXNhZ2VQb3NpdGlvbiA9IHJlc29sdmVVc2FnZVBvc2l0aW9uKFxuICAgIGV4cG9ydGVkRWxlbWVudC5leHBvcnRLaW5kLFxuICAgIHRhcmdldFN5bWJvbCxcbiAgKTtcblxuICBjb25zdCB2aXNpdE5vZGUgPSAobm9kZTogdHMuTm9kZSk6IHZvaWQgPT4ge1xuICAgIGlmICghdHMuaXNJZGVudGlmaWVyKG5vZGUpKSB7XG4gICAgICB0cy5mb3JFYWNoQ2hpbGQobm9kZSwgdmlzaXROb2RlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWlzQ29uY3JldGVVc2FnZUlkZW50aWZpZXIobm9kZSwgdXNhZ2VQb3NpdGlvbikpIHtcbiAgICAgIHRzLmZvckVhY2hDaGlsZChub2RlLCB2aXNpdE5vZGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGlzU2hvcnRoYW5kTmFtZSA9XG4gICAgICB0cy5pc1Nob3J0aGFuZFByb3BlcnR5QXNzaWdubWVudChub2RlLnBhcmVudCkgJiZcbiAgICAgIG5vZGUucGFyZW50Lm5hbWUgPT09IG5vZGU7XG5cbiAgICBjb25zdCBjYW5kaWRhdGVTeW1ib2wgPSBpc1Nob3J0aGFuZE5hbWVcbiAgICAgID8gY2hlY2tlci5nZXRTaG9ydGhhbmRBc3NpZ25tZW50VmFsdWVTeW1ib2wobm9kZS5wYXJlbnQpXG4gICAgICA6IGNoZWNrZXIuZ2V0U3ltYm9sQXRMb2NhdGlvbihub2RlKTtcblxuICAgIGlmIChjYW5kaWRhdGVTeW1ib2wgPT09IHZvaWQgMCkge1xuICAgICAgdHMuZm9yRWFjaENoaWxkKG5vZGUsIHZpc2l0Tm9kZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcmVzb2x2ZWRTeW1ib2wgPSByZXNvbHZlQ2Fub25pY2FsU3ltYm9sKGNhbmRpZGF0ZVN5bWJvbCwgY2hlY2tlcik7XG5cbiAgICBpZiAoIWlzU2FtZVN5bWJvbChyZXNvbHZlZFN5bWJvbCwgdGFyZ2V0U3ltYm9sKSkge1xuICAgICAgdHMuZm9yRWFjaENoaWxkKG5vZGUsIHZpc2l0Tm9kZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdXNhZ2VzLnB1c2goeyBpc1Rlc3RGaWxlOiBjb25zdW1lcklzVGVzdEZpbGUgfSk7XG4gICAgdHMuZm9yRWFjaENoaWxkKG5vZGUsIHZpc2l0Tm9kZSk7XG4gIH07XG5cbiAgdmlzaXROb2RlKHNvdXJjZUZpbGUpO1xufTtcblxuLyoqXG4gKiBDb2xsZWN0cyBjb25jcmV0ZSB1c2FnZXMgb2Ygb25lIGV4cG9ydGVkIGVsZW1lbnQgYWNyb3NzIHRoZSBwcm9ncmFtLlxuICogQHBhcmFtIHByb2dyYW0gVHlwZVNjcmlwdCBwcm9ncmFtLlxuICogQHBhcmFtIHNvdXJjZUZpbGVuYW1lIFNvdXJjZSBmaWxlbmFtZSB3aGVyZSBleHBvcnQgaXMgZGVmaW5lZC5cbiAqIEBwYXJhbSBzdGF0ZSBOb3JtYWxpemVkIHJ1bGUgb3B0aW9ucy5cbiAqIEBwYXJhbSByZXBvUm9vdCBBYnNvbHV0ZSByZXBvc2l0b3J5IHJvb3QgdXNlZCBmb3IgdGVzdC1maWxlIGNsYXNzaWZpY2F0aW9uLlxuICogQHBhcmFtIGV4cG9ydGVkRWxlbWVudCBFeHBvcnRlZCBlbGVtZW50IHRvIGNsYXNzaWZ5LlxuICogQHJldHVybnMgQ29uY3JldGUgdXNhZ2VzIGZvciB0aGUgZXhwb3J0ZWQgZWxlbWVudC5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCB1c2FnZXMgPSBjb2xsZWN0Q3Jvc3NGaWxlVXNhZ2VzKHByb2dyYW0sIFwiL3JlcG8vc3JjL2ZlYXR1cmUudHNcIiwgc3RhdGUsIFwiL3JlcG9cIiwgZXhwb3J0ZWRFbGVtZW50KTtcbiAqIGBgYFxuICovXG5jb25zdCBjb2xsZWN0Q3Jvc3NGaWxlVXNhZ2VzID0gKFxuICBwcm9ncmFtOiB0cy5Qcm9ncmFtLFxuICBzb3VyY2VGaWxlbmFtZTogc3RyaW5nLFxuICBzdGF0ZTogTm9VbnVzZWRFeHBvcnRzU3RhdGUsXG4gIHJlcG9Sb290OiBzdHJpbmcsXG4gIGV4cG9ydGVkRWxlbWVudDogRXhwb3J0ZWRFbGVtZW50LFxuKTogRXhwb3J0VXNhZ2VbXSA9PiB7XG4gIGNvbnN0IGNoZWNrZXIgPSBwcm9ncmFtLmdldFR5cGVDaGVja2VyKCk7XG4gIGNvbnN0IHRhcmdldFN5bWJvbCA9IGdldEV4cG9ydGVkU3ltYm9sKFxuICAgIHByb2dyYW0sXG4gICAgc291cmNlRmlsZW5hbWUsXG4gICAgZXhwb3J0ZWRFbGVtZW50LmV4cG9ydGVkTmFtZSxcbiAgKTtcblxuICBpZiAodGFyZ2V0U3ltYm9sID09PSB2b2lkIDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCBub3JtYWxpemVkU291cmNlRmlsZW5hbWUgPSB0b0NvbXBhcmFibGVBYnNvbHV0ZVBhdGgoc291cmNlRmlsZW5hbWUpO1xuICBjb25zdCBub3JtYWxpemVkUmVwb1Jvb3QgPSBwYXRoLnJlc29sdmUocmVwb1Jvb3QpO1xuICBjb25zdCB1c2FnZXM6IEV4cG9ydFVzYWdlW10gPSBjb2xsZWN0UHVibGljQXBpRXhwb3N1cmVVc2FnZXMoXG4gICAgcHJvZ3JhbSxcbiAgICBzb3VyY2VGaWxlbmFtZSxcbiAgICBzdGF0ZSxcbiAgICByZXBvUm9vdCxcbiAgICB0YXJnZXRTeW1ib2wsXG4gICk7XG5cbiAgZm9yIChjb25zdCBzb3VyY2VGaWxlIG9mIHByb2dyYW0uZ2V0U291cmNlRmlsZXMoKSkge1xuICAgIGlmIChzb3VyY2VGaWxlLmlzRGVjbGFyYXRpb25GaWxlKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBjb25zdW1lckZpbGVuYW1lID0gcGF0aC5yZXNvbHZlKHNvdXJjZUZpbGUuZmlsZU5hbWUpO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRDb25zdW1lckZpbGVuYW1lID1cbiAgICAgIHRvQ29tcGFyYWJsZUFic29sdXRlUGF0aChjb25zdW1lckZpbGVuYW1lKTtcblxuICAgIGlmIChub3JtYWxpemVkQ29uc3VtZXJGaWxlbmFtZSA9PT0gbm9ybWFsaXplZFNvdXJjZUZpbGVuYW1lKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBpc0NvbnN1bWVyVGVzdEZpbGUgPSBpc1Rlc3RGaWxlKFxuICAgICAgY29uc3VtZXJGaWxlbmFtZSxcbiAgICAgIHN0YXRlLFxuICAgICAgbm9ybWFsaXplZFJlcG9Sb290LFxuICAgICk7XG5cbiAgICBjb2xsZWN0Q29uY3JldGVVc2FnZXNGcm9tU291cmNlRmlsZShcbiAgICAgIHNvdXJjZUZpbGUsXG4gICAgICBjaGVja2VyLFxuICAgICAgdGFyZ2V0U3ltYm9sLFxuICAgICAgZXhwb3J0ZWRFbGVtZW50LFxuICAgICAgaXNDb25zdW1lclRlc3RGaWxlLFxuICAgICAgdXNhZ2VzLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gdXNhZ2VzO1xufTtcblxuLyoqXG4gKiBDbGFzc2lmaWVzIG9uZSBleHBvcnRlZCBuYW1lIGJhc2VkIG9uIGNyb3NzLWZpbGUgdXNhZ2VzLlxuICogQHBhcmFtIHVzYWdlcyBDb2xsZWN0ZWQgdXNhZ2VzLlxuICogQHJldHVybnMgQ2xhc3NpZmljYXRpb24gbGFiZWwuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgY2xhc3NpZmljYXRpb24gPSBjbGFzc2lmeUV4cG9ydFVzYWdlKFwiZmVhdHVyZVwiLCB1c2FnZXMpO1xuICogYGBgXG4gKi9cbmNvbnN0IGNsYXNzaWZ5RXhwb3J0VXNhZ2UgPSAoXG4gIHVzYWdlczogRXhwb3J0VXNhZ2VbXSxcbik6IFwicHJvZHVjdGlvblwiIHwgXCJ0ZXN0LW9ubHlcIiB8IFwidW51c2VkXCIgPT4ge1xuICBpZiAodXNhZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBcInVudXNlZFwiO1xuICB9XG5cbiAgZm9yIChjb25zdCB1c2FnZSBvZiB1c2FnZXMpIHtcbiAgICBpZiAoIXVzYWdlLmlzVGVzdEZpbGUpIHtcbiAgICAgIHJldHVybiBcInByb2R1Y3Rpb25cIjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gXCJ0ZXN0LW9ubHlcIjtcbn07XG5cbmV4cG9ydCB7IGNsYXNzaWZ5RXhwb3J0VXNhZ2UsIGNvbGxlY3RDcm9zc0ZpbGVVc2FnZXMgfTtcbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"rule.d.ts","sourceRoot":"","sources":["../../../../src/domain/core/no-useless-delegation/rule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAyOnC,kFAAkF;AAClF,QAAA,MAAM,uBAAuB,EAAE,IAAI,CAAC,UAqCnC,CAAC;AAEF,OAAO,EAAE,uBAAuB,EAAE,CAAC"}
1
+ {"version":3,"file":"rule.d.ts","sourceRoot":"","sources":["../../../../src/domain/core/no-useless-delegation/rule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAmPnC,kFAAkF;AAClF,QAAA,MAAM,uBAAuB,EAAE,IAAI,CAAC,UAqCnC,CAAC;AAEF,OAAO,EAAE,uBAAuB,EAAE,CAAC"}
@@ -114,6 +114,17 @@ const forwardsParameter = (argument, parameter) => {
114
114
  * ```
115
115
  */
116
116
  const isNamedReceiver = (node) => node?.type === "Identifier";
117
+ /**
118
+ * Determines whether a function declares a type predicate return type.
119
+ * @param functionNode Function node to inspect.
120
+ * @returns Whether the function narrows its argument (`value is T` or `asserts value`).
121
+ * @example
122
+ * ```typescript
123
+ * const narrows = declaresTypePredicate(functionNode);
124
+ * ```
125
+ */
126
+ const declaresTypePredicate = (functionNode) => asNode(asNode(functionNode["returnType"])?.["typeAnnotation"])?.type ===
127
+ "TSTypePredicate";
117
128
  /**
118
129
  * Determines whether a function does nothing except directly call another function.
119
130
  * @param functionNode Function node to inspect.
@@ -133,10 +144,7 @@ const isUselessDelegation = (functionNode, functionName) => {
133
144
  parameters === void 0 ||
134
145
  arguments_ === void 0 ||
135
146
  callee === void 0 ||
136
- // A method call is only a replaceable delegation when its receiver is a
137
- // plain named reference (e.g. `service.run`). Expression receivers such
138
- // as type assertions, calls, or literals cannot be inlined at the call
139
- // site, so the wrapper is not useless.
147
+ declaresTypePredicate(functionNode) ||
140
148
  (callee.type === "MemberExpression" &&
141
149
  !isNamedReceiver(asNode(callee["object"]))) ||
142
150
  getIdentifierName(callee) === functionName ||
@@ -200,4 +208,4 @@ const noUselessDelegationRule = {
200
208
  },
201
209
  };
202
210
  export { noUselessDelegationRule };
203
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb21haW4vY29yZS9uby11c2VsZXNzLWRlbGVnYXRpb24vcnVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFzQkE7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLE1BQU0sR0FBRyxDQUFDLEtBQWMsRUFBb0IsRUFBRSxDQUNsRCxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxNQUFNLElBQUksS0FBSztJQUM1RCxDQUFDLENBQUUsS0FBYztJQUNqQixDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFFYjs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sV0FBVyxHQUFHLENBQUMsS0FBYyxFQUFzQixFQUFFLENBQ3pELEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDO0lBQ3BFLENBQUMsQ0FBRSxLQUFnQjtJQUNuQixDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFFYjs7Ozs7Ozs7R0FRRztBQUNILE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxJQUFzQixFQUFzQixFQUFFLENBQ3ZFLElBQUksRUFBRSxJQUFJLEtBQUssWUFBWSxJQUFJLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLFFBQVE7SUFDN0QsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDZCxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFFYjs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxZQUFrQixFQUFvQixFQUFFO0lBQ2hFLElBQUksWUFBWSxDQUFDLEtBQUssS0FBSyxJQUFJLElBQUksWUFBWSxDQUFDLFNBQVMsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUNuRSxPQUFP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LEVBQUUsRUFBRTtRQUNWLElBQUksRUFBRSxZQUFZO0tBQ25CO0NBQ0YsQ0FBQztBQUVGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBSdWxlIH0gZnJvbSBcImVzbGludFwiO1xuXG4vKiogT25lIG5hbWVkIHBhcmFtZXRlciBhbmQgd2hldGhlciBpdCBtdXN0IGJlIHNwcmVhZCBhdCB0aGUgY2FsbCBzaXRlLiAqL1xuaW50ZXJmYWNlIERlbGVnYXRlZFBhcmFtZXRlciB7XG4gIC8qKiBXaGV0aGVyIHRoaXMgcGFyYW1ldGVyIHVzZXMgcmVzdCBzeW50YXguICovXG4gIGlzUmVzdDogYm9vbGVhbjtcbiAgLyoqIFBhcmFtZXRlciBpZGVudGlmaWVyIG5hbWUuICovXG4gIG5hbWU6IHN0cmluZztcbn1cblxuLyoqIE1pbmltYWwgRVNUcmVlIG5vZGUgc2hhcGUgdXNlZCB0byBpbnNwZWN0IHBhc3MtdGhyb3VnaCBmdW5jdGlvbnMuICovXG5pbnRlcmZhY2UgTm9kZSB7XG4gIC8qKiBEeW5hbWljYWxseSByZWFkIGNoaWxkIG5vZGVzIGFuZCBwYXJzZXItc3BlY2lmaWMgcHJvcGVydGllcy4gKi9cbiAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbiAgLyoqIFdoZXRoZXIgdGhlIGZ1bmN0aW9uIGlzIGFzeW5jaHJvbm91cy4gKi9cbiAgYXN5bmM/OiBib29sZWFuO1xuICAvKiogV2hldGhlciB0aGUgZnVuY3Rpb24gaXMgYSBnZW5lcmF0b3IuICovXG4gIGdlbmVyYXRvcj86IGJvb2xlYW47XG4gIC8qKiBFU1RyZWUgZGlzY3JpbWluYXRvci4gKi9cbiAgdHlwZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIGEgbm9kZSB2YWx1ZSB3aGVuIGl0IGlzIGFuIEVTVHJlZSBub2RlLlxuICogQHBhcmFtIHZhbHVlIENhbmRpZGF0ZSBBU1QgdmFsdWUuXG4gKiBAcmV0dXJucyBUaGUgdmFsdWUgYXMgYW4gRVNUcmVlIG5vZGUgd2hlbiBpdCBoYXMgYSB0eXBlIGRpc2NyaW1pbmF0b3IuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3Qgbm9kZSA9IGFzTm9kZSh7IHR5cGU6IFwiSWRlbnRpZmllclwiIH0pO1xuICogYGBgXG4gKi9cbmNvbnN0IGFzTm9kZSA9ICh2YWx1ZTogdW5rbm93bik6IE5vZGUgfCB1bmRlZmluZWQgPT5cbiAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlICE9PSBudWxsICYmIFwidHlwZVwiIGluIHZhbHVlXG4gICAgPyAodmFsdWUgYXMgTm9kZSlcbiAgICA6IHZvaWQgMDtcblxuLyoqXG4gKiBSZXNvbHZlcyBhIG5vZGUgYXJyYXkgd2hpbGUgcmVqZWN0aW5nIG1hbGZvcm1lZCBBU1QgZGF0YS5cbiAqIEBwYXJhbSB2YWx1ZSBDYW5kaWRhdGUgQVNUIHZhbHVlLlxuICogQHJldHVybnMgQVNUIG5vZGVzIHdoZW4gZXZlcnkgYXJyYXkgaXRlbSBpcyBhIG5vZGUuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3Qgbm9kZXMgPSBhc05vZGVBcnJheShbeyB0eXBlOiBcIklkZW50aWZpZXJcIiB9XSk7XG4gKiBgYGBcbiAqL1xuY29uc3QgYXNOb2RlQXJyYXkgPSAodmFsdWU6IHVua25vd24pOiBOb2RlW10gfCB1bmRlZmluZWQgPT5cbiAgQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUuZXZlcnkoKGl0ZW0pID0+IGFzTm9kZShpdGVtKSAhPT0gdm9pZCAwKVxuICAgID8gKHZhbHVlIGFzIE5vZGVbXSlcbiAgICA6IHZvaWQgMDtcblxuLyoqXG4gKiBSZWFkcyBhbiBpZGVudGlmaWVyIG5hbWUgZnJvbSBhIG5vZGUuXG4gKiBAcGFyYW0gbm9kZSBDYW5kaWRhdGUgaWRlbnRpZmllciBub2RlLlxuICogQHJldHVybnMgSWRlbnRpZmllciBuYW1lIHdoZW4gdGhlIG5vZGUgaXMgYW4gaWRlbnRpZmllci5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBuYW1lID0gZ2V0SWRlbnRpZmllck5hbWUoeyBuYW1lOiBcInJ1blwiLCB0eXBlOiBcIklkZW50aWZpZXJcIiB9KTtcbiAqIGBgYFxuICovXG5jb25zdCBnZXRJZGVudGlmaWVyTmFtZSA9IChub2RlOiBOb2RlIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+XG4gIG5vZGU/LnR5cGUgPT09IFwiSWRlbnRpZmllclwiICYmIHR5cGVvZiBub2RlW1wibmFtZVwiXSA9PT0gXCJzdHJpbmdcIlxuICAgID8gbm9kZVtcIm5hbWVcIl1cbiAgICA6IHZvaWQgMDtcblxuLyoqXG4gKiBHZXRzIHRoZSBjYWxsZWQgZXhwcmVzc2lvbiBmcm9tIGEgZnVuY3Rpb24gd2l0aCBvbmUgcmV0dXJuIHN0YXRlbWVudC5cbiAqIEBwYXJhbSBmdW5jdGlvbk5vZGUgRnVuY3Rpb24gbm9kZSB0byBpbnNwZWN0LlxuICogQHJldHVybnMgVGhlIGRpcmVjdGx5IHJldHVybmVkIGNhbGwgZXhwcmVzc2lvbiB3aGVuIHByZXNlbnQuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgY2FsbCA9IGdldERlbGVnYXRlZENhbGwoZnVuY3Rpb25Ob2RlKTtcbiAqIGBgYFxuICovXG5jb25zdCBnZXREZWxlZ2F0ZWRDYWxsID0gKGZ1bmN0aW9uTm9kZTogTm9kZSk6IE5vZGUgfCB1bmRlZmluZWQgPT4ge1xuICBpZiAoZnVuY3Rpb25Ob2RlLmFzeW5jID09PSB0cnVlIHx8IGZ1bmN0aW9uTm9kZS5nZW5lcmF0b3IgPT09IHRydWUpIHtcbiAgICByZXR1cm4gdm9pZCAwO1xuICB9XG5cbiAgY29uc3QgYm9keSA9IGFzTm9kZShmdW5jdGlvbk5vZGVbXCJib2R5XCJdKTtcbiAgaWYgKGJvZHkgPT09IHZvaWQgMCkge1xuICAgIHJldHVybiB2b2lkIDA7XG4gIH1cblxuICBpZiAoYm9keS50eXBlID09PSBcIkNhbGxFeHByZXNzaW9uXCIpIHtcbiAgICByZXR1cm4gYm9keTtcbiAgfVxuXG4gIGNvbnN0IHN0YXRlbWVudHMgPSBhc05vZGVBcnJheShib2R5W1wiYm9keVwiXSk7XG4gIGlmIChib2R5LnR5cGUgIT09IFwiQmxvY2tTdGF0ZW1lbnRcIiB8fCBzdGF0ZW1lbnRzPy5sZW5ndGggIT09IDEpIHtcbiAgICByZXR1cm4gdm9pZCAwO1xuICB9XG5cbiAgY29uc3QgcmV0dXJuU3RhdGVtZW50ID0gc3RhdGVtZW50c1swXTtcbiAgcmV0dXJuIHJldHVyblN0YXRlbWVudD8udHlwZSA9PT0gXCJSZXR1cm5TdGF0ZW1lbnRcIlxuICAgID8gYXNOb2RlKHJldHVyblN0YXRlbWVudFtcImFyZ3VtZW50XCJdKVxuICAgIDogdm9pZCAwO1xufTtcblxuLyoqXG4gKiBHZXRzIHBhcmFtZXRlciBuYW1lcyBhbmQgd2hldGhlciBlYWNoIHBhcmFtZXRlciBpcyBhIHJlc3QgcGFyYW1ldGVyLlxuICogQHBhcmFtIGZ1bmN0aW9uTm9kZSBGdW5jdGlvbiBub2RlIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyBOYW1lZCBwYXJhbWV0ZXIgbWV0YWRhdGEgd2hlbiBldmVyeSBwYXJhbWV0ZXIgaXMgc3VwcG9ydGVkLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHBhcmFtZXRlcnMgPSBnZXRQYXJhbWV0ZXJzKGZ1bmN0aW9uTm9kZSk7XG4gKiBgYGBcbiAqL1xuY29uc3QgZ2V0UGFyYW1ldGVycyA9IChcbiAgZnVuY3Rpb25Ob2RlOiBOb2RlLFxuKTogRGVsZWdhdGVkUGFyYW1ldGVyW10gfCB1bmRlZmluZWQgPT4ge1xuICBjb25zdCBwYXJhbWV0ZXJzID0gYXNOb2RlQXJyYXkoZnVuY3Rpb25Ob2RlW1wicGFyYW1zXCJdKTtcbiAgaWYgKHBhcmFtZXRlcnMgPT09IHZvaWQgMCkge1xuICAgIHJldHVybiB2b2lkIDA7XG4gIH1cblxuICBjb25zdCByZXN1bHQ6IERlbGVnYXRlZFBhcmFtZXRlcltdID0gW107XG4gIGZvciAoY29uc3QgcGFyYW1ldGVyIG9mIHBhcmFtZXRlcnMpIHtcbiAgICBjb25zdCBpc1Jlc3QgPSBwYXJhbWV0ZXIudHlwZSA9PT0gXCJSZXN0RWxlbWVudFwiO1xuICAgIGNvbnN0IG5hbWUgPSBnZXRJZGVudGlmaWVyTmFtZShcbiAgICAgIGlzUmVzdCA/IGFzTm9kZShwYXJhbWV0ZXJbXCJhcmd1bWVudFwiXSkgOiBwYXJhbWV0ZXIsXG4gICAgKTtcbiAgICBpZiAobmFtZSA9PT0gdm9pZCAwKSB7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cblxuICAgIHJlc3VsdC5wdXNoKHsgaXNSZXN0LCBuYW1lIH0pO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIG9uZSBjYWxsIGFyZ3VtZW50IGZvcndhcmRzIGl0cyBjb3JyZXNwb25kaW5nIHBhcmFtZXRlci5cbiAqIEBwYXJhbSBhcmd1bWVudCBDYWxsIGFyZ3VtZW50IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0gcGFyYW1ldGVyIENvcnJlc3BvbmRpbmcgZnVuY3Rpb24gcGFyYW1ldGVyLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgYXJndW1lbnQgZm9yd2FyZHMgdGhlIHBhcmFtZXRlciB3aXRob3V0IGNoYW5nZS5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBmb3J3YXJkcyA9IGZvcndhcmRzUGFyYW1ldGVyKGFyZ3VtZW50LCBwYXJhbWV0ZXIpO1xuICogYGBgXG4gKi9cbmNvbnN0IGZvcndhcmRzUGFyYW1ldGVyID0gKFxuICBhcmd1bWVudDogTm9kZSxcbiAgcGFyYW1ldGVyOiBEZWxlZ2F0ZWRQYXJhbWV0ZXIsXG4pOiBib29sZWFuID0+IHtcbiAgcmV0dXJuIHBhcmFtZXRlci5pc1Jlc3RcbiAgICA/IGFyZ3VtZW50LnR5cGUgPT09IFwiU3ByZWFkRWxlbWVudFwiICYmXG4gICAgICAgIGdldElkZW50aWZpZXJOYW1lKGFzTm9kZShhcmd1bWVudFtcImFyZ3VtZW50XCJdKSkgPT09IHBhcmFtZXRlci5uYW1lXG4gICAgOiBnZXRJZGVudGlmaWVyTmFtZShhcmd1bWVudCkgPT09IHBhcmFtZXRlci5uYW1lO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSBub2RlIGlzIGEgcGxhaW4gbmFtZWQgcmVmZXJlbmNlLlxuICogQHBhcmFtIG5vZGUgQ2FuZGlkYXRlIHJlY2VpdmVyIG5vZGUgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIG5vZGUgaXMgYSBwbGFpbiBpZGVudGlmaWVyIHJlZmVyZW5jZS5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBpc05hbWVkID0gaXNOYW1lZFJlY2VpdmVyKHsgdHlwZTogXCJJZGVudGlmaWVyXCIgfSk7XG4gKiBgYGBcbiAqL1xuY29uc3QgaXNOYW1lZFJlY2VpdmVyID0gKG5vZGU/OiBOb2RlKTogYm9vbGVhbiA9PiBub2RlPy50eXBlID09PSBcIklkZW50aWZpZXJcIjtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSBmdW5jdGlvbiBkb2VzIG5vdGhpbmcgZXhjZXB0IGRpcmVjdGx5IGNhbGwgYW5vdGhlciBmdW5jdGlvbi5cbiAqIEBwYXJhbSBmdW5jdGlvbk5vZGUgRnVuY3Rpb24gbm9kZSB0byBpbnNwZWN0LlxuICogQHBhcmFtIGZ1bmN0aW9uTmFtZSBEZWNsYXJlZCB3cmFwcGVyIGZ1bmN0aW9uIG5hbWUuXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBmdW5jdGlvbiBpcyBhbiBleGFjdCBzeW5jaHJvbm91cyBkZWxlZ2F0aW9uLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGlzRGVsZWdhdGlvbiA9IGlzVXNlbGVzc0RlbGVnYXRpb24oZnVuY3Rpb25Ob2RlLCBcInJ1blwiKTtcbiAqIGBgYFxuICovXG5jb25zdCBpc1VzZWxlc3NEZWxlZ2F0aW9uID0gKFxuICBmdW5jdGlvbk5vZGU6IE5vZGUsXG4gIGZ1bmN0aW9uTmFtZTogc3RyaW5nLFxuKTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IGNhbGwgPSBnZXREZWxlZ2F0ZWRDYWxsKGZ1bmN0aW9uTm9kZSk7XG4gIGNvbnN0IHBhcmFtZXRlcnMgPSBnZXRQYXJhbWV0ZXJzKGZ1bmN0aW9uTm9kZSk7XG4gIGNvbnN0IGFyZ3VtZW50c18gPSBhc05vZGVBcnJheShjYWxsPy5bXCJhcmd1bWVudHNcIl0pO1xuICBjb25zdCBjYWxsZWUgPSBhc05vZGUoY2FsbD8uW1wiY2FsbGVlXCJdKTtcblxuICBpZiAoXG4gICAgY2FsbD8udHlwZSAhPT0gXCJDYWxsRXhwcmVzc2lvblwiIHx8XG4gICAgcGFyYW1ldGVycyA9PT0gdm9pZCAwIHx8XG4gICAgYXJndW1lbnRzXyA9PT0gdm9pZCAwIHx8XG4gICAgY2FsbGVlID09PSB2b2lkIDAgfHxcbiAgICAvLyBBIG1ldGhvZCBjYWxsIGlzIG9ubHkgYSByZXBsYWNlYWJsZSBkZWxlZ2F0aW9uIHdoZW4gaXRzIHJlY2VpdmVyIGlzIGFcbiAgICAvLyBwbGFpbiBuYW1lZCByZWZlcmVuY2UgKGUuZy4gYHNlcnZpY2UucnVuYCkuIEV4cHJlc3Npb24gcmVjZWl2ZXJzIHN1Y2hcbiAgICAvLyBhcyB0eXBlIGFzc2VydGlvbnMsIGNhbGxzLCBvciBsaXRlcmFscyBjYW5ub3QgYmUgaW5saW5lZCBhdCB0aGUgY2FsbFxuICAgIC8vIHNpdGUsIHNvIHRoZSB3cmFwcGVyIGlzIG5vdCB1c2VsZXNzLlxuICAgIChjYWxsZWUudHlwZSA9PT0gXCJNZW1iZXJFeHByZXNzaW9uXCIgJiZcbiAgICAgICFpc05hbWVkUmVjZWl2ZXIoYXNOb2RlKGNhbGxlZVtcIm9iamVjdFwiXSkpKSB8fFxuICAgIGdldElkZW50aWZpZXJOYW1lKGNhbGxlZSkgPT09IGZ1bmN0aW9uTmFtZSB8fFxuICAgIGFyZ3VtZW50c18ubGVuZ3RoICE9PSBwYXJhbWV0ZXJzLmxlbmd0aFxuICApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gYXJndW1lbnRzXy5ldmVyeSgoYXJndW1lbnQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFyYW1ldGVyID0gcGFyYW1ldGVyc1tpbmRleF07XG4gICAgcmV0dXJuIHBhcmFtZXRlciAhPT0gdm9pZCAwICYmIGZvcndhcmRzUGFyYW1ldGVyKGFyZ3VtZW50LCBwYXJhbWV0ZXIpO1xuICB9KTtcbn07XG5cbi8qKlxuICogUmVwb3J0cyBhIGZ1bmN0aW9uIHdoZW4gaXQgaXMgYSBuby1vcCBkZWxlZ2F0aW9uLlxuICogQHBhcmFtIGNvbnRleHQgUnVsZSBleGVjdXRpb24gY29udGV4dC5cbiAqIEBwYXJhbSBmdW5jdGlvbk5vZGUgRnVuY3Rpb24gbm9kZSB0byBpbnNwZWN0LlxuICogQHBhcmFtIG5hbWVOb2RlIERlY2xhcmVkIHdyYXBwZXIgbmFtZSBub2RlLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHJlcG9ydElmVXNlbGVzc0RlbGVnYXRpb24oY29udGV4dCwgZnVuY3Rpb25Ob2RlLCBuYW1lTm9kZSk7XG4gKiBgYGBcbiAqL1xuY29uc3QgcmVwb3J0SWZVc2VsZXNzRGVsZWdhdGlvbiA9IChcbiAgY29udGV4dDogUnVsZS5SdWxlQ29udGV4dCxcbiAgZnVuY3Rpb25Ob2RlOiBOb2RlLFxuICBuYW1lTm9kZTogTm9kZSB8IHVuZGVmaW5lZCxcbik6IHZvaWQgPT4ge1xuICBjb25zdCBmdW5jdGlvbk5hbWUgPSBnZXRJZGVudGlmaWVyTmFtZShuYW1lTm9kZSk7XG4gIGlmIChcbiAgICBmdW5jdGlvbk5hbWUgPT09IHZvaWQgMCB8fFxuICAgICFpc1VzZWxlc3NEZWxlZ2F0aW9uKGZ1bmN0aW9uTm9kZSwgZnVuY3Rpb25OYW1lKVxuICApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb250ZXh0LnJlcG9ydCh7XG4gICAgbWVzc2FnZUlkOiBcInVzZWxlc3NEZWxlZ2F0aW9uXCIsXG4gICAgbm9kZTogbmFtZU5vZGUgYXMgdW5rbm93biBhcyBSdWxlLk5vZGUsXG4gIH0pO1xufTtcblxuLyoqIEVTTGludCBydWxlIGltcGxlbWVudGF0aW9uIGZvciBmdW5jdGlvbnMgdGhhdCBvbmx5IGZvcndhcmQgdGhlaXIgYXJndW1lbnRzLiAqL1xuY29uc3Qgbm9Vc2VsZXNzRGVsZWdhdGlvblJ1bGU6IFJ1bGUuUnVsZU1vZHVsZSA9IHtcbiAgY3JlYXRlOiAoY29udGV4dDogUnVsZS5SdWxlQ29udGV4dCk6IFJ1bGUuUnVsZUxpc3RlbmVyID0+ICh7XG4gICAgRnVuY3Rpb25EZWNsYXJhdGlvbjogKG5vZGU6IFJ1bGUuTm9kZSk6IHZvaWQgPT4ge1xuICAgICAgY29uc3QgZnVuY3Rpb25Ob2RlID0gbm9kZSBhcyB1bmtub3duIGFzIE5vZGU7XG4gICAgICByZXBvcnRJZlVzZWxlc3NEZWxlZ2F0aW9uKFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICBmdW5jdGlvbk5vZGUsXG4gICAgICAgIGFzTm9kZShmdW5jdGlvbk5vZGVbXCJpZFwiXSksXG4gICAgICApO1xuICAgIH0sXG4gICAgVmFyaWFibGVEZWNsYXJhdG9yOiAobm9kZTogUnVsZS5Ob2RlKTogdm9pZCA9PiB7XG4gICAgICBjb25zdCBkZWNsYXJhdG9yID0gbm9kZSBhcyB1bmtub3duIGFzIE5vZGU7XG4gICAgICBjb25zdCBpbml0aWFsaXplciA9IGFzTm9kZShkZWNsYXJhdG9yW1wiaW5pdFwiXSk7XG4gICAgICBpZiAoXG4gICAgICAgIGluaXRpYWxpemVyPy50eXBlICE9PSBcIkFycm93RnVuY3Rpb25FeHByZXNzaW9uXCIgJiZcbiAgICAgICAgaW5pdGlhbGl6ZXI/LnR5cGUgIT09IFwiRnVuY3Rpb25FeHByZXNzaW9uXCJcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJlcG9ydElmVXNlbGVzc0RlbGVnYXRpb24oY29udGV4dCwgaW5pdGlhbGl6ZXIsIGFzTm9kZShkZWNsYXJhdG9yW1wiaWRcIl0pKTtcbiAgICB9LFxuICB9KSxcbiAgbWV0YToge1xuICAgIGRvY3M6IHtcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkRpc2FsbG93IG5hbWVkIGZ1bmN0aW9ucyB0aGF0IG9ubHkgZGVsZWdhdGUgZGlyZWN0bHkgdG8gYW5vdGhlciBjYWxsLlwiLFxuICAgICAgcmVjb21tZW5kZWQ6IGZhbHNlLFxuICAgICAgdXJsOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9wYXJsb3RpL2VzbGludC1wbHVnaW4vYmxvYi9tYWluL2RvY3MvcnVsZXMvbm8tdXNlbGVzcy1kZWxlZ2F0aW9uLm1kXCIsXG4gICAgfSxcbiAgICBtZXNzYWdlczoge1xuICAgICAgdXNlbGVzc0RlbGVnYXRpb246XG4gICAgICAgIFwiVGhpcyBmdW5jdGlvbiBvbmx5IGRlbGVnYXRlcyB0byBhbm90aGVyIGNhbGw7IHJlbW92ZSB0aGUgd3JhcHBlciBvciBjYWxsIHRoZSB0YXJnZXQgZGlyZWN0bHkuXCIsXG4gICAgfSxcbiAgICBzY2hlbWE6IFtdLFxuICAgIHR5cGU6IFwic3VnZ2VzdGlvblwiLFxuICB9LFxufTtcblxuZXhwb3J0IHsgbm9Vc2VsZXNzRGVsZWdhdGlvblJ1bGUgfTtcbiJdfQ==
211
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb21haW4vY29yZS9uby11c2VsZXNzLWRlbGVnYXRpb24vcnVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFzQkE7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLE1BQU0sR0FBRyxDQUFDLEtBQWMsRUFBb0IsRUFBRSxDQUNsRCxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxNQUFNLElBQUksS0FBSztJQUM1RCxDQUFDLENBQUUsS0FBYztJQUNqQixDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFFYjs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sV0FBVyxHQUFHLENBQUMsS0FBYyxFQUFzQixFQUFFLENBQ3pELEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDO0lBQ3BFLENBQUMsQ0FBRSxLQUFnQjtJQUNuQixDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFFYjs7Ozs7Ozs7R0FRRztBQUNILE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxJQUFzQixFQUFzQixFQUFFLENBQ3ZFLElBQUksRUFBRSxJQUFJLEtBQUssWUFBWSxJQUFJLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLFFBQVE7SUFDN0QsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDZCxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFFYjs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxZQUFrQixFQUFvQixFQUFFO0lBQ2hFLElBQUksWUFBWSxDQUFDLEtBQUssS0FBSyxJQUFJLElBQUksWUFBWSxDQUFDLFNBQVMsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUNuRSxPQUFP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RTtRQUNKLElBQUksRUFBRTtZQUNKLFdBQVcsRUFDVCx1RUFBdUU7WUFDekUsV0FBVyxFQUFFLEtBQUs7WUFDbEIsR0FBRyxFQUFFLHdGQUF3RjtTQUM5RjtRQUNELFFBQVEsRUFBRTtZQUNSLGlCQUFpQixFQUNmLCtGQUErRjtTQUNsRztRQUNELE1BQU0sRUFBRSxFQUFFO1FBQ1YsSUFBSSxFQUFFLFlBQVk7S0FDbkI7Q0FDRixDQUFDO0FBRUYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFJ1bGUgfSBmcm9tIFwiZXNsaW50XCI7XG5cbi8qKiBPbmUgbmFtZWQgcGFyYW1ldGVyIGFuZCB3aGV0aGVyIGl0IG11c3QgYmUgc3ByZWFkIGF0IHRoZSBjYWxsIHNpdGUuICovXG5pbnRlcmZhY2UgRGVsZWdhdGVkUGFyYW1ldGVyIHtcbiAgLyoqIFdoZXRoZXIgdGhpcyBwYXJhbWV0ZXIgdXNlcyByZXN0IHN5bnRheC4gKi9cbiAgaXNSZXN0OiBib29sZWFuO1xuICAvKiogUGFyYW1ldGVyIGlkZW50aWZpZXIgbmFtZS4gKi9cbiAgbmFtZTogc3RyaW5nO1xufVxuXG4vKiogTWluaW1hbCBFU1RyZWUgbm9kZSBzaGFwZSB1c2VkIHRvIGluc3BlY3QgcGFzcy10aHJvdWdoIGZ1bmN0aW9ucy4gKi9cbmludGVyZmFjZSBOb2RlIHtcbiAgLyoqIER5bmFtaWNhbGx5IHJlYWQgY2hpbGQgbm9kZXMgYW5kIHBhcnNlci1zcGVjaWZpYyBwcm9wZXJ0aWVzLiAqL1xuICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xuICAvKiogV2hldGhlciB0aGUgZnVuY3Rpb24gaXMgYXN5bmNocm9ub3VzLiAqL1xuICBhc3luYz86IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIHRoZSBmdW5jdGlvbiBpcyBhIGdlbmVyYXRvci4gKi9cbiAgZ2VuZXJhdG9yPzogYm9vbGVhbjtcbiAgLyoqIEVTVHJlZSBkaXNjcmltaW5hdG9yLiAqL1xuICB0eXBlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgYSBub2RlIHZhbHVlIHdoZW4gaXQgaXMgYW4gRVNUcmVlIG5vZGUuXG4gKiBAcGFyYW0gdmFsdWUgQ2FuZGlkYXRlIEFTVCB2YWx1ZS5cbiAqIEByZXR1cm5zIFRoZSB2YWx1ZSBhcyBhbiBFU1RyZWUgbm9kZSB3aGVuIGl0IGhhcyBhIHR5cGUgZGlzY3JpbWluYXRvci5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBub2RlID0gYXNOb2RlKHsgdHlwZTogXCJJZGVudGlmaWVyXCIgfSk7XG4gKiBgYGBcbiAqL1xuY29uc3QgYXNOb2RlID0gKHZhbHVlOiB1bmtub3duKTogTm9kZSB8IHVuZGVmaW5lZCA9PlxuICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT09IG51bGwgJiYgXCJ0eXBlXCIgaW4gdmFsdWVcbiAgICA/ICh2YWx1ZSBhcyBOb2RlKVxuICAgIDogdm9pZCAwO1xuXG4vKipcbiAqIFJlc29sdmVzIGEgbm9kZSBhcnJheSB3aGlsZSByZWplY3RpbmcgbWFsZm9ybWVkIEFTVCBkYXRhLlxuICogQHBhcmFtIHZhbHVlIENhbmRpZGF0ZSBBU1QgdmFsdWUuXG4gKiBAcmV0dXJucyBBU1Qgbm9kZXMgd2hlbiBldmVyeSBhcnJheSBpdGVtIGlzIGEgbm9kZS5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBub2RlcyA9IGFzTm9kZUFycmF5KFt7IHR5cGU6IFwiSWRlbnRpZmllclwiIH1dKTtcbiAqIGBgYFxuICovXG5jb25zdCBhc05vZGVBcnJheSA9ICh2YWx1ZTogdW5rbm93bik6IE5vZGVbXSB8IHVuZGVmaW5lZCA9PlxuICBBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5ldmVyeSgoaXRlbSkgPT4gYXNOb2RlKGl0ZW0pICE9PSB2b2lkIDApXG4gICAgPyAodmFsdWUgYXMgTm9kZVtdKVxuICAgIDogdm9pZCAwO1xuXG4vKipcbiAqIFJlYWRzIGFuIGlkZW50aWZpZXIgbmFtZSBmcm9tIGEgbm9kZS5cbiAqIEBwYXJhbSBub2RlIENhbmRpZGF0ZSBpZGVudGlmaWVyIG5vZGUuXG4gKiBAcmV0dXJucyBJZGVudGlmaWVyIG5hbWUgd2hlbiB0aGUgbm9kZSBpcyBhbiBpZGVudGlmaWVyLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IG5hbWUgPSBnZXRJZGVudGlmaWVyTmFtZSh7IG5hbWU6IFwicnVuXCIsIHR5cGU6IFwiSWRlbnRpZmllclwiIH0pO1xuICogYGBgXG4gKi9cbmNvbnN0IGdldElkZW50aWZpZXJOYW1lID0gKG5vZGU6IE5vZGUgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT5cbiAgbm9kZT8udHlwZSA9PT0gXCJJZGVudGlmaWVyXCIgJiYgdHlwZW9mIG5vZGVbXCJuYW1lXCJdID09PSBcInN0cmluZ1wiXG4gICAgPyBub2RlW1wibmFtZVwiXVxuICAgIDogdm9pZCAwO1xuXG4vKipcbiAqIEdldHMgdGhlIGNhbGxlZCBleHByZXNzaW9uIGZyb20gYSBmdW5jdGlvbiB3aXRoIG9uZSByZXR1cm4gc3RhdGVtZW50LlxuICogQHBhcmFtIGZ1bmN0aW9uTm9kZSBGdW5jdGlvbiBub2RlIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyBUaGUgZGlyZWN0bHkgcmV0dXJuZWQgY2FsbCBleHByZXNzaW9uIHdoZW4gcHJlc2VudC5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBjYWxsID0gZ2V0RGVsZWdhdGVkQ2FsbChmdW5jdGlvbk5vZGUpO1xuICogYGBgXG4gKi9cbmNvbnN0IGdldERlbGVnYXRlZENhbGwgPSAoZnVuY3Rpb25Ob2RlOiBOb2RlKTogTm9kZSB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmIChmdW5jdGlvbk5vZGUuYXN5bmMgPT09IHRydWUgfHwgZnVuY3Rpb25Ob2RlLmdlbmVyYXRvciA9PT0gdHJ1ZSkge1xuICAgIHJldHVybiB2b2lkIDA7XG4gIH1cblxuICBjb25zdCBib2R5ID0gYXNOb2RlKGZ1bmN0aW9uTm9kZVtcImJvZHlcIl0pO1xuICBpZiAoYm9keSA9PT0gdm9pZCAwKSB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfVxuXG4gIGlmIChib2R5LnR5cGUgPT09IFwiQ2FsbEV4cHJlc3Npb25cIikge1xuICAgIHJldHVybiBib2R5O1xuICB9XG5cbiAgY29uc3Qgc3RhdGVtZW50cyA9IGFzTm9kZUFycmF5KGJvZHlbXCJib2R5XCJdKTtcbiAgaWYgKGJvZHkudHlwZSAhPT0gXCJCbG9ja1N0YXRlbWVudFwiIHx8IHN0YXRlbWVudHM/Lmxlbmd0aCAhPT0gMSkge1xuICAgIHJldHVybiB2b2lkIDA7XG4gIH1cblxuICBjb25zdCByZXR1cm5TdGF0ZW1lbnQgPSBzdGF0ZW1lbnRzWzBdO1xuICByZXR1cm4gcmV0dXJuU3RhdGVtZW50Py50eXBlID09PSBcIlJldHVyblN0YXRlbWVudFwiXG4gICAgPyBhc05vZGUocmV0dXJuU3RhdGVtZW50W1wiYXJndW1lbnRcIl0pXG4gICAgOiB2b2lkIDA7XG59O1xuXG4vKipcbiAqIEdldHMgcGFyYW1ldGVyIG5hbWVzIGFuZCB3aGV0aGVyIGVhY2ggcGFyYW1ldGVyIGlzIGEgcmVzdCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gZnVuY3Rpb25Ob2RlIEZ1bmN0aW9uIG5vZGUgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIE5hbWVkIHBhcmFtZXRlciBtZXRhZGF0YSB3aGVuIGV2ZXJ5IHBhcmFtZXRlciBpcyBzdXBwb3J0ZWQuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgcGFyYW1ldGVycyA9IGdldFBhcmFtZXRlcnMoZnVuY3Rpb25Ob2RlKTtcbiAqIGBgYFxuICovXG5jb25zdCBnZXRQYXJhbWV0ZXJzID0gKFxuICBmdW5jdGlvbk5vZGU6IE5vZGUsXG4pOiBEZWxlZ2F0ZWRQYXJhbWV0ZXJbXSB8IHVuZGVmaW5lZCA9PiB7XG4gIGNvbnN0IHBhcmFtZXRlcnMgPSBhc05vZGVBcnJheShmdW5jdGlvbk5vZGVbXCJwYXJhbXNcIl0pO1xuICBpZiAocGFyYW1ldGVycyA9PT0gdm9pZCAwKSB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdDogRGVsZWdhdGVkUGFyYW1ldGVyW10gPSBbXTtcbiAgZm9yIChjb25zdCBwYXJhbWV0ZXIgb2YgcGFyYW1ldGVycykge1xuICAgIGNvbnN0IGlzUmVzdCA9IHBhcmFtZXRlci50eXBlID09PSBcIlJlc3RFbGVtZW50XCI7XG4gICAgY29uc3QgbmFtZSA9IGdldElkZW50aWZpZXJOYW1lKFxuICAgICAgaXNSZXN0ID8gYXNOb2RlKHBhcmFtZXRlcltcImFyZ3VtZW50XCJdKSA6IHBhcmFtZXRlcixcbiAgICApO1xuICAgIGlmIChuYW1lID09PSB2b2lkIDApIHtcbiAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgfVxuXG4gICAgcmVzdWx0LnB1c2goeyBpc1Jlc3QsIG5hbWUgfSk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgb25lIGNhbGwgYXJndW1lbnQgZm9yd2FyZHMgaXRzIGNvcnJlc3BvbmRpbmcgcGFyYW1ldGVyLlxuICogQHBhcmFtIGFyZ3VtZW50IENhbGwgYXJndW1lbnQgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSBwYXJhbWV0ZXIgQ29ycmVzcG9uZGluZyBmdW5jdGlvbiBwYXJhbWV0ZXIuXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBhcmd1bWVudCBmb3J3YXJkcyB0aGUgcGFyYW1ldGVyIHdpdGhvdXQgY2hhbmdlLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGZvcndhcmRzID0gZm9yd2FyZHNQYXJhbWV0ZXIoYXJndW1lbnQsIHBhcmFtZXRlcik7XG4gKiBgYGBcbiAqL1xuY29uc3QgZm9yd2FyZHNQYXJhbWV0ZXIgPSAoXG4gIGFyZ3VtZW50OiBOb2RlLFxuICBwYXJhbWV0ZXI6IERlbGVnYXRlZFBhcmFtZXRlcixcbik6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gcGFyYW1ldGVyLmlzUmVzdFxuICAgID8gYXJndW1lbnQudHlwZSA9PT0gXCJTcHJlYWRFbGVtZW50XCIgJiZcbiAgICAgICAgZ2V0SWRlbnRpZmllck5hbWUoYXNOb2RlKGFyZ3VtZW50W1wiYXJndW1lbnRcIl0pKSA9PT0gcGFyYW1ldGVyLm5hbWVcbiAgICA6IGdldElkZW50aWZpZXJOYW1lKGFyZ3VtZW50KSA9PT0gcGFyYW1ldGVyLm5hbWU7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciBhIG5vZGUgaXMgYSBwbGFpbiBuYW1lZCByZWZlcmVuY2UuXG4gKiBAcGFyYW0gbm9kZSBDYW5kaWRhdGUgcmVjZWl2ZXIgbm9kZSB0byBpbnNwZWN0LlxuICogQHJldHVybnMgV2hldGhlciB0aGUgbm9kZSBpcyBhIHBsYWluIGlkZW50aWZpZXIgcmVmZXJlbmNlLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGlzTmFtZWQgPSBpc05hbWVkUmVjZWl2ZXIoeyB0eXBlOiBcIklkZW50aWZpZXJcIiB9KTtcbiAqIGBgYFxuICovXG5jb25zdCBpc05hbWVkUmVjZWl2ZXIgPSAobm9kZT86IE5vZGUpOiBib29sZWFuID0+IG5vZGU/LnR5cGUgPT09IFwiSWRlbnRpZmllclwiO1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciBhIGZ1bmN0aW9uIGRlY2xhcmVzIGEgdHlwZSBwcmVkaWNhdGUgcmV0dXJuIHR5cGUuXG4gKiBAcGFyYW0gZnVuY3Rpb25Ob2RlIEZ1bmN0aW9uIG5vZGUgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGZ1bmN0aW9uIG5hcnJvd3MgaXRzIGFyZ3VtZW50IChgdmFsdWUgaXMgVGAgb3IgYGFzc2VydHMgdmFsdWVgKS5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBuYXJyb3dzID0gZGVjbGFyZXNUeXBlUHJlZGljYXRlKGZ1bmN0aW9uTm9kZSk7XG4gKiBgYGBcbiAqL1xuY29uc3QgZGVjbGFyZXNUeXBlUHJlZGljYXRlID0gKGZ1bmN0aW9uTm9kZTogTm9kZSk6IGJvb2xlYW4gPT5cbiAgYXNOb2RlKGFzTm9kZShmdW5jdGlvbk5vZGVbXCJyZXR1cm5UeXBlXCJdKT8uW1widHlwZUFubm90YXRpb25cIl0pPy50eXBlID09PVxuICBcIlRTVHlwZVByZWRpY2F0ZVwiO1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciBhIGZ1bmN0aW9uIGRvZXMgbm90aGluZyBleGNlcHQgZGlyZWN0bHkgY2FsbCBhbm90aGVyIGZ1bmN0aW9uLlxuICogQHBhcmFtIGZ1bmN0aW9uTm9kZSBGdW5jdGlvbiBub2RlIHRvIGluc3BlY3QuXG4gKiBAcGFyYW0gZnVuY3Rpb25OYW1lIERlY2xhcmVkIHdyYXBwZXIgZnVuY3Rpb24gbmFtZS5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGZ1bmN0aW9uIGlzIGFuIGV4YWN0IHN5bmNocm9ub3VzIGRlbGVnYXRpb24uXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgaXNEZWxlZ2F0aW9uID0gaXNVc2VsZXNzRGVsZWdhdGlvbihmdW5jdGlvbk5vZGUsIFwicnVuXCIpO1xuICogYGBgXG4gKi9cbmNvbnN0IGlzVXNlbGVzc0RlbGVnYXRpb24gPSAoXG4gIGZ1bmN0aW9uTm9kZTogTm9kZSxcbiAgZnVuY3Rpb25OYW1lOiBzdHJpbmcsXG4pOiBib29sZWFuID0+IHtcbiAgY29uc3QgY2FsbCA9IGdldERlbGVnYXRlZENhbGwoZnVuY3Rpb25Ob2RlKTtcbiAgY29uc3QgcGFyYW1ldGVycyA9IGdldFBhcmFtZXRlcnMoZnVuY3Rpb25Ob2RlKTtcbiAgY29uc3QgYXJndW1lbnRzXyA9IGFzTm9kZUFycmF5KGNhbGw/LltcImFyZ3VtZW50c1wiXSk7XG4gIGNvbnN0IGNhbGxlZSA9IGFzTm9kZShjYWxsPy5bXCJjYWxsZWVcIl0pO1xuXG4gIGlmIChcbiAgICBjYWxsPy50eXBlICE9PSBcIkNhbGxFeHByZXNzaW9uXCIgfHxcbiAgICBwYXJhbWV0ZXJzID09PSB2b2lkIDAgfHxcbiAgICBhcmd1bWVudHNfID09PSB2b2lkIDAgfHxcbiAgICBjYWxsZWUgPT09IHZvaWQgMCB8fFxuICAgIGRlY2xhcmVzVHlwZVByZWRpY2F0ZShmdW5jdGlvbk5vZGUpIHx8XG4gICAgKGNhbGxlZS50eXBlID09PSBcIk1lbWJlckV4cHJlc3Npb25cIiAmJlxuICAgICAgIWlzTmFtZWRSZWNlaXZlcihhc05vZGUoY2FsbGVlW1wib2JqZWN0XCJdKSkpIHx8XG4gICAgZ2V0SWRlbnRpZmllck5hbWUoY2FsbGVlKSA9PT0gZnVuY3Rpb25OYW1lIHx8XG4gICAgYXJndW1lbnRzXy5sZW5ndGggIT09IHBhcmFtZXRlcnMubGVuZ3RoXG4gICkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBhcmd1bWVudHNfLmV2ZXJ5KChhcmd1bWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXIgPSBwYXJhbWV0ZXJzW2luZGV4XTtcbiAgICByZXR1cm4gcGFyYW1ldGVyICE9PSB2b2lkIDAgJiYgZm9yd2FyZHNQYXJhbWV0ZXIoYXJndW1lbnQsIHBhcmFtZXRlcik7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBSZXBvcnRzIGEgZnVuY3Rpb24gd2hlbiBpdCBpcyBhIG5vLW9wIGRlbGVnYXRpb24uXG4gKiBAcGFyYW0gY29udGV4dCBSdWxlIGV4ZWN1dGlvbiBjb250ZXh0LlxuICogQHBhcmFtIGZ1bmN0aW9uTm9kZSBGdW5jdGlvbiBub2RlIHRvIGluc3BlY3QuXG4gKiBAcGFyYW0gbmFtZU5vZGUgRGVjbGFyZWQgd3JhcHBlciBuYW1lIG5vZGUuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogcmVwb3J0SWZVc2VsZXNzRGVsZWdhdGlvbihjb250ZXh0LCBmdW5jdGlvbk5vZGUsIG5hbWVOb2RlKTtcbiAqIGBgYFxuICovXG5jb25zdCByZXBvcnRJZlVzZWxlc3NEZWxlZ2F0aW9uID0gKFxuICBjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0LFxuICBmdW5jdGlvbk5vZGU6IE5vZGUsXG4gIG5hbWVOb2RlOiBOb2RlIHwgdW5kZWZpbmVkLFxuKTogdm9pZCA9PiB7XG4gIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IGdldElkZW50aWZpZXJOYW1lKG5hbWVOb2RlKTtcbiAgaWYgKFxuICAgIGZ1bmN0aW9uTmFtZSA9PT0gdm9pZCAwIHx8XG4gICAgIWlzVXNlbGVzc0RlbGVnYXRpb24oZnVuY3Rpb25Ob2RlLCBmdW5jdGlvbk5hbWUpXG4gICkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnRleHQucmVwb3J0KHtcbiAgICBtZXNzYWdlSWQ6IFwidXNlbGVzc0RlbGVnYXRpb25cIixcbiAgICBub2RlOiBuYW1lTm9kZSBhcyB1bmtub3duIGFzIFJ1bGUuTm9kZSxcbiAgfSk7XG59O1xuXG4vKiogRVNMaW50IHJ1bGUgaW1wbGVtZW50YXRpb24gZm9yIGZ1bmN0aW9ucyB0aGF0IG9ubHkgZm9yd2FyZCB0aGVpciBhcmd1bWVudHMuICovXG5jb25zdCBub1VzZWxlc3NEZWxlZ2F0aW9uUnVsZTogUnVsZS5SdWxlTW9kdWxlID0ge1xuICBjcmVhdGU6IChjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0KTogUnVsZS5SdWxlTGlzdGVuZXIgPT4gKHtcbiAgICBGdW5jdGlvbkRlY2xhcmF0aW9uOiAobm9kZTogUnVsZS5Ob2RlKTogdm9pZCA9PiB7XG4gICAgICBjb25zdCBmdW5jdGlvbk5vZGUgPSBub2RlIGFzIHVua25vd24gYXMgTm9kZTtcbiAgICAgIHJlcG9ydElmVXNlbGVzc0RlbGVnYXRpb24oXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGZ1bmN0aW9uTm9kZSxcbiAgICAgICAgYXNOb2RlKGZ1bmN0aW9uTm9kZVtcImlkXCJdKSxcbiAgICAgICk7XG4gICAgfSxcbiAgICBWYXJpYWJsZURlY2xhcmF0b3I6IChub2RlOiBSdWxlLk5vZGUpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IGRlY2xhcmF0b3IgPSBub2RlIGFzIHVua25vd24gYXMgTm9kZTtcbiAgICAgIGNvbnN0IGluaXRpYWxpemVyID0gYXNOb2RlKGRlY2xhcmF0b3JbXCJpbml0XCJdKTtcbiAgICAgIGlmIChcbiAgICAgICAgaW5pdGlhbGl6ZXI/LnR5cGUgIT09IFwiQXJyb3dGdW5jdGlvbkV4cHJlc3Npb25cIiAmJlxuICAgICAgICBpbml0aWFsaXplcj8udHlwZSAhPT0gXCJGdW5jdGlvbkV4cHJlc3Npb25cIlxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmVwb3J0SWZVc2VsZXNzRGVsZWdhdGlvbihjb250ZXh0LCBpbml0aWFsaXplciwgYXNOb2RlKGRlY2xhcmF0b3JbXCJpZFwiXSkpO1xuICAgIH0sXG4gIH0pLFxuICBtZXRhOiB7XG4gICAgZG9jczoge1xuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiRGlzYWxsb3cgbmFtZWQgZnVuY3Rpb25zIHRoYXQgb25seSBkZWxlZ2F0ZSBkaXJlY3RseSB0byBhbm90aGVyIGNhbGwuXCIsXG4gICAgICByZWNvbW1lbmRlZDogZmFsc2UsXG4gICAgICB1cmw6IFwiaHR0cHM6Ly9naXRodWIuY29tL3BhcmxvdGkvZXNsaW50LXBsdWdpbi9ibG9iL21haW4vZG9jcy9ydWxlcy9uby11c2VsZXNzLWRlbGVnYXRpb24ubWRcIixcbiAgICB9LFxuICAgIG1lc3NhZ2VzOiB7XG4gICAgICB1c2VsZXNzRGVsZWdhdGlvbjpcbiAgICAgICAgXCJUaGlzIGZ1bmN0aW9uIG9ubHkgZGVsZWdhdGVzIHRvIGFub3RoZXIgY2FsbDsgcmVtb3ZlIHRoZSB3cmFwcGVyIG9yIGNhbGwgdGhlIHRhcmdldCBkaXJlY3RseS5cIixcbiAgICB9LFxuICAgIHNjaGVtYTogW10sXG4gICAgdHlwZTogXCJzdWdnZXN0aW9uXCIsXG4gIH0sXG59O1xuXG5leHBvcnQgeyBub1VzZWxlc3NEZWxlZ2F0aW9uUnVsZSB9O1xuIl19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codeperfect/eslint-plugin",
3
- "version": "3.2.1",
3
+ "version": "3.3.0",
4
4
  "description": "Custom ESLint rules for TypeScript repositories",
5
5
  "license": "MIT",
6
6
  "repository": "github:parloti/eslint-plugin",
@@ -30,6 +30,7 @@
30
30
  "scripts": {
31
31
  "\n# ---------------- GENERAL ---------------- #": "",
32
32
  "prepare": "patch-package && husky",
33
+ "nuke": "npx --yes tsx scripts/nuke.ts",
33
34
  "\n# ------------------ SCM ------------------ #": "",
34
35
  "commit": "npx --yes git-cz",
35
36
  "\n# ---------------- BUILDING ---------------- #": "",
@@ -80,14 +81,14 @@
80
81
  "nodejs"
81
82
  ],
82
83
  "dependencies": {
83
- "@typescript-eslint/utils": "^8.72.0",
84
- "minimatch": "^10.2.6"
84
+ "@typescript-eslint/utils": "^8.72.1",
85
+ "minimatch": "^11.0.3"
85
86
  },
86
87
  "devDependencies": {
87
- "@angular/compiler": "^22.2.3",
88
+ "@angular/compiler": "^22.2.4",
88
89
  "@codeperfect/commitlint-config-emoji": "^1.1.0",
89
- "@codeperfect/eslint-config": "^2.3.0",
90
- "@codeperfect/task-runner": "^1.1.0",
90
+ "@codeperfect/eslint-config": "^2.4.0",
91
+ "@codeperfect/task-runner": "^1.2.0",
91
92
  "@commitlint/cz-commitlint": "^21.2.4",
92
93
  "@eslint-community/eslint-plugin-eslint-comments": "^4.8.1",
93
94
  "@eslint/js": "^10.0.1",
@@ -98,27 +99,27 @@
98
99
  "@stryker-mutator/vitest-runner": "^10.1.1",
99
100
  "@stylistic/eslint-plugin": "^5.10.0",
100
101
  "@types/lodash-es": "^4.17.12",
101
- "@types/node": "^26.6.5",
102
- "@typescript-eslint/rule-tester": "^8.72.0",
102
+ "@types/node": "^26.6.6",
103
+ "@typescript-eslint/rule-tester": "^8.72.1",
103
104
  "@vitest/coverage-v8": "^5.0.5",
104
105
  "@vitest/eslint-plugin": "^1.6.28",
105
106
  "chalk": "^6.0.1",
106
107
  "concurrently": "^10.0.6",
107
- "eslint": "^10.13.0",
108
+ "eslint": "^10.14.0",
108
109
  "eslint-config-prettier": "^10.1.8",
109
110
  "eslint-import-resolver-typescript": "^4.4.5",
110
- "eslint-plugin-boundaries": "^7.3.0",
111
+ "eslint-plugin-boundaries": "^7.4.0",
111
112
  "eslint-plugin-eslint-plugin": "^7.6.2",
112
113
  "eslint-plugin-import-x": "^4.17.1",
113
114
  "eslint-plugin-jasmine": "^4.2.2",
114
115
  "eslint-plugin-jest": "^29.17.0",
115
116
  "eslint-plugin-jsdoc": "^65.4.2",
116
- "eslint-plugin-package-json": "^1.11.0",
117
+ "eslint-plugin-package-json": "^1.12.0",
117
118
  "eslint-plugin-perfectionist": "^5.13.0",
118
119
  "eslint-plugin-prettier": "^5.5.7",
119
120
  "eslint-plugin-rxjs-x": "^1.0.6",
120
121
  "eslint-plugin-unicorn": "^79.0.0",
121
- "globals": "^17.13.0",
122
+ "globals": "^17.14.0",
122
123
  "husky": "^9.1.7",
123
124
  "jiti": "^2.7.0",
124
125
  "lint-staged": "^17.6.0",
@@ -128,16 +129,16 @@
128
129
  "prettier": "^3.9.10",
129
130
  "rimraf": "^6.1.3",
130
131
  "semantic-release": "^25.0.9",
131
- "tsc-alias": "^1.9.9",
132
+ "tsc-alias": "^1.9.10",
132
133
  "typedoc": "^0.28.20",
133
134
  "typedoc-plugin-markdown": "^4.14.1",
134
135
  "typescript": "^6.0.3",
135
- "typescript-eslint": "^8.72.0",
136
+ "typescript-eslint": "^8.72.1",
136
137
  "vitest": "^5.0.5"
137
138
  },
138
139
  "peerDependencies": {
139
- "@angular/compiler": ">=22.2.3",
140
- "eslint": ">=10.13.0"
140
+ "@angular/compiler": ">=22.2.4",
141
+ "eslint": ">=10.14.0"
141
142
  },
142
143
  "peerDependenciesMeta": {
143
144
  "@angular/compiler": {