| | 273 | //********* Start Minimal ********* |
| | 274 | function minimal(){ |
| | 275 | logger.info("Using profile: " + kwArgs.profileFile); |
| | 276 | logger.info("Using version number: " + kwArgs.version + " for the release."); |
| | 277 | |
| | 278 | clean(); |
| | 279 | |
| | 280 | var dependencies = kwArgs.profileProperties.dependencies; |
| | 281 | var prefixes = dependencies.prefixes; |
| | 282 | var lineSeparator = fileUtil.getLineSeparator(); |
| | 283 | var copyrightText = fileUtil.readFile("copyright.txt"); |
| | 284 | var buildNoticeText = fileUtil.readFile("build_notice.txt"); |
| | 285 | |
| | 286 | //Find the dojo prefix path. Need it to process other module prefixes. |
| | 287 | var dojoPrefixPath = buildUtil.getDojoPrefixPath(prefixes) + '/'; |
| | 288 | |
| | 289 | logger.trace("Building dojo.js and layer files"); |
| | 290 | var result = buildUtil.makeDojoJs(buildUtil.loadDependencyList(kwArgs.profileProperties), kwArgs.version); |
| | 291 | |
| | 292 | //Save the build layers. The first layer is dojo.js. |
| | 293 | var layerLegalText = copyrightText + buildNoticeText; |
| | 294 | var dojoReleaseDir = kwArgs.releaseDir + "/dojo/"; |
| | 295 | |
| | 296 | var optimizeIgnoreString = ""; |
| | 297 | for(var i = 0; i < result.length; i++){ |
| | 298 | var layerName = result[i].layerName; |
| | 299 | var srcFilePath = dojoPrefixPath + result[i].layerName; |
| | 300 | var dstFilePath = dojoReleaseDir + result[i].layerName; |
| | 301 | var fileContents = result[i].contents; |
| | 302 | |
| | 303 | // make sure directory exists |
| | 304 | var dir = dstFilePath.substr(0,dstFilePath.lastIndexOf('/')); |
| | 305 | var d = new java.io.File(dir); |
| | 306 | d.mkdirs(); |
| | 307 | |
| | 308 | //Build up string of files to ignore for the directory optimization step |
| | 309 | var ignoreName = layerName.replace(/\.\.\//g, ""); |
| | 310 | optimizeIgnoreString += (optimizeIgnoreString ? "|" : "") + buildUtil.regExpEscape(ignoreName) + "$"; |
| | 311 | optimizeIgnoreString += "|" + buildUtil.regExpEscape(ignoreName + ".uncompressed.js") + "$"; |
| | 312 | |
| | 313 | //Burn in xd path for dojo if requested, and only do this in dojo.xd.js. |
| | 314 | if(layerName.match(/dojo\.xd\.js/) && kwArgs.xdDojoPath){ |
| | 315 | fileContents = buildUtilXd.setXdDojoConfig(fileContents, kwArgs.xdDojoPath); |
| | 316 | } |
| | 317 | |
| | 318 | // Remove require statements, TODO: move this to build util? |
| | 319 | fileContents = fileContents.replace( /(dojo|wti)\.require\(([\w\W]*?)\)/mg , ""); |
| | 320 | |
| | 321 | //Flatten resources |
| | 322 | //FIXME: Flatten resources. Only do the top level flattening for bundles |
| | 323 | //in the layer files. How to do this for layers? only do one nls file for |
| | 324 | //all layers, or a different one for each layer? |
| | 325 | /* |
| | 326 | if(layerName == "dojo.js"){ |
| | 327 | i18nUtil.flattenLayerFileBundles(dstFilePath, dojoReleaseDir + "nls", "nls", kwArgs); |
| | 328 | }*/ |
| | 329 | |
| | 330 | //Save uncompressed file. |
| | 331 | var uncompressedFilePath = dstFilePath + ".uncompressed.js"; |
| | 332 | var uncompressedContents = layerLegalText + fileContents; |
| | 333 | if(layerName.match(/\.xd\.js$/) && !layerName.match(/dojo(\.xd)?\.js/)){ |
| | 334 | uncompressedContents = buildUtilXd.makeXdContents(uncompressedContents, prefixes); |
| | 335 | } |
| | 336 | fileUtil.saveFile(uncompressedFilePath, uncompressedContents); |
| | 337 | |
| | 338 | //Intern strings if desired. Do this before compression, since, in the xd case, |
| | 339 | //"dojo" gets converted to a shortened name. |
| | 340 | if(kwArgs.internStrings){ |
| | 341 | logger.info("Interning strings for file: " + dstFilePath); |
| | 342 | var prefixes = dependencies["prefixes"] || []; |
| | 343 | var skiplist = dependencies["internSkipList"] || []; |
| | 344 | buildUtil.internTemplateStringsInFile(uncompressedFilePath, dojoReleaseDir, prefixes, skiplist); |
| | 345 | |
| | 346 | //Load the file contents after string interning, to pick up interned strings. |
| | 347 | fileContents = fileUtil.readFile(uncompressedFilePath); |
| | 348 | } |
| | 349 | |
| | 350 | //Save compressed file. |
| | 351 | logger.trace("Optimizing (" + kwArgs.layerOptimize + ") file: " + dstFilePath); |
| | 352 | var compressedContents = buildUtil.optimizeJs(dstFilePath, fileContents, layerLegalText, kwArgs.layerOptimize); |
| | 353 | if(layerName.match(/\.xd\.js$/) && !layerName.match(/dojo(\.xd)?\.js/)){ |
| | 354 | compressedContents = buildUtilXd.makeXdContents(compressedContents, prefixes); |
| | 355 | } |
| | 356 | fileUtil.saveFile(dstFilePath, compressedContents); |
| | 357 | |
| | 358 | // Remove uncompressed file |
| | 359 | fileUtil.deleteFile(uncompressedFilePath); |
| | 360 | } |
| | 361 | |
| | 362 | //Remove _base from the release. |
| | 363 | fileUtil.deleteFile(dojoReleaseDir + "_base"); |
| | 364 | fileUtil.deleteFile(dojoReleaseDir + "_base.js"); |
| | 365 | |
| | 366 | |
| | 367 | //Save the dependency lists to build.txt |
| | 368 | var buildText = "Files baked into this build:" + lineSeparator; |
| | 369 | for(var i = 0; i < result.length; i++){ |
| | 370 | buildText += lineSeparator + result[i].layerName + ":" + lineSeparator; |
| | 371 | buildText += result[i].depList.join(lineSeparator) + lineSeparator; |
| | 372 | } |
| | 373 | fileUtil.saveFile(kwArgs.releaseDir + "/dojo/build.txt", buildText); |
| | 374 | logger.info(buildText); |
| | 375 | |
| | 376 | logger.info("Build is in directory: " + kwArgs.releaseDir); |
| | 377 | } |
| | 378 | //********* End release ********* |
| | 379 | |