pip-services3-commons-node
Version:
Portable abstractions and patterns for Pip.Services in Node.js
190 lines (189 loc) • 6.65 kB
TypeScript
/** @module commands */
import { ICommand } from './ICommand';
import { IEvent } from './IEvent';
import { IEventListener } from './IEventListener';
import { ICommandInterceptor } from './ICommandInterceptor';
import { ValidationResult } from '../validate/ValidationResult';
import { Parameters } from '../run/Parameters';
/**
* Contains a set of commands and events supported by a [[ICommandable commandable]] object.
* The CommandSet supports command interceptors to extend and the command call chain.
*
* CommandSets can be used as alternative commandable interface to a business object.
* It can be used to auto generate multiple external services for the business object
* without writing much code.
*
* @see [[Command]]
* @see [[Event]]
* @see [[ICommandable]]
*
* ### Example ###
*
* export class MyDataCommandSet extends CommandSet {
* private _controller: IMyDataController;
*
* constructor(controller: IMyDataController) { // Any data controller interface
* super();
* this._controller = controller;
* this.addCommand(this.makeGetMyDataCommand());
* }
*
* private makeGetMyDataCommand(): ICommand {
* return new Command(
* 'get_mydata',
* null,
* (correlationId: string, args: Parameters, callback: (err: any, result: any) => void) => {
* let param = args.getAsString('param');
* this._controller.getMyData(correlationId, param, callback);
* }
* );
* }
* }
*/
export declare class CommandSet {
private readonly _commands;
private readonly _events;
private readonly _interceptors;
private _commandsByName;
private _eventsByName;
/**
* Creates an empty CommandSet object.
*/
constructor();
/**
* Gets all commands registered in this command set.
*
* @returns a list of commands.
*
* @see [[ICommand]]
*/
getCommands(): ICommand[];
/**
* Gets all events registred in this command set.
*
* @returns a list of events.
*
* @see [[IEvent]]
*/
getEvents(): IEvent[];
/**
* Searches for a command by its name.
*
* @param commandName the name of the command to search for.
* @returns the command, whose name matches the provided name.
*
* @see [[ICommand]]
*/
findCommand(commandName: string): ICommand;
/**
* Searches for an event by its name in this command set.
*
* @param eventName the name of the event to search for.
* @returns the event, whose name matches the provided name.
*
* @see [[IEvent]]
*/
findEvent(eventName: string): IEvent;
private buildCommandChain;
private rebuildAllCommandChains;
/**
* Adds a [[ICommand command]] to this command set.
*
* @param command the command to add.
*
* @see [[ICommand]]
*/
addCommand(command: ICommand): void;
/**
* Adds multiple [[ICommand commands]] to this command set.
*
* @param commands the array of commands to add.
*
* @see [[ICommand]]
*/
addCommands(commands: ICommand[]): void;
/**
* Adds an [[IEvent event]] to this command set.
*
* @param event the event to add.
* @see [[IEvent]]
*/
addEvent(event: IEvent): void;
/**
* Adds multiple [[IEvent events]] to this command set.
*
* @param events the array of events to add.
*
* @see [[IEvent]]
*/
addEvents(events: IEvent[]): void;
/**
* Adds all of the commands and events from specified [[CommandSet command set]]
* into this one.
*
* @param commandSet the CommandSet to add.
*/
addCommandSet(commandSet: CommandSet): void;
/**
* Adds a [[IEventListener listener]] to receive notifications on fired events.
*
* @param listener the listener to add.
*
* @see [[IEventListener]]
*/
addListener(listener: IEventListener): void;
/**
* Removes previosly added [[IEventListener listener]].
*
* @param listener the listener to remove.
*
* @see [[IEventListener]]
*/
removeListener(listener: IEventListener): void;
/**
* Adds a [[ICommandInterceptor command interceptor]] to this command set.
*
* @param interceptor the interceptor to add.
*
* @see [[ICommandInterceptor]]
*/
addInterceptor(interceptor: ICommandInterceptor): void;
/**
* Executes a [[ICommand command]] specificed by its name.
*
* @param correlationId (optional) transaction id to trace execution through call chain.
* @param commandName the name of that command that is to be executed.
* @param args the parameters (arguments) to pass to the command for execution.
* @param callback the function that is to be called once execution is complete. If an exception is raised, then
* it will be called with the error (for example: a ValidationException can be thrown).
*
* @see [[ICommand]]
* @see [[Parameters]]
*/
execute(correlationId: string, commandName: string, args: Parameters, callback: (err: any, result: any) => void): void;
/**
* Validates [[Parameters args]] for command specified by its name using defined schema.
* If validation schema is not defined than the methods returns no errors.
* It returns validation error if the command is not found.
*
* @param commandName the name of the command for which the 'args' must be validated.
* @param args the parameters (arguments) to validate.
* @returns an array of ValidationResults. If no command is found by the given
* name, then the returned array of ValidationResults will contain a
* single entry, whose type will be ValidationResultType.Error.
*
* @see [[Command]]
* @see [[Parameters]]
* @see [[ValidationResult]]
*/
validate(commandName: string, args: Parameters): ValidationResult[];
/**
* Fires event specified by its name and notifies all registered
* [[IEventListener listeners]]
*
* @param correlationId (optional) transaction id to trace execution through call chain.
* @param eventName the name of the event that is to be fired.
* @param args the event arguments (parameters).
*/
notify(correlationId: string, eventName: string, args: Parameters): void;
}