tailwind-typescript-plugin 1.4.0-beta.23 → 1.4.0-beta.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +30 -0
- package/lib/core/interfaces.d.ts +17 -1
- package/lib/core/interfaces.d.ts.map +1 -1
- package/lib/extractors/BaseExtractor.d.ts +7 -1
- package/lib/extractors/BaseExtractor.d.ts.map +1 -1
- package/lib/extractors/BaseExtractor.js +10 -0
- package/lib/extractors/BaseExtractor.js.map +1 -1
- package/lib/extractors/BaseExtractor.spec.d.ts +2 -0
- package/lib/extractors/BaseExtractor.spec.d.ts.map +1 -0
- package/lib/extractors/BaseExtractor.spec.js +421 -0
- package/lib/extractors/BaseExtractor.spec.js.map +1 -0
- package/lib/extractors/CvaExtractor.spec.d.ts +2 -0
- package/lib/extractors/CvaExtractor.spec.d.ts.map +1 -0
- package/lib/extractors/CvaExtractor.spec.js +1177 -0
- package/lib/extractors/CvaExtractor.spec.js.map +1 -0
- package/lib/extractors/ExpressionExtractor.spec.d.ts +2 -0
- package/lib/extractors/ExpressionExtractor.spec.d.ts.map +1 -0
- package/lib/extractors/ExpressionExtractor.spec.js +316 -0
- package/lib/extractors/ExpressionExtractor.spec.js.map +1 -0
- package/lib/extractors/JsxAttributeExtractor.d.ts +5 -0
- package/lib/extractors/JsxAttributeExtractor.d.ts.map +1 -1
- package/lib/extractors/JsxAttributeExtractor.js +6 -0
- package/lib/extractors/JsxAttributeExtractor.js.map +1 -1
- package/lib/extractors/JsxAttributeExtractor.spec.d.ts +2 -0
- package/lib/extractors/JsxAttributeExtractor.spec.d.ts.map +1 -0
- package/lib/extractors/JsxAttributeExtractor.spec.js +430 -0
- package/lib/extractors/JsxAttributeExtractor.spec.js.map +1 -0
- package/lib/extractors/TailwindVariantsExtractor.spec.d.ts +2 -0
- package/lib/extractors/TailwindVariantsExtractor.spec.d.ts.map +1 -0
- package/lib/extractors/TailwindVariantsExtractor.spec.js +1407 -0
- package/lib/extractors/TailwindVariantsExtractor.spec.js.map +1 -0
- package/lib/extractors/TemplateExpressionExtractor.spec.d.ts +2 -0
- package/lib/extractors/TemplateExpressionExtractor.spec.d.ts.map +1 -0
- package/lib/extractors/TemplateExpressionExtractor.spec.js +240 -0
- package/lib/extractors/TemplateExpressionExtractor.spec.js.map +1 -0
- package/lib/extractors/VariableReferenceExtractor.spec.d.ts +2 -0
- package/lib/extractors/VariableReferenceExtractor.spec.d.ts.map +1 -0
- package/lib/extractors/VariableReferenceExtractor.spec.js +138 -0
- package/lib/extractors/VariableReferenceExtractor.spec.js.map +1 -0
- package/lib/extractors/VueAttributeExtractor.d.ts +6 -0
- package/lib/extractors/VueAttributeExtractor.d.ts.map +1 -1
- package/lib/extractors/VueAttributeExtractor.js +7 -0
- package/lib/extractors/VueAttributeExtractor.js.map +1 -1
- package/lib/plugin/TailwindTypescriptPlugin.d.ts +9 -0
- package/lib/plugin/TailwindTypescriptPlugin.d.ts.map +1 -1
- package/lib/plugin/TailwindTypescriptPlugin.js +36 -11
- package/lib/plugin/TailwindTypescriptPlugin.js.map +1 -1
- package/lib/services/ClassNameExtractionService.d.ts +8 -3
- package/lib/services/ClassNameExtractionService.d.ts.map +1 -1
- package/lib/services/ClassNameExtractionService.js +26 -25
- package/lib/services/ClassNameExtractionService.js.map +1 -1
- package/lib/services/ClassNameExtractionService.spec.js +0 -7
- package/lib/services/ClassNameExtractionService.spec.js.map +1 -1
- package/lib/services/ConfigSchemaValidator.d.ts +40 -0
- package/lib/services/ConfigSchemaValidator.d.ts.map +1 -0
- package/lib/services/ConfigSchemaValidator.js +139 -0
- package/lib/services/ConfigSchemaValidator.js.map +1 -0
- package/lib/services/ConfigSchemaValidator.spec.d.ts +2 -0
- package/lib/services/ConfigSchemaValidator.spec.d.ts.map +1 -0
- package/lib/services/ConfigSchemaValidator.spec.js +344 -0
- package/lib/services/ConfigSchemaValidator.spec.js.map +1 -0
- package/lib/services/ConflictClassDetection.spec.js +48 -0
- package/lib/services/ConflictClassDetection.spec.js.map +1 -1
- package/lib/services/DiagnosticService.spec.d.ts +2 -0
- package/lib/services/DiagnosticService.spec.d.ts.map +1 -0
- package/lib/services/DiagnosticService.spec.js +259 -0
- package/lib/services/DiagnosticService.spec.js.map +1 -0
- package/lib/services/FileDiagnosticCache.spec.d.ts +2 -0
- package/lib/services/FileDiagnosticCache.spec.d.ts.map +1 -0
- package/lib/services/FileDiagnosticCache.spec.js +213 -0
- package/lib/services/FileDiagnosticCache.spec.js.map +1 -0
- package/lib/services/PerformanceCache.spec.d.ts +2 -0
- package/lib/services/PerformanceCache.spec.d.ts.map +1 -0
- package/lib/services/PerformanceCache.spec.js +168 -0
- package/lib/services/PerformanceCache.spec.js.map +1 -0
- package/lib/services/PluginConfigService.d.ts +19 -0
- package/lib/services/PluginConfigService.d.ts.map +1 -1
- package/lib/services/PluginConfigService.js +29 -0
- package/lib/services/PluginConfigService.js.map +1 -1
- package/lib/services/ValidationService.spec.d.ts +2 -0
- package/lib/services/ValidationService.spec.d.ts.map +1 -0
- package/lib/services/ValidationService.spec.js +289 -0
- package/lib/services/ValidationService.spec.js.map +1 -0
- package/lib/utils/FrameworkDetector.d.ts +1 -2
- package/lib/utils/FrameworkDetector.d.ts.map +1 -1
- package/lib/utils/FrameworkDetector.js +0 -5
- package/lib/utils/FrameworkDetector.js.map +1 -1
- package/lib/utils/FrameworkDetector.spec.js +1 -9
- package/lib/utils/FrameworkDetector.spec.js.map +1 -1
- package/package.json +10 -3
- package/lib/extractors/SvelteAttributeExtractor.d.ts +0 -17
- package/lib/extractors/SvelteAttributeExtractor.d.ts.map +0 -1
- package/lib/extractors/SvelteAttributeExtractor.js +0 -27
- package/lib/extractors/SvelteAttributeExtractor.js.map +0 -1
|
@@ -0,0 +1,213 @@
|
|
|
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 FileDiagnosticCache_1 = require("./FileDiagnosticCache");
|
|
38
|
+
describe('FileDiagnosticCache', () => {
|
|
39
|
+
let cache;
|
|
40
|
+
// Helper to create a mock diagnostic
|
|
41
|
+
const createMockDiagnostic = (code) => ({
|
|
42
|
+
file: undefined,
|
|
43
|
+
start: 0,
|
|
44
|
+
length: 10,
|
|
45
|
+
messageText: `Test diagnostic ${code}`,
|
|
46
|
+
category: ts.DiagnosticCategory.Error,
|
|
47
|
+
code
|
|
48
|
+
});
|
|
49
|
+
beforeEach(() => {
|
|
50
|
+
cache = new FileDiagnosticCache_1.FileDiagnosticCache(3); // Small cache for testing LRU
|
|
51
|
+
});
|
|
52
|
+
describe('basic operations', () => {
|
|
53
|
+
it('should return undefined for uncached files', () => {
|
|
54
|
+
const result = cache.get('uncached.ts', 'content');
|
|
55
|
+
expect(result).toBeUndefined();
|
|
56
|
+
});
|
|
57
|
+
it('should cache and retrieve diagnostics', () => {
|
|
58
|
+
const diagnostics = [createMockDiagnostic(1)];
|
|
59
|
+
cache.set('file.ts', 'content', diagnostics);
|
|
60
|
+
const result = cache.get('file.ts', 'content');
|
|
61
|
+
expect(result).toEqual(diagnostics);
|
|
62
|
+
});
|
|
63
|
+
it('should return undefined when content changes', () => {
|
|
64
|
+
const diagnostics = [createMockDiagnostic(1)];
|
|
65
|
+
cache.set('file.ts', 'original content', diagnostics);
|
|
66
|
+
const result = cache.get('file.ts', 'modified content');
|
|
67
|
+
expect(result).toBeUndefined();
|
|
68
|
+
});
|
|
69
|
+
it('should update cache when content changes', () => {
|
|
70
|
+
const oldDiagnostics = [createMockDiagnostic(1)];
|
|
71
|
+
const newDiagnostics = [createMockDiagnostic(2)];
|
|
72
|
+
cache.set('file.ts', 'old content', oldDiagnostics);
|
|
73
|
+
cache.set('file.ts', 'new content', newDiagnostics);
|
|
74
|
+
expect(cache.get('file.ts', 'old content')).toBeUndefined();
|
|
75
|
+
expect(cache.get('file.ts', 'new content')).toEqual(newDiagnostics);
|
|
76
|
+
});
|
|
77
|
+
it('should cache empty diagnostics array', () => {
|
|
78
|
+
cache.set('file.ts', 'content', []);
|
|
79
|
+
const result = cache.get('file.ts', 'content');
|
|
80
|
+
expect(result).toEqual([]);
|
|
81
|
+
});
|
|
82
|
+
it('should handle multiple files independently', () => {
|
|
83
|
+
const diag1 = [createMockDiagnostic(1)];
|
|
84
|
+
const diag2 = [createMockDiagnostic(2)];
|
|
85
|
+
cache.set('file1.ts', 'content1', diag1);
|
|
86
|
+
cache.set('file2.ts', 'content2', diag2);
|
|
87
|
+
expect(cache.get('file1.ts', 'content1')).toEqual(diag1);
|
|
88
|
+
expect(cache.get('file2.ts', 'content2')).toEqual(diag2);
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
describe('LRU eviction', () => {
|
|
92
|
+
it('should evict oldest entry when cache is full', () => {
|
|
93
|
+
cache.set('file1.ts', 'content1', [createMockDiagnostic(1)]);
|
|
94
|
+
cache.set('file2.ts', 'content2', [createMockDiagnostic(2)]);
|
|
95
|
+
cache.set('file3.ts', 'content3', [createMockDiagnostic(3)]);
|
|
96
|
+
// Cache is now full (maxSize = 3)
|
|
97
|
+
// Adding a 4th entry should evict file1
|
|
98
|
+
cache.set('file4.ts', 'content4', [createMockDiagnostic(4)]);
|
|
99
|
+
expect(cache.get('file1.ts', 'content1')).toBeUndefined();
|
|
100
|
+
expect(cache.get('file2.ts', 'content2')).toBeDefined();
|
|
101
|
+
expect(cache.get('file3.ts', 'content3')).toBeDefined();
|
|
102
|
+
expect(cache.get('file4.ts', 'content4')).toBeDefined();
|
|
103
|
+
});
|
|
104
|
+
it('should move accessed entries to end (most recently used)', () => {
|
|
105
|
+
cache.set('file1.ts', 'content1', [createMockDiagnostic(1)]);
|
|
106
|
+
cache.set('file2.ts', 'content2', [createMockDiagnostic(2)]);
|
|
107
|
+
cache.set('file3.ts', 'content3', [createMockDiagnostic(3)]);
|
|
108
|
+
// Access file1 to make it most recently used
|
|
109
|
+
cache.get('file1.ts', 'content1');
|
|
110
|
+
// Add file4 - should evict file2 (oldest after file1 was accessed)
|
|
111
|
+
cache.set('file4.ts', 'content4', [createMockDiagnostic(4)]);
|
|
112
|
+
expect(cache.get('file1.ts', 'content1')).toBeDefined();
|
|
113
|
+
expect(cache.get('file2.ts', 'content2')).toBeUndefined();
|
|
114
|
+
expect(cache.get('file3.ts', 'content3')).toBeDefined();
|
|
115
|
+
expect(cache.get('file4.ts', 'content4')).toBeDefined();
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
describe('invalidate', () => {
|
|
119
|
+
it('should remove specific file from cache', () => {
|
|
120
|
+
cache.set('file1.ts', 'content1', [createMockDiagnostic(1)]);
|
|
121
|
+
cache.set('file2.ts', 'content2', [createMockDiagnostic(2)]);
|
|
122
|
+
cache.invalidate('file1.ts');
|
|
123
|
+
expect(cache.get('file1.ts', 'content1')).toBeUndefined();
|
|
124
|
+
expect(cache.get('file2.ts', 'content2')).toBeDefined();
|
|
125
|
+
});
|
|
126
|
+
it('should handle invalidating non-existent file', () => {
|
|
127
|
+
expect(() => cache.invalidate('nonexistent.ts')).not.toThrow();
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
describe('clear', () => {
|
|
131
|
+
it('should remove all entries from cache', () => {
|
|
132
|
+
cache.set('file1.ts', 'content1', [createMockDiagnostic(1)]);
|
|
133
|
+
cache.set('file2.ts', 'content2', [createMockDiagnostic(2)]);
|
|
134
|
+
cache.clear();
|
|
135
|
+
expect(cache.get('file1.ts', 'content1')).toBeUndefined();
|
|
136
|
+
expect(cache.get('file2.ts', 'content2')).toBeUndefined();
|
|
137
|
+
});
|
|
138
|
+
it('should reset cache size to 0', () => {
|
|
139
|
+
cache.set('file1.ts', 'content1', [createMockDiagnostic(1)]);
|
|
140
|
+
cache.clear();
|
|
141
|
+
expect(cache.getStats().size).toBe(0);
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
describe('getStats', () => {
|
|
145
|
+
it('should return correct size and maxSize', () => {
|
|
146
|
+
expect(cache.getStats()).toEqual({ size: 0, maxSize: 3 });
|
|
147
|
+
cache.set('file1.ts', 'content1', [createMockDiagnostic(1)]);
|
|
148
|
+
expect(cache.getStats()).toEqual({ size: 1, maxSize: 3 });
|
|
149
|
+
cache.set('file2.ts', 'content2', [createMockDiagnostic(2)]);
|
|
150
|
+
expect(cache.getStats()).toEqual({ size: 2, maxSize: 3 });
|
|
151
|
+
});
|
|
152
|
+
it('should not exceed maxSize', () => {
|
|
153
|
+
for (let i = 0; i < 10; i++) {
|
|
154
|
+
cache.set(`file${i}.ts`, `content${i}`, [createMockDiagnostic(i)]);
|
|
155
|
+
}
|
|
156
|
+
expect(cache.getStats().size).toBe(3);
|
|
157
|
+
});
|
|
158
|
+
});
|
|
159
|
+
describe('content hashing', () => {
|
|
160
|
+
it('should treat identical content as cache hit', () => {
|
|
161
|
+
const diagnostics = [createMockDiagnostic(1)];
|
|
162
|
+
cache.set('file.ts', 'identical content', diagnostics);
|
|
163
|
+
const result = cache.get('file.ts', 'identical content');
|
|
164
|
+
expect(result).toEqual(diagnostics);
|
|
165
|
+
});
|
|
166
|
+
it('should detect whitespace changes', () => {
|
|
167
|
+
const diagnostics = [createMockDiagnostic(1)];
|
|
168
|
+
cache.set('file.ts', 'content with spaces', diagnostics);
|
|
169
|
+
expect(cache.get('file.ts', 'content with spaces')).toBeUndefined();
|
|
170
|
+
});
|
|
171
|
+
it('should detect case changes', () => {
|
|
172
|
+
const diagnostics = [createMockDiagnostic(1)];
|
|
173
|
+
cache.set('file.ts', 'Content', diagnostics);
|
|
174
|
+
expect(cache.get('file.ts', 'content')).toBeUndefined();
|
|
175
|
+
});
|
|
176
|
+
});
|
|
177
|
+
describe('edge cases', () => {
|
|
178
|
+
it('should handle empty content', () => {
|
|
179
|
+
const diagnostics = [createMockDiagnostic(1)];
|
|
180
|
+
cache.set('file.ts', '', diagnostics);
|
|
181
|
+
expect(cache.get('file.ts', '')).toEqual(diagnostics);
|
|
182
|
+
});
|
|
183
|
+
it('should handle very long content', () => {
|
|
184
|
+
const longContent = 'x'.repeat(100000);
|
|
185
|
+
const diagnostics = [createMockDiagnostic(1)];
|
|
186
|
+
cache.set('file.ts', longContent, diagnostics);
|
|
187
|
+
expect(cache.get('file.ts', longContent)).toEqual(diagnostics);
|
|
188
|
+
});
|
|
189
|
+
it('should handle unicode content', () => {
|
|
190
|
+
const unicodeContent = 'const 变量 = "日本語"; // 中文注释';
|
|
191
|
+
const diagnostics = [createMockDiagnostic(1)];
|
|
192
|
+
cache.set('file.ts', unicodeContent, diagnostics);
|
|
193
|
+
expect(cache.get('file.ts', unicodeContent)).toEqual(diagnostics);
|
|
194
|
+
});
|
|
195
|
+
it('should handle special characters in file names', () => {
|
|
196
|
+
const diagnostics = [createMockDiagnostic(1)];
|
|
197
|
+
cache.set('/path/to/file with spaces.ts', 'content', diagnostics);
|
|
198
|
+
expect(cache.get('/path/to/file with spaces.ts', 'content')).toEqual(diagnostics);
|
|
199
|
+
});
|
|
200
|
+
it('should handle cache size of 1', () => {
|
|
201
|
+
const smallCache = new FileDiagnosticCache_1.FileDiagnosticCache(1);
|
|
202
|
+
smallCache.set('file1.ts', 'content1', [createMockDiagnostic(1)]);
|
|
203
|
+
smallCache.set('file2.ts', 'content2', [createMockDiagnostic(2)]);
|
|
204
|
+
expect(smallCache.get('file1.ts', 'content1')).toBeUndefined();
|
|
205
|
+
expect(smallCache.get('file2.ts', 'content2')).toBeDefined();
|
|
206
|
+
});
|
|
207
|
+
it('should use default maxSize when not specified', () => {
|
|
208
|
+
const defaultCache = new FileDiagnosticCache_1.FileDiagnosticCache();
|
|
209
|
+
expect(defaultCache.getStats().maxSize).toBe(100);
|
|
210
|
+
});
|
|
211
|
+
});
|
|
212
|
+
});
|
|
213
|
+
//# sourceMappingURL=FileDiagnosticCache.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileDiagnosticCache.spec.js","sourceRoot":"","sources":["../../src/services/FileDiagnosticCache.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PerformanceCache.spec.d.ts","sourceRoot":"","sources":["../../src/services/PerformanceCache.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const PerformanceCache_1 = require("./PerformanceCache");
|
|
4
|
+
describe('PerformanceCache', () => {
|
|
5
|
+
describe('basic operations', () => {
|
|
6
|
+
it('should return undefined for uncached keys', () => {
|
|
7
|
+
const cache = new PerformanceCache_1.PerformanceCache();
|
|
8
|
+
expect(cache.get('uncached')).toBeUndefined();
|
|
9
|
+
});
|
|
10
|
+
it('should cache and retrieve values', () => {
|
|
11
|
+
const cache = new PerformanceCache_1.PerformanceCache();
|
|
12
|
+
cache.set('key', true);
|
|
13
|
+
expect(cache.get('key')).toBe(true);
|
|
14
|
+
});
|
|
15
|
+
it('should overwrite existing values', () => {
|
|
16
|
+
const cache = new PerformanceCache_1.PerformanceCache();
|
|
17
|
+
cache.set('key', 1);
|
|
18
|
+
cache.set('key', 2);
|
|
19
|
+
expect(cache.get('key')).toBe(2);
|
|
20
|
+
});
|
|
21
|
+
it('should handle different value types', () => {
|
|
22
|
+
const cache = new PerformanceCache_1.PerformanceCache();
|
|
23
|
+
const obj = { foo: 'bar' };
|
|
24
|
+
cache.set('key', obj);
|
|
25
|
+
expect(cache.get('key')).toBe(obj);
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
describe('has', () => {
|
|
29
|
+
it('should return false for uncached keys', () => {
|
|
30
|
+
const cache = new PerformanceCache_1.PerformanceCache();
|
|
31
|
+
expect(cache.has('uncached')).toBe(false);
|
|
32
|
+
});
|
|
33
|
+
it('should return true for cached keys', () => {
|
|
34
|
+
const cache = new PerformanceCache_1.PerformanceCache();
|
|
35
|
+
cache.set('key', true);
|
|
36
|
+
expect(cache.has('key')).toBe(true);
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
describe('size', () => {
|
|
40
|
+
it('should start at 0', () => {
|
|
41
|
+
const cache = new PerformanceCache_1.PerformanceCache();
|
|
42
|
+
expect(cache.size).toBe(0);
|
|
43
|
+
});
|
|
44
|
+
it('should increase when adding items', () => {
|
|
45
|
+
const cache = new PerformanceCache_1.PerformanceCache();
|
|
46
|
+
cache.set('key1', true);
|
|
47
|
+
cache.set('key2', false);
|
|
48
|
+
expect(cache.size).toBe(2);
|
|
49
|
+
});
|
|
50
|
+
it('should not increase when overwriting', () => {
|
|
51
|
+
const cache = new PerformanceCache_1.PerformanceCache();
|
|
52
|
+
cache.set('key', true);
|
|
53
|
+
cache.set('key', false);
|
|
54
|
+
expect(cache.size).toBe(1);
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
describe('clear', () => {
|
|
58
|
+
it('should remove all entries', () => {
|
|
59
|
+
const cache = new PerformanceCache_1.PerformanceCache();
|
|
60
|
+
cache.set('key1', true);
|
|
61
|
+
cache.set('key2', false);
|
|
62
|
+
cache.clear();
|
|
63
|
+
expect(cache.size).toBe(0);
|
|
64
|
+
expect(cache.get('key1')).toBeUndefined();
|
|
65
|
+
expect(cache.get('key2')).toBeUndefined();
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
describe('LRU eviction', () => {
|
|
69
|
+
it('should evict oldest entry when at capacity', () => {
|
|
70
|
+
const cache = new PerformanceCache_1.PerformanceCache(3);
|
|
71
|
+
cache.set('first', 1);
|
|
72
|
+
cache.set('second', 2);
|
|
73
|
+
cache.set('third', 3);
|
|
74
|
+
// Cache is full, adding fourth should evict 'first'
|
|
75
|
+
cache.set('fourth', 4);
|
|
76
|
+
expect(cache.get('first')).toBeUndefined();
|
|
77
|
+
expect(cache.get('second')).toBe(2);
|
|
78
|
+
expect(cache.get('third')).toBe(3);
|
|
79
|
+
expect(cache.get('fourth')).toBe(4);
|
|
80
|
+
});
|
|
81
|
+
it('should move accessed entries to end (most recently used)', () => {
|
|
82
|
+
const cache = new PerformanceCache_1.PerformanceCache(3);
|
|
83
|
+
cache.set('first', 1);
|
|
84
|
+
cache.set('second', 2);
|
|
85
|
+
cache.set('third', 3);
|
|
86
|
+
// Access 'first' to make it most recently used
|
|
87
|
+
cache.get('first');
|
|
88
|
+
// Adding fourth should now evict 'second'
|
|
89
|
+
cache.set('fourth', 4);
|
|
90
|
+
expect(cache.get('first')).toBe(1);
|
|
91
|
+
expect(cache.get('second')).toBeUndefined();
|
|
92
|
+
expect(cache.get('third')).toBe(3);
|
|
93
|
+
expect(cache.get('fourth')).toBe(4);
|
|
94
|
+
});
|
|
95
|
+
it('should handle size of 1', () => {
|
|
96
|
+
const cache = new PerformanceCache_1.PerformanceCache(1);
|
|
97
|
+
cache.set('first', 1);
|
|
98
|
+
cache.set('second', 2);
|
|
99
|
+
expect(cache.get('first')).toBeUndefined();
|
|
100
|
+
expect(cache.get('second')).toBe(2);
|
|
101
|
+
expect(cache.size).toBe(1);
|
|
102
|
+
});
|
|
103
|
+
it('should not exceed maxSize', () => {
|
|
104
|
+
const cache = new PerformanceCache_1.PerformanceCache(3);
|
|
105
|
+
for (let i = 0; i < 100; i++) {
|
|
106
|
+
cache.set(`key${i}`, i);
|
|
107
|
+
}
|
|
108
|
+
expect(cache.size).toBe(3);
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
describe('default maxSize', () => {
|
|
112
|
+
it('should use default maxSize of 1000', () => {
|
|
113
|
+
const cache = new PerformanceCache_1.PerformanceCache();
|
|
114
|
+
// Add 1001 items
|
|
115
|
+
for (let i = 0; i < 1001; i++) {
|
|
116
|
+
cache.set(`key${i}`, true);
|
|
117
|
+
}
|
|
118
|
+
// Should have evicted the first one
|
|
119
|
+
expect(cache.size).toBe(1000);
|
|
120
|
+
expect(cache.get('key0')).toBeUndefined();
|
|
121
|
+
expect(cache.get('key1000')).toBe(true);
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
describe('different key types', () => {
|
|
125
|
+
it('should work with number keys', () => {
|
|
126
|
+
const cache = new PerformanceCache_1.PerformanceCache();
|
|
127
|
+
cache.set(1, 'one');
|
|
128
|
+
cache.set(2, 'two');
|
|
129
|
+
expect(cache.get(1)).toBe('one');
|
|
130
|
+
expect(cache.get(2)).toBe('two');
|
|
131
|
+
});
|
|
132
|
+
it('should work with object keys', () => {
|
|
133
|
+
const cache = new PerformanceCache_1.PerformanceCache();
|
|
134
|
+
const key1 = { id: 1 };
|
|
135
|
+
const key2 = { id: 2 };
|
|
136
|
+
cache.set(key1, 'first');
|
|
137
|
+
cache.set(key2, 'second');
|
|
138
|
+
expect(cache.get(key1)).toBe('first');
|
|
139
|
+
expect(cache.get(key2)).toBe('second');
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
describe('edge cases', () => {
|
|
143
|
+
it('should handle null values', () => {
|
|
144
|
+
const cache = new PerformanceCache_1.PerformanceCache();
|
|
145
|
+
cache.set('key', null);
|
|
146
|
+
expect(cache.get('key')).toBeNull();
|
|
147
|
+
expect(cache.has('key')).toBe(true);
|
|
148
|
+
});
|
|
149
|
+
it('should handle undefined values', () => {
|
|
150
|
+
const cache = new PerformanceCache_1.PerformanceCache();
|
|
151
|
+
cache.set('key', undefined);
|
|
152
|
+
// Note: get returns undefined both for missing and stored undefined
|
|
153
|
+
// has() is the way to distinguish
|
|
154
|
+
expect(cache.has('key')).toBe(true);
|
|
155
|
+
});
|
|
156
|
+
it('should handle empty string keys', () => {
|
|
157
|
+
const cache = new PerformanceCache_1.PerformanceCache();
|
|
158
|
+
cache.set('', true);
|
|
159
|
+
expect(cache.get('')).toBe(true);
|
|
160
|
+
});
|
|
161
|
+
it('should handle 0 as key', () => {
|
|
162
|
+
const cache = new PerformanceCache_1.PerformanceCache();
|
|
163
|
+
cache.set(0, 'zero');
|
|
164
|
+
expect(cache.get(0)).toBe('zero');
|
|
165
|
+
});
|
|
166
|
+
});
|
|
167
|
+
});
|
|
168
|
+
//# sourceMappingURL=PerformanceCache.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PerformanceCache.spec.js","sourceRoot":"","sources":["../../src/services/PerformanceCache.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { IPluginConfig } from '../core/interfaces';
|
|
2
2
|
import { DiagnosticSeverity, EditorConfig, LintConfig, UtilitiesConfig, UtilityFunction, ValidationConfig, VariantsConfig } from '../core/types';
|
|
3
|
+
import { ConfigValidationError } from './ConfigSchemaValidator';
|
|
3
4
|
/**
|
|
4
5
|
* Service responsible for managing plugin configuration
|
|
5
6
|
* Follows Single Responsibility Principle
|
|
@@ -13,6 +14,8 @@ export declare class PluginConfigService {
|
|
|
13
14
|
private classAttributes;
|
|
14
15
|
private cssFilePath?;
|
|
15
16
|
private utilityFunctionsLegacy;
|
|
17
|
+
private readonly schemaValidator;
|
|
18
|
+
private configValidationResult;
|
|
16
19
|
constructor(config: IPluginConfig);
|
|
17
20
|
private initializeUtilities;
|
|
18
21
|
private initializeVariants;
|
|
@@ -55,5 +58,21 @@ export declare class PluginConfigService {
|
|
|
55
58
|
* Includes default attributes (className, class, classList) plus user-configured ones
|
|
56
59
|
*/
|
|
57
60
|
getClassAttributes(): string[];
|
|
61
|
+
/**
|
|
62
|
+
* Check if the configuration is valid according to the schema
|
|
63
|
+
*/
|
|
64
|
+
isConfigValid(): boolean;
|
|
65
|
+
/**
|
|
66
|
+
* Get configuration validation errors
|
|
67
|
+
*/
|
|
68
|
+
getConfigValidationErrors(): ConfigValidationError[];
|
|
69
|
+
/**
|
|
70
|
+
* Get formatted validation error messages
|
|
71
|
+
*/
|
|
72
|
+
getFormattedConfigErrors(): string[];
|
|
73
|
+
/**
|
|
74
|
+
* Get a summary of all validation errors for logging
|
|
75
|
+
*/
|
|
76
|
+
getConfigErrorSummary(): string;
|
|
58
77
|
}
|
|
59
78
|
//# sourceMappingURL=PluginConfigService.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PluginConfigService.d.ts","sourceRoot":"","sources":["../../src/services/PluginConfigService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EACN,kBAAkB,EAClB,YAAY,EACZ,UAAU,EACV,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"PluginConfigService.d.ts","sourceRoot":"","sources":["../../src/services/PluginConfigService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EACN,kBAAkB,EAClB,YAAY,EACZ,UAAU,EACV,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,MAAM,eAAe,CAAC;AACvB,OAAO,EAEN,qBAAqB,EAErB,MAAM,yBAAyB,CAAC;AAuDjC;;;GAGG;AACH,qBAAa,mBAAmB;IAC/B,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,gBAAgB,CAEtB;IACF,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,eAAe,CAAW;IAClC,OAAO,CAAC,WAAW,CAAC,CAAS;IAG7B,OAAO,CAAC,sBAAsB,CAAoB;IAGlD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAwB;IACxD,OAAO,CAAC,sBAAsB,CAAyB;gBAE3C,MAAM,EAAE,aAAa;IAmBjC,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,kBAAkB;IAmB1B,OAAO,CAAC,oBAAoB;IAc5B,OAAO,CAAC,cAAc;IAgBtB,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,yBAAyB;IAQjC;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAmB7B,kBAAkB,IAAI,eAAe;IAIrC;;OAEG;IACH,mBAAmB,IAAI,eAAe,EAAE;IAMxC,iBAAiB,IAAI,cAAc;IAInC,yBAAyB,IAAI,OAAO;IAIpC,+BAA+B,IAAI,OAAO;IAM1C,mBAAmB,IAAI,gBAAgB;IAIvC,mBAAmB,IAAI,OAAO;IAI9B,qBAAqB,IAAI,kBAAkB;IAI3C,iBAAiB,IAAI,MAAM,EAAE;IAM7B,aAAa,IAAI,UAAU;IAI3B,aAAa,IAAI,OAAO;IAIxB,2BAA2B,IAAI,OAAO;IAItC,6BAA6B,IAAI,kBAAkB;IAInD,wBAAwB,IAAI,OAAO;IAInC,0BAA0B,IAAI,kBAAkB;IAMhD,eAAe,IAAI,YAAY;IAI/B,eAAe,IAAI,OAAO;IAI1B,qBAAqB,IAAI,OAAO;IAIhC,cAAc,IAAI,OAAO;IAMzB,cAAc,IAAI,MAAM,GAAG,SAAS;IAIpC,eAAe,IAAI,OAAO;IAM1B;;;;OAIG;IACH,kBAAkB,IAAI,MAAM,EAAE;IAM9B;;OAEG;IACH,aAAa,IAAI,OAAO;IAIxB;;OAEG;IACH,yBAAyB,IAAI,qBAAqB,EAAE;IAIpD;;OAEG;IACH,wBAAwB,IAAI,MAAM,EAAE;IAIpC;;OAEG;IACH,qBAAqB,IAAI,MAAM;CAG/B"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.PluginConfigService = void 0;
|
|
4
|
+
const ConfigSchemaValidator_1 = require("./ConfigSchemaValidator");
|
|
4
5
|
/**
|
|
5
6
|
* Default utilities configuration
|
|
6
7
|
* Key is function name, value is import source ("*" = any source, "off" = disabled)
|
|
@@ -53,6 +54,9 @@ const DEFAULT_CLASS_ATTRIBUTES = ['className', 'class', 'classList'];
|
|
|
53
54
|
*/
|
|
54
55
|
class PluginConfigService {
|
|
55
56
|
constructor(config) {
|
|
57
|
+
// Validate configuration schema first
|
|
58
|
+
this.schemaValidator = new ConfigSchemaValidator_1.ConfigSchemaValidator();
|
|
59
|
+
this.configValidationResult = this.schemaValidator.validate(config);
|
|
56
60
|
this.cssFilePath = config.globalCss;
|
|
57
61
|
// Initialize configuration with backwards compatibility
|
|
58
62
|
this.utilitiesConfig = this.initializeUtilities(config);
|
|
@@ -226,6 +230,31 @@ class PluginConfigService {
|
|
|
226
230
|
getClassAttributes() {
|
|
227
231
|
return this.classAttributes;
|
|
228
232
|
}
|
|
233
|
+
// ---- Configuration validation ----
|
|
234
|
+
/**
|
|
235
|
+
* Check if the configuration is valid according to the schema
|
|
236
|
+
*/
|
|
237
|
+
isConfigValid() {
|
|
238
|
+
return this.configValidationResult.valid;
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Get configuration validation errors
|
|
242
|
+
*/
|
|
243
|
+
getConfigValidationErrors() {
|
|
244
|
+
return this.configValidationResult.errors;
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Get formatted validation error messages
|
|
248
|
+
*/
|
|
249
|
+
getFormattedConfigErrors() {
|
|
250
|
+
return this.schemaValidator.formatErrors(this.configValidationResult.errors);
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Get a summary of all validation errors for logging
|
|
254
|
+
*/
|
|
255
|
+
getConfigErrorSummary() {
|
|
256
|
+
return this.schemaValidator.getErrorSummary(this.configValidationResult.errors);
|
|
257
|
+
}
|
|
229
258
|
}
|
|
230
259
|
exports.PluginConfigService = PluginConfigService;
|
|
231
260
|
//# sourceMappingURL=PluginConfigService.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PluginConfigService.js","sourceRoot":"","sources":["../../src/services/PluginConfigService.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"PluginConfigService.js","sourceRoot":"","sources":["../../src/services/PluginConfigService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ValidationService.spec.d.ts","sourceRoot":"","sources":["../../src/services/ValidationService.spec.ts"],"names":[],"mappings":""}
|