quickwin 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 (103) hide show
  1. package/README.en.md +21 -26
  2. package/README.md +3 -6
  3. package/examples/exec_server.js +139 -31
  4. package/examples/exec_server.tsx +7 -8
  5. package/examples/exec_server_worker.js +1 -1
  6. package/examples/exec_server_worker.ts +2 -2
  7. package/examples/pdf_preview2.js +1 -1
  8. package/examples/pdf_preview2.ts +1 -1
  9. package/examples/pdf_viewer.js +132 -28
  10. package/examples/pdf_viewer.tsx +1 -1
  11. package/examples/test_gallery.js +131 -27
  12. package/examples/test_react_lazy.js +131 -27
  13. package/examples/test_react_listbox.js +131 -27
  14. package/examples/test_root_window.js +131 -27
  15. package/examples/test_tab.js +131 -27
  16. package/lib/certs.js +13 -8
  17. package/lib/certs.ts +13 -8
  18. package/lib/fetch.js +51 -3
  19. package/lib/fetch.ts +38 -3
  20. package/lib/ffi/bind.js +94 -5
  21. package/lib/ffi/bind.ts +107 -10
  22. package/lib/ffi/ctype.js +33 -7
  23. package/lib/ffi/ctype.ts +48 -10
  24. package/lib/ffi/struct.js +92 -14
  25. package/lib/ffi/struct.ts +108 -19
  26. package/lib/react-qw/components/ListView.js +1 -0
  27. package/lib/react-qw/components/PathPicker.js +2 -2
  28. package/lib/react-qw/index.js +1 -1
  29. package/lib/react-qw/index.ts +4 -1
  30. package/lib/text-measure.js +3 -1
  31. package/lib/text-measure.ts +4 -3
  32. package/lib/websocket.js +32 -2
  33. package/lib/websocket.ts +25 -2
  34. package/lib/windows/advapi32.js +53 -0
  35. package/lib/windows/advapi32.ts +64 -0
  36. package/lib/windows/comctl32.js +15 -15
  37. package/lib/windows/comctl32.ts +15 -16
  38. package/lib/windows/comdlg32.js +3 -2
  39. package/lib/windows/comdlg32.ts +3 -2
  40. package/lib/windows/gdi32.js +328 -26
  41. package/lib/windows/gdi32.ts +349 -26
  42. package/lib/windows/kernel32.js +206 -10
  43. package/lib/windows/kernel32.ts +225 -10
  44. package/lib/windows/msimg32.js +38 -0
  45. package/lib/windows/msimg32.ts +45 -0
  46. package/lib/windows/ntdll.js +3 -2
  47. package/lib/windows/ntdll.ts +3 -2
  48. package/lib/windows/ole32.js +1 -1
  49. package/lib/windows/ole32.ts +1 -1
  50. package/lib/windows/psapi.js +32 -0
  51. package/lib/windows/psapi.ts +37 -0
  52. package/lib/windows/shell32.js +5 -3
  53. package/lib/windows/shell32.ts +5 -3
  54. package/lib/windows/structs.js +135 -0
  55. package/lib/windows/structs.ts +144 -0
  56. package/lib/windows/user32.js +202 -99
  57. package/lib/windows/user32.ts +204 -99
  58. package/lib/windows/version.js +29 -0
  59. package/lib/windows/version.ts +35 -0
  60. package/lib/windows/winspool.js +71 -0
  61. package/lib/windows/winspool.ts +80 -0
  62. package/package.json +1 -1
  63. package/quickwin.d.ts +11 -5
  64. package/quickwin_const.d.ts +136 -0
  65. package/qwin-nowasm-x86.exe +0 -0
  66. package/qwin-nowasm.exe +0 -0
  67. package/qwin-x86.exe +0 -0
  68. package/qwin.exe +0 -0
  69. package/test/run.js +7 -0
  70. package/test/run.ts +7 -0
  71. package/test/test_basic_fetch.js +21 -0
  72. package/test/test_basic_fetch.ts +17 -0
  73. package/test/test_ffi.js +6 -6
  74. package/test/test_ffi.ts +6 -6
  75. package/test/test_ffi_abi.js +55 -0
  76. package/test/test_ffi_abi.ts +56 -0
  77. package/test/test_ffi_array.js +116 -0
  78. package/test/test_ffi_array.ts +141 -0
  79. package/test/test_ffi_bind.js +82 -0
  80. package/test/test_ffi_bind.ts +71 -0
  81. package/test/test_files.js +102 -0
  82. package/test/test_files.ts +121 -0
  83. package/test/test_gdi_draw.js +681 -0
  84. package/test/test_gdi_draw.ts +725 -0
  85. package/test/test_net_fetch.js +4 -3
  86. package/test/test_net_fetch.ts +4 -3
  87. package/test/test_printer.js +137 -0
  88. package/test/test_printer.ts +148 -0
  89. package/test/test_proc.js +141 -0
  90. package/test/test_proc.ts +163 -0
  91. package/test/test_react_complex.js +131 -27
  92. package/test/test_react_counter.js +131 -27
  93. package/test/test_react_flex.js +131 -27
  94. package/test/test_react_hidden.js +131 -27
  95. package/test/test_react_listview_link.js +131 -27
  96. package/test/test_react_notify.js +131 -27
  97. package/test/test_react_render.js +131 -27
  98. package/test/test_registry.js +74 -0
  99. package/test/test_registry.ts +95 -0
  100. package/test/test_sysinfo.js +122 -0
  101. package/test/test_sysinfo.ts +141 -0
  102. package/test/test_wolfssl_read.js +45 -44
  103. package/test/test_wolfssl_read.ts +42 -42
