node-uglifier-es
Version:
Fully auto merging and uglifying a whole NodeJs project into one file with external files option. Recompiled from Zsolt Istvan Szabo's work with uglify-es instead of uglify-js-harmony.
95 lines (82 loc) • 2.8 kB
JavaScript
// Generated by CoffeeScript 1.7.1
(function() {
var UglifyJS, fs, fsExtra, packageUtils, path;
fsExtra = require('fs-extra');
fs = require('fs');
UglifyJS = require('uglify-js');
path = require('path');
packageUtils = module.exports;
packageUtils.isNative = function(module) {
var err;
try {
return require.resolve(module) === module;
} catch (_error) {
err = _error;
return false;
}
};
packageUtils.readFile = function(pathAbs, encoding) {
var options;
if (encoding == null) {
encoding = 'utf8';
}
options = {
encoding: encoding
};
return fs.readFileSync(pathAbs, options);
};
packageUtils.getAst = function(code) {
return UglifyJS.parse(code);
};
packageUtils.getRequireStatements = function(ast, file, possibleExtensions, isOnlyNonNativeNonNpm) {
var fileDir, r;
if (possibleExtensions == null) {
possibleExtensions = ["js", "coffee"];
}
if (isOnlyNonNativeNonNpm == null) {
isOnlyNonNativeNonNpm = true;
}
r = [];
fileDir = path.dirname(file);
ast.walk(new UglifyJS.TreeWalker(function(node) {
var args, existingExtensions, pathOfModule, pathOfModuleLoc, pathOfModuleLocDir, pathOfModuleRaw, rs, text;
if ((node instanceof UglifyJS.AST_Call) && node.start.value === 'require') {
text = node.print_to_string({
beautify: true
});
args = node.args;
if (args.length !== 1) {
throw new Error("in file: " + file + " require supposed to have 1 argument: " + text);
}
pathOfModuleRaw = args[0].value;
pathOfModuleLoc = path.resolve(fileDir, pathOfModuleRaw);
pathOfModuleLocDir = path.dirname(pathOfModuleLoc);
if (pathOfModuleLoc === pathOfModuleLocDir) {
throw new Error("in file: " + file + " require for a directory not supported " + text);
}
if (path.extname(pathOfModuleLoc) === "") {
existingExtensions = possibleExtensions.filter(function(ext) {
return fs.existsSync(pathOfModuleLoc + "." + ext);
});
if (existingExtensions.length > 1) {
throw new Error("in file: " + file + " multiple matching extensions problem for " + text);
}
pathOfModule = existingExtensions.length === 1 ? pathOfModuleLoc + "." + existingExtensions[0] : null;
} else {
pathOfModule = fs.existsSync(pathOfModuleLoc) ? pathOfModuleLoc : null;
}
rs = {
text: text,
path: pathOfModule
};
if (!isOnlyNonNativeNonNpm || pathOfModule) {
r.push(rs);
}
return true;
} else {
}
}));
return r;
};
}).call(this);
//# sourceMappingURL=packageUtils.map