@primer/primitives
Version:
Typography, spacing, and color primitives for Primer design system
23 lines (22 loc) • 672 B
JavaScript
/**
* jsonToNestedValue
* @description creates a nested json tree where every final value is the `.value` prop
* @param token StyleDictionary.DesignToken
* @returns nested json three
*/
export const transformTokens = (token, transform) => {
// is non-object value
if (typeof token !== 'object')
return token;
// is design token
if ('$value' in token || 'value' in token) {
return transform(token);
}
// is obj
const nextObj = {};
for (const [prop, value] of Object.entries(token)) {
// @ts-expect-error: can't predict type
nextObj[prop] = transformTokens(value, transform);
}
return nextObj;
};