mirror of
https://github.com/bobwen-dev/react-templates
synced 2025-04-12 00:56:39 +02:00
48 lines
1.1 KiB
JavaScript
48 lines
1.1 KiB
JavaScript
'use strict'
|
|
const css = require('css')
|
|
const _ = require('lodash')
|
|
const rtnData = require('./rt-style-support-data.js')
|
|
|
|
|
|
const templateCommonJSTemplate = _.template(
|
|
`'use strict';
|
|
var style = <%= body %>;
|
|
module.exports = style;
|
|
`)
|
|
|
|
function convert(text) {
|
|
return templateCommonJSTemplate({body: convertBody(text)})
|
|
}
|
|
|
|
function convertBody(text) {
|
|
//source
|
|
const obj = css.parse(text, {silent: false})
|
|
const result = _.reduce(obj.stylesheet.rules, processRule2, {})
|
|
return JSON.stringify(result, undefined, 2)
|
|
}
|
|
|
|
function processRule2(result, rule) {
|
|
const name = rule.selectors[0].substring(1)
|
|
result[name] = _.reduce(rule.declarations, processDeclaration, {})
|
|
return result
|
|
}
|
|
|
|
function processDeclaration(result, dec) {
|
|
const prop = _.camelCase(dec.property)
|
|
result[prop] = convertValue(prop, dec.value)
|
|
return result
|
|
}
|
|
|
|
function convertValue(p, v) {
|
|
if (rtnData[p] === 'string') {
|
|
return v
|
|
}
|
|
// TODO remove units
|
|
return parseInt(v.match(/(\d+)/g)[0], 10)
|
|
}
|
|
|
|
module.exports = {
|
|
convert,
|
|
convertBody
|
|
}
|