8398c9048d
code was modified slightly, so the code differs from the original downloadable 1.9.5 version
103 lines
3.4 KiB
JavaScript
103 lines
3.4 KiB
JavaScript
//START of the "main" part of the script.
|
|
//This is the entry point for this script file.
|
|
load("buildUtil.js");
|
|
load("buildUtilXd.js");
|
|
|
|
var result = "ERROR";
|
|
|
|
var buildDirectory = new String(arguments[0]);
|
|
var depList = new String(arguments[1]);
|
|
var provideList = new String(arguments[2]);
|
|
var version = new String(arguments[3]);
|
|
var xdDojoUrl = new String(arguments[4]);
|
|
|
|
depList = depList.split(",");
|
|
|
|
//Check if there were no provideList (the caller can send string "null"
|
|
//to indicate that the command line parameter is empty. We need some string
|
|
//to make sure all the arguments are in the right spot.
|
|
if(provideList == "null"){
|
|
provideList = "[]";
|
|
}else{
|
|
provideList = provideList.split(",");
|
|
provideList = '["' + provideList.join('","') + '"]';
|
|
}
|
|
|
|
var dependencyResult;
|
|
eval('dependencyResult = {depList: ["' + depList.join('","') + '"], provideList: ' + provideList + '};');
|
|
|
|
//Make sure we are dealing with JS files and that the paths are not outside
|
|
//of the working area. Do this to discourage fetching arbitrary files from
|
|
//the server.
|
|
var deps = dependencyResult.depList;
|
|
var isInputOk = true;
|
|
for(var i = 0; i < deps.length; i++){
|
|
var matches = deps[i].match(/\.\./g);
|
|
if((matches && matches.length > 1) || !deps[i].match(/\.js$/) || deps[i].indexOf(0) == '/'){
|
|
print("Error: Invalid file set.");
|
|
isInputOk = false;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if(isInputOk){
|
|
//Load dojo (needed for string interning)
|
|
djConfig={
|
|
baseRelativePath: "../"
|
|
};
|
|
load('../dojo.js');
|
|
dojo.require("dojo.string.extras");
|
|
dojo.require("dojo.crypto.MD5");
|
|
|
|
var buildSigDir = dojo.crypto.MD5.compute(depList.sort().join(","), dojo.crypto.outputTypes.Hex);
|
|
try{
|
|
//xxx createLayerContents is broken: need kwargs? it is optional but probably should provide it.
|
|
var contents = buildUtil.createLayerContents(dependencyResult.depList, dependencyResult.provideList, version);
|
|
var compressedContents = "";
|
|
var prefixes = [["dojo", "src"]];
|
|
|
|
//Make sure any dojo.requireLocalization calls are modified
|
|
//so that they inform the loader of valid locales that can be loaded.
|
|
contents = buildUtil.modifyRequireLocalization(contents, prefixes);
|
|
|
|
//Intern strings.
|
|
contents = buildUtil.interningRegexpMagic("xdomain", contents, djConfig.baseRelativePath, prefixes, [], true);
|
|
|
|
//Set the xdomain dojo url
|
|
if(xdDojoUrl){
|
|
contents = buildUtilXd.setXdDojoConfig(contents, xdDojoUrl);
|
|
}
|
|
|
|
//Compress code.
|
|
compressedContents = buildUtil.optimizeJs("dojo.js", contents, "", "shrinksafe");
|
|
|
|
//Add copyright
|
|
var copyright = fileUtil.readFile("copyright.txt");
|
|
var buildNotice = fileUtil.readFile("build_notice.txt");
|
|
contents = copyright + buildNotice + contents;
|
|
compressedContents = copyright + buildNotice + compressedContents;
|
|
|
|
//Prep cache location
|
|
var buildCachePath = buildDirectory + "/" + buildSigDir + "/";
|
|
|
|
//Create needed directories for cache location.
|
|
var dirFile = new java.io.File(buildCachePath + "compressed");
|
|
var dirsOk = dirFile.mkdirs();
|
|
|
|
result = "dirFile: " + dirFile.getAbsolutePath() + ", dirsOK: " + dirsOk;
|
|
|
|
//Create build contents file
|
|
var buildContents = dependencyResult.provideList.sort().join("\n");
|
|
|
|
//Save files to disk
|
|
fileUtil.saveUtf8File(buildCachePath + "dojo.js", contents);
|
|
fileUtil.saveUtf8File(buildCachePath + "compressed/dojo.js", compressedContents);
|
|
fileUtil.saveUtf8File(buildCachePath + "build.txt", buildContents);
|
|
|
|
result = "OK";
|
|
}catch(e){
|
|
result = "ERROR: " + e;
|
|
}
|
|
|
|
print(result);
|
|
}
|