From 08d0e25df3f5f57f96caa0535996e9e98fd76b06 Mon Sep 17 00:00:00 2001 From: fxy060608 Date: Mon, 25 Jul 2022 12:09:11 +0800 Subject: [PATCH] wip(uts): compiler --- jest.config.js | 9 +++++- .../uni-uts-vite/__tests__/module.spec.ts | 25 +++++++++++++++- packages/uni-uts-vite/lib/module.js | 14 ++++----- packages/uni-uts-vite/module.ts | 29 +++++++++---------- 4 files changed, 53 insertions(+), 24 deletions(-) diff --git a/jest.config.js b/jest.config.js index e526d5087..5acf49c6d 100644 --- a/jest.config.js +++ b/jest.config.js @@ -12,7 +12,14 @@ module.exports = { __VUE_PROD_DEVTOOLS__: false, uni: { requireNativePlugin(name) { - return {} + return { + invokeSync(args, callback) { + console.log(`invoke`, JSON.stringify(args)) + }, + invokeAsync(args, callback) { + console.log(`invokeAsync`, JSON.stringify(args)) + }, + } }, }, }, diff --git a/packages/uni-uts-vite/__tests__/module.spec.ts b/packages/uni-uts-vite/__tests__/module.spec.ts index 9b2b11cf0..8590aa08a 100644 --- a/packages/uni-uts-vite/__tests__/module.spec.ts +++ b/packages/uni-uts-vite/__tests__/module.spec.ts @@ -1,4 +1,4 @@ -import { normalizeArg } from '../module' +import { normalizeArg, initModule } from '../module' describe('uts-module', () => { test('normalize args', () => { @@ -33,4 +33,27 @@ describe('uts-module', () => { success: 6, }) }) + test(`invoke`, () => { + const wifi = initModule('wifi', { + preparePermission: { async: true }, + }) + /** + * {"module":"wifi","method":"preparePermission","params":[{"name":"foo","age":10,"success":7,"fail":8},9]} + */ + wifi.preparePermission( + { + name: 'foo', + age: 10, + success(res: any) { + console.log('success', res) + }, + fail(res: any) { + console.log('fail', res) + }, + }, + (res: any) => { + console.log('callback', res) + } + ) + }) }) diff --git a/packages/uni-uts-vite/lib/module.js b/packages/uni-uts-vite/lib/module.js index 577be7ba0..e559a3edb 100644 --- a/packages/uni-uts-vite/lib/module.js +++ b/packages/uni-uts-vite/lib/module.js @@ -1,6 +1,6 @@ const moduleName = '__MODULE_NAME__'; const moduleDefine = '__MODULE_DEFINE__'; -var module = initModule(moduleDefine); +var module = initModule(moduleName, moduleDefine); let callbackId = 1; const objectToString = Object.prototype.toString; const toTypeString = (value) => objectToString.call(value); @@ -59,22 +59,22 @@ function moduleGetter(proxy, module, method, defines) { return proxy.invoke(invokeArgs, invokeCallback); }; } -function initModule(moduleDefine) { +function initModule(name, defines, proxyModuleName = 'ProxyModule') { let proxy; const moduleProxy = {}; - for (const methodName in moduleDefine) { - Object.defineProperty(moduleProxy, methodName, { + for (const method in moduleDefine) { + Object.defineProperty(moduleProxy, method, { enumerable: true, configurable: true, get: () => { if (!proxy) { - proxy = uni.requireNativePlugin('proxy-module'); + proxy = uni.requireNativePlugin(proxyModuleName); } - return moduleGetter(proxy, moduleName, methodName, moduleDefine[methodName]); + return moduleGetter(proxy, name, method, defines[method]); }, }); } return moduleProxy; } -export { module as default, normalizeArg }; +export { module as default, initModule, normalizeArg }; diff --git a/packages/uni-uts-vite/module.ts b/packages/uni-uts-vite/module.ts index 1d8119fad..7b632c4a0 100644 --- a/packages/uni-uts-vite/module.ts +++ b/packages/uni-uts-vite/module.ts @@ -13,7 +13,7 @@ interface ModuleMethodDefine { async?: boolean } -export default initModule(moduleDefine) +export default initModule(moduleName, moduleDefine) let callbackId = 1 @@ -79,10 +79,10 @@ function moduleGetter( } return (...args: unknown[]) => { const params = args.map((arg) => normalizeArg(arg)) - const invokeArgs = { module, method, params, async: !!defines.async } + const invokeArgs = { module, method, params } if (defines.async) { return new Promise((resolve, reject) => { - proxy.invoke(invokeArgs, (res: ProxyInvokeResponse) => { + proxy.invokeAsync(invokeArgs, (res: ProxyInvokeResponse) => { if (isProxyInvokeCallbackResponse(res)) { invokeCallback(res) } else { @@ -95,27 +95,26 @@ function moduleGetter( }) }) } - return proxy.invoke(invokeArgs, invokeCallback) + return proxy.invokeSync(invokeArgs, invokeCallback) } } -function initModule(moduleDefine: Record) { +export function initModule( + name: string, + defines: Record, + proxyModuleName = 'ProxyModule' +) { let proxy: any - const moduleProxy = {} - for (const methodName in moduleDefine) { - Object.defineProperty(moduleProxy, methodName, { + const moduleProxy: Record = {} + for (const method in defines) { + Object.defineProperty(moduleProxy, method, { enumerable: true, configurable: true, get: () => { if (!proxy) { - proxy = uni.requireNativePlugin('proxy-module') + proxy = uni.requireNativePlugin(proxyModuleName) } - return moduleGetter( - proxy, - moduleName, - methodName, - moduleDefine[methodName] - ) + return moduleGetter(proxy, name, method, defines[method]) }, }) } -- GitLab