@ts-for-gir/lib 4.0.0-beta.4 → 4.0.0-beta.41

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 (541) hide show
  1. package/README.md +13 -1
  2. package/package.json +18 -31
  3. package/src/constants.ts +152 -0
  4. package/src/dependency-manager.ts +445 -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 +80 -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 +50 -0
  17. package/src/generics/st.ts +206 -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 +296 -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 +1484 -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 +209 -0
  40. package/src/gir/property.ts +203 -0
  41. package/src/gir/record.ts +488 -0
  42. package/src/gir/registry.ts +183 -0
  43. package/src/gir/signal.ts +278 -0
  44. package/src/gir-module.ts +719 -0
  45. package/src/gir.ts +869 -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 +49 -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 +65 -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 +70 -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 +593 -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 +69 -0
  132. package/src/utils/gir-parsing.ts +262 -0
  133. package/src/utils/girs.ts +113 -0
  134. package/src/utils/index.ts +14 -0
  135. package/src/utils/naming.ts +188 -0
  136. package/src/utils/numbers.ts +8 -0
  137. package/src/utils/objects.ts +129 -0
  138. package/src/utils/path.ts +7 -0
  139. package/src/utils/registry.ts +5 -0
  140. package/src/utils/strings.ts +134 -0
  141. package/src/utils/type-resolution.ts +116 -0
  142. package/src/utils/types.ts +249 -0
  143. package/src/validators/class.ts +324 -0
  144. package/src/validators/function-parameters.ts +52 -0
  145. package/src/validators/interface.ts +20 -0
  146. package/src/visitor.ts +58 -0
  147. package/lib/constants.d.ts +0 -26
  148. package/lib/constants.js +0 -28
  149. package/lib/constants.js.map +0 -1
  150. package/lib/dependency-manager.d.ts +0 -183
  151. package/lib/dependency-manager.js +0 -401
  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 -8
  169. package/lib/generators/dts-inline.js +0 -59
  170. package/lib/generators/dts-inline.js.map +0 -1
  171. package/lib/generators/dts-modules.d.ts +0 -8
  172. package/lib/generators/dts-modules.js +0 -100
  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 -256
  184. package/lib/generators/json.js +0 -869
  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 -112
  247. package/lib/gir-module.js +0 -570
  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 -26
  283. package/lib/messages.js +0 -42
  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 -181
  289. package/lib/transformation.js +0 -480
  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 -33
  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 -35
  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.d.ts +0 -268
  531. package/lib/utils.js +0 -417
  532. package/lib/utils.js.map +0 -1
  533. package/lib/validators/class.d.ts +0 -7
  534. package/lib/validators/class.js +0 -217
  535. package/lib/validators/class.js.map +0 -1
  536. package/lib/validators/interface.d.ts +0 -5
  537. package/lib/validators/interface.js +0 -16
  538. package/lib/validators/interface.js.map +0 -1
  539. package/lib/visitor.d.ts +0 -35
  540. package/lib/visitor.js +0 -29
  541. 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,209 @@
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
+ return members.find(
66
+ (m) => m.name === `${node.name.replace(/_async$/, "")}_finish` || m.name === `${node.name}_finish`,
67
+ );
68
+ }
69
+
70
+ /**
71
+ * Searches for a finish method in the class hierarchy:
72
+ * 1. Searches in the current class
73
+ * 2. Searches in the interface parent if available
74
+ * 3. Searches through the parent class hierarchy
75
+ *
76
+ * @param node - The async function to find the finish method for
77
+ * @param parent - The immediate parent class
78
+ * @param interfaceParent - Optional interface parent to search in
79
+ * @returns The finish method if found, undefined otherwise
80
+ */
81
+ function findFinishMethod(
82
+ node: IntrospectedClassFunction,
83
+ parent: IntrospectedBaseClass,
84
+ interfaceParent?: IntrospectedInterface,
85
+ ) {
86
+ // Search in current class
87
+ let async_res = findFinishMethodInClass(parent, node);
88
+
89
+ // If not found and we have an interface parent, search there
90
+ if (!async_res && interfaceParent) {
91
+ async_res = findFinishMethodInClass(interfaceParent, node);
92
+ }
93
+
94
+ // If still not found, search through parent hierarchy
95
+ if (!async_res) {
96
+ async_res = parent.findParentMap((parentClass) => findFinishMethodInClass(parentClass, node));
97
+ }
98
+
99
+ return async_res;
100
+ }
101
+
102
+ /**
103
+ * Creates a Promise return type for an async function
104
+ * Handles both simple returns and tuple returns with output parameters
105
+ *
106
+ * @param async_res - The finish method or constructor to create the return type from
107
+ * @returns A PromiseType containing the appropriate return type
108
+ */
109
+ function createAsyncReturn(async_res: IntrospectedClassFunction | IntrospectedConstructor): PromiseType {
110
+ const output_parameters = async_res instanceof IntrospectedConstructor ? [] : async_res.output_parameters;
111
+ const return_type = async_res.return();
112
+
113
+ // For async methods that return multiple values (like read_bytes_finish)
114
+ if (output_parameters.length > 0) {
115
+ // If there's only one output parameter and the return type is void/boolean,
116
+ // use the output parameter as the Promise result type
117
+ if (output_parameters.length === 1 && (return_type.equals(VoidType) || return_type.equals(BooleanType))) {
118
+ return new PromiseType(output_parameters[0].type);
119
+ }
120
+
121
+ // Special case: If return type is boolean and we have multiple output parameters,
122
+ // GJS drops the boolean from the tuple (as it's used for error handling)
123
+ if (return_type.equals(BooleanType) && output_parameters.length > 0) {
124
+ const [firstParam, ...restParams] = output_parameters;
125
+ return new PromiseType(new TupleType(firstParam.type, ...restParams.map((p) => p.type)));
126
+ }
127
+
128
+ // Otherwise, return a tuple of [return_value, ...output_parameters]
129
+ return new PromiseType(new TupleType(return_type, ...output_parameters.map((p) => p.type)));
130
+ }
131
+
132
+ // For simple async methods that just return a value
133
+ return new PromiseType(return_type);
134
+ }
135
+
136
+ /**
137
+ * Checks if a parameter is a Gio.AsyncReadyCallback
138
+ *
139
+ * @param param - The function parameter to check
140
+ * @returns true if the parameter is an AsyncReadyCallback, false otherwise
141
+ */
142
+ function isAsyncReadyCallback(param: IntrospectedFunctionParameter): boolean {
143
+ const unwrapped = param.type.unwrap();
144
+ return (
145
+ unwrapped instanceof ClosureType &&
146
+ unwrapped.type instanceof TypeIdentifier &&
147
+ unwrapped.type.is("Gio", "AsyncReadyCallback")
148
+ );
149
+ }
150
+
151
+ /**
152
+ * Checks if a function is an async function that can be promisified
153
+ * Must have a corresponding _finish method and take an AsyncReadyCallback
154
+ */
155
+ function isPromisifiable(node: IntrospectedClassFunction): boolean {
156
+ // Skip virtual functions
157
+ if (node instanceof IntrospectedVirtualClassFunction) return false;
158
+
159
+ // Must have at least one parameter
160
+ if (node.parameters.length === 0) return false;
161
+
162
+ // Last parameter must be AsyncReadyCallback
163
+ const last_param = node.parameters[node.parameters.length - 1];
164
+ if (!last_param || !isAsyncReadyCallback(last_param)) return false;
165
+
166
+ // Must have a parent class
167
+ const parent = node.parent;
168
+ if (!(parent instanceof IntrospectedBaseClass)) return false;
169
+
170
+ // Must have a corresponding finish method
171
+ const async_res = findFinishMethod(
172
+ node,
173
+ parent,
174
+ node.interfaceParent instanceof IntrospectedInterface ? node.interfaceParent : undefined,
175
+ );
176
+
177
+ return async_res !== undefined;
178
+ }
179
+
180
+ /**
181
+ * Transforms async functions to include Promise-based overloads
182
+ */
183
+ export function promisifyFunctions(functions: IntrospectedClassFunction[]): IntrospectedClassFunction[] {
184
+ return functions.flatMap((node) => {
185
+ // Check if function can be promisified
186
+ if (!isPromisifiable(node)) return node;
187
+
188
+ const parent = node.parent as IntrospectedBaseClass;
189
+ const async_res = findFinishMethod(
190
+ node,
191
+ parent,
192
+ node.interfaceParent instanceof IntrospectedInterface ? node.interfaceParent : undefined,
193
+ );
194
+
195
+ if (!async_res) return node;
196
+
197
+ // Create parameters for Promise version (without callback)
198
+ const async_parameters = node.parameters.slice(0, -1).map((p) => p.copy({ parent: node }));
199
+
200
+ // Create parameters for callback version (all parameters required)
201
+ const sync_parameters = node.parameters.map((p) => p.copy({ isOptional: false }));
202
+
203
+ // Create Promise return type
204
+ const async_return = createAsyncReturn(async_res);
205
+
206
+ // Generate the three overloaded signatures
207
+ return generatePromisifyOverloadedSignatures(node, async_parameters, sync_parameters, async_return);
208
+ });
209
+ }
@@ -0,0 +1,203 @@
1
+ import type { FormatGenerator } from "../generators/generator.ts";
2
+ import type { TypeExpression } from "../gir.ts";
3
+ import type { GirFieldElement, GirPropertyElement } from "../index.ts";
4
+ import type { OptionsLoad } from "../types/index.ts";
5
+ import type { Options } from "../types/introspected.ts";
6
+ import { getType, parseDoc, parseMetadata } from "../utils/gir-parsing.ts";
7
+ import { isIntrospectable } from "../utils/girs.ts";
8
+ import type { GirVisitor } from "../visitor.ts";
9
+ import type { IntrospectedEnum } from "./enum.ts";
10
+ import { IntrospectedBase } from "./introspected-base.ts";
11
+ import { IntrospectedClassMember } from "./introspected-class-member.ts";
12
+ import type { IntrospectedBaseClass } from "./introspected-classes.ts";
13
+
14
+ export class IntrospectedField extends IntrospectedClassMember {
15
+ readonly type: TypeExpression;
16
+ readonly optional: boolean = false;
17
+ readonly computed: boolean;
18
+ readonly isStatic: boolean;
19
+ readonly writable: boolean;
20
+ readonly isNative: boolean = false;
21
+
22
+ copy(options?: { parent?: IntrospectedBaseClass; type?: TypeExpression; isStatic?: boolean }): IntrospectedField {
23
+ const { type, name, parent, optional, computed, isStatic, writable } = this;
24
+
25
+ return new IntrospectedField({
26
+ name,
27
+ parent,
28
+ type: options?.type ?? type,
29
+ optional,
30
+ computed,
31
+ isStatic: options?.isStatic ?? isStatic,
32
+ writable,
33
+ })._copyBaseProperties(this);
34
+ }
35
+
36
+ constructor({
37
+ name,
38
+ parent,
39
+ type,
40
+ computed = false,
41
+ optional = false,
42
+ isStatic = false,
43
+ writable = true,
44
+ ...args
45
+ }: Options<{
46
+ name: string;
47
+ parent?: IntrospectedBaseClass | null;
48
+ type: TypeExpression;
49
+ computed?: boolean;
50
+ optional?: boolean;
51
+ isStatic?: boolean;
52
+ writable?: boolean;
53
+ }>) {
54
+ super(name, parent ?? null, { ...args });
55
+
56
+ this.type = type;
57
+ this.computed = computed;
58
+ this.optional = optional;
59
+ this.isStatic = isStatic;
60
+ this.writable = writable;
61
+ }
62
+
63
+ asString<T extends FormatGenerator<unknown>>(generator: T): ReturnType<T["generateField"]> {
64
+ return generator.generateField(this) as ReturnType<T["generateField"]>;
65
+ }
66
+
67
+ accept(visitor: GirVisitor): IntrospectedField {
68
+ const node = this.copy({
69
+ type: visitor.visitType?.(this.type) ?? this.type,
70
+ });
71
+
72
+ return visitor.visitField?.(node) ?? node;
73
+ }
74
+
75
+ static fromXML(field: GirFieldElement, parent: IntrospectedBaseClass): IntrospectedField {
76
+ const namespace = parent.namespace;
77
+ const name = field.$.name;
78
+ const _name = name.replace(/[-]/g, "_");
79
+ const f = new IntrospectedField({
80
+ name: _name,
81
+ parent,
82
+ type: getType(namespace, field),
83
+ isPrivate: field.$.private === "1",
84
+ isIntrospectable: isIntrospectable(field),
85
+ });
86
+
87
+ return f;
88
+ }
89
+ }
90
+
91
+ export class JSField extends IntrospectedField {
92
+ isNative = true;
93
+ }
94
+
95
+ export class IntrospectedProperty extends IntrospectedBase<IntrospectedEnum | IntrospectedBaseClass> {
96
+ type: TypeExpression;
97
+
98
+ readonly writable: boolean = false;
99
+ readonly readable: boolean = true;
100
+ readonly constructOnly: boolean;
101
+
102
+ get namespace() {
103
+ return this.parent.namespace;
104
+ }
105
+
106
+ copy(options?: {
107
+ name?: string;
108
+ parent?: IntrospectedBaseClass | IntrospectedEnum;
109
+ type?: TypeExpression;
110
+ }): IntrospectedProperty {
111
+ const { name, writable, readable, type, constructOnly, parent } = this;
112
+
113
+ return new IntrospectedProperty({
114
+ name: options?.name ?? name,
115
+ writable,
116
+ readable,
117
+ type: options?.type ?? type,
118
+ constructOnly,
119
+ parent: options?.parent ?? parent,
120
+ })._copyBaseProperties(this);
121
+ }
122
+
123
+ accept(visitor: GirVisitor): IntrospectedProperty {
124
+ const node = this.copy({
125
+ parent: this.parent,
126
+ type: visitor.visitType?.(this.type) ?? this.type,
127
+ });
128
+
129
+ return visitor.visitProperty?.(node) ?? node;
130
+ }
131
+
132
+ constructor({
133
+ name,
134
+ type,
135
+ writable,
136
+ readable,
137
+ constructOnly,
138
+ parent,
139
+ ...args
140
+ }: Options<{
141
+ name: string;
142
+ type: TypeExpression;
143
+ writable: boolean;
144
+ readable: boolean;
145
+ constructOnly: boolean;
146
+ parent: IntrospectedBaseClass | IntrospectedEnum;
147
+ }>) {
148
+ super(name, parent, { ...args });
149
+
150
+ this.type = type;
151
+ this.writable = writable;
152
+ this.readable = readable;
153
+ this.constructOnly = constructOnly;
154
+ }
155
+
156
+ asString<T extends FormatGenerator<unknown>>(generator: T, construct?: boolean): ReturnType<T["generateProperty"]> {
157
+ return generator.generateProperty(this, construct) as ReturnType<T["generateProperty"]>;
158
+ }
159
+
160
+ toCamelCase() {
161
+ const [part, ...parts] = this.name.split("_");
162
+
163
+ if (parts.length === 0) {
164
+ return this.copy({
165
+ name: part,
166
+ parent: this.parent,
167
+ });
168
+ }
169
+
170
+ const camelCase = `${part}${parts.map((s) => `${s[0].toUpperCase()}${s.slice(1)}`).join("")}`;
171
+
172
+ return this.copy({
173
+ name: camelCase,
174
+ parent: this.parent,
175
+ });
176
+ }
177
+
178
+ static fromXML(
179
+ element: GirPropertyElement,
180
+ parent: IntrospectedBaseClass | IntrospectedEnum,
181
+ options: OptionsLoad,
182
+ ): IntrospectedProperty {
183
+ const ns = parent.namespace;
184
+ const name = element.$.name;
185
+ const _name = name.replace(/[-]/g, "_");
186
+ const property = new IntrospectedProperty({
187
+ name: _name,
188
+ writable: element.$?.writable === "1",
189
+ readable: element.$?.readable !== "0",
190
+ constructOnly: element.$?.["construct-only"] === "1",
191
+ type: getType(ns, element),
192
+ parent,
193
+ isIntrospectable: isIntrospectable(element),
194
+ });
195
+
196
+ if (options.loadDocs) {
197
+ property.doc = parseDoc(element);
198
+ property.metadata = parseMetadata(element);
199
+ }
200
+
201
+ return property;
202
+ }
203
+ }