@gtkx/ffi 0.1.5 → 0.1.7

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 (1286) hide show
  1. package/dist/codegen/ffi-generator.d.ts +47 -1
  2. package/dist/codegen/ffi-generator.js +1003 -64
  3. package/dist/generated/cairo/context.d.ts +5 -0
  4. package/dist/generated/cairo/context.js +9 -0
  5. package/dist/generated/cairo/device.d.ts +5 -0
  6. package/dist/generated/cairo/device.js +9 -0
  7. package/dist/generated/cairo/font-face.d.ts +5 -0
  8. package/dist/generated/cairo/font-face.js +9 -0
  9. package/dist/generated/cairo/font-options.d.ts +5 -0
  10. package/dist/generated/cairo/font-options.js +9 -0
  11. package/dist/generated/cairo/glyph.d.ts +16 -0
  12. package/dist/generated/cairo/glyph.js +35 -0
  13. package/dist/generated/cairo/index.d.ts +13 -1
  14. package/dist/generated/cairo/index.js +13 -1
  15. package/dist/generated/cairo/pattern.d.ts +5 -0
  16. package/dist/generated/cairo/pattern.js +9 -0
  17. package/dist/generated/cairo/rectangle-int.d.ts +19 -0
  18. package/dist/generated/cairo/rectangle-int.js +43 -0
  19. package/dist/generated/cairo/rectangle.d.ts +19 -0
  20. package/dist/generated/cairo/rectangle.js +43 -0
  21. package/dist/generated/cairo/region.d.ts +5 -0
  22. package/dist/generated/cairo/region.js +9 -0
  23. package/dist/generated/cairo/scaled-font.d.ts +5 -0
  24. package/dist/generated/cairo/scaled-font.js +9 -0
  25. package/dist/generated/cairo/surface.d.ts +5 -0
  26. package/dist/generated/cairo/surface.js +9 -0
  27. package/dist/generated/cairo/text-cluster.d.ts +13 -0
  28. package/dist/generated/cairo/text-cluster.js +27 -0
  29. package/dist/generated/gdk/app-launch-context.d.ts +5 -3
  30. package/dist/generated/gdk/app-launch-context.js +8 -2
  31. package/dist/generated/gdk/cairo-context.d.ts +2 -1
  32. package/dist/generated/gdk/cairo-context.js +13 -2
  33. package/dist/generated/gdk/cicp-params.d.ts +2 -1
  34. package/dist/generated/gdk/cicp-params.js +23 -7
  35. package/dist/generated/gdk/clipboard.d.ts +20 -19
  36. package/dist/generated/gdk/clipboard.js +110 -161
  37. package/dist/generated/gdk/color-state.d.ts +17 -0
  38. package/dist/generated/gdk/color-state.js +148 -0
  39. package/dist/generated/gdk/content-deserializer.d.ts +7 -4
  40. package/dist/generated/gdk/content-deserializer.js +30 -8
  41. package/dist/generated/gdk/content-formats-builder.d.ts +13 -0
  42. package/dist/generated/gdk/content-formats-builder.js +117 -0
  43. package/dist/generated/gdk/content-formats.d.ts +26 -0
  44. package/dist/generated/gdk/content-formats.js +296 -0
  45. package/dist/generated/gdk/content-provider.d.ts +13 -10
  46. package/dist/generated/gdk/content-provider.js +58 -51
  47. package/dist/generated/gdk/content-serializer.d.ts +7 -4
  48. package/dist/generated/gdk/content-serializer.js +30 -8
  49. package/dist/generated/gdk/cursor.d.ts +8 -7
  50. package/dist/generated/gdk/cursor.js +20 -9
  51. package/dist/generated/gdk/device-pad.d.ts +4 -2
  52. package/dist/generated/gdk/device-pad.js +7 -0
  53. package/dist/generated/gdk/device.d.ts +15 -10
  54. package/dist/generated/gdk/device.js +28 -5
  55. package/dist/generated/gdk/display-manager.d.ts +6 -5
  56. package/dist/generated/gdk/display-manager.js +13 -3
  57. package/dist/generated/gdk/display.d.ts +23 -12
  58. package/dist/generated/gdk/display.js +81 -23
  59. package/dist/generated/gdk/dmabuf-formats.d.ts +12 -0
  60. package/dist/generated/gdk/dmabuf-formats.js +102 -0
  61. package/dist/generated/gdk/dmabuf-texture-builder.d.ts +21 -17
  62. package/dist/generated/gdk/dmabuf-texture-builder.js +72 -20
  63. package/dist/generated/gdk/dndevent.d.ts +2 -1
  64. package/dist/generated/gdk/dndevent.js +7 -1
  65. package/dist/generated/gdk/drag-surface.d.ts +4 -3
  66. package/dist/generated/gdk/drag-surface.js +7 -28
  67. package/dist/generated/gdk/drag.d.ts +17 -12
  68. package/dist/generated/gdk/drag.js +50 -10
  69. package/dist/generated/gdk/draw-context.d.ts +9 -6
  70. package/dist/generated/gdk/draw-context.js +33 -6
  71. package/dist/generated/gdk/drop.d.ts +19 -14
  72. package/dist/generated/gdk/drop.js +82 -77
  73. package/dist/generated/gdk/event-sequence.d.ts +5 -0
  74. package/dist/generated/gdk/event-sequence.js +9 -0
  75. package/dist/generated/gdk/event.d.ts +16 -10
  76. package/dist/generated/gdk/event.js +57 -11
  77. package/dist/generated/gdk/file-list.d.ts +8 -0
  78. package/dist/generated/gdk/file-list.js +40 -0
  79. package/dist/generated/gdk/frame-clock.d.ts +3 -2
  80. package/dist/generated/gdk/frame-clock.js +25 -4
  81. package/dist/generated/gdk/frame-timings.d.ts +13 -0
  82. package/dist/generated/gdk/frame-timings.js +84 -0
  83. package/dist/generated/gdk/functions.d.ts +42 -29
  84. package/dist/generated/gdk/functions.js +256 -96
  85. package/dist/generated/gdk/glcontext.d.ts +3 -5
  86. package/dist/generated/gdk/glcontext.js +17 -22
  87. package/dist/generated/gdk/gltexture-builder.d.ts +21 -17
  88. package/dist/generated/gdk/gltexture-builder.js +63 -16
  89. package/dist/generated/gdk/gltexture.d.ts +2 -1
  90. package/dist/generated/gdk/gltexture.js +3 -3
  91. package/dist/generated/gdk/grab-broken-event.d.ts +2 -1
  92. package/dist/generated/gdk/grab-broken-event.js +7 -1
  93. package/dist/generated/gdk/index.d.ts +21 -9
  94. package/dist/generated/gdk/index.js +21 -9
  95. package/dist/generated/gdk/memory-texture-builder.d.ts +21 -17
  96. package/dist/generated/gdk/memory-texture-builder.js +70 -18
  97. package/dist/generated/gdk/memory-texture.d.ts +2 -1
  98. package/dist/generated/gdk/memory-texture.js +3 -3
  99. package/dist/generated/gdk/monitor.d.ts +6 -4
  100. package/dist/generated/gdk/monitor.js +15 -2
  101. package/dist/generated/gdk/paintable.d.ts +7 -5
  102. package/dist/generated/gdk/paintable.js +14 -31
  103. package/dist/generated/gdk/popup-layout.d.ts +25 -0
  104. package/dist/generated/gdk/popup-layout.js +282 -0
  105. package/dist/generated/gdk/popup.d.ts +8 -6
  106. package/dist/generated/gdk/popup.js +20 -9
  107. package/dist/generated/gdk/rectangle.d.ts +24 -0
  108. package/dist/generated/gdk/rectangle.js +129 -0
  109. package/dist/generated/gdk/rgba.d.ts +27 -0
  110. package/dist/generated/gdk/rgba.js +125 -0
  111. package/dist/generated/gdk/scroll-event.d.ts +1 -1
  112. package/dist/generated/gdk/scroll-event.js +1 -1
  113. package/dist/generated/gdk/seat.d.ts +6 -4
  114. package/dist/generated/gdk/seat.js +19 -3
  115. package/dist/generated/gdk/surface.d.ts +28 -20
  116. package/dist/generated/gdk/surface.js +95 -33
  117. package/dist/generated/gdk/texture-downloader.d.ts +22 -0
  118. package/dist/generated/gdk/texture-downloader.js +198 -0
  119. package/dist/generated/gdk/texture.d.ts +24 -8
  120. package/dist/generated/gdk/texture.js +157 -11
  121. package/dist/generated/gdk/toplevel-layout.d.ts +18 -0
  122. package/dist/generated/gdk/toplevel-layout.js +160 -0
  123. package/dist/generated/gdk/toplevel.d.ts +15 -31
  124. package/dist/generated/gdk/toplevel.js +19 -99
  125. package/dist/generated/gdkpixbuf/functions.d.ts +1 -1
  126. package/dist/generated/gdkpixbuf/functions.js +3 -2
  127. package/dist/generated/gdkpixbuf/index.d.ts +2 -1
  128. package/dist/generated/gdkpixbuf/index.js +2 -1
  129. package/dist/generated/gdkpixbuf/pixbuf-animation-iter.d.ts +2 -1
  130. package/dist/generated/gdkpixbuf/pixbuf-animation-iter.js +8 -2
  131. package/dist/generated/gdkpixbuf/pixbuf-animation.d.ts +9 -6
  132. package/dist/generated/gdkpixbuf/pixbuf-animation.js +32 -15
  133. package/dist/generated/gdkpixbuf/pixbuf-format.d.ts +32 -0
  134. package/dist/generated/gdkpixbuf/pixbuf-format.js +162 -0
  135. package/dist/generated/gdkpixbuf/pixbuf-loader.d.ts +8 -4
  136. package/dist/generated/gdkpixbuf/pixbuf-loader.js +62 -19
  137. package/dist/generated/gdkpixbuf/pixbuf-non-anim.d.ts +2 -1
  138. package/dist/generated/gdkpixbuf/pixbuf-non-anim.js +1 -1
  139. package/dist/generated/gdkpixbuf/pixbuf-simple-anim.d.ts +2 -1
  140. package/dist/generated/gdkpixbuf/pixbuf-simple-anim.js +1 -1
  141. package/dist/generated/gdkpixbuf/pixbuf.d.ts +36 -35
  142. package/dist/generated/gdkpixbuf/pixbuf.js +229 -161
  143. package/dist/generated/gio/action-group.d.ts +13 -11
  144. package/dist/generated/gio/action-group.js +106 -55
  145. package/dist/generated/gio/action-map.d.ts +7 -4
  146. package/dist/generated/gio/action-map.js +16 -3
  147. package/dist/generated/gio/action.d.ts +11 -13
  148. package/dist/generated/gio/action.js +68 -27
  149. package/dist/generated/gio/app-info.d.ts +15 -9
  150. package/dist/generated/gio/app-info.js +104 -45
  151. package/dist/generated/gio/app-launch-context.d.ts +3 -2
  152. package/dist/generated/gio/app-launch-context.js +6 -6
  153. package/dist/generated/gio/application-command-line.d.ts +7 -4
  154. package/dist/generated/gio/application-command-line.js +39 -6
  155. package/dist/generated/gio/application.d.ts +38 -10
  156. package/dist/generated/gio/application.js +392 -15
  157. package/dist/generated/gio/async-initable.d.ts +10 -5
  158. package/dist/generated/gio/async-initable.js +38 -15
  159. package/dist/generated/gio/async-result.d.ts +6 -3
  160. package/dist/generated/gio/async-result.js +25 -6
  161. package/dist/generated/gio/buffered-input-stream.d.ts +15 -6
  162. package/dist/generated/gio/buffered-input-stream.js +134 -26
  163. package/dist/generated/gio/buffered-output-stream.d.ts +10 -2
  164. package/dist/generated/gio/buffered-output-stream.js +97 -4
  165. package/dist/generated/gio/bytes-icon.d.ts +16 -3
  166. package/dist/generated/gio/bytes-icon.js +163 -4
  167. package/dist/generated/gio/cancellable.d.ts +3 -2
  168. package/dist/generated/gio/cancellable.js +28 -11
  169. package/dist/generated/gio/charset-converter.d.ts +8 -0
  170. package/dist/generated/gio/charset-converter.js +133 -0
  171. package/dist/generated/gio/converter-input-stream.d.ts +12 -3
  172. package/dist/generated/gio/converter-input-stream.js +91 -3
  173. package/dist/generated/gio/converter-output-stream.d.ts +14 -3
  174. package/dist/generated/gio/converter-output-stream.js +128 -3
  175. package/dist/generated/gio/converter.d.ts +6 -3
  176. package/dist/generated/gio/converter.js +43 -15
  177. package/dist/generated/gio/credentials.d.ts +1 -1
  178. package/dist/generated/gio/credentials.js +40 -19
  179. package/dist/generated/gio/data-input-stream.d.ts +21 -19
  180. package/dist/generated/gio/data-input-stream.js +153 -105
  181. package/dist/generated/gio/data-output-stream.d.ts +17 -9
  182. package/dist/generated/gio/data-output-stream.js +174 -41
  183. package/dist/generated/gio/datagram-based.d.ts +11 -7
  184. package/dist/generated/gio/datagram-based.js +57 -23
  185. package/dist/generated/gio/dbus-action-group.d.ts +20 -1
  186. package/dist/generated/gio/dbus-action-group.js +338 -1
  187. package/dist/generated/gio/dbus-annotation-info.d.ts +16 -0
  188. package/dist/generated/gio/dbus-annotation-info.js +80 -0
  189. package/dist/generated/gio/dbus-arg-info.d.ts +16 -0
  190. package/dist/generated/gio/dbus-arg-info.js +61 -0
  191. package/dist/generated/gio/dbus-auth-observer.d.ts +3 -1
  192. package/dist/generated/gio/dbus-auth-observer.js +2 -2
  193. package/dist/generated/gio/dbus-connection.d.ts +47 -31
  194. package/dist/generated/gio/dbus-connection.js +521 -187
  195. package/dist/generated/gio/dbus-interface-info.d.ts +28 -0
  196. package/dist/generated/gio/dbus-interface-info.js +189 -0
  197. package/dist/generated/gio/dbus-interface-skeleton.d.ts +13 -6
  198. package/dist/generated/gio/dbus-interface-skeleton.js +85 -12
  199. package/dist/generated/gio/dbus-interface.d.ts +10 -6
  200. package/dist/generated/gio/dbus-interface.js +34 -5
  201. package/dist/generated/gio/dbus-menu-model.d.ts +2 -1
  202. package/dist/generated/gio/dbus-menu-model.js +1 -1
  203. package/dist/generated/gio/dbus-message.d.ts +13 -11
  204. package/dist/generated/gio/dbus-message.js +115 -35
  205. package/dist/generated/gio/dbus-method-info.d.ts +18 -0
  206. package/dist/generated/gio/dbus-method-info.js +78 -0
  207. package/dist/generated/gio/dbus-method-invocation.d.ts +18 -12
  208. package/dist/generated/gio/dbus-method-invocation.js +74 -21
  209. package/dist/generated/gio/dbus-node-info.d.ts +19 -0
  210. package/dist/generated/gio/dbus-node-info.js +121 -0
  211. package/dist/generated/gio/dbus-object-manager-client.d.ts +22 -8
  212. package/dist/generated/gio/dbus-object-manager-client.js +203 -23
  213. package/dist/generated/gio/dbus-object-manager-server.d.ts +15 -7
  214. package/dist/generated/gio/dbus-object-manager-server.js +67 -5
  215. package/dist/generated/gio/dbus-object-manager.d.ts +8 -5
  216. package/dist/generated/gio/dbus-object-manager.js +21 -39
  217. package/dist/generated/gio/dbus-object-proxy.d.ts +8 -3
  218. package/dist/generated/gio/dbus-object-proxy.js +42 -2
  219. package/dist/generated/gio/dbus-object-skeleton.d.ts +7 -2
  220. package/dist/generated/gio/dbus-object-skeleton.js +36 -2
  221. package/dist/generated/gio/dbus-object.d.ts +6 -4
  222. package/dist/generated/gio/dbus-object.js +14 -30
  223. package/dist/generated/gio/dbus-property-info.d.ts +18 -0
  224. package/dist/generated/gio/dbus-property-info.js +64 -0
  225. package/dist/generated/gio/dbus-proxy.d.ts +36 -20
  226. package/dist/generated/gio/dbus-proxy.js +374 -79
  227. package/dist/generated/gio/dbus-server.d.ts +5 -2
  228. package/dist/generated/gio/dbus-server.js +31 -2
  229. package/dist/generated/gio/dbus-signal-info.d.ts +17 -0
  230. package/dist/generated/gio/dbus-signal-info.js +68 -0
  231. package/dist/generated/gio/debug-controller-dbus.d.ts +7 -2
  232. package/dist/generated/gio/debug-controller-dbus.js +51 -2
  233. package/dist/generated/gio/debug-controller.d.ts +4 -4
  234. package/dist/generated/gio/debug-controller.js +7 -6
  235. package/dist/generated/gio/drive.d.ts +20 -15
  236. package/dist/generated/gio/drive.js +89 -76
  237. package/dist/generated/gio/dtls-client-connection.d.ts +7 -9
  238. package/dist/generated/gio/dtls-client-connection.js +15 -17
  239. package/dist/generated/gio/dtls-connection.d.ts +28 -39
  240. package/dist/generated/gio/dtls-connection.js +124 -137
  241. package/dist/generated/gio/dtls-server-connection.d.ts +4 -5
  242. package/dist/generated/gio/dtls-server-connection.js +5 -4
  243. package/dist/generated/gio/emblem.d.ts +11 -4
  244. package/dist/generated/gio/emblem.js +56 -3
  245. package/dist/generated/gio/emblemed-icon.d.ts +11 -4
  246. package/dist/generated/gio/emblemed-icon.js +57 -4
  247. package/dist/generated/gio/file-attribute-info-list.d.ts +14 -0
  248. package/dist/generated/gio/file-attribute-info-list.js +99 -0
  249. package/dist/generated/gio/file-attribute-matcher.d.ts +14 -0
  250. package/dist/generated/gio/file-attribute-matcher.js +121 -0
  251. package/dist/generated/gio/file-enumerator.d.ts +13 -9
  252. package/dist/generated/gio/file-enumerator.js +78 -36
  253. package/dist/generated/gio/file-icon.d.ts +17 -3
  254. package/dist/generated/gio/file-icon.js +157 -2
  255. package/dist/generated/gio/file-info.d.ts +20 -16
  256. package/dist/generated/gio/file-info.js +105 -26
  257. package/dist/generated/gio/file-input-stream.d.ts +12 -3
  258. package/dist/generated/gio/file-input-stream.js +129 -17
  259. package/dist/generated/gio/file-iostream.d.ts +12 -3
  260. package/dist/generated/gio/file-iostream.js +129 -17
  261. package/dist/generated/gio/file-monitor.d.ts +2 -1
  262. package/dist/generated/gio/file-monitor.js +2 -2
  263. package/dist/generated/gio/file-output-stream.d.ts +12 -3
  264. package/dist/generated/gio/file-output-stream.js +129 -17
  265. package/dist/generated/gio/file.d.ts +139 -123
  266. package/dist/generated/gio/file.js +1185 -601
  267. package/dist/generated/gio/filter-input-stream.d.ts +2 -2
  268. package/dist/generated/gio/filter-input-stream.js +6 -1
  269. package/dist/generated/gio/filter-output-stream.d.ts +2 -2
  270. package/dist/generated/gio/filter-output-stream.js +6 -1
  271. package/dist/generated/gio/functions.d.ts +120 -89
  272. package/dist/generated/gio/functions.js +795 -357
  273. package/dist/generated/gio/icon.d.ts +7 -4
  274. package/dist/generated/gio/icon.js +21 -3
  275. package/dist/generated/gio/index.d.ts +61 -47
  276. package/dist/generated/gio/index.js +61 -47
  277. package/dist/generated/gio/inet-address-mask.d.ts +9 -6
  278. package/dist/generated/gio/inet-address-mask.js +39 -4
  279. package/dist/generated/gio/inet-address.d.ts +1 -1
  280. package/dist/generated/gio/inet-address.js +1 -1
  281. package/dist/generated/gio/inet-socket-address.d.ts +4 -3
  282. package/dist/generated/gio/inet-socket-address.js +8 -2
  283. package/dist/generated/gio/initable.d.ts +6 -3
  284. package/dist/generated/gio/initable.js +18 -5
  285. package/dist/generated/gio/input-stream.d.ts +18 -15
  286. package/dist/generated/gio/input-stream.js +158 -83
  287. package/dist/generated/gio/iostream.d.ts +13 -9
  288. package/dist/generated/gio/iostream.js +61 -28
  289. package/dist/generated/gio/list-model.d.ts +6 -4
  290. package/dist/generated/gio/list-model.js +14 -33
  291. package/dist/generated/gio/list-store.d.ts +13 -7
  292. package/dist/generated/gio/list-store.js +76 -10
  293. package/dist/generated/gio/loadable-icon.d.ts +10 -5
  294. package/dist/generated/gio/loadable-icon.js +44 -17
  295. package/dist/generated/gio/memory-input-stream.d.ts +14 -2
  296. package/dist/generated/gio/memory-input-stream.js +182 -8
  297. package/dist/generated/gio/memory-monitor.d.ts +4 -3
  298. package/dist/generated/gio/memory-monitor.js +6 -30
  299. package/dist/generated/gio/memory-output-stream.d.ts +15 -1
  300. package/dist/generated/gio/memory-output-stream.js +226 -5
  301. package/dist/generated/gio/menu-attribute-iter.d.ts +3 -2
  302. package/dist/generated/gio/menu-attribute-iter.js +21 -3
  303. package/dist/generated/gio/menu-item.d.ts +14 -11
  304. package/dist/generated/gio/menu-item.js +46 -17
  305. package/dist/generated/gio/menu-link-iter.d.ts +3 -2
  306. package/dist/generated/gio/menu-link-iter.js +7 -1
  307. package/dist/generated/gio/menu-model.d.ts +7 -4
  308. package/dist/generated/gio/menu-model.js +40 -8
  309. package/dist/generated/gio/menu.d.ts +10 -9
  310. package/dist/generated/gio/menu.js +9 -9
  311. package/dist/generated/gio/mount-operation.js +1 -1
  312. package/dist/generated/gio/mount.d.ts +30 -22
  313. package/dist/generated/gio/mount.js +139 -92
  314. package/dist/generated/gio/native-socket-address.js +2 -2
  315. package/dist/generated/gio/network-address.d.ts +4 -0
  316. package/dist/generated/gio/network-address.js +54 -8
  317. package/dist/generated/gio/network-monitor.d.ts +10 -9
  318. package/dist/generated/gio/network-monitor.js +33 -52
  319. package/dist/generated/gio/network-service.d.ts +4 -0
  320. package/dist/generated/gio/network-service.js +35 -0
  321. package/dist/generated/gio/notification.d.ts +5 -3
  322. package/dist/generated/gio/notification.js +13 -5
  323. package/dist/generated/gio/output-stream.d.ts +30 -26
  324. package/dist/generated/gio/output-stream.js +215 -129
  325. package/dist/generated/gio/permission.d.ts +8 -6
  326. package/dist/generated/gio/permission.js +47 -26
  327. package/dist/generated/gio/pollable-input-stream.d.ts +8 -4
  328. package/dist/generated/gio/pollable-input-stream.js +33 -9
  329. package/dist/generated/gio/pollable-output-stream.d.ts +9 -5
  330. package/dist/generated/gio/pollable-output-stream.js +44 -15
  331. package/dist/generated/gio/power-profile-monitor.d.ts +4 -3
  332. package/dist/generated/gio/power-profile-monitor.js +7 -3
  333. package/dist/generated/gio/property-action.d.ts +14 -4
  334. package/dist/generated/gio/property-action.js +122 -1
  335. package/dist/generated/gio/proxy-address-enumerator.d.ts +5 -3
  336. package/dist/generated/gio/proxy-address.d.ts +2 -1
  337. package/dist/generated/gio/proxy-address.js +1 -1
  338. package/dist/generated/gio/proxy-resolver.d.ts +9 -5
  339. package/dist/generated/gio/proxy-resolver.js +31 -13
  340. package/dist/generated/gio/proxy.d.ts +11 -5
  341. package/dist/generated/gio/proxy.js +48 -21
  342. package/dist/generated/gio/remote-action-group.d.ts +7 -4
  343. package/dist/generated/gio/remote-action-group.js +31 -8
  344. package/dist/generated/gio/resolver.d.ts +18 -15
  345. package/dist/generated/gio/resolver.js +120 -69
  346. package/dist/generated/gio/resource.d.ts +20 -0
  347. package/dist/generated/gio/resource.js +257 -0
  348. package/dist/generated/gio/seekable.d.ts +8 -4
  349. package/dist/generated/gio/seekable.js +29 -11
  350. package/dist/generated/gio/settings-backend.d.ts +3 -2
  351. package/dist/generated/gio/settings-backend.js +16 -9
  352. package/dist/generated/gio/settings-schema-key.d.ts +15 -0
  353. package/dist/generated/gio/settings-schema-key.js +131 -0
  354. package/dist/generated/gio/settings-schema-source.d.ts +13 -0
  355. package/dist/generated/gio/settings-schema-source.js +119 -0
  356. package/dist/generated/gio/settings-schema.d.ts +14 -0
  357. package/dist/generated/gio/settings-schema.js +103 -0
  358. package/dist/generated/gio/settings.d.ts +23 -18
  359. package/dist/generated/gio/settings.js +107 -35
  360. package/dist/generated/gio/simple-action-group.d.ts +24 -2
  361. package/dist/generated/gio/simple-action-group.js +367 -3
  362. package/dist/generated/gio/simple-action.d.ts +17 -8
  363. package/dist/generated/gio/simple-action.js +157 -12
  364. package/dist/generated/gio/simple-async-result.d.ts +19 -11
  365. package/dist/generated/gio/simple-async-result.js +100 -36
  366. package/dist/generated/gio/simple-iostream.d.ts +5 -3
  367. package/dist/generated/gio/simple-iostream.js +2 -2
  368. package/dist/generated/gio/simple-proxy-resolver.d.ts +8 -1
  369. package/dist/generated/gio/simple-proxy-resolver.js +93 -0
  370. package/dist/generated/gio/socket-address-enumerator.d.ts +6 -3
  371. package/dist/generated/gio/socket-address-enumerator.js +37 -17
  372. package/dist/generated/gio/socket-address.d.ts +4 -0
  373. package/dist/generated/gio/socket-address.js +49 -8
  374. package/dist/generated/gio/socket-client.d.ts +26 -20
  375. package/dist/generated/gio/socket-client.js +160 -74
  376. package/dist/generated/gio/socket-connectable.d.ts +7 -4
  377. package/dist/generated/gio/socket-connectable.js +20 -2
  378. package/dist/generated/gio/socket-connection.d.ts +11 -7
  379. package/dist/generated/gio/socket-connection.js +64 -28
  380. package/dist/generated/gio/socket-control-message.js +2 -2
  381. package/dist/generated/gio/socket-listener.d.ts +16 -10
  382. package/dist/generated/gio/socket-listener.js +114 -56
  383. package/dist/generated/gio/socket.d.ts +38 -30
  384. package/dist/generated/gio/socket.js +420 -183
  385. package/dist/generated/gio/srv-target.d.ts +13 -0
  386. package/dist/generated/gio/srv-target.js +95 -0
  387. package/dist/generated/gio/subprocess-launcher.d.ts +4 -2
  388. package/dist/generated/gio/subprocess-launcher.js +27 -11
  389. package/dist/generated/gio/subprocess.d.ts +22 -16
  390. package/dist/generated/gio/subprocess.js +179 -65
  391. package/dist/generated/gio/task.d.ts +21 -14
  392. package/dist/generated/gio/task.js +149 -54
  393. package/dist/generated/gio/tcp-wrapper-connection.d.ts +5 -3
  394. package/dist/generated/gio/tcp-wrapper-connection.js +9 -3
  395. package/dist/generated/gio/themed-icon.d.ts +6 -0
  396. package/dist/generated/gio/themed-icon.js +47 -0
  397. package/dist/generated/gio/tls-backend.d.ts +7 -4
  398. package/dist/generated/gio/tls-backend.js +15 -2
  399. package/dist/generated/gio/tls-certificate.d.ts +16 -14
  400. package/dist/generated/gio/tls-certificate.js +70 -18
  401. package/dist/generated/gio/tls-client-connection.d.ts +8 -12
  402. package/dist/generated/gio/tls-client-connection.js +16 -24
  403. package/dist/generated/gio/tls-connection.d.ts +26 -20
  404. package/dist/generated/gio/tls-connection.js +71 -26
  405. package/dist/generated/gio/tls-database.d.ts +19 -13
  406. package/dist/generated/gio/tls-database.js +145 -79
  407. package/dist/generated/gio/tls-file-database.d.ts +4 -4
  408. package/dist/generated/gio/tls-file-database.js +5 -4
  409. package/dist/generated/gio/tls-interaction.d.ts +12 -8
  410. package/dist/generated/gio/tls-interaction.js +73 -42
  411. package/dist/generated/gio/tls-password.js +3 -3
  412. package/dist/generated/gio/tls-server-connection.d.ts +4 -5
  413. package/dist/generated/gio/tls-server-connection.js +5 -4
  414. package/dist/generated/gio/unix-connection.d.ts +11 -8
  415. package/dist/generated/gio/unix-connection.js +80 -40
  416. package/dist/generated/gio/unix-credentials-message.d.ts +4 -3
  417. package/dist/generated/gio/unix-credentials-message.js +8 -2
  418. package/dist/generated/gio/unix-fdlist.js +19 -8
  419. package/dist/generated/gio/unix-socket-address.d.ts +2 -1
  420. package/dist/generated/gio/vfs.d.ts +4 -3
  421. package/dist/generated/gio/vfs.js +23 -7
  422. package/dist/generated/gio/volume-monitor.d.ts +5 -3
  423. package/dist/generated/gio/volume-monitor.js +15 -3
  424. package/dist/generated/gio/volume.d.ts +22 -14
  425. package/dist/generated/gio/volume.js +83 -60
  426. package/dist/generated/gio/zlib-compressor.d.ts +11 -5
  427. package/dist/generated/gio/zlib-compressor.js +113 -2
  428. package/dist/generated/gio/zlib-decompressor.d.ts +9 -3
  429. package/dist/generated/gio/zlib-decompressor.js +112 -1
  430. package/dist/generated/glib/array.d.ts +33 -0
  431. package/dist/generated/glib/array.js +489 -0
  432. package/dist/generated/glib/bookmark-file.d.ts +55 -0
  433. package/dist/generated/glib/bookmark-file.js +1260 -0
  434. package/dist/generated/glib/byte-array.d.ts +31 -0
  435. package/dist/generated/glib/byte-array.js +356 -0
  436. package/dist/generated/glib/bytes.d.ts +21 -0
  437. package/dist/generated/glib/bytes.js +249 -0
  438. package/dist/generated/glib/checksum.d.ts +15 -0
  439. package/dist/generated/glib/checksum.js +105 -0
  440. package/dist/generated/glib/date-time.d.ts +60 -0
  441. package/dist/generated/glib/date-time.js +797 -0
  442. package/dist/generated/glib/date.d.ts +68 -0
  443. package/dist/generated/glib/date.js +626 -0
  444. package/dist/generated/glib/dir.d.ts +12 -0
  445. package/dist/generated/glib/dir.js +96 -0
  446. package/dist/generated/glib/error.d.ts +17 -0
  447. package/dist/generated/glib/error.js +169 -0
  448. package/dist/generated/glib/functions.d.ts +135 -119
  449. package/dist/generated/glib/functions.js +1859 -900
  450. package/dist/generated/glib/hash-table.d.ts +36 -0
  451. package/dist/generated/glib/hash-table.js +517 -0
  452. package/dist/generated/glib/hmac.d.ts +13 -0
  453. package/dist/generated/glib/hmac.js +109 -0
  454. package/dist/generated/glib/index.d.ts +36 -1
  455. package/dist/generated/glib/index.js +36 -1
  456. package/dist/generated/glib/iochannel.d.ts +43 -0
  457. package/dist/generated/glib/iochannel.js +652 -0
  458. package/dist/generated/glib/key-file.d.ts +57 -0
  459. package/dist/generated/glib/key-file.js +1311 -0
  460. package/dist/generated/glib/main-context.d.ts +39 -0
  461. package/dist/generated/glib/main-context.js +434 -0
  462. package/dist/generated/glib/main-loop.d.ts +13 -0
  463. package/dist/generated/glib/main-loop.js +94 -0
  464. package/dist/generated/glib/mapped-file.d.ts +14 -0
  465. package/dist/generated/glib/mapped-file.js +105 -0
  466. package/dist/generated/glib/markup-parse-context.d.ts +19 -0
  467. package/dist/generated/glib/markup-parse-context.js +190 -0
  468. package/dist/generated/glib/match-info.d.ts +22 -0
  469. package/dist/generated/glib/match-info.js +232 -0
  470. package/dist/generated/glib/option-group.d.ts +14 -0
  471. package/dist/generated/glib/option-group.js +139 -0
  472. package/dist/generated/glib/pattern-spec.d.ts +11 -0
  473. package/dist/generated/glib/pattern-spec.js +91 -0
  474. package/dist/generated/glib/poll-fd.d.ts +16 -0
  475. package/dist/generated/glib/poll-fd.js +35 -0
  476. package/dist/generated/glib/ptr-array.d.ts +47 -0
  477. package/dist/generated/glib/ptr-array.js +699 -0
  478. package/dist/generated/glib/rand.d.ts +15 -0
  479. package/dist/generated/glib/rand.js +142 -0
  480. package/dist/generated/glib/regex.d.ts +34 -0
  481. package/dist/generated/glib/regex.js +567 -0
  482. package/dist/generated/glib/source.d.ts +44 -0
  483. package/dist/generated/glib/source.js +456 -0
  484. package/dist/generated/glib/string.d.ts +49 -0
  485. package/dist/generated/glib/string.js +768 -0
  486. package/dist/generated/glib/strv-builder.d.ts +13 -0
  487. package/dist/generated/glib/strv-builder.js +96 -0
  488. package/dist/generated/glib/thread.d.ts +23 -0
  489. package/dist/generated/glib/thread.js +247 -0
  490. package/dist/generated/glib/time-zone.d.ts +20 -0
  491. package/dist/generated/glib/time-zone.js +156 -0
  492. package/dist/generated/glib/tree.d.ts +34 -0
  493. package/dist/generated/glib/tree.js +369 -0
  494. package/dist/generated/glib/uri.d.ts +45 -0
  495. package/dist/generated/glib/uri.js +794 -0
  496. package/dist/generated/glib/variant-builder.d.ts +19 -0
  497. package/dist/generated/glib/variant-builder.js +170 -0
  498. package/dist/generated/glib/variant-dict.d.ts +19 -0
  499. package/dist/generated/glib/variant-dict.js +196 -0
  500. package/dist/generated/glib/variant-type.d.ts +37 -0
  501. package/dist/generated/glib/variant-type.js +392 -0
  502. package/dist/generated/glib/variant.d.ts +102 -0
  503. package/dist/generated/glib/variant.js +1276 -0
  504. package/dist/generated/gmodule/functions.d.ts +1 -1
  505. package/dist/generated/gmodule/functions.js +3 -2
  506. package/dist/generated/gmodule/index.d.ts +1 -1
  507. package/dist/generated/gmodule/index.js +1 -1
  508. package/dist/generated/gobject/binding-group.d.ts +8 -7
  509. package/dist/generated/gobject/binding-group.js +24 -11
  510. package/dist/generated/gobject/binding.d.ts +6 -6
  511. package/dist/generated/gobject/binding.js +24 -4
  512. package/dist/generated/gobject/closure.d.ts +26 -0
  513. package/dist/generated/gobject/closure.js +244 -0
  514. package/dist/generated/gobject/functions.d.ts +106 -100
  515. package/dist/generated/gobject/functions.js +1009 -411
  516. package/dist/generated/gobject/index.d.ts +6 -3
  517. package/dist/generated/gobject/index.js +6 -3
  518. package/dist/generated/gobject/object.d.ts +27 -23
  519. package/dist/generated/gobject/object.js +133 -63
  520. package/dist/generated/gobject/param-spec.d.ts +10 -9
  521. package/dist/generated/gobject/param-spec.js +39 -13
  522. package/dist/generated/gobject/signal-group.d.ts +6 -6
  523. package/dist/generated/gobject/signal-group.js +22 -33
  524. package/dist/generated/gobject/type-module.d.ts +2 -0
  525. package/dist/generated/gobject/type-module.js +42 -2
  526. package/dist/generated/gobject/type-plugin.d.ts +4 -2
  527. package/dist/generated/gobject/type-plugin.js +10 -3
  528. package/dist/generated/gobject/value-array.d.ts +19 -0
  529. package/dist/generated/gobject/value-array.js +227 -0
  530. package/dist/generated/gobject/value.d.ts +81 -0
  531. package/dist/generated/gobject/value.js +836 -0
  532. package/dist/generated/graphene/box.d.ts +38 -0
  533. package/dist/generated/graphene/box.js +568 -0
  534. package/dist/generated/graphene/euler.d.ts +30 -0
  535. package/dist/generated/graphene/euler.js +388 -0
  536. package/dist/generated/graphene/frustum.d.ts +20 -0
  537. package/dist/generated/graphene/frustum.js +226 -0
  538. package/dist/generated/graphene/functions.d.ts +34 -26
  539. package/dist/generated/graphene/functions.js +242 -52
  540. package/dist/generated/graphene/index.d.ts +18 -1
  541. package/dist/generated/graphene/index.js +18 -1
  542. package/dist/generated/graphene/matrix.d.ts +83 -0
  543. package/dist/generated/graphene/matrix.js +1476 -0
  544. package/dist/generated/graphene/plane.d.ts +23 -0
  545. package/dist/generated/graphene/plane.js +312 -0
  546. package/dist/generated/graphene/point.d.ts +21 -0
  547. package/dist/generated/graphene/point.js +233 -0
  548. package/dist/generated/graphene/point3d.d.ts +30 -0
  549. package/dist/generated/graphene/point3d.js +374 -0
  550. package/dist/generated/graphene/quad.d.ts +15 -0
  551. package/dist/generated/graphene/quad.js +185 -0
  552. package/dist/generated/graphene/quaternion.d.ts +33 -0
  553. package/dist/generated/graphene/quaternion.js +547 -0
  554. package/dist/generated/graphene/ray.d.ts +30 -0
  555. package/dist/generated/graphene/ray.js +360 -0
  556. package/dist/generated/graphene/rect.d.ts +44 -0
  557. package/dist/generated/graphene/rect.js +653 -0
  558. package/dist/generated/graphene/size.d.ts +17 -0
  559. package/dist/generated/graphene/size.js +167 -0
  560. package/dist/generated/graphene/sphere.d.ts +21 -0
  561. package/dist/generated/graphene/sphere.js +263 -0
  562. package/dist/generated/graphene/triangle.d.ts +26 -0
  563. package/dist/generated/graphene/triangle.js +412 -0
  564. package/dist/generated/graphene/vec2.d.ts +31 -0
  565. package/dist/generated/graphene/vec2.js +485 -0
  566. package/dist/generated/graphene/vec3.d.ts +41 -0
  567. package/dist/generated/graphene/vec3.js +634 -0
  568. package/dist/generated/graphene/vec4.d.ts +41 -0
  569. package/dist/generated/graphene/vec4.js +633 -0
  570. package/dist/generated/gsk/blend-node.d.ts +3 -3
  571. package/dist/generated/gsk/blend-node.js +14 -4
  572. package/dist/generated/gsk/blur-node.d.ts +2 -2
  573. package/dist/generated/gsk/blur-node.js +7 -2
  574. package/dist/generated/gsk/border-node.d.ts +3 -2
  575. package/dist/generated/gsk/border-node.js +13 -3
  576. package/dist/generated/gsk/cairo-node.d.ts +5 -3
  577. package/dist/generated/gsk/cairo-node.js +31 -6
  578. package/dist/generated/gsk/clip-node.d.ts +4 -3
  579. package/dist/generated/gsk/clip-node.js +26 -6
  580. package/dist/generated/gsk/color-matrix-node.d.ts +5 -4
  581. package/dist/generated/gsk/color-matrix-node.js +44 -10
  582. package/dist/generated/gsk/color-node.d.ts +4 -2
  583. package/dist/generated/gsk/color-node.js +21 -6
  584. package/dist/generated/gsk/component-transfer-node.d.ts +4 -3
  585. package/dist/generated/gsk/component-transfer-node.js +44 -12
  586. package/dist/generated/gsk/component-transfer.d.ts +14 -0
  587. package/dist/generated/gsk/component-transfer.js +125 -0
  588. package/dist/generated/gsk/conic-gradient-node.d.ts +3 -2
  589. package/dist/generated/gsk/conic-gradient-node.js +26 -7
  590. package/dist/generated/gsk/container-node.d.ts +2 -2
  591. package/dist/generated/gsk/container-node.js +6 -1
  592. package/dist/generated/gsk/cross-fade-node.d.ts +3 -3
  593. package/dist/generated/gsk/cross-fade-node.js +14 -4
  594. package/dist/generated/gsk/debug-node.d.ts +2 -2
  595. package/dist/generated/gsk/debug-node.js +7 -2
  596. package/dist/generated/gsk/fill-node.d.ts +4 -3
  597. package/dist/generated/gsk/fill-node.js +22 -6
  598. package/dist/generated/gsk/functions.d.ts +11 -7
  599. package/dist/generated/gsk/functions.js +51 -21
  600. package/dist/generated/gsk/glshader-node.d.ts +7 -4
  601. package/dist/generated/gsk/glshader-node.js +35 -9
  602. package/dist/generated/gsk/glshader.d.ts +16 -13
  603. package/dist/generated/gsk/glshader.js +83 -34
  604. package/dist/generated/gsk/index.d.ts +11 -3
  605. package/dist/generated/gsk/index.js +11 -3
  606. package/dist/generated/gsk/inset-shadow-node.d.ts +3 -2
  607. package/dist/generated/gsk/inset-shadow-node.js +16 -5
  608. package/dist/generated/gsk/linear-gradient-node.d.ts +4 -3
  609. package/dist/generated/gsk/linear-gradient-node.js +44 -11
  610. package/dist/generated/gsk/mask-node.d.ts +3 -3
  611. package/dist/generated/gsk/mask-node.js +14 -4
  612. package/dist/generated/gsk/opacity-node.d.ts +2 -2
  613. package/dist/generated/gsk/opacity-node.js +7 -2
  614. package/dist/generated/gsk/outset-shadow-node.d.ts +3 -2
  615. package/dist/generated/gsk/outset-shadow-node.js +16 -5
  616. package/dist/generated/gsk/path-builder.d.ts +39 -0
  617. package/dist/generated/gsk/path-builder.js +636 -0
  618. package/dist/generated/gsk/path-measure.d.ts +16 -0
  619. package/dist/generated/gsk/path-measure.js +116 -0
  620. package/dist/generated/gsk/path-point.d.ts +19 -0
  621. package/dist/generated/gsk/path-point.js +177 -0
  622. package/dist/generated/gsk/path.d.ts +28 -0
  623. package/dist/generated/gsk/path.js +279 -0
  624. package/dist/generated/gsk/radial-gradient-node.d.ts +3 -2
  625. package/dist/generated/gsk/radial-gradient-node.js +26 -7
  626. package/dist/generated/gsk/render-node.d.ts +9 -6
  627. package/dist/generated/gsk/render-node.js +54 -14
  628. package/dist/generated/gsk/renderer.d.ts +11 -7
  629. package/dist/generated/gsk/renderer.js +49 -19
  630. package/dist/generated/gsk/repeat-node.d.ts +4 -3
  631. package/dist/generated/gsk/repeat-node.js +32 -8
  632. package/dist/generated/gsk/repeating-linear-gradient-node.d.ts +2 -1
  633. package/dist/generated/gsk/repeating-linear-gradient-node.js +19 -7
  634. package/dist/generated/gsk/repeating-radial-gradient-node.d.ts +2 -1
  635. package/dist/generated/gsk/repeating-radial-gradient-node.js +13 -5
  636. package/dist/generated/gsk/rounded-clip-node.d.ts +2 -2
  637. package/dist/generated/gsk/rounded-clip-node.js +8 -3
  638. package/dist/generated/gsk/shader-args-builder.d.ts +20 -0
  639. package/dist/generated/gsk/shader-args-builder.js +208 -0
  640. package/dist/generated/gsk/shadow-node.d.ts +2 -2
  641. package/dist/generated/gsk/shadow-node.js +9 -4
  642. package/dist/generated/gsk/stroke-node.d.ts +6 -4
  643. package/dist/generated/gsk/stroke-node.js +37 -10
  644. package/dist/generated/gsk/stroke.d.ts +25 -0
  645. package/dist/generated/gsk/stroke.js +199 -0
  646. package/dist/generated/gsk/subsurface-node.d.ts +4 -3
  647. package/dist/generated/gsk/subsurface-node.js +9 -4
  648. package/dist/generated/gsk/text-node.d.ts +7 -4
  649. package/dist/generated/gsk/text-node.js +48 -12
  650. package/dist/generated/gsk/texture-node.d.ts +4 -2
  651. package/dist/generated/gsk/texture-node.js +14 -4
  652. package/dist/generated/gsk/texture-scale-node.d.ts +4 -2
  653. package/dist/generated/gsk/texture-scale-node.js +14 -4
  654. package/dist/generated/gsk/transform-node.d.ts +4 -3
  655. package/dist/generated/gsk/transform-node.js +26 -6
  656. package/dist/generated/gsk/transform.d.ts +35 -0
  657. package/dist/generated/gsk/transform.js +604 -0
  658. package/dist/generated/gtk/about-dialog.d.ts +5 -4
  659. package/dist/generated/gtk/about-dialog.js +8 -2
  660. package/dist/generated/gtk/accessible-list.d.ts +8 -0
  661. package/dist/generated/gtk/accessible-list.js +40 -0
  662. package/dist/generated/gtk/accessible-range.d.ts +4 -2
  663. package/dist/generated/gtk/accessible-range.js +7 -0
  664. package/dist/generated/gtk/accessible-text.d.ts +4 -2
  665. package/dist/generated/gtk/accessible-text.js +7 -0
  666. package/dist/generated/gtk/accessible.d.ts +15 -13
  667. package/dist/generated/gtk/accessible.js +59 -16
  668. package/dist/generated/gtk/action-bar.d.ts +5 -5
  669. package/dist/generated/gtk/action-bar.js +10 -5
  670. package/dist/generated/gtk/actionable.d.ts +7 -8
  671. package/dist/generated/gtk/actionable.js +22 -16
  672. package/dist/generated/gtk/alert-dialog.d.ts +4 -3
  673. package/dist/generated/gtk/alert-dialog.js +51 -47
  674. package/dist/generated/gtk/alternative-trigger.d.ts +5 -5
  675. package/dist/generated/gtk/alternative-trigger.js +14 -4
  676. package/dist/generated/gtk/app-chooser-button.d.ts +5 -1
  677. package/dist/generated/gtk/app-chooser-button.js +31 -1
  678. package/dist/generated/gtk/app-chooser-dialog.d.ts +10 -4
  679. package/dist/generated/gtk/app-chooser-dialog.js +40 -4
  680. package/dist/generated/gtk/app-chooser-widget.d.ts +4 -0
  681. package/dist/generated/gtk/app-chooser-widget.js +30 -0
  682. package/dist/generated/gtk/app-chooser.d.ts +6 -4
  683. package/dist/generated/gtk/app-chooser.js +14 -4
  684. package/dist/generated/gtk/application-window.d.ts +5 -3
  685. package/dist/generated/gtk/application-window.js +9 -3
  686. package/dist/generated/gtk/application.d.ts +14 -12
  687. package/dist/generated/gtk/application.js +30 -9
  688. package/dist/generated/gtk/aspect-frame.d.ts +4 -4
  689. package/dist/generated/gtk/aspect-frame.js +7 -2
  690. package/dist/generated/gtk/assistant-page.d.ts +3 -2
  691. package/dist/generated/gtk/assistant-page.js +7 -1
  692. package/dist/generated/gtk/assistant.d.ts +18 -15
  693. package/dist/generated/gtk/assistant.js +34 -17
  694. package/dist/generated/gtk/atcontext.d.ts +7 -5
  695. package/dist/generated/gtk/atcontext.js +9 -3
  696. package/dist/generated/gtk/bitset-iter.d.ts +14 -0
  697. package/dist/generated/gtk/bitset-iter.js +138 -0
  698. package/dist/generated/gtk/bitset.d.ts +33 -0
  699. package/dist/generated/gtk/bitset.js +393 -0
  700. package/dist/generated/gtk/bool-filter.d.ts +6 -5
  701. package/dist/generated/gtk/bool-filter.js +9 -3
  702. package/dist/generated/gtk/border.d.ts +15 -0
  703. package/dist/generated/gtk/border.js +64 -0
  704. package/dist/generated/gtk/box-layout.d.ts +2 -0
  705. package/dist/generated/gtk/box-layout.js +20 -0
  706. package/dist/generated/gtk/box.d.ts +7 -5
  707. package/dist/generated/gtk/box.js +27 -7
  708. package/dist/generated/gtk/buildable.d.ts +4 -2
  709. package/dist/generated/gtk/buildable.js +7 -0
  710. package/dist/generated/gtk/builder-cscope.js +2 -2
  711. package/dist/generated/gtk/builder-list-item-factory.d.ts +8 -6
  712. package/dist/generated/gtk/builder-list-item-factory.js +24 -7
  713. package/dist/generated/gtk/builder-scope.d.ts +4 -2
  714. package/dist/generated/gtk/builder-scope.js +7 -0
  715. package/dist/generated/gtk/builder.d.ts +16 -14
  716. package/dist/generated/gtk/builder.js +149 -58
  717. package/dist/generated/gtk/button.d.ts +11 -4
  718. package/dist/generated/gtk/button.js +82 -2
  719. package/dist/generated/gtk/calendar.d.ts +6 -5
  720. package/dist/generated/gtk/calendar.js +17 -6
  721. package/dist/generated/gtk/callback-action.js +2 -2
  722. package/dist/generated/gtk/cclosure-expression.d.ts +1 -1
  723. package/dist/generated/gtk/cclosure-expression.js +4 -4
  724. package/dist/generated/gtk/cell-area-box.d.ts +3 -2
  725. package/dist/generated/gtk/cell-area-box.js +16 -44
  726. package/dist/generated/gtk/cell-area-context.d.ts +3 -2
  727. package/dist/generated/gtk/cell-area-context.js +7 -1
  728. package/dist/generated/gtk/cell-area.d.ts +62 -42
  729. package/dist/generated/gtk/cell-area.js +352 -97
  730. package/dist/generated/gtk/cell-editable.d.ts +6 -6
  731. package/dist/generated/gtk/cell-editable.js +8 -36
  732. package/dist/generated/gtk/cell-layout.d.ts +14 -10
  733. package/dist/generated/gtk/cell-layout.js +23 -10
  734. package/dist/generated/gtk/cell-renderer-accel.d.ts +3 -2
  735. package/dist/generated/gtk/cell-renderer-accel.js +1 -1
  736. package/dist/generated/gtk/cell-renderer-combo.d.ts +3 -2
  737. package/dist/generated/gtk/cell-renderer-combo.js +1 -1
  738. package/dist/generated/gtk/cell-renderer-pixbuf.d.ts +12 -9
  739. package/dist/generated/gtk/cell-renderer-progress.d.ts +3 -0
  740. package/dist/generated/gtk/cell-renderer-progress.js +20 -0
  741. package/dist/generated/gtk/cell-renderer-spin.d.ts +3 -2
  742. package/dist/generated/gtk/cell-renderer-text.d.ts +24 -23
  743. package/dist/generated/gtk/cell-renderer.d.ts +17 -12
  744. package/dist/generated/gtk/cell-renderer.js +86 -31
  745. package/dist/generated/gtk/cell-view.d.ts +29 -10
  746. package/dist/generated/gtk/cell-view.js +196 -9
  747. package/dist/generated/gtk/center-box.d.ts +15 -13
  748. package/dist/generated/gtk/center-box.js +41 -6
  749. package/dist/generated/gtk/center-layout.d.ts +7 -6
  750. package/dist/generated/gtk/center-layout.js +22 -6
  751. package/dist/generated/gtk/check-button.d.ts +13 -6
  752. package/dist/generated/gtk/check-button.js +83 -3
  753. package/dist/generated/gtk/closure-expression.d.ts +2 -1
  754. package/dist/generated/gtk/closure-expression.js +2 -2
  755. package/dist/generated/gtk/color-button.d.ts +9 -1
  756. package/dist/generated/gtk/color-button.js +84 -2
  757. package/dist/generated/gtk/color-chooser-dialog.d.ts +10 -1
  758. package/dist/generated/gtk/color-chooser-dialog.js +83 -1
  759. package/dist/generated/gtk/color-chooser-widget.d.ts +8 -0
  760. package/dist/generated/gtk/color-chooser-widget.js +82 -0
  761. package/dist/generated/gtk/color-chooser.d.ts +8 -10
  762. package/dist/generated/gtk/color-chooser.js +25 -44
  763. package/dist/generated/gtk/color-dialog-button.d.ts +11 -9
  764. package/dist/generated/gtk/color-dialog-button.js +24 -7
  765. package/dist/generated/gtk/color-dialog.d.ts +4 -2
  766. package/dist/generated/gtk/color-dialog.js +66 -50
  767. package/dist/generated/gtk/column-view-cell.d.ts +5 -10
  768. package/dist/generated/gtk/column-view-cell.js +0 -65
  769. package/dist/generated/gtk/column-view-column.d.ts +19 -15
  770. package/dist/generated/gtk/column-view-column.js +32 -8
  771. package/dist/generated/gtk/column-view-row.d.ts +3 -2
  772. package/dist/generated/gtk/column-view-row.js +7 -1
  773. package/dist/generated/gtk/column-view-sorter.d.ts +4 -3
  774. package/dist/generated/gtk/column-view-sorter.js +13 -2
  775. package/dist/generated/gtk/column-view.d.ts +41 -23
  776. package/dist/generated/gtk/column-view.js +159 -16
  777. package/dist/generated/gtk/combo-box.d.ts +31 -13
  778. package/dist/generated/gtk/combo-box.js +208 -12
  779. package/dist/generated/gtk/constant-expression.d.ts +3 -2
  780. package/dist/generated/gtk/constant-expression.js +15 -4
  781. package/dist/generated/gtk/constraint-layout.d.ts +13 -8
  782. package/dist/generated/gtk/constraint-layout.js +45 -16
  783. package/dist/generated/gtk/constraint-target.d.ts +4 -2
  784. package/dist/generated/gtk/constraint-target.js +7 -0
  785. package/dist/generated/gtk/constraint.d.ts +7 -6
  786. package/dist/generated/gtk/constraint.js +16 -5
  787. package/dist/generated/gtk/css-provider.d.ts +4 -2
  788. package/dist/generated/gtk/css-provider.js +8 -6
  789. package/dist/generated/gtk/css-section.d.ts +18 -0
  790. package/dist/generated/gtk/css-section.js +161 -0
  791. package/dist/generated/gtk/custom-filter.js +4 -4
  792. package/dist/generated/gtk/custom-sorter.js +4 -4
  793. package/dist/generated/gtk/dialog.d.ts +10 -7
  794. package/dist/generated/gtk/dialog.js +30 -7
  795. package/dist/generated/gtk/directory-list.d.ts +9 -7
  796. package/dist/generated/gtk/directory-list.js +22 -5
  797. package/dist/generated/gtk/drag-icon.d.ts +16 -7
  798. package/dist/generated/gtk/drag-icon.js +81 -7
  799. package/dist/generated/gtk/drag-source.d.ts +11 -10
  800. package/dist/generated/gtk/drag-source.js +18 -7
  801. package/dist/generated/gtk/drawing-area.js +2 -2
  802. package/dist/generated/gtk/drop-controller-motion.d.ts +3 -2
  803. package/dist/generated/gtk/drop-controller-motion.js +7 -1
  804. package/dist/generated/gtk/drop-down.d.ts +27 -23
  805. package/dist/generated/gtk/drop-down.js +47 -13
  806. package/dist/generated/gtk/drop-target-async.d.ts +11 -10
  807. package/dist/generated/gtk/drop-target-async.js +29 -10
  808. package/dist/generated/gtk/drop-target.d.ts +15 -13
  809. package/dist/generated/gtk/drop-target.js +43 -11
  810. package/dist/generated/gtk/editable-label.d.ts +27 -0
  811. package/dist/generated/gtk/editable-label.js +283 -0
  812. package/dist/generated/gtk/editable.d.ts +5 -18
  813. package/dist/generated/gtk/editable.js +13 -80
  814. package/dist/generated/gtk/entry-completion.d.ts +22 -7
  815. package/dist/generated/gtk/entry-completion.js +174 -8
  816. package/dist/generated/gtk/entry.d.ts +67 -36
  817. package/dist/generated/gtk/entry.js +379 -23
  818. package/dist/generated/gtk/event-controller-key.d.ts +5 -3
  819. package/dist/generated/gtk/event-controller-key.js +12 -6
  820. package/dist/generated/gtk/event-controller-scroll.d.ts +2 -1
  821. package/dist/generated/gtk/event-controller-scroll.js +1 -1
  822. package/dist/generated/gtk/event-controller.d.ts +7 -5
  823. package/dist/generated/gtk/event-controller.js +21 -4
  824. package/dist/generated/gtk/expander.d.ts +8 -8
  825. package/dist/generated/gtk/expander.js +14 -4
  826. package/dist/generated/gtk/expression-watch.d.ts +10 -0
  827. package/dist/generated/gtk/expression-watch.js +56 -0
  828. package/dist/generated/gtk/expression.d.ts +6 -4
  829. package/dist/generated/gtk/expression.js +42 -16
  830. package/dist/generated/gtk/file-chooser-dialog.d.ts +29 -1
  831. package/dist/generated/gtk/file-chooser-dialog.js +374 -1
  832. package/dist/generated/gtk/file-chooser-native.d.ts +29 -1
  833. package/dist/generated/gtk/file-chooser-native.js +374 -1
  834. package/dist/generated/gtk/file-chooser-widget.d.ts +27 -0
  835. package/dist/generated/gtk/file-chooser-widget.js +373 -0
  836. package/dist/generated/gtk/file-chooser.d.ts +19 -25
  837. package/dist/generated/gtk/file-chooser.js +89 -59
  838. package/dist/generated/gtk/file-dialog.d.ts +37 -33
  839. package/dist/generated/gtk/file-dialog.js +498 -392
  840. package/dist/generated/gtk/file-filter.d.ts +4 -2
  841. package/dist/generated/gtk/file-filter.js +23 -4
  842. package/dist/generated/gtk/file-launcher.d.ts +9 -9
  843. package/dist/generated/gtk/file-launcher.js +109 -96
  844. package/dist/generated/gtk/filter-list-model.d.ts +14 -9
  845. package/dist/generated/gtk/filter-list-model.js +60 -6
  846. package/dist/generated/gtk/filter.d.ts +2 -1
  847. package/dist/generated/gtk/filter.js +1 -1
  848. package/dist/generated/gtk/fixed-layout-child.d.ts +5 -4
  849. package/dist/generated/gtk/fixed-layout-child.js +19 -4
  850. package/dist/generated/gtk/fixed.d.ts +7 -6
  851. package/dist/generated/gtk/fixed.js +25 -10
  852. package/dist/generated/gtk/flatten-list-model.d.ts +10 -6
  853. package/dist/generated/gtk/flatten-list-model.js +57 -4
  854. package/dist/generated/gtk/flow-box-child.d.ts +4 -4
  855. package/dist/generated/gtk/flow-box-child.js +7 -2
  856. package/dist/generated/gtk/flow-box.d.ts +17 -12
  857. package/dist/generated/gtk/flow-box.js +48 -18
  858. package/dist/generated/gtk/font-button.d.ts +19 -0
  859. package/dist/generated/gtk/font-button.js +197 -0
  860. package/dist/generated/gtk/font-chooser-dialog.d.ts +21 -1
  861. package/dist/generated/gtk/font-chooser-dialog.js +198 -1
  862. package/dist/generated/gtk/font-chooser-widget.d.ts +21 -1
  863. package/dist/generated/gtk/font-chooser-widget.js +197 -0
  864. package/dist/generated/gtk/font-chooser.d.ts +11 -22
  865. package/dist/generated/gtk/font-chooser.js +47 -77
  866. package/dist/generated/gtk/font-dialog-button.d.ts +15 -13
  867. package/dist/generated/gtk/font-dialog-button.js +46 -11
  868. package/dist/generated/gtk/font-dialog.d.ts +25 -21
  869. package/dist/generated/gtk/font-dialog.js +312 -220
  870. package/dist/generated/gtk/frame.d.ts +8 -8
  871. package/dist/generated/gtk/frame.js +14 -4
  872. package/dist/generated/gtk/functions.d.ts +82 -64
  873. package/dist/generated/gtk/functions.js +304 -163
  874. package/dist/generated/gtk/gesture-click.js +7 -1
  875. package/dist/generated/gtk/gesture-single.d.ts +2 -1
  876. package/dist/generated/gtk/gesture-single.js +13 -2
  877. package/dist/generated/gtk/gesture-stylus.d.ts +4 -3
  878. package/dist/generated/gtk/gesture-stylus.js +12 -3
  879. package/dist/generated/gtk/gesture.d.ts +11 -10
  880. package/dist/generated/gtk/gesture.js +108 -22
  881. package/dist/generated/gtk/glarea.d.ts +12 -10
  882. package/dist/generated/gtk/glarea.js +25 -8
  883. package/dist/generated/gtk/graphics-offload.d.ts +5 -5
  884. package/dist/generated/gtk/graphics-offload.js +8 -3
  885. package/dist/generated/gtk/grid-view.d.ts +13 -10
  886. package/dist/generated/gtk/grid-view.js +24 -8
  887. package/dist/generated/gtk/grid.d.ts +9 -7
  888. package/dist/generated/gtk/grid.js +32 -7
  889. package/dist/generated/gtk/header-bar.d.ts +7 -7
  890. package/dist/generated/gtk/header-bar.js +10 -5
  891. package/dist/generated/gtk/icon-paintable.d.ts +6 -3
  892. package/dist/generated/gtk/icon-paintable.js +43 -2
  893. package/dist/generated/gtk/icon-theme.d.ts +10 -7
  894. package/dist/generated/gtk/icon-theme.js +23 -6
  895. package/dist/generated/gtk/icon-view.d.ts +56 -30
  896. package/dist/generated/gtk/icon-view.js +445 -88
  897. package/dist/generated/gtk/image.d.ts +15 -12
  898. package/dist/generated/gtk/image.js +20 -8
  899. package/dist/generated/gtk/imcontext.d.ts +9 -6
  900. package/dist/generated/gtk/imcontext.js +20 -9
  901. package/dist/generated/gtk/index.d.ts +65 -50
  902. package/dist/generated/gtk/index.js +65 -50
  903. package/dist/generated/gtk/info-bar.d.ts +6 -5
  904. package/dist/generated/gtk/info-bar.js +11 -5
  905. package/dist/generated/gtk/inscription.d.ts +13 -9
  906. package/dist/generated/gtk/inscription.js +55 -4
  907. package/dist/generated/gtk/keyval-trigger.d.ts +4 -3
  908. package/dist/generated/gtk/keyval-trigger.js +2 -2
  909. package/dist/generated/gtk/label.d.ts +31 -26
  910. package/dist/generated/gtk/label.js +96 -15
  911. package/dist/generated/gtk/layout-child.d.ts +6 -4
  912. package/dist/generated/gtk/layout-child.js +14 -2
  913. package/dist/generated/gtk/layout-manager.d.ts +6 -4
  914. package/dist/generated/gtk/layout-manager.js +17 -5
  915. package/dist/generated/gtk/level-bar.d.ts +3 -1
  916. package/dist/generated/gtk/level-bar.js +20 -0
  917. package/dist/generated/gtk/list-base.d.ts +15 -1
  918. package/dist/generated/gtk/list-base.js +131 -0
  919. package/dist/generated/gtk/list-box-row.d.ts +13 -6
  920. package/dist/generated/gtk/list-box-row.js +89 -4
  921. package/dist/generated/gtk/list-box.d.ts +17 -14
  922. package/dist/generated/gtk/list-box.js +44 -23
  923. package/dist/generated/gtk/list-header.d.ts +8 -6
  924. package/dist/generated/gtk/list-header.js +15 -3
  925. package/dist/generated/gtk/list-item.d.ts +8 -6
  926. package/dist/generated/gtk/list-item.js +15 -3
  927. package/dist/generated/gtk/list-store.d.ts +62 -16
  928. package/dist/generated/gtk/list-store.js +934 -38
  929. package/dist/generated/gtk/list-view.d.ts +17 -14
  930. package/dist/generated/gtk/list-view.js +31 -10
  931. package/dist/generated/gtk/lock-button.d.ts +6 -5
  932. package/dist/generated/gtk/lock-button.js +9 -3
  933. package/dist/generated/gtk/map-list-model.d.ts +9 -5
  934. package/dist/generated/gtk/map-list-model.js +55 -7
  935. package/dist/generated/gtk/media-controls.d.ts +6 -5
  936. package/dist/generated/gtk/media-controls.js +9 -3
  937. package/dist/generated/gtk/media-file.d.ts +11 -10
  938. package/dist/generated/gtk/media-file.js +17 -6
  939. package/dist/generated/gtk/media-stream.d.ts +8 -6
  940. package/dist/generated/gtk/media-stream.js +20 -9
  941. package/dist/generated/gtk/menu-button.d.ts +14 -14
  942. package/dist/generated/gtk/menu-button.js +25 -28
  943. package/dist/generated/gtk/message-dialog.d.ts +6 -4
  944. package/dist/generated/gtk/message-dialog.js +9 -3
  945. package/dist/generated/gtk/mount-operation.d.ts +11 -9
  946. package/dist/generated/gtk/mount-operation.js +17 -5
  947. package/dist/generated/gtk/multi-filter.d.ts +2 -1
  948. package/dist/generated/gtk/multi-filter.js +9 -1
  949. package/dist/generated/gtk/multi-selection.d.ts +21 -5
  950. package/dist/generated/gtk/multi-selection.js +220 -3
  951. package/dist/generated/gtk/multi-sorter.d.ts +2 -1
  952. package/dist/generated/gtk/multi-sorter.js +9 -1
  953. package/dist/generated/gtk/native-dialog.d.ts +5 -4
  954. package/dist/generated/gtk/native-dialog.js +8 -2
  955. package/dist/generated/gtk/native.d.ts +8 -4
  956. package/dist/generated/gtk/native.js +21 -2
  957. package/dist/generated/gtk/no-selection.d.ts +21 -5
  958. package/dist/generated/gtk/no-selection.js +220 -3
  959. package/dist/generated/gtk/notebook-page.d.ts +5 -4
  960. package/dist/generated/gtk/notebook-page.js +7 -1
  961. package/dist/generated/gtk/notebook.d.ts +29 -27
  962. package/dist/generated/gtk/notebook.js +72 -40
  963. package/dist/generated/gtk/numeric-sorter.d.ts +6 -5
  964. package/dist/generated/gtk/numeric-sorter.js +9 -3
  965. package/dist/generated/gtk/object-expression.d.ts +3 -2
  966. package/dist/generated/gtk/object-expression.js +8 -2
  967. package/dist/generated/gtk/orientable.d.ts +4 -4
  968. package/dist/generated/gtk/orientable.js +7 -6
  969. package/dist/generated/gtk/overlay.d.ts +10 -10
  970. package/dist/generated/gtk/overlay.js +14 -9
  971. package/dist/generated/gtk/pad-controller.d.ts +5 -3
  972. package/dist/generated/gtk/pad-controller.js +2 -2
  973. package/dist/generated/gtk/page-setup-unix-dialog.d.ts +8 -5
  974. package/dist/generated/gtk/page-setup-unix-dialog.js +17 -5
  975. package/dist/generated/gtk/page-setup.d.ts +11 -9
  976. package/dist/generated/gtk/page-setup.js +80 -29
  977. package/dist/generated/gtk/paned.d.ts +10 -8
  978. package/dist/generated/gtk/paned.js +34 -4
  979. package/dist/generated/gtk/paper-size.d.ts +32 -0
  980. package/dist/generated/gtk/paper-size.js +334 -0
  981. package/dist/generated/gtk/password-entry.d.ts +32 -4
  982. package/dist/generated/gtk/password-entry.js +291 -2
  983. package/dist/generated/gtk/picture.d.ts +15 -12
  984. package/dist/generated/gtk/picture.js +20 -8
  985. package/dist/generated/gtk/popover-menu-bar.d.ts +8 -7
  986. package/dist/generated/gtk/popover-menu-bar.js +11 -5
  987. package/dist/generated/gtk/popover-menu.d.ts +10 -8
  988. package/dist/generated/gtk/popover-menu.js +12 -6
  989. package/dist/generated/gtk/popover.d.ts +16 -11
  990. package/dist/generated/gtk/popover.js +66 -6
  991. package/dist/generated/gtk/print-context.d.ts +9 -6
  992. package/dist/generated/gtk/print-context.js +45 -8
  993. package/dist/generated/gtk/print-dialog.d.ts +15 -14
  994. package/dist/generated/gtk/print-dialog.js +142 -155
  995. package/dist/generated/gtk/print-job.d.ts +11 -7
  996. package/dist/generated/gtk/print-job.js +60 -22
  997. package/dist/generated/gtk/print-operation-preview.d.ts +4 -3
  998. package/dist/generated/gtk/print-operation-preview.js +7 -36
  999. package/dist/generated/gtk/print-operation.d.ts +15 -9
  1000. package/dist/generated/gtk/print-operation.js +66 -13
  1001. package/dist/generated/gtk/print-settings.d.ts +10 -8
  1002. package/dist/generated/gtk/print-settings.js +75 -28
  1003. package/dist/generated/gtk/print-setup.d.ts +11 -0
  1004. package/dist/generated/gtk/print-setup.js +64 -0
  1005. package/dist/generated/gtk/print-unix-dialog.d.ts +16 -12
  1006. package/dist/generated/gtk/print-unix-dialog.js +19 -15
  1007. package/dist/generated/gtk/printer.d.ts +5 -3
  1008. package/dist/generated/gtk/printer.js +15 -5
  1009. package/dist/generated/gtk/progress-bar.d.ts +8 -4
  1010. package/dist/generated/gtk/progress-bar.js +22 -2
  1011. package/dist/generated/gtk/property-expression.d.ts +5 -4
  1012. package/dist/generated/gtk/property-expression.js +16 -5
  1013. package/dist/generated/gtk/range.d.ts +10 -5
  1014. package/dist/generated/gtk/range.js +36 -3
  1015. package/dist/generated/gtk/recent-info.d.ts +32 -0
  1016. package/dist/generated/gtk/recent-info.js +324 -0
  1017. package/dist/generated/gtk/recent-manager.d.ts +2 -1
  1018. package/dist/generated/gtk/recent-manager.js +51 -20
  1019. package/dist/generated/gtk/requisition.d.ts +11 -0
  1020. package/dist/generated/gtk/requisition.js +52 -0
  1021. package/dist/generated/gtk/revealer.d.ts +4 -4
  1022. package/dist/generated/gtk/revealer.js +7 -2
  1023. package/dist/generated/gtk/root.d.ts +9 -5
  1024. package/dist/generated/gtk/root.js +22 -3
  1025. package/dist/generated/gtk/scale-button.d.ts +12 -7
  1026. package/dist/generated/gtk/scale-button.js +47 -5
  1027. package/dist/generated/gtk/scale.d.ts +4 -2
  1028. package/dist/generated/gtk/scale.js +10 -4
  1029. package/dist/generated/gtk/scroll-info.d.ts +11 -0
  1030. package/dist/generated/gtk/scroll-info.js +80 -0
  1031. package/dist/generated/gtk/scrollable.d.ts +11 -15
  1032. package/dist/generated/gtk/scrollable.js +30 -29
  1033. package/dist/generated/gtk/scrollbar.d.ts +8 -5
  1034. package/dist/generated/gtk/scrollbar.js +29 -3
  1035. package/dist/generated/gtk/scrolled-window.d.ts +15 -14
  1036. package/dist/generated/gtk/scrolled-window.js +34 -8
  1037. package/dist/generated/gtk/search-bar.d.ts +10 -9
  1038. package/dist/generated/gtk/search-bar.js +15 -5
  1039. package/dist/generated/gtk/search-entry.d.ts +29 -3
  1040. package/dist/generated/gtk/search-entry.js +290 -2
  1041. package/dist/generated/gtk/section-model.d.ts +4 -3
  1042. package/dist/generated/gtk/section-model.js +7 -31
  1043. package/dist/generated/gtk/selection-filter-model.d.ts +6 -5
  1044. package/dist/generated/gtk/selection-filter-model.js +9 -3
  1045. package/dist/generated/gtk/selection-model.d.ts +8 -6
  1046. package/dist/generated/gtk/selection-model.js +36 -39
  1047. package/dist/generated/gtk/separator.d.ts +2 -0
  1048. package/dist/generated/gtk/separator.js +20 -0
  1049. package/dist/generated/gtk/settings.d.ts +2 -1
  1050. package/dist/generated/gtk/settings.js +1 -1
  1051. package/dist/generated/gtk/shortcut-action.d.ts +4 -2
  1052. package/dist/generated/gtk/shortcut-action.js +5 -5
  1053. package/dist/generated/gtk/shortcut-controller.d.ts +11 -7
  1054. package/dist/generated/gtk/shortcut-controller.js +13 -5
  1055. package/dist/generated/gtk/shortcut-manager.d.ts +4 -2
  1056. package/dist/generated/gtk/shortcut-manager.js +7 -0
  1057. package/dist/generated/gtk/shortcut-trigger.d.ts +8 -6
  1058. package/dist/generated/gtk/shortcut-trigger.js +10 -10
  1059. package/dist/generated/gtk/shortcut.d.ts +17 -14
  1060. package/dist/generated/gtk/shortcut.js +37 -14
  1061. package/dist/generated/gtk/shortcuts-group.d.ts +5 -3
  1062. package/dist/generated/gtk/shortcuts-group.js +1 -1
  1063. package/dist/generated/gtk/shortcuts-section.d.ts +2 -1
  1064. package/dist/generated/gtk/shortcuts-section.js +1 -1
  1065. package/dist/generated/gtk/shortcuts-shortcut.d.ts +6 -4
  1066. package/dist/generated/gtk/shortcuts-window.d.ts +2 -1
  1067. package/dist/generated/gtk/shortcuts-window.js +1 -1
  1068. package/dist/generated/gtk/single-selection.d.ts +24 -7
  1069. package/dist/generated/gtk/single-selection.js +227 -4
  1070. package/dist/generated/gtk/size-group.d.ts +4 -2
  1071. package/dist/generated/gtk/size-group.js +10 -2
  1072. package/dist/generated/gtk/slice-list-model.d.ts +9 -5
  1073. package/dist/generated/gtk/slice-list-model.js +51 -3
  1074. package/dist/generated/gtk/snapshot.d.ts +46 -39
  1075. package/dist/generated/gtk/snapshot.js +299 -127
  1076. package/dist/generated/gtk/sort-list-model.d.ts +18 -13
  1077. package/dist/generated/gtk/sort-list-model.js +67 -8
  1078. package/dist/generated/gtk/sorter.d.ts +2 -1
  1079. package/dist/generated/gtk/sorter.js +2 -2
  1080. package/dist/generated/gtk/spin-button.d.ts +39 -7
  1081. package/dist/generated/gtk/spin-button.js +341 -4
  1082. package/dist/generated/gtk/stack-page.d.ts +28 -2
  1083. package/dist/generated/gtk/stack-page.js +335 -1
  1084. package/dist/generated/gtk/stack-sidebar.d.ts +5 -4
  1085. package/dist/generated/gtk/stack-sidebar.js +8 -2
  1086. package/dist/generated/gtk/stack-switcher.d.ts +8 -4
  1087. package/dist/generated/gtk/stack-switcher.js +28 -2
  1088. package/dist/generated/gtk/stack.d.ts +14 -12
  1089. package/dist/generated/gtk/stack.js +50 -13
  1090. package/dist/generated/gtk/string-filter.d.ts +6 -5
  1091. package/dist/generated/gtk/string-filter.js +9 -3
  1092. package/dist/generated/gtk/string-list.d.ts +1 -0
  1093. package/dist/generated/gtk/string-list.js +8 -0
  1094. package/dist/generated/gtk/string-sorter.d.ts +6 -5
  1095. package/dist/generated/gtk/string-sorter.js +9 -3
  1096. package/dist/generated/gtk/style-context.d.ts +16 -13
  1097. package/dist/generated/gtk/style-context.js +54 -13
  1098. package/dist/generated/gtk/style-provider.d.ts +4 -3
  1099. package/dist/generated/gtk/style-provider.js +6 -28
  1100. package/dist/generated/gtk/switch.d.ts +7 -0
  1101. package/dist/generated/gtk/switch.js +75 -0
  1102. package/dist/generated/gtk/symbolic-paintable.d.ts +6 -3
  1103. package/dist/generated/gtk/symbolic-paintable.js +17 -3
  1104. package/dist/generated/gtk/text-buffer.d.ts +56 -50
  1105. package/dist/generated/gtk/text-buffer.js +421 -131
  1106. package/dist/generated/gtk/text-child-anchor.d.ts +2 -1
  1107. package/dist/generated/gtk/text-iter.d.ts +102 -0
  1108. package/dist/generated/gtk/text-iter.js +1081 -0
  1109. package/dist/generated/gtk/text-mark.d.ts +2 -1
  1110. package/dist/generated/gtk/text-mark.js +7 -1
  1111. package/dist/generated/gtk/text-tag-table.d.ts +5 -3
  1112. package/dist/generated/gtk/text-tag-table.js +18 -5
  1113. package/dist/generated/gtk/text-tag.d.ts +32 -30
  1114. package/dist/generated/gtk/text-view.d.ts +61 -40
  1115. package/dist/generated/gtk/text-view.js +329 -52
  1116. package/dist/generated/gtk/text.d.ts +51 -19
  1117. package/dist/generated/gtk/text.js +391 -17
  1118. package/dist/generated/gtk/toggle-button.d.ts +2 -2
  1119. package/dist/generated/gtk/toggle-button.js +1 -1
  1120. package/dist/generated/gtk/tooltip.d.ts +7 -4
  1121. package/dist/generated/gtk/tooltip.js +9 -5
  1122. package/dist/generated/gtk/tree-drag-dest.d.ts +8 -4
  1123. package/dist/generated/gtk/tree-drag-dest.js +23 -8
  1124. package/dist/generated/gtk/tree-drag-source.d.ts +9 -5
  1125. package/dist/generated/gtk/tree-drag-source.js +32 -7
  1126. package/dist/generated/gtk/tree-expander.d.ts +12 -10
  1127. package/dist/generated/gtk/tree-expander.js +22 -5
  1128. package/dist/generated/gtk/tree-iter.d.ts +15 -0
  1129. package/dist/generated/gtk/tree-iter.js +54 -0
  1130. package/dist/generated/gtk/tree-list-model.d.ts +7 -5
  1131. package/dist/generated/gtk/tree-list-model.js +23 -6
  1132. package/dist/generated/gtk/tree-list-row-sorter.d.ts +5 -5
  1133. package/dist/generated/gtk/tree-list-row-sorter.js +8 -3
  1134. package/dist/generated/gtk/tree-list-row.d.ts +8 -6
  1135. package/dist/generated/gtk/tree-list-row.js +26 -4
  1136. package/dist/generated/gtk/tree-model-filter.d.ts +44 -7
  1137. package/dist/generated/gtk/tree-model-filter.js +705 -19
  1138. package/dist/generated/gtk/tree-model-sort.d.ts +51 -8
  1139. package/dist/generated/gtk/tree-model-sort.js +806 -18
  1140. package/dist/generated/gtk/tree-model.d.ts +31 -27
  1141. package/dist/generated/gtk/tree-model.js +247 -112
  1142. package/dist/generated/gtk/tree-path.d.ts +25 -0
  1143. package/dist/generated/gtk/tree-path.js +233 -0
  1144. package/dist/generated/gtk/tree-row-reference.d.ts +19 -0
  1145. package/dist/generated/gtk/tree-row-reference.js +178 -0
  1146. package/dist/generated/gtk/tree-selection.d.ts +15 -11
  1147. package/dist/generated/gtk/tree-selection.js +78 -25
  1148. package/dist/generated/gtk/tree-sortable.d.ts +4 -3
  1149. package/dist/generated/gtk/tree-sortable.js +11 -32
  1150. package/dist/generated/gtk/tree-store.d.ts +65 -19
  1151. package/dist/generated/gtk/tree-store.js +1000 -60
  1152. package/dist/generated/gtk/tree-view-column.d.ts +27 -18
  1153. package/dist/generated/gtk/tree-view-column.js +85 -19
  1154. package/dist/generated/gtk/tree-view.d.ts +62 -44
  1155. package/dist/generated/gtk/tree-view.js +370 -125
  1156. package/dist/generated/gtk/uri-launcher.d.ts +4 -3
  1157. package/dist/generated/gtk/uri-launcher.js +51 -47
  1158. package/dist/generated/gtk/video.d.ts +12 -10
  1159. package/dist/generated/gtk/video.js +18 -6
  1160. package/dist/generated/gtk/viewport.d.ts +20 -6
  1161. package/dist/generated/gtk/viewport.js +126 -7
  1162. package/dist/generated/gtk/widget-paintable.d.ts +6 -5
  1163. package/dist/generated/gtk/widget-paintable.js +9 -3
  1164. package/dist/generated/gtk/widget.d.ts +95 -56
  1165. package/dist/generated/gtk/widget.js +601 -66
  1166. package/dist/generated/gtk/window-group.d.ts +3 -2
  1167. package/dist/generated/gtk/window-group.js +2 -2
  1168. package/dist/generated/gtk/window-handle.d.ts +4 -4
  1169. package/dist/generated/gtk/window-handle.js +7 -2
  1170. package/dist/generated/gtk/window.d.ts +38 -30
  1171. package/dist/generated/gtk/window.js +96 -15
  1172. package/dist/generated/harfbuzz/blob-t.d.ts +5 -0
  1173. package/dist/generated/harfbuzz/blob-t.js +9 -0
  1174. package/dist/generated/harfbuzz/buffer-t.d.ts +5 -0
  1175. package/dist/generated/harfbuzz/buffer-t.js +9 -0
  1176. package/dist/generated/harfbuzz/color-line-t.d.ts +18 -0
  1177. package/dist/generated/harfbuzz/color-line-t.js +49 -0
  1178. package/dist/generated/harfbuzz/color-stop-t.d.ts +12 -0
  1179. package/dist/generated/harfbuzz/color-stop-t.js +25 -0
  1180. package/dist/generated/harfbuzz/draw-funcs-t.d.ts +5 -0
  1181. package/dist/generated/harfbuzz/draw-funcs-t.js +9 -0
  1182. package/dist/generated/harfbuzz/draw-state-t.d.ts +20 -0
  1183. package/dist/generated/harfbuzz/draw-state-t.js +46 -0
  1184. package/dist/generated/harfbuzz/face-t.d.ts +5 -0
  1185. package/dist/generated/harfbuzz/face-t.js +9 -0
  1186. package/dist/generated/harfbuzz/feature-t.d.ts +19 -0
  1187. package/dist/generated/harfbuzz/feature-t.js +60 -0
  1188. package/dist/generated/harfbuzz/font-funcs-t.d.ts +5 -0
  1189. package/dist/generated/harfbuzz/font-funcs-t.js +9 -0
  1190. package/dist/generated/harfbuzz/font-t.d.ts +5 -0
  1191. package/dist/generated/harfbuzz/font-t.js +9 -0
  1192. package/dist/generated/harfbuzz/functions.d.ts +516 -493
  1193. package/dist/generated/harfbuzz/functions.js +4723 -1650
  1194. package/dist/generated/harfbuzz/glyph-info-t.d.ts +11 -0
  1195. package/dist/generated/harfbuzz/glyph-info-t.js +22 -0
  1196. package/dist/generated/harfbuzz/glyph-position-t.d.ts +9 -0
  1197. package/dist/generated/harfbuzz/glyph-position-t.js +22 -0
  1198. package/dist/generated/harfbuzz/index.d.ts +23 -1
  1199. package/dist/generated/harfbuzz/index.js +23 -1
  1200. package/dist/generated/harfbuzz/map-t.d.ts +5 -0
  1201. package/dist/generated/harfbuzz/map-t.js +9 -0
  1202. package/dist/generated/harfbuzz/ot-math-glyph-part-t.d.ts +11 -0
  1203. package/dist/generated/harfbuzz/ot-math-glyph-part-t.js +25 -0
  1204. package/dist/generated/harfbuzz/ot-math-glyph-variant-t.d.ts +7 -0
  1205. package/dist/generated/harfbuzz/ot-math-glyph-variant-t.js +16 -0
  1206. package/dist/generated/harfbuzz/ot-var-axis-info-t.d.ts +23 -0
  1207. package/dist/generated/harfbuzz/ot-var-axis-info-t.js +52 -0
  1208. package/dist/generated/harfbuzz/paint-funcs-t.d.ts +5 -0
  1209. package/dist/generated/harfbuzz/paint-funcs-t.js +9 -0
  1210. package/dist/generated/harfbuzz/segment-properties-t.d.ts +9 -0
  1211. package/dist/generated/harfbuzz/segment-properties-t.js +19 -0
  1212. package/dist/generated/harfbuzz/set-t.d.ts +5 -0
  1213. package/dist/generated/harfbuzz/set-t.js +9 -0
  1214. package/dist/generated/harfbuzz/shape-plan-t.d.ts +5 -0
  1215. package/dist/generated/harfbuzz/shape-plan-t.js +9 -0
  1216. package/dist/generated/harfbuzz/unicode-funcs-t.d.ts +5 -0
  1217. package/dist/generated/harfbuzz/unicode-funcs-t.js +9 -0
  1218. package/dist/generated/harfbuzz/user-data-key-t.d.ts +5 -0
  1219. package/dist/generated/harfbuzz/user-data-key-t.js +10 -0
  1220. package/dist/generated/pango/attr-iterator.d.ts +17 -0
  1221. package/dist/generated/pango/attr-iterator.js +128 -0
  1222. package/dist/generated/pango/attr-list.d.ts +21 -0
  1223. package/dist/generated/pango/attr-list.js +243 -0
  1224. package/dist/generated/pango/attribute.d.ts +27 -0
  1225. package/dist/generated/pango/attribute.js +156 -0
  1226. package/dist/generated/pango/color.d.ts +22 -0
  1227. package/dist/generated/pango/color.js +100 -0
  1228. package/dist/generated/pango/context.d.ts +20 -12
  1229. package/dist/generated/pango/context.js +122 -28
  1230. package/dist/generated/pango/coverage.d.ts +3 -3
  1231. package/dist/generated/pango/coverage.js +13 -3
  1232. package/dist/generated/pango/font-description.d.ts +44 -0
  1233. package/dist/generated/pango/font-description.js +454 -0
  1234. package/dist/generated/pango/font-face.d.ts +4 -2
  1235. package/dist/generated/pango/font-face.js +20 -3
  1236. package/dist/generated/pango/font-family.d.ts +3 -2
  1237. package/dist/generated/pango/font-family.js +7 -1
  1238. package/dist/generated/pango/font-map.d.ts +12 -6
  1239. package/dist/generated/pango/font-map.js +66 -19
  1240. package/dist/generated/pango/font-metrics.d.ts +16 -0
  1241. package/dist/generated/pango/font-metrics.js +108 -0
  1242. package/dist/generated/pango/font.d.ts +21 -12
  1243. package/dist/generated/pango/font.js +140 -29
  1244. package/dist/generated/pango/fontset-simple.d.ts +4 -2
  1245. package/dist/generated/pango/fontset-simple.js +7 -3
  1246. package/dist/generated/pango/fontset.d.ts +4 -2
  1247. package/dist/generated/pango/fontset.js +21 -4
  1248. package/dist/generated/pango/functions.d.ts +72 -61
  1249. package/dist/generated/pango/functions.js +708 -159
  1250. package/dist/generated/pango/glyph-item-iter.d.ts +34 -0
  1251. package/dist/generated/pango/glyph-item-iter.js +147 -0
  1252. package/dist/generated/pango/glyph-item.d.ts +28 -0
  1253. package/dist/generated/pango/glyph-item.js +159 -0
  1254. package/dist/generated/pango/glyph-string.d.ts +22 -0
  1255. package/dist/generated/pango/glyph-string.js +265 -0
  1256. package/dist/generated/pango/index.d.ts +17 -1
  1257. package/dist/generated/pango/index.js +17 -1
  1258. package/dist/generated/pango/item.d.ts +18 -0
  1259. package/dist/generated/pango/item.js +111 -0
  1260. package/dist/generated/pango/language.d.ts +15 -0
  1261. package/dist/generated/pango/language.js +102 -0
  1262. package/dist/generated/pango/layout-iter.d.ts +29 -0
  1263. package/dist/generated/pango/layout-iter.js +265 -0
  1264. package/dist/generated/pango/layout-line.d.ts +34 -0
  1265. package/dist/generated/pango/layout-line.js +230 -0
  1266. package/dist/generated/pango/layout.d.ts +21 -14
  1267. package/dist/generated/pango/layout.js +149 -35
  1268. package/dist/generated/pango/matrix.d.ts +39 -0
  1269. package/dist/generated/pango/matrix.js +233 -0
  1270. package/dist/generated/pango/renderer.d.ts +18 -11
  1271. package/dist/generated/pango/renderer.js +80 -21
  1272. package/dist/generated/pango/script-iter.d.ts +11 -0
  1273. package/dist/generated/pango/script-iter.js +60 -0
  1274. package/dist/generated/pango/tab-array.d.ts +23 -0
  1275. package/dist/generated/pango/tab-array.js +241 -0
  1276. package/dist/generated/pangocairo/font-map.d.ts +8 -4
  1277. package/dist/generated/pangocairo/font-map.js +15 -2
  1278. package/dist/generated/pangocairo/font.d.ts +6 -3
  1279. package/dist/generated/pangocairo/font.js +20 -2
  1280. package/dist/generated/pangocairo/functions.d.ts +24 -22
  1281. package/dist/generated/pangocairo/functions.js +174 -61
  1282. package/dist/index.d.ts +1 -0
  1283. package/dist/index.js +1 -0
  1284. package/dist/native-error.d.ts +6 -0
  1285. package/dist/native-error.js +17 -0
  1286. package/package.json +3 -3
