tailwind-typescript-plugin 1.4.0-beta.22 → 1.4.0-beta.24

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 (80) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/lib/extractors/BaseExtractor.spec.d.ts +2 -0
  3. package/lib/extractors/BaseExtractor.spec.d.ts.map +1 -0
  4. package/lib/extractors/BaseExtractor.spec.js +421 -0
  5. package/lib/extractors/BaseExtractor.spec.js.map +1 -0
  6. package/lib/extractors/CvaExtractor.spec.d.ts +2 -0
  7. package/lib/extractors/CvaExtractor.spec.d.ts.map +1 -0
  8. package/lib/extractors/CvaExtractor.spec.js +1177 -0
  9. package/lib/extractors/CvaExtractor.spec.js.map +1 -0
  10. package/lib/extractors/ExpressionExtractor.spec.d.ts +2 -0
  11. package/lib/extractors/ExpressionExtractor.spec.d.ts.map +1 -0
  12. package/lib/extractors/ExpressionExtractor.spec.js +316 -0
  13. package/lib/extractors/ExpressionExtractor.spec.js.map +1 -0
  14. package/lib/extractors/JsxAttributeExtractor.spec.d.ts +2 -0
  15. package/lib/extractors/JsxAttributeExtractor.spec.d.ts.map +1 -0
  16. package/lib/extractors/JsxAttributeExtractor.spec.js +430 -0
  17. package/lib/extractors/JsxAttributeExtractor.spec.js.map +1 -0
  18. package/lib/extractors/TailwindVariantsExtractor.spec.d.ts +2 -0
  19. package/lib/extractors/TailwindVariantsExtractor.spec.d.ts.map +1 -0
  20. package/lib/extractors/TailwindVariantsExtractor.spec.js +1407 -0
  21. package/lib/extractors/TailwindVariantsExtractor.spec.js.map +1 -0
  22. package/lib/extractors/TemplateExpressionExtractor.spec.d.ts +2 -0
  23. package/lib/extractors/TemplateExpressionExtractor.spec.d.ts.map +1 -0
  24. package/lib/extractors/TemplateExpressionExtractor.spec.js +240 -0
  25. package/lib/extractors/TemplateExpressionExtractor.spec.js.map +1 -0
  26. package/lib/extractors/VariableReferenceExtractor.spec.d.ts +2 -0
  27. package/lib/extractors/VariableReferenceExtractor.spec.d.ts.map +1 -0
  28. package/lib/extractors/VariableReferenceExtractor.spec.js +138 -0
  29. package/lib/extractors/VariableReferenceExtractor.spec.js.map +1 -0
  30. package/lib/extractors/VueAttributeExtractor.d.ts +18 -0
  31. package/lib/extractors/VueAttributeExtractor.d.ts.map +1 -1
  32. package/lib/extractors/VueAttributeExtractor.js +201 -3
  33. package/lib/extractors/VueAttributeExtractor.js.map +1 -1
  34. package/lib/plugin/TailwindTypescriptPlugin.d.ts.map +1 -1
  35. package/lib/plugin/TailwindTypescriptPlugin.js +6 -1
  36. package/lib/plugin/TailwindTypescriptPlugin.js.map +1 -1
  37. package/lib/services/ClassNameExtractionService.d.ts.map +1 -1
  38. package/lib/services/ClassNameExtractionService.js +0 -3
  39. package/lib/services/ClassNameExtractionService.js.map +1 -1
  40. package/lib/services/ClassNameExtractionService.spec.js +0 -7
  41. package/lib/services/ClassNameExtractionService.spec.js.map +1 -1
  42. package/lib/services/ConfigSchemaValidator.d.ts +40 -0
  43. package/lib/services/ConfigSchemaValidator.d.ts.map +1 -0
  44. package/lib/services/ConfigSchemaValidator.js +139 -0
  45. package/lib/services/ConfigSchemaValidator.js.map +1 -0
  46. package/lib/services/ConfigSchemaValidator.spec.d.ts +2 -0
  47. package/lib/services/ConfigSchemaValidator.spec.d.ts.map +1 -0
  48. package/lib/services/ConfigSchemaValidator.spec.js +344 -0
  49. package/lib/services/ConfigSchemaValidator.spec.js.map +1 -0
  50. package/lib/services/DiagnosticService.spec.d.ts +2 -0
  51. package/lib/services/DiagnosticService.spec.d.ts.map +1 -0
  52. package/lib/services/DiagnosticService.spec.js +259 -0
  53. package/lib/services/DiagnosticService.spec.js.map +1 -0
  54. package/lib/services/FileDiagnosticCache.spec.d.ts +2 -0
  55. package/lib/services/FileDiagnosticCache.spec.d.ts.map +1 -0
  56. package/lib/services/FileDiagnosticCache.spec.js +213 -0
  57. package/lib/services/FileDiagnosticCache.spec.js.map +1 -0
  58. package/lib/services/PerformanceCache.spec.d.ts +2 -0
  59. package/lib/services/PerformanceCache.spec.d.ts.map +1 -0
  60. package/lib/services/PerformanceCache.spec.js +168 -0
  61. package/lib/services/PerformanceCache.spec.js.map +1 -0
  62. package/lib/services/PluginConfigService.d.ts +19 -0
  63. package/lib/services/PluginConfigService.d.ts.map +1 -1
  64. package/lib/services/PluginConfigService.js +29 -0
  65. package/lib/services/PluginConfigService.js.map +1 -1
  66. package/lib/services/ValidationService.spec.d.ts +2 -0
  67. package/lib/services/ValidationService.spec.d.ts.map +1 -0
  68. package/lib/services/ValidationService.spec.js +289 -0
  69. package/lib/services/ValidationService.spec.js.map +1 -0
  70. package/lib/utils/FrameworkDetector.d.ts +1 -2
  71. package/lib/utils/FrameworkDetector.d.ts.map +1 -1
  72. package/lib/utils/FrameworkDetector.js +0 -5
  73. package/lib/utils/FrameworkDetector.js.map +1 -1
  74. package/lib/utils/FrameworkDetector.spec.js +1 -9
  75. package/lib/utils/FrameworkDetector.spec.js.map +1 -1
  76. package/package.json +3 -2
  77. package/lib/extractors/SvelteAttributeExtractor.d.ts +0 -17
  78. package/lib/extractors/SvelteAttributeExtractor.d.ts.map +0 -1
  79. package/lib/extractors/SvelteAttributeExtractor.js +0 -27
  80. package/lib/extractors/SvelteAttributeExtractor.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,3 +1,23 @@
