tailwind-typescript-plugin 1.4.1-beta.2 → 1.4.1-beta.20

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 (108) hide show
  1. package/CHANGELOG.md +123 -0
  2. package/README.md +375 -77
  3. package/lib/core/interfaces.d.ts +23 -12
  4. package/lib/core/interfaces.d.ts.map +1 -1
  5. package/lib/core/types.d.ts +112 -1
  6. package/lib/core/types.d.ts.map +1 -1
  7. package/lib/extractors/BaseExtractor.d.ts +49 -2
  8. package/lib/extractors/BaseExtractor.d.ts.map +1 -1
  9. package/lib/extractors/BaseExtractor.js +184 -5
  10. package/lib/extractors/BaseExtractor.js.map +1 -1
  11. package/lib/extractors/CvaExtractor.js +1 -1
  12. package/lib/extractors/CvaExtractor.js.map +1 -1
  13. package/lib/extractors/ExpressionExtractor.d.ts.map +1 -1
  14. package/lib/extractors/ExpressionExtractor.js +35 -5
  15. package/lib/extractors/ExpressionExtractor.js.map +1 -1
  16. package/lib/extractors/JsxAttributeExtractor.d.ts +2 -1
  17. package/lib/extractors/JsxAttributeExtractor.d.ts.map +1 -1
  18. package/lib/extractors/JsxAttributeExtractor.js +15 -8
  19. package/lib/extractors/JsxAttributeExtractor.js.map +1 -1
  20. package/lib/extractors/SvelteAttributeExtractor.d.ts +17 -0
  21. package/lib/extractors/SvelteAttributeExtractor.d.ts.map +1 -0
  22. package/lib/extractors/SvelteAttributeExtractor.js +27 -0
  23. package/lib/extractors/SvelteAttributeExtractor.js.map +1 -0
  24. package/lib/extractors/TailwindVariantsExtractor.d.ts.map +1 -1
  25. package/lib/extractors/TailwindVariantsExtractor.js +1 -5
  26. package/lib/extractors/TailwindVariantsExtractor.js.map +1 -1
  27. package/lib/extractors/VariableReferenceExtractor.d.ts.map +1 -1
  28. package/lib/extractors/VariableReferenceExtractor.js +21 -0
  29. package/lib/extractors/VariableReferenceExtractor.js.map +1 -1
  30. package/lib/extractors/VueAttributeExtractor.d.ts +119 -0
  31. package/lib/extractors/VueAttributeExtractor.d.ts.map +1 -0
  32. package/lib/extractors/VueAttributeExtractor.js +911 -0
  33. package/lib/extractors/VueAttributeExtractor.js.map +1 -0
  34. package/lib/extractors/VueExpressionExtractor.d.ts +21 -0
  35. package/lib/extractors/VueExpressionExtractor.d.ts.map +1 -0
  36. package/lib/extractors/VueExpressionExtractor.js +51 -0
  37. package/lib/extractors/VueExpressionExtractor.js.map +1 -0
  38. package/lib/infrastructure/TailwindConflictDetector.d.ts +28 -18
  39. package/lib/infrastructure/TailwindConflictDetector.d.ts.map +1 -1
  40. package/lib/infrastructure/TailwindConflictDetector.js +216 -486
  41. package/lib/infrastructure/TailwindConflictDetector.js.map +1 -1
  42. package/lib/infrastructure/TailwindValidator.css-vars.spec.js +1 -11
  43. package/lib/infrastructure/TailwindValidator.css-vars.spec.js.map +1 -1
  44. package/lib/infrastructure/TailwindValidator.d.ts +16 -3
  45. package/lib/infrastructure/TailwindValidator.d.ts.map +1 -1
  46. package/lib/infrastructure/TailwindValidator.js +83 -24
  47. package/lib/infrastructure/TailwindValidator.js.map +1 -1
  48. package/lib/infrastructure/TailwindValidator.spec.js +50 -17
  49. package/lib/infrastructure/TailwindValidator.spec.js.map +1 -1
  50. package/lib/plugin/TailwindTypescriptPlugin.d.ts +18 -1
  51. package/lib/plugin/TailwindTypescriptPlugin.d.ts.map +1 -1
  52. package/lib/plugin/TailwindTypescriptPlugin.js +124 -55
  53. package/lib/plugin/TailwindTypescriptPlugin.js.map +1 -1
  54. package/lib/services/ClassNameExtractionService.d.ts +21 -5
  55. package/lib/services/ClassNameExtractionService.d.ts.map +1 -1
  56. package/lib/services/ClassNameExtractionService.js +76 -14
  57. package/lib/services/ClassNameExtractionService.js.map +1 -1
  58. package/lib/services/ClassNameExtractionService.spec.d.ts +2 -0
  59. package/lib/services/ClassNameExtractionService.spec.d.ts.map +1 -0
  60. package/lib/services/ClassNameExtractionService.spec.js +222 -0
  61. package/lib/services/ClassNameExtractionService.spec.js.map +1 -0
  62. package/lib/services/CodeActionService.spec.js +1 -2
  63. package/lib/services/CodeActionService.spec.js.map +1 -1
  64. package/lib/services/CompletionService.d.ts +121 -0
  65. package/lib/services/CompletionService.d.ts.map +1 -0
  66. package/lib/services/CompletionService.js +573 -0
  67. package/lib/services/CompletionService.js.map +1 -0
  68. package/lib/services/CompletionService.spec.d.ts +2 -0
  69. package/lib/services/CompletionService.spec.d.ts.map +1 -0
  70. package/lib/services/CompletionService.spec.js +1182 -0
  71. package/lib/services/CompletionService.spec.js.map +1 -0
  72. package/lib/services/ConflictClassDetection.spec.js +26 -21
  73. package/lib/services/ConflictClassDetection.spec.js.map +1 -1
  74. package/lib/services/DiagnosticService.d.ts +8 -8
  75. package/lib/services/DiagnosticService.d.ts.map +1 -1
  76. package/lib/services/DiagnosticService.js +29 -13
  77. package/lib/services/DiagnosticService.js.map +1 -1
  78. package/lib/services/DuplicateClassDetection.spec.js +61 -81
  79. package/lib/services/DuplicateClassDetection.spec.js.map +1 -1
  80. package/lib/services/PluginConfigService.d.ts +47 -15
  81. package/lib/services/PluginConfigService.d.ts.map +1 -1
  82. package/lib/services/PluginConfigService.js +203 -75
  83. package/lib/services/PluginConfigService.js.map +1 -1
  84. package/lib/services/PluginConfigService.spec.d.ts +2 -0
  85. package/lib/services/PluginConfigService.spec.d.ts.map +1 -0
  86. package/lib/services/PluginConfigService.spec.js +93 -0
  87. package/lib/services/PluginConfigService.spec.js.map +1 -0
  88. package/lib/services/ValidationService.d.ts +8 -5
  89. package/lib/services/ValidationService.d.ts.map +1 -1
  90. package/lib/services/ValidationService.js +49 -49
  91. package/lib/services/ValidationService.js.map +1 -1
  92. package/lib/utils/FrameworkDetector.d.ts +24 -0
  93. package/lib/utils/FrameworkDetector.d.ts.map +1 -0
  94. package/lib/utils/FrameworkDetector.js +52 -0
  95. package/lib/utils/FrameworkDetector.js.map +1 -0
  96. package/lib/utils/FrameworkDetector.spec.d.ts +2 -0
  97. package/lib/utils/FrameworkDetector.spec.d.ts.map +1 -0
  98. package/lib/utils/FrameworkDetector.spec.js +75 -0
  99. package/lib/utils/FrameworkDetector.spec.js.map +1 -0
  100. package/package.json +4 -2
  101. package/lib/extractors/StringLiteralExtractor.d.ts +0 -12
  102. package/lib/extractors/StringLiteralExtractor.d.ts.map +0 -1
  103. package/lib/extractors/StringLiteralExtractor.js +0 -21
  104. package/lib/extractors/StringLiteralExtractor.js.map +0 -1
  105. package/lib/services/ClassNameExtractionService.original.d.ts +0 -20
  106. package/lib/services/ClassNameExtractionService.original.d.ts.map +0 -1
  107. package/lib/services/ClassNameExtractionService.original.js +0 -48
  108. package/lib/services/ClassNameExtractionService.original.js.map +0 -1
