- Fixes:
    - `cli/runNopeBackend`: Fixing parameter `preventVarifiedNames` no works correctly.

# 1.3.14
  - Fixes:
    - `helpers/ui/helpers.nodejs`: Adding the option `upload-ui`
    - `helpers/ui/helpers.nodejs`: Adding the option `upload-ui`

# 1.4.0
  - Modified:
    - asyncified all ui-related services.
    - Adapted ui-defintion of functions:
      - `autoGenBySchema` Helper to enable auto generating a configuration
      - `requiresProviderForRendering` Flag to indicate, that rendering the service configuration requires a provider itself. This for instance is the case, if some needs to be called.
    - `types/ui/editor/IServiceEditPage.ts`: Asnycify the Calls
    - `types/ui/editor/render.callbacks.ts`: Asnycify the Calls

# 1.4.1
  - Modified:
    - loading all files related to `*.functions.js`
      - Adapted the following files to implement that behavior:
        - `getCentralDecoratedContainer` in `lib\decorators\container.ts` -> now provides services as Map
        - `exportFunctionAsNopeService` in `lib\decorators\functionDecorators.ts` to work with the map.
        - `loadFunctions` in `lib\loader\loadPackages.ts` to match the interface of `loadPackages` and add the functions to the package-loader.
        - added the function `addDecoratedElements` in the package-loader and the interface.
This commit is contained in:
Martin Karkowski 2022-09-20 20:54:53 +02:00
parent 21688fb1fe
commit 02f951aa7d
22 changed files with 825 additions and 121 deletions

View File

@ -232,3 +232,31 @@ Inital commit, which is working with the browser
# 1.3.12
- Modified:
- `helpers/limit`: added the option `minDelay`. If provided, the calles are ensured to be delayed with this options. If `0` or smaller -> no delay is added.
# 1.3.13
- Fixes:
- `cli/runNopeBackend`: Fixing parameter `preventVarifiedNames` no works correctly.
# 1.3.14
- Fixes:
- `helpers/ui/helpers.nodejs`: Adding the option `upload-ui`
- `helpers/ui/helpers.nodejs`: Adding the option `upload-ui`
# 1.4.0
- Modified:
- asyncified all ui-related services.
- Adapted ui-defintion of functions:
- `autoGenBySchema` Helper to enable auto generating a configuration
- `requiresProviderForRendering` Flag to indicate, that rendering the service configuration requires a provider itself. This for instance is the case, if some needs to be called.
- `types/ui/editor/IServiceEditPage.ts`: Asnycify the Calls
- `types/ui/editor/render.callbacks.ts`: Asnycify the Calls
# 1.4.1
- Modified:
- loading all files related to `*.functions.js`
- Adapted the following files to implement that behavior:
- `getCentralDecoratedContainer` in `lib\decorators\container.ts` -> now provides services as Map
- `exportFunctionAsNopeService` in `lib\decorators\functionDecorators.ts` to work with the map.
- `loadFunctions` in `lib\loader\loadPackages.ts` to match the interface of `loadPackages` and add the functions to the package-loader.
- added the function `addDecoratedElements` in the package-loader and the interface.

View File

@ -1 +1 @@
1.3.12
1.4.1

View File

