@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 clonedBody = entry.body;
352
- if (entry.body instanceof Blob) {
353
- clonedBody = entry.body.slice(0, entry.body.size, entry.body.type);
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 (should finish before result is returned)
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(clonedBody, {
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
- body = await clonedResponse.blob();
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
- 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 (
476
490
  clonedResponse.body instanceof ArrayBuffer ||
477
491
  clonedResponse.body instanceof Uint8Array
478
492
  ) {
479
- body = new Blob([clonedResponse.body]);
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 - store as-is and hope it's serializable
482
- body = clonedResponse.body || new Blob([]);
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(),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hkdigital/lib-sveltekit",
3
- "version": "0.1.102",
3
+ "version": "0.1.103",
4
4
  "author": {
5
5
  "name": "HKdigital",
6
6
  "url": "https://hkdigital.nl"