small fixes
This commit is contained in:
parent
f93b861fbc
commit
9e00eafda8
@ -65,25 +65,25 @@ export async function createService(
|
||||
|
||||
parser.add_argument("--noFuncs", {
|
||||
help: "Prevents using Functions",
|
||||
action: "storeTrue",
|
||||
action: "store_true",
|
||||
dest: "noFuncs",
|
||||
});
|
||||
|
||||
parser.add_argument("--runInstances", {
|
||||
help: "Run instances provided in a packages.",
|
||||
action: "storeTrue",
|
||||
action: "store_true",
|
||||
dest: "runInstances",
|
||||
});
|
||||
|
||||
parser.add_argument("--runEveryService", {
|
||||
help: "Run instances provided in a packages.",
|
||||
action: "storeTrue",
|
||||
action: "store_true",
|
||||
dest: "runEveryService",
|
||||
});
|
||||
|
||||
parser.add_argument("--runExtra", {
|
||||
help: "Runs every instance in an extra Service",
|
||||
action: "storeTrue",
|
||||
action: "store_true",
|
||||
dest: "runExtra",
|
||||
});
|
||||
|
||||
@ -329,7 +329,6 @@ export async function createService(
|
||||
__dirname,
|
||||
"..",
|
||||
"..",
|
||||
"..",
|
||||
"lib",
|
||||
"templates",
|
||||
"linux.service.handlebars"
|
||||
@ -347,7 +346,6 @@ export async function createService(
|
||||
__dirname,
|
||||
"..",
|
||||
"..",
|
||||
"..",
|
||||
"lib",
|
||||
"templates",
|
||||
"index.js.handlebars"
|
||||
@ -363,7 +361,6 @@ export async function createService(
|
||||
__dirname,
|
||||
"..",
|
||||
"..",
|
||||
"..",
|
||||
"lib",
|
||||
"templates",
|
||||
"service.js.handlebars"
|
||||
|
@ -14,31 +14,15 @@ import { getNopeLogger } from "../logger/getLogger";
|
||||
|
||||
const FOLDERS_TO_CREATE = [
|
||||
"config",
|
||||
"modules",
|
||||
"open-api",
|
||||
"pages",
|
||||
join("public", "nope"),
|
||||
join("dist", "modules"),
|
||||
"modules"
|
||||
];
|
||||
const BASE_FOLDER = __dirname;
|
||||
const FILES_TO_COPY = [
|
||||
// Public-Files, like logo etc.
|
||||
"/public/nope/logo_light.png",
|
||||
"/public/nope/logo.png",
|
||||
// Default-Pages
|
||||
"/pages/_app.tsx",
|
||||
"/pages/index.tsx",
|
||||
// Config-Files
|
||||
"tsconfig.json",
|
||||
"tsconfigBackend.json",
|
||||
"tsconfig.browser.json",
|
||||
// Doc-Files:
|
||||
"jsdoc.json",
|
||||
// NextJS
|
||||
"next.config.js",
|
||||
"next-env.d.ts",
|
||||
|
||||
// Package File:
|
||||
"package.json",
|
||||
];
|
||||
|
||||
export async function generateFolderStructure(
|
||||
|
@ -41,11 +41,12 @@ export async function main() {
|
||||
console.log(`NoPE - Command Line Interface.
|
||||
|
||||
Please select the option you want. Therefore add one of the following options:
|
||||
\x1b[4mhelp\x1b[0m Show this help.
|
||||
\x1b[4mrun\x1b[0m Start a NoPE-Backend.
|
||||
\x1b[4minit\x1b[0m Initialize a new project. This project is empty.
|
||||
\x1b[4mscan\x1b[0m Trys to update the configuration file.
|
||||
\x1b[4mservice\x1b[0m Generate Helper Files to provide services
|
||||
\x1b[4mhelp\x1b[0m Show this help.
|
||||
\x1b[4mrun\x1b[0m Start a NoPE-Backend.
|
||||
\x1b[4minit\x1b[0m Initialize a new project. This project is empty.
|
||||
\x1b[4mscan\x1b[0m Trys to update the configuration file.
|
||||
\x1b[4mservice\x1b[0m Generate Helper Files to provide services
|
||||
\x1b[4mrepl\x1b[0m Opens an interactive console.
|
||||
|
||||
Have fun using NoPE :)
|
||||
|
||||
|
@ -21,18 +21,25 @@ export async function repl(
|
||||
defaultValue?: any;
|
||||
}[] = []
|
||||
) {
|
||||
const { dispatcher } = await run(additionalArguments);
|
||||
const loader = await run(
|
||||
additionalArguments,
|
||||
{
|
||||
// skipLoadingConfig: true
|
||||
},
|
||||
true
|
||||
);
|
||||
|
||||
const interactiveConsole = start({});
|
||||
// Assing the context
|
||||
interactiveConsole.context.dispatcher = dispatcher;
|
||||
interactiveConsole.context.dispatcher = loader.dispatcher;
|
||||
interactiveConsole.context.loader = loader;
|
||||
|
||||
// Promise, that will be finished on exiting the interactive console.
|
||||
const promise = new Promise((resolve) => {
|
||||
interactiveConsole.once("exit", resolve);
|
||||
});
|
||||
await promise;
|
||||
await dispatcher.dispose();
|
||||
await loader.dispatcher.dispose();
|
||||
}
|
||||
|
||||
// If requested As Main => Perform the Operation.
|
||||
|
@ -17,7 +17,8 @@ import {
|
||||
validLayers,
|
||||
} from "../communication/getLayer.nodejs";
|
||||
import { sleep } from "../helpers/async";
|
||||
import { getPackageLoader } from "../loader/getPackageLoader";
|
||||
import { deepClone } from "../helpers/objectMethods";
|
||||
import { getPackageLoader } from "../loader/getPackageLoader.browser";
|
||||
import { loadFunctions, loadPackages } from "../loader/loadPackages";
|
||||
import { generateLogfilePath, useLogFile } from "../logger/fileLogging";
|
||||
import { getNopeLogger } from "../logger/getLogger";
|
||||
@ -30,6 +31,51 @@ import {
|
||||
import { INopePackageLoader } from "../types/nope/nopePackageLoader.interface";
|
||||
import { NOPELOGO } from "./renderNope";
|
||||
|
||||
export interface RunArgs {
|
||||
file: string;
|
||||
channel: validLayerOrMirror;
|
||||
params: string;
|
||||
// Flag to prevent loading the configuration
|
||||
skipLoadingConfig: boolean;
|
||||
// Level of the logger.
|
||||
log: LoggerLevel;
|
||||
// The Enable Singletons. Defaults to true
|
||||
singleton: boolean;
|
||||
// The default-selector to select the service providers
|
||||
defaultSelector: ValidDefaultSelectors;
|
||||
// The default-selector to select the service providers
|
||||
dispatcherLogLevel: LoggerLevel;
|
||||
// The default-selector to select the service providers
|
||||
communicationLogLevel: LoggerLevel;
|
||||
// Enable File-logging:
|
||||
logToFile: boolean;
|
||||
// Delay to wait for system beeing ready.
|
||||
delay: number;
|
||||
// Flag to force using the selectors. Might have a performance inpact.
|
||||
forceUsingSelectors: boolean;
|
||||
// Define the Timingsparameter
|
||||
timings: Partial<INopeINopeConnectivityTimeOptions>;
|
||||
// Forces the Selectors
|
||||
forceSelectors: boolean;
|
||||
}
|
||||
|
||||
export const DEFAULT_SETTINGS: RunArgs = {
|
||||
file: "./config/settings.json",
|
||||
channel: "event",
|
||||
skipLoadingConfig: false,
|
||||
params: "not-provided",
|
||||
log: "debug",
|
||||
singleton: true,
|
||||
dispatcherLogLevel: "info",
|
||||
communicationLogLevel: "info",
|
||||
delay: 2,
|
||||
forceSelectors: false,
|
||||
timings: {},
|
||||
defaultSelector: "first",
|
||||
forceUsingSelectors: false,
|
||||
logToFile: false,
|
||||
};
|
||||
|
||||
/**
|
||||
* Helper Function to Read-In the Arguments used by the
|
||||
* cli-tool
|
||||
@ -42,21 +88,9 @@ export async function readInArgs(
|
||||
type: "string" | "number";
|
||||
name: string | string;
|
||||
defaultValue?: any;
|
||||
}[] = []
|
||||
): Promise<{
|
||||
file: string;
|
||||
channel: keyof typeof validLayers;
|
||||
params?: string;
|
||||
skipLoadingConfig?: boolean;
|
||||
log: LoggerLevel;
|
||||
forceEmittingUpdates?: boolean;
|
||||
defaultSelector: ValidDefaultSelectors;
|
||||
dispatcherLogLevel: LoggerLevel;
|
||||
communicationLogLevel?: LoggerLevel;
|
||||
logToFile?: boolean;
|
||||
delay: number;
|
||||
forceUsingSelectors?: boolean;
|
||||
}> {
|
||||
}[] = [],
|
||||
forcedArgs: Partial<RunArgs> = {}
|
||||
): Promise<RunArgs> {
|
||||
const parser = new ArgumentParser({
|
||||
// version: "1.0.0",
|
||||
add_help: true,
|
||||
@ -118,13 +152,6 @@ export async function readInArgs(
|
||||
dest: "defaultSelector",
|
||||
});
|
||||
|
||||
parser.add_argument("--force-emit", {
|
||||
help: "Forces emitting the events of the system. Otherwise, only subscribed events are emitted.",
|
||||
action: "append",
|
||||
nargs: "?",
|
||||
dest: "forceEmittingUpdates",
|
||||
});
|
||||
|
||||
parser.add_argument("--log-to-file", {
|
||||
help: "Log will be stored in a logfile.",
|
||||
action: "append",
|
||||
@ -173,84 +200,32 @@ export async function readInArgs(
|
||||
dest: "communicationLogLevel",
|
||||
});
|
||||
|
||||
const args: {
|
||||
file: string;
|
||||
channel: keyof typeof validLayers;
|
||||
params?: string;
|
||||
skipLoadingConfig?: boolean;
|
||||
log: LoggerLevel;
|
||||
forceEmittingUpdates?: boolean;
|
||||
defaultSelector: ValidDefaultSelectors;
|
||||
dispatcherLogLevel: LoggerLevel;
|
||||
communicationLogLevel?: LoggerLevel;
|
||||
logToFile?: boolean;
|
||||
delay: number;
|
||||
forceUsingSelectors?: boolean;
|
||||
} = parser.parse_args();
|
||||
const args: RunArgs = parser.parse_args();
|
||||
|
||||
if (args.params === "not-provided") {
|
||||
delete args.params;
|
||||
}
|
||||
|
||||
args.skipLoadingConfig = Array.isArray(args.skipLoadingConfig);
|
||||
args.forceEmittingUpdates = Array.isArray(args.forceEmittingUpdates);
|
||||
args.logToFile = Array.isArray(args.logToFile);
|
||||
args.forceUsingSelectors = Array.isArray(args.forceUsingSelectors);
|
||||
|
||||
return args;
|
||||
return Object.assign(args, forcedArgs);
|
||||
}
|
||||
|
||||
// Define the Main Function.
|
||||
// This function is used as cli tool.
|
||||
export async function runNopeBackend(
|
||||
_args: {
|
||||
file?: string;
|
||||
channel?: validLayerOrMirror;
|
||||
params?: string;
|
||||
// Flag to prevent loading the configuration
|
||||
skipLoadingConfig?: boolean;
|
||||
// Flag to force sending updates.
|
||||
forceEmittingUpdates?: boolean;
|
||||
// Level of the logger.
|
||||
log?: LoggerLevel;
|
||||
// The Enable Singletons. Defaults to true
|
||||
singleton?: boolean;
|
||||
// The default-selector to select the service providers
|
||||
defaultSelector?: ValidDefaultSelectors;
|
||||
// The default-selector to select the service providers
|
||||
dispatcherLogLevel?: LoggerLevel;
|
||||
// The default-selector to select the service providers
|
||||
communicationLogLevel?: LoggerLevel;
|
||||
// Enable File-logging:
|
||||
logToFile?: boolean;
|
||||
// Delay to wait for system beeing ready.
|
||||
delay?: number;
|
||||
// Flag to force using the selectors. Might have a performance inpact.
|
||||
forceUsingSelectors?: boolean;
|
||||
// Define the Timingsparameter
|
||||
timings?: Partial<INopeINopeConnectivityTimeOptions>;
|
||||
} = {}
|
||||
_args: Partial<RunArgs> = {}
|
||||
): Promise<INopePackageLoader> {
|
||||
let opts: {
|
||||
params: string | number;
|
||||
};
|
||||
|
||||
const args = Object.assign(
|
||||
{
|
||||
file: "./config/settings.json",
|
||||
channel: "event",
|
||||
skipLoadingConfig: false,
|
||||
params: "not-provided",
|
||||
log: "debug",
|
||||
singleton: true,
|
||||
dispatcherLogLevel: "info",
|
||||
communicationLogLevel: "info",
|
||||
delay: 2,
|
||||
forceSelectors: false,
|
||||
timings: {},
|
||||
},
|
||||
_args
|
||||
);
|
||||
// Default Settings
|
||||
const _defaultSettings: RunArgs = deepClone(DEFAULT_SETTINGS);
|
||||
|
||||
const args = Object.assign(_defaultSettings, _args);
|
||||
|
||||
try {
|
||||
// Try to read in the default config file.
|
||||
@ -313,13 +288,9 @@ export async function runNopeBackend(
|
||||
logger.info("loading Functions");
|
||||
await loadFunctions(args.file);
|
||||
} catch (e) {
|
||||
logger.error(
|
||||
"Unable to load the Packages defined in " +
|
||||
args.file +
|
||||
" See Output for detailled information",
|
||||
e
|
||||
);
|
||||
return;
|
||||
logger.error("Unable to load the Packages defined in " + args.file);
|
||||
logger.error("Returning without config. ");
|
||||
args.skipLoadingConfig = true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -355,13 +326,7 @@ export async function runNopeBackend(
|
||||
logger.info("loading Packages");
|
||||
await loadPackages(loader, args.file, args.delay);
|
||||
} catch (e) {
|
||||
logger.error(
|
||||
"Unable to load the Packages defined in " +
|
||||
args.file +
|
||||
" See Output for detailled information",
|
||||
e
|
||||
);
|
||||
return;
|
||||
logger.error("Unable to load the Packages defined in " + args.file);
|
||||
}
|
||||
}
|
||||
|
||||
@ -390,7 +355,9 @@ export async function run(
|
||||
type: "string" | "number";
|
||||
name: string | string;
|
||||
defaultValue?: any;
|
||||
}[] = []
|
||||
}[] = [],
|
||||
forcedArgs: Partial<RunArgs> = {},
|
||||
quite = false
|
||||
) {
|
||||
// Subscribe to unhandled Reactions.
|
||||
process.on("unhandledRejection", (reason, p) => {
|
||||
@ -402,10 +369,12 @@ export async function run(
|
||||
throw reason;
|
||||
});
|
||||
|
||||
console.log(NOPELOGO);
|
||||
console.log("\n\n");
|
||||
if (!quite) {
|
||||
console.log(NOPELOGO);
|
||||
console.log("\n\n");
|
||||
}
|
||||
|
||||
const args = await readInArgs(additionalArguments);
|
||||
const args = await readInArgs(additionalArguments, forcedArgs);
|
||||
return await runNopeBackend(args);
|
||||
}
|
||||
|
||||
|
@ -7,6 +7,7 @@
|
||||
*/
|
||||
|
||||
import { getSingleton } from "../helpers/singletonMethod";
|
||||
import { INopePackageLoaderConstructor } from "../types/nope";
|
||||
import { INopeDispatcherOptions } from "../types/nope/nopeDispatcher.interface";
|
||||
import { generateNopeBasicPackage } from "./generateNopeBasicPackage";
|
||||
import { NopePackageLoader } from "./nopePackageLoader";
|
||||
@ -17,11 +18,16 @@ import { NopePackageLoader } from "./nopePackageLoader";
|
||||
*/
|
||||
export function getPackageLoader(
|
||||
options: INopeDispatcherOptions,
|
||||
singleton = true
|
||||
singleton = true,
|
||||
constructorClass: INopePackageLoaderConstructor = null
|
||||
) {
|
||||
if (constructorClass === null || constructorClass === undefined) {
|
||||
constructorClass = NopePackageLoader;
|
||||
}
|
||||
|
||||
const create = () => {
|
||||
// Create a loader
|
||||
const loader = new NopePackageLoader();
|
||||
const loader = new constructorClass();
|
||||
|
||||
// load the default Package:
|
||||
loader
|
26
lib/loader/getPackageLoader.nodejs.ts
Normal file
26
lib/loader/getPackageLoader.nodejs.ts
Normal file
@ -0,0 +1,26 @@
|
||||
/**
|
||||
* @author Martin Karkowski
|
||||
* @email m.karkowski@zema.de
|
||||
* @create date 2020-11-06 14:20:32
|
||||
* @modify date 2021-08-11 19:59:47
|
||||
* @desc [description]
|
||||
*/
|
||||
|
||||
import { INopeDispatcherOptions } from "../types/nope/nopeDispatcher.interface";
|
||||
import { getPackageLoader as getBrowserPackageLoader } from "./getPackageLoader.browser";
|
||||
import { NopePackageLoaderFileAccess } from "./nopePackageLoader.nodejs";
|
||||
|
||||
/**
|
||||
* Function to extract a Singleton Dispatcher
|
||||
* @param options The provided options for the Dispatcher
|
||||
*/
|
||||
export function getPackageLoader(
|
||||
options: INopeDispatcherOptions,
|
||||
singleton = true
|
||||
) {
|
||||
return getBrowserPackageLoader(
|
||||
options,
|
||||
singleton,
|
||||
NopePackageLoaderFileAccess
|
||||
);
|
||||
}
|
@ -7,5 +7,5 @@
|
||||
*/
|
||||
|
||||
export { generateNopeBasicPackage } from "./generateNopeBasicPackage";
|
||||
export { getPackageLoader } from "./getPackageLoader";
|
||||
export { getPackageLoader } from "./getPackageLoader.browser";
|
||||
export { NopePackageLoader } from "./nopePackageLoader";
|
||||
|
@ -6,7 +6,9 @@
|
||||
* @desc [description]
|
||||
*/
|
||||
|
||||
export * from "./index.browser";
|
||||
export { generateNopeBasicPackage } from "./generateNopeBasicPackage";
|
||||
export { getPackageLoader } from "./getPackageLoader.nodejs";
|
||||
export { NopePackageLoaderFileAccess as NopePackageLoader } from "./nopePackageLoader.nodejs";
|
||||
export {
|
||||
IConfigFile,
|
||||
IPackageConfig,
|
||||
|
34
lib/loader/nopePackageLoader.nodejs.ts
Normal file
34
lib/loader/nopePackageLoader.nodejs.ts
Normal file
@ -0,0 +1,34 @@
|
||||
/**
|
||||
* @author Martin Karkowski
|
||||
* @email m.karkowski@zema.de
|
||||
* @create date 2018-07-01 09:10:35
|
||||
* @modify date 2022-01-10 16:24:45
|
||||
* @desc [description]
|
||||
*/
|
||||
|
||||
import { injectable } from "inversify";
|
||||
import { NopePackageLoader } from "nope_browser/dist/lib/loader/index.browser";
|
||||
import { resolve } from "path";
|
||||
import "reflect-metadata";
|
||||
import { IPackageDescription } from "../types/nope/nopePackage.interface";
|
||||
|
||||
/**
|
||||
* Helper Class to Build an inversify Container.
|
||||
*
|
||||
* @export
|
||||
* @class NopePackageLoader
|
||||
* @implements {INopePackageLoader}
|
||||
*/
|
||||
@injectable()
|
||||
export class NopePackageLoaderFileAccess extends NopePackageLoader {
|
||||
async loadPackageFile(path: string, useAutostart = true, useInstance = true) {
|
||||
const loadedPackage = (await import(resolve(path)))
|
||||
.DESCRIPTION as IPackageDescription<any>;
|
||||
if (!useAutostart) {
|
||||
loadedPackage.autostart = {};
|
||||
}
|
||||
if (!useInstance) {
|
||||
loadedPackage.defaultInstances = [];
|
||||
}
|
||||
}
|
||||
}
|
@ -6,6 +6,10 @@ import {
|
||||
IPackageDescription,
|
||||
} from "./nopePackage.interface";
|
||||
|
||||
export interface INopePackageLoaderConstructor {
|
||||
new (): INopePackageLoader;
|
||||
}
|
||||
|
||||
export interface INopePackageLoader {
|
||||
/**
|
||||
* Accessor for a Dispatcher;
|
||||
|
@ -2,7 +2,8 @@
|
||||
"name": "nope",
|
||||
"version": "1.0.0",
|
||||
"description": "NoPE Runtime",
|
||||
"main": "dist/index.browser.js",
|
||||
"browser": "build/nope.js",
|
||||
"main": "dist/index.nodejs.js",
|
||||
"files": [
|
||||
"build",
|
||||
"dist",
|
||||
|
Loading…
Reference in New Issue
Block a user