@@ -48,10 +48,24 @@ const RESERVED_WORDS = new Set([
48
48
  "public",
49
49
  "await",
50
50
  "async",
51
+ "eval",
52
+ "arguments",
51
53
  ]);
52
54
  const METHOD_RENAMES = new Map([
53
- ["IconView", new Map([["setCursor", "setCursorPath"]])],
54
- ["TreeView", new Map([["setCursor", "setCursorPath"]])],
55
+ [
56
+ "IconView",
57
+ new Map([
58
+ ["setCursor", "setCursorPath"],
59
+ ["getCursor", "getCursorPath"],
60
+ ]),
61
+ ],
62
+ [
63
+ "TreeView",
64
+ new Map([
65
+ ["setCursor", "setCursorPath"],
66
+ ["getCursor", "getCursorPath"],
67
+ ]),
68
+ ],
55
69
  ["HSV", new Map([["getColor", "getHsvColor"]])],
56
70
  ["Layout", new Map([["getSize", "getLayoutSize"]])],
57
71
  ["Table", new Map([["getSize", "getTableSize"]])],
@@ -66,8 +80,13 @@ const METHOD_RENAMES = new Map([
66
80
  ["setDirection", "setArrowDirection"],
67
81
  ]),
68
82
  ],
83
+ ["PrintUnixDialog", new Map([["getSettings", "getPrintSettings"]])],
69
84
  ]);
