@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,65 @@
1
+ import type { IntrospectedAlias } from "../gir/alias.ts";
2
+ import type { IntrospectedCallback } from "../gir/callback.ts";
3
+ import type { IntrospectedConstant } from "../gir/const.ts";
4
+ import type { IntrospectedConstructor } from "../gir/constructor.ts";
5
+ import type { IntrospectedDirectAllocationConstructor } from "../gir/direct-allocation-constructor.ts";
6
+ import type { IntrospectedEnum } from "../gir/enum.ts";
7
+ import type { GirEnumMember } from "../gir/enum-member.ts";
8
+ import type { IntrospectedError } from "../gir/error.ts";
9
+ import type { IntrospectedFunction } from "../gir/function.ts";
10
+ import type {
11
+ IntrospectedClass,
12
+ IntrospectedClassCallback,
13
+ IntrospectedClassFunction,
14
+ IntrospectedInterface,
15
+ IntrospectedStaticClassFunction,
16
+ IntrospectedVirtualClassFunction,
17
+ } from "../gir/introspected-classes.ts";
18
+ import type { IntrospectedNamespace } from "../gir/namespace.ts";
19
+ import type { IntrospectedFunctionParameter } from "../gir/parameter.ts";
20
+ import type { IntrospectedField, IntrospectedProperty } from "../gir/property.ts";
21
+ import type { IntrospectedRecord } from "../gir/record.ts";
22
+ import type { IntrospectedSignal, IntrospectedSignalType } from "../gir/signal.ts";
23
+ import type { TypeExpression } from "../gir.ts";
24
+ import type { OptionsGeneration } from "../types/options-generation.ts";
25
+
26
+ // TODO: Move to types/
27
+ export interface GenericDescriptor {
28
+ type: TypeExpression;
29
+ name: string;
30
+ }
31
+
32
+ export abstract class FormatGenerator<T = string> {
33
+ protected namespace: IntrospectedNamespace;
34
+ protected options: OptionsGeneration;
35
+
36
+ constructor(namespace: IntrospectedNamespace, options: OptionsGeneration) {
37
+ this.namespace = namespace;
38
+ this.options = options;
39
+ }
40
+
41
+ abstract generateNamespace(node: IntrospectedNamespace): Promise<T | null>;
42
+ abstract stringifyNamespace(node: IntrospectedNamespace): Promise<string | null>;
43
+
44
+ abstract generateCallback(node: IntrospectedCallback): T;
45
+ abstract generateClassCallback(node: IntrospectedClassCallback): T;
46
+ abstract generateAlias(node: IntrospectedAlias): T;
47
+ abstract generateConstructor(node: IntrospectedConstructor): T;
48
+ abstract generateDirectAllocationConstructor(node: IntrospectedDirectAllocationConstructor): T;
49
+ abstract generateConstructorFunction(node: IntrospectedConstructor): T;
50
+ abstract generateRecord(node: IntrospectedRecord): T;
51
+ abstract generateInterface(node: IntrospectedInterface): T;
52
+ abstract generateEnumMember(node: GirEnumMember): T;
53
+ abstract generateError(node: IntrospectedError): T;
54
+ abstract generateEnum(node: IntrospectedEnum): T;
55
+ abstract generateConst(node: IntrospectedConstant): T;
56
+ abstract generateClass(node: IntrospectedClass): T;
57
+ abstract generateParameter(node: IntrospectedFunctionParameter): T;
58
+ abstract generateProperty(node: IntrospectedProperty, construct?: boolean): T;
59
+ abstract generateField(node: IntrospectedField): T;
60
+ abstract generateSignal(node: IntrospectedSignal, type?: IntrospectedSignalType): T;
61
+ abstract generateFunction(node: IntrospectedFunction): T;
62
+ abstract generateClassFunction(node: IntrospectedClassFunction): T;
63
+ abstract generateStaticClassFunction(node: IntrospectedStaticClassFunction): T;
64
+ abstract generateVirtualClassFunction(node: IntrospectedVirtualClassFunction): T;
65
+ }
@@ -0,0 +1,2 @@
1
+ // Common generator interfaces and utilities
2
+ export * from "./generator.ts";
@@ -0,0 +1,71 @@
1
+ import type { IntrospectedNamespace } from "../gir/namespace.ts";
2
+ import { GenericType } from "../gir.ts";
3
+ import type { ClutterTemplateConfig } from "../types/generics-config.ts";
4
+
5
+ function createClutterTemplate(version: string): ClutterTemplateConfig {
6
+ return {
7
+ namespace: "Clutter",
8
+ version,
9
+ modifier: (namespace: IntrospectedNamespace, inferGenerics: boolean) => {
10
+ if (!inferGenerics) {
11
+ return;
12
+ }
13
+
14
+ applyClutterGenerics(namespace);
15
+ },
16
+ };
17
+ }
18
+
19
+ function applyClutterGenerics(namespace: IntrospectedNamespace): void {
20
+ const Actor = namespace.assertClass("Actor");
21
+ const Content = namespace.assertClass("Content");
22
+ const LayoutManager = namespace.assertClass("LayoutManager");
23
+
24
+ // Add generics to Actor
25
+ Actor.addGeneric({
26
+ default: LayoutManager.getType(),
27
+ constraint: LayoutManager.getType(),
28
+ });
29
+
30
+ Actor.addGeneric({
31
+ default: Content.getType(),
32
+ constraint: Content.getType(),
33
+ });
34
+
35
+ // Update layout_manager properties
36
+ updatePropertyType(Actor, ["layout_manager", "layoutManager"], new GenericType("A", Content.getType()));
37
+
38
+ // Update content properties
39
+ updatePropertyType(Actor, ["content"], new GenericType("B", Content.getType()));
40
+
41
+ // Configure Clone class
42
+ const Clone = namespace.assertClass("Clone");
43
+ Clone.addGeneric({
44
+ default: Actor.getType(),
45
+ constraint: Actor.getType(),
46
+ });
47
+
48
+ updatePropertyType(Clone, ["source"], new GenericType("A", Content.getType()));
49
+ }
50
+
51
+ function updatePropertyType(
52
+ cls: ReturnType<IntrospectedNamespace["assertClass"]>,
53
+ propertyNames: string[],
54
+ newType: GenericType,
55
+ ): void {
56
+ cls.props
57
+ .filter((p) => propertyNames.includes(p.name))
58
+ .forEach((prop) => {
59
+ // TODO: Automatically infer such changes.
60
+ prop.type = newType;
61
+ });
62
+ }
63
+
64
+ // Version exports
65
+ export const clutter10 = createClutterTemplate("10");
66
+ export const clutter11 = createClutterTemplate("11");
67
+ export const clutter12 = createClutterTemplate("12");
68
+ export const clutter13 = createClutterTemplate("13");
69
+ export const clutter14 = createClutterTemplate("14");
70
+ export const clutter15 = createClutterTemplate("15");
71
+ export const clutter16 = createClutterTemplate("16");
@@ -0,0 +1,74 @@
1
+ import type { NSRegistry } from "../gir/registry.ts";
2
+ import type { NamespaceDefinition } from "../types/generics-config.ts";
3
+ import { clutter10, clutter11, clutter12, clutter13, clutter14, clutter15 } from "./clutter.ts";
4
+ import gio from "./gio.ts";
5
+ import glib from "./glib.ts";
6
+ import gtk from "./gtk.ts";
7
+ import { meta10, meta11, meta12, meta13, meta14, meta15 } from "./meta.ts";
8
+ import { st1, st12, st13, st14, st15 } from "./st.ts";
9
+ import { GenericVisitor } from "./visitor.ts";
10
+
11
+ // Core namespace definitions that are required
12
+ const CORE_DEFINITIONS: NamespaceDefinition[] = [gio, glib];
13
+
14
+ // Optional namespace definitions
15
+ const OPTIONAL_DEFINITIONS: NamespaceDefinition[] = [
16
+ gtk,
17
+ clutter10,
18
+ clutter11,
19
+ clutter12,
20
+ clutter13,
21
+ clutter14,
22
+ clutter15,
23
+ st1,
24
+ st12,
25
+ st13,
26
+ st14,
27
+ st15,
28
+ meta10,
29
+ meta11,
30
+ meta12,
31
+ meta13,
32
+ meta14,
33
+ meta15,
34
+ ];
35
+
36
+ function createDefinitionProcessor(registry: NSRegistry, inferGenerics: boolean, required: boolean = true) {
37
+ return (definition: NamespaceDefinition) => {
38
+ const { namespace: namespaceName, version, modifier } = definition;
39
+ const namespace = registry.namespace(namespaceName, version);
40
+
41
+ if (namespace) {
42
+ modifier(namespace, inferGenerics);
43
+ return;
44
+ }
45
+
46
+ if (required) {
47
+ throw new Error(`Could not generify ${namespaceName} ${version}`);
48
+ }
49
+ };
50
+ }
51
+
52
+ function applyDefinitions(
53
+ definitions: NamespaceDefinition[],
54
+ processor: (definition: NamespaceDefinition) => void,
55
+ ): void {
56
+ for (const definition of definitions) {
57
+ processor(definition);
58
+ }
59
+ }
60
+
61
+ export function generify(registry: NSRegistry, inferGenerics: boolean): void {
62
+ const processCoreDefinition = createDefinitionProcessor(registry, inferGenerics, true);
63
+ const processOptionalDefinition = createDefinitionProcessor(registry, inferGenerics, false);
64
+
65
+ // Apply core definitions (required)
66
+ applyDefinitions(CORE_DEFINITIONS, processCoreDefinition);
67
+
68
+ // Apply optional definitions
69
+ applyDefinitions(OPTIONAL_DEFINITIONS, processOptionalDefinition);
70
+
71
+ // Register visitor for runtime transformations
72
+ const visitor = new GenericVisitor(inferGenerics);
73
+ registry.registerTransformation(visitor);
74
+ }
@@ -0,0 +1,91 @@
1
+ import type { IntrospectedBaseClass, IntrospectedClassFunction } from "../gir/introspected-classes.ts";
2
+ import type { IntrospectedNamespace } from "../gir/namespace.ts";
3
+ import { AnyType, Generic, GenericType, GenerifiedTypeIdentifier, StringType, TypeIdentifier } from "../gir.ts";
4
+ import type { GioConfig } from "../types/generics-config.ts";
5
+
6
+ function createGioConfig(): GioConfig {
7
+ return {
8
+ namespace: "Gio",
9
+ version: "2.0",
10
+ modifier: (namespace: IntrospectedNamespace) => {
11
+ applyGioGenerics(namespace);
12
+ },
13
+ };
14
+ }
15
+
16
+ function applyGioGenerics(namespace: IntrospectedNamespace): void {
17
+ const GObject = namespace.assertInstalledImport("GObject").assertClass("Object");
18
+
19
+ setupAsyncInitable(namespace, GObject);
20
+ setupListModel(namespace, GObject);
21
+ setupListStore(namespace, GObject);
22
+ setupSettingsValueMethods(namespace);
23
+ }
24
+
25
+ function setupAsyncInitable(namespace: IntrospectedNamespace, GObject: IntrospectedBaseClass): void {
26
+ const AsyncInitable = namespace.getClass("AsyncInitable");
27
+ if (!AsyncInitable) {
28
+ throw new Error("Gio.AsyncInitable not found.");
29
+ }
30
+
31
+ AsyncInitable.addGeneric({
32
+ constraint: GObject.getType(),
33
+ default: GObject.getType(),
34
+ propagate: false,
35
+ });
36
+ }
37
+
38
+ function setupListModel(namespace: IntrospectedNamespace, GObject: IntrospectedBaseClass): void {
39
+ const ListModel = namespace.getClass("ListModel");
40
+ if (!ListModel) {
41
+ throw new Error("Gio.ListModel not found.");
42
+ }
43
+
44
+ ListModel.addGeneric({
45
+ default: GObject.getType(),
46
+ constraint: GObject.getType(),
47
+ });
48
+ }
49
+
50
+ function setupListStore(namespace: IntrospectedNamespace, GObject: IntrospectedBaseClass): void {
51
+ const ListModel = namespace.getClass("ListModel");
52
+ const ListStore = namespace.getClass("ListStore");
53
+
54
+ if (!ListStore) {
55
+ throw new Error("Gio.ListStore not found.");
56
+ }
57
+
58
+ ListStore.addGeneric({
59
+ deriveFrom: ListModel?.getType(),
60
+ default: GObject.getType(),
61
+ constraint: GObject.getType(),
62
+ });
63
+ }
64
+
65
+ function setupSettingsValueMethods(namespace: IntrospectedNamespace): void {
66
+ const Settings = namespace.assertClass("Settings");
67
+ const methodNames = ["get_value", "get_default_value", "get_user_value"];
68
+
69
+ Settings.members = Settings.members.map((member) => {
70
+ if (!methodNames.includes(member.name)) {
71
+ return member;
72
+ }
73
+
74
+ return updateSettingsMethod(member);
75
+ });
76
+ }
77
+
78
+ function updateSettingsMethod(method: IntrospectedClassFunction): IntrospectedClassFunction {
79
+ method.generics.push(new Generic(new GenericType("T"), AnyType, undefined, StringType));
80
+
81
+ const returnType = method.return().deepUnwrap();
82
+ if (returnType instanceof TypeIdentifier && returnType.is("GLib", "Variant")) {
83
+ return method.copy({
84
+ returnType: method.return().rewrap(new GenerifiedTypeIdentifier("Variant", "GLib", [new GenericType("T")])),
85
+ });
86
+ }
87
+
88
+ return method;
89
+ }
90
+
91
+ export default createGioConfig();
@@ -0,0 +1,31 @@
1
+ import type { IntrospectedNamespace } from "../gir/namespace.ts";
2
+ import { AnyType, StringType } from "../gir.ts";
3
+ import type { GlibConfig } from "../types/generics-config.ts";
4
+
5
+ function createGlibConfig(): GlibConfig {
6
+ return {
7
+ namespace: "GLib",
8
+ version: "2.0",
9
+ modifier: (namespace: IntrospectedNamespace) => {
10
+ applyGlibGenerics(namespace);
11
+ },
12
+ };
13
+ }
14
+
15
+ function applyGlibGenerics(namespace: IntrospectedNamespace): void {
16
+ const HashTable = namespace.getClass("HashTable");
17
+
18
+ if (!HashTable) {
19
+ throw new Error("GLib.HashTable not found.");
20
+ }
21
+
22
+ HashTable.addGeneric({
23
+ default: StringType,
24
+ });
25
+
26
+ HashTable.addGeneric({
27
+ default: AnyType,
28
+ });
29
+ }
30
+
31
+ export default createGlibConfig();
@@ -0,0 +1,99 @@
1
+ import type { IntrospectedBaseClass } from "../gir/introspected-classes.ts";
2
+ import type { IntrospectedNamespace } from "../gir/namespace.ts";
3
+ import { Generic, GenericType, GenerifiedTypeIdentifier } from "../gir.ts";
4
+ import type { GtkConfig } from "../types/generics-config.ts";
5
+
6
+ function createGtkConfig(): GtkConfig {
7
+ return {
8
+ namespace: "Gtk",
9
+ version: "4.0",
10
+ modifier: (namespace: IntrospectedNamespace) => {
11
+ applyGtkGenerics(namespace);
12
+ },
13
+ };
14
+ }
15
+
16
+ function applyGtkGenerics(namespace: IntrospectedNamespace): void {
17
+ const classes = getGtkClasses(namespace);
18
+ const GObject = namespace.assertInstalledImport("GObject").assertClass("Object");
19
+
20
+ setupStringListGenerics(classes, GObject);
21
+ updateBindModelMethods(classes, GObject);
22
+ }
23
+
24
+ function getGtkClasses(namespace: IntrospectedNamespace) {
25
+ const requiredClasses = {
26
+ FlowBox: namespace.getClass("FlowBox"),
27
+ ListBox: namespace.getClass("ListBox"),
28
+ StringList: namespace.getClass("StringList"),
29
+ StringObject: namespace.getClass("StringObject"),
30
+ };
31
+
32
+ // Validate required classes exist
33
+ for (const [name, cls] of Object.entries(requiredClasses)) {
34
+ if (!cls) {
35
+ throw new Error(`Gtk.${name} not found.`);
36
+ }
37
+ }
38
+
39
+ return requiredClasses as Record<
40
+ keyof typeof requiredClasses,
41
+ NonNullable<(typeof requiredClasses)[keyof typeof requiredClasses]>
42
+ >;
43
+ }
44
+
45
+ function setupStringListGenerics(classes: ReturnType<typeof getGtkClasses>, GObject: IntrospectedBaseClass): void {
46
+ const { StringList, StringObject } = classes;
47
+
48
+ StringList.addGeneric({
49
+ default: StringObject.getType(),
50
+ constraint: GObject.getType(),
51
+ });
52
+ }
53
+
54
+ function updateBindModelMethods(classes: ReturnType<typeof getGtkClasses>, GObject: IntrospectedBaseClass): void {
55
+ const { FlowBox, ListBox } = classes;
56
+
57
+ const bindModelConfigs = [
58
+ { cls: FlowBox, widgetFuncName: "FlowBoxCreateWidgetFunc" },
59
+ { cls: ListBox, widgetFuncName: "ListBoxCreateWidgetFunc" },
60
+ ];
61
+
62
+ for (const config of bindModelConfigs) {
63
+ updateBindModelMethod(config.cls, config.widgetFuncName, GObject);
64
+ }
65
+ }
66
+
67
+ function updateBindModelMethod(
68
+ cls: IntrospectedBaseClass,
69
+ widgetFuncName: string,
70
+ GObject: IntrospectedBaseClass,
71
+ ): void {
72
+ cls.members = cls.members.map((member) => {
73
+ if (member.name !== "bind_model") {
74
+ return member;
75
+ }
76
+
77
+ member.generics.push(new Generic(new GenericType("A"), GObject.getType(), undefined, GObject.getType()));
78
+
79
+ return member.copy({
80
+ parameters: member.parameters.map((param) => {
81
+ if (param.name === "model") {
82
+ return param.copy({
83
+ type: new GenerifiedTypeIdentifier("ListModel", "Gio", [new GenericType("A")]),
84
+ });
85
+ }
86
+
87
+ if (param.name === "create_widget_func") {
88
+ return param.copy({
89
+ type: new GenerifiedTypeIdentifier(widgetFuncName, "Gtk", [new GenericType("A")]),
90
+ });
91
+ }
92
+
93
+ return param;
94
+ }),
95
+ });
96
+ });
97
+ }
98
+
99
+ export default createGtkConfig();
@@ -0,0 +1,41 @@
1
+ import type { IntrospectedNamespace } from "../gir/namespace.ts";
2
+ import { GenerifiedTypeIdentifier } from "../gir.ts";
3
+ import type { MetaTemplateConfig } from "../types/generics-config.ts";
4
+
5
+ function createMetaTemplate(version: string): MetaTemplateConfig {
6
+ return {
7
+ namespace: "Meta",
8
+ version,
9
+ modifier: (namespace: IntrospectedNamespace, inferGenerics: boolean) => {
10
+ if (!inferGenerics) {
11
+ return;
12
+ }
13
+
14
+ applyMetaGenerics(namespace);
15
+ },
16
+ };
17
+ }
18
+
19
+ function applyMetaGenerics(namespace: IntrospectedNamespace): void {
20
+ // Connect BackgroundActor to BackgroundContent
21
+ const LayoutManager = namespace.assertInstalledImport("Clutter").assertClass("LayoutManager");
22
+ const BackgroundContent = namespace.assertClass("BackgroundContent");
23
+ const BackgroundActor = namespace.assertClass("BackgroundActor");
24
+
25
+ const parent = BackgroundActor.superType;
26
+ if (parent) {
27
+ BackgroundActor.superType = new GenerifiedTypeIdentifier(parent.name, parent.namespace, [
28
+ LayoutManager.getType(),
29
+ BackgroundContent.getType(),
30
+ ]);
31
+ }
32
+ }
33
+
34
+ // Version exports
35
+ export const meta10 = createMetaTemplate("10");
36
+ export const meta11 = createMetaTemplate("11");
37
+ export const meta12 = createMetaTemplate("12");
38
+ export const meta13 = createMetaTemplate("13");
39
+ export const meta14 = createMetaTemplate("14");
40
+ export const meta15 = createMetaTemplate("15");
41
+ export const meta16 = createMetaTemplate("16");
@@ -0,0 +1,197 @@
1
+ import type { IntrospectedNamespace } from "../gir/namespace.ts";
2
+ import { GenericType, GenerifiedTypeIdentifier } from "../gir.ts";
3
+ import type { StTemplateConfig } from "../types/generics-config.ts";
4
+
5
+ function createStTemplate(version: string): StTemplateConfig {
6
+ return {
7
+ namespace: "St",
8
+ version,
9
+ modifier: (namespace: IntrospectedNamespace, inferGenerics: boolean) => {
10
+ if (!inferGenerics) {
11
+ return;
12
+ }
13
+
14
+ applyStGenerics(namespace, version);
15
+ },
16
+ };
17
+ }
18
+
19
+ function applyStGenerics(namespace: IntrospectedNamespace, version: string): void {
20
+ const clutterImport = namespace.assertInstalledImport("Clutter");
21
+ const classes = getStClasses(namespace);
22
+ const clutterClasses = getClutterClasses(clutterImport, version);
23
+
24
+ setupWidgetGenerics(classes, clutterClasses);
25
+ setupViewportGenerics(classes, clutterClasses);
26
+ setupContainerGenerics(classes, clutterClasses, version);
27
+ setupBoxLayout(classes, clutterClasses);
28
+ setupBinGenerics(classes, clutterClasses);
29
+ setupScrollViewMethods(classes);
30
+ }
31
+
32
+ function getStClasses(namespace: IntrospectedNamespace) {
33
+ return {
34
+ Bin: namespace.assertClass("Bin"),
35
+ Button: namespace.assertClass("Button"),
36
+ ScrollView: namespace.assertClass("ScrollView"),
37
+ ScrollBar: namespace.assertClass("ScrollBar"),
38
+ Widget: namespace.assertClass("Widget"),
39
+ Viewport: namespace.assertClass("Viewport"),
40
+ StBoxLayout: namespace.assertClass("BoxLayout"),
41
+ };
42
+ }
43
+
44
+ function getClutterClasses(clutterImport: ReturnType<IntrospectedNamespace["assertInstalledImport"]>, version: string) {
45
+ return {
46
+ Actor: clutterImport.assertClass("Actor"),
47
+ Content: clutterImport.assertClass("Content"),
48
+ Container: Number(version) < 14 ? clutterImport.assertClass("Container") : null,
49
+ LayoutManager: clutterImport.assertClass("LayoutManager"),
50
+ ClutterBoxLayout: clutterImport.assertClass("BoxLayout"),
51
+ };
52
+ }
53
+
54
+ function setupWidgetGenerics(
55
+ stClasses: ReturnType<typeof getStClasses>,
56
+ clutterClasses: ReturnType<typeof getClutterClasses>,
57
+ ): void {
58
+ const { Widget } = stClasses;
59
+ const { Actor, Content, LayoutManager } = clutterClasses;
60
+
61
+ Widget.addGeneric({
62
+ deriveFrom: Actor.getType(),
63
+ default: LayoutManager.getType(),
64
+ constraint: LayoutManager.getType(),
65
+ });
66
+
67
+ Widget.addGeneric({
68
+ deriveFrom: Actor.getType(),
69
+ default: Content.getType(),
70
+ constraint: Content.getType(),
71
+ });
72
+ }
73
+
74
+ function setupViewportGenerics(
75
+ stClasses: ReturnType<typeof getStClasses>,
76
+ clutterClasses: ReturnType<typeof getClutterClasses>,
77
+ ): void {
78
+ const { Viewport, Widget } = stClasses;
79
+ const { Content, LayoutManager } = clutterClasses;
80
+
81
+ Viewport.addGeneric({
82
+ deriveFrom: Widget.getType(),
83
+ default: LayoutManager.getType(),
84
+ constraint: LayoutManager.getType(),
85
+ });
86
+
87
+ Viewport.addGeneric({
88
+ deriveFrom: Widget.getType(),
89
+ default: Content.getType(),
90
+ constraint: Content.getType(),
91
+ });
92
+ }
93
+
94
+ function setupContainerGenerics(
95
+ stClasses: ReturnType<typeof getStClasses>,
96
+ clutterClasses: ReturnType<typeof getClutterClasses>,
97
+ _version: string,
98
+ ): void {
99
+ const { StBoxLayout } = stClasses;
100
+ const { Actor, Container } = clutterClasses;
101
+
102
+ if (!Container) {
103
+ return;
104
+ }
105
+
106
+ Container.addGeneric({
107
+ default: Actor.getType(),
108
+ constraint: Actor.getType(),
109
+ });
110
+
111
+ StBoxLayout.addGeneric({
112
+ deriveFrom: Container.getType(),
113
+ default: Actor.getType(),
114
+ constraint: Actor.getType(),
115
+ });
116
+ }
117
+
118
+ function setupBoxLayout(
119
+ stClasses: ReturnType<typeof getStClasses>,
120
+ clutterClasses: ReturnType<typeof getClutterClasses>,
121
+ ): void {
122
+ const { StBoxLayout } = stClasses;
123
+ const { ClutterBoxLayout } = clutterClasses;
124
+
125
+ if (StBoxLayout.superType) {
126
+ StBoxLayout.superType = new GenerifiedTypeIdentifier(StBoxLayout.superType.name, StBoxLayout.superType.namespace, [
127
+ ClutterBoxLayout.getType(),
128
+ ]);
129
+ }
130
+ }
131
+
132
+ function setupBinGenerics(
133
+ stClasses: ReturnType<typeof getStClasses>,
134
+ clutterClasses: ReturnType<typeof getClutterClasses>,
135
+ ): void {
136
+ const { Bin, Button, ScrollView } = stClasses;
137
+ const { Actor } = clutterClasses;
138
+
139
+ Bin.addGeneric({
140
+ default: Actor.getType(),
141
+ constraint: Actor.getType(),
142
+ });
143
+
144
+ Button.addGeneric({
145
+ deriveFrom: Bin.getType(),
146
+ default: Actor.getType(),
147
+ constraint: Actor.getType(),
148
+ });
149
+
150
+ ScrollView.addGeneric({
151
+ deriveFrom: Bin.getType(),
152
+ default: Actor.getType(),
153
+ constraint: Actor.getType(),
154
+ });
155
+
156
+ // Update Bin child property
157
+ updatePropertyType(Bin, ["child"], new GenericType("A", Actor.getType()));
158
+ }
159
+
160
+ function setupScrollViewMethods(stClasses: ReturnType<typeof getStClasses>): void {
161
+ const { ScrollView, ScrollBar } = stClasses;
162
+
163
+ const methodConfigs = [
164
+ { name: "get_hscroll_bar", returnType: ScrollBar.getType() },
165
+ { name: "get_vscroll_bar", returnType: ScrollBar.getType() },
166
+ ];
167
+
168
+ for (const config of methodConfigs) {
169
+ const method = ScrollView.members.find((member) => member.name === config.name);
170
+ if (method) {
171
+ const fixedMethod = method.copy({ returnType: config.returnType });
172
+ const index = ScrollView.members.indexOf(method);
173
+ ScrollView.members.splice(index, 1, fixedMethod);
174
+ }
175
+ }
176
+ }
177
+
178
+ function updatePropertyType(
179
+ cls: ReturnType<IntrospectedNamespace["assertClass"]>,
180
+ propertyNames: string[],
181
+ newType: GenericType,
182
+ ): void {
183
+ cls.props
184
+ .filter((p) => propertyNames.includes(p.name))
185
+ .forEach((prop) => {
186
+ // TODO: Automatically infer such changes.
187
+ prop.type = newType;
188
+ });
189
+ }
190
+
191
+ // Version exports
192
+ export const st1 = createStTemplate("1.0");
193
+ export const st12 = createStTemplate("12");
194
+ export const st13 = createStTemplate("13");
195
+ export const st14 = createStTemplate("14");
196
+ export const st15 = createStTemplate("15");
197
+ export const st16 = createStTemplate("16");