UNPKG

mtl-js-sdk

Version:

273 lines (226 loc) 8.58 kB
"use strict"; // 获取当前运行平台 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;