@@ -2,101 +2,229 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PluginConfigService = void 0;
4
4
  /**
5
- * Default utility functions to validate
5
+ * Default utilities configuration
6
+ * Key is function name, value is import source ("*" = any source, "off" = disabled)
6
7
  */
7
- const DEFAULT_UTILITY_FUNCTIONS = [
8
- 'clsx',
9
- 'cn',
10
- 'classnames',
11
- 'classNames',
12
- 'cx',
13
- 'cva',
14
- 'twMerge',
15
- 'tv'
16
- ];
8
+ const DEFAULT_UTILITIES = {
9
+ cn: '*', // Custom wrapper pattern (e.g., shadcn), any source
10
+ clsx: 'clsx',
11
+ classnames: 'classnames',
12
+ classNames: 'classnames',
13
+ cx: 'classnames',
14
+ twMerge: 'tailwind-merge'
15
+ };
16
+ /**
17
+ * Default variants configuration
18
+ */
19
+ const DEFAULT_VARIANTS = {
20
+ tailwindVariants: true,
21
+ classVarianceAuthority: true
22
+ };
23
+ /**
24
+ * Default validation configuration
25
+ */
26
+ const DEFAULT_VALIDATION = {
27
+ enabled: true,
28
+ severity: 'error',
29
+ allowedClasses: []
30
+ };
31
+ /**
32
+ * Default lint configuration
33
+ */
34
+ const DEFAULT_LINT = {
35
+ enabled: true,
36
+ conflictingClasses: {
37
+ enabled: true,
38
+ severity: 'warning'
39
+ },
40
+ repeatedClasses: {
41
+ enabled: true,
42
+ severity: 'warning'
43
+ }
44
+ };
45
+ /**
46
+ * Default class attributes
47
+ * These are the JSX/HTML attributes that will be treated as class attributes
48
+ */
49
+ const DEFAULT_CLASS_ATTRIBUTES = ['className', 'class', 'classList'];
17
50
  /**
18
51
  * Service responsible for managing plugin configuration
19
52
  * Follows Single Responsibility Principle
20
53
  */
