219 lines
4.7 KiB
JavaScript
219 lines
4.7 KiB
JavaScript
const gulp = require('gulp');
|
|
//const concat = require('gulp-concat');
|
|
//const uglify = require('gulp-uglify');
|
|
//const babel = require('gulp-babel');
|
|
//const template = require('gulp-template');
|
|
const Haxe = require('./haxe');
|
|
const FlashPlayer = require('./flashplayer');
|
|
const Neko = require('./neko');
|
|
const Debug = require('./debug');
|
|
const webserver = require('gulp-webserver');
|
|
const run = require('gulp-run');
|
|
const tail = require('./tail');
|
|
//const deb = require('gulp-debian');
|
|
const {BuildSystem, Platform, Config} = require('./core');
|
|
const vfs = require('vinyl-fs');
|
|
|
|
|
|
/**
|
|
*
|
|
*/
|
|
class Builder {
|
|
|
|
constructor(buildSystem) {
|
|
this.buildSystem = buildSystem;
|
|
this.target = 'target';
|
|
}
|
|
|
|
prepare() {
|
|
return Promise.resolve();
|
|
}
|
|
|
|
call(debug) {
|
|
throw 'Not Implemented';
|
|
}
|
|
|
|
static register(buildSystem, builder) {
|
|
Builder.factory[buildSystem] = builder;
|
|
}
|
|
|
|
static new(buildSystem, config) {
|
|
return new Builder.factory[buildSystem](buildSystem, config);
|
|
}
|
|
}
|
|
|
|
Builder.factory = {};
|
|
|
|
/**
|
|
*
|
|
*/
|
|
class HaxeBuilder extends Builder {
|
|
|
|
constructor(buildSystem) {
|
|
super(buildSystem);
|
|
this.haxe = new Haxe();
|
|
}
|
|
|
|
prepare() {
|
|
return this.haxe.prepare();
|
|
}
|
|
|
|
call(platform, config, debug) {
|
|
switch (this.buildSystem) {
|
|
case BuildSystem.OPENFL:
|
|
return this.haxe.openfl('build', platform, config, debug)
|
|
.then(result => result.pipe(vfs.dest(`${this.target}/${platform}`)));
|
|
}
|
|
}
|
|
}
|
|
|
|
Builder.register(BuildSystem.HAXE, HaxeBuilder);
|
|
Builder.register(BuildSystem.OPENFL, HaxeBuilder);
|
|
|
|
/**
|
|
*
|
|
*/
|
|
class Runner {
|
|
|
|
constructor(platform, name) {
|
|
this.platform = platform;
|
|
this.name = name;
|
|
this.target = 'target';
|
|
}
|
|
|
|
prepare() {
|
|
return Promise.resolve();
|
|
}
|
|
|
|
call(debug) {
|
|
throw 'Not Implemented';
|
|
}
|
|
|
|
static register(platform, builder) {
|
|
Runner.factory[platform] = builder;
|
|
}
|
|
|
|
static new(platform, name) {
|
|
return new Runner.factory[platform](platform, name);
|
|
}
|
|
}
|
|
|
|
Runner.factory = {};
|
|
|
|
/**
|
|
*
|
|
*/
|
|
class FlashRunner extends Runner {
|
|
|
|
constructor(platform, name) {
|
|
super(platform, name);
|
|
this.player = new FlashPlayer();
|
|
}
|
|
|
|
prepare() {
|
|
return this.player.prepare();
|
|
}
|
|
|
|
call(debug) {
|
|
return gulp.src(`${this.target}/${this.platform}/${this.name}.swf`)
|
|
.pipe(this.player.run(true))
|
|
.pipe(debug.run());
|
|
}
|
|
}
|
|
|
|
Runner.register(Platform.FLASH, FlashRunner);
|
|
|
|
/**
|
|
*
|
|
*/
|
|
class Html5Runner extends Runner {
|
|
|
|
call(debug) {
|
|
return gulp.src(`${this.target}/${this.platform}`)
|
|
.pipe(webserver({
|
|
host: 'localhost', port: 3000,
|
|
open: true,
|
|
fallback: 'index.html'
|
|
}));
|
|
}
|
|
}
|
|
|
|
Runner.register(Platform.HTML5, Html5Runner);
|
|
|
|
/**
|
|
*
|
|
*/
|
|
class LinuxRunner extends Runner {
|
|
|
|
call(debug) {
|
|
return gulp.src(`${this.target}/${this.platform}/${this.name}`)
|
|
.pipe(run(`./${this.name}`, {cwd: `target/${this.platform}`, verbosity: 1}))
|
|
.pipe(tail(Debug.log));
|
|
}
|
|
}
|
|
|
|
Runner.register(Platform.LINUX, LinuxRunner);
|
|
|
|
/**
|
|
*
|
|
*/
|
|
class NekoRunner extends Runner {
|
|
|
|
call(debug) {
|
|
return gulp.src(`${this.target}/${this.platform}/${this.name}.n`)
|
|
.pipe(new Neko().run())
|
|
.pipe(debug.run());
|
|
}
|
|
}
|
|
|
|
Runner.register(Platform.NEKO, NekoRunner);
|
|
|
|
|
|
/**
|
|
*
|
|
*/
|
|
class Project {
|
|
|
|
constructor(buildSystem, platforms, config) {
|
|
this.buildSystem = buildSystem;
|
|
this.platforms = platforms;
|
|
this.config = config;
|
|
}
|
|
|
|
build(platform) {
|
|
const builder = Builder.new(this.buildSystem);
|
|
return [
|
|
() => builder.prepare(),
|
|
() => builder.call(platform, this.config)
|
|
];
|
|
}
|
|
|
|
run(platform) {
|
|
const builder = Builder.new(this.buildSystem);
|
|
const runner = Runner.new(platform, this.config.name);
|
|
const debug = new Debug();
|
|
return [
|
|
() => builder.prepare(),
|
|
() => builder.call(platform, this.config, debug),
|
|
() => runner.prepare(),
|
|
() => runner.call(debug)
|
|
];
|
|
}
|
|
|
|
bind(module, gulp /* ToDo: spike */) {
|
|
for (const platform of this.platforms) {
|
|
module.exports[`${this.config.name}:${platform}:build`] = gulp.series(this.build(platform));
|
|
module.exports[`${this.config.name}:${platform}:run`] = gulp.series(this.run(platform));
|
|
}
|
|
return this;
|
|
}
|
|
}
|
|
|
|
Project.BuildSystem = BuildSystem;
|
|
Project.Platform = Platform;
|
|
Project.Config = Config;
|
|
Project.Builder = Builder;
|
|
Project.Runner = Runner;
|
|
|
|
|
|
module.exports = Project; |