@microsoft/botbuilder-m365
Version:
M365 extensions for Microsoft BotBuilder, Alpha release.
148 lines • 7.15 kB
JavaScript
;
/**
* @module botbuilder-m365
*/
/**
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License.
*/
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
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.DefaultPromptManager = void 0;
const fs = __importStar(require("fs/promises"));
const path = __importStar(require("path"));
const PromptTemplateEngine_1 = require("./PromptTemplateEngine");
class DefaultPromptManager {
constructor(options) {
this._functions = new Map();
this._templates = new Map();
this._options = typeof options == 'object' ? Object.assign({}, options) : { promptsFolder: options };
this._templateEngine = new PromptTemplateEngine_1.PromptTemplateEngine(this);
}
addFunction(name, handler, allowOverrides = false) {
if (!this._functions.has(name) || allowOverrides) {
this._functions.set(name, { handler, allowOverrides });
}
else {
const entry = this._functions.get(name);
if (entry.allowOverrides) {
entry.handler = handler;
}
else {
throw new Error(`The DefaultPromptManager.templateFunction() method was called with a previously registered function named "${name}".`);
}
}
return this;
}
addPromptTemplate(name, template) {
if (this._templates.has(name)) {
throw new Error(`The DefaultPromptManager.addPromptTemplate() method was called with a previously registered template named "${name}".`);
}
const entry = Object.assign({}, template);
// Parse prompt into blocks
try {
entry.blocks = this._templateEngine.extractBlocks(entry.text, true);
}
catch (err) {
throw new Error(`DefaultPromptManager.addPromptTemplate(): an error occurred while parsing the template for '${name}': ${err.toString()}`);
}
// Cache template
this._templates.set(name, entry);
return this;
}
invokeFunction(context, state, name) {
var _a;
if (this._functions && this._functions.has(name)) {
return Promise.resolve((_a = this._functions.get(name)) === null || _a === void 0 ? void 0 : _a.handler(context, state));
}
else {
throw new Error(`The DefaultPromptManager.invokeFunction() method was called for an unregistered function named "${name}".`);
}
}
loadPromptTemplate(name) {
return __awaiter(this, void 0, void 0, function* () {
if (!this._templates.has(name)) {
const entry = {};
// Load template from disk
const folder = path.join(this._options.promptsFolder, name);
const configFile = path.join(folder, 'config.json');
const promptFile = path.join(folder, 'skprompt.txt');
// Load prompt config
try {
// eslint-disable-next-line security/detect-non-literal-fs-filename
const config = yield fs.readFile(configFile, 'utf-8');
entry.config = JSON.parse(config);
}
catch (err) {
throw new Error(`DefaultPromptManager.loadPromptTemplate(): an error occurred while loading '${configFile}'. The file is either invalid or missing.`);
}
// Load prompt text
try {
// eslint-disable-next-line security/detect-non-literal-fs-filename
entry.text = yield fs.readFile(promptFile, 'utf-8');
}
catch (err) {
throw new Error(`DefaultPromptManager.loadPromptTemplate(): an error occurred while loading '${promptFile}'. The file is either invalid or missing.`);
}
// Parse prompt into blocks
try {
entry.blocks = this._templateEngine.extractBlocks(entry.text, true);
}
catch (err) {
throw new Error(`DefaultPromptManager.loadPromptTemplate(): an error occurred while parsing '${promptFile}': ${err.toString()}`);
}
// Cache loaded template
this._templates.set(name, entry);
}
return this._templates.get(name) || {};
});
}
renderPrompt(context, state, nameOrTemplate) {
var _a;
return __awaiter(this, void 0, void 0, function* () {
// Load the template if needed
let template;
if (typeof nameOrTemplate == 'string') {
template = (yield this.loadPromptTemplate(nameOrTemplate));
}
else if (typeof nameOrTemplate == 'object' && nameOrTemplate.text && nameOrTemplate.config) {
template = Object.assign({}, nameOrTemplate);
}
else {
throw new Error(`The DefaultPromptManager.renderPrompt() method was passed an invalid or missing template.`);
}
// Render the prompt
const text = yield this._templateEngine.render(context, state, (_a = template.blocks) !== null && _a !== void 0 ? _a : template.text);
return { text: text, config: template.config };
});
}
}
exports.DefaultPromptManager = DefaultPromptManager;
//# sourceMappingURL=DefaultPromptManager.js.map