Bladeren bron

amberc.js: compose_js_files() returns a Promise

Manfred Kroehnert 11 jaren geleden
bovenliggende
commit
1e099b07af
1 gewijzigde bestanden met toevoegingen van 66 en 63 verwijderingen
  1. 66 63
      cli/support/amberc.js

+ 66 - 63
cli/support/amberc.js

@@ -541,7 +541,7 @@ AmberC.prototype.verify = function() {
 					throw(new Error('Compilation failed of: ' + file));
 			});
 		}, function(err, result) {
-			self.compose_js_files();
+			compose_js_files(self.defaults);
 	});
 };
 
@@ -551,82 +551,85 @@ AmberC.prototype.verify = function() {
  * Concatenates compiled JavaScript files into one file in the correct order.
  * The name of the produced file is given by defaults.program (set by the last commandline option).
  */
-AmberC.prototype.compose_js_files = function() {
-	var defaults = this.defaults;
-	var programFile = defaults.program;
-	if (undefined === programFile) {
-		return;
-	}
-	if (undefined !== defaults.output_dir) {
-		programFile = path.join(defaults.output_dir, programFile);
-	}
+function compose_js_files(configuration) {
+	return new Promise(function(resolve, reject) {
+		var defaults = configuration;
+		var programFile = defaults.program;
+		if (undefined === programFile) {
+			return;
+		}
+		if (undefined !== defaults.output_dir) {
+			programFile = path.join(defaults.output_dir, programFile);
+		}
 
-	var program_files = [];
-	if (0 !== defaults.libraries.length) {
-		console.log('Collecting libraries: ' + defaults.libraries);
-		program_files.push.apply(program_files, defaults.libraries);
-	}
+		var program_files = [];
+		if (0 !== defaults.libraries.length) {
+			console.log('Collecting libraries: ' + defaults.libraries);
+			program_files.push.apply(program_files, defaults.libraries);
+		}
 
-	if (0 !== defaults.compiled.length) {
-		var compiledFiles = defaults.compiled.slice(0);
+		if (0 !== defaults.compiled.length) {
+			var compiledFiles = defaults.compiled.slice(0);
 
-		console.log('Collecting compiled files: ' + compiledFiles);
-		program_files.push.apply(program_files, compiledFiles);
-	}
+			console.log('Collecting compiled files: ' + compiledFiles);
+			program_files.push.apply(program_files, compiledFiles);
+		}
 
-	console.ambercLog('Writing program file: %s.js', programFile);
+		console.ambercLog('Writing program file: %s.js', programFile);
 
-	var fileStream = fs.createWriteStream(programFile + defaults.suffix_used + '.js');
-	fileStream.on('error', function(error) {
-		fileStream.end();
-		console.ambercLog(error);
-	});
+		var fileStream = fs.createWriteStream(programFile + defaults.suffix_used + '.js');
+		fileStream.on('error', function(error) {
+			fileStream.end();
+			console.ambercLog(error);
+		});
 
-	fileStream.on('close', function(){
-		return;
-	});
+		fileStream.on('close', function(){
+			return;
+		});
 
-	var builder = createConcatenator();
-	builder.add('#!/usr/bin/env node');
-	builder.start();
-
-	program_files.forEach(function(file) {
-		if(fs.existsSync(file)) {
-			console.log('Adding : ' + file);
-			var buffer = fs.readFileSync(file);
-			// matches and returns the "module_id" string in the AMD define: define("module_id", ...)
-			var match = buffer.toString().match(/^define\("([^"]*)"/);
-			if (match /*&& match[1].slice(0,9) !== "amber_vm/"*/) {
-				builder.addId(match[1]);
+		var builder = createConcatenator();
+		builder.add('#!/usr/bin/env node');
+		builder.start();
+
+		program_files.forEach(function(file) {
+			if(fs.existsSync(file)) {
+				console.log('Adding : ' + file);
+				var buffer = fs.readFileSync(file);
+				// matches and returns the "module_id" string in the AMD define: define("module_id", ...)
+				var match = buffer.toString().match(/^define\("([^"]*)"/);
+				if (match /*&& match[1].slice(0,9) !== "amber_vm/"*/) {
+					builder.addId(match[1]);
+				}
+				builder.add(buffer);
+			} else {
+				fileStream.end();
+				throw(new Error('Can not find file ' + file));
 			}
-			builder.add(buffer);
-		} else {
-			fileStream.end();
-			throw(new Error('Can not find file ' + file));
-		}
-	});
+		});
 
-	var mainFunctionOrFile = '';
+		var mainFunctionOrFile = '';
 
-	if (undefined !== defaults.main) {
-		console.log('Adding call to: %s>>main', defaults.main);
-		mainFunctionOrFile += 'smalltalk.' + defaults.main + '._main();';
-	}
+		if (undefined !== defaults.main) {
+			console.log('Adding call to: %s>>main', defaults.main);
+			mainFunctionOrFile += 'smalltalk.' + defaults.main + '._main();';
+		}
 
-	if (undefined !== defaults.mainfile && fs.existsSync(defaults.mainfile)) {
-		console.log('Adding main file: ' + defaults.mainfile);
-		mainFunctionOrFile += '\n' + fs.readFileSync(defaults.mainfile);
-	}
+		if (undefined !== defaults.mainfile && fs.existsSync(defaults.mainfile)) {
+			console.log('Adding main file: ' + defaults.mainfile);
+			mainFunctionOrFile += '\n' + fs.readFileSync(defaults.mainfile);
+		}
 
-	builder.finish(mainFunctionOrFile);
+		builder.finish(mainFunctionOrFile);
 
-	console.log('Writing...');
-	builder.forEach(function (element) {
-		fileStream.write(element);
-		fileStream.write('\n');
+		console.log('Writing...');
+		builder.forEach(function (element) {
+			fileStream.write(element);
+			fileStream.write('\n');
+		});
+		console.log('Done.');
+		fileStream.end();
+		resolve(true);
 	});
-	console.log('Done.');
-	fileStream.end();
 };