botbuilder-dialogs-adaptive
Version:
Rule system for the Microsoft BotBuilder dialog system.
62 lines • 2.65 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.MostSpecificSelector = void 0;
/**
* @module botbuilder-dialogs-adaptive
*/
/**
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License.
*/
const adaptive_expressions_1 = require("adaptive-expressions");
const triggerSelector_1 = require("../triggerSelector");
/**
* Select the most specific true rule implementation of [TriggerSelector](xref:botbuilder-dialogs-adaptive.TriggerSelector).
*/
class MostSpecificSelector extends triggerSelector_1.TriggerSelector {
constructor() {
super(...arguments);
this._tree = new adaptive_expressions_1.TriggerTree();
}
/**
* Initializes the selector with the set of rules.
*
* @param conditionals Possible rules to match.
* @param _evaluate True by default if rules should be evaluated on select.
*/
initialize(conditionals, _evaluate) {
for (const conditional of conditionals) {
this._tree.addTrigger(conditional.getExpression(), conditional);
}
}
/**
* Selects the best rule to execute.
*
* @param context The context for the current turn of conversation.
* @returns The best rule in original list to execute.
*/
select(context) {
return __awaiter(this, void 0, void 0, function* () {
const triggers = this._tree.matches(context.state);
const matches = triggers.map((trigger) => trigger.action);
let selections = matches;
if (matches.length > 0 && this.selector) {
this.selector.initialize(matches, false);
selections = yield this.selector.select(context);
}
return selections;
});
}
}
exports.MostSpecificSelector = MostSpecificSelector;
MostSpecificSelector.$kind = 'Microsoft.MostSpecificSelector';
//# sourceMappingURL=mostSpecificSelector.js.map