package/README.en.md CHANGED
@@ -41,7 +41,7 @@ quickwin script.js # run a script
41
41
  quickwin -o CON script.js # run with console (AllocConsole)
42
42
  quickwin -o LOG script.js # run with auto-generated log file
43
43
  quickwin -e "console.log('hi')" # execute expression
44
- quickwin -- script.js --flag # -- stops option parsing
44
+ quickwin script.js --flag # everything after the script goes to it
45
45
  ```
46
46
 
47
47
  ### Options
@@ -53,10 +53,10 @@ quickwin -- script.js --flag # -- stops option parsing
53
53
  | `-o LOG` | Redirect stdout+stderr to `log_YYYY_MM_DD_HH_MM_SS.txt` (exe directory) |
54
54
  | `-o <file>` | Redirect stdout+stderr to specified file |
55
55
  | `-d` | Enable HTTP debug logging |
56
- | `--` | Stop option parsing, remaining args passed to script |
57
56
 
58
- All unknown flags are transparently forwarded to `scriptArgs` — no error,
59
- no consumption. Script file is the first non-flag argument after option parsing.
57
+ The command line parses in fixed slots: `exe [-d] [-o target] [-e code | file]`;
58
+ everything past the slots reaches `scriptArgs` untouched — no error, no
59
+ consumption. The file slot rejects `-`-leading names (run those as `./-name.js`).
60
60
 
61
61
  ## Embedded Script
62
62
 
@@ -168,8 +168,7 @@ Both sides must set `onmessage = null` when communication is complete. This rele
168
168
 
169
169
  ### Prerequisites
170
170
 
171
- - MSYS2 UCRT64 or MINGW64
172
- - Node.js (for TypeScript compilation via tsc)
171
+ - **podman** (dev container; build/test/QEMU verification all run inside the container, consistent with CI)
173
172
  - Git (for submodules)
174
173
 
175
174
  ### Build
@@ -178,38 +177,34 @@ Both sides must set `onmessage = null` when communication is complete. This rele
178
177
  git clone --recursive https://github.com/xna00/quickwin.git
179
178
  cd quickwin
180
179
 
181
- .\run.ps1 "make wamr" # build WAMR library (first time only)
182
- .\run.ps1 "make small" # build qwin.exe (-Os + LTO, ~1.5MB)
183
- .\run.ps1 "make js" # compile TypeScript
184
- .\run.ps1 "make test" # run all tests
180
+ ./docker/dev-podman.sh up # start dev container (reuses ghcr.io/xna00/quickwin-dev)
181
+ podman exec quickwin-dev bash -lc 'cd /workspace && make js && make cc64 && make test TEST=-net'
185
182
  ```
186
183
 
187
- `make nowasm` produces a smaller `_build/qwin-nowasm.exe` without WASM/WAMR
188
- (no `WebAssembly` global); run `make test TEST=-wasm` to skip WASM tests on it.
184
+ `make cc64` produces `_build/qwin.exe`. `cc64-nowasm` produces a smaller
185
+ `_build/qwin-nowasm.exe` without WASM/WAMR (no `WebAssembly` global); for
186
+ that build run `make test TEST=-wasm` to skip WASM tests.
189
187
 
190
188
  ### Build Targets
191
189
 
192
190
  | Target | Description |
193
191
  |--------|-------------|
194
- | `make` / `make nodebug` | fast build |
195
- | `make small` | `-Os` + LTO + strip, ~1.5MB (recommended) |
196
- | `make minimal` | `small` + UPX compression |
197
- | `make release` | `-O2` + LTO + strip (not `-Os` optimized) |
198
- | `make debug` | debug build with bridge logs |
199
- | `make nowasm` | no WASM/WAMR build → `_build/qwin-nowasm.exe` (~1.2MB, no `WebAssembly` global) |
200
- | `make cc64-small` | cross-compile x86_64 `_build/qwin.exe` (`-Os`, used by CI) |
201
- | `make cc32-small` | cross-compile i686 `_build/qwin-x86.exe` (`-Os`, XP-compatible, used by CI) |
192
+ | `make cc64` | cross-compile x86_64 → `_build/qwin.exe` (default target, `BUILD=fast`) |
193
+ | `make cc32` | cross-compile i686/XP → `_build/qwin-x86.exe` |
194
+ | `make cc64-nowasm` / `cc32-nowasm` | no WASM/WAMR builds |
195
+ | `BUILD=fast\|small\|debug` | build flavor: `make cc64 BUILD=small` = `-Os`+LTO (~1.5MB, used by CI) |
202
196
  | `make js` | compile TypeScript via tsc |
