Adds better internal target handling.
authorJakub Pawlowicz <contact@jakubpawlowicz.com>
Sun, 15 Mar 2015 16:47:23 +0000 (16:47 +0000)
committerJakub Pawlowicz <contact@jakubpawlowicz.com>
Sun, 15 Mar 2015 16:47:23 +0000 (16:47 +0000)
`target` option is now resolved inside main module.

Also added `options.explicitTarget` which resolves to true if target
was passed explicitely.

lib/clean.js
lib/images/url-rebase.js
test/source-map-test.js

index 67f083b..018992e 100644 (file)
@@ -21,6 +21,9 @@ var InputSourceMapTracker = require('./utils/input-source-map-tracker');
 var SourceTracker = require('./utils/source-tracker');
 var SourceReader = require('./utils/source-reader');
 
+var fs = require('fs');
+var path = require('path');
+
 var DEFAULT_TIMEOUT = 5000;
 
 var CleanCSS = module.exports = function CleanCSS(options) {
@@ -33,6 +36,7 @@ var CleanCSS = module.exports = function CleanCSS(options) {
     compatibility: new Compatibility(options.compatibility).toOptions(),
     debug: options.debug,
     explicitRoot: !!options.root,
+    explicitTarget: !!options.target,
     inliner: options.inliner || {},
     keepBreaks: options.keepBreaks || false,
     keepSpecialComments: 'keepSpecialComments' in options ? options.keepSpecialComments : '*',
@@ -45,7 +49,7 @@ var CleanCSS = module.exports = function CleanCSS(options) {
     roundingPrecision: options.roundingPrecision,
     shorthandCompacting: !!options.sourceMap ? false : (undefined === options.shorthandCompacting ? true : !!options.shorthandCompacting),
     sourceMap: options.sourceMap,
-    target: options.target
+    target: options.target && fs.existsSync(options.target) && fs.statSync(options.target).isDirectory() ? options.target : path.dirname(options.target)
   };
 
   this.options.inliner.timeout = this.options.inliner.timeout || DEFAULT_TIMEOUT;
index 6d25470..76c5fc2 100644 (file)
@@ -12,26 +12,21 @@ UrlRebase.prototype.process = function (data) {
 
   var rebaseOpts = {
     absolute: options.explicitRoot,
-    relative: !options.explicitRoot && !!options.target,
+    relative: !options.explicitRoot && options.explicitTarget,
     fromBase: options.relativeTo
   };
 
   if (!rebaseOpts.absolute && !rebaseOpts.relative)
     return data;
 
-  if (rebaseOpts.absolute && !!options.target)
+  if (rebaseOpts.absolute && options.explicitTarget)
     this.outerContext.warnings.push('Both \'root\' and output file given so rebasing URLs as absolute paths');
 
   if (rebaseOpts.absolute)
     rebaseOpts.toBase = path.resolve(options.root);
 
-  if (rebaseOpts.relative) {
-    var target = fs.existsSync(options.target) && fs.statSync(options.target).isDirectory() ?
-      options.target :
-      path.dirname(options.target);
-
-    rebaseOpts.toBase = path.resolve(target);
-  }
+  if (rebaseOpts.relative)
+    rebaseOpts.toBase = path.resolve(options.target);
 
   if (!rebaseOpts.fromBase || !rebaseOpts.toBase)
     return data;
index f19a92e..dd8e310 100644 (file)
@@ -524,7 +524,7 @@ vows.describe('source-map')
           generatedColumn: 0,
           originalLine: 2,
           originalColumn: 8,
-          source: 'once.less',
+          source: path.join('test', 'fixtures', 'source-maps', 'nested', 'once.less'),
           name: null
         };
         assert.deepEqual(minified.sourceMap._mappings._array[0], mapping);
@@ -535,7 +535,7 @@ vows.describe('source-map')
           generatedColumn: 14,
           originalLine: 3,
           originalColumn: 4,
-          source: 'once.less',
+          source: path.join('test', 'fixtures', 'source-maps', 'nested', 'once.less'),
           name: null
         };
         assert.deepEqual(minified.sourceMap._mappings._array[1], mapping);
@@ -554,7 +554,7 @@ vows.describe('source-map')
           generatedColumn: 0,
           originalLine: 3,
           originalColumn: 4,
-          source: 'twice.less',
+          source: path.join('test', 'fixtures', 'source-maps', 'nested', 'twice.less'),
           name: null
         };
         assert.deepEqual(minified.sourceMap._mappings._array[0], mapping);
@@ -565,7 +565,7 @@ vows.describe('source-map')
           generatedColumn: 11,
           originalLine: 4,
           originalColumn: 6,
-          source: 'twice.less',
+          source: path.join('test', 'fixtures', 'source-maps', 'nested', 'twice.less'),
           name: null
         };
         assert.deepEqual(minified.sourceMap._mappings._array[1], mapping);
@@ -869,7 +869,7 @@ vows.describe('source-map')
             generatedColumn: 0,
             originalLine: 1,
             originalColumn: 0,
-            source: 'some.less',
+            source: path.join('test', 'fixtures', 'source-maps', 'some.less'),
             name: null
           };
           assert.deepEqual(minified.sourceMap._mappings._array[0], mapping);
@@ -880,7 +880,7 @@ vows.describe('source-map')
             generatedColumn: 4,
             originalLine: 2,
             originalColumn: 8,
-            source: 'once.less',
+            source: path.join('test', 'fixtures', 'source-maps', 'nested', 'once.less'),
             name: null
           };
           assert.deepEqual(minified.sourceMap._mappings._array[1], mapping);
@@ -891,7 +891,7 @@ vows.describe('source-map')
             generatedColumn: 18,
             originalLine: 2,
             originalColumn: 2,
-            source: 'some.less',
+            source: path.join('test', 'fixtures', 'source-maps', 'some.less'),
             name: null
           };
           assert.deepEqual(minified.sourceMap._mappings._array[2], mapping);
@@ -902,7 +902,7 @@ vows.describe('source-map')
             generatedColumn: 28,
             originalLine: 1,
             originalColumn: 4,
-            source: 'styles.less',
+            source: path.join('test', 'fixtures', 'source-maps', 'styles.less'),
             name: null
           };
           assert.deepEqual(minified.sourceMap._mappings._array[3], mapping);
@@ -913,7 +913,7 @@ vows.describe('source-map')
             generatedColumn: 34,
             originalLine: 2,
             originalColumn: 2,
-            source: 'styles.less',
+            source: path.join('test', 'fixtures', 'source-maps', 'styles.less'),
             name: null
           };
           assert.deepEqual(minified.sourceMap._mappings._array[4], mapping);