UNPKG

botbuilder-dialogs-adaptive

Version:

Rule system for the Microsoft BotBuilder dialog system.

94 lines 4.7 kB
"use strict"; /** * @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