1
+ ## [1.4.0-beta.24](https://github.com/IvanRodriCalleja/tailwind-typescript-plugin/compare/v1.4.0-beta.23...v1.4.0-beta.24) (2026-01-02)
2
+
3
+ ### ✨ Features
4
+
5
+ * add configuration schema validation with Zod ([bfd395e](https://github.com/IvanRodriCalleja/tailwind-typescript-plugin/commit/bfd395e2cbe29b628990bfa3ac97e0aee3b47aae))
6
+
7
+ ### ✅ Tests
8
+
9
+ * add comprehensive test coverage for extractors and services ([7839ba9](https://github.com/IvanRodriCalleja/tailwind-typescript-plugin/commit/7839ba964add0a91fdee3b31db9711dcdf47c4ed))
10
+
11
+ ### 🔧 Chores
12
+
13
+ * remove Svelte support ([edce4d6](https://github.com/IvanRodriCalleja/tailwind-typescript-plugin/commit/edce4d61cf37bef6224181552d9e56cc0e020472))
14
+
15
+ ## [1.4.0-beta.23](https://github.com/IvanRodriCalleja/tailwind-typescript-plugin/compare/v1.4.0-beta.22...v1.4.0-beta.23) (2025-12-29)
16
+
17
+ ### ✨ Features
18
+
19
+ * **vue:** add support for advanced Vue patterns ([abf1863](https://github.com/IvanRodriCalleja/tailwind-typescript-plugin/commit/abf1863cb0ae392f5b08109a84bd7832b140af31))
20
+
1
21
  ## [1.4.0-beta.22](https://github.com/IvanRodriCalleja/tailwind-typescript-plugin/compare/v1.4.0-beta.21...v1.4.0-beta.22) (2025-12-29)
2
22
 
3
23
  ### ✨ Features
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=BaseExtractor.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseExtractor.spec.d.ts","sourceRoot":"","sources":["../../src/extractors/BaseExtractor.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,421 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const ts = __importStar(require("typescript/lib/tsserverlibrary"));
37
+ const BaseExtractor_1 = require("./BaseExtractor");
38
+ // Create a concrete implementation for testing
39
+ class TestExtractor extends BaseExtractor_1.BaseExtractor {
40
+ canHandle(node) {
41
+ return ts.isStringLiteral(node);
42
+ }
43
+ extract(node, context) {
44
+ if (ts.isStringLiteral(node) || ts.isNoSubstitutionTemplateLiteral(node)) {
45
+ return this.extractFromStringLiteral(node, context);
46
+ }
47
+ return [];
48
+ }
49
+ // Expose protected methods for testing
50
+ testShouldValidateFunctionCall(callExpression, utilityFunctions, context) {
51
+ return this.shouldValidateFunctionCall(callExpression, utilityFunctions, context);
52
+ }
53
+ testIsImportedFrom(functionName, expectedModule, context) {
54
+ return this.isImportedFrom(functionName, expectedModule, context);
55
+ }
56
+ testIsNamespaceImportedFrom(objectName, expectedModule, context) {
57
+ return this.isNamespaceImportedFrom(objectName, expectedModule, context);
58
+ }
59
+ testIsUtilityFunctionName(functionName, utilityFunctions) {
60
+ return this.isUtilityFunctionName(functionName, utilityFunctions);
61
+ }
62
+ }
63
+ describe('BaseExtractor', () => {
64
+ let extractor;
65
+ const createContext = (code, overrides = {}) => {
66
+ const sourceFile = ts.createSourceFile('test.tsx', code, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
67
+ return {
68
+ typescript: ts,
69
+ sourceFile,
70
+ utilityFunctions: [],
71
+ ...overrides
72
+ };
73
+ };
74
+ const findCallExpression = (sourceFile) => {
75
+ let result;
76
+ const visit = (node) => {
77
+ if (ts.isCallExpression(node)) {
78
+ result = node;
79
+ return;
80
+ }
81
+ ts.forEachChild(node, visit);
82
+ };
83
+ visit(sourceFile);
84
+ return result;
85
+ };
86
+ const findStringLiteral = (sourceFile) => {
87
+ let result;
88
+ const visit = (node) => {
89
+ if (ts.isStringLiteral(node)) {
90
+ result = node;
91
+ return;
92
+ }
93
+ ts.forEachChild(node, visit);
94
+ };
95
+ visit(sourceFile);
96
+ return result;
97
+ };
98
+ beforeEach(() => {
99
+ extractor = new TestExtractor();
100
+ });
101
+ describe('extractFromStringLiteral', () => {
102
+ it('should extract single class name', () => {
103
+ const code = 'const x = "flex";';
104
+ const context = createContext(code);
105
+ const literal = findStringLiteral(context.sourceFile);
106
+ const classes = extractor.extract(literal, context);
107
+ expect(classes).toHaveLength(1);
108
+ expect(classes[0].className).toBe('flex');
109
+ });
110
+ it('should extract multiple class names separated by spaces', () => {
111
+ const code = 'const x = "flex items-center justify-between";';
112
+ const context = createContext(code);
113
+ const literal = findStringLiteral(context.sourceFile);
114
+ const classes = extractor.extract(literal, context);
115
+ expect(classes).toHaveLength(3);
116
+ expect(classes.map(c => c.className)).toEqual(['flex', 'items-center', 'justify-between']);
117
+ });
118
+ it('should handle multiple whitespace between classes', () => {
119
+ const code = 'const x = "flex items-center";';
120
+ const context = createContext(code);
121
+ const literal = findStringLiteral(context.sourceFile);
122
+ const classes = extractor.extract(literal, context);
123
+ expect(classes).toHaveLength(2);
124
+ });
125
+ it('should handle newlines in string', () => {
126
+ const code = 'const x = "flex items-center justify-between";';
127
+ const context = createContext(code);
128
+ const literal = findStringLiteral(context.sourceFile);
129
+ const classes = extractor.extract(literal, context);
130
+ expect(classes).toHaveLength(3);
131
+ });
132
+ it('should handle tabs in string', () => {
133
+ const code = 'const x = "flex\titems-center";';
134
+ const context = createContext(code);
135
+ const literal = findStringLiteral(context.sourceFile);
136
+ const classes = extractor.extract(literal, context);
137
+ expect(classes).toHaveLength(2);
138
+ });
139
+ it('should return empty array for empty string', () => {
140
+ const code = 'const x = "";';
141
+ const context = createContext(code);
142
+ const literal = findStringLiteral(context.sourceFile);
143
+ const classes = extractor.extract(literal, context);
144
+ expect(classes).toHaveLength(0);
145
+ });
146
+ it('should return empty array for whitespace-only string', () => {
147
+ const code = 'const x = " ";';
148
+ const context = createContext(code);
149
+ const literal = findStringLiteral(context.sourceFile);
150
+ const classes = extractor.extract(literal, context);
151
+ expect(classes).toHaveLength(0);
152
+ });
153
+ it('should set correct absoluteStart for each class', () => {
154
+ const code = 'const x = "flex items-center";';
155
+ const context = createContext(code);
156
+ const literal = findStringLiteral(context.sourceFile);
157
+ const classes = extractor.extract(literal, context);
158
+ expect(context.sourceFile.text.substring(classes[0].absoluteStart, classes[0].absoluteStart + classes[0].length)).toBe('flex');
159
+ expect(context.sourceFile.text.substring(classes[1].absoluteStart, classes[1].absoluteStart + classes[1].length)).toBe('items-center');
160
+ });
161
+ it('should set correct line number', () => {
162
+ const code = 'const x = "flex";';
163
+ const context = createContext(code);
164
+ const literal = findStringLiteral(context.sourceFile);
165
+ const classes = extractor.extract(literal, context);
166
+ expect(classes[0].line).toBe(1);
167
+ });
168
+ it('should set correct file name', () => {
169
+ const code = 'const x = "flex";';
170
+ const context = createContext(code);
171
+ const literal = findStringLiteral(context.sourceFile);
172
+ const classes = extractor.extract(literal, context);
173
+ expect(classes[0].file).toBe('test.tsx');
174
+ });
175
+ });
176
+ describe('shouldValidateFunctionCall', () => {
177
+ it('should return true for matching simple function name', () => {
178
+ const code = "clsx('flex')";
179
+ const context = createContext(code);
180
+ const callExpr = findCallExpression(context.sourceFile);
181
+ const result = extractor.testShouldValidateFunctionCall(callExpr, ['clsx']);
182
+ expect(result).toBe(true);
183
+ });
184
+ it('should return false for non-matching function name', () => {
185
+ const code = "unknownFn('flex')";
186
+ const context = createContext(code);
187
+ const callExpr = findCallExpression(context.sourceFile);
188
+ const result = extractor.testShouldValidateFunctionCall(callExpr, ['clsx']);
189
+ expect(result).toBe(false);
190
+ });
191
+ it('should return true for utility function with matching import', () => {
192
+ const code = `
193
+ import { clsx } from 'clsx';
194
+ clsx('flex');
195
+ `;
196
+ const context = createContext(code);
197
+ const callExpr = findCallExpression(context.sourceFile);
198
+ const result = extractor.testShouldValidateFunctionCall(callExpr, [{ name: 'clsx', from: 'clsx' }], context);
199
+ expect(result).toBe(true);
200
+ });
201
+ it('should return false for utility function with non-matching import', () => {
202
+ const code = `
203
+ import { clsx } from 'other-package';
204
+ clsx('flex');
205
+ `;
206
+ const context = createContext(code);
207
+ const callExpr = findCallExpression(context.sourceFile);
208
+ const result = extractor.testShouldValidateFunctionCall(callExpr, [{ name: 'clsx', from: 'clsx' }], context);
209
+ expect(result).toBe(false);
210
+ });
211
+ it('should handle aliased imports', () => {
212
+ const code = `
213
+ import { clsx as cx } from 'clsx';
214
+ cx('flex');
215
+ `;
216
+ const context = createContext(code);
217
+ const callExpr = findCallExpression(context.sourceFile);
218
+ const result = extractor.testShouldValidateFunctionCall(callExpr, [{ name: 'cx', from: 'clsx' }], context);
219
+ expect(result).toBe(true);
220
+ });
221
+ it('should handle default imports', () => {
222
+ const code = `
223
+ import clsx from 'clsx';
224
+ clsx('flex');
225
+ `;
226
+ const context = createContext(code);
227
+ const callExpr = findCallExpression(context.sourceFile);
228
+ const result = extractor.testShouldValidateFunctionCall(callExpr, [{ name: 'clsx', from: 'clsx' }], context);
229
+ expect(result).toBe(true);
230
+ });
231
+ it('should handle namespace imports', () => {
232
+ const code = `
233
+ import * as utils from 'clsx';
234
+ utils.clsx('flex');
235
+ `;
236
+ const context = createContext(code);
237
+ const callExpr = findCallExpression(context.sourceFile);
238
+ const result = extractor.testShouldValidateFunctionCall(callExpr, [{ name: 'clsx', from: 'clsx' }], context);
239
+ expect(result).toBe(true);
240
+ });
241
+ it('should handle member expressions with property access', () => {
242
+ const code = `
243
+ import * as lib from 'my-lib';
244
+ lib.cn('flex');
245
+ `;
246
+ const context = createContext(code);
247
+ const callExpr = findCallExpression(context.sourceFile);
248
+ const result = extractor.testShouldValidateFunctionCall(callExpr, [{ name: 'cn', from: 'my-lib' }], context);
249
+ expect(result).toBe(true);
250
+ });
251
+ it('should return true without context when config specifies import', () => {
252
+ const code = "clsx('flex')";
253
+ const context = createContext(code);
254
+ const callExpr = findCallExpression(context.sourceFile);
255
+ const result = extractor.testShouldValidateFunctionCall(callExpr, [{ name: 'clsx', from: 'clsx' }]
256
+ // No context passed
257
+ );
258
+ expect(result).toBe(true);
259
+ });
260
+ it('should handle subpath imports', () => {
261
+ const code = `
262
+ import { tv } from 'tailwind-variants/lite';
263
+ tv('flex');
264
+ `;
265
+ const context = createContext(code);
266
+ const callExpr = findCallExpression(context.sourceFile);
267
+ const result = extractor.testShouldValidateFunctionCall(callExpr, [{ name: 'tv', from: 'tailwind-variants' }], context);
268
+ expect(result).toBe(true);
269
+ });
270
+ });
271
+ describe('isImportedFrom', () => {
272
+ it('should return true for matching named import', () => {
273
+ const code = `
274
+ import { clsx } from 'clsx';
275
+ clsx('flex');
276
+ `;
277
+ const context = createContext(code);
278
+ const result = extractor.testIsImportedFrom('clsx', 'clsx', context);
279
+ expect(result).toBe(true);
280
+ });
281
+ it('should return false for non-existent import', () => {
282
+ const code = `
283
+ import { other } from 'clsx';
284
+ `;
285
+ const context = createContext(code);
286
+ const result = extractor.testIsImportedFrom('clsx', 'clsx', context);
287
+ expect(result).toBe(false);
288
+ });
289
+ it('should return false for wrong module', () => {
290
+ const code = `
291
+ import { clsx } from 'wrong-module';
292
+ `;
293
+ const context = createContext(code);
294
+ const result = extractor.testIsImportedFrom('clsx', 'clsx', context);
295
+ expect(result).toBe(false);
296
+ });
297
+ it('should handle subpath matches', () => {
298
+ const code = `
299
+ import { tv } from 'tailwind-variants/lite';
300
+ `;
301
+ const context = createContext(code);
302
+ const result = extractor.testIsImportedFrom('tv', 'tailwind-variants', context);
303
+ expect(result).toBe(true);
304
+ });
305
+ });
306
+ describe('isNamespaceImportedFrom', () => {
307
+ it('should return true for matching namespace import', () => {
308
+ const code = `
309
+ import * as utils from 'clsx';
310
+ `;
311
+ const context = createContext(code);
312
+ const result = extractor.testIsNamespaceImportedFrom('utils', 'clsx', context);
313
+ expect(result).toBe(true);
314
+ });
315
+ it('should return false for non-existent namespace import', () => {
316
+ const code = `
317
+ import * as other from 'clsx';
318
+ `;
319
+ const context = createContext(code);
320
+ const result = extractor.testIsNamespaceImportedFrom('utils', 'clsx', context);
321
+ expect(result).toBe(false);
322
+ });
323
+ it('should return false for wrong module', () => {
324
+ const code = `
325
+ import * as utils from 'wrong-module';
326
+ `;
327
+ const context = createContext(code);
328
+ const result = extractor.testIsNamespaceImportedFrom('utils', 'clsx', context);
329
+ expect(result).toBe(false);
330
+ });
331
+ it('should handle subpath matches', () => {
332
+ const code = `
333
+ import * as tv from 'tailwind-variants/lite';
334
+ `;
335
+ const context = createContext(code);
336
+ const result = extractor.testIsNamespaceImportedFrom('tv', 'tailwind-variants', context);
337
+ expect(result).toBe(true);
338
+ });
339
+ });
340
+ describe('isUtilityFunctionName', () => {
341
+ it('should return true for matching simple string', () => {
342
+ const result = extractor.testIsUtilityFunctionName('clsx', ['clsx', 'cn']);
343
+ expect(result).toBe(true);
344
+ });
345
+ it('should return true for matching config object', () => {
346
+ const result = extractor.testIsUtilityFunctionName('clsx', [
347
+ { name: 'clsx', from: 'clsx' },
348
+ { name: 'cn', from: '@/lib/utils' }
349
+ ]);
350
+ expect(result).toBe(true);
351
+ });
352
+ it('should return false for non-matching function name', () => {
353
+ const result = extractor.testIsUtilityFunctionName('unknown', ['clsx', 'cn']);
354
+ expect(result).toBe(false);
355
+ });
356
+ it('should return false for empty array', () => {
357
+ const result = extractor.testIsUtilityFunctionName('clsx', []);
358
+ expect(result).toBe(false);
359
+ });
360
+ });
361
+ describe('import caching', () => {
362
+ it('should cache import mappings', () => {
363
+ const code = `
364
+ import { clsx } from 'clsx';
365
+ clsx('flex');
366
+ `;
367
+ const context = createContext(code);
368
+ // Call twice to test caching
369
+ extractor.testIsImportedFrom('clsx', 'clsx', context);
370
+ const result = extractor.testIsImportedFrom('clsx', 'clsx', context);
371
+ expect(result).toBe(true);
372
+ });
373
+ it('should clear cache when clearImportCache is called', () => {
374
+ const code = `
375
+ import { clsx } from 'clsx';
376
+ `;
377
+ const context = createContext(code);
378
+ extractor.testIsImportedFrom('clsx', 'clsx', context);
379
+ extractor.clearImportCache();
380
+ // Should rebuild cache
381
+ const result = extractor.testIsImportedFrom('clsx', 'clsx', context);
382
+ expect(result).toBe(true);
383
+ });
384
+ });
385
+ describe('edge cases', () => {
386
+ it('should handle imports without import clause', () => {
387
+ const code = `
388
+ import 'side-effect-module';
389
+ `;
390
+ const context = createContext(code);
391
+ const result = extractor.testIsImportedFrom('anything', 'side-effect-module', context);
392
+ expect(result).toBe(false);
393
+ });
394
+ it('should handle non-string module specifiers', () => {
395
+ // This is technically invalid but should not crash
396
+ const code = `
397
+ import { clsx } from 'clsx';
398
+ `;
399
+ const context = createContext(code);
400
+ expect(() => extractor.testIsImportedFrom('clsx', 'clsx', context)).not.toThrow();
401
+ });
402
+ it('should handle mixed import types', () => {
403
+ const code = `
404
+ import defaultExport, { named } from 'module';
405
+ import * as ns from 'other-module';
406
+ `;
407
+ const context = createContext(code);
408
+ expect(extractor.testIsImportedFrom('defaultExport', 'module', context)).toBe(true);
409
+ expect(extractor.testIsImportedFrom('named', 'module', context)).toBe(true);
410
+ expect(extractor.testIsNamespaceImportedFrom('ns', 'other-module', context)).toBe(true);
411
+ });
412
+ it('should handle call expression without identifier', () => {
413
+ const code = "(function() {})('flex')";
414
+ const context = createContext(code);
415
+ const callExpr = findCallExpression(context.sourceFile);
416
+ const result = extractor.testShouldValidateFunctionCall(callExpr, ['clsx']);
417
+ expect(result).toBe(false);
418
+ });
419
+ });
420
+ });
421
+ //# sourceMappingURL=BaseExtractor.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseExtractor.spec.js","sourceRoot":"","sources":["../../src/extractors/BaseExtractor.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=CvaExtractor.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CvaExtractor.spec.d.ts","sourceRoot":"","sources":["../../src/extractors/CvaExtractor.spec.ts"],"names":[],"mappings":""}