dm-web-react
Version:
The DM web client with React.
338 lines • 15 kB
JavaScript
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