feat(projects): Add prefix to local storage

This commit is contained in:
Azir 2024-04-25 04:44:47 +08:00 committed by 恕瑞玛的皇帝
parent c347528bbb
commit 1fc34cc5f8
4 changed files with 14 additions and 7 deletions

3
.env
View File

@ -43,3 +43,6 @@ VITE_STATIC_SUPER_ROLE=R_SUPER
# sourcemap # sourcemap
VITE_SOURCE_MAP=N VITE_SOURCE_MAP=N
# Used to differentiate storage across different domains
VITE_STORAGE_PREFIX=SOY_

View File

@ -3,7 +3,7 @@ import localforage from 'localforage';
/** The storage type */ /** The storage type */
export type StorageType = 'local' | 'session'; export type StorageType = 'local' | 'session';
export function createStorage<T extends object>(type: StorageType) { export function createStorage<T extends object>(type: StorageType, storagePrefix: string) {
const stg = type === 'session' ? window.sessionStorage : window.localStorage; const stg = type === 'session' ? window.sessionStorage : window.localStorage;
const storage = { const storage = {
@ -16,7 +16,7 @@ export function createStorage<T extends object>(type: StorageType) {
set<K extends keyof T>(key: K, value: T[K]) { set<K extends keyof T>(key: K, value: T[K]) {
const json = JSON.stringify(value); const json = JSON.stringify(value);
stg.setItem(key as string, json); stg.setItem(`${storagePrefix}${key as string}`, json);
}, },
/** /**
* Get session * Get session
@ -24,7 +24,7 @@ export function createStorage<T extends object>(type: StorageType) {
* @param key Session key * @param key Session key
*/ */
get<K extends keyof T>(key: K): T[K] | null { get<K extends keyof T>(key: K): T[K] | null {
const json = stg.getItem(key as string); const json = stg.getItem(`${storagePrefix}${key as string}`);
if (json) { if (json) {
let storageData: T[K] | null = null; let storageData: T[K] | null = null;
@ -37,12 +37,12 @@ export function createStorage<T extends object>(type: StorageType) {
} }
} }
stg.removeItem(key as string); stg.removeItem(`${storagePrefix}${key as string}`);
return null; return null;
}, },
remove(key: keyof T) { remove(key: keyof T) {
stg.removeItem(key as string); stg.removeItem(`${storagePrefix}${key as string}`);
}, },
clear() { clear() {
stg.clear(); stg.clear();

View File

@ -101,5 +101,7 @@ declare namespace Env {
* @link https://docs.iconify.design/api/providers.html * @link https://docs.iconify.design/api/providers.html
*/ */
readonly VITE_ICONIFY_URL?: string; readonly VITE_ICONIFY_URL?: string;
/** Used to differentiate storage across different domains */
readonly VITE_STORAGE_PREFIX?: string;
} }
} }

View File

@ -1,7 +1,9 @@
import { createLocalforage, createStorage } from '@sa/utils'; import { createLocalforage, createStorage } from '@sa/utils';
export const localStg = createStorage<StorageType.Local>('local'); const storagePrefix = import.meta.env.VITE_STORAGE_PREFIX || '';
export const sessionStg = createStorage<StorageType.Session>('session'); export const localStg = createStorage<StorageType.Local>('local', storagePrefix);
export const sessionStg = createStorage<StorageType.Session>('session', storagePrefix);
export const localforage = createLocalforage<StorageType.Local>('local'); export const localforage = createLocalforage<StorageType.Local>('local');