Moves all writing-related code to `writer` folder.
authorJakub Pawlowicz <contact@jakubpawlowicz.com>
Thu, 15 Dec 2016 16:20:01 +0000 (17:20 +0100)
committerJakub Pawlowicz <contact@jakubpawlowicz.com>
Fri, 16 Dec 2016 11:00:34 +0000 (12:00 +0100)
Why:

* To make it clearer what it does.

17 files changed:
lib/clean.js
lib/optimizer/extract-properties.js
lib/optimizer/merge-adjacent.js
lib/optimizer/merge-media-queries.js
lib/optimizer/merge-non-adjacent-by-body.js
lib/optimizer/merge-non-adjacent-by-selector.js
lib/optimizer/reduce-non-adjacent.js
lib/optimizer/remove-duplicate-media-queries.js
lib/optimizer/remove-duplicates.js
lib/optimizer/restructure.js
lib/properties/optimizer.js
lib/properties/override-compactor.js
lib/stringifier/simple.js [deleted file]
lib/writer/helpers.js [moved from lib/stringifier/helpers.js with 100% similarity]
lib/writer/one-time.js [moved from lib/stringifier/one-time.js with 100% similarity]
lib/writer/simple.js [new file with mode: 0644]
lib/writer/source-maps.js [moved from lib/stringifier/source-maps.js with 55% similarity]

index 9c6ac07..fd5685f 100644 (file)
@@ -17,8 +17,8 @@ var inputSourceMapTracker = require('./reader/input-source-map-tracker');
 var readSources = require('./reader/read-sources');
 var basicOptimize = require('./optimizer/basic');
 var advancedOptimize = require('./optimizer/advanced');
