UNPKG

web-node

Version:

High level javaScript backend plugin system and configuration merger.

169 lines (168 loc) 10.8 kB
import { Encoding, Mapping, RecursiveEvaluateable } from 'clientnode'; import { BaseState, Configuration, EvaluateablePartialConfiguration, HookPromiseResult, MetaPluginConfiguration, PackageConfiguration, Plugin, PluginChange, ServicePromisesState } from './type'; export declare const currentRequire: typeof require; /** * Calls all plugin methods for given trigger description asynchronous and * waits for their resolved promises. * @param givenState - Contains runtime information about current hook. * @param parameters - Additional parameters to forward into plugin api. * @returns A promise which resolves when all callbacks have resolved their * promise holding given potentially modified data. */ export declare const callStack: <State extends BaseState<unknown> = ServicePromisesState, Output = undefined>(givenState: Omit<State, "pluginAPI">, ...parameters: Array<unknown>) => HookPromiseResult<Output>; /** * Calls all plugin methods for given trigger description synchronous. * @param givenState - Contains runtime information about current hook. * @param parameters - Additional parameters to forward into plugin api. * @returns Given potentially modified data. */ export declare const callStackSynchronous: <State extends BaseState<unknown> = ServicePromisesState, Output = void>(givenState: Omit<State, "pluginAPI">, ...parameters: Array<unknown>) => Output; /** * Converts given plugin name into the corresponding internal representation. * @param name - Name to convert. * @param regularExpression - Regular expression pattern which extracts * relevant name path as first match group. * @returns Transformed name. */ export declare const determineInternalName: (name: string, regularExpression: RegExp) => string; /** * Evaluates given configuration object by letting plugins package sub * structure untouched. * @param configuration - Evaluable configuration structure. * @returns Resolved configuration. */ export declare const evaluateConfiguration: <Type extends Mapping<unknown> = Configuration>(configuration: RecursiveEvaluateable<Type> | Type) => Type; /** * Checks for changed plugin api file in given plugins and reloads them if * necessary (new timestamp). * @param plugins - List of plugins to search for updates in. * @returns A list with plugins which have a changed api scope. */ export declare const hotReloadAPIFile: (plugins: Array<Plugin>) => Array<Plugin>; /** * Checks for changed plugin configurations in given plugins and reloads them * if necessary (new timestamp). * @param plugins - List of plugins to search for updates in. * @param configurationPropertyNames - Property names to search for to use as * entry in plugin configuration file. * @returns A list with plugins which have a changed configurations. */ export declare const hotReloadConfigurationFile: (plugins: Array<Plugin>, configurationPropertyNames: Array<string>) => Array<Plugin>; /** * Checks for changed plugin file type in given plugins and reloads them if * necessary (timestamp has changed). * @param type - Plugin file type to search for updates. * @param target - Property name existing in plugin meta information objects * which should be updated. * @param plugins - List of plugins to search for updates in. * @returns A list with plugin changes. */ export declare const hotReloadFiles: (type: "api" | "configuration", target: "packageConfiguration" | "scope", plugins: Array<Plugin>) => Array<PluginChange>; /** * Extends given configuration object with given plugin specific ones and * returns a plugin specific meta information object. * @param name - Name of plugin to extend. * @param internalName - Internal name of plugin to extend. * @param plugins - List of all yet determined plugin information. * @param metaConfiguration - Configuration file configuration. * @param pluginPath - Path to given plugin. * @param encoding - Encoding to use to read and write from child process's. * @returns An object of plugin specific meta information. */ export declare const load: (name: string, internalName: string, plugins: Mapping<Plugin>, metaConfiguration: MetaPluginConfiguration, pluginPath: string, encoding?: Encoding) => Promise<Plugin>; /** * Load given plugin api file in given path and generates a plugin specific * data structure with useful meta information. * @param relativeFilePaths - Paths to file to load relatively from given * plugin path. * @param pluginPath - Path to plugin directory. * @param name - Plugin name to use for proper error messages. * @param internalName - Internal plugin name to use for proper error messages. * @param plugins - List of plugins to search for trigger callbacks in. * @param encoding - Encoding to use to read and write from child process. * @param configuration - Plugin specific configurations. * @param configurationFilePaths - Plugin specific configuration file paths. * @returns Plugin meta information object. */ export declare const loadAPI: (relativeFilePaths: Array<string>, pluginPath: string, name: string, internalName: string, plugins: Mapping<Plugin>, encoding?: Encoding, configuration?: EvaluateablePartialConfiguration | null, configurationFilePaths?: Array<string>) => Promise<Plugin>; /** * Loads plugin specific configuration object. * @param name - Property name where to inject resolved configuration into * global one. * @param packageConfiguration - Plugin specific package configuration object. * @param configurationPropertyNames - Property names to search for to use as * entry in plugin configuration file. * @returns Determined configuration object. */ export declare const loadConfiguration: (name: string, packageConfiguration: PackageConfiguration, configurationPropertyNames: Array<string>) => EvaluateablePartialConfiguration; /** * Loads given plugin configurations into global configuration. * @param plugins - Topological sorted list of plugins to check for * configurations. * @param configuration - Global configuration to extend with. * @returns Updated given configuration object. */ export declare const loadConfigurations: (plugins: Array<Plugin>, configuration: Configuration) => Configuration; /** * Load given api file path and returns exported scope. * @param filePath - Path to file to load. * @param name - Plugin name to use for proper error messages. * @param fallbackScope - Scope to return if an error occurs during loading. * If a "null" is given an error will be thrown. * @param log - Enables logging. * @returns Exported api file scope. */ export declare const loadFile: (filePath: string, name: string, fallbackScope?: null | object, log?: boolean) => object; /** * Extends given configuration object with all plugin specific ones and returns * a topological sorted list of plugins with plugins specific meta information * stored. * @param configuration - Configuration object to extend and use. * @returns A topological sorted list of plugins objects. */ export declare const loadAll: (configuration: Configuration) => Promise<{ configuration: Configuration; plugins: Array<Plugin>; }>; /** * Transform a list of absolute paths respecting the application context. * @param configuration - Configuration object. * @param configuration.core - Sub configuration web-node. * @param configuration.core.context - Sub web-node context configurations. * @param configuration.core.context.path - Current web-nodes path. * @param locations - Locations to process. * @returns Given and processed locations. */ export declare const determineLocations: ({ core: { context: { path: contextPath } } }: Configuration, locations?: Array<string> | string) => Array<string>; /** * Ignore absolute defined locations (relativ to application context) and * relative defined in each loaded plugin location. * @param configuration - Configuration object. * @param plugins - List of active plugins. * @param filePath - Path to search for. * @param locations - Locations to search in. * @returns A boolean indicating whether given file path is in provided * locations. */ export declare const isInLocations: (configuration: Configuration, plugins: Array<Plugin>, filePath: string, locations: Array<string> | string) => boolean; export declare const pluginAPI: { readonly callStack: <State extends BaseState<unknown> = ServicePromisesState<undefined, Configuration<Mapping<unknown>>, Mapping<unknown>, import("./type").ServicePromises<Mapping<unknown>>>, Output = undefined>(givenState: Omit<State, "pluginAPI">, ...parameters: Array<unknown>) => HookPromiseResult<Output>; readonly callStackSynchronous: <State extends BaseState<unknown> = ServicePromisesState<undefined, Configuration<Mapping<unknown>>, Mapping<unknown>, import("./type").ServicePromises<Mapping<unknown>>>, Output = void>(givenState: Omit<State, "pluginAPI">, ...parameters: Array<unknown>) => Output; readonly determineInternalName: (name: string, regularExpression: RegExp) => string; readonly determineLocations: ({ core: { context: { path: contextPath } } }: Configuration, locations?: Array<string> | string) => Array<string>; readonly evaluateConfiguration: <Type extends Mapping<unknown> = Configuration>(configuration: RecursiveEvaluateable<Type> | Type) => Type; readonly hotReloadAPIFile: (plugins: Array<Plugin>) => Array<Plugin>; readonly hotReloadConfigurationFile: (plugins: Array<Plugin>, configurationPropertyNames: Array<string>) => Array<Plugin>; readonly hotReloadFiles: (type: "api" | "configuration", target: "packageConfiguration" | "scope", plugins: Array<Plugin>) => Array<PluginChange>; readonly isInLocations: (configuration: Configuration, plugins: Array<Plugin>, filePath: string, locations: Array<string> | string) => boolean; readonly load: (name: string, internalName: string, plugins: Mapping<Plugin>, metaConfiguration: MetaPluginConfiguration, pluginPath: string, encoding?: Encoding) => Promise<Plugin>; readonly loadAll: (configuration: Configuration) => Promise<{ configuration: Configuration; plugins: Array<Plugin>; }>; readonly loadAPI: (relativeFilePaths: Array<string>, pluginPath: string, name: string, internalName: string, plugins: Mapping<Plugin>, encoding?: Encoding, configuration?: EvaluateablePartialConfiguration | null, configurationFilePaths?: Array<string>) => Promise<Plugin>; readonly loadConfiguration: (name: string, packageConfiguration: PackageConfiguration, configurationPropertyNames: Array<string>) => EvaluateablePartialConfiguration; readonly loadConfigurations: (plugins: Array<Plugin>, configuration: Configuration) => Configuration; readonly loadFile: (filePath: string, name: string, fallbackScope?: null | object, log?: boolean) => object; }; export default pluginAPI;