From fff721dd185f5b97f7ae7a6e64189e55887ff590 Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Sun, 05 Jul 2026 18:36:57 +0000
Subject: [PATCH] =Cleaning up the Square integration (still a bit more to do yet). Also majorly overhauled /rest/ files to ignore a rest request 'user' paramater, and rely on get_current_user_id() instead.
---
assets/js/concise/SimpleCache.js | 40 ++++++++++++++++++++++++++++++++++------
1 files changed, 34 insertions(+), 6 deletions(-)
diff --git a/assets/js/concise/SimpleCache.js b/assets/js/concise/SimpleCache.js
index 30f074c..afd488d 100644
--- a/assets/js/concise/SimpleCache.js
+++ b/assets/js/concise/SimpleCache.js
@@ -18,7 +18,7 @@
constructor(base, config = {}) {
this.base = base;
this.config = {
- namespace: 'jvb_cache',
+ namespace: `${jvbBase.base}cache`,
TTL: 3600000,
maxSize: 100,
...config
@@ -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