mtl-js-sdk
Version:
273 lines (226 loc) • 8.58 kB
JavaScript
; // 获取当前运行平台
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
var environment = require("./common/environment");
var PLATFORM = environment.platform;
var uuid = require("./common/uuid");
var fileSystem = require("./common/fileSystem");
var syncMethod = require("./common/syncMethod");
var CALLBACK_TYPE_COMMON = 0;
var CALLBACK_TYPE_EXTRA = 1;
var platform = null;
var _callbackCaches = {};
if (PLATFORM == "wx") { platform = require("./platforms/wx/platform"); }
if (PLATFORM == "ios") { platform = require("./platforms/ios/platform"); }
if (PLATFORM == "android") { platform = require("./platforms/android/platform"); }
if (PLATFORM == "QYIos") { platform = require("./platforms/QYIos/platform"); }
if (PLATFORM == "QYAndroid") { platform = require("./platforms/QYAndroid/platform"); }
if (PLATFORM == "h5") { platform = require("./platforms/h5/platform"); }
if (PLATFORM == "upesn") { platform = require("./platforms/upesn/platform"); }
if (!platform) throw new Error("加载" + PLATFORM + "平台失败");
var execProxy = platform.execProxy;
var modulemapper = require("./common/modulemapper");
var instance = {
version: "5.5.11",
platform: PLATFORM,
isReady: false
};
modulemapper.clobbers(instance, "mtl");
modulemapper.mapModules(window);
modulemapper.reset();
function extend(_ref) {
var strategy = _ref.strategy,
module = _ref.module,
symbolPath = _ref.symbolPath,
_ref$proxy = _ref.proxy,
proxy = _ref$proxy === void 0 ? execProxy : _ref$proxy;
if (typeof symbolPath == "string" && symbolPath.length > 0) {
strategy = strategy || "c";
symbolPath = "mtl" + "." + symbolPath;
} else {
if (strategy && strategy != "m") {
console.log('symbolPath 为空时,只允许 strategy 为 "m"');
}
strategy = "m";
symbolPath = "mtl";
}
if (typeof proxy == "function") {
for (var key in module) {
if (module.hasOwnProperty(key)) {
var element = module[key];
if (typeof element == "function") {
module[key] = proxy(element);
}
}
}
}
modulemapper.addEntry(strategy, module, symbolPath);
modulemapper.mapModules(window);
modulemapper.reset();
}
modulemapper.clobbers({
extend: extend
}, "MTL");
modulemapper.mapModules(window);
modulemapper.reset();
console.log("当前运行平台: " + platform.id);
platform.bootstrap(function () {
setTimeout(function () {
console.log("平台初始化成功");
instance.isReady = true;
window.dispatchEvent(new Event("MTLReady"));
}, 0);
});
extend({
module: _objectSpread({
login: environment.login,
NAVITYPE: environment.NAVITYPE,
validateCodeLogin: environment.validateCodeLogin,
autoLogin: environment.autoLogin,
sendValidateCode: environment.sendValidateCode,
changeTenant: environment.changeTenant,
getAppList: environment.getAppList,
getEsnCode: environment.getEsnCode,
getBannerList: environment.getBannerList,
getBaseUserInfo: environment.getBaseUserInfo,
getIndependenceAppList: environment.getIndependenceAppList,
fileSystemInit: fileSystem.fileSystemInit,
fileSystemRender: fileSystem.fileSystemRender,
getConfigSync: syncMethod.getConfigSync,
getStorageSync: syncMethod.getStorageSync
}, platform.exports)
});
var global = require("./platforms/all-platform/global");
var modules = global.modules;
for (var key in modules) {
if (modules.hasOwnProperty(key)) {
var _module = modules[key];
extend({
module: _module,
symbolPath: key,
proxy: null
});
}
} //预读取project.json
if (platform.id === 'QYIos' || platform.id === 'QYAndroid') {
window.mtl.getConfig({
success: function success(res) {
localStorage.setItem('mtlAppConfig', JSON.stringify(res));
},
fail: function fail(err) {
console.log(JSON.stringify(err));
}
});
}
instance.loadPlugin = function (plugin) {
if (typeof plugin === "function") {
extend(plugin());
} else {
extend(plugin);
}
};
/**
* 加载自定义插件
* 在customPlugins目录下找到插件js文件加载到document的head中
*/
instance.loadCustomPlugin = function (plugin) {
var script = document.createElement('script');
script.type = 'text/javascript';
var baseUrl = "./customPlugins/";
var url = baseUrl + plugin + "/pluginJS/index.js";
script.src = url;
document.head.appendChild(script);
};
/**
* 自定义插件时调用原生方法的bridge
*/
instance.bridgeCall = function (pluginName, method, params) {
var param = customPluginProxy(params);
if (mtl.platform === 'ios') {
mtlBridge.call(pluginName, method, param);
} else if (mtl.platform === 'android') {
mtlBridge.call("".concat(pluginName, ".").concat(method), JSON.stringify(param), param.callback);
} else if (mtl.platform === 'QYIos' || mtl.platform === 'QYAndroid') {
params.pluginClassKey = pluginName;
params.pluginMethodName = method;
YYEsnBridge["do"]('customPlugin', params);
}
};
/**
* 自定义插件代理,处理参数中的回调success、fail、complete方法
*/
function customPluginProxy(object) {
var isFunc = typeof object === "function";
var _object = isFunc ? {} : _objectSpread({}, object);
delete _object.success;
delete _object.fail;
delete _object.complete;
_object.callback = "mtl_handleCustomPluginCallback()";
_object.callbackId = setCustomPluginCallback(object);
return _object;
}
/**
*
* 生成callbackId并缓存success、fail、complete回调方法
*/
function setCustomPluginCallback(_ref2) {
var funcName = _ref2.funcName,
success = _ref2.success,
fail = _ref2.fail,
complete = _ref2.complete;
var callbackId = uuid(8);
var callbackInfo = {
type: CALLBACK_TYPE_COMMON,
funcName: funcName ? funcName : '',
funcGroup: {
success: success,
fail: fail,
complete: complete
}
};
_callbackCaches[callbackId] = callbackInfo;
return callbackId;
}
/**
* 挂到到window上的统一回调方法,原生调用该方法后,根据callbackId获取之前缓存的success、fail、complete回调方法
*/
window.mtl_handleCustomPluginCallback = function (result) {
var callbackId = result.callbackId,
keepCallback = result.keepCallback,
code = result.code,
message = result.msg,
data = result.data;
var callbackInfo = _callbackCaches[callbackId];
if (callbackInfo.type === CALLBACK_TYPE_COMMON) {
var _callbackInfo$funcGro = callbackInfo.funcGroup,
success = _callbackInfo$funcGro.success,
fail = _callbackInfo$funcGro.fail,
complete = _callbackInfo$funcGro.complete;
if (code == 0) {
success && success(data);
} else {
fail && fail({
code: code,
message: message
});
}
complete && complete({
code: code,
message: message,
data: data
});
} else if (callbackInfo.type === CALLBACK_TYPE_EXTRA) {
var func = callbackInfo.func;
func && func(data);
}
if (!keepCallback) {
delete _callbackCaches[callbackId];
}
};
var options = { platform: PLATFORM };
extend(require("./plugins/mobile").default(options, { symbolPath: "mobile" }));
extend(require("./plugins/web-debugger").default(options, { symbolPath: "webDebugger" }));
extend(require("./plugins/umshare").default(options, { symbolPath: "umshare" }));
extend(require("./plugins/barcode-scanner").default(options, { symbolPath: "barcodeScanner" }));
module.exports = instance;