1 | 'use strict';
|
2 | const css = require('css');
|
3 | const _ = require('lodash');
|
4 | const rtnData = require('./rt-style-support-data.js');
|
5 |
|
6 |
|
7 | const templateCommonJSTemplate = _.template(
|
8 | `'use strict';
|
9 | var style = <%= body %>;
|
10 | module.exports = style;
|
11 | `);
|
12 |
|
13 | function convert(text) {
|
14 | return templateCommonJSTemplate({body: convertBody(text)});
|
15 | }
|
16 |
|
17 | function convertBody(text) {
|
18 |
|
19 | const obj = css.parse(text, {silent: false});
|
20 | const result = _.reduce(obj.stylesheet.rules, processRule2, {});
|
21 | return JSON.stringify(result, undefined, 2);
|
22 | }
|
23 |
|
24 | function processRule2(result, rule) {
|
25 | const name = rule.selectors[0].substring(1);
|
26 | result[name] = _.reduce(rule.declarations, processDeclaration, {});
|
27 | return result;
|
28 | }
|
29 |
|
30 | function processDeclaration(result, dec) {
|
31 | const prop = _.camelCase(dec.property);
|
32 | result[prop] = convertValue(prop, dec.value);
|
33 | return result;
|
34 | }
|
35 |
|
36 | function convertValue(p, v) {
|
37 | if (rtnData[p] === 'string') {
|
38 | return v;
|
39 | }
|
40 |
|
41 | return parseInt(v.match(/(\d+)/g)[0], 10);
|
42 | }
|
43 |
|
44 | module.exports = {
|
45 | convert,
|
46 | convertBody
|
47 | };
|