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

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 +153 -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,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");