414 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			414 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
								 | 
							
								"use strict";
							 | 
						||
| 
								 | 
							
								Object.defineProperty(exports, "__esModule", { value: true });
							 | 
						||
| 
								 | 
							
								exports.writeHaxeProject = void 0;
							 | 
						||
| 
								 | 
							
								const fs = require("fs-extra");
							 | 
						||
| 
								 | 
							
								const path = require("path");
							 | 
						||
| 
								 | 
							
								const XmlWriter_1 = require("./XmlWriter");
							 | 
						||
| 
								 | 
							
								function copyAndReplace(from, to, names, values) {
							 | 
						||
| 
								 | 
							
								    let data = fs.readFileSync(from, { encoding: 'utf8' });
							 | 
						||
| 
								 | 
							
								    for (let i = 0; i < names.length; ++i) {
							 | 
						||
| 
								 | 
							
								        data = data.replace(new RegExp(names[i], 'g'), values[i]);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    fs.writeFileSync(to, data, { encoding: 'utf8' });
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								function escapeXml(s) {
							 | 
						||
| 
								 | 
							
								    return s.replace(/[<>&'"]/g, c => {
							 | 
						||
| 
								 | 
							
								        switch (c) {
							 | 
						||
| 
								 | 
							
								            case '<': return '<';
							 | 
						||
| 
								 | 
							
								            case '>': return '>';
							 | 
						||
| 
								 | 
							
								            case '&': return '&';
							 | 
						||
| 
								 | 
							
								            case '\'': return ''';
							 | 
						||
| 
								 | 
							
								            case '"': return '"';
							 | 
						||
| 
								 | 
							
								            default: throw 'unreachable code';
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								function IntelliJ(projectdir, options) {
							 | 
						||
| 
								 | 
							
								    let indir = path.join(__dirname, '..', 'Data', 'intellij');
							 | 
						||
| 
								 | 
							
								    let outdir = path.join(projectdir, options.safeName + '-' + options.system + '-intellij');
							 | 
						||
| 
								 | 
							
								    let sources = '';
							 | 
						||
| 
								 | 
							
								    for (let i = 0; i < options.sources.length; ++i) {
							 | 
						||
| 
								 | 
							
								        if (path.isAbsolute(options.sources[i])) {
							 | 
						||
| 
								 | 
							
								            sources += '      <sourceFolder url="file://' + options.sources[i] + '" isTestSource="false" />\n';
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        else {
							 | 
						||
| 
								 | 
							
								            sources += '      <sourceFolder url="file://$MODULE_DIR$/' + path.relative(outdir, path.resolve(options.from, options.sources[i])).replace(/\\/g, '/') + '" isTestSource="false" />\n';
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    let libraries = '';
							 | 
						||
| 
								 | 
							
								    for (let i = 0; i < options.libraries.length; ++i) {
							 | 
						||
| 
								 | 
							
								        if (path.isAbsolute(options.libraries[i].libpath)) {
							 | 
						||
| 
								 | 
							
								            libraries += '    <content url="file://' + options.libraries[i].libroot + '">\n';
							 | 
						||
| 
								 | 
							
								            libraries += '      <sourceFolder url="file://' + options.libraries[i].libpath + '" isTestSource="false" />\n';
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        else {
							 | 
						||
| 
								 | 
							
								            libraries += '    <content url="file://$MODULE_DIR$/' + path.relative(outdir, path.resolve(options.from, options.libraries[i].libroot)).replace(/\\/g, '/') + '">\n';
							 | 
						||
| 
								 | 
							
								            libraries += '      <sourceFolder url="file://$MODULE_DIR$/' + path.relative(outdir, path.resolve(options.from, options.libraries[i].libpath)).replace(/\\/g, '/') + '" isTestSource="false" />\n';
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        libraries += '    </content>\n';
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    let args = '';
							 | 
						||
| 
								 | 
							
								    let defines = '';
							 | 
						||
| 
								 | 
							
								    for (let i = 0; i < options.defines.length; ++i) {
							 | 
						||
| 
								 | 
							
								        defines += options.defines[i];
							 | 
						||
| 
								 | 
							
								        if (i < options.defines.length - 1)
							 | 
						||
| 
								 | 
							
								            defines += ',';
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    for (let param of options.parameters) {
							 | 
						||
| 
								 | 
							
								        defines += param + ',';
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    let target;
							 | 
						||
| 
								 | 
							
								    switch (options.language) {
							 | 
						||
| 
								 | 
							
								        case 'hl':
							 | 
						||
| 
								 | 
							
								        case 'cpp':
							 | 
						||
| 
								 | 
							
								            target = 'C++';
							 | 
						||
| 
								 | 
							
								            break;
							 | 
						||
| 
								 | 
							
								        case 'as':
							 | 
						||
| 
								 | 
							
								            target = 'Flash';
							 | 
						||
| 
								 | 
							
								            args = '-swf-version 16.0';
							 | 
						||
| 
								 | 
							
								            break;
							 | 
						||
| 
								 | 
							
								        case 'cs':
							 | 
						||
| 
								 | 
							
								            target = 'C#';
							 | 
						||
| 
								 | 
							
								            if (fs.existsSync(options.haxeDirectory) && fs.statSync(options.haxeDirectory).isDirectory() && fs.existsSync(path.join(options.haxeDirectory, 'netlib'))) {
							 | 
						||
| 
								 | 
							
								                args = '-net-std ' + path.relative(outdir, path.join(options.haxeDirectory, 'netlib'));
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            break;
							 | 
						||
| 
								 | 
							
								        case 'java':
							 | 
						||
| 
								 | 
							
								            target = 'Java';
							 | 
						||
| 
								 | 
							
								            if (fs.existsSync(options.haxeDirectory) && fs.statSync(options.haxeDirectory).isDirectory() && fs.existsSync(path.join(options.haxeDirectory, 'hxjava', 'hxjava-std.jar'))) {
							 | 
						||
| 
								 | 
							
								                args = '-java-lib ' + path.relative(outdir, path.join(options.haxeDirectory, 'hxjava', 'hxjava-std.jar'));
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            break;
							 | 
						||
| 
								 | 
							
								        case 'js':
							 | 
						||
| 
								 | 
							
								            target = 'JavaScript';
							 | 
						||
| 
								 | 
							
								            break;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    fs.copySync(path.join(indir, 'name.iml'), path.join(outdir, options.name + '.iml'), { overwrite: true });
							 | 
						||
| 
								 | 
							
								    copyAndReplace(path.join(indir, 'name.iml'), path.join(outdir, options.name + '.iml'), ['{name}', '{sources}', '{libraries}', '{target}', '{system}', '{args}'], [options.safeName, sources, libraries, target, options.system, args]);
							 | 
						||
| 
								 | 
							
								    fs.copySync(path.join(indir, 'idea', 'compiler.xml'), path.join(outdir, '.idea', 'compiler.xml'), { overwrite: true });
							 | 
						||
| 
								 | 
							
								    copyAndReplace(path.join(indir, 'idea', 'haxe.xml'), path.join(outdir, '.idea', 'haxe.xml'), ['{defines}'], [defines]);
							 | 
						||
| 
								 | 
							
								    fs.copySync(path.join(indir, 'idea', 'misc.xml'), path.join(outdir, '.idea', 'misc.xml'), { overwrite: true });
							 | 
						||
| 
								 | 
							
								    copyAndReplace(path.join(indir, 'idea', 'modules.xml'), path.join(outdir, '.idea', 'modules.xml'), ['{name}'], [options.name]);
							 | 
						||
| 
								 | 
							
								    fs.copySync(path.join(indir, 'idea', 'vcs.xml'), path.join(outdir, '.idea', 'vcs.xml'), { overwrite: true });
							 | 
						||
| 
								 | 
							
								    copyAndReplace(path.join(indir, 'idea', 'name'), path.join(outdir, '.idea', '.name'), ['{name}'], [options.name]);
							 | 
						||
| 
								 | 
							
								    fs.copySync(path.join(indir, 'idea', 'copyright', 'profiles_settings.xml'), path.join(outdir, '.idea', 'copyright', 'profiles_settings.xml'), { overwrite: true });
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								function hxml(projectdir, options) {
							 | 
						||
| 
								 | 
							
								    let data = '';
							 | 
						||
| 
								 | 
							
								    let lines = [];
							 | 
						||
| 
								 | 
							
								    // returns only unique lines and '' otherwise
							 | 
						||
| 
								 | 
							
								    function unique(line) {
							 | 
						||
| 
								 | 
							
								        if (lines.indexOf(line) === -1) {
							 | 
						||
| 
								 | 
							
								            lines.push(line);
							 | 
						||
| 
								 | 
							
								            return line;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        return '';
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    for (let i = 0; i < options.sources.length; ++i) {
							 | 
						||
| 
								 | 
							
								        if (path.isAbsolute(options.sources[i])) {
							 | 
						||
| 
								 | 
							
								            data += unique('-cp ' + options.sources[i] + '\n');
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        else {
							 | 
						||
| 
								 | 
							
								            data += unique('-cp ' + path.relative(projectdir, path.resolve(options.from, options.sources[i])) + '\n'); // from.resolve('build').relativize(from.resolve(this.sources[i])).toString());
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    for (let i = 0; i < options.libraries.length; ++i) {
							 | 
						||
| 
								 | 
							
								        if (path.isAbsolute(options.libraries[i].libpath)) {
							 | 
						||
| 
								 | 
							
								            data += unique('-cp ' + options.libraries[i].libpath + '\n');
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        else {
							 | 
						||
| 
								 | 
							
								            data += unique('-cp ' + path.relative(projectdir, path.resolve(options.from, options.libraries[i].libpath)) + '\n'); // from.resolve('build').relativize(from.resolve(this.sources[i])).toString());
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    for (let d in options.defines) {
							 | 
						||
| 
								 | 
							
								        let define = options.defines[d];
							 | 
						||
| 
								 | 
							
								        data += unique('-D ' + define + '\n');
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    if (options.language === 'cpp') {
							 | 
						||
| 
								 | 
							
								        data += unique('-cpp ' + path.normalize(options.to) + '\n');
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    else if (options.language === 'cs') {
							 | 
						||
| 
								 | 
							
								        data += unique('-cs ' + path.normalize(options.to) + '\n');
							 | 
						||
| 
								 | 
							
								        if (fs.existsSync(options.haxeDirectory) && fs.statSync(options.haxeDirectory).isDirectory() && fs.existsSync(path.join(options.haxeDirectory, 'netlib'))) {
							 | 
						||
| 
								 | 
							
								            data += unique('-net-std ' + path.relative(projectdir, path.join(options.haxeDirectory, 'netlib')) + '\n');
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    else if (options.language === 'java') {
							 | 
						||
| 
								 | 
							
								        data += unique('-java ' + path.normalize(options.to) + '\n');
							 | 
						||
| 
								 | 
							
								        if (fs.existsSync(options.haxeDirectory) && fs.statSync(options.haxeDirectory).isDirectory() && fs.existsSync(path.join(options.haxeDirectory, 'hxjava', 'hxjava-std.jar'))) {
							 | 
						||
| 
								 | 
							
								            data += unique('-java-lib ' + path.relative(projectdir, path.join(options.haxeDirectory, 'hxjava', 'hxjava-std.jar')) + '\n');
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    else if (options.language === 'js') {
							 | 
						||
| 
								 | 
							
								        data += unique('-js ' + path.normalize(options.to) + '\n');
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    else if (options.language === 'as') {
							 | 
						||
| 
								 | 
							
								        data += unique('-swf ' + path.normalize(options.to) + '\n');
							 | 
						||
| 
								 | 
							
								        data += unique('-swf-version ' + options.swfVersion + '\n');
							 | 
						||
| 
								 | 
							
								        data += unique('-swf-header ' + options.width + ':' + options.height + ':' + options.framerate + ':' + options.stageBackground + '\n');
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    else if (options.language === 'xml') {
							 | 
						||
| 
								 | 
							
								        data += unique('-xml ' + path.normalize(options.to) + '\n');
							 | 
						||
| 
								 | 
							
								        data += unique('--macro include(\'kha\')\n');
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    else if (options.language === 'hl') {
							 | 
						||
| 
								 | 
							
								        data += unique('-hl ' + path.normalize(options.to) + '\n');
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    for (let param of options.parameters) {
							 | 
						||
| 
								 | 
							
								        data += unique(param + '\n');
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    if (!options.parameters.some((param) => param.includes('-main '))) {
							 | 
						||
| 
								 | 
							
								        const entrypoint = options ? options.main ? options.main : 'Main' : 'Main';
							 | 
						||
| 
								 | 
							
								        data += unique('-main ' + entrypoint + '\n');
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    fs.outputFileSync(path.join(projectdir, 'project-' + options.system + '.hxml'), data);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								function FlashDevelop(projectdir, options) {
							 | 
						||
| 
								 | 
							
								    let platform;
							 | 
						||
| 
								 | 
							
								    switch (options.language) {
							 | 
						||
| 
								 | 
							
								        case 'hl':
							 | 
						||
| 
								 | 
							
								        case 'cpp':
							 | 
						||
| 
								 | 
							
								            platform = 'C++';
							 | 
						||
| 
								 | 
							
								            break;
							 | 
						||
| 
								 | 
							
								        case 'as':
							 | 
						||
| 
								 | 
							
								            platform = 'Flash Player';
							 | 
						||
| 
								 | 
							
								            break;
							 | 
						||
| 
								 | 
							
								        case 'cs':
							 | 
						||
| 
								 | 
							
								            platform = 'C#';
							 | 
						||
| 
								 | 
							
								            break;
							 | 
						||
| 
								 | 
							
								        case 'java':
							 | 
						||
| 
								 | 
							
								            platform = 'Java';
							 | 
						||
| 
								 | 
							
								            break;
							 | 
						||
| 
								 | 
							
								        case 'js':
							 | 
						||
| 
								 | 
							
								            platform = 'JavaScript';
							 | 
						||
| 
								 | 
							
								            break;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    options.swfVersion = 'swfVersion' in options ? options.swfVersion : 16.0;
							 | 
						||
| 
								 | 
							
								    options.stageBackground = 'stageBackground' in options ? options.stageBackground : 'ffffff';
							 | 
						||
| 
								 | 
							
								    options.framerate = 'framerate' in options ? options.framerate : 30;
							 | 
						||
| 
								 | 
							
								    let swfVersion = parseFloat(options.swfVersion).toFixed(1).split('.');
							 | 
						||
| 
								 | 
							
								    let output = {
							 | 
						||
| 
								 | 
							
								        n: 'output',
							 | 
						||
| 
								 | 
							
								        e: [
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                n: 'movie',
							 | 
						||
| 
								 | 
							
								                outputType: 'Application'
							 | 
						||
| 
								 | 
							
								            },
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                n: 'movie',
							 | 
						||
| 
								 | 
							
								                input: ''
							 | 
						||
| 
								 | 
							
								            },
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                n: 'movie',
							 | 
						||
| 
								 | 
							
								                path: path.normalize(options.to)
							 | 
						||
| 
								 | 
							
								            },
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                n: 'movie',
							 | 
						||
| 
								 | 
							
								                fps: options.framerate
							 | 
						||
| 
								 | 
							
								            },
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                n: 'movie',
							 | 
						||
| 
								 | 
							
								                width: options.width
							 | 
						||
| 
								 | 
							
								            },
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                n: 'movie',
							 | 
						||
| 
								 | 
							
								                height: options.height
							 | 
						||
| 
								 | 
							
								            },
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                n: 'movie',
							 | 
						||
| 
								 | 
							
								                version: swfVersion[0]
							 | 
						||
| 
								 | 
							
								            },
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                n: 'movie',
							 | 
						||
| 
								 | 
							
								                minorVersion: swfVersion[1]
							 | 
						||
| 
								 | 
							
								            },
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                n: 'movie',
							 | 
						||
| 
								 | 
							
								                platform: platform
							 | 
						||
| 
								 | 
							
								            },
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                n: 'movie',
							 | 
						||
| 
								 | 
							
								                background: '#' + options.stageBackground
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        ]
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    if (fs.existsSync(options.haxeDirectory) && fs.statSync(options.haxeDirectory).isDirectory()) {
							 | 
						||
| 
								 | 
							
								        output.e.push({
							 | 
						||
| 
								 | 
							
								            n: 'movie',
							 | 
						||
| 
								 | 
							
								            preferredSDK: path.relative(projectdir, options.haxeDirectory)
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    let classpaths = [];
							 | 
						||
| 
								 | 
							
								    for (let i = 0; i < options.sources.length; ++i) {
							 | 
						||
| 
								 | 
							
								        classpaths.push(path.relative(projectdir, path.resolve(options.from, options.sources[i])));
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    for (let i = 0; i < options.libraries.length; ++i) {
							 | 
						||
| 
								 | 
							
								        classpaths.push(path.relative(projectdir, path.resolve(options.from, options.libraries[i].libpath)));
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    let otheroptions = [
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            n: 'option',
							 | 
						||
| 
								 | 
							
								            showHiddenPaths: 'False'
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    ];
							 | 
						||
| 
								 | 
							
								    if (options.language === 'cpp' || options.system === 'krom') {
							 | 
						||
| 
								 | 
							
								        otheroptions.push({
							 | 
						||
| 
								 | 
							
								            n: 'option',
							 | 
						||
| 
								 | 
							
								            testMovie: 'Custom'
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								        otheroptions.push({
							 | 
						||
| 
								 | 
							
								            n: 'option',
							 | 
						||
| 
								 | 
							
								            testMovieCommand: 'run_' + options.system + '.bat'
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    else if (options.language === 'cs' || options.language === 'java') {
							 | 
						||
| 
								 | 
							
								        otheroptions.push({
							 | 
						||
| 
								 | 
							
								            n: 'option',
							 | 
						||
| 
								 | 
							
								            testMovie: 'OpenDocument'
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								        otheroptions.push({
							 | 
						||
| 
								 | 
							
								            n: 'option',
							 | 
						||
| 
								 | 
							
								            testMovieCommand: ''
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    else if (options.language === 'js') {
							 | 
						||
| 
								 | 
							
								        otheroptions.push({
							 | 
						||
| 
								 | 
							
								            n: 'option',
							 | 
						||
| 
								 | 
							
								            testMovie: 'Webserver'
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								        otheroptions.push({
							 | 
						||
| 
								 | 
							
								            n: 'option',
							 | 
						||
| 
								 | 
							
								            testMovieCommand: path.join(path.parse(options.to).dir, 'index.html')
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    else {
							 | 
						||
| 
								 | 
							
								        otheroptions.push({
							 | 
						||
| 
								 | 
							
								            n: 'option',
							 | 
						||
| 
								 | 
							
								            testMovie: 'Default'
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    let def = '';
							 | 
						||
| 
								 | 
							
								    for (let d of options.defines) {
							 | 
						||
| 
								 | 
							
								        def += '-D ' + d + '
';
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    if (options.language === 'java' && fs.existsSync(options.haxeDirectory) && fs.statSync(options.haxeDirectory).isDirectory() && fs.existsSync(path.join(options.haxeDirectory, 'hxjava', 'hxjava-std.jar'))) {
							 | 
						||
| 
								 | 
							
								        def += '-java-lib ' + path.relative(projectdir, path.join(options.haxeDirectory, 'hxjava', 'hxjava-std.jar')) + '
';
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    if (options.language === 'cs' && fs.existsSync(options.haxeDirectory) && fs.statSync(options.haxeDirectory).isDirectory() && fs.existsSync(path.join(options.haxeDirectory, 'netlib'))) {
							 | 
						||
| 
								 | 
							
								        def += '-net-std ' + path.relative(projectdir, path.join(options.haxeDirectory, 'netlib')) + '
';
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    def += '-D kha_output="' + path.resolve(path.join(projectdir, options.to)) + '"
';
							 | 
						||
| 
								 | 
							
								    let mainClass = 'Main';
							 | 
						||
| 
								 | 
							
								    for (let param of options.parameters) {
							 | 
						||
| 
								 | 
							
								        const mainRe = /-main\s+([^\s]+)/.exec(param);
							 | 
						||
| 
								 | 
							
								        if (mainRe) {
							 | 
						||
| 
								 | 
							
								            mainClass = mainRe[1];
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        else {
							 | 
						||
| 
								 | 
							
								            def += escapeXml(param) + '
';
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    let project = {
							 | 
						||
| 
								 | 
							
								        n: 'project',
							 | 
						||
| 
								 | 
							
								        version: '2',
							 | 
						||
| 
								 | 
							
								        e: [
							 | 
						||
| 
								 | 
							
								            'Output SWF options',
							 | 
						||
| 
								 | 
							
								            output,
							 | 
						||
| 
								 | 
							
								            'Other classes to be compiled into your SWF',
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                n: 'classpaths',
							 | 
						||
| 
								 | 
							
								                e: classpaths
							 | 
						||
| 
								 | 
							
								                    .reduce((a, b) => {
							 | 
						||
| 
								 | 
							
								                    if (a.indexOf(b) < 0)
							 | 
						||
| 
								 | 
							
								                        a.push(b);
							 | 
						||
| 
								 | 
							
								                    return a;
							 | 
						||
| 
								 | 
							
								                }, [])
							 | 
						||
| 
								 | 
							
								                    .map((e) => {
							 | 
						||
| 
								 | 
							
								                    return { n: 'class', path: e };
							 | 
						||
| 
								 | 
							
								                })
							 | 
						||
| 
								 | 
							
								            },
							 | 
						||
| 
								 | 
							
								            'Build options',
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                n: 'build',
							 | 
						||
| 
								 | 
							
								                e: [
							 | 
						||
| 
								 | 
							
								                    {
							 | 
						||
| 
								 | 
							
								                        n: 'option',
							 | 
						||
| 
								 | 
							
								                        directives: ''
							 | 
						||
| 
								 | 
							
								                    },
							 | 
						||
| 
								 | 
							
								                    {
							 | 
						||
| 
								 | 
							
								                        n: 'option',
							 | 
						||
| 
								 | 
							
								                        flashStrict: 'False'
							 | 
						||
| 
								 | 
							
								                    },
							 | 
						||
| 
								 | 
							
								                    {
							 | 
						||
| 
								 | 
							
								                        n: 'option',
							 | 
						||
| 
								 | 
							
								                        noInlineOnDebug: 'False'
							 | 
						||
| 
								 | 
							
								                    },
							 | 
						||
| 
								 | 
							
								                    {
							 | 
						||
| 
								 | 
							
								                        n: 'option',
							 | 
						||
| 
								 | 
							
								                        mainClass: mainClass
							 | 
						||
| 
								 | 
							
								                    },
							 | 
						||
| 
								 | 
							
								                    {
							 | 
						||
| 
								 | 
							
								                        n: 'option',
							 | 
						||
| 
								 | 
							
								                        enabledebug: options.language === 'as' ? 'True' : 'False'
							 | 
						||
| 
								 | 
							
								                    },
							 | 
						||
| 
								 | 
							
								                    {
							 | 
						||
| 
								 | 
							
								                        n: 'option',
							 | 
						||
| 
								 | 
							
								                        additional: def
							 | 
						||
| 
								 | 
							
								                    }
							 | 
						||
| 
								 | 
							
								                ]
							 | 
						||
| 
								 | 
							
								            },
							 | 
						||
| 
								 | 
							
								            'haxelib libraries',
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                n: 'haxelib',
							 | 
						||
| 
								 | 
							
								                e: [
							 | 
						||
| 
								 | 
							
								                    'example: <library name="..." />'
							 | 
						||
| 
								 | 
							
								                ]
							 | 
						||
| 
								 | 
							
								            },
							 | 
						||
| 
								 | 
							
								            'Class files to compile (other referenced classes will automatically be included)',
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                n: 'compileTargets',
							 | 
						||
| 
								 | 
							
								                e: [
							 | 
						||
| 
								 | 
							
								                    {
							 | 
						||
| 
								 | 
							
								                        n: 'compile',
							 | 
						||
| 
								 | 
							
								                        path: '..\\Sources\\Main.hx'
							 | 
						||
| 
								 | 
							
								                    }
							 | 
						||
| 
								 | 
							
								                ]
							 | 
						||
| 
								 | 
							
								            },
							 | 
						||
| 
								 | 
							
								            'Paths to exclude from the Project Explorer tree',
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                n: 'hiddenPaths',
							 | 
						||
| 
								 | 
							
								                e: [
							 | 
						||
| 
								 | 
							
								                    'example: <hidden path="..." />'
							 | 
						||
| 
								 | 
							
								                ]
							 | 
						||
| 
								 | 
							
								            },
							 | 
						||
| 
								 | 
							
								            'Executed before build',
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                n: 'preBuildCommand'
							 | 
						||
| 
								 | 
							
								            },
							 | 
						||
| 
								 | 
							
								            'Executed after build',
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                n: 'postBuildCommand',
							 | 
						||
| 
								 | 
							
								                alwaysRun: 'False'
							 | 
						||
| 
								 | 
							
								            },
							 | 
						||
| 
								 | 
							
								            'Other project options',
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                n: 'options',
							 | 
						||
| 
								 | 
							
								                e: otheroptions
							 | 
						||
| 
								 | 
							
								            },
							 | 
						||
| 
								 | 
							
								            'Plugin storage',
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                n: 'storage'
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        ]
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    (0, XmlWriter_1.writeXml)(project, path.join(projectdir, options.safeName + '-' + options.system + '.hxproj'));
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								function writeHaxeProject(projectdir, projectFiles, options) {
							 | 
						||
| 
								 | 
							
								    hxml(projectdir, options);
							 | 
						||
| 
								 | 
							
								    if (projectFiles) {
							 | 
						||
| 
								 | 
							
								        FlashDevelop(projectdir, options);
							 | 
						||
| 
								 | 
							
								        IntelliJ(projectdir, options);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								exports.writeHaxeProject = writeHaxeProject;
							 | 
						||
| 
								 | 
							
								//# sourceMappingURL=HaxeProject.js.map
							 |