@futdevpro/dynamo-eslint 1.14.6 → 1.14.8

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.
Files changed (61) hide show
  1. package/build/configs/base.js +12 -1
  2. package/build/configs/base.js.map +1 -1
  3. package/build/plugin/index.d.ts +8 -0
  4. package/build/plugin/index.d.ts.map +1 -1
  5. package/build/plugin/index.js +12 -0
  6. package/build/plugin/index.js.map +1 -1
  7. package/build/plugin/rules/explicit-types.js +2 -2
  8. package/build/plugin/rules/explicit-types.js.map +1 -1
  9. package/build/plugin/rules/import/import-order.d.ts.map +1 -1
  10. package/build/plugin/rules/import/import-order.js +41 -10
  11. package/build/plugin/rules/import/import-order.js.map +1 -1
  12. package/build/plugin/rules/import/import-order.spec.js +17 -1
  13. package/build/plugin/rules/import/import-order.spec.js.map +1 -1
  14. package/build/plugin/rules/prefer-enum-over-string-union.d.ts +4 -0
  15. package/build/plugin/rules/prefer-enum-over-string-union.d.ts.map +1 -0
  16. package/build/plugin/rules/prefer-enum-over-string-union.js +290 -0
  17. package/build/plugin/rules/prefer-enum-over-string-union.js.map +1 -0
  18. package/build/plugin/rules/prefer-enum-over-string-union.spec.d.ts +2 -0
  19. package/build/plugin/rules/prefer-enum-over-string-union.spec.d.ts.map +1 -0
  20. package/build/plugin/rules/prefer-enum-over-string-union.spec.js +505 -0
  21. package/build/plugin/rules/prefer-enum-over-string-union.spec.js.map +1 -0
  22. package/build/plugin/rules/prefer-interface-over-duplicate-types.d.ts +4 -0
  23. package/build/plugin/rules/prefer-interface-over-duplicate-types.d.ts.map +1 -0
  24. package/build/plugin/rules/prefer-interface-over-duplicate-types.js +231 -0
  25. package/build/plugin/rules/prefer-interface-over-duplicate-types.js.map +1 -0
  26. package/build/plugin/rules/prefer-interface-over-duplicate-types.spec.d.ts +2 -0
  27. package/build/plugin/rules/prefer-interface-over-duplicate-types.spec.d.ts.map +1 -0
  28. package/build/plugin/rules/prefer-interface-over-duplicate-types.spec.js +324 -0
  29. package/build/plugin/rules/prefer-interface-over-duplicate-types.spec.js.map +1 -0
  30. package/build/plugin/rules/require-jsdoc-description.d.ts +4 -0
  31. package/build/plugin/rules/require-jsdoc-description.d.ts.map +1 -0
  32. package/build/plugin/rules/require-jsdoc-description.js +379 -0
  33. package/build/plugin/rules/require-jsdoc-description.js.map +1 -0
  34. package/build/plugin/rules/require-jsdoc-description.spec.d.ts +2 -0
  35. package/build/plugin/rules/require-jsdoc-description.spec.d.ts.map +1 -0
  36. package/build/plugin/rules/require-jsdoc-description.spec.js +452 -0
  37. package/build/plugin/rules/require-jsdoc-description.spec.js.map +1 -0
  38. package/build/plugin/rules/require-test-description-prefix.d.ts +4 -0
  39. package/build/plugin/rules/require-test-description-prefix.d.ts.map +1 -0
  40. package/build/plugin/rules/require-test-description-prefix.js +135 -0
  41. package/build/plugin/rules/require-test-description-prefix.js.map +1 -0
  42. package/build/plugin/rules/require-test-description-prefix.spec.d.ts +2 -0
  43. package/build/plugin/rules/require-test-description-prefix.spec.d.ts.map +1 -0
  44. package/build/plugin/rules/require-test-description-prefix.spec.js +371 -0
  45. package/build/plugin/rules/require-test-description-prefix.spec.js.map +1 -0
  46. package/futdevpro-dynamo-eslint-1.14.8.tgz +0 -0
  47. package/package.json +1 -1
  48. package/src/configs/base.ts +12 -1
  49. package/src/plugin/index.ts +12 -0
  50. package/src/plugin/rules/explicit-types.ts +2 -2
  51. package/src/plugin/rules/import/import-order.spec.ts +17 -1
  52. package/src/plugin/rules/import/import-order.ts +47 -10
  53. package/src/plugin/rules/prefer-enum-over-string-union.spec.ts +583 -0
  54. package/src/plugin/rules/prefer-enum-over-string-union.ts +333 -0
  55. package/src/plugin/rules/prefer-interface-over-duplicate-types.spec.ts +374 -0
  56. package/src/plugin/rules/prefer-interface-over-duplicate-types.ts +276 -0
  57. package/src/plugin/rules/require-jsdoc-description.spec.ts +542 -0
  58. package/src/plugin/rules/require-jsdoc-description.ts +436 -0
  59. package/src/plugin/rules/require-test-description-prefix.spec.ts +459 -0
  60. package/src/plugin/rules/require-test-description-prefix.ts +153 -0
  61. package/futdevpro-dynamo-eslint-1.14.6.tgz +0 -0
