UNPKG

dm-web-react

Version:

The DM web client with React.

338 lines 15 kB
import { StringUtils } from "ts-commons"; import { deserialize } from "class-transformer"; import { DatabaseResponse } from "../models/database/databaseResponse"; /** * 获取最外层window */ var getOutermostWindow = function (w) { if (w.parent === w.self) { return w; } return getOutermostWindow(w.parent); }; var topWindow = getOutermostWindow(window); var DmLiteMessageService = /** @class */ (function () { function DmLiteMessageService(global) { var _this = this; this.timeout = 20000; this.mapCallbacks = new Map(); // utf-8 to base64 // private utf8_to_b64 = (str: string) => { // return this.global.btoa(this.global.unescape(encodeURIComponent(str))); // }; // base64 to utf-8 this.b64_to_utf8 = function (str) { return decodeURIComponent(_this.global.escape(_this.global.atob(str))); }; this.global = global; this.isDmliteClient = navigator.userAgent.indexOf("dmlite") > -1; // 注册 数据库操作 this.global.Shell_DatabaseResponse = function (requestIdBase64, databaseResponseBas64) { var requestId = _this.b64_to_utf8(requestIdBase64); var dataResponse = _this.b64_to_utf8(databaseResponseBas64); _this.invokeCallback(requestId, dataResponse); }; } Object.defineProperty(DmLiteMessageService, "Instance", { get: function () { return this.instance; }, enumerable: true, configurable: true }); /** * invokeCallback */ DmLiteMessageService.prototype.invokeCallback = function (requestId, args) { try { var callbacks = this.mapCallbacks.get(requestId); if (!callbacks || typeof callbacks !== "function") { throw new Error("callback invalid method"); } callbacks(args); } catch (err) { throw new Error("Error description: " + err.message); } finally { if (this.mapCallbacks.has(requestId)) { this.mapCallbacks.delete(requestId); } } }; DmLiteMessageService.prototype.log = function (browserId, log) { this.global.dmlite && this.global.dmlite.Log(browserId, log); }; DmLiteMessageService.prototype.pushError = function (browserId, errMsg) { this.global.dmlite && this.global.dmlite.PushError(browserId, errMsg); }; DmLiteMessageService.prototype.InitAppContent = function (initConfigStr) { return this.global.dmlite ? this.global.dmlite.InitAppContent(initConfigStr) : false; }; /** * 打开 tab */ DmLiteMessageService.prototype.OpenTab = function (id, title, url) { if (this.isDmliteClient) { this.global.dmlite.OpenTab(id, title, url); } else { topWindow.postMessage({ param: { id: id, title: title, source: url }, action: "new", }, "*"); } }; /** * DatabaseQueryJsonRequest 查询数据返回json */ DmLiteMessageService.prototype.DatabaseQueryJsonRequest = function (browserId, sqlTemplate, timeout) { var _this = this; return new Promise(function (resolve, reject) { if (_this.global.dmlite && _this.global.dmlite.DatabaseQueryJsonRequest) { var requestId_1 = StringUtils.newGuid(); var timer_1 = window.setTimeout(function () { _this.mapCallbacks.delete(requestId_1); window.clearTimeout(timer_1); reject("timeout"); }, timeout || _this.timeout); var callback = function (data) { window.clearTimeout(timer_1); var databaseResponse = deserialize(DatabaseResponse, data); if (StringUtils.isBlank(databaseResponse.exception)) { resolve(databaseResponse.data); } else { reject(databaseResponse.exception); } }; _this.global.dmlite.DatabaseQueryJsonRequest(browserId, requestId_1, JSON.stringify(sqlTemplate)); _this.mapCallbacks.set(requestId_1, callback); } else { reject("not dmlite"); } }); }; /** * DatabaseQueryJsonsRequest 查询数据返回jsons */ DmLiteMessageService.prototype.DatabaseQueryJsonsRequest = function (browserId, sqlTemplates, timeout) { var _this = this; return new Promise(function (resolve, reject) { if (_this.global.dmlite && _this.global.dmlite.DatabaseQueryJsonsRequest) { var requestId_2 = StringUtils.newGuid(); var timer_2 = window.setTimeout(function () { _this.mapCallbacks.delete(requestId_2); window.clearTimeout(timer_2); reject("timeout"); }, timeout || _this.timeout); var callback = function (data) { window.clearTimeout(timer_2); var databaseResponse = deserialize(DatabaseResponse, data); if (StringUtils.isBlank(databaseResponse.exception)) { resolve(databaseResponse.data); } else { reject(databaseResponse.exception); } }; _this.global.dmlite.DatabaseQueryJsonsRequest(browserId, requestId_2, JSON.stringify(sqlTemplates)); _this.mapCallbacks.set(requestId_2, callback); } else { reject("not dmlite"); } }); }; /** * DatabaseExecuteNonQueryRequest 执行non query */ DmLiteMessageService.prototype.DatabaseExecuteNonQueryRequest = function (browserId, sqlTemplate, timeout) { var _this = this; return new Promise(function (resolve, reject) { if (_this.global.dmlite && _this.global.dmlite.DatabaseExecuteNonQueryRequest) { var requestId_3 = StringUtils.newGuid(); var timer_3 = window.setTimeout(function () { _this.mapCallbacks.delete(requestId_3); window.clearTimeout(timer_3); reject("timeout"); }, timeout || _this.timeout); var callback = function (data) { window.clearTimeout(timer_3); var databaseResponse = deserialize(DatabaseResponse, data); if (StringUtils.isBlank(databaseResponse.exception)) { resolve(databaseResponse.data); } else { reject(databaseResponse.exception); } }; _this.global.dmlite.DatabaseExecuteNonQueryRequest(browserId, requestId_3, JSON.stringify(sqlTemplate)); _this.mapCallbacks.set(requestId_3, callback); } else { reject("not dmlite"); } }); }; /** * DatabaseExecuteScalarRequest 执行scalar */ DmLiteMessageService.prototype.DatabaseExecuteScalarRequest = function (browserId, sqlTemplate, timeout) { var _this = this; return new Promise(function (resolve, reject) { if (_this.global.dmlite && _this.global.dmlite.DatabaseExecuteScalarRequest) { var requestId_4 = StringUtils.newGuid(); var timer_4 = window.setTimeout(function () { _this.mapCallbacks.delete(requestId_4); window.clearTimeout(timer_4); reject("timeout"); }, timeout || _this.timeout); var callback = function (data) { window.clearTimeout(timer_4); var databaseResponse = deserialize(DatabaseResponse, data); if (StringUtils.isBlank(databaseResponse.exception)) { resolve(databaseResponse.data); } else { reject(databaseResponse.exception); } }; _this.global.dmlite.DatabaseExecuteScalarRequest(browserId, requestId_4, JSON.stringify(sqlTemplate)); _this.mapCallbacks.set(requestId_4, callback); } else { reject("not dmlite"); } }); }; /** * DatabaseExecuteDMLRequest 批量执行DML */ DmLiteMessageService.prototype.DatabaseExecuteDMLRequest = function (browserId, sqlTemplateArray, timeout) { var _this = this; return new Promise(function (resolve, reject) { if (_this.global.dmlite && _this.global.dmlite.DatabaseExecuteDMLRequest) { var requestId_5 = StringUtils.newGuid(); var timer_5 = window.setTimeout(function () { _this.mapCallbacks.delete(requestId_5); window.clearTimeout(timer_5); reject("timeout"); }, timeout || _this.timeout); var callback = function (data) { window.clearTimeout(timer_5); var databaseResponse = deserialize(DatabaseResponse, data); if (StringUtils.isBlank(databaseResponse.exception)) { resolve(databaseResponse.data); } else { reject(databaseResponse.exception); } }; _this.global.dmlite.DatabaseExecuteDMLRequest(browserId, requestId_5, JSON.stringify(sqlTemplateArray)); _this.mapCallbacks.set(requestId_5, callback); } else { reject("not dmlite"); } }); }; /** * DatabaseCreateTableTemplateRequest 创建表 */ DmLiteMessageService.prototype.DatabaseCreateTableTemplateRequest = function (browserId, createTableTemplate, timeout) { var _this = this; return new Promise(function (resolve, reject) { if (_this.global.dmlite && _this.global.dmlite.DatabaseCreateTableTemplateRequest) { var requestId_6 = StringUtils.newGuid(); var timer_6 = window.setTimeout(function () { _this.mapCallbacks.delete(requestId_6); window.clearTimeout(timer_6); reject("timeout"); }, timeout || _this.timeout); var callback = function (data) { window.clearTimeout(timer_6); var databaseResponse = deserialize(DatabaseResponse, data); if (StringUtils.isBlank(databaseResponse.exception)) { resolve(databaseResponse.data); } else { reject(databaseResponse.exception); } }; _this.global.dmlite.DatabaseCreateTableTemplateRequest(browserId, requestId_6, JSON.stringify(createTableTemplate)); _this.mapCallbacks.set(requestId_6, callback); } else { reject("not dmlite"); } }); }; /** * DatabaseFillWithJsonUrlRequest 填充表 */ DmLiteMessageService.prototype.DatabaseFillWithJsonRequest = function (browserId, tableInfo, jsonArray, timeout) { var _this = this; return new Promise(function (resolve, reject) { if (_this.global.dmlite && _this.global.dmlite.DatabaseFillWithJsonRequest) { var requestId_7 = StringUtils.newGuid(); var timer_7 = window.setTimeout(function () { _this.mapCallbacks.delete(requestId_7); window.clearTimeout(timer_7); reject("timeout"); }, timeout || _this.timeout); var callback = function (data) { window.clearTimeout(timer_7); var databaseResponse = deserialize(DatabaseResponse, data); if (StringUtils.isBlank(databaseResponse.exception)) { resolve(databaseResponse.data); } else { reject(databaseResponse.exception); } }; _this.global.dmlite.DatabaseFillWithJsonRequest(browserId, requestId_7, JSON.stringify(tableInfo), JSON.stringify(jsonArray)); _this.mapCallbacks.set(requestId_7, callback); } else { reject("not dmlite"); } }); }; /** * DatabaseFillWithJsonUrlRequest 填充表 */ DmLiteMessageService.prototype.DatabaseFillWithJsonUrlEncryptRequest = function (browserId, tableInfo, jsonGzipUrl, timeout) { var _this = this; return new Promise(function (resolve, reject) { if (_this.global.dmlite && _this.global.dmlite.DatabaseFillWithJsonUrlRequest) { var requestId_8 = StringUtils.newGuid(); var timer_8 = window.setTimeout(function () { _this.mapCallbacks.delete(requestId_8); window.clearTimeout(timer_8); reject("timeout"); }, timeout || _this.timeout); var callback = function (data) { window.clearTimeout(timer_8); var databaseResponse = deserialize(DatabaseResponse, data); if (StringUtils.isBlank(databaseResponse.exception)) { resolve(databaseResponse.data); } else { reject(databaseResponse.exception); } }; _this.global.dmlite.DatabaseFillWithJsonUrlRequest(browserId, requestId_8, JSON.stringify(tableInfo), jsonGzipUrl); _this.mapCallbacks.set(requestId_8, callback); } else { reject("not dmlite"); } }); }; DmLiteMessageService.instance = new DmLiteMessageService(topWindow); return DmLiteMessageService; }()); export { DmLiteMessageService }; //# sourceMappingURL=dmLiteMessageService.js.map