@ts-for-gir/lib 4.0.0-beta.25 → 4.0.0-beta.26

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 (567) hide show
  1. package/package.json +12 -26
  2. package/src/constants.ts +154 -0
  3. package/src/dependency-manager.ts +427 -0
  4. package/src/formatters/default.ts +7 -0
  5. package/src/formatters/formatter.ts +3 -0
  6. package/src/formatters/index.ts +3 -0
  7. package/src/formatters/json.ts +7 -0
  8. package/src/generators/generator.ts +65 -0
  9. package/src/generators/index.ts +2 -0
  10. package/src/generics/clutter.ts +71 -0
  11. package/src/generics/generify.ts +74 -0
  12. package/src/generics/gio.ts +91 -0
  13. package/src/generics/glib.ts +31 -0
  14. package/src/generics/gtk.ts +99 -0
  15. package/src/generics/meta.ts +41 -0
  16. package/src/generics/st.ts +197 -0
  17. package/src/generics/visitor.ts +484 -0
  18. package/src/gir/alias.ts +73 -0
  19. package/src/gir/callback.ts +79 -0
  20. package/src/gir/const.ts +73 -0
  21. package/src/gir/constructor.ts +91 -0
  22. package/src/gir/data.ts +12 -0
  23. package/src/gir/dependency-resolver.ts +81 -0
  24. package/src/gir/direct-allocation-constructor.ts +65 -0
  25. package/src/gir/enum-member.ts +51 -0
  26. package/src/gir/enum.ts +126 -0
  27. package/src/gir/error.ts +82 -0
  28. package/src/gir/function.ts +296 -0
  29. package/src/gir/generics.ts +66 -0
  30. package/src/gir/gir-complex-record.ts +7 -0
  31. package/src/gir/index.ts +25 -0
  32. package/src/gir/introspected-base.ts +104 -0
  33. package/src/gir/introspected-class-member.ts +15 -0
  34. package/src/gir/introspected-classes.ts +1517 -0
  35. package/src/gir/introspected-namespace-member.ts +24 -0
  36. package/src/gir/namespace.ts +76 -0
  37. package/src/gir/parameter.ts +199 -0
  38. package/src/gir/promisify.ts +209 -0
  39. package/src/gir/property.ts +203 -0
  40. package/src/gir/record.ts +477 -0
  41. package/src/gir/registry.ts +184 -0
  42. package/src/gir/signal.ts +246 -0
  43. package/src/gir-module.ts +703 -0
  44. package/src/gir.ts +892 -0
  45. package/src/index.ts +16 -0
  46. package/src/injections/gee08.ts +89 -0
  47. package/src/injections/gee1.ts +35 -0
  48. package/src/injections/gio.ts +707 -0
  49. package/src/injections/glib.ts +275 -0
  50. package/src/injections/gobject.ts +901 -0
  51. package/src/injections/gtk4.ts +23 -0
  52. package/src/injections/inject.ts +43 -0
  53. package/src/injections/shell.ts +45 -0
  54. package/src/injections/tracker1.ts +42 -0
  55. package/src/library-version.ts +50 -0
  56. package/src/logger.ts +104 -0
  57. package/src/messages.ts +57 -0
  58. package/src/templates/index.ts +1 -0
  59. package/src/templates/template-engine.ts +178 -0
  60. package/src/types/answer-version.ts +4 -0
  61. package/src/types/any-introspected-type.ts +3 -0
  62. package/src/types/class-function-types.ts +49 -0
  63. package/src/types/class-member.ts +5 -0
  64. package/src/types/class-parent.ts +14 -0
  65. package/src/types/class.ts +45 -0
  66. package/src/types/config-flags.ts +5 -0
  67. package/src/types/construct-name.ts +13 -0
  68. package/src/types/dependency-map.ts +4 -0
  69. package/{lib/types/dependency.d.ts → src/types/dependency.ts} +17 -15
  70. package/{lib/types/file-info.d.ts → src/types/file-info.ts} +3 -3
  71. package/src/types/format.ts +1 -0
  72. package/src/types/generator-constructor.ts +7 -0
  73. package/src/types/generics-config.ts +90 -0
  74. package/src/types/gir-any-element.ts +35 -0
  75. package/src/types/gir-module-interface.ts +22 -0
  76. package/src/types/gir-module-resolved.ts +32 -0
  77. package/src/types/gir-type-name.ts +20 -0
  78. package/src/types/index.ts +94 -0
  79. package/{lib/types/inheritance-table.d.ts → src/types/inheritance-table.ts} +1 -1
  80. package/src/types/introspected.ts +18 -0
  81. package/src/types/local-name-check.ts +5 -0
  82. package/src/types/local-name-type.ts +1 -0
  83. package/src/types/local-name.ts +8 -0
  84. package/src/types/local-names.ts +5 -0
  85. package/src/types/metadata.ts +6 -0
  86. package/src/types/ns-loader.ts +7 -0
  87. package/src/types/options-base.ts +8 -0
  88. package/{lib/types/options-generation.d.ts → src/types/options-generation.ts} +22 -13
  89. package/src/types/options-load.ts +6 -0
  90. package/src/types/options-transform.ts +5 -0
  91. package/src/types/output-format.ts +1 -0
  92. package/{lib/types/package-data-parsed.d.ts → src/types/package-data-parsed.ts} +13 -13
  93. package/{lib/types/package-data.d.ts → src/types/package-data.ts} +12 -11
  94. package/src/types/package-section-parsed.ts +9 -0
  95. package/src/types/parsed-gir.ts +5 -0
  96. package/src/types/parsed-package-data.ts +7 -0
  97. package/src/types/property-case.ts +1 -0
  98. package/src/types/resolve-type.ts +4 -0
  99. package/src/types/template-data.ts +8 -0
  100. package/src/types/template-options.ts +33 -0
  101. package/src/types/transformation-case.ts +9 -0
  102. package/src/types/transformations.ts +5 -0
  103. package/{lib/types/ts-doc-tag.d.ts → src/types/ts-doc-tag.ts} +5 -3
  104. package/{lib/types/ts-doc.d.ts → src/types/ts-doc.ts} +5 -3
  105. package/{lib/types/type-gir-alias.d.ts → src/types/type-gir-alias.ts} +1 -1
  106. package/{lib/types/type-gir-class.d.ts → src/types/type-gir-class.ts} +1 -1
  107. package/src/types/type-gir-element.ts +25 -0
  108. package/{lib/types/type-gir-enumeration-member.d.ts → src/types/type-gir-enumeration-member.ts} +1 -1
  109. package/{lib/types/type-ts-enumeration-member.d.ts → src/types/type-gir-enumeration.ts} +1 -1
  110. package/src/types/type-gir-function.ts +8 -0
  111. package/{lib/types/type-gir-interface.d.ts → src/types/type-gir-interface.ts} +1 -1
  112. package/{lib/types/type-gir-method.d.ts → src/types/type-gir-method.ts} +1 -1
  113. package/src/types/type-gir-parameter.ts +1 -0
  114. package/{lib/types/type-gir-property.d.ts → src/types/type-gir-property.ts} +1 -1
  115. package/src/types/type-gir-variable.ts +1 -0
  116. package/src/types/type-ts-element.ts +13 -0
  117. package/{lib/types/type-gir-enumeration.d.ts → src/types/type-ts-enumeration-member.ts} +1 -1
  118. package/{lib/types/type-ts-function.d.ts → src/types/type-ts-function.ts} +1 -1
  119. package/{lib/types/type-ts-property.d.ts → src/types/type-ts-property.ts} +1 -1
  120. package/src/types/user-config-load-result.ts +6 -0
  121. package/{lib/types/user-config.d.ts → src/types/user-config.ts} +25 -17
  122. package/src/util.ts +84 -0
  123. package/src/utils/conflicts/conflict-resolver.ts +122 -0
  124. package/src/utils/conflicts/function-conflict-detector.ts +139 -0
  125. package/src/utils/conflicts/index.ts +2 -0
  126. package/src/utils/conflicts.ts +490 -0
  127. package/{lib/utils/documentation.js → src/utils/documentation.ts} +25 -22
  128. package/src/utils/files.ts +71 -0
  129. package/src/utils/function-type-guards.ts +61 -0
  130. package/src/utils/generation.ts +69 -0
  131. package/src/utils/gir-parsing.ts +243 -0
  132. package/src/utils/girs.ts +113 -0
  133. package/src/utils/index.ts +14 -0
  134. package/src/utils/naming.ts +188 -0
  135. package/{lib/utils/numbers.d.ts → src/utils/numbers.ts} +3 -1
  136. package/{lib/utils/objects.js → src/utils/objects.ts} +15 -7
  137. package/src/utils/path.ts +7 -0
  138. package/src/utils/registry.ts +5 -0
  139. package/src/utils/strings.ts +134 -0
  140. package/src/utils/type-resolution.ts +116 -0
  141. package/src/utils/types.ts +247 -0
  142. package/src/validators/class.ts +324 -0
  143. package/src/validators/function-parameters.ts +52 -0
  144. package/src/validators/interface.ts +20 -0
  145. package/src/visitor.ts +58 -0
  146. package/lib/constants.d.ts +0 -25
  147. package/lib/constants.js +0 -93
  148. package/lib/constants.js.map +0 -1
  149. package/lib/dependency-manager.d.ts +0 -151
  150. package/lib/dependency-manager.js +0 -340
  151. package/lib/dependency-manager.js.map +0 -1
  152. package/lib/formatters/default.d.ts +0 -4
  153. package/lib/formatters/default.js +0 -7
  154. package/lib/formatters/default.js.map +0 -1
  155. package/lib/formatters/formatter.d.ts +0 -3
  156. package/lib/formatters/formatter.js +0 -3
  157. package/lib/formatters/formatter.js.map +0 -1
  158. package/lib/formatters/json.d.ts +0 -4
  159. package/lib/formatters/json.js +0 -7
  160. package/lib/formatters/json.js.map +0 -1
  161. package/lib/generators/dts/glib.d.ts +0 -2
  162. package/lib/generators/dts/glib.js +0 -514
  163. package/lib/generators/dts/glib.js.map +0 -1
  164. package/lib/generators/dts/gobject.d.ts +0 -2
  165. package/lib/generators/dts/gobject.js +0 -117
  166. package/lib/generators/dts/gobject.js.map +0 -1
  167. package/lib/generators/dts-inline.d.ts +0 -10
  168. package/lib/generators/dts-inline.js +0 -57
  169. package/lib/generators/dts-inline.js.map +0 -1
  170. package/lib/generators/dts-modules.d.ts +0 -10
  171. package/lib/generators/dts-modules.js +0 -98
  172. package/lib/generators/dts-modules.js.map +0 -1
  173. package/lib/generators/dts.d.ts +0 -45
  174. package/lib/generators/dts.js +0 -683
  175. package/lib/generators/dts.js.map +0 -1
  176. package/lib/generators/generator.d.ts +0 -45
  177. package/lib/generators/generator.js +0 -9
  178. package/lib/generators/generator.js.map +0 -1
  179. package/lib/generators/index.d.ts +0 -5
  180. package/lib/generators/index.js +0 -6
  181. package/lib/generators/index.js.map +0 -1
  182. package/lib/generators/json.d.ts +0 -257
  183. package/lib/generators/json.js +0 -866
  184. package/lib/generators/json.js.map +0 -1
  185. package/lib/generics/clutter.d.ts +0 -41
  186. package/lib/generics/clutter.js +0 -52
  187. package/lib/generics/clutter.js.map +0 -1
  188. package/lib/generics/generify.d.ts +0 -2
  189. package/lib/generics/generify.js +0 -47
  190. package/lib/generics/generify.js.map +0 -1
  191. package/lib/generics/gio.d.ts +0 -7
  192. package/lib/generics/gio.js +0 -51
  193. package/lib/generics/gio.js.map +0 -1
  194. package/lib/generics/glib.d.ts +0 -7
  195. package/lib/generics/glib.js +0 -18
  196. package/lib/generics/glib.js.map +0 -1
  197. package/lib/generics/gtk.d.ts +0 -7
  198. package/lib/generics/gtk.js +0 -56
  199. package/lib/generics/gtk.js.map +0 -1
  200. package/lib/generics/meta.d.ts +0 -36
  201. package/lib/generics/meta.js +0 -29
  202. package/lib/generics/meta.js.map +0 -1
  203. package/lib/generics/st.d.ts +0 -31
  204. package/lib/generics/st.js +0 -98
  205. package/lib/generics/st.js.map +0 -1
  206. package/lib/generics/visitor.d.ts +0 -20
  207. package/lib/generics/visitor.js +0 -255
  208. package/lib/generics/visitor.js.map +0 -1
  209. package/lib/gir/alias.d.ts +0 -24
  210. package/lib/gir/alias.js +0 -43
  211. package/lib/gir/alias.js.map +0 -1
  212. package/lib/gir/base.d.ts +0 -62
  213. package/lib/gir/base.js +0 -83
  214. package/lib/gir/base.js.map +0 -1
  215. package/lib/gir/class.d.ts +0 -228
  216. package/lib/gir/class.js +0 -1151
  217. package/lib/gir/class.js.map +0 -1
  218. package/lib/gir/const.d.ts +0 -25
  219. package/lib/gir/const.js +0 -43
  220. package/lib/gir/const.js.map +0 -1
  221. package/lib/gir/enum.d.ts +0 -45
  222. package/lib/gir/enum.js +0 -164
  223. package/lib/gir/enum.js.map +0 -1
  224. package/lib/gir/function.d.ts +0 -200
  225. package/lib/gir/function.js +0 -683
  226. package/lib/gir/function.js.map +0 -1
  227. package/lib/gir/generics.d.ts +0 -5
  228. package/lib/gir/generics.js +0 -57
  229. package/lib/gir/generics.js.map +0 -1
  230. package/lib/gir/index.d.ts +0 -14
  231. package/lib/gir/index.js +0 -15
  232. package/lib/gir/index.js.map +0 -1
  233. package/lib/gir/namespace.d.ts +0 -21
  234. package/lib/gir/namespace.js +0 -57
  235. package/lib/gir/namespace.js.map +0 -1
  236. package/lib/gir/nodes.d.ts +0 -11
  237. package/lib/gir/nodes.js +0 -12
  238. package/lib/gir/nodes.js.map +0 -1
  239. package/lib/gir/promisify.d.ts +0 -5
  240. package/lib/gir/promisify.js +0 -158
  241. package/lib/gir/promisify.js.map +0 -1
  242. package/lib/gir/property.d.ts +0 -60
  243. package/lib/gir/property.js +0 -128
  244. package/lib/gir/property.js.map +0 -1
  245. package/lib/gir/registry.d.ts +0 -51
  246. package/lib/gir/registry.js +0 -147
  247. package/lib/gir/registry.js.map +0 -1
  248. package/lib/gir/signal.d.ts +0 -36
  249. package/lib/gir/signal.js +0 -169
  250. package/lib/gir/signal.js.map +0 -1
  251. package/lib/gir/util.d.ts +0 -49
  252. package/lib/gir/util.js +0 -561
  253. package/lib/gir/util.js.map +0 -1
  254. package/lib/gir-module.d.ts +0 -104
  255. package/lib/gir-module.js +0 -584
  256. package/lib/gir-module.js.map +0 -1
  257. package/lib/gir.d.ts +0 -254
  258. package/lib/gir.js +0 -639
  259. package/lib/gir.js.map +0 -1
  260. package/lib/index.d.ts +0 -13
  261. package/lib/index.js +0 -16
  262. package/lib/index.js.map +0 -1
  263. package/lib/injections/gee08.d.ts +0 -7
  264. package/lib/injections/gee08.js +0 -68
  265. package/lib/injections/gee08.js.map +0 -1
  266. package/lib/injections/gee1.d.ts +0 -7
  267. package/lib/injections/gee1.js +0 -28
  268. package/lib/injections/gee1.js.map +0 -1
  269. package/lib/injections/gio.d.ts +0 -7
  270. package/lib/injections/gio.js +0 -563
  271. package/lib/injections/gio.js.map +0 -1
  272. package/lib/injections/glib.d.ts +0 -7
  273. package/lib/injections/glib.js +0 -210
  274. package/lib/injections/glib.js.map +0 -1
  275. package/lib/injections/gobject.d.ts +0 -7
  276. package/lib/injections/gobject.js +0 -594
  277. package/lib/injections/gobject.js.map +0 -1
  278. package/lib/injections/gtk4.d.ts +0 -7
  279. package/lib/injections/gtk4.js +0 -19
  280. package/lib/injections/gtk4.js.map +0 -1
  281. package/lib/injections/inject.d.ts +0 -4
  282. package/lib/injections/inject.js +0 -33
  283. package/lib/injections/inject.js.map +0 -1
  284. package/lib/injections/shell.d.ts +0 -20
  285. package/lib/injections/shell.js +0 -34
  286. package/lib/injections/shell.js.map +0 -1
  287. package/lib/injections/tracker1.d.ts +0 -7
  288. package/lib/injections/tracker1.js +0 -30
  289. package/lib/injections/tracker1.js.map +0 -1
  290. package/lib/library-version.d.ts +0 -10
  291. package/lib/library-version.js +0 -45
  292. package/lib/library-version.js.map +0 -1
  293. package/lib/logger.d.ts +0 -36
  294. package/lib/logger.js +0 -134
  295. package/lib/logger.js.map +0 -1
  296. package/lib/messages.d.ts +0 -23
  297. package/lib/messages.js +0 -39
  298. package/lib/messages.js.map +0 -1
  299. package/lib/registry.d.ts +0 -8
  300. package/lib/registry.js +0 -12
  301. package/lib/registry.js.map +0 -1
  302. package/lib/transformation.d.ts +0 -169
  303. package/lib/transformation.js +0 -393
  304. package/lib/transformation.js.map +0 -1
  305. package/lib/types/answer-version.d.ts +0 -4
  306. package/lib/types/answer-version.js +0 -2
  307. package/lib/types/answer-version.js.map +0 -1
  308. package/lib/types/class-parent.d.ts +0 -13
  309. package/lib/types/class-parent.js +0 -2
  310. package/lib/types/class-parent.js.map +0 -1
  311. package/lib/types/config-flags.d.ts +0 -4
  312. package/lib/types/config-flags.js +0 -2
  313. package/lib/types/config-flags.js.map +0 -1
  314. package/lib/types/construct-name.d.ts +0 -1
  315. package/lib/types/construct-name.js +0 -2
  316. package/lib/types/construct-name.js.map +0 -1
  317. package/lib/types/dependency-map.d.ts +0 -4
  318. package/lib/types/dependency-map.js +0 -2
  319. package/lib/types/dependency-map.js.map +0 -1
  320. package/lib/types/dependency.js +0 -2
  321. package/lib/types/dependency.js.map +0 -1
  322. package/lib/types/file-info.js +0 -2
  323. package/lib/types/file-info.js.map +0 -1
  324. package/lib/types/format.d.ts +0 -1
  325. package/lib/types/format.js +0 -2
  326. package/lib/types/format.js.map +0 -1
  327. package/lib/types/gir-alias-element.d.ts +0 -4
  328. package/lib/types/gir-alias-element.js +0 -2
  329. package/lib/types/gir-alias-element.js.map +0 -1
  330. package/lib/types/gir-annotation.d.ts +0 -9
  331. package/lib/types/gir-annotation.js +0 -2
  332. package/lib/types/gir-annotation.js.map +0 -1
  333. package/lib/types/gir-any-element.d.ts +0 -2
  334. package/lib/types/gir-any-element.js +0 -2
  335. package/lib/types/gir-any-element.js.map +0 -1
  336. package/lib/types/gir-bitfield-element.d.ts +0 -6
  337. package/lib/types/gir-bitfield-element.js +0 -2
  338. package/lib/types/gir-bitfield-element.js.map +0 -1
  339. package/lib/types/gir-callable-param-element.d.ts +0 -4
  340. package/lib/types/gir-callable-param-element.js +0 -2
  341. package/lib/types/gir-callable-param-element.js.map +0 -1
  342. package/lib/types/gir-callable-params.d.ts +0 -7
  343. package/lib/types/gir-callable-params.js +0 -2
  344. package/lib/types/gir-callable-params.js.map +0 -1
  345. package/lib/types/gir-callable-return.d.ts +0 -5
  346. package/lib/types/gir-callable-return.js +0 -2
  347. package/lib/types/gir-callable-return.js.map +0 -1
  348. package/lib/types/gir-callback-element.d.ts +0 -6
  349. package/lib/types/gir-callback-element.js +0 -2
  350. package/lib/types/gir-callback-element.js.map +0 -1
  351. package/lib/types/gir-class-element.d.ts +0 -17
  352. package/lib/types/gir-class-element.js +0 -2
  353. package/lib/types/gir-class-element.js.map +0 -1
  354. package/lib/types/gir-constant-element.d.ts +0 -4
  355. package/lib/types/gir-constant-element.js +0 -2
  356. package/lib/types/gir-constant-element.js.map +0 -1
  357. package/lib/types/gir-constructor-element.d.ts +0 -6
  358. package/lib/types/gir-constructor-element.js +0 -2
  359. package/lib/types/gir-constructor-element.js.map +0 -1
  360. package/lib/types/gir-enum-element.d.ts +0 -6
  361. package/lib/types/gir-enum-element.js +0 -2
  362. package/lib/types/gir-enum-element.js.map +0 -1
  363. package/lib/types/gir-field-element.d.ts +0 -5
  364. package/lib/types/gir-field-element.js +0 -2
  365. package/lib/types/gir-field-element.js.map +0 -1
  366. package/lib/types/gir-function-element.d.ts +0 -6
  367. package/lib/types/gir-function-element.js +0 -2
  368. package/lib/types/gir-function-element.js.map +0 -1
  369. package/lib/types/gir-instance-parameter.d.ts +0 -7
  370. package/lib/types/gir-instance-parameter.js +0 -2
  371. package/lib/types/gir-instance-parameter.js.map +0 -1
  372. package/lib/types/gir-interface-element.d.ts +0 -16
  373. package/lib/types/gir-interface-element.js +0 -2
  374. package/lib/types/gir-interface-element.js.map +0 -1
  375. package/lib/types/gir-member-element.d.ts +0 -5
  376. package/lib/types/gir-member-element.js +0 -2
  377. package/lib/types/gir-member-element.js.map +0 -1
  378. package/lib/types/gir-method-element.d.ts +0 -7
  379. package/lib/types/gir-method-element.js +0 -2
  380. package/lib/types/gir-method-element.js.map +0 -1
  381. package/lib/types/gir-module-resolved-by.d.ts +0 -15
  382. package/lib/types/gir-module-resolved-by.js +0 -2
  383. package/lib/types/gir-module-resolved-by.js.map +0 -1
  384. package/lib/types/gir-modules-grouped-map.d.ts +0 -4
  385. package/lib/types/gir-modules-grouped-map.js +0 -2
  386. package/lib/types/gir-modules-grouped-map.js.map +0 -1
  387. package/lib/types/gir-modules-grouped.d.ts +0 -12
  388. package/lib/types/gir-modules-grouped.js +0 -2
  389. package/lib/types/gir-modules-grouped.js.map +0 -1
  390. package/lib/types/gir-namespace.d.ts +0 -27
  391. package/lib/types/gir-namespace.js +0 -2
  392. package/lib/types/gir-namespace.js.map +0 -1
  393. package/lib/types/gir-property-element.d.ts +0 -4
  394. package/lib/types/gir-property-element.js +0 -2
  395. package/lib/types/gir-property-element.js.map +0 -1
  396. package/lib/types/gir-record-element.d.ts +0 -10
  397. package/lib/types/gir-record-element.js +0 -2
  398. package/lib/types/gir-record-element.js.map +0 -1
  399. package/lib/types/gir-repository.d.ts +0 -5
  400. package/lib/types/gir-repository.js +0 -2
  401. package/lib/types/gir-repository.js.map +0 -1
  402. package/lib/types/gir-signal.d.ts +0 -10
  403. package/lib/types/gir-signal.js +0 -2
  404. package/lib/types/gir-signal.js.map +0 -1
  405. package/lib/types/gir-type-name.d.ts +0 -2
  406. package/lib/types/gir-type-name.js +0 -2
  407. package/lib/types/gir-type-name.js.map +0 -1
  408. package/lib/types/gir-union-element.d.ts +0 -9
  409. package/lib/types/gir-union-element.js +0 -2
  410. package/lib/types/gir-union-element.js.map +0 -1
  411. package/lib/types/gir-unparsed-number.d.ts +0 -2
  412. package/lib/types/gir-unparsed-number.js +0 -2
  413. package/lib/types/gir-unparsed-number.js.map +0 -1
  414. package/lib/types/gir-virtual-method.d.ts +0 -6
  415. package/lib/types/gir-virtual-method.js +0 -2
  416. package/lib/types/gir-virtual-method.js.map +0 -1
  417. package/lib/types/index.d.ts +0 -79
  418. package/lib/types/index.js +0 -80
  419. package/lib/types/index.js.map +0 -1
  420. package/lib/types/inheritance-table.js +0 -2
  421. package/lib/types/inheritance-table.js.map +0 -1
  422. package/lib/types/local-name-check.d.ts +0 -4
  423. package/lib/types/local-name-check.js +0 -2
  424. package/lib/types/local-name-check.js.map +0 -1
  425. package/lib/types/local-name-type.d.ts +0 -1
  426. package/lib/types/local-name-type.js +0 -2
  427. package/lib/types/local-name-type.js.map +0 -1
  428. package/lib/types/local-name.d.ts +0 -7
  429. package/lib/types/local-name.js +0 -2
  430. package/lib/types/local-name.js.map +0 -1
  431. package/lib/types/local-names.d.ts +0 -4
  432. package/lib/types/local-names.js +0 -2
  433. package/lib/types/local-names.js.map +0 -1
  434. package/lib/types/metadata.d.ts +0 -8
  435. package/lib/types/metadata.js +0 -2
  436. package/lib/types/metadata.js.map +0 -1
  437. package/lib/types/options-base.d.ts +0 -4
  438. package/lib/types/options-base.js +0 -2
  439. package/lib/types/options-base.js.map +0 -1
  440. package/lib/types/options-generation.js +0 -2
  441. package/lib/types/options-generation.js.map +0 -1
  442. package/lib/types/options-load.d.ts +0 -5
  443. package/lib/types/options-load.js +0 -2
  444. package/lib/types/options-load.js.map +0 -1
  445. package/lib/types/options-transform.d.ts +0 -4
  446. package/lib/types/options-transform.js +0 -2
  447. package/lib/types/options-transform.js.map +0 -1
  448. package/lib/types/output-format.d.ts +0 -1
  449. package/lib/types/output-format.js +0 -2
  450. package/lib/types/output-format.js.map +0 -1
  451. package/lib/types/package-data-parsed.js +0 -2
  452. package/lib/types/package-data-parsed.js.map +0 -1
  453. package/lib/types/package-data.js +0 -2
  454. package/lib/types/package-data.js.map +0 -1
  455. package/lib/types/package-section-parsed.d.ts +0 -8
  456. package/lib/types/package-section-parsed.js +0 -2
  457. package/lib/types/package-section-parsed.js.map +0 -1
  458. package/lib/types/parsed-gir.d.ts +0 -5
  459. package/lib/types/parsed-gir.js +0 -2
  460. package/lib/types/parsed-gir.js.map +0 -1
  461. package/lib/types/parsed-package-data.d.ts +0 -6
  462. package/lib/types/parsed-package-data.js +0 -2
  463. package/lib/types/parsed-package-data.js.map +0 -1
  464. package/lib/types/part-of-class.d.ts +0 -7
  465. package/lib/types/part-of-class.js +0 -2
  466. package/lib/types/part-of-class.js.map +0 -1
  467. package/lib/types/part-of-module.d.ts +0 -6
  468. package/lib/types/part-of-module.js +0 -2
  469. package/lib/types/part-of-module.js.map +0 -1
  470. package/lib/types/property-case.d.ts +0 -1
  471. package/lib/types/property-case.js +0 -2
  472. package/lib/types/property-case.js.map +0 -1
  473. package/lib/types/resolve-type.d.ts +0 -4
  474. package/lib/types/resolve-type.js +0 -6
  475. package/lib/types/resolve-type.js.map +0 -1
  476. package/lib/types/template-data.d.ts +0 -7
  477. package/lib/types/template-data.js +0 -2
  478. package/lib/types/template-data.js.map +0 -1
  479. package/lib/types/transformation-case.d.ts +0 -1
  480. package/lib/types/transformation-case.js +0 -2
  481. package/lib/types/transformation-case.js.map +0 -1
  482. package/lib/types/transformations.d.ts +0 -4
  483. package/lib/types/transformations.js +0 -2
  484. package/lib/types/transformations.js.map +0 -1
  485. package/lib/types/ts-doc-tag.js +0 -2
  486. package/lib/types/ts-doc-tag.js.map +0 -1
  487. package/lib/types/ts-doc.js +0 -2
  488. package/lib/types/ts-doc.js.map +0 -1
  489. package/lib/types/type-gir-alias.js +0 -2
  490. package/lib/types/type-gir-alias.js.map +0 -1
  491. package/lib/types/type-gir-class.js +0 -2
  492. package/lib/types/type-gir-class.js.map +0 -1
  493. package/lib/types/type-gir-element.d.ts +0 -3
  494. package/lib/types/type-gir-element.js +0 -2
  495. package/lib/types/type-gir-element.js.map +0 -1
  496. package/lib/types/type-gir-enumeration-member.js +0 -2
  497. package/lib/types/type-gir-enumeration-member.js.map +0 -1
  498. package/lib/types/type-gir-enumeration.js +0 -2
  499. package/lib/types/type-gir-enumeration.js.map +0 -1
  500. package/lib/types/type-gir-function.d.ts +0 -1
  501. package/lib/types/type-gir-function.js +0 -2
  502. package/lib/types/type-gir-function.js.map +0 -1
  503. package/lib/types/type-gir-interface.js +0 -2
  504. package/lib/types/type-gir-interface.js.map +0 -1
  505. package/lib/types/type-gir-method.js +0 -2
  506. package/lib/types/type-gir-method.js.map +0 -1
  507. package/lib/types/type-gir-parameter.d.ts +0 -1
  508. package/lib/types/type-gir-parameter.js +0 -2
  509. package/lib/types/type-gir-parameter.js.map +0 -1
  510. package/lib/types/type-gir-property.js +0 -2
  511. package/lib/types/type-gir-property.js.map +0 -1
  512. package/lib/types/type-gir-variable.d.ts +0 -1
  513. package/lib/types/type-gir-variable.js +0 -2
  514. package/lib/types/type-gir-variable.js.map +0 -1
  515. package/lib/types/type-ts-element.d.ts +0 -3
  516. package/lib/types/type-ts-element.js +0 -2
  517. package/lib/types/type-ts-element.js.map +0 -1
  518. package/lib/types/type-ts-enumeration-member.js +0 -2
  519. package/lib/types/type-ts-enumeration-member.js.map +0 -1
  520. package/lib/types/type-ts-function.js +0 -2
  521. package/lib/types/type-ts-function.js.map +0 -1
  522. package/lib/types/type-ts-property.js +0 -2
  523. package/lib/types/type-ts-property.js.map +0 -1
  524. package/lib/types/user-config-load-result.d.ts +0 -6
  525. package/lib/types/user-config-load-result.js +0 -2
  526. package/lib/types/user-config-load-result.js.map +0 -1
  527. package/lib/types/user-config.js +0 -2
  528. package/lib/types/user-config.js.map +0 -1
  529. package/lib/util.d.ts +0 -20
  530. package/lib/util.js +0 -67
  531. package/lib/util.js.map +0 -1
  532. package/lib/utils/documentation.d.ts +0 -13
  533. package/lib/utils/documentation.js.map +0 -1
  534. package/lib/utils/files.d.ts +0 -21
  535. package/lib/utils/files.js +0 -62
  536. package/lib/utils/files.js.map +0 -1
  537. package/lib/utils/girs.d.ts +0 -45
  538. package/lib/utils/girs.js +0 -101
  539. package/lib/utils/girs.js.map +0 -1
  540. package/lib/utils/index.d.ts +0 -8
  541. package/lib/utils/index.js +0 -9
  542. package/lib/utils/index.js.map +0 -1
  543. package/lib/utils/naming.d.ts +0 -13
  544. package/lib/utils/naming.js +0 -40
  545. package/lib/utils/naming.js.map +0 -1
  546. package/lib/utils/numbers.js +0 -9
  547. package/lib/utils/numbers.js.map +0 -1
  548. package/lib/utils/objects.d.ts +0 -136
  549. package/lib/utils/objects.js.map +0 -1
  550. package/lib/utils/path.d.ts +0 -1
  551. package/lib/utils/path.js +0 -7
  552. package/lib/utils/path.js.map +0 -1
  553. package/lib/utils/strings.d.ts +0 -74
  554. package/lib/utils/strings.js +0 -121
  555. package/lib/utils/strings.js.map +0 -1
  556. package/lib/validators/class.d.ts +0 -7
  557. package/lib/validators/class.js +0 -217
  558. package/lib/validators/class.js.map +0 -1
  559. package/lib/validators/function-parameters.d.ts +0 -14
  560. package/lib/validators/function-parameters.js +0 -31
  561. package/lib/validators/function-parameters.js.map +0 -1
  562. package/lib/validators/interface.d.ts +0 -5
  563. package/lib/validators/interface.js +0 -16
  564. package/lib/validators/interface.js.map +0 -1
  565. package/lib/visitor.d.ts +0 -35
  566. package/lib/visitor.js +0 -29
  567. package/lib/visitor.js.map +0 -1
@@ -0,0 +1,484 @@
1
+ import type { IntrospectedCallback } from "../gir/callback.ts";
2
+ import type { IntrospectedConstructor } from "../gir/constructor.ts";
3
+ import type { IntrospectedDirectAllocationConstructor } from "../gir/direct-allocation-constructor.ts";
4
+ import type { IntrospectedEnum } from "../gir/enum.ts";
5
+ import { IntrospectedFunction } from "../gir/function.ts";
6
+ import { createGenericNameGenerator } from "../gir/generics.ts";
7
+ import type { IntrospectedInterface, IntrospectedVirtualClassFunction } from "../gir/introspected-classes.ts";
8
+ import {
9
+ IntrospectedBaseClass,
10
+ IntrospectedClass,
11
+ IntrospectedClassFunction,
12
+ IntrospectedStaticClassFunction,
13
+ } from "../gir/introspected-classes.ts";
14
+ import type { IntrospectedFunctionParameter } from "../gir/parameter.ts";
15
+ import type { IntrospectedSignal } from "../gir/signal.ts";
16
+ import {
17
+ ClosureType,
18
+ Generic,
19
+ GenericType,
20
+ GenerifiedTypeIdentifier,
21
+ ThisType,
22
+ type TypeExpression,
23
+ TypeIdentifier,
24
+ } from "../gir.ts";
25
+ import { resolveTypeIdentifier } from "../utils/type-resolution.ts";
26
+ import { GirVisitor } from "../visitor.ts";
27
+
28
+ /**
29
+ * Visitor that handles generic type inference and transformations
30
+ */
31
+ export class GenericVisitor extends GirVisitor {
32
+ private readonly inferGenerics: boolean;
33
+
34
+ constructor(inferGenerics: boolean) {
35
+ super();
36
+ this.inferGenerics = inferGenerics;
37
+ }
38
+
39
+ visitCallback = (node: IntrospectedCallback): IntrospectedCallback => {
40
+ if (!this.inferGenerics) {
41
+ return node;
42
+ }
43
+
44
+ const shouldGenerify = this.shouldGenerifyCallback(node);
45
+ if (!shouldGenerify) {
46
+ return node;
47
+ }
48
+
49
+ return this.createGenerifiedCallback(node);
50
+ };
51
+
52
+ visitClass = (node: IntrospectedClass): IntrospectedClass => {
53
+ return this.visitBaseClass(node);
54
+ };
55
+
56
+ visitInterface = (node: IntrospectedInterface): IntrospectedInterface => {
57
+ return this.visitBaseClass(node);
58
+ };
59
+
60
+ visitParameter = (node: IntrospectedFunctionParameter): IntrospectedFunctionParameter => {
61
+ if (!this.inferGenerics) {
62
+ return node;
63
+ }
64
+
65
+ const unwrapped = node.type.unwrap();
66
+ if (!(unwrapped instanceof ClosureType)) {
67
+ return node;
68
+ }
69
+
70
+ return this.processAsyncReadyCallback(node) ?? node;
71
+ };
72
+
73
+ visitFunction = (node: IntrospectedFunction): IntrospectedFunction => {
74
+ if (!this.inferGenerics) {
75
+ return node;
76
+ }
77
+
78
+ const unwrapped = node.return_type.unwrap();
79
+ const shouldGenerify = unwrapped instanceof TypeIdentifier && unwrapped.is("GObject", "Object");
80
+
81
+ if (!shouldGenerify) {
82
+ return node;
83
+ }
84
+
85
+ return this.createGenerifiedFunction(node, unwrapped);
86
+ };
87
+
88
+ visitStaticClassFunction = (node: IntrospectedStaticClassFunction): IntrospectedStaticClassFunction => {
89
+ if (this.inferGenerics) {
90
+ return this.generifyStandaloneClassFunction(node);
91
+ }
92
+ return node;
93
+ };
94
+
95
+ visitClassFunction = <T extends IntrospectedBaseClass | IntrospectedEnum>(
96
+ node: IntrospectedClassFunction<T>,
97
+ ): IntrospectedClassFunction<T> => {
98
+ if (node.parent instanceof IntrospectedBaseClass) {
99
+ const processedNode = this.processClassFunctionWithGenerics(node);
100
+ if (processedNode) {
101
+ return processedNode;
102
+ }
103
+ }
104
+
105
+ if (this.inferGenerics) {
106
+ return this.generifyStandaloneClassFunction(node);
107
+ }
108
+
109
+ return node;
110
+ };
111
+
112
+ visitVirtualClassFunction = (node: IntrospectedVirtualClassFunction): IntrospectedVirtualClassFunction => {
113
+ return this.visitClassFunction(node);
114
+ };
115
+
116
+ // Private helper methods
117
+
118
+ private visitBaseClass<T extends IntrospectedBaseClass>(node: T): T {
119
+ const copiedNode = node.copy() as T;
120
+ const derivatives = copiedNode.generics.filter((generic) => generic.parent != null);
121
+
122
+ this.processInterfaces(copiedNode, derivatives);
123
+ this.processSuperType(copiedNode, derivatives);
124
+
125
+ return copiedNode;
126
+ }
127
+
128
+ private shouldGenerifyCallback(node: IntrospectedCallback): boolean {
129
+ return node.parameters.some((parameter) => this.isGObjectType(parameter.type.unwrap()));
130
+ }
131
+
132
+ private isGObjectType(type: TypeExpression): boolean {
133
+ return type instanceof TypeIdentifier && type.is("GObject", "Object");
134
+ }
135
+
136
+ private createGenerifiedCallback(node: IntrospectedCallback): IntrospectedCallback {
137
+ const generateName = createGenericNameGenerator();
138
+ const generics: Generic[] = [];
139
+
140
+ const generifiedParameters = node.parameters.map((parameter) => {
141
+ const type = parameter.type.unwrap();
142
+
143
+ if (this.isGObjectType(type)) {
144
+ const { identifier, generic } = this.createGeneric(generateName(), type as TypeIdentifier);
145
+ generics.push(generic);
146
+
147
+ return parameter.copy({
148
+ type: parameter.type.rewrap(identifier),
149
+ });
150
+ }
151
+
152
+ return parameter;
153
+ });
154
+
155
+ const generifiedCallback = node.copy({
156
+ parameters: generifiedParameters,
157
+ });
158
+
159
+ generifiedCallback.generics = generics;
160
+ return generifiedCallback;
161
+ }
162
+
163
+ private createGeneric(identifier: string, baseType: TypeIdentifier): { identifier: GenericType; generic: Generic } {
164
+ const genericType = new GenericType(identifier, baseType);
165
+ const generic = new Generic(genericType, baseType);
166
+ return { identifier: genericType, generic };
167
+ }
168
+
169
+ private processInterfaces<T extends IntrospectedBaseClass>(node: T, derivatives: Generic[]): void {
170
+ if (!(node instanceof IntrospectedClass)) {
171
+ return;
172
+ }
173
+
174
+ const resolvedInterfaces = this.resolveInterfaces(node);
175
+ node.interfaces = node.interfaces.map((iface) =>
176
+ this.processInterface(node, iface, derivatives, resolvedInterfaces),
177
+ );
178
+ }
179
+
180
+ private resolveInterfaces(node: IntrospectedClass): IntrospectedBaseClass[] {
181
+ return node.interfaces
182
+ .map((i) => resolveTypeIdentifier(node.namespace, i))
183
+ .filter((c): c is IntrospectedBaseClass => c != null);
184
+ }
185
+
186
+ private processInterface<T extends IntrospectedBaseClass>(
187
+ node: T,
188
+ iface: TypeIdentifier,
189
+ derivatives: Generic[],
190
+ resolvedInterfaces: IntrospectedBaseClass[],
191
+ ): TypeIdentifier {
192
+ const matchingGenerics = derivatives.filter((d) => d.parent?.is(iface.namespace, iface.name));
193
+
194
+ if (matchingGenerics.length > 0) {
195
+ return new GenerifiedTypeIdentifier(
196
+ iface.name,
197
+ iface.namespace,
198
+ matchingGenerics.map((g) => g.type),
199
+ );
200
+ }
201
+
202
+ const resolved = resolvedInterfaces.find((i) => i.getType().equals(iface));
203
+ if (resolved) {
204
+ return this.processResolvedInterface(node, iface, resolved);
205
+ }
206
+
207
+ return iface;
208
+ }
209
+
210
+ private processResolvedInterface<T extends IntrospectedBaseClass>(
211
+ node: T,
212
+ iface: TypeIdentifier,
213
+ resolved: IntrospectedBaseClass,
214
+ ): TypeIdentifier {
215
+ if (resolved.generics.length !== 1) {
216
+ return iface;
217
+ }
218
+
219
+ const [generic] = resolved.generics;
220
+
221
+ if (generic.propagate) {
222
+ return this.handlePropagatingInterfaceGeneric(node, iface, resolved, generic);
223
+ }
224
+
225
+ return new GenerifiedTypeIdentifier(iface.name, iface.namespace, [node.getType()]);
226
+ }
227
+
228
+ private handlePropagatingInterfaceGeneric<T extends IntrospectedBaseClass>(
229
+ node: T,
230
+ iface: TypeIdentifier,
231
+ resolved: IntrospectedBaseClass,
232
+ generic: Generic,
233
+ ): TypeIdentifier {
234
+ const constrainedGeneric = this.findConstrainedGeneric(node, generic);
235
+
236
+ if (constrainedGeneric) {
237
+ return new GenerifiedTypeIdentifier(iface.name, iface.namespace, [constrainedGeneric.type]);
238
+ }
239
+
240
+ if (this.shouldAddNewGeneric(node, generic)) {
241
+ this.addGenericToNode(node, resolved, generic);
242
+ const firstGeneric = node.generics[node.generics.length - 1];
243
+ return new GenerifiedTypeIdentifier(resolved.name, resolved.namespace.namespace, [firstGeneric.type]);
244
+ }
245
+
246
+ return new GenerifiedTypeIdentifier(iface.name, iface.namespace, [node.getType()]);
247
+ }
248
+
249
+ private findConstrainedGeneric<T extends IntrospectedBaseClass>(node: T, generic: Generic): Generic | undefined {
250
+ return node.generics.find((d) => generic.constraint && d.constraint?.equals(generic.constraint));
251
+ }
252
+
253
+ private shouldAddNewGeneric<T extends IntrospectedBaseClass>(node: T, generic: Generic): boolean {
254
+ return !generic.defaultType?.equals(node.getType()) && !generic.constraint?.equals(node.getType());
255
+ }
256
+
257
+ private addGenericToNode<T extends IntrospectedBaseClass>(
258
+ node: T,
259
+ resolved: IntrospectedBaseClass,
260
+ generic: Generic,
261
+ ): void {
262
+ node.addGeneric({
263
+ constraint: generic.constraint ?? undefined,
264
+ default: generic.defaultType ?? undefined,
265
+ deriveFrom: resolved.getType(),
266
+ });
267
+ }
268
+
269
+ private processSuperType<T extends IntrospectedBaseClass>(node: T, derivatives: Generic[]): void {
270
+ if (!node.superType) {
271
+ return;
272
+ }
273
+
274
+ const parentType = node.superType;
275
+ const matchingGenerics = derivatives.filter((d) => d.parent?.is(parentType.namespace, parentType.name));
276
+
277
+ if (node.superType instanceof GenerifiedTypeIdentifier) {
278
+ return;
279
+ }
280
+
281
+ if (matchingGenerics.length > 0) {
282
+ node.superType = new GenerifiedTypeIdentifier(
283
+ parentType.name,
284
+ parentType.namespace,
285
+ matchingGenerics.map((g) => g.type),
286
+ );
287
+ return;
288
+ }
289
+
290
+ const resolvedParent = resolveTypeIdentifier(node.namespace, node.superType);
291
+ this.processResolvedParent(node, resolvedParent);
292
+ }
293
+
294
+ private processResolvedParent<T extends IntrospectedBaseClass>(
295
+ node: T,
296
+ resolved: IntrospectedBaseClass | null,
297
+ ): void {
298
+ if (!resolved || resolved.generics.length !== 1) {
299
+ return;
300
+ }
301
+
302
+ const [generic] = resolved.generics;
303
+
304
+ if (generic.propagate) {
305
+ this.handlePropagatingGeneric(node, resolved, generic);
306
+ } else if (this.shouldUseNodeType(node, generic)) {
307
+ node.superType = new GenerifiedTypeIdentifier(resolved.name, resolved.namespace.namespace, [node.getType()]);
308
+ }
309
+ }
310
+
311
+ private handlePropagatingGeneric<T extends IntrospectedBaseClass>(
312
+ node: T,
313
+ resolved: IntrospectedBaseClass,
314
+ generic: Generic,
315
+ ): void {
316
+ const constrainedGeneric = this.findConstrainedGeneric(node, generic);
317
+
318
+ if (constrainedGeneric) {
319
+ node.superType = new GenerifiedTypeIdentifier(resolved.name, resolved.namespace.namespace, [
320
+ constrainedGeneric.type,
321
+ ]);
322
+ return;
323
+ }
324
+
325
+ if (this.shouldAddNewGeneric(node, generic)) {
326
+ this.addGenericToNode(node, resolved, generic);
327
+ const firstGeneric = node.generics[node.generics.length - 1];
328
+ node.superType = new GenerifiedTypeIdentifier(resolved.name, resolved.namespace.namespace, [firstGeneric.type]);
329
+ } else if (this.shouldUseNodeType(node, generic)) {
330
+ node.superType = new GenerifiedTypeIdentifier(resolved.name, resolved.namespace.namespace, [node.getType()]);
331
+ }
332
+ }
333
+
334
+ private shouldUseNodeType<T extends IntrospectedBaseClass>(node: T, generic: Generic): boolean {
335
+ return [...node.resolveParents()].some((c) => generic.defaultType && c.identifier.equals(generic.defaultType));
336
+ }
337
+
338
+ private processAsyncReadyCallback(node: IntrospectedFunctionParameter): IntrospectedFunctionParameter | null {
339
+ const unwrapped = node.type.unwrap();
340
+ if (!(unwrapped instanceof ClosureType)) {
341
+ return null;
342
+ }
343
+
344
+ const internal = unwrapped.type.unwrap();
345
+ if (!(internal instanceof TypeIdentifier) || !internal.is("Gio", "AsyncReadyCallback")) {
346
+ return null;
347
+ }
348
+
349
+ const member = node.parent;
350
+ if (!member) {
351
+ return null;
352
+ }
353
+
354
+ const generifiedType = this.createAsyncReadyCallbackType(member, internal);
355
+
356
+ if (generifiedType) {
357
+ return node.copy({
358
+ type: node.type.rewrap(generifiedType),
359
+ });
360
+ }
361
+
362
+ return null;
363
+ }
364
+
365
+ private createAsyncReadyCallbackType(
366
+ member:
367
+ | IntrospectedFunction
368
+ | IntrospectedClassFunction
369
+ | IntrospectedSignal
370
+ | IntrospectedConstructor
371
+ | IntrospectedDirectAllocationConstructor,
372
+ internal: TypeIdentifier,
373
+ ): GenerifiedTypeIdentifier | null {
374
+ if (member instanceof IntrospectedFunction && member.parameters.length >= 2) {
375
+ return new GenerifiedTypeIdentifier(internal.name, internal.namespace, [member.parameters[0].type]);
376
+ }
377
+
378
+ if (member instanceof IntrospectedStaticClassFunction) {
379
+ return new GenerifiedTypeIdentifier(internal.name, internal.namespace, [member.parent.getType()]);
380
+ }
381
+
382
+ if (member instanceof IntrospectedClassFunction) {
383
+ return new GenerifiedTypeIdentifier(internal.name, internal.namespace, [ThisType]);
384
+ }
385
+
386
+ return null;
387
+ }
388
+
389
+ private createGenerifiedFunction(node: IntrospectedFunction, unwrapped: TypeIdentifier): IntrospectedFunction {
390
+ const genericReturnType = new GenericType("T", unwrapped);
391
+ const copied = node.copy({
392
+ return_type: genericReturnType,
393
+ });
394
+ copied.generics.push(new Generic(genericReturnType, unwrapped));
395
+ return copied;
396
+ }
397
+
398
+ private generifyStandaloneClassFunction<T extends IntrospectedClassFunction>(node: T): T {
399
+ if (this.shouldSkipFunctionGenerification(node)) {
400
+ return node;
401
+ }
402
+
403
+ const unwrapped = node.return().unwrap();
404
+
405
+ if (this.isGObjectType(unwrapped)) {
406
+ const genericReturnType = new GenericType("T", unwrapped as TypeIdentifier);
407
+ const copied = node.copy({
408
+ returnType: genericReturnType,
409
+ });
410
+ copied.generics.push(new Generic(genericReturnType, unwrapped as TypeIdentifier, unwrapped as TypeIdentifier));
411
+ return copied as T;
412
+ }
413
+
414
+ return node;
415
+ }
416
+
417
+ private shouldSkipFunctionGenerification<T extends IntrospectedClassFunction>(node: T): boolean {
418
+ return node.parent.getType().is("GObject", "Object");
419
+ }
420
+
421
+ private processClassFunctionWithGenerics<T extends IntrospectedBaseClass | IntrospectedEnum>(
422
+ node: IntrospectedClassFunction<T>,
423
+ ): IntrospectedClassFunction<T> | null {
424
+ const clazz = node.parent as IntrospectedBaseClass;
425
+
426
+ if (clazz.generics.length === 0) {
427
+ return null;
428
+ }
429
+
430
+ const returnType = this.processReturnTypeWithGenerics(node.return(), clazz.generics);
431
+
432
+ return node.copy({
433
+ parameters: this.processParametersWithGenerics(node.parameters, clazz.generics),
434
+ outputParameters: this.processOutputParametersWithGenerics(node.output_parameters, clazz.generics),
435
+ returnType,
436
+ });
437
+ }
438
+
439
+ private processReturnTypeWithGenerics(returnType: TypeExpression, generics: Generic[]): TypeExpression {
440
+ for (const generic of generics) {
441
+ if (generic.defaultType?.equals(returnType.deepUnwrap())) {
442
+ return returnType.rewrap(generic.type);
443
+ }
444
+ }
445
+ return returnType;
446
+ }
447
+
448
+ private processParametersWithGenerics(
449
+ parameters: IntrospectedFunctionParameter[],
450
+ generics: Generic[],
451
+ ): IntrospectedFunctionParameter[] {
452
+ return parameters.map((parameter) => this.processParameterWithGenerics(parameter, generics));
453
+ }
454
+
455
+ private processParameterWithGenerics(
456
+ parameter: IntrospectedFunctionParameter,
457
+ generics: Generic[],
458
+ ): IntrospectedFunctionParameter {
459
+ for (const generic of generics) {
460
+ if (generic.defaultType?.equals(parameter.type.deepUnwrap())) {
461
+ return parameter.copy({
462
+ type: parameter.type.rewrap(generic.type),
463
+ });
464
+ }
465
+ }
466
+ return parameter;
467
+ }
468
+
469
+ private processOutputParametersWithGenerics(
470
+ outputParameters: IntrospectedFunctionParameter[],
471
+ generics: Generic[],
472
+ ): IntrospectedFunctionParameter[] {
473
+ return outputParameters.map((parameter) => {
474
+ for (const generic of generics) {
475
+ if (generic.defaultType?.equals(parameter.type.unwrap())) {
476
+ return parameter.copy({
477
+ type: parameter.type.rewrap(generic.type),
478
+ });
479
+ }
480
+ }
481
+ return parameter;
482
+ });
483
+ }
484
+ }
@@ -0,0 +1,73 @@
1
+ import type { FormatGenerator, GenericDescriptor } from "../generators/generator.ts";
2
+ import type { TypeExpression } from "../gir.ts";
3
+ import type { GirAliasElement } from "../index.ts";
4
+ import type { IntrospectedOptions, OptionsLoad } from "../types/index.ts";
5
+ import { parseDoc, parseMetadata } from "../utils/gir-parsing.ts";
6
+ import { isIntrospectable } from "../utils/girs.ts";
7
+ import { sanitizeIdentifierName } from "../utils/naming.ts";
8
+ import { getAliasType } from "../utils/types.ts";
9
+ import type { GirVisitor } from "../visitor.ts";
10
+ import { IntrospectedNamespaceMember } from "./introspected-namespace-member.ts";
11
+ import type { IntrospectedNamespace } from "./namespace.ts";
12
+
13
+ export class IntrospectedAlias extends IntrospectedNamespaceMember {
14
+ readonly type: TypeExpression;
15
+ readonly generics: GenericDescriptor[];
16
+
17
+ constructor({
18
+ namespace,
19
+ name,
20
+ type,
21
+ generics = [],
22
+ ...args
23
+ }: IntrospectedOptions<{
24
+ namespace: IntrospectedNamespace;
25
+ name: string;
26
+ type: TypeExpression;
27
+ generics?: GenericDescriptor[];
28
+ }>) {
29
+ super(name, namespace, { ...args });
30
+
31
+ this.type = type;
32
+ this.generics = generics;
33
+ }
34
+
35
+ accept(visitor: GirVisitor): IntrospectedAlias {
36
+ const node = this.copy({
37
+ type: visitor.visitType?.(this.type),
38
+ });
39
+
40
+ return visitor.visitAlias?.(node) ?? node;
41
+ }
42
+
43
+ copy(options?: { parent?: undefined; type?: TypeExpression }): IntrospectedAlias {
44
+ const { name, namespace, type } = this;
45
+
46
+ return new IntrospectedAlias({ name, namespace, type: options?.type ?? type })._copyBaseProperties(this);
47
+ }
48
+
49
+ asString<T extends FormatGenerator<unknown>>(generator: T): ReturnType<T["generateAlias"]> {
50
+ return generator.generateAlias(this) as ReturnType<T["generateAlias"]>;
51
+ }
52
+
53
+ static fromXML(element: GirAliasElement, ns: IntrospectedNamespace, options: OptionsLoad): IntrospectedAlias | null {
54
+ if (!element.$.name) {
55
+ console.error(`Alias in ${ns.namespace} lacks name.`);
56
+ return null;
57
+ }
58
+
59
+ const alias = new IntrospectedAlias({
60
+ namespace: ns,
61
+ name: sanitizeIdentifierName(ns.namespace, element.$.name),
62
+ type: getAliasType(ns.namespace, ns, element),
63
+ isIntrospectable: isIntrospectable(element),
64
+ });
65
+
66
+ if (options.loadDocs) {
67
+ alias.doc = parseDoc(element);
68
+ alias.metadata = parseMetadata(element);
69
+ }
70
+
71
+ return alias;
72
+ }
73
+ }
@@ -0,0 +1,79 @@
1
+ import type { FormatGenerator } from "../generators/generator.ts";
2
+ import { FunctionType, type TypeExpression } from "../gir.ts";
3
+ import type { GirCallbackElement, GirModule } from "../index.ts";
4
+ import type { OptionsLoad } from "../types/index.ts";
5
+ import type { GirVisitor } from "../visitor.ts";
6
+ import { IntrospectedFunction } from "./function.ts";
7
+ import type { IntrospectedFunctionParameter } from "./parameter.ts";
8
+
9
+ export class IntrospectedCallback extends IntrospectedFunction {
10
+ asFunctionType(): FunctionType {
11
+ return new FunctionType(
12
+ Object.fromEntries(this.parameters.map((p) => [p.name, p.type] as const)),
13
+ this.return_type,
14
+ );
15
+ }
16
+
17
+ copy({
18
+ parameters,
19
+ returnType,
20
+ outputParameters,
21
+ parent,
22
+ }: {
23
+ parent?: GirModule;
24
+ parameters?: IntrospectedFunctionParameter[];
25
+ outputParameters?: IntrospectedFunctionParameter[];
26
+ returnType?: TypeExpression;
27
+ } = {}): IntrospectedCallback {
28
+ const cb = new IntrospectedCallback({
29
+ name: this.name,
30
+ raw_name: this.raw_name,
31
+ return_type: returnType ?? this.return_type,
32
+ parameters: parameters ?? this.parameters,
33
+ output_parameters: outputParameters ?? this.output_parameters,
34
+ namespace: parent ?? this.parent,
35
+ })._copyBaseProperties(this);
36
+
37
+ cb.generics = [...this.generics];
38
+
39
+ return cb;
40
+ }
41
+
42
+ accept(visitor: GirVisitor): IntrospectedCallback {
43
+ const node = this.copy({
44
+ parameters: this.parameters.map((p) => {
45
+ return p.accept(visitor);
46
+ }),
47
+ outputParameters: this.output_parameters.map((p) => {
48
+ return p.accept(visitor);
49
+ }),
50
+ returnType: visitor.visitType?.(this.return_type),
51
+ });
52
+
53
+ return visitor.visitCallback?.(node) ?? node;
54
+ }
55
+
56
+ static fromXML(element: GirCallbackElement, namespace: GirModule, options: OptionsLoad): IntrospectedCallback {
57
+ const ns = namespace;
58
+ const cb = new IntrospectedCallback(IntrospectedFunction.fromXML(element, ns, options).getCallbackParameters());
59
+
60
+ const glibTypeName = element.$["glib:type-name"];
61
+ if (typeof glibTypeName === "string" && element.$["glib:type-name"]) {
62
+ cb.resolve_names.push(glibTypeName);
63
+
64
+ ns.registerResolveName(glibTypeName, ns.namespace, cb.name);
65
+ }
66
+
67
+ if (element.$["c:type"]) {
68
+ cb.resolve_names.push(element.$["c:type"]);
69
+
70
+ ns.registerResolveName(element.$["c:type"], ns.namespace, cb.name);
71
+ }
72
+
73
+ return cb;
74
+ }
75
+
76
+ asString<T extends FormatGenerator<unknown>>(generator: T): ReturnType<T["generateCallback"]> {
77
+ return generator.generateCallback(this) as ReturnType<T["generateCallback"]>;
78
+ }
79
+ }
@@ -0,0 +1,73 @@
1
+ import type { FormatGenerator } from "../generators/generator.ts";
2
+ import type { TypeExpression } from "../gir.ts";
3
+
4
+ import type { GirConstantElement } from "../index.ts";
5
+ import type { IntrospectedOptions, OptionsLoad } from "../types/index.ts";
6
+ import { getType, parseDoc, parseMetadata } from "../utils/gir-parsing.ts";
7
+ import { sanitizeIdentifierName } from "../utils/naming.ts";
8
+ import type { GirVisitor } from "../visitor.ts";
9
+ import { IntrospectedNamespaceMember } from "./introspected-namespace-member.ts";
10
+ import type { IntrospectedNamespace } from "./namespace.ts";
11
+
12
+ export class IntrospectedConstant extends IntrospectedNamespaceMember {
13
+ type: TypeExpression;
14
+ value: string | null;
15
+
16
+ constructor({
17
+ name,
18
+ type,
19
+ namespace,
20
+ value,
21
+ ...options
22
+ }: IntrospectedOptions<{
23
+ name: string;
24
+ type: TypeExpression;
25
+ namespace: IntrospectedNamespace;
26
+ value: string | null;
27
+ isIntrospectable?: boolean;
28
+ }>) {
29
+ super(name, namespace, options);
30
+
31
+ this.type = type;
32
+ this.value = value;
33
+ }
34
+
35
+ accept(visitor: GirVisitor): IntrospectedConstant {
36
+ const node = this.copy({
37
+ type: visitor.visitType?.(this.type),
38
+ });
39
+
40
+ return visitor.visitConst?.(node) ?? node;
41
+ }
42
+
43
+ copy(options: { parent?: IntrospectedNamespace; type?: TypeExpression } = {}): IntrospectedConstant {
44
+ const { type, name, value } = this;
45
+
46
+ return new IntrospectedConstant({
47
+ name,
48
+ namespace: options.parent ?? this.namespace,
49
+ type: options.type ?? type,
50
+ value,
51
+ })._copyBaseProperties(this);
52
+ }
53
+
54
+ static fromXML(element: GirConstantElement, ns: IntrospectedNamespace, options: OptionsLoad): IntrospectedConstant {
55
+ const c = new IntrospectedConstant({
56
+ name: sanitizeIdentifierName(ns.namespace, element.$.name),
57
+ namespace: ns,
58
+ type: getType(ns, element),
59
+ value: element.$.value ?? null,
60
+ });
61
+
62
+ if (options.loadDocs) {
63
+ c.doc = parseDoc(element);
64
+ c.metadata = parseMetadata(element);
65
+ }
66
+
67
+ return c;
68
+ }
69
+
70
+ asString<T extends FormatGenerator<unknown>>(generator: T): ReturnType<T["generateConst"]> {
71
+ return generator.generateConst(this) as ReturnType<T["generateConst"]>;
72
+ }
73
+ }