Project = Ext.extend(Object, { constructor : function(projectFile, builder) { var fileName = projectFile.split(/\\|\//i).pop(), dir = projectFile.replace(fileName, ''), contents, config; if (!Fs.exists(projectFile)) { throw 'Project file doesn\'t exist'; } contents = Fs.readFile(projectFile); try { config = JSON.parse(contents); } catch (e) { throw 'The JSB file is not valid JSON.\n' + e.toString(); } Ext.apply(config, { targets: config.targets || config.pkgs || [], name: config.projectName, license: config.licenseText, jsbDir: Fs.getFullPath(dir), jsbFile: fileName, packages: config.packages || [], builds: config.builds || [], // If the JSB file contains a deployDir property, append that to the -d deployDir deployDir: builder.get('deployDir') + Fs.sep + (config.deployDir || ''), resources: config.resources || [] }); this.builder = builder; this.config = config; this.parseTargets(); }, parseTargets : function() { // Split targets up into packages and builds for backwards compatibility this.get('targets').forEach(function(item) { if (item.packages) { this.get('builds').push(item); } else { this.get('packages').push(item); } }, this); // Convert each package config object into an actual Package instance this.set('packages', this.get('packages').map(function(item) { return new Package(item, this); }, this)); // Convert each build config object into an actual Build instance this.set('builds', this.get('builds').map(function(item) { return new Build(item, this); }, this)); }, getPackageById : function(id) { var ret = false; this.get('packages').forEach(function(pkg) { if (pkg.get('id') == id) { ret = pkg; } }); return ret; }, /** * Creates the directory we are going to deploy to. */ makeDeployDir: function() { var project = this.project, deployDir = Fs.mkdir(this.get('deployDir')); this.set('deployDir', deployDir); if (this.get('verbose')) { this.log('Created the deploy directory ' + deployDir); } }, build : function() { this.makeDeployDir(); this.createPackages(); this.createBuilds(); this.copyResources(); if (this.builder.get('verbose')) { Logger.log(''); } Logger.log('Done building!\n'); }, createPackages : function() { this.get('packages').forEach(function(pkg) { pkg.create(); }); }, createBuilds : function() { this.get('builds').forEach(function(build) { build.create(); }); }, copyResources : function() { if (this.builder.get('verbose')) { Logger.log(''); } Logger.log('Copy resources...'); this.get('resources').forEach(function(resource) { var filters = resource.filters, srcDir = this.get('jsbDir') + Fs.sep + resource.src, dest = resource.dest || resource.src; dest = dest || ''; dest = this.get('deployDir') + Fs.sep + dest; // TODO: Implement filters if (this.builder.get('verbose')) { Logger.log(' + ' + resource.src + ' -> ' + dest); } Fs.copy(srcDir, dest); }, this); }, get : function(key) { return this.config[key] || false; }, set : function(key, value, ifNotExists) { if (ifNotExists && this.get(key) !== false) { return; } this.config[key] = value; }, compressTarget : function(target) { if (this.builder.get('nocompress') || !target.get('compress')) { return; } Logger.log(' * Compress and obfuscate ' + target.get('target') + '...'); var destination = target.get('targetPath'), source = destination + '-temp-' + Date.now() * Math.random(); system.move(destination, source), command = this.getCompressor() + '-o ' + destination + ' ' + source; Cmd.execute(command); Fs.remove(source); }, getCompressor : function() { return 'java -jar ' + system.script.replace(Fs.getPath('bin/JSBuilder.js'), '') + Fs.getPath('ycompressor/ycompressor.jar') + ' --type js '; }, getSourceFiles: function() { Logger.log(''); Logger.log(''); this.get('builds').forEach(function(build) { if (build.get('packages')) { Logger.log(''); build.get('packages').forEach(function(pkg) { pkg = build.project.getPackageById(pkg); Logger.log(''); pkg.get('files').forEach(function(file) { Logger.log(''); }); Logger.log(''); }); Logger.log(''); }; }); }, getSpecFiles: function() { Logger.log(''); Logger.log(''); this.get('builds').forEach(function(build) { if (build.get('packages')) { Logger.log(''); build.get('packages').forEach(function(pkg) { pkg = build.project.getPackageById(pkg); Logger.log(''); pkg.get('files').forEach(function(file) { Logger.log(''); }); Logger.log(''); }); Logger.log(''); }; }); } });