106 lines
3.1 KiB
TypeScript
106 lines
3.1 KiB
TypeScript
|
/**
|
||
|
* @author Martin Karkowski
|
||
|
* @email m.karkowski@zema.de
|
||
|
* @create date 2020-11-11 13:27:58
|
||
|
* @modify date 2020-12-30 19:48:30
|
||
|
* @desc [description]
|
||
|
*/
|
||
|
|
||
|
import { resolve } from "path";
|
||
|
import "reflect-metadata";
|
||
|
import { NOPELOGO } from "../lib/cli/renderNope";
|
||
|
import { EventLayer } from "../lib/communication/eventLayer";
|
||
|
import { getPackageLoader } from "../lib/loader/getPackageLoader";
|
||
|
import { IPackageConfig } from "../lib/loader/loadPackages";
|
||
|
import { getNopeLogger } from "../lib/logger/getLogger";
|
||
|
import { setGlobalLoggerLevel } from "../lib/logger/setGlobalLoggerLevel";
|
||
|
import { IGenericNopeModule } from "../lib/types/nope/nopeModule.interface";
|
||
|
import { IPackageDescription } from "../lib/types/nope/nopePackage.interface";
|
||
|
import { INopePackageLoader } from "../lib/types/nope/nopePackageLoader.interface";
|
||
|
import { IHelloWorlModule } from "../modules/helloworld/src/IHelloWorldModule";
|
||
|
|
||
|
console.log(NOPELOGO);
|
||
|
console.log("\n\n");
|
||
|
|
||
|
// Define the Main Function.
|
||
|
// This function is used as cli tool.
|
||
|
export async function runNopeBackend() {
|
||
|
const loader: INopePackageLoader = getPackageLoader({
|
||
|
communicator: new EventLayer(),
|
||
|
logger: getNopeLogger("dispatcher", "debug")
|
||
|
});
|
||
|
|
||
|
setGlobalLoggerLevel("debug");
|
||
|
|
||
|
const item: IPackageConfig = {
|
||
|
nameOfPackage: "helloworldpackage",
|
||
|
defaultInstances: [
|
||
|
{
|
||
|
selector: "helloworld",
|
||
|
options: {
|
||
|
identifier: "instance01",
|
||
|
type: "helloworld",
|
||
|
params: []
|
||
|
}
|
||
|
}
|
||
|
],
|
||
|
autostart: {
|
||
|
instance01: [
|
||
|
{
|
||
|
service: "updateProp",
|
||
|
params: [],
|
||
|
delay: 0
|
||
|
}
|
||
|
]
|
||
|
},
|
||
|
path: "dist\\modules\\helloworld\\src\\helloworld.package.js"
|
||
|
};
|
||
|
|
||
|
try {
|
||
|
// Load the Package,
|
||
|
// and create the instances.
|
||
|
const loadedPackage = (await import(resolve(item.path)))
|
||
|
.DESCRIPTION as IPackageDescription<any>;
|
||
|
loadedPackage.autostart = item.autostart;
|
||
|
loadedPackage.defaultInstances = item.defaultInstances;
|
||
|
|
||
|
// Wait for the Dispatcher to be ready:
|
||
|
await loader.dispatcher.ready.waitFor((value) => value === true);
|
||
|
|
||
|
// Load the Package.
|
||
|
await loader.addPackage(loadedPackage);
|
||
|
// Generate the instances.
|
||
|
// await loader.generateInstances();
|
||
|
|
||
|
// Now create an Package accessor:
|
||
|
let mod = await loader.dispatcher.generateInstance<
|
||
|
IHelloWorlModule & IGenericNopeModule
|
||
|
>({
|
||
|
identifier: "test",
|
||
|
params: ["hallo", "welt"],
|
||
|
type: "helloworld"
|
||
|
});
|
||
|
|
||
|
console.log("Inital value =>", mod.testProp.getContent());
|
||
|
await mod.updateTestProp();
|
||
|
console.log("After update =>", mod.testProp.getContent());
|
||
|
// Delete the Instance
|
||
|
await loader.dispatcher.deleteInstance(mod);
|
||
|
// Remove the Reference
|
||
|
mod = null;
|
||
|
|
||
|
// Kill the Dispatcher:
|
||
|
await loader.dispatcher.dispose();
|
||
|
} catch (e) {
|
||
|
getNopeLogger("helper-load-packages").error(
|
||
|
"Failed Loading the Package " + item.nameOfPackage
|
||
|
);
|
||
|
getNopeLogger("helper-load-packages").error(e);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// If requested As Main => Perform the Operation.
|
||
|
if (require.main === module) {
|
||
|
runNopeBackend().catch(console.error);
|
||
|
}
|