export function needsQuotes(str: string) { try { // eslint-disable-next-line @typescript-eslint/no-implied-eval new Function(`var obj = { ${str}: 1 };`); return false; } catch { return true; } } export function wrapAttribute(name: string) { return needsQuotes(name) ? `["${name}"]` : `.${name}`; } export function wrapKeyName(name: string) { return needsQuotes(name) ? `["${name}"]` : `${name}`; }