botbuilder-dialogs-adaptive
Version:
Rule system for the Microsoft BotBuilder dialog system.
94 lines • 4.7 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.LanguageGeneratorManager = void 0;
/**
* Class which manages cache of all LG resources from a ResourceExplorer.
* This class automatically updates the cache when resource change events occure.
*/
const botbuilder_dialogs_declarative_1 = require("botbuilder-dialogs-declarative");
const botbuilder_lg_1 = require("botbuilder-lg");
const path_1 = require("path");
const languageResourceLoader_1 = require("../languageResourceLoader");
const templateEngineLanguageGenerator_1 = require("./templateEngineLanguageGenerator");
/**
* Class which manages cache of all LG resources from a [ResourceExplorer](xref:botbuilder-dialogs-declarative.ResourceExplorer).
*/
class LanguageGeneratorManager {
/**
* Initialize a new instance of [LanguageResourceManager](xref:botbuilder-dialogs-adaptive.LanguageResourceManager) class.
*
* @param resourceManager Resource explorer to manager LG files.
*/
constructor(resourceManager) {
/**
* Gets or sets language generators.
*/
this.languageGenerators = new Map();
this._resourceExporer = resourceManager;
this._resourceExporer.changed = (event, resources) => __awaiter(this, void 0, void 0, function* () {
resources.forEach((resource) => {
if ((0, path_1.extname)(resource.id).toLowerCase() === '.lg') {
if (event === botbuilder_dialogs_declarative_1.ResourceChangeEvent.removed) {
this.languageGenerators.delete(resource.id);
}
else {
const generator = this.getTemplateEngineLanguageGenerator(resource);
this.languageGenerators.set(resource.id, generator);
}
}
});
});
this._multiLanguageResources = languageResourceLoader_1.LanguageResourceLoader.groupByLocale(this._resourceExporer);
// load all LG resources
const resources = this._resourceExporer.getResources('lg');
for (const resource of resources) {
this.languageGenerators.set(resource.id, this.getTemplateEngineLanguageGenerator(resource));
}
}
/**
* Returns the resolver to resolve LG import id to template text based on language and a template resource loader delegate.
*
* @param locale Locale to identify language.
* @param resourceMapping Template resource loader delegate.
* @returns The delegate to resolve the resource.
*/
static resourceExplorerResolver(locale, resourceMapping) {
return (lgResource, id) => {
const fallbackLocale = languageResourceLoader_1.LanguageResourceLoader.fallbackLocale(locale, Array.from(resourceMapping.keys()));
const resources = resourceMapping.get(fallbackLocale.toLowerCase());
const resourceName = (0, path_1.basename)((0, path_1.normalize)(id));
const resource = resources.find((u) => languageResourceLoader_1.LanguageResourceLoader.parseLGFileName(u.id).prefix ===
languageResourceLoader_1.LanguageResourceLoader.parseLGFileName(resourceName).prefix);
if (resource === undefined) {
throw Error(`There is no matching LG resource for ${resourceName}`);
}
else {
return new botbuilder_lg_1.LGResource(resource.id, resource.fullName, resource.readText());
}
};
}
/**
* @private
*/
getTemplateEngineLanguageGenerator(resource) {
return new templateEngineLanguageGenerator_1.TemplateEngineLanguageGenerator(resource, this._multiLanguageResources);
}
}
exports.LanguageGeneratorManager = LanguageGeneratorManager;
//# sourceMappingURL=languageGeneratorManager.js.map