UNPKG

wa-chat-server

Version:

Watson Assistant powered chat server

163 lines (162 loc) 6.71 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (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 () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __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.ConversationServices = void 0; const filesystem = __importStar(require("fs")); class ConversationServices { constructor(serviceArray = [], fs = filesystem, config) { this.serviceArray = serviceArray; this.fs = fs; this.config = config; this.schemasOnFS = null; this.initServiceMap(serviceArray); } addServices(...services) { this.initServiceMap([...this.services.values(), ...services]); return this; } getObligatorySchemas() { return new Set([].concat(...[...this.services.values()].map(s => s.getObligatorySchemas()))); } getOptionalSchemas() { return new Set([].concat(...[...this.services.values()].map(s => s.getOptionalSchemas()))); } absolutePath(path) { // TODO: The implementation of this method should rather make use of // path.normalize(). However for me it is throwing some strange exception // related to utf conversion (jan_nemecek@cz.ibm.com) const dir = 'JSON_SCHEMA_DIR' in this.config ? this.config.JSON_SCHEMA_DIR : `${this.config.APP_ROOT_DIR}/../src/jsonschema`; const parts = `${dir}/${path}` .split('/') .filter((part) => part !== '' && part !== '.'); return ('/' + parts .reduce((result, part) => { if (part == '..') { result.pop(); } else { result.push(part); } return result; }, []) .join('/')); } getSchemasOnFS() { return __awaiter(this, void 0, void 0, function* () { if (this.schemasOnFS === null) { this.schemasOnFS = new Set(); const dirs = ['request', 'response'].map((path) => this.absolutePath(path)); yield Promise.all(dirs.map((dirPath) => { return (() => __awaiter(this, void 0, void 0, function* () { const files = yield this.fs.promises.readdir(dirPath); files.forEach((f) => { if (/\.json$/.test(f)) { this.schemasOnFS.add(`${dirPath}/${f}`); } }); }))(); })); } return this.schemasOnFS; }); } isSchemaOnFS(path) { return __awaiter(this, void 0, void 0, function* () { return (yield this.getSchemasOnFS()).has(path); }); } getSchemaAsStr(path) { return __awaiter(this, void 0, void 0, function* () { return this.fs.promises.readFile(path, { encoding: 'utf8' }); }); } /** * Regístters all conversation services present on the filesystem */ registerAllServices() { return __awaiter(this, void 0, void 0, function* () { const dirName = 'src/class/ConversationService'; const files = yield this.fs.promises.readdir(dirName); yield Promise.all(files.map((f) => { return (() => __awaiter(this, void 0, void 0, function* () { if (/ConversationService[^.]+\.ts$/.test(f)) { const serviceName = f.replace(/^ConversationService(.*)\.ts$/, '$1'); yield this.registerService(serviceName); } }))(); })); }); } /** * Registers the service by name; the name is entered without the class name * prefix 'ConversationService' */ registerService(serviceName) { return __awaiter(this, void 0, void 0, function* () { const className = `ConversationService${serviceName}`; const path = `./ConversationService/${className}`; yield Promise.resolve(`${path}`).then(s => __importStar(require(s))).then((code) => { const service = new code[className](this); this.services.set(serviceName, service); }); }); } getServiceByName(serviceName) { return this.services.get(serviceName); } getServices() { return [...this.services.values()]; } initServiceMap(serviceArray) { this.services = new Map(); serviceArray.forEach((service) => { this.services.set(service.getServiceName(), service); service.setServices(this); }); } } exports.ConversationServices = ConversationServices;