module.js 1.2 KB
Newer Older
fxy060608's avatar
fxy060608 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
// @ts-expect-error
const proxy = uni.requireNativePlugin('proxy-module')
// @ts-expect-error
const moduleName = __MODULE_NAME__
// @ts-expect-error
const moduleDefine = __MODULE_DEFINE__
var module = initModule(moduleDefine)
let callbackId = 0
const objectToString = Object.prototype.toString
const toTypeString = (value) => objectToString.call(value)
const isPlainObject = (val) => toTypeString(val) === '[object Object]'
function normalizeArg(arg) {
  if (typeof arg === 'function') {
    return {
      type: 'function',
      value: callbackId++,
    }
  } else if (isPlainObject(arg)) {
    Object.keys(arg).forEach((name) => {
      arg[name] = normalizeArg(arg[name])
    })
  }
  return arg
}
function moduleGetter(module, method) {
  return (...args) => {
    const params = args.map((arg) => normalizeArg(arg))
    proxy.invoke({ module, method, params }, () => {})
  }
}
function initModule(moduleDefine) {
  const moduleProxy = {}
  for (const methodName in moduleDefine) {
    Object.defineProperty(moduleProxy, methodName, {
      enumerable: true,
      configurable: true,
      get: () => moduleGetter(moduleName, methodName),
    })
  }
}

export { module as default, normalizeArg }