UNPKG

@robotlegsjs/core

Version:

An architecture-based IoC framework for JavaScript/TypeScript

97 lines 4.29 kB
"use strict"; // ------------------------------------------------------------------------------ // 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