You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
103 lines
3.4 KiB
103 lines
3.4 KiB
//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); |
|
}
|
|
|