@@ -0,0 +1,231 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const rule = {
4
+ meta: {
5
+ type: 'suggestion',
6
+ docs: {
7
+ description: 'Suggest creating interfaces for object types used more than the threshold number of times',
8
+ recommended: true,
9
+ },
10
+ schema: [
11
+ {
12
+ type: 'object',
13
+ properties: {
14
+ threshold: {
15
+ type: 'number',
16
+ minimum: 2,
17
+ default: 3,
18
+ },
19
+ },
20
+ additionalProperties: false,
21
+ },
22
+ ],
23
+ messages: {
24
+ preferInterface: 'Object type used {{count}} times. Consider creating interface "{{interfaceName}}"}}',
25
+ },
26
+ fixable: 'code',
27
+ },
28
+ create(context) {
29
+ const options = context.options[0] || {};
30
+ const threshold = options.threshold || 3;
31
+ const sourceCode = context.sourceCode;
32
+ // Map to track type signatures and their usages
33
+ const typeUsages = new Map();
34
+ const allTypeLiterals = [];
35
+ /**
36
+ * Normalize object type to a signature string for comparison
37
+ */
38
+ function normalizeObjectType(node) {
39
+ if (!node || node.type !== 'TSTypeLiteral') {
40
+ return '';
41
+ }
42
+ if (!node.members || !Array.isArray(node.members)) {
43
+ return '';
44
+ }
45
+ // Extract and sort properties
46
+ const properties = node.members
47
+ .filter((member) => member.type === 'TSPropertySignature')
48
+ .map((member) => {
49
+ const key = member.key?.name || member.key?.value || 'unknown';
50
+ const type = getTypeString(member.typeAnnotation);
51
+ const optional = member.optional ? '?' : '';
52
+ const readonly = member.readonly ? 'readonly ' : '';
53
+ return `${readonly}${key}${optional}:${type}`;
54
+ })
55
+ .sort(); // Sort alphabetically
56
+ return properties.join(';');
57
+ }
58
+ /**
59
+ * Get string representation of a type annotation
60
+ */
61
+ function getTypeString(typeAnnotation) {
62
+ if (!typeAnnotation || !typeAnnotation.typeAnnotation) {
63
+ return 'any';
64
+ }
65
+ const type = typeAnnotation.typeAnnotation;
66
+ switch (type.type) {
67
+ case 'TSStringKeyword':
68
+ return 'string';
69
+ case 'TSNumberKeyword':
70
+ return 'number';
71
+ case 'TSBooleanKeyword':
72
+ return 'boolean';
73
+ case 'TSVoidKeyword':
74
+ return 'void';
75
+ case 'TSNullKeyword':
76
+ return 'null';
77
+ case 'TSUndefinedKeyword':
78
+ return 'undefined';
79
+ case 'TSAnyKeyword':
80
+ return 'any';
81
+ case 'TSUnknownKeyword':
82
+ return 'unknown';
83
+ case 'TSNeverKeyword':
84
+ return 'never';
85
+ case 'TSObjectKeyword':
86
+ return 'object';
87
+ case 'TSLiteralType':
88
+ return type.literal?.value?.toString() || 'literal';
89
+ case 'TSArrayType':
90
+ return `${getTypeString({ typeAnnotation: type.elementType })}[]`;
91
+ case 'TSTypeReference':
92
+ return type.typeName?.name || 'reference';
93
+ case 'TSTypeLiteral':
94
+ return normalizeObjectType(type);
95
+ case 'TSUnionType':
96
+ return type.types?.map((t) => getTypeString({ typeAnnotation: t })).join('|') || 'union';
97
+ case 'TSIntersectionType':
98
+ return type.types?.map((t) => getTypeString({ typeAnnotation: t })).join('&') || 'intersection';
99
+ default:
100
+ return 'complex';
101
+ }
102
+ }
103
+ /**
104
+ * Generate interface name based on context
105
+ */
106
+ function generateInterfaceName(signature, usageCount) {
107
+ // Try to extract meaningful name from signature
108
+ const properties = signature.split(';');
109
+ if (properties.length === 1) {
110
+ const prop = properties[0].split(':')[0].replace('readonly ', '').replace('?', '');
111
+ if (prop && prop !== 'unknown') {
112
+ return `${prop.charAt(0).toUpperCase() + prop.slice(1)}Interface`;
113
+ }
114
+ }
115
+ // Fallback to generic name
116
+ return `GeneratedInterface${usageCount}`;
117
+ }
118
+ /**
119
+ * Check if interface name conflicts with existing identifiers
120
+ */
121
+ function isNameConflict(name) {
122
+ try {
123
+ const scope = context.sourceCode.getScope(context.sourceCode.ast);
124
+ return scope.variables.some(variable => variable.name === name);
125
+ }
126
+ catch {
127
+ return false;
128
+ }
129
+ }
130
+ /**
131
+ * Generate unique interface name
132
+ */
133
+ function generateUniqueInterfaceName(baseName) {
134
+ let name = baseName;
135
+ let counter = 1;
136
+ while (isNameConflict(name)) {
137
+ name = `${baseName}${counter}`;
138
+ counter++;
139
+ }
140
+ return name;
141
+ }
142
+ return {
143
+ TSTypeLiteral(node) {
144
+ try {
145
+ const signature = normalizeObjectType(node);
146
+ if (!signature) {
147
+ return;
148
+ }
149
+ allTypeLiterals.push(node);
150
+ if (!typeUsages.has(signature)) {
151
+ typeUsages.set(signature, []);
152
+ }
153
+ typeUsages.get(signature).push({
154
+ node,
155
+ signature,
156
+ });
157
+ }
158
+ catch (error) {
159
+ console.error('[prefer-interface-over-duplicate-types] Error in TSTypeLiteral visitor:', error);
160
+ }
161
+ },
162
+ 'Program:exit'(node) {
163
+ try {
164
+ // Process all collected type usages
165
+ for (const [signature, usages] of typeUsages) {
166
+ if (usages.length >= threshold) {
167
+ const interfaceName = generateUniqueInterfaceName(generateInterfaceName(signature, usages.length));
168
+ // Report on each usage
169
+ for (const usage of usages) {
170
+ context.report({
171
+ node: usage.node,
172
+ messageId: 'preferInterface',
173
+ data: {
174
+ count: usages.length.toString(),
175
+ interfaceName,
176
+ },
177
+ fix(fixer) {
178
+ try {
179
+ // Generate interface declaration
180
+ const properties = signature.split(';').map(prop => {
181
+ const [key, type] = prop.split(':');
182
+ return ` ${key}: ${type};`;
183
+ }).join('\n');
184
+ const interfaceDeclaration = `interface ${interfaceName} {\n${properties}\n}`;
185
+ // Find insertion point (after imports, before other code)
186
+ const firstNode = sourceCode.ast.body[0];
187
+ let insertPosition = 0;
188
+ if (firstNode && firstNode.type === 'ImportDeclaration') {
189
+ // Find last import
190
+ let lastImport = firstNode;
191
+ for (const node of sourceCode.ast.body) {
192
+ if (node.type === 'ImportDeclaration') {
193
+ lastImport = node;
194
+ }
195
+ else {
196
+ break;
197
+ }
198
+ }
199
+ insertPosition = lastImport.range[1];
200
+ }
201
+ // Add interface declaration
202
+ const fixes = [
203
+ fixer.insertTextAfterRange([insertPosition, insertPosition], `\n\n${interfaceDeclaration}\n`),
204
+ ];
205
+ // Replace all usages with interface reference
206
+ for (const usage of usages) {
207
+ const nodeText = sourceCode.getText(usage.node);
208
+ const replacement = interfaceName;
209
+ fixes.push(fixer.replaceText(usage.node, replacement));
210
+ }
211
+ return fixes;
212
+ }
213
+ catch (fixError) {
214
+ console.error('[prefer-interface-over-duplicate-types] Error in fix function:', fixError);
215
+ return null;
216
+ }
217
+ },
218
+ });
219
+ }
220
+ }
221
+ }
222
+ }
223
+ catch (error) {
224
+ console.error('[prefer-interface-over-duplicate-types] Error in Program:exit visitor:', error);
225
+ }
226
+ },
227
+ };
228
+ },
229
+ };
230
+ exports.default = rule;
231
+ //# sourceMappingURL=prefer-interface-over-duplicate-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prefer-interface-over-duplicate-types.js","sourceRoot":"","sources":["../../../src/plugin/rules/prefer-interface-over-duplicate-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=prefer-interface-over-duplicate-types.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prefer-interface-over-duplicate-types.spec.d.ts","sourceRoot":"","sources":["../../../src/plugin/rules/prefer-interface-over-duplicate-types.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,324 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const prefer_interface_over_duplicate_types_1 = tslib_1.__importDefault(require("./prefer-interface-over-duplicate-types"));
5
+ describe('| prefer-interface-over-duplicate-types', () => {
6
+ it('| should be a valid ESLint rule', () => {
7
+ expect(prefer_interface_over_duplicate_types_1.default.meta?.type).toBe('suggestion');
8
+ expect(prefer_interface_over_duplicate_types_1.default.meta?.docs?.description).toContain('Suggest creating interfaces');
9
+ expect(prefer_interface_over_duplicate_types_1.default.meta?.fixable).toBe('code');
10
+ });
11
+ it('| should have create function that returns visitor object', () => {
12
+ const mockContext = {
13
+ report: () => { },
14
+ options: [{ threshold: 3 }],
15
+ sourceCode: {
16
+ getText: () => '',
17
+ getScope: () => ({ variables: [] }),
18
+ ast: { body: [] },
19
+ },
20
+ };
21
+ const result = prefer_interface_over_duplicate_types_1.default.create(mockContext);
22
+ expect(typeof result).toBe('object');
23
+ expect(typeof result.TSTypeLiteral).toBe('function');
24
+ expect(typeof result['Program:exit']).toBe('function');
25
+ });
26
+ it('| should not report when object type is used less than threshold', () => {
27
+ let reportCalled = false;
28
+ const mockContext = {
29
+ report: (options) => {
30
+ reportCalled = true;
31
+ },
32
+ options: [{ threshold: 3 }],
33
+ sourceCode: {
34
+ getText: () => '{ name: string; age: number }',
35
+ getScope: () => ({ variables: [] }),
36
+ ast: { body: [] },
37
+ },
38
+ };
39
+ const rule = prefer_interface_over_duplicate_types_1.default.create(mockContext);
40
+ // Simulate 2 usages (below threshold of 3)
41
+ const mockNode1 = {
42
+ type: 'TSTypeLiteral',
43
+ members: [
44
+ { type: 'TSPropertySignature', key: { name: 'name' }, typeAnnotation: { typeAnnotation: { type: 'TSStringKeyword' } } },
45
+ { type: 'TSPropertySignature', key: { name: 'age' }, typeAnnotation: { typeAnnotation: { type: 'TSNumberKeyword' } } },
46
+ ],
47
+ };
48
+ const mockNode2 = {
49
+ type: 'TSTypeLiteral',
50
+ members: [
51
+ { type: 'TSPropertySignature', key: { name: 'name' }, typeAnnotation: { typeAnnotation: { type: 'TSStringKeyword' } } },
52
+ { type: 'TSPropertySignature', key: { name: 'age' }, typeAnnotation: { typeAnnotation: { type: 'TSNumberKeyword' } } },
53
+ ],
54
+ };
55
+ rule.TSTypeLiteral(mockNode1);
56
+ rule.TSTypeLiteral(mockNode2);
57
+ rule['Program:exit']({});
58
+ expect(reportCalled).toBe(false);
59
+ });
60
+ it('| should report when object type is used at or above threshold', () => {
61
+ let reportCalled = false;
62
+ const mockContext = {
63
+ report: (options) => {
64
+ reportCalled = true;
65
+ expect(options.messageId).toBe('preferInterface');
66
+ expect(options.data.count).toBe('3');
67
+ expect(options.data.interfaceName).toContain('Interface');
68
+ },
69
+ options: [{ threshold: 3 }],
70
+ sourceCode: {
71
+ getText: () => '{ name: string; age: number }',
72
+ getScope: () => ({ variables: [] }),
73
+ ast: { body: [] },
74
+ },
75
+ };
76
+ const rule = prefer_interface_over_duplicate_types_1.default.create(mockContext);
77
+ // Simulate 3 usages (at threshold)
78
+ const mockNode = {
79
+ type: 'TSTypeLiteral',
80
+ members: [
81
+ { type: 'TSPropertySignature', key: { name: 'name' }, typeAnnotation: { typeAnnotation: { type: 'TSStringKeyword' } } },
82
+ { type: 'TSPropertySignature', key: { name: 'age' }, typeAnnotation: { typeAnnotation: { type: 'TSNumberKeyword' } } },
83
+ ],
84
+ };
85
+ rule.TSTypeLiteral(mockNode);
86
+ rule.TSTypeLiteral(mockNode);
87
+ rule.TSTypeLiteral(mockNode);
88
+ rule['Program:exit']({});
89
+ expect(reportCalled).toBe(true);
90
+ });
91
+ it('| should handle custom threshold', () => {
92
+ let reportCalled = false;
93
+ const mockContext = {
94
+ report: (options) => {
95
+ reportCalled = true;
96
+ expect(options.data.count).toBe('2');
97
+ },
98
+ options: [{ threshold: 2 }],
99
+ sourceCode: {
100
+ getText: () => '{ name: string }',
101
+ getScope: () => ({ variables: [] }),
102
+ ast: { body: [] },
103
+ },
104
+ };
105
+ const rule = prefer_interface_over_duplicate_types_1.default.create(mockContext);
106
+ const mockNode = {
107
+ type: 'TSTypeLiteral',
108
+ members: [
109
+ { type: 'TSPropertySignature', key: { name: 'name' }, typeAnnotation: { typeAnnotation: { type: 'TSStringKeyword' } } },
110
+ ],
111
+ };
112
+ rule.TSTypeLiteral(mockNode);
113
+ rule.TSTypeLiteral(mockNode);
114
+ rule['Program:exit']({});
115
+ expect(reportCalled).toBe(true);
116
+ });
117
+ it('| should handle structural equivalence (different property order)', () => {
118
+ let reportCalled = false;
119
+ const mockContext = {
120
+ report: (options) => {
121
+ reportCalled = true;
122
+ expect(options.data.count).toBe('2');
123
+ },
124
+ options: [{ threshold: 2 }],
125
+ sourceCode: {
126
+ getText: () => '',
127
+ getScope: () => ({ variables: [] }),
128
+ ast: { body: [] },
129
+ },
130
+ };
131
+ const rule = prefer_interface_over_duplicate_types_1.default.create(mockContext);
132
+ // First object: { name: string, age: number }
133
+ const mockNode1 = {
134
+ type: 'TSTypeLiteral',
135
+ members: [
136
+ { type: 'TSPropertySignature', key: { name: 'name' }, typeAnnotation: { typeAnnotation: { type: 'TSStringKeyword' } } },
137
+ { type: 'TSPropertySignature', key: { name: 'age' }, typeAnnotation: { typeAnnotation: { type: 'TSNumberKeyword' } } },
138
+ ],
139
+ };
140
+ // Second object: { age: number, name: string } (different order)
141
+ const mockNode2 = {
142
+ type: 'TSTypeLiteral',
143
+ members: [
144
+ { type: 'TSPropertySignature', key: { name: 'age' }, typeAnnotation: { typeAnnotation: { type: 'TSNumberKeyword' } } },
145
+ { type: 'TSPropertySignature', key: { name: 'name' }, typeAnnotation: { typeAnnotation: { type: 'TSStringKeyword' } } },
146
+ ],
147
+ };
148
+ rule.TSTypeLiteral(mockNode1);
149
+ rule.TSTypeLiteral(mockNode2);
150
+ rule['Program:exit']({});
151
+ expect(reportCalled).toBe(true);
152
+ });
153
+ it('| should handle optional properties', () => {
154
+ let reportCalled = false;
155
+ const mockContext = {
156
+ report: (options) => {
157
+ reportCalled = true;
158
+ expect(options.data.count).toBe('2');
159
+ },
160
+ options: [{ threshold: 2 }],
161
+ sourceCode: {
162
+ getText: () => '',
163
+ getScope: () => ({ variables: [] }),
164
+ ast: { body: [] },
165
+ },
166
+ };
167
+ const rule = prefer_interface_over_duplicate_types_1.default.create(mockContext);
168
+ const mockNode = {
169
+ type: 'TSTypeLiteral',
170
+ members: [
171
+ { type: 'TSPropertySignature', key: { name: 'name' }, typeAnnotation: { typeAnnotation: { type: 'TSStringKeyword' } }, optional: true },
172
+ { type: 'TSPropertySignature', key: { name: 'age' }, typeAnnotation: { typeAnnotation: { type: 'TSNumberKeyword' } } },
173
+ ],
174
+ };
175
+ rule.TSTypeLiteral(mockNode);
176
+ rule.TSTypeLiteral(mockNode);
177
+ rule['Program:exit']({});
178
+ expect(reportCalled).toBe(true);
179
+ });
180
+ it('| should handle readonly properties', () => {
181
+ let reportCalled = false;
182
+ const mockContext = {
183
+ report: (options) => {
184
+ reportCalled = true;
185
+ expect(options.data.count).toBe('2');
186
+ },
187
+ options: [{ threshold: 2 }],
188
+ sourceCode: {
189
+ getText: () => '',
190
+ getScope: () => ({ variables: [] }),
191
+ ast: { body: [] },
192
+ },
193
+ };
194
+ const rule = prefer_interface_over_duplicate_types_1.default.create(mockContext);
195
+ const mockNode = {
196
+ type: 'TSTypeLiteral',
197
+ members: [
198
+ { type: 'TSPropertySignature', key: { name: 'name' }, typeAnnotation: { typeAnnotation: { type: 'TSStringKeyword' } }, readonly: true },
199
+ { type: 'TSPropertySignature', key: { name: 'age' }, typeAnnotation: { typeAnnotation: { type: 'TSNumberKeyword' } } },
200
+ ],
201
+ };
202
+ rule.TSTypeLiteral(mockNode);
203
+ rule.TSTypeLiteral(mockNode);
204
+ rule['Program:exit']({});
205
+ expect(reportCalled).toBe(true);
206
+ });
207
+ it('| should provide auto-fix functionality', () => {
208
+ const mockContext = {
209
+ report: (options) => {
210
+ expect(options.fix).toBeDefined();
211
+ expect(typeof options.fix).toBe('function');
212
+ },
213
+ options: [{ threshold: 2 }],
214
+ sourceCode: {
215
+ getText: () => '{ name: string; age: number }',
216
+ getScope: () => ({ variables: [] }),
217
+ ast: { body: [] },
218
+ },
219
+ };
220
+ const rule = prefer_interface_over_duplicate_types_1.default.create(mockContext);
221
+ const mockNode = {
222
+ type: 'TSTypeLiteral',
223
+ members: [
224
+ { type: 'TSPropertySignature', key: { name: 'name' }, typeAnnotation: { typeAnnotation: { type: 'TSStringKeyword' } } },
225
+ { type: 'TSPropertySignature', key: { name: 'age' }, typeAnnotation: { typeAnnotation: { type: 'TSNumberKeyword' } } },
226
+ ],
227
+ };
228
+ rule.TSTypeLiteral(mockNode);
229
+ rule.TSTypeLiteral(mockNode);
230
+ rule['Program:exit']({});
231
+ });
232
+ it('| should handle default threshold when no options provided', () => {
233
+ let reportCalled = false;
234
+ const mockContext = {
235
+ report: (options) => {
236
+ reportCalled = true;
237
+ expect(options.data.count).toBe('3');
238
+ },
239
+ options: [],
240
+ sourceCode: {
241
+ getText: () => '',
242
+ getScope: () => ({ variables: [] }),
243
+ ast: { body: [] },
244
+ },
245
+ };
246
+ const rule = prefer_interface_over_duplicate_types_1.default.create(mockContext);
247
+ const mockNode = {
248
+ type: 'TSTypeLiteral',
249
+ members: [
250
+ { type: 'TSPropertySignature', key: { name: 'name' }, typeAnnotation: { typeAnnotation: { type: 'TSStringKeyword' } } },
251
+ ],
252
+ };
253
+ rule.TSTypeLiteral(mockNode);
254
+ rule.TSTypeLiteral(mockNode);
255
+ rule.TSTypeLiteral(mockNode);
256
+ rule['Program:exit']({});
257
+ expect(reportCalled).toBe(true);
258
+ });
259
+ it('| should handle complex nested types', () => {
260
+ let reportCalled = false;
261
+ const mockContext = {
262
+ report: (options) => {
263
+ reportCalled = true;
264
+ expect(options.data.count).toBe('2');
265
+ },
266
+ options: [{ threshold: 2 }],
267
+ sourceCode: {
268
+ getText: () => '',
269
+ getScope: () => ({ variables: [] }),
270
+ ast: { body: [] },
271
+ },
272
+ };
273
+ const rule = prefer_interface_over_duplicate_types_1.default.create(mockContext);
274
+ const mockNode = {
275
+ type: 'TSTypeLiteral',
276
+ members: [
277
+ {
278
+ type: 'TSPropertySignature',
279
+ key: { name: 'user' },
280
+ typeAnnotation: {
281
+ typeAnnotation: {
282
+ type: 'TSTypeLiteral',
283
+ members: [
284
+ { type: 'TSPropertySignature', key: { name: 'id' }, typeAnnotation: { typeAnnotation: { type: 'TSNumberKeyword' } } },
285
+ { type: 'TSPropertySignature', key: { name: 'name' }, typeAnnotation: { typeAnnotation: { type: 'TSStringKeyword' } } },
286
+ ],
287
+ },
288
+ },
289
+ },
290
+ ],
291
+ };
292
+ rule.TSTypeLiteral(mockNode);
293
+ rule.TSTypeLiteral(mockNode);
294
+ rule['Program:exit']({});
295
+ expect(reportCalled).toBe(true);
296
+ });
297
+ it('| should handle error cases gracefully', () => {
298
+ const mockContext = {
299
+ report: () => { },
300
+ options: [{ threshold: 2 }],
301
+ sourceCode: {
302
+ getText: () => '',
303
+ getScope: () => {
304
+ throw new Error('Scope error');
305
+ },
306
+ ast: { body: [] },
307
+ },
308
+ };
309
+ const rule = prefer_interface_over_duplicate_types_1.default.create(mockContext);
310
+ const mockNode = {
311
+ type: 'TSTypeLiteral',
312
+ members: [
313
+ { type: 'TSPropertySignature', key: { name: 'name' }, typeAnnotation: { typeAnnotation: { type: 'TSStringKeyword' } } },
314
+ ],
315
+ };
316
+ // Should not throw error
317
+ expect(() => {
318
+ rule.TSTypeLiteral(mockNode);
319
+ rule.TSTypeLiteral(mockNode);
320
+ rule['Program:exit']({});
321
+ }).not.toThrow();
322
+ });
323
+ });
324
+ //# sourceMappingURL=prefer-interface-over-duplicate-types.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prefer-interface-over-duplicate-types.spec.js","sourceRoot":"","sources":["../../../src/plugin/rules/prefer-interface-over-duplicate-types.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { Rule } from 'eslint';
2
+ declare const rule: Rule.RuleModule;
3
+ export default rule;
4
+ //# sourceMappingURL=require-jsdoc-description.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"require-jsdoc-description.d.ts","sourceRoot":"","sources":["../../../src/plugin/rules/require-jsdoc-description.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAM9B,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,UA2ahB,CAAC;AAEF,eAAe,IAAI,CAAC"}