203
- | `make wasm` | compile WAT → WASM fixtures |
197
+ | `make wasm` | compile `test/*.wat` → WASM fixtures |
204
198
  | `make test` | run all tests |
205
199
  | `make test TEST=-net` | skip network tests (fast) |
206
200
  | `make test TEST=wasm` | run WASM tests only |
207
- | `make wamr` | rebuild WAMR library |
208
- | `make embed-js` | embed `embed.js` into exe (use `JS_EMBED=file.js`) |
209
- | `make embed-js-br` | embed brotli-compressed JS into exe |
210
- | `make exec_server` | Bundle `examples/exec_server.ts` and brotli-embed into `_build/exec_server.exe` |
201
+ | `make exec_server` | bundle `examples/exec_server.ts` and brotli-embed into `_build/exec_server.exe` |
202
+ | `make embed-js` / `embed-js-br` | embed JS (brotli-compressed) into exe |
211
203
  | `make npm-pkg` | package into `dist/quickwin/` |
212
- | `make clean` | clean build artifacts |
204
+ | `make gen-const` | regenerate `quickwin_const.d.ts` |
205
+ | `make clean` / `distclean` | clean (wipes all of `_build/`; afterwards run `make js wasm`) |
206
+
207
+ Build and troubleshooting details: `.agents/DEVELOPMENT_WORKFLOW.md`.
213
208
 
214
209
  ## License
215
210
 
package/README.md CHANGED
@@ -41,7 +41,7 @@ quickwin script.js # 运行脚本
41
41
  quickwin -o CON script.js # 带控制台运行(AllocConsole)
42
42
  quickwin -o LOG script.js # 自动生成日志文件运行
43
43
  quickwin -e "console.log('hi')" # 执行表达式
44
- quickwin -- script.js --flag # -- 停止选项解析
44
+ quickwin script.js --flag # 槽位之后的参数全部传给脚本
45
45
  ```
46
46
 
47
47
  ### 选项
@@ -53,9 +53,8 @@ quickwin -- script.js --flag # -- 停止选项解析
53
53
  | `-o LOG` | 将 stdout+stderr 重定向到 `log_YYYY_MM_DD_HH_MM_SS.txt`(exe 所在目录) |
54
54
  | `-o <file>` | 将 stdout+stderr 重定向到指定文件 |
55
55
  | `-d` | 开启 HTTP 调试日志 |
56
- | `--` | 停止选项解析,其余参数传给脚本 |
57
56
 
58
- 所有未知参数都会透明转发给 `scriptArgs` —— 不报错、不消费。选项解析后的第一个非参数即脚本文件。
57
+ 命令行按固定槽位解析:`exe [-d] [-o 目标] [-e code | 脚本文件]`;槽位之后的所有参数原样进入 `scriptArgs`,不报错、不消费。文件槽不接受 `-` 开头的文件名(用 `./-name.js` 运行这类脚本)。
59
58
 
60
59
  ## 内嵌脚本
61
60
 
@@ -170,8 +169,6 @@ parent.onmessage = (e) => {
170
169
  - **podman**(开发容器;构建/测试/QEMU 验证都在容器内完成,与 CI 一致)
171
170
  - Git(用于子模块)
172
171
 
173
- > 也支持 MSYS2 原生直接 `make`,详见 `.agents/DEVELOPMENT_WORKFLOW.md`。
174
-
175
172
  ### 构建
176
173
 
177
174
  ```bash
@@ -195,7 +192,7 @@ podman exec quickwin-dev bash -lc 'cd /workspace && make js && make cc64 && make
195
192
  | `make cc64-nowasm` / `cc32-nowasm` | 无 WASM/WAMR 版 |
196
193
  | `BUILD=fast\|small\|debug` | 构建 flavor:`make cc64 BUILD=small` = `-Os`+LTO(约 1.5MB,CI 用) |
197
194
  | `make js` | 通过 tsc 编译 TypeScript |
198
- | `make wasm` / `make wat` | 编译 WAT → WASM fixtures |
195
+ | `make wasm` | 编译 `test/*.wat` → WASM fixtures |
199
196
  | `make test` | 运行全部测试 |
200
197
  | `make test TEST=-net` | 跳过网络测试(快速) |
201
198
  | `make test TEST=wasm` | 仅运行 WASM 测试 |