cj-tauri 2.0.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +113 -99
- package/bin/cj-tauri.js +287 -287
- package/cjpm.toml +63 -52
- package/cli/cjpm.toml +22 -22
- package/cli/src/doctor.cj +308 -306
- package/cli/src/main.cj +129 -129
- package/cli/src/manifest.cj +632 -558
- package/cli/src/manifest_test.cj +87 -0
- package/cli/src/project.cj +770 -770
- package/cli/src/resolve.cj +348 -348
- package/cli/src/scaffold.cj +369 -369
- package/cli/src/sync.cj +526 -526
- package/cli/src/util.cj +168 -168
- package/cli/templates/app/README.md +51 -48
- package/cli/templates/app/assets/capabilities/default.json +7 -7
- package/cli/templates/app/assets/ui/index.html +120 -118
- package/cli/templates/app/cj-tauri.toml +32 -22
- package/cli/templates/app/cjpm.toml +34 -34
- package/cli/templates/app/src/main.cj +101 -90
- package/cli/templates/app-react/README.md +56 -56
- package/cli/templates/app-react/assets/capabilities/default.json +7 -7
- package/cli/templates/app-react/assets/ui/index.html +25 -25
- package/cli/templates/app-react/assets/ui/package.json +19 -19
- package/cli/templates/app-react/assets/ui/src/App.css +67 -67
- package/cli/templates/app-react/assets/ui/src/App.jsx +124 -124
- package/cli/templates/app-react/assets/ui/src/main.jsx +6 -6
- package/cli/templates/app-react/assets/ui/vite.config.js +24 -24
- package/cli/templates/app-react/cj-tauri.toml +33 -23
- package/cli/templates/app-react/cjpm.toml +34 -34
- package/cli/templates/app-react/src/main.cj +91 -91
- package/cli/templates/app-vue/README.md +56 -56
- package/cli/templates/app-vue/assets/capabilities/default.json +7 -7
- package/cli/templates/app-vue/assets/ui/index.html +25 -25
- package/cli/templates/app-vue/assets/ui/package.json +18 -18
- package/cli/templates/app-vue/assets/ui/src/App.vue +176 -176
- package/cli/templates/app-vue/assets/ui/src/main.js +4 -4
- package/cli/templates/app-vue/assets/ui/vite.config.js +24 -24
- package/cli/templates/app-vue/cj-tauri.toml +33 -23
- package/cli/templates/app-vue/cjpm.toml +34 -34
- package/cli/templates/app-vue/src/main.cj +91 -91
- package/cli/templates/ohos-skeleton/AppScope/app.json5 +13 -13
- package/cli/templates/ohos-skeleton/AppScope/resources/base/element/string.json +8 -8
- package/cli/templates/ohos-skeleton/AppScope/resources/base/media/layered_image.json +6 -6
- package/cli/templates/ohos-skeleton/README.md +84 -79
- package/cli/templates/ohos-skeleton/build-hap.sh +15 -0
- package/cli/templates/ohos-skeleton/build-profile.json5 +46 -46
- package/cli/templates/ohos-skeleton/entry/build-profile.json5 +26 -26
- package/cli/templates/ohos-skeleton/entry/cjpm.toml +51 -43
- package/cli/templates/ohos-skeleton/entry/hvigorfile.ts +6 -6
- package/cli/templates/ohos-skeleton/entry/oh-package.json5 +9 -9
- package/cli/templates/ohos-skeleton/entry/src/main/cangjie/ability_stage.cj +17 -17
- package/cli/templates/ohos-skeleton/entry/src/main/cangjie/app_host.cj +94 -94
- package/cli/templates/ohos-skeleton/entry/src/main/cangjie/dialog_host.cj +217 -0
- package/cli/templates/ohos-skeleton/entry/src/main/cangjie/index.cj +527 -167
- package/cli/templates/ohos-skeleton/entry/src/main/cangjie/main_ability.cj +139 -139
- package/cli/templates/ohos-skeleton/entry/src/main/module.json5 +57 -49
- package/cli/templates/ohos-skeleton/entry/src/main/resources/base/element/color.json +8 -8
- package/cli/templates/ohos-skeleton/entry/src/main/resources/base/element/string.json +16 -16
- package/cli/templates/ohos-skeleton/entry/src/main/resources/base/media/layered_image.json +6 -6
- package/cli/templates/ohos-skeleton/entry/src/main/resources/base/profile/main_pages.json +2 -2
- package/cli/templates/ohos-skeleton/entry/src/main/resources/rawfile/capabilities.json +6 -6
- package/cli/templates/ohos-skeleton/entry/src/main/resources/rawfile/index.html +92 -92
- package/cli/templates/ohos-skeleton/hvigor/hvigor-config.json5 +5 -5
- package/cli/templates/ohos-skeleton/hvigorfile.ts +6 -6
- package/cli/templates/ohos-skeleton/oh-package.json5 +10 -10
- package/native/build_win.bat +62 -62
- package/native/core/bridge_core.c +1681 -1626
- package/native/core/bridge_core.h +675 -618
- package/native/core/bridge_js.h +108 -108
- package/native/platforms/harmonyos/README.md +115 -6
- package/native/platforms/linux/bridge_linux.c +2787 -2485
- package/native/platforms/windows/bridge_win.c +3740 -3248
- package/native/tests/gtk_threading_probe.c +143 -143
- package/native/tests/test_bridge_core.c +1339 -1228
- package/package.json +53 -53
- package/prebuilt/linux-x64/cj-tauri +0 -0
- package/src/api_system.cj +67 -67
- package/src/app.cj +325 -969
- package/src/app_events.cj +166 -0
- package/src/app_host_ops.cj +287 -0
- package/src/app_run.cj +283 -0
- package/src/app_spec.cj +76 -76
- package/src/arkweb_menu.cj +216 -0
- package/src/arkweb_script.cj +142 -142
- package/src/capability.cj +409 -409
- package/src/clipboard_bridge.cj +178 -0
- package/src/dialog_spec.cj +79 -0
- package/src/dragdrop.cj +26 -26
- package/src/embedded_assets.cj +98 -98
- package/src/host.cj +752 -607
- package/src/host_arkweb.cj +924 -778
- package/src/host_webkit.cj +663 -570
- package/src/host_webview2.cj +663 -570
- package/src/hotkey.cj +66 -66
- package/src/ipc_hub.cj +337 -337
- package/src/ipc_message.cj +286 -286
- package/src/launch.cj +62 -62
- package/src/logging.cj +127 -127
- package/src/menu.cj +197 -197
- package/src/platform/platform_app_context.cj +77 -77
- package/src/platform/platform_assets.cj +33 -33
- package/src/platform/platform_discover.cj +176 -176
- package/src/platform/platform_env.cj +29 -29
- package/src/platform/platform_feature.cj +31 -31
- package/src/platform/platform_page_source.cj +87 -87
- package/src/platform/platform_target_info.cj +32 -32
- package/src/platform_host_provider.cj +87 -87
- package/src/plugin.cj +333 -333
- package/src/plugins/clipboard/plugin_clipboard.cj +152 -152
- package/src/plugins/dialog/plugin_dialog.cj +209 -209
- package/src/plugins/fs/plugin_fs.cj +105 -1
- package/src/plugins/http/http_backend.cj +131 -0
- package/src/plugins/http/http_desktop.cj +195 -0
- package/src/plugins/http/http_ohos.cj +204 -0
- package/src/plugins/http/plugin_http.cj +310 -459
- package/src/plugins/log/plugin_log.cj +105 -105
- package/src/plugins/menu/plugin_menu.cj +158 -158
- package/src/plugins/notification/plugin_notification.cj +154 -154
- package/src/plugins/serial/plugin_serial.cj +458 -454
- package/src/plugins/serial/serial_bridge.cj +194 -194
- package/src/plugins/serial/serial_manager_ohos.cj +92 -0
- package/src/plugins/serial/serial_ohos.cj +529 -0
- package/src/plugins/shell/plugin_shell.cj +258 -258
- package/src/plugins/sqlite/plugin_sqlite.cj +705 -710
- package/src/plugins/sqlite/sqlite_ffi.cj +206 -211
- package/src/plugins/ws/plugin_ws.cj +488 -470
- package/src/process_hidden.cj +174 -174
- package/src/scope.cj +391 -391
- package/src/shell_event.cj +69 -69
- package/src/tests/app_spec_test.cj +126 -127
- package/src/tests/capability_test.cj +243 -243
- package/src/tests/dialog_spec_test.cj +73 -0
- package/src/tests/fake_host.cj +201 -201
- package/src/tests/ipc_hub_test.cj +487 -487
- package/src/tests/logging_test.cj +62 -62
- package/src/tests/platform_contract_test.cj +251 -251
- package/src/tests/plugin_clipboard_test.cj +222 -222
- package/src/tests/plugin_dialog_test.cj +237 -237
- package/src/tests/plugin_fs_test.cj +207 -0
- package/src/tests/plugin_http_test.cj +124 -124
- package/src/tests/plugin_notification_test.cj +205 -205
- package/src/tests/plugin_serial_test.cj +48 -0
- package/src/tests/plugin_test.cj +605 -585
- package/src/tests/plugin_ws_test.cj +40 -40
- package/src/tests/process_hidden_test.cj +129 -129
- package/src/tests/scope_test.cj +350 -350
- package/src/tests/system_host_test.cj +99 -81
- package/src/tests/urlutil_test.cj +53 -53
- package/src/tests/version_test.cj +75 -75
- package/src/tests/window_registry_test.cj +123 -123
- package/src/tray.cj +90 -90
- package/src/urlutil.cj +159 -159
- package/src/version.cj +44 -44
- package/src/window.cj +51 -51
- package/src/window_registry.cj +116 -116
- package/prebuilt/win32-x64/cj-tauri.exe +0 -0
- package/src/plugins/serial/serial_ohos_stub.cj +0 -61
- package/src/plugins/sqlite/sqlite_ohos_stub.cj +0 -91
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
package cjTauri.platform
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* 平台自述(RFC-002 §5.1)
|
|
5
|
-
*
|
|
6
|
-
* 供宿主选择、资产策略、日志与埋点共用;**业务不得据此分支**——
|
|
7
|
-
* 业务判断"这个端有没有某设施"请走 AppContext.supports(PlatformFeature)。
|
|
8
|
-
*
|
|
9
|
-
* 为什么 os 是字符串而不是枚举:宿主实现由 L0 注册(HostProvider),框架核心
|
|
10
|
-
* 不 import 任何平台包;批次 1 接入 createHost 时会给出各端的取值常量。
|
|
11
|
-
*/
|
|
12
|
-
public class TargetInfo {
|
|
13
|
-
/** "Windows" / "Linux" / "HarmonyOS" / "macOS" / "Android"(鸿蒙与 Linux 桌面都会报 Linux,靠 hostKind 区分) */
|
|
14
|
-
public let os: String
|
|
15
|
-
/** "x86_64" / "aarch64" */
|
|
16
|
-
public let arch: String
|
|
17
|
-
/** "webkitgtk" / "webview2" / "arkweb" / "wkwebview" / "android-webview" */
|
|
18
|
-
public let hostKind: String
|
|
19
|
-
/** "desktop" / "mobile":只决定窗口语义(桌面多窗、移动端多任务),不决定能力位 */
|
|
20
|
-
public let display: String
|
|
21
|
-
|
|
22
|
-
public init(os: String, arch: String, hostKind: String, display: String) {
|
|
23
|
-
this.os = os
|
|
24
|
-
this.arch = arch
|
|
25
|
-
this.hostKind = hostKind
|
|
26
|
-
this.display = display
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
public func describe(): String {
|
|
30
|
-
"${os}/${arch} host=${hostKind} display=${display}"
|
|
31
|
-
}
|
|
32
|
-
}
|
|
1
|
+
package cjTauri.platform
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* 平台自述(RFC-002 §5.1)
|
|
5
|
+
*
|
|
6
|
+
* 供宿主选择、资产策略、日志与埋点共用;**业务不得据此分支**——
|
|
7
|
+
* 业务判断"这个端有没有某设施"请走 AppContext.supports(PlatformFeature)。
|
|
8
|
+
*
|
|
9
|
+
* 为什么 os 是字符串而不是枚举:宿主实现由 L0 注册(HostProvider),框架核心
|
|
10
|
+
* 不 import 任何平台包;批次 1 接入 createHost 时会给出各端的取值常量。
|
|
11
|
+
*/
|
|
12
|
+
public class TargetInfo {
|
|
13
|
+
/** "Windows" / "Linux" / "HarmonyOS" / "macOS" / "Android"(鸿蒙与 Linux 桌面都会报 Linux,靠 hostKind 区分) */
|
|
14
|
+
public let os: String
|
|
15
|
+
/** "x86_64" / "aarch64" */
|
|
16
|
+
public let arch: String
|
|
17
|
+
/** "webkitgtk" / "webview2" / "arkweb" / "wkwebview" / "android-webview" */
|
|
18
|
+
public let hostKind: String
|
|
19
|
+
/** "desktop" / "mobile":只决定窗口语义(桌面多窗、移动端多任务),不决定能力位 */
|
|
20
|
+
public let display: String
|
|
21
|
+
|
|
22
|
+
public init(os: String, arch: String, hostKind: String, display: String) {
|
|
23
|
+
this.os = os
|
|
24
|
+
this.arch = arch
|
|
25
|
+
this.hostKind = hostKind
|
|
26
|
+
this.display = display
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
public func describe(): String {
|
|
30
|
+
"${os}/${arch} host=${hostKind} display=${display}"
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -1,87 +1,87 @@
|
|
|
1
|
-
package cjTauri
|
|
2
|
-
|
|
3
|
-
import std.collection.ArrayList
|
|
4
|
-
import cjTauri.platform.*
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* 宿主提供者注册表(RFC-002 §5.1)——多宿主入口,取代早期的单槽注入
|
|
8
|
-
*
|
|
9
|
-
* 为什么是"优先级"而不是布尔匹配:同一 os 下会有多个宿主——鸿蒙 ArkWeb 与
|
|
10
|
-
* ARM64 Linux 桌面的 os 都报 Linux,Android 与 Linux 同理;整数优先级让
|
|
11
|
-
* 「专用实现压过通用实现」成为数据而不是 if 顺序。
|
|
12
|
-
*
|
|
13
|
-
* 早期的单槽注入(`setHostFactory` / `requireInjectedHost`)已删除:装配层只经本注册表
|
|
14
|
-
* 取宿主,`resolveHost` 优先注册表、没有匹配者才回落内置宿主(见 host.cj 的 createHost)。
|
|
15
|
-
*/
|
|
16
|
-
public interface HostProvider {
|
|
17
|
-
/** 0 = 不匹配;>0 越大越优先 */
|
|
18
|
-
func priority(target: TargetInfo): Int64
|
|
19
|
-
/** 一个 label 一个宿主实例(多窗口事件按 label 路由,见 host.cj HostRoute) */
|
|
20
|
-
func create(label: String, target: TargetInfo): WebViewHost
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
private var HOST_PROVIDERS: ArrayList<HostProvider> = ArrayList<HostProvider>()
|
|
24
|
-
|
|
25
|
-
/** 注册宿主提供者:**必须在构造 TauriApp() 之前**(宿主在字段初始化时就创建,
|
|
26
|
-
* 与内置宿主同一约束);幂等性由调用方保证,重复注册按优先级取胜者。
|
|
27
|
-
* 返回注册下标(测试反注册用) */
|
|
28
|
-
public func registerHost(provider: HostProvider): Int64 {
|
|
29
|
-
let idx = HOST_PROVIDERS.size
|
|
30
|
-
HOST_PROVIDERS.add(provider)
|
|
31
|
-
return idx
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
/** 已注册数量(自检 / 测试用) */
|
|
35
|
-
public func hostProviderCount(): Int64 {
|
|
36
|
-
return HOST_PROVIDERS.size
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* 反注册(测试用):全局注册表是进程级的,用例注册的探针宿主不清走会污染后续用例
|
|
41
|
-
* (优先级平局 / 抢占都取决于注册先后)。业务侧没有场景该调它。
|
|
42
|
-
* 接口引用没有可用的相等比较(`!=` 与 `equal` 都不提供),所以按注册下标定位。
|
|
43
|
-
*/
|
|
44
|
-
public func unregisterHost(index: Int64): Unit {
|
|
45
|
-
if (index >= 0 && index < HOST_PROVIDERS.size) {
|
|
46
|
-
// remove 收区间(start 含、end 不含):单元素 = index..index+1
|
|
47
|
-
HOST_PROVIDERS.remove(index..index + 1)
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* 按 TargetInfo 选出优先级最高的宿主并创建
|
|
53
|
-
*
|
|
54
|
-
* 框架内部装配用(批次 1 的 createHost 会走这里);没有匹配者返回 None,
|
|
55
|
-
* 由调用方给出可照做的错误——与宿主装配「不静默回落」同一约定。
|
|
56
|
-
*/
|
|
57
|
-
public func pickHost(label: String, target: TargetInfo): Option<WebViewHost> {
|
|
58
|
-
var best: Option<HostProvider> = None
|
|
59
|
-
var bestPriority: Int64 = 0
|
|
60
|
-
for (p in HOST_PROVIDERS) {
|
|
61
|
-
let pr = p.priority(target)
|
|
62
|
-
if (pr > bestPriority) {
|
|
63
|
-
bestPriority = pr
|
|
64
|
-
best = Some(p)
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
match (best) {
|
|
68
|
-
case Some(p) => return Some(p.create(label, target))
|
|
69
|
-
case None => return None
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
* 装配层的宿主解析(批次 1 接线,RFC §5.4):注册表优先,内置实现兜底
|
|
75
|
-
*
|
|
76
|
-
* app.cj 的 TauriApp 构造与 addWindow 都走这里;原有 @When 门禁的 createHost
|
|
77
|
-
* 三分支原样保留为兜底(桌面 WebKit/WebView2、鸿蒙 ArkWeb),既有行为不变。
|
|
78
|
-
* 注册表的优先级 > 0 才参与,因此「应用显式注册」永远压过内置默认。
|
|
79
|
-
* (public:装配层与测试子包 cjTauri.tests 都要引用;业务侧正常不会直接调用。)
|
|
80
|
-
*/
|
|
81
|
-
public func resolveHost(label: String): WebViewHost {
|
|
82
|
-
let target = Platform.guessTarget()
|
|
83
|
-
match (pickHost(label, target)) {
|
|
84
|
-
case Some(h) => return h
|
|
85
|
-
case None => return createHost(label)
|
|
86
|
-
}
|
|
87
|
-
}
|
|
1
|
+
package cjTauri
|
|
2
|
+
|
|
3
|
+
import std.collection.ArrayList
|
|
4
|
+
import cjTauri.platform.*
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* 宿主提供者注册表(RFC-002 §5.1)——多宿主入口,取代早期的单槽注入
|
|
8
|
+
*
|
|
9
|
+
* 为什么是"优先级"而不是布尔匹配:同一 os 下会有多个宿主——鸿蒙 ArkWeb 与
|
|
10
|
+
* ARM64 Linux 桌面的 os 都报 Linux,Android 与 Linux 同理;整数优先级让
|
|
11
|
+
* 「专用实现压过通用实现」成为数据而不是 if 顺序。
|
|
12
|
+
*
|
|
13
|
+
* 早期的单槽注入(`setHostFactory` / `requireInjectedHost`)已删除:装配层只经本注册表
|
|
14
|
+
* 取宿主,`resolveHost` 优先注册表、没有匹配者才回落内置宿主(见 host.cj 的 createHost)。
|
|
15
|
+
*/
|
|
16
|
+
public interface HostProvider {
|
|
17
|
+
/** 0 = 不匹配;>0 越大越优先 */
|
|
18
|
+
func priority(target: TargetInfo): Int64
|
|
19
|
+
/** 一个 label 一个宿主实例(多窗口事件按 label 路由,见 host.cj HostRoute) */
|
|
20
|
+
func create(label: String, target: TargetInfo): WebViewHost
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
private var HOST_PROVIDERS: ArrayList<HostProvider> = ArrayList<HostProvider>()
|
|
24
|
+
|
|
25
|
+
/** 注册宿主提供者:**必须在构造 TauriApp() 之前**(宿主在字段初始化时就创建,
|
|
26
|
+
* 与内置宿主同一约束);幂等性由调用方保证,重复注册按优先级取胜者。
|
|
27
|
+
* 返回注册下标(测试反注册用) */
|
|
28
|
+
public func registerHost(provider: HostProvider): Int64 {
|
|
29
|
+
let idx = HOST_PROVIDERS.size
|
|
30
|
+
HOST_PROVIDERS.add(provider)
|
|
31
|
+
return idx
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/** 已注册数量(自检 / 测试用) */
|
|
35
|
+
public func hostProviderCount(): Int64 {
|
|
36
|
+
return HOST_PROVIDERS.size
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* 反注册(测试用):全局注册表是进程级的,用例注册的探针宿主不清走会污染后续用例
|
|
41
|
+
* (优先级平局 / 抢占都取决于注册先后)。业务侧没有场景该调它。
|
|
42
|
+
* 接口引用没有可用的相等比较(`!=` 与 `equal` 都不提供),所以按注册下标定位。
|
|
43
|
+
*/
|
|
44
|
+
public func unregisterHost(index: Int64): Unit {
|
|
45
|
+
if (index >= 0 && index < HOST_PROVIDERS.size) {
|
|
46
|
+
// remove 收区间(start 含、end 不含):单元素 = index..index+1
|
|
47
|
+
HOST_PROVIDERS.remove(index..index + 1)
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* 按 TargetInfo 选出优先级最高的宿主并创建
|
|
53
|
+
*
|
|
54
|
+
* 框架内部装配用(批次 1 的 createHost 会走这里);没有匹配者返回 None,
|
|
55
|
+
* 由调用方给出可照做的错误——与宿主装配「不静默回落」同一约定。
|
|
56
|
+
*/
|
|
57
|
+
public func pickHost(label: String, target: TargetInfo): Option<WebViewHost> {
|
|
58
|
+
var best: Option<HostProvider> = None
|
|
59
|
+
var bestPriority: Int64 = 0
|
|
60
|
+
for (p in HOST_PROVIDERS) {
|
|
61
|
+
let pr = p.priority(target)
|
|
62
|
+
if (pr > bestPriority) {
|
|
63
|
+
bestPriority = pr
|
|
64
|
+
best = Some(p)
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
match (best) {
|
|
68
|
+
case Some(p) => return Some(p.create(label, target))
|
|
69
|
+
case None => return None
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* 装配层的宿主解析(批次 1 接线,RFC §5.4):注册表优先,内置实现兜底
|
|
75
|
+
*
|
|
76
|
+
* app.cj 的 TauriApp 构造与 addWindow 都走这里;原有 @When 门禁的 createHost
|
|
77
|
+
* 三分支原样保留为兜底(桌面 WebKit/WebView2、鸿蒙 ArkWeb),既有行为不变。
|
|
78
|
+
* 注册表的优先级 > 0 才参与,因此「应用显式注册」永远压过内置默认。
|
|
79
|
+
* (public:装配层与测试子包 cjTauri.tests 都要引用;业务侧正常不会直接调用。)
|
|
80
|
+
*/
|
|
81
|
+
public func resolveHost(label: String): WebViewHost {
|
|
82
|
+
let target = Platform.guessTarget()
|
|
83
|
+
match (pickHost(label, target)) {
|
|
84
|
+
case Some(h) => return h
|
|
85
|
+
case None => return createHost(label)
|
|
86
|
+
}
|
|
87
|
+
}
|