-var simpleStringify = require('./stringifier/simple');
-var sourceMapStringify = require('./stringifier/source-maps');
+var serializeStyles = require('./writer/simple');
+var serializeStylesAndSourceMap = require('./writer/source-maps');
 
 var CleanCSS = module.exports = function CleanCSS(options) {
   options = options || {};
@@ -91,12 +91,12 @@ CleanCSS.prototype.minify = function (input, callback) {
 
   return runner(context.localOnly)(function () {
     return readSources(input, context, function (tokens) {
-      var stringify = context.options.sourceMap ?
-        sourceMapStringify :
-        simpleStringify;
+      var serialize = context.options.sourceMap ?
+        serializeStylesAndSourceMap :
+        serializeStyles;
 
       var optimizedTokens = optimize(tokens, context);
-      var optimizedStyles = stringify(optimizedTokens, context);
+      var optimizedStyles = serialize(optimizedTokens, context);
       var output = withMetadata(optimizedStyles, context);
 
       return callback ?
index 4077061..93d49ca 100644 (file)
@@ -2,8 +2,8 @@
 // IMPORTANT: Mind Token class and this code is not related!
 // Properties will be tokenized in one step, see #429
 
-var stringifyRules = require('../stringifier/one-time').rules;
-var stringifyValue = require('../stringifier/one-time').value;
+var serializeRules = require('../writer/one-time').rules;
+var serializeValue = require('../writer/one-time').value;
 var Token = require('../tokenizer/token');
 
 function extractProperties(token) {
@@ -15,7 +15,7 @@ function extractProperties(token) {
   var i, l;
 
   if (token[0] == Token.RULE) {
-    inSpecificSelector = !/[\.\+>~]/.test(stringifyRules(token[1]));
+    inSpecificSelector = !/[\.\+>~]/.test(serializeRules(token[1]));
 
     for (i = 0, l = token[2].length; i < l; i++) {
       property = token[2][i];
@@ -30,7 +30,7 @@ function extractProperties(token) {
       if (name.indexOf('--') === 0)
         continue;
 
-      value = stringifyValue(property, i);
+      value = serializeValue(property, i);
 
       properties.push([
         name,
index 988e376..f10397d 100644 (file)
@@ -1,7 +1,7 @@
 var optimizeProperties = require('../properties/optimizer');
 
-var stringifyBody = require('../stringifier/one-time').body;
-var stringifyRules = require('../stringifier/one-time').rules;
+var serializeBody = require('../writer/one-time').body;
+var serializeRules = require('../writer/one-time').rules;
 var tidyRules = require('./tidy-rules');
 var isSpecial = require('./is-special');
 
@@ -20,13 +20,13 @@ function mergeAdjacent(tokens, context) {
       continue;
     }
 
-    if (lastToken[0] == Token.RULE && stringifyRules(token[1]) == stringifyRules(lastToken[1])) {
+    if (lastToken[0] == Token.RULE && serializeRules(token[1]) == serializeRules(lastToken[1])) {
       var joinAt = [lastToken[2].length];
       Array.prototype.push.apply(lastToken[2], token[2]);
       optimizeProperties(token[1], lastToken[2], joinAt, true, context);
       token[2] = [];
-    } else if (lastToken[0] == Token.RULE && stringifyBody(token[2]) == stringifyBody(lastToken[2]) &&
-        !isSpecial(options, stringifyRules(token[1])) && !isSpecial(options, stringifyRules(lastToken[1]))) {
+    } else if (lastToken[0] == Token.RULE && serializeBody(token[2]) == serializeBody(lastToken[2]) &&
+        !isSpecial(options, serializeRules(token[1])) && !isSpecial(options, serializeRules(lastToken[1]))) {
       lastToken[1] = tidyRules(lastToken[1].concat(token[1]), false, adjacentSpace, context.warnings);
       token[2] = [];
     } else {
index fcf9ed2..711dfa2 100644 (file)
@@ -1,7 +1,7 @@
 var canReorder = require('./reorderable').canReorder;
 var extractProperties = require('./extract-properties');
 
-var stringifyRules = require('../stringifier/one-time').rules;
+var serializeRules = require('../writer/one-time').rules;
 var Token = require('../tokenizer/token');
 
 function mergeMediaQueries(tokens) {
@@ -14,7 +14,7 @@ function mergeMediaQueries(tokens) {
       continue;
     }
 
-    var key = stringifyRules(token[1]);
+    var key = serializeRules(token[1]);
     var candidate = candidates[key];
     if (!candidate) {
       candidate = [];
index b5eda74..467f7d4 100644 (file)
@@ -1,5 +1,5 @@
-var stringifyBody = require('../stringifier/one-time').body;
-var stringifyRules = require('../stringifier/one-time').rules;
+var serializeBody = require('../writer/one-time').body;
+var serializeRules = require('../writer/one-time').rules;
 var tidyRules = require('./tidy-rules');
 var isSpecial = require('./is-special');
 
@@ -10,7 +10,7 @@ function unsafeSelector(value) {
 }
 
 function isBemElement(token) {
-  var asString = stringifyRules(token[1]);
+  var asString = serializeRules(token[1]);
   return asString.indexOf('__') > -1 || asString.indexOf('--') > -1;
 }
 
@@ -19,11 +19,11 @@ function withoutModifier(selector) {
 }
 
 function removeAnyUnsafeElements(left, candidates) {
-  var leftSelector = withoutModifier(stringifyRules(left[1]));
+  var leftSelector = withoutModifier(serializeRules(left[1]));
 
   for (var body in candidates) {
     var right = candidates[body];
-    var rightSelector = withoutModifier(stringifyRules(right[1]));
+    var rightSelector = withoutModifier(serializeRules(right[1]));
 
     if (rightSelector.indexOf(leftSelector) > -1 || leftSelector.indexOf(rightSelector) > -1)
       delete candidates[body];
@@ -40,15 +40,15 @@ function mergeNonAdjacentByBody(tokens, context) {
     if (token[0] != Token.RULE)
       continue;
 
-    if (token[2].length > 0 && (!options.semanticMerging && unsafeSelector(stringifyRules(token[1]))))
+    if (token[2].length > 0 && (!options.semanticMerging && unsafeSelector(serializeRules(token[1]))))
       candidates = {};
 
     if (token[2].length > 0 && options.semanticMerging && isBemElement(token))
       removeAnyUnsafeElements(token, candidates);
 
-    var candidateBody = stringifyBody(token[2]);
+    var candidateBody = serializeBody(token[2]);
     var oldToken = candidates[candidateBody];
-    if (oldToken && !isSpecial(options, stringifyRules(token[1])) && !isSpecial(options, stringifyRules(oldToken[1]))) {
+    if (oldToken && !isSpecial(options, serializeRules(token[1])) && !isSpecial(options, serializeRules(oldToken[1]))) {
       token[1] = token[2].length > 0 ?
         tidyRules(oldToken[1].concat(token[1]), false, adjacentSpace, context.warnings) :
         oldToken[1].concat(token[1]);
@@ -57,7 +57,7 @@ function mergeNonAdjacentByBody(tokens, context) {
       candidates[candidateBody] = null;
     }
 
-    candidates[stringifyBody(token[2])] = token;
+    candidates[serializeBody(token[2])] = token;
   }
 }
 
index a9188a8..1b2ef1e 100644 (file)
@@ -1,5 +1,5 @@
 var optimizeProperties = require('../properties/optimizer');
-var stringifyRules = require('../stringifier/one-time').rules;
+var serializeRules = require('../writer/one-time').rules;
 var extractProperties = require('./extract-properties');
 var canReorder = require('./reorderable').canReorder;
 
@@ -16,7 +16,7 @@ function mergeNonAdjacentBySelector(tokens, context) {
     if (tokens[i][2].length === 0)
       continue;
 
-    var selector = stringifyRules(tokens[i][1]);
+    var selector = serializeRules(tokens[i][1]);
     allSelectors[selector] = [i].concat(allSelectors[selector] || []);
 
     if (allSelectors[selector].length == 2)
index caa93ba..282cf8d 100644 (file)
@@ -1,6 +1,6 @@
 var optimizeProperties = require('../properties/optimizer');
-var stringifyBody = require('../stringifier/one-time').body;
-var stringifyRules = require('../stringifier/one-time').rules;
+var serializeBody = require('../writer/one-time').body;
+var serializeRules = require('../writer/one-time').rules;
 var isSpecial = require('./is-special');
 var cloneArray = require('../utils/clone-array');
 
@@ -20,7 +20,7 @@ function reduceNonAdjacent(tokens, context) {
       continue;
     }
 
-    var selectorAsString = stringifyRules(token[1]);
+    var selectorAsString = serializeRules(token[1]);
     var isComplexAndNotSpecial = token[1].length > 1 && !isSpecial(options, selectorAsString);
     var wrappedSelectors = wrappedSelectorsFrom(token[1]);
     var selectors = isComplexAndNotSpecial ?
@@ -122,7 +122,7 @@ function reduceComplexNonAdjacentCases(tokens, candidates, options, context) {
         callback: collectReducedBodies
       }, options, context);
 
-      if (stringifyBody(reducedBodies[reducedBodies.length - 1]) != stringifyBody(reducedBodies[0]))
+      if (serializeBody(reducedBodies[reducedBodies.length - 1]) != serializeBody(reducedBodies[0]))
         continue allSelectors;
     }
 
index 9d243dd..ffde8a3 100644 (file)
@@ -1,5 +1,5 @@
-var stringifyAll = require('../stringifier/one-time').all;
-var stringifyRules = require('../stringifier/one-time').rules;
+var serializeAll = require('../writer/one-time').all;
+var serializeRules = require('../writer/one-time').rules;
 
 var Token = require('../tokenizer/token');
 
@@ -16,7 +16,7 @@ function removeDuplicateMediaQueries(tokens) {
       continue;
     }
 
-    key = stringifyRules(token[1]) + '%' + stringifyAll(token[2]);
+    key = serializeRules(token[1]) + '%' + serializeAll(token[2]);
     candidate = candidates[key];
 
     if (candidate) {
index fab62b9..fb77747 100644 (file)
@@ -1,5 +1,5 @@
-var stringifyBody = require('../stringifier/one-time').body;
-var stringifyRules = require('../stringifier/one-time').rules;
+var serializeBody = require('../writer/one-time').body;
+var serializeRules = require('../writer/one-time').rules;
 
 var Token = require('../tokenizer/token');
 
@@ -14,7 +14,7 @@ function removeDuplicates(tokens) {
     if (token[0] != Token.RULE)
       continue;
 
-    id = stringifyRules(token[1]);
+    id = serializeRules(token[1]);
 
     if (matched[id] && matched[id].length == 1)
       moreThanOnce.push(id);
@@ -30,7 +30,7 @@ function removeDuplicates(tokens) {
 
     for (var j = matched[id].length - 1; j >= 0; j--) {
       token = tokens[matched[id][j]];
-      body = stringifyBody(token[2]);
+      body = serializeBody(token[2]);
 
       if (bodies.indexOf(body) > -1)
         token[2] = [];
index 0694167..e8753d9 100644 (file)
@@ -1,7 +1,7 @@
 var extractProperties = require('./extract-properties');
 var canReorderSingle = require('./reorderable').canReorderSingle;
-var stringifyBody = require('../stringifier/one-time').body;
-var stringifyRules = require('../stringifier/one-time').rules;
+var serializeBody = require('../writer/one-time').body;
+var serializeRules = require('../writer/one-time').rules;
 var tidyRuleDuplicates = require('./tidy-rule-duplicates');
 var isSpecial = require('./is-special');
 var cloneArray = require('../utils/clone-array');
@@ -70,7 +70,7 @@ function restructure(tokens, context) {
   function cacheId(cachedTokens) {
     var id = [];
     for (var i = 0, l = cachedTokens.length; i < l; i++) {
-      id.push(stringifyRules(cachedTokens[i][1]));
+      id.push(serializeRules(cachedTokens[i][1]));
     }
     return id.join(ID_JOIN_CHARACTER);
   }
@@ -80,7 +80,7 @@ function restructure(tokens, context) {
     var mergeableTokens = [];
 
     for (var i = sourceTokens.length - 1; i >= 0; i--) {
-      if (isSpecial(options, stringifyRules(sourceTokens[i][1])))
+      if (isSpecial(options, serializeRules(sourceTokens[i][1])))
         continue;
 
       mergeableTokens.unshift(sourceTokens[i]);
@@ -144,7 +144,7 @@ function restructure(tokens, context) {
   function sizeDifference(tokensVariant, propertySize, propertiesCount) {
     var allSelectorsSize = 0;
     for (var i = tokensVariant.length - 1; i >= 0; i--) {
-      allSelectorsSize += tokensVariant[i][2].length > propertiesCount ? stringifyRules(tokensVariant[i][1]).length : -1;
+      allSelectorsSize += tokensVariant[i][2].length > propertiesCount ? serializeRules(tokensVariant[i][1]).length : -1;
     }
     return allSelectorsSize - (tokensVariant.length - 1) * propertySize + 1;
   }
@@ -165,7 +165,7 @@ function restructure(tokens, context) {
           var mergeablePropertyName = mergeableProperty[1][1];
           var propertyName = property[0];
           var propertyBody = property[4];
-          if (mergeablePropertyName == propertyName && stringifyBody([mergeableProperty]) == propertyBody) {
+          if (mergeablePropertyName == propertyName && serializeBody([mergeableProperty]) == propertyBody) {
             mergeableToken[2].splice(j, 1);
             break;
           }
index 565158b..f7057a5 100644 (file)
@@ -5,7 +5,7 @@ var compactOverrides = require('./override-compactor');
 var compactShorthands = require('./shorthand-compactor');
 var removeUnused = require('./remove-unused');
 var restoreFromOptimizing = require('./restore-from-optimizing');
-var stringifyProperty = require('../stringifier/one-time').property;
+var serializeProperty = require('../writer/one-time').property;
 
 var shorthands = {
   'animation-delay': ['animation'],
@@ -99,7 +99,7 @@ function _optimize(properties, mergeAdjacent, aggressiveMerging, validator) {
     var left = properties[position - 1];
     var right = properties[position];
 
-    return stringifyProperty(left.all, left.position) == stringifyProperty(right.all, right.position);
+    return serializeProperty(left.all, left.position) == serializeProperty(right.all, right.position);
   }
 
   propertyLoop:
index 2efb829..89180b4 100644 (file)
@@ -7,7 +7,7 @@ var restoreFromOptimizing = require('./restore-from-optimizing');
 var everyCombination = require('./every-combination');
 var sameVendorPrefixesIn = require('./vendor-prefixes').same;
 
-var stringifyProperty = require('../stringifier/one-time').property;
+var serializeProperty = require('../writer/one-time').property;
 
 var Token = require('../tokenizer/token');
 var Marker = require('../tokenizer/marker');
@@ -107,7 +107,7 @@ function lengthOf(property) {
     Token.PROPERTY,
     [Token.PROPERTY_NAME, property.name]
   ].concat(property.value);
-  return stringifyProperty([fakeAsArray], 0).length;
+  return serializeProperty([fakeAsArray], 0).length;
 }
 
 function moreSameShorthands(properties, startAt, name) {
diff --git a/lib/stringifier/simple.js b/lib/stringifier/simple.js
deleted file mode 100644 (file)
index b3a497c..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-var all = require('./helpers').all;
-
-function store(token, stringifyContext) {
-  stringifyContext.output.push(typeof token == 'string' ? token : token[1]);
-}
-
-function stringify(tokens, context) {
-  var stringifyContext = {
-    keepBreaks: context.options.keepBreaks,
-    output: [],
-    spaceAfterClosingBrace: context.options.compatibility.properties.spaceAfterClosingBrace,
-    store: store
-  };
-
-  all(tokens, stringifyContext, false);
-
-  return {
-    styles: stringifyContext.output.join('')
-  };
-}
-
-module.exports = stringify;
diff --git a/lib/writer/simple.js b/lib/writer/simple.js
new file mode 100644 (file)
index 0000000..7b3ffbd
--- /dev/null
@@ -0,0 +1,22 @@
+var all = require('./helpers').all;
+
+function store(token, serializeContext) {
+  serializeContext.output.push(typeof token == 'string' ? token : token[1]);
+}
+
+function serializeStyles(tokens, context) {
+  var serializeContext = {
+    keepBreaks: context.options.keepBreaks,
+    output: [],
+    spaceAfterClosingBrace: context.options.compatibility.properties.spaceAfterClosingBrace,
+    store: store
+  };
+
+  all(tokens, serializeContext, false);
+
+  return {
+    styles: serializeContext.output.join('')
+  };
+}
+
+module.exports = serializeStyles;
similarity index 55%
rename from lib/stringifier/source-maps.js
rename to lib/writer/source-maps.js
index 14de180..094efd9 100644 (file)
@@ -6,33 +6,33 @@ var isRemoteResource = require('../utils/is-remote-resource');
 var isWindows = process.platform == 'win32';
 var UNKNOWN_SOURCE = '$stdin';
 
-function store(element, stringifyContext) {
+function store(element, serializeContext) {
   var fromString = typeof element == 'string';
   var value = fromString ? element : element[1];
   var mappings = fromString ? null : element[2];
 
-  track(value, mappings, stringifyContext);
-  stringifyContext.output.push(value);
+  track(value, mappings, serializeContext);
+  serializeContext.output.push(value);
 }
 
-function track(value, mappings, stringifyContext) {
+function track(value, mappings, serializeContext) {
   var parts = value.split('\n');
 
   if (mappings) {
-    trackAllMappings(mappings, stringifyContext);
+    trackAllMappings(mappings, serializeContext);
   }
 
-  stringifyContext.line += parts.length - 1;
-  stringifyContext.column = parts.length > 1 ? 0 : (stringifyContext.column + parts.pop().length);
+  serializeContext.line += parts.length - 1;
+  serializeContext.column = parts.length > 1 ? 0 : (serializeContext.column + parts.pop().length);
 }
 
-function trackAllMappings(mappings, stringifyContext) {
+function trackAllMappings(mappings, serializeContext) {
   for (var i = 0, l = mappings.length; i < l; i++) {
-    trackMapping(mappings[i], stringifyContext);
+    trackMapping(mappings[i], serializeContext);
   }
 }
 
-function trackMapping(mapping, stringifyContext) {
+function trackMapping(mapping, serializeContext) {
   var line = mapping[0];
   var column = mapping[1];
   var originalSource = mapping[2];
@@ -43,10 +43,10 @@ function trackMapping(mapping, stringifyContext) {
     source = source.replace(/\\/g, '/');
   }
 
-  stringifyContext.outputMap.addMapping({
+  serializeContext.outputMap.addMapping({
     generated: {
-      line: stringifyContext.line,
-      column: stringifyContext.column
+      line: serializeContext.line,
+      column: serializeContext.column
     },
     source: storedSource,
     original: {
@@ -55,13 +55,13 @@ function trackMapping(mapping, stringifyContext) {
     }
   });
 
-  if (stringifyContext.inlineSources && (originalSource in stringifyContext.sourcesContent)) {
-    stringifyContext.outputMap.setSourceContent(storedSource, stringifyContext.sourcesContent[originalSource]);
+  if (serializeContext.inlineSources && (originalSource in serializeContext.sourcesContent)) {
+    serializeContext.outputMap.setSourceContent(storedSource, serializeContext.sourcesContent[originalSource]);
   }
 }
 
-function stringify(tokens, context) {
-  var stringifyContext = {
+function serializeStylesAndSourceMap(tokens, context) {
+  var serializeContext = {
     column: 0,
     keepBreaks: context.options.keepBreaks,
     inlineSources: context.options.sourceMapInlineSources,
@@ -73,12 +73,12 @@ function stringify(tokens, context) {
     store: store
   };
 
-  all(tokens, stringifyContext, false);
+  all(tokens, serializeContext, false);
 
   return {
-    sourceMap: stringifyContext.outputMap,
-    styles: stringifyContext.output.join('')
+    sourceMap: serializeContext.outputMap,
+    styles: serializeContext.output.join('')
   };
 }
 
-module.exports = stringify;
+module.exports = serializeStylesAndSourceMap;