@codeperfect/eslint-plugin 2.2.0 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/application/index.d.ts +1 -1
- package/dist/application/index.d.ts.map +1 -1
- package/dist/application/index.js +2 -2
- package/dist/codeperfect-eslint-plugin-1.0.0.tgz +0 -0
- package/dist/domain/architecture/no-unused-exports/no-unused-exports-utilities.d.ts.map +1 -1
- package/dist/domain/architecture/no-unused-exports/no-unused-exports-utilities.js +6 -2
- package/dist/domain/architecture/no-unused-exports/rule.js +3 -3
- package/dist/domain/index.d.ts +1 -1
- package/dist/domain/index.d.ts.map +1 -1
- package/dist/domain/index.js +2 -2
- package/dist/domain/testing/index.d.ts +1 -0
- package/dist/domain/testing/index.d.ts.map +1 -1
- package/dist/domain/testing/index.js +2 -1
- package/dist/domain/testing/no-unsafe-vitest-mock-factory-cast/index.d.ts +2 -0
- package/dist/domain/testing/no-unsafe-vitest-mock-factory-cast/index.d.ts.map +1 -0
- package/dist/domain/testing/no-unsafe-vitest-mock-factory-cast/index.js +2 -0
- package/dist/domain/testing/no-unsafe-vitest-mock-factory-cast/rule.d.ts +5 -0
- package/dist/domain/testing/no-unsafe-vitest-mock-factory-cast/rule.d.ts.map +1 -0
- package/dist/domain/testing/no-unsafe-vitest-mock-factory-cast/rule.js +467 -0
- package/dist/infrastructure/codeperfect-plugin.d.ts +2 -0
- package/dist/infrastructure/codeperfect-plugin.d.ts.map +1 -1
- package/dist/infrastructure/codeperfect-plugin.js +3 -2
- package/dist/infrastructure/presets.d.ts.map +1 -1
- package/dist/infrastructure/presets.js +3 -1
- package/package.json +32 -27
- package/dist/.tsbuildinfo +0 -1
|
@@ -0,0 +1,467 @@
|
|
|
1
|
+
import { AST_NODE_TYPES } from "@typescript-eslint/utils";
|
|
2
|
+
/** Supported `vi` mock method names. */
|
|
3
|
+
const supportedMockNames = new Set(["doMock", "mock"]);
|
|
4
|
+
/** Default suffix for generated namespace imports. */
|
|
5
|
+
const moduleTypeSuffix = "Module";
|
|
6
|
+
/** Disallows casted `vi.mock` and `vi.doMock` factories. */
|
|
7
|
+
const noUnsafeVitestMockFactoryCastRule = {
|
|
8
|
+
create(context) {
|
|
9
|
+
return {
|
|
10
|
+
CallExpression(node) {
|
|
11
|
+
const match = getMockFactoryMatch(node);
|
|
12
|
+
if (match === void 0) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
context.report({
|
|
16
|
+
fix: match.canAutofix
|
|
17
|
+
? (fixer) => buildFixes(context, fixer, match)
|
|
18
|
+
: void 0,
|
|
19
|
+
messageId: "noUnsafeVitestMockFactoryCast",
|
|
20
|
+
node: match.node,
|
|
21
|
+
});
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
},
|
|
25
|
+
meta: {
|
|
26
|
+
docs: {
|
|
27
|
+
description: "Disallow casted vi.mock and vi.doMock factories and prefer createMockProxy(...) for partial module mocks.",
|
|
28
|
+
recommended: true,
|
|
29
|
+
url: "https://github.com/parloti/eslint-plugin/blob/main/docs/rules/no-unsafe-vitest-mock-factory-cast.md",
|
|
30
|
+
},
|
|
31
|
+
fixable: "code",
|
|
32
|
+
messages: {
|
|
33
|
+
noUnsafeVitestMockFactoryCast: "Avoid casting vi.mock/vi.doMock factory results; use createMockProxy(...) with a type-only module import instead.",
|
|
34
|
+
},
|
|
35
|
+
schema: [],
|
|
36
|
+
type: "problem",
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* Builds all fixes for one unsafe mock factory.
|
|
41
|
+
* @param context Rule context.
|
|
42
|
+
* @param fixer ESLint fixer.
|
|
43
|
+
* @param match Unsafe mock factory details.
|
|
44
|
+
* @returns All fixer operations.
|
|
45
|
+
* @example
|
|
46
|
+
* ```ts
|
|
47
|
+
* // Internal helper for no-unsafe-vitest-mock-factory-cast.
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
function buildFixes(context, fixer, match) {
|
|
51
|
+
const sourceCode = context.sourceCode;
|
|
52
|
+
const moduleTypeImport = resolveModuleTypeImport(sourceCode, match.moduleSpecifier);
|
|
53
|
+
const factoryText = `createMockProxy<typeof ${moduleTypeImport.namespaceName}>(${sourceCode.getText(match.mockExpression)})`;
|
|
54
|
+
const fixes = [
|
|
55
|
+
fixer.replaceTextRange(match.mockFactoryNode.range, factoryText),
|
|
56
|
+
];
|
|
57
|
+
if (!moduleTypeImport.isExisting) {
|
|
58
|
+
const importText = `import type * as ${moduleTypeImport.namespaceName} from ${JSON.stringify(match.moduleSpecifier)};`;
|
|
59
|
+
const insertionRange = getImportInsertionRange(sourceCode);
|
|
60
|
+
fixes.push(insertionRange === void 0
|
|
61
|
+
? fixer.insertTextBeforeRange([0, 0], `${importText}\n\n`)
|
|
62
|
+
: fixer.insertTextAfterRange(insertionRange, `\n${importText}`));
|
|
63
|
+
}
|
|
64
|
+
return fixes;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Collects declaration identifiers from top-level declarations.
|
|
68
|
+
* @param declaration Declaration node.
|
|
69
|
+
* @param names Output name set.
|
|
70
|
+
* @example
|
|
71
|
+
* ```ts
|
|
72
|
+
* // Internal helper for no-unsafe-vitest-mock-factory-cast.
|
|
73
|
+
* ```
|
|
74
|
+
*/
|
|
75
|
+
function collectDeclarationNames(declaration, names) {
|
|
76
|
+
if (declaration.type === AST_NODE_TYPES.FunctionDeclaration ||
|
|
77
|
+
declaration.type === AST_NODE_TYPES.ClassDeclaration) {
|
|
78
|
+
if (declaration.id !== null) {
|
|
79
|
+
names.add(declaration.id.name);
|
|
80
|
+
}
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
if (declaration.type === AST_NODE_TYPES.VariableDeclaration) {
|
|
84
|
+
for (const variableDeclaration of declaration.declarations) {
|
|
85
|
+
collectPatternNames(variableDeclaration.id, names);
|
|
86
|
+
}
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
if (declaration.type === AST_NODE_TYPES.TSTypeAliasDeclaration ||
|
|
90
|
+
declaration.type === AST_NODE_TYPES.TSInterfaceDeclaration ||
|
|
91
|
+
declaration.type === AST_NODE_TYPES.TSEnumDeclaration) {
|
|
92
|
+
names.add(declaration.id.name);
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
if (declaration.id.type === AST_NODE_TYPES.Identifier) {
|
|
96
|
+
names.add(declaration.id.name);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Collects identifiers from a binding pattern.
|
|
101
|
+
* @param pattern Binding pattern.
|
|
102
|
+
* @param names Output name set.
|
|
103
|
+
* @example
|
|
104
|
+
* ```ts
|
|
105
|
+
* // Internal helper for no-unsafe-vitest-mock-factory-cast.
|
|
106
|
+
* ```
|
|
107
|
+
*/
|
|
108
|
+
function collectPatternNames(pattern, names) {
|
|
109
|
+
if (pattern.type === AST_NODE_TYPES.Identifier) {
|
|
110
|
+
names.add(pattern.name);
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
if (pattern.type === AST_NODE_TYPES.AssignmentPattern) {
|
|
114
|
+
collectPatternNames(pattern.left, names);
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
if (pattern.type === AST_NODE_TYPES.RestElement) {
|
|
118
|
+
collectPatternNames(pattern.argument, names);
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
if (pattern.type === AST_NODE_TYPES.ArrayPattern) {
|
|
122
|
+
for (const element of pattern.elements) {
|
|
123
|
+
if (element !== null) {
|
|
124
|
+
collectPatternNames(element, names);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
if (pattern.type === AST_NODE_TYPES.ObjectPattern) {
|
|
129
|
+
for (const property of pattern.properties) {
|
|
130
|
+
if (property.type === AST_NODE_TYPES.Property) {
|
|
131
|
+
collectPatternNames(property.value, names);
|
|
132
|
+
}
|
|
133
|
+
if (property.type === AST_NODE_TYPES.RestElement) {
|
|
134
|
+
collectPatternNames(property.argument, names);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Collects top-level binding names to avoid collisions with inserted imports.
|
|
141
|
+
* @param statements Program statements.
|
|
142
|
+
* @returns All top-level names in the file.
|
|
143
|
+
* @example
|
|
144
|
+
* ```ts
|
|
145
|
+
* // Internal helper for no-unsafe-vitest-mock-factory-cast.
|
|
146
|
+
* ```
|
|
147
|
+
*/
|
|
148
|
+
function collectTopLevelNames(statements) {
|
|
149
|
+
const names = new Set();
|
|
150
|
+
for (const statement of statements) {
|
|
151
|
+
if (statement.type === AST_NODE_TYPES.ImportDeclaration) {
|
|
152
|
+
for (const specifier of statement.specifiers) {
|
|
153
|
+
names.add(specifier.local.name);
|
|
154
|
+
}
|
|
155
|
+
continue;
|
|
156
|
+
}
|
|
157
|
+
if (statement.type === AST_NODE_TYPES.ExportNamedDeclaration) {
|
|
158
|
+
if (statement.declaration !== null &&
|
|
159
|
+
isNamedDeclaration(statement.declaration)) {
|
|
160
|
+
collectDeclarationNames(statement.declaration, names);
|
|
161
|
+
}
|
|
162
|
+
continue;
|
|
163
|
+
}
|
|
164
|
+
if (statement.type === AST_NODE_TYPES.ExportDefaultDeclaration) {
|
|
165
|
+
if (isNamedDeclaration(statement.declaration)) {
|
|
166
|
+
collectDeclarationNames(statement.declaration, names);
|
|
167
|
+
}
|
|
168
|
+
continue;
|
|
169
|
+
}
|
|
170
|
+
if (isNamedDeclaration(statement)) {
|
|
171
|
+
collectDeclarationNames(statement, names);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
return names;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Creates a namespace import name from a module specifier.
|
|
178
|
+
* @param moduleSpecifier Module path.
|
|
179
|
+
* @returns PascalCase namespace name.
|
|
180
|
+
* @example
|
|
181
|
+
* ```ts
|
|
182
|
+
* // Internal helper for no-unsafe-vitest-mock-factory-cast.
|
|
183
|
+
* ```
|
|
184
|
+
*/
|
|
185
|
+
function createNamespaceName(moduleSpecifier) {
|
|
186
|
+
const baseName = moduleSpecifier
|
|
187
|
+
.split("/")
|
|
188
|
+
.findLast((segment) => segment.length > 0 && segment !== ".")
|
|
189
|
+
?.replace(/\.[^./\\]+$/, "") ?? "Module";
|
|
190
|
+
const pascalName = baseName
|
|
191
|
+
.replaceAll(/[^\dA-Za-z]+/g, " ")
|
|
192
|
+
.split(" ")
|
|
193
|
+
.filter((segment) => segment.length > 0)
|
|
194
|
+
.map((segment) => segment.slice(0, 1).toUpperCase() + segment.slice(1))
|
|
195
|
+
.join("");
|
|
196
|
+
return pascalName.endsWith(moduleTypeSuffix)
|
|
197
|
+
? pascalName
|
|
198
|
+
: `${pascalName}${moduleTypeSuffix}`;
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Returns the casted expression only when the factory is safe to autofix.
|
|
202
|
+
* @param node Factory expression to inspect.
|
|
203
|
+
* @returns Cast-free expression when the factory can be safely replaced.
|
|
204
|
+
* @example
|
|
205
|
+
* ```ts
|
|
206
|
+
* // Internal helper for no-unsafe-vitest-mock-factory-cast.
|
|
207
|
+
* ```
|
|
208
|
+
*/
|
|
209
|
+
function getAutofixableMockExpression(node) {
|
|
210
|
+
if (node.type === AST_NODE_TYPES.ArrowFunctionExpression) {
|
|
211
|
+
if (node.async || node.params.length > 0) {
|
|
212
|
+
return void 0;
|
|
213
|
+
}
|
|
214
|
+
if (node.body.type === AST_NODE_TYPES.BlockStatement) {
|
|
215
|
+
return getAutofixableReturnedCastedExpression(node.body.body);
|
|
216
|
+
}
|
|
217
|
+
return getCastedExpression(node.body);
|
|
218
|
+
}
|
|
219
|
+
if (node.async || node.generator || node.params.length > 0) {
|
|
220
|
+
return void 0;
|
|
221
|
+
}
|
|
222
|
+
return getAutofixableReturnedCastedExpression(node.body.body);
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Finds a casted return value from a single-return factory body.
|
|
226
|
+
* @param statements Function body statements.
|
|
227
|
+
* @returns Returned expression when the factory has exactly one return statement.
|
|
228
|
+
* @example
|
|
229
|
+
* ```ts
|
|
230
|
+
* // Internal helper for no-unsafe-vitest-mock-factory-cast.
|
|
231
|
+
* ```
|
|
232
|
+
*/
|
|
233
|
+
function getAutofixableReturnedCastedExpression(statements) {
|
|
234
|
+
if (statements.length !== 1) {
|
|
235
|
+
return void 0;
|
|
236
|
+
}
|
|
237
|
+
const [statement] = statements;
|
|
238
|
+
if (statement.argument === null) {
|
|
239
|
+
return void 0;
|
|
240
|
+
}
|
|
241
|
+
return getCastedExpression(statement.argument);
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Returns the inner expression if the input is a cast expression.
|
|
245
|
+
* @param expression Expression to inspect.
|
|
246
|
+
* @returns Inner expression when the input contains a cast.
|
|
247
|
+
* @example
|
|
248
|
+
* ```ts
|
|
249
|
+
* // Internal helper for no-unsafe-vitest-mock-factory-cast.
|
|
250
|
+
* ```
|
|
251
|
+
*/
|
|
252
|
+
function getCastedExpression(expression) {
|
|
253
|
+
if (expression.type === AST_NODE_TYPES.TSAsExpression) {
|
|
254
|
+
return stripCastExpressions(expression.expression);
|
|
255
|
+
}
|
|
256
|
+
if (expression.type === AST_NODE_TYPES.TSTypeAssertion) {
|
|
257
|
+
const innerExpression = expression.expression;
|
|
258
|
+
return stripCastExpressions(innerExpression);
|
|
259
|
+
}
|
|
260
|
+
return void 0;
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Returns the partial mock expression after removing a cast wrapper.
|
|
264
|
+
* @param node Factory expression to inspect.
|
|
265
|
+
* @returns Cast-free expression when the factory is unsafe.
|
|
266
|
+
* @example
|
|
267
|
+
* ```ts
|
|
268
|
+
* // Internal helper for no-unsafe-vitest-mock-factory-cast.
|
|
269
|
+
* ```
|
|
270
|
+
*/
|
|
271
|
+
function getCastedMockExpression(node) {
|
|
272
|
+
if (node.type === AST_NODE_TYPES.ArrowFunctionExpression) {
|
|
273
|
+
if (node.body.type === AST_NODE_TYPES.BlockStatement) {
|
|
274
|
+
return getReturnedCastedExpression(node.body.body);
|
|
275
|
+
}
|
|
276
|
+
return getCastedExpression(node.body);
|
|
277
|
+
}
|
|
278
|
+
return getReturnedCastedExpression(node.body.body);
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Returns the range after the final import declaration.
|
|
282
|
+
* @param sourceCode Source code to inspect.
|
|
283
|
+
* @returns Range of the last import statement when present.
|
|
284
|
+
* @example
|
|
285
|
+
* ```ts
|
|
286
|
+
* // Internal helper for no-unsafe-vitest-mock-factory-cast.
|
|
287
|
+
* ```
|
|
288
|
+
*/
|
|
289
|
+
function getImportInsertionRange(sourceCode) {
|
|
290
|
+
let lastImportRange;
|
|
291
|
+
for (const statement of sourceCode.ast.body) {
|
|
292
|
+
if (statement.type === AST_NODE_TYPES.ImportDeclaration &&
|
|
293
|
+
statement.range !== void 0) {
|
|
294
|
+
lastImportRange = statement.range;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
return lastImportRange;
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Collects the most appropriate mock-factory match from a `CallExpression`.
|
|
301
|
+
* @param node Call expression to inspect.
|
|
302
|
+
* @returns Unsafe mock factory details when the factory uses a cast.
|
|
303
|
+
* @example
|
|
304
|
+
* ```ts
|
|
305
|
+
* // Internal helper for no-unsafe-vitest-mock-factory-cast.
|
|
306
|
+
* ```
|
|
307
|
+
*/
|
|
308
|
+
function getMockFactoryMatch(node) {
|
|
309
|
+
if (!isVitestMockCall(node) || node.arguments.length < 2) {
|
|
310
|
+
return void 0;
|
|
311
|
+
}
|
|
312
|
+
const [mockSpecifierNode, mockFactoryNode] = node.arguments;
|
|
313
|
+
if (mockSpecifierNode.type === AST_NODE_TYPES.SpreadElement ||
|
|
314
|
+
mockFactoryNode.type === AST_NODE_TYPES.SpreadElement) {
|
|
315
|
+
return void 0;
|
|
316
|
+
}
|
|
317
|
+
if (mockFactoryNode.type !== AST_NODE_TYPES.ArrowFunctionExpression &&
|
|
318
|
+
mockFactoryNode.type !== AST_NODE_TYPES.FunctionExpression) {
|
|
319
|
+
return void 0;
|
|
320
|
+
}
|
|
321
|
+
const moduleSpecifier = getModuleSpecifier(mockSpecifierNode);
|
|
322
|
+
if (moduleSpecifier === void 0) {
|
|
323
|
+
return void 0;
|
|
324
|
+
}
|
|
325
|
+
const mockExpression = getCastedMockExpression(mockFactoryNode);
|
|
326
|
+
if (mockExpression === void 0) {
|
|
327
|
+
return void 0;
|
|
328
|
+
}
|
|
329
|
+
const autofixableExpression = getAutofixableMockExpression(mockFactoryNode);
|
|
330
|
+
return {
|
|
331
|
+
canAutofix: autofixableExpression !== void 0,
|
|
332
|
+
mockExpression: autofixableExpression ?? mockExpression,
|
|
333
|
+
mockFactoryNode,
|
|
334
|
+
mockSpecifierNode,
|
|
335
|
+
moduleSpecifier,
|
|
336
|
+
node,
|
|
337
|
+
};
|
|
338
|
+
}
|
|
339
|
+
/**
|
|
340
|
+
* Extracts a string module specifier from the first mock argument.
|
|
341
|
+
* @param node First mock argument.
|
|
342
|
+
* @returns Module specifier when statically known.
|
|
343
|
+
* @example
|
|
344
|
+
* ```ts
|
|
345
|
+
* // Internal helper for no-unsafe-vitest-mock-factory-cast.
|
|
346
|
+
* ```
|
|
347
|
+
*/
|
|
348
|
+
function getModuleSpecifier(node) {
|
|
349
|
+
if (node.type === AST_NODE_TYPES.Literal && typeof node.value === "string") {
|
|
350
|
+
return node.value;
|
|
351
|
+
}
|
|
352
|
+
if (node.type === AST_NODE_TYPES.ImportExpression &&
|
|
353
|
+
node.source.type === AST_NODE_TYPES.Literal &&
|
|
354
|
+
typeof node.source.value === "string") {
|
|
355
|
+
return node.source.value;
|
|
356
|
+
}
|
|
357
|
+
return void 0;
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* Finds the casted return value inside a function body.
|
|
361
|
+
* @param statements Function body statements.
|
|
362
|
+
* @returns Returned expression when it is casted.
|
|
363
|
+
* @example
|
|
364
|
+
* ```ts
|
|
365
|
+
* // Internal helper for no-unsafe-vitest-mock-factory-cast.
|
|
366
|
+
* ```
|
|
367
|
+
*/
|
|
368
|
+
function getReturnedCastedExpression(statements) {
|
|
369
|
+
for (const statement of statements) {
|
|
370
|
+
if (statement.type !== AST_NODE_TYPES.ReturnStatement) {
|
|
371
|
+
continue;
|
|
372
|
+
}
|
|
373
|
+
return statement.argument === null
|
|
374
|
+
? void 0
|
|
375
|
+
: getCastedExpression(statement.argument);
|
|
376
|
+
}
|
|
377
|
+
return void 0;
|
|
378
|
+
}
|
|
379
|
+
/**
|
|
380
|
+
* Checks whether a node is a declaration that introduces top-level names.
|
|
381
|
+
* @param node Node to inspect.
|
|
382
|
+
* @returns True when the node is a supported declaration.
|
|
383
|
+
* @example
|
|
384
|
+
* ```ts
|
|
385
|
+
* // Internal helper for no-unsafe-vitest-mock-factory-cast.
|
|
386
|
+
* ```
|
|
387
|
+
*/
|
|
388
|
+
function isNamedDeclaration(node) {
|
|
389
|
+
return (node.type === AST_NODE_TYPES.FunctionDeclaration ||
|
|
390
|
+
node.type === AST_NODE_TYPES.ClassDeclaration ||
|
|
391
|
+
node.type === AST_NODE_TYPES.VariableDeclaration ||
|
|
392
|
+
node.type === AST_NODE_TYPES.TSTypeAliasDeclaration ||
|
|
393
|
+
node.type === AST_NODE_TYPES.TSInterfaceDeclaration ||
|
|
394
|
+
node.type === AST_NODE_TYPES.TSEnumDeclaration ||
|
|
395
|
+
node.type === AST_NODE_TYPES.TSModuleDeclaration);
|
|
396
|
+
}
|
|
397
|
+
/**
|
|
398
|
+
* Checks whether a call targets `vi.mock` or `vi.doMock`.
|
|
399
|
+
* @param node Call expression to inspect.
|
|
400
|
+
* @returns True when the callee is a supported Vitest mock method.
|
|
401
|
+
* @example
|
|
402
|
+
* ```ts
|
|
403
|
+
* // Internal helper for no-unsafe-vitest-mock-factory-cast.
|
|
404
|
+
* ```
|
|
405
|
+
*/
|
|
406
|
+
function isVitestMockCall(node) {
|
|
407
|
+
if (node.callee.type !== AST_NODE_TYPES.MemberExpression ||
|
|
408
|
+
node.callee.object.type !== AST_NODE_TYPES.Identifier ||
|
|
409
|
+
node.callee.object.name !== "vi" ||
|
|
410
|
+
node.callee.property.type !== AST_NODE_TYPES.Identifier) {
|
|
411
|
+
return false;
|
|
412
|
+
}
|
|
413
|
+
return supportedMockNames.has(node.callee.property.name);
|
|
414
|
+
}
|
|
415
|
+
/**
|
|
416
|
+
* Resolves the namespace import to use for `typeof Namespace`.
|
|
417
|
+
* @param sourceCode Source code for import inspection.
|
|
418
|
+
* @param moduleSpecifier Module path being mocked.
|
|
419
|
+
* @returns Existing or generated namespace import details.
|
|
420
|
+
* @example
|
|
421
|
+
* ```ts
|
|
422
|
+
* // Internal helper for no-unsafe-vitest-mock-factory-cast.
|
|
423
|
+
* ```
|
|
424
|
+
*/
|
|
425
|
+
function resolveModuleTypeImport(sourceCode, moduleSpecifier) {
|
|
426
|
+
const statements = sourceCode.ast.body;
|
|
427
|
+
const preferredName = createNamespaceName(moduleSpecifier);
|
|
428
|
+
for (const statement of statements) {
|
|
429
|
+
if (statement.type !== AST_NODE_TYPES.ImportDeclaration ||
|
|
430
|
+
statement.source.value !== moduleSpecifier) {
|
|
431
|
+
continue;
|
|
432
|
+
}
|
|
433
|
+
for (const specifier of statement.specifiers) {
|
|
434
|
+
if (specifier.type === AST_NODE_TYPES.ImportNamespaceSpecifier) {
|
|
435
|
+
return { isExisting: true, namespaceName: specifier.local.name };
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
const usedNames = collectTopLevelNames(statements);
|
|
440
|
+
let namespaceName = preferredName;
|
|
441
|
+
let suffix = 1;
|
|
442
|
+
while (usedNames.has(namespaceName)) {
|
|
443
|
+
namespaceName = `${preferredName}${suffix.toFixed(0)}`;
|
|
444
|
+
suffix += 1;
|
|
445
|
+
}
|
|
446
|
+
return { isExisting: false, namespaceName };
|
|
447
|
+
}
|
|
448
|
+
/**
|
|
449
|
+
* Removes nested cast wrappers from an expression.
|
|
450
|
+
* @param expression Expression to normalize.
|
|
451
|
+
* @returns Expression without any surrounding casts.
|
|
452
|
+
* @example
|
|
453
|
+
* ```ts
|
|
454
|
+
* // Internal helper for no-unsafe-vitest-mock-factory-cast.
|
|
455
|
+
* ```
|
|
456
|
+
*/
|
|
457
|
+
function stripCastExpressions(expression) {
|
|
458
|
+
if (expression.type === AST_NODE_TYPES.TSAsExpression) {
|
|
459
|
+
return stripCastExpressions(expression.expression);
|
|
460
|
+
}
|
|
461
|
+
if (expression.type === AST_NODE_TYPES.TSTypeAssertion) {
|
|
462
|
+
return stripCastExpressions(expression.expression);
|
|
463
|
+
}
|
|
464
|
+
return expression;
|
|
465
|
+
}
|
|
466
|
+
export { noUnsafeVitestMockFactoryCastRule };
|
|
467
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb21haW4vdGVzdGluZy9uby11bnNhZmUtdml0ZXN0LW1vY2stZmFjdG9yeS1jYXN0L3J1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLGNBQWMsRUFBaUIsTUFBTSwwQkFBMEIsQ0FBQztBQStDekUsd0NBQXdDO0FBQ3hDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUV2RCxzREFBc0Q7QUFDdEQsTUFBTSxnQkFBZ0IsR0FBRyxRQUFRLENBQUM7QUFFbEMsNERBQTREO0FBQzVELE1BQU0saUNBQWlDLEdBQW9CO0lBQ3pELE1BQU0sQ0FBQyxPQUF5QjtRQUM5QixPQUFPO1lBQ0wsY0FBYyxDQUFDLElBQUk7Z0JBQ2pCLE1BQU0sS0FBSyxHQUFHLG1CQUFtQixDQUFDLElBQStCLENBQUMsQ0FBQztnQkFDbkUsSUFBSSxLQUFLLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDckIsT0FBTztnQkFDVCxDQUFDO2dCQUVELE9BQU8sQ0FBQyxNQUFNLENBQUM7b0JBQ2IsR0FBRyxFQUFFLEtBQUssQ0FBQyxVQUFVO3dCQUNuQixDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQWMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQzt3QkFDMUQsQ0FBQyxDQUFDLEtBQUssQ0FBQztvQkFDVixTQUFTLEVBQUUsK0JBQStCO29CQUMxQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7aUJBQ2pCLENBQUMsQ0FBQztZQUNMLENBQUM7U0FDMEIsQ0FBQztJQUNoQyxDQUFDO0lBQ0QsSUFBSSxFQUFFO1FBQ0osSUFBSSxFQUFFO1lBQ0osV0FBVyxFQUNULDJHQUEyRztZQUM3RyxXQUFXLEVBQUUsSUFBSTtZQUNqQixHQUFHLEVBQUUscUdB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QUFDLElBQUksS0FBSyxjQUFjLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkQsT0FBTyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUM7QUFFRCxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUnVsZSB9IGZyb20gXCJlc2xpbnRcIjtcblxuaW1wb3J0IHsgQVNUX05PREVfVFlQRVMsIHR5cGUgVFNFU1RyZWUgfSBmcm9tIFwiQHR5cGVzY3JpcHQtZXNsaW50L3V0aWxzXCI7XG5cbi8qKiBVbnNhZmUgbW9jay1mYWN0b3J5IG1hdGNoIGRldGFpbHMuICovXG5pbnRlcmZhY2UgTW9ja0ZhY3RvcnlNYXRjaCB7XG4gIC8qKiBXaGV0aGVyIHRoZSBtYXRjaCBjYW4gYmUgc2FmZWx5IGF1dG9maXhlZC4gKi9cbiAgY2FuQXV0b2ZpeDogYm9vbGVhbjtcblxuICAvKiogQ2FzdC1mcmVlIHBhcnRpYWwgbW9jayBleHByZXNzaW9uLiAqL1xuICBtb2NrRXhwcmVzc2lvbjogVFNFU1RyZWUuRXhwcmVzc2lvbjtcblxuICAvKiogU2Vjb25kIGFyZ3VtZW50IHRvIHRoZSBWaXRlc3QgbW9jayBjYWxsLiAqL1xuICBtb2NrRmFjdG9yeU5vZGU6XG4gICAgfCBUU0VTVHJlZS5BcnJvd0Z1bmN0aW9uRXhwcmVzc2lvblxuICAgIHwgVFNFU1RyZWUuRnVuY3Rpb25FeHByZXNzaW9uO1xuXG4gIC8qKiBGaXJzdCBhcmd1bWVudCB0byB0aGUgVml0ZXN0IG1vY2sgY2FsbC4gKi9cbiAgbW9ja1NwZWNpZmllck5vZGU6IFRTRVNUcmVlLkV4cHJlc3Npb247XG5cbiAgLyoqIE1vY2tlZCBtb2R1bGUgc3BlY2lmaWVyLiAqL1xuICBtb2R1bGVTcGVjaWZpZXI6IHN0cmluZztcblxuICAvKiogUmVwb3J0IG5vZGUuICovXG4gIG5vZGU6IFRTRVNUcmVlLk5vZGU7XG59XG5cbi8qKiBOYW1lc3BhY2UgaW1wb3J0IGRldGFpbHMgZm9yIHRoZSBtb2NrZWQgbW9kdWxlLiAqL1xuaW50ZXJmYWNlIE1vZHVsZVR5cGVJbXBvcnQge1xuICAvKiogV2hldGhlciB0aGUgbmFtZXNwYWNlIGltcG9ydCBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgZmlsZS4gKi9cbiAgaXNFeGlzdGluZzogYm9vbGVhbjtcblxuICAvKiogTmFtZXNwYWNlIGlkZW50aWZpZXIgdXNlZCBpbiBgdHlwZW9mIE5hbWVzcGFjZWAuICovXG4gIG5hbWVzcGFjZU5hbWU6IHN0cmluZztcbn1cblxuLyoqIFN1cHBvcnRlZCBkZWNsYXJhdGlvbiBzaGFwZXMgdGhhdCBjYW4gaW50cm9kdWNlIHRvcC1sZXZlbCBuYW1lcy4gKi9cbnR5cGUgTmFtZWREZWNsYXJhdGlvbiA9XG4gIHwgVFNFU1RyZWUuQ2xhc3NEZWNsYXJhdGlvblxuICB8IFRTRVNUcmVlLkZ1bmN0aW9uRGVjbGFyYXRpb25cbiAgfCBUU0VTVHJlZS5UU0VudW1EZWNsYXJhdGlvblxuICB8IFRTRVNUcmVlLlRTSW50ZXJmYWNlRGVjbGFyYXRpb25cbiAgfCBUU0VTVHJlZS5UU01vZHVsZURlY2xhcmF0aW9uXG4gIHwgVFNFU1RyZWUuVFNUeXBlQWxpYXNEZWNsYXJhdGlvblxuICB8IFRTRVNUcmVlLlZhcmlhYmxlRGVjbGFyYXRpb247XG5cbi8qKiBNaW5pbWFsIHNvdXJjZS1jb2RlIHN1cmZhY2UgdXNlZCBieSB0aGUgcnVsZS4gKi9cbnR5cGUgU291cmNlQ29kZUxpa2UgPSBQaWNrPFJ1bGUuUnVsZUNvbnRleHRbXCJzb3VyY2VDb2RlXCJdLCBcImFzdFwiIHwgXCJnZXRUZXh0XCI+O1xuXG4vKiogU3VwcG9ydGVkIGB2aWAgbW9jayBtZXRob2QgbmFtZXMuICovXG5jb25zdCBzdXBwb3J0ZWRNb2NrTmFtZXMgPSBuZXcgU2V0KFtcImRvTW9ja1wiLCBcIm1vY2tcIl0pO1xuXG4vKiogRGVmYXVsdCBzdWZmaXggZm9yIGdlbmVyYXRlZCBuYW1lc3BhY2UgaW1wb3J0cy4gKi9cbmNvbnN0IG1vZHVsZVR5cGVTdWZmaXggPSBcIk1vZHVsZVwiO1xuXG4vKiogRGlzYWxsb3dzIGNhc3RlZCBgdmkubW9ja2AgYW5kIGB2aS5kb01vY2tgIGZhY3Rvcmllcy4gKi9cbmNvbnN0IG5vVW5zYWZlVml0ZXN0TW9ja0ZhY3RvcnlDYXN0UnVsZTogUnVsZS5SdWxlTW9kdWxlID0ge1xuICBjcmVhdGUoY29udGV4dDogUnVsZS5SdWxlQ29udGV4dCk6IFJ1bGUuUnVsZUxpc3RlbmVyIHtcbiAgICByZXR1cm4ge1xuICAgICAgQ2FsbEV4cHJlc3Npb24obm9kZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBtYXRjaCA9IGdldE1vY2tGYWN0b3J5TWF0Y2gobm9kZSBhcyBUU0VTVHJlZS5DYWxsRXhwcmVzc2lvbik7XG4gICAgICAgIGlmIChtYXRjaCA9PT0gdm9pZCAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgIGZpeDogbWF0Y2guY2FuQXV0b2ZpeFxuICAgICAgICAgICAgPyAoZml4ZXIpOiBSdWxlLkZpeFtdID0+IGJ1aWxkRml4ZXMoY29udGV4dCwgZml4ZXIsIG1hdGNoKVxuICAgICAgICAgICAgOiB2b2lkIDAsXG4gICAgICAgICAgbWVzc2FnZUlkOiBcIm5vVW5zYWZlVml0ZXN0TW9ja0ZhY3RvcnlDYXN0XCIsXG4gICAgICAgICAgbm9kZTogbWF0Y2gubm9kZSxcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgIH0gc2F0aXNmaWVzIFJ1bGUuUnVsZUxpc3RlbmVyO1xuICB9LFxuICBtZXRhOiB7XG4gICAgZG9jczoge1xuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiRGlzYWxsb3cgY2FzdGVkIHZpLm1vY2sgYW5kIHZpLmRvTW9jayBmYWN0b3JpZXMgYW5kIHByZWZlciBjcmVhdGVNb2NrUHJveHkoLi4uKSBmb3IgcGFydGlhbCBtb2R1bGUgbW9ja3MuXCIsXG4gICAgICByZWNvbW1lbmRlZDogdHJ1ZSxcbiAgICAgIHVybDogXCJodHRwczovL2dpdGh1Yi5jb20vcGFybG90aS9lc2xpbnQtcGx1Z2luL2Jsb2IvbWFpbi9kb2NzL3J1bGVzL25vLXVuc2FmZS12aXRlc3QtbW9jay1mYWN0b3J5LWNhc3QubWRcIixcbiAgICB9LFxuICAgIGZpeGFibGU6IFwiY29kZVwiLFxuICAgIG1lc3NhZ2VzOiB7XG4gICAgICBub1Vuc2FmZVZpdGVzdE1vY2tGYWN0b3J5Q2FzdDpcbiAgICAgICAgXCJBdm9pZCBjYXN0aW5nIHZpLm1vY2svdmkuZG9Nb2NrIGZhY3RvcnkgcmVzdWx0czsgdXNlIGNyZWF0ZU1vY2tQcm94eSguLi4pIHdpdGggYSB0eXBlLW9ubHkgbW9kdWxlIGltcG9ydCBpbnN0ZWFkLlwiLFxuICAgIH0sXG4gICAgc2NoZW1hOiBbXSxcbiAgICB0eXBlOiBcInByb2JsZW1cIixcbiAgfSxcbn07XG5cbi8qKiBDYWxsRXhwcmVzc2lvbiBhcmd1bWVudCB0aGF0IGlzIG5vdCBhIHNwcmVhZCBlbGVtZW50LiAqL1xudHlwZSBOb25TcHJlYWRDYWxsRXhwcmVzc2lvbkFyZ3VtZW50ID0gRXhjbHVkZTxcbiAgVFNFU1RyZWUuQ2FsbEV4cHJlc3Npb25Bcmd1bWVudCxcbiAgVFNFU1RyZWUuU3ByZWFkRWxlbWVudFxuPjtcblxuLyoqXG4gKiBCdWlsZHMgYWxsIGZpeGVzIGZvciBvbmUgdW5zYWZlIG1vY2sgZmFjdG9yeS5cbiAqIEBwYXJhbSBjb250ZXh0IFJ1bGUgY29udGV4dC5cbiAqIEBwYXJhbSBmaXhlciBFU0xpbnQgZml4ZXIuXG4gKiBAcGFyYW0gbWF0Y2ggVW5zYWZlIG1vY2sgZmFjdG9yeSBkZXRhaWxzLlxuICogQHJldHVybnMgQWxsIGZpeGVyIG9wZXJhdGlvbnMuXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIC8vIEludGVybmFsIGhlbHBlciBmb3Igbm8tdW5zYWZlLXZpdGVzdC1tb2NrLWZhY3RvcnktY2FzdC5cbiAqIGBgYFxuICovXG5mdW5jdGlvbiBidWlsZEZpeGVzKFxuICBjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0LFxuICBmaXhlcjogUnVsZS5SdWxlRml4ZXIsXG4gIG1hdGNoOiBNb2NrRmFjdG9yeU1hdGNoLFxuKTogUnVsZS5GaXhbXSB7XG4gIGNvbnN0IHNvdXJjZUNvZGUgPSBjb250ZXh0LnNvdXJjZUNvZGU7XG4gIGNvbnN0IG1vZHVsZVR5cGVJbXBvcnQgPSByZXNvbHZlTW9kdWxlVHlwZUltcG9ydChcbiAgICBzb3VyY2VDb2RlLFxuICAgIG1hdGNoLm1vZHVsZVNwZWNpZmllcixcbiAgKTtcbiAgY29uc3QgZmFjdG9yeVRleHQgPSBgY3JlYXRlTW9ja1Byb3h5PHR5cGVvZiAke21vZHVsZVR5cGVJbXBvcnQubmFtZXNwYWNlTmFtZX0+KCR7c291cmNlQ29kZS5nZXRUZXh0KG1hdGNoLm1vY2tFeHByZXNzaW9uIGFzIG5ldmVyKX0pYDtcbiAgY29uc3QgZml4ZXM6IFJ1bGUuRml4W10gPSBbXG4gICAgZml4ZXIucmVwbGFjZVRleHRSYW5nZShtYXRjaC5tb2NrRmFjdG9yeU5vZGUucmFuZ2UsIGZhY3RvcnlUZXh0KSxcbiAgXTtcblxuICBpZiAoIW1vZHVsZVR5cGVJbXBvcnQuaXNFeGlzdGluZykge1xuICAgIGNvbnN0IGltcG9ydFRleHQgPSBgaW1wb3J0IHR5cGUgKiBhcyAke21vZHVsZVR5cGVJbXBvcnQubmFtZXNwYWNlTmFtZX0gZnJvbSAke0pTT04uc3RyaW5naWZ5KG1hdGNoLm1vZHVsZVNwZWNpZmllcil9O2A7XG4gICAgY29uc3QgaW5zZXJ0aW9uUmFuZ2UgPSBnZXRJbXBvcnRJbnNlcnRpb25SYW5nZShzb3VyY2VDb2RlKTtcblxuICAgIGZpeGVzLnB1c2goXG4gICAgICBpbnNlcnRpb25SYW5nZSA9PT0gdm9pZCAwXG4gICAgICAgID8gZml4ZXIuaW5zZXJ0VGV4dEJlZm9yZVJhbmdlKFswLCAwXSwgYCR7aW1wb3J0VGV4dH1cXG5cXG5gKVxuICAgICAgICA6IGZpeGVyLmluc2VydFRleHRBZnRlclJhbmdlKGluc2VydGlvblJhbmdlLCBgXFxuJHtpbXBvcnRUZXh0fWApLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gZml4ZXM7XG59XG5cbi8qKlxuICogQ29sbGVjdHMgZGVjbGFyYXRpb24gaWRlbnRpZmllcnMgZnJvbSB0b3AtbGV2ZWwgZGVjbGFyYXRpb25zLlxuICogQHBhcmFtIGRlY2xhcmF0aW9uIERlY2xhcmF0aW9uIG5vZGUuXG4gKiBAcGFyYW0gbmFtZXMgT3V0cHV0IG5hbWUgc2V0LlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiAvLyBJbnRlcm5hbCBoZWxwZXIgZm9yIG5vLXVuc2FmZS12aXRlc3QtbW9jay1mYWN0b3J5LWNhc3QuXG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gY29sbGVjdERlY2xhcmF0aW9uTmFtZXMoXG4gIGRlY2xhcmF0aW9uOiBOYW1lZERlY2xhcmF0aW9uLFxuICBuYW1lczogU2V0PHN0cmluZz4sXG4pOiB2b2lkIHtcbiAgaWYgKFxuICAgIGRlY2xhcmF0aW9uLnR5cGUgPT09IEFTVF9OT0RFX1RZUEVTLkZ1bmN0aW9uRGVjbGFyYXRpb24gfHxcbiAgICBkZWNsYXJhdGlvbi50eXBlID09PSBBU1RfTk9ERV9UWVBFUy5DbGFzc0RlY2xhcmF0aW9uXG4gICkge1xuICAgIGlmIChkZWNsYXJhdGlvbi5pZCAhPT0gbnVsbCkge1xuICAgICAgbmFtZXMuYWRkKGRlY2xhcmF0aW9uLmlkLm5hbWUpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoZGVjbGFyYXRpb24udHlwZSA9PT0gQVNUX05PREVfVFlQRVMuVmFyaWFibGVEZWNsYXJhdGlvbikge1xuICAgIGZvciAoY29uc3QgdmFyaWFibGVEZWNsYXJhdGlvbiBvZiBkZWNsYXJhdGlvbi5kZWNsYXJhdGlvbnMpIHtcbiAgICAgIGNvbGxlY3RQYXR0ZXJuTmFtZXModmFyaWFibGVEZWNsYXJhdGlvbi5pZCwgbmFtZXMpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoXG4gICAgZGVjbGFyYXRpb24udHlwZSA9PT0gQVNUX05PREVfVFlQRVMuVFNUeXBlQWxpYXNEZWNsYXJhdGlvbiB8fFxuICAgIGRlY2xhcmF0aW9uLnR5cGUgPT09IEFTVF9OT0RFX1RZUEVTLlRTSW50ZXJmYWNlRGVjbGFyYXRpb24gfHxcbiAgICBkZWNsYXJhdGlvbi50eXBlID09PSBBU1RfTk9ERV9UWVBFUy5UU0VudW1EZWNsYXJhdGlvblxuICApIHtcbiAgICBuYW1lcy5hZGQoZGVjbGFyYXRpb24uaWQubmFtZSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGRlY2xhcmF0aW9uLmlkLnR5cGUgPT09IEFTVF9OT0RFX1RZUEVTLklkZW50aWZpZXIpIHtcbiAgICBuYW1lcy5hZGQoZGVjbGFyYXRpb24uaWQubmFtZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBDb2xsZWN0cyBpZGVudGlmaWVycyBmcm9tIGEgYmluZGluZyBwYXR0ZXJuLlxuICogQHBhcmFtIHBhdHRlcm4gQmluZGluZyBwYXR0ZXJuLlxuICogQHBhcmFtIG5hbWVzIE91dHB1dCBuYW1lIHNldC5cbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogLy8gSW50ZXJuYWwgaGVscGVyIGZvciBuby11bnNhZmUtdml0ZXN0LW1vY2stZmFjdG9yeS1jYXN0LlxuICogYGBgXG4gKi9cbmZ1bmN0aW9uIGNvbGxlY3RQYXR0ZXJuTmFtZXMocGF0dGVybjogVFNFU1RyZWUuTm9kZSwgbmFtZXM6IFNldDxzdHJpbmc+KTogdm9pZCB7XG4gIGlmIChwYXR0ZXJuLnR5cGUgPT09IEFTVF9OT0RFX1RZUEVTLklkZW50aWZpZXIpIHtcbiAgICBuYW1lcy5hZGQocGF0dGVybi5uYW1lKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAocGF0dGVybi50eXBlID09PSBBU1RfTk9ERV9UWVBFUy5Bc3NpZ25tZW50UGF0dGVybikge1xuICAgIGNvbGxlY3RQYXR0ZXJuTmFtZXMocGF0dGVybi5sZWZ0LCBuYW1lcyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHBhdHRlcm4udHlwZSA9PT0gQVNUX05PREVfVFlQRVMuUmVzdEVsZW1lbnQpIHtcbiAgICBjb2xsZWN0UGF0dGVybk5hbWVzKHBhdHRlcm4uYXJndW1lbnQsIG5hbWVzKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAocGF0dGVybi50eXBlID09PSBBU1RfTk9ERV9UWVBFUy5BcnJheVBhdHRlcm4pIHtcbiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgcGF0dGVybi5lbGVtZW50cykge1xuICAgICAgaWYgKGVsZW1lbnQgIT09IG51bGwpIHtcbiAgICAgICAgY29sbGVjdFBhdHRlcm5OYW1lcyhlbGVtZW50LCBuYW1lcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHBhdHRlcm4udHlwZSA9PT0gQVNUX05PREVfVFlQRVMuT2JqZWN0UGF0dGVybikge1xuICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgcGF0dGVybi5wcm9wZXJ0aWVzKSB7XG4gICAgICBpZiAocHJvcGVydHkudHlwZSA9PT0gQVNUX05PREVfVFlQRVMuUHJvcGVydHkpIHtcbiAgICAgICAgY29sbGVjdFBhdHRlcm5OYW1lcyhwcm9wZXJ0eS52YWx1ZSwgbmFtZXMpO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvcGVydHkudHlwZSA9PT0gQVNUX05PREVfVFlQRVMuUmVzdEVsZW1lbnQpIHtcbiAgICAgICAgY29sbGVjdFBhdHRlcm5OYW1lcyhwcm9wZXJ0eS5hcmd1bWVudCwgbmFtZXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIENvbGxlY3RzIHRvcC1sZXZlbCBiaW5kaW5nIG5hbWVzIHRvIGF2b2lkIGNvbGxpc2lvbnMgd2l0aCBpbnNlcnRlZCBpbXBvcnRzLlxuICogQHBhcmFtIHN0YXRlbWVudHMgUHJvZ3JhbSBzdGF0ZW1lbnRzLlxuICogQHJldHVybnMgQWxsIHRvcC1sZXZlbCBuYW1lcyBpbiB0aGUgZmlsZS5cbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogLy8gSW50ZXJuYWwgaGVscGVyIGZvciBuby11bnNhZmUtdml0ZXN0LW1vY2stZmFjdG9yeS1jYXN0LlxuICogYGBgXG4gKi9cbmZ1bmN0aW9uIGNvbGxlY3RUb3BMZXZlbE5hbWVzKHN0YXRlbWVudHM6IHJlYWRvbmx5IHVua25vd25bXSk6IFNldDxzdHJpbmc+IHtcbiAgY29uc3QgbmFtZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiBzdGF0ZW1lbnRzIGFzIFRTRVNUcmVlLlByb2dyYW1TdGF0ZW1lbnRbXSkge1xuICAgIGlmIChzdGF0ZW1lbnQudHlwZSA9PT0gQVNUX05PREVfVFlQRVMuSW1wb3J0RGVjbGFyYXRpb24pIHtcbiAgICAgIGZvciAoY29uc3Qgc3BlY2lmaWVyIG9mIHN0YXRlbWVudC5zcGVjaWZpZXJzKSB7XG4gICAgICAgIG5hbWVzLmFkZChzcGVjaWZpZXIubG9jYWwubmFtZSk7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGVtZW50LnR5cGUgPT09IEFTVF9OT0RFX1RZUEVTLkV4cG9ydE5hbWVkRGVjbGFyYXRpb24pIHtcbiAgICAgIGlmIChcbiAgICAgICAgc3RhdGVtZW50LmRlY2xhcmF0aW9uICE9PSBudWxsICYmXG4gICAgICAgIGlzTmFtZWREZWNsYXJhdGlvbihzdGF0ZW1lbnQuZGVjbGFyYXRpb24pXG4gICAgICApIHtcbiAgICAgICAgY29sbGVjdERlY2xhcmF0aW9uTmFtZXMoc3RhdGVtZW50LmRlY2xhcmF0aW9uLCBuYW1lcyk7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGVtZW50LnR5cGUgPT09IEFTVF9OT0RFX1RZUEVTLkV4cG9ydERlZmF1bHREZWNsYXJhdGlvbikge1xuICAgICAgaWYgKGlzTmFtZWREZWNsYXJhdGlvbihzdGF0ZW1lbnQuZGVjbGFyYXRpb24pKSB7XG4gICAgICAgIGNvbGxlY3REZWNsYXJhdGlvbk5hbWVzKHN0YXRlbWVudC5kZWNsYXJhdGlvbiwgbmFtZXMpO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGlzTmFtZWREZWNsYXJhdGlvbihzdGF0ZW1lbnQpKSB7XG4gICAgICBjb2xsZWN0RGVjbGFyYXRpb25OYW1lcyhzdGF0ZW1lbnQsIG5hbWVzKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmFtZXM7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5hbWVzcGFjZSBpbXBvcnQgbmFtZSBmcm9tIGEgbW9kdWxlIHNwZWNpZmllci5cbiAqIEBwYXJhbSBtb2R1bGVTcGVjaWZpZXIgTW9kdWxlIHBhdGguXG4gKiBAcmV0dXJucyBQYXNjYWxDYXNlIG5hbWVzcGFjZSBuYW1lLlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiAvLyBJbnRlcm5hbCBoZWxwZXIgZm9yIG5vLXVuc2FmZS12aXRlc3QtbW9jay1mYWN0b3J5LWNhc3QuXG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gY3JlYXRlTmFtZXNwYWNlTmFtZShtb2R1bGVTcGVjaWZpZXI6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGJhc2VOYW1lID1cbiAgICBtb2R1bGVTcGVjaWZpZXJcbiAgICAgIC5zcGxpdChcIi9cIilcbiAgICAgIC5maW5kTGFzdCgoc2VnbWVudCkgPT4gc2VnbWVudC5sZW5ndGggPiAwICYmIHNlZ21lbnQgIT09IFwiLlwiKVxuICAgICAgPy5yZXBsYWNlKC9cXC5bXi4vXFxcXF0rJC8sIFwiXCIpID8/IFwiTW9kdWxlXCI7XG5cbiAgY29uc3QgcGFzY2FsTmFtZSA9IGJhc2VOYW1lXG4gICAgLnJlcGxhY2VBbGwoL1teXFxkQS1aYS16XSsvZywgXCIgXCIpXG4gICAgLnNwbGl0KFwiIFwiKVxuICAgIC5maWx0ZXIoKHNlZ21lbnQpID0+IHNlZ21lbnQubGVuZ3RoID4gMClcbiAgICAubWFwKChzZWdtZW50KSA9PiBzZWdtZW50LnNsaWNlKDAsIDEpLnRvVXBwZXJDYXNlKCkgKyBzZWdtZW50LnNsaWNlKDEpKVxuICAgIC5qb2luKFwiXCIpO1xuXG4gIHJldHVybiBwYXNjYWxOYW1lLmVuZHNXaXRoKG1vZHVsZVR5cGVTdWZmaXgpXG4gICAgPyBwYXNjYWxOYW1lXG4gICAgOiBgJHtwYXNjYWxOYW1lfSR7bW9kdWxlVHlwZVN1ZmZpeH1gO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGNhc3RlZCBleHByZXNzaW9uIG9ubHkgd2hlbiB0aGUgZmFjdG9yeSBpcyBzYWZlIHRvIGF1dG9maXguXG4gKiBAcGFyYW0gbm9kZSBGYWN0b3J5IGV4cHJlc3Npb24gdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIENhc3QtZnJlZSBleHByZXNzaW9uIHdoZW4gdGhlIGZhY3RvcnkgY2FuIGJlIHNhZmVseSByZXBsYWNlZC5cbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogLy8gSW50ZXJuYWwgaGVscGVyIGZvciBuby11bnNhZmUtdml0ZXN0LW1vY2stZmFjdG9yeS1jYXN0LlxuICogYGBgXG4gKi9cbmZ1bmN0aW9uIGdldEF1dG9maXhhYmxlTW9ja0V4cHJlc3Npb24oXG4gIG5vZGU6IFRTRVNUcmVlLkFycm93RnVuY3Rpb25FeHByZXNzaW9uIHwgVFNFU1RyZWUuRnVuY3Rpb25FeHByZXNzaW9uLFxuKTogVFNFU1RyZWUuRXhwcmVzc2lvbiB8IHVuZGVmaW5lZCB7XG4gIGlmIChub2RlLnR5cGUgPT09IEFTVF9OT0RFX1RZUEVTLkFycm93RnVuY3Rpb25FeHByZXNzaW9uKSB7XG4gICAgaWYgKG5vZGUuYXN5bmMgfHwgbm9kZS5wYXJhbXMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICB9XG5cbiAgICBpZiAobm9kZS5ib2R5LnR5cGUgPT09IEFTVF9OT0RFX1RZUEVTLkJsb2NrU3RhdGVtZW50KSB7XG4gICAgICByZXR1cm4gZ2V0QXV0b2ZpeGFibGVSZXR1cm5lZENhc3RlZEV4cHJlc3Npb24obm9kZS5ib2R5LmJvZHkpO1xuICAgIH1cblxuICAgIHJldHVybiBnZXRDYXN0ZWRFeHByZXNzaW9uKG5vZGUuYm9keSk7XG4gIH1cblxuICBpZiAobm9kZS5hc3luYyB8fCBub2RlLmdlbmVyYXRvciB8fCBub2RlLnBhcmFtcy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfVxuXG4gIHJldHVybiBnZXRBdXRvZml4YWJsZVJldHVybmVkQ2FzdGVkRXhwcmVzc2lvbihub2RlLmJvZHkuYm9keSk7XG59XG5cbi8qKlxuICogRmluZHMgYSBjYXN0ZWQgcmV0dXJuIHZhbHVlIGZyb20gYSBzaW5nbGUtcmV0dXJuIGZhY3RvcnkgYm9keS5cbiAqIEBwYXJhbSBzdGF0ZW1lbnRzIEZ1bmN0aW9uIGJvZHkgc3RhdGVtZW50cy5cbiAqIEByZXR1cm5zIFJldHVybmVkIGV4cHJlc3Npb24gd2hlbiB0aGUgZmFjdG9yeSBoYXMgZXhhY3RseSBvbmUgcmV0dXJuIHN0YXRlbWVudC5cbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogLy8gSW50ZXJuYWwgaGVscGVyIGZvciBuby11bnNhZmUtdml0ZXN0LW1vY2stZmFjdG9yeS1jYXN0LlxuICogYGBgXG4gKi9cbmZ1bmN0aW9uIGdldEF1dG9maXhhYmxlUmV0dXJuZWRDYXN0ZWRFeHByZXNzaW9uKFxuICBzdGF0ZW1lbnRzOiBUU0VTVHJlZS5TdGF0ZW1lbnRbXSxcbik6IFRTRVNUcmVlLkV4cHJlc3Npb24gfCB1bmRlZmluZWQge1xuICBpZiAoc3RhdGVtZW50cy5sZW5ndGggIT09IDEpIHtcbiAgICByZXR1cm4gdm9pZCAwO1xuICB9XG5cbiAgY29uc3QgW3N0YXRlbWVudF0gPSBzdGF0ZW1lbnRzIGFzIFtUU0VTVHJlZS5SZXR1cm5TdGF0ZW1lbnRdO1xuICBpZiAoc3RhdGVtZW50LmFyZ3VtZW50ID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfVxuXG4gIHJldHVybiBnZXRDYXN0ZWRFeHByZXNzaW9uKHN0YXRlbWVudC5hcmd1bWVudCk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgaW5uZXIgZXhwcmVzc2lvbiBpZiB0aGUgaW5wdXQgaXMgYSBjYXN0IGV4cHJlc3Npb24uXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiBFeHByZXNzaW9uIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyBJbm5lciBleHByZXNzaW9uIHdoZW4gdGhlIGlucHV0IGNvbnRhaW5zIGEgY2FzdC5cbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogLy8gSW50ZXJuYWwgaGVscGVyIGZvciBuby11bnNhZmUtdml0ZXN0LW1vY2stZmFjdG9yeS1jYXN0LlxuICogYGBgXG4gKi9cbmZ1bmN0aW9uIGdldENhc3RlZEV4cHJlc3Npb24oXG4gIGV4cHJlc3Npb246IFRTRVNUcmVlLkV4cHJlc3Npb24sXG4pOiBUU0VTVHJlZS5FeHByZXNzaW9uIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGV4cHJlc3Npb24udHlwZSA9PT0gQVNUX05PREVfVFlQRVMuVFNBc0V4cHJlc3Npb24pIHtcbiAgICByZXR1cm4gc3RyaXBDYXN0RXhwcmVzc2lvbnMoZXhwcmVzc2lvbi5leHByZXNzaW9uKTtcbiAgfVxuXG4gIGlmIChleHByZXNzaW9uLnR5cGUgPT09IEFTVF9OT0RFX1RZUEVTLlRTVHlwZUFzc2VydGlvbikge1xuICAgIGNvbnN0IGlubmVyRXhwcmVzc2lvbiA9IGV4cHJlc3Npb24uZXhwcmVzc2lvbjtcbiAgICByZXR1cm4gc3RyaXBDYXN0RXhwcmVzc2lvbnMoaW5uZXJFeHByZXNzaW9uKTtcbiAgfVxuXG4gIHJldHVybiB2b2lkIDA7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcGFydGlhbCBtb2NrIGV4cHJlc3Npb24gYWZ0ZXIgcmVtb3ZpbmcgYSBjYXN0IHdyYXBwZXIuXG4gKiBAcGFyYW0gbm9kZSBGYWN0b3J5IGV4cHJlc3Npb24gdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIENhc3QtZnJlZSBleHByZXNzaW9uIHdoZW4gdGhlIGZhY3RvcnkgaXMgdW5zYWZlLlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiAvLyBJbnRlcm5hbCBoZWxwZXIgZm9yIG5vLXVuc2FmZS12aXRlc3QtbW9jay1mYWN0b3J5LWNhc3QuXG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gZ2V0Q2FzdGVkTW9ja0V4cHJlc3Npb24oXG4gIG5vZGU6IFRTRVNUcmVlLkFycm93RnVuY3Rpb25FeHByZXNzaW9uIHwgVFNFU1RyZWUuRnVuY3Rpb25FeHByZXNzaW9uLFxuKTogVFNFU1RyZWUuRXhwcmVzc2lvbiB8IHVuZGVmaW5lZCB7XG4gIGlmIChub2RlLnR5cGUgPT09IEFTVF9OT0RFX1RZUEVTLkFycm93RnVuY3Rpb25FeHByZXNzaW9uKSB7XG4gICAgaWYgKG5vZGUuYm9keS50eXBlID09PSBBU1RfTk9ERV9UWVBFUy5CbG9ja1N0YXRlbWVudCkge1xuICAgICAgcmV0dXJuIGdldFJldHVybmVkQ2FzdGVkRXhwcmVzc2lvbihub2RlLmJvZHkuYm9keSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdldENhc3RlZEV4cHJlc3Npb24obm9kZS5ib2R5KTtcbiAgfVxuXG4gIHJldHVybiBnZXRSZXR1cm5lZENhc3RlZEV4cHJlc3Npb24obm9kZS5ib2R5LmJvZHkpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHJhbmdlIGFmdGVyIHRoZSBmaW5hbCBpbXBvcnQgZGVjbGFyYXRpb24uXG4gKiBAcGFyYW0gc291cmNlQ29kZSBTb3VyY2UgY29kZSB0byBpbnNwZWN0LlxuICogQHJldHVybnMgUmFuZ2Ugb2YgdGhlIGxhc3QgaW1wb3J0IHN0YXRlbWVudCB3aGVuIHByZXNlbnQuXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIC8vIEludGVybmFsIGhlbHBlciBmb3Igbm8tdW5zYWZlLXZpdGVzdC1tb2NrLWZhY3RvcnktY2FzdC5cbiAqIGBgYFxuICovXG5mdW5jdGlvbiBnZXRJbXBvcnRJbnNlcnRpb25SYW5nZShcbiAgc291cmNlQ29kZTogU291cmNlQ29kZUxpa2UsXG4pOiBbbnVtYmVyLCBudW1iZXJdIHwgdW5kZWZpbmVkIHtcbiAgbGV0IGxhc3RJbXBvcnRSYW5nZTogW251bWJlciwgbnVtYmVyXSB8IHVuZGVmaW5lZDtcblxuICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiBzb3VyY2VDb2RlLmFzdC5ib2R5IGFzIHVua25vd24gYXMge1xuICAgIC8qKiBTdGF0ZW1lbnQgcmFuZ2Ugd2hlbiBwcm92aWRlZCBieSBwYXJzZXIgb3B0aW9ucy4gKi9cbiAgICByYW5nZT86IFtudW1iZXIsIG51bWJlcl07XG5cbiAgICAvKiogVG9wLWxldmVsIHN0YXRlbWVudCBub2RlIHR5cGUuICovXG4gICAgdHlwZTogVFNFU1RyZWUuUHJvZ3JhbVN0YXRlbWVudFtcInR5cGVcIl07XG4gIH1bXSkge1xuICAgIGlmIChcbiAgICAgIHN0YXRlbWVudC50eXBlID09PSBBU1RfTk9ERV9UWVBFUy5JbXBvcnREZWNsYXJhdGlvbiAmJlxuICAgICAgc3RhdGVtZW50LnJhbmdlICE9PSB2b2lkIDBcbiAgICApIHtcbiAgICAgIGxhc3RJbXBvcnRSYW5nZSA9IHN0YXRlbWVudC5yYW5nZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbGFzdEltcG9ydFJhbmdlO1xufVxuXG4vKipcbiAqIENvbGxlY3RzIHRoZSBtb3N0IGFwcHJvcHJpYXRlIG1vY2stZmFjdG9yeSBtYXRjaCBmcm9tIGEgYENhbGxFeHByZXNzaW9uYC5cbiAqIEBwYXJhbSBub2RlIENhbGwgZXhwcmVzc2lvbiB0byBpbnNwZWN0LlxuICogQHJldHVybnMgVW5zYWZlIG1vY2sgZmFjdG9yeSBkZXRhaWxzIHdoZW4gdGhlIGZhY3RvcnkgdXNlcyBhIGNhc3QuXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIC8vIEludGVybmFsIGhlbHBlciBmb3Igbm8tdW5zYWZlLXZpdGVzdC1tb2NrLWZhY3RvcnktY2FzdC5cbiAqIGBgYFxuICovXG5mdW5jdGlvbiBnZXRNb2NrRmFjdG9yeU1hdGNoKFxuICBub2RlOiBUU0VTVHJlZS5DYWxsRXhwcmVzc2lvbixcbik6IE1vY2tGYWN0b3J5TWF0Y2ggfCB1bmRlZmluZWQge1xuICBpZiAoIWlzVml0ZXN0TW9ja0NhbGwobm9kZSkgfHwgbm9kZS5hcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHJldHVybiB2b2lkIDA7XG4gIH1cblxuICBjb25zdCBbbW9ja1NwZWNpZmllck5vZGUsIG1vY2tGYWN0b3J5Tm9kZV0gPSBub2RlLmFyZ3VtZW50cyBhcyBbXG4gICAgVFNFU1RyZWUuQ2FsbEV4cHJlc3Npb25Bcmd1bWVudCxcbiAgICBUU0VTVHJlZS5DYWxsRXhwcmVzc2lvbkFyZ3VtZW50LFxuICAgIC4uLlRTRVNUcmVlLkNhbGxFeHByZXNzaW9uQXJndW1lbnRbXSxcbiAgXTtcblxuICBpZiAoXG4gICAgbW9ja1NwZWNpZmllck5vZGUudHlwZSA9PT0gQVNUX05PREVfVFlQRVMuU3ByZWFkRWxlbWVudCB8fFxuICAgIG1vY2tGYWN0b3J5Tm9kZS50eXBlID09PSBBU1RfTk9ERV9UWVBFUy5TcHJlYWRFbGVtZW50XG4gICkge1xuICAgIHJldHVybiB2b2lkIDA7XG4gIH1cblxuICBpZiAoXG4gICAgbW9ja0ZhY3RvcnlOb2RlLnR5cGUgIT09IEFTVF9OT0RFX1RZUEVTLkFycm93RnVuY3Rpb25FeHByZXNzaW9uICYmXG4gICAgbW9ja0ZhY3RvcnlOb2RlLnR5cGUgIT09IEFTVF9OT0RFX1RZUEVTLkZ1bmN0aW9uRXhwcmVzc2lvblxuICApIHtcbiAgICByZXR1cm4gdm9pZCAwO1xuICB9XG5cbiAgY29uc3QgbW9kdWxlU3BlY2lmaWVyID0gZ2V0TW9kdWxlU3BlY2lmaWVyKG1vY2tTcGVjaWZpZXJOb2RlKTtcbiAgaWYgKG1vZHVsZVNwZWNpZmllciA9PT0gdm9pZCAwKSB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfVxuXG4gIGNvbnN0IG1vY2tFeHByZXNzaW9uID0gZ2V0Q2FzdGVkTW9ja0V4cHJlc3Npb24obW9ja0ZhY3RvcnlOb2RlKTtcbiAgaWYgKG1vY2tFeHByZXNzaW9uID09PSB2b2lkIDApIHtcbiAgICByZXR1cm4gdm9pZCAwO1xuICB9XG5cbiAgY29uc3QgYXV0b2ZpeGFibGVFeHByZXNzaW9uID0gZ2V0QXV0b2ZpeGFibGVNb2NrRXhwcmVzc2lvbihtb2NrRmFjdG9yeU5vZGUpO1xuXG4gIHJldHVybiB7XG4gICAgY2FuQXV0b2ZpeDogYXV0b2ZpeGFibGVFeHByZXNzaW9uICE9PSB2b2lkIDAsXG4gICAgbW9ja0V4cHJlc3Npb246IGF1dG9maXhhYmxlRXhwcmVzc2lvbiA/PyBtb2NrRXhwcmVzc2lvbixcbiAgICBtb2NrRmFjdG9yeU5vZGUsXG4gICAgbW9ja1NwZWNpZmllck5vZGUsXG4gICAgbW9kdWxlU3BlY2lmaWVyLFxuICAgIG5vZGUsXG4gIH07XG59XG5cbi8qKlxuICogRXh0cmFjdHMgYSBzdHJpbmcgbW9kdWxlIHNwZWNpZmllciBmcm9tIHRoZSBmaXJzdCBtb2NrIGFyZ3VtZW50LlxuICogQHBhcmFtIG5vZGUgRmlyc3QgbW9jayBhcmd1bWVudC5cbiAqIEByZXR1cm5zIE1vZHVsZSBzcGVjaWZpZXIgd2hlbiBzdGF0aWNhbGx5IGtub3duLlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiAvLyBJbnRlcm5hbCBoZWxwZXIgZm9yIG5vLXVuc2FmZS12aXRlc3QtbW9jay1mYWN0b3J5LWNhc3QuXG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gZ2V0TW9kdWxlU3BlY2lmaWVyKFxuICBub2RlOiBOb25TcHJlYWRDYWxsRXhwcmVzc2lvbkFyZ3VtZW50LFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKG5vZGUudHlwZSA9PT0gQVNUX05PREVfVFlQRVMuTGl0ZXJhbCAmJiB0eXBlb2Ygbm9kZS52YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiBub2RlLnZhbHVlO1xuICB9XG5cbiAgaWYgKFxuICAgIG5vZGUudHlwZSA9PT0gQVNUX05PREVfVFlQRVMuSW1wb3J0RXhwcmVzc2lvbiAmJlxuICAgIG5vZGUuc291cmNlLnR5cGUgPT09IEFTVF9OT0RFX1RZUEVTLkxpdGVyYWwgJiZcbiAgICB0eXBlb2Ygbm9kZS5zb3VyY2UudmFsdWUgPT09IFwic3RyaW5nXCJcbiAgKSB7XG4gICAgcmV0dXJuIG5vZGUuc291cmNlLnZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHZvaWQgMDtcbn1cblxuLyoqXG4gKiBGaW5kcyB0aGUgY2FzdGVkIHJldHVybiB2YWx1ZSBpbnNpZGUgYSBmdW5jdGlvbiBib2R5LlxuICogQHBhcmFtIHN0YXRlbWVudHMgRnVuY3Rpb24gYm9keSBzdGF0ZW1lbnRzLlxuICogQHJldHVybnMgUmV0dXJuZWQgZXhwcmVzc2lvbiB3aGVuIGl0IGlzIGNhc3RlZC5cbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogLy8gSW50ZXJuYWwgaGVscGVyIGZvciBuby11bnNhZmUtdml0ZXN0LW1vY2stZmFjdG9yeS1jYXN0LlxuICogYGBgXG4gKi9cbmZ1bmN0aW9uIGdldFJldHVybmVkQ2FzdGVkRXhwcmVzc2lvbihcbiAgc3RhdGVtZW50czogVFNFU1RyZWUuU3RhdGVtZW50W10sXG4pOiBUU0VTVHJlZS5FeHByZXNzaW9uIHwgdW5kZWZpbmVkIHtcbiAgZm9yIChjb25zdCBzdGF0ZW1lbnQgb2Ygc3RhdGVtZW50cykge1xuICAgIGlmIChzdGF0ZW1lbnQudHlwZSAhPT0gQVNUX05PREVfVFlQRVMuUmV0dXJuU3RhdGVtZW50KSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGVtZW50LmFyZ3VtZW50ID09PSBudWxsXG4gICAgICA/IHZvaWQgMFxuICAgICAgOiBnZXRDYXN0ZWRFeHByZXNzaW9uKHN0YXRlbWVudC5hcmd1bWVudCk7XG4gIH1cblxuICByZXR1cm4gdm9pZCAwO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGEgbm9kZSBpcyBhIGRlY2xhcmF0aW9uIHRoYXQgaW50cm9kdWNlcyB0b3AtbGV2ZWwgbmFtZXMuXG4gKiBAcGFyYW0gbm9kZSBOb2RlIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyBUcnVlIHdoZW4gdGhlIG5vZGUgaXMgYSBzdXBwb3J0ZWQgZGVjbGFyYXRpb24uXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIC8vIEludGVybmFsIGhlbHBlciBmb3Igbm8tdW5zYWZlLXZpdGVzdC1tb2NrLWZhY3RvcnktY2FzdC5cbiAqIGBgYFxuICovXG5mdW5jdGlvbiBpc05hbWVkRGVjbGFyYXRpb24oXG4gIG5vZGU6XG4gICAgfCBUU0VTVHJlZS5FeHBvcnREZWZhdWx0RGVjbGFyYXRpb25bXCJkZWNsYXJhdGlvblwiXVxuICAgIHwgVFNFU1RyZWUuUHJvZ3JhbVN0YXRlbWVudCxcbik6IG5vZGUgaXMgTmFtZWREZWNsYXJhdGlvbiB7XG4gIHJldHVybiAoXG4gICAgbm9kZS50eXBlID09PSBBU1RfTk9ERV9UWVBFUy5GdW5jdGlvbkRlY2xhcmF0aW9uIHx8XG4gICAgbm9kZS50eXBlID09PSBBU1RfTk9ERV9UWVBFUy5DbGFzc0RlY2xhcmF0aW9uIHx8XG4gICAgbm9kZS50eXBlID09PSBBU1RfTk9ERV9UWVBFUy5WYXJpYWJsZURlY2xhcmF0aW9uIHx8XG4gICAgbm9kZS50eXBlID09PSBBU1RfTk9ERV9UWVBFUy5UU1R5cGVBbGlhc0RlY2xhcmF0aW9uIHx8XG4gICAgbm9kZS50eXBlID09PSBBU1RfTk9ERV9UWVBFUy5UU0ludGVyZmFjZURlY2xhcmF0aW9uIHx8XG4gICAgbm9kZS50eXBlID09PSBBU1RfTk9ERV9UWVBFUy5UU0VudW1EZWNsYXJhdGlvbiB8fFxuICAgIG5vZGUudHlwZSA9PT0gQVNUX05PREVfVFlQRVMuVFNNb2R1bGVEZWNsYXJhdGlvblxuICApO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGEgY2FsbCB0YXJnZXRzIGB2aS5tb2NrYCBvciBgdmkuZG9Nb2NrYC5cbiAqIEBwYXJhbSBub2RlIENhbGwgZXhwcmVzc2lvbiB0byBpbnNwZWN0LlxuICogQHJldHVybnMgVHJ1ZSB3aGVuIHRoZSBjYWxsZWUgaXMgYSBzdXBwb3J0ZWQgVml0ZXN0IG1vY2sgbWV0aG9kLlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiAvLyBJbnRlcm5hbCBoZWxwZXIgZm9yIG5vLXVuc2FmZS12aXRlc3QtbW9jay1mYWN0b3J5LWNhc3QuXG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gaXNWaXRlc3RNb2NrQ2FsbChub2RlOiBUU0VTVHJlZS5DYWxsRXhwcmVzc2lvbik6IGJvb2xlYW4ge1xuICBpZiAoXG4gICAgbm9kZS5jYWxsZWUudHlwZSAhPT0gQVNUX05PREVfVFlQRVMuTWVtYmVyRXhwcmVzc2lvbiB8fFxuICAgIG5vZGUuY2FsbGVlLm9iamVjdC50eXBlICE9PSBBU1RfTk9ERV9UWVBFUy5JZGVudGlmaWVyIHx8XG4gICAgbm9kZS5jYWxsZWUub2JqZWN0Lm5hbWUgIT09IFwidmlcIiB8fFxuICAgIG5vZGUuY2FsbGVlLnByb3BlcnR5LnR5cGUgIT09IEFTVF9OT0RFX1RZUEVTLklkZW50aWZpZXJcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHN1cHBvcnRlZE1vY2tOYW1lcy5oYXMobm9kZS5jYWxsZWUucHJvcGVydHkubmFtZSk7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIG5hbWVzcGFjZSBpbXBvcnQgdG8gdXNlIGZvciBgdHlwZW9mIE5hbWVzcGFjZWAuXG4gKiBAcGFyYW0gc291cmNlQ29kZSBTb3VyY2UgY29kZSBmb3IgaW1wb3J0IGluc3BlY3Rpb24uXG4gKiBAcGFyYW0gbW9kdWxlU3BlY2lmaWVyIE1vZHVsZSBwYXRoIGJlaW5nIG1vY2tlZC5cbiAqIEByZXR1cm5zIEV4aXN0aW5nIG9yIGdlbmVyYXRlZCBuYW1lc3BhY2UgaW1wb3J0IGRldGFpbHMuXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIC8vIEludGVybmFsIGhlbHBlciBmb3Igbm8tdW5zYWZlLXZpdGVzdC1tb2NrLWZhY3RvcnktY2FzdC5cbiAqIGBgYFxuICovXG5mdW5jdGlvbiByZXNvbHZlTW9kdWxlVHlwZUltcG9ydChcbiAgc291cmNlQ29kZTogU291cmNlQ29kZUxpa2UsXG4gIG1vZHVsZVNwZWNpZmllcjogc3RyaW5nLFxuKTogTW9kdWxlVHlwZUltcG9ydCB7XG4gIGNvbnN0IHN0YXRlbWVudHMgPSBzb3VyY2VDb2RlLmFzdC5ib2R5O1xuICBjb25zdCBwcmVmZXJyZWROYW1lID0gY3JlYXRlTmFtZXNwYWNlTmFtZShtb2R1bGVTcGVjaWZpZXIpO1xuXG4gIGZvciAoY29uc3Qgc3RhdGVtZW50IG9mIHN0YXRlbWVudHMgYXMgVFNFU1RyZWUuUHJvZ3JhbVN0YXRlbWVudFtdKSB7XG4gICAgaWYgKFxuICAgICAgc3RhdGVtZW50LnR5cGUgIT09IEFTVF9OT0RFX1RZUEVTLkltcG9ydERlY2xhcmF0aW9uIHx8XG4gICAgICBzdGF0ZW1lbnQuc291cmNlLnZhbHVlICE9PSBtb2R1bGVTcGVjaWZpZXJcbiAgICApIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qgc3BlY2lmaWVyIG9mIHN0YXRlbWVudC5zcGVjaWZpZXJzKSB7XG4gICAgICBpZiAoc3BlY2lmaWVyLnR5cGUgPT09IEFTVF9OT0RFX1RZUEVTLkltcG9ydE5hbWVzcGFjZVNwZWNpZmllcikge1xuICAgICAgICByZXR1cm4geyBpc0V4aXN0aW5nOiB0cnVlLCBuYW1lc3BhY2VOYW1lOiBzcGVjaWZpZXIubG9jYWwubmFtZSB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHVzZWROYW1lcyA9IGNvbGxlY3RUb3BMZXZlbE5hbWVzKHN0YXRlbWVudHMpO1xuICBsZXQgbmFtZXNwYWNlTmFtZSA9IHByZWZlcnJlZE5hbWU7XG4gIGxldCBzdWZmaXggPSAxO1xuXG4gIHdoaWxlICh1c2VkTmFtZXMuaGFzKG5hbWVzcGFjZU5hbWUpKSB7XG4gICAgbmFtZXNwYWNlTmFtZSA9IGAke3ByZWZlcnJlZE5hbWV9JHtzdWZmaXgudG9GaXhlZCgwKX1gO1xuICAgIHN1ZmZpeCArPSAxO1xuICB9XG5cbiAgcmV0dXJuIHsgaXNFeGlzdGluZzogZmFsc2UsIG5hbWVzcGFjZU5hbWUgfTtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIG5lc3RlZCBjYXN0IHdyYXBwZXJzIGZyb20gYW4gZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSBleHByZXNzaW9uIEV4cHJlc3Npb24gdG8gbm9ybWFsaXplLlxuICogQHJldHVybnMgRXhwcmVzc2lvbiB3aXRob3V0IGFueSBzdXJyb3VuZGluZyBjYXN0cy5cbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogLy8gSW50ZXJuYWwgaGVscGVyIGZvciBuby11bnNhZmUtdml0ZXN0LW1vY2stZmFjdG9yeS1jYXN0LlxuICogYGBgXG4gKi9cbmZ1bmN0aW9uIHN0cmlwQ2FzdEV4cHJlc3Npb25zKFxuICBleHByZXNzaW9uOiBUU0VTVHJlZS5FeHByZXNzaW9uLFxuKTogVFNFU1RyZWUuRXhwcmVzc2lvbiB7XG4gIGlmIChleHByZXNzaW9uLnR5cGUgPT09IEFTVF9OT0RFX1RZUEVTLlRTQXNFeHByZXNzaW9uKSB7XG4gICAgcmV0dXJuIHN0cmlwQ2FzdEV4cHJlc3Npb25zKGV4cHJlc3Npb24uZXhwcmVzc2lvbik7XG4gIH1cblxuICBpZiAoZXhwcmVzc2lvbi50eXBlID09PSBBU1RfTk9ERV9UWVBFUy5UU1R5cGVBc3NlcnRpb24pIHtcbiAgICByZXR1cm4gc3RyaXBDYXN0RXhwcmVzc2lvbnMoZXhwcmVzc2lvbi5leHByZXNzaW9uKTtcbiAgfVxuXG4gIHJldHVybiBleHByZXNzaW9uO1xufVxuXG5leHBvcnQgeyBub1Vuc2FmZVZpdGVzdE1vY2tGYWN0b3J5Q2FzdFJ1bGUgfTtcbiJdfQ==
|
|
@@ -10,6 +10,7 @@ declare const codeperfectRules: {
|
|
|
10
10
|
readonly "no-interface-member-docs": Rule.RuleModule;
|
|
11
11
|
readonly "no-multiple-declarators": Rule.RuleModule;
|
|
12
12
|
readonly "no-reexports-outside-barrels": Rule.RuleModule;
|
|
13
|
+
readonly "no-unsafe-vitest-mock-factory-cast": Rule.RuleModule;
|
|
13
14
|
readonly "no-unused-exports": Rule.RuleModule;
|
|
14
15
|
readonly "prefer-interface-types": Rule.RuleModule;
|
|
15
16
|
readonly "prefer-vi-mocked-import": Rule.RuleModule;
|
|
@@ -34,6 +35,7 @@ declare const codeperfectPlugin: {
|
|
|
34
35
|
readonly "no-interface-member-docs": Rule.RuleModule;
|
|
35
36
|
readonly "no-multiple-declarators": Rule.RuleModule;
|
|
36
37
|
readonly "no-reexports-outside-barrels": Rule.RuleModule;
|
|
38
|
+
readonly "no-unsafe-vitest-mock-factory-cast": Rule.RuleModule;
|
|
37
39
|
readonly "no-unused-exports": Rule.RuleModule;
|
|
38
40
|
readonly "prefer-interface-types": Rule.RuleModule;
|
|
39
41
|
readonly "prefer-vi-mocked-import": Rule.RuleModule;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codeperfect-plugin.d.ts","sourceRoot":"","sources":["../../src/infrastructure/codeperfect-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAU,IAAI,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"codeperfect-plugin.d.ts","sourceRoot":"","sources":["../../src/infrastructure/codeperfect-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAU,IAAI,EAAE,MAAM,QAAQ,CAAC;AAuB3C,mDAAmD;AACnD,QAAA,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;CAmB8B,CAAC;AAErD,oDAAoD;AACpD,QAAA,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;CAKkC,CAAC;AAE1D,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { assertActualExpectedNamesRule, barrelFilesExportsOnlyRule, consistentBarrelFilesRule, enforceAaaStructureRule, noImportExportAliasesRule, noImportExportExtensionsRule, noInterfaceMemberDocumentationRule, noMultipleDeclaratorsRule, noReexportsOutsideBarrelsRule, noUnusedExportsRule, preferInterfaceTypesRule, preferViMockedImportRule, requireActResultCaptureRule, requireExampleLanguageRule, requireTestCompanionRule, singleActStatementRule, singleLineJsdocRule, } from "../application/index.js";
|
|
1
|
+
import { assertActualExpectedNamesRule, barrelFilesExportsOnlyRule, consistentBarrelFilesRule, enforceAaaStructureRule, noImportExportAliasesRule, noImportExportExtensionsRule, noInterfaceMemberDocumentationRule, noMultipleDeclaratorsRule, noReexportsOutsideBarrelsRule, noUnsafeVitestMockFactoryCastRule, noUnusedExportsRule, preferInterfaceTypesRule, preferViMockedImportRule, requireActResultCaptureRule, requireExampleLanguageRule, requireTestCompanionRule, singleActStatementRule, singleLineJsdocRule, } from "../application/index.js";
|
|
2
2
|
/** Rule registry exposed by the package plugin. */
|
|
3
3
|
const codeperfectRules = {
|
|
4
4
|
"assert-actual-expected-names": assertActualExpectedNamesRule,
|
|
@@ -10,6 +10,7 @@ const codeperfectRules = {
|
|
|
10
10
|
"no-interface-member-docs": noInterfaceMemberDocumentationRule,
|
|
11
11
|
"no-multiple-declarators": noMultipleDeclaratorsRule,
|
|
12
12
|
"no-reexports-outside-barrels": noReexportsOutsideBarrelsRule,
|
|
13
|
+
"no-unsafe-vitest-mock-factory-cast": noUnsafeVitestMockFactoryCastRule,
|
|
13
14
|
"no-unused-exports": noUnusedExportsRule,
|
|
14
15
|
"prefer-interface-types": preferInterfaceTypesRule,
|
|
15
16
|
"prefer-vi-mocked-import": preferViMockedImportRule,
|
|
@@ -27,4 +28,4 @@ const codeperfectPlugin = {
|
|
|
27
28
|
rules: codeperfectRules,
|
|
28
29
|
};
|
|
29
30
|
export { codeperfectPlugin, codeperfectRules };
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZXBlcmZlY3QtcGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2luZnJhc3RydWN0dXJlL2NvZGVwZXJmZWN0LXBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQ0wsNkJBQTZCLEVBQzdCLDBCQUEwQixFQUMxQix5QkFBeUIsRUFDekIsdUJBQXVCLEVBQ3ZCLHlCQUF5QixFQUN6Qiw0QkFBNEIsRUFDNUIsa0NBQWtDLEVBQ2xDLHlCQUF5QixFQUN6Qiw2QkFBNkIsRUFDN0IsaUNBQWlDLEVBQ2pDLG1CQUFtQixFQUNuQix3QkFBd0IsRUFDeEIsd0JBQXdCLEVBQ3hCLDJCQUEyQixFQUMzQiwwQkFBMEIsRUFDMUIsd0JBQXdCLEVBQ3hCLHNCQUFzQixFQUN0QixtQkFBbUIsR0FDcEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixtREFBbUQ7QUFDbkQsTUFBTSxnQkFBZ0IsR0FBRztJQUN2Qiw4QkFBOEIsRUFBRSw2QkFBNkI7SUFDN0QsMkJBQTJCLEVBQUUsMEJBQTBCO0lBQ3ZELHlCQUF5QixFQUFFLHlCQUF5QjtJQUNwRCx1QkFBdUIsRUFBRSx1QkFBdUI7SUFDaEQsMEJBQTBCLEVBQUUseUJBQXlCO0lBQ3JELDZCQUE2QixFQUFFLDRCQUE0QjtJQUMzRCwwQkFBMEIsRUFBRSxrQ0FBa0M7SUFDOUQseUJBQXlCLEVBQUUseUJBQXlCO0lBQ3BELDhCQUE4QixFQUFFLDZCQUE2QjtJQUM3RCxvQ0FBb0MsRUFBRSxpQ0FBaUM7SUFDdkUsbUJBQW1CLEVBQUUsbUJBQW1CO0lBQ3hDLHdCQUF3QixFQUFFLHdCQUF3QjtJQUNsRCx5QkFBeUIsRUFBRSx3QkFBd0I7SUFDbkQsNEJBQTRCLEVBQUUsMkJBQTJCO0lBQ3pELDBCQUEwQixFQUFFLDBCQUEwQjtJQUN0RCx3QkFBd0IsRUFBRSx3QkFBd0I7SUFDbEQsc0JBQXNCLEVBQUUsc0JBQXNCO0lBQzlDLG1CQUFtQixFQUFFLG1CQUFtQjtDQUNVLENBQUM7QUFFckQsb0RBQW9EO0FBQ3BELE1BQU0saUJBQWlCLEdBQUc7SUFDeEIsSUFBSSxFQUFFO1FBQ0osSUFBSSxFQUFFLDRCQUE0QjtLQUNuQztJQUNELEtBQUssRUFBRSxnQkFBZ0I7Q0FDZ0MsQ0FBQztBQUUxRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgTGludGVyLCBSdWxlIH0gZnJvbSBcImVzbGludFwiO1xuXG5pbXBvcnQge1xuICBhc3NlcnRBY3R1YWxFeHBlY3RlZE5hbWVzUnVsZSxcbiAgYmFycmVsRmlsZXNFeHBvcnRzT25seVJ1bGUsXG4gIGNvbnNpc3RlbnRCYXJyZWxGaWxlc1J1bGUsXG4gIGVuZm9yY2VBYWFTdHJ1Y3R1cmVSdWxlLFxuICBub0ltcG9ydEV4cG9ydEFsaWFzZXNSdWxlLFxuICBub0ltcG9ydEV4cG9ydEV4dGVuc2lvbnNSdWxlLFxuICBub0ludGVyZmFjZU1lbWJlckRvY3VtZW50YXRpb25SdWxlLFxuICBub011bHRpcGxlRGVjbGFyYXRvcnNSdWxlLFxuICBub1JlZXhwb3J0c091dHNpZGVCYXJyZWxzUnVsZSxcbiAgbm9VbnNhZmVWaXRlc3RNb2NrRmFjdG9yeUNhc3RSdWxlLFxuICBub1VudXNlZEV4cG9ydHNSdWxlLFxuICBwcmVmZXJJbnRlcmZhY2VUeXBlc1J1bGUsXG4gIHByZWZlclZpTW9ja2VkSW1wb3J0UnVsZSxcbiAgcmVxdWlyZUFjdFJlc3VsdENhcHR1cmVSdWxlLFxuICByZXF1aXJlRXhhbXBsZUxhbmd1YWdlUnVsZSxcbiAgcmVxdWlyZVRlc3RDb21wYW5pb25SdWxlLFxuICBzaW5nbGVBY3RTdGF0ZW1lbnRSdWxlLFxuICBzaW5nbGVMaW5lSnNkb2NSdWxlLFxufSBmcm9tIFwiLi4vYXBwbGljYXRpb25cIjtcblxuLyoqIFJ1bGUgcmVnaXN0cnkgZXhwb3NlZCBieSB0aGUgcGFja2FnZSBwbHVnaW4uICovXG5jb25zdCBjb2RlcGVyZmVjdFJ1bGVzID0ge1xuICBcImFzc2VydC1hY3R1YWwtZXhwZWN0ZWQtbmFtZXNcIjogYXNzZXJ0QWN0dWFsRXhwZWN0ZWROYW1lc1J1bGUsXG4gIFwiYmFycmVsLWZpbGVzLWV4cG9ydHMtb25seVwiOiBiYXJyZWxGaWxlc0V4cG9ydHNPbmx5UnVsZSxcbiAgXCJjb25zaXN0ZW50LWJhcnJlbC1maWxlc1wiOiBjb25zaXN0ZW50QmFycmVsRmlsZXNSdWxlLFxuICBcImVuZm9yY2UtYWFhLXN0cnVjdHVyZVwiOiBlbmZvcmNlQWFhU3RydWN0dXJlUnVsZSxcbiAgXCJuby1pbXBvcnQtZXhwb3J0LWFsaWFzZXNcIjogbm9JbXBvcnRFeHBvcnRBbGlhc2VzUnVsZSxcbiAgXCJuby1pbXBvcnQtZXhwb3J0LWV4dGVuc2lvbnNcIjogbm9JbXBvcnRFeHBvcnRFeHRlbnNpb25zUnVsZSxcbiAgXCJuby1pbnRlcmZhY2UtbWVtYmVyLWRvY3NcIjogbm9JbnRlcmZhY2VNZW1iZXJEb2N1bWVudGF0aW9uUnVsZSxcbiAgXCJuby1tdWx0aXBsZS1kZWNsYXJhdG9yc1wiOiBub011bHRpcGxlRGVjbGFyYXRvcnNSdWxlLFxuICBcIm5vLXJlZXhwb3J0cy1vdXRzaWRlLWJhcnJlbHNcIjogbm9SZWV4cG9ydHNPdXRzaWRlQmFycmVsc1J1bGUsXG4gIFwibm8tdW5zYWZlLXZpdGVzdC1tb2NrLWZhY3RvcnktY2FzdFwiOiBub1Vuc2FmZVZpdGVzdE1vY2tGYWN0b3J5Q2FzdFJ1bGUsXG4gIFwibm8tdW51c2VkLWV4cG9ydHNcIjogbm9VbnVzZWRFeHBvcnRzUnVsZSxcbiAgXCJwcmVmZXItaW50ZXJmYWNlLXR5cGVzXCI6IHByZWZlckludGVyZmFjZVR5cGVzUnVsZSxcbiAgXCJwcmVmZXItdmktbW9ja2VkLWltcG9ydFwiOiBwcmVmZXJWaU1vY2tlZEltcG9ydFJ1bGUsXG4gIFwicmVxdWlyZS1hY3QtcmVzdWx0LWNhcHR1cmVcIjogcmVxdWlyZUFjdFJlc3VsdENhcHR1cmVSdWxlLFxuICBcInJlcXVpcmUtZXhhbXBsZS1sYW5ndWFnZVwiOiByZXF1aXJlRXhhbXBsZUxhbmd1YWdlUnVsZSxcbiAgXCJyZXF1aXJlLXRlc3QtY29tcGFuaW9uXCI6IHJlcXVpcmVUZXN0Q29tcGFuaW9uUnVsZSxcbiAgXCJzaW5nbGUtYWN0LXN0YXRlbWVudFwiOiBzaW5nbGVBY3RTdGF0ZW1lbnRSdWxlLFxuICBcInNpbmdsZS1saW5lLWpzZG9jXCI6IHNpbmdsZUxpbmVKc2RvY1J1bGUsXG59IGFzIGNvbnN0IHNhdGlzZmllcyBSZWNvcmQ8c3RyaW5nLCBSdWxlLlJ1bGVNb2R1bGU+O1xuXG4vKiogRVNMaW50IHBsdWdpbiBvYmplY3QgZXhwb3J0ZWQgYnkgdGhlIHBhY2thZ2UuICovXG5jb25zdCBjb2RlcGVyZmVjdFBsdWdpbiA9IHtcbiAgbWV0YToge1xuICAgIG5hbWU6IFwiQGNvZGVwZXJmZWN0L2VzbGludC1wbHVnaW5cIixcbiAgfSxcbiAgcnVsZXM6IGNvZGVwZXJmZWN0UnVsZXMsXG59IHNhdGlzZmllcyBOb25OdWxsYWJsZTxMaW50ZXIuQ29uZmlnW1wicGx1Z2luc1wiXT5bc3RyaW5nXTtcblxuZXhwb3J0IHsgY29kZXBlcmZlY3RQbHVnaW4sIGNvZGVwZXJmZWN0UnVsZXMgfTtcbiJdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../../src/infrastructure/presets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIrC,gEAAgE;AAChE,KAAK,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../../src/infrastructure/presets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIrC,gEAAgE;AAChE,KAAK,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,CAAC;AA+GlE,oDAAoD;AACpD,QAAA,MAAM,GAAG,mBAA6B,CAAC;AAEvC,sDAAsD;AACtD,QAAA,MAAM,YAAY,mBAAsC,CAAC;AAEzD,sCAAsC;AACtC,QAAA,MAAM,IAAI,mBAA8B,CAAC;AAEzC,+CAA+C;AAC/C,QAAA,MAAM,aAAa,mBAAuC,CAAC;AAE3D,yCAAyC;AACzC,QAAA,MAAM,OAAO,mBAAiC,CAAC;AAE/C,sDAAsD;AACtD,QAAA,MAAM,GAAG,mBAA6B,CAAC;AAEvC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC;AAChE,YAAY,EAAE,iBAAiB,EAAE,CAAC"}
|