Skip to content

Commit

Permalink
fixes #425, no more support for separate source map files... wow that…
Browse files Browse the repository at this point in the history
… felt good
  • Loading branch information
dbashford committed Jan 23, 2015
1 parent 311d365 commit da1fefd
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 200 deletions.
129 changes: 21 additions & 108 deletions lib/modules/compilers/javascript.js
Original file line number Diff line number Diff line change
@@ -1,63 +1,9 @@
"use strict";
var JSCompiler, fileUtils, fs, logger, path, _cleanUpSourceMaps, _cleanUpSourceMapsRegister, _genMapFileName, _genSourceName,
var JSCompiler, logger,
__bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };

path = require('path');

fs = require('fs');

logger = require('logmimosa');

fileUtils = require('../../util/file');

_genMapFileName = function(config, file) {
var extName;
extName = path.extname(file.inputFileName);
return file.inputFileName.replace(extName, ".js.map").replace(config.watch.sourceDir, config.watch.compiledDir);
};

_genSourceName = function(config, file) {
return file.inputFileName.replace(config.watch.sourceDir, config.watch.compiledDir) + ".src";
};

_cleanUpSourceMaps = function(config, options, next) {
var done, i;
i = 0;
done = function() {
if (++i === 2) {
return next();
}
};
return options.files.forEach(function(file) {
var mapFileName, sourceName;
mapFileName = _genMapFileName(config, file);
sourceName = _genSourceName(config, file);
return [mapFileName, sourceName].forEach(function(f) {
return fs.exists(f, function(exists) {
if (exists) {
return fs.unlink(f, function(err) {
if (err) {
logger.error("Error deleting file [[ " + f + " ]], " + err);
} else {
if (logger.isDebug()) {
logger.debug("Deleted file [[ " + f + " ]]");
}
}
return done();
});
} else {
return done();
}
});
});
});
};

_cleanUpSourceMapsRegister = function(register, extensions) {
register(['remove'], 'delete', _cleanUpSourceMaps, extensions);
return register(['cleanFile'], 'delete', _cleanUpSourceMaps, extensions);
};

