/** * @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; 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); }