@codeperfect/eslint-plugin 3.1.0 → 3.2.1
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/adapters/angular/angular-template-block-usage-utilities.d.ts +4 -0
- package/dist/adapters/angular/angular-template-block-usage-utilities.d.ts.map +1 -0
- package/dist/adapters/angular/angular-template-block-usage-utilities.js +69 -0
- package/dist/adapters/angular/angular-template-expression-utilities.d.ts +5 -0
- package/dist/adapters/angular/angular-template-expression-utilities.d.ts.map +1 -0
- package/dist/adapters/angular/angular-template-expression-utilities.js +121 -0
- package/dist/adapters/angular/angular-template-node-usage-utilities.d.ts +4 -0
- package/dist/adapters/angular/angular-template-node-usage-utilities.d.ts.map +1 -0
- package/dist/adapters/angular/angular-template-node-usage-utilities.js +47 -0
- package/dist/adapters/angular/angular-template-usage-context.d.ts +26 -0
- package/dist/adapters/angular/angular-template-usage-context.d.ts.map +1 -0
- package/dist/adapters/angular/angular-template-usage-context.js +12 -0
- package/dist/adapters/angular/index.d.ts +2 -0
- package/dist/adapters/angular/index.d.ts.map +1 -0
- package/dist/adapters/angular/index.js +2 -0
- package/dist/adapters/angular/no-unused-public-members-template-adapter.d.ts +15 -0
- package/dist/adapters/angular/no-unused-public-members-template-adapter.d.ts.map +1 -0
- package/dist/adapters/angular/no-unused-public-members-template-adapter.js +126 -0
- package/dist/adapters/angular/plugin.d.ts +12 -0
- package/dist/adapters/angular/plugin.d.ts.map +1 -0
- package/dist/adapters/angular/plugin.js +14 -0
- package/dist/adapters/index.d.ts +2 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +2 -0
- package/dist/codeperfect-eslint-plugin-1.0.0.tgz +0 -0
- package/dist/domain/architecture/no-unused-public-members/member-public-api-utilities.d.ts.map +1 -1
- package/dist/domain/architecture/no-unused-public-members/member-public-api-utilities.js +7 -2
- package/dist/domain/architecture/no-unused-public-members/member-usage-expression-reference-utilities.d.ts +16 -0
- package/dist/domain/architecture/no-unused-public-members/member-usage-expression-reference-utilities.d.ts.map +1 -0
- package/dist/domain/architecture/no-unused-public-members/member-usage-expression-reference-utilities.js +77 -0
- package/dist/domain/architecture/no-unused-public-members/member-usage-handoff-utilities.d.ts +2 -2
- package/dist/domain/architecture/no-unused-public-members/member-usage-handoff-utilities.d.ts.map +1 -1
- package/dist/domain/architecture/no-unused-public-members/member-usage-handoff-utilities.js +69 -43
- package/dist/domain/architecture/no-unused-public-members/member-usage-local-flow-utilities.d.ts +16 -0
- package/dist/domain/architecture/no-unused-public-members/member-usage-local-flow-utilities.d.ts.map +1 -0
- package/dist/domain/architecture/no-unused-public-members/member-usage-local-flow-utilities.js +151 -0
- package/dist/domain/architecture/no-unused-public-members/member-usage-reference-utilities.d.ts.map +1 -1
- package/dist/domain/architecture/no-unused-public-members/member-usage-reference-utilities.js +12 -5
- package/dist/domain/architecture/no-unused-public-members/member-usage-serialization-utilities.d.ts +30 -0
- package/dist/domain/architecture/no-unused-public-members/member-usage-serialization-utilities.d.ts.map +1 -0
- package/dist/domain/architecture/no-unused-public-members/member-usage-serialization-utilities.js +107 -0
- package/dist/domain/architecture/no-unused-public-members/member-usage-type-utilities.d.ts +26 -4
- package/dist/domain/architecture/no-unused-public-members/member-usage-type-utilities.d.ts.map +1 -1
- package/dist/domain/architecture/no-unused-public-members/member-usage-type-utilities.js +77 -21
- package/dist/domain/architecture/no-unused-public-members/member-usage-utilities.d.ts +5 -1
- package/dist/domain/architecture/no-unused-public-members/member-usage-utilities.d.ts.map +1 -1
- package/dist/domain/architecture/no-unused-public-members/member-usage-utilities.js +11 -2
- package/dist/domain/architecture/no-unused-public-members/member-usage-value-utilities.d.ts +43 -0
- package/dist/domain/architecture/no-unused-public-members/member-usage-value-utilities.d.ts.map +1 -0
- package/dist/domain/architecture/no-unused-public-members/member-usage-value-utilities.js +126 -0
- package/dist/domain/architecture/no-unused-public-members/member-utilities.d.ts +3 -1
- package/dist/domain/architecture/no-unused-public-members/member-utilities.d.ts.map +1 -1
- package/dist/domain/architecture/no-unused-public-members/member-utilities.js +4 -3
- package/dist/domain/architecture/no-unused-public-members/rule.d.ts +12 -1
- package/dist/domain/architecture/no-unused-public-members/rule.d.ts.map +1 -1
- package/dist/domain/architecture/no-unused-public-members/rule.js +45 -35
- package/package.json +38 -21
package/dist/domain/architecture/no-unused-public-members/member-usage-local-flow-utilities.js
ADDED
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import * as ts from "typescript";
|
|
2
|
+
import { expressionReferencesSymbol } from "./member-usage-expression-reference-utilities.js";
|
|
3
|
+
import { isDeclarationOnlyMethod } from "./member-usage-type-utilities.js";
|
|
4
|
+
import { expressionCarriesMemberValue } from "./member-usage-value-utilities.js";
|
|
5
|
+
/**
|
|
6
|
+
* Checks whether a local call forwards a member-bearing value to an HTTP body.
|
|
7
|
+
* @param node Candidate local call expression.
|
|
8
|
+
* @param checker TypeScript type checker.
|
|
9
|
+
* @param member Member whose value is being transmitted.
|
|
10
|
+
* @returns True when the argument reaches an opaque request body contract.
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* const transmitted = isLocalCallArgumentTransmitted(call, checker, member);
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
const isLocalCallArgumentTransmitted = (node, checker, member) => {
|
|
17
|
+
if (!ts.isCallExpression(node)) {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
const declaration = checker.getResolvedSignature(node)?.getDeclaration();
|
|
21
|
+
if (!hasFunctionBody(declaration)) {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
return node.arguments.some((argument, argumentIndex) => {
|
|
25
|
+
const parameter = declaration.parameters[Math.min(argumentIndex, declaration.parameters.length - 1)];
|
|
26
|
+
const parameterSymbol = parameter === void 0 || !ts.isIdentifier(parameter.name)
|
|
27
|
+
? void 0
|
|
28
|
+
: checker.getSymbolAtLocation(parameter.name);
|
|
29
|
+
const carries = expressionCarriesMemberValue(argument, checker, member);
|
|
30
|
+
const reachesBody = parameterSymbol !== void 0 &&
|
|
31
|
+
localParameterReachesRequestBody(declaration, parameterSymbol, checker, new Map());
|
|
32
|
+
return parameterSymbol !== void 0 && carries && reachesBody;
|
|
33
|
+
});
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Checks whether a local parameter reaches a declared HTTP request body.
|
|
37
|
+
* @param declaration Local function containing the parameter.
|
|
38
|
+
* @param parameterSymbol Parameter symbol whose value is traced.
|
|
39
|
+
* @param checker TypeScript type checker.
|
|
40
|
+
* @param visitedDeclarations Function declarations already inspected.
|
|
41
|
+
* @returns True when the parameter reaches an opaque request body.
|
|
42
|
+
* @example
|
|
43
|
+
* ```typescript
|
|
44
|
+
* const reachesBody = localParameterReachesRequestBody(
|
|
45
|
+
* declaration,
|
|
46
|
+
* parameterSymbol,
|
|
47
|
+
* checker,
|
|
48
|
+
* new Set(),
|
|
49
|
+
* );
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
52
|
+
const localParameterReachesRequestBody = (declaration, parameterSymbol, checker, visitedDeclarations) => {
|
|
53
|
+
if (!hasFunctionBody(declaration)) {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
const visitedParameters = visitedDeclarations.get(declaration) ?? new Set();
|
|
57
|
+
if (visitedParameters.has(parameterSymbol)) {
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
visitedParameters.add(parameterSymbol);
|
|
61
|
+
visitedDeclarations.set(declaration, visitedParameters);
|
|
62
|
+
const inspect = (node) => {
|
|
63
|
+
if (ts.isCallExpression(node)) {
|
|
64
|
+
const isBody = isOpaqueRequestBodyHandoff(node, parameterSymbol, checker);
|
|
65
|
+
if (isBody) {
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
const nestedDeclaration = checker
|
|
69
|
+
.getResolvedSignature(node)
|
|
70
|
+
?.getDeclaration();
|
|
71
|
+
if (hasFunctionBody(nestedDeclaration)) {
|
|
72
|
+
for (const [argumentIndex, argument] of node.arguments.entries()) {
|
|
73
|
+
const references = expressionReferencesSymbol(argument, parameterSymbol, checker);
|
|
74
|
+
if (!references) {
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
const nestedParameter = nestedDeclaration.parameters[Math.min(argumentIndex, nestedDeclaration.parameters.length - 1)];
|
|
78
|
+
const nestedParameterSymbol = nestedParameter === void 0 || !ts.isIdentifier(nestedParameter.name)
|
|
79
|
+
? void 0
|
|
80
|
+
: checker.getSymbolAtLocation(nestedParameter.name);
|
|
81
|
+
if (nestedParameterSymbol !== void 0 &&
|
|
82
|
+
localParameterReachesRequestBody(nestedDeclaration, nestedParameterSymbol, checker, visitedDeclarations)) {
|
|
83
|
+
return true;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return ts.forEachChild(node, inspect);
|
|
89
|
+
};
|
|
90
|
+
return inspect(declaration.body) === true;
|
|
91
|
+
};
|
|
92
|
+
/**
|
|
93
|
+
* Checks whether a request call sends the traced parameter as opaque body data.
|
|
94
|
+
* @param call Candidate call expression.
|
|
95
|
+
* @param parameterSymbol Parameter symbol whose value is traced.
|
|
96
|
+
* @param checker TypeScript type checker.
|
|
97
|
+
* @returns True when a declaration-only request method accepts the value as body.
|
|
98
|
+
* @example
|
|
99
|
+
* ```typescript
|
|
100
|
+
* const opaque = isOpaqueRequestBodyHandoff(call, parameterSymbol, checker);
|
|
101
|
+
* ```
|
|
102
|
+
*/
|
|
103
|
+
const isOpaqueRequestBodyHandoff = (call, parameterSymbol, checker) => {
|
|
104
|
+
const declaration = checker.getResolvedSignature(call)?.getDeclaration();
|
|
105
|
+
if (declaration === void 0 ||
|
|
106
|
+
!isDeclarationOnlyMethod(declaration) ||
|
|
107
|
+
!ts.isPropertyAccessExpression(call.expression) ||
|
|
108
|
+
call.expression.name.text !== "request") {
|
|
109
|
+
return false;
|
|
110
|
+
}
|
|
111
|
+
return call.arguments.some((argument) => {
|
|
112
|
+
if (!ts.isObjectLiteralExpression(argument)) {
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
const optionsType = checker.getContextualType(argument);
|
|
116
|
+
const requestOptionsType = optionsType === void 0 ? void 0 : checker.getNonNullableType(optionsType);
|
|
117
|
+
const bodyProperty = requestOptionsType === void 0
|
|
118
|
+
? void 0
|
|
119
|
+
: checker.getPropertyOfType(requestOptionsType, "body");
|
|
120
|
+
if (bodyProperty === void 0) {
|
|
121
|
+
return false;
|
|
122
|
+
}
|
|
123
|
+
const bodyType = checker.getTypeOfSymbolAtLocation(bodyProperty, argument);
|
|
124
|
+
if ((bodyType.flags & (ts.TypeFlags.Any | ts.TypeFlags.Unknown)) === 0) {
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
return argument.properties.some((property) => {
|
|
128
|
+
return ts.isPropertyAssignment(property) &&
|
|
129
|
+
ts.isIdentifier(property.name) &&
|
|
130
|
+
property.name.text === "body"
|
|
131
|
+
? expressionReferencesSymbol(property.initializer, parameterSymbol, checker)
|
|
132
|
+
: ts.isShorthandPropertyAssignment(property) &&
|
|
133
|
+
property.name.text === "body" &&
|
|
134
|
+
expressionReferencesSymbol(property.name, parameterSymbol, checker);
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
};
|
|
138
|
+
/**
|
|
139
|
+
* Narrows a function-like declaration to one with a body.
|
|
140
|
+
* @param declaration Candidate call signature declaration.
|
|
141
|
+
* @returns Whether the declaration has a function body.
|
|
142
|
+
* @example
|
|
143
|
+
* ```typescript
|
|
144
|
+
* if (hasFunctionBody(declaration)) inspect(declaration.body);
|
|
145
|
+
* ```
|
|
146
|
+
*/
|
|
147
|
+
const hasFunctionBody = (declaration) => declaration !== void 0 &&
|
|
148
|
+
"body" in declaration &&
|
|
149
|
+
declaration.body !== void 0;
|
|
150
|
+
export { isLocalCallArgumentTransmitted };
|
|
151
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtYmVyLXVzYWdlLWxvY2FsLWZsb3ctdXRpbGl0aWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2RvbWFpbi9hcmNoaXRlY3R1cmUvbm8tdW51c2VkLXB1YmxpYy1tZW1iZXJzL21lbWJlci11c2FnZS1sb2NhbC1mbG93LXV0aWxpdGllcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQztBQUlqQyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUMzRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN4RSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUU5RTs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSw4QkFBOEIsR0FBRyxDQUNyQyxJQUFhLEVBQ2IsT0FBdUIsRUFDdkIsTUFBb0IsRUFDWCxFQUFFO0lBQ1gsSUFBSSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQy9CLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxjQUFjLEVBQUUsQ0FBQztJQUN6RSxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7UUFDbEMsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxhQUFhLEVBQUUsRUFBRTtRQUNyRCxNQUFNLFNBQVMsR0FDYixXQUFXLENBQUMsVUFBVSxDQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxXQUFXLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FDM0QsQ0FBQztRQUNKLE1BQU0sZUFBZSxHQUNuQixTQUFTLEtBQUssS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7WUFDdEQsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUNSLENBQUMsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWxELE1BQU0sT0FBTyxHQUFHLDRCQUE0QixDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDeEUsTUFBTSxXQUFXLEdBQ2YsZUFBZSxLQUFLLEtBQUssQ0FBQztZQUMxQixnQ0FBZ0MsQ0FDOUIsV0FBVyxFQUNYLGVBQWUsRUFDZixPQUFPLEVBQ1AsSUFBSSxHQUFHLEVBQUUsQ0FDVixDQUFDO1FBQ0osT0FBTyxlQUFlLEtBQUssS0FBSyxDQUFDLElBQUksT0FBTyxJQUFJLFdBQVcsQ0FBQztJQUM5RCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQztBQUVGOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsTUFBTSxnQ0FBZ0MsR0FBRyxDQUN2QyxXQUFvQyxFQUNwQyxlQUEwQixFQUMxQixPQUF1QixFQUN2QixtQkFBaUUsRUFDeEQsRUFBRTtJQUNYLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztRQUNsQyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxNQUFNLGlCQUFpQixHQUNyQixtQkFBbUIsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksSUFBSSxHQUFHLEVBQWEsQ0FBQztJQUMvRCxJQUFJLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO1FBQzNDLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUN2QyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFFeEQsTUFBTSxPQUFPLEdBQUcsQ0FBQyxJQUFhLEVBQW9CLEVBQUU7UUFDbEQsSUFBSSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUM5QixNQUFNLE1BQU0sR0FBRywwQkFBMEIsQ0FBQyxJQUFJLEVBQUUsZUFBZSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQzFFLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ1gsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1lBRUQsTUFBTSxpQkFBaUIsR0FBRyxPQUFPO2lCQUM5QixvQkFBb0IsQ0FBQyxJQUFJLENBQUM7Z0JBQzNCLEVBQUUsY0FBYyxFQUFFLENBQUM7WUFDckIsSUFBSSxlQUFlLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDO2dCQUN2QyxLQUFLLE1BQU0sQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO29CQUNqRSxNQUFNLFVBQVUsR0FBRywwQkFBMEIsQ0FDM0MsUUFBUSxFQUNSLGVBQWUsRUFDZixPQUFPLENBQ1IsQ0FBQztvQkFDRixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7d0JBQ2hCLFNBQVM7b0JBQ1gsQ0FBQztvQkFFRCxNQUFNLGVBQWUsR0FDbkIsaUJBQWlCLENBQUMsVUFBVSxDQUMxQixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUNqRSxDQUFDO29CQUNKLE1BQU0scUJBQXFCLEdBQ3pCLGVBQWUsS0FBSyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQzt3QkFDbEUsQ0FBQyxDQUFDLEtBQUssQ0FBQzt3QkFDUixDQUFDLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFFeEQsSUFDRSxxQkFBcUIsS0FBSyxLQUFLLENBQUM7d0JBQ2hDLGdDQUFnQyxDQUM5QixpQkFBaUIsRUFDakIscUJBQXFCLEVBQ3JCLE9BQU8sRUFDUCxtQkFBbUIsQ0FDcEIsRUFDRCxDQUFDO3dCQUNELE9BQU8sSUFBSSxDQUFDO29CQUNkLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN4QyxDQUFDLENBQUM7SUFFRixPQUFPLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDO0FBQzVDLENBQUMsQ0FBQztBQUVGOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLDBCQUEwQixHQUFHLENBQ2pDLElBQXVCLEVBQ3ZCLGVBQTBCLEVBQzFCLE9BQXVCLEVBQ2QsRUFBRTtJQUNYLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxjQUFjLEVBQUUsQ0FBQztJQUV6RSxJQUNFLFdBQVcsS0FBSyxLQUFLLENBQUM7UUFDdEIsQ0FBQyx1QkFBdUIsQ0FBQyxXQUFXLENBQUM7UUFDckMsQ0FBQyxFQUFFLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUMvQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUN2QyxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO1FBQ3RDLElBQUksQ0FBQyxFQUFFLENBQUMseUJBQXlCLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUM1QyxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDeEQsTUFBTSxrQkFBa0IsR0FDdEIsV0FBVyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzVFLE1BQU0sWUFBWSxHQUNoQixrQkFBa0IsS0FBSyxLQUFLLENBQUM7WUFDM0IsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUNSLENBQUMsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDNUQsSUFBSSxZQUFZLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM1QixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMseUJBQXlCLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzNFLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3ZFLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELE9BQU8sUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUMzQyxPQUFPLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUM7Z0JBQ3RDLEVBQUUsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztnQkFDOUIsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTTtnQkFDN0IsQ0FBQyxDQUFDLDBCQUEwQixDQUN4QixRQUFRLENBQUMsV0FBVyxFQUNwQixlQUFlLEVBQ2YsT0FBTyxDQUNSO2dCQUNILENBQUMsQ0FBQyxFQUFFLENBQUMsNkJBQTZCLENBQUMsUUFBUSxDQUFDO29CQUN4QyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNO29CQUM3QiwwQkFBMEIsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM1RSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBRUY7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLGVBQWUsR0FBRyxDQUN0QixXQUFnRCxFQUNtQixFQUFFLENBQ3JFLFdBQVcsS0FBSyxLQUFLLENBQUM7SUFDdEIsTUFBTSxJQUFJLFdBQVc7SUFDckIsV0FBVyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQztBQUU5QixPQUFPLEVBQUUsOEJBQThCLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHRzIGZyb20gXCJ0eXBlc2NyaXB0XCI7XG5cbmltcG9ydCB0eXBlIHsgUHVibGljTWVtYmVyIH0gZnJvbSBcIi4vbWVtYmVyLWRlY2xhcmF0aW9uLXV0aWxpdGllc1wiO1xuXG5pbXBvcnQgeyBleHByZXNzaW9uUmVmZXJlbmNlc1N5bWJvbCB9IGZyb20gXCIuL21lbWJlci11c2FnZS1leHByZXNzaW9uLXJlZmVyZW5jZS11dGlsaXRpZXNcIjtcbmltcG9ydCB7IGlzRGVjbGFyYXRpb25Pbmx5TWV0aG9kIH0gZnJvbSBcIi4vbWVtYmVyLXVzYWdlLXR5cGUtdXRpbGl0aWVzXCI7XG5pbXBvcnQgeyBleHByZXNzaW9uQ2Fycmllc01lbWJlclZhbHVlIH0gZnJvbSBcIi4vbWVtYmVyLXVzYWdlLXZhbHVlLXV0aWxpdGllc1wiO1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGEgbG9jYWwgY2FsbCBmb3J3YXJkcyBhIG1lbWJlci1iZWFyaW5nIHZhbHVlIHRvIGFuIEhUVFAgYm9keS5cbiAqIEBwYXJhbSBub2RlIENhbmRpZGF0ZSBsb2NhbCBjYWxsIGV4cHJlc3Npb24uXG4gKiBAcGFyYW0gY2hlY2tlciBUeXBlU2NyaXB0IHR5cGUgY2hlY2tlci5cbiAqIEBwYXJhbSBtZW1iZXIgTWVtYmVyIHdob3NlIHZhbHVlIGlzIGJlaW5nIHRyYW5zbWl0dGVkLlxuICogQHJldHVybnMgVHJ1ZSB3aGVuIHRoZSBhcmd1bWVudCByZWFjaGVzIGFuIG9wYXF1ZSByZXF1ZXN0IGJvZHkgY29udHJhY3QuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgdHJhbnNtaXR0ZWQgPSBpc0xvY2FsQ2FsbEFyZ3VtZW50VHJhbnNtaXR0ZWQoY2FsbCwgY2hlY2tlciwgbWVtYmVyKTtcbiAqIGBgYFxuICovXG5jb25zdCBpc0xvY2FsQ2FsbEFyZ3VtZW50VHJhbnNtaXR0ZWQgPSAoXG4gIG5vZGU6IHRzLk5vZGUsXG4gIGNoZWNrZXI6IHRzLlR5cGVDaGVja2VyLFxuICBtZW1iZXI6IFB1YmxpY01lbWJlcixcbik6IGJvb2xlYW4gPT4ge1xuICBpZiAoIXRzLmlzQ2FsbEV4cHJlc3Npb24obm9kZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBkZWNsYXJhdGlvbiA9IGNoZWNrZXIuZ2V0UmVzb2x2ZWRTaWduYXR1cmUobm9kZSk/LmdldERlY2xhcmF0aW9uKCk7XG4gIGlmICghaGFzRnVuY3Rpb25Cb2R5KGRlY2xhcmF0aW9uKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBub2RlLmFyZ3VtZW50cy5zb21lKChhcmd1bWVudCwgYXJndW1lbnRJbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhcmFtZXRlciA9XG4gICAgICBkZWNsYXJhdGlvbi5wYXJhbWV0ZXJzW1xuICAgICAgICBNYXRoLm1pbihhcmd1bWVudEluZGV4LCBkZWNsYXJhdGlvbi5wYXJhbWV0ZXJzLmxlbmd0aCAtIDEpXG4gICAgICBdO1xuICAgIGNvbnN0IHBhcmFtZXRlclN5bWJvbCA9XG4gICAgICBwYXJhbWV0ZXIgPT09IHZvaWQgMCB8fCAhdHMuaXNJZGVudGlmaWVyKHBhcmFtZXRlci5uYW1lKVxuICAgICAgICA/IHZvaWQgMFxuICAgICAgICA6IGNoZWNrZXIuZ2V0U3ltYm9sQXRMb2NhdGlvbihwYXJhbWV0ZXIubmFtZSk7XG5cbiAgICBjb25zdCBjYXJyaWVzID0gZXhwcmVzc2lvbkNhcnJpZXNNZW1iZXJWYWx1ZShhcmd1bWVudCwgY2hlY2tlciwgbWVtYmVyKTtcbiAgICBjb25zdCByZWFjaGVzQm9keSA9XG4gICAgICBwYXJhbWV0ZXJTeW1ib2wgIT09IHZvaWQgMCAmJlxuICAgICAgbG9jYWxQYXJhbWV0ZXJSZWFjaGVzUmVxdWVzdEJvZHkoXG4gICAgICAgIGRlY2xhcmF0aW9uLFxuICAgICAgICBwYXJhbWV0ZXJTeW1ib2wsXG4gICAgICAgIGNoZWNrZXIsXG4gICAgICAgIG5ldyBNYXAoKSxcbiAgICAgICk7XG4gICAgcmV0dXJuIHBhcmFtZXRlclN5bWJvbCAhPT0gdm9pZCAwICYmIGNhcnJpZXMgJiYgcmVhY2hlc0JvZHk7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhIGxvY2FsIHBhcmFtZXRlciByZWFjaGVzIGEgZGVjbGFyZWQgSFRUUCByZXF1ZXN0IGJvZHkuXG4gKiBAcGFyYW0gZGVjbGFyYXRpb24gTG9jYWwgZnVuY3Rpb24gY29udGFpbmluZyB0aGUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHBhcmFtZXRlclN5bWJvbCBQYXJhbWV0ZXIgc3ltYm9sIHdob3NlIHZhbHVlIGlzIHRyYWNlZC5cbiAqIEBwYXJhbSBjaGVja2VyIFR5cGVTY3JpcHQgdHlwZSBjaGVja2VyLlxuICogQHBhcmFtIHZpc2l0ZWREZWNsYXJhdGlvbnMgRnVuY3Rpb24gZGVjbGFyYXRpb25zIGFscmVhZHkgaW5zcGVjdGVkLlxuICogQHJldHVybnMgVHJ1ZSB3aGVuIHRoZSBwYXJhbWV0ZXIgcmVhY2hlcyBhbiBvcGFxdWUgcmVxdWVzdCBib2R5LlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHJlYWNoZXNCb2R5ID0gbG9jYWxQYXJhbWV0ZXJSZWFjaGVzUmVxdWVzdEJvZHkoXG4gKiAgIGRlY2xhcmF0aW9uLFxuICogICBwYXJhbWV0ZXJTeW1ib2wsXG4gKiAgIGNoZWNrZXIsXG4gKiAgIG5ldyBTZXQoKSxcbiAqICk7XG4gKiBgYGBcbiAqL1xuY29uc3QgbG9jYWxQYXJhbWV0ZXJSZWFjaGVzUmVxdWVzdEJvZHkgPSAoXG4gIGRlY2xhcmF0aW9uOiB0cy5TaWduYXR1cmVEZWNsYXJhdGlvbixcbiAgcGFyYW1ldGVyU3ltYm9sOiB0cy5TeW1ib2wsXG4gIGNoZWNrZXI6IHRzLlR5cGVDaGVja2VyLFxuICB2aXNpdGVkRGVjbGFyYXRpb25zOiBNYXA8dHMuU2lnbmF0dXJlRGVjbGFyYXRpb24sIFNldDx0cy5TeW1ib2w+Pixcbik6IGJvb2xlYW4gPT4ge1xuICBpZiAoIWhhc0Z1bmN0aW9uQm9keShkZWNsYXJhdGlvbikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCB2aXNpdGVkUGFyYW1ldGVycyA9XG4gICAgdmlzaXRlZERlY2xhcmF0aW9ucy5nZXQoZGVjbGFyYXRpb24pID8/IG5ldyBTZXQ8dHMuU3ltYm9sPigpO1xuICBpZiAodmlzaXRlZFBhcmFtZXRlcnMuaGFzKHBhcmFtZXRlclN5bWJvbCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmlzaXRlZFBhcmFtZXRlcnMuYWRkKHBhcmFtZXRlclN5bWJvbCk7XG4gIHZpc2l0ZWREZWNsYXJhdGlvbnMuc2V0KGRlY2xhcmF0aW9uLCB2aXNpdGVkUGFyYW1ldGVycyk7XG5cbiAgY29uc3QgaW5zcGVjdCA9IChub2RlOiB0cy5Ob2RlKTogdHJ1ZSB8IHVuZGVmaW5lZCA9PiB7XG4gICAgaWYgKHRzLmlzQ2FsbEV4cHJlc3Npb24obm9kZSkpIHtcbiAgICAgIGNvbnN0IGlzQm9keSA9IGlzT3BhcXVlUmVxdWVzdEJvZHlIYW5kb2ZmKG5vZGUsIHBhcmFtZXRlclN5bWJvbCwgY2hlY2tlcik7XG4gICAgICBpZiAoaXNCb2R5KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXN0ZWREZWNsYXJhdGlvbiA9IGNoZWNrZXJcbiAgICAgICAgLmdldFJlc29sdmVkU2lnbmF0dXJlKG5vZGUpXG4gICAgICAgID8uZ2V0RGVjbGFyYXRpb24oKTtcbiAgICAgIGlmIChoYXNGdW5jdGlvbkJvZHkobmVzdGVkRGVjbGFyYXRpb24pKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2FyZ3VtZW50SW5kZXgsIGFyZ3VtZW50XSBvZiBub2RlLmFyZ3VtZW50cy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICBjb25zdCByZWZlcmVuY2VzID0gZXhwcmVzc2lvblJlZmVyZW5jZXNTeW1ib2woXG4gICAgICAgICAgICBhcmd1bWVudCxcbiAgICAgICAgICAgIHBhcmFtZXRlclN5bWJvbCxcbiAgICAgICAgICAgIGNoZWNrZXIsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoIXJlZmVyZW5jZXMpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IG5lc3RlZFBhcmFtZXRlciA9XG4gICAgICAgICAgICBuZXN0ZWREZWNsYXJhdGlvbi5wYXJhbWV0ZXJzW1xuICAgICAgICAgICAgICBNYXRoLm1pbihhcmd1bWVudEluZGV4LCBuZXN0ZWREZWNsYXJhdGlvbi5wYXJhbWV0ZXJzLmxlbmd0aCAtIDEpXG4gICAgICAgICAgICBdO1xuICAgICAgICAgIGNvbnN0IG5lc3RlZFBhcmFtZXRlclN5bWJvbCA9XG4gICAgICAgICAgICBuZXN0ZWRQYXJhbWV0ZXIgPT09IHZvaWQgMCB8fCAhdHMuaXNJZGVudGlmaWVyKG5lc3RlZFBhcmFtZXRlci5uYW1lKVxuICAgICAgICAgICAgICA/IHZvaWQgMFxuICAgICAgICAgICAgICA6IGNoZWNrZXIuZ2V0U3ltYm9sQXRMb2NhdGlvbihuZXN0ZWRQYXJhbWV0ZXIubmFtZSk7XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBuZXN0ZWRQYXJhbWV0ZXJTeW1ib2wgIT09IHZvaWQgMCAmJlxuICAgICAgICAgICAgbG9jYWxQYXJhbWV0ZXJSZWFjaGVzUmVxdWVzdEJvZHkoXG4gICAgICAgICAgICAgIG5lc3RlZERlY2xhcmF0aW9uLFxuICAgICAgICAgICAgICBuZXN0ZWRQYXJhbWV0ZXJTeW1ib2wsXG4gICAgICAgICAgICAgIGNoZWNrZXIsXG4gICAgICAgICAgICAgIHZpc2l0ZWREZWNsYXJhdGlvbnMsXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHMuZm9yRWFjaENoaWxkKG5vZGUsIGluc3BlY3QpO1xuICB9O1xuXG4gIHJldHVybiBpbnNwZWN0KGRlY2xhcmF0aW9uLmJvZHkpID09PSB0cnVlO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhIHJlcXVlc3QgY2FsbCBzZW5kcyB0aGUgdHJhY2VkIHBhcmFtZXRlciBhcyBvcGFxdWUgYm9keSBkYXRhLlxuICogQHBhcmFtIGNhbGwgQ2FuZGlkYXRlIGNhbGwgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSBwYXJhbWV0ZXJTeW1ib2wgUGFyYW1ldGVyIHN5bWJvbCB3aG9zZSB2YWx1ZSBpcyB0cmFjZWQuXG4gKiBAcGFyYW0gY2hlY2tlciBUeXBlU2NyaXB0IHR5cGUgY2hlY2tlci5cbiAqIEByZXR1cm5zIFRydWUgd2hlbiBhIGRlY2xhcmF0aW9uLW9ubHkgcmVxdWVzdCBtZXRob2QgYWNjZXB0cyB0aGUgdmFsdWUgYXMgYm9keS5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBvcGFxdWUgPSBpc09wYXF1ZVJlcXVlc3RCb2R5SGFuZG9mZihjYWxsLCBwYXJhbWV0ZXJTeW1ib2wsIGNoZWNrZXIpO1xuICogYGBgXG4gKi9cbmNvbnN0IGlzT3BhcXVlUmVxdWVzdEJvZHlIYW5kb2ZmID0gKFxuICBjYWxsOiB0cy5DYWxsRXhwcmVzc2lvbixcbiAgcGFyYW1ldGVyU3ltYm9sOiB0cy5TeW1ib2wsXG4gIGNoZWNrZXI6IHRzLlR5cGVDaGVja2VyLFxuKTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IGRlY2xhcmF0aW9uID0gY2hlY2tlci5nZXRSZXNvbHZlZFNpZ25hdHVyZShjYWxsKT8uZ2V0RGVjbGFyYXRpb24oKTtcblxuICBpZiAoXG4gICAgZGVjbGFyYXRpb24gPT09IHZvaWQgMCB8fFxuICAgICFpc0RlY2xhcmF0aW9uT25seU1ldGhvZChkZWNsYXJhdGlvbikgfHxcbiAgICAhdHMuaXNQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24oY2FsbC5leHByZXNzaW9uKSB8fFxuICAgIGNhbGwuZXhwcmVzc2lvbi5uYW1lLnRleHQgIT09IFwicmVxdWVzdFwiXG4gICkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBjYWxsLmFyZ3VtZW50cy5zb21lKChhcmd1bWVudCkgPT4ge1xuICAgIGlmICghdHMuaXNPYmplY3RMaXRlcmFsRXhwcmVzc2lvbihhcmd1bWVudCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBvcHRpb25zVHlwZSA9IGNoZWNrZXIuZ2V0Q29udGV4dHVhbFR5cGUoYXJndW1lbnQpO1xuICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zVHlwZSA9XG4gICAgICBvcHRpb25zVHlwZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogY2hlY2tlci5nZXROb25OdWxsYWJsZVR5cGUob3B0aW9uc1R5cGUpO1xuICAgIGNvbnN0IGJvZHlQcm9wZXJ0eSA9XG4gICAgICByZXF1ZXN0T3B0aW9uc1R5cGUgPT09IHZvaWQgMFxuICAgICAgICA/IHZvaWQgMFxuICAgICAgICA6IGNoZWNrZXIuZ2V0UHJvcGVydHlPZlR5cGUocmVxdWVzdE9wdGlvbnNUeXBlLCBcImJvZHlcIik7XG4gICAgaWYgKGJvZHlQcm9wZXJ0eSA9PT0gdm9pZCAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgYm9keVR5cGUgPSBjaGVja2VyLmdldFR5cGVPZlN5bWJvbEF0TG9jYXRpb24oYm9keVByb3BlcnR5LCBhcmd1bWVudCk7XG4gICAgaWYgKChib2R5VHlwZS5mbGFncyAmICh0cy5UeXBlRmxhZ3MuQW55IHwgdHMuVHlwZUZsYWdzLlVua25vd24pKSA9PT0gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBhcmd1bWVudC5wcm9wZXJ0aWVzLnNvbWUoKHByb3BlcnR5KSA9PiB7XG4gICAgICByZXR1cm4gdHMuaXNQcm9wZXJ0eUFzc2lnbm1lbnQocHJvcGVydHkpICYmXG4gICAgICAgIHRzLmlzSWRlbnRpZmllcihwcm9wZXJ0eS5uYW1lKSAmJlxuICAgICAgICBwcm9wZXJ0eS5uYW1lLnRleHQgPT09IFwiYm9keVwiXG4gICAgICAgID8gZXhwcmVzc2lvblJlZmVyZW5jZXNTeW1ib2woXG4gICAgICAgICAgICBwcm9wZXJ0eS5pbml0aWFsaXplcixcbiAgICAgICAgICAgIHBhcmFtZXRlclN5bWJvbCxcbiAgICAgICAgICAgIGNoZWNrZXIsXG4gICAgICAgICAgKVxuICAgICAgICA6IHRzLmlzU2hvcnRoYW5kUHJvcGVydHlBc3NpZ25tZW50KHByb3BlcnR5KSAmJlxuICAgICAgICAgICAgcHJvcGVydHkubmFtZS50ZXh0ID09PSBcImJvZHlcIiAmJlxuICAgICAgICAgICAgZXhwcmVzc2lvblJlZmVyZW5jZXNTeW1ib2wocHJvcGVydHkubmFtZSwgcGFyYW1ldGVyU3ltYm9sLCBjaGVja2VyKTtcbiAgICB9KTtcbiAgfSk7XG59O1xuXG4vKipcbiAqIE5hcnJvd3MgYSBmdW5jdGlvbi1saWtlIGRlY2xhcmF0aW9uIHRvIG9uZSB3aXRoIGEgYm9keS5cbiAqIEBwYXJhbSBkZWNsYXJhdGlvbiBDYW5kaWRhdGUgY2FsbCBzaWduYXR1cmUgZGVjbGFyYXRpb24uXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBkZWNsYXJhdGlvbiBoYXMgYSBmdW5jdGlvbiBib2R5LlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGlmIChoYXNGdW5jdGlvbkJvZHkoZGVjbGFyYXRpb24pKSBpbnNwZWN0KGRlY2xhcmF0aW9uLmJvZHkpO1xuICogYGBgXG4gKi9cbmNvbnN0IGhhc0Z1bmN0aW9uQm9keSA9IChcbiAgZGVjbGFyYXRpb246IHRzLlNpZ25hdHVyZURlY2xhcmF0aW9uIHwgdW5kZWZpbmVkLFxuKTogZGVjbGFyYXRpb24gaXMgdHMuU2lnbmF0dXJlRGVjbGFyYXRpb24gJiB7IGJvZHk6IHRzLkNvbmNpc2VCb2R5IH0gPT5cbiAgZGVjbGFyYXRpb24gIT09IHZvaWQgMCAmJlxuICBcImJvZHlcIiBpbiBkZWNsYXJhdGlvbiAmJlxuICBkZWNsYXJhdGlvbi5ib2R5ICE9PSB2b2lkIDA7XG5cbmV4cG9ydCB7IGlzTG9jYWxDYWxsQXJndW1lbnRUcmFuc21pdHRlZCB9O1xuIl19
|
package/dist/domain/architecture/no-unused-public-members/member-usage-reference-utilities.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"member-usage-reference-utilities.d.ts","sourceRoot":"","sources":["../../../../src/domain/architecture/no-unused-public-members/member-usage-reference-utilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAEjC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"member-usage-reference-utilities.d.ts","sourceRoot":"","sources":["../../../../src/domain/architecture/no-unused-public-members/member-usage-reference-utilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAEjC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AA+DnE;;;;;;;;;;GAUG;AACH,QAAA,MAAM,wBAAwB,GAC5B,MAAM,EAAE,CAAC,IAAI,EACb,SAAS,EAAE,CAAC,WAAW,EACvB,QAAQ,YAAY,KACnB,OAQF,CAAC;AAyBF;;;;;;;;;;;GAWG;AACH,QAAA,MAAM,oBAAoB,GACxB,MAAM,EAAE,CAAC,IAAI,EACb,SAAS,EAAE,CAAC,WAAW,EACvB,QAAQ,YAAY,EACpB,gBAAgB,EAAE,CAAC,MAAM,EAAE,KAC1B,OAuCF,CAAC;AAEF,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,CAAC"}
|
package/dist/domain/architecture/no-unused-public-members/member-usage-reference-utilities.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as ts from "typescript";
|
|
2
|
-
import { isSameSymbol } from "../no-unused-exports/no-unused-exports-symbol-utilities.js";
|
|
2
|
+
import { isSameSymbol, resolveCanonicalSymbol, } from "../no-unused-exports/no-unused-exports-symbol-utilities.js";
|
|
3
3
|
import { hasCompatibleMemberShape } from "./member-usage-type-utilities.js";
|
|
4
4
|
/**
|
|
5
5
|
* Gets the source type and key for a property read or destructuring use.
|
|
@@ -24,9 +24,7 @@ const getPropertyAccess = (node, checker) => {
|
|
|
24
24
|
ts.isObjectBindingPattern(parent.parent)) {
|
|
25
25
|
const owner = parent.parent.parent;
|
|
26
26
|
const sourceType = ts.isVariableDeclaration(owner)
|
|
27
|
-
? owner.initializer
|
|
28
|
-
? void 0
|
|
29
|
-
: checker.getTypeAtLocation(owner.initializer)
|
|
27
|
+
? checker.getTypeAtLocation(owner.initializer ?? owner.name)
|
|
30
28
|
: ts.isParameter(owner)
|
|
31
29
|
? checker.getTypeAtLocation(owner)
|
|
32
30
|
: void 0;
|
|
@@ -94,6 +92,15 @@ const isComputedMemberRead = (node, checker, member, relatedSymbols) => {
|
|
|
94
92
|
}
|
|
95
93
|
const objectType = checker.getTypeAtLocation(node.expression);
|
|
96
94
|
const keyType = checker.getTypeAtLocation(node.argumentExpression);
|
|
95
|
+
if ((keyType.flags & ts.TypeFlags.String) !== 0 &&
|
|
96
|
+
ts.isVariableDeclaration(member.hostDeclaration) &&
|
|
97
|
+
member.hostSymbol !== void 0) {
|
|
98
|
+
const accessedSymbol = checker.getSymbolAtLocation(node.expression);
|
|
99
|
+
if (accessedSymbol !== void 0 &&
|
|
100
|
+
isSameSymbol(resolveCanonicalSymbol(accessedSymbol, checker), resolveCanonicalSymbol(member.hostSymbol, checker))) {
|
|
101
|
+
return true;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
97
104
|
return getStringLiteralKeys(keyType).some((name) => {
|
|
98
105
|
if (name !== member.memberName) {
|
|
99
106
|
return false;
|
|
@@ -105,4 +112,4 @@ const isComputedMemberRead = (node, checker, member, relatedSymbols) => {
|
|
|
105
112
|
});
|
|
106
113
|
};
|
|
107
114
|
export { isComputedMemberRead, isStructuralPropertyRead };
|
|
108
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtYmVyLXVzYWdlLXJlZmVyZW5jZS11dGlsaXRpZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZG9tYWluL2FyY2hpdGVjdHVyZS9uby11bnVzZWQtcHVibGljLW1lbWJlcnMvbWVtYmVyLXVzYWdlLXJlZmVyZW5jZS11dGlsaXRpZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFJakMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlEQUF5RCxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBV3pFOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0saUJBQWlCLEdBQUcsQ0FDeEIsSUFBYSxFQUNiLE9BQXVCLEVBQ1ksRUFBRTtJQUNyQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBRTNCLElBQUksRUFBRSxDQUFDLDBCQUEwQixDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDbEUsT0FBTztZQUNMLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUk7WUFDdEIsVUFBVSxFQUFFLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDO1NBQ3pELENBQUM7SUFDSixDQUFDO0lBRUQsSUFDRSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDO1FBQzNCLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxJQUFJLElBQUksTUFBTSxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUM7UUFDdEQsRUFBRSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFDeEMsQ0FBQztRQUNELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ25DLE1BQU0sVUFBVSxHQUFH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T0FBTyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUNqRCxJQUFJLElBQUksS0FBSyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDL0IsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUU3RCxPQUFPLENBQ0wsUUFBUSxLQUFLLEtBQUssQ0FBQztZQUNuQixDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQzlELHdCQUF3QixDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FDekQsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBRUYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLHdCQUF3QixFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB0cyBmcm9tIFwidHlwZXNjcmlwdFwiO1xuXG5pbXBvcnQgdHlwZSB7IFB1YmxpY01lbWJlciB9IGZyb20gXCIuL21lbWJlci1kZWNsYXJhdGlvbi11dGlsaXRpZXNcIjtcblxuaW1wb3J0IHsgaXNTYW1lU3ltYm9sIH0gZnJvbSBcIi4uL25vLXVudXNlZC1leHBvcnRzL25vLXVudXNlZC1leHBvcnRzLXN5bWJvbC11dGlsaXRpZXNcIjtcbmltcG9ydCB7IGhhc0NvbXBhdGlibGVNZW1iZXJTaGFwZSB9IGZyb20gXCIuL21lbWJlci11c2FnZS10eXBlLXV0aWxpdGllc1wiO1xuXG4vKiogU291cmNlIHR5cGUgYW5kIG5hbWUgZm9yIGEgcHJvcGVydHkgYWNjZXNzIG9yIGRlc3RydWN0dXJpbmcgcmVhZC4gKi9cbmludGVyZmFjZSBQcm9wZXJ0eUFjY2Vzc0RldGFpbHMge1xuICAvKiogUHJvcGVydHkgbmFtZSBzZWxlY3RlZCBieSB0aGUgYWNjZXNzLiAqL1xuICBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqIFR5cGUgb2YgdGhlIG9iamVjdCB3aG9zZSBwcm9wZXJ0eSBpcyByZWFkLiAqL1xuICBzb3VyY2VUeXBlOiB0cy5UeXBlO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIHNvdXJjZSB0eXBlIGFuZCBrZXkgZm9yIGEgcHJvcGVydHkgcmVhZCBvciBkZXN0cnVjdHVyaW5nIHVzZS5cbiAqIEBwYXJhbSBub2RlIENhbmRpZGF0ZSBtZW1iZXItbmFtZSBub2RlLlxuICogQHBhcmFtIGNoZWNrZXIgVHlwZVNjcmlwdCB0eXBlIGNoZWNrZXIuXG4gKiBAcmV0dXJucyBBY2Nlc3MgZGV0YWlscyB3aGVuIHRoZSBub2RlIHJlYWRzIGEgcHJvcGVydHkuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgYWNjZXNzID0gZ2V0UHJvcGVydHlBY2Nlc3Mobm9kZSwgY2hlY2tlcik7XG4gKiBgYGBcbiAqL1xuY29uc3QgZ2V0UHJvcGVydHlBY2Nlc3MgPSAoXG4gIG5vZGU6IHRzLk5vZGUsXG4gIGNoZWNrZXI6IHRzLlR5cGVDaGVja2VyLFxuKTogUHJvcGVydHlBY2Nlc3NEZXRhaWxzIHwgdW5kZWZpbmVkID0+IHtcbiAgY29uc3QgcGFyZW50ID0gbm9kZS5wYXJlbnQ7XG5cbiAgaWYgKHRzLmlzUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKHBhcmVudCkgJiYgcGFyZW50Lm5hbWUgPT09IG5vZGUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogcGFyZW50Lm5hbWUudGV4dCxcbiAgICAgIHNvdXJjZVR5cGU6IGNoZWNrZXIuZ2V0VHlwZUF0TG9jYXRpb24ocGFyZW50LmV4cHJlc3Npb24pLFxuICAgIH07XG4gIH1cblxuICBpZiAoXG4gICAgdHMuaXNCaW5kaW5nRWxlbWVudChwYXJlbnQpICYmXG4gICAgKHBhcmVudC5uYW1lID09PSBub2RlIHx8IHBhcmVudC5wcm9wZXJ0eU5hbWUgPT09IG5vZGUpICYmXG4gICAgdHMuaXNPYmplY3RCaW5kaW5nUGF0dGVybihwYXJlbnQucGFyZW50KVxuICApIHtcbiAgICBjb25zdCBvd25lciA9IHBhcmVudC5wYXJlbnQucGFyZW50O1xuICAgIGNvbnN0IHNvdXJjZVR5cGUgPSB0cy5pc1ZhcmlhYmxlRGVjbGFyYXRpb24ob3duZXIpXG4gICAgICA/IG93bmVyLmluaXRpYWxpemVyID09PSB2b2lkIDBcbiAgICAgICAgPyB2b2lkIDBcbiAgICAgICAgOiBjaGVja2VyLmdldFR5cGVBdExvY2F0aW9uKG93bmVyLmluaXRpYWxpemVyKVxuICAgICAgOiB0cy5pc1BhcmFtZXRlcihvd25lcilcbiAgICAgICAgPyBjaGVja2VyLmdldFR5cGVBdExvY2F0aW9uKG93bmVyKVxuICAgICAgICA6IHZvaWQgMDtcbiAgICBjb25zdCBuYW1lTm9kZSA9IHBhcmVudC5wcm9wZXJ0eU5hbWUgPz8gcGFyZW50Lm5hbWU7XG5cbiAgICByZXR1cm4gc291cmNlVHlwZSA9PT0gdm9pZCAwXG4gICAgICA/IHZvaWQgMFxuICAgICAgOiB0cy5pc0lkZW50aWZpZXIobmFtZU5vZGUpIHx8IHRzLmlzU3RyaW5nTGl0ZXJhbExpa2UobmFtZU5vZGUpXG4gICAgICAgID8geyBuYW1lOiBuYW1lTm9kZS50ZXh0LCBzb3VyY2VUeXBlIH1cbiAgICAgICAgOiB2b2lkIDA7XG4gIH1cblxuICByZXR1cm4gdm9pZCAwO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhIHByb3BlcnR5IHJlYWQgdXNlcyBhIHN0cnVjdHVyYWxseSByZWxhdGVkIGhvc3Qgc2hhcGUuXG4gKiBAcGFyYW0gbm9kZSBDYW5kaWRhdGUgcmVhZCBub2RlLlxuICogQHBhcmFtIGNoZWNrZXIgVHlwZVNjcmlwdCB0eXBlIGNoZWNrZXIuXG4gKiBAcGFyYW0gbWVtYmVyIE1lbWJlciB3aG9zZSB1c2FnZSBpcyBiZWluZyBjaGVja2VkLlxuICogQHJldHVybnMgVHJ1ZSB3aGVuIHRoZSByZWFkIHJlc29sdmVzIHRocm91Z2ggYSBzdHJ1Y3R1cmFsIGNvbnRyYWN0LlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHVzZWQgPSBpc1N0cnVjdHVyYWxQcm9wZXJ0eVJlYWQobm9kZSwgY2hlY2tlciwgbWVtYmVyKTtcbiAqIGBgYFxuICovXG5jb25zdCBpc1N0cnVjdHVyYWxQcm9wZXJ0eVJlYWQgPSAoXG4gIG5vZGU6IHRzLk5vZGUsXG4gIGNoZWNrZXI6IHRzLlR5cGVDaGVja2VyLFxuICBtZW1iZXI6IFB1YmxpY01lbWJlcixcbik6IGJvb2xlYW4gPT4ge1xuICBjb25zdCBhY2Nlc3MgPSBnZXRQcm9wZXJ0eUFjY2Vzcyhub2RlLCBjaGVja2VyKTtcblxuICByZXR1cm4gKFxuICAgIGFjY2VzcyAhPT0gdm9pZCAwICYmXG4gICAgYWNjZXNzLm5hbWUgPT09IG1lbWJlci5tZW1iZXJOYW1lICYmXG4gICAgaGFzQ29tcGF0aWJsZU1lbWJlclNoYXBlKGFjY2Vzcy5zb3VyY2VUeXBlLCBtZW1iZXIsIGNoZWNrZXIpXG4gICk7XG59O1xuXG4vKipcbiAqIEdldHMgdGhlIGxpdGVyYWwgc3RyaW5nIGtleXMgcmVwcmVzZW50ZWQgYnkgYSBUeXBlU2NyaXB0IGtleSB0eXBlLlxuICogQHBhcmFtIHR5cGUgS2V5IHR5cGUgZnJvbSBhbiBlbGVtZW50IGFjY2VzcyBleHByZXNzaW9uLlxuICogQHJldHVybnMgTGl0ZXJhbCBrZXlzIHJlcHJlc2VudGVkIGJ5IHRoZSB0eXBlLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGtleXMgPSBnZXRTdHJpbmdMaXRlcmFsS2V5cyhrZXlUeXBlKTtcbiAqIGBgYFxuICovXG5jb25zdCBnZXRTdHJpbmdMaXRlcmFsS2V5cyA9ICh0eXBlOiB0cy5UeXBlKTogc3RyaW5nW10gPT4ge1xuICBpZiAodHlwZS5pc1VuaW9uT3JJbnRlcnNlY3Rpb24oKSkge1xuICAgIHJldHVybiB0eXBlLnR5cGVzLmZsYXRNYXAoKHBhcnQpID0+IGdldFN0cmluZ0xpdGVyYWxLZXlzKHBhcnQpKTtcbiAgfVxuXG4gIGlmICgodHlwZS5mbGFncyAmIHRzLlR5cGVGbGFncy5TdHJpbmdMaXRlcmFsKSAhPT0gMCkge1xuICAgIHJldHVybiBbKHR5cGUgYXMgdHMuU3RyaW5nTGl0ZXJhbFR5cGUpLnZhbHVlXTtcbiAgfVxuXG4gIHJldHVybiAodHlwZS5mbGFncyAmIHRzLlR5cGVGbGFncy5OdW1iZXJMaXRlcmFsKSA9PT0gMFxuICAgID8gW11cbiAgICA6IFsodHlwZSBhcyB0cy5OdW1iZXJMaXRlcmFsVHlwZSkudmFsdWUudG9GaXhlZCgwKV07XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGEgY29tcHV0ZWQgcHJvcGVydHkgYWNjZXNzIHJlc29sdmVzIHRvIGEgbWVtYmVyIHN5bWJvbC5cbiAqIEBwYXJhbSBub2RlIENhbmRpZGF0ZSBlbGVtZW50IGFjY2VzcyBleHByZXNzaW9uLlxuICogQHBhcmFtIGNoZWNrZXIgVHlwZVNjcmlwdCB0eXBlIGNoZWNrZXIuXG4gKiBAcGFyYW0gbWVtYmVyIE1lbWJlciB3aG9zZSB1c2FnZSBpcyBiZWluZyBjaGVja2VkLlxuICogQHBhcmFtIHJlbGF0ZWRTeW1ib2xzIE1lbWJlciBhbmQgY29udHJhY3Qgc3ltYm9scyBhY2NlcHRlZCBhcyB1c2FnZS5cbiAqIEByZXR1cm5zIFRydWUgd2hlbiBhIHJlc29sdmVkIGtleSBzZWxlY3RzIHRoZSBtZW1iZXIuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgdXNlZCA9IGlzQ29tcHV0ZWRNZW1iZXJSZWFkKG5vZGUsIGNoZWNrZXIsIG1lbWJlciwgcmVsYXRlZFN5bWJvbHMpO1xuICogYGBgXG4gKi9cbmNvbnN0IGlzQ29tcHV0ZWRNZW1iZXJSZWFkID0gKFxuICBub2RlOiB0cy5Ob2RlLFxuICBjaGVja2VyOiB0cy5UeXBlQ2hlY2tlcixcbiAgbWVtYmVyOiBQdWJsaWNNZW1iZXIsXG4gIHJlbGF0ZWRTeW1ib2xzOiB0cy5TeW1ib2xbXSxcbik6IGJvb2xlYW4gPT4ge1xuICBpZiAoIXRzLmlzRWxlbWVudEFjY2Vzc0V4cHJlc3Npb24obm9kZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBvYmplY3RUeXBlID0gY2hlY2tlci5nZXRUeXBlQXRMb2NhdGlvbihub2RlLmV4cHJlc3Npb24pO1xuICBjb25zdCBrZXlUeXBlID0gY2hlY2tlci5nZXRUeXBlQXRMb2NhdGlvbihub2RlLmFyZ3VtZW50RXhwcmVzc2lvbik7XG5cbiAgcmV0dXJuIGdldFN0cmluZ0xpdGVyYWxLZXlzKGtleVR5cGUpLnNvbWUoKG5hbWUpID0+IHtcbiAgICBpZiAobmFtZSAhPT0gbWVtYmVyLm1lbWJlck5hbWUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9wZXJ0eSA9IGNoZWNrZXIuZ2V0UHJvcGVydHlPZlR5cGUob2JqZWN0VHlwZSwgbmFtZSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgcHJvcGVydHkgIT09IHZvaWQgMCAmJlxuICAgICAgKHJlbGF0ZWRTeW1ib2xzLnNvbWUoKHN5bWJvbCkgPT4gaXNTYW1lU3ltYm9sKHN5bWJvbCwgcHJvcGVydHkpKSB8fFxuICAgICAgICBoYXNDb21wYXRpYmxlTWVtYmVyU2hhcGUob2JqZWN0VHlwZSwgbWVtYmVyLCBjaGVja2VyKSlcbiAgICApO1xuICB9KTtcbn07XG5cbmV4cG9ydCB7IGlzQ29tcHV0ZWRNZW1iZXJSZWFkLCBpc1N0cnVjdHVyYWxQcm9wZXJ0eVJlYWQgfTtcbiJdfQ==
|
|
115
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtYmVyLXVzYWdlLXJlZmVyZW5jZS11dGlsaXRpZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZG9tYWluL2FyY2hpdGVjdHVyZS9uby11bnVzZWQtcHVibGljLW1lbWJlcnMvbWVtYmVyLXVzYWdlLXJlZmVyZW5jZS11dGlsaXRpZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFJakMsT0FBTyxFQUNMLFlBQVksRUFDWixzQkFBc0IsR0FDdkIsTUFBTSx5REFBeUQsQ0FBQztBQUNqRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQVd6RTs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLGlCQUFpQixHQUFHLENBQ3hCLElBQWEsRUFDYixPQUF1QixFQUNZLEVBQUU7SUFDckMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUUzQixJQUFJLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQyxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ2xFLE9BQU87WUFDTCxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJO1lBQ3RCLFVBQVUsRUFBRSxPQUFPLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztTQUN6RCxDQUFDO0lBQ0osQ0FBQztJQUVELElBQ0UsRUFBRSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQztRQUMzQixDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLE1BQU0sQ0FBQyxZQUFZLEtBQUssSUFBSSxDQUFDO1FBQ3RELEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQ3hDLENBQUM7UUFDRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUNuQyxN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eXBlc2NyaXB0XCI7XG5cbmltcG9ydCB0eXBlIHsgUHVibGljTWVtYmVyIH0gZnJvbSBcIi4vbWVtYmVyLWRlY2xhcmF0aW9uLXV0aWxpdGllc1wiO1xuXG5pbXBvcnQge1xuICBpc1NhbWVTeW1ib2wsXG4gIHJlc29sdmVDYW5vbmljYWxTeW1ib2wsXG59IGZyb20gXCIuLi9uby11bnVzZWQtZXhwb3J0cy9uby11bnVzZWQtZXhwb3J0cy1zeW1ib2wtdXRpbGl0aWVzXCI7XG5pbXBvcnQgeyBoYXNDb21wYXRpYmxlTWVtYmVyU2hhcGUgfSBmcm9tIFwiLi9tZW1iZXItdXNhZ2UtdHlwZS11dGlsaXRpZXNcIjtcblxuLyoqIFNvdXJjZSB0eXBlIGFuZCBuYW1lIGZvciBhIHByb3BlcnR5IGFjY2VzcyBvciBkZXN0cnVjdHVyaW5nIHJlYWQuICovXG5pbnRlcmZhY2UgUHJvcGVydHlBY2Nlc3NEZXRhaWxzIHtcbiAgLyoqIFByb3BlcnR5IG5hbWUgc2VsZWN0ZWQgYnkgdGhlIGFjY2Vzcy4gKi9cbiAgbmFtZTogc3RyaW5nO1xuXG4gIC8qKiBUeXBlIG9mIHRoZSBvYmplY3Qgd2hvc2UgcHJvcGVydHkgaXMgcmVhZC4gKi9cbiAgc291cmNlVHlwZTogdHMuVHlwZTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBzb3VyY2UgdHlwZSBhbmQga2V5IGZvciBhIHByb3BlcnR5IHJlYWQgb3IgZGVzdHJ1Y3R1cmluZyB1c2UuXG4gKiBAcGFyYW0gbm9kZSBDYW5kaWRhdGUgbWVtYmVyLW5hbWUgbm9kZS5cbiAqIEBwYXJhbSBjaGVja2VyIFR5cGVTY3JpcHQgdHlwZSBjaGVja2VyLlxuICogQHJldHVybnMgQWNjZXNzIGRldGFpbHMgd2hlbiB0aGUgbm9kZSByZWFkcyBhIHByb3BlcnR5LlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGFjY2VzcyA9IGdldFByb3BlcnR5QWNjZXNzKG5vZGUsIGNoZWNrZXIpO1xuICogYGBgXG4gKi9cbmNvbnN0IGdldFByb3BlcnR5QWNjZXNzID0gKFxuICBub2RlOiB0cy5Ob2RlLFxuICBjaGVja2VyOiB0cy5UeXBlQ2hlY2tlcixcbik6IFByb3BlcnR5QWNjZXNzRGV0YWlscyB8IHVuZGVmaW5lZCA9PiB7XG4gIGNvbnN0IHBhcmVudCA9IG5vZGUucGFyZW50O1xuXG4gIGlmICh0cy5pc1Byb3BlcnR5QWNjZXNzRXhwcmVzc2lvbihwYXJlbnQpICYmIHBhcmVudC5uYW1lID09PSBub2RlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IHBhcmVudC5uYW1lLnRleHQsXG4gICAgICBzb3VyY2VUeXBlOiBjaGVja2VyLmdldFR5cGVBdExvY2F0aW9uKHBhcmVudC5leHByZXNzaW9uKSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKFxuICAgIHRzLmlzQmluZGluZ0VsZW1lbnQocGFyZW50KSAmJlxuICAgIChwYXJlbnQubmFtZSA9PT0gbm9kZSB8fCBwYXJlbnQucHJvcGVydHlOYW1lID09PSBub2RlKSAmJlxuICAgIHRzLmlzT2JqZWN0QmluZGluZ1BhdHRlcm4ocGFyZW50LnBhcmVudClcbiAgKSB7XG4gICAgY29uc3Qgb3duZXIgPSBwYXJlbnQucGFyZW50LnBhcmVudDtcbiAgICBjb25zdCBzb3VyY2VUeXBlID0gdHMuaXNWYXJpYWJsZURlY2xhcmF0aW9uKG93bmVyKVxuICAgICAgPyBjaGVja2VyLmdldFR5cGVBdExvY2F0aW9uKG93bmVyLmluaXRpYWxpemVyID8/IG93bmVyLm5hbWUpXG4gICAgICA6IHRzLmlzUGFyYW1ldGVyKG93bmVyKVxuICAgICAgICA/IGNoZWNrZXIuZ2V0VHlwZUF0TG9jYXRpb24ob3duZXIpXG4gICAgICAgIDogdm9pZCAwO1xuICAgIGNvbnN0IG5hbWVOb2RlID0gcGFyZW50LnByb3BlcnR5TmFtZSA/PyBwYXJlbnQubmFtZTtcblxuICAgIHJldHVybiBzb3VyY2VUeXBlID09PSB2b2lkIDBcbiAgICAgID8gdm9pZCAwXG4gICAgICA6IHRzLmlzSWRlbnRpZmllcihuYW1lTm9kZSkgfHwgdHMuaXNTdHJpbmdMaXRlcmFsTGlrZShuYW1lTm9kZSlcbiAgICAgICAgPyB7IG5hbWU6IG5hbWVOb2RlLnRleHQsIHNvdXJjZVR5cGUgfVxuICAgICAgICA6IHZvaWQgMDtcbiAgfVxuXG4gIHJldHVybiB2b2lkIDA7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGEgcHJvcGVydHkgcmVhZCB1c2VzIGEgc3RydWN0dXJhbGx5IHJlbGF0ZWQgaG9zdCBzaGFwZS5cbiAqIEBwYXJhbSBub2RlIENhbmRpZGF0ZSByZWFkIG5vZGUuXG4gKiBAcGFyYW0gY2hlY2tlciBUeXBlU2NyaXB0IHR5cGUgY2hlY2tlci5cbiAqIEBwYXJhbSBtZW1iZXIgTWVtYmVyIHdob3NlIHVzYWdlIGlzIGJlaW5nIGNoZWNrZWQuXG4gKiBAcmV0dXJucyBUcnVlIHdoZW4gdGhlIHJlYWQgcmVzb2x2ZXMgdGhyb3VnaCBhIHN0cnVjdHVyYWwgY29udHJhY3QuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgdXNlZCA9IGlzU3RydWN0dXJhbFByb3BlcnR5UmVhZChub2RlLCBjaGVja2VyLCBtZW1iZXIpO1xuICogYGBgXG4gKi9cbmNvbnN0IGlzU3RydWN0dXJhbFByb3BlcnR5UmVhZCA9IChcbiAgbm9kZTogdHMuTm9kZSxcbiAgY2hlY2tlcjogdHMuVHlwZUNoZWNrZXIsXG4gIG1lbWJlcjogUHVibGljTWVtYmVyLFxuKTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IGFjY2VzcyA9IGdldFByb3BlcnR5QWNjZXNzKG5vZGUsIGNoZWNrZXIpO1xuXG4gIHJldHVybiAoXG4gICAgYWNjZXNzICE9PSB2b2lkIDAgJiZcbiAgICBhY2Nlc3MubmFtZSA9PT0gbWVtYmVyLm1lbWJlck5hbWUgJiZcbiAgICBoYXNDb21wYXRpYmxlTWVtYmVyU2hhcGUoYWNjZXNzLnNvdXJjZVR5cGUsIG1lbWJlciwgY2hlY2tlcilcbiAgKTtcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgbGl0ZXJhbCBzdHJpbmcga2V5cyByZXByZXNlbnRlZCBieSBhIFR5cGVTY3JpcHQga2V5IHR5cGUuXG4gKiBAcGFyYW0gdHlwZSBLZXkgdHlwZSBmcm9tIGFuIGVsZW1lbnQgYWNjZXNzIGV4cHJlc3Npb24uXG4gKiBAcmV0dXJucyBMaXRlcmFsIGtleXMgcmVwcmVzZW50ZWQgYnkgdGhlIHR5cGUuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3Qga2V5cyA9IGdldFN0cmluZ0xpdGVyYWxLZXlzKGtleVR5cGUpO1xuICogYGBgXG4gKi9cbmNvbnN0IGdldFN0cmluZ0xpdGVyYWxLZXlzID0gKHR5cGU6IHRzLlR5cGUpOiBzdHJpbmdbXSA9PiB7XG4gIGlmICh0eXBlLmlzVW5pb25PckludGVyc2VjdGlvbigpKSB7XG4gICAgcmV0dXJuIHR5cGUudHlwZXMuZmxhdE1hcCgocGFydCkgPT4gZ2V0U3RyaW5nTGl0ZXJhbEtleXMocGFydCkpO1xuICB9XG5cbiAgaWYgKCh0eXBlLmZsYWdzICYgdHMuVHlwZUZsYWdzLlN0cmluZ0xpdGVyYWwpICE9PSAwKSB7XG4gICAgcmV0dXJuIFsodHlwZSBhcyB0cy5TdHJpbmdMaXRlcmFsVHlwZSkudmFsdWVdO1xuICB9XG5cbiAgcmV0dXJuICh0eXBlLmZsYWdzICYgdHMuVHlwZUZsYWdzLk51bWJlckxpdGVyYWwpID09PSAwXG4gICAgPyBbXVxuICAgIDogWyh0eXBlIGFzIHRzLk51bWJlckxpdGVyYWxUeXBlKS52YWx1ZS50b0ZpeGVkKDApXTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYSBjb21wdXRlZCBwcm9wZXJ0eSBhY2Nlc3MgcmVzb2x2ZXMgdG8gYSBtZW1iZXIgc3ltYm9sLlxuICogQHBhcmFtIG5vZGUgQ2FuZGlkYXRlIGVsZW1lbnQgYWNjZXNzIGV4cHJlc3Npb24uXG4gKiBAcGFyYW0gY2hlY2tlciBUeXBlU2NyaXB0IHR5cGUgY2hlY2tlci5cbiAqIEBwYXJhbSBtZW1iZXIgTWVtYmVyIHdob3NlIHVzYWdlIGlzIGJlaW5nIGNoZWNrZWQuXG4gKiBAcGFyYW0gcmVsYXRlZFN5bWJvbHMgTWVtYmVyIGFuZCBjb250cmFjdCBzeW1ib2xzIGFjY2VwdGVkIGFzIHVzYWdlLlxuICogQHJldHVybnMgVHJ1ZSB3aGVuIGEgcmVzb2x2ZWQga2V5IHNlbGVjdHMgdGhlIG1lbWJlci5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCB1c2VkID0gaXNDb21wdXRlZE1lbWJlclJlYWQobm9kZSwgY2hlY2tlciwgbWVtYmVyLCByZWxhdGVkU3ltYm9scyk7XG4gKiBgYGBcbiAqL1xuY29uc3QgaXNDb21wdXRlZE1lbWJlclJlYWQgPSAoXG4gIG5vZGU6IHRzLk5vZGUsXG4gIGNoZWNrZXI6IHRzLlR5cGVDaGVja2VyLFxuICBtZW1iZXI6IFB1YmxpY01lbWJlcixcbiAgcmVsYXRlZFN5bWJvbHM6IHRzLlN5bWJvbFtdLFxuKTogYm9vbGVhbiA9PiB7XG4gIGlmICghdHMuaXNFbGVtZW50QWNjZXNzRXhwcmVzc2lvbihub2RlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IG9iamVjdFR5cGUgPSBjaGVja2VyLmdldFR5cGVBdExvY2F0aW9uKG5vZGUuZXhwcmVzc2lvbik7XG4gIGNvbnN0IGtleVR5cGUgPSBjaGVja2VyLmdldFR5cGVBdExvY2F0aW9uKG5vZGUuYXJndW1lbnRFeHByZXNzaW9uKTtcblxuICBpZiAoXG4gICAgKGtleVR5cGUuZmxhZ3MgJiB0cy5UeXBlRmxhZ3MuU3RyaW5nKSAhPT0gMCAmJlxuICAgIHRzLmlzVmFyaWFibGVEZWNsYXJhdGlvbihtZW1iZXIuaG9zdERlY2xhcmF0aW9uKSAmJlxuICAgIG1lbWJlci5ob3N0U3ltYm9sICE9PSB2b2lkIDBcbiAgKSB7XG4gICAgY29uc3QgYWNjZXNzZWRTeW1ib2wgPSBjaGVja2VyLmdldFN5bWJvbEF0TG9jYXRpb24obm9kZS5leHByZXNzaW9uKTtcblxuICAgIGlmIChcbiAgICAgIGFjY2Vzc2VkU3ltYm9sICE9PSB2b2lkIDAgJiZcbiAgICAgIGlzU2FtZVN5bWJvbChcbiAgICAgICAgcmVzb2x2ZUNhbm9uaWNhbFN5bWJvbChhY2Nlc3NlZFN5bWJvbCwgY2hlY2tlciksXG4gICAgICAgIHJlc29sdmVDYW5vbmljYWxTeW1ib2wobWVtYmVyLmhvc3RTeW1ib2wsIGNoZWNrZXIpLFxuICAgICAgKVxuICAgICkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGdldFN0cmluZ0xpdGVyYWxLZXlzKGtleVR5cGUpLnNvbWUoKG5hbWUpID0+IHtcbiAgICBpZiAobmFtZSAhPT0gbWVtYmVyLm1lbWJlck5hbWUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9wZXJ0eSA9IGNoZWNrZXIuZ2V0UHJvcGVydHlPZlR5cGUob2JqZWN0VHlwZSwgbmFtZSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgcHJvcGVydHkgIT09IHZvaWQgMCAmJlxuICAgICAgKHJlbGF0ZWRTeW1ib2xzLnNvbWUoKHN5bWJvbCkgPT4gaXNTYW1lU3ltYm9sKHN5bWJvbCwgcHJvcGVydHkpKSB8fFxuICAgICAgICBoYXNDb21wYXRpYmxlTWVtYmVyU2hhcGUob2JqZWN0VHlwZSwgbWVtYmVyLCBjaGVja2VyKSlcbiAgICApO1xuICB9KTtcbn07XG5cbmV4cG9ydCB7IGlzQ29tcHV0ZWRNZW1iZXJSZWFkLCBpc1N0cnVjdHVyYWxQcm9wZXJ0eVJlYWQgfTtcbiJdfQ==
|
package/dist/domain/architecture/no-unused-public-members/member-usage-serialization-utilities.d.ts
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import * as ts from "typescript";
|
|
2
|
+
import type { PublicMember } from "./member-declaration-utilities.js";
|
|
3
|
+
/**
|
|
4
|
+
* Checks whether a local call serializes the value supplied to a parameter.
|
|
5
|
+
* @param node Candidate local call expression.
|
|
6
|
+
* @param checker TypeScript type checker.
|
|
7
|
+
* @param member Member whose value is being consumed.
|
|
8
|
+
* @param program TypeScript project program.
|
|
9
|
+
* @returns True when the argument is traced into standard JSON serialization.
|
|
10
|
+
* @example
|
|
11
|
+
* ```typescript
|
|
12
|
+
* const used = isLocalCallArgumentSerialized(node, checker, member, program);
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
declare const isLocalCallArgumentSerialized: (node: ts.Node, checker: ts.TypeChecker, member: PublicMember, program: ts.Program) => boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Checks whether an operation copies or serializes a member-bearing value.
|
|
18
|
+
* @param node Candidate spread or call expression.
|
|
19
|
+
* @param checker TypeScript type checker.
|
|
20
|
+
* @param member Member whose value is being consumed.
|
|
21
|
+
* @param program TypeScript program used to identify standard library declarations.
|
|
22
|
+
* @returns True when the operation consumes the object's own properties.
|
|
23
|
+
* @example
|
|
24
|
+
* ```typescript
|
|
25
|
+
* const used = isWholeObjectRead(node, checker, member, program);
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
declare const isWholeObjectRead: (node: ts.Node, checker: ts.TypeChecker, member: PublicMember, program: ts.Program) => boolean;
|
|
29
|
+
export { isLocalCallArgumentSerialized, isWholeObjectRead };
|
|
30
|
+
//# sourceMappingURL=member-usage-serialization-utilities.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"member-usage-serialization-utilities.d.ts","sourceRoot":"","sources":["../../../../src/domain/architecture/no-unused-public-members/member-usage-serialization-utilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAEjC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AASnE;;;;;;;;;;;GAWG;AACH,QAAA,MAAM,6BAA6B,GACjC,MAAM,EAAE,CAAC,IAAI,EACb,SAAS,EAAE,CAAC,WAAW,EACvB,QAAQ,YAAY,EACpB,SAAS,EAAE,CAAC,OAAO,KAClB,OAsDF,CAAC;AAmCF;;;;;;;;;;;GAWG;AACH,QAAA,MAAM,iBAAiB,GACrB,MAAM,EAAE,CAAC,IAAI,EACb,SAAS,EAAE,CAAC,WAAW,EACvB,QAAQ,YAAY,EACpB,SAAS,EAAE,CAAC,OAAO,KAClB,OA8BF,CAAC;AAEF,OAAO,EAAE,6BAA6B,EAAE,iBAAiB,EAAE,CAAC"}
|
package/dist/domain/architecture/no-unused-public-members/member-usage-serialization-utilities.js
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import * as ts from "typescript";
|
|
2
|
+
import { expressionReferencesSymbol } from "./member-usage-expression-reference-utilities.js";
|
|
3
|
+
import { carriesMember, containsSerializedMember, expressionCarriesMemberValue, } from "./member-usage-value-utilities.js";
|
|
4
|
+
/**
|
|
5
|
+
* Checks whether a local call serializes the value supplied to a parameter.
|
|
6
|
+
* @param node Candidate local call expression.
|
|
7
|
+
* @param checker TypeScript type checker.
|
|
8
|
+
* @param member Member whose value is being consumed.
|
|
9
|
+
* @param program TypeScript project program.
|
|
10
|
+
* @returns True when the argument is traced into standard JSON serialization.
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* const used = isLocalCallArgumentSerialized(node, checker, member, program);
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
const isLocalCallArgumentSerialized = (node, checker, member, program) => {
|
|
17
|
+
if (!ts.isCallExpression(node)) {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
const declaration = checker.getResolvedSignature(node)?.getDeclaration();
|
|
21
|
+
if (declaration === void 0 ||
|
|
22
|
+
!("body" in declaration) ||
|
|
23
|
+
declaration.body === void 0 ||
|
|
24
|
+
!ts.isBlock(declaration.body) ||
|
|
25
|
+
declaration.parameters.length === 0) {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
const body = declaration.body;
|
|
29
|
+
return node.arguments.some((argument, argumentIndex) => {
|
|
30
|
+
const parameter = declaration.parameters[Math.min(argumentIndex, declaration.parameters.length - 1)];
|
|
31
|
+
const parameterSymbol = parameter === void 0 || !ts.isIdentifier(parameter.name)
|
|
32
|
+
? void 0
|
|
33
|
+
: checker.getSymbolAtLocation(parameter.name);
|
|
34
|
+
if (parameterSymbol === void 0 ||
|
|
35
|
+
!expressionCarriesMemberValue(argument, checker, member)) {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
const isSerializedParameter = (candidate) => {
|
|
39
|
+
if (candidate !== declaration && ts.isFunctionLike(candidate)) {
|
|
40
|
+
return void 0;
|
|
41
|
+
}
|
|
42
|
+
return ts.isCallExpression(candidate) &&
|
|
43
|
+
isStandardJsonStringifyCall(candidate, checker, program) &&
|
|
44
|
+
candidate.arguments.length === 1 &&
|
|
45
|
+
candidate.arguments[0] !== void 0 &&
|
|
46
|
+
expressionReferencesSymbol(candidate.arguments[0], parameterSymbol, checker)
|
|
47
|
+
? true
|
|
48
|
+
: ts.forEachChild(candidate, isSerializedParameter);
|
|
49
|
+
};
|
|
50
|
+
return isSerializedParameter(body) === true;
|
|
51
|
+
});
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* Checks whether a call resolves to standard-library JSON.stringify.
|
|
55
|
+
* @param node Candidate call expression.
|
|
56
|
+
* @param checker TypeScript type checker.
|
|
57
|
+
* @param program TypeScript project used to identify standard declarations.
|
|
58
|
+
* @returns True when the call is the standard JSON serializer.
|
|
59
|
+
* @example
|
|
60
|
+
* ```typescript
|
|
61
|
+
* const isJson = isStandardJsonStringifyCall(node, checker, program);
|
|
62
|
+
* ```
|
|
63
|
+
*/
|
|
64
|
+
const isStandardJsonStringifyCall = (node, checker, program) => {
|
|
65
|
+
if (!ts.isCallExpression(node)) {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
const declaration = checker.getResolvedSignature(node)?.getDeclaration();
|
|
69
|
+
return (declaration !== void 0 &&
|
|
70
|
+
ts.isMethodSignature(declaration) &&
|
|
71
|
+
ts.isIdentifier(declaration.name) &&
|
|
72
|
+
declaration.name.text === "stringify" &&
|
|
73
|
+
ts.isInterfaceDeclaration(declaration.parent) &&
|
|
74
|
+
declaration.parent.name.text === "JSON" &&
|
|
75
|
+
program.isSourceFileDefaultLibrary(declaration.getSourceFile()));
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* Checks whether an operation copies or serializes a member-bearing value.
|
|
79
|
+
* @param node Candidate spread or call expression.
|
|
80
|
+
* @param checker TypeScript type checker.
|
|
81
|
+
* @param member Member whose value is being consumed.
|
|
82
|
+
* @param program TypeScript program used to identify standard library declarations.
|
|
83
|
+
* @returns True when the operation consumes the object's own properties.
|
|
84
|
+
* @example
|
|
85
|
+
* ```typescript
|
|
86
|
+
* const used = isWholeObjectRead(node, checker, member, program);
|
|
87
|
+
* ```
|
|
88
|
+
*/
|
|
89
|
+
const isWholeObjectRead = (node, checker, member, program) => {
|
|
90
|
+
if (ts.isClassDeclaration(member.hostDeclaration) &&
|
|
91
|
+
!ts.isPropertyDeclaration(member.declaration)) {
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
if (ts.isSpreadAssignment(node)) {
|
|
95
|
+
return carriesMember(node.expression, checker, member);
|
|
96
|
+
}
|
|
97
|
+
if (!ts.isCallExpression(node) || node.arguments.length !== 1) {
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
const argument = node.arguments[0];
|
|
101
|
+
return (isStandardJsonStringifyCall(node, checker, program) &&
|
|
102
|
+
argument !== void 0 &&
|
|
103
|
+
(carriesMember(argument, checker, member) ||
|
|
104
|
+
containsSerializedMember(checker.getTypeAtLocation(argument), checker, member, new Set(), 5)));
|
|
105
|
+
};
|
|
106
|
+
export { isLocalCallArgumentSerialized, isWholeObjectRead };
|
|
107
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtYmVyLXVzYWdlLXNlcmlhbGl6YXRpb24tdXRpbGl0aWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2RvbWFpbi9hcmNoaXRlY3R1cmUvbm8tdW51c2VkLXB1YmxpYy1tZW1iZXJzL21lbWJlci11c2FnZS1zZXJpYWxpemF0aW9uLXV0aWxpdGllcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQztBQUlqQyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUMzRixPQUFPLEVBQ0wsYUFBYSxFQUNiLHdCQUF3QixFQUN4Qiw0QkFBNEIsR0FDN0IsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV4Qzs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sNkJBQTZCLEdBQUcsQ0FDcEMsSUFBYSxFQUNiLE9BQXVCLEVBQ3ZCLE1BQW9CLEVBQ3BCLE9BQW1CLEVBQ1YsRUFBRTtJQUNYLElBQUksQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUMvQixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEVBQUUsY0FBYyxFQUFFLENBQUM7SUFDekUsSUFDRSxXQUFXLEtBQUssS0FBSyxDQUFDO1FBQ3RCLENBQUMsQ0FBQyxNQUFNLElBQUksV0FBVyxDQUFDO1FBQ3hCLFdBQVcsQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDO1FBQzNCLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO1FBQzdCLFdBQVcsQ0FBQyxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFDbkMsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUM7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QWtCLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQztRQUM3QyxDQUFDLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQzdDLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxJQUFJLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2hDLE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxJQUFJLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzlELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFbkMsT0FBTyxDQUNMLDJCQUEyQixDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDO1FBQ25ELFFBQVEsS0FBSyxLQUFLLENBQUM7UUFDbkIsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUM7WUFDdkMsd0JBQXdCLENBQ3RCLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsRUFDbkMsT0FBTyxFQUNQLE1BQU0sRUFDTixJQUFJLEdBQUcsRUFBRSxFQUNULENBQUMsQ0FDRixDQUFDLENBQ0wsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxpQkFBaUIsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdHMgZnJvbSBcInR5cGVzY3JpcHRcIjtcblxuaW1wb3J0IHR5cGUgeyBQdWJsaWNNZW1iZXIgfSBmcm9tIFwiLi9tZW1iZXItZGVjbGFyYXRpb24tdXRpbGl0aWVzXCI7XG5cbmltcG9ydCB7IGV4cHJlc3Npb25SZWZlcmVuY2VzU3ltYm9sIH0gZnJvbSBcIi4vbWVtYmVyLXVzYWdlLWV4cHJlc3Npb24tcmVmZXJlbmNlLXV0aWxpdGllc1wiO1xuaW1wb3J0IHtcbiAgY2Fycmllc01lbWJlcixcbiAgY29udGFpbnNTZXJpYWxpemVkTWVtYmVyLFxuICBleHByZXNzaW9uQ2Fycmllc01lbWJlclZhbHVlLFxufSBmcm9tIFwiLi9tZW1iZXItdXNhZ2UtdmFsdWUtdXRpbGl0aWVzXCI7XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYSBsb2NhbCBjYWxsIHNlcmlhbGl6ZXMgdGhlIHZhbHVlIHN1cHBsaWVkIHRvIGEgcGFyYW1ldGVyLlxuICogQHBhcmFtIG5vZGUgQ2FuZGlkYXRlIGxvY2FsIGNhbGwgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSBjaGVja2VyIFR5cGVTY3JpcHQgdHlwZSBjaGVja2VyLlxuICogQHBhcmFtIG1lbWJlciBNZW1iZXIgd2hvc2UgdmFsdWUgaXMgYmVpbmcgY29uc3VtZWQuXG4gKiBAcGFyYW0gcHJvZ3JhbSBUeXBlU2NyaXB0IHByb2plY3QgcHJvZ3JhbS5cbiAqIEByZXR1cm5zIFRydWUgd2hlbiB0aGUgYXJndW1lbnQgaXMgdHJhY2VkIGludG8gc3RhbmRhcmQgSlNPTiBzZXJpYWxpemF0aW9uLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHVzZWQgPSBpc0xvY2FsQ2FsbEFyZ3VtZW50U2VyaWFsaXplZChub2RlLCBjaGVja2VyLCBtZW1iZXIsIHByb2dyYW0pO1xuICogYGBgXG4gKi9cbmNvbnN0IGlzTG9jYWxDYWxsQXJndW1lbnRTZXJpYWxpemVkID0gKFxuICBub2RlOiB0cy5Ob2RlLFxuICBjaGVja2VyOiB0cy5UeXBlQ2hlY2tlcixcbiAgbWVtYmVyOiBQdWJsaWNNZW1iZXIsXG4gIHByb2dyYW06IHRzLlByb2dyYW0sXG4pOiBib29sZWFuID0+IHtcbiAgaWYgKCF0cy5pc0NhbGxFeHByZXNzaW9uKG5vZGUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgZGVjbGFyYXRpb24gPSBjaGVja2VyLmdldFJlc29sdmVkU2lnbmF0dXJlKG5vZGUpPy5nZXREZWNsYXJhdGlvbigpO1xuICBpZiAoXG4gICAgZGVjbGFyYXRpb24gPT09IHZvaWQgMCB8fFxuICAgICEoXCJib2R5XCIgaW4gZGVjbGFyYXRpb24pIHx8XG4gICAgZGVjbGFyYXRpb24uYm9keSA9PT0gdm9pZCAwIHx8XG4gICAgIXRzLmlzQmxvY2soZGVjbGFyYXRpb24uYm9keSkgfHxcbiAgICBkZWNsYXJhdGlvbi5wYXJhbWV0ZXJzLmxlbmd0aCA9PT0gMFxuICApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgYm9keSA9IGRlY2xhcmF0aW9uLmJvZHk7XG5cbiAgcmV0dXJuIG5vZGUuYXJndW1lbnRzLnNvbWUoKGFyZ3VtZW50LCBhcmd1bWVudEluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFyYW1ldGVyID1cbiAgICAgIGRlY2xhcmF0aW9uLnBhcmFtZXRlcnNbXG4gICAgICAgIE1hdGgubWluKGFyZ3VtZW50SW5kZXgsIGRlY2xhcmF0aW9uLnBhcmFtZXRlcnMubGVuZ3RoIC0gMSlcbiAgICAgIF07XG4gICAgY29uc3QgcGFyYW1ldGVyU3ltYm9sID1cbiAgICAgIHBhcmFtZXRlciA9PT0gdm9pZCAwIHx8ICF0cy5pc0lkZW50aWZpZXIocGFyYW1ldGVyLm5hbWUpXG4gICAgICAgID8gdm9pZCAwXG4gICAgICAgIDogY2hlY2tlci5nZXRTeW1ib2xBdExvY2F0aW9uKHBhcmFtZXRlci5uYW1lKTtcblxuICAgIGlmIChcbiAgICAgIHBhcmFtZXRlclN5bWJvbCA9PT0gdm9pZCAwIHx8XG4gICAgICAhZXhwcmVzc2lvbkNhcnJpZXNNZW1iZXJWYWx1ZShhcmd1bWVudCwgY2hlY2tlciwgbWVtYmVyKVxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGlzU2VyaWFsaXplZFBhcmFtZXRlciA9IChjYW5kaWRhdGU6IHRzLk5vZGUpOiB0cnVlIHwgdW5kZWZpbmVkID0+IHtcbiAgICAgIGlmIChjYW5kaWRhdGUgIT09IGRlY2xhcmF0aW9uICYmIHRzLmlzRnVuY3Rpb25MaWtlKGNhbmRpZGF0ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRzLmlzQ2FsbEV4cHJlc3Npb24oY2FuZGlkYXRlKSAmJlxuICAgICAgICBpc1N0YW5kYXJkSnNvblN0cmluZ2lmeUNhbGwoY2FuZGlkYXRlLCBjaGVja2VyLCBwcm9ncmFtKSAmJlxuICAgICAgICBjYW5kaWRhdGUuYXJndW1lbnRzLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICBjYW5kaWRhdGUuYXJndW1lbnRzWzBdICE9PSB2b2lkIDAgJiZcbiAgICAgICAgZXhwcmVzc2lvblJlZmVyZW5jZXNTeW1ib2woXG4gICAgICAgICAgY2FuZGlkYXRlLmFyZ3VtZW50c1swXSxcbiAgICAgICAgICBwYXJhbWV0ZXJTeW1ib2wsXG4gICAgICAgICAgY2hlY2tlcixcbiAgICAgICAgKVxuICAgICAgICA/IHRydWVcbiAgICAgICAgOiB0cy5mb3JFYWNoQ2hpbGQoY2FuZGlkYXRlLCBpc1NlcmlhbGl6ZWRQYXJhbWV0ZXIpO1xuICAgIH07XG5cbiAgICByZXR1cm4gaXNTZXJpYWxpemVkUGFyYW1ldGVyKGJvZHkpID09PSB0cnVlO1xuICB9KTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYSBjYWxsIHJlc29sdmVzIHRvIHN0YW5kYXJkLWxpYnJhcnkgSlNPTi5zdHJpbmdpZnkuXG4gKiBAcGFyYW0gbm9kZSBDYW5kaWRhdGUgY2FsbCBleHByZXNzaW9uLlxuICogQHBhcmFtIGNoZWNrZXIgVHlwZVNjcmlwdCB0eXBlIGNoZWNrZXIuXG4gKiBAcGFyYW0gcHJvZ3JhbSBUeXBlU2NyaXB0IHByb2plY3QgdXNlZCB0byBpZGVudGlmeSBzdGFuZGFyZCBkZWNsYXJhdGlvbnMuXG4gKiBAcmV0dXJucyBUcnVlIHdoZW4gdGhlIGNhbGwgaXMgdGhlIHN0YW5kYXJkIEpTT04gc2VyaWFsaXplci5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBpc0pzb24gPSBpc1N0YW5kYXJkSnNvblN0cmluZ2lmeUNhbGwobm9kZSwgY2hlY2tlciwgcHJvZ3JhbSk7XG4gKiBgYGBcbiAqL1xuY29uc3QgaXNTdGFuZGFyZEpzb25TdHJpbmdpZnlDYWxsID0gKFxuICBub2RlOiB0cy5Ob2RlLFxuICBjaGVja2VyOiB0cy5UeXBlQ2hlY2tlcixcbiAgcHJvZ3JhbTogdHMuUHJvZ3JhbSxcbik6IGJvb2xlYW4gPT4ge1xuICBpZiAoIXRzLmlzQ2FsbEV4cHJlc3Npb24obm9kZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBkZWNsYXJhdGlvbiA9IGNoZWNrZXIuZ2V0UmVzb2x2ZWRTaWduYXR1cmUobm9kZSk/LmdldERlY2xhcmF0aW9uKCk7XG5cbiAgcmV0dXJuIChcbiAgICBkZWNsYXJhdGlvbiAhPT0gdm9pZCAwICYmXG4gICAgdHMuaXNNZXRob2RTaWduYXR1cmUoZGVjbGFyYXRpb24pICYmXG4gICAgdHMuaXNJZGVudGlmaWVyKGRlY2xhcmF0aW9uLm5hbWUpICYmXG4gICAgZGVjbGFyYXRpb24ubmFtZS50ZXh0ID09PSBcInN0cmluZ2lmeVwiICYmXG4gICAgdHMuaXNJbnRlcmZhY2VEZWNsYXJhdGlvbihkZWNsYXJhdGlvbi5wYXJlbnQpICYmXG4gICAgZGVjbGFyYXRpb24ucGFyZW50Lm5hbWUudGV4dCA9PT0gXCJKU09OXCIgJiZcbiAgICBwcm9ncmFtLmlzU291cmNlRmlsZURlZmF1bHRMaWJyYXJ5KGRlY2xhcmF0aW9uLmdldFNvdXJjZUZpbGUoKSlcbiAgKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYW4gb3BlcmF0aW9uIGNvcGllcyBvciBzZXJpYWxpemVzIGEgbWVtYmVyLWJlYXJpbmcgdmFsdWUuXG4gKiBAcGFyYW0gbm9kZSBDYW5kaWRhdGUgc3ByZWFkIG9yIGNhbGwgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSBjaGVja2VyIFR5cGVTY3JpcHQgdHlwZSBjaGVja2VyLlxuICogQHBhcmFtIG1lbWJlciBNZW1iZXIgd2hvc2UgdmFsdWUgaXMgYmVpbmcgY29uc3VtZWQuXG4gKiBAcGFyYW0gcHJvZ3JhbSBUeXBlU2NyaXB0IHByb2dyYW0gdXNlZCB0byBpZGVudGlmeSBzdGFuZGFyZCBsaWJyYXJ5IGRlY2xhcmF0aW9ucy5cbiAqIEByZXR1cm5zIFRydWUgd2hlbiB0aGUgb3BlcmF0aW9uIGNvbnN1bWVzIHRoZSBvYmplY3QncyBvd24gcHJvcGVydGllcy5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCB1c2VkID0gaXNXaG9sZU9iamVjdFJlYWQobm9kZSwgY2hlY2tlciwgbWVtYmVyLCBwcm9ncmFtKTtcbiAqIGBgYFxuICovXG5jb25zdCBpc1dob2xlT2JqZWN0UmVhZCA9IChcbiAgbm9kZTogdHMuTm9kZSxcbiAgY2hlY2tlcjogdHMuVHlwZUNoZWNrZXIsXG4gIG1lbWJlcjogUHVibGljTWVtYmVyLFxuICBwcm9ncmFtOiB0cy5Qcm9ncmFtLFxuKTogYm9vbGVhbiA9PiB7XG4gIGlmIChcbiAgICB0cy5pc0NsYXNzRGVjbGFyYXRpb24obWVtYmVyLmhvc3REZWNsYXJhdGlvbikgJiZcbiAgICAhdHMuaXNQcm9wZXJ0eURlY2xhcmF0aW9uKG1lbWJlci5kZWNsYXJhdGlvbilcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHRzLmlzU3ByZWFkQXNzaWdubWVudChub2RlKSkge1xuICAgIHJldHVybiBjYXJyaWVzTWVtYmVyKG5vZGUuZXhwcmVzc2lvbiwgY2hlY2tlciwgbWVtYmVyKTtcbiAgfVxuXG4gIGlmICghdHMuaXNDYWxsRXhwcmVzc2lvbihub2RlKSB8fCBub2RlLmFyZ3VtZW50cy5sZW5ndGggIT09IDEpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBhcmd1bWVudCA9IG5vZGUuYXJndW1lbnRzWzBdO1xuXG4gIHJldHVybiAoXG4gICAgaXNTdGFuZGFyZEpzb25TdHJpbmdpZnlDYWxsKG5vZGUsIGNoZWNrZXIsIHByb2dyYW0pICYmXG4gICAgYXJndW1lbnQgIT09IHZvaWQgMCAmJlxuICAgIChjYXJyaWVzTWVtYmVyKGFyZ3VtZW50LCBjaGVja2VyLCBtZW1iZXIpIHx8XG4gICAgICBjb250YWluc1NlcmlhbGl6ZWRNZW1iZXIoXG4gICAgICAgIGNoZWNrZXIuZ2V0VHlwZUF0TG9jYXRpb24oYXJndW1lbnQpLFxuICAgICAgICBjaGVja2VyLFxuICAgICAgICBtZW1iZXIsXG4gICAgICAgIG5ldyBTZXQoKSxcbiAgICAgICAgNSxcbiAgICAgICkpXG4gICk7XG59O1xuXG5leHBvcnQgeyBpc0xvY2FsQ2FsbEFyZ3VtZW50U2VyaWFsaXplZCwgaXNXaG9sZU9iamVjdFJlYWQgfTtcbiJdfQ==
|
|
@@ -25,18 +25,40 @@ declare const hasCompatibleMemberShape: (valueType: ts.Type, member: PublicMembe
|
|
|
25
25
|
* ```
|
|
26
26
|
*/
|
|
27
27
|
declare const getContextualPropertyType: (objectType: ts.Type | undefined, propertyName: string, location: ts.Node, checker: ts.TypeChecker) => ts.Type | undefined;
|
|
28
|
+
/**
|
|
29
|
+
* Gets the resolved parameter type for a call argument.
|
|
30
|
+
* @param call Call expression containing the argument.
|
|
31
|
+
* @param argument Argument expression to inspect.
|
|
32
|
+
* @param checker TypeScript type checker.
|
|
33
|
+
* @returns Parameter type when TypeScript resolves the call.
|
|
34
|
+
* @example
|
|
35
|
+
* ```typescript
|
|
36
|
+
* const parameterType = getCallArgumentType(call, argument, checker);
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
declare const getCallArgumentType: (call: ts.CallExpression, argument: ts.Expression, checker: ts.TypeChecker) => ts.Type | undefined;
|
|
40
|
+
/**
|
|
41
|
+
* Checks whether a method declaration contains only a contract.
|
|
42
|
+
* @param declaration Candidate method declaration.
|
|
43
|
+
* @returns True when the declaration has no implementation body.
|
|
44
|
+
* @example
|
|
45
|
+
* ```typescript
|
|
46
|
+
* const declarationOnly = isDeclarationOnlyMethod(declaration);
|
|
47
|
+
* ```
|
|
48
|
+
*/
|
|
49
|
+
declare const isDeclarationOnlyMethod: (declaration: ts.Node) => boolean;
|
|
28
50
|
/**
|
|
29
51
|
* Checks whether a typed handoff carries a member into a compatible contract.
|
|
30
|
-
* @param
|
|
52
|
+
* @param sourceExpression Value being forwarded.
|
|
31
53
|
* @param targetType Type expected at the receiving boundary.
|
|
32
54
|
* @param member Member whose usage is being checked.
|
|
33
55
|
* @param checker TypeScript type checker.
|
|
34
56
|
* @returns True when the receiving contract accepts the corresponding member.
|
|
35
57
|
* @example
|
|
36
58
|
* ```typescript
|
|
37
|
-
* const used = isMemberHandoff(
|
|
59
|
+
* const used = isMemberHandoff(expression, targetType, member, checker);
|
|
38
60
|
* ```
|
|
39
61
|
*/
|
|
40
|
-
declare const isMemberHandoff: (
|
|
41
|
-
export { getContextualPropertyType, hasCompatibleMemberShape, isMemberHandoff };
|
|
62
|
+
declare const isMemberHandoff: (sourceExpression: ts.Expression, targetType: ts.Type | undefined, member: PublicMember, checker: ts.TypeChecker) => boolean;
|
|
63
|
+
export { getCallArgumentType, getContextualPropertyType, hasCompatibleMemberShape, isDeclarationOnlyMethod, isMemberHandoff, };
|
|
42
64
|
//# sourceMappingURL=member-usage-type-utilities.d.ts.map
|
package/dist/domain/architecture/no-unused-public-members/member-usage-type-utilities.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"member-usage-type-utilities.d.ts","sourceRoot":"","sources":["../../../../src/domain/architecture/no-unused-public-members/member-usage-type-utilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAEjC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"member-usage-type-utilities.d.ts","sourceRoot":"","sources":["../../../../src/domain/architecture/no-unused-public-members/member-usage-type-utilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAEjC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AA0BnE;;;;;;;;;;GAUG;AACH,QAAA,MAAM,wBAAwB,GAC5B,WAAW,EAAE,CAAC,IAAI,EAClB,QAAQ,YAAY,EACpB,SAAS,EAAE,CAAC,WAAW,KACtB,OAgBF,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,QAAA,MAAM,yBAAyB,GAC7B,YAAY,EAAE,CAAC,IAAI,GAAG,SAAS,EAC/B,cAAc,MAAM,EACpB,UAAU,EAAE,CAAC,IAAI,EACjB,SAAS,EAAE,CAAC,WAAW,KACtB,EAAE,CAAC,IAAI,GAAG,SASZ,CAAC;AAEF;;;;;;;;;;GAUG;AACH,QAAA,MAAM,mBAAmB,GACvB,MAAM,EAAE,CAAC,cAAc,EACvB,UAAU,EAAE,CAAC,UAAU,EACvB,SAAS,EAAE,CAAC,WAAW,KACtB,EAAE,CAAC,IAAI,GAAG,SAeZ,CAAC;AAEF;;;;;;;;GAQG;AACH,QAAA,MAAM,uBAAuB,GAAI,aAAa,EAAE,CAAC,IAAI,KAAG,OAIc,CAAC;AAyBvE;;;;;;;;;;;GAWG;AACH,QAAA,MAAM,eAAe,GACnB,kBAAkB,EAAE,CAAC,UAAU,EAC/B,YAAY,EAAE,CAAC,IAAI,GAAG,SAAS,EAC/B,QAAQ,YAAY,EACpB,SAAS,EAAE,CAAC,WAAW,KACtB,OAgDF,CAAC;AAEF,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,wBAAwB,EACxB,uBAAuB,EACvB,eAAe,GAChB,CAAC"}
|