@checkdigit/eslint-plugin 6.6.0-PR.75-0fc6 → 6.6.0-PR.77-885a
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-cjs/index.cjs +779 -2464
- package/dist-cjs/metafile.json +203 -795
- package/dist-mjs/index.mjs +3 -77
- package/dist-mjs/require-resolve-full-response.mjs +5 -2
- package/dist-types/index.d.ts +1 -51
- package/dist-types/require-resolve-full-response.d.ts +3 -1
- package/package.json +1 -1
- package/src/index.ts +0 -74
- package/src/library/format.ts +1 -1
- package/src/library/tree.ts +1 -1
- package/src/library/ts-tree.ts +1 -1
- package/src/library/variable.ts +1 -1
- package/src/require-resolve-full-response.ts +2 -1
- package/dist-mjs/agent/add-url-domain.mjs +0 -61
- package/dist-mjs/agent/fetch-response-body-json.mjs +0 -63
- package/dist-mjs/agent/fetch-response-header-getter.mjs +0 -117
- package/dist-mjs/agent/fetch-then.mjs +0 -269
- package/dist-mjs/agent/fetch.mjs +0 -34
- package/dist-mjs/agent/no-fixture.mjs +0 -328
- package/dist-mjs/agent/no-full-response.mjs +0 -67
- package/dist-mjs/agent/no-mapped-response.mjs +0 -75
- package/dist-mjs/agent/no-service-wrapper.mjs +0 -184
- package/dist-mjs/agent/no-status-code.mjs +0 -59
- package/dist-mjs/agent/no-unused-function-argument.mjs +0 -79
- package/dist-mjs/agent/no-unused-service-variable.mjs +0 -75
- package/dist-mjs/agent/response-reference.mjs +0 -56
- package/dist-mjs/agent/url.mjs +0 -26
- package/dist-mjs/no-duplicated-imports.mjs +0 -87
- package/dist-mjs/require-fixed-services-import.mjs +0 -46
- package/dist-mjs/require-type-out-of-type-only-imports.mjs +0 -48
- package/dist-types/agent/add-url-domain.d.ts +0 -4
- package/dist-types/agent/fetch-response-body-json.d.ts +0 -4
- package/dist-types/agent/fetch-response-header-getter.d.ts +0 -4
- package/dist-types/agent/fetch-then.d.ts +0 -4
- package/dist-types/agent/fetch.d.ts +0 -4
- package/dist-types/agent/no-fixture.d.ts +0 -4
- package/dist-types/agent/no-full-response.d.ts +0 -4
- package/dist-types/agent/no-mapped-response.d.ts +0 -4
- package/dist-types/agent/no-service-wrapper.d.ts +0 -4
- package/dist-types/agent/no-status-code.d.ts +0 -4
- package/dist-types/agent/no-unused-function-argument.d.ts +0 -4
- package/dist-types/agent/no-unused-service-variable.d.ts +0 -4
- package/dist-types/agent/response-reference.d.ts +0 -16
- package/dist-types/agent/url.d.ts +0 -5
- package/dist-types/no-duplicated-imports.d.ts +0 -4
- package/dist-types/require-fixed-services-import.d.ts +0 -4
- package/dist-types/require-type-out-of-type-only-imports.d.ts +0 -4
- package/src/agent/add-url-domain.ts +0 -75
- package/src/agent/fetch-response-body-json.ts +0 -76
- package/src/agent/fetch-response-header-getter.ts +0 -148
- package/src/agent/fetch-then.ts +0 -354
- package/src/agent/fetch.ts +0 -52
- package/src/agent/no-fixture.ts +0 -453
- package/src/agent/no-full-response.ts +0 -75
- package/src/agent/no-mapped-response.ts +0 -84
- package/src/agent/no-service-wrapper.ts +0 -238
- package/src/agent/no-status-code.ts +0 -71
- package/src/agent/no-unused-function-argument.ts +0 -96
- package/src/agent/no-unused-service-variable.ts +0 -92
- package/src/agent/response-reference.ts +0 -100
- package/src/agent/url.ts +0 -23
- package/src/no-duplicated-imports.ts +0 -116
- package/src/require-fixed-services-import.ts +0 -52
- package/src/require-type-out-of-type-only-imports.ts +0 -63
|
@@ -1,184 +0,0 @@
|
|
|
1
|
-
// src/agent/no-service-wrapper.ts
|
|
2
|
-
import { AST_NODE_TYPES, ESLintUtils } from "@typescript-eslint/utils";
|
|
3
|
-
import { DefinitionType } from "@typescript-eslint/scope-manager";
|
|
4
|
-
import { PLAIN_URL_REGEXP, TOKENIZED_URL_REGEXP, replaceEndpointUrlPrefixWithDomain } from "./url.mjs";
|
|
5
|
-
import { strict as assert } from "node:assert";
|
|
6
|
-
import getDocumentationUrl from "../get-documentation-url.mjs";
|
|
7
|
-
import { getEnclosingScopeNode } from "../library/ts-tree.mjs";
|
|
8
|
-
import { getIndentation } from "../library/format.mjs";
|
|
9
|
-
var ruleId = "no-service-wrapper";
|
|
10
|
-
var createRule = ESLintUtils.RuleCreator((name) => getDocumentationUrl(name));
|
|
11
|
-
var rule = createRule({
|
|
12
|
-
name: ruleId,
|
|
13
|
-
meta: {
|
|
14
|
-
type: "suggestion",
|
|
15
|
-
docs: {
|
|
16
|
-
description: "Prefer native fetch over customized service wrapper."
|
|
17
|
-
},
|
|
18
|
-
messages: {
|
|
19
|
-
preferNativeFetch: "Prefer native fetch over customized service wrapper.",
|
|
20
|
-
invalidOptions: '"options" argument should be provided with "resolveWithFullResponse" property set as "true". Otherwise, it indicates that the response body will be obtained without status code assertion which could result in unexpected issue. Please manually convert the usage of customized service wrapper call to native fetch.',
|
|
21
|
-
unknownError: 'Unknown error occurred in file "{{fileName}}": {{ error }}. Please manually convert the usage of customized service wrapper call to native fetch.'
|
|
22
|
-
},
|
|
23
|
-
fixable: "code",
|
|
24
|
-
schema: []
|
|
25
|
-
},
|
|
26
|
-
defaultOptions: [],
|
|
27
|
-
create(context) {
|
|
28
|
-
const sourceCode = context.sourceCode;
|
|
29
|
-
const scopeManager = sourceCode.scopeManager;
|
|
30
|
-
const parserService = ESLintUtils.getParserServices(context);
|
|
31
|
-
const typeChecker = parserService.program.getTypeChecker();
|
|
32
|
-
function isUrlArgumentValid(urlArgument, scope) {
|
|
33
|
-
if (urlArgument?.type === AST_NODE_TYPES.Literal && typeof urlArgument.value === "string" || urlArgument?.type === AST_NODE_TYPES.TemplateLiteral) {
|
|
34
|
-
const urlText = sourceCode.getText(urlArgument);
|
|
35
|
-
return PLAIN_URL_REGEXP.test(urlText) || TOKENIZED_URL_REGEXP.test(urlText);
|
|
36
|
-
}
|
|
37
|
-
if (urlArgument?.type === AST_NODE_TYPES.Identifier) {
|
|
38
|
-
const foundVariable = scope.variables.find((variable) => variable.name === urlArgument.name);
|
|
39
|
-
if (foundVariable) {
|
|
40
|
-
const variableDefinition = foundVariable.defs.find((def) => def.type === DefinitionType.Variable);
|
|
41
|
-
assert.ok(variableDefinition, `Variable "${urlArgument.name}" not defined in scope`);
|
|
42
|
-
const variableDefinitionNode = variableDefinition.node;
|
|
43
|
-
assert.ok(variableDefinitionNode.type === AST_NODE_TYPES.VariableDeclarator);
|
|
44
|
-
assert.ok(variableDefinitionNode.init, "Variable definition node has no init property");
|
|
45
|
-
return isUrlArgumentValid(variableDefinitionNode.init, scope);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
return false;
|
|
49
|
-
}
|
|
50
|
-
function getType(identifier) {
|
|
51
|
-
const variable = parserService.esTreeNodeToTSNodeMap.get(identifier);
|
|
52
|
-
const variableType = typeChecker.getTypeAtLocation(variable);
|
|
53
|
-
return typeChecker.typeToString(variableType);
|
|
54
|
-
}
|
|
55
|
-
function isServiceLikeName(name) {
|
|
56
|
-
return /.*[Ss]ervice$/u.test(name);
|
|
57
|
-
}
|
|
58
|
-
function isCalleeServiceWrapper(serviceCall) {
|
|
59
|
-
const callee = serviceCall.callee;
|
|
60
|
-
if (callee.type !== AST_NODE_TYPES.MemberExpression) {
|
|
61
|
-
return false;
|
|
62
|
-
}
|
|
63
|
-
const endpoint = callee.object;
|
|
64
|
-
if (endpoint.type === AST_NODE_TYPES.Identifier) {
|
|
65
|
-
return getType(endpoint) === "Endpoint" || isServiceLikeName(endpoint.name);
|
|
66
|
-
}
|
|
67
|
-
if (endpoint.type !== AST_NODE_TYPES.CallExpression) {
|
|
68
|
-
return false;
|
|
69
|
-
}
|
|
70
|
-
const [contextArgument] = endpoint.arguments;
|
|
71
|
-
if (contextArgument?.type !== AST_NODE_TYPES.Identifier) {
|
|
72
|
-
return false;
|
|
73
|
-
}
|
|
74
|
-
if (contextArgument.name !== "EMPTY_CONTEXT" && getType(contextArgument) !== "InboundContext") {
|
|
75
|
-
return false;
|
|
76
|
-
}
|
|
77
|
-
const service = endpoint.callee;
|
|
78
|
-
if (service.type === AST_NODE_TYPES.Identifier) {
|
|
79
|
-
return getType(service) === "ResolvedService";
|
|
80
|
-
}
|
|
81
|
-
if (service.type !== AST_NODE_TYPES.MemberExpression) {
|
|
82
|
-
return false;
|
|
83
|
-
}
|
|
84
|
-
const services = service.object;
|
|
85
|
-
if (services.type === AST_NODE_TYPES.Identifier) {
|
|
86
|
-
return getType(services) === "ResolvedServices";
|
|
87
|
-
}
|
|
88
|
-
if (services.type !== AST_NODE_TYPES.MemberExpression) {
|
|
89
|
-
return false;
|
|
90
|
-
}
|
|
91
|
-
const configuration = services.object;
|
|
92
|
-
if (configuration.type === AST_NODE_TYPES.Identifier) {
|
|
93
|
-
return ["Configuration", "Configuration<ResolvedServices>"].includes(getType(configuration));
|
|
94
|
-
}
|
|
95
|
-
if (configuration.type !== AST_NODE_TYPES.MemberExpression) {
|
|
96
|
-
return false;
|
|
97
|
-
}
|
|
98
|
-
const fixture = configuration.object;
|
|
99
|
-
if (fixture.type === AST_NODE_TYPES.Identifier) {
|
|
100
|
-
return fixture.name === "fixture" || getType(fixture) === "Fixture";
|
|
101
|
-
}
|
|
102
|
-
return false;
|
|
103
|
-
}
|
|
104
|
-
return {
|
|
105
|
-
"CallExpression[callee.property.name=/^(head|get|put|post|del|patch)$/]": (serviceCall) => {
|
|
106
|
-
try {
|
|
107
|
-
if (!isCalleeServiceWrapper(serviceCall)) {
|
|
108
|
-
return;
|
|
109
|
-
}
|
|
110
|
-
const enclosingScopeNode = getEnclosingScopeNode(serviceCall);
|
|
111
|
-
assert.ok(enclosingScopeNode, "enclosingScopeNode is undefined");
|
|
112
|
-
const scope = scopeManager?.acquire(enclosingScopeNode);
|
|
113
|
-
assert.ok(scope, "scope is undefined");
|
|
114
|
-
const urlArgument = serviceCall.arguments[0];
|
|
115
|
-
if (!isUrlArgumentValid(urlArgument, scope)) {
|
|
116
|
-
return;
|
|
117
|
-
}
|
|
118
|
-
assert.ok(serviceCall.callee.type === AST_NODE_TYPES.MemberExpression);
|
|
119
|
-
assert.ok(serviceCall.callee.property.type === AST_NODE_TYPES.Identifier);
|
|
120
|
-
const method = serviceCall.callee.property.name;
|
|
121
|
-
let requestBodyProperty = ["put", "post", "options"].includes(method) ? serviceCall.arguments[1] : void 0;
|
|
122
|
-
if (requestBodyProperty !== void 0 && requestBodyProperty.type === AST_NODE_TYPES.Identifier && requestBodyProperty.name === "undefined") {
|
|
123
|
-
requestBodyProperty = void 0;
|
|
124
|
-
}
|
|
125
|
-
const optionsArgument = ["get", "head", "del"].includes(method) ? serviceCall.arguments[1] : serviceCall.arguments[2];
|
|
126
|
-
if (optionsArgument === void 0 || optionsArgument.type !== AST_NODE_TYPES.ObjectExpression) {
|
|
127
|
-
context.report({
|
|
128
|
-
node: serviceCall,
|
|
129
|
-
messageId: "invalidOptions"
|
|
130
|
-
});
|
|
131
|
-
return;
|
|
132
|
-
}
|
|
133
|
-
const resolveWithFullResponseProperty = optionsArgument.properties.find(
|
|
134
|
-
(property) => property.type === AST_NODE_TYPES.Property && property.key.type === AST_NODE_TYPES.Identifier && property.key.name === "resolveWithFullResponse"
|
|
135
|
-
);
|
|
136
|
-
if (resolveWithFullResponseProperty?.type !== AST_NODE_TYPES.Property || resolveWithFullResponseProperty.value.type !== AST_NODE_TYPES.Literal || resolveWithFullResponseProperty.value.value !== true) {
|
|
137
|
-
context.report({
|
|
138
|
-
node: optionsArgument,
|
|
139
|
-
messageId: "invalidOptions"
|
|
140
|
-
});
|
|
141
|
-
return;
|
|
142
|
-
}
|
|
143
|
-
const requestHeadersProperty = optionsArgument.properties.find(
|
|
144
|
-
(property) => property.type === AST_NODE_TYPES.Property && property.key.type === AST_NODE_TYPES.Identifier && property.key.name === "headers"
|
|
145
|
-
);
|
|
146
|
-
context.report({
|
|
147
|
-
messageId: "preferNativeFetch",
|
|
148
|
-
node: serviceCall,
|
|
149
|
-
fix(fixer) {
|
|
150
|
-
const url = sourceCode.getText(urlArgument);
|
|
151
|
-
const replacedUrl = replaceEndpointUrlPrefixWithDomain(url);
|
|
152
|
-
const indentation = getIndentation(serviceCall, sourceCode);
|
|
153
|
-
const fetchText = [
|
|
154
|
-
`fetch(${replacedUrl}, {`,
|
|
155
|
-
` method: '${method.toLowerCase() === "del" ? "DELETE" : method.toUpperCase()}',`,
|
|
156
|
-
...requestHeadersProperty ? [` ${sourceCode.getText(requestHeadersProperty)},`] : [],
|
|
157
|
-
...requestBodyProperty ? [` body: JSON.stringify(${sourceCode.getText(requestBodyProperty)}),`] : [],
|
|
158
|
-
"})"
|
|
159
|
-
].join(`
|
|
160
|
-
${indentation}`);
|
|
161
|
-
return fixer.replaceText(serviceCall, fetchText);
|
|
162
|
-
}
|
|
163
|
-
});
|
|
164
|
-
} catch (error) {
|
|
165
|
-
console.error(`Failed to apply ${ruleId} rule for file "${context.filename}":`, error);
|
|
166
|
-
context.report({
|
|
167
|
-
node: serviceCall,
|
|
168
|
-
messageId: "unknownError",
|
|
169
|
-
data: {
|
|
170
|
-
fileName: context.filename,
|
|
171
|
-
error: error instanceof Error ? error.toString() : JSON.stringify(error)
|
|
172
|
-
}
|
|
173
|
-
});
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
};
|
|
177
|
-
}
|
|
178
|
-
});
|
|
179
|
-
var no_service_wrapper_default = rule;
|
|
180
|
-
export {
|
|
181
|
-
no_service_wrapper_default as default,
|
|
182
|
-
ruleId
|
|
183
|
-
};
|
|
184
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FnZW50L25vLXNlcnZpY2Utd3JhcHBlci50cyJdLAogICJtYXBwaW5ncyI6ICI7QUFRQSxTQUFTLGdCQUFnQixtQkFBNkI7QUFDdEQsU0FBUyxzQkFBa0M7QUFDM0MsU0FBUyxrQkFBa0Isc0JBQXNCLDBDQUEwQztBQUMzRixTQUFTLFVBQVUsY0FBYztBQUNqQyxPQUFPLHlCQUF5QjtBQUNoQyxTQUFTLDZCQUE2QjtBQUN0QyxTQUFTLHNCQUFzQjtBQUV4QixJQUFNLFNBQVM7QUFFdEIsSUFBTSxhQUFhLFlBQVksWUFBWSxDQUFDLFNBQVMsb0JBQW9CLElBQUksQ0FBQztBQUU5RSxJQUFNLE9BQU8sV0FBVztBQUFBLEVBQ3RCLE1BQU07QUFBQSxFQUNOLE1BQU07QUFBQSxJQUNKLE1BQU07QUFBQSxJQUNOLE1BQU07QUFBQSxNQUNKLGFBQWE7QUFBQSxJQUNmO0FBQUEsSUFDQSxVQUFVO0FBQUEsTUFDUixtQkFBbUI7QUFBQSxNQUNuQixnQkFDRTtBQUFBLE1BQ0YsY0FDRTtBQUFBLElBQ0o7QUFBQSxJQUNBLFNBQVM7QUFBQSxJQUNULFFBQVEsQ0FBQztBQUFBLEVBQ1g7QUFBQSxFQUNBLGdCQUFnQixDQUFDO0FBQUEsRUFDakIsT0FBTyxTQUFTO0FBQ2QsVUFBTSxhQUFhLFFBQVE7QUFDM0IsVUFBTSxlQUFlLFdBQVc7QUFDaEMsVUFBTSxnQkFBZ0IsWUFBWSxrQkFBa0IsT0FBTztBQUMzRCxVQUFNLGNBQWMsY0FBYyxRQUFRLGVBQWU7QUFFekQsYUFBUyxtQkFBbUIsYUFBd0MsT0FBYztBQUNoRixVQUNHLGFBQWEsU0FBUyxlQUFlLFdBQVcsT0FBTyxZQUFZLFVBQVUsWUFDOUUsYUFBYSxTQUFTLGVBQWUsaUJBQ3JDO0FBQ0EsY0FBTSxVQUFVLFdBQVcsUUFBUSxXQUFXO0FBQzlDLGVBQU8saUJBQWlCLEtBQUssT0FBTyxLQUFLLHFCQUFxQixLQUFLLE9BQU87QUFBQSxNQUM1RTtBQUVBLFVBQUksYUFBYSxTQUFTLGVB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
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
// src/agent/no-status-code.ts
|
|
2
|
-
import { ESLintUtils } from "@typescript-eslint/utils";
|
|
3
|
-
import getDocumentationUrl from "../get-documentation-url.mjs";
|
|
4
|
-
var ruleId = "no-status-code";
|
|
5
|
-
var createRule = ESLintUtils.RuleCreator((name) => getDocumentationUrl(name));
|
|
6
|
-
var rule = createRule({
|
|
7
|
-
name: ruleId,
|
|
8
|
-
meta: {
|
|
9
|
-
type: "suggestion",
|
|
10
|
-
docs: {
|
|
11
|
-
description: 'Access the status code property of the fetch Response using "status" instead of "statusCode".'
|
|
12
|
-
},
|
|
13
|
-
messages: {
|
|
14
|
-
replaceStatusCode: 'Replace "statusCode" with "status".',
|
|
15
|
-
unknownError: 'Unknown error occurred in file "{{fileName}}": {{ error }}.'
|
|
16
|
-
},
|
|
17
|
-
fixable: "code",
|
|
18
|
-
schema: []
|
|
19
|
-
},
|
|
20
|
-
defaultOptions: [],
|
|
21
|
-
create(context) {
|
|
22
|
-
const parserServices = ESLintUtils.getParserServices(context);
|
|
23
|
-
const typeChecker = parserServices.program.getTypeChecker();
|
|
24
|
-
return {
|
|
25
|
-
'MemberExpression[property.name="statusCode"]': (responseStatusCode) => {
|
|
26
|
-
try {
|
|
27
|
-
const responseNode = parserServices.esTreeNodeToTSNodeMap.get(responseStatusCode.object);
|
|
28
|
-
const responseType = typeChecker.getTypeAtLocation(responseNode);
|
|
29
|
-
const shouldReplace = responseType.getProperties().some((symbol) => symbol.name === "status") && !responseType.getProperties().some((symbol) => symbol.name === "statusCode");
|
|
30
|
-
if (shouldReplace) {
|
|
31
|
-
context.report({
|
|
32
|
-
messageId: "replaceStatusCode",
|
|
33
|
-
node: responseStatusCode.property,
|
|
34
|
-
fix(fixer) {
|
|
35
|
-
return fixer.replaceText(responseStatusCode.property, "status");
|
|
36
|
-
}
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
} catch (error) {
|
|
40
|
-
console.error(`Failed to apply ${ruleId} rule for file "${context.filename}":`, error);
|
|
41
|
-
context.report({
|
|
42
|
-
node: responseStatusCode,
|
|
43
|
-
messageId: "unknownError",
|
|
44
|
-
data: {
|
|
45
|
-
fileName: context.filename,
|
|
46
|
-
error: error instanceof Error ? error.toString() : JSON.stringify(error)
|
|
47
|
-
}
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
});
|
|
54
|
-
var no_status_code_default = rule;
|
|
55
|
-
export {
|
|
56
|
-
no_status_code_default as default,
|
|
57
|
-
ruleId
|
|
58
|
-
};
|
|
59
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FnZW50L25vLXN0YXR1cy1jb2RlLnRzIl0sCiAgIm1hcHBpbmdzIjogIjtBQVFBLFNBQVMsbUJBQTZCO0FBQ3RDLE9BQU8seUJBQXlCO0FBRXpCLElBQU0sU0FBUztBQUV0QixJQUFNLGFBQWEsWUFBWSxZQUFZLENBQUMsU0FBUyxvQkFBb0IsSUFBSSxDQUFDO0FBRTlFLElBQU0sT0FBTyxXQUFXO0FBQUEsRUFDdEIsTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLElBQ0osTUFBTTtBQUFBLElBQ04sTUFBTTtBQUFBLE1BQ0osYUFBYTtBQUFBLElBQ2Y7QUFBQSxJQUNBLFVBQVU7QUFBQSxNQUNSLG1CQUFtQjtBQUFBLE1BQ25CLGNBQWM7QUFBQSxJQUNoQjtBQUFBLElBQ0EsU0FBUztBQUFBLElBQ1QsUUFBUSxDQUFDO0FBQUEsRUFDWDtBQUFBLEVBQ0EsZ0JBQWdCLENBQUM7QUFBQSxFQUNqQixPQUFPLFNBQVM7QUFDZCxVQUFNLGlCQUFpQixZQUFZLGtCQUFrQixPQUFPO0FBQzVELFVBQU0sY0FBYyxlQUFlLFFBQVEsZUFBZTtBQUUxRCxXQUFPO0FBQUEsTUFDTCxnREFBZ0QsQ0FBQyx1QkFBa0Q7QUFDakcsWUFBSTtBQUNGLGdCQUFNLGVBQWUsZUFBZSxzQkFBc0IsSUFBSSxtQkFBbUIsTUFBTTtBQUN2RixnQkFBTSxlQUFlLFlBQVksa0JBQWtCLFlBQVk7QUFFL0QsZ0JBQU0sZ0JBQ0osYUFBYSxjQUFjLEVBQUUsS0FBSyxDQUFDLFdBQVcsT0FBTyxTQUFTLFFBQVEsS0FDdEUsQ0FBQyxhQUFhLGNBQWMsRUFBRSxLQUFLLENBQUMsV0FBVyxPQUFPLFNBQVMsWUFBWTtBQUU3RSxjQUFJLGVBQWU7QUFDakIsb0JBQVEsT0FBTztBQUFBLGNBQ2IsV0FBVztBQUFBLGNBQ1gsTUFBTSxtQkFBbUI7QUFBQSxjQUN6QixJQUFJLE9BQU87QUFDVCx1QkFBTyxNQUFNLFlBQVksbUJBQW1CLFVBQVUsUUFBUTtBQUFBLGNBQ2hFO0FBQUEsWUFDRixDQUFDO0FBQUEsVUFDSDtBQUFBLFFBQ0YsU0FBUyxPQUFPO0FBRWQsa0JBQVEsTUFBTSxtQkFBbUIsTUFBTSxtQkFBbUIsUUFBUSxRQUFRLE1BQU0sS0FBSztBQUNyRixrQkFBUSxPQUFPO0FBQUEsWUFDYixNQUFNO0FBQUEsWUFDTixXQUFXO0FBQUEsWUFDWCxNQUFNO0FBQUEsY0FDSixVQUFVLFFBQVE7QUFBQSxjQUNsQixPQUFPLGlCQUFpQixRQUFRLE1BQU0sU0FBUyxJQUFJLEtBQUssVUFBVSxLQUFLO0FBQUEsWUFDekU7QUFBQSxVQUNGLENBQUM7QUFBQSxRQUNIO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0YsQ0FBQztBQUVELElBQU8seUJBQVE7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
// src/agent/no-unused-function-argument.ts
|
|
2
|
-
import { ESLintUtils, TSESTree } from "@typescript-eslint/utils";
|
|
3
|
-
import { strict as assert } from "node:assert";
|
|
4
|
-
import getDocumentationUrl from "../get-documentation-url.mjs";
|
|
5
|
-
var ruleId = "no-unused-function-argument";
|
|
6
|
-
var createRule = ESLintUtils.RuleCreator((name) => getDocumentationUrl(name));
|
|
7
|
-
var rule = createRule({
|
|
8
|
-
name: ruleId,
|
|
9
|
-
meta: {
|
|
10
|
-
type: "suggestion",
|
|
11
|
-
docs: {
|
|
12
|
-
description: "Remove unused function arguments."
|
|
13
|
-
},
|
|
14
|
-
messages: {
|
|
15
|
-
removeUnusedFunctionArguments: "Removing unused function arguments.",
|
|
16
|
-
unknownError: 'Unknown error occurred in file "{{fileName}}": {{ error }}.'
|
|
17
|
-
},
|
|
18
|
-
fixable: "code",
|
|
19
|
-
schema: []
|
|
20
|
-
},
|
|
21
|
-
defaultOptions: [],
|
|
22
|
-
create(context) {
|
|
23
|
-
const sourceCode = context.sourceCode;
|
|
24
|
-
function isParameterUsed(parameter, scope) {
|
|
25
|
-
return scope.references.some((ref) => ref.identifier.name === parameter.name) || scope.childScopes.some((childScope) => isParameterUsed(parameter, childScope));
|
|
26
|
-
}
|
|
27
|
-
return {
|
|
28
|
-
FunctionDeclaration(functionDeclaration) {
|
|
29
|
-
try {
|
|
30
|
-
const parameters = functionDeclaration.params;
|
|
31
|
-
if (parameters.length === 0) {
|
|
32
|
-
return;
|
|
33
|
-
}
|
|
34
|
-
const functionScope = sourceCode.getScope(functionDeclaration);
|
|
35
|
-
const parametersToKeep = parameters.filter(
|
|
36
|
-
(parameter) => parameter.type !== TSESTree.AST_NODE_TYPES.Identifier || isParameterUsed(parameter, functionScope)
|
|
37
|
-
);
|
|
38
|
-
if (parametersToKeep.length === parameters.length) {
|
|
39
|
-
return;
|
|
40
|
-
}
|
|
41
|
-
const updatedParameters = parametersToKeep.map((parameter) => sourceCode.getText(parameter)).join(", ");
|
|
42
|
-
context.report({
|
|
43
|
-
node: functionDeclaration,
|
|
44
|
-
messageId: "removeUnusedFunctionArguments",
|
|
45
|
-
fix(fixer) {
|
|
46
|
-
const firstParameter = parameters[0];
|
|
47
|
-
const lastParameter = parameters.at(-1);
|
|
48
|
-
assert.ok(firstParameter !== void 0 && lastParameter !== void 0);
|
|
49
|
-
const tokenAfterParameters = sourceCode.getTokenAfter(lastParameter);
|
|
50
|
-
return fixer.replaceTextRange(
|
|
51
|
-
[
|
|
52
|
-
firstParameter.range[0],
|
|
53
|
-
tokenAfterParameters?.value === "," ? tokenAfterParameters.range[1] : lastParameter.range[1]
|
|
54
|
-
],
|
|
55
|
-
updatedParameters
|
|
56
|
-
);
|
|
57
|
-
}
|
|
58
|
-
});
|
|
59
|
-
} catch (error) {
|
|
60
|
-
console.error(`Failed to apply ${ruleId} rule for file "${context.filename}":`, error);
|
|
61
|
-
context.report({
|
|
62
|
-
node: functionDeclaration,
|
|
63
|
-
messageId: "unknownError",
|
|
64
|
-
data: {
|
|
65
|
-
fileName: context.filename,
|
|
66
|
-
error: error instanceof Error ? error.toString() : JSON.stringify(error)
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
};
|
|
72
|
-
}
|
|
73
|
-
});
|
|
74
|
-
var no_unused_function_argument_default = rule;
|
|
75
|
-
export {
|
|
76
|
-
no_unused_function_argument_default as default,
|
|
77
|
-
ruleId
|
|
78
|
-
};
|
|
79
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FnZW50L25vLXVudXNlZC1mdW5jdGlvbi1hcmd1bWVudC50cyJdLAogICJtYXBwaW5ncyI6ICI7QUFRQSxTQUFTLGFBQWEsZ0JBQWdCO0FBRXRDLFNBQVMsVUFBVSxjQUFjO0FBQ2pDLE9BQU8seUJBQXlCO0FBRXpCLElBQU0sU0FBUztBQUV0QixJQUFNLGFBQWEsWUFBWSxZQUFZLENBQUMsU0FBUyxvQkFBb0IsSUFBSSxDQUFDO0FBRTlFLElBQU0sT0FBTyxXQUFXO0FBQUEsRUFDdEIsTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLElBQ0osTUFBTTtBQUFBLElBQ04sTUFBTTtBQUFBLE1BQ0osYUFBYTtBQUFBLElBQ2Y7QUFBQSxJQUNBLFVBQVU7QUFBQSxNQUNSLCtCQUErQjtBQUFBLE1BQy9CLGNBQWM7QUFBQSxJQUNoQjtBQUFBLElBQ0EsU0FBUztBQUFBLElBQ1QsUUFBUSxDQUFDO0FBQUEsRUFDWDtBQUFBLEVBQ0EsZ0JBQWdCLENBQUM7QUFBQSxFQUNqQixPQUFPLFNBQVM7QUFDZCxVQUFNLGFBQWEsUUFBUTtBQUUzQixhQUFTLGdCQUFnQixXQUFnQyxPQUE2QjtBQUNwRixhQUNFLE1BQU0sV0FBVyxLQUFLLENBQUMsUUFBUSxJQUFJLFdBQVcsU0FBUyxVQUFVLElBQUksS0FDckUsTUFBTSxZQUFZLEtBQUssQ0FBQyxlQUFlLGdCQUFnQixXQUFXLFVBQVUsQ0FBQztBQUFBLElBRWpGO0FBRUEsV0FBTztBQUFBLE1BQ0wsb0JBQW9CLHFCQUFtRDtBQUNyRSxZQUFJO0FBQ0YsZ0JBQU0sYUFBYSxvQkFBb0I7QUFDdkMsY0FBSSxXQUFXLFdBQVcsR0FBRztBQUMzQjtBQUFBLFVBQ0Y7QUFFQSxnQkFBTSxnQkFBZ0IsV0FBVyxTQUFTLG1CQUFtQjtBQUM3RCxnQkFBTSxtQkFBbUIsV0FBVztBQUFBLFlBQ2xDLENBQUMsY0FDQyxVQUFVLFNBQVMsU0FBUyxlQUFlLGNBQWMsZ0JBQWdCLFdBQVcsYUFBYTtBQUFBLFVBQ3JHO0FBQ0EsY0FBSSxpQkFBaUIsV0FBVyxXQUFXLFFBQVE7QUFDakQ7QUFBQSxVQUNGO0FBRUEsZ0JBQU0sb0JBQW9CLGlCQUFpQixJQUFJLENBQUMsY0FBYyxXQUFXLFFBQVEsU0FBUyxDQUFDLEVBQUUsS0FBSyxJQUFJO0FBQ3RHLGtCQUFRLE9BQU87QUFBQSxZQUNiLE1BQU07QUFBQSxZQUNOLFdBQVc7QUFBQSxZQUNYLElBQUksT0FBTztBQUNULG9CQUFNLGlCQUFpQixXQUFXLENBQUM7QUFDbkMsb0JBQU0sZ0JBQWdCLFdBQVcsR0FBRyxFQUFFO0FBQ3RDLHFCQUFPLEdBQUcsbUJBQW1CLFVBQWEsa0JBQWtCLE1BQVM7QUFDckUsb0JBQU0sdUJBQXVCLFdBQVcsY0FBYyxhQUFhO0FBRW5FLHFCQUFPLE1BQU07QUFBQSxnQkFDWDtBQUFBLGtCQUNFLGVBQWUsTUFBTSxDQUFDO0FBQUEsa0JBQ3RCLHNCQUFzQixVQUFVLE1BQU0scUJBQXFCLE1BQU0sQ0FBQyxJQUFJLGNBQWMsTUFBTSxDQUFDO0FBQUEsZ0JBQzdGO0FBQUEsZ0JBQ0E7QUFBQSxjQUNGO0FBQUEsWUFDRjtBQUFBLFVBQ0YsQ0FBQztBQUFBLFFBQ0gsU0FBUyxPQUFPO0FBRWQsa0JBQVEsTUFBTSxtQkFBbUIsTUFBTSxtQkFBbUIsUUFBUSxRQUFRLE1BQU0sS0FBSztBQUNyRixrQkFBUSxPQUFPO0FBQUEsWUFDYixNQUFNO0FBQUEsWUFDTixXQUFXO0FBQUEsWUFDWCxNQUFNO0FBQUEsY0FDSixVQUFVLFFBQVE7QUFBQSxjQUNsQixPQUFPLGlCQUFpQixRQUFRLE1BQU0sU0FBUyxJQUFJLEtBQUssVUFBVSxLQUFLO0FBQUEsWUFDekU7QUFBQSxVQUNGLENBQUM7QUFBQSxRQUNIO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0YsQ0FBQztBQUVELElBQU8sc0NBQVE7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
// src/agent/no-unused-service-variable.ts
|
|
2
|
-
import { ESLintUtils, TSESTree } from "@typescript-eslint/utils";
|
|
3
|
-
import { strict as assert } from "node:assert";
|
|
4
|
-
import getDocumentationUrl from "../get-documentation-url.mjs";
|
|
5
|
-
import { getEnclosingScopeNode } from "../library/ts-tree.mjs";
|
|
6
|
-
var ruleId = "no-unused-service-variable";
|
|
7
|
-
var createRule = ESLintUtils.RuleCreator((name) => getDocumentationUrl(name));
|
|
8
|
-
var rule = createRule({
|
|
9
|
-
name: ruleId,
|
|
10
|
-
meta: {
|
|
11
|
-
type: "suggestion",
|
|
12
|
-
docs: {
|
|
13
|
-
description: "Remove unused service variables."
|
|
14
|
-
},
|
|
15
|
-
messages: {
|
|
16
|
-
removeUnusedServiceVariables: "Removing unused service variables.",
|
|
17
|
-
unknownError: 'Unknown error occurred in file "{{fileName}}": {{ error }}.'
|
|
18
|
-
},
|
|
19
|
-
fixable: "code",
|
|
20
|
-
schema: []
|
|
21
|
-
},
|
|
22
|
-
defaultOptions: [],
|
|
23
|
-
create(context) {
|
|
24
|
-
const sourceCode = context.sourceCode;
|
|
25
|
-
const scopeManager = sourceCode.scopeManager;
|
|
26
|
-
function isVariableUsed(variableIdentifier, scope) {
|
|
27
|
-
const variable = scope.variables.find((variableToCheck) => variableToCheck.name === variableIdentifier.name);
|
|
28
|
-
return variable !== void 0 && variable.references.length > 1;
|
|
29
|
-
}
|
|
30
|
-
return {
|
|
31
|
-
VariableDeclaration(variableDeclaration) {
|
|
32
|
-
try {
|
|
33
|
-
if (variableDeclaration.declarations.length !== 1 || !sourceCode.getText(variableDeclaration).includes(".service.")) {
|
|
34
|
-
return;
|
|
35
|
-
}
|
|
36
|
-
const enclosingScopeNode = getEnclosingScopeNode(variableDeclaration);
|
|
37
|
-
assert.ok(enclosingScopeNode, "enclosingScopeNode is undefined");
|
|
38
|
-
const declarator = variableDeclaration.declarations[0];
|
|
39
|
-
assert.ok(declarator, "variable declaration is undefined");
|
|
40
|
-
if (declarator.id.type !== TSESTree.AST_NODE_TYPES.Identifier) {
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
|
-
const scope = scopeManager?.acquire(enclosingScopeNode);
|
|
44
|
-
assert.ok(scope, "variable declaration is undefined");
|
|
45
|
-
if (isVariableUsed(declarator.id, scope)) {
|
|
46
|
-
return;
|
|
47
|
-
}
|
|
48
|
-
context.report({
|
|
49
|
-
node: variableDeclaration,
|
|
50
|
-
messageId: "removeUnusedServiceVariables",
|
|
51
|
-
fix(fixer) {
|
|
52
|
-
return fixer.remove(variableDeclaration);
|
|
53
|
-
}
|
|
54
|
-
});
|
|
55
|
-
} catch (error) {
|
|
56
|
-
console.error(`Failed to apply ${ruleId} rule for file "${context.filename}":`, error);
|
|
57
|
-
context.report({
|
|
58
|
-
node: variableDeclaration,
|
|
59
|
-
messageId: "unknownError",
|
|
60
|
-
data: {
|
|
61
|
-
fileName: context.filename,
|
|
62
|
-
error: error instanceof Error ? error.toString() : JSON.stringify(error)
|
|
63
|
-
}
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
});
|
|
70
|
-
var no_unused_service_variable_default = rule;
|
|
71
|
-
export {
|
|
72
|
-
no_unused_service_variable_default as default,
|
|
73
|
-
ruleId
|
|
74
|
-
};
|
|
75
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FnZW50L25vLXVudXNlZC1zZXJ2aWNlLXZhcmlhYmxlLnRzIl0sCiAgIm1hcHBpbmdzIjogIjtBQVFBLFNBQVMsYUFBYSxnQkFBZ0I7QUFFdEMsU0FBUyxVQUFVLGNBQWM7QUFDakMsT0FBTyx5QkFBeUI7QUFDaEMsU0FBUyw2QkFBNkI7QUFFL0IsSUFBTSxTQUFTO0FBRXRCLElBQU0sYUFBYSxZQUFZLFlBQVksQ0FBQyxTQUFTLG9CQUFvQixJQUFJLENBQUM7QUFFOUUsSUFBTSxPQUFPLFdBQVc7QUFBQSxFQUN0QixNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsSUFDSixNQUFNO0FBQUEsSUFDTixNQUFNO0FBQUEsTUFDSixhQUFhO0FBQUEsSUFDZjtBQUFBLElBQ0EsVUFBVTtBQUFBLE1BQ1IsOEJBQThCO0FBQUEsTUFDOUIsY0FBYztBQUFBLElBQ2hCO0FBQUEsSUFDQSxTQUFTO0FBQUEsSUFDVCxRQUFRLENBQUM7QUFBQSxFQUNYO0FBQUEsRUFDQSxnQkFBZ0IsQ0FBQztBQUFBLEVBQ2pCLE9BQU8sU0FBUztBQUNkLFVBQU0sYUFBYSxRQUFRO0FBQzNCLFVBQU0sZUFBZSxXQUFXO0FBRWhDLGFBQVMsZUFBZSxvQkFBeUMsT0FBNkI7QUFDNUYsWUFBTSxXQUFXLE1BQU0sVUFBVSxLQUFLLENBQUMsb0JBQW9CLGdCQUFnQixTQUFTLG1CQUFtQixJQUFJO0FBQzNHLGFBQU8sYUFBYSxVQUFhLFNBQVMsV0FBVyxTQUFTO0FBQUEsSUFDaEU7QUFFQSxXQUFPO0FBQUEsTUFDTCxvQkFBb0IscUJBQW1EO0FBQ3JFLFlBQUk7QUFDRixjQUNFLG9CQUFvQixhQUFhLFdBQVcsS0FDNUMsQ0FBQyxXQUFXLFFBQVEsbUJBQW1CLEVBQUUsU0FBUyxXQUFXLEdBQzdEO0FBQ0E7QUFBQSxVQUNGO0FBRUEsZ0JBQU0scUJBQXFCLHNCQUFzQixtQkFBbUI7QUFDcEUsaUJBQU8sR0FBRyxvQkFBb0IsaUNBQWlDO0FBRS9ELGdCQUFNLGFBQWEsb0JBQW9CLGFBQWEsQ0FBQztBQUNyRCxpQkFBTyxHQUFHLFlBQVksbUNBQW1DO0FBQ3pELGNBQUksV0FBVyxHQUFHLFNBQVMsU0FBUyxlQUFlLFlBQVk7QUFDN0Q7QUFBQSxVQUNGO0FBRUEsZ0JBQU0sUUFBUSxjQUFjLFFBQVEsa0JBQWtCO0FBQ3RELGlCQUFPLEdBQUcsT0FBTyxtQ0FBbUM7QUFDcEQsY0FBSSxlQUFlLFdBQVcsSUFBSSxLQUFLLEdBQUc7QUFDeEM7QUFBQSxVQUNGO0FBRUEsa0JBQVEsT0FBTztBQUFBLFlBQ2IsTUFBTTtBQUFBLFlBQ04sV0FBVztBQUFBLFlBQ1gsSUFBSSxPQUFPO0FBQ1QscUJBQU8sTUFBTSxPQUFPLG1CQUFtQjtBQUFBLFlBQ3pDO0FBQUEsVUFDRixDQUFDO0FBQUEsUUFDSCxTQUFTLE9BQU87QUFFZCxrQkFBUSxNQUFNLG1CQUFtQixNQUFNLG1CQUFtQixRQUFRLFFBQVEsTUFBTSxLQUFLO0FBQ3JGLGtCQUFRLE9BQU87QUFBQSxZQUNiLE1BQU07QUFBQSxZQUNOLFdBQVc7QUFBQSxZQUNYLE1BQU07QUFBQSxjQUNKLFVBQVUsUUFBUTtBQUFBLGNBQ2xCLE9BQU8saUJBQWlCLFFBQVEsTUFBTSxTQUFTLElBQUksS0FBSyxVQUFVLEtBQUs7QUFBQSxZQUN6RTtBQUFBLFVBQ0YsQ0FBQztBQUFBLFFBQ0g7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDRixDQUFDO0FBRUQsSUFBTyxxQ0FBUTsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
// src/agent/response-reference.ts
|
|
2
|
-
import "eslint";
|
|
3
|
-
import { strict as assert } from "node:assert";
|
|
4
|
-
import { getParent } from "../library/tree.mjs";
|
|
5
|
-
function analyzeResponseReferences(variableDeclaration, scopeManager) {
|
|
6
|
-
const results = {
|
|
7
|
-
bodyReferences: [],
|
|
8
|
-
headersReferences: [],
|
|
9
|
-
statusReferences: []
|
|
10
|
-
};
|
|
11
|
-
if (!variableDeclaration) {
|
|
12
|
-
return results;
|
|
13
|
-
}
|
|
14
|
-
const responseVariables = scopeManager.getDeclaredVariables(variableDeclaration);
|
|
15
|
-
for (const responseVariable of responseVariables) {
|
|
16
|
-
const identifier = responseVariable.identifiers[0];
|
|
17
|
-
assert.ok(identifier);
|
|
18
|
-
const identifierParent = getParent(identifier);
|
|
19
|
-
assert.ok(identifierParent);
|
|
20
|
-
if (identifierParent.type === "VariableDeclarator") {
|
|
21
|
-
results.variable = responseVariable;
|
|
22
|
-
const responseReferences = responseVariable.references.map(
|
|
23
|
-
(responseReference) => getParent(responseReference.identifier)
|
|
24
|
-
);
|
|
25
|
-
results.bodyReferences = responseReferences.filter(
|
|
26
|
-
(node) => node?.type === "MemberExpression" && node.property.type === "Identifier" && node.property.name === "body"
|
|
27
|
-
);
|
|
28
|
-
results.headersReferences = responseReferences.filter(
|
|
29
|
-
(node) => node?.type === "MemberExpression" && node.property.type === "Identifier" && (node.property.name === "header" || node.property.name === "headers" || node.property.name === "get")
|
|
30
|
-
);
|
|
31
|
-
results.statusReferences = responseReferences.filter(
|
|
32
|
-
(node) => node?.type === "MemberExpression" && node.property.type === "Identifier" && (node.property.name === "status" || node.property.name === "statusCode")
|
|
33
|
-
);
|
|
34
|
-
} else if (
|
|
35
|
-
// body reference through destruction/renaming, e.g. "const { body } = ..."
|
|
36
|
-
identifierParent.type === "Property" && identifierParent.key.type === "Identifier" && identifierParent.key.name === "body"
|
|
37
|
-
) {
|
|
38
|
-
results.destructuringBodyVariable = responseVariable;
|
|
39
|
-
} else if (
|
|
40
|
-
// header reference through destruction/renaming, e.g. "const { headers } = ..."
|
|
41
|
-
identifierParent.type === "Property" && identifierParent.key.type === "Identifier" && identifierParent.key.name === "headers"
|
|
42
|
-
) {
|
|
43
|
-
results.destructuringHeadersVariable = responseVariable;
|
|
44
|
-
results.destructuringHeadersReferences = responseVariable.references.map((reference) => reference.identifier).map(getParent).filter(
|
|
45
|
-
(parent) => parent?.type === "MemberExpression" && parent.property.type === "Identifier" && parent.property.name !== "get" && getParent(parent)?.type !== "CallExpression"
|
|
46
|
-
);
|
|
47
|
-
} else {
|
|
48
|
-
throw new Error(`Unknown response variable reference: ${responseVariable.name}`);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
return results;
|
|
52
|
-
}
|
|
53
|
-
export {
|
|
54
|
-
analyzeResponseReferences
|
|
55
|
-
};
|
|
56
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FnZW50L3Jlc3BvbnNlLXJlZmVyZW5jZS50cyJdLAogICJtYXBwaW5ncyI6ICI7QUFTQSxPQUEyQjtBQUMzQixTQUFTLFVBQVUsY0FBYztBQUNqQyxTQUFTLGlCQUFpQjtBQU9uQixTQUFTLDBCQUNkLHFCQUNBLGNBQ0E7QUFDQSxRQUFNLFVBUUY7QUFBQSxJQUNGLGdCQUFnQixDQUFDO0FBQUEsSUFDakIsbUJBQW1CLENBQUM7QUFBQSxJQUNwQixrQkFBa0IsQ0FBQztBQUFBLEVBQ3JCO0FBQ0EsTUFBSSxDQUFDLHFCQUFxQjtBQUN4QixXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sb0JBQW9CLGFBQWEscUJBQXFCLG1CQUFtQjtBQUMvRSxhQUFXLG9CQUFvQixtQkFBbUI7QUFDaEQsVUFBTSxhQUFhLGlCQUFpQixZQUFZLENBQUM7QUFDakQsV0FBTyxHQUFHLFVBQVU7QUFDcEIsVUFBTSxtQkFBbUIsVUFBVSxVQUFVO0FBQzdDLFdBQU8sR0FBRyxnQkFBZ0I7QUFDMUIsUUFBSSxpQkFBaUIsU0FBUyxzQkFBc0I7QUFFbEQsY0FBUSxXQUFXO0FBQ25CLFlBQU0scUJBQXFCLGlCQUFpQixXQUFXO0FBQUEsUUFBSSxDQUFDLHNCQUMxRCxVQUFVLGtCQUFrQixVQUFVO0FBQUEsTUFDeEM7QUFFQSxjQUFRLGlCQUFpQixtQkFBbUI7QUFBQSxRQUMxQyxDQUFDLFNBQ0MsTUFBTSxTQUFTLHNCQUFzQixLQUFLLFNBQVMsU0FBUyxnQkFBZ0IsS0FBSyxTQUFTLFNBQVM7QUFBQSxNQUN2RztBQUVBLGNBQVEsb0JBQW9CLG1CQUFtQjtBQUFBLFFBQzdDLENBQUMsU0FDQyxNQUFNLFNBQVMsc0JBQ2YsS0FBSyxTQUFTLFNBQVMsaUJBQ3RCLEtBQUssU0FBUyxTQUFTLFlBQVksS0FBSyxTQUFTLFNBQVMsYUFBYSxLQUFLLFNBQVMsU0FBUztBQUFBLE1BQ25HO0FBRUEsY0FBUSxtQkFBbUIsbUJBQW1CO0FBQUEsUUFDNUMsQ0FBQyxTQUNDLE1BQU0sU0FBUyxzQkFDZixLQUFLLFNBQVMsU0FBUyxpQkFDdEIsS0FBSyxTQUFTLFNBQVMsWUFBWSxLQUFLLFNBQVMsU0FBUztBQUFBLE1BQy9EO0FBQUEsSUFDRjtBQUFBO0FBQUEsTUFFRSxpQkFBaUIsU0FBUyxjQUMxQixpQkFBaUIsSUFBSSxTQUFTLGdCQUM5QixpQkFBaUIsSUFBSSxTQUFTO0FBQUEsTUFDOUI7QUFDQSxjQUFRLDRCQUE0QjtBQUFBLElBQ3RDO0FBQUE7QUFBQSxNQUVFLGlCQUFpQixTQUFTLGNBQzFCLGlCQUFpQixJQUFJLFNBQVMsZ0JBQzlCLGlCQUFpQixJQUFJLFNBQVM7QUFBQSxNQUM5QjtBQUNBLGNBQVEsK0JBQStCO0FBQ3ZDLGNBQVEsaUNBQWlDLGlCQUFpQixXQUN2RCxJQUFJLENBQUMsY0FBYyxVQUFVLFVBQVUsRUFDdkMsSUFBSSxTQUFTLEVBQ2I7QUFBQSxRQUNDLENBQUMsV0FDQyxRQUFRLFNBQVMsc0JBQ2pCLE9BQU8sU0FBUyxTQUFTLGdCQUN6QixPQUFPLFNBQVMsU0FBUyxTQUN6QixVQUFVLE1BQU0sR0FBRyxTQUFTO0FBQUEsTUFDaEM7QUFBQSxJQUNKLE9BQU87QUFDTCxZQUFNLElBQUksTUFBTSx3Q0FBd0MsaUJBQWlCLElBQUksRUFBRTtBQUFBLElBQ2pGO0FBQUEsRUFDRjtBQUNBLFNBQU87QUFDVDsiLAogICJuYW1lcyI6IFtdCn0K
|
package/dist-mjs/agent/url.mjs
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
// src/agent/url.ts
|
|
2
|
-
var PLAIN_URL_REGEXP = /^[`']\/\w+(?<serviceNamePart>-\w+)*\/v\d+\/(?<any>.|\r|\n)+[`']$/u;
|
|
3
|
-
var TOKENIZED_URL_REGEXP = /^`\$\{(?<serviceNamePart>[A-Z]+_)*BASE_PATH\}\/(?<any>.|\r|\n)+`$/u;
|
|
4
|
-
function replaceEndpointUrlPrefixWithBasePath(url) {
|
|
5
|
-
return url.replace(/^`\/\w+(?<parts>-\w+)*\/v\d+\//u, "`${BASE_PATH}/");
|
|
6
|
-
}
|
|
7
|
-
function replaceEndpointUrlPrefixWithDomain(url) {
|
|
8
|
-
return url.replace(
|
|
9
|
-
/^(?<quotStart>[`'])\/(?<servicename>\w+(?<parts>-\w+)*)(?<path>\/v\d+\/(?<any>.|\r|\n)+(?<quotEnd>[`'])$)/u,
|
|
10
|
-
"$1https://$2.checkdigit/$2$4"
|
|
11
|
-
);
|
|
12
|
-
}
|
|
13
|
-
function addBasePathUrlDomain(url) {
|
|
14
|
-
return url.replace(
|
|
15
|
-
/^(?<quotStart>[`'])\/(?<servicename>\w+(?<parts>-\w+)*)(?<path>\/v\d+(?<quotEnd>[`'])$)/u,
|
|
16
|
-
"$1https://$2.checkdigit/$2$4"
|
|
17
|
-
);
|
|
18
|
-
}
|
|
19
|
-
export {
|
|
20
|
-
PLAIN_URL_REGEXP,
|
|
21
|
-
TOKENIZED_URL_REGEXP,
|
|
22
|
-
addBasePathUrlDomain,
|
|
23
|
-
replaceEndpointUrlPrefixWithBasePath,
|
|
24
|
-
replaceEndpointUrlPrefixWithDomain
|
|
25
|
-
};
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FnZW50L3VybC50cyJdLAogICJtYXBwaW5ncyI6ICI7QUFFTyxJQUFNLG1CQUFtQjtBQUN6QixJQUFNLHVCQUF1QjtBQUU3QixTQUFTLHFDQUFxQyxLQUFhO0FBRWhFLFNBQU8sSUFBSSxRQUFRLG1DQUFtQyxnQkFBZ0I7QUFDeEU7QUFFTyxTQUFTLG1DQUFtQyxLQUFhO0FBQzlELFNBQU8sSUFBSTtBQUFBLElBQ1Q7QUFBQSxJQUNBO0FBQUEsRUFDRjtBQUNGO0FBRU8sU0FBUyxxQkFBcUIsS0FBYTtBQUNoRCxTQUFPLElBQUk7QUFBQSxJQUNUO0FBQUEsSUFDQTtBQUFBLEVBQ0Y7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
// src/no-duplicated-imports.ts
|
|
2
|
-
import { ESLintUtils, TSESTree } from "@typescript-eslint/utils";
|
|
3
|
-
import { strict as assert } from "node:assert";
|
|
4
|
-
import getDocumentationUrl from "./get-documentation-url.mjs";
|
|
5
|
-
var ruleId = "no-duplicated-imports";
|
|
6
|
-
var createRule = ESLintUtils.RuleCreator((name) => getDocumentationUrl(name));
|
|
7
|
-
var rule = createRule({
|
|
8
|
-
name: ruleId,
|
|
9
|
-
meta: {
|
|
10
|
-
type: "suggestion",
|
|
11
|
-
docs: {
|
|
12
|
-
description: 'Merge duplicated import statements with the same "from".'
|
|
13
|
-
},
|
|
14
|
-
messages: {
|
|
15
|
-
mergeDuplicatedImports: 'Merge duplicated import statements with the same "from".'
|
|
16
|
-
},
|
|
17
|
-
fixable: "code",
|
|
18
|
-
schema: []
|
|
19
|
-
},
|
|
20
|
-
defaultOptions: [],
|
|
21
|
-
create(context) {
|
|
22
|
-
const sourceCode = context.sourceCode;
|
|
23
|
-
const importDeclarations = /* @__PURE__ */ new Map();
|
|
24
|
-
return {
|
|
25
|
-
ImportDeclaration(node) {
|
|
26
|
-
const moduleName = node.source.value;
|
|
27
|
-
let declarations = importDeclarations.get(moduleName);
|
|
28
|
-
if (declarations === void 0) {
|
|
29
|
-
declarations = [];
|
|
30
|
-
importDeclarations.set(moduleName, declarations);
|
|
31
|
-
}
|
|
32
|
-
declarations.push(node);
|
|
33
|
-
},
|
|
34
|
-
"Program:exit"() {
|
|
35
|
-
for (const [moduleName, declarations] of importDeclarations.entries()) {
|
|
36
|
-
if (declarations.length <= 1) {
|
|
37
|
-
continue;
|
|
38
|
-
}
|
|
39
|
-
const firstDeclaration = declarations[0];
|
|
40
|
-
assert.ok(firstDeclaration);
|
|
41
|
-
const isAllTypeOnly = declarations.every(
|
|
42
|
-
(declaration) => declaration.importKind === "type" || declaration.specifiers.every(
|
|
43
|
-
(specifier) => specifier.type === TSESTree.AST_NODE_TYPES.ImportSpecifier && specifier.importKind === "type"
|
|
44
|
-
)
|
|
45
|
-
);
|
|
46
|
-
context.report({
|
|
47
|
-
messageId: "mergeDuplicatedImports",
|
|
48
|
-
node: firstDeclaration,
|
|
49
|
-
fix(fixer) {
|
|
50
|
-
const fixes = [];
|
|
51
|
-
const defaultSpecifier = declarations.flatMap(
|
|
52
|
-
(declaration) => declaration.specifiers.map(
|
|
53
|
-
(specifier) => specifier.type === TSESTree.AST_NODE_TYPES.ImportDefaultSpecifier ? specifier : void 0
|
|
54
|
-
)
|
|
55
|
-
).filter(Boolean);
|
|
56
|
-
const defaultSpecifierText = defaultSpecifier[0] ? sourceCode.getText(defaultSpecifier[0]) : void 0;
|
|
57
|
-
const mergedSpecifiers = declarations.flatMap((declaration) => {
|
|
58
|
-
const isCurrentDeclarationTypeOnly = declaration.importKind === "type" || declaration.specifiers.every(
|
|
59
|
-
(specifier) => specifier.type === TSESTree.AST_NODE_TYPES.ImportSpecifier && specifier.importKind === "type"
|
|
60
|
-
);
|
|
61
|
-
return declaration.specifiers.filter((specifier) => specifier.type !== TSESTree.AST_NODE_TYPES.ImportDefaultSpecifier).map(
|
|
62
|
-
(specifier) => (
|
|
63
|
-
// eslint-disable-next-line no-nested-ternary
|
|
64
|
-
isAllTypeOnly ? sourceCode.getText(specifier).replace("type ", "") : isCurrentDeclarationTypeOnly ? `type ${sourceCode.getText(specifier)}` : sourceCode.getText(specifier)
|
|
65
|
-
)
|
|
66
|
-
);
|
|
67
|
-
});
|
|
68
|
-
const mergedSpecifiersText = `${isAllTypeOnly ? "type " : ""}{ ${mergedSpecifiers.join(", ")} }`;
|
|
69
|
-
const mergedImport = `import ${[defaultSpecifierText, mergedSpecifiersText].filter(Boolean).join(", ")} from '${moduleName}';`;
|
|
70
|
-
fixes.push(fixer.replaceText(firstDeclaration, mergedImport));
|
|
71
|
-
declarations.slice(1).forEach((declaration) => {
|
|
72
|
-
fixes.push(fixer.removeRange([declaration.range[0], declaration.range[1] + 1]));
|
|
73
|
-
});
|
|
74
|
-
return fixes;
|
|
75
|
-
}
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
};
|
|
80
|
-
}
|
|
81
|
-
});
|
|
82
|
-
var no_duplicated_imports_default = rule;
|
|
83
|
-
export {
|
|
84
|
-
no_duplicated_imports_default as default,
|
|
85
|
-
ruleId
|
|
86
|
-
};
|
|
87
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL25vLWR1cGxpY2F0ZWQtaW1wb3J0cy50cyJdLAogICJtYXBwaW5ncyI6ICI7QUFRQSxTQUFTLGFBQWEsZ0JBQWdCO0FBQ3RDLFNBQVMsVUFBVSxjQUFjO0FBQ2pDLE9BQU8seUJBQXlCO0FBRXpCLElBQU0sU0FBUztBQUV0QixJQUFNLGFBQWEsWUFBWSxZQUFZLENBQUMsU0FBUyxvQkFBb0IsSUFBSSxDQUFDO0FBRTlFLElBQU0sT0FBTyxXQUFXO0FBQUEsRUFDdEIsTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLElBQ0osTUFBTTtBQUFBLElBQ04sTUFBTTtBQUFBLE1BQ0osYUFBYTtBQUFBLElBQ2Y7QUFBQSxJQUNBLFVBQVU7QUFBQSxNQUNSLHdCQUF3QjtBQUFBLElBQzFCO0FBQUEsSUFDQSxTQUFTO0FBQUEsSUFDVCxRQUFRLENBQUM7QUFBQSxFQUNYO0FBQUEsRUFDQSxnQkFBZ0IsQ0FBQztBQUFBLEVBQ2pCLE9BQU8sU0FBUztBQUNkLFVBQU0sYUFBYSxRQUFRO0FBQzNCLFVBQU0scUJBQXFCLG9CQUFJLElBQTBDO0FBRXpFLFdBQU87QUFBQSxNQUNMLGtCQUFrQixNQUFNO0FBQ3RCLGNBQU0sYUFBYSxLQUFLLE9BQU87QUFDL0IsWUFBSSxlQUFlLG1CQUFtQixJQUFJLFVBQVU7QUFDcEQsWUFBSSxpQkFBaUIsUUFBVztBQUM5Qix5QkFBZSxDQUFDO0FBQ2hCLDZCQUFtQixJQUFJLFlBQVksWUFBWTtBQUFBLFFBQ2pEO0FBQ0EscUJBQWEsS0FBSyxJQUFJO0FBQUEsTUFDeEI7QUFBQSxNQUNBLGlCQUFpQjtBQUNmLG1CQUFXLENBQUMsWUFBWSxZQUFZLEtBQUssbUJBQW1CLFFBQVEsR0FBRztBQUNyRSxjQUFJLGFBQWEsVUFBVSxHQUFHO0FBQzVCO0FBQUEsVUFDRjtBQUVBLGdCQUFNLG1CQUFtQixhQUFhLENBQUM7QUFDdkMsaUJBQU8sR0FBRyxnQkFBZ0I7QUFFMUIsZ0JBQU0sZ0JBQWdCLGFBQWE7QUFBQSxZQUNqQyxDQUFDLGdCQUNDLFlBQVksZUFBZSxVQUMzQixZQUFZLFdBQVc7QUFBQSxjQUNyQixDQUFDLGNBQ0MsVUFBVSxTQUFTLFNBQVMsZUFBZSxtQkFBbUIsVUFBVSxlQUFlO0FBQUEsWUFDM0Y7QUFBQSxVQUNKO0FBRUEsa0JBQVEsT0FBTztBQUFBLFlBQ2IsV0FBVztBQUFBLFlBQ1gsTUFBTTtBQUFBLFlBQ04sSUFBSSxPQUFPO0FBQ1Qsb0JBQU0sUUFBUSxDQUFDO0FBRWYsb0JBQU0sbUJBQW1CLGFBQ3RCO0FBQUEsZ0JBQVEsQ0FBQyxnQkFDUixZQUFZLFdBQVc7QUFBQSxrQkFBSSxDQUFDLGNBQzFCLFVBQVUsU0FBUyxTQUFTLGVBQWUseUJBQXlCLFlBQVk7QUFBQSxnQkFDbEY7QUFBQSxjQUNGLEVBQ0MsT0FBTyxPQUFPO0FBQ2pCLG9CQUFNLHVCQUF1QixpQkFBaUIsQ0FBQyxJQUFJLFdBQVcsUUFBUSxpQkFBaUIsQ0FBQyxDQUFDLElBQUk7QUFFN0Ysb0JBQU0sbUJBQW1CLGFBQWEsUUFBUSxDQUFDLGdCQUFnQjtBQUM3RCxzQkFBTSwrQkFDSixZQUFZLGVBQWUsVUFDM0IsWUFBWSxXQUFXO0FBQUEsa0JBQ3JCLENBQUMsY0FDQyxVQUFVLFNBQVMsU0FBUyxlQUFlLG1CQUFtQixVQUFVLGVBQWU7QUFBQSxnQkFDM0Y7QUFDRix1QkFBTyxZQUFZLFdBQ2hCLE9BQU8sQ0FBQyxjQUFjLFVBQVUsU0FBUyxTQUFTLGVBQWUsc0JBQXNCLEVBQ3ZGO0FBQUEsa0JBQUksQ0FBQztBQUFBO0FBQUEsb0JBRUosZ0JBQ0ksV0FBVyxRQUFRLFNBQVMsRUFBRSxRQUFRLFNBQVMsRUFBRSxJQUNqRCwrQkFDRSxRQUFRLFdBQVcsUUFBUSxTQUFTLENBQUMsS0FDckMsV0FBVyxRQUFRLFNBQVM7QUFBQTtBQUFBLGdCQUNwQztBQUFBLGNBQ0osQ0FBQztBQUNELG9CQUFNLHVCQUF1QixHQUFHLGdCQUFnQixVQUFVLEVBQUUsS0FBSyxpQkFBaUIsS0FBSyxJQUFJLENBQUM7QUFHNUYsb0JBQU0sZUFBZSxVQUFVLENBQUMsc0JBQXNCLG9CQUFvQixFQUFFLE9BQU8sT0FBTyxFQUFFLEtBQUssSUFBSSxDQUFDLFVBQVUsVUFBVTtBQUMxSCxvQkFBTSxLQUFLLE1BQU0sWUFBWSxrQkFBa0IsWUFBWSxDQUFDO0FBRzVELDJCQUFhLE1BQU0sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxnQkFBZ0I7QUFDN0Msc0JBQU0sS0FBSyxNQUFNLFlBQVksQ0FBQyxZQUFZLE1BQU0sQ0FBQyxHQUFHLFlBQVksTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFBQSxjQUNoRixDQUFDO0FBRUQscUJBQU87QUFBQSxZQUNUO0FBQUEsVUFDRixDQUFDO0FBQUEsUUFDSDtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNGLENBQUM7QUFFRCxJQUFPLGdDQUFROyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
// src/require-fixed-services-import.ts
|
|
2
|
-
import { ESLintUtils } from "@typescript-eslint/utils";
|
|
3
|
-
import getDocumentationUrl from "./get-documentation-url.mjs";
|
|
4
|
-
var ruleId = "require-fixed-services-import";
|
|
5
|
-
var createRule = ESLintUtils.RuleCreator((name) => getDocumentationUrl(name));
|
|
6
|
-
var SERVICE_TYPINGS_IMPORT_PATH_PREFIX = /(?<path>\.\.\/)+services\/.*/u;
|
|
7
|
-
var rule = createRule({
|
|
8
|
-
name: ruleId,
|
|
9
|
-
meta: {
|
|
10
|
-
type: "suggestion",
|
|
11
|
-
docs: {
|
|
12
|
-
description: 'Require fixed "from" with service typing imports from "src/services".'
|
|
13
|
-
},
|
|
14
|
-
messages: {
|
|
15
|
-
updateServicesImportFrom: 'Update service typing imports to be from the fixed "src/services" path.'
|
|
16
|
-
},
|
|
17
|
-
fixable: "code",
|
|
18
|
-
schema: []
|
|
19
|
-
},
|
|
20
|
-
defaultOptions: [],
|
|
21
|
-
create(context) {
|
|
22
|
-
return {
|
|
23
|
-
ImportDeclaration(node) {
|
|
24
|
-
const moduleName = node.source.value;
|
|
25
|
-
if (SERVICE_TYPINGS_IMPORT_PATH_PREFIX.test(moduleName)) {
|
|
26
|
-
context.report({
|
|
27
|
-
messageId: "updateServicesImportFrom",
|
|
28
|
-
node: node.source,
|
|
29
|
-
*fix(fixer) {
|
|
30
|
-
yield fixer.replaceText(
|
|
31
|
-
node.source,
|
|
32
|
-
`'${moduleName.slice(0, moduleName.indexOf("../services") + "../services".length)}'`
|
|
33
|
-
);
|
|
34
|
-
}
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
});
|
|
41
|
-
var require_fixed_services_import_default = rule;
|
|
42
|
-
export {
|
|
43
|
-
require_fixed_services_import_default as default,
|
|
44
|
-
ruleId
|
|
45
|
-
};
|
|
46
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3JlcXVpcmUtZml4ZWQtc2VydmljZXMtaW1wb3J0LnRzIl0sCiAgIm1hcHBpbmdzIjogIjtBQVFBLFNBQVMsbUJBQW1CO0FBQzVCLE9BQU8seUJBQXlCO0FBRXpCLElBQU0sU0FBUztBQUV0QixJQUFNLGFBQWEsWUFBWSxZQUFZLENBQUMsU0FBUyxvQkFBb0IsSUFBSSxDQUFDO0FBQzlFLElBQU0scUNBQXFDO0FBRTNDLElBQU0sT0FBTyxXQUFXO0FBQUEsRUFDdEIsTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLElBQ0osTUFBTTtBQUFBLElBQ04sTUFBTTtBQUFBLE1BQ0osYUFBYTtBQUFBLElBQ2Y7QUFBQSxJQUNBLFVBQVU7QUFBQSxNQUNSLDBCQUEwQjtBQUFBLElBQzVCO0FBQUEsSUFDQSxTQUFTO0FBQUEsSUFDVCxRQUFRLENBQUM7QUFBQSxFQUNYO0FBQUEsRUFDQSxnQkFBZ0IsQ0FBQztBQUFBLEVBQ2pCLE9BQU8sU0FBUztBQUNkLFdBQU87QUFBQSxNQUNMLGtCQUFrQixNQUFNO0FBQ3RCLGNBQU0sYUFBYSxLQUFLLE9BQU87QUFDL0IsWUFBSSxtQ0FBbUMsS0FBSyxVQUFVLEdBQUc7QUFDdkQsa0JBQVEsT0FBTztBQUFBLFlBQ2IsV0FBVztBQUFBLFlBQ1gsTUFBTSxLQUFLO0FBQUEsWUFDWCxDQUFDLElBQUksT0FBTztBQUNWLG9CQUFNLE1BQU07QUFBQSxnQkFDVixLQUFLO0FBQUEsZ0JBQ0wsSUFBSSxXQUFXLE1BQU0sR0FBRyxXQUFXLFFBQVEsYUFBYSxJQUFJLGNBQWMsTUFBTSxDQUFDO0FBQUEsY0FDbkY7QUFBQSxZQUNGO0FBQUEsVUFDRixDQUFDO0FBQUEsUUFDSDtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNGLENBQUM7QUFFRCxJQUFPLHdDQUFROyIsCiAgIm5hbWVzIjogW10KfQo=
|