uglify-js
Advanced tools
Comparing version 3.8.1 to 3.9.0
@@ -206,2 +206,3 @@ "use strict"; | ||
options.output.source_map = SourceMap({ | ||
content: options.sourceMap.includeSources, | ||
file: options.sourceMap.filename, | ||
@@ -215,6 +216,4 @@ orig: source_maps, | ||
} else for (var name in files) if (HOP(files, name)) { | ||
options.output.source_map.get().setSourceContent(name, files[name]); | ||
options.output.source_map.setSourceContent(name, files[name]); | ||
} | ||
} else { | ||
options.output.source_map.get()._sourcesContents = null; | ||
} | ||
@@ -221,0 +220,0 @@ } |
@@ -165,7 +165,2 @@ /*********************************************************************** | ||
var name = node.name; | ||
if (name == "eval" && tw.parent() instanceof AST_Call) { | ||
for (var s = node.scope; s && !s.uses_eval; s = s.parent_scope) { | ||
s.uses_eval = true; | ||
} | ||
} | ||
var sym = node.scope.find_variable(name); | ||
@@ -177,2 +172,12 @@ if (!sym) { | ||
} | ||
if (name == "eval") { | ||
var parent = tw.parent(); | ||
if (parent.TYPE == "Call" && parent.expression === node) { | ||
for (var s = node.scope; s && !s.uses_eval; s = s.parent_scope) { | ||
s.uses_eval = true; | ||
} | ||
} else if (sym.undeclared) { | ||
self.uses_eval = true; | ||
} | ||
} | ||
node.thedef = sym; | ||
@@ -179,0 +184,0 @@ node.reference(options); |
@@ -46,60 +46,142 @@ /*********************************************************************** | ||
// a small wrapper around fitzgen's source-map library | ||
var vlq_char = characters("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"); | ||
var vlq_bits = vlq_char.reduce(function(map, ch, bits) { | ||
map[ch] = bits; | ||
return map; | ||
}, Object.create(null)); | ||
function vlq_decode(indices, str) { | ||
var value = 0; | ||
var shift = 0; | ||
for (var i = 0, j = 0; i < str.length; i++) { | ||
var bits = vlq_bits[str[i]]; | ||
value += (bits & 31) << shift; | ||
if (bits & 32) { | ||
shift += 5; | ||
} else { | ||
indices[j++] += value & 1 ? 0x80000000 | -(value >> 1) : value >> 1; | ||
value = shift = 0; | ||
} | ||
} | ||
return j; | ||
} | ||
function vlq_encode(num) { | ||
var result = ""; | ||
num = Math.abs(num) << 1 | num >>> 31; | ||
do { | ||
var bits = num & 31; | ||
if (num >>>= 5) bits |= 32; | ||
result += vlq_char[bits]; | ||
} while (num); | ||
return result; | ||
} | ||
function create_array_map() { | ||
var map = Object.create(null); | ||
var array = []; | ||
array.index = function(name) { | ||
if (!HOP(map, name)) { | ||
map[name] = array.length; | ||
array.push(name); | ||
} | ||
return map[name]; | ||
}; | ||
return array; | ||
} | ||
function SourceMap(options) { | ||
options = defaults(options, { | ||
content: false, | ||
file: null, | ||
root: null, | ||
orig: null, | ||
orig_line_diff: 0, | ||
dest_line_diff: 0, | ||
}, true); | ||
var generator = new MOZ_SourceMap.SourceMapGenerator({ | ||
file: options.file, | ||
sourceRoot: options.root | ||
}); | ||
var maps = options.orig && Object.create(null); | ||
if (maps) for (var source in options.orig) { | ||
var map = new MOZ_SourceMap.SourceMapConsumer(options.orig[source]); | ||
if (Array.isArray(options.orig[source].sources)) { | ||
map._sources.toArray().forEach(function(source) { | ||
var sourceContent = map.sourceContentFor(source, true); | ||
if (sourceContent) generator.setSourceContent(source, sourceContent); | ||
var sources = create_array_map(); | ||
var sources_content = options.content && Object.create(null); | ||
var names = create_array_map(); | ||
var mappings = ""; | ||
if (options.orig) Object.keys(options.orig).forEach(function(name) { | ||
var map = options.orig[name]; | ||
var indices = [ 0, 0, 1, 0, 0 ]; | ||
map.mappings = map.mappings.split(/;/).map(function(line) { | ||
indices[0] = 0; | ||
return line.split(/,/).map(function(segment) { | ||
return indices.slice(0, vlq_decode(indices, segment)); | ||
}); | ||
}); | ||
if (!sources_content || !map.sourcesContent) return; | ||
for (var i = 0; i < map.sources.length; i++) { | ||
var content = map.sourcesContent[i]; | ||
if (content) sources_content[map.sources[i]] = content; | ||
} | ||
maps[source] = map; | ||
} | ||
}); | ||
var generated_line = 1; | ||
var generated_column = 0; | ||
var source_index = 0; | ||
var original_line = 1; | ||
var original_column = 0; | ||
var name_index = 0; | ||
return { | ||
add: function(source, gen_line, gen_col, orig_line, orig_col, name) { | ||
var map = maps && maps[source]; | ||
add: options.orig ? function(source, gen_line, gen_col, orig_line, orig_col, name) { | ||
var map = options.orig[source]; | ||
if (map) { | ||
var info = map.originalPositionFor({ | ||
line: orig_line, | ||
column: orig_col | ||
}); | ||
if (info.source === null) return; | ||
source = info.source; | ||
orig_line = info.line; | ||
orig_col = info.column; | ||
name = info.name || name; | ||
var segments = map.mappings[orig_line - 1]; | ||
if (!segments) return; | ||
var indices; | ||
for (var i = 0; i < segments.length; i++) { | ||
var col = segments[i][0]; | ||
if (orig_col >= col) indices = segments[i]; | ||
if (orig_col <= col) break; | ||
} | ||
if (!indices || indices.length < 4) return; | ||
source = map.sources[indices[1]]; | ||
orig_line = indices[2]; | ||
orig_col = indices[3]; | ||
if (indices.length > 4) name = map.names[indices[4]]; | ||
} | ||
generator.addMapping({ | ||
name: name, | ||
source: source, | ||
generated: { | ||
line: gen_line + options.dest_line_diff, | ||
column: gen_col | ||
}, | ||
original: { | ||
line: orig_line + options.orig_line_diff, | ||
column: orig_col | ||
} | ||
add(source, gen_line, gen_col, orig_line, orig_col, name); | ||
} : add, | ||
setSourceContent: sources_content ? function(source, content) { | ||
sources_content[source] = content; | ||
} : noop, | ||
toString: function() { | ||
return JSON.stringify({ | ||
version: 3, | ||
file: options.file || undefined, | ||
sourceRoot: options.root || undefined, | ||
sources: sources, | ||
sourcesContent: sources_content ? sources.map(function(source) { | ||
return sources_content[source] || null; | ||
}) : undefined, | ||
names: names, | ||
mappings: mappings, | ||
}); | ||
}, | ||
get: function() { | ||
return generator; | ||
}, | ||
toString: function() { | ||
return JSON.stringify(generator.toJSON()); | ||
} | ||
}; | ||
function add(source, gen_line, gen_col, orig_line, orig_col, name) { | ||
if (generated_line < gen_line) { | ||
generated_column = 0; | ||
do { | ||
mappings += ";"; | ||
} while (++generated_line < gen_line); | ||
} else if (mappings) { | ||
mappings += ","; | ||
} | ||
mappings += vlq_encode(gen_col - generated_column); | ||
generated_column = gen_col; | ||
var src_idx = sources.index(source); | ||
mappings += vlq_encode(src_idx - source_index); | ||
source_index = src_idx; | ||
mappings += vlq_encode(orig_line - original_line); | ||
original_line = orig_line; | ||
mappings += vlq_encode(orig_col - original_column); | ||
original_column = orig_col; | ||
if (name != null) { | ||
var name_idx = names.index(name); | ||
mappings += vlq_encode(name_idx - name_index); | ||
name_index = name_idx; | ||
} | ||
} | ||
} |
@@ -220,2 +220,8 @@ /*********************************************************************** | ||
has: function(key) { return ("$" + key) in this._values }, | ||
all: function(predicate) { | ||
for (var i in this._values) | ||
if (!predicate(this._values[i], i.substr(1))) | ||
return false; | ||
return true; | ||
}, | ||
each: function(f) { | ||
@@ -222,0 +228,0 @@ for (var i in this._values) |
@@ -6,3 +6,3 @@ { | ||
"license": "BSD-2-Clause", | ||
"version": "3.8.1", | ||
"version": "3.9.0", | ||
"engines": { | ||
@@ -27,4 +27,3 @@ "node": ">=0.8.0" | ||
"dependencies": { | ||
"commander": "~2.20.3", | ||
"source-map": "~0.6.1" | ||
"commander": "~2.20.3" | ||
}, | ||
@@ -31,0 +30,0 @@ "devDependencies": { |
@@ -18,3 +18,3 @@ var fs = require("fs"); | ||
new Function("MOZ_SourceMap", "exports", function() { | ||
new Function("exports", function() { | ||
var code = exports.FILES.map(function(file) { | ||
@@ -25,3 +25,3 @@ return fs.readFileSync(file, "utf8"); | ||
return code.join("\n\n"); | ||
}())(require("source-map"), exports); | ||
}())(exports); | ||
@@ -28,0 +28,0 @@ function describe_ast() { |
Sorry, the diff of this file is too big to display
Uses eval
Supply chain riskPackage uses eval() which is a dangerous function. This prevents the code from running in certain environments and increases the risk that the code may contain exploits or malicious behavior.
Found 1 instance in 1 package
Uses eval
Supply chain riskPackage uses eval() which is a dangerous function. This prevents the code from running in certain environments and increases the risk that the code may contain exploits or malicious behavior.
Found 1 instance in 1 package
809161
1
20666
- Removedsource-map@~0.6.1
- Removedsource-map@0.6.1(transitive)