21
54
  class PluginConfigService {
22
- constructor(config, logger) {
23
- this.logger = logger;
24
- this.loggingEnabled = config.enableLogging === true;
25
- this.utilityFunctions = this.initializeUtilityFunctions(config);
55
+ constructor(config) {
26
56
  this.cssFilePath = config.globalCss;
27
- this.allowedClasses = this.initializeAllowedClasses(config);
28
- // If ANY variant config is defined, only enable those explicitly set to true
29
- // If NO variant config is defined, enable both by default
30
- const variantsConfig = config.variants;
31
- const hasAnyVariantConfig = variantsConfig &&
32
- (variantsConfig.tailwindVariants !== undefined ||
33
- variantsConfig.classVarianceAuthority !== undefined);
34
- if (hasAnyVariantConfig) {
35
- // User specified at least one variant - only enable those explicitly set to true
36
- this.tailwindVariantsEnabled = variantsConfig.tailwindVariants === true;
37
- this.classVarianceAuthorityEnabled = variantsConfig.classVarianceAuthority === true;
38
- }
39
- else {
40
- // No variants configured - enable both by default
41
- this.tailwindVariantsEnabled = true;
42
- this.classVarianceAuthorityEnabled = true;
43
- }
44
- this.logExtractorConfig();
45
- }
46
- initializeUtilityFunctions(config) {
47
- if (config.utilityFunctions && Array.isArray(config.utilityFunctions)) {
48
- // Merge user-provided functions with defaults (remove duplicates)
49
- const merged = [...new Set([...DEFAULT_UTILITY_FUNCTIONS, ...config.utilityFunctions])];
50
- this.logger.log(`Using utility functions (defaults + custom): ${merged.join(', ')}`);
51
- return merged;
52
- }
53
- else {
54
- this.logger.log(`Using default utility functions: ${DEFAULT_UTILITY_FUNCTIONS.join(', ')}`);
55
- return DEFAULT_UTILITY_FUNCTIONS;
57
+ // Initialize configuration with backwards compatibility
58
+ this.utilitiesConfig = this.initializeUtilities(config);
59
+ this.variantsConfig = this.initializeVariants(config);
60
+ this.validationConfig = this.initializeValidation(config);
61
+ this.lintConfig = this.initializeLint(config);
62
+ this.editorConfig = this.initializeEditor(config);
63
+ this.classAttributes = this.initializeClassAttributes(config);
64
+ // Convert to legacy format for extractors
65
+ this.utilityFunctionsLegacy = this.convertToLegacyFormat(this.utilitiesConfig);
66
+ }
67
+ initializeUtilities(config) {
68
+ if (config.libraries?.utilities) {
69
+ // Merge with defaults (user config overrides defaults)
70
+ return { ...DEFAULT_UTILITIES, ...config.libraries.utilities };
56
71
  }
72
+ return { ...DEFAULT_UTILITIES };
57
73
  }
58
- initializeAllowedClasses(config) {
59
- if (config.allowedClasses && Array.isArray(config.allowedClasses)) {
60
- this.logger.log(`Custom allowed classes: ${config.allowedClasses.join(', ')}`);
61
- return config.allowedClasses;
74
+ initializeVariants(config) {
75
+ if (config.libraries?.variants) {
76
+ const userVariants = config.libraries.variants;
77
+ const hasAnyConfig = userVariants.tailwindVariants !== undefined ||
78
+ userVariants.classVarianceAuthority !== undefined;
79
+ if (hasAnyConfig) {
80
+ // User specified at least one - only enable those explicitly set to true
81
+ return {
82
+ tailwindVariants: userVariants.tailwindVariants === true,
83
+ classVarianceAuthority: userVariants.classVarianceAuthority === true
84
+ };
85
+ }
62
86
  }
63
- else {
64
- return [];
87
+ return { ...DEFAULT_VARIANTS };
88
+ }
89
+ initializeValidation(config) {
90
+ const validation = config.validation || {};
91
+ return {
92
+ enabled: validation.enabled !== false, // default true
93
+ severity: validation.severity || DEFAULT_VALIDATION.severity,
94
+ allowedClasses: validation.allowedClasses || []
95
+ };
96
+ }
97
+ initializeLint(config) {
98
+ const lint = config.lint || {};
99
+ return {
100
+ enabled: lint.enabled !== false, // default true
101
+ conflictingClasses: {
102
+ enabled: lint.conflictingClasses?.enabled !== false, // default true
103
+ severity: lint.conflictingClasses?.severity || DEFAULT_LINT.conflictingClasses.severity
104
+ },
105
+ repeatedClasses: {
106
+ enabled: lint.repeatedClasses?.enabled !== false, // default true
107
+ severity: lint.repeatedClasses?.severity || DEFAULT_LINT.repeatedClasses.severity
108
+ }
109
+ };
110
+ }
111
+ initializeEditor(config) {
112
+ const editor = config.editor || {};
113
+ return {
114
+ enabled: editor.enabled !== false, // default true
115
+ autocomplete: {
116
+ enabled: editor.autocomplete?.enabled !== false // default true
117
+ },
118
+ hover: {
119
+ enabled: editor.hover?.enabled !== false // default true
120
+ }
121
+ };
122
+ }
123
+ initializeClassAttributes(config) {
124
+ const userAttributes = config.classAttributes || [];
125
+ // Merge default attributes with user-provided ones
126
+ // Use Set to avoid duplicates
127
+ return [...new Set([...DEFAULT_CLASS_ATTRIBUTES, ...userAttributes])];
128
+ }
129
+ /**
130
+ * Convert new utilities config to legacy UtilityFunction[] format
131
+ * This is needed for backwards compatibility with extractors
132
+ */
133
+ convertToLegacyFormat(utilities) {
134
+ const result = [];
135
+ for (const [name, source] of Object.entries(utilities)) {
136
+ if (source === 'off') {
137
+ continue; // Skip disabled utilities
138
+ }
139
+ if (source === '*') {
140
+ result.push(name); // Simple string = any source
141
+ }
142
+ else {
143
+ result.push({ name, from: source });
144
+ }
65
145
  }
146
+ return result;
66
147
  }
67
- getUtilityFunctions() {
68
- return this.utilityFunctions;
148
+ // ---- Getters for utilities ----
149
+ getUtilitiesConfig() {
150
+ return this.utilitiesConfig;
69
151
  }
70
- getCssFilePath() {
71
- return this.cssFilePath;
152
+ /**
153
+ * Get utility functions in legacy format (for extractors)
154
+ */
155
+ getUtilityFunctions() {
156
+ return this.utilityFunctionsLegacy;
72
157
  }
73
- hasValidCssPath() {
74
- return this.cssFilePath !== undefined && this.cssFilePath.length > 0;
158
+ // ---- Getters for variants ----
159
+ getVariantsConfig() {
160
+ return this.variantsConfig;
75
161
  }
76
162
  isTailwindVariantsEnabled() {
77
- return this.tailwindVariantsEnabled;
163
+ return this.variantsConfig.tailwindVariants === true;
78
164
  }
79
165
  isClassVarianceAuthorityEnabled() {
80
- return this.classVarianceAuthorityEnabled;
166
+ return this.variantsConfig.classVarianceAuthority === true;
167
+ }
168
+ // ---- Getters for validation ----
169
+ getValidationConfig() {
170
+ return this.validationConfig;
171
+ }
172
+ isValidationEnabled() {
173
+ return this.validationConfig.enabled;
174
+ }
175
+ getValidationSeverity() {
176
+ return this.validationConfig.severity;
81
177
  }
82
178
  getAllowedClasses() {
83
- return this.allowedClasses;
84
- }
85
- isLoggingEnabled() {
86
- return this.loggingEnabled;
87
- }
88
- logExtractorConfig() {
89
- const enabled = [];
90
- if (this.tailwindVariantsEnabled)
91
- enabled.push('tailwind-variants');
92
- if (this.classVarianceAuthorityEnabled)
93
- enabled.push('class-variance-authority');
94
- if (enabled.length === 0) {
95
- this.logger.log('⚠️ No variant library extractors enabled');
96
- }
97
- else {
98
- this.logger.log(`✓ Enabled variant extractors: ${enabled.join(', ')}`);
99
- }
179
+ return this.validationConfig.allowedClasses;
180
+ }
181
+ // ---- Getters for lint ----
182
+ getLintConfig() {
183
+ return this.lintConfig;
184
+ }
185
+ isLintEnabled() {
186
+ return this.lintConfig.enabled !== false;
187
+ }
188
+ isConflictingClassesEnabled() {
189
+ return this.isLintEnabled() && this.lintConfig.conflictingClasses?.enabled !== false;
190
+ }
191
+ getConflictingClassesSeverity() {
192
+ return this.lintConfig.conflictingClasses?.severity || 'warning';
193
+ }
194
+ isRepeatedClassesEnabled() {
195
+ return this.isLintEnabled() && this.lintConfig.repeatedClasses?.enabled !== false;
196
+ }
197
+ getRepeatedClassesSeverity() {
198
+ return this.lintConfig.repeatedClasses?.severity || 'warning';
199
+ }
200
+ // ---- Getters for editor ----
201
+ getEditorConfig() {
202
+ return this.editorConfig;
203
+ }
204
+ isEditorEnabled() {
205
+ return this.editorConfig.enabled !== false;
206
+ }
207
+ isAutocompleteEnabled() {
208
+ return this.isEditorEnabled() && this.editorConfig.autocomplete?.enabled !== false;
209
+ }
210
+ isHoverEnabled() {
211
+ return this.isEditorEnabled() && this.editorConfig.hover?.enabled !== false;
212
+ }
213
+ // ---- Getters for global settings ----
214
+ getCssFilePath() {
215
+ return this.cssFilePath;
216
+ }
217
+ hasValidCssPath() {
218
+ return this.cssFilePath !== undefined && this.cssFilePath.length > 0;
219
+ }
220
+ // ---- Getters for class attributes ----
221
+ /**
222
+ * Get the configured class attributes
223
+ * Returns an array of attribute names that should be treated as class attributes
224
+ * Includes default attributes (className, class, classList) plus user-configured ones
225
+ */
226
+ getClassAttributes() {
227
+ return this.classAttributes;
100
228
  }
101
229
  }
102
230
  exports.PluginConfigService = PluginConfigService;
@@ -1 +1 @@
1
- {"version":3,"file":"PluginConfigService.js","sourceRoot":"","sources":["../../src/services/PluginConfigService.ts"],"names":[],"mappings":";;;AAGA;;GAEG;AACH,MAAM,yBAAyB,GAAG;IACjC,MAAM;IACN,IAAI;IACJ,YAAY;IACZ,YAAY;IACZ,IAAI;IACJ,KAAK;IACL,SAAS;IACT,IAAI;CACJ,CAAC;AAEF;;;GAGG;AACH,MAAa,mBAAmB;IAQ/B,YACC,MAAqB,EACJ,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;QAE/B,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,aAAa,KAAK,IAAI,CAAC;QACpD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC;QAChE,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC;QACpC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC;QAE5D,6EAA6E;QAC7E,0DAA0D;QAC1D,MAAM,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC;QACvC,MAAM,mBAAmB,GACxB,cAAc;YACd,CAAC,cAAc,CAAC,gBAAgB,KAAK,SAAS;gBAC7C,cAAc,CAAC,sBAAsB,KAAK,SAAS,CAAC,CAAC;QAEvD,IAAI,mBAAmB,EAAE,CAAC;YACzB,iFAAiF;YACjF,IAAI,CAAC,uBAAuB,GAAG,cAAc,CAAC,gBAAgB,KAAK,IAAI,CAAC;YACxE,IAAI,CAAC,6BAA6B,GAAG,cAAc,CAAC,sBAAsB,KAAK,IAAI,CAAC;QACrF,CAAC;aAAM,CAAC;YACP,kDAAkD;YAClD,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;YACpC,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC;QAC3C,CAAC;QAED,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC3B,CAAC;IAEO,0BAA0B,CAAC,MAAqB;QACvD,IAAI,MAAM,CAAC,gBAAgB,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACvE,kEAAkE;YAClE,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,yBAAyB,EAAE,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;YACxF,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,gDAAgD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACrF,OAAO,MAAM,CAAC;QACf,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,oCAAoC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC5F,OAAO,yBAAyB,CAAC;QAClC,CAAC;IACF,CAAC;IAEO,wBAAwB,CAAC,MAAqB;QACrD,IAAI,MAAM,CAAC,cAAc,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC;YACnE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,2BAA2B,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC/E,OAAO,MAAM,CAAC,cAAc,CAAC;QAC9B,CAAC;aAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACX,CAAC;IACF,CAAC;IAED,mBAAmB;QAClB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC9B,CAAC;IAED,cAAc;QACb,OAAO,IAAI,CAAC,WAAW,CAAC;IACzB,CAAC;IAED,eAAe;QACd,OAAO,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;IACtE,CAAC;IAED,yBAAyB;QACxB,OAAO,IAAI,CAAC,uBAAuB,CAAC;IACrC,CAAC;IAED,+BAA+B;QAC9B,OAAO,IAAI,CAAC,6BAA6B,CAAC;IAC3C,CAAC;IAED,iBAAiB;QAChB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC5B,CAAC;IAED,gBAAgB;QACf,OAAO,IAAI,CAAC,cAAc,CAAC;IAC5B,CAAC;IAEO,kBAAkB;QACzB,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,IAAI,IAAI,CAAC,uBAAuB;YAAE,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACpE,IAAI,IAAI,CAAC,6BAA6B;YAAE,OAAO,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QAEjF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;QAC9D,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,iCAAiC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxE,CAAC;IACF,CAAC;CACD;AAlGD,kDAkGC"}
1
+ {"version":3,"file":"PluginConfigService.js","sourceRoot":"","sources":["../../src/services/PluginConfigService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=PluginConfigService.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PluginConfigService.spec.d.ts","sourceRoot":"","sources":["../../src/services/PluginConfigService.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const PluginConfigService_1 = require("./PluginConfigService");
4
+ describe('PluginConfigService', () => {
5
+ describe('classAttributes', () => {
6
+ it('should return default class attributes when not configured', () => {
7
+ const service = new PluginConfigService_1.PluginConfigService({});
8
+ const classAttributes = service.getClassAttributes();
9
+ expect(classAttributes).toContain('className');
10
+ expect(classAttributes).toContain('class');
11
+ expect(classAttributes).toContain('classList');
12
+ expect(classAttributes).toHaveLength(3);
13
+ });
14
+ it('should merge user attributes with defaults', () => {
15
+ const service = new PluginConfigService_1.PluginConfigService({
16
+ classAttributes: ['colorStyles', 'textStyles']
17
+ });
18
+ const classAttributes = service.getClassAttributes();
19
+ expect(classAttributes).toContain('className');
20
+ expect(classAttributes).toContain('class');
21
+ expect(classAttributes).toContain('classList');
22
+ expect(classAttributes).toContain('colorStyles');
23
+ expect(classAttributes).toContain('textStyles');
24
+ expect(classAttributes).toHaveLength(5);
25
+ });
26
+ it('should deduplicate attributes when user provides defaults', () => {
27
+ const service = new PluginConfigService_1.PluginConfigService({
28
+ classAttributes: ['className', 'colorStyles', 'class']
29
+ });
30
+ const classAttributes = service.getClassAttributes();
31
+ // Should not have duplicates
32
+ const uniqueAttributes = [...new Set(classAttributes)];
33
+ expect(classAttributes).toHaveLength(uniqueAttributes.length);
34
+ // Should contain all expected attributes
35
+ expect(classAttributes).toContain('className');
36
+ expect(classAttributes).toContain('class');
37
+ expect(classAttributes).toContain('classList');
38
+ expect(classAttributes).toContain('colorStyles');
39
+ });
40
+ it('should handle empty user attributes array', () => {
41
+ const service = new PluginConfigService_1.PluginConfigService({
42
+ classAttributes: []
43
+ });
44
+ const classAttributes = service.getClassAttributes();
45
+ expect(classAttributes).toContain('className');
46
+ expect(classAttributes).toContain('class');
47
+ expect(classAttributes).toContain('classList');
48
+ expect(classAttributes).toHaveLength(3);
49
+ });
50
+ it('should preserve order with defaults first', () => {
51
+ const service = new PluginConfigService_1.PluginConfigService({
52
+ classAttributes: ['colorStyles']
53
+ });
54
+ const classAttributes = service.getClassAttributes();
55
+ // Default attributes should come first
56
+ expect(classAttributes[0]).toBe('className');
57
+ expect(classAttributes[1]).toBe('class');
58
+ expect(classAttributes[2]).toBe('classList');
59
+ expect(classAttributes[3]).toBe('colorStyles');
60
+ });
61
+ });
62
+ describe('other configurations', () => {
63
+ it('should initialize with default utilities', () => {
64
+ const service = new PluginConfigService_1.PluginConfigService({});
65
+ const utilities = service.getUtilityFunctions();
66
+ expect(utilities).toContainEqual('cn');
67
+ expect(utilities).toContainEqual({ name: 'clsx', from: 'clsx' });
68
+ });
69
+ it('should enable variants by default', () => {
70
+ const service = new PluginConfigService_1.PluginConfigService({});
71
+ expect(service.isTailwindVariantsEnabled()).toBe(true);
72
+ expect(service.isClassVarianceAuthorityEnabled()).toBe(true);
73
+ });
74
+ it('should enable validation by default', () => {
75
+ const service = new PluginConfigService_1.PluginConfigService({});
76
+ expect(service.isValidationEnabled()).toBe(true);
77
+ expect(service.getValidationSeverity()).toBe('error');
78
+ });
79
+ it('should enable lint by default', () => {
80
+ const service = new PluginConfigService_1.PluginConfigService({});
81
+ expect(service.isLintEnabled()).toBe(true);
82
+ expect(service.isConflictingClassesEnabled()).toBe(true);
83
+ expect(service.isRepeatedClassesEnabled()).toBe(true);
84
+ });
85
+ it('should enable editor features by default', () => {
86
+ const service = new PluginConfigService_1.PluginConfigService({});
87
+ expect(service.isEditorEnabled()).toBe(true);
88
+ expect(service.isAutocompleteEnabled()).toBe(true);
89
+ expect(service.isHoverEnabled()).toBe(true);
90
+ });
91
+ });
92
+ });
93
+ //# sourceMappingURL=PluginConfigService.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PluginConfigService.spec.js","sourceRoot":"","sources":["../../src/services/PluginConfigService.spec.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,10 @@
1
1
  import * as ts from 'typescript/lib/tsserverlibrary';
2
2
  import { IClassNameValidator } from '../core/interfaces';
3
- import { Logger } from '../utils/Logger';
3
+ import { UtilityFunction } from '../core/types';
4
+ import { ICssProvider } from '../infrastructure/TailwindConflictDetector';
4
5
  import { ClassNameExtractionService } from './ClassNameExtractionService';
5
6
  import { DiagnosticService } from './DiagnosticService';
7
+ import { PluginConfigService } from './PluginConfigService';
6
8
  /**
7
9
  * Service responsible for validating class names and creating diagnostics
8
10
  * Orchestrates the validation workflow
@@ -11,21 +13,22 @@ export declare class ValidationService {
11
13
  private readonly extractionService;
12
14
  private readonly diagnosticService;
13
15
  private readonly validator;
14
- private readonly logger;
16
+ private readonly configService;
15
17
  private readonly conflictDetector;
16
- constructor(extractionService: ClassNameExtractionService, diagnosticService: DiagnosticService, validator: IClassNameValidator, logger: Logger);
18
+ constructor(extractionService: ClassNameExtractionService, diagnosticService: DiagnosticService, validator: IClassNameValidator, configService: PluginConfigService, cssProvider?: ICssProvider);
17
19
  /**
18
20
  * Validate a source file and return diagnostics
19
21
  * PERFORMANCE OPTIMIZED: Minimal logging overhead
20
22
  */
21
- validateFile(typescript: typeof ts, sourceFile: ts.SourceFile, utilityFunctions: string[], typeChecker?: ts.TypeChecker): ts.Diagnostic[];
23
+ validateFile(typescript: typeof ts, sourceFile: ts.SourceFile, utilityFunctions: UtilityFunction[], typeChecker?: ts.TypeChecker): ts.Diagnostic[];
22
24
  /**
23
25
  * Filter out valid classes and return only invalid ones
24
26
  * PERFORMANCE OPTIMIZED: No logging in hot path
25
27
  */
26
28
  private filterInvalidClasses;
27
29
  /**
28
- * Result of duplicate detection with separate categories
30
+ * Find duplicate and extractable classes within the same attribute
31
+ * Returns true duplicates and extractable classes (same class in both ternary branches)
29
32
  */
30
33
  private findDuplicateClasses;
31
34
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ValidationService.d.ts","sourceRoot":"","sources":["../../src/services/ValidationService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAErD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAGzD,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD;;;GAGG;AACH,qBAAa,iBAAiB;IAI5B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM;IANxB,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA2B;gBAG1C,iBAAiB,EAAE,0BAA0B,EAC7C,iBAAiB,EAAE,iBAAiB,EACpC,SAAS,EAAE,mBAAmB,EAC9B,MAAM,EAAE,MAAM;IAKhC;;;OAGG;IACH,YAAY,CACX,UAAU,EAAE,OAAO,EAAE,EACrB,UAAU,EAAE,EAAE,CAAC,UAAU,EACzB,gBAAgB,EAAE,MAAM,EAAE,EAC1B,WAAW,CAAC,EAAE,EAAE,CAAC,WAAW,GAC1B,EAAE,CAAC,UAAU,EAAE;IA4ElB;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAM5B;;OAEG;IACH,OAAO,CAAC,oBAAoB;CAiG5B"}
1
+ {"version":3,"file":"ValidationService.d.ts","sourceRoot":"","sources":["../../src/services/ValidationService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAErD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAiB,eAAe,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,YAAY,EAA4B,MAAM,4CAA4C,CAAC;AACpG,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D;;;GAGG;AACH,qBAAa,iBAAiB;IAI5B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAN/B,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA2B;gBAG1C,iBAAiB,EAAE,0BAA0B,EAC7C,iBAAiB,EAAE,iBAAiB,EACpC,SAAS,EAAE,mBAAmB,EAC9B,aAAa,EAAE,mBAAmB,EACnD,WAAW,CAAC,EAAE,YAAY;IAQ3B;;;OAGG;IACH,YAAY,CACX,UAAU,EAAE,OAAO,EAAE,EACrB,UAAU,EAAE,EAAE,CAAC,UAAU,EACzB,gBAAgB,EAAE,eAAe,EAAE,EACnC,WAAW,CAAC,EAAE,EAAE,CAAC,WAAW,GAC1B,EAAE,CAAC,UAAU,EAAE;IA6ElB;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAI5B;;;OAGG;IACH,OAAO,CAAC,oBAAoB;CAiG5B"}