| // Copyright 2015 The Emscripten Authors. All rights reserved. |
| // Emscripten is available under two separate licenses, the MIT license and the |
| // University of Illinois/NCSA Open Source License. Both these licenses can be |
| // found in the LICENSE file. |
| |
| // *** Environment setup code *** |
| var arguments_ = []; |
| var debug = false; |
| |
| var ENVIRONMENT_IS_NODE = typeof process === 'object'; |
| var ENVIRONMENT_IS_WEB = typeof window === 'object'; |
| var ENVIRONMENT_IS_WORKER = typeof importScripts === 'function'; |
| var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER; |
| |
| if (ENVIRONMENT_IS_NODE) { |
| // Expose functionality in the same simple way that the shells work |
| // Note that we pollute the global namespace here, otherwise we break in node |
| print = function(x) { |
| process['stdout'].write(x + '\n'); |
| }; |
| printErr = function(x) { |
| process['stderr'].write(x + '\n'); |
| }; |
| |
| var nodeFS = require('fs'); |
| var nodePath = require('path'); |
| |
| if (!nodeFS.existsSync) { |
| nodeFS.existsSync = function(path) { |
| try { |
| return !!nodeFS.readFileSync(path); |
| } catch(e) { |
| return false; |
| } |
| } |
| } |
| |
| function find(filename) { |
| var prefixes = [nodePath.join(__dirname, '..', 'src'), process.cwd()]; |
| for (var i = 0; i < prefixes.length; ++i) { |
| var combined = nodePath.join(prefixes[i], filename); |
| if (nodeFS.existsSync(combined)) { |
| return combined; |
| } |
| } |
| return filename; |
| } |
| |
| read = function(filename, binary) { |
| filename = nodePath['normalize'](filename); |
| var ret = nodeFS['readFileSync'](filename); |
| // The path is absolute if the normalized version is the same as the resolved. |
| if (!ret && filename != nodePath['resolve'](filename)) { |
| filename = path.join(__dirname, '..', 'src', filename); |
| ret = nodeFS['readFileSync'](filename); |
| } |
| if (ret && !binary) ret = ret.toString(); |
| return ret; |
| }; |
| |
| readBinary = function(filename) { return read(filename, true) }; |
| |
| load = function(f) { |
| globalEval(read(f)); |
| }; |
| |
| arguments_ = process['argv'].slice(2); |
| |
| } else if (ENVIRONMENT_IS_SHELL) { |
| // Polyfill over SpiderMonkey/V8 differences |
| if (!this['read']) { |
| this['read'] = function(f) { snarf(f) }; |
| } |
| |
| if (typeof scriptArgs != 'undefined') { |
| arguments_ = scriptArgs; |
| } else if (typeof arguments != 'undefined') { |
| arguments_ = arguments; |
| } |
| |
| } else if (ENVIRONMENT_IS_WEB) { |
| this['print'] = printErr = function(x) { |
| console.log(x); |
| }; |
| |
| this['read'] = function(url) { |
| var xhr = new XMLHttpRequest(); |
| xhr.open('GET', url, false); |
| xhr.send(null); |
| return xhr.responseText; |
| }; |
| |
| if (this['arguments']) { |
| arguments_ = arguments; |
| } |
| } else if (ENVIRONMENT_IS_WORKER) { |
| // We can do very little here... |
| |
| this['load'] = importScripts; |
| |
| } else { |
| throw 'Unknown runtime environment. Where are we?'; |
| } |
| |
| function globalEval(x) { |
| eval.call(null, x); |
| } |
| |
| if (typeof load === 'undefined' && typeof read != 'undefined') { |
| this['load'] = function(f) { |
| globalEval(read(f)); |
| }; |
| } |
| |
| if (typeof printErr === 'undefined') { |
| this['printErr'] = function(){}; |
| } |
| |
| if (typeof print === 'undefined') { |
| this['print'] = printErr; |
| } |
| |
| assert = function(x, message) { |
| if (!x) throw 'assertion failed: ' + message + ' : ' + new Error().stack; |
| } |
| |
| if (!Math['imul'] || Math['imul'](0xffffffff, 5) !== -5) Math['imul'] = function imul(a, b) { |
| var ah = a >>> 16; |
| var al = a & 0xffff; |
| var bh = b >>> 16; |
| var bl = b & 0xffff; |
| return (al*bl + ((ah*bl + al*bh) << 16))|0; |
| }; |
| |
| console.log = printErr; |
| |
| // *** Environment setup code *** |
| |
| var lz4 = arguments_[0]; |
| var input = arguments_[1]; |
| var output = arguments_[2]; |
| |
| load(lz4); |
| |
| var data = readBinary(input); |
| if (!(data instanceof ArrayBuffer)) { |
| printErr('converting to ArrayBuffer'); |
| data = new Uint8Array(data).buffer; |
| } |
| |
| var start = Date.now(); |
| var compressedData = MiniLZ4.compressPackage(data); |
| nodeFS['writeFileSync'](output, Buffer(compressedData['data'])); |
| compressedData['data'] = null; |
| printErr('compressed in ' + (Date.now() - start) + ' ms'); |
| print(JSON.stringify(compressedData)); |
| |