@futdevpro/dynamo-eslint 1.15.1 → 1.15.3

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 (73) hide show
  1. package/.cursor/rules/__assistant_guide.mdc +30 -0
  2. package/.cursor/rules/__main.mdc +64 -0
  3. package/.cursor/rules/_ag_backend-structure.mdc +86 -0
  4. package/.cursor/rules/_ag_backend.mdc +16 -0
  5. package/.cursor/rules/_ag_debug.mdc +8 -0
  6. package/.cursor/rules/_ag_documentation_writing_rules.mdc +372 -0
  7. package/.cursor/rules/_ag_file-refactoring.mdc +113 -0
  8. package/.cursor/rules/_ag_fixes_rules.mdc +6 -0
  9. package/.cursor/rules/_ag_frontend-structure.mdc +87 -0
  10. package/.cursor/rules/_ag_frontend.mdc +40 -0
  11. package/.cursor/rules/_ag_import-rules.mdc +45 -0
  12. package/.cursor/rules/_ag_naming.mdc +116 -0
  13. package/.cursor/rules/_ag_running_commands.mdc +5 -0
  14. package/.cursor/rules/_ag_server-controller.mdc +6 -0
  15. package/.cursor/rules/_ag_should-be.mdc +7 -0
  16. package/.cursor/rules/_ag_swearing.mdc +47 -0
  17. package/.cursor/rules/ai_development_guide.md +61 -0
  18. package/.cursor/rules/ai_directives.md +114 -0
  19. package/.cursor/rules/cursor-rules.md +160 -0
  20. package/.cursor/rules/default-command.mdc +465 -0
  21. package/.cursor/rules/error_code_pattern.md +40 -0
  22. package/.cursor/rules/saved rule mcp server use.md +16 -0
  23. package/futdevpro-dynamo-eslint-1.15.3.tgz +0 -0
  24. package/package.json +2 -2
  25. package/build/plugin/rules/explicit-types.spec.d.ts +0 -2
  26. package/build/plugin/rules/explicit-types.spec.d.ts.map +0 -1
  27. package/build/plugin/rules/explicit-types.spec.js +0 -162
  28. package/build/plugin/rules/explicit-types.spec.js.map +0 -1
  29. package/build/plugin/rules/import/import-order.spec.d.ts +0 -2
  30. package/build/plugin/rules/import/import-order.spec.d.ts.map +0 -1
  31. package/build/plugin/rules/import/import-order.spec.js +0 -197
  32. package/build/plugin/rules/import/import-order.spec.js.map +0 -1
  33. package/build/plugin/rules/import/no-import-type.spec.d.ts +0 -2
  34. package/build/plugin/rules/import/no-import-type.spec.d.ts.map +0 -1
  35. package/build/plugin/rules/import/no-import-type.spec.js +0 -60
  36. package/build/plugin/rules/import/no-import-type.spec.js.map +0 -1
  37. package/build/plugin/rules/import/no-js-import.spec.d.ts +0 -2
  38. package/build/plugin/rules/import/no-js-import.spec.d.ts.map +0 -1
  39. package/build/plugin/rules/import/no-js-import.spec.js +0 -68
  40. package/build/plugin/rules/import/no-js-import.spec.js.map +0 -1
  41. package/build/plugin/rules/naming-patterns.spec.d.ts +0 -2
  42. package/build/plugin/rules/naming-patterns.spec.d.ts.map +0 -1
  43. package/build/plugin/rules/naming-patterns.spec.js +0 -36
  44. package/build/plugin/rules/naming-patterns.spec.js.map +0 -1
  45. package/build/plugin/rules/no-getter-logic.spec.d.ts +0 -2
  46. package/build/plugin/rules/no-getter-logic.spec.d.ts.map +0 -1
  47. package/build/plugin/rules/no-getter-logic.spec.js +0 -461
  48. package/build/plugin/rules/no-getter-logic.spec.js.map +0 -1
  49. package/build/plugin/rules/prefer-enum-over-string-union.spec.d.ts +0 -2
  50. package/build/plugin/rules/prefer-enum-over-string-union.spec.d.ts.map +0 -1
  51. package/build/plugin/rules/prefer-enum-over-string-union.spec.js +0 -505
  52. package/build/plugin/rules/prefer-enum-over-string-union.spec.js.map +0 -1
  53. package/build/plugin/rules/prefer-interface-over-duplicate-types.spec.d.ts +0 -2
  54. package/build/plugin/rules/prefer-interface-over-duplicate-types.spec.d.ts.map +0 -1
  55. package/build/plugin/rules/prefer-interface-over-duplicate-types.spec.js +0 -324
  56. package/build/plugin/rules/prefer-interface-over-duplicate-types.spec.js.map +0 -1
  57. package/build/plugin/rules/require-jsdoc-description.spec.d.ts +0 -2
  58. package/build/plugin/rules/require-jsdoc-description.spec.d.ts.map +0 -1
  59. package/build/plugin/rules/require-jsdoc-description.spec.js +0 -546
  60. package/build/plugin/rules/require-jsdoc-description.spec.js.map +0 -1
  61. package/build/plugin/rules/require-test-description-prefix.spec.d.ts +0 -2
  62. package/build/plugin/rules/require-test-description-prefix.spec.d.ts.map +0 -1
  63. package/build/plugin/rules/require-test-description-prefix.spec.js +0 -371
  64. package/build/plugin/rules/require-test-description-prefix.spec.js.map +0 -1
  65. package/build-test/plugin/rules/import-order.d.ts +0 -3
  66. package/build-test/plugin/rules/import-order.js +0 -23
  67. package/build-test/plugin/rules/import-order.spec.d.ts +0 -1
  68. package/build-test/plugin/rules/import-order.spec.js +0 -44
  69. package/build-test/plugin/rules/naming-patterns.d.ts +0 -3
  70. package/build-test/plugin/rules/naming-patterns.js +0 -22
  71. package/build-test/plugin/rules/naming-patterns.spec.d.ts +0 -1
  72. package/build-test/plugin/rules/naming-patterns.spec.js +0 -41
  73. package/futdevpro-dynamo-eslint-1.15.01.tgz +0 -0
@@ -1,324 +0,0 @@
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
@@ -1 +0,0 @@
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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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=require-jsdoc-description.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"require-jsdoc-description.spec.d.ts","sourceRoot":"","sources":["../../../src/plugin/rules/require-jsdoc-description.spec.ts"],"names":[],"mappings":""}