@ts-for-gir/lib 4.0.0-beta.9 → 4.0.0-rc.10

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 (560) hide show
  1. package/README.md +13 -1
  2. package/package.json +18 -31
  3. package/src/constants.ts +125 -0
  4. package/src/dependency-manager.ts +463 -0
  5. package/src/formatters/default.ts +7 -0
  6. package/src/formatters/formatter.ts +3 -0
  7. package/src/formatters/index.ts +3 -0
  8. package/src/formatters/json.ts +7 -0
  9. package/src/generators/generator.ts +65 -0
  10. package/src/generators/index.ts +2 -0
  11. package/src/generics/clutter.ts +81 -0
  12. package/src/generics/generify.ts +101 -0
  13. package/src/generics/gio.ts +91 -0
  14. package/src/generics/glib.ts +31 -0
  15. package/src/generics/gtk.ts +99 -0
  16. package/src/generics/meta.ts +51 -0
  17. package/src/generics/st.ts +207 -0
  18. package/src/generics/visitor.ts +484 -0
  19. package/src/gir/alias.ts +73 -0
  20. package/src/gir/callback.ts +79 -0
  21. package/src/gir/const.ts +73 -0
  22. package/src/gir/constructor.ts +91 -0
  23. package/src/gir/data.ts +12 -0
  24. package/src/gir/dependency-resolver.ts +81 -0
  25. package/src/gir/direct-allocation-constructor.ts +65 -0
  26. package/src/gir/enum-member.ts +51 -0
  27. package/src/gir/enum.ts +129 -0
  28. package/src/gir/error.ts +89 -0
  29. package/src/gir/function.ts +297 -0
  30. package/src/gir/generics.ts +66 -0
  31. package/src/gir/gir-complex-record.ts +7 -0
  32. package/src/gir/index.ts +25 -0
  33. package/src/gir/introspected-base.ts +104 -0
  34. package/src/gir/introspected-class-member.ts +15 -0
  35. package/src/gir/introspected-classes.ts +1566 -0
  36. package/src/gir/introspected-namespace-member.ts +24 -0
  37. package/src/gir/namespace.ts +76 -0
  38. package/src/gir/parameter.ts +199 -0
  39. package/src/gir/promisify.ts +214 -0
  40. package/src/gir/property.ts +218 -0
  41. package/src/gir/record.ts +488 -0
  42. package/src/gir/registry.ts +187 -0
  43. package/src/gir/signal.ts +279 -0
  44. package/src/gir-module.ts +719 -0
  45. package/src/gir.ts +879 -0
  46. package/src/index.ts +16 -0
  47. package/src/injections/gee08.ts +89 -0
  48. package/src/injections/gee1.ts +35 -0
  49. package/src/injections/gio.ts +720 -0
  50. package/src/injections/glib.ts +280 -0
  51. package/src/injections/gobject.ts +906 -0
  52. package/src/injections/gtk4.ts +23 -0
  53. package/src/injections/inject.ts +49 -0
  54. package/src/injections/shell.ts +50 -0
  55. package/src/injections/tracker1.ts +42 -0
  56. package/src/library-version.ts +50 -0
  57. package/src/logger.ts +104 -0
  58. package/src/messages.ts +57 -0
  59. package/src/templates/index.ts +1 -0
  60. package/src/templates/template-engine.ts +178 -0
  61. package/src/types/answer-version.ts +4 -0
  62. package/src/types/any-introspected-type.ts +5 -0
  63. package/src/types/class-function-types.ts +57 -0
  64. package/src/types/class-member.ts +5 -0
  65. package/src/types/class-parent.ts +14 -0
  66. package/src/types/class.ts +43 -0
  67. package/src/types/config-flags.ts +5 -0
  68. package/src/types/construct-name.ts +13 -0
  69. package/src/types/dependency-map.ts +4 -0
  70. package/src/types/dependency.ts +49 -0
  71. package/src/types/file-info.ts +14 -0
  72. package/src/types/format.ts +1 -0
  73. package/src/types/generator-constructor.ts +7 -0
  74. package/src/types/generics-config.ts +90 -0
  75. package/src/types/gir-any-element.ts +35 -0
  76. package/src/types/gir-module-interface.ts +22 -0
  77. package/src/types/gir-module-resolved.ts +32 -0
  78. package/src/types/gir-type-name.ts +20 -0
  79. package/src/types/index.ts +92 -0
  80. package/{lib/types/inheritance-table.d.ts → src/types/inheritance-table.ts} +1 -1
  81. package/src/types/introspected.ts +18 -0
  82. package/src/types/local-name-check.ts +5 -0
  83. package/src/types/local-name-type.ts +1 -0
  84. package/src/types/local-name.ts +8 -0
  85. package/src/types/local-names.ts +5 -0
  86. package/src/types/metadata.ts +6 -0
  87. package/src/types/ns-loader.ts +6 -0
  88. package/src/types/options-base.ts +8 -0
  89. package/src/types/options-generation.ts +88 -0
  90. package/src/types/options-load.ts +6 -0
  91. package/src/types/options-transform.ts +5 -0
  92. package/src/types/output-format.ts +1 -0
  93. package/src/types/package-data-parsed.ts +28 -0
  94. package/src/types/package-data.ts +24 -0
  95. package/src/types/package-section-parsed.ts +9 -0
  96. package/src/types/parsed-gir.ts +5 -0
  97. package/src/types/parsed-package-data.ts +7 -0
  98. package/src/types/property-case.ts +1 -0
  99. package/src/types/resolve-type.ts +4 -0
  100. package/src/types/template-data.ts +8 -0
  101. package/src/types/template-options.ts +33 -0
  102. package/src/types/transformation-case.ts +9 -0
  103. package/src/types/transformations.ts +5 -0
  104. package/{lib/types/ts-doc-tag.d.ts → src/types/ts-doc-tag.ts} +14 -12
  105. package/src/types/ts-doc.ts +18 -0
  106. package/{lib/types/type-gir-alias.d.ts → src/types/type-gir-alias.ts} +1 -1
  107. package/src/types/type-gir-class.ts +2 -0
  108. package/src/types/type-gir-element.ts +25 -0
  109. package/src/types/type-gir-enumeration-member.ts +2 -0
  110. package/{lib/types/type-gir-enumeration.d.ts → src/types/type-gir-enumeration.ts} +1 -1
  111. package/src/types/type-gir-function.ts +8 -0
  112. package/{lib/types/type-gir-interface.d.ts → src/types/type-gir-interface.ts} +1 -1
  113. package/src/types/type-gir-method.ts +2 -0
  114. package/src/types/type-gir-parameter.ts +1 -0
  115. package/{lib/types/type-gir-property.d.ts → src/types/type-gir-property.ts} +1 -1
  116. package/src/types/type-gir-variable.ts +1 -0
  117. package/src/types/type-ts-element.ts +13 -0
  118. package/{lib/types/type-ts-enumeration-member.d.ts → src/types/type-ts-enumeration-member.ts} +1 -1
  119. package/src/types/type-ts-function.ts +1 -0
  120. package/src/types/type-ts-property.ts +1 -0
  121. package/src/types/user-config-load-result.ts +6 -0
  122. package/src/types/user-config.ts +100 -0
  123. package/src/util.ts +84 -0
  124. package/src/utils/conflicts/conflict-resolver.ts +122 -0
  125. package/src/utils/conflicts/function-conflict-detector.ts +139 -0
  126. package/src/utils/conflicts/index.ts +2 -0
  127. package/src/utils/conflicts.ts +598 -0
  128. package/src/utils/documentation.ts +471 -0
  129. package/src/utils/files.ts +71 -0
  130. package/src/utils/function-type-guards.ts +61 -0
  131. package/src/utils/generation.ts +71 -0
  132. package/src/utils/gir-defaults.ts +66 -0
  133. package/src/utils/gir-parsing.ts +264 -0
  134. package/src/utils/girs.ts +112 -0
  135. package/src/utils/index.ts +15 -0
  136. package/src/utils/naming.ts +188 -0
  137. package/{lib/utils/numbers.d.ts → src/utils/numbers.ts} +3 -1
  138. package/{lib/utils/objects.js → src/utils/objects.ts} +15 -8
  139. package/src/utils/path.ts +15 -0
  140. package/src/utils/registry.ts +5 -0
  141. package/src/utils/strings.ts +134 -0
  142. package/src/utils/type-resolution.ts +116 -0
  143. package/src/utils/types.ts +285 -0
  144. package/src/validators/class.ts +347 -0
  145. package/src/validators/interface.ts +20 -0
  146. package/src/visitor.ts +58 -0
  147. package/lib/constants.d.ts +0 -25
  148. package/lib/constants.js +0 -93
  149. package/lib/constants.js.map +0 -1
  150. package/lib/dependency-manager.d.ts +0 -150
  151. package/lib/dependency-manager.js +0 -324
  152. package/lib/dependency-manager.js.map +0 -1
  153. package/lib/formatters/default.d.ts +0 -4
  154. package/lib/formatters/default.js +0 -7
  155. package/lib/formatters/default.js.map +0 -1
  156. package/lib/formatters/formatter.d.ts +0 -3
  157. package/lib/formatters/formatter.js +0 -3
  158. package/lib/formatters/formatter.js.map +0 -1
  159. package/lib/formatters/json.d.ts +0 -4
  160. package/lib/formatters/json.js +0 -7
  161. package/lib/formatters/json.js.map +0 -1
  162. package/lib/generators/dts/glib.d.ts +0 -2
  163. package/lib/generators/dts/glib.js +0 -514
  164. package/lib/generators/dts/glib.js.map +0 -1
  165. package/lib/generators/dts/gobject.d.ts +0 -2
  166. package/lib/generators/dts/gobject.js +0 -117
  167. package/lib/generators/dts/gobject.js.map +0 -1
  168. package/lib/generators/dts-inline.d.ts +0 -10
  169. package/lib/generators/dts-inline.js +0 -57
  170. package/lib/generators/dts-inline.js.map +0 -1
  171. package/lib/generators/dts-modules.d.ts +0 -10
  172. package/lib/generators/dts-modules.js +0 -98
  173. package/lib/generators/dts-modules.js.map +0 -1
  174. package/lib/generators/dts.d.ts +0 -45
  175. package/lib/generators/dts.js +0 -682
  176. package/lib/generators/dts.js.map +0 -1
  177. package/lib/generators/generator.d.ts +0 -45
  178. package/lib/generators/generator.js +0 -9
  179. package/lib/generators/generator.js.map +0 -1
  180. package/lib/generators/index.d.ts +0 -5
  181. package/lib/generators/index.js +0 -6
  182. package/lib/generators/index.js.map +0 -1
  183. package/lib/generators/json.d.ts +0 -258
  184. package/lib/generators/json.js +0 -867
  185. package/lib/generators/json.js.map +0 -1
  186. package/lib/generics/clutter.d.ts +0 -26
  187. package/lib/generics/clutter.js +0 -49
  188. package/lib/generics/clutter.js.map +0 -1
  189. package/lib/generics/generify.d.ts +0 -2
  190. package/lib/generics/generify.js +0 -39
  191. package/lib/generics/generify.js.map +0 -1
  192. package/lib/generics/gio.d.ts +0 -7
  193. package/lib/generics/gio.js +0 -51
  194. package/lib/generics/gio.js.map +0 -1
  195. package/lib/generics/glib.d.ts +0 -7
  196. package/lib/generics/glib.js +0 -18
  197. package/lib/generics/glib.js.map +0 -1
  198. package/lib/generics/meta.d.ts +0 -21
  199. package/lib/generics/meta.js +0 -26
  200. package/lib/generics/meta.js.map +0 -1
  201. package/lib/generics/st.d.ts +0 -16
  202. package/lib/generics/st.js +0 -92
  203. package/lib/generics/st.js.map +0 -1
  204. package/lib/generics/visitor.d.ts +0 -20
  205. package/lib/generics/visitor.js +0 -255
  206. package/lib/generics/visitor.js.map +0 -1
  207. package/lib/gir/alias.d.ts +0 -24
  208. package/lib/gir/alias.js +0 -43
  209. package/lib/gir/alias.js.map +0 -1
  210. package/lib/gir/base.d.ts +0 -62
  211. package/lib/gir/base.js +0 -95
  212. package/lib/gir/base.js.map +0 -1
  213. package/lib/gir/class.d.ts +0 -189
  214. package/lib/gir/class.js +0 -1131
  215. package/lib/gir/class.js.map +0 -1
  216. package/lib/gir/const.d.ts +0 -25
  217. package/lib/gir/const.js +0 -43
  218. package/lib/gir/const.js.map +0 -1
  219. package/lib/gir/enum.d.ts +0 -45
  220. package/lib/gir/enum.js +0 -164
  221. package/lib/gir/enum.js.map +0 -1
  222. package/lib/gir/function.d.ts +0 -199
  223. package/lib/gir/function.js +0 -683
  224. package/lib/gir/function.js.map +0 -1
  225. package/lib/gir/generics.d.ts +0 -5
  226. package/lib/gir/generics.js +0 -57
  227. package/lib/gir/generics.js.map +0 -1
  228. package/lib/gir/namespace.d.ts +0 -21
  229. package/lib/gir/namespace.js +0 -57
  230. package/lib/gir/namespace.js.map +0 -1
  231. package/lib/gir/nodes.d.ts +0 -11
  232. package/lib/gir/nodes.js +0 -12
  233. package/lib/gir/nodes.js.map +0 -1
  234. package/lib/gir/property.d.ts +0 -60
  235. package/lib/gir/property.js +0 -128
  236. package/lib/gir/property.js.map +0 -1
  237. package/lib/gir/registry.d.ts +0 -51
  238. package/lib/gir/registry.js +0 -144
  239. package/lib/gir/registry.js.map +0 -1
  240. package/lib/gir/signal.d.ts +0 -33
  241. package/lib/gir/signal.js +0 -165
  242. package/lib/gir/signal.js.map +0 -1
  243. package/lib/gir/util.d.ts +0 -49
  244. package/lib/gir/util.js +0 -559
  245. package/lib/gir/util.js.map +0 -1
  246. package/lib/gir-module.d.ts +0 -106
  247. package/lib/gir-module.js +0 -572
  248. package/lib/gir-module.js.map +0 -1
  249. package/lib/gir.d.ts +0 -253
  250. package/lib/gir.js +0 -642
  251. package/lib/gir.js.map +0 -1
  252. package/lib/index.d.ts +0 -14
  253. package/lib/index.js +0 -17
  254. package/lib/index.js.map +0 -1
  255. package/lib/injections/gee08.d.ts +0 -7
  256. package/lib/injections/gee08.js +0 -68
  257. package/lib/injections/gee08.js.map +0 -1
  258. package/lib/injections/gee1.d.ts +0 -7
  259. package/lib/injections/gee1.js +0 -28
  260. package/lib/injections/gee1.js.map +0 -1
  261. package/lib/injections/gio.d.ts +0 -7
  262. package/lib/injections/gio.js +0 -431
  263. package/lib/injections/gio.js.map +0 -1
  264. package/lib/injections/glib.d.ts +0 -7
  265. package/lib/injections/glib.js +0 -204
  266. package/lib/injections/glib.js.map +0 -1
  267. package/lib/injections/gobject.d.ts +0 -7
  268. package/lib/injections/gobject.js +0 -479
  269. package/lib/injections/gobject.js.map +0 -1
  270. package/lib/injections/inject.d.ts +0 -4
  271. package/lib/injections/inject.js +0 -28
  272. package/lib/injections/inject.js.map +0 -1
  273. package/lib/injections/tracker1.d.ts +0 -7
  274. package/lib/injections/tracker1.js +0 -30
  275. package/lib/injections/tracker1.js.map +0 -1
  276. package/lib/library-version.d.ts +0 -10
  277. package/lib/library-version.js +0 -45
  278. package/lib/library-version.js.map +0 -1
  279. package/lib/logger.d.ts +0 -36
  280. package/lib/logger.js +0 -134
  281. package/lib/logger.js.map +0 -1
  282. package/lib/messages.d.ts +0 -23
  283. package/lib/messages.js +0 -39
  284. package/lib/messages.js.map +0 -1
  285. package/lib/registry.d.ts +0 -8
  286. package/lib/registry.js +0 -12
  287. package/lib/registry.js.map +0 -1
  288. package/lib/transformation.d.ts +0 -169
  289. package/lib/transformation.js +0 -393
  290. package/lib/transformation.js.map +0 -1
  291. package/lib/types/answer-version.d.ts +0 -4
  292. package/lib/types/answer-version.js +0 -2
  293. package/lib/types/answer-version.js.map +0 -1
  294. package/lib/types/class-parent.d.ts +0 -13
  295. package/lib/types/class-parent.js +0 -2
  296. package/lib/types/class-parent.js.map +0 -1
  297. package/lib/types/config-flags.d.ts +0 -4
  298. package/lib/types/config-flags.js +0 -2
  299. package/lib/types/config-flags.js.map +0 -1
  300. package/lib/types/construct-name.d.ts +0 -1
  301. package/lib/types/construct-name.js +0 -2
  302. package/lib/types/construct-name.js.map +0 -1
  303. package/lib/types/dependency-map.d.ts +0 -4
  304. package/lib/types/dependency-map.js +0 -2
  305. package/lib/types/dependency-map.js.map +0 -1
  306. package/lib/types/dependency.d.ts +0 -42
  307. package/lib/types/dependency.js +0 -2
  308. package/lib/types/dependency.js.map +0 -1
  309. package/lib/types/file-info.d.ts +0 -14
  310. package/lib/types/file-info.js +0 -2
  311. package/lib/types/file-info.js.map +0 -1
  312. package/lib/types/format.d.ts +0 -1
  313. package/lib/types/format.js +0 -2
  314. package/lib/types/format.js.map +0 -1
  315. package/lib/types/gir-alias-element.d.ts +0 -4
  316. package/lib/types/gir-alias-element.js +0 -2
  317. package/lib/types/gir-alias-element.js.map +0 -1
  318. package/lib/types/gir-annotation.d.ts +0 -9
  319. package/lib/types/gir-annotation.js +0 -2
  320. package/lib/types/gir-annotation.js.map +0 -1
  321. package/lib/types/gir-any-element.d.ts +0 -2
  322. package/lib/types/gir-any-element.js +0 -2
  323. package/lib/types/gir-any-element.js.map +0 -1
  324. package/lib/types/gir-bitfield-element.d.ts +0 -6
  325. package/lib/types/gir-bitfield-element.js +0 -2
  326. package/lib/types/gir-bitfield-element.js.map +0 -1
  327. package/lib/types/gir-callable-param-element.d.ts +0 -4
  328. package/lib/types/gir-callable-param-element.js +0 -2
  329. package/lib/types/gir-callable-param-element.js.map +0 -1
  330. package/lib/types/gir-callable-params.d.ts +0 -7
  331. package/lib/types/gir-callable-params.js +0 -2
  332. package/lib/types/gir-callable-params.js.map +0 -1
  333. package/lib/types/gir-callable-return.d.ts +0 -5
  334. package/lib/types/gir-callable-return.js +0 -2
  335. package/lib/types/gir-callable-return.js.map +0 -1
  336. package/lib/types/gir-callback-element.d.ts +0 -6
  337. package/lib/types/gir-callback-element.js +0 -2
  338. package/lib/types/gir-callback-element.js.map +0 -1
  339. package/lib/types/gir-class-element.d.ts +0 -17
  340. package/lib/types/gir-class-element.js +0 -2
  341. package/lib/types/gir-class-element.js.map +0 -1
  342. package/lib/types/gir-constant-element.d.ts +0 -4
  343. package/lib/types/gir-constant-element.js +0 -2
  344. package/lib/types/gir-constant-element.js.map +0 -1
  345. package/lib/types/gir-constructor-element.d.ts +0 -6
  346. package/lib/types/gir-constructor-element.js +0 -2
  347. package/lib/types/gir-constructor-element.js.map +0 -1
  348. package/lib/types/gir-enum-element.d.ts +0 -6
  349. package/lib/types/gir-enum-element.js +0 -2
  350. package/lib/types/gir-enum-element.js.map +0 -1
  351. package/lib/types/gir-field-element.d.ts +0 -5
  352. package/lib/types/gir-field-element.js +0 -2
  353. package/lib/types/gir-field-element.js.map +0 -1
  354. package/lib/types/gir-function-element.d.ts +0 -6
  355. package/lib/types/gir-function-element.js +0 -2
  356. package/lib/types/gir-function-element.js.map +0 -1
  357. package/lib/types/gir-instance-parameter.d.ts +0 -8
  358. package/lib/types/gir-instance-parameter.js +0 -2
  359. package/lib/types/gir-instance-parameter.js.map +0 -1
  360. package/lib/types/gir-interface-element.d.ts +0 -16
  361. package/lib/types/gir-interface-element.js +0 -2
  362. package/lib/types/gir-interface-element.js.map +0 -1
  363. package/lib/types/gir-member-element.d.ts +0 -5
  364. package/lib/types/gir-member-element.js +0 -2
  365. package/lib/types/gir-member-element.js.map +0 -1
  366. package/lib/types/gir-method-element.d.ts +0 -7
  367. package/lib/types/gir-method-element.js +0 -2
  368. package/lib/types/gir-method-element.js.map +0 -1
  369. package/lib/types/gir-module-resolved-by.d.ts +0 -15
  370. package/lib/types/gir-module-resolved-by.js +0 -2
  371. package/lib/types/gir-module-resolved-by.js.map +0 -1
  372. package/lib/types/gir-modules-grouped-map.d.ts +0 -4
  373. package/lib/types/gir-modules-grouped-map.js +0 -2
  374. package/lib/types/gir-modules-grouped-map.js.map +0 -1
  375. package/lib/types/gir-modules-grouped.d.ts +0 -12
  376. package/lib/types/gir-modules-grouped.js +0 -2
  377. package/lib/types/gir-modules-grouped.js.map +0 -1
  378. package/lib/types/gir-namespace.d.ts +0 -27
  379. package/lib/types/gir-namespace.js +0 -2
  380. package/lib/types/gir-namespace.js.map +0 -1
  381. package/lib/types/gir-property-element.d.ts +0 -4
  382. package/lib/types/gir-property-element.js +0 -2
  383. package/lib/types/gir-property-element.js.map +0 -1
  384. package/lib/types/gir-record-element.d.ts +0 -10
  385. package/lib/types/gir-record-element.js +0 -2
  386. package/lib/types/gir-record-element.js.map +0 -1
  387. package/lib/types/gir-repository.d.ts +0 -5
  388. package/lib/types/gir-repository.js +0 -2
  389. package/lib/types/gir-repository.js.map +0 -1
  390. package/lib/types/gir-signal.d.ts +0 -10
  391. package/lib/types/gir-signal.js +0 -2
  392. package/lib/types/gir-signal.js.map +0 -1
  393. package/lib/types/gir-type-name.d.ts +0 -2
  394. package/lib/types/gir-type-name.js +0 -2
  395. package/lib/types/gir-type-name.js.map +0 -1
  396. package/lib/types/gir-union-element.d.ts +0 -9
  397. package/lib/types/gir-union-element.js +0 -2
  398. package/lib/types/gir-union-element.js.map +0 -1
  399. package/lib/types/gir-unparsed-number.d.ts +0 -2
  400. package/lib/types/gir-unparsed-number.js +0 -2
  401. package/lib/types/gir-unparsed-number.js.map +0 -1
  402. package/lib/types/gir-virtual-method.d.ts +0 -6
  403. package/lib/types/gir-virtual-method.js +0 -2
  404. package/lib/types/gir-virtual-method.js.map +0 -1
  405. package/lib/types/index.d.ts +0 -79
  406. package/lib/types/index.js +0 -80
  407. package/lib/types/index.js.map +0 -1
  408. package/lib/types/inheritance-table.js +0 -2
  409. package/lib/types/inheritance-table.js.map +0 -1
  410. package/lib/types/local-name-check.d.ts +0 -4
  411. package/lib/types/local-name-check.js +0 -2
  412. package/lib/types/local-name-check.js.map +0 -1
  413. package/lib/types/local-name-type.d.ts +0 -1
  414. package/lib/types/local-name-type.js +0 -2
  415. package/lib/types/local-name-type.js.map +0 -1
  416. package/lib/types/local-name.d.ts +0 -7
  417. package/lib/types/local-name.js +0 -2
  418. package/lib/types/local-name.js.map +0 -1
  419. package/lib/types/local-names.d.ts +0 -4
  420. package/lib/types/local-names.js +0 -2
  421. package/lib/types/local-names.js.map +0 -1
  422. package/lib/types/metadata.d.ts +0 -8
  423. package/lib/types/metadata.js +0 -2
  424. package/lib/types/metadata.js.map +0 -1
  425. package/lib/types/options-base.d.ts +0 -4
  426. package/lib/types/options-base.js +0 -2
  427. package/lib/types/options-base.js.map +0 -1
  428. package/lib/types/options-generation.d.ts +0 -44
  429. package/lib/types/options-generation.js +0 -2
  430. package/lib/types/options-generation.js.map +0 -1
  431. package/lib/types/options-load.d.ts +0 -5
  432. package/lib/types/options-load.js +0 -2
  433. package/lib/types/options-load.js.map +0 -1
  434. package/lib/types/options-transform.d.ts +0 -4
  435. package/lib/types/options-transform.js +0 -2
  436. package/lib/types/options-transform.js.map +0 -1
  437. package/lib/types/output-format.d.ts +0 -1
  438. package/lib/types/output-format.js +0 -2
  439. package/lib/types/output-format.js.map +0 -1
  440. package/lib/types/package-data-parsed.d.ts +0 -28
  441. package/lib/types/package-data-parsed.js +0 -2
  442. package/lib/types/package-data-parsed.js.map +0 -1
  443. package/lib/types/package-data.d.ts +0 -23
  444. package/lib/types/package-data.js +0 -2
  445. package/lib/types/package-data.js.map +0 -1
  446. package/lib/types/package-section-parsed.d.ts +0 -8
  447. package/lib/types/package-section-parsed.js +0 -2
  448. package/lib/types/package-section-parsed.js.map +0 -1
  449. package/lib/types/parsed-gir.d.ts +0 -5
  450. package/lib/types/parsed-gir.js +0 -2
  451. package/lib/types/parsed-gir.js.map +0 -1
  452. package/lib/types/parsed-package-data.d.ts +0 -6
  453. package/lib/types/parsed-package-data.js +0 -2
  454. package/lib/types/parsed-package-data.js.map +0 -1
  455. package/lib/types/part-of-class.d.ts +0 -7
  456. package/lib/types/part-of-class.js +0 -2
  457. package/lib/types/part-of-class.js.map +0 -1
  458. package/lib/types/part-of-module.d.ts +0 -6
  459. package/lib/types/part-of-module.js +0 -2
  460. package/lib/types/part-of-module.js.map +0 -1
  461. package/lib/types/property-case.d.ts +0 -1
  462. package/lib/types/property-case.js +0 -2
  463. package/lib/types/property-case.js.map +0 -1
  464. package/lib/types/resolve-type.d.ts +0 -4
  465. package/lib/types/resolve-type.js +0 -6
  466. package/lib/types/resolve-type.js.map +0 -1
  467. package/lib/types/template-data.d.ts +0 -7
  468. package/lib/types/template-data.js +0 -2
  469. package/lib/types/template-data.js.map +0 -1
  470. package/lib/types/transformation-case.d.ts +0 -1
  471. package/lib/types/transformation-case.js +0 -2
  472. package/lib/types/transformation-case.js.map +0 -1
  473. package/lib/types/transformations.d.ts +0 -4
  474. package/lib/types/transformations.js +0 -2
  475. package/lib/types/transformations.js.map +0 -1
  476. package/lib/types/ts-doc-tag.js +0 -2
  477. package/lib/types/ts-doc-tag.js.map +0 -1
  478. package/lib/types/ts-doc.d.ts +0 -16
  479. package/lib/types/ts-doc.js +0 -2
  480. package/lib/types/ts-doc.js.map +0 -1
  481. package/lib/types/type-gir-alias.js +0 -2
  482. package/lib/types/type-gir-alias.js.map +0 -1
  483. package/lib/types/type-gir-class.d.ts +0 -2
  484. package/lib/types/type-gir-class.js +0 -2
  485. package/lib/types/type-gir-class.js.map +0 -1
  486. package/lib/types/type-gir-element.d.ts +0 -3
  487. package/lib/types/type-gir-element.js +0 -2
  488. package/lib/types/type-gir-element.js.map +0 -1
  489. package/lib/types/type-gir-enumeration-member.d.ts +0 -2
  490. package/lib/types/type-gir-enumeration-member.js +0 -2
  491. package/lib/types/type-gir-enumeration-member.js.map +0 -1
  492. package/lib/types/type-gir-enumeration.js +0 -2
  493. package/lib/types/type-gir-enumeration.js.map +0 -1
  494. package/lib/types/type-gir-function.d.ts +0 -1
  495. package/lib/types/type-gir-function.js +0 -2
  496. package/lib/types/type-gir-function.js.map +0 -1
  497. package/lib/types/type-gir-interface.js +0 -2
  498. package/lib/types/type-gir-interface.js.map +0 -1
  499. package/lib/types/type-gir-method.d.ts +0 -2
  500. package/lib/types/type-gir-method.js +0 -2
  501. package/lib/types/type-gir-method.js.map +0 -1
  502. package/lib/types/type-gir-parameter.d.ts +0 -1
  503. package/lib/types/type-gir-parameter.js +0 -2
  504. package/lib/types/type-gir-parameter.js.map +0 -1
  505. package/lib/types/type-gir-property.js +0 -2
  506. package/lib/types/type-gir-property.js.map +0 -1
  507. package/lib/types/type-gir-variable.d.ts +0 -1
  508. package/lib/types/type-gir-variable.js +0 -2
  509. package/lib/types/type-gir-variable.js.map +0 -1
  510. package/lib/types/type-ts-element.d.ts +0 -3
  511. package/lib/types/type-ts-element.js +0 -2
  512. package/lib/types/type-ts-element.js.map +0 -1
  513. package/lib/types/type-ts-enumeration-member.js +0 -2
  514. package/lib/types/type-ts-enumeration-member.js.map +0 -1
  515. package/lib/types/type-ts-function.d.ts +0 -1
  516. package/lib/types/type-ts-function.js +0 -2
  517. package/lib/types/type-ts-function.js.map +0 -1
  518. package/lib/types/type-ts-property.d.ts +0 -1
  519. package/lib/types/type-ts-property.js +0 -2
  520. package/lib/types/type-ts-property.js.map +0 -1
  521. package/lib/types/user-config-load-result.d.ts +0 -6
  522. package/lib/types/user-config-load-result.js +0 -2
  523. package/lib/types/user-config-load-result.js.map +0 -1
  524. package/lib/types/user-config.d.ts +0 -50
  525. package/lib/types/user-config.js +0 -2
  526. package/lib/types/user-config.js.map +0 -1
  527. package/lib/util.d.ts +0 -20
  528. package/lib/util.js +0 -67
  529. package/lib/util.js.map +0 -1
  530. package/lib/utils/files.d.ts +0 -21
  531. package/lib/utils/files.js +0 -62
  532. package/lib/utils/files.js.map +0 -1
  533. package/lib/utils/girs.d.ts +0 -45
  534. package/lib/utils/girs.js +0 -101
  535. package/lib/utils/girs.js.map +0 -1
  536. package/lib/utils/index.d.ts +0 -6
  537. package/lib/utils/index.js +0 -7
  538. package/lib/utils/index.js.map +0 -1
  539. package/lib/utils/numbers.js +0 -10
  540. package/lib/utils/numbers.js.map +0 -1
  541. package/lib/utils/objects.d.ts +0 -135
  542. package/lib/utils/objects.js.map +0 -1
  543. package/lib/utils/path.d.ts +0 -1
  544. package/lib/utils/path.js +0 -7
  545. package/lib/utils/path.js.map +0 -1
  546. package/lib/utils/strings.d.ts +0 -74
  547. package/lib/utils/strings.js +0 -121
  548. package/lib/utils/strings.js.map +0 -1
  549. package/lib/utils.d.ts +0 -267
  550. package/lib/utils.js +0 -417
  551. package/lib/utils.js.map +0 -1
  552. package/lib/validators/class.d.ts +0 -7
  553. package/lib/validators/class.js +0 -217
  554. package/lib/validators/class.js.map +0 -1
  555. package/lib/validators/interface.d.ts +0 -5
  556. package/lib/validators/interface.js +0 -16
  557. package/lib/validators/interface.js.map +0 -1
  558. package/lib/visitor.d.ts +0 -35
  559. package/lib/visitor.js +0 -29
  560. package/lib/visitor.js.map +0 -1
