import { StringExt } from "../string"; const dataset: WeakMap> = new WeakMap(); export function getData(elem: Element, name: string) { const key = StringExt.camelCase(name); const cache = dataset.get(elem); if (cache) { return cache[key]; } } export function setData(elem: Element, name: string, value: any) { const key = StringExt.camelCase(name); const cache = dataset.get(elem); if (cache) { cache[key] = value; } else { dataset.set(elem, { [key]: value, }); } } export function data(elem: Element): Record | undefined; export function data(elem: Element, name: string): any; export function data(elem: Element, name: string, value: any): void; export function data(elem: Element, name: Record): void; export function data( elem: Element, name?: string | Record, value?: any, ) { if (!name) { return dataset.get(elem); } if (typeof name === "string") { if (value === undefined) { return getData(elem, name); } setData(elem, name, value); return; } // eslint-disable-next-line for (const key in name) { data(elem, key, name[key]); } }