UNPKG

reveal-sdk-node

Version:

RevealBI Node.js SDK

99 lines (98 loc) 4.87 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DashboardExporter = void 0; const fs = require('fs'); const DashboardTheme_1 = require("./DashboardTheme"); const ExportOptions_1 = require("./ExportOptions"); class ExportRequestData { constructor(format, dId, opt, file) { this.dashboardId = ""; this.filePath = ""; this.options = null; if (opt != null && opt !== undefined) { //The below code is to have known objects that can be serializable as json without problems. //We don't know if client's objects will be serializable or not, so we are converting them to ours. switch (format) { case ExportOptions_1.ExportFormat.Pdf: this.options = new ExportOptions_1.PdfExportOptions(opt); break; case ExportOptions_1.ExportFormat.PowerPoint: this.options = new ExportOptions_1.PowerPointExportOptions(opt); break; case ExportOptions_1.ExportFormat.Excel: this.options = new ExportOptions_1.ExcelExportOptions(opt); break; case ExportOptions_1.ExportFormat.Image: this.options = new ExportOptions_1.ImageExportOptions(opt); break; default: throw new Error(`Format not supported ${format}`); } if (opt.theme != null) { this.options.theme = new DashboardTheme_1.DefaultDashboardTheme(opt.theme); } } if (file != null && file !== undefined && file.length > 0) { this.filePath = file; } this.dashboardId = dId; } } class DashboardExporter { constructor(revealServer) { this.server = revealServer; } async exportPowerPoint(dashboardId, filePath, options, userContext) { return this.export(ExportOptions_1.ExportFormat.PowerPoint, dashboardId, filePath !== null && filePath !== void 0 ? filePath : "", options !== null && options !== void 0 ? options : new ExportOptions_1.PowerPointExportOptions(), userContext); } async exportExcel(dashboardId, filePath, options, userContext) { return this.export(ExportOptions_1.ExportFormat.Excel, dashboardId, filePath !== null && filePath !== void 0 ? filePath : "", options !== null && options !== void 0 ? options : new ExportOptions_1.ExcelExportOptions(), userContext); } async exportPdf(dashboardId, filePath, options, userContext) { return this.export(ExportOptions_1.ExportFormat.Pdf, dashboardId, filePath !== null && filePath !== void 0 ? filePath : "", options !== null && options !== void 0 ? options : new ExportOptions_1.PdfExportOptions(), userContext); } async exportImage(dashboardId, filePath, options, userContext) { return this.export(ExportOptions_1.ExportFormat.Image, dashboardId, filePath !== null && filePath !== void 0 ? filePath : "", options !== null && options !== void 0 ? options : new ExportOptions_1.ImageExportOptions(), userContext); } async export(format, dashboardId, filePath, options, userContext) { let response = ""; try { response = await this.callExportService(format, dashboardId, options, filePath, userContext); if (filePath !== null && filePath !== undefined && filePath.length > 0) { return; } else { try { return fs.createReadStream(response); } catch (error) { throw new Error(`Could not create stream from [${response}]`); } } } catch (error) { throw new Error(`Error while exporting: ${error}`); } } async callExportService(format, dashboardId, options, filePath, userContext) { let exportRequestData = new ExportRequestData(format, dashboardId, options, filePath); try { var postData = JSON.stringify(exportRequestData); return await this.server.bridge("POST", "/revealEnginePrg/tools/exportFromNode?format=" + ExportOptions_1.ExportFormat[format], {}, postData, { 'Content-Type': 'application/json', 'Content-Length': Buffer.byteLength(postData) }, userContext); } catch (error) { if (error instanceof Error) { const errorBody = error.message; throw new Error(`Error calling bridge service: ${errorBody}`); } else { throw error; } } } ; } exports.DashboardExporter = DashboardExporter;