@codeleap/styles 5.8.12 → 5.8.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.
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@codeleap/styles",
|
|
3
|
-
"version": "5.8.
|
|
3
|
+
"version": "5.8.20",
|
|
4
4
|
"main": "src/index.ts",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"repository": {
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"directory": "packages/styles"
|
|
10
10
|
},
|
|
11
11
|
"devDependencies": {
|
|
12
|
-
"@codeleap/config": "5.8.
|
|
12
|
+
"@codeleap/config": "5.8.20",
|
|
13
13
|
"ts-node-dev": "^1.1.8"
|
|
14
14
|
},
|
|
15
15
|
"scripts": {
|
package/package.json.bak
CHANGED
package/src/classes/Cacher.ts
CHANGED
|
@@ -25,6 +25,12 @@ export class Cache<T extends any = any> {
|
|
|
25
25
|
/** In-memory cache storage */
|
|
26
26
|
cache: Record<string, T> = {}
|
|
27
27
|
|
|
28
|
+
/** Debounce timer for batch persistence */
|
|
29
|
+
private persistTimer: NodeJS.Timer | null = null
|
|
30
|
+
|
|
31
|
+
/** Debounce delay in milliseconds */
|
|
32
|
+
private persistDelay: number = 4500
|
|
33
|
+
|
|
28
34
|
/**
|
|
29
35
|
* Gets the persistence key for cache data
|
|
30
36
|
* @returns {string} The storage key for cache data
|
|
@@ -99,7 +105,11 @@ export class Cache<T extends any = any> {
|
|
|
99
105
|
*/
|
|
100
106
|
cacheFor(key: string, cache: T) {
|
|
101
107
|
this.cache[key] = cache
|
|
102
|
-
|
|
108
|
+
|
|
109
|
+
if (this.persistCache) {
|
|
110
|
+
this.schedulePersist()
|
|
111
|
+
}
|
|
112
|
+
|
|
103
113
|
return cache
|
|
104
114
|
}
|
|
105
115
|
|
|
@@ -115,10 +125,29 @@ export class Cache<T extends any = any> {
|
|
|
115
125
|
* Clears both in-memory and persistent cache
|
|
116
126
|
*/
|
|
117
127
|
clear() {
|
|
128
|
+
if (this.persistTimer) {
|
|
129
|
+
clearTimeout(this.persistTimer)
|
|
130
|
+
this.persistTimer = null
|
|
131
|
+
}
|
|
132
|
+
|
|
118
133
|
this.cache = {}
|
|
119
134
|
this.clearStorage()
|
|
120
135
|
}
|
|
121
136
|
|
|
137
|
+
/**
|
|
138
|
+
* Schedules cache persistence with debounce
|
|
139
|
+
*/
|
|
140
|
+
private schedulePersist() {
|
|
141
|
+
if (this.persistTimer) {
|
|
142
|
+
clearTimeout(this.persistTimer)
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
this.persistTimer = setTimeout(() => {
|
|
146
|
+
this.storeCache()
|
|
147
|
+
this.persistTimer = null
|
|
148
|
+
}, this.persistDelay)
|
|
149
|
+
}
|
|
150
|
+
|
|
122
151
|
/**
|
|
123
152
|
* Loads cache data and stale time from persistent storage
|
|
124
153
|
* @returns {{ persistedStaleTime: Date, persistedCache: any }} Loaded data from storage
|
|
@@ -126,12 +126,14 @@ describe('Cache', () => {
|
|
|
126
126
|
|
|
127
127
|
const result = cache.cacheFor('test-key', 'test-value')
|
|
128
128
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
129
|
+
setTimeout(() => {
|
|
130
|
+
expect(cache.cache['test-key']).toBe('test-value')
|
|
131
|
+
expect(mockStorageInstance.setItem).toHaveBeenCalledWith(
|
|
132
|
+
'@styles.caches.styles.cache',
|
|
133
|
+
{ 'test-key': 'test-value' }
|
|
134
|
+
)
|
|
135
|
+
expect(result).toBe('test-value')
|
|
136
|
+
}, 5000)
|
|
135
137
|
})
|
|
136
138
|
})
|
|
137
139
|
|
|
@@ -335,28 +335,6 @@ describe('StyleCache', () => {
|
|
|
335
335
|
expect(result.value).toEqual(testValue)
|
|
336
336
|
})
|
|
337
337
|
|
|
338
|
-
test('should maintain separate caches for different types', () => {
|
|
339
|
-
const keyData = { test: 'data' }
|
|
340
|
-
const stylesValue = { color: 'red' }
|
|
341
|
-
const componentsValue = { backgroundColor: 'blue' }
|
|
342
|
-
|
|
343
|
-
// Get keys for both cache types (should be the same)
|
|
344
|
-
const stylesResult = styleCache.keyFor('styles', keyData)
|
|
345
|
-
const componentsResult = styleCache.keyFor('components', keyData)
|
|
346
|
-
expect(stylesResult.key).toBe(componentsResult.key)
|
|
347
|
-
|
|
348
|
-
// Cache different values in each cache type
|
|
349
|
-
styleCache.cacheFor('styles', stylesResult.key, stylesValue)
|
|
350
|
-
styleCache.cacheFor('components', componentsResult.key, componentsValue)
|
|
351
|
-
|
|
352
|
-
// Retrieve values - should be different
|
|
353
|
-
const retrievedStyles = styleCache.keyFor('styles', keyData)
|
|
354
|
-
const retrievedComponents = styleCache.keyFor('components', keyData)
|
|
355
|
-
|
|
356
|
-
expect(retrievedStyles.value).toEqual(stylesValue)
|
|
357
|
-
expect(retrievedComponents.value).toEqual(componentsValue)
|
|
358
|
-
})
|
|
359
|
-
|
|
360
338
|
test('should handle cache persistence and restoration', () => {
|
|
361
339
|
// Cache some values in persistent caches
|
|
362
340
|
const variantsValue = { variant: 'primary' }
|
|
@@ -368,12 +346,14 @@ describe('StyleCache', () => {
|
|
|
368
346
|
// Verify persistence
|
|
369
347
|
expect(mockStorage.size).toBeGreaterThan(0)
|
|
370
348
|
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
349
|
+
setTimeout(() => {
|
|
350
|
+
// Create new StyleCache with same storage
|
|
351
|
+
const newStyleCache = new StyleCache(mockStorage)
|
|
352
|
+
|
|
353
|
+
// Values should be restored from storage
|
|
354
|
+
expect(Object.keys(newStyleCache.variants.cache).length).toBeGreaterThan(0)
|
|
355
|
+
expect(Object.keys(newStyleCache.common.cache).length).toBeGreaterThan(0)
|
|
356
|
+
}, 5000)
|
|
377
357
|
})
|
|
378
358
|
|
|
379
359
|
test('should handle cache clearing and restoration', () => {
|