@livekit/components-core
Version:
This package is a wrapper around the [livekit/client-sdk-js](https://github.com/livekit/client-sdk-js) package. It transforms the event based logic into simple to use observable state and component level APIs. This package is the core for all framework sp
65 lines (58 loc) • 1.82 kB
text/typescript
import { log } from '../logger';
type JsonPrimitive = string | number | boolean | null;
type JsonArray = JsonValue[];
type JsonObject = { [key: string]: JsonValue };
type JsonValue = JsonPrimitive | JsonArray | JsonObject;
/**
* Persists a serializable object to local storage associated with the specified key.
* @internal
*/
function saveToLocalStorage<T extends JsonValue>(key: string, value: T): void {
if (typeof localStorage === 'undefined') {
log.error('Local storage is not available.');
return;
}
try {
if (value) {
const nonEmptySettings = Object.fromEntries(
Object.entries(value).filter(([, value]) => value !== ''),
);
localStorage.setItem(key, JSON.stringify(nonEmptySettings));
}
} catch (error) {
log.error(`Error setting item to local storage: ${error}`);
}
}
/**
* Retrieves a serializable object from local storage by its key.
* @internal
*/
function loadFromLocalStorage<T extends JsonValue>(key: string): T | undefined {
if (typeof localStorage === 'undefined') {
log.error('Local storage is not available.');
return undefined;
}
try {
const item = localStorage.getItem(key);
if (!item) {
log.warn(`Item with key ${key} does not exist in local storage.`);
return undefined;
}
return JSON.parse(item);
} catch (error) {
log.error(`Error getting item from local storage: ${error}`);
return undefined;
}
}
/**
* Generate a pair of functions to load and save a value of type T to local storage.
* @internal
*/
export function createLocalStorageInterface<T extends JsonValue>(
key: string,
): { load: () => T | undefined; save: (value: T) => void } {
return {
load: () => loadFromLocalStorage<T>(key),
save: (value: T) => saveToLocalStorage<T>(key, value),
};
}