Adds a more performant version of rebuilder.
authorJakub Pawlowicz <contact@jakubpawlowicz.com>
Thu, 23 Oct 2014 07:01:22 +0000 (08:01 +0100)
committerJakub Pawlowicz <contact@jakubpawlowicz.com>
Mon, 8 Dec 2014 09:39:14 +0000 (09:39 +0000)
lib/selectors/optimizer.js

index 129c3a4..a65b3bc 100644 (file)
@@ -9,7 +9,14 @@ function SelectorsOptimizer(options, context) {
   this.context = context || {};
 }
 
-function valueMapper (object) { return object.value; }
+function valueRebuilder(list, separator) {
+  var merged = '';
+
+  for (var i = 0, l = list.length; i < l; i++)
+    merged += list[i].value + (i < l - 1 ? separator : '');
+
+  return merged;
+}
 
 function rebuild(tokens, keepBreaks, isFlatBlock) {
   var joinCharacter = isFlatBlock ? ';' : (keepBreaks ? lineBreak : '');
@@ -31,13 +38,13 @@ function rebuild(tokens, keepBreaks, isFlatBlock) {
 
     if (token.kind == 'block') {
       body = token.isFlatBlock ?
-        token.body.map(valueMapper).join(';') :
+        valueRebuilder(token.body, ';') :
         rebuild(token.body, keepBreaks, token.isFlatBlock);
       if (body.length > 0)
         parts.push(token.value + '{' + body + '}');
     } else {
-      selector = token.value.map(valueMapper).join(',');
-      body = token.body.map(valueMapper).join(';');
+      selector = valueRebuilder(token.value, ',');
+      body = valueRebuilder(token.body, ';');
       parts.push(selector + '{' + body + '}');
     }
   }