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