reveal-sdk-node
Version:
RevealBI Node.js SDK
99 lines (98 loc) • 4.87 kB
JavaScript
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;
;