mirror of
https://github.com/jashkenas/coffeescript.git
synced 2022-11-09 12:23:24 -05:00
Improve inline source maps generation
- Inline source maps are now shorter by not using pretty-printed JSON. - `.register()`ed files are now given more information in their inline source maps: The name and contents of the source file. - Some code cleanup. If you decode the inline source map generated (when using `.register()`) for a file test.coffee with the contents `console.log "it works!"`, here is the output: Before: { "version": 3, "file": "", "sourceRoot": "", "sources": [ "" ], "names": [], "mappings": "AAAA;EAAA,OAAO,CAAC,GAAR,CAAY,eAAZ;AAAA" } After: {"version":3,"file":"","sourceRoot":"","sources":["test.coffee"],"names":[],"mappings":"AAAA;EAAA,OAAO,CAAC,GAAR,CAAY,WAAZ;AAAA","sourcesContent":["console.log \"it works!\"\n"]} Related: #4214.
This commit is contained in:
parent
cbc72a29bf
commit
841b3cd2ad
4 changed files with 24 additions and 17 deletions
|
@ -54,7 +54,7 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
exports.compile = compile = withPrettyErrors(function(code, options) {
|
exports.compile = compile = withPrettyErrors(function(code, options) {
|
||||||
var answer, currentColumn, currentLine, extend, fragment, fragments, generateSourceMap, header, i, js, len, map, merge, newLines, ref, sourceMapDataURI, sourceURL, token, tokens, v3SourceMap;
|
var currentColumn, currentLine, encoded, extend, fragment, fragments, generateSourceMap, header, i, js, len, map, merge, newLines, ref, sourceMapDataURI, sourceURL, token, tokens, v3SourceMap;
|
||||||
merge = helpers.merge, extend = helpers.extend;
|
merge = helpers.merge, extend = helpers.extend;
|
||||||
options = extend({}, options);
|
options = extend({}, options);
|
||||||
generateSourceMap = options.sourceMap || options.inlineMap;
|
generateSourceMap = options.sourceMap || options.inlineMap;
|
||||||
|
@ -109,17 +109,17 @@
|
||||||
v3SourceMap = map.generate(options, code);
|
v3SourceMap = map.generate(options, code);
|
||||||
}
|
}
|
||||||
if (options.inlineMap) {
|
if (options.inlineMap) {
|
||||||
sourceMapDataURI = "//# sourceMappingURL=data:application/json;base64," + (base64encode(v3SourceMap));
|
encoded = base64encode(JSON.stringify(v3SourceMap));
|
||||||
|
sourceMapDataURI = "//# sourceMappingURL=data:application/json;base64," + encoded;
|
||||||
sourceURL = "//# sourceURL=" + ((ref = options.filename) != null ? ref : 'coffeescript');
|
sourceURL = "//# sourceURL=" + ((ref = options.filename) != null ? ref : 'coffeescript');
|
||||||
js = js + "\n" + sourceMapDataURI + "\n" + sourceURL;
|
js = js + "\n" + sourceMapDataURI + "\n" + sourceURL;
|
||||||
}
|
}
|
||||||
if (options.sourceMap) {
|
if (options.sourceMap) {
|
||||||
answer = {
|
return {
|
||||||
js: js
|
js: js,
|
||||||
|
sourceMap: map,
|
||||||
|
v3SourceMap: JSON.stringify(v3SourceMap, null, 2)
|
||||||
};
|
};
|
||||||
answer.sourceMap = map;
|
|
||||||
answer.v3SourceMap = v3SourceMap;
|
|
||||||
return answer;
|
|
||||||
} else {
|
} else {
|
||||||
return js;
|
return js;
|
||||||
}
|
}
|
||||||
|
@ -253,6 +253,7 @@
|
||||||
filename: filename,
|
filename: filename,
|
||||||
sourceMap: sourceMap,
|
sourceMap: sourceMap,
|
||||||
inlineMap: inlineMap,
|
inlineMap: inlineMap,
|
||||||
|
sourceFiles: [filename],
|
||||||
literate: helpers.isLiterate(filename)
|
literate: helpers.isLiterate(filename)
|
||||||
});
|
});
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|
|
@ -116,10 +116,10 @@
|
||||||
names: [],
|
names: [],
|
||||||
mappings: buffer
|
mappings: buffer
|
||||||
};
|
};
|
||||||
if (options.inline) {
|
if (options.inlineMap) {
|
||||||
v3.sourcesContent = [code];
|
v3.sourcesContent = [code];
|
||||||
}
|
}
|
||||||
return JSON.stringify(v3, null, 2);
|
return v3;
|
||||||
};
|
};
|
||||||
|
|
||||||
VLQ_SHIFT = 5;
|
VLQ_SHIFT = 5;
|
||||||
|
|
|
@ -97,15 +97,17 @@ exports.compile = compile = withPrettyErrors (code, options) ->
|
||||||
v3SourceMap = map.generate(options, code)
|
v3SourceMap = map.generate(options, code)
|
||||||
|
|
||||||
if options.inlineMap
|
if options.inlineMap
|
||||||
sourceMapDataURI = "//# sourceMappingURL=data:application/json;base64,#{base64encode v3SourceMap}"
|
encoded = base64encode JSON.stringify v3SourceMap
|
||||||
|
sourceMapDataURI = "//# sourceMappingURL=data:application/json;base64,#{encoded}"
|
||||||
sourceURL = "//# sourceURL=#{options.filename ? 'coffeescript'}"
|
sourceURL = "//# sourceURL=#{options.filename ? 'coffeescript'}"
|
||||||
js = "#{js}\n#{sourceMapDataURI}\n#{sourceURL}"
|
js = "#{js}\n#{sourceMapDataURI}\n#{sourceURL}"
|
||||||
|
|
||||||
if options.sourceMap
|
if options.sourceMap
|
||||||
answer = {js}
|
{
|
||||||
answer.sourceMap = map
|
js
|
||||||
answer.v3SourceMap = v3SourceMap
|
sourceMap: map
|
||||||
answer
|
v3SourceMap: JSON.stringify v3SourceMap, null, 2
|
||||||
|
}
|
||||||
else
|
else
|
||||||
js
|
js
|
||||||
|
|
||||||
|
@ -204,7 +206,11 @@ exports._compileFile = (filename, sourceMap = no, inlineMap = no) ->
|
||||||
stripped = if raw.charCodeAt(0) is 0xFEFF then raw.substring 1 else raw
|
stripped = if raw.charCodeAt(0) is 0xFEFF then raw.substring 1 else raw
|
||||||
|
|
||||||
try
|
try
|
||||||
answer = compile(stripped, {filename, sourceMap, inlineMap, literate: helpers.isLiterate filename})
|
answer = compile stripped, {
|
||||||
|
filename, sourceMap, inlineMap
|
||||||
|
sourceFiles: [filename]
|
||||||
|
literate: helpers.isLiterate filename
|
||||||
|
}
|
||||||
catch err
|
catch err
|
||||||
# As the filename and code of a dynamically loaded file will be different
|
# As the filename and code of a dynamically loaded file will be different
|
||||||
# from the original file compiled with CoffeeScript.run, add that
|
# from the original file compiled with CoffeeScript.run, add that
|
||||||
|
|
|
@ -126,9 +126,9 @@ Produce the canonical JSON object format for a "v3" source map.
|
||||||
names: []
|
names: []
|
||||||
mappings: buffer
|
mappings: buffer
|
||||||
|
|
||||||
v3.sourcesContent = [code] if options.inline
|
v3.sourcesContent = [code] if options.inlineMap
|
||||||
|
|
||||||
JSON.stringify v3, null, 2
|
v3
|
||||||
|
|
||||||
|
|
||||||
Base64 VLQ Encoding
|
Base64 VLQ Encoding
|
||||||
|
|
Loading…
Reference in a new issue