Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
yiicenne
uni-app
提交
1a9113a5
U
uni-app
项目概览
yiicenne
/
uni-app
与 Fork 源项目一致
Fork自
DCloud / uni-app
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
U
uni-app
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
1a9113a5
编写于
3月 21, 2023
作者:
fxy060608
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
wip(uts): runtime
上级
e78539be
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
56 addition
and
13 deletion
+56
-13
src/platforms/app-plus/service/api/index.js
src/platforms/app-plus/service/api/index.js
+2
-1
src/platforms/app-plus/service/api/plugin/uts.js
src/platforms/app-plus/service/api/plugin/uts.js
+54
-12
未找到文件。
src/platforms/app-plus/service/api/index.js
浏览文件 @
1a9113a5
...
...
@@ -71,7 +71,8 @@ export {
initUTSClassName
,
initUTSPackageName
,
requireUTSPlugin
,
registerUTSPlugin
registerUTSPlugin
,
registerUTSInterface
}
from
'
./plugin/uts
'
export
*
from
'
./route/navigate-back
'
...
...
src/platforms/app-plus/service/api/plugin/uts.js
浏览文件 @
1a9113a5
import
{
isPlainObject
,
hasOwn
,
extend
,
capitalize
}
from
'
uni-shared
'
;
import
{
isPlainObject
,
hasOwn
,
extend
,
capitalize
,
isString
}
from
'
uni-shared
'
;
let
callbackId
=
1
;
let
proxy
;
...
...
@@ -18,8 +18,8 @@ function normalizeArg(arg) {
}
return
arg
;
}
function
initUTSInstanceMethod
(
async
,
opts
,
instanceId
)
{
return
initProxyFunction
(
async
,
opts
,
instanceId
);
function
initUTSInstanceMethod
(
async
,
opts
,
instanceId
,
proxy
)
{
return
initProxyFunction
(
async
,
opts
,
instanceId
,
proxy
);
}
function
getProxy
()
{
if
(
!
proxy
)
{
...
...
@@ -27,13 +27,28 @@ function getProxy() {
}
return
proxy
;
}
function
resolveSyncResult
(
res
)
{
function
resolveSyncResult
(
res
,
returnOptions
,
instanceId
,
proxy
)
{
// devtools 环境是字符串?
if
(
isString
(
res
))
{
res
=
JSON
.
parse
(
res
);
}
if
((
process
.
env
.
NODE_ENV
!==
'
production
'
))
{
console
.
log
(
'
uts.invokeSync.result
'
,
res
);
console
.
log
(
'
uts.invokeSync.result
'
,
res
,
returnOptions
,
instanceId
,
proxy
);
}
if
(
res
.
errMsg
)
{
throw
new
Error
(
res
.
errMsg
);
}
if
(
returnOptions
)
{
if
(
returnOptions
.
type
===
'
interface
'
&&
typeof
res
.
params
===
'
number
'
)
{
if
(
res
.
params
===
instanceId
&&
proxy
)
{
return
proxy
;
}
if
(
interfaceDefines
[
returnOptions
.
options
])
{
const
ProxyClass
=
initUTSProxyClass
(
extend
({
instanceId
:
res
.
params
},
interfaceDefines
[
returnOptions
.
options
]));
return
new
ProxyClass
();
}
}
}
return
res
.
params
;
}
function
invokePropGetter
(
args
)
{
...
...
@@ -46,7 +61,7 @@ function invokePropGetter(args) {
}
return
resolveSyncResult
(
getProxy
().
invokeSync
(
args
,
()
=>
{
}));
}
function
initProxyFunction
(
async
,
{
moduleName
,
moduleType
,
package
:
pkg
,
class
:
cls
,
name
:
propOrMethod
,
method
,
companion
,
params
:
methodParams
,
errMsg
,
},
instanceId
)
{
function
initProxyFunction
(
async
,
{
moduleName
,
moduleType
,
package
:
pkg
,
class
:
cls
,
name
:
propOrMethod
,
method
,
companion
,
params
:
methodParams
,
return
:
returnOptions
,
errMsg
,
},
instanceId
,
proxy
)
{
const
invokeCallback
=
({
id
,
name
,
params
,
keepAlive
,
})
=>
{
const
callback
=
callbacks
[
id
];
if
(
callback
)
{
...
...
@@ -109,7 +124,7 @@ function initProxyFunction(async, { moduleName, moduleType, package: pkg, class:
if
((
process
.
env
.
NODE_ENV
!==
'
production
'
))
{
console
.
log
(
'
uts.invokeSync.args
'
,
invokeArgs
);
}
return
resolveSyncResult
(
getProxy
().
invokeSync
(
invokeArgs
,
invokeCallback
));
return
resolveSyncResult
(
getProxy
().
invokeSync
(
invokeArgs
,
invokeCallback
)
,
returnOptions
,
instanceId
,
proxy
);
};
}
function
initUTSStaticMethod
(
async
,
opts
)
{
...
...
@@ -127,7 +142,14 @@ function parseClassMethodName(name, methods) {
}
return
name
;
}
function
initUTSProxyClass
({
moduleName
,
moduleType
,
package
:
pkg
,
class
:
cls
,
constructor
:
{
params
:
constructorParams
},
methods
,
props
,
staticProps
,
staticMethods
,
errMsg
,
})
{
function
isUndefined
(
value
)
{
return
typeof
value
===
'
undefined
'
;
}
function
isProxyInterfaceOptions
(
options
)
{
return
!
isUndefined
(
options
.
instanceId
);
}
function
initUTSProxyClass
(
options
)
{
const
{
moduleName
,
moduleType
,
package
:
pkg
,
class
:
cls
,
methods
,
props
,
errMsg
,
}
=
options
;
const
baseOptions
=
{
moduleName
,
moduleType
,
...
...
@@ -135,6 +157,18 @@ function initUTSProxyClass({ moduleName, moduleType, package: pkg, class: cls, c
class
:
cls
,
errMsg
,
};
let
instanceId
;
let
constructorParams
=
[];
let
staticMethods
=
{};
let
staticProps
=
[];
if
(
isProxyInterfaceOptions
(
options
))
{
instanceId
=
options
.
instanceId
;
}
else
{
constructorParams
=
options
.
constructor
.
params
;
staticMethods
=
options
.
staticMethods
;
staticProps
=
options
.
staticProps
;
}
// iOS 需要为 ByJs 的 class 构造函数(如果包含JSONObject或UTSCallback类型)补充最后一个参数
if
(
typeof
plus
!==
'
undefined
'
&&
plus
.
os
.
name
===
'
iOS
'
)
{
if
(
constructorParams
.
find
((
p
)
=>
p
.
type
===
'
UTSCallback
'
||
p
.
type
.
indexOf
(
'
JSONObject
'
)
>
0
))
{
...
...
@@ -148,11 +182,14 @@ function initUTSProxyClass({ moduleName, moduleType, package: pkg, class: cls, c
}
const
target
=
{};
// 初始化实例 ID
const
instanceId
=
initProxyFunction
(
false
,
extend
({
name
:
'
constructor
'
,
params
:
constructorParams
},
baseOptions
),
0
).
apply
(
null
,
params
);
if
(
isUndefined
(
instanceId
))
{
// 未指定instanceId
instanceId
=
initProxyFunction
(
false
,
extend
({
name
:
'
constructor
'
,
params
:
constructorParams
},
baseOptions
),
0
).
apply
(
null
,
params
);
}
if
(
!
instanceId
)
{
throw
new
Error
(
`new
${
cls
}
is failed`
);
}
return
new
Proxy
(
this
,
{
const
proxy
=
new
Proxy
(
this
,
{
get
(
_
,
name
)
{
if
(
!
target
[
name
])
{
//实例方法
...
...
@@ -162,7 +199,7 @@ function initUTSProxyClass({ moduleName, moduleType, package: pkg, class: cls, c
target
[
name
]
=
initUTSInstanceMethod
(
!!
async
,
extend
({
name
,
params
,
},
baseOptions
),
instanceId
);
},
baseOptions
),
instanceId
,
proxy
);
}
else
if
(
props
.
includes
(
name
))
{
// 实例属性
...
...
@@ -178,6 +215,7 @@ function initUTSProxyClass({ moduleName, moduleType, package: pkg, class: cls, c
return
target
[
name
];
},
});
return
proxy
;
}
};
const
staticMethodCache
=
{};
...
...
@@ -227,6 +265,10 @@ function initUTSClassName(moduleName, className, is_uni_modules) {
}
return
''
;
}
const
interfaceDefines
=
{};
function
registerUTSInterface
(
name
,
define
)
{
interfaceDefines
[
name
]
=
define
;
}
const
pluginDefines
=
{};
function
registerUTSPlugin
(
name
,
define
)
{
pluginDefines
[
name
]
=
define
;
...
...
@@ -239,4 +281,4 @@ function requireUTSPlugin(name) {
return
define
;
}
export
{
initUTSClassName
,
initUTSIndexClassName
,
initUTSPackageName
,
initUTSProxyClass
,
initUTSProxyFunction
,
normalizeArg
,
registerUTSPlugin
,
requireUTSPlugin
};
export
{
initUTSClassName
,
initUTSIndexClassName
,
initUTSPackageName
,
initUTSProxyClass
,
initUTSProxyFunction
,
normalizeArg
,
registerUTS
Interface
,
registerUTS
Plugin
,
requireUTSPlugin
};
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录