70
- const toKebabCase = (str) => str.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase();
85
+ const CLASS_RENAMES = new Map([["Error", "GError"]]);
86
+ const toKebabCase = (str) => str
87
+ .replace(/([a-z])([A-Z])/g, "$1-$2")
88
+ .replace(/_/g, "-")
89
+ .toLowerCase();
71
90
  const toConstantCase = (str) => str.replace(/-/g, "_").toUpperCase();
72
91
  const sanitizeDoc = (doc) => {
73
92
  let result = doc;
@@ -126,7 +145,16 @@ const toValidIdentifier = (str) => {
126
145
  result = `_${result}`;
127
146
  return result;
128
147
  };
129
- const normalizeClassName = (name) => (name === "Object" ? "GObject" : toPascalCase(name));
148
+ const normalizeClassName = (name) => {
149
+ const pascalName = toPascalCase(name);
150
+ if (CLASS_RENAMES.has(pascalName)) {
151
+ return CLASS_RENAMES.get(pascalName);
152
+ }
153
+ if (pascalName === "Object") {
154
+ return "GObject";
155
+ }
156
+ return pascalName;
157
+ };
130
158
  const hasOutParameter = (params) => params.some((p) => p.direction === "out" || p.direction === "inout");
131
159
  const isVararg = (param) => param.name === "..." || param.name === "";
132
160
  export class CodeGenerator {
@@ -134,32 +162,58 @@ export class CodeGenerator {
134
162
  typeMapper;
135
163
  usesRef = false;
136
164
  usesCall = false;
165
+ addGioImport = false;
137
166
  usesType = false;
167
+ usesRead = false;
168
+ usesWrite = false;
169
+ usesAlloc = false;
170
+ usesNativeError = false;
138
171
  usedEnums = new Set();
172
+ usedRecords = new Set();
173
+ usedExternalTypes = new Map();
174
+ usedSameNamespaceClasses = new Map();
175
+ usedInterfaces = new Map();
139
176
  signalClasses = new Set();
177
+ recordNameToFile = new Map();
178
+ interfaceNameToFile = new Map();
179
+ currentSharedLibrary = "";
180
+ cyclicReturnTypes = new Set();
140
181
  constructor(options) {
141
182
  this.options = options;
142
183
  this.typeMapper = new TypeMapper();
184
+ if (options.typeRegistry) {
185
+ this.typeMapper.setTypeRegistry(options.typeRegistry, options.namespace);
186
+ }
143
187
  }
144
188
  async generateNamespace(namespace) {
145
189
  const files = new Map();
190
+ this.currentSharedLibrary = namespace.sharedLibrary;
146
191
  this.registerEnumsAndBitfields(namespace);
192
+ this.registerRecords(namespace);
193
+ this.registerInterfaces(namespace);
147
194
  const classMap = this.buildClassMap(namespace);
195
+ const interfaceMap = this.buildInterfaceMap(namespace);
148
196
  this.attachConstructorFunctions(namespace, classMap);
197
+ const allEnums = [...namespace.enumerations, ...namespace.bitfields];
198
+ if (allEnums.length > 0) {
199
+ files.set("enums.ts", await this.generateEnums(allEnums));
200
+ }
201
+ for (const record of namespace.records) {
202
+ if (this.shouldGenerateRecord(record)) {
203
+ files.set(`${toKebabCase(record.name)}.ts`, await this.generateRecord(record, namespace.sharedLibrary));
204
+ }
205
+ }
206
+ const sortedClasses = this.topologicalSortClasses(namespace.classes, classMap);
207
+ for (const cls of sortedClasses) {
208
+ files.set(`${toKebabCase(cls.name)}.ts`, await this.generateClass(cls, namespace.sharedLibrary, classMap, interfaceMap));
209
+ }
149
210
  for (const iface of namespace.interfaces) {
150
211
  files.set(`${toKebabCase(iface.name)}.ts`, await this.generateInterface(iface, namespace.sharedLibrary, classMap));
151
212
  }
152
- for (const cls of namespace.classes) {
153
- files.set(`${toKebabCase(cls.name)}.ts`, await this.generateClass(cls, namespace.sharedLibrary, classMap));
154
- }
155
213
  const standaloneFunctions = this.getStandaloneFunctions(namespace, classMap);
156
214
  if (standaloneFunctions.length > 0) {
157
215
  files.set("functions.ts", await this.generateFunctions(standaloneFunctions, namespace.sharedLibrary));
158
216
  }
159
- const allEnums = [...namespace.enumerations, ...namespace.bitfields];
160
- if (allEnums.length > 0) {
161
- files.set("enums.ts", await this.generateEnums(allEnums));
162
- }
163
217
  files.set("index.ts", await this.generateIndex(files.keys()));
164
218
  return files;
165
219
  }
@@ -171,6 +225,28 @@ export class CodeGenerator {
171
225
  this.typeMapper.registerEnum(bitfield.name, toPascalCase(bitfield.name));
172
226
  }
173
227
  }
228
+ registerRecords(namespace) {
229
+ for (const record of namespace.records) {
230
+ if (this.shouldGenerateRecord(record)) {
231
+ const normalizedName = normalizeClassName(record.name);
232
+ this.typeMapper.registerRecord(record.name, normalizedName, record.glibTypeName);
233
+ this.recordNameToFile.set(normalizedName, record.name);
234
+ }
235
+ }
236
+ }
237
+ shouldGenerateRecord(record) {
238
+ if (record.disguised)
239
+ return false;
240
+ if (record.name.endsWith("Class"))
241
+ return false;
242
+ if (record.name.endsWith("Private"))
243
+ return false;
244
+ if (record.name.endsWith("Iface"))
245
+ return false;
246
+ if (!record.glibTypeName)
247
+ return false;
248
+ return true;
249
+ }
174
250
  buildClassMap(namespace) {
175
251
  const classMap = new Map();
176
252
  for (const cls of namespace.classes) {
@@ -178,6 +254,19 @@ export class CodeGenerator {
178
254
  }
179
255
  return classMap;
180
256
  }
257
+ registerInterfaces(namespace) {
258
+ for (const iface of namespace.interfaces) {
259
+ const normalizedName = toPascalCase(iface.name);
260
+ this.interfaceNameToFile.set(normalizedName, iface.name);
261
+ }
262
+ }
263
+ buildInterfaceMap(namespace) {
264
+ const interfaceMap = new Map();
265
+ for (const iface of namespace.interfaces) {
266
+ interfaceMap.set(iface.name, iface);
267
+ }
268
+ return interfaceMap;
269
+ }
181
270
  attachConstructorFunctions(namespace, classMap) {
182
271
  for (const func of namespace.functions) {
183
272
  const match = func.cIdentifier?.match(/^[a-z_]+_([a-z_]+)_new(_.*)?$/);
@@ -213,22 +302,64 @@ export class CodeGenerator {
213
302
  resetState() {
214
303
  this.usesRef = false;
215
304
  this.usesCall = false;
305
+ this.addGioImport = false;
216
306
  this.usesType = false;
307
+ this.usesRead = false;
308
+ this.usesWrite = false;
309
+ this.usesAlloc = false;
310
+ this.usesNativeError = false;
217
311
  this.usedEnums.clear();
312
+ this.usedRecords.clear();
313
+ this.usedExternalTypes.clear();
314
+ this.usedSameNamespaceClasses.clear();
315
+ this.usedInterfaces.clear();
218
316
  this.signalClasses.clear();
317
+ this.cyclicReturnTypes.clear();
219
318
  this.typeMapper.setEnumUsageCallback((enumName) => this.usedEnums.add(enumName));
319
+ this.typeMapper.setRecordUsageCallback((recordName) => this.usedRecords.add(recordName));
320
+ this.typeMapper.setExternalTypeUsageCallback((usage) => {
321
+ const key = `${usage.namespace}.${usage.transformedName}`;
322
+ this.usedExternalTypes.set(key, usage);
323
+ });
324
+ this.typeMapper.setSameNamespaceClassUsageCallback((className, originalName) => {
325
+ this.usedSameNamespaceClasses.set(className, originalName);
326
+ });
220
327
  }
221
- async generateClass(cls, sharedLibrary, classMap) {
328
+ async generateClass(cls, sharedLibrary, classMap, interfaceMap) {
222
329
  this.resetState();
330
+ this.cyclicReturnTypes = this.computeCyclicReturnTypes(cls, classMap);
331
+ const asyncMethods = new Set();
332
+ const finishMethods = new Set();
333
+ for (const method of cls.methods) {
334
+ if (this.hasAsyncCallback(method)) {
335
+ asyncMethods.add(method.name);
336
+ finishMethods.add(`${method.name}_finish`);
337
+ }
338
+ }
339
+ const parentMethodNames = this.collectParentMethodNames(cls, classMap, interfaceMap);
340
+ const filteredClassMethods = cls.methods.filter((m) => !parentMethodNames.has(m.name));
341
+ const classMethodNames = new Set(cls.methods.map((m) => m.name));
342
+ const interfaceMethods = cls.implements
343
+ .flatMap((ifaceName) => interfaceMap.get(ifaceName)?.methods ?? [])
344
+ .filter((m) => !classMethodNames.has(m.name) && !parentMethodNames.has(m.name));
345
+ const syncMethods = filteredClassMethods.filter((m) => !asyncMethods.has(m.name) && !finishMethods.has(m.name));
346
+ const syncInterfaceMethods = interfaceMethods.filter((m) => !asyncMethods.has(m.name) && !finishMethods.has(m.name));
223
347
  this.usesRef =
224
- cls.methods.some((m) => hasOutParameter(m.parameters)) ||
348
+ syncMethods.some((m) => hasOutParameter(m.parameters)) ||
225
349
  cls.constructors.some((c) => hasOutParameter(c.parameters)) ||
226
- cls.functions.some((f) => hasOutParameter(f.parameters));
227
- this.usesCall = cls.methods.length > 0 || cls.constructors.length > 0 || cls.functions.length > 0 || cls.signals.length > 0;
350
+ cls.functions.some((f) => hasOutParameter(f.parameters)) ||
351
+ syncInterfaceMethods.some((m) => hasOutParameter(m.parameters));
352
+ this.usesCall =
353
+ filteredClassMethods.length > 0 ||
354
+ cls.constructors.length > 0 ||
355
+ cls.functions.length > 0 ||
356
+ cls.signals.length > 0 ||
357
+ interfaceMethods.length > 0;
228
358
  const className = normalizeClassName(cls.name);
229
359
  const hasParent = !!(cls.parent && classMap.has(cls.parent));
230
360
  const parentClassName = cls.parent ? normalizeClassName(cls.parent) : "";
231
361
  const extendsClause = hasParent ? ` extends ${parentClassName}` : "";
362
+ const implementsClause = "";
232
363
  const sections = [];
233
364
  if (hasParent && cls.parent) {
234
365
  sections.push(`import { ${parentClassName} } from "./${toKebabCase(cls.parent)}.js";`);
@@ -237,15 +368,18 @@ export class CodeGenerator {
237
368
  if (cls.doc) {
238
369
  sections.push(formatDoc(cls.doc));
239
370
  }
240
- sections.push(`export class ${className}${extendsClause} {`);
371
+ sections.push(`export class ${className}${extendsClause}${implementsClause} {`);
241
372
  if (!extendsClause) {
242
373
  sections.push(` ptr: unknown;\n`);
243
374
  }
244
375
  sections.push(this.generateConstructors(cls, sharedLibrary, hasParent));
245
376
  sections.push(this.generateCreatePtr(cls, sharedLibrary, hasParent));
246
377
  sections.push(this.generateStaticFunctions(cls.functions, sharedLibrary, className));
247
- sections.push(this.generateMethods(cls.methods, sharedLibrary, cls.name));
378
+ sections.push(this.generateMethods(filteredClassMethods, sharedLibrary, cls.name));
248
379
  sections.push(this.generateProperties(cls.properties, cls.methods));
380
+ if (interfaceMethods.length > 0) {
381
+ sections.push(this.generateMethods(interfaceMethods, sharedLibrary, className));
382
+ }
249
383
  if (cls.signals.length > 0) {
250
384
  const hasConnectMethod = cls.methods.some((m) => toCamelCase(m.name) === "connect");
251
385
  sections.push(this.generateSignalConnect(sharedLibrary, cls.signals, hasConnectMethod, classMap));
@@ -254,6 +388,124 @@ export class CodeGenerator {
254
388
  const imports = this.generateImports(className, hasParent ? parentClassName : undefined);
255
389
  return this.formatCode(imports + sections.join("\n"));
256
390
  }
391
+ topologicalSortClasses(classes, classMap) {
392
+ const sorted = [];
393
+ const visited = new Set();
394
+ const visit = (cls) => {
395
+ if (visited.has(cls.name))
396
+ return;
397
+ visited.add(cls.name);
398
+ if (cls.parent && classMap.has(cls.parent)) {
399
+ const parent = classMap.get(cls.parent);
400
+ visit(parent);
401
+ }
402
+ sorted.push(cls);
403
+ };
404
+ for (const cls of classes) {
405
+ visit(cls);
406
+ }
407
+ return sorted;
408
+ }
409
+ isDescendantOf(className, ancestorName, classMap) {
410
+ const cls = classMap.get(className);
411
+ if (!cls)
412
+ return false;
413
+ if (cls.parent === ancestorName)
414
+ return true;
415
+ if (cls.parent && classMap.has(cls.parent)) {
416
+ return this.isDescendantOf(cls.parent, ancestorName, classMap);
417
+ }
418
+ return false;
419
+ }
420
+ computeCyclicReturnTypes(cls, classMap) {
421
+ const cyclic = new Set();
422
+ for (const method of cls.methods) {
423
+ const returnTypeName = method.returnType.name;
424
+ if (returnTypeName && classMap.has(returnTypeName)) {
425
+ if (this.wouldCreateCycle(cls.name, returnTypeName, classMap)) {
426
+ cyclic.add(normalizeClassName(returnTypeName));
427
+ }
428
+ }
429
+ }
430
+ for (const func of cls.functions) {
431
+ const returnTypeName = func.returnType.name;
432
+ if (returnTypeName && classMap.has(returnTypeName)) {
433
+ if (this.wouldCreateCycle(cls.name, returnTypeName, classMap)) {
434
+ cyclic.add(normalizeClassName(returnTypeName));
435
+ }
436
+ }
437
+ }
438
+ return cyclic;
439
+ }
440
+ wouldCreateCycle(currentClass, returnType, classMap) {
441
+ if (this.isDescendantOf(returnType, currentClass, classMap)) {
442
+ return true;
443
+ }
444
+ const returnTypeClass = classMap.get(returnType);
445
+ if (!returnTypeClass)
446
+ return false;
447
+ const ancestors = this.getAncestors(returnType, classMap);
448
+ for (const ancestor of ancestors) {
449
+ const ancestorClass = classMap.get(ancestor);
450
+ if (!ancestorClass)
451
+ continue;
452
+ if (this.classImports(ancestorClass, currentClass, classMap)) {
453
+ return true;
454
+ }
455
+ }
456
+ return false;
457
+ }
458
+ getAncestors(className, classMap) {
459
+ const ancestors = [];
460
+ let current = classMap.get(className);
461
+ while (current?.parent && classMap.has(current.parent)) {
462
+ ancestors.push(current.parent);
463
+ current = classMap.get(current.parent);
464
+ }
465
+ return ancestors;
466
+ }
467
+ classImports(cls, targetClass, _classMap) {
468
+ for (const method of cls.methods) {
469
+ if (method.returnType.name === targetClass)
470
+ return true;
471
+ for (const param of method.parameters) {
472
+ if (param.type.name === targetClass)
473
+ return true;
474
+ }
475
+ }
476
+ for (const func of cls.functions) {
477
+ if (func.returnType.name === targetClass)
478
+ return true;
479
+ for (const param of func.parameters) {
480
+ if (param.type.name === targetClass)
481
+ return true;
482
+ }
483
+ }
484
+ for (const prop of cls.properties) {
485
+ if (prop.type.name === targetClass)
486
+ return true;
487
+ }
488
+ return false;
489
+ }
490
+ collectParentMethodNames(cls, classMap, interfaceMap) {
491
+ const names = new Set();
492
+ let current = cls.parent ? classMap.get(cls.parent) : undefined;
493
+ while (current) {
494
+ for (const method of current.methods) {
495
+ names.add(method.name);
496
+ }
497
+ for (const ifaceName of current.implements) {
498
+ const iface = interfaceMap.get(ifaceName);
499
+ if (iface) {
500
+ for (const method of iface.methods) {
501
+ names.add(method.name);
502
+ }
503
+ }
504
+ }
505
+ current = current.parent ? classMap.get(current.parent) : undefined;
506
+ }
507
+ return names;
508
+ }
257
509
  generateConstructors(cls, _sharedLibrary, hasParent) {
258
510
  const mainConstructor = cls.constructors.find((c) => !c.parameters.some(isVararg));
259
511
  const sections = [];
@@ -317,7 +569,7 @@ export class CodeGenerator {
317
569
  }
318
570
  return ` protected createPtr(_args: unknown[]): unknown {\n return null;\n }\n`;
319
571
  }
320
- const filteredParams = mainConstructor.parameters.filter((p) => !isVararg(p));
572
+ const filteredParams = mainConstructor.parameters.filter((p, i) => !isVararg(p) && !this.typeMapper.isClosureTarget(i, mainConstructor.parameters));
321
573
  const paramTypes = filteredParams.map((p) => this.typeMapper.mapParameter(p).ts);
322
574
  const paramNames = filteredParams.map((p) => toValidIdentifier(toCamelCase(p.name)));
323
575
  const destructuring = paramNames.length > 0
@@ -439,15 +691,258 @@ ${allArgs ? `${allArgs},` : ""}
439
691
  generateMethods(methods, sharedLibrary, className) {
440
692
  const generatedMethods = new Set();
441
693
  const sections = [];
694
+ const asyncMethods = new Set();
695
+ const finishMethods = new Set();
696
+ for (const method of methods) {
697
+ if (this.hasAsyncCallback(method)) {
698
+ asyncMethods.add(method.name);
699
+ finishMethods.add(`${method.name}_finish`);
700
+ }
701
+ }
442
702
  for (const method of methods) {
443
703
  const methodKey = `${toCamelCase(method.name)}:${method.cIdentifier}`;
444
704
  if (generatedMethods.has(methodKey))
445
705
  continue;
446
706
  generatedMethods.add(methodKey);
707
+ if (asyncMethods.has(method.name) || finishMethods.has(method.name)) {
708
+ const asyncWrapper = this.generateAsyncWrapper(method, methods, sharedLibrary, className);
709
+ if (asyncWrapper) {
710
+ sections.push(asyncWrapper);
711
+ }
712
+ continue;
713
+ }
447
714
  sections.push(this.generateMethod(method, sharedLibrary, className));
448
715
  }
449
716
  return sections.join("\n");
450
717
  }
718
+ hasAsyncCallback(method) {
719
+ return method.parameters.some((p) => p.type.name === "Gio.AsyncReadyCallback");
720
+ }
721
+ findFinishMethod(asyncMethod, allMethods) {
722
+ const finishName = `${asyncMethod.name}_finish`;
723
+ return allMethods.find((m) => m.name === finishName);
724
+ }
725
+ generateAsyncWrapper(method, allMethods, sharedLibrary, className) {
726
+ if (!this.hasAsyncCallback(method))
727
+ return null;
728
+ const finishMethod = this.findFinishMethod(method, allMethods);
729
+ if (!finishMethod)
730
+ return null;
731
+ let methodName = toCamelCase(method.name);
732
+ if (className) {
733
+ const renames = METHOD_RENAMES.get(className);
734
+ const renamed = renames?.get(methodName);
735
+ if (renamed)
736
+ methodName = renamed;
737
+ }
738
+ const paramsWithoutCallback = method.parameters.filter((p, i) => !isVararg(p) &&
739
+ p.type.name !== "Gio.AsyncReadyCallback" &&
740
+ !this.typeMapper.isClosureTarget(i, method.parameters));
741
+ let hasRequiredAfterOptional = false;
742
+ let seenOptional = false;
743
+ for (const p of paramsWithoutCallback) {
744
+ const isOptional = this.typeMapper.isNullable(p);
745
+ if (isOptional)
746
+ seenOptional = true;
747
+ else if (seenOptional)
748
+ hasRequiredAfterOptional = true;
749
+ }
750
+ if (hasRequiredAfterOptional) {
751
+ return null;
752
+ }
753
+ const params = paramsWithoutCallback
754
+ .map((p) => {
755
+ const mapped = this.typeMapper.mapParameter(p);
756
+ const paramName = toValidIdentifier(toCamelCase(p.name));
757
+ const isOptional = this.typeMapper.isNullable(p);
758
+ return `${paramName}${isOptional ? "?" : ""}: ${mapped.ts}`;
759
+ })
760
+ .join(", ");
761
+ const finishParams = finishMethod.parameters.filter((p) => !isVararg(p));
762
+ const outputParams = finishParams.filter((p) => p.direction === "out" || (p.type.name !== "Gio.AsyncResult" && p.direction !== "in"));
763
+ const returnTypeMapping = this.typeMapper.mapType(finishMethod.returnType, true);
764
+ const mainReturnType = returnTypeMapping.ts;
765
+ const hasMainReturn = mainReturnType !== "void";
766
+ this.addGioImport = true;
767
+ const promiseType = this.buildAsyncReturnType(hasMainReturn, mainReturnType, outputParams);
768
+ const lines = [];
769
+ lines.push(` /**`);
770
+ lines.push(` * Promise-based version of ${methodName}.`);
771
+ if (method.doc) {
772
+ const docLines = sanitizeDoc(method.doc).split("\n").slice(0, 3);
773
+ for (const line of docLines) {
774
+ lines.push(` * ${line.trim()}`);
775
+ }
776
+ }
777
+ lines.push(` */`);
778
+ lines.push(` ${methodName}(${params}): Promise<${promiseType}> {`);
779
+ lines.push(` return new Promise((resolve, reject) => {`);
780
+ const callArgs = this.buildAsyncCallArgs(method, finishMethod, outputParams, sharedLibrary);
781
+ lines.push(callArgs);
782
+ lines.push(` });`);
783
+ lines.push(` }`);
784
+ return `${lines.join("\n")}\n`;
785
+ }
786
+ buildAsyncReturnType(hasMainReturn, mainReturnType, outputParams) {
787
+ if (outputParams.length === 0) {
788
+ return hasMainReturn ? mainReturnType : "void";
789
+ }
790
+ const outputTypes = [];
791
+ if (hasMainReturn) {
792
+ outputTypes.push(`result: ${mainReturnType}`);
793
+ }
794
+ for (const param of outputParams) {
795
+ const paramName = toValidIdentifier(toCamelCase(param.name));
796
+ const mapped = this.typeMapper.mapParameter(param);
797
+ let paramType = mapped.ts;
798
+ if (paramType.startsWith("Ref<") && paramType.endsWith(">")) {
799
+ paramType = paramType.slice(4, -1);
800
+ }
801
+ outputTypes.push(`${paramName}: ${paramType}`);
802
+ }
803
+ return `{ ${outputTypes.join("; ")} }`;
804
+ }
805
+ buildAsyncCallArgs(method, finishMethod, outputParams, sharedLibrary) {
806
+ const returnTypeMapping = this.typeMapper.mapType(finishMethod.returnType, true);
807
+ const hasMainReturn = returnTypeMapping.ts !== "void";
808
+ const needsObjectWrap = (returnTypeMapping.ffi.type === "gobject" || returnTypeMapping.ffi.type === "boxed") &&
809
+ returnTypeMapping.ts !== "unknown";
810
+ const lines = [];
811
+ for (const param of outputParams) {
812
+ const paramName = toValidIdentifier(toCamelCase(param.name));
813
+ lines.push(` const ${paramName}Ref = { value: null as unknown };`);
814
+ }
815
+ const nonCallbackParams = method.parameters.filter((p, i) => !isVararg(p) &&
816
+ p.type.name !== "Gio.AsyncReadyCallback" &&
817
+ !this.typeMapper.isClosureTarget(i, method.parameters));
818
+ const asyncCallArgs = nonCallbackParams
819
+ .map((param) => {
820
+ const mapped = this.typeMapper.mapParameter(param);
821
+ const jsParamName = toValidIdentifier(toCamelCase(param.name));
822
+ const needsPtr = mapped.ffi.type === "gobject" || mapped.ffi.type === "boxed";
823
+ const valueName = needsPtr ? `(${jsParamName} as any)?.ptr ?? ${jsParamName}` : jsParamName;
824
+ return ` {\n type: ${this.generateTypeDescriptor(mapped.ffi)},\n value: ${valueName},\n }`;
825
+ })
826
+ .join(",\n");
827
+ const finishCallArgs = this.generateFinishCallArguments(finishMethod.parameters, outputParams);
828
+ const finishReturnType = this.typeMapper.mapType(finishMethod.returnType, true);
829
+ lines.push(` const callback = (_source: unknown, asyncResult: unknown) => {`);
830
+ lines.push(` try {`);
831
+ if (finishMethod.throws) {
832
+ lines.push(` const error = { value: null as unknown };`);
833
+ }
834
+ const errorArg = finishMethod.throws
835
+ ? `,\n { type: { type: "ref", innerType: { type: "boxed", innerType: "GError", lib: "libglib-2.0.so.0" } }, value: error }`
836
+ : "";
837
+ if (hasMainReturn) {
838
+ const varName = needsObjectWrap ? "ptr" : "result";
839
+ const castType = needsObjectWrap ? "unknown" : finishReturnType.ts;
840
+ lines.push(` const ${varName} = call(`);
841
+ lines.push(` "${sharedLibrary}",`);
842
+ lines.push(` "${finishMethod.cIdentifier}",`);
843
+ lines.push(` [`);
844
+ lines.push(` { type: { type: "gobject" }, value: this.ptr },`);
845
+ lines.push(`${finishCallArgs}${errorArg}`);
846
+ lines.push(` ],`);
847
+ lines.push(` ${this.generateTypeDescriptor(finishReturnType.ffi)}`);
848
+ lines.push(` ) as ${castType};`);
849
+ }
850
+ else {
851
+ lines.push(` call(`);
852
+ lines.push(` "${sharedLibrary}",`);
853
+ lines.push(` "${finishMethod.cIdentifier}",`);
854
+ lines.push(` [`);
855
+ lines.push(` { type: { type: "gobject" }, value: this.ptr },`);
856
+ lines.push(`${finishCallArgs}${errorArg}`);
857
+ lines.push(` ],`);
858
+ lines.push(` { type: "undefined" }`);
859
+ lines.push(` );`);
860
+ }
861
+ if (finishMethod.throws) {
862
+ lines.push(` if (error.value !== null) {`);
863
+ lines.push(` throw new NativeError(error.value);`);
864
+ lines.push(` }`);
865
+ this.usesNativeError = true;
866
+ }
867
+ if (outputParams.length === 0) {
868
+ if (hasMainReturn) {
869
+ if (needsObjectWrap) {
870
+ lines.push(` if (ptr === null) { resolve(null as unknown as ${finishReturnType.ts}); return; }`);
871
+ lines.push(` const instance = Object.create(${finishReturnType.ts}.prototype) as ${finishReturnType.ts} & { ptr: unknown };`);
872
+ lines.push(` instance.ptr = ptr;`);
873
+ lines.push(` resolve(instance);`);
874
+ }
875
+ else {
876
+ lines.push(` resolve(result);`);
877
+ }
878
+ }
879
+ else {
880
+ lines.push(` resolve();`);
881
+ }
882
+ }
883
+ else {
884
+ const resolveFields = [];
885
+ if (hasMainReturn) {
886
+ if (needsObjectWrap) {
887
+ lines.push(` const result = (ptr === null ? null : (() => {`);
888
+ lines.push(` const instance = Object.create(${finishReturnType.ts}.prototype) as ${finishReturnType.ts} & { ptr: unknown };`);
889
+ lines.push(` instance.ptr = ptr;`);
890
+ lines.push(` return instance;`);
891
+ lines.push(` })()) as ${finishReturnType.ts};`);
892
+ }
893
+ resolveFields.push("result");
894
+ }
895
+ for (const param of outputParams) {
896
+ const paramName = toValidIdentifier(toCamelCase(param.name));
897
+ const mapped = this.typeMapper.mapParameter(param);
898
+ let paramType = mapped.ts;
899
+ if (paramType.startsWith("Ref<") && paramType.endsWith(">")) {
900
+ paramType = paramType.slice(4, -1);
901
+ }
902
+ resolveFields.push(`${paramName}: ${paramName}Ref.value as ${paramType}`);
903
+ }
904
+ lines.push(` resolve({ ${resolveFields.join(", ")} });`);
905
+ }
906
+ lines.push(` } catch (err) {`);
907
+ lines.push(` reject(err);`);
908
+ lines.push(` }`);
909
+ lines.push(` };`);
910
+ lines.push(` call(`);
911
+ lines.push(` "${sharedLibrary}",`);
912
+ lines.push(` "${method.cIdentifier}",`);
913
+ lines.push(` [`);
914
+ lines.push(` { type: { type: "gobject" }, value: this.ptr },`);
915
+ if (asyncCallArgs) {
916
+ lines.push(`${asyncCallArgs},`);
917
+ }
918
+ lines.push(` {`);
919
+ lines.push(` type: { type: "asyncCallback", sourceType: { type: "gobject", borrowed: true }, resultType: { type: "gobject", borrowed: true } },`);
920
+ lines.push(` value: callback,`);
921
+ lines.push(` },`);
922
+ lines.push(` ],`);
923
+ lines.push(` { type: "undefined" }`);
924
+ lines.push(` );`);
925
+ return lines.join("\n");
926
+ }
927
+ generateFinishCallArguments(parameters, outputParams) {
928
+ return parameters
929
+ .filter((p) => !isVararg(p))
930
+ .map((param) => {
931
+ const paramName = toValidIdentifier(toCamelCase(param.name));
932
+ if (param.type.name === "Gio.AsyncResult") {
933
+ return ` { type: { type: "gobject" }, value: asyncResult }`;
934
+ }
935
+ if (outputParams.some((op) => op.name === param.name)) {
936
+ const mapped = this.typeMapper.mapParameter(param);
937
+ return ` { type: ${this.generateTypeDescriptor(mapped.ffi)}, value: ${paramName}Ref }`;
938
+ }
939
+ const mapped = this.typeMapper.mapParameter(param);
940
+ const needsPtr = mapped.ffi.type === "gobject" || mapped.ffi.type === "boxed";
941
+ const valueName = needsPtr ? `(${paramName} as any)?.ptr ?? ${paramName}` : paramName;
942
+ return ` { type: ${this.generateTypeDescriptor(mapped.ffi)}, value: ${valueName} }`;
943
+ })
944
+ .join(",\n");
945
+ }
451
946
  generateMethod(method, sharedLibrary, className) {
452
947
  let methodName = toCamelCase(method.name);
453
948
  if (className) {
@@ -463,7 +958,9 @@ ${allArgs ? `${allArgs},` : ""}
463
958
  const returnTypeAnnotation = tsReturnType !== "void" ? `: ${tsReturnType}` : "";
464
959
  const hasResultParam = method.parameters.some((p) => toValidIdentifier(toCamelCase(p.name)) === "result");
465
960
  const resultVarName = hasResultParam ? "_result" : "result";
466
- const needsCast = returnTypeMapping.ts !== "void" && returnTypeMapping.ts !== "unknown";
961
+ const needsObjectWrap = (returnTypeMapping.ffi.type === "gobject" || returnTypeMapping.ffi.type === "boxed") &&
962
+ tsReturnType !== "unknown" &&
963
+ returnTypeMapping.kind !== "interface";
467
964
  const hasReturnValue = returnTypeMapping.ts !== "void";
468
965
  const lines = [];
469
966
  const methodDoc = formatMethodDoc(method.doc, method.parameters);
@@ -474,17 +971,46 @@ ${allArgs ? `${allArgs},` : ""}
474
971
  if (method.throws) {
475
972
  lines.push(` const error = { value: null as unknown };`);
476
973
  }
477
- const callPrefix = method.throws
478
- ? hasReturnValue
479
- ? `const ${resultVarName} = `
480
- : ""
481
- : hasReturnValue
482
- ? "return "
483
- : "";
484
974
  const args = this.generateCallArguments(method.parameters);
485
975
  const errorArg = method.throws ? this.generateErrorArgument() : "";
486
976
  const allArgs = errorArg ? args + (args ? ",\n" : "") + errorArg : args;
487
- lines.push(` ${callPrefix}call(
977
+ if (needsObjectWrap && hasReturnValue) {
978
+ const isCyclic = this.cyclicReturnTypes.has(tsReturnType);
979
+ lines.push(` const ptr = call(
980
+ "${sharedLibrary}",
981
+ "${method.cIdentifier}",
982
+ [
983
+ {
984
+ type: { type: "gobject" },
985
+ value: this.ptr,
986
+ },
987
+ ${allArgs ? `${allArgs},` : ""}
988
+ ],
989
+ ${this.generateTypeDescriptor(returnTypeMapping.ffi)}
990
+ );`);
991
+ if (method.throws) {
992
+ lines.push(this.generateErrorCheck());
993
+ }
994
+ lines.push(` if (ptr === null) return null as unknown as ${tsReturnType};`);
995
+ if (isCyclic) {
996
+ lines.push(` return { ptr } as unknown as ${tsReturnType};`);
997
+ }
998
+ else {
999
+ lines.push(` const instance = Object.create(${tsReturnType}.prototype) as ${tsReturnType} & { ptr: unknown };`);
1000
+ lines.push(` instance.ptr = ptr;`);
1001
+ lines.push(` return instance;`);
1002
+ }
1003
+ }
1004
+ else {
1005
+ const callPrefix = method.throws
1006
+ ? hasReturnValue
1007
+ ? `const ${resultVarName} = `
1008
+ : ""
1009
+ : hasReturnValue
1010
+ ? "return "
1011
+ : "";
1012
+ const needsCast = returnTypeMapping.ts !== "void" && returnTypeMapping.ts !== "unknown";
1013
+ lines.push(` ${callPrefix}call(
488
1014
  "${sharedLibrary}",
489
1015
  "${method.cIdentifier}",
490
1016
  [
@@ -496,10 +1022,11 @@ ${allArgs ? `${allArgs},` : ""}
496
1022
  ],
497
1023
  ${this.generateTypeDescriptor(returnTypeMapping.ffi)}
498
1024
  )${needsCast ? ` as ${tsReturnType}` : ""};`);
499
- if (method.throws) {
500
- lines.push(this.generateErrorCheck());
501
- if (hasReturnValue) {
502
- lines.push(` return ${resultVarName};`);
1025
+ if (method.throws) {
1026
+ lines.push(this.generateErrorCheck());
1027
+ if (hasReturnValue) {
1028
+ lines.push(` return ${resultVarName};`);
1029
+ }
503
1030
  }
504
1031
  }
505
1032
  lines.push(` }`);
@@ -561,8 +1088,12 @@ ${allArgs ? `${allArgs},` : ""}
561
1088
  }
562
1089
  generateSignalConnect(sharedLibrary, signals, hasConnectMethod, classMap) {
563
1090
  const methodName = hasConnectMethod ? "on" : "connect";
564
- const savedCallback = this.typeMapper.getEnumUsageCallback();
1091
+ const savedEnumCallback = this.typeMapper.getEnumUsageCallback();
1092
+ const savedRecordCallback = this.typeMapper.getRecordUsageCallback();
565
1093
  this.typeMapper.setEnumUsageCallback(null);
1094
+ this.typeMapper.setRecordUsageCallback(null);
1095
+ this.typeMapper.setExternalTypeUsageCallback(null);
1096
+ this.typeMapper.setSameNamespaceClassUsageCallback(null);
566
1097
  const signalMetadata = signals.map((signal) => {
567
1098
  const paramEntries = (signal.parameters ?? []).map((param) => {
568
1099
  const ffiType = JSON.stringify(this.typeMapper.mapType(param.type).ffi);
@@ -575,7 +1106,15 @@ ${allArgs ? `${allArgs},` : ""}
575
1106
  });
576
1107
  return ` "${signal.name}": [${paramEntries.join(", ")}]`;
577
1108
  });
578
- this.typeMapper.setEnumUsageCallback(savedCallback);
1109
+ this.typeMapper.setEnumUsageCallback(savedEnumCallback);
1110
+ this.typeMapper.setRecordUsageCallback(savedRecordCallback);
1111
+ this.typeMapper.setExternalTypeUsageCallback((usage) => {
1112
+ const key = `${usage.namespace}.${usage.transformedName}`;
1113
+ this.usedExternalTypes.set(key, usage);
1114
+ });
1115
+ this.typeMapper.setSameNamespaceClassUsageCallback((className, originalName) => {
1116
+ this.usedSameNamespaceClasses.set(className, originalName);
1117
+ });
579
1118
  this.usesType = true;
580
1119
  const signalMapCode = signalMetadata.length > 0
581
1120
  ? `const signalMeta: Record<string, { type: Type; cls?: { prototype: object } }[]> = {\n${signalMetadata.join(",\n")}\n };
@@ -617,27 +1156,350 @@ ${allArgs ? `${allArgs},` : ""}
617
1156
  }
618
1157
  `;
619
1158
  }
620
- async generateInterface(iface, sharedLibrary, classMap) {
1159
+ async generateInterface(iface, sharedLibrary, _classMap) {
621
1160
  this.resetState();
622
- this.usesRef = iface.methods.some((m) => hasOutParameter(m.parameters));
623
- this.usesCall = iface.methods.length > 0 || iface.signals.length > 0;
624
1161
  const interfaceName = toPascalCase(iface.name);
625
1162
  const sections = [];
1163
+ this.usesCall = iface.methods.length > 0;
1164
+ this.usesRef = iface.methods.some((m) => hasOutParameter(m.parameters));
626
1165
  if (iface.doc) {
627
1166
  sections.push(formatDoc(iface.doc));
628
1167
  }
629
- sections.push(`export abstract class ${interfaceName} {`);
630
- sections.push(` protected abstract ptr: unknown;\n`);
631
- sections.push(this.generateMethods(iface.methods, sharedLibrary, iface.name));
632
- sections.push(this.generateProperties(iface.properties, iface.methods));
633
- if (iface.signals.length > 0) {
634
- const hasConnectMethod = iface.methods.some((m) => toCamelCase(m.name) === "connect");
635
- sections.push(this.generateSignalConnect(sharedLibrary, iface.signals, hasConnectMethod, classMap));
1168
+ sections.push(`export class ${interfaceName} {`);
1169
+ sections.push(` ptr: unknown;`);
1170
+ sections.push(``);
1171
+ sections.push(` protected constructor(ptr: unknown) {`);
1172
+ sections.push(` this.ptr = ptr;`);
1173
+ sections.push(` }`);
1174
+ sections.push(``);
1175
+ sections.push(` static fromPtr(ptr: unknown): ${interfaceName} {`);
1176
+ sections.push(` return new ${interfaceName}(ptr);`);
1177
+ sections.push(` }`);
1178
+ if (iface.methods.length > 0) {
1179
+ sections.push(this.generateMethods(iface.methods, sharedLibrary, interfaceName));
636
1180
  }
637
1181
  sections.push("}");
638
1182
  const imports = this.generateImports(interfaceName);
639
1183
  return this.formatCode(imports + sections.join("\n"));
640
1184
  }
1185
+ async generateRecord(record, sharedLibrary) {
1186
+ this.resetState();
1187
+ this.usesRef =
1188
+ record.methods.some((m) => hasOutParameter(m.parameters)) ||
1189
+ record.constructors.some((c) => hasOutParameter(c.parameters)) ||
1190
+ record.functions.some((f) => hasOutParameter(f.parameters));
1191
+ this.usesCall = record.methods.length > 0 || record.constructors.length > 0 || record.functions.length > 0;
1192
+ const hasReadableFields = record.fields.some((f) => f.readable !== false && !f.private);
1193
+ if (hasReadableFields) {
1194
+ this.usesRead = true;
1195
+ }
1196
+ const recordName = normalizeClassName(record.name);
1197
+ const sections = [];
1198
+ const initInterface = this.generateRecordInitInterface(record);
1199
+ if (initInterface) {
1200
+ sections.push(initInterface);
1201
+ }
1202
+ if (record.doc) {
1203
+ sections.push(formatDoc(record.doc));
1204
+ }
1205
+ sections.push(`export class ${recordName} {`);
1206
+ sections.push(` ptr: unknown;\n`);
1207
+ sections.push(this.generateRecordConstructors(record, sharedLibrary));
1208
+ sections.push(this.generateRecordStaticFunctions(record.functions, sharedLibrary, recordName));
1209
+ sections.push(this.generateRecordMethods(record.methods, sharedLibrary, record.name));
1210
+ sections.push(this.generateRecordFields(record.fields, record.methods));
1211
+ sections.push("}");
1212
+ const imports = this.generateImports(recordName);
1213
+ return this.formatCode(imports + sections.join("\n"));
1214
+ }
1215
+ generateRecordInitInterface(record) {
1216
+ const mainConstructor = record.constructors.find((c) => !c.parameters.some(isVararg));
1217
+ if (mainConstructor)
1218
+ return null;
1219
+ const initFields = this.getWritableFields(record.fields);
1220
+ if (initFields.length === 0)
1221
+ return null;
1222
+ const recordName = normalizeClassName(record.name);
1223
+ return this.generateFieldInitInterface(recordName, initFields);
1224
+ }
1225
+ generateRecordConstructors(record, sharedLibrary) {
1226
+ const recordName = normalizeClassName(record.name);
1227
+ const sections = [];
1228
+ const mainConstructor = record.constructors.find((c) => !c.parameters.some(isVararg));
1229
+ if (mainConstructor) {
1230
+ const ctorDoc = formatMethodDoc(mainConstructor.doc, mainConstructor.parameters);
1231
+ const filteredParams = mainConstructor.parameters.filter((p) => !isVararg(p));
1232
+ if (filteredParams.length === 0) {
1233
+ sections.push(`${ctorDoc} constructor() {\n this.ptr = this.createPtr([]);\n }\n`);
1234
+ }
1235
+ else {
1236
+ const typedParams = this.generateParameterList(mainConstructor.parameters, false);
1237
+ const paramNames = filteredParams.map((p) => toValidIdentifier(toCamelCase(p.name)));
1238
+ const firstParamType = this.typeMapper.mapParameter(filteredParams[0]).ts;
1239
+ const isFirstParamArray = firstParamType.endsWith("[]") || firstParamType.startsWith("Array<");
1240
+ if (isFirstParamArray) {
1241
+ sections.push(`${ctorDoc} constructor(${typedParams}) {
1242
+ const _args = [${paramNames.join(", ")}];
1243
+ this.ptr = this.createPtr(_args);
1244
+ }
1245
+ `);
1246
+ }
1247
+ else {
1248
+ sections.push(`${ctorDoc} constructor(${typedParams});
1249
+ constructor(_args: unknown[]);
1250
+ constructor(...args: unknown[]) {
1251
+ const _args = args.length === 1 && Array.isArray(args[0]) ? args[0] : args;
1252
+ this.ptr = this.createPtr(_args);
1253
+ }
1254
+ `);
1255
+ }
1256
+ }
1257
+ for (const ctor of record.constructors) {
1258
+ if (ctor !== mainConstructor) {
1259
+ sections.push(this.generateRecordStaticFactoryMethod(ctor, recordName, sharedLibrary));
1260
+ }
1261
+ }
1262
+ }
1263
+ else {
1264
+ const initFields = this.getWritableFields(record.fields);
1265
+ if (initFields.length > 0) {
1266
+ sections.push(` constructor(init: ${recordName}Init = {}) {\n this.ptr = this.createPtr(init);\n }\n`);
1267
+ }
1268
+ else {
1269
+ sections.push(` constructor() {\n this.ptr = this.createPtr({});\n }\n`);
1270
+ }
1271
+ }
1272
+ sections.push(this.generateRecordCreatePtr(record, sharedLibrary));
1273
+ return sections.join("\n");
1274
+ }
1275
+ getWritableFields(fields) {
1276
+ return fields.filter((f) => !f.private && f.writable !== false && this.isWritableType(f.type));
1277
+ }
1278
+ generateFieldInitInterface(recordName, fields) {
1279
+ const properties = fields.map((field) => {
1280
+ const fieldName = toValidIdentifier(toCamelCase(field.name));
1281
+ const typeMapping = this.typeMapper.mapType(field.type);
1282
+ return ` ${fieldName}?: ${typeMapping.ts};`;
1283
+ });
1284
+ return `export interface ${recordName}Init {\n${properties.join("\n")}\n}\n\n`;
1285
+ }
1286
+ generateRecordCreatePtr(record, sharedLibrary) {
1287
+ const recordName = normalizeClassName(record.name);
1288
+ const mainConstructor = record.constructors.find((c) => !c.parameters.some(isVararg));
1289
+ if (!mainConstructor) {
1290
+ if (record.glibTypeName && record.fields.length > 0) {
1291
+ const structSize = this.calculateStructSize(record.fields);
1292
+ const initFields = this.getWritableFields(record.fields);
1293
+ this.usesAlloc = true;
1294
+ if (initFields.length > 0) {
1295
+ const fieldWrites = this.generateFieldWrites(record.fields);
1296
+ this.usesWrite = true;
1297
+ return ` protected createPtr(init: ${recordName}Init): unknown {
1298
+ const ptr = alloc(${structSize}, "${record.glibTypeName}", "${sharedLibrary}");
1299
+ ${fieldWrites}
1300
+ return ptr;
1301
+ }
1302
+ `;
1303
+ }
1304
+ return ` protected createPtr(_init: Record<string, unknown>): unknown {
1305
+ return alloc(${structSize}, "${record.glibTypeName}", "${sharedLibrary}");
1306
+ }
1307
+ `;
1308
+ }
1309
+ return ` protected createPtr(_init: Record<string, unknown>): unknown {\n return null;\n }\n`;
1310
+ }
1311
+ const filteredParams = mainConstructor.parameters.filter((p) => !isVararg(p));
1312
+ const paramTypes = filteredParams.map((p) => this.typeMapper.mapParameter(p).ts);
1313
+ const paramNames = filteredParams.map((p) => toValidIdentifier(toCamelCase(p.name)));
1314
+ const destructuring = paramNames.length > 0
1315
+ ? ` const [${paramNames.join(", ")}] = _args as [${paramTypes.join(", ")}];\n`
1316
+ : "";
1317
+ const args = this.generateCallArguments(mainConstructor.parameters);
1318
+ const glibTypeName = record.glibTypeName ?? record.cType;
1319
+ return ` protected createPtr(_args: unknown[]): unknown {
1320
+ ${destructuring} return call(
1321
+ "${sharedLibrary}",
1322
+ "${mainConstructor.cIdentifier}",
1323
+ [
1324
+ ${args}
1325
+ ],
1326
+ { type: "boxed", borrowed: true, innerType: "${glibTypeName}" }
1327
+ );
1328
+ }
1329
+ `;
1330
+ }
1331
+ generateFieldWrites(fields) {
1332
+ const writes = [];
1333
+ let currentOffset = 0;
1334
+ for (const field of fields) {
1335
+ if (field.private)
1336
+ continue;
1337
+ const fieldSize = this.getFieldSize(field.type);
1338
+ const alignment = this.getFieldAlignment(field.type);
1339
+ currentOffset = Math.ceil(currentOffset / alignment) * alignment;
1340
+ if (field.writable !== false && this.isWritableType(field.type)) {
1341
+ const fieldName = toValidIdentifier(toCamelCase(field.name));
1342
+ const typeMapping = this.typeMapper.mapType(field.type);
1343
+ writes.push(` if (init.${fieldName} !== undefined) write(ptr, ${this.generateTypeDescriptor(typeMapping.ffi)}, ${currentOffset}, init.${fieldName});`);
1344
+ }
1345
+ currentOffset += fieldSize;
1346
+ }
1347
+ return writes.join("\n");
1348
+ }
1349
+ calculateStructSize(fields) {
1350
+ let currentOffset = 0;
1351
+ for (const field of fields) {
1352
+ if (field.private)
1353
+ continue;
1354
+ const fieldSize = this.getFieldSize(field.type);
1355
+ const alignment = this.getFieldAlignment(field.type);
1356
+ currentOffset = Math.ceil(currentOffset / alignment) * alignment;
1357
+ currentOffset += fieldSize;
1358
+ }
1359
+ const maxAlignment = Math.max(...fields.map((f) => this.getFieldAlignment(f.type)), 1);
1360
+ return Math.ceil(currentOffset / maxAlignment) * maxAlignment;
1361
+ }
1362
+ generateRecordStaticFactoryMethod(ctor, recordName, sharedLibrary) {
1363
+ let methodName = "new";
1364
+ if (ctor.cIdentifier) {
1365
+ const parts = ctor.cIdentifier.split("_");
1366
+ const nameParts = parts.slice(2).join("_");
1367
+ if (nameParts && nameParts !== "new") {
1368
+ methodName = toCamelCase(nameParts);
1369
+ }
1370
+ }
1371
+ const params = this.generateParameterList(ctor.parameters);
1372
+ const args = this.generateCallArguments(ctor.parameters);
1373
+ const ctorDoc = formatMethodDoc(ctor.doc, ctor.parameters);
1374
+ return `${ctorDoc} static ${methodName}(${params}): ${recordName} {
1375
+ const ptr = call(
1376
+ "${sharedLibrary}",
1377
+ "${ctor.cIdentifier}",
1378
+ [
1379
+ ${args}
1380
+ ],
1381
+ { type: "boxed", borrowed: true, innerType: "${recordName}" }
1382
+ );
1383
+ const instance = Object.create(${recordName}.prototype) as ${recordName} & { ptr: unknown };
1384
+ instance.ptr = ptr;
1385
+ return instance;
1386
+ }
1387
+ `;
1388
+ }
1389
+ generateRecordStaticFunctions(functions, sharedLibrary, recordName) {
1390
+ return this.generateStaticFunctions(functions, sharedLibrary, recordName);
1391
+ }
1392
+ generateRecordMethods(methods, sharedLibrary, recordName) {
1393
+ return this.generateMethods(methods, sharedLibrary, recordName);
1394
+ }
1395
+ generateRecordFields(fields, methods) {
1396
+ const sections = [];
1397
+ const fieldOffsets = [];
1398
+ const methodNames = new Set(methods.map((m) => toCamelCase(m.name)));
1399
+ let currentOffset = 0;
1400
+ for (const field of fields) {
1401
+ if (field.private)
1402
+ continue;
1403
+ const fieldSize = this.getFieldSize(field.type);
1404
+ const alignment = this.getFieldAlignment(field.type);
1405
+ currentOffset = Math.ceil(currentOffset / alignment) * alignment;
1406
+ fieldOffsets.push({ field, offset: currentOffset });
1407
+ currentOffset += fieldSize;
1408
+ }
1409
+ for (const { field, offset } of fieldOffsets) {
1410
+ const isReadable = field.readable !== false;
1411
+ const isWritable = field.writable !== false;
1412
+ if (!isReadable && !isWritable)
1413
+ continue;
1414
+ const fieldName = toValidIdentifier(toCamelCase(field.name));
1415
+ if (methodNames.has(fieldName))
1416
+ continue;
1417
+ const typeMapping = this.typeMapper.mapType(field.type);
1418
+ if (field.doc) {
1419
+ sections.push(formatDoc(field.doc, " ").trimEnd());
1420
+ }
1421
+ if (isReadable) {
1422
+ sections.push(` get ${fieldName}(): ${typeMapping.ts} {
1423
+ return read(this.ptr, ${this.generateTypeDescriptor(typeMapping.ffi)}, ${offset}) as ${typeMapping.ts};
1424
+ }
1425
+ `);
1426
+ }
1427
+ if (isWritable && this.isWritableType(field.type)) {
1428
+ this.usesWrite = true;
1429
+ sections.push(` set ${fieldName}(value: ${typeMapping.ts}) {
1430
+ write(this.ptr, ${this.generateTypeDescriptor(typeMapping.ffi)}, ${offset}, value);
1431
+ }
1432
+ `);
1433
+ }
1434
+ }
1435
+ return sections.join("\n");
1436
+ }
1437
+ isWritableType(type) {
1438
+ const typeName = type.name;
1439
+ if (typeName === "gboolean" ||
1440
+ typeName === "guint8" ||
1441
+ typeName === "gint8" ||
1442
+ typeName === "guchar" ||
1443
+ typeName === "gchar") {
1444
+ return true;
1445
+ }
1446
+ if (typeName === "gint16" || typeName === "guint16" || typeName === "gshort" || typeName === "gushort") {
1447
+ return true;
1448
+ }
1449
+ if (typeName === "gint" || typeName === "guint" || typeName === "gint32" || typeName === "guint32") {
1450
+ return true;
1451
+ }
1452
+ if (typeName === "gint64" ||
1453
+ typeName === "guint64" ||
1454
+ typeName === "glong" ||
1455
+ typeName === "gulong" ||
1456
+ typeName === "gsize" ||
1457
+ typeName === "gssize") {
1458
+ return true;
1459
+ }
1460
+ if (typeName === "gfloat" || typeName === "float" || typeName === "gdouble" || typeName === "double") {
1461
+ return true;
1462
+ }
1463
+ return false;
1464
+ }
1465
+ getFieldSize(type) {
1466
+ const typeName = type.name;
1467
+ if (typeName === "gboolean" ||
1468
+ typeName === "guint8" ||
1469
+ typeName === "gint8" ||
1470
+ typeName === "guchar" ||
1471
+ typeName === "gchar") {
1472
+ return 1;
1473
+ }
1474
+ if (typeName === "gint16" || typeName === "guint16" || typeName === "gshort" || typeName === "gushort") {
1475
+ return 2;
1476
+ }
1477
+ if (typeName === "gint" ||
1478
+ typeName === "guint" ||
1479
+ typeName === "gint32" ||
1480
+ typeName === "guint32" ||
1481
+ typeName === "gfloat" ||
1482
+ typeName === "float" ||
1483
+ typeName === "Quark" ||
1484
+ typeName === "GQuark") {
1485
+ return 4;
1486
+ }
1487
+ if (typeName === "gint64" ||
1488
+ typeName === "guint64" ||
1489
+ typeName === "gdouble" ||
1490
+ typeName === "double" ||
1491
+ typeName === "glong" ||
1492
+ typeName === "gulong" ||
1493
+ typeName === "gsize" ||
1494
+ typeName === "gssize" ||
1495
+ typeName === "GType") {
1496
+ return 8;
1497
+ }
1498
+ return 8;
1499
+ }
1500
+ getFieldAlignment(type) {
1501
+ return this.getFieldSize(type);
1502
+ }
641
1503
  async generateFunctions(functions, sharedLibrary) {
642
1504
  this.resetState();
643
1505
  this.usesRef = functions.some((f) => hasOutParameter(f.parameters));
@@ -656,7 +1518,9 @@ ${allArgs ? `${allArgs},` : ""}
656
1518
  const tsReturnType = returnTypeMapping.ts === "void" ? "" : `: ${returnTypeMapping.ts}`;
657
1519
  const hasResultParam = func.parameters.some((p) => toValidIdentifier(toCamelCase(p.name)) === "result");
658
1520
  const resultVarName = hasResultParam ? "_result" : "result";
659
- const needsCast = returnTypeMapping.ts !== "void" && returnTypeMapping.ts !== "unknown";
1521
+ const needsObjectWrap = (returnTypeMapping.ffi.type === "gobject" || returnTypeMapping.ffi.type === "boxed") &&
1522
+ returnTypeMapping.ts !== "unknown" &&
1523
+ returnTypeMapping.kind !== "interface";
660
1524
  const hasReturnValue = returnTypeMapping.ts !== "void";
661
1525
  const lines = [];
662
1526
  const funcDoc = formatMethodDoc(func.doc, func.parameters, "");
@@ -667,23 +1531,38 @@ ${allArgs ? `${allArgs},` : ""}
667
1531
  if (func.throws) {
668
1532
  lines.push(` const error = { value: null as unknown };`);
669
1533
  }
670
- const callPrefix = func.throws
671
- ? hasReturnValue
672
- ? `const ${resultVarName} = `
673
- : ""
674
- : hasReturnValue
675
- ? "return "
676
- : "";
677
1534
  const args = this.generateCallArguments(func.parameters, " ");
678
1535
  const errorArg = func.throws ? this.generateErrorArgument(" ") : "";
679
1536
  const allArgs = errorArg ? args + (args ? ",\n" : "") + errorArg : args;
680
- lines.push(` ${callPrefix}call("${sharedLibrary}", "${func.cIdentifier}", [
1537
+ if (needsObjectWrap && hasReturnValue) {
1538
+ lines.push(` const ptr = call("${sharedLibrary}", "${func.cIdentifier}", [
1539
+ ${allArgs ? `${allArgs},` : ""}
1540
+ ], ${this.generateTypeDescriptor(returnTypeMapping.ffi)});`);
1541
+ if (func.throws) {
1542
+ lines.push(this.generateErrorCheck(""));
1543
+ }
1544
+ lines.push(` if (ptr === null) return null as unknown as ${returnTypeMapping.ts};`);
1545
+ lines.push(` const instance = Object.create(${returnTypeMapping.ts}.prototype) as ${returnTypeMapping.ts} & { ptr: unknown };`);
1546
+ lines.push(` instance.ptr = ptr;`);
1547
+ lines.push(` return instance;`);
1548
+ }
1549
+ else {
1550
+ const callPrefix = func.throws
1551
+ ? hasReturnValue
1552
+ ? `const ${resultVarName} = `
1553
+ : ""
1554
+ : hasReturnValue
1555
+ ? "return "
1556
+ : "";
1557
+ const needsCast = returnTypeMapping.ts !== "void" && returnTypeMapping.ts !== "unknown";
1558
+ lines.push(` ${callPrefix}call("${sharedLibrary}", "${func.cIdentifier}", [
681
1559
  ${allArgs ? `${allArgs},` : ""}
682
1560
  ], ${this.generateTypeDescriptor(returnTypeMapping.ffi)})${needsCast ? ` as ${returnTypeMapping.ts}` : ""};`);
683
- if (func.throws) {
684
- lines.push(this.generateErrorCheck(""));
685
- if (hasReturnValue) {
686
- lines.push(` return ${resultVarName};`);
1561
+ if (func.throws) {
1562
+ lines.push(this.generateErrorCheck(""));
1563
+ if (hasReturnValue) {
1564
+ lines.push(` return ${resultVarName};`);
1565
+ }
687
1566
  }
688
1567
  }
689
1568
  lines.push(`};`);
@@ -711,7 +1590,7 @@ ${allArgs ? `${allArgs},` : ""}
711
1590
  return this.formatCode(`${exports.join("\n")}\n`);
712
1591
  }
713
1592
  generateParameterList(parameters, makeAllOptional = false) {
714
- const filteredParams = parameters.filter((p) => !isVararg(p));
1593
+ const filteredParams = parameters.filter((p, i) => !isVararg(p) && !this.typeMapper.isClosureTarget(i, parameters));
715
1594
  const required = [];
716
1595
  const optional = [];
717
1596
  for (const param of filteredParams) {
@@ -725,22 +1604,23 @@ ${allArgs ? `${allArgs},` : ""}
725
1604
  }
726
1605
  generateCallArguments(parameters, indent = " ") {
727
1606
  return parameters
728
- .filter((p) => !isVararg(p))
1607
+ .filter((p, i) => !isVararg(p) && !this.typeMapper.isClosureTarget(i, parameters))
729
1608
  .map((param) => {
730
1609
  const mapped = this.typeMapper.mapParameter(param);
731
1610
  const jsParamName = toValidIdentifier(toCamelCase(param.name));
732
- return `${indent} {\n${indent} type: ${this.generateTypeDescriptor(mapped.ffi)},\n${indent} value: ${jsParamName},\n${indent} }`;
1611
+ const needsPtr = mapped.ffi.type === "gobject" || mapped.ffi.type === "boxed";
1612
+ const valueName = needsPtr ? `(${jsParamName} as any)?.ptr ?? ${jsParamName}` : jsParamName;
1613
+ return `${indent} {\n${indent} type: ${this.generateTypeDescriptor(mapped.ffi)},\n${indent} value: ${valueName},\n${indent} }`;
733
1614
  })
734
1615
  .join(",\n");
735
1616
  }
736
1617
  generateErrorArgument(indent = " ") {
737
- return `${indent} {\n${indent} type: { type: "ref", innerType: { type: "gobject" } },\n${indent} value: error,\n${indent} }`;
1618
+ return `${indent} {\n${indent} type: { type: "ref", innerType: { type: "boxed", innerType: "GError", lib: "libglib-2.0.so.0" } },\n${indent} value: error,\n${indent} }`;
738
1619
  }
739
1620
  generateErrorCheck(indent = " ") {
1621
+ this.usesNativeError = true;
740
1622
  return `${indent} if (error.value !== null) {
741
- ${indent} const jsError = new Error("GLib Error occurred");
742
- ${indent} (jsError as any).gError = error.value;
743
- ${indent} throw jsError;
1623
+ ${indent} throw new NativeError(error.value);
744
1624
  ${indent} }`;
745
1625
  }
746
1626
  generateTypeDescriptor(type) {
@@ -753,18 +1633,34 @@ ${indent} }`;
753
1633
  if (type.type === "gobject") {
754
1634
  return type.borrowed ? `{ type: "gobject", borrowed: true }` : `{ type: "gobject" }`;
755
1635
  }
756
- if (type.type === "ref" && type.innerType) {
1636
+ if (type.type === "boxed") {
1637
+ const innerType = typeof type.innerType === "string" ? type.innerType : "";
1638
+ const lib = this.currentSharedLibrary;
1639
+ return type.borrowed
1640
+ ? `{ type: "boxed", borrowed: true, innerType: "${innerType}", lib: "${lib}" }`
1641
+ : `{ type: "boxed", innerType: "${innerType}", lib: "${lib}" }`;
1642
+ }
1643
+ if (type.type === "ref" && type.innerType && typeof type.innerType !== "string") {
757
1644
  return `{ type: "ref", innerType: ${this.generateTypeDescriptor(type.innerType)} }`;
758
1645
  }
759
1646
  if (type.type === "array" && type.itemType) {
760
1647
  return `{ type: "array", itemType: ${this.generateTypeDescriptor(type.itemType)} }`;
761
1648
  }
1649
+ if (type.type === "asyncCallback" && type.sourceType && type.resultType) {
1650
+ return `{ type: "asyncCallback", sourceType: ${this.generateTypeDescriptor(type.sourceType)}, resultType: ${this.generateTypeDescriptor(type.resultType)} }`;
1651
+ }
762
1652
  return `{ type: "${type.type}" }`;
763
1653
  }
764
1654
  generateImports(currentClassName, parentClassName) {
765
1655
  const nativeImports = [];
1656
+ if (this.usesAlloc)
1657
+ nativeImports.push("alloc");
766
1658
  if (this.usesCall)
767
1659
  nativeImports.push("call");
1660
+ if (this.usesRead)
1661
+ nativeImports.push("read");
1662
+ if (this.usesWrite)
1663
+ nativeImports.push("write");
768
1664
  if (this.usesRef)
769
1665
  nativeImports.push("Ref");
770
1666
  if (this.usesType)
@@ -773,15 +1669,58 @@ ${indent} }`;
773
1669
  if (nativeImports.length > 0) {
774
1670
  lines.push(`import { ${nativeImports.join(", ")} } from "@gtkx/native";`);
775
1671
  }
1672
+ if (this.usesNativeError) {
1673
+ lines.push(`import { NativeError } from "@gtkx/ffi";`);
1674
+ }
776
1675
  if (this.usedEnums.size > 0) {
777
1676
  const enumList = Array.from(this.usedEnums).sort().join(", ");
778
1677
  lines.push(`import { ${enumList} } from "./enums.js";`);
779
1678
  }
1679
+ for (const normalizedRecordName of Array.from(this.usedRecords).sort()) {
1680
+ const normalizedCurrentClass = currentClassName ? normalizeClassName(currentClassName) : "";
1681
+ const normalizedParentClass = parentClassName ? normalizeClassName(parentClassName) : "";
1682
+ if (normalizedRecordName !== normalizedCurrentClass && normalizedRecordName !== normalizedParentClass) {
1683
+ const originalName = this.recordNameToFile.get(normalizedRecordName) ?? normalizedRecordName;
1684
+ lines.push(`import { ${normalizedRecordName} } from "./${toKebabCase(originalName)}.js";`);
1685
+ }
1686
+ }
1687
+ for (const [interfaceName, originalName] of Array.from(this.usedInterfaces.entries()).sort((a, b) => a[0].localeCompare(b[0]))) {
1688
+ const originalFileName = this.interfaceNameToFile.get(interfaceName) ?? originalName;
1689
+ lines.push(`import { ${interfaceName} } from "./${toKebabCase(originalFileName)}.js";`);
1690
+ }
1691
+ for (const [className, originalName] of Array.from(this.usedSameNamespaceClasses.entries()).sort((a, b) => a[0].localeCompare(b[0]))) {
1692
+ const normalizedCurrentClass = currentClassName ? normalizeClassName(currentClassName) : "";
1693
+ const normalizedParentClass = parentClassName ? normalizeClassName(parentClassName) : "";
1694
+ if (className !== normalizedCurrentClass &&
1695
+ className !== normalizedParentClass &&
1696
+ !this.signalClasses.has(className) &&
1697
+ !this.usedInterfaces.has(className)) {
1698
+ if (this.cyclicReturnTypes.has(className)) {
1699
+ lines.push(`import type { ${className} } from "./${toKebabCase(originalName)}.js";`);
1700
+ }
1701
+ else {
1702
+ lines.push(`import { ${className} } from "./${toKebabCase(originalName)}.js";`);
1703
+ }
1704
+ }
1705
+ }
780
1706
  for (const className of Array.from(this.signalClasses).sort()) {
781
1707
  if (className !== currentClassName && className !== parentClassName) {
782
1708
  lines.push(`import { ${className} } from "./${toKebabCase(className)}.js";`);
783
1709
  }
784
1710
  }
1711
+ const externalNamespaces = new Set();
1712
+ for (const usage of this.usedExternalTypes.values()) {
1713
+ if (usage.namespace === this.options.namespace)
1714
+ continue;
1715
+ externalNamespaces.add(usage.namespace);
1716
+ }
1717
+ if (this.addGioImport && this.options.namespace !== "Gio") {
1718
+ externalNamespaces.add("Gio");
1719
+ }
1720
+ for (const namespace of Array.from(externalNamespaces).sort()) {
1721
+ const nsLower = namespace.toLowerCase();
1722
+ lines.push(`import * as ${namespace} from "../${nsLower}/index.js";`);
1723
+ }
785
1724
  return lines.length > 0 ? `${lines.join("\n")}\n` : "";
786
1725
  }
787
1726
  async formatCode(code) {