提交 9f52bab4 编写于 作者: DCloud-WZF's avatar DCloud-WZF 💬

types(uts): automator

上级 b6d47665
import type { Callback } from '../../index.uts'
type SocketInstanceData = {
instance: SocketTask,
isOpend: boolean,
......@@ -5,7 +7,7 @@ type SocketInstanceData = {
}
const socketInstanceMap = new Map<string, SocketInstanceData>()
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)
}
......
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<string, any | null>
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({
......
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<string, any | null>
}
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<TypeTouch>(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)
}
}
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<string, any | null>
}
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.' })
......
......@@ -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<string, any | null>): 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<string, any | null>): void {
data.forEach((value: any | null, key: string) => {
vm.$data.set(key, value)
})
}
......
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<string, any | null>([['id', json['id'] as string]])
const json = JSON.parse<Msg>(msg)
const method = json.method
const params = JSON.stringify(json.params)
const res = new Map<string, any | null>([['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<CallUniMethodParams>(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<CaptureScreenshotParams>(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<SocketEmitterParams>(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<PageGetDataParams>(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<PageSetDataParams>(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<CallMethodParams>(params), callback)
break
case 'Page.getElement':
const getElementSelector = params['selector'] as string
pageGetElement({ pageId, selector: getElementSelector, callback } as PageGetElementParams)
pageGetElement(JSON.parse<PageGetElementParams>(params), callback)
break
case 'Page.getElements':
const getElementsSelector = params['selector'] as string
pageGetElements({ pageId, selector: getElementsSelector, callback } as PageGetElementParams)
pageGetElements(JSON.parse<PageGetElementParams>(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<GetWindowPropertiesParams>(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<ElementGetElementParams>(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<ElementGetElementParams>(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<GetDOMPropertiesParams>(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<GetPropertiesParams>(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<ElementCallFunctionParams>(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<TapParams>(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<ElementCallMethodParams>(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<ElementGetDataParams>(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<ElementSetDataParams>(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<GetOffsetParams>(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<LongpressParams>(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<HandleTouchEventParams>(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<GetAttributesParams>(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<GetStylesParams>(params), callback)
break
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册