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.
Files changed (158) hide show
  1. package/README.md +113 -99
  2. package/bin/cj-tauri.js +287 -287
  3. package/cjpm.toml +63 -52
  4. package/cli/cjpm.toml +22 -22
  5. package/cli/src/doctor.cj +308 -306
  6. package/cli/src/main.cj +129 -129
  7. package/cli/src/manifest.cj +632 -558
  8. package/cli/src/manifest_test.cj +87 -0
  9. package/cli/src/project.cj +770 -770
  10. package/cli/src/resolve.cj +348 -348
  11. package/cli/src/scaffold.cj +369 -369
  12. package/cli/src/sync.cj +526 -526
  13. package/cli/src/util.cj +168 -168
  14. package/cli/templates/app/README.md +51 -48
  15. package/cli/templates/app/assets/capabilities/default.json +7 -7
  16. package/cli/templates/app/assets/ui/index.html +120 -118
  17. package/cli/templates/app/cj-tauri.toml +32 -22
  18. package/cli/templates/app/cjpm.toml +34 -34
  19. package/cli/templates/app/src/main.cj +101 -90
  20. package/cli/templates/app-react/README.md +56 -56
  21. package/cli/templates/app-react/assets/capabilities/default.json +7 -7
  22. package/cli/templates/app-react/assets/ui/index.html +25 -25
  23. package/cli/templates/app-react/assets/ui/package.json +19 -19
  24. package/cli/templates/app-react/assets/ui/src/App.css +67 -67
  25. package/cli/templates/app-react/assets/ui/src/App.jsx +124 -124
  26. package/cli/templates/app-react/assets/ui/src/main.jsx +6 -6
  27. package/cli/templates/app-react/assets/ui/vite.config.js +24 -24
  28. package/cli/templates/app-react/cj-tauri.toml +33 -23
  29. package/cli/templates/app-react/cjpm.toml +34 -34
  30. package/cli/templates/app-react/src/main.cj +91 -91
  31. package/cli/templates/app-vue/README.md +56 -56
  32. package/cli/templates/app-vue/assets/capabilities/default.json +7 -7
  33. package/cli/templates/app-vue/assets/ui/index.html +25 -25
  34. package/cli/templates/app-vue/assets/ui/package.json +18 -18
  35. package/cli/templates/app-vue/assets/ui/src/App.vue +176 -176
  36. package/cli/templates/app-vue/assets/ui/src/main.js +4 -4
  37. package/cli/templates/app-vue/assets/ui/vite.config.js +24 -24
  38. package/cli/templates/app-vue/cj-tauri.toml +33 -23
  39. package/cli/templates/app-vue/cjpm.toml +34 -34
  40. package/cli/templates/app-vue/src/main.cj +91 -91
  41. package/cli/templates/ohos-skeleton/AppScope/app.json5 +13 -13
  42. package/cli/templates/ohos-skeleton/AppScope/resources/base/element/string.json +8 -8
  43. package/cli/templates/ohos-skeleton/AppScope/resources/base/media/layered_image.json +6 -6
  44. package/cli/templates/ohos-skeleton/README.md +84 -79
  45. package/cli/templates/ohos-skeleton/build-hap.sh +15 -0
  46. package/cli/templates/ohos-skeleton/build-profile.json5 +46 -46
  47. package/cli/templates/ohos-skeleton/entry/build-profile.json5 +26 -26
  48. package/cli/templates/ohos-skeleton/entry/cjpm.toml +51 -43
  49. package/cli/templates/ohos-skeleton/entry/hvigorfile.ts +6 -6
  50. package/cli/templates/ohos-skeleton/entry/oh-package.json5 +9 -9
  51. package/cli/templates/ohos-skeleton/entry/src/main/cangjie/ability_stage.cj +17 -17
  52. package/cli/templates/ohos-skeleton/entry/src/main/cangjie/app_host.cj +94 -94
  53. package/cli/templates/ohos-skeleton/entry/src/main/cangjie/dialog_host.cj +217 -0
  54. package/cli/templates/ohos-skeleton/entry/src/main/cangjie/index.cj +527 -167
  55. package/cli/templates/ohos-skeleton/entry/src/main/cangjie/main_ability.cj +139 -139
  56. package/cli/templates/ohos-skeleton/entry/src/main/module.json5 +57 -49
  57. package/cli/templates/ohos-skeleton/entry/src/main/resources/base/element/color.json +8 -8
  58. package/cli/templates/ohos-skeleton/entry/src/main/resources/base/element/string.json +16 -16
  59. package/cli/templates/ohos-skeleton/entry/src/main/resources/base/media/layered_image.json +6 -6
  60. package/cli/templates/ohos-skeleton/entry/src/main/resources/base/profile/main_pages.json +2 -2
  61. package/cli/templates/ohos-skeleton/entry/src/main/resources/rawfile/capabilities.json +6 -6
  62. package/cli/templates/ohos-skeleton/entry/src/main/resources/rawfile/index.html +92 -92
  63. package/cli/templates/ohos-skeleton/hvigor/hvigor-config.json5 +5 -5
  64. package/cli/templates/ohos-skeleton/hvigorfile.ts +6 -6
  65. package/cli/templates/ohos-skeleton/oh-package.json5 +10 -10
  66. package/native/build_win.bat +62 -62
  67. package/native/core/bridge_core.c +1681 -1626
  68. package/native/core/bridge_core.h +675 -618
  69. package/native/core/bridge_js.h +108 -108
  70. package/native/platforms/harmonyos/README.md +115 -6
  71. package/native/platforms/linux/bridge_linux.c +2787 -2485
  72. package/native/platforms/windows/bridge_win.c +3740 -3248
  73. package/native/tests/gtk_threading_probe.c +143 -143
  74. package/native/tests/test_bridge_core.c +1339 -1228
  75. package/package.json +53 -53
  76. package/prebuilt/linux-x64/cj-tauri +0 -0
  77. package/src/api_system.cj +67 -67
  78. package/src/app.cj +325 -969
  79. package/src/app_events.cj +166 -0
  80. package/src/app_host_ops.cj +287 -0
  81. package/src/app_run.cj +283 -0
  82. package/src/app_spec.cj +76 -76
  83. package/src/arkweb_menu.cj +216 -0
  84. package/src/arkweb_script.cj +142 -142
  85. package/src/capability.cj +409 -409
  86. package/src/clipboard_bridge.cj +178 -0
  87. package/src/dialog_spec.cj +79 -0
  88. package/src/dragdrop.cj +26 -26
  89. package/src/embedded_assets.cj +98 -98
  90. package/src/host.cj +752 -607
  91. package/src/host_arkweb.cj +924 -778
  92. package/src/host_webkit.cj +663 -570
  93. package/src/host_webview2.cj +663 -570
  94. package/src/hotkey.cj +66 -66
  95. package/src/ipc_hub.cj +337 -337
  96. package/src/ipc_message.cj +286 -286
  97. package/src/launch.cj +62 -62
  98. package/src/logging.cj +127 -127
  99. package/src/menu.cj +197 -197
  100. package/src/platform/platform_app_context.cj +77 -77
  101. package/src/platform/platform_assets.cj +33 -33
  102. package/src/platform/platform_discover.cj +176 -176
  103. package/src/platform/platform_env.cj +29 -29
  104. package/src/platform/platform_feature.cj +31 -31
  105. package/src/platform/platform_page_source.cj +87 -87
  106. package/src/platform/platform_target_info.cj +32 -32
  107. package/src/platform_host_provider.cj +87 -87
  108. package/src/plugin.cj +333 -333
  109. package/src/plugins/clipboard/plugin_clipboard.cj +152 -152
  110. package/src/plugins/dialog/plugin_dialog.cj +209 -209
  111. package/src/plugins/fs/plugin_fs.cj +105 -1
  112. package/src/plugins/http/http_backend.cj +131 -0
  113. package/src/plugins/http/http_desktop.cj +195 -0
  114. package/src/plugins/http/http_ohos.cj +204 -0
  115. package/src/plugins/http/plugin_http.cj +310 -459
  116. package/src/plugins/log/plugin_log.cj +105 -105
  117. package/src/plugins/menu/plugin_menu.cj +158 -158
  118. package/src/plugins/notification/plugin_notification.cj +154 -154
  119. package/src/plugins/serial/plugin_serial.cj +458 -454
  120. package/src/plugins/serial/serial_bridge.cj +194 -194
  121. package/src/plugins/serial/serial_manager_ohos.cj +92 -0
  122. package/src/plugins/serial/serial_ohos.cj +529 -0
  123. package/src/plugins/shell/plugin_shell.cj +258 -258
  124. package/src/plugins/sqlite/plugin_sqlite.cj +705 -710
  125. package/src/plugins/sqlite/sqlite_ffi.cj +206 -211
  126. package/src/plugins/ws/plugin_ws.cj +488 -470
  127. package/src/process_hidden.cj +174 -174
  128. package/src/scope.cj +391 -391
  129. package/src/shell_event.cj +69 -69
  130. package/src/tests/app_spec_test.cj +126 -127
  131. package/src/tests/capability_test.cj +243 -243
  132. package/src/tests/dialog_spec_test.cj +73 -0
  133. package/src/tests/fake_host.cj +201 -201
  134. package/src/tests/ipc_hub_test.cj +487 -487
  135. package/src/tests/logging_test.cj +62 -62
  136. package/src/tests/platform_contract_test.cj +251 -251
  137. package/src/tests/plugin_clipboard_test.cj +222 -222
  138. package/src/tests/plugin_dialog_test.cj +237 -237
  139. package/src/tests/plugin_fs_test.cj +207 -0
  140. package/src/tests/plugin_http_test.cj +124 -124
  141. package/src/tests/plugin_notification_test.cj +205 -205
  142. package/src/tests/plugin_serial_test.cj +48 -0
  143. package/src/tests/plugin_test.cj +605 -585
  144. package/src/tests/plugin_ws_test.cj +40 -40
  145. package/src/tests/process_hidden_test.cj +129 -129
  146. package/src/tests/scope_test.cj +350 -350
  147. package/src/tests/system_host_test.cj +99 -81
  148. package/src/tests/urlutil_test.cj +53 -53
  149. package/src/tests/version_test.cj +75 -75
  150. package/src/tests/window_registry_test.cj +123 -123
  151. package/src/tray.cj +90 -90
  152. package/src/urlutil.cj +159 -159
  153. package/src/version.cj +44 -44
  154. package/src/window.cj +51 -51
  155. package/src/window_registry.cj +116 -116
  156. package/prebuilt/win32-x64/cj-tauri.exe +0 -0
  157. package/src/plugins/serial/serial_ohos_stub.cj +0 -61
  158. package/src/plugins/sqlite/sqlite_ohos_stub.cj +0 -91