@@ -0,0 +1,24 @@
1
+ import type { GirMemberElement, OptionsLoad, PartOfClass, PartOfModule } from "../types/index.ts";
2
+ import type { IntrospectedBaseOptions } from "../types/introspected.ts";
3
+ import { IntrospectedBase } from "./introspected-base.ts";
4
+ import type { IntrospectedNamespace } from "./namespace.ts";
5
+
6
+ export abstract class IntrospectedNamespaceMember extends IntrospectedBase<IntrospectedNamespace> {
7
+ constructor(name: string, namespace: IntrospectedNamespace, options: IntrospectedBaseOptions = {}) {
8
+ super(name, namespace, options);
9
+ }
10
+
11
+ get namespace() {
12
+ return this.parent;
13
+ }
14
+
15
+ static fromXML(
16
+ _element: PartOfClass | PartOfModule | GirMemberElement,
17
+
18
+ _parent: IntrospectedNamespace,
19
+
20
+ _options: OptionsLoad,
21
+ ): IntrospectedNamespaceMember | null {
22
+ throw new Error("GirBase cannot be instantiated");
23
+ }
24
+ }
@@ -0,0 +1,76 @@
1
+ import { BinaryType, BooleanType, ClosureType, PromiseType, TupleType, TypeIdentifier, VoidType } from "../gir.ts";
2
+
3
+ import type { GirModule } from "../gir-module.ts";
4
+ import type { IntrospectedAlias } from "./alias.ts";
5
+ import type { IntrospectedConstant } from "./const.ts";
6
+ import type { IntrospectedEnum } from "./enum.ts";
7
+ import { IntrospectedFunction } from "./function.ts";
8
+ import type { IntrospectedBaseClass } from "./introspected-classes.ts";
9
+
10
+ // TODO: Move to types/
11
+ export type GirNSMember =
12
+ | IntrospectedBaseClass
13
+ | IntrospectedFunction
14
+ | IntrospectedConstant
15
+ | IntrospectedEnum
16
+ | IntrospectedAlias;
17
+
18
+ export function promisifyNamespaceFunctions(namespace: GirModule) {
19
+ return namespace.members.forEach((node) => {
20
+ if (!(node instanceof IntrospectedFunction)) return;
21
+
22
+ if (node.parameters.length < 1) return;
23
+
24
+ const last_param = node.parameters[node.parameters.length - 1];
25
+
26
+ if (!last_param) return;
27
+
28
+ const last_param_unwrapped = last_param.type.unwrap();
29
+
30
+ if (!(last_param_unwrapped instanceof ClosureType)) return;
31
+
32
+ const internal = last_param_unwrapped.type;
33
+
34
+ if (internal instanceof TypeIdentifier && internal.is("Gio", "AsyncReadyCallback")) {
35
+ const async_res = [
36
+ ...Array.from(namespace.members.values()).filter(
37
+ (m): m is IntrospectedFunction => m instanceof IntrospectedFunction,
38
+ ),
39
+ ].find((m) => m.name === `${node.name.replace(/_async$/, "")}_finish` || m.name === `${node.name}_finish`);
40
+
41
+ if (async_res) {
42
+ const async_parameters = node.parameters.slice(0, -1).map((p) => p.copy());
43
+ const sync_parameters = node.parameters.map((p) => p.copy({ isOptional: false }));
44
+ const output_parameters = async_res.output_parameters;
45
+
46
+ let async_return = new PromiseType(async_res.return());
47
+
48
+ if (output_parameters.length > 0) {
49
+ const raw_return = async_res.return();
50
+ if (raw_return.equals(VoidType) || raw_return.equals(BooleanType)) {
51
+ const [output_type, ...output_types] = output_parameters.map((op) => op.type);
52
+ async_return = new PromiseType(new TupleType(output_type, ...output_types));
53
+ } else {
54
+ const [...output_types] = output_parameters.map((op) => op.type);
55
+ async_return = new PromiseType(new TupleType(raw_return, ...output_types));
56
+ }
57
+ }
58
+
59
+ namespace.members.set(node.name, [
60
+ node.copy({
61
+ parameters: async_parameters,
62
+ return_type: async_return,
63
+ }),
64
+ node.copy({
65
+ parameters: sync_parameters,
66
+ }),
67
+ node.copy({
68
+ return_type: new BinaryType(async_return, node.return()),
69
+ }),
70
+ ]);
71
+ }
72
+ }
73
+ });
74
+ }
75
+
76
+ export { GirModule as IntrospectedNamespace } from "../gir-module.ts";
@@ -0,0 +1,199 @@
1
+ import { GirDirection } from "@gi.ts/parser";
2
+ import type { FormatGenerator } from "../generators/generator.ts";
3
+ import { ArrayType, type TypeExpression } from "../gir.ts";
4
+
5
+ import type { GirCallableParamElement } from "../index.ts";
6
+ import type { IntrospectedOptions, OptionsLoad } from "../types/index.ts";
7
+ import { getType, parseDoc, parseMetadata } from "../utils/gir-parsing.ts";
8
+ import { isIntrospectable } from "../utils/girs.ts";
9
+ import { isInvalid, sanitizeMemberName } from "../utils/naming.ts";
10
+ import type { GirVisitor } from "../visitor.ts";
11
+ import type { IntrospectedConstructor } from "./constructor.ts";
12
+ import type { IntrospectedDirectAllocationConstructor } from "./direct-allocation-constructor.ts";
13
+ import type { IntrospectedFunction } from "./function.ts";
14
+ import { IntrospectedBase } from "./introspected-base.ts";
15
+ import { IntrospectedBaseClass, type IntrospectedClassFunction } from "./introspected-classes.ts";
16
+ import { IntrospectedField } from "./property.ts";
17
+ import type { IntrospectedSignal } from "./signal.ts";
18
+
19
+ export class IntrospectedFunctionParameter extends IntrospectedBase<
20
+ | IntrospectedClassFunction
21
+ | IntrospectedFunction
22
+ | IntrospectedSignal
23
+ | IntrospectedConstructor
24
+ | IntrospectedDirectAllocationConstructor
25
+ | null
26
+ > {
27
+ readonly type: TypeExpression;
28
+ readonly direction: GirDirection;
29
+ readonly isVarArgs: boolean = false;
30
+ readonly isOptional: boolean = false;
31
+ readonly isNullable: boolean = false;
32
+
33
+ constructor({
34
+ name,
35
+ direction,
36
+ type,
37
+ parent,
38
+ doc,
39
+ isVarArgs = false,
40
+ isOptional = false,
41
+ isNullable = false,
42
+ ...args
43
+ }: IntrospectedOptions<{
44
+ name: string;
45
+ parent?:
46
+ | IntrospectedClassFunction
47
+ | IntrospectedFunction
48
+ | IntrospectedSignal
49
+ | IntrospectedConstructor
50
+ | IntrospectedDirectAllocationConstructor
51
+ | null;
52
+ type: TypeExpression;
53
+ direction: GirDirection;
54
+ doc?: string | null;
55
+ isVarArgs?: boolean;
56
+ isOptional?: boolean;
57
+ isNullable?: boolean;
58
+ }>) {
59
+ super(name, parent ?? null, { ...args });
60
+
61
+ this.type = type;
62
+ this.direction = direction;
63
+ this.doc = doc;
64
+ this.isVarArgs = isVarArgs;
65
+ this.isOptional = isOptional;
66
+ this.isNullable = isNullable;
67
+ }
68
+
69
+ get namespace() {
70
+ if (!this.parent) throw new Error(`Failed to get namespace for ${this.name}`);
71
+
72
+ return this.parent.namespace;
73
+ }
74
+
75
+ asField() {
76
+ const { name, parent, isOptional: optional, type } = this;
77
+
78
+ if (!(parent?.parent instanceof IntrospectedBaseClass)) {
79
+ throw new Error("Can't convert parameter of non-class function to field");
80
+ }
81
+
82
+ return new IntrospectedField({ name, parent: parent.parent, optional, type });
83
+ }
84
+
85
+ copy(
86
+ options: {
87
+ parent?:
88
+ | IntrospectedClassFunction
89
+ | IntrospectedFunction
90
+ | IntrospectedSignal
91
+ | IntrospectedConstructor
92
+ | IntrospectedDirectAllocationConstructor
93
+ | null;
94
+ type?: TypeExpression;
95
+ isOptional?: boolean;
96
+ isNullable?: boolean;
97
+ } = {
98
+ parent: this.parent,
99
+ },
100
+ ): IntrospectedFunctionParameter {
101
+ const { type, parent, direction, isVarArgs, isOptional, isNullable, name, doc } = this;
102
+
103
+ return new IntrospectedFunctionParameter({
104
+ parent: options.parent ?? parent,
105
+ name,
106
+ direction,
107
+ isVarArgs,
108
+ isOptional: options.isOptional ?? isOptional,
109
+ isNullable: options.isNullable ?? isNullable,
110
+ type: options.type ?? type,
111
+ doc,
112
+ })._copyBaseProperties(this);
113
+ }
114
+
115
+ accept(visitor: GirVisitor): IntrospectedFunctionParameter {
116
+ const node = this.copy({
117
+ type: visitor.visitType?.(this.type),
118
+ });
119
+
120
+ return visitor.visitParameter?.(node) ?? node;
121
+ }
122
+
123
+ asString<T>(generator: FormatGenerator<T>): T {
124
+ return generator.generateParameter(this);
125
+ }
126
+
127
+ static fromXML<
128
+ Parent extends IntrospectedSignal | IntrospectedClassFunction | IntrospectedFunction | IntrospectedConstructor,
129
+ >(
130
+ parameter: GirCallableParamElement & { $: { name: string } },
131
+ parent: Parent,
132
+ options: OptionsLoad,
133
+ ): IntrospectedFunctionParameter {
134
+ const ns = parent.namespace;
135
+ let name = sanitizeMemberName(parameter.$.name);
136
+
137
+ if (isInvalid(name)) {
138
+ name = `_${name}`;
139
+ }
140
+
141
+ let isVarArgs = false;
142
+ let isOptional = false;
143
+ let isNullable = false;
144
+
145
+ let type: TypeExpression;
146
+ let direction: GirDirection;
147
+
148
+ if (
149
+ !parameter.$.direction ||
150
+ parameter.$.direction === GirDirection.In ||
151
+ parameter.$.direction === GirDirection.Inout ||
152
+ parameter.$.direction === GirDirection.InOut
153
+ ) {
154
+ if (name === "...") {
155
+ isVarArgs = true;
156
+ name = "args";
157
+ }
158
+
159
+ // Default to "in" direction
160
+ direction = parameter.$.direction || GirDirection.In;
161
+
162
+ const optional = parameter.$.optional === "1";
163
+ const nullable = parameter.$.nullable === "1";
164
+
165
+ if (optional) {
166
+ isOptional = true;
167
+ }
168
+
169
+ if (nullable) {
170
+ isNullable = true;
171
+ }
172
+
173
+ type = getType(ns, parameter);
174
+ } else if (parameter.$.direction === GirDirection.Out) {
175
+ direction = parameter.$.direction;
176
+ type = getType(ns, parameter);
177
+ } else {
178
+ throw new Error(`Unknown parameter direction: ${parameter.$.direction as string}`);
179
+ }
180
+
181
+ const fp = new IntrospectedFunctionParameter({
182
+ isVarArgs,
183
+ type: isVarArgs ? new ArrayType(type) : type,
184
+ direction,
185
+ parent: parent ?? undefined,
186
+ isOptional,
187
+ isNullable,
188
+ name,
189
+ isIntrospectable: isIntrospectable(parameter),
190
+ });
191
+
192
+ if (options.loadDocs) {
193
+ fp.doc = parseDoc(parameter);
194
+ fp.metadata = parseMetadata(parameter);
195
+ }
196
+
197
+ return fp;
198
+ }
199
+ }
@@ -0,0 +1,214 @@
1
+ import { BinaryType, BooleanType, ClosureType, PromiseType, TupleType, TypeIdentifier, VoidType } from "../gir.ts";
2
+ import { IntrospectedConstructor } from "./constructor.ts";
3
+ import type { IntrospectedClassFunction } from "./introspected-classes.ts";
4
+ import {
5
+ IntrospectedBaseClass,
6
+ IntrospectedInterface,
7
+ IntrospectedStaticClassFunction,
8
+ IntrospectedVirtualClassFunction,
9
+ } from "./introspected-classes.ts";
10
+ import type { IntrospectedFunctionParameter } from "./parameter.ts";
11
+
12
+ /**
13
+ * Generates three overloaded function signatures for async methods:
14
+ * 1. A Promise-based version without callback
15
+ * 2. A callback-based version with required callback
16
+ * 3. A union version with optional callback
17
+ *
18
+ * @param node - The original class function to create overloads from
19
+ * @param async_parameters - Parameters for the Promise-based version (without callback)
20
+ * @param sync_parameters - Parameters for the callback version
21
+ * @param async_return - The Promise return type
22
+ * @returns Array of three overloaded function signatures
23
+ */
24
+ function generatePromisifyOverloadedSignatures(
25
+ node: IntrospectedClassFunction,
26
+ async_parameters: IntrospectedFunctionParameter[],
27
+ sync_parameters: IntrospectedFunctionParameter[],
28
+ async_return: PromiseType,
29
+ ): IntrospectedClassFunction[] {
30
+ // Promise-based overload (without callback)
31
+ const promiseOverload = node.copy({
32
+ parameters: async_parameters,
33
+ returnType: async_return,
34
+ });
35
+
36
+ // Callback-based overload (with required callback)
37
+ const callbackOverload = node.copy({
38
+ parameters: sync_parameters,
39
+ returnType: VoidType,
40
+ });
41
+
42
+ // Union overload (with optional callback)
43
+ const unionOverload = node.copy({
44
+ parameters: [...async_parameters, sync_parameters[sync_parameters.length - 1].copy({ isOptional: true })],
45
+ returnType: new BinaryType(async_return, VoidType),
46
+ });
47
+
48
+ return [promiseOverload, callbackOverload, unionOverload];
49
+ }
50
+
51
+ /**
52
+ * Searches for a corresponding finish method within a class
53
+ * Matches either {name}_finish or {name without _async}_finish
54
+ *
55
+ * @param cls - The class to search in
56
+ * @param node - The async function to find the finish method for
57
+ * @returns The finish method if found, undefined otherwise
58
+ */
59
+ function findFinishMethodInClass(cls: IntrospectedBaseClass, node: IntrospectedClassFunction) {
60
+ const members =
61
+ node instanceof IntrospectedStaticClassFunction
62
+ ? [...cls.constructors, ...cls.members.filter((m) => m instanceof IntrospectedStaticClassFunction)]
63
+ : [...cls.members.filter((m) => !(m instanceof IntrospectedStaticClassFunction))];
64
+
65
+ // Prefer the GIR-specified finish function name over name heuristics
66
+ if (node.finishFuncName) {
67
+ return members.find((m) => m.name === node.finishFuncName);
68
+ }
69
+
70
+ return members.find(
71
+ (m) => m.name === `${node.name.replace(/_async$/, "")}_finish` || m.name === `${node.name}_finish`,
72
+ );
73
+ }
74
+
75
+ /**
76
+ * Searches for a finish method in the class hierarchy:
77
+ * 1. Searches in the current class
78
+ * 2. Searches in the interface parent if available
79
+ * 3. Searches through the parent class hierarchy
80
+ *
81
+ * @param node - The async function to find the finish method for
82
+ * @param parent - The immediate parent class
83
+ * @param interfaceParent - Optional interface parent to search in
84
+ * @returns The finish method if found, undefined otherwise
85
+ */
86
+ function findFinishMethod(
87
+ node: IntrospectedClassFunction,
88
+ parent: IntrospectedBaseClass,
89
+ interfaceParent?: IntrospectedInterface,
90
+ ) {
91
+ // Search in current class
92
+ let async_res = findFinishMethodInClass(parent, node);
93
+
94
+ // If not found and we have an interface parent, search there
95
+ if (!async_res && interfaceParent) {
96
+ async_res = findFinishMethodInClass(interfaceParent, node);
97
+ }
98
+
99
+ // If still not found, search through parent hierarchy
100
+ if (!async_res) {
101
+ async_res = parent.findParentMap((parentClass) => findFinishMethodInClass(parentClass, node));
102
+ }
103
+
104
+ return async_res;
105
+ }
106
+
107
+ /**
108
+ * Creates a Promise return type for an async function
109
+ * Handles both simple returns and tuple returns with output parameters
110
+ *
111
+ * @param async_res - The finish method or constructor to create the return type from
112
+ * @returns A PromiseType containing the appropriate return type
113
+ */
114
+ function createAsyncReturn(async_res: IntrospectedClassFunction | IntrospectedConstructor): PromiseType {
115
+ const output_parameters = async_res instanceof IntrospectedConstructor ? [] : async_res.output_parameters;
116
+ const return_type = async_res.return();
117
+
118
+ // For async methods that return multiple values (like read_bytes_finish)
119
+ if (output_parameters.length > 0) {
120
+ // If there's only one output parameter and the return type is void/boolean,
121
+ // use the output parameter as the Promise result type
122
+ if (output_parameters.length === 1 && (return_type.equals(VoidType) || return_type.equals(BooleanType))) {
123
+ return new PromiseType(output_parameters[0].type);
124
+ }
125
+
126
+ // Special case: If return type is boolean and we have multiple output parameters,
127
+ // GJS drops the boolean from the tuple (as it's used for error handling)
128
+ if (return_type.equals(BooleanType) && output_parameters.length > 0) {
129
+ const [firstParam, ...restParams] = output_parameters;
130
+ return new PromiseType(new TupleType(firstParam.type, ...restParams.map((p) => p.type)));
131
+ }
132
+
133
+ // Otherwise, return a tuple of [return_value, ...output_parameters]
134
+ return new PromiseType(new TupleType(return_type, ...output_parameters.map((p) => p.type)));
135
+ }
136
+
137
+ // For simple async methods that just return a value
138
+ return new PromiseType(return_type);
139
+ }
140
+
141
+ /**
142
+ * Checks if a parameter is a Gio.AsyncReadyCallback
143
+ *
144
+ * @param param - The function parameter to check
145
+ * @returns true if the parameter is an AsyncReadyCallback, false otherwise
146
+ */
147
+ function isAsyncReadyCallback(param: IntrospectedFunctionParameter): boolean {
148
+ const unwrapped = param.type.unwrap();
149
+ return (
150
+ unwrapped instanceof ClosureType &&
151
+ unwrapped.type instanceof TypeIdentifier &&
152
+ unwrapped.type.is("Gio", "AsyncReadyCallback")
153
+ );
154
+ }
155
+
156
+ /**
157
+ * Checks if a function is an async function that can be promisified
158
+ * Must have a corresponding _finish method and take an AsyncReadyCallback
159
+ */
160
+ function isPromisifiable(node: IntrospectedClassFunction): boolean {
161
+ // Skip virtual functions
162
+ if (node instanceof IntrospectedVirtualClassFunction) return false;
163
+
164
+ // Must have at least one parameter
165
+ if (node.parameters.length === 0) return false;
166
+
167
+ // Last parameter must be AsyncReadyCallback
168
+ const last_param = node.parameters[node.parameters.length - 1];
169
+ if (!last_param || !isAsyncReadyCallback(last_param)) return false;
170
+
171
+ // Must have a parent class
172
+ const parent = node.parent;
173
+ if (!(parent instanceof IntrospectedBaseClass)) return false;
174
+
175
+ // Must have a corresponding finish method
176
+ const async_res = findFinishMethod(
177
+ node,
178
+ parent,
179
+ node.interfaceParent instanceof IntrospectedInterface ? node.interfaceParent : undefined,
180
+ );
181
+
182
+ return async_res !== undefined;
183
+ }
184
+
185
+ /**
186
+ * Transforms async functions to include Promise-based overloads
187
+ */
188
+ export function promisifyFunctions(functions: IntrospectedClassFunction[]): IntrospectedClassFunction[] {
189
+ return functions.flatMap((node) => {
190
+ // Check if function can be promisified
191
+ if (!isPromisifiable(node)) return node;
192
+
193
+ const parent = node.parent as IntrospectedBaseClass;
194
+ const async_res = findFinishMethod(
195
+ node,
196
+ parent,
197
+ node.interfaceParent instanceof IntrospectedInterface ? node.interfaceParent : undefined,
198
+ );
199
+
200
+ if (!async_res) return node;
201
+
202
+ // Create parameters for Promise version (without callback)
203
+ const async_parameters = node.parameters.slice(0, -1).map((p) => p.copy({ parent: node }));
204
+
205
+ // Create parameters for callback version (all parameters required)
206
+ const sync_parameters = node.parameters.map((p) => p.copy({ isOptional: false }));
207
+
208
+ // Create Promise return type
209
+ const async_return = createAsyncReturn(async_res);
210
+
211
+ // Generate the three overloaded signatures
212
+ return generatePromisifyOverloadedSignatures(node, async_parameters, sync_parameters, async_return);
213
+ });
214
+ }