@ -4,13 +4,17 @@
* @desc [description]
*/
import { readInwriteUiFileArgs, writeUiFile } from "../ui/helpers.nodejs";
import {
readInWriteUiFileArgs,
writeUiFile,
main as uploadUi,
} from "../ui/helpers.nodejs";
import { createService } from "./createService";
import { generateDefaultConfig } from "./generateDefaultConfig";
import { generateDefaultPackageConfig } from "./generateDefaultPackageConfig";
import { generateFolderStructure } from "./generateFolderStructure";
import { repl } from "./repl";
import run from "./runNopeBackend";
import { main as runMain } from "./runNopeBackend";
/**
* Main Function.
@ -27,7 +31,8 @@ export async function main() {
| "help"
| "service"
| "repl"
| "scan-ui";
| "scan-ui"
| "upload-ui";
params: string[];
} = {
mode: (process.argv[2] as any) || "none",
@ -49,6 +54,7 @@ Please select the option you want. Therefore add one of the following options:
\x1b[4minit\x1b[0m Initialize a new project. This project is empty.
\x1b[4mconf\x1b[0m Trys to update the configuration file.
\x1b[4mscan-ui\x1b[0m Scans and extracts the provided uis.
\x1b[4mupload-ui\x1b[0m Uploads the determined ui-file
\x1b[4mservice\x1b[0m Generate Helper Files to provide services
\x1b[4mrepl\x1b[0m Opens an interactive console.
@ -83,7 +89,8 @@ Have fun using NoPE :)
showLog();
break;
case "run":
await run([additionalArg]);
additionalArg.help = "Command to run the backend";
await runMain([additionalArg]);
break;
case "init":
additionalArg.help = "Command to run init";
@ -105,7 +112,11 @@ Have fun using NoPE :)
case "scan-ui":
additionalArg.help =
"Command to readin the UI-Files and store them in a config";
await writeUiFile(readInwriteUiFileArgs([additionalArg]));
await writeUiFile(readInWriteUiFileArgs([additionalArg]));
break;
case "upload-ui":
additionalArg.help = "to upload the determined ui-config.";
await uploadUi([additionalArg]);
break;
}
}

View File

@ -7,7 +7,7 @@
*/
import { start } from "repl";
import run from "./runNopeBackend";
import main from "./runNopeBackend";
/**
* Starts an interactive console with the loaded dispatcher.
@ -20,7 +20,7 @@ export async function repl(
defaultValue?: any;
}[] = []
) {
const loader = await run(
const loader = await main(
additionalArguments,
{
// skipLoadingConfig: true

View File

@ -257,7 +257,7 @@ export async function readInArgs(
args.logToFile = Array.isArray(args.logToFile);
args.forceUsingSelectors = Array.isArray(args.forceUsingSelectors);
args.useBaseServices = !Array.isArray(args.useBaseServices);
args.preventVarifiedNames = !Array.isArray(args.preventVarifiedNames);
args.preventVarifiedNames = Array.isArray(args.preventVarifiedNames);
return Object.assign(args, forcedArgs);
}
@ -403,19 +403,6 @@ export async function runNopeBackend(
}
}
// If required load all Packages.
if (!args.skipLoadingConfig) {
// Try to load the Modules.
try {
logger.info("loading Functions");
await loadFunctions(args.file);
} catch (e) {
logger.error("Unable to load the Packages defined in " + args.file);
logger.error("Returning without config. ");
args.skipLoadingConfig = true;
}
}
let loader: INopePackageLoader;
try {
loader = getPackageLoader(
@ -452,6 +439,14 @@ export async function runNopeBackend(
await sleep(args.delay * 1000);
}
// If required load all Packages.
try {
logger.info("loading Functions");
await loadFunctions(loader, args.file, args.delay);
} catch (e) {
logger.error("Unable to load the Functions defined in " + args.file);
}
try {
logger.info("loading Packages");
await loadPackages(loader, args.file, args.delay);
@ -473,7 +468,7 @@ export async function runNopeBackend(
*
* @export
*/
export async function run(
export async function main(
additionalArguments: {
help: string;
type: "string" | "number";
@ -492,9 +487,9 @@ export async function run(
return await runNopeBackend(args);
}
export default run;
// If requested As Main => Perform the Operation.
if (require.main === module) {
run();
main();
}
export default main;

View File

@ -17,7 +17,7 @@ export type IexportFunctionAsNopeServiceParameters = IFunctionOptions;
* @return {NopeLogger} A Returns the Logger {@link NopeLogger}
*/
export function getCentralDecoratedContainer(): {
methods: Map<
services: Map<
string,
{
uri: string;
@ -29,7 +29,7 @@ export function getCentralDecoratedContainer(): {
} {
const container = getSingleton("nope.decorated.elements", () => {
return {
methods: new Map(),
services: new Map(),
classes: new Map(),
};
});

View File

@ -28,8 +28,8 @@ export function exportFunctionAsNopeService<T>(
options: IexportFunctionAsNopeServiceParameters
) {
// Only add the element if it doesnt exists.
if (!CONTAINER.methods.has(options.id)) {
CONTAINER.methods.set(options.id, {
if (!CONTAINER.services.has(options.id)) {
CONTAINER.services.set(options.id, {
callback: async (...args) => {
return await (func as any)(...args);
},

View File

@ -26,12 +26,20 @@ export function stringifyWithFunctions(obj, ...args) {
// 3) (a, b) => (a + b);
// 4) (name, description) => ({name: name, description: description})
// ....
const isAsync = str.startsWith("async ");
if (isAsync) {
str = str.slice("async ".length);
}
if (!str.startsWith("function") && !str.startsWith("(")) {
const name = str.slice(0, str.indexOf("=>"));
const func = str.slice(str.indexOf("=>(") + 3, str.length - 2);
const adaptedFunc = "function(" + name + "){ return " + func + "; }";
str = adaptedFunc;
str = "function(" + name + "){ return " + func + "; }";
}
if (isAsync) {
return BEGIN_STR + "async " + str + END_STR;
}
return BEGIN_STR + str + END_STR;
@ -65,7 +73,8 @@ export function parseWithFunctions(
try {
return eval("(" + _value + ")").bind(scope);
} catch (e) {
console.log("FAILED PARSING", value, _value);
console.log("Failed Parsing function", "\n" + _value);
console.error(e);
}
}
return value;

View File

@ -9,11 +9,18 @@ import { join, resolve } from "path";
import "reflect-metadata";
import { sleep } from "../helpers/async";
import { createFile, listFiles } from "../helpers/fileMethods";
import { parseWithFunctions, stringifyWithFunctions } from "../index.browser";
import { determineDifference } from "../helpers/setMethods";
import {
getCentralDecoratedContainer,
parseWithFunctions,
stringifyWithFunctions,
} from "../index.browser";
import { getNopeLogger } from "../logger/getLogger";
import { IPackageDescription } from "../types/nope/nopePackage.interface";
import { INopePackageLoader } from "../types/nope/nopePackageLoader.interface";
const logger = getNopeLogger("helper-load-packages");
export interface IPackageConfig extends Partial<IPackageDescription<any>> {
// File Path of the element.
path: string;
@ -46,16 +53,16 @@ export async function listPackages(dir = "./modules") {
for (const fileName of await listFiles(dir, ".package.js")) {
// Now Try to load a Package, to test whether is is an assembly.
try {
logger.info("found ", fileName);
ret.push({
package: (await import(resolve(fileName)))
.DESCRIPTION as IPackageDescription<any>,
path: fileName,
});
} catch (e) {
getNopeLogger("helper-list-packages").error(
"Failed Loading the Package " + fileName
);
getNopeLogger("helper-list-packages").error(e);
logger.error("Failed Loading the Package " + fileName);
logger.error(e);
}
}
@ -74,15 +81,15 @@ export async function listFunctions(dir = "./modules") {
for (const fileName of await listFiles(dir, ".functions.js")) {
// Now Try to load a Package, to test whether is is an assembly.
try {
logger.info("found ", fileName);
ret.push({
content: (await import(resolve(fileName))).DESCRIPTION,
path: fileName,
});
} catch (e) {
getNopeLogger("helper-list-functions").error(
"Failed Loading the functions in file: " + fileName
);
getNopeLogger("helper-list-functions").error(e);
logger.error("Failed Loading the functions in file: " + fileName);
logger.error(e);
}
}
@ -154,7 +161,7 @@ export async function loadPackages(
await writeDefaultConfig(filename);
// Show an Hint
getNopeLogger("helper-load-packages").warn(
logger.warn(
"No configuration was present. Created a new config file in " + filename
);
@ -180,10 +187,8 @@ export async function loadPackages(
loadedPackage.defaultInstances = item.defaultInstances;
packages.push(loadedPackage);
} catch (e) {
getNopeLogger("helper-load-packages").error(
"Failed Loading the Package " + item.nameOfPackage
);
getNopeLogger("helper-load-packages").error(e);
logger.error("Failed Loading the Package " + item.nameOfPackage);
logger.error(e);
}
}
@ -194,7 +199,7 @@ export async function loadPackages(
try {
await loader.addPackage(thePackageToLoad);
} catch (e) {
getNopeLogger("helper-load-packages").error(
logger.error(
'Failed Add the Package "' +
thePackageToLoad.nameOfPackage +
'" to the PackageLoader',
@ -204,9 +209,7 @@ export async function loadPackages(
}
if (delay > 0) {
getNopeLogger("helper-load-packages").info(
`Waiting ${delay} [s] before creating instances.`
);
logger.info(`Waiting ${delay} [s] before creating instances.`);
await sleep(delay * 1000);
}
@ -223,7 +226,9 @@ export async function loadPackages(
* @return {*}
*/
export async function loadFunctions(
filename: string = join(resolve(process.cwd()), "config", "assembly.json")
loader: INopePackageLoader,
filename: string = join(resolve(process.cwd()), "config", "settings.json"),
delay = 2
) {
let data: IConfigFile = {
functions: [],
@ -238,7 +243,7 @@ export async function loadFunctions(
await writeDefaultConfig(filename);
// Show an Hint
getNopeLogger("helper-load-packages").warn(
logger.warn(
"No configuration was present. Created a new config file in " + filename
);
@ -251,23 +256,46 @@ export async function loadFunctions(
}
// Define the Return Array.
const functionPackages = new Array<any>();
const successfull = new Array<any>();
// Get the container containing all registered Services and Classes.
const CONTAINER = getCentralDecoratedContainer();
// Scan for the Package-Files
// And iterate over them.
for (const item of data.functions) {
// Now Try to load a Package, to test whether is is an assembly.
try {
const loadedFunction = (await import(resolve(item.path)))
.DESCRIPTION as IPackageDescription<any>;
functionPackages.push(loadedFunction);
// Load the Function:
const before = new Set<string>(CONTAINER.services.keys());
await import(resolve(item.path));
const after = new Set<string>(CONTAINER.services.keys());
const diff = determineDifference(before, after);
if (diff.added.size > 0) {
logger.info(
"loaded services of file",
'"' + item.path + '"',
"found:" + JSON.stringify(Array.from(diff.added), undefined, 4)
);
}
// Mark the file as sucessfully loaded.
successfull.push(item.path);
} catch (e) {
getNopeLogger("helper-load-packages").error(
"Failed Loading function-file at " + item.path
);
getNopeLogger("helper-load-packages").error(e);
logger.error("Failed Loading function-file at " + item.path);
logger.error(e);
}
}
return functionPackages;
await loader.addDecoratedElements({
consider: ["services"],
});
if (delay > 0) {
logger.info(`Waiting ${delay} [s] before creating instances.`);
await sleep(delay * 1000);
}
return successfull;
}

View File

@ -5,8 +5,12 @@
*/
import { Container, injectable, interfaces } from "inversify";
import { flatten } from "lodash";
import { flatten, isArguments } from "lodash";
import "reflect-metadata";
import {
getCentralDecoratedContainer,
IexportFunctionAsNopeServiceParameters,
} from "../decorators";
import { arraysEqual } from "../helpers/arrayMethods";
import { sleep } from "../helpers/async";
import { RUNNINGINNODE } from "../helpers/runtimeMethods";
@ -701,6 +705,82 @@ export class NopePackageLoader implements INopePackageLoader {
}
}
/**
* Function to load all decorated elements with the decorators `exportFunctionAsNopeService`
*
* @param options
*/
async addDecoratedElements(
options: {
addServiceCallback?: (
options: IexportFunctionAsNopeServiceParameters
) => Promise<boolean>;
addClassCallback?: (options: INopeModule) => Promise<boolean>;
consider?: Array<"services" | "classes">;
} = {
consider: ["services"],
}
): Promise<void> {
const _this = this;
// Get the container containing all registered Services and Classes.
const CONTAINER = getCentralDecoratedContainer();
// Helper to list the Promises.
const promises = new Array<Promise<any>>();
if (!Array.isArray(options.consider)) {
options.consider = [];
}
if (typeof options.addServiceCallback === "function") {
options.consider.push("services");
}
if (typeof options.addClassCallback === "function") {
options.consider.push("classes");
}
if (options.consider.includes("services")) {
for (const serviceDefintion of CONTAINER.services.values()) {
if (typeof options.addServiceCallback === "function") {
let resolve = null;
// Create a Promise, that will be completed, if
// the function is been added
const promise = new Promise((_resolve) => (resolve = _resolve));
promises.push(promise);
// Now we call the function to decide whether the
// service should be added or not.
options
.addServiceCallback(serviceDefintion.options)
.then((decision) => {
if (decision) {
this.dispatcher.rpcManager.registerService(
serviceDefintion.callback,
serviceDefintion.options
);
}
resolve(null);
});
} else {
// Just add the Service.
this.dispatcher.rpcManager.registerService(
serviceDefintion.callback,
serviceDefintion.options
);
}
}
}
// for (const classDefinition of CONTAINER.classes.values()){
// this.dispatcher.rpcManager.registerService(classDefinition.,classDefinition.options)
// }
// Wait for all Promises to be added.
await Promise.all(promises);
}
protected _disposeDefaultInstance: Array<() => Promise<void>> = [];
async dispose(): Promise<void> {

View File

@ -372,6 +372,7 @@ export interface ICallOptions {
/**
* A User Provided Timeout of the call. After the timeout has been
* ellapsed, the task is cancelled with a timeout error.
* The Time is given in **ms**
*
* @type {number}
*/

View File

@ -298,7 +298,23 @@ export interface IFunctionOptions<T = any> extends Partial<ICallOptions> {
* The ui definition of the service.
*/
ui?: {
/**
* Custom function to render the service in the editor
*/
serviceConfiguration?: TRenderConfigureServicePage<T>;
/**
* Helper to enable auto generating a configuration
*/
autoGenBySchema?: true;
/**
* Flag to indicate, that rendering the service configuration requires
* a provider itself. This for instance is the case, if some functions
* needs to be called.
*/
requiredProvidersForRendering?: string[];
/**
* Helper to generate the Pors based on the provided node data.
*/
getPorts?: TGetPorts<T>;
};

View File

@ -1,5 +1,7 @@
import { Container } from "inversify";
import { IexportFunctionAsNopeServiceParameters } from "../../decorators";
import { INopeDispatcher } from "./nopeDispatcher.interface";
import { INopeModule } from "./nopeModule.interface";
import {
IClassDescriptor,
INopeActivationHanlder,
@ -75,4 +77,16 @@ export interface INopePackageLoader {
* @memberof INopePackageLoader
*/
generateInstances(testRequirements?: boolean): Promise<void>;
/**
* Helper to add the decorated Elements.
* @param options
*/
addDecoratedElements(options?: {
addServiceCallback?: (
options: IexportFunctionAsNopeServiceParameters
) => Promise<boolean>;
addClassCallback?: (options: INopeModule) => Promise<boolean>;
consider?: Array<"services" | "classes">;
}): Promise<void>;
}

View File

@ -3,7 +3,9 @@
* @email m.karkowski@zema.de
*/
import { IRenderData } from "../helpers.interface";
import { TRenderFunctionResult } from "../layout.interface";
import { PN } from "./INodes";
/**
* Type to define the Ports of a UI:
@ -19,27 +21,34 @@ export type TServiceGetPortsReturn = {
}[];
};
export type TGetPorts<T = any> = (data?: T) => TServiceGetPortsReturn;
/**
* Function, used to define the Ports of a service.
*/
export type TGetPorts<T extends PN, Extension = {}> = (
options?: IRenderData & {
input: T;
} & Extension
) => Promise<TServiceGetPortsReturn>;
export interface IServiceEditPage<T = any> extends TRenderFunctionResult {
/**
* Function, which must return the current service-data.
*
* @author M.Karkowski
* @return {boolean}
* @return {Promise<T>}
* @memberof IEditPage
*/
getData(): T;
getData(): Promise<T>;
/**
* Function which must return true, if the Entered-
* Data is valid. Otherwise the Update will be refused
*
* @author M.Karkowski
* @return {boolean}
* @return {Promise<boolean>}
* @memberof IEditPage
*/
isValid(): boolean;
isValid(): Promise<boolean>;
/**
* Element showing the type of the edit panel.

View File

@ -13,4 +13,4 @@ export type TRenderConfigureServicePage<T extends PN, Extension = {}> = (
options: IRenderData & {
input: T;
} & Extension
) => IServiceEditPage;
) => Promise<IServiceEditPage>;

View File

@ -76,6 +76,7 @@ export type TLibraries = {
w2confirm: (...args) => any;
w2prompt: (...args) => any;
w2utils: any;
nopeW2ui: any;
};
w2ui: any;

View File

@ -860,14 +860,14 @@ export interface ILayoutOptions<D extends IMinProvidedDataSet> {
*
* @memberof ILayoutOptions
*/
onResized?: (panels: IPossiblePanels) => void;
onResized?: (panels: IPossiblePanels) => Promise<void>;
/**
* Callback, which will be used to provide the actual Editmode.
*
* @memberof ILayoutOptions
*/
onEditModeChanged?: (editingEnabled: boolean) => void;
onEditModeChanged?: (editingEnabled: boolean) => Promise<void>;
/**
* Function, which will be called before the Componented is getting destroyed.
@ -875,13 +875,12 @@ export interface ILayoutOptions<D extends IMinProvidedDataSet> {
*
* @memberof ILayoutOptions
*/
dispose?: () => void;
dispose?: () => Promise<void>;
/**
* An addtional Function which will be called before a Callback of the Context-Menu
* or Toolbar will be called.
*
* @type {IAdaptDataCallback<D>}
* @memberof ILayoutOptions
*/
adaptData: IAdaptDataCallback<D>;
@ -903,7 +902,7 @@ export interface ILayoutOptions<D extends IMinProvidedDataSet> {
* @author M.Karkowski
* @memberof ILayoutOptions
*/
onReady?: () => void;
onReady?: () => Promise<void>;
/**
* Boolean to toggle the FullScreen
@ -952,7 +951,7 @@ export type TRenderFunction<
setVisibilityOfPanel: (value: boolean) => void;
layout: IBasicLayoutComponent<D>;
}
) => O;
) => Promise<O>;
/**
* Base Component to render a Layout.
@ -1102,7 +1101,7 @@ export interface IBasicLayoutComponent<
showOnCreate?: boolean;
/** The Panel to show */
panel: ValidPanels;
}): void;
}): Promise<O>;
/**
* Returns the div of the panel.

View File

@ -26,7 +26,7 @@ export type TRenderInstancePage<
/** The Instance to Render. */
input: T & IGenericNopeModule;
} & Extension
) => TRenderFunctionResult;
) => Promise<TRenderFunctionResult>;
/** UI to define an instance. */
export type TInstanceManagerPage<
@ -49,4 +49,4 @@ export type TInstanceManagerPage<
) => Promise<T & IGenericNopeModule>;
instances: Array<INopeModuleDescription>;
} & Extension
) => void;
) => Promise<void>;

View File

@ -14,20 +14,19 @@ import {
} from "../index.browser";
import { listFunctions, listPackages } from "../index.nodejs";
import { IUiDefinition } from "../types/ui";
import { readFile } from "node:fs/promises";
import { getNopeLogger, replaceAll } from "../index.browser";
import * as superagent from "superagent";
/**
* Helper Function to write a default configuration.
*
* @export
* @param {string} [dir='./modules']
* @param {string} [filename=join(resolve(process.cwd()), 'config', 'assembly.json')]
*/
export async function writeUiFile(
options: {
dir: string;
filename: string;
} = {
dir: "./modules",
dir: "./dist",
filename: join(resolve(process.cwd()), "config", "ui.json"),
}
) {
@ -93,7 +92,7 @@ export async function writeUiFile(
});
}
for (const [id, data] of CONTAINER.methods.entries()) {
for (const [id, data] of CONTAINER.services.entries()) {
if (data.options.ui) {
uiFile.functions[id] = {
id,
@ -113,7 +112,7 @@ export async function writeUiFile(
* @param additionalArguments Arguments added by the nope.cli
* @return {*} The Arguments
*/
export function readInwriteUiFileArgs(
export function readInWriteUiFileArgs(
additionalArguments: {
help: string;
type: "string" | "number";
@ -156,3 +155,238 @@ export function readInwriteUiFileArgs(
return args;
}
export interface IDataElement {
name: string;
originalName: string;
path: string;
keywords: string;
identifier: string;
additionalOptions: any;
uuid: string;
type: string;
date: string;
}
export interface UploadArgs {
/**
* File containing the UI-Defintions
*/
file: string;
/**
* Default uri of the upload server
*/
uri: string;
/**
* The mode how to handle the ui-file.
*/
mode: "replace" | "merge";
}
const VALID_MODES: Array<UploadArgs["mode"]> = ["replace", "merge"];
export const DEFAULT_SETTINGS: UploadArgs = {
file: "./config/ui.json",
uri: "http://localhost:5001",
mode: "merge",
};
/**
* Helper Function to Read-In the Arguments used by the
* cli-tool
*
* @return {*}
*/
export async function readInArgs(
additionalArguments: {
help: string;
type: "string" | "number";
name: string | string;
defaultValue?: any;
}[] = [],
forcedArgs: Partial<UploadArgs> = {}
): Promise<UploadArgs> {
const parser = new ArgumentParser({
// version: "1.0.0",
add_help: true,
description: "Command Line interface, to upload ui files",
});
for (const arg of additionalArguments) {
parser.add_argument(arg.name, {
help: arg.help,
default: arg.defaultValue,
type: arg.type,
});
}
parser.add_argument("-f", "--file", {
help:
"File containing containing the package definitions. Defaults to '" +
DEFAULT_SETTINGS.file +
"'",
default: DEFAULT_SETTINGS.file,
type: "str",
dest: "file",
});
parser.add_argument("-m", "--mode", {
help:
"The mode, how to handle the ui defintion: " +
// Display all Options:
VALID_MODES.map((item) => {
return '"' + item + '"';
}).join(", ") +
'. Deaults to "' +
DEFAULT_SETTINGS.mode +
'"',
default: DEFAULT_SETTINGS.mode,
type: "str",
dest: "mode",
});
parser.add_argument("-u", "--uri", {
help: "The URI of the Server. Defaults to '" + DEFAULT_SETTINGS.uri + ",",
default: DEFAULT_SETTINGS.uri,
type: "str",
dest: "params",
});
const args: UploadArgs = parser.parse_args();
return Object.assign(args, forcedArgs);
}
export async function uploadUi(args: Partial<UploadArgs>) {
const settingsToUse = Object.assign(DEFAULT_SETTINGS, args);
let localContent: any = {};
const logger = getNopeLogger("ui-uploader-cli");
try {
// Try to read in the default config file.
logger.info(`Trying to read file ${settingsToUse.file}`);
localContent = JSON.parse(
await readFile(settingsToUse.file, {
encoding: "utf-8",
})
);
} catch (error) {
logger.error("Failed to read File.");
logger.error(error);
}
if (Object.keys(settingsToUse).length == 0) {
logger.info("No Data contained. Goodbye!");
return;
}
async function getFiles(
query: (
item: IDataElement,
scope: { [index: string]: any }
) => boolean = () => true,
scope: { [index: string]: any } = {}
) {
const params = {
query: stringifyWithFunctions(query),
scope,
};
const result: IDataElement[] = (
await superagent.post(settingsToUse.uri + "/storage/query").send(params)
).body;
return result;
}
async function getContentOfNewestFile() {
// Get all Possible Files
const _files = await getFiles((item, scope) => {
return item.identifier === "ui-definition";
});
let newest: IDataElement = null;
_files.map((item) => {
if (item.date > item.date) {
newest = item;
} else if (newest == null) {
newest = item;
}
});
if (newest) {
try {
const _file = replaceAll(
settingsToUse.uri + "/" + newest.path,
"\\",
"/"
);
return (await superagent.get(_file)).body;
} catch (e) {
logger.error("Failed getting Data");
logger.error(e);
}
}
return {};
}
logger.info(
`Uploading file '${settingsToUse.file}' to '${settingsToUse.uri}'`
);
let contentToUpload: any = localContent;
if (settingsToUse.mode === "merge") {
const currentContent: any = await getContentOfNewestFile();
contentToUpload.functions = Object.assign(
currentContent.functions,
localContent.functions
);
contentToUpload.classes = Object.assign(
currentContent.classes,
localContent.classes
);
}
const params = {
name: "ui",
keywords: "ui-definition;",
identifier: "ui-definition",
data: contentToUpload,
};
const result = await superagent
.post(settingsToUse.uri + "/storage/upload-data")
.send(params);
logger.info("sucessfully uploaded the file.");
}
/**
* Main Function.
*
* @export
*/
export async function main(
additionalArguments: {
help: string;
type: "string" | "number";
name: string | string;
defaultValue?: any;
}[] = [],
forcedArgs: Partial<UploadArgs> = {}
) {
const args = await readInArgs(additionalArguments, forcedArgs);
return await uploadUi(args);
}
export default uploadUi;
// If requested As Main => Perform the Operation.
if (require.main === module) {
main();
}

345
package-lock.json generated
View File

@ -1,12 +1,12 @@
{
"name": "nope",
"version": "1.2.1",
"version": "1.3.12",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "nope",
"version": "1.2.1",
"version": "1.3.12",
"license": "MIT",
"dependencies": {
"argparse": "^2.0.1",
@ -30,6 +30,7 @@
"rxjs": "^7.5.1",
"socket.io": "^4.4.1",
"socket.io-client": "^4.4.1",
"superagent": "^8.0.0",
"ts-morph": "^13.0.2",
"typescript-json-schema": "^0.52.0",
"uuid": "^8.3.2",
@ -48,6 +49,7 @@
"@types/plotly.js": "^1.54.22",
"@types/socket.io": "^3.0.1",
"@types/socket.io-client": "^1.4.36",
"@types/superagent": "^4.1.15",
"chai": "^4.3.4",
"dts-bundle": "^0.7.3",
"dts-bundle-webpack": "^1.0.2",
@ -442,6 +444,12 @@
"resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz",
"integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q=="
},
"node_modules/@types/cookiejar": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.2.tgz",
"integrity": "sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog==",
"dev": true
},
"node_modules/@types/cors": {
"version": "2.8.12",
"resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz",
@ -528,6 +536,16 @@
"integrity": "sha512-ZJWjtFBeBy1kRSYpVbeGYTElf6BqPQUkXDlHHD4k/42byCN5Rh027f4yARHCink9sKAkbtGZXEAmR0ZCnc2/Ag==",
"dev": true
},
"node_modules/@types/superagent": {
"version": "4.1.15",
"resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-4.1.15.tgz",
"integrity": "sha512-mu/N4uvfDN2zVQQ5AYJI/g4qxn2bHB6521t1UuH09ShNWjebTqN0ZFuYK9uYjcgmI0dTQEs+Owi1EO6U0OkOZQ==",
"dev": true,
"dependencies": {
"@types/cookiejar": "*",
"@types/node": "*"
}
},
"node_modules/@ungap/promise-all-settled": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz",
@ -1056,6 +1074,11 @@
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/asap": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
"integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA=="
},
"node_modules/asn1.js": {
"version": "5.4.1",
"resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz",
@ -1109,6 +1132,11 @@
"resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
"integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ=="
},
"node_modules/asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
},
"node_modules/atob": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
@ -1535,7 +1563,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
"integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
"dev": true,
"dependencies": {
"function-bind": "^1.1.1",
"get-intrinsic": "^1.0.2"
@ -1958,6 +1985,17 @@
"node": ">=0.1.90"
}
},
"node_modules/combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
"dependencies": {
"delayed-stream": "~1.0.0"
},
"engines": {
"node": ">= 0.8"
}
},
"node_modules/commander": {
"version": "8.3.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
@ -2074,6 +2112,11 @@
"node": ">= 0.6"
}
},
"node_modules/cookiejar": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz",
"integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ=="
},
"node_modules/copy-concurrently": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz",
@ -2241,9 +2284,9 @@
}
},
"node_modules/debug": {
"version": "4.3.3",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
"integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"dependencies": {
"ms": "2.1.2"
},
@ -2360,6 +2403,14 @@
"node": ">=0.10.0"
}
},
"node_modules/delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/delegates": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
@ -2401,6 +2452,15 @@
"node": ">=0.10.0"
}
},
"node_modules/dezalgo": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz",
"integrity": "sha512-K7i4zNfT2kgQz3GylDw40ot9GAE47sFZ9EXHFSPP6zONLgH6kWXE0KWJchkbQJLBkRazq4APwZ4OwiFFlT95OQ==",
"dependencies": {
"asap": "^2.0.0",
"wrappy": "1"
}
},
"node_modules/diff": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
@ -3562,6 +3622,11 @@
"integrity": "sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw==",
"dev": true
},
"node_modules/fast-safe-stringify": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz",
"integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA=="
},
"node_modules/fastest-levenshtein": {
"version": "1.0.12",
"resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz",
@ -3729,6 +3794,44 @@
"node": ">=0.10.0"
}
},
"node_modules/form-data": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
"integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
"dependencies": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.8",
"mime-types": "^2.1.12"
},
"engines": {
"node": ">= 6"
}
},
"node_modules/formidable": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/formidable/-/formidable-2.0.1.tgz",
"integrity": "sha512-rjTMNbp2BpfQShhFbR3Ruk3qk2y9jKpvMW78nJgx8QKtxjDVrwbZG+wvDOmVbifHyOUOQJXxqEy6r0faRrPzTQ==",
"dependencies": {
"dezalgo": "1.0.3",
"hexoid": "1.0.0",
"once": "1.4.0",
"qs": "6.9.3"
},
"funding": {
"url": "https://ko-fi.com/tunnckoCore/commissions"
}
},
"node_modules/formidable/node_modules/qs": {
"version": "6.9.3",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.9.3.tgz",
"integrity": "sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw==",
"engines": {
"node": ">=0.6"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/fp-and-or": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/fp-and-or/-/fp-and-or-0.1.3.tgz",
@ -3890,8 +3993,7 @@
"node_modules/function-bind": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
"dev": true
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
},
"node_modules/functional-red-black-tree": {
"version": "1.0.1",
@ -3948,7 +4050,6 @@
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
"integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
"dev": true,
"dependencies": {
"function-bind": "^1.1.1",
"has": "^1.0.3",
@ -4166,7 +4267,6 @@
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
"integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
"dev": true,
"dependencies": {
"function-bind": "^1.1.1"
},
@ -4200,7 +4300,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz",
"integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==",
"dev": true,
"engines": {
"node": ">= 0.4"
},
@ -4343,6 +4442,14 @@
"readable-stream": "^3.6.0"
}
},
"node_modules/hexoid": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz",
"integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==",
"engines": {
"node": ">=8"
}
},
"node_modules/hmac-drbg": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
@ -6061,6 +6168,14 @@
"node": ">= 8"
}
},
"node_modules/methods": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
"integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/micromatch": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
@ -6092,6 +6207,17 @@
"integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
"dev": true
},
"node_modules/mime": {
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz",
"integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==",
"bin": {
"mime": "cli.js"
},
"engines": {
"node": ">=4.0.0"
}
},
"node_modules/mime-db": {
"version": "1.51.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz",
@ -14074,7 +14200,6 @@
"version": "1.12.0",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz",
"integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==",
"dev": true,
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
@ -14927,6 +15052,20 @@
"node": ">=8"
}
},
"node_modules/qs": {
"version": "6.11.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
"integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
"dependencies": {
"side-channel": "^1.0.4"
},
"engines": {
"node": ">=0.6"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/querystring": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
@ -15520,10 +15659,9 @@
"integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg=="
},
"node_modules/semver": {
"version": "7.3.5",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
"integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
"dev": true,
"version": "7.3.7",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
"integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
"dependencies": {
"lru-cache": "^6.0.0"
},
@ -15691,7 +15829,6 @@
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
"integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.0",
"get-intrinsic": "^1.0.2",
@ -16301,6 +16438,27 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/superagent": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.0.tgz",
"integrity": "sha512-iudipXEel+SzlP9y29UBWGDjB+Zzag+eeA1iLosaR2YHBRr1Q1kC29iBrF2zIVD9fqVbpZnXkN/VJmwFMVyNWg==",
"dependencies": {
"component-emitter": "^1.3.0",
"cookiejar": "^2.1.3",
"debug": "^4.3.4",
"fast-safe-stringify": "^2.1.1",
"form-data": "^4.0.0",
"formidable": "^2.0.1",
"methods": "^1.1.2",
"mime": "2.6.0",
"qs": "^6.10.3",
"readable-stream": "^3.6.0",
"semver": "^7.3.7"
},
"engines": {
"node": ">=6.4.0 <13 || >=14"
}
},
"node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@ -18591,6 +18749,12 @@
"resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz",
"integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q=="
},
"@types/cookiejar": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.2.tgz",
"integrity": "sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog==",
"dev": true
},
"@types/cors": {
"version": "2.8.12",
"resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz",
@ -18676,6 +18840,16 @@
"integrity": "sha512-ZJWjtFBeBy1kRSYpVbeGYTElf6BqPQUkXDlHHD4k/42byCN5Rh027f4yARHCink9sKAkbtGZXEAmR0ZCnc2/Ag==",
"dev": true
},
"@types/superagent": {
"version": "4.1.15",
"resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-4.1.15.tgz",
"integrity": "sha512-mu/N4uvfDN2zVQQ5AYJI/g4qxn2bHB6521t1UuH09ShNWjebTqN0ZFuYK9uYjcgmI0dTQEs+Owi1EO6U0OkOZQ==",
"dev": true,
"requires": {
"@types/cookiejar": "*",
"@types/node": "*"
}
},
"@ungap/promise-all-settled": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz",
@ -19107,6 +19281,11 @@
"es-abstract": "^1.19.0"
}
},
"asap": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
"integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA=="
},
"asn1.js": {
"version": "5.4.1",
"resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz",
@ -19156,6 +19335,11 @@
"resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
"integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ=="
},
"asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
},
"atob": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
@ -19503,7 +19687,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
"integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
"dev": true,
"requires": {
"function-bind": "^1.1.1",
"get-intrinsic": "^1.0.2"
@ -19831,6 +20014,14 @@
"integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
"dev": true
},
"combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
"requires": {
"delayed-stream": "~1.0.0"
}
},
"commander": {
"version": "8.3.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
@ -19927,6 +20118,11 @@
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz",
"integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA=="
},
"cookiejar": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz",
"integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ=="
},
"copy-concurrently": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz",
@ -20080,9 +20276,9 @@
}
},
"debug": {
"version": "4.3.3",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
"integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"requires": {
"ms": "2.1.2"
}
@ -20167,6 +20363,11 @@
"isobject": "^3.0.1"
}
},
"delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
},
"delegates": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
@ -20199,6 +20400,15 @@
"minimist": "^0.1.0"
}
},
"dezalgo": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz",
"integrity": "sha512-K7i4zNfT2kgQz3GylDw40ot9GAE47sFZ9EXHFSPP6zONLgH6kWXE0KWJchkbQJLBkRazq4APwZ4OwiFFlT95OQ==",
"requires": {
"asap": "^2.0.0",
"wrappy": "1"
}
},
"diff": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
@ -21138,6 +21348,11 @@
"integrity": "sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw==",
"dev": true
},
"fast-safe-stringify": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz",
"integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA=="
},
"fastest-levenshtein": {
"version": "1.0.12",
"resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz",
@ -21282,6 +21497,34 @@
"integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
"dev": true
},
"form-data": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
"integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
"requires": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.8",
"mime-types": "^2.1.12"
}
},
"formidable": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/formidable/-/formidable-2.0.1.tgz",
"integrity": "sha512-rjTMNbp2BpfQShhFbR3Ruk3qk2y9jKpvMW78nJgx8QKtxjDVrwbZG+wvDOmVbifHyOUOQJXxqEy6r0faRrPzTQ==",
"requires": {
"dezalgo": "1.0.3",
"hexoid": "1.0.0",
"once": "1.4.0",
"qs": "6.9.3"
},
"dependencies": {
"qs": {
"version": "6.9.3",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.9.3.tgz",
"integrity": "sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw=="
}
}
},
"fp-and-or": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/fp-and-or/-/fp-and-or-0.1.3.tgz",
@ -21424,8 +21667,7 @@
"function-bind": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
"dev": true
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
},
"functional-red-black-tree": {
"version": "1.0.1",
@ -21470,7 +21712,6 @@
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
"integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
"dev": true,
"requires": {
"function-bind": "^1.1.1",
"has": "^1.0.3",
@ -21630,7 +21871,6 @@
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
"integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
"dev": true,
"requires": {
"function-bind": "^1.1.1"
}
@ -21654,8 +21894,7 @@
"has-symbols": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz",
"integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==",
"dev": true
"integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw=="
},
"has-tostringtag": {
"version": "1.0.0",
@ -21766,6 +22005,11 @@
"readable-stream": "^3.6.0"
}
},
"hexoid": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz",
"integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g=="
},
"hmac-drbg": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
@ -23092,6 +23336,11 @@
"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
"integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="
},
"methods": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
"integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w=="
},
"micromatch": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
@ -23119,6 +23368,11 @@
}
}
},
"mime": {
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz",
"integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg=="
},
"mime-db": {
"version": "1.51.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz",
@ -29065,8 +29319,7 @@
"object-inspect": {
"version": "1.12.0",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz",
"integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==",
"dev": true
"integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g=="
},
"object-keys": {
"version": "1.1.1",
@ -29745,6 +29998,14 @@
"escape-goat": "^2.0.0"
}
},
"qs": {
"version": "6.11.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
"integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
"requires": {
"side-channel": "^1.0.4"
}
},
"querystring": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
@ -30191,10 +30452,9 @@
"integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg=="
},
"semver": {
"version": "7.3.5",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
"integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
"dev": true,
"version": "7.3.7",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
"integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
"requires": {
"lru-cache": "^6.0.0"
}
@ -30330,7 +30590,6 @@
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
"integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
"dev": true,
"requires": {
"call-bind": "^1.0.0",
"get-intrinsic": "^1.0.2",
@ -30824,6 +31083,24 @@
"integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
"dev": true
},
"superagent": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.0.tgz",
"integrity": "sha512-iudipXEel+SzlP9y29UBWGDjB+Zzag+eeA1iLosaR2YHBRr1Q1kC29iBrF2zIVD9fqVbpZnXkN/VJmwFMVyNWg==",
"requires": {
"component-emitter": "^1.3.0",
"cookiejar": "^2.1.3",
"debug": "^4.3.4",
"fast-safe-stringify": "^2.1.1",
"form-data": "^4.0.0",
"formidable": "^2.0.1",
"methods": "^1.1.2",
"mime": "2.6.0",
"qs": "^6.10.3",
"readable-stream": "^3.6.0",
"semver": "^7.3.7"
}
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",

View File

@ -1,6 +1,6 @@
{
"name": "nope",
"version": "1.3.12",
"version": "1.4.1",
"description": "NoPE Runtime for Nodejs. For Browser-Support please use nope-browser",
"files": [
"dist-nodejs/**/*",
@ -61,6 +61,7 @@
"rxjs": "^7.5.1",
"socket.io": "^4.4.1",
"socket.io-client": "^4.4.1",
"superagent": "^8.0.0",
"ts-morph": "^13.0.2",
"typescript-json-schema": "^0.52.0",
"uuid": "^8.3.2",
@ -76,6 +77,7 @@
"@types/plotly.js": "^1.54.22",
"@types/socket.io": "^3.0.1",
"@types/socket.io-client": "^1.4.36",
"@types/superagent": "^4.1.15",
"chai": "^4.3.4",
"dts-bundle": "^0.7.3",
"dts-bundle-webpack": "^1.0.2",

View File

@ -15,7 +15,7 @@
"noImplicitReturns": true,
"outDir": "./dist-browser",
"pretty": false,
"removeComments": true,
"removeComments": false,
"stripInternal": true,
"downlevelIteration": true,
"noImplicitAny": false,