LNXSDK/Kha/Tools/khamake/src/ProjectFile.ts

71 lines
2.6 KiB
TypeScript
Raw Normal View History

2025-01-22 16:18:30 +01:00
import * as fs from 'fs';
import * as path from 'path';
import * as log from './log';
import {Platform} from './Platform';
import {Project} from './Project';
export let Callbacks = {
preAssetConversion: [() => {}],
preShaderCompilation: [() => {}],
preHaxeCompilation: [() => {}],
postHaxeCompilation: [() => {}],
postHaxeRecompilation: [() => {}],
postCppCompilation: [() => {}],
postAssetReexporting: [(filePath: string) => {}],
postBuild: [() => {}],
onFailure: [(error: any) => {}]
};
export async function loadProject(from: string, projectfile: string, platform: string): Promise<Project> {
return new Promise<Project>((resolve, reject) => {
fs.readFile(path.join(from, projectfile), 'utf8', (err, data) => {
if (err) {
throw new Error('Error reading ' + projectfile + ' from ' + from + '.');
}
let resolved = false;
let callbacks = {
preAssetConversion: () => {},
preShaderCompilation: () => {},
preHaxeCompilation: () => {},
postHaxeCompilation: () => {},
postHaxeRecompilation: () => {},
postCppCompilation: () => {},
postAssetReexporting: (filePath: string) => {},
postBuild: () => {},
onFailure: (error: any) => {}
};
let resolver = (project: Project) => {
resolved = true;
Callbacks.preAssetConversion.push(callbacks.preAssetConversion);
Callbacks.preShaderCompilation.push(callbacks.preShaderCompilation);
Callbacks.preHaxeCompilation.push(callbacks.preHaxeCompilation);
Callbacks.postHaxeCompilation.push(callbacks.postHaxeCompilation);
Callbacks.postHaxeRecompilation.push(callbacks.postHaxeRecompilation);
Callbacks.postCppCompilation.push(callbacks.postCppCompilation);
Callbacks.postAssetReexporting.push(callbacks.postAssetReexporting);
Callbacks.postBuild.push(callbacks.postBuild);
Callbacks.onFailure.push(callbacks.onFailure);
resolve(project);
};
process.on('exit', (code: number) => {
if (!resolved) {
console.error('Error: khafile.js did not call resolve, no project created.');
}
});
Project.platform = platform;
Project.scriptdir = from;
try {
let AsyncFunction = Object.getPrototypeOf(async () => {}).constructor;
new AsyncFunction('Project', 'Platform', 'platform', 'require', '__dirname', 'process', 'resolve', 'reject', 'callbacks', data)
(Project, Platform, platform, require, path.resolve(from), process, resolver, reject, callbacks);
}
catch (error) {
reject(error);
}
});
});
}