From 715e26a9eb219808d5c899d418e1d596f9318f61 Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Mon, 22 Jun 2026 16:59:19 +0000
Subject: [PATCH] =Debugging and implementing the Checkout.js logic. Will be uploading to test integration with square next.
---
assets/js/concise/SimpleCache.js | 38 +++++++++++++++++++++++++++++++++-----
1 files changed, 33 insertions(+), 5 deletions(-)
diff --git a/assets/js/concise/SimpleCache.js b/assets/js/concise/SimpleCache.js
index e33fd14..afd488d 100644
--- a/assets/js/concise/SimpleCache.js
+++ b/assets/js/concise/SimpleCache.js
@@ -45,6 +45,9 @@
/**
* Get a setting value
*/
+ /**
+ * Get a setting value
+ */
get(key) {
//Check memory cache first
if (this._cache.has(key)) {
@@ -54,11 +57,11 @@
let cacheKey = `${this.base}_${key}`;
let item;
try {
- item = localStorage.getItem(cacheKey);
+ item = localStorage.getItem(cacheKey);
if (!item) {
return null;
}
- item = JSON.parse(item);
+ item = this._revive(JSON.parse(item));
} catch (error) {
console.warn('Error getting from localStorage:', error);
return null;
@@ -76,15 +79,16 @@
set(key, value) {
this._cache.set(key, value);
let cacheKey = `${this.base}_${key}`;
+ let serialized = JSON.stringify(this._serialize(value));
try {
- localStorage.setItem(cacheKey, JSON.stringify(value));
+ localStorage.setItem(cacheKey, serialized);
} catch (error) {
// Handle quota exceeded
if (error instanceof DOMException && error.code === 22) {
this.clearOldestLocalStorageItems();
try {
- localStorage.setItem(key, JSON.stringify(item));
+ localStorage.setItem(cacheKey, serialized);
} catch (retryError) {
console.warn('Still failed to set localStorage item after cleanup:', retryError);
}
@@ -97,6 +101,30 @@
this.notify('cache-saved', { key, value });
}
+ /**
+ * Tag Maps/Sets so they survive JSON round-tripping
+ */
+ _serialize(value) {
+ if (value instanceof Map) {
+ return { __type: 'Map', value: Array.from(value.entries()) };
+ }
+ if (value instanceof Set) {
+ return { __type: 'Set', value: Array.from(value.values()) };
+ }
+ return value;
+ }
+
+ /**
+ * Revive a parsed value, restoring Maps/Sets if tagged
+ */
+ _revive(parsed) {
+ if (parsed && typeof parsed === 'object') {
+ if (parsed.__type === 'Map') return new Map(parsed.value);
+ if (parsed.__type === 'Set') return new Set(parsed.value);
+ }
+ return parsed;
+ }
+
remove(key) {
let cacheKey = `${this.base}_${key}`;
try {
@@ -150,7 +178,7 @@
let cleanKey = key.replace(`${this.base}_`, '');
try {
// Parse the JSON value before caching
- const value = JSON.parse(localStorage.getItem(key));
+ const value = this._revive(JSON.parse(localStorage.getItem(key)));
this._cache.set(cleanKey, value);
} catch (error) {
console.warn(`Failed to parse cached value for ${key}:`, error);
--
Gitblit v1.10.0