cj-tauri 2.0.0 → 2.1.1

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 (157) hide show
  1. package/README.md +206 -139
  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 +643 -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 +638 -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 +3745 -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/src/api_system.cj +67 -67
  77. package/src/app.cj +335 -969
  78. package/src/app_events.cj +166 -0
  79. package/src/app_host_ops.cj +287 -0
  80. package/src/app_run.cj +283 -0
  81. package/src/app_spec.cj +76 -76
  82. package/src/arkweb_menu.cj +216 -0
  83. package/src/arkweb_script.cj +142 -142
  84. package/src/capability.cj +409 -409
  85. package/src/clipboard_bridge.cj +178 -0
  86. package/src/dialog_spec.cj +79 -0
  87. package/src/dragdrop.cj +26 -26
  88. package/src/embedded_assets.cj +98 -98
  89. package/src/host.cj +752 -607
  90. package/src/host_arkweb.cj +924 -778
  91. package/src/host_webkit.cj +663 -570
  92. package/src/host_webview2.cj +663 -570
  93. package/src/hotkey.cj +66 -66
  94. package/src/ipc_hub.cj +401 -337
  95. package/src/ipc_message.cj +286 -286
  96. package/src/launch.cj +62 -62
  97. package/src/logging.cj +127 -127
  98. package/src/menu.cj +197 -197
  99. package/src/platform/platform_app_context.cj +77 -77
  100. package/src/platform/platform_assets.cj +33 -33
  101. package/src/platform/platform_discover.cj +176 -176
  102. package/src/platform/platform_env.cj +29 -29
  103. package/src/platform/platform_feature.cj +31 -31
  104. package/src/platform/platform_page_source.cj +87 -87
  105. package/src/platform/platform_target_info.cj +32 -32
  106. package/src/platform_host_provider.cj +87 -87
  107. package/src/plugin.cj +333 -333
  108. package/src/plugins/clipboard/plugin_clipboard.cj +152 -152
  109. package/src/plugins/dialog/plugin_dialog.cj +209 -209
  110. package/src/plugins/fs/plugin_fs.cj +105 -1
  111. package/src/plugins/http/http_backend.cj +131 -0
  112. package/src/plugins/http/http_desktop.cj +195 -0
  113. package/src/plugins/http/http_ohos.cj +204 -0
  114. package/src/plugins/http/plugin_http.cj +310 -459
  115. package/src/plugins/log/plugin_log.cj +105 -105
  116. package/src/plugins/menu/plugin_menu.cj +158 -158
  117. package/src/plugins/notification/plugin_notification.cj +154 -154
  118. package/src/plugins/serial/plugin_serial.cj +458 -454
  119. package/src/plugins/serial/serial_bridge.cj +194 -194
  120. package/src/plugins/serial/serial_manager_ohos.cj +92 -0
  121. package/src/plugins/serial/serial_ohos.cj +529 -0
  122. package/src/plugins/shell/plugin_shell.cj +258 -258
  123. package/src/plugins/sqlite/plugin_sqlite.cj +705 -710
  124. package/src/plugins/sqlite/sqlite_ffi.cj +206 -211
  125. package/src/plugins/ws/plugin_ws.cj +488 -470
  126. package/src/process_hidden.cj +174 -174
  127. package/src/scope.cj +391 -391
  128. package/src/shell_event.cj +69 -69
  129. package/src/tests/app_spec_test.cj +130 -127
  130. package/src/tests/capability_test.cj +243 -243
  131. package/src/tests/dialog_spec_test.cj +73 -0
  132. package/src/tests/fake_host.cj +201 -201
  133. package/src/tests/ipc_hub_test.cj +563 -487
  134. package/src/tests/logging_test.cj +62 -62
  135. package/src/tests/platform_contract_test.cj +264 -251
  136. package/src/tests/plugin_clipboard_test.cj +222 -222
  137. package/src/tests/plugin_dialog_test.cj +237 -237
  138. package/src/tests/plugin_fs_test.cj +207 -0
  139. package/src/tests/plugin_http_test.cj +124 -124
  140. package/src/tests/plugin_notification_test.cj +205 -205
  141. package/src/tests/plugin_serial_test.cj +48 -0
  142. package/src/tests/plugin_test.cj +605 -585
  143. package/src/tests/plugin_ws_test.cj +40 -40
  144. package/src/tests/process_hidden_test.cj +129 -129
  145. package/src/tests/scope_test.cj +350 -350
  146. package/src/tests/system_host_test.cj +99 -81
  147. package/src/tests/urlutil_test.cj +53 -53
  148. package/src/tests/version_test.cj +75 -75
  149. package/src/tests/window_registry_test.cj +123 -123
  150. package/src/tray.cj +90 -90
  151. package/src/urlutil.cj +159 -159
  152. package/src/version.cj +44 -44
  153. package/src/window.cj +51 -51
  154. package/src/window_registry.cj +116 -116
  155. package/prebuilt/win32-x64/cj-tauri.exe +0 -0
  156. package/src/plugins/serial/serial_ohos_stub.cj +0 -61
  157. 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.1",
4
+ "description": "Tauri for the Cangjie language: a scaffold CLI for hybrid desktop apps — Cangjie backend (statically compiled) plus a system WebView frontend (HTML/CSS/JS), with a bidirectional IPC bridge and a capability-based security model. Windows, Linux and HarmonyOS 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://github.com/yangyongzhen/cj-tauri#readme",
47
+ "bugs": {
48
+ "url": "https://github.com/yangyongzhen/cj-tauri/issues"
49
+ },
50
+ "publishConfig": {
51
+ "access": "public"
52
+ }
53
+ }
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
+ }