nope/test/testSingleDispatcher.ts

106 lines
3.1 KiB
TypeScript
Raw Normal View History

2020-12-30 18:57:28 +00:00
/**
* @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);
}