package/package.json CHANGED
@@ -1,53 +1,53 @@
1
- {
2
- "name": "cj-tauri",
3
- "version": "2.0.0",
4
- "description": "仓颉语言的 Tauri:用仓颉写桌面应用后端 / 系统 WebView 写前端的混合开发框架脚手架 CLI(IPC 双向桥 + 能力安全模型,Windows / Linux / 鸿蒙 PC)",
5
- "keywords": [
6
- "cangjie",
7
- "cangjie-lang",
8
- "仓颉",
9
- "tauri",
10
- "webview",
11
- "webview2",
12
- "webkitgtk",
13
- "desktop",
14
- "gui",
15
- "framework",
16
- "ipc",
17
- "cli",
18
- "scaffold",
19
- "cross-platform",
20
- "windows",
21
- "linux",
22
- "ohos",
23
- "harmonyos"
24
- ],
25
- "license": "MIT",
26
- "bin": {
27
- "cj-tauri": "bin/cj-tauri.js"
28
- },
29
- "files": [
30
- "bin/",
31
- "prebuilt/",
32
- "src/",
33
- "native/",
34
- "cli/",
35
- "cjpm.toml",
36
- "LICENSE",
37
- "README.md"
38
- ],
39
- "engines": {
40
- "node": ">=18"
41
- },
42
- "repository": {
43
- "type": "git",
44
- "url": "git+https://github.com/yangyongzhen/cj-tauri.git"
45
- },
46
- "homepage": "https://atomgit.com/qq8864/cj-tauri#readme",
47
- "bugs": {
48
- "url": "https://atomgit.com/qq8864/cj-tauri/issues"
49
- },
50
- "publishConfig": {
51
- "access": "public"
52
- }
53
- }
1
+ {
2
+ "name": "cj-tauri",
3
+ "version": "2.1.0",
4
+ "description": "仓颉语言的 Tauri:用仓颉写桌面应用后端 / 系统 WebView 写前端的混合开发框架脚手架 CLI(IPC 双向桥 + 能力安全模型,Windows / Linux / 鸿蒙 PC)",
5
+ "keywords": [
6
+ "cangjie",
7
+ "cangjie-lang",
8
+ "仓颉",
9
+ "tauri",
10
+ "webview",
11
+ "webview2",
12
+ "webkitgtk",
13
+ "desktop",
14
+ "gui",
15
+ "framework",
16
+ "ipc",
17
+ "cli",
18
+ "scaffold",
19
+ "cross-platform",
20
+ "windows",
21
+ "linux",
22
+ "ohos",
23
+ "harmonyos"
24
+ ],
25
+ "license": "MIT",
26
+ "bin": {
27
+ "cj-tauri": "bin/cj-tauri.js"
28
+ },
29
+ "files": [
30
+ "bin/",
31
+ "prebuilt/",
32
+ "src/",
33
+ "native/",
34
+ "cli/",
35
+ "cjpm.toml",
36
+ "LICENSE",
37
+ "README.md"
38
+ ],
39
+ "engines": {
40
+ "node": ">=18"
41
+ },
42
+ "repository": {
43
+ "type": "git",
44
+ "url": "git+https://github.com/yangyongzhen/cj-tauri.git"
45
+ },
46
+ "homepage": "https://atomgit.com/qq8864/cj-tauri#readme",
47
+ "bugs": {
48
+ "url": "https://atomgit.com/qq8864/cj-tauri/issues"
49
+ },
50
+ "publishConfig": {
51
+ "access": "public"
52
+ }
53
+ }
Binary file
package/src/api_system.cj CHANGED
@@ -1,67 +1,67 @@
1
- package cjTauri
2
-
3
- import stdx.encoding.json.*
4
-
5
- /**
6
- * 内置系统命令(对标 Tauri core 命令)
7
- * 命令命名空间:system:*
8
- */
9
- public class SystemCommands <: CommandHandler {
10
- public init() {}
11
-
12
- public func handle(cmd: String, args: JsonObject, ipc: IpcContext): JsonValue {
13
- match (cmd) {
14
- case "system:version" => this.version()
15
- case "system:ping" => this.ping(args)
16
- case "system:echo" => this.echo(args)
17
- case "system:devtools" => this.devTools(ipc)
18
- case "system:host" => this.hostCapabilities(ipc)
19
- case _ => throw CommandException("unknown system command: ${cmd}")
20
- }
21
- }
22
-
23
- private func version(): JsonValue {
24
- var obj = JsonObject()
25
- obj.put("name", JsonString("cj-tauri"))
26
- obj.put("version", JsonString(CJ_TAURI_VERSION))
27
- obj.put("protocol", JsonString(CJ_IPC_PROTOCOL))
28
- obj.put("cangjie", JsonString("1.0.5"))
29
- obj.put("platform", JsonString(currentPlatform()))
30
- return obj
31
- }
32
-
33
- private func ping(args: JsonObject): JsonValue {
34
- let _ = args
35
- return JsonString("pong")
36
- }
37
-
38
- private func echo(args: JsonObject): JsonValue {
39
- // 原样返回 args(作为 JsonValue 包装)
40
- return args
41
- }
42
-
43
- /** 打开开发者工具(需在 capability 中声明 system:devtools 才可调用) */
44
- private func devTools(ipc: IpcContext): JsonValue {
45
- ipc.openDevTools()
46
- return JsonBool(true)
47
- }
48
-
49
- /**
50
- * 宿主能力位(RFC-002 §5.3):平台**有没有**菜单 / 托盘 / 文件拖入
51
- *
52
- * 与「应用放不放行」是两回事:能力位说「这台机器上的框架支不支持」,capability 清单说
53
- * 「这个应用准不准」,两者都要过才叫真能用——放行了但平台没有,事件永远不会出现。
54
- * 取**调用方那个窗口**的位域(多窗口下可能不同,如 Linux 托盘取决于桥怎么编的)。
55
- * 与 `system:*` 的其它命令一样,需在清单里声明 `system:host` 才可调用(三处联动)。
56
- *
57
- * 另带 `logFile`(RFC-003 第 5 期):日志落盘是**进程级**的,不是某一台宿主的能力,
58
- * 所以它没有对应的布尔位——空串=没开(stderr 照旧),非空=诊断都落在那个文件里,
59
- * 远程报障先问这一个字段,比让用户去翻平台目录快。
60
- */
61
- private func hostCapabilities(ipc: IpcContext): JsonValue {
62
- let obj = HostCapabilities.fromBits(currentPlatform(), ipc.hostCapabilities())
63
- .toJson().asObject()
64
- obj.put("logFile", JsonString(currentLogFilePath()))
65
- return obj
66
- }
67
- }
1
+ package cjTauri
2
+
3
+ import stdx.encoding.json.*
4
+
5
+ /**
6
+ * 内置系统命令(对标 Tauri core 命令)
7
+ * 命令命名空间:system:*
8
+ */
9
+ public class SystemCommands <: CommandHandler {
10
+ public init() {}
11
+
12
+ public func handle(cmd: String, args: JsonObject, ipc: IpcContext): JsonValue {
13
+ match (cmd) {
14
+ case "system:version" => this.version()
15
+ case "system:ping" => this.ping(args)
16
+ case "system:echo" => this.echo(args)
17
+ case "system:devtools" => this.devTools(ipc)
18
+ case "system:host" => this.hostCapabilities(ipc)
19
+ case _ => throw CommandException("unknown system command: ${cmd}")
20
+ }
21
+ }
22
+
23
+ private func version(): JsonValue {
24
+ var obj = JsonObject()
25
+ obj.put("name", JsonString("cj-tauri"))
26
+ obj.put("version", JsonString(CJ_TAURI_VERSION))
27
+ obj.put("protocol", JsonString(CJ_IPC_PROTOCOL))
28
+ obj.put("cangjie", JsonString("1.0.5"))
29
+ obj.put("platform", JsonString(currentPlatform()))
30
+ return obj
31
+ }
32
+
33
+ private func ping(args: JsonObject): JsonValue {
34
+ let _ = args
35
+ return JsonString("pong")
36
+ }
37
+
38
+ private func echo(args: JsonObject): JsonValue {
39
+ // 原样返回 args(作为 JsonValue 包装)
40
+ return args
41
+ }
42
+
43
+ /** 打开开发者工具(需在 capability 中声明 system:devtools 才可调用) */
44
+ private func devTools(ipc: IpcContext): JsonValue {
45
+ ipc.openDevTools()
46
+ return JsonBool(true)
47
+ }
48
+
49
+ /**
50
+ * 宿主能力位(RFC-002 §5.3):平台**有没有**菜单 / 托盘 / 文件拖入
51
+ *
52
+ * 与「应用放不放行」是两回事:能力位说「这台机器上的框架支不支持」,capability 清单说
53
+ * 「这个应用准不准」,两者都要过才叫真能用——放行了但平台没有,事件永远不会出现。
54
+ * 取**调用方那个窗口**的位域(多窗口下可能不同,如 Linux 托盘取决于桥怎么编的)。
55
+ * 与 `system:*` 的其它命令一样,需在清单里声明 `system:host` 才可调用(三处联动)。
56
+ *
57
+ * 另带 `logFile`(RFC-003 第 5 期):日志落盘是**进程级**的,不是某一台宿主的能力,
58
+ * 所以它没有对应的布尔位——空串=没开(stderr 照旧),非空=诊断都落在那个文件里,
59
+ * 远程报障先问这一个字段,比让用户去翻平台目录快。
60
+ */
61
+ private func hostCapabilities(ipc: IpcContext): JsonValue {
62
+ let obj = HostCapabilities.fromBits(currentPlatform(), ipc.hostCapabilities())
63
+ .toJson().asObject()
64
+ obj.put("logFile", JsonString(currentLogFilePath()))
65
+ return obj
66
+ }
67
+ }