module.exports = JSCompiler = (function() {
function JSCompiler(config, compiler) {
this.compiler = compiler;
Expand All @@ -68,10 +14,7 @@ module.exports = JSCompiler = (function() {
var exts;
exts = this.compiler.extensions(config);
register(['add', 'update', 'remove', 'cleanFile', 'buildFile'], 'init', this._determineOutputFile, exts);
register(['add', 'update', 'buildFile'], 'compile', this._compile, exts);
if (this.compiler.cleanUpSourceMaps) {
return _cleanUpSourceMapsRegister(register, exts);
}
return register(['add', 'update', 'buildFile'], 'compile', this._compile, exts);
};

JSCompiler.prototype._determineOutputFile = function(config, options, next) {
Expand All @@ -88,74 +31,44 @@ module.exports = JSCompiler = (function() {
return next();
};

JSCompiler.prototype.__sourceMap = function(file, output, sourceMapStr) {
var base64SourceMap, datauri, sourceMap;
sourceMap = JSON.parse(sourceMapStr);
sourceMap.sources[0] = file.inputFileName;
sourceMap.sourcesContent = [file.inputFileText];
sourceMap.file = file.outputFileName;
console.log(sourceMap);
base64SourceMap = new Buffer(JSON.stringify(sourceMap)).toString('base64');
datauri = 'data:application/json;base64,' + base64SourceMap;
output = "" + output + "\n//# sourceMappingURL=" + datauri + "\n";
return output;
};

JSCompiler.prototype._compile = function(config, options, next) {
var done, i, newFiles, whenDone, _ref,
var _ref,
_this = this;
if (!((_ref = options.files) != null ? _ref.length : void 0)) {
return next();
}
i = 0;
newFiles = [];
whenDone = options.files.length;
done = function() {
if (++i === whenDone) {
options.files = newFiles;
return next();
}
};
return options.files.forEach(function(file) {
return options.files.forEach(function(file, i) {
if (logger.isDebug()) {
logger.debug("Calling compiler function for compiler [[ " + _this.compiler.name + " ]]");
}
file.isVendor = options.isVendor;
return _this.compiler.compile(config, file, function(err, output, compilerConfig, sourceMap) {
var base64SourceMap, datauri, sourceName;
if (err) {
logger.error("File [[ " + file.inputFileName + " ]] failed compile. Reason: " + err, {
exitIfBuild: true
});
} else {
if (sourceMap) {
if (compilerConfig.sourceMapDynamic) {
sourceMap = JSON.parse(sourceMap);
sourceMap.sources[0] = file.inputFileName;
sourceMap.sourcesContent = [file.inputFileText];
sourceMap.file = file.outputFileName;
base64SourceMap = new Buffer(JSON.stringify(sourceMap)).toString('base64');
datauri = 'data:application/json;base64,' + base64SourceMap;
if (compilerConfig.sourceMapConditional) {
output = "" + output + "\n//@ sourceMappingURL=" + datauri + "\n";
} else {
output = "" + output + "\n//# sourceMappingURL=" + datauri + "\n";
}
} else {
whenDone += 2;
sourceName = _genSourceName(config, file);
fileUtils.writeFile(sourceName, file.inputFileText, function(err) {
if (err) {
logger.error("Error writing source file [[ " + sourceName + " ]], " + err);
}
return done();
});
file.sourceMap = sourceMap;
file.sourceMapName = _genMapFileName(config, file);
fileUtils.writeFile(file.sourceMapName, sourceMap, function(err) {
if (err) {
logger.error("Error writing map file [[ " + file.sourceMapName + " ]], " + err);
}
return done();
});
if (compilerConfig.sourceMapConditional) {
output = "" + output + "\n/*\n//@ sourceMappingURL=" + (path.basename(file.sourceMapName)) + "\n*/\n";
} else {
output = "" + output + "\n/*\n//# sourceMappingURL=" + (path.basename(file.sourceMapName)) + "\n*/\n";
}
}
output = _this.__sourceMap(file, output, sourceMap);
}
file.outputFileText = output;
newFiles.push(file);
}
return done();
if (i === options.files.length - 1) {
return next();
}
});
});
};
Expand Down
108 changes: 16 additions & 92 deletions src/modules/compilers/javascript.coffee
Original file line number Diff line number Diff line change
@@ -1,48 +1,7 @@
"use strict"

path = require 'path'
fs = require 'fs'

logger = require 'logmimosa'

fileUtils = require '../../util/file'

_genMapFileName = (config, file) ->
extName = path.extname file.inputFileName
file.inputFileName.replace(extName, ".js.map").replace(config.watch.sourceDir, config.watch.compiledDir)

_genSourceName = (config, file) ->
file.inputFileName.replace(config.watch.sourceDir, config.watch.compiledDir) + ".src"

_cleanUpSourceMaps = (config, options, next) ->
i = 0
done = ->
next() if ++i is 2

options.files.forEach (file) ->
mapFileName = _genMapFileName(config, file)
sourceName = _genSourceName(config, file)
[mapFileName, sourceName].forEach (f) ->
fs.exists f, (exists) ->
if exists
fs.unlink f, (err) ->
if err
logger.error "Error deleting file [[ #{f} ]], #{err}"
else
if logger.isDebug()
logger.debug "Deleted file [[ #{f} ]]"
done()
else
done()

_cleanUpSourceMapsRegister = (register, extensions) ->
# register remove only if sourcemap as remove is watch workflow
register ['remove'], 'delete', _cleanUpSourceMaps, extensions

# register clean regardless to ensure any existing source maps are removed during build/clean
register ['cleanFile'], 'delete', _cleanUpSourceMaps, extensions


module.exports = class JSCompiler

constructor: (config, @compiler) ->
Expand All @@ -62,9 +21,6 @@ module.exports = class JSCompiler
@_compile,
exts)

if @compiler.cleanUpSourceMaps
_cleanUpSourceMapsRegister register, exts

_determineOutputFile: (config, options, next) ->
if options.files and options.files.length
options.destinationFile = (fileName) ->
Expand All @@ -76,19 +32,22 @@ module.exports = class JSCompiler

next()

_compile: (config, options, next) =>
return next() unless options.files?.length
__sourceMap: (file, output, sourceMapStr) ->
sourceMap = JSON.parse(sourceMapStr)
sourceMap.sources[0] = file.inputFileName
sourceMap.sourcesContent = [file.inputFileText];
sourceMap.file = file.outputFileName;
console.log(sourceMap)

i = 0
newFiles = []
base64SourceMap = new Buffer(JSON.stringify(sourceMap)).toString('base64')
datauri = 'data:application/json;base64,' + base64SourceMap
output = "#{output}\n//# sourceMappingURL=#{datauri}\n"
output

whenDone = options.files.length
done = ->
if ++i is whenDone
options.files = newFiles
next()
_compile: (config, options, next) =>
return next() unless options.files?.length

options.files.forEach (file) =>
options.files.forEach (file, i) =>

if logger.isDebug()
logger.debug "Calling compiler function for compiler [[ " + @compiler.name + " ]]"
Expand All @@ -100,44 +59,9 @@ module.exports = class JSCompiler
logger.error "File [[ #{file.inputFileName} ]] failed compile. Reason: #{err}", {exitIfBuild:true}
else
if sourceMap

if compilerConfig.sourceMapDynamic
sourceMap = JSON.parse(sourceMap)
sourceMap.sources[0] = file.inputFileName
sourceMap.sourcesContent = [file.inputFileText];
sourceMap.file = file.outputFileName;

base64SourceMap = new Buffer(JSON.stringify(sourceMap)).toString('base64')
datauri = 'data:application/json;base64,' + base64SourceMap
if compilerConfig.sourceMapConditional
output = "#{output}\n//@ sourceMappingURL=#{datauri}\n"
else
output = "#{output}\n//# sourceMappingURL=#{datauri}\n"


else
whenDone += 2
# writing source
sourceName = _genSourceName(config, file)
fileUtils.writeFile sourceName, file.inputFileText, (err) ->
if err
logger.error "Error writing source file [[ #{sourceName} ]], #{err}"
done()

# writing map
file.sourceMap = sourceMap
file.sourceMapName = _genMapFileName(config, file)
fileUtils.writeFile file.sourceMapName, sourceMap, (err) ->
if err
logger.error "Error writing map file [[ #{file.sourceMapName} ]], #{err}"
done()

if compilerConfig.sourceMapConditional
output = "#{output}\n/*\n//@ sourceMappingURL=#{path.basename(file.sourceMapName)}\n*/\n"
else
output = "#{output}\n/*\n//# sourceMappingURL=#{path.basename(file.sourceMapName)}\n*/\n"
output = @__sourceMap(file, output, sourceMap)

file.outputFileText = output
newFiles.push file

done()
if i is options.files.length - 1
next()

0 comments on commit da1fefd

Please sign in to comment.