diff --git a/packages/uni-app-uts/lib/automator/apis/App/Socket.uts b/packages/uni-app-uts/lib/automator/apis/App/Socket.uts index ce47b66cc4e746410d04426d0de9342afe99b513..cf8034240dfc3598acb7c8c9a7fda069b562be1b 100644 --- a/packages/uni-app-uts/lib/automator/apis/App/Socket.uts +++ b/packages/uni-app-uts/lib/automator/apis/App/Socket.uts @@ -1,3 +1,5 @@ +import type { Callback } from '../../index.uts' + type SocketInstanceData = { instance: SocketTask, isOpend: boolean, @@ -5,7 +7,7 @@ type SocketInstanceData = { } const socketInstanceMap = new Map() -export const connectSocket = (id: string, url: string, callback: (result: any | null, error: any | null) => void): void => { +export const connectSocket = (id: string, url: string, callback: Callback): void => { const socketTask = uni.connectSocket({ url, success() { @@ -27,10 +29,8 @@ export type FirstSocketTaskEmitterParams = { data?: any | null, code?: number | null, reason?: string | null, - callback: (result: any | null, error: any | null) => void } -export const firstSocketTaskEmitter = (params: FirstSocketTaskEmitterParams): void => { - const callback = params.callback +export const firstSocketTaskEmitter = (params: FirstSocketTaskEmitterParams, callback: Callback): void => { let socketInstanceData: SocketInstanceData | null = null; socketInstanceMap.forEach((value: SocketInstanceData) => { if (socketInstanceData == null) { @@ -40,7 +40,7 @@ export const firstSocketTaskEmitter = (params: FirstSocketTaskEmitterParams): vo if (socketInstanceData == null) { callback(null, { errMsg: "socketTask not exists." }); } else { - const _socketInstanceData = socketInstanceData! + const _socketInstanceData = socketInstanceData as SocketInstanceData const socketTask = _socketInstanceData.instance if (params.method == 'onOpen') { const isOpend = _socketInstanceData.isOpend @@ -102,24 +102,23 @@ export type SocketEmitterParams = { data?: any | null, code?: number | null, reason?: string | null, - callback: (result: any | null, error: any | null) => void } -export const socketEmitter = (params: SocketEmitterParams): void => { +export const socketEmitter = (params: SocketEmitterParams, callback: Callback): void => { if (!socketInstanceMap.has(params.id)) { - params.callback(null, { errMsg: 'socketTask not exists.' }) + callback(null, { errMsg: 'socketTask not exists.' }) } else { const socketInstanceData = socketInstanceMap.get(params.id)! const socketTask = socketInstanceData.instance if (params.method == 'onOpen') { const isOpend = socketInstanceData.isOpend if (isOpend) { - params.callback({ method: 'Socket.onOpen', id: params.id, data: socketInstanceData.openData }, null) + callback({ method: 'Socket.onOpen', id: params.id, data: socketInstanceData.openData }, null) } else { let timer: number | null = null timer = setInterval(() => { if (socketInstanceData.isOpend) { clearInterval(timer!) - params.callback({ method: 'Socket.onOpen', id: params.id, data: socketInstanceData.openData }, null) + callback({ method: 'Socket.onOpen', id: params.id, data: socketInstanceData.openData }, null) } }, 200) setTimeout(() => { @@ -128,24 +127,24 @@ export const socketEmitter = (params: SocketEmitterParams): void => { } } else if (params.method == 'onMessage') { socketTask.onMessage((data: any) => { - params.callback({ method: 'Socket.onMessage', id: params.id, data }, null) + callback({ method: 'Socket.onMessage', id: params.id, data }, null) }) } else if (params.method == 'onClose') { socketTask.onClose((data: any) => { - params.callback({ method: 'Socket.onClose', id: params.id, data }, null) + callback({ method: 'Socket.onClose', id: params.id, data }, null) }) } else if (params.method == 'onError') { socketTask.onError((data: any) => { - params.callback({ method: 'Socket.onError', id: params.id, data }, null) + callback({ method: 'Socket.onError', id: params.id, data }, null) }) } else if (params.method == 'send') { socketTask.send({ data: params.data!, success(result: any) { - params.callback(result, null) + callback(result, null) }, fail(error: any) { - params.callback(null, error) + callback(null, error) } } as SendSocketMessageOptions) } else if (params.method == 'close') { @@ -153,11 +152,11 @@ export const socketEmitter = (params: SocketEmitterParams): void => { code: params.code, reason: params.reason, success(result: any) { - params.callback(result, null) + callback(result, null) socketInstanceMap.delete(params.id); }, fail(error: any) { - params.callback(null, error) + callback(null, error) } } as CloseSocketOptions) } diff --git a/packages/uni-app-uts/lib/automator/apis/App/index.uts b/packages/uni-app-uts/lib/automator/apis/App/index.uts index 3cf17ed1fa51a46fc99cb24f8247d86c0731ae83..675b2b3af2412e6932aa0e6147251d0f0c2c0540 100644 --- a/packages/uni-app-uts/lib/automator/apis/App/index.uts +++ b/packages/uni-app-uts/lib/automator/apis/App/index.uts @@ -1,14 +1,14 @@ -import { JSONArray, JSONObject } from 'com.alibaba.fastjson' +import type { Callback } from '../../index.uts' +import { JSONArray } from 'com.alibaba.fastjson' import { parsePage } from '../util.uts' import { send } from '../../index.uts' import { connectSocket, FirstSocketTaskEmitterParams, firstSocketTaskEmitter } from './Socket.uts' -export type GetPageStackParams = { - callback: (result: any | null, error: any | null) => void -} -export const getPageStack = (params: GetPageStackParams): void => { - params.callback({ +type MapFromJSONArrayObjectItem = io.dcloud.uts.gson.internal.LinkedTreeMap + +export const getPageStack = (callback: Callback): void => { + callback({ pageStack: getCurrentPages().map((page: BasePage): UTSJSONObject => { return parsePage(page) }) @@ -32,16 +32,12 @@ export const getCurrentPage = (params: GetCurrentPageParams): void => { export type CallUniMethodParams = { method: string args: JSONArray - callback: (result: any | null, error: any | null) => void } -export const callUniMethod = (params: CallUniMethodParams): void => { +export const callUniMethod = (params: CallUniMethodParams, callback: Callback): void => { const method = params.method const args = params.args - const callback = params.callback - let animationType: string = 'pop-in' - let animationDuration: number = 300 const success = (result: any) => { const timeout = method == 'pageScrollTo' ? 350 : 0 setTimeout(() => { @@ -54,16 +50,10 @@ export const callUniMethod = (params: CallUniMethodParams): void => { } switch (method) { case 'navigateTo': - if ((args[0] as JSONObject)['animationType'] != null) { - animationType = (args[0] as JSONObject)['animationType'] as string - } - if ((args[0] as JSONObject)['animationDuration'] != null) { - animationDuration = (args[0] as JSONObject)['animationDuration'] as number - } uni.navigateTo({ - url: (args[0] as JSONObject)['url'] as string, - animationType, - animationDuration, + url: (args[0] as MapFromJSONArrayObjectItem).get('url') as string, + animationType: (args[0] as MapFromJSONArrayObjectItem).get('animationType') != null ? (args[0] as MapFromJSONArrayObjectItem).get('animationType') as string : 'pop-in', + animationDuration: (args[0] as MapFromJSONArrayObjectItem).get('animationDuration') != null ? (args[0] as MapFromJSONArrayObjectItem).get('animationDuration') as number : 300, success, fail(error) { error.errMsg = error.errMsg.replace(`${method}: fail `, '') @@ -74,7 +64,7 @@ export const callUniMethod = (params: CallUniMethodParams): void => { case 'redirectTo': uni.redirectTo({ - url: (args[0] as JSONObject)['url'] as string, + url: (args[0] as MapFromJSONArrayObjectItem).get('url') as string, success, fail(error) { error.errMsg = error.errMsg.replace(`${method}: fail `, '') @@ -85,7 +75,7 @@ export const callUniMethod = (params: CallUniMethodParams): void => { case 'reLaunch': uni.reLaunch({ - url: (args[0] as JSONObject)['url'] as string, + url: (args[0] as MapFromJSONArrayObjectItem).get('url') as string, success, fail(error) { error.errMsg = error.errMsg.replace(`${method}: fail `, '') @@ -95,16 +85,9 @@ export const callUniMethod = (params: CallUniMethodParams): void => { break case 'navigateBack': - animationType = 'pop-out' - if ((args[0] as JSONObject)['animationType'] != null) { - animationType = (args[0] as JSONObject)['animationType'] as string - } - if ((args[0] as JSONObject)['animationDuration'] != null) { - animationDuration = (args[0] as JSONObject)['animationDuration'] as number - } uni.navigateBack({ - animationType, - animationDuration, + animationType: (args[0] as MapFromJSONArrayObjectItem).get('animationType') != null ? (args[0] as MapFromJSONArrayObjectItem).get('animationType') as string : 'pop-out', + animationDuration: (args[0] as MapFromJSONArrayObjectItem).get('animationDuration') != null ? (args[0] as MapFromJSONArrayObjectItem).get('animationDuration') as number : 300, success, fail(error) { error.errMsg = error.errMsg.replace(`${method}: fail `, '') @@ -114,7 +97,7 @@ export const callUniMethod = (params: CallUniMethodParams): void => { break case 'switchTab': uni.switchTab({ - url: (args[0] as JSONObject)['url'] as string, + url: (args[0] as MapFromJSONArrayObjectItem).get('url') as string, success, fail(error) { error.errMsg = error.errMsg.replace(`${method}: fail `, '') @@ -124,7 +107,7 @@ export const callUniMethod = (params: CallUniMethodParams): void => { break case 'getStorage': uni.getStorage({ - key: (args[0] as JSONObject)['key'] as string, + key: (args[0] as MapFromJSONArrayObjectItem).get('key') as string, success, fail(error) { error.errMsg = error.errMsg.replace(`${method}: fail `, '') @@ -134,8 +117,8 @@ export const callUniMethod = (params: CallUniMethodParams): void => { break case 'setStorage': uni.setStorage({ - key: (args[0] as JSONObject)['key'] as string, - data: (args[0] as JSONObject)['data'] as any, + key: (args[0] as MapFromJSONArrayObjectItem).get('key') as string, + data: (args[0] as MapFromJSONArrayObjectItem).get('data') as any, success, fail(error) { error.errMsg = error.errMsg.replace(`${method}: fail `, '') @@ -163,7 +146,7 @@ export const callUniMethod = (params: CallUniMethodParams): void => { break case 'removeStorage': uni.removeStorage({ - key: (args[0] as JSONObject)['key'] as string, + key: (args[0] as MapFromJSONArrayObjectItem).get('key') as string, success, fail(error) { error.errMsg = error.errMsg.replace(`${method}: fail `, '') @@ -187,18 +170,13 @@ export const callUniMethod = (params: CallUniMethodParams): void => { callback({ result: uni.clearStorageSync() }, null) break case 'showToast': - const icon = (args[0] as JSONObject)['icon'] != null ? (args[0] as JSONObject)['icon'] as string : 'success' - const image = (args[0] as JSONObject)['image'] != null && (args[0] as JSONObject)['image'] != '' ? (args[0] as JSONObject)['image'] as string : null - const toastMask = (args[0] as JSONObject)['mask'] != null ? (args[0] as JSONObject)['mask'] as boolean : false - const duration: number = (args[0] as JSONObject)['duration'] != null ? (args[0] as JSONObject)['duration'] as number : 1500 - const position = (args[0] as JSONObject)['position'] != null ? (args[0] as JSONObject)['position'] as string : null uni.showToast({ - title: (args[0] as JSONObject)['title'] as string, - icon, - image, - mask: toastMask, - duration, - position, + title: (args[0] as MapFromJSONArrayObjectItem).get('title') as string, + icon: (args[0] as MapFromJSONArrayObjectItem).get('icon') != null ? (args[0] as MapFromJSONArrayObjectItem).get('icon') as string : 'success', + image: (args[0] as MapFromJSONArrayObjectItem).get('image') != null && (args[0] as MapFromJSONArrayObjectItem).get('image') != '' ? (args[0] as MapFromJSONArrayObjectItem).get('image') as string : null, + mask: (args[0] as MapFromJSONArrayObjectItem).get('mask') != null ? (args[0] as MapFromJSONArrayObjectItem).get('mask') as boolean : false, + duration: (args[0] as MapFromJSONArrayObjectItem).get('duration') != null ? (args[0] as MapFromJSONArrayObjectItem).get('duration') as number : 1500, + position: (args[0] as MapFromJSONArrayObjectItem).get('position') != null ? (args[0] as MapFromJSONArrayObjectItem).get('position') as string : null, success, fail(error) { error.errMsg = error.errMsg.replace(`${method}: fail `, '') @@ -210,10 +188,9 @@ export const callUniMethod = (params: CallUniMethodParams): void => { uni.hideToast() break case 'showLoading': - const loadingMask = (args[0] as JSONObject)['mask'] != null ? (args[0] as JSONObject)['mask'] as boolean : false uni.showLoading({ - title: (args[0] as JSONObject)['title'] as string, - mask: loadingMask, + title: (args[0] as MapFromJSONArrayObjectItem).get('title') as string, + mask: (args[0] as MapFromJSONArrayObjectItem).get('mask') != null ? (args[0] as MapFromJSONArrayObjectItem).get('mask') as boolean : false, success, fail(error) { error.errMsg = error.errMsg.replace(`${method}: fail `, '') @@ -225,25 +202,16 @@ export const callUniMethod = (params: CallUniMethodParams): void => { uni.hideLoading() break case 'showModal': - const showModalTitle = (args[0] as JSONObject)['title'] != null ? (args[0] as JSONObject)['title'] as string : null - const content = (args[0] as JSONObject)['content'] != null ? (args[0] as JSONObject)['content'] as string : null - const showCancel = (args[0] as JSONObject)['showCancel'] != null ? (args[0] as JSONObject)['showCancel'] as boolean : true - const cancelText = (args[0] as JSONObject)['cancelText'] != null ? (args[0] as JSONObject)['cancelText'] as string : null - const cancelColor: string | null = (args[0] as JSONObject)['cancelColor'] != null ? (args[0] as JSONObject)['cancelColor'] as string : null - const confirmText = (args[0] as JSONObject)['confirmText'] != null ? (args[0] as JSONObject)['confirmText'] as string : null - const confirmColor = (args[0] as JSONObject)['confirmColor'] != null ? (args[0] as JSONObject)['confirmColor'] as string : null - const editable = (args[0] as JSONObject)['editable'] != null ? (args[0] as JSONObject)['editable'] as boolean : false - const placeholderText = (args[0] as JSONObject)['placeholderText'] != null ? (args[0] as JSONObject)['placeholderText'] as string : null uni.showModal({ - title: showModalTitle, - content, - showCancel, - cancelText, - cancelColor, - confirmText, - confirmColor, - editable, - placeholderText, + title: (args[0] as MapFromJSONArrayObjectItem).get('title') != null ? (args[0] as MapFromJSONArrayObjectItem).get('title') as string : null, + content: (args[0] as MapFromJSONArrayObjectItem).get('content') != null ? (args[0] as MapFromJSONArrayObjectItem).get('content') as string : null, + showCancel: (args[0] as MapFromJSONArrayObjectItem).get('showCancel') != null ? (args[0] as MapFromJSONArrayObjectItem).get('showCancel') as boolean : true, + cancelText: (args[0] as MapFromJSONArrayObjectItem).get('cancelText') != null ? (args[0] as MapFromJSONArrayObjectItem).get('cancelText') as string : null, + cancelColor: (args[0] as MapFromJSONArrayObjectItem).get('cancelColor') != null ? (args[0] as MapFromJSONArrayObjectItem).get('cancelColor') as string : null, + confirmText: (args[0] as MapFromJSONArrayObjectItem).get('confirmText') != null ? (args[0] as MapFromJSONArrayObjectItem).get('confirmText') as string : null, + confirmColor: (args[0] as MapFromJSONArrayObjectItem).get('confirmColor') != null ? (args[0] as MapFromJSONArrayObjectItem).get('confirmColor') as string : null, + editable: (args[0] as MapFromJSONArrayObjectItem).get('editable') != null ? (args[0] as MapFromJSONArrayObjectItem).get('editable') as boolean : false, + placeholderText: (args[0] as MapFromJSONArrayObjectItem).get('placeholderText') != null ? (args[0] as MapFromJSONArrayObjectItem).get('placeholderText') as string : null, success, fail(error) { error.errMsg = error.errMsg.replace(`${method}: fail `, '') @@ -252,13 +220,10 @@ export const callUniMethod = (params: CallUniMethodParams): void => { }) break case 'showActionSheet': - const showActionSheetTitle = (args[0] as JSONObject)['title'] != null ? (args[0] as JSONObject)['title'] as string : null - const itemList = UTSArray.fromNative(((args[0] as JSONObject)['itemList'] as JSONArray)) as string[] - const itemColor = (args[0] as JSONObject)['itemColor'] != null ? (args[0] as JSONObject)['itemColor'] as string : null uni.showActionSheet({ - title: showActionSheetTitle, - itemList, - itemColor, + title: (args[0] as MapFromJSONArrayObjectItem).get('title') != null ? (args[0] as MapFromJSONArrayObjectItem).get('title') as string : null, + itemList: UTSArray.fromNative(((args[0] as MapFromJSONArrayObjectItem).get('itemList') as JSONArray)) as string[], + itemColor: (args[0] as MapFromJSONArrayObjectItem).get('itemColor') != null ? (args[0] as MapFromJSONArrayObjectItem).get('itemColor') as string : null, success, fail(error) { error.errMsg = error.errMsg.replace(`${method}: fail `, '') @@ -267,28 +232,28 @@ export const callUniMethod = (params: CallUniMethodParams): void => { }) break case 'connectSocket': - const id = (args[0] as JSONObject)['id'] as string - const url = (args[0] as JSONObject)['url'] as string + const id = (args[0] as MapFromJSONArrayObjectItem).get('id') as string + const url = (args[0] as MapFromJSONArrayObjectItem).get('url') as string connectSocket(id, url, callback) break case 'onSocketOpen': - firstSocketTaskEmitter({ method: 'onOpen', callback: onApiCallback } as FirstSocketTaskEmitterParams) + firstSocketTaskEmitter({ method: 'onOpen' } as FirstSocketTaskEmitterParams, onApiCallback) break case 'onSocketMessage': - firstSocketTaskEmitter({ method: 'onMessage', callback: onApiCallback } as FirstSocketTaskEmitterParams) + firstSocketTaskEmitter({ method: 'onMessage' } as FirstSocketTaskEmitterParams, onApiCallback) break case 'onSocketError': - firstSocketTaskEmitter({ method: 'onError', callback: onApiCallback } as FirstSocketTaskEmitterParams) + firstSocketTaskEmitter({ method: 'onError' } as FirstSocketTaskEmitterParams, onApiCallback) break case 'onSocketClose': - firstSocketTaskEmitter({ method: 'onClose', callback: onApiCallback } as FirstSocketTaskEmitterParams) + firstSocketTaskEmitter({ method: 'onClose' } as FirstSocketTaskEmitterParams, onApiCallback) break case 'sendSocketMessage': - firstSocketTaskEmitter({ method: 'send', data: (args[0] as JSONObject)['data'], callback } as FirstSocketTaskEmitterParams) + firstSocketTaskEmitter({ method: 'send', data: (args[0] as MapFromJSONArrayObjectItem).get('data') } as FirstSocketTaskEmitterParams, callback) break case 'closeSocket': - firstSocketTaskEmitter({ method: 'close', code: (args[0] as JSONObject)['code'] as number, reason: (args[0] as JSONObject)['reason'] as string, callback } as FirstSocketTaskEmitterParams) + firstSocketTaskEmitter({ method: 'close', code: (args[0] as MapFromJSONArrayObjectItem).get('code') as number, reason: (args[0] as MapFromJSONArrayObjectItem).get('reason') as string } as FirstSocketTaskEmitterParams, callback) break case 'getSystemInfo': uni.getSystemInfo({ @@ -325,8 +290,8 @@ export const callUniMethod = (params: CallUniMethodParams): void => { break case 'pageScrollTo': uni.pageScrollTo({ - scrollTop: (args[0] as JSONObject)['scrollTop'] as number, - duration: (args[0] as JSONObject)['duration'] as number, + scrollTop: (args[0] as MapFromJSONArrayObjectItem).get('scrollTop') as number, + duration: (args[0] as MapFromJSONArrayObjectItem).get('duration') as number, success, fail(error) { error.errMsg = error.errMsg.replace(`${method}: fail `, '') @@ -344,10 +309,8 @@ export type CaptureScreenshotParams = { id?: string | null, fullPage: boolean, path: string - callback: (result: any | null, error: any | null) => void } -export const captureScreenshot = (params: CaptureScreenshotParams): void => { - const callback = params.callback +export const captureScreenshot = (params: CaptureScreenshotParams, callback: Callback): void => { const currentPage = _getCurrentPage() if (currentPage != null) { currentPage.$viewToTempFilePath({ diff --git a/packages/uni-app-uts/lib/automator/apis/Element.uts b/packages/uni-app-uts/lib/automator/apis/Element.uts index eaec7d893eafc4ba923191f8165e05173ae66add..487eb1fb49615bb7e277c0f291740f4641fe7b19 100644 --- a/packages/uni-app-uts/lib/automator/apis/Element.uts +++ b/packages/uni-app-uts/lib/automator/apis/Element.uts @@ -1,3 +1,4 @@ +import type { Callback } from '../index.uts' import { getElementById, getElementByNodeIdOrElementId, getComponentVmBySelector, getValidNodes, getComponentVmByNodeId, componentGetData, componentSetData, getElementByIdOrNodeId } from './util.uts' import { JSONObject } from 'com.alibaba.fastjson' import { getChildrenText, toCamelCase } from './util.uts' @@ -7,38 +8,37 @@ export type GetElementParams = { nodeId?: number | null elementId?: string | null selector: string - callback: (result: any | null, error: any | null) => void } -export const getElement = (params: GetElementParams): void => { +export const getElement = (params: GetElementParams, callback: Callback): void => { // TODO: support get component by class or id selector - const element = getElementByNodeIdOrElementId(params.pageId, params.nodeId, params.elementId, params.callback) + const element = getElementByNodeIdOrElementId(params.pageId, params.nodeId, params.elementId, callback) if (element != null) { let selector = params.selector if (selector.startsWith('uni-')) { selector = selector.replace('uni-', '') - const component = getComponentVmBySelector(params.pageId, selector, params.callback) + const component = getComponentVmBySelector(params.pageId, selector, callback) const result = { nodeId: component != null ? component.$.uid : null, tagName: component != null ? selector : null, elementId: component != null ? `${Date.now()}` : null } - params.callback(result, null) + callback(result, null) return } const list: UTSJSONObject[] = [] getValidNodes(element, selector, list) const result = list.length > 0 ? list[0] : null - params.callback(result, null) + callback(result, null) } } -export const getElements = (params: GetElementParams): void => { - const element = getElementByNodeIdOrElementId(params.pageId, params.nodeId, params.elementId, params.callback) +export const getElements = (params: GetElementParams, callback: Callback): void => { + const element = getElementByNodeIdOrElementId(params.pageId, params.nodeId, params.elementId, callback) if (element != null) { const list: UTSJSONObject[] = [] getValidNodes(element, params.selector, list, true) - params.callback({ elements: list }, null) + callback({ elements: list }, null) } } @@ -47,11 +47,10 @@ export type GetDOMPropertiesParams = { elementId?: string | null nodeId?: number | null names: string[] - callback: (result: any | null, error: any | null) => void } -export const getDOMProperties = (params: GetDOMPropertiesParams): void => { - const dom = getElementByIdOrNodeId(params.pageId, params.elementId, params.nodeId, params.callback) +export const getDOMProperties = (params: GetDOMPropertiesParams, callback: Callback): void => { + const dom = getElementByIdOrNodeId(params.pageId, params.elementId, params.nodeId, callback) if (dom != null) { const properties = params.names.map((name: string): any | null => { if (name == 'innerText') { @@ -72,7 +71,7 @@ export const getDOMProperties = (params: GetDOMPropertiesParams): void => { } return `Element.getDOMProperties not support ${name}` }) - params.callback({ properties }, null) + callback({ properties }, null) } } @@ -81,21 +80,20 @@ export type GetPropertiesParams = { elementId?: string | null nodeId?: number | null names: string[] - callback: (result: any | null, error: any | null) => void } -export const getProperties = (params: GetPropertiesParams): void => { - const dom = getElementByIdOrNodeId(params.pageId, params.elementId, params.nodeId, params.callback) +export const getProperties = (params: GetPropertiesParams, callback: Callback): void => { + const dom = getElementByIdOrNodeId(params.pageId, params.elementId, params.nodeId, callback) let component: ComponentPublicInstance | null = null if (params.nodeId != null) { - component = getComponentVmByNodeId(params.pageId, params.nodeId!, params.callback) + component = getComponentVmByNodeId(params.pageId, params.nodeId!, callback) } if (dom != null) { const properties = params.names.map((name: string): any | null => { const attribute = dom.getAttribute(name) != null ? dom.getAttribute(name) : component != null ? component.$props[toCamelCase(name)] : null return attribute }) - params.callback({ properties }, null) + callback({ properties }, null) } } @@ -104,11 +102,10 @@ export type GetAttributesParams = { elementId?: string | null nodeId?: number | null names: string[] - callback: (result: any | null, error: any | null) => void } -export const getAttributes = (params: GetAttributesParams): void => { - const dom = getElementByIdOrNodeId(params.pageId, params.elementId, params.nodeId, params.callback) +export const getAttributes = (params: GetAttributesParams, callback: Callback): void => { + const dom = getElementByIdOrNodeId(params.pageId, params.elementId, params.nodeId, callback) if (dom != null) { const attributes = params.names.map((name: string): any | null => { if (name == 'class') { @@ -116,7 +113,7 @@ export const getAttributes = (params: GetAttributesParams): void => { } return dom.getAttribute(name) }) - params.callback({ attributes }, null) + callback({ attributes }, null) } } @@ -125,18 +122,17 @@ export type CallFunctionParams = { elementId: string functionName: string args: any[] - callback: (result: any | null, error: any | null) => void } -export const callFunction = (params: CallFunctionParams): void => { - const element = getElementById(params.pageId, params.elementId, params.callback) +export const callFunction = (params: CallFunctionParams, callback: Callback): void => { + const element = getElementById(params.pageId, params.elementId, callback) if (element != null) { switch (params.functionName) { case 'input.input': element.dispatchEvent("input", InputEvent("input", InputEventDetail(params.args[0] as string, 0, 0))) break } - params.callback({ result: `Element.callFunction success` }, null) + callback({ result: `Element.callFunction success` }, null) } } @@ -144,16 +140,15 @@ export type TapParams = { pageId: string elementId?: string | null nodeId?: number | null - callback: (result: any | null, error: any | null) => void } -export const tap = (params: TapParams): void => { - const dom = getElementByIdOrNodeId(params.pageId, params.elementId, params.nodeId, params.callback) +export const tap = (params: TapParams, callback: Callback): void => { + const dom = getElementByIdOrNodeId(params.pageId, params.elementId, params.nodeId, callback) if (dom != null) { const x: number = 0 const y: number = 0 dom.dispatchEvent("click", MouseEvent("click", x.toFloat(), y.toFloat())) - params.callback({ result: `Element.tap success` }, null) + callback({ result: `Element.tap success` }, null) } } @@ -162,42 +157,39 @@ export type CallMethodParams = { nodeId: number method: string args: any[] - callback: (result: any | null, error: any | null) => void } -export const callMethod = (params: CallMethodParams): void => { - const component = getComponentVmByNodeId(params.pageId, params.nodeId, params.callback) +export const callMethod = (params: CallMethodParams, callback: Callback): void => { + const component = getComponentVmByNodeId(params.pageId, params.nodeId, callback) if (component != null) { const result = params.args.length > 0 ? component.$callMethod(params.method, params.args[0]) : component.$callMethod(params.method) - params.callback({ result }, null) + callback({ result }, null) } } export type GetDataParams = { pageId: string nodeId: number - path: string - callback: (result: any | null, error: any | null) => void + path?: string | null } -export const getData = (params: GetDataParams): void => { - const component = getComponentVmByNodeId(params.pageId, params.nodeId, params.callback) +export const getData = (params: GetDataParams, callback: Callback): void => { + const component = getComponentVmByNodeId(params.pageId, params.nodeId, callback) if (component != null) { - const data = componentGetData(component, params.path) - params.callback({ data }, null) + const data = componentGetData(component, params.path != null ? params.path : '') + callback({ data }, null) } } export type SetDataParams = { pageId: string nodeId: number - data: UTSJSONObject - callback: (result: any | null, error: any | null) => void + data: Map } -export const setData = (params: SetDataParams): void => { - const component = getComponentVmByNodeId(params.pageId, params.nodeId, params.callback) +export const setData = (params: SetDataParams, callback: Callback): void => { + const component = getComponentVmByNodeId(params.pageId, params.nodeId, callback) if (component != null) { componentSetData(component, params.data) - params.callback({ result: { errMsg: 'Page.setData: ok.' } }, null) + callback({ result: { errMsg: 'Page.setData: ok.' } }, null) } } @@ -205,13 +197,12 @@ export type GetOffsetParams = { pageId: string elementId?: string | null nodeId?: number | null - callback: (result: any | null, error: any | null) => void } -export const getOffset = (params: GetOffsetParams): void => { - const dom = getElementByIdOrNodeId(params.pageId, params.elementId, params.nodeId, params.callback) +export const getOffset = (params: GetOffsetParams, callback: Callback): void => { + const dom = getElementByIdOrNodeId(params.pageId, params.elementId, params.nodeId, callback) if (dom != null) { - params.callback({ left: dom.offsetLeft, top: dom.offsetTop }, null) + callback({ left: dom.offsetLeft, top: dom.offsetTop }, null) } } @@ -219,16 +210,15 @@ export type LongpressParams = { pageId: string elementId?: string | null nodeId?: number | null - callback: (result: any | null, error: any | null) => void } -export const longpress = (params: LongpressParams): void => { - const dom = getElementByIdOrNodeId(params.pageId, params.elementId, params.nodeId, params.callback) +export const longpress = (params: LongpressParams, callback: Callback): void => { + const dom = getElementByIdOrNodeId(params.pageId, params.elementId, params.nodeId, callback) if (dom != null) { const x: number = 0 const y: number = 0 dom.dispatchEvent("longpress", MouseEvent("longpress", x.toFloat(), y.toFloat())) - params.callback({ result: `Element.longpress success` }, null) + callback({ result: `Element.longpress success` }, null) } } @@ -238,27 +228,32 @@ export type HandleTouchEventParams = { nodeId?: number | null eventName: string touches: any[], - changedTouches: any[], - callback: (result: any | null, error: any | null) => void + changedTouches: any[] } -export const handleTouchEvent = (params: HandleTouchEventParams): void => { - const dom = getElementByIdOrNodeId(params.pageId, params.elementId, params.nodeId, params.callback) +export const handleTouchEvent = (params: HandleTouchEventParams, callback: Callback): void => { + const dom = getElementByIdOrNodeId(params.pageId, params.elementId, params.nodeId, callback) if (dom != null) { const touches = getTouches(params.touches) const changedTouches = getTouches(params.changedTouches) dom.dispatchEvent(params.eventName, TouchEvent(null, params.eventName, touches, changedTouches)) - params.callback({ result: `Element.${params.eventName} success` }, null) + callback({ result: `Element.${params.eventName} success` }, null) } } +type TypeTouch = { + identifier: number, + pageX: number, + pageY: number +} + function getTouches(touches: any[]): Touch[] { return touches.map((touch): Touch => { - const touchObj = JSON.parse((touch as JSONObject).toString())! + const touchObj = JSON.parse(JSON.stringify(touch)) const result = Touch() - result.identifier = (touchObj['identifier'] as number).toFloat() - result.pageX = (touchObj['pageX'] as number).toFloat() - result.pageY = (touchObj['pageY'] as number).toFloat() + result.identifier = touchObj.identifier.toFloat() + result.pageX = touchObj.pageX.toFloat() + result.pageY = touchObj.pageY.toFloat() return result }) } @@ -268,15 +263,14 @@ export type GetStylesParams = { elementId?: string | null nodeId?: number | null names: string[] - callback: (result: any | null, error: any | null) => void } -export const getStyles = (params: GetStylesParams): void => { - const dom = getElementByIdOrNodeId(params.pageId, params.elementId, params.nodeId, params.callback) +export const getStyles = (params: GetStylesParams, callback: Callback): void => { + const dom = getElementByIdOrNodeId(params.pageId, params.elementId, params.nodeId, callback) if (dom != null) { const styles = params.names.map((name: string): any | null => { return dom.style.getPropertyValue(name) }) - params.callback({ styles }, null) + callback({ styles }, null) } } diff --git a/packages/uni-app-uts/lib/automator/apis/Page.uts b/packages/uni-app-uts/lib/automator/apis/Page.uts index 401d827575c90612e03ca6a4c067661e34637e91..8b9ddf5431d3291c5bcb6a6318ea38c955b4c39d 100644 --- a/packages/uni-app-uts/lib/automator/apis/Page.uts +++ b/packages/uni-app-uts/lib/automator/apis/Page.uts @@ -1,12 +1,11 @@ +import type { Callback } from '../index.uts' import { pageGetData, pageSetData, getPageVm, getValidComponentsOrNodes } from './util.uts' export type GetDataParams = { pageId: string path: string - callback: (result: any | null, error: any | null) => void } -export const getData = (params: GetDataParams): void => { - const callback = params.callback +export const getData = (params: GetDataParams, callback: Callback): void => { const page = getPageVm(params.pageId) if (page == null) { callback(null, { errMsg: 'Page.getData:fail, Page not found.' }) @@ -18,12 +17,10 @@ export const getData = (params: GetDataParams): void => { export type SetDataParams = { pageId: string - data: UTSJSONObject - callback: (result: any | null, error: any | null) => void + data: Map } -export const setData = (params: SetDataParams): void => { +export const setData = (params: SetDataParams, callback: Callback): void => { const pageId = params.pageId - const callback = params.callback const page = getPageVm(pageId) if (page != null) { pageSetData(page, params.data) @@ -36,31 +33,29 @@ export type CallMethodParams = { pageId: string method: string args: any[] - callback: (result: any | null, error: any | null) => void } -export const callMethod = (params: CallMethodParams): void => { +export const callMethod = (params: CallMethodParams, callback: Callback): void => { const page = getPageVm(params.pageId) if (page == null) { - params.callback(null, { errMsg: `Page[${params.pageId}] not exists` }) + callback(null, { errMsg: `Page[${params.pageId}] not exists` }) } else if (findVueMethod(page.$.type.type, params.method, page) == null) { - params.callback(null, { errMsg: `Page.${params.method} not exists` }) + callback(null, { errMsg: `Page.${params.method} not exists` }) } else { const result = params.args.length > 0 ? page.$callMethod(params.method, params.args[0]) : page.$callMethod(params.method) - params.callback({ result }, null) + callback({ result }, null) } } export type GetElementParams = { pageId: string selector: string - callback: (result: any | null, error: any | null) => void } -export const getElement = (params: GetElementParams): void => { +export const getElement = (params: GetElementParams, callback: Callback): void => { const page = getPageVm(params.pageId) if (page == null) { - params.callback(null, { errMsg: `Page[${params.pageId}] not exists` }) + callback(null, { errMsg: `Page[${params.pageId}] not exists` }) } else { let selector = params.selector if (selector.startsWith('uni-')) { @@ -69,14 +64,14 @@ export const getElement = (params: GetElementParams): void => { const list: UTSJSONObject[] = [] getValidComponentsOrNodes(page.$.subTree, selector, list) const result = list.length > 0 ? list[0] : null - params.callback(result, null) + callback(result, null) } } -export const getElements = (params: GetElementParams): void => { +export const getElements = (params: GetElementParams, callback: Callback): void => { const page = getPageVm(params.pageId) if (page == null) { - params.callback(null, { errMsg: `Page[${params.pageId}] not exists` }) + callback(null, { errMsg: `Page[${params.pageId}] not exists` }) } else { const elements = page.$querySelectorAll(params.selector) const result = [] as UTSJSONObject[] @@ -86,17 +81,15 @@ export const getElements = (params: GetElementParams): void => { tagName: element.tagName }) }) - params.callback({ elements: result }, null) + callback({ elements: result }, null) } } export type GetWindowPropertiesParams = { pageId: string, - names: string[], - callback: (result: any | null, error: any | null) => void + names: string[] } -export const getWindowProperties = (params: GetWindowPropertiesParams): void => { - const callback = params.callback +export const getWindowProperties = (params: GetWindowPropertiesParams, callback: Callback): void => { const page = getPageVm(params.pageId) if (page == null) { callback(null, { errMsg: 'Page.getData:fail, Page not found.' }) diff --git a/packages/uni-app-uts/lib/automator/apis/util.uts b/packages/uni-app-uts/lib/automator/apis/util.uts index 04f845f49af33d3a1a639b39f6d92201492b87ce..e203230dfeae9df1e9897c66a609f29d4d82590e 100644 --- a/packages/uni-app-uts/lib/automator/apis/util.uts +++ b/packages/uni-app-uts/lib/automator/apis/util.uts @@ -39,9 +39,8 @@ export function pageGetData( return data } -export function pageSetData(vm: BasePage, data: UTSJSONObject): void { - const _data = data.toMap() - _data.forEach((value: any | null, key: string) => { +export function pageSetData(vm: BasePage, data: Map): void { + data.forEach((value: any | null, key: string) => { vm.$data.set(key, value) }) } @@ -76,7 +75,7 @@ export function getComponentVmByNodeId(pageId: string, nodeId: number, callback: } let component: ComponentPublicInstance | null = null function getComponentChild(parent: ComponentPublicInstance) { - if (parent.$.uid.toInt() == nodeId) { + if (parent.$.uid.toInt() == nodeId.toInt()) { component = parent return } @@ -245,9 +244,8 @@ export function componentGetData( return data } -export function componentSetData(vm: ComponentPublicInstance, data: UTSJSONObject): void { - const _data = data.toMap() - _data.forEach((value: any | null, key: string) => { +export function componentSetData(vm: ComponentPublicInstance, data: Map): void { + data.forEach((value: any | null, key: string) => { vm.$data.set(key, value) }) } diff --git a/packages/uni-app-uts/lib/automator/index.uts b/packages/uni-app-uts/lib/automator/index.uts index c1b17963f7df5ed17a64cf85785d099de316b779..261c34233f8d3b0c627b05b65da785601d0a89c4 100644 --- a/packages/uni-app-uts/lib/automator/index.uts +++ b/packages/uni-app-uts/lib/automator/index.uts @@ -1,11 +1,9 @@ -import { JSONArray } from 'com.alibaba.fastjson' import { callUniMethod, CallUniMethodParams, captureScreenshot, CaptureScreenshotParams, getPageStack, - GetPageStackParams, getCurrentPage, GetCurrentPageParams } from './apis/App/index.uts' @@ -60,11 +58,19 @@ export function send(data: any) { socketTask?.send({ data: JSON.stringify(data) } as SendSocketMessageOptions) } +export type Callback = (result: any | null, error: any | null) => void + +type Msg = { + id: string, + method: string, + params: any +} + export function onMessage(msg: string) { - const json = JSON.parse(msg)! - const method = json['method'] as string - const params = json['params'] as UTSJSONObject - const res = new Map([['id', json['id'] as string]]) + const json = JSON.parse(msg) + const method = json.method + const params = JSON.stringify(json.params) + const res = new Map([['id', json.id]]) try { const callback = (result?: any | null, error?: any | null) => { res.set('result', result) @@ -74,155 +80,89 @@ export function onMessage(msg: string) { if (method.startsWith('App.')) { switch (method) { case 'App.callUniMethod': - const method = params['method'] as string - const args = (params['args'] as UTSJSONObject).toJSONObject() as JSONArray - callUniMethod({ - method, - args, - callback - } as CallUniMethodParams) + callUniMethod(JSON.parse(params), callback) break case 'App.captureScreenshot': - const id = params['id'] != null ? (params['id'] as string) : null - const fullPage = params['fullPage'] != null ? (params['fullPage'] as boolean) : false - const path = params['path'] != null ? (params['path'] as string) : '' - captureScreenshot({ id, fullPage, path, callback } as CaptureScreenshotParams) + captureScreenshot(JSON.parse(params), callback) break case 'App.getPageStack': - getPageStack({ callback } as GetPageStackParams) + getPageStack(callback) break case 'App.getCurrentPage': getCurrentPage({ callback } as GetCurrentPageParams) break case 'App.socketEmitter': - const socketId: string = params['id'] != null ? (params['id'] as string) : '' - const socketMethod: string = params['method'] != null ? (params['method'] as string) : '' - const data = params['data'] != null ? (params['data'] as any) : null - const code: number | null = params['code'] != null ? (params['code'] as number) : null - const reason: string | null = params['reason'] != null ? (params['reason'] as string) : null - socketEmitter({ id: socketId, method: socketMethod, data, code, reason, callback } as SocketEmitterParams) + socketEmitter(JSON.parse(params), callback) break } } else if (method.startsWith('Page.')) { - const pageId = params['pageId'] as string switch (method) { case 'Page.getData': - const path = params['path'] != null ? (params['path'] as string) : '' - pageGetData({ pageId, path, callback } as PageGetDataParams) + pageGetData(JSON.parse(params), callback) break case 'Page.setData': - const data = - params['data'] != null - ? (params['data'] as UTSJSONObject) - : ({} as UTSJSONObject) - pageSetData({ pageId, data, callback } as PageSetDataParams) + pageSetData(JSON.parse(params), callback) break case 'Page.callMethod': - const method = params['method'] as string - const args = UTSArray.fromNative(((params['args'] as UTSJSONObject).toJSONObject() as JSONArray)) - pageCallMethod({ pageId, method, args, callback } as CallMethodParams) + pageCallMethod(JSON.parse(params), callback) break case 'Page.getElement': - const getElementSelector = params['selector'] as string - pageGetElement({ pageId, selector: getElementSelector, callback } as PageGetElementParams) + pageGetElement(JSON.parse(params), callback) break case 'Page.getElements': - const getElementsSelector = params['selector'] as string - pageGetElements({ pageId, selector: getElementsSelector, callback } as PageGetElementParams) + pageGetElements(JSON.parse(params), callback) break case 'Page.getWindowProperties': - const getWindowPropertiesNames = UTSArray.fromNative(((params['names'] as UTSJSONObject).toJSONObject() as JSONArray)) as string[] - getWindowProperties({ pageId, names: getWindowPropertiesNames, callback } as GetWindowPropertiesParams) + getWindowProperties(JSON.parse(params), callback) break } } else if (method.startsWith('Element.')) { - const pageId = params['pageId'] as string switch (method) { case 'Element.getElement': - const getElementElementId = params['elementId'] != null ? params['elementId'] as string : null - const getElementNodeId = params['nodeId'] != null ? params['nodeId'] as number : null - const getElementSelector = params['selector'] as string - elementGetElement({ pageId, nodeId: getElementNodeId, elementId: getElementElementId, selector: getElementSelector, callback } as ElementGetElementParams) + elementGetElement(JSON.parse(params), callback) break case 'Element.getElements': - const getElementsElementId = params['elementId'] != null ? params['elementId'] as string : null - const getElementsNodeId = params['nodeId'] != null ? params['nodeId'] as number : null - const getElementsSelector = params['selector'] as string - elementGetElements({ pageId, nodeId: getElementsNodeId, elementId: getElementsElementId, selector: getElementsSelector, callback } as ElementGetElementParams) + elementGetElements(JSON.parse(params), callback) break case 'Element.getDOMProperties': - const getDOMPropertiesElementId = params['elementId'] != null ? params['elementId'] as string : null - const getDOMPropertiesNodeId = params['nodeId'] != null ? params['nodeId'] as number : null - const getDOMPropertiesNames = UTSArray.fromNative(((params['names'] as UTSJSONObject).toJSONObject() as JSONArray)) as string[] - getDOMProperties({ pageId, elementId: getDOMPropertiesElementId, nodeId: getDOMPropertiesNodeId, names: getDOMPropertiesNames, callback } as GetDOMPropertiesParams) + getDOMProperties(JSON.parse(params), callback) break case 'Element.getProperties': - const getPropertiesElementId = params['elementId'] != null ? params['elementId'] as string : null - const getPropertiesNodeId = params['nodeId'] != null ? params['nodeId'] as number : null - const getPropertiesNames = UTSArray.fromNative(((params['names'] as UTSJSONObject).toJSONObject() as JSONArray)) as string[] - getProperties({ pageId, elementId: getPropertiesElementId, nodeId: getPropertiesNodeId, names: getPropertiesNames, callback } as GetPropertiesParams) + getProperties(JSON.parse(params), callback) break case 'Element.callFunction': - const callFunctionElementId = params['elementId'] as string - const functionName = params['functionName'] as string - const callFunctionArgs = UTSArray.fromNative(((params['args'] as UTSJSONObject).toJSONObject() as JSONArray)) - elementCallFunction({ pageId, elementId: callFunctionElementId, functionName, args: callFunctionArgs, callback } as ElementCallFunctionParams) + elementCallFunction(JSON.parse(params), callback) break case 'Element.tap': - const tapElementId = params['elementId'] != null ? params['elementId'] as string : null - const tapNodeId = params['nodeId'] != null ? params['nodeId'] as number : null - tap({ pageId, elementId: tapElementId, nodeId: tapNodeId, callback } as TapParams) + tap(JSON.parse(params), callback) break case 'Element.callMethod': - const callMethodNodeId = params['nodeId'] as number - const callMethodMethod = params['method'] as string - const callMethodArgs = UTSArray.fromNative(((params['args'] as UTSJSONObject).toJSONObject() as JSONArray)) - elementCallMethod({ pageId, nodeId: callMethodNodeId, method: callMethodMethod, args: callMethodArgs, callback } as ElementCallMethodParams) + elementCallMethod(JSON.parse(params), callback) break case 'Element.getData': - const getDataNodeId = params['nodeId'] as number - const path = params['path'] != null ? (params['path'] as string) : '' - elementGetData({ pageId, nodeId: getDataNodeId, path, callback } as ElementGetDataParams) + elementGetData(JSON.parse(params), callback) break case 'Element.setData': - const setDataNodeId = params['nodeId'] as number - const data = - params['data'] != null - ? (params['data'] as UTSJSONObject) - : ({} as UTSJSONObject) - elementSetData({ pageId, nodeId: setDataNodeId, data, callback } as ElementSetDataParams) + elementSetData(JSON.parse(params), callback) break case 'Element.getOffset': - const getOffsetElementId = params['elementId'] != null ? params['elementId'] as string : null - const getOffsetNodeId = params['nodeId'] != null ? params['nodeId'] as number : null - getOffset({ pageId, elementId: getOffsetElementId, nodeId: getOffsetNodeId, callback } as GetOffsetParams) + getOffset(JSON.parse(params), callback) break case 'Element.longpress': - const longpressElementId = params['elementId'] != null ? params['elementId'] as string : null - const longpressNodeId = params['nodeId'] != null ? params['nodeId'] as number : null - longpress({ pageId, elementId: longpressElementId, nodeId: longpressNodeId, callback } as LongpressParams) + longpress(JSON.parse(params), callback) break case 'Element.touchstart': case 'Element.touchmove': case 'Element.touchend': - const touchstartElementId = params['elementId'] != null ? params['elementId'] as string : null - const touchstartNodeId = params['nodeId'] != null ? params['nodeId'] as number : null - const eventName = method.split('.')[1] - const touchstartTouches = UTSArray.fromNative(((params['touches'] as UTSJSONObject).toJSONObject() as JSONArray)) - const touchstartChangedTouches = UTSArray.fromNative(((params['changedTouches'] as UTSJSONObject).toJSONObject() as JSONArray)) - handleTouchEvent({ pageId, elementId: touchstartElementId, nodeId: touchstartNodeId, eventName, touches: touchstartTouches, changedTouches: touchstartChangedTouches, callback } as HandleTouchEventParams) + const _params = JSON.parse(params) + _params.eventName = method.split('.')[1] + handleTouchEvent(_params, callback) break case 'Element.getAttributes': - const getAttributesElementId = params['elementId'] != null ? params['elementId'] as string : null - const getAttributesNodeId = params['nodeId'] != null ? params['nodeId'] as number : null - const getAttributesNames = UTSArray.fromNative(((params['names'] as UTSJSONObject).toJSONObject() as JSONArray)) as string[] - getAttributes({ pageId, elementId: getAttributesElementId, nodeId: getAttributesNodeId, names: getAttributesNames, callback } as GetAttributesParams) + getAttributes(JSON.parse(params), callback) break case 'Element.getStyles': - const getStylesElementId = params['elementId'] != null ? params['elementId'] as string : null - const getStylesNodeId = params['nodeId'] != null ? params['nodeId'] as number : null - const getStylesNames = UTSArray.fromNative(((params['names'] as UTSJSONObject).toJSONObject() as JSONArray)) as string[] - getStyles({ pageId, elementId: getStylesElementId, nodeId: getStylesNodeId, names: getStylesNames, callback } as GetStylesParams) + getStyles(JSON.parse(params), callback) break } }