botbuilder-dialogs-adaptive
Version:
Rule system for the Microsoft BotBuilder dialog system.
96 lines • 4.17 kB
JavaScript
;
/**
* @module botbuilder-dialogs-adaptive
*/
/**
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License.
*/
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.MultiLanguageGeneratorBase = void 0;
const botbuilder_dialogs_1 = require("botbuilder-dialogs");
const languagePolicy_1 = require("../languagePolicy");
const languageGeneratorExtensions_1 = require("../languageGeneratorExtensions");
/**
* Base class which applies language policy to tryGetGenerator.
*/
class MultiLanguageGeneratorBase extends botbuilder_dialogs_1.Configurable {
/**
* @param property The key of the conditional selector configuration.
* @returns The converter for the selector configuration.
*/
getConverter(property) {
switch (property) {
case 'languagePolicy':
return new languagePolicy_1.LanguagePolicyConverter();
default:
return super.getConverter(property);
}
}
/**
* Find a language generator that matches the current context locale.
*
* @param dialogContext Context for the current turn of conversation.
* @param template Template to use.
* @param data Data to bind to.
* @returns A promise representing the asynchronous operation.
*/
generate(dialogContext, template, data) {
return __awaiter(this, void 0, void 0, function* () {
// priority
// 1. local policy
// 2. shared policy in turnContext
// 3. default policy
if (!this.languagePolicy) {
this.languagePolicy = dialogContext.services.get(languageGeneratorExtensions_1.languagePolicyKey);
if (!this.languagePolicy) {
this.languagePolicy = new languagePolicy_1.LanguagePolicy();
}
}
// see if we have any locales that match
const fallbackLocales = [];
const targetLocale = dialogContext.getLocale().toLowerCase();
if (this.languagePolicy.has(targetLocale)) {
this.languagePolicy.get(targetLocale).forEach((u) => fallbackLocales.push(u));
}
// append empty as fallback to end
if (targetLocale !== '' && this.languagePolicy.has('')) {
this.languagePolicy.get('').forEach((u) => fallbackLocales.push(u));
}
if (fallbackLocales.length === 0) {
throw Error(`No supported language found for ${targetLocale}`);
}
const generators = [];
for (const locale of fallbackLocales) {
const result = this.tryGetGenerator(dialogContext, locale);
if (result.exist) {
generators.push(result.result);
}
}
if (generators.length === 0) {
throw Error(`No generator found for language ${targetLocale}`);
}
const errors = [];
for (const generator of generators) {
try {
return yield generator.generate(dialogContext, template, data);
}
catch (e) {
errors.push(e);
}
}
throw Error(errors.join(',\n'));
});
}
}
exports.MultiLanguageGeneratorBase = MultiLanguageGeneratorBase;
//# sourceMappingURL=multiLanguageGeneratorBase.js.map