88
99'use strict' ;
1010
11- /* eslint-env commonjs */
12-
13- /*
14- * Dependencies.
15- */
16-
11+ /* Dependencies. */
1712var css = require ( 'css' ) ;
1813var paramCase = require ( 'param-case' ) ;
1914var camelCase = require ( 'camelcase' ) ;
2015var locations = require ( 'vfile-location' ) ;
2116var vendors = require ( 'vendors' ) ;
2217
23- /*
24- * Constants.
25- */
18+ /* Expose. */
19+ exports . parse = parse ;
20+ exports . stringify = stringify ;
2621
22+ /* Constants. */
2723var EMPTY = '' ;
2824
29- /*
30- * Characters.
31- */
32-
25+ /* Characters. */
3326var C_SPACE = ' ' ;
3427var C_DASH = '-' ;
3528var C_UNDERSCORE = '_' ;
3629var C_SEMI_COLON = ';' ;
3730var C_COLON = ':' ;
3831
39- /*
40- * Suffix to wrap around declarations.
41- */
42-
32+ /* Suffix to wrap around declarations. */
4333var PREFIX = 'i{' ;
4434var SUFFIX = '}' ;
4535
46- /*
47- * Configuration for `reworkcss/css`.
48- */
49-
50- var CSS_OPTIONS = {
51- 'silent' : true
52- } ;
53-
54- /**
55- * Transform `cssName` to `javaScriptName`.
56- *
57- * @param {string } cssName - Dash-cased name.
58- * @return {string } - Camel-cased name.
59- */
60- function toJavaScriptName ( cssName ) {
61- var char = cssName . charAt ( 0 ) ;
62-
63- return camelCase ( cssName . slice (
64- char === C_DASH || char === C_UNDERSCORE ? 1 : 0
65- ) ) ;
66- }
67-
68- /**
69- * Transform `javaScriptName` to `cssName`.
70- *
71- * @param {string } javaScriptName - Camel-cased name.
72- * @return {string } - Dash-cased name.
73- */
74- function toCSSName ( javaScriptName ) {
75- var cssName = paramCase ( javaScriptName ) ;
76- var pos = cssName . indexOf ( C_DASH ) ;
77- var subvalue = pos !== - 1 ? cssName . slice ( 0 , pos ) : null ;
78-
79- if ( subvalue && vendors . indexOf ( subvalue ) !== - 1 ) {
80- cssName = C_DASH + cssName ;
81- }
82-
83- return cssName ;
84- }
36+ /* Configuration for `reworkcss/css`. */
37+ var CSS_OPTIONS = { silent : true } ;
8538
8639/**
8740 * Parse CSS declarations to an object.
@@ -93,53 +46,53 @@ function toCSSName(javaScriptName) {
9346 * @return {Object } - Declarations as object.
9447 */
9548function parse ( value , options ) {
96- var input = String ( value || EMPTY ) ;
97- var max = input . length ;
98- var declarations = { } ;
99- var settings = options || { } ;
100- var warn = settings . warning ;
101- var location ;
102- var sheet ;
103- var results ;
104- var warnings ;
105- var length ;
106- var index ;
107- var result ;
108- var warning ;
109- var offset ;
110-
111- input = PREFIX + input + SUFFIX ;
112- location = locations ( input ) ;
113-
114- sheet = css . parse ( input , CSS_OPTIONS ) . stylesheet ;
115- results = sheet . rules [ 0 ] . declarations || [ ] ;
116- warnings = sheet . parsingErrors ;
117-
118- index = - 1 ;
119- length = results . length ;
120-
121- while ( ++ index < length ) {
122- result = results [ index ] ;
123-
124- if ( result . type === 'declaration' ) {
125- declarations [ toJavaScriptName ( result . property ) ] = result . value ;
126- }
49+ var input = String ( value || EMPTY ) ;
50+ var max = input . length ;
51+ var declarations = { } ;
52+ var settings = options || { } ;
53+ var warn = settings . warning ;
54+ var location ;
55+ var sheet ;
56+ var results ;
57+ var warnings ;
58+ var length ;
59+ var index ;
60+ var result ;
61+ var warning ;
62+ var offset ;
63+
64+ input = PREFIX + input + SUFFIX ;
65+ location = locations ( input ) ;
66+
67+ sheet = css . parse ( input , CSS_OPTIONS ) . stylesheet ;
68+ results = sheet . rules [ 0 ] . declarations || [ ] ;
69+ warnings = sheet . parsingErrors ;
70+
71+ index = - 1 ;
72+ length = results . length ;
73+
74+ while ( ++ index < length ) {
75+ result = results [ index ] ;
76+
77+ if ( result . type === 'declaration' ) {
78+ declarations [ toJavaScriptName ( result . property ) ] = result . value ;
12779 }
80+ }
12881
129- index = - 1 ;
130- length = warn && warnings . length ;
82+ index = - 1 ;
83+ length = warn && warnings . length ;
13184
132- while ( ++ index < length ) {
133- warning = warnings [ index ] ;
134- offset = Math . min ( max , location . toOffset ( {
135- ' line' : warning . line ,
136- ' column' : warning . column
137- } ) - PREFIX . length ) ;
85+ while ( ++ index < length ) {
86+ warning = warnings [ index ] ;
87+ offset = Math . min ( max , location . toOffset ( {
88+ line : warning . line ,
89+ column : warning . column
90+ } ) - PREFIX . length ) ;
13891
139- warn ( warning . reason , offset ) ;
140- }
92+ warn ( warning . reason , offset ) ;
93+ }
14194
142- return declarations ;
95+ return declarations ;
14396}
14497
14598/**
@@ -149,28 +102,51 @@ function parse(value, options) {
149102 * @return {string } - Declarations as string.
150103 */
151104function stringify ( values ) {
152- var results = [ ] ;
153- var key ;
154- var value ;
105+ var results = [ ] ;
106+ var key ;
107+ var value ;
155108
156- for ( key in values ) {
157- value = values [ key ] ;
109+ for ( key in values ) {
110+ value = values [ key ] ;
158111
159- if ( value !== null && value !== undefined ) {
160- results . push ( [ toCSSName ( key ) , value ] . join ( C_COLON + C_SPACE ) ) ;
161- }
112+ if ( value !== null && value !== undefined ) {
113+ results . push ( [ toCSSName ( key ) , value ] . join ( C_COLON + C_SPACE ) ) ;
162114 }
115+ }
163116
164- value = results . join ( C_SEMI_COLON + C_SPACE ) ;
117+ value = results . join ( C_SEMI_COLON + C_SPACE ) ;
165118
166- return value ? value + C_SEMI_COLON : EMPTY ;
119+ return value ? value + C_SEMI_COLON : EMPTY ;
167120}
168121
169- /*
170- * Expose.
122+ /**
123+ * Transform `cssName` to `javaScriptName`.
124+ *
125+ * @param {string } cssName - Dash-cased name.
126+ * @return {string } - Camel-cased name.
171127 */
128+ function toJavaScriptName ( cssName ) {
129+ var char = cssName . charAt ( 0 ) ;
172130
173- module . exports = {
174- 'parse' : parse ,
175- 'stringify' : stringify
176- } ;
131+ return camelCase ( cssName . slice (
132+ char === C_DASH || char === C_UNDERSCORE ? 1 : 0
133+ ) ) ;
134+ }
135+
136+ /**
137+ * Transform `javaScriptName` to `cssName`.
138+ *
139+ * @param {string } javaScriptName - Camel-cased name.
140+ * @return {string } - Dash-cased name.
141+ */
142+ function toCSSName ( javaScriptName ) {
143+ var cssName = paramCase ( javaScriptName ) ;
144+ var pos = cssName . indexOf ( C_DASH ) ;
145+ var subvalue = pos === - 1 ? null : cssName . slice ( 0 , pos ) ;
146+
147+ if ( subvalue && vendors . indexOf ( subvalue ) !== - 1 ) {
148+ cssName = C_DASH + cssName ;
149+ }
150+
151+ return cssName ;
152+ }
0 commit comments