@hkdigital/lib-sveltekit 0.1.102 → 0.1.103
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.
@@ -348,9 +348,13 @@ export default class IndexedDbCache {
|
|
348
348
|
}
|
349
349
|
|
350
350
|
// Clone Blob before reference becomes invalid
|
351
|
-
let
|
352
|
-
|
353
|
-
|
351
|
+
let responseBody = entry.body;
|
352
|
+
|
353
|
+
if (entry.bodyType === 'arrayBuffer') {
|
354
|
+
// Reconstruct Blob from ArrayBuffer
|
355
|
+
responseBody = new Blob([entry.body], {
|
356
|
+
type: entry.contentType || 'application/octet-stream'
|
357
|
+
});
|
354
358
|
}
|
355
359
|
|
356
360
|
// Check if expired
|
@@ -363,7 +367,7 @@ export default class IndexedDbCache {
|
|
363
367
|
return;
|
364
368
|
}
|
365
369
|
|
366
|
-
// Update access timestamp
|
370
|
+
// Update access timestamp
|
367
371
|
await this._updateAccessTime(key).catch((err) => {
|
368
372
|
console.error('Failed to update access time:', err);
|
369
373
|
});
|
@@ -396,7 +400,7 @@ export default class IndexedDbCache {
|
|
396
400
|
// Create Response safely
|
397
401
|
let response;
|
398
402
|
try {
|
399
|
-
response = new Response(
|
403
|
+
response = new Response(responseBody, {
|
400
404
|
status: entry.status,
|
401
405
|
statusText: entry.statusText,
|
402
406
|
headers: responseHeaders
|
@@ -458,7 +462,6 @@ export default class IndexedDbCache {
|
|
458
462
|
try {
|
459
463
|
// Postpone cleanup when storing items
|
460
464
|
this._postponeCleanup();
|
461
|
-
|
462
465
|
const db = await this.dbPromise;
|
463
466
|
|
464
467
|
// Clone the response to avoid consuming it
|
@@ -466,27 +469,39 @@ export default class IndexedDbCache {
|
|
466
469
|
|
467
470
|
// Extract response data - handle both browser Response and test mocks
|
468
471
|
let body;
|
472
|
+
let bodyType = 'arrayBuffer'; // Default to arrayBuffer
|
473
|
+
let contentType = '';
|
474
|
+
|
469
475
|
try {
|
476
|
+
contentType = clonedResponse.headers.get('content-type') || '';
|
477
|
+
|
470
478
|
// Try standard Response.blob() first (browser environment)
|
471
|
-
|
479
|
+
const blob = await clonedResponse.blob();
|
480
|
+
|
481
|
+
// Convert to ArrayBuffer
|
482
|
+
body = await blob.arrayBuffer();
|
483
|
+
|
472
484
|
} catch (err) {
|
473
485
|
// Fallback for test environment
|
474
|
-
if (
|
475
|
-
|
486
|
+
if (typeof clonedResponse.body === 'string') {
|
487
|
+
const blob = new Blob([clonedResponse.body]);
|
488
|
+
body = await blob.arrayBuffer();
|
489
|
+
} else if (
|
476
490
|
clonedResponse.body instanceof ArrayBuffer ||
|
477
491
|
clonedResponse.body instanceof Uint8Array
|
478
492
|
) {
|
479
|
-
|
493
|
+
// Already have array-like data
|
494
|
+
body = clonedResponse.body instanceof ArrayBuffer ?
|
495
|
+
clonedResponse.body :
|
496
|
+
clonedResponse.body.buffer;
|
480
497
|
} else {
|
481
|
-
// Last resort -
|
482
|
-
body =
|
498
|
+
// Last resort - create empty ArrayBuffer
|
499
|
+
body = new ArrayBuffer(0);
|
483
500
|
}
|
484
501
|
}
|
485
502
|
|
486
503
|
// Extract headers
|
487
|
-
|
488
504
|
let headers = [];
|
489
|
-
|
490
505
|
try {
|
491
506
|
headers = Array.from(clonedResponse.headers.entries());
|
492
507
|
} catch (err) {
|
@@ -495,21 +510,9 @@ export default class IndexedDbCache {
|
|
495
510
|
headers = [];
|
496
511
|
}
|
497
512
|
|
498
|
-
// let headers = [];
|
499
|
-
// try {
|
500
|
-
// headers = Array.from(clonedResponse.headers.entries());
|
501
|
-
// } catch (err) {
|
502
|
-
// // Fallback for test environment - extract headers if available
|
503
|
-
// if (clonedResponse._headers &&
|
504
|
-
// typeof clonedResponse._headers.entries === 'function') {
|
505
|
-
// headers = Array.from(clonedResponse._headers.entries());
|
506
|
-
// }
|
507
|
-
// }
|
508
|
-
|
509
513
|
// Calculate rough size estimate
|
510
514
|
const headerSize = JSON.stringify(headers).length * 2;
|
511
|
-
const size =
|
512
|
-
/** @type {Blob} */ (body.size || 0) + headerSize + key.length * 2;
|
515
|
+
const size = body.byteLength + headerSize + key.length * 2;
|
513
516
|
|
514
517
|
const entry = {
|
515
518
|
key,
|
@@ -518,6 +521,8 @@ export default class IndexedDbCache {
|
|
518
521
|
statusText: clonedResponse.statusText || '',
|
519
522
|
headers,
|
520
523
|
body,
|
524
|
+
bodyType,
|
525
|
+
contentType,
|
521
526
|
metadata,
|
522
527
|
timestamp: Date.now(),
|
523
528
|
lastAccessed: Date.now(),
|