jannn / web /utils /jsonToCssVariables.ts
oldg591's picture
fc
3459571
Raw History Blame Contribute Delete
934 Bytes
export type JsonObject = {
[key: string]: string | number | JsonObject
}
export default function cssVars(variables: JsonObject | string) {
const variablesObject: JsonObject =
typeof variables === 'string' ? JSON.parse(variables) : variables
return generateVariables('', variablesObject)
}
function generateVariables(path: string, object: JsonObject): string {
let styles = ''
Object.entries(object).forEach(([key, value]) => {
if (typeof value === 'object') {
styles += generateVariables(`${join(path, key)}`, value)
} else {
styles += `--${join(path, key)}: ${value};`
}
})
return styles
}
function join(path: string, key: string): string {
if (!path) return key
// ignore __default property and use parent key instead
// e.g. blue: { default: "blue", light: "lightblue" } => --blue: blue; --blue-light: lightblue;
if (key === '__default') return path
return `${path}-${key}`
}