@hkdigital/lib-sveltekit 0.2.20 → 0.2.21
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/README.md +135 -135
- package/dist/assets/autospuiten/car-paint-picker.js +41 -41
- package/dist/assets/autospuiten/labels.js +7 -7
- package/dist/classes/cache/IndexedDbCache.js +1407 -1407
- package/dist/classes/cache/MemoryResponseCache.js +138 -138
- package/dist/classes/cache/index.js +5 -5
- package/dist/classes/cache/typedef.js +41 -41
- package/dist/classes/data/IterableTree.js +243 -243
- package/dist/classes/data/Selector.js +190 -190
- package/dist/classes/data/index.js +2 -2
- package/dist/classes/events/EventEmitter.js +275 -275
- package/dist/classes/events/index.js +2 -2
- package/dist/classes/index.js +4 -4
- package/dist/classes/logging/Logger.js +210 -210
- package/dist/classes/logging/constants.js +16 -16
- package/dist/classes/logging/index.js +4 -4
- package/dist/classes/logging/typedef.js +17 -17
- package/dist/classes/promise/HkPromise.js +377 -377
- package/dist/classes/promise/index.js +1 -1
- package/dist/classes/services/ServiceBase.js +463 -463
- package/dist/classes/services/ServiceManager.js +614 -614
- package/dist/classes/services/index.js +5 -5
- package/dist/classes/services/service-states.js +205 -205
- package/dist/classes/services/typedef.js +179 -179
- package/dist/classes/stores/SubscribersCount.js +107 -107
- package/dist/classes/stores/index.js +1 -1
- package/dist/classes/streams/LogTransformStream.js +19 -19
- package/dist/classes/streams/ServerEventsStore.js +110 -110
- package/dist/classes/streams/TimeStampSource.js +26 -26
- package/dist/classes/streams/index.js +3 -3
- package/dist/classes/svelte/audio/AudioLoader.svelte.js +58 -58
- package/dist/classes/svelte/audio/AudioScene.svelte.js +324 -324
- package/dist/classes/svelte/audio/mocks.js +35 -35
- package/dist/classes/svelte/finite-state-machine/FiniteStateMachine.svelte.js +133 -133
- package/dist/classes/svelte/finite-state-machine/index.js +1 -1
- package/dist/classes/svelte/image/ImageLoader.svelte.js +45 -45
- package/dist/classes/svelte/image/ImageScene.svelte.js +249 -249
- package/dist/classes/svelte/image/ImageVariantsLoader.svelte.js +152 -152
- package/dist/classes/svelte/image/index.js +4 -4
- package/dist/classes/svelte/image/mocks.js +35 -35
- package/dist/classes/svelte/image/typedef.js +8 -8
- package/dist/classes/svelte/index.js +14 -14
- package/dist/classes/svelte/loading-state-machine/LoadingStateMachine.svelte.js +109 -109
- package/dist/classes/svelte/loading-state-machine/constants.js +16 -16
- package/dist/classes/svelte/loading-state-machine/index.js +3 -3
- package/dist/classes/svelte/network-loader/NetworkLoader.svelte.js +338 -338
- package/dist/classes/svelte/network-loader/constants.js +3 -3
- package/dist/classes/svelte/network-loader/index.js +3 -3
- package/dist/classes/svelte/network-loader/mocks.js +30 -30
- package/dist/classes/svelte/network-loader/typedef.js +8 -8
- package/dist/components/area/HkArea.svelte +49 -49
- package/dist/components/area/HkGridArea.svelte +77 -77
- package/dist/components/area/index.js +2 -2
- package/dist/components/buttons/button/Button.svelte +82 -82
- package/dist/components/buttons/button-icon-steeze/SteezeIconButton.svelte +30 -30
- package/dist/components/buttons/button-text/TextButton.svelte +21 -21
- package/dist/components/buttons/index.js +3 -3
- package/dist/components/debug/debug-panel-design-scaling/DebugPanelDesignScaling.svelte +146 -146
- package/dist/components/debug/index.js +1 -1
- package/dist/components/drag-drop/DragController.js +44 -44
- package/dist/components/drag-drop/DragDropContext.svelte +111 -111
- package/dist/components/drag-drop/Draggable.svelte +519 -519
- package/dist/components/drag-drop/DropZoneArea.svelte +119 -119
- package/dist/components/drag-drop/DropZoneList.svelte +125 -125
- package/dist/components/drag-drop/{DropZone.svelte → Dropzone.svelte} +258 -258
- package/dist/components/drag-drop/actions.js +26 -26
- package/dist/components/drag-drop/drag-state.svelte.js +322 -322
- package/dist/components/drag-drop/index.js +7 -7
- package/dist/components/drag-drop/util.js +85 -85
- package/dist/components/hkdev/blocks/TextBlock.svelte +46 -46
- package/dist/components/hkdev/buttons/CheckButton.svelte +62 -62
- package/dist/components/icons/HkIcon.svelte +86 -86
- package/dist/components/icons/HkTabIcon.svelte +116 -116
- package/dist/components/icons/SteezeIcon.svelte +97 -97
- package/dist/components/icons/index.js +6 -6
- package/dist/components/icons/typedef.js +16 -16
- package/dist/components/index.js +2 -2
- package/dist/components/inputs/index.js +1 -1
- package/dist/components/inputs/text-input/TestTextInput.svelte__ +102 -102
- package/dist/components/inputs/text-input/TextInput.svelte +223 -223
- package/dist/components/inputs/text-input/TextInput.svelte___ +83 -83
- package/dist/components/inputs/text-input/assets/IconInvalid.svelte +14 -14
- package/dist/components/inputs/text-input/assets/IconValid.svelte +12 -12
- package/dist/components/layout/grid-layers/GridLayers.svelte +63 -63
- package/dist/components/layout/grid-layers/util.js +74 -74
- package/dist/components/layout/index.js +1 -1
- package/dist/components/panels/index.js +1 -1
- package/dist/components/panels/panel/Panel.svelte +43 -43
- package/dist/components/rows/index.js +3 -3
- package/dist/components/rows/panel-grid-row/PanelGridRow.svelte +104 -104
- package/dist/components/rows/panel-row-2/PanelRow2.svelte +40 -40
- package/dist/components/tab-bar/HkTabBar.state.svelte.js +149 -149
- package/dist/components/tab-bar/HkTabBar.svelte +74 -74
- package/dist/components/tab-bar/HkTabBarSelector.state.svelte.js +93 -93
- package/dist/components/tab-bar/HkTabBarSelector.svelte +49 -49
- package/dist/components/tab-bar/index.js +17 -17
- package/dist/components/tab-bar/typedef.js +11 -11
- package/dist/config/imagetools-config.js +189 -189
- package/dist/config/imagetools.d.ts +72 -72
- package/dist/constants/bases.js +13 -13
- package/dist/constants/errors/api.js +9 -9
- package/dist/constants/errors/generic.js +5 -5
- package/dist/constants/errors/index.js +3 -3
- package/dist/constants/errors/jwt.js +5 -5
- package/dist/constants/http/headers.js +6 -6
- package/dist/constants/http/index.js +2 -2
- package/dist/constants/http/methods.js +14 -14
- package/dist/constants/index.js +3 -3
- package/dist/constants/mime/application.js +5 -5
- package/dist/constants/mime/audio.js +13 -13
- package/dist/constants/mime/image.js +3 -3
- package/dist/constants/mime/index.js +4 -4
- package/dist/constants/mime/text.js +2 -2
- package/dist/constants/regexp/index.js +31 -31
- package/dist/constants/regexp/inspiratie.js__ +95 -95
- package/dist/constants/regexp/text.js +49 -49
- package/dist/constants/regexp/user.js +32 -32
- package/dist/constants/regexp/web.js +3 -3
- package/dist/constants/state-labels/drag-states.js +6 -6
- package/dist/constants/state-labels/drop-states.js +6 -6
- package/dist/constants/state-labels/input-states.js +11 -11
- package/dist/constants/state-labels/submit-states.js +4 -4
- package/dist/constants/time.js +28 -28
- package/dist/css/utilities.css +43 -43
- package/dist/design/design-config.js +73 -73
- package/dist/design/tailwind-theme-extend.js +158 -158
- package/dist/features/button-group/ButtonGroup.svelte +82 -82
- package/dist/features/button-group/typedef.js +10 -10
- package/dist/features/compare-left-right/CompareLeftRight.svelte +179 -179
- package/dist/features/compare-left-right/index.js +1 -1
- package/dist/features/game-box/GameBox.svelte +577 -577
- package/dist/features/game-box/gamebox.util.js +83 -83
- package/dist/features/hk-app-layout/HkAppLayout.state.svelte.js +25 -25
- package/dist/features/hk-app-layout/HkAppLayout.svelte +251 -251
- package/dist/features/image-box/ImageBox.svelte +210 -210
- package/dist/features/image-box/index.js +5 -5
- package/dist/features/image-box/typedef.js +32 -32
- package/dist/features/index.js +23 -23
- package/dist/features/presenter/ImageSlide.svelte +64 -64
- package/dist/features/presenter/Presenter.state.svelte.js +638 -638
- package/dist/features/presenter/Presenter.svelte +142 -142
- package/dist/features/presenter/constants.js +7 -7
- package/dist/features/presenter/index.js +10 -10
- package/dist/features/presenter/typedef.js +106 -106
- package/dist/features/presenter/util.js +210 -210
- package/dist/features/virtual-viewport/VirtualViewport.svelte +196 -196
- package/dist/logging/adapters/console.js +114 -114
- package/dist/logging/adapters/pino.js +60 -60
- package/dist/logging/constants.js +1 -1
- package/dist/logging/factories/client.js +21 -21
- package/dist/logging/factories/server.js +22 -22
- package/dist/logging/factories/universal.js +23 -23
- package/dist/logging/index.js +8 -8
- package/dist/schemas/index.js +1 -1
- package/dist/schemas/validate-url.js +180 -180
- package/dist/server/index.js +1 -1
- package/dist/server/logger.js +94 -94
- package/dist/states/index.js +1 -1
- package/dist/states/navigation.svelte.js +55 -55
- package/dist/stores/index.js +1 -1
- package/dist/stores/theme.js +80 -80
- package/dist/themes/hkdev/components/blocks/text-block.css +34 -41
- package/dist/themes/hkdev/components/boxes/game-box.css +11 -12
- package/dist/themes/hkdev/components/buttons/button-icon-steeze.css +22 -22
- package/dist/themes/hkdev/components/buttons/button-text.css +32 -32
- package/dist/themes/hkdev/components/buttons/button.css +146 -146
- package/dist/themes/hkdev/components/buttons/skip-button.css +5 -6
- package/dist/themes/hkdev/components/drag-drop/draggable.css +73 -73
- package/dist/themes/hkdev/components/drag-drop/drop-zone.css +58 -48
- package/dist/themes/hkdev/components/icons/icon-steeze.css +16 -22
- package/dist/themes/hkdev/components/inputs/text-input.css +102 -104
- package/dist/themes/hkdev/components/panels/panel.css +25 -27
- package/dist/themes/hkdev/components/rows/panel-grid-row.css +4 -6
- package/dist/themes/hkdev/components/rows/panel-row-2.css +5 -7
- package/dist/themes/hkdev/components.css +29 -53
- package/dist/themes/hkdev/debug.css +1 -1
- package/dist/themes/hkdev/global/layout.css +32 -39
- package/dist/themes/hkdev/global/on-colors.css +32 -53
- package/dist/themes/hkdev/globals.css +4 -11
- package/dist/themes/hkdev/responsive.css +12 -12
- package/dist/themes/hkdev/theme-ext.js +12 -15
- package/dist/themes/hkdev/theme.css +219 -0
- package/dist/themes/index.d.ts +1 -1
- package/dist/themes/index.js +1 -1
- package/dist/typedef/context.js +6 -6
- package/dist/typedef/drag.js +25 -25
- package/dist/typedef/drop.js +12 -12
- package/dist/typedef/image.js +38 -38
- package/dist/typedef/index.js +4 -4
- package/dist/util/array/index.js +436 -436
- package/dist/util/bases/base58.js +262 -262
- package/dist/util/bases/index.js +1 -1
- package/dist/util/compare/index.js +247 -247
- package/dist/util/css/css-vars.js +83 -83
- package/dist/util/css/index.js +1 -1
- package/dist/util/design-system/components/states.js +22 -22
- package/dist/util/design-system/css/clamp.js +66 -66
- package/dist/util/design-system/css/root-design-vars.js +102 -102
- package/dist/util/design-system/index.js +5 -5
- package/dist/util/design-system/layout/scaling.js +228 -228
- package/dist/util/design-system/skeleton.js +208 -208
- package/dist/util/design-system/tailwind.js +288 -288
- package/dist/util/env/index.js +9 -9
- package/dist/util/expect/arrays.js +47 -47
- package/dist/util/expect/index.js +259 -259
- package/dist/util/expect/primitives.js +55 -55
- package/dist/util/expect/url.js +60 -60
- package/dist/util/function/index.js +218 -218
- package/dist/util/geo/index.js +26 -26
- package/dist/util/http/caching.js +263 -263
- package/dist/util/http/errors.js +97 -97
- package/dist/util/http/headers.js +75 -75
- package/dist/util/http/http-request.js +578 -578
- package/dist/util/http/index.js +22 -22
- package/dist/util/http/json-request.js +224 -224
- package/dist/util/http/mocks.js +65 -65
- package/dist/util/http/response.js +294 -294
- package/dist/util/http/typedef.js +93 -93
- package/dist/util/http/url.js +52 -52
- package/dist/util/image/index.js +86 -86
- package/dist/util/index.js +2 -2
- package/dist/util/is/index.js +140 -140
- package/dist/util/iterate/index.js +234 -234
- package/dist/util/object/index.js +1361 -1361
- package/dist/util/singleton/index.js +97 -97
- package/dist/util/string/array-path.js +75 -75
- package/dist/util/string/convert.js +54 -54
- package/dist/util/string/fs.js +226 -226
- package/dist/util/string/index.js +5 -5
- package/dist/util/string/interpolate.js +61 -61
- package/dist/util/string/pad.js +10 -10
- package/dist/util/svelte/index.js +4 -4
- package/dist/util/svelte/loading/loading-tracker.svelte.js +108 -108
- package/dist/util/svelte/observe/index.js +49 -49
- package/dist/util/svelte/state-context/index.js +117 -117
- package/dist/util/svelte/wait/index.js +38 -38
- package/dist/util/sveltekit/index.js +1 -1
- package/dist/util/sveltekit/route-folders/index.js +101 -101
- package/dist/util/time/index.js +323 -323
- package/dist/util/unique/index.js +249 -249
- package/dist/valibot/date.js__ +10 -10
- package/dist/valibot/index.js +9 -9
- package/dist/valibot/url.js +95 -95
- package/dist/valibot/user.js +23 -23
- package/dist/zod/all.js +33 -33
- package/dist/zod/generic.js +11 -11
- package/dist/zod/javascript.js +32 -32
- package/dist/zod/user.js +16 -16
- package/dist/zod/web.js +52 -52
- package/package.json +132 -129
- package/dist/components/layout/grid-layers/GridLayers.svelte__heightFrom__ +0 -372
- package/dist/themes/hkdev/theme.d.ts +0 -234
- package/dist/themes/hkdev/theme.js +0 -235
- package/dist/util/http/test-data__/content-length-test-hkdigital-small.V4HfZyBQ.avif +0 -0
@@ -1,138 +1,138 @@
|
|
1
|
-
/**
|
2
|
-
* @fileoverview In-memory implementation of response cache.
|
3
|
-
*
|
4
|
-
* This implementation provides a simple in-memory cache for HTTP responses
|
5
|
-
* with the same API as IndexedDbCache. It's useful for tests and environments
|
6
|
-
* where persistent storage isn't needed or available.
|
7
|
-
*
|
8
|
-
* @example
|
9
|
-
* // Create a memory cache
|
10
|
-
* const cache = new MemoryResponseCache();
|
11
|
-
*
|
12
|
-
* // Store a response
|
13
|
-
* const response = await fetch('https://example.com/api/data');
|
14
|
-
* await cache.set('api-data', response, { expiresIn: 3600000 });
|
15
|
-
*
|
16
|
-
* // Retrieve a cached response
|
17
|
-
* const cached = await cache.get('api-data');
|
18
|
-
* if (cached) {
|
19
|
-
* console.log(cached.response);
|
20
|
-
* }
|
21
|
-
*/
|
22
|
-
|
23
|
-
/**
|
24
|
-
* @typedef {Object} CacheEntry
|
25
|
-
* @property {Response} response - Cached Response object
|
26
|
-
* @property {Object} metadata - Cache entry metadata
|
27
|
-
* @property {string} url - Original URL
|
28
|
-
* @property {number} timestamp - When the entry was cached
|
29
|
-
* @property {number|null} expires - Expiration timestamp (null if no expiration)
|
30
|
-
* @property {string|null} etag - ETag header if present
|
31
|
-
* @property {string|null} lastModified - Last-Modified header if present
|
32
|
-
*/
|
33
|
-
|
34
|
-
/**
|
35
|
-
* In-memory response cache implementation
|
36
|
-
*/
|
37
|
-
export default class MemoryResponseCache {
|
38
|
-
/**
|
39
|
-
* Create a new in-memory cache
|
40
|
-
*/
|
41
|
-
constructor() {
|
42
|
-
/**
|
43
|
-
* Internal cache storage using Map
|
44
|
-
* @type {Map<string, Object>}
|
45
|
-
*/
|
46
|
-
this.cache = new Map();
|
47
|
-
}
|
48
|
-
|
49
|
-
/**
|
50
|
-
* Get a cached response
|
51
|
-
*
|
52
|
-
* @param {string} key - Cache key
|
53
|
-
* @returns {Promise<CacheEntry|null>} Cache entry or null if not found/expired
|
54
|
-
*/
|
55
|
-
async get(key) {
|
56
|
-
const entry = this.cache.get(key);
|
57
|
-
|
58
|
-
if (!entry) {
|
59
|
-
return null;
|
60
|
-
}
|
61
|
-
|
62
|
-
// Check if expired
|
63
|
-
if (entry.expires && Date.now() > entry.expires) {
|
64
|
-
this.delete(key);
|
65
|
-
return null;
|
66
|
-
}
|
67
|
-
|
68
|
-
// Update last accessed time
|
69
|
-
entry.lastAccessed = Date.now();
|
70
|
-
|
71
|
-
return {
|
72
|
-
response: entry.response.clone(),
|
73
|
-
metadata: entry.metadata,
|
74
|
-
url: entry.url,
|
75
|
-
timestamp: entry.timestamp,
|
76
|
-
expires: entry.expires,
|
77
|
-
etag: entry.etag,
|
78
|
-
lastModified: entry.lastModified
|
79
|
-
};
|
80
|
-
}
|
81
|
-
|
82
|
-
/**
|
83
|
-
* Store a response in the cache
|
84
|
-
*
|
85
|
-
* @param {string} key - Cache key
|
86
|
-
* @param {Response} response - Response to cache
|
87
|
-
* @param {Object} [metadata={}] - Cache metadata
|
88
|
-
* @returns {Promise<void>}
|
89
|
-
*/
|
90
|
-
async set(key, response, metadata = {}) {
|
91
|
-
const now = Date.now();
|
92
|
-
|
93
|
-
// Calculate expiration time if expiresIn is provided
|
94
|
-
let expires = metadata.expires || null;
|
95
|
-
if (!expires && metadata.expiresIn) {
|
96
|
-
expires = now + metadata.expiresIn;
|
97
|
-
}
|
98
|
-
|
99
|
-
this.cache.set(key, {
|
100
|
-
response: response.clone(),
|
101
|
-
metadata,
|
102
|
-
url: response.url,
|
103
|
-
timestamp: now,
|
104
|
-
lastAccessed: now,
|
105
|
-
expires,
|
106
|
-
etag: response.headers.get('ETag'),
|
107
|
-
lastModified: response.headers.get('Last-Modified')
|
108
|
-
});
|
109
|
-
}
|
110
|
-
|
111
|
-
/**
|
112
|
-
* Delete a cached entry
|
113
|
-
*
|
114
|
-
* @param {string} key - Cache key
|
115
|
-
* @returns {Promise<boolean>} True if entry was deleted
|
116
|
-
*/
|
117
|
-
async delete(key) {
|
118
|
-
return this.cache.delete(key);
|
119
|
-
}
|
120
|
-
|
121
|
-
/**
|
122
|
-
* Clear all cached responses
|
123
|
-
*
|
124
|
-
* @returns {Promise<void>}
|
125
|
-
*/
|
126
|
-
async clear() {
|
127
|
-
this.cache.clear();
|
128
|
-
}
|
129
|
-
|
130
|
-
/**
|
131
|
-
* Close the cache (no-op for memory cache, for API compatibility)
|
132
|
-
*
|
133
|
-
* @returns {Promise<void>}
|
134
|
-
*/
|
135
|
-
async close() {
|
136
|
-
// No-op for memory cache
|
137
|
-
}
|
138
|
-
}
|
1
|
+
/**
|
2
|
+
* @fileoverview In-memory implementation of response cache.
|
3
|
+
*
|
4
|
+
* This implementation provides a simple in-memory cache for HTTP responses
|
5
|
+
* with the same API as IndexedDbCache. It's useful for tests and environments
|
6
|
+
* where persistent storage isn't needed or available.
|
7
|
+
*
|
8
|
+
* @example
|
9
|
+
* // Create a memory cache
|
10
|
+
* const cache = new MemoryResponseCache();
|
11
|
+
*
|
12
|
+
* // Store a response
|
13
|
+
* const response = await fetch('https://example.com/api/data');
|
14
|
+
* await cache.set('api-data', response, { expiresIn: 3600000 });
|
15
|
+
*
|
16
|
+
* // Retrieve a cached response
|
17
|
+
* const cached = await cache.get('api-data');
|
18
|
+
* if (cached) {
|
19
|
+
* console.log(cached.response);
|
20
|
+
* }
|
21
|
+
*/
|
22
|
+
|
23
|
+
/**
|
24
|
+
* @typedef {Object} CacheEntry
|
25
|
+
* @property {Response} response - Cached Response object
|
26
|
+
* @property {Object} metadata - Cache entry metadata
|
27
|
+
* @property {string} url - Original URL
|
28
|
+
* @property {number} timestamp - When the entry was cached
|
29
|
+
* @property {number|null} expires - Expiration timestamp (null if no expiration)
|
30
|
+
* @property {string|null} etag - ETag header if present
|
31
|
+
* @property {string|null} lastModified - Last-Modified header if present
|
32
|
+
*/
|
33
|
+
|
34
|
+
/**
|
35
|
+
* In-memory response cache implementation
|
36
|
+
*/
|
37
|
+
export default class MemoryResponseCache {
|
38
|
+
/**
|
39
|
+
* Create a new in-memory cache
|
40
|
+
*/
|
41
|
+
constructor() {
|
42
|
+
/**
|
43
|
+
* Internal cache storage using Map
|
44
|
+
* @type {Map<string, Object>}
|
45
|
+
*/
|
46
|
+
this.cache = new Map();
|
47
|
+
}
|
48
|
+
|
49
|
+
/**
|
50
|
+
* Get a cached response
|
51
|
+
*
|
52
|
+
* @param {string} key - Cache key
|
53
|
+
* @returns {Promise<CacheEntry|null>} Cache entry or null if not found/expired
|
54
|
+
*/
|
55
|
+
async get(key) {
|
56
|
+
const entry = this.cache.get(key);
|
57
|
+
|
58
|
+
if (!entry) {
|
59
|
+
return null;
|
60
|
+
}
|
61
|
+
|
62
|
+
// Check if expired
|
63
|
+
if (entry.expires && Date.now() > entry.expires) {
|
64
|
+
this.delete(key);
|
65
|
+
return null;
|
66
|
+
}
|
67
|
+
|
68
|
+
// Update last accessed time
|
69
|
+
entry.lastAccessed = Date.now();
|
70
|
+
|
71
|
+
return {
|
72
|
+
response: entry.response.clone(),
|
73
|
+
metadata: entry.metadata,
|
74
|
+
url: entry.url,
|
75
|
+
timestamp: entry.timestamp,
|
76
|
+
expires: entry.expires,
|
77
|
+
etag: entry.etag,
|
78
|
+
lastModified: entry.lastModified
|
79
|
+
};
|
80
|
+
}
|
81
|
+
|
82
|
+
/**
|
83
|
+
* Store a response in the cache
|
84
|
+
*
|
85
|
+
* @param {string} key - Cache key
|
86
|
+
* @param {Response} response - Response to cache
|
87
|
+
* @param {Object} [metadata={}] - Cache metadata
|
88
|
+
* @returns {Promise<void>}
|
89
|
+
*/
|
90
|
+
async set(key, response, metadata = {}) {
|
91
|
+
const now = Date.now();
|
92
|
+
|
93
|
+
// Calculate expiration time if expiresIn is provided
|
94
|
+
let expires = metadata.expires || null;
|
95
|
+
if (!expires && metadata.expiresIn) {
|
96
|
+
expires = now + metadata.expiresIn;
|
97
|
+
}
|
98
|
+
|
99
|
+
this.cache.set(key, {
|
100
|
+
response: response.clone(),
|
101
|
+
metadata,
|
102
|
+
url: response.url,
|
103
|
+
timestamp: now,
|
104
|
+
lastAccessed: now,
|
105
|
+
expires,
|
106
|
+
etag: response.headers.get('ETag'),
|
107
|
+
lastModified: response.headers.get('Last-Modified')
|
108
|
+
});
|
109
|
+
}
|
110
|
+
|
111
|
+
/**
|
112
|
+
* Delete a cached entry
|
113
|
+
*
|
114
|
+
* @param {string} key - Cache key
|
115
|
+
* @returns {Promise<boolean>} True if entry was deleted
|
116
|
+
*/
|
117
|
+
async delete(key) {
|
118
|
+
return this.cache.delete(key);
|
119
|
+
}
|
120
|
+
|
121
|
+
/**
|
122
|
+
* Clear all cached responses
|
123
|
+
*
|
124
|
+
* @returns {Promise<void>}
|
125
|
+
*/
|
126
|
+
async clear() {
|
127
|
+
this.cache.clear();
|
128
|
+
}
|
129
|
+
|
130
|
+
/**
|
131
|
+
* Close the cache (no-op for memory cache, for API compatibility)
|
132
|
+
*
|
133
|
+
* @returns {Promise<void>}
|
134
|
+
*/
|
135
|
+
async close() {
|
136
|
+
// No-op for memory cache
|
137
|
+
}
|
138
|
+
}
|
@@ -1,5 +1,5 @@
|
|
1
|
-
|
2
|
-
export { default as MemoryResponseCache } from "./MemoryResponseCache.js";
|
3
|
-
export { default as IndexedDbCache } from "./IndexedDbCache.js";
|
4
|
-
|
5
|
-
export * from './typedef.js';
|
1
|
+
|
2
|
+
export { default as MemoryResponseCache } from "./MemoryResponseCache.js";
|
3
|
+
export { default as IndexedDbCache } from "./IndexedDbCache.js";
|
4
|
+
|
5
|
+
export * from './typedef.js';
|
@@ -1,41 +1,41 @@
|
|
1
|
-
|
2
|
-
/**
|
3
|
-
* @typedef {Object} CacheEntry
|
4
|
-
* @property {Response} response - Cached Response object
|
5
|
-
* @property {Object} metadata - Cache entry metadata
|
6
|
-
* @property {string} url - Original URL
|
7
|
-
* @property {number} timestamp - When the entry was cached
|
8
|
-
* @property {number|null} expires - Expiration timestamp (null if no expiration)
|
9
|
-
* @property {string|null} etag - ETag header if present
|
10
|
-
* @property {string|null} lastModified - Last-Modified header if present
|
11
|
-
* @property {string|null} cacheVersion
|
12
|
-
*/
|
13
|
-
|
14
|
-
/**
|
15
|
-
* @typedef {Object} CacheStorage
|
16
|
-
* @property {function(string): Promise<CacheEntry|null>} get
|
17
|
-
* Get a cached response for a key
|
18
|
-
* @property {function(string, Response, Object): Promise<void>} set
|
19
|
-
* Store a response in the cache
|
20
|
-
* @property {function(string): Promise<boolean>} delete
|
21
|
-
* Remove a cached response
|
22
|
-
* @property {function(): Promise<void>} clear
|
23
|
-
* Clear all cached responses
|
24
|
-
*/
|
25
|
-
|
26
|
-
// > IndexedDB
|
27
|
-
|
28
|
-
/**
|
29
|
-
* @typedef {Object} IDBRequestEvent
|
30
|
-
* @property {IDBRequest} target - The request that generated the event
|
31
|
-
*/
|
32
|
-
|
33
|
-
/**
|
34
|
-
* @typedef {Object} IDBVersionChangeEvent
|
35
|
-
* @property {IDBOpenDBRequest} target - The request that generated the event
|
36
|
-
* @property {IDBTransaction} [target.transaction] - The transaction for database upgrade
|
37
|
-
*/
|
38
|
-
|
39
|
-
// > Export default
|
40
|
-
|
41
|
-
export default {};
|
1
|
+
|
2
|
+
/**
|
3
|
+
* @typedef {Object} CacheEntry
|
4
|
+
* @property {Response} response - Cached Response object
|
5
|
+
* @property {Object} metadata - Cache entry metadata
|
6
|
+
* @property {string} url - Original URL
|
7
|
+
* @property {number} timestamp - When the entry was cached
|
8
|
+
* @property {number|null} expires - Expiration timestamp (null if no expiration)
|
9
|
+
* @property {string|null} etag - ETag header if present
|
10
|
+
* @property {string|null} lastModified - Last-Modified header if present
|
11
|
+
* @property {string|null} cacheVersion
|
12
|
+
*/
|
13
|
+
|
14
|
+
/**
|
15
|
+
* @typedef {Object} CacheStorage
|
16
|
+
* @property {function(string): Promise<CacheEntry|null>} get
|
17
|
+
* Get a cached response for a key
|
18
|
+
* @property {function(string, Response, Object): Promise<void>} set
|
19
|
+
* Store a response in the cache
|
20
|
+
* @property {function(string): Promise<boolean>} delete
|
21
|
+
* Remove a cached response
|
22
|
+
* @property {function(): Promise<void>} clear
|
23
|
+
* Clear all cached responses
|
24
|
+
*/
|
25
|
+
|
26
|
+
// > IndexedDB
|
27
|
+
|
28
|
+
/**
|
29
|
+
* @typedef {Object} IDBRequestEvent
|
30
|
+
* @property {IDBRequest} target - The request that generated the event
|
31
|
+
*/
|
32
|
+
|
33
|
+
/**
|
34
|
+
* @typedef {Object} IDBVersionChangeEvent
|
35
|
+
* @property {IDBOpenDBRequest} target - The request that generated the event
|
36
|
+
* @property {IDBTransaction} [target.transaction] - The transaction for database upgrade
|
37
|
+
*/
|
38
|
+
|
39
|
+
// > Export default
|
40
|
+
|
41
|
+
export default {};
|