@hkdigital/lib-sveltekit 0.1.101 → 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.
@@ -347,6 +347,16 @@ export default class IndexedDbCache {
347
347
  return;
348
348
  }
349
349
 
350
+ // Clone Blob before reference becomes invalid
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
+ });
358
+ }
359
+
350
360
  // Check if expired
351
361
  if (entry.expires && Date.now() > entry.expires) {
352
362
  // Delete expired entry (but don't block)
@@ -357,7 +367,7 @@ export default class IndexedDbCache {
357
367
  return;
358
368
  }
359
369
 
360
- // Update access timestamp (should finish before result is returned)
370
+ // Update access timestamp
361
371
  await this._updateAccessTime(key).catch((err) => {
362
372
  console.error('Failed to update access time:', err);
363
373
  });
@@ -387,13 +397,6 @@ export default class IndexedDbCache {
387
397
  try {
388
398
  let responseHeaders = new Headers(entry.headers);
389
399
 
390
- let responseBody = entry.body;
391
-
392
- if (responseBody instanceof Blob) {
393
- // Clone the blob to ensure it's not consumed
394
- responseBody = entry.body.slice(0, entry.body.size, entry.body.type);
395
- }
396
-
397
400
  // Create Response safely
398
401
  let response;
399
402
  try {
@@ -459,7 +462,6 @@ export default class IndexedDbCache {
459
462
  try {
460
463
  // Postpone cleanup when storing items
461
464
  this._postponeCleanup();
462
-
463
465
  const db = await this.dbPromise;
464
466
 
465
467
  // Clone the response to avoid consuming it
@@ -467,27 +469,39 @@ export default class IndexedDbCache {
467
469
 
468
470
  // Extract response data - handle both browser Response and test mocks
469
471
  let body;
472
+ let bodyType = 'arrayBuffer'; // Default to arrayBuffer
473
+ let contentType = '';
474
+
470
475
  try {
476
+ contentType = clonedResponse.headers.get('content-type') || '';
477
+
471
478
  // Try standard Response.blob() first (browser environment)
472
- body = await clonedResponse.blob();
479
+ const blob = await clonedResponse.blob();
480
+
481
+ // Convert to ArrayBuffer
482
+ body = await blob.arrayBuffer();
483
+
473
484
  } catch (err) {
474
485
  // Fallback for test environment
475
- if (
476
- typeof clonedResponse.body === 'string' ||
486
+ if (typeof clonedResponse.body === 'string') {
487
+ const blob = new Blob([clonedResponse.body]);
488
+ body = await blob.arrayBuffer();
489
+ } else if (
477
490
  clonedResponse.body instanceof ArrayBuffer ||
478
491
  clonedResponse.body instanceof Uint8Array
479
492
  ) {
480
- body = new Blob([clonedResponse.body]);
493
+ // Already have array-like data
494
+ body = clonedResponse.body instanceof ArrayBuffer ?
495
+ clonedResponse.body :
496
+ clonedResponse.body.buffer;
481
497
  } else {
482
- // Last resort - store as-is and hope it's serializable
483
- body = clonedResponse.body || new Blob([]);
498
+ // Last resort - create empty ArrayBuffer
499
+ body = new ArrayBuffer(0);
484
500
  }
485
501
  }
486
502
 
487
503
  // Extract headers
488
-
489
504
  let headers = [];
490
-
491
505
  try {
492
506
  headers = Array.from(clonedResponse.headers.entries());
493
507
  } catch (err) {
@@ -496,21 +510,9 @@ export default class IndexedDbCache {
496
510
  headers = [];
497
511
  }
498
512
 
499
- // let headers = [];
500
- // try {
501
- // headers = Array.from(clonedResponse.headers.entries());
502
- // } catch (err) {
503
- // // Fallback for test environment - extract headers if available
504
- // if (clonedResponse._headers &&
505
- // typeof clonedResponse._headers.entries === 'function') {
506
- // headers = Array.from(clonedResponse._headers.entries());
507
- // }
508
- // }
509
-
510
513
  // Calculate rough size estimate
511
514
  const headerSize = JSON.stringify(headers).length * 2;
512
- const size =
513
- /** @type {Blob} */ (body.size || 0) + headerSize + key.length * 2;
515
+ const size = body.byteLength + headerSize + key.length * 2;
514
516
 
515
517
  const entry = {
516
518
  key,
@@ -519,6 +521,8 @@ export default class IndexedDbCache {
519
521
  statusText: clonedResponse.statusText || '',
520
522
  headers,
521
523
  body,
524
+ bodyType,
525
+ contentType,
522
526
  metadata,
523
527
  timestamp: Date.now(),
524
528
  lastAccessed: Date.now(),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hkdigital/lib-sveltekit",
3
- "version": "0.1.101",
3
+ "version": "0.1.103",
4
4
  "author": {
5
5
  "name": "HKdigital",
6
6
  "url": "https://hkdigital.nl"