@ts-for-gir/lib 4.0.0-beta.3 → 4.0.0-beta.30

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 (532) hide show
  1. package/README.md +13 -1
  2. package/package.json +15 -29
  3. package/src/constants.ts +154 -0
  4. package/src/dependency-manager.ts +427 -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 +71 -0
  12. package/src/generics/generify.ts +74 -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 +41 -0
  17. package/src/generics/st.ts +197 -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 +126 -0
  28. package/src/gir/error.ts +82 -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 +1517 -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 +477 -0
  42. package/src/gir/registry.ts +184 -0
  43. package/src/gir/signal.ts +246 -0
  44. package/src/gir-module.ts +737 -0
  45. package/src/gir.ts +892 -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 +707 -0
  50. package/src/injections/glib.ts +275 -0
  51. package/src/injections/gobject.ts +901 -0
  52. package/src/injections/gtk4.ts +23 -0
  53. package/src/injections/inject.ts +43 -0
  54. package/src/injections/shell.ts +45 -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 +3 -0
  63. package/src/types/class-function-types.ts +49 -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 +45 -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/{lib/types/file-info.d.ts → src/types/file-info.ts} +3 -3
  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 +94 -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 +7 -0
  88. package/src/types/options-base.ts +8 -0
  89. package/src/types/options-generation.ts +53 -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/{lib/types/package-data-parsed.d.ts → src/types/package-data-parsed.ts} +13 -13
  94. package/{lib/types/package-data.d.ts → src/types/package-data.ts} +12 -11
  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} +5 -3
  105. package/{lib/types/ts-doc.d.ts → src/types/ts-doc.ts} +5 -3
  106. package/{lib/types/type-gir-alias.d.ts → src/types/type-gir-alias.ts} +1 -1
  107. package/{lib/types/type-gir-class.d.ts → src/types/type-gir-class.ts} +1 -1
  108. package/src/types/type-gir-element.ts +25 -0
  109. package/{lib/types/type-gir-enumeration-member.d.ts → src/types/type-gir-enumeration-member.ts} +1 -1
  110. package/{lib/types/type-ts-enumeration-member.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/{lib/types/type-gir-method.d.ts → src/types/type-gir-method.ts} +1 -1
  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-gir-enumeration.d.ts → src/types/type-ts-enumeration-member.ts} +1 -1
  119. package/{lib/types/type-ts-function.d.ts → src/types/type-ts-function.ts} +1 -1
  120. package/{lib/types/type-ts-property.d.ts → src/types/type-ts-property.ts} +1 -1
  121. package/src/types/user-config-load-result.ts +6 -0
  122. package/src/types/user-config.ts +58 -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 +490 -0
  128. package/src/utils/documentation.ts +61 -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 +243 -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 +247 -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.js +0 -2
  310. package/lib/types/file-info.js.map +0 -1
  311. package/lib/types/format.d.ts +0 -1
  312. package/lib/types/format.js +0 -2
  313. package/lib/types/format.js.map +0 -1
  314. package/lib/types/gir-alias-element.d.ts +0 -4
  315. package/lib/types/gir-alias-element.js +0 -2
  316. package/lib/types/gir-alias-element.js.map +0 -1
  317. package/lib/types/gir-annotation.d.ts +0 -9
  318. package/lib/types/gir-annotation.js +0 -2
  319. package/lib/types/gir-annotation.js.map +0 -1
  320. package/lib/types/gir-any-element.d.ts +0 -2
  321. package/lib/types/gir-any-element.js +0 -2
  322. package/lib/types/gir-any-element.js.map +0 -1
  323. package/lib/types/gir-bitfield-element.d.ts +0 -6
  324. package/lib/types/gir-bitfield-element.js +0 -2
  325. package/lib/types/gir-bitfield-element.js.map +0 -1
  326. package/lib/types/gir-callable-param-element.d.ts +0 -4
  327. package/lib/types/gir-callable-param-element.js +0 -2
  328. package/lib/types/gir-callable-param-element.js.map +0 -1
  329. package/lib/types/gir-callable-params.d.ts +0 -7
  330. package/lib/types/gir-callable-params.js +0 -2
  331. package/lib/types/gir-callable-params.js.map +0 -1
  332. package/lib/types/gir-callable-return.d.ts +0 -5
  333. package/lib/types/gir-callable-return.js +0 -2
  334. package/lib/types/gir-callable-return.js.map +0 -1
  335. package/lib/types/gir-callback-element.d.ts +0 -6
  336. package/lib/types/gir-callback-element.js +0 -2
  337. package/lib/types/gir-callback-element.js.map +0 -1
  338. package/lib/types/gir-class-element.d.ts +0 -17
  339. package/lib/types/gir-class-element.js +0 -2
  340. package/lib/types/gir-class-element.js.map +0 -1
  341. package/lib/types/gir-constant-element.d.ts +0 -4
  342. package/lib/types/gir-constant-element.js +0 -2
  343. package/lib/types/gir-constant-element.js.map +0 -1
  344. package/lib/types/gir-constructor-element.d.ts +0 -6
  345. package/lib/types/gir-constructor-element.js +0 -2
  346. package/lib/types/gir-constructor-element.js.map +0 -1
  347. package/lib/types/gir-enum-element.d.ts +0 -6
  348. package/lib/types/gir-enum-element.js +0 -2
  349. package/lib/types/gir-enum-element.js.map +0 -1
  350. package/lib/types/gir-field-element.d.ts +0 -5
  351. package/lib/types/gir-field-element.js +0 -2
  352. package/lib/types/gir-field-element.js.map +0 -1
  353. package/lib/types/gir-function-element.d.ts +0 -6
  354. package/lib/types/gir-function-element.js +0 -2
  355. package/lib/types/gir-function-element.js.map +0 -1
  356. package/lib/types/gir-instance-parameter.d.ts +0 -8
  357. package/lib/types/gir-instance-parameter.js +0 -2
  358. package/lib/types/gir-instance-parameter.js.map +0 -1
  359. package/lib/types/gir-interface-element.d.ts +0 -16
  360. package/lib/types/gir-interface-element.js +0 -2
  361. package/lib/types/gir-interface-element.js.map +0 -1
  362. package/lib/types/gir-member-element.d.ts +0 -5
  363. package/lib/types/gir-member-element.js +0 -2
  364. package/lib/types/gir-member-element.js.map +0 -1
  365. package/lib/types/gir-method-element.d.ts +0 -7
  366. package/lib/types/gir-method-element.js +0 -2
  367. package/lib/types/gir-method-element.js.map +0 -1
  368. package/lib/types/gir-module-resolved-by.d.ts +0 -15
  369. package/lib/types/gir-module-resolved-by.js +0 -2
  370. package/lib/types/gir-module-resolved-by.js.map +0 -1
  371. package/lib/types/gir-modules-grouped-map.d.ts +0 -4
  372. package/lib/types/gir-modules-grouped-map.js +0 -2
  373. package/lib/types/gir-modules-grouped-map.js.map +0 -1
  374. package/lib/types/gir-modules-grouped.d.ts +0 -12
  375. package/lib/types/gir-modules-grouped.js +0 -2
  376. package/lib/types/gir-modules-grouped.js.map +0 -1
  377. package/lib/types/gir-namespace.d.ts +0 -27
  378. package/lib/types/gir-namespace.js +0 -2
  379. package/lib/types/gir-namespace.js.map +0 -1
  380. package/lib/types/gir-property-element.d.ts +0 -4
  381. package/lib/types/gir-property-element.js +0 -2
  382. package/lib/types/gir-property-element.js.map +0 -1
  383. package/lib/types/gir-record-element.d.ts +0 -10
  384. package/lib/types/gir-record-element.js +0 -2
  385. package/lib/types/gir-record-element.js.map +0 -1
  386. package/lib/types/gir-repository.d.ts +0 -5
  387. package/lib/types/gir-repository.js +0 -2
  388. package/lib/types/gir-repository.js.map +0 -1
  389. package/lib/types/gir-signal.d.ts +0 -10
  390. package/lib/types/gir-signal.js +0 -2
  391. package/lib/types/gir-signal.js.map +0 -1
  392. package/lib/types/gir-type-name.d.ts +0 -2
  393. package/lib/types/gir-type-name.js +0 -2
  394. package/lib/types/gir-type-name.js.map +0 -1
  395. package/lib/types/gir-union-element.d.ts +0 -9
  396. package/lib/types/gir-union-element.js +0 -2
  397. package/lib/types/gir-union-element.js.map +0 -1
  398. package/lib/types/gir-unparsed-number.d.ts +0 -2
  399. package/lib/types/gir-unparsed-number.js +0 -2
  400. package/lib/types/gir-unparsed-number.js.map +0 -1
  401. package/lib/types/gir-virtual-method.d.ts +0 -6
  402. package/lib/types/gir-virtual-method.js +0 -2
  403. package/lib/types/gir-virtual-method.js.map +0 -1
  404. package/lib/types/index.d.ts +0 -79
  405. package/lib/types/index.js +0 -80
  406. package/lib/types/index.js.map +0 -1
  407. package/lib/types/inheritance-table.js +0 -2
  408. package/lib/types/inheritance-table.js.map +0 -1
  409. package/lib/types/local-name-check.d.ts +0 -4
  410. package/lib/types/local-name-check.js +0 -2
  411. package/lib/types/local-name-check.js.map +0 -1
  412. package/lib/types/local-name-type.d.ts +0 -1
  413. package/lib/types/local-name-type.js +0 -2
  414. package/lib/types/local-name-type.js.map +0 -1
  415. package/lib/types/local-name.d.ts +0 -7
  416. package/lib/types/local-name.js +0 -2
  417. package/lib/types/local-name.js.map +0 -1
  418. package/lib/types/local-names.d.ts +0 -4
  419. package/lib/types/local-names.js +0 -2
  420. package/lib/types/local-names.js.map +0 -1
  421. package/lib/types/metadata.d.ts +0 -8
  422. package/lib/types/metadata.js +0 -2
  423. package/lib/types/metadata.js.map +0 -1
  424. package/lib/types/options-base.d.ts +0 -4
  425. package/lib/types/options-base.js +0 -2
  426. package/lib/types/options-base.js.map +0 -1
  427. package/lib/types/options-generation.d.ts +0 -33
  428. package/lib/types/options-generation.js +0 -2
  429. package/lib/types/options-generation.js.map +0 -1
  430. package/lib/types/options-load.d.ts +0 -5
  431. package/lib/types/options-load.js +0 -2
  432. package/lib/types/options-load.js.map +0 -1
  433. package/lib/types/options-transform.d.ts +0 -4
  434. package/lib/types/options-transform.js +0 -2
  435. package/lib/types/options-transform.js.map +0 -1
  436. package/lib/types/output-format.d.ts +0 -1
  437. package/lib/types/output-format.js +0 -2
  438. package/lib/types/output-format.js.map +0 -1
  439. package/lib/types/package-data-parsed.js +0 -2
  440. package/lib/types/package-data-parsed.js.map +0 -1
  441. package/lib/types/package-data.js +0 -2
  442. package/lib/types/package-data.js.map +0 -1
  443. package/lib/types/package-section-parsed.d.ts +0 -8
  444. package/lib/types/package-section-parsed.js +0 -2
  445. package/lib/types/package-section-parsed.js.map +0 -1
  446. package/lib/types/parsed-gir.d.ts +0 -5
  447. package/lib/types/parsed-gir.js +0 -2
  448. package/lib/types/parsed-gir.js.map +0 -1
  449. package/lib/types/parsed-package-data.d.ts +0 -6
  450. package/lib/types/parsed-package-data.js +0 -2
  451. package/lib/types/parsed-package-data.js.map +0 -1
  452. package/lib/types/part-of-class.d.ts +0 -7
  453. package/lib/types/part-of-class.js +0 -2
  454. package/lib/types/part-of-class.js.map +0 -1
  455. package/lib/types/part-of-module.d.ts +0 -6
  456. package/lib/types/part-of-module.js +0 -2
  457. package/lib/types/part-of-module.js.map +0 -1
  458. package/lib/types/property-case.d.ts +0 -1
  459. package/lib/types/property-case.js +0 -2
  460. package/lib/types/property-case.js.map +0 -1
  461. package/lib/types/resolve-type.d.ts +0 -4
  462. package/lib/types/resolve-type.js +0 -6
  463. package/lib/types/resolve-type.js.map +0 -1
  464. package/lib/types/template-data.d.ts +0 -7
  465. package/lib/types/template-data.js +0 -2
  466. package/lib/types/template-data.js.map +0 -1
  467. package/lib/types/transformation-case.d.ts +0 -1
  468. package/lib/types/transformation-case.js +0 -2
  469. package/lib/types/transformation-case.js.map +0 -1
  470. package/lib/types/transformations.d.ts +0 -4
  471. package/lib/types/transformations.js +0 -2
  472. package/lib/types/transformations.js.map +0 -1
  473. package/lib/types/ts-doc-tag.js +0 -2
  474. package/lib/types/ts-doc-tag.js.map +0 -1
  475. package/lib/types/ts-doc.js +0 -2
  476. package/lib/types/ts-doc.js.map +0 -1
  477. package/lib/types/type-gir-alias.js +0 -2
  478. package/lib/types/type-gir-alias.js.map +0 -1
  479. package/lib/types/type-gir-class.js +0 -2
  480. package/lib/types/type-gir-class.js.map +0 -1
  481. package/lib/types/type-gir-element.d.ts +0 -3
  482. package/lib/types/type-gir-element.js +0 -2
  483. package/lib/types/type-gir-element.js.map +0 -1
  484. package/lib/types/type-gir-enumeration-member.js +0 -2
  485. package/lib/types/type-gir-enumeration-member.js.map +0 -1
  486. package/lib/types/type-gir-enumeration.js +0 -2
  487. package/lib/types/type-gir-enumeration.js.map +0 -1
  488. package/lib/types/type-gir-function.d.ts +0 -1
  489. package/lib/types/type-gir-function.js +0 -2
  490. package/lib/types/type-gir-function.js.map +0 -1
  491. package/lib/types/type-gir-interface.js +0 -2
  492. package/lib/types/type-gir-interface.js.map +0 -1
  493. package/lib/types/type-gir-method.js +0 -2
  494. package/lib/types/type-gir-method.js.map +0 -1
  495. package/lib/types/type-gir-parameter.d.ts +0 -1
  496. package/lib/types/type-gir-parameter.js +0 -2
  497. package/lib/types/type-gir-parameter.js.map +0 -1
  498. package/lib/types/type-gir-property.js +0 -2
  499. package/lib/types/type-gir-property.js.map +0 -1
  500. package/lib/types/type-gir-variable.d.ts +0 -1
  501. package/lib/types/type-gir-variable.js +0 -2
  502. package/lib/types/type-gir-variable.js.map +0 -1
  503. package/lib/types/type-ts-element.d.ts +0 -3
  504. package/lib/types/type-ts-element.js +0 -2
  505. package/lib/types/type-ts-element.js.map +0 -1
  506. package/lib/types/type-ts-enumeration-member.js +0 -2
  507. package/lib/types/type-ts-enumeration-member.js.map +0 -1
  508. package/lib/types/type-ts-function.js +0 -2
  509. package/lib/types/type-ts-function.js.map +0 -1
  510. package/lib/types/type-ts-property.js +0 -2
  511. package/lib/types/type-ts-property.js.map +0 -1
  512. package/lib/types/user-config-load-result.d.ts +0 -6
  513. package/lib/types/user-config-load-result.js +0 -2
  514. package/lib/types/user-config-load-result.js.map +0 -1
  515. package/lib/types/user-config.d.ts +0 -35
  516. package/lib/types/user-config.js +0 -2
  517. package/lib/types/user-config.js.map +0 -1
  518. package/lib/util.d.ts +0 -20
  519. package/lib/util.js +0 -67
  520. package/lib/util.js.map +0 -1
  521. package/lib/utils.d.ts +0 -268
  522. package/lib/utils.js +0 -417
  523. package/lib/utils.js.map +0 -1
  524. package/lib/validators/class.d.ts +0 -7
  525. package/lib/validators/class.js +0 -217
  526. package/lib/validators/class.js.map +0 -1
  527. package/lib/validators/interface.d.ts +0 -5
  528. package/lib/validators/interface.js +0 -16
  529. package/lib/validators/interface.js.map +0 -1
  530. package/lib/visitor.d.ts +0 -35
  531. package/lib/visitor.js +0 -29
  532. 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
+ }