pkg-components
Version:
37 lines (29 loc) • 1.37 kB
JavaScript
const fs = require('fs')
const { decisions } = require('./tokens')
const toKebabCase = (string) => { return string.replace(/([A-Z])([A-Z])/g, '$1-$2').replace(/([a-z])([A-Z])/g, '$1-$2').replace(/[\s_]+/g, '-').toLowerCase() }
const cleanLines = (string = '') => { return string.trim().replace(/^\n\n/gm, '\n') }
function transformTokens(parentKey, object) {
const objectKeys = Object.keys(object)
return objectKeys.reduce((transformedTokens, objectKey) => {
const value = object[objectKey]
const customProperty = parentKey
? toKebabCase(`${parentKey}-${objectKey}`)
: toKebabCase(`${objectKey}`)
if (Array.isArray(value)) {
return `${transformedTokens}\n --${customProperty}: ${value.join(', ')};`
} else if (typeof value === 'object') {
return `${transformedTokens}\n${transformTokens(customProperty, value)}`
}
const label = `--${parentKey}-${toKebabCase(objectKey)}`
return `${transformedTokens}\n ${label}: ${value};`
}, '')
}
function buildTokens() {
const transformedDecisions = transformTokens(null, decisions)
const customProperties = `${transformedDecisions}`
const data = `:root {\n ${cleanLines(customProperties)}\n}\n`
fs.writeFile('./stories/assets/public/global.css', data, 'utf8', (error) => {
if (error) throw error
})
}
buildTokens()