@robotlegsjs/core
Version:
An architecture-based IoC framework for JavaScript/TypeScript
97 lines • 4.29 kB
JavaScript
;
// ------------------------------------------------------------------------------
// Copyright (c) 2017-present, RobotlegsJS. All Rights Reserved.
//
// NOTICE: You are permitted to use, modify, and distribute this file
// in accordance with the terms of the license agreement accompanying it.
// ------------------------------------------------------------------------------
Object.defineProperty(exports, "__esModule", { value: true });
exports.CommandExecutor = void 0;
var applyHooks_1 = require("../../../framework/impl/applyHooks");
var guardsApprove_1 = require("../../../framework/impl/guardsApprove");
var instantiateUnmapped_1 = require("../../../framework/impl/instantiateUnmapped");
/**
* @private
*/
var CommandExecutor = /** @class */ (function () {
/*============================================================================*/
/* Constructor */
/*============================================================================*/
/**
* Creates a Command Executor
*
* @param injector The Injector to use. A child injector will be created from it.
* @param removeMapping Remove mapping handler (optional)
* @param handleResult Result handler (optional)
*/
function CommandExecutor(injector, removeMapping, handleResult) {
this._injector = injector.createChild();
this._removeMapping = removeMapping;
this._handleResult = handleResult;
}
/*============================================================================*/
/* Public Functions */
/*============================================================================*/
/**
* @inheritDoc
*/
CommandExecutor.prototype.executeCommands = function (mappings, payload) {
var length = mappings.length;
for (var i = 0; i < length; i++) {
this.executeCommand(mappings[i], payload);
}
};
/**
* @inheritDoc
*/
CommandExecutor.prototype.executeCommand = function (mapping, payload) {
var hasPayload = payload && payload.hasPayload();
var injectionEnabled = hasPayload && mapping.payloadInjectionEnabled;
var command = null;
if (injectionEnabled) {
this._mapPayload(payload);
}
if (mapping.guards.length === 0 || guardsApprove_1.guardsApprove(mapping.guards, this._injector)) {
var commandClass = mapping.commandClass;
if (mapping.fireOnce && this._removeMapping) {
this._removeMapping(mapping);
}
command = instantiateUnmapped_1.instantiateUnmapped(this._injector, commandClass);
if (mapping.hooks.length > 0) {
this._injector.bind(commandClass).toConstantValue(command);
applyHooks_1.applyHooks(mapping.hooks, this._injector);
this._injector.unbind(commandClass);
}
}
if (injectionEnabled) {
this._unmapPayload(payload);
}
if (command) {
var executeMethod = command.execute.bind(command);
var result = hasPayload && executeMethod.length > 0
? executeMethod.apply(command, payload.values)
: executeMethod();
if (this._handleResult) {
this._handleResult(result, command, mapping);
}
}
};
/*============================================================================*/
/* Private Functions */
/*============================================================================*/
CommandExecutor.prototype._mapPayload = function (payload) {
var i = payload.length;
while (i--) {
this._injector.bind(payload.classes[i]).toConstantValue(payload.values[i]);
}
};
CommandExecutor.prototype._unmapPayload = function (payload) {
var i = payload.length;
while (i--) {
this._injector.unbind(payload.classes[i]);
}
};
return CommandExecutor;
}());
exports.CommandExecutor = CommandExecutor;
//# sourceMappingURL